'******************************************************************************
'* 
'* GENERIC ISA DEVICE v.1.0 (can be used to emulate ISA devices)
'*
'* Can be used in 8/16-bit ISA bus motherboards
'*
'* Supported platform/bus: X86/ISA
'*
'* Version history:
'*  - v.1.0 by WadiM (initial release)
'*
'* S/W Interface (useful tools): 
'*  - DeviceIRQ  - fast get value of device IRQ parameter (integer, <0 - none)
'*  - DeviceDMA  - fast get value of device DMA parameter (integer, <0 - none)
'*  - DevicePORT - fast get value of device PORT parameter (integer, <0 - none)
'*
'* DEVICE Interface (implemented)
'*  - DEV_INIT(stream,EventFreq) - device initialization (boolean result)
'*
'* DEVICE Parameters (introduced)
'*  - DEVPARAM_IRQ as integer ("IRQ")
'*  - DEVPARAM_DMA as integer ("DMA")
'*  - DEVPARAM_PORT as integer ("PORT")
'*
'****************************************************************************** 

//device interface support
public use object DEVICE

//device name
DEVPARAM_NAME="UNKNOWN ISA DEVICE"

//IRQ parameter (less then zero if not assigned - to simplify checks)
protected dim DEVPARAM_IRQ as integer=-1 : DEVPARAMS.Add(DEVPARAM_IRQ,"IRQ") 
DEVPARAMS.Required=false : DEVPARAMS.Configured=false

//DMA parameter (less then zero if not assigned - to simplify checks)
protected dim DEVPARAM_DMA as integer=-1 : DEVPARAMS.Add(DEVPARAM_DMA,"DMA") 
DEVPARAMS.Required=false : DEVPARAMS.Configured=false

//PORT parameter (less then zero if not assigned - to simplify checks)
protected dim DEVPARAM_PORT as integer=-1 : DEVPARAMS.Add(DEVPARAM_PORT,"PORT") 
DEVPARAMS.Required=false : DEVPARAMS.Configured=false

'--------------------------------- S/W Interface ------------------------------

//Get value of device IRQ parameter (<0 - none)
public function DeviceIRQ as integer
 result=DEVPARAM_IRQ
end

//Get value of device DMA parameter (<0 - none)
public function DeviceDMA as integer
 result=DEVPARAM_DMA
end

//Get value of device PORT parameter (<0 - none)
public function DevicePORT as integer
 result=DEVPARAM_PORT
end

'------------------------------- DEVICE Interface -----------------------------

//Device initialization
public function DEV_INIT(stream as object,byref EventFreq as integer) as boolean

 'parent call
 if not DEV_INIT(stream,EventFreq) then exit(false)
 
 'make parameter value less then zero if not configured
 DEVPARAMS.MoveToName("IRQ") 
 if not(DEVPARAMS.Configured) then DEVPARAMS.Value=-1
 DEVPARAMS.MoveToName("DMA") 
 if not(DEVPARAMS.Configured) then DEVPARAMS.Value=-1
 DEVPARAMS.MoveToName("PORT") 
 if not(DEVPARAMS.Configured) then DEVPARAMS.Value=-1

 'success
 result=true
 
end