        .xlist
; Include file - OSSIBO.INC
; Epoc/Os Sibo include file.
; Copyright (c) Psion PLC 1989-90.
;
;  VER    DATE    BY  DESCRIPTION
; ----- -------- ---- -----------
; 2.00F 30/09/90 NSM  Final release
;
NoNullFrames		equ	1
;
if	Asic1
A1Ent	struc
A1Dummy			dw	?
A1Control		dw	?
A1LcdSize		dw	?
A1LcdControl		dw	?
A1InterruptMask		dw	?
A1NonSpecificEoi	dw	?
A1TimerEoi		dw	?
A1FrcEoi		dw	?
A1ResetWatchDog		dw	?
A1FrcControl		dw	?
A1ProtectionOn		dw	?
A1ProtectionUpper	dw	?
A1ProtectionLower	dw	?
A1SoundLsw		dw	?
A1SoundMsw		dw	?
A1SoundControl		dw	?
A1Ent ends
;
A1Status		equ	A1Control
A1ProtectionOff		equ	A1ProtectionOn
A1InterruptStatus	equ	A1LcdControl
;
A1StatusR record LcdData:2,Rtc4Hz:1,SldMsw:1,ComboBusy:1,Rtc32Hz:1,ExternalNmi:1,WatchDogNmi:1,SldTx:1,A1SldEnable:1,LcdEnable:1,Ram512:1,Ram128:1,FrcSource:1,TickRate:1,FrcMode:1
A1LcdSizeR record LcdMLineEnable:1,LcdNumberOfPixels:5,LcdEndOfFrame:10
A1LcdControlR record LcdMode:2,LcdMLineRate:5,LcdRate:5
A1InterruptMaskR record SldTransmit:1,SldReceive:1,FrcExpired:1,Asic2Int:1,ExpIntLeftA:1,ExpIntRightB:1,Mains:1,Timer:1
ExpAddressLeftA		equ	0200h
ExpAddressRightB	equ	0100h
ExpChannelLeftA		equ	SelectChannel6
ExpChannelRightB	equ	SelectChannel5
;
; Asic1 dependent constants
;
ResetWatchDog		equ	A1ResetWatchDog
;
A2Ent struc
A2Dummy			db	080h dup(?)
A2Index			dw	?
A2Control		dw	?
A2Control1		dw	?
A2Control2		dw	?
A2Control3		dw	?
A2SerialData		dw	?
A2SerialControl		dw	?
A2ChannelControl	dw	?
A2Ent ends
;
A2External		equ	A2Control1
A2InterruptStatus	equ	A2Control2
A2Status		equ	A2Control3
A2KeyData		equ	A2SerialControl
A2SlaveData		equ	A2ChannelControl
A2IControl0		equ	0
A2IControl1		equ	1
A2IWrite		equ	2
A2IDDR			equ	3
;
A2InterruptStatusR record SlaveDataOverrun:1,SlaveDataControl:1,SlaveDataValid:1,ExpansionInterrupt:1,DoorInterrupt:1
A2StatusR record A2RevId:1,A2XExt:1,A2Sdis:1,SerialBusy:1,SerialClockState:1,A1ResetFlag:1,WakeUp:1,A1OnKey:1
A2Control1R record SerialClockRate:2,KeyScan:4
A2Control2R record ClockEnable7:1,ClockEnable6:1,ClockEnable5:1,BuzzerMode:1,BuzzerVolume:1,BuzzerToggle:1,XySwitch:1,DigitizerEnable:1
A2Control3R record ElEnable:1,VhControl:1,ExpansionEnable:1,DoorEnable:1,SerialEnable:1,A2SldEnable:1,Ps34Acknowledge:1,SerialNull:1
A2ChannelControlR record MultiplexEnable:1,ChannelSelect:3,Pack4Enable:1,Pack3Enable:1,Pack2Enable:1,Pack1Enable:1
;
ClockRateSlow		equ	2
ClockRateMedium		equ	0
ClockRateFast		equ	3
SelectChannel0		equ	(4 shl ChannelSelect)
SelectChannel1		equ	(mask Pack1Enable)
SelectChannel2		equ	(mask Pack2Enable)
SelectChannel3		equ	(mask Pack3Enable)
SelectChannel4		equ	(mask Pack4Enable)
SelectChannel5		equ	(5 shl ChannelSelect)
SelectChannel6		equ	(6 shl ChannelSelect)
SelectChannel7		equ	(7 shl ChannelSelect)
;
SCONTOUT macro
	out	A2SerialControl, al
	endm
;
SDATAOUT macro
	out	A2SerialData, al
	endm
;
SDATAIN macro
	in	al, A2SerialData
	endm
;
SBUSY	macro
        wait
	endm
;
SREAD	macro _REG
	mov	al, SerialReadSingle or _REG
	out	A2SerialControl, al
	nop
	SBUSY
	in	al, A2SerialData
	endm
;
SREADM	macro _REG
	mov	al, SerialReadMulti or _REG
	out	A2SerialControl, al
	nop
	SBUSY
	in	al, A2SerialData
	endm
;
SWRITE	macro _REG,_VAL
	mov	al, SerialWriteSingle or _REG
	out	A2SerialControl, al
	SBUSY
	mov	al, _VAL
	out	A2SerialData, al
	endm
;
SWRITEM macro _REG,_VAL
	mov	al, SerialWriteMulti or _REG
	out	A2SerialControl, al
	SBUSY
	mov	al, _VAL
	out	A2SerialData, al
	endm
;
SETSPEED macro _SPEED
	pushf
	cli
	mov	al, OsA2Control1
	and	al, not mask SerialClockRate
  ifidni <_SPEED>,<FAST>
	or	al, ClockRateFast shl SerialClockRate
  endif
  ifidni <_SPEED>,<NORMAL>
	or	al, ClockRateMedium shl SerialClockRate
  endif
  ifidni <_SPEED>,<SLOW>
	or	al, ClockRateSlow shl SerialClockRate
  endif
	mov	OsA2Control1, al
	out	A2Control1, al
	popf
	endm
;
  if	LapTop
XPUSHFCLI macro
	pushf
	cli
	endm
XPOPF	macro
	popf
	endm
  else
XPUSHFCLI macro
	endm
XPOPF	macro
	endm
  endif
;
XNOP	macro
	endm
;
@HwNullFrame macro
	call	OsHwNullFrame
        endm
;
A3Ent struc
A3Adc			db	?
A3Control1		db	?
A3Setup			db	?
A3Control2		db	?
A3Dummy1		db	3 dup (?)
A3Control3		db	?
A3Dummy2		db	5 dup (?)
A3Status		db	?
A3Dummy3		db	?
A3Ent ends
;
A3AdcLsbR record InvertedBit:1,OtherBits:7
A3AdcMsbR record Polarity:1,Overrange:1,AdcBits:4
A3Control1R record Vcc5Enable:1,Vcc4Enable:1,Vcc3Enable:1,DtoaBits:5
A3Control2R record AnalogueMultiplex:2,VhSoftStart:1,Vee2SoftStart:1,Vee1SoftStart:1,VhEnable:1,Vee2Enable:1,Vee1Enable:1
A3Control3R record AdcReadHighEnable:1,OffEnable:1,xDummy1:1
Ps34ControlR record Ps34Vcc3:1,xDummy2:1,Ps34Vcc4:1,xDummy3:1,Ps34Vcc5:1,xDummy4:3
;
AdcDigitizer		equ	0
AdcVh			equ	1
AdcMainBattery		equ	2
AdcLithiumBattery	equ	3
A3SetupValue		equ	2
A3SelectId		equ	(SerialSelect or Asic5NormalId)
A3InfoByte		equ	080h
;
Vee1SoftStartDelay	equ	(30*128)
Vee2SoftStartDelay	equ	(30*128)
VhSoftStartDelay	equ	(100*128)
Vee1OffDelay		equ	(100*128)
Vee2OffDelay		equ	(100*128)
VhOffDelay		equ	(100*128)
Vcc3Delay		equ	(25*128)
Vcc4Delay		equ	(25*128)
Vcc5Delay		equ	(25*128)
Vcc4OffFrames		equ	(25)
Vcc1_4To5Delay		equ	(3)  ; Pan only in ms.
Vcc1_4to5OffFrames	equ	(20) ; Gives 392 frames = 6.0 ms
Vcc1_4to5OnTime		equ	4    ; Gives 4 ms
;
PS34R_ADC	equ	0
PS34R_STATUS	equ	1
PS34W_CONTROL	equ	0
PS34W_DTOA	equ	1
PS34W_OFF	equ	0eh
;
PS34STATR record pPowerFail:1,pColdStart:1,pVhready:1,pPenup:1,pNc:1,pAdmsb:3
PS34CONTR record pVcc3:1,pVee1:1,pVcc4:1,pVee2:1,pVcc5:1,pVh:1,pVhpower:2
PS34DTOAR record pNcc:1,pAdcsel:2,pDac:5
;
ADCSEL_ADCIN	equ	0
ADCSEL_VIN	equ	1
ADCSEL_VH	equ	2
ADCSEL_VBATT	equ	3
;
VHP1TO8		equ	0
VHP1TO4		equ	1
VHP1TO2		equ	2
VHP1TO1		equ	3
;
PPowerControl	equ	0100h
PPowerControlR	record	PVcc5Enable:1,PSoundEnable:1,PVee1Enable:1,PDropVoltage:1,PDac:4
PPia		record	PSoundVol:2,PClearCold:1,PDcPresent:1,PColdFlag:1,PLithiumWarn:1,PVinWarn:1
PSoundControl	equ	0200h
endif
;
A3StatusR record PowerFail:1,ColdStart:1
AIntfR    record ResetFlag:1,DummyWakeUp:1,OnKey:1
if	Asic1
  if	((mask ResetFlag) ne (mask A1ResetFlag)) or \
	((mask OnKey) ne (mask A1OnKey))
	.err	Reset or OnKey flags are not equal
  endif
endif
;
SerialWriteSingle	equ	10000000b
SerialWriteMulti	equ	10010000b
SerialReadSingle	equ	11000000b
SerialReadMulti		equ	11010000b
SerialReset		equ	00000000b
SerialSelect		equ	01000000b
;
Asic4Id			equ	006h
Asic5PackId		equ	002h
Asic5NormalId		equ	003h
Asic6Id			equ	004h
Asic8Id			equ	005h
Asic2SlaveId		equ	01fh
;
; Asic5 info byte structure
;
A5InfoByteR record A5TTL:1,A5Modem:1,A5MultiDrop:1,A5Barcode:1,A5Other:2,A5Parallel:1,A5Rs232:1
A5OtherRom	equ	(1 shl A5Other)
A5OtherMCRTTL	equ	(3 shl A5Other)
A5MCR		equ	(2 shl A5Other)
;
if	Consumer
  if	S3b
DefaultLcdContrast	equ	9
  else
DefaultLcdContrast	equ	7
  endif
else
if	S3c
DefaultLcdContrast	equ	9
else
DefaultLcdContrast	equ	15
endif
endif
;
InterruptBase		equ	078h
;
if	Asic9
KeyPollColumns        	equ	8
else
KeyPollColumns        	equ	10
endif
KeyInitialDelay		equ	24
if	Consumer or S3c
KeyRepeatDelay		equ	2
else
KeyRepeatDelay		equ	4
endif
PenUpDelay		equ	16
MouseDownDelay		equ	8
KeySettleDelay		equ	24
KeyCntrlMask		equ	00000001b
KeyLeftShiftMask	equ	00000010b
KeyPsionMask		equ	00000100b
KeyCapsMask		equ	00001000b
KeyRightShiftMask	equ	00010000b
DigitizerRowMask	equ	00010000b
PsionScanCode		equ 	6
CapsScanCode		equ	5
PsionUpScanCode		equ	65
;
PostRomTest		equ	010h
PostSystemRamTest	equ	020h
PostVideoRamTest	equ	030h
PostComplete		equ	0f0h
if	Consumer or S3c
PostPort		equ	0h
else
PostPort		equ	01ffh
endif
;
if	HandHeld
	VideoRamSegment		equ	00040h
	VideoRamBase		equ	00000h
  if	Corporate
	VideoRamWords		equ	00320h
  else
    if	S3b
	VideoRamWords		equ	02580h
    else
      if S3c
	VideoRamWords		equ	00C80h
      else
	VideoRamWords		equ	00500h
      endif
    endif
  endif
else
	VideoRamSegment		equ	0b800h
	VideoRamBase		equ	00000h
	VideoRamWords		equ	04000h
endif
;
CalSeg		equ	0fffeh
CalEnt	struc
CalVsupCLsw	dw	?
CalVsupCMsw	dw	?
CalVsupM	dw	?
CalVlthCLsw	dw	?
CalVlthCMsw	dw	?
CalVlthM	dw	?
CalType		dw	?
CalEnt	ends
;
CHKeyDataR record CHInSled:1,CHMains:1,CHDummy:2
;
IntBXHw		equ	-2
;
if	Asic9
A9WControlRW		equ	0002h
  A9RControl record	A9MFrc2Is512KHzOr1KHz:1,A9MFrc2PreScale:1,\
    			A9MFrc1Is512KHzOr1Hz:1,A9MFrc1PreScale:1,\
    			A9MSoundEnable:1,A9MLcdEnable:1,\
    			A9MLowBatNMIEnable:1,A9MDoorNMIEnable:1,\
    			A9MZeroIsGrayMode:1,A9MArmStandBy:1,\
    			A9MDisableDMADivide:1,A9MRamDeviceSize:2,\
    			A9MDisableMemWait:1,A9MDisableIoWait:1,\
    			A9MDisableClockDivide:1
  A9VRam256KBits	equ	(0 shl A9MRamDeviceSize)
  A9VRam1MBits		equ	(1 shl A9MRamDeviceSize)
  A9VRam4MBits		equ	(2 shl A9MRamDeviceSize)
  A9VRam16MBits		equ	(3 shl A9MRamDeviceSize)
  A9XRamDeviceSizeMask	equ	(3 shl A9MRamDeviceSize)
A9WStatusR		equ	0004h
  A9RStatus record	A9MCold:1,A9MPowerFail:1,\
    			A9MReset:1,A9MNoBattery:1,\
    			A9MFifoFull:1,A9MSlaveOverrun:1,\
    			A9MSlaveControlFrame:1,A9MSlaveDataValid:1,\
    			A9MKeyboard:1,A9MSlaveClock:1,\
    			A9MMainsPresent:1,A9MDoorSwitch:1,\
    			A9MLowBatNMI:1,A9MDoorNMI:1,\
    			A9MProtectedModeNMI:1,A9MWatchDogNMI:1
  A9MLcdType		equ	8
  A9XLcdType		equ	0000111100000000b
A9WLcdSizeW		equ	0004h
  A9RLcdSize record	A9MLcdLineLength:5,A9MLcdNumberOfPixels:11
A9WLcdControlW		equ	0006h
  A9RLcdControl record	A9MLcdMode:2,A9MLcdACLineRate:5,A9MLcdPixelRate:5
  A9VSinglePage1	equ	(0 shl A9MLcdMode)
  A9VSinglePage2	equ	(1 shl A9MLcdMode)
  A9VSinglePage1And2	equ	(2 shl A9MLcdMode)
  A9VDualPage1And2	equ	(3 shl A9MLcdMode)
A9BInterruptStatusR	equ	0006h
A9BInterruptMaskRW	equ	0008h
  A9RInterrupts record	A9MFrc2:1,A9MFrc1:1,\
    			A9MExpIntB:1,A9MExpIntA:1,A9MExpIntC:1,\
    			A9MSlave:1,A9MTimer:1,A9MSound:1
A9BNmiClearW		equ	0009h
A9BNonSpecificEoiW	equ	000ah
A9BStartFlagClearW	equ	000bh
A9BTimerEoiW		equ	000ch
A9BSerialSlaveEoiW	equ	000dh
A9BFrc1EoiW		equ	000eh
A9BFrc2EoiW		equ	000fh
A9WResetWatchDogW	equ	0010h
A9WFrc1DataRW		equ	0012h
A9BProtectionOnW	equ	0014h
A9BProtectionOffR	equ	0014h
A9BProtectionOffW	equ	0015h
A9WProtectionUpperW	equ	0016h
A9WProtectionLowerW	equ	0018h
A9BSoundDataRW		equ	001ah
A9BSoundEoiW		equ	001ch
A9WFrc2DataRW		equ	001eh
A9WPortABDataRW		equ	0020h
if	S3b
  A9RPortABData record  A9MKeyId0:1,A9MSleepDoorNmiDisabled:1,\
    			A9MBatLevel2:1,A9MBatLevel1:1,A9MLiBatLevel:1,\
    			A9MKeyRow:11
endif
if	S3c
  A9RPortABData record  A9MKeyIdX2:1,A9MNiCdDetect:1,\
    			A9MBatLevel2:1,A9MBatLevel1:1,A9MLiBatLevel:1,\
    			A9MKeyIdX1:1,A9MKeyIdX0:0,A9MKeyRowX8:1,\
    			A9MCradle:1,A9MKeyRowX:7
endif
A9BPortADataRW		equ	0020h
A9BPortBDataRW		equ	0021h
A9WPortABDDRRW		equ	0022h
  A9VPortABDDR		equ	0000000000000000b
A9BPortADDRRW		equ	0022h
A9BPortBDDRRW		equ	0023h
A9WPortCDDataRW		equ	0024h
if	S3b
  A9RPortCDData record	A9MVccPacksEnable:1,A9MCodecEnable:1,\
    			A9MVccLcdEnable:1,A9MLcdPanelEnable:1,\
    			A9MLcdContrast:4,A9MVolume:2,\
    			A9MReproEnable:1,A9MAltDoorNMIEnable:1,\
    			A9MAmplifierEnable:1,A9MKeyIdEnable:1,\
    			A9MKeyId2:1,A9MKeyId1:1
  A9VVolumeLow		equ	(mask A9MVolume)
  A9VPortCDData		equ	0000111100000000b
  A9VPortCDDDR		equ	not (1111000011111100b)
endif
if	S3c
  A9RPortCDData record	A9MVccPacksEnable:1,A9MCodecEnable:1,\
    			A9MVccLcdEnable:1,A9MLcdPanelEnable:1,\
    			A9MLcdContrast:4,A9MVolume:2,\
    			A9MReproEnable:1,A9MAltDoorNMIEnable:1,\
    			A9MAmplifierEnable:1,A9MKeyIdEnable:1,\
    			A9MBuzVolX:1,A9MBacklightEnableX:1
  A9VVolumeLow		equ	(mask A9MVolume)
  A9VPortCDData		equ	0000111100000000b
  A9VPortCDDDR		equ	not (1111000011111111b)
endif
A9BPortCDataRW		equ	0024h
A9BPortDDataRW		equ	0025h
A9WPortCDDDRRW		equ	0026h
A9BPortCDDRRW		equ	0026h
A9BPortDDDRRW		equ	0027h
A9BPageSelect6000RW	equ	0028h
A9BPageSelect7000RW	equ	0029h
A9BPageSelect8000RW	equ	002ah
A9BPageSelect9000RW	equ	002bh
A9WControlExtraRW	equ	002ch
  A9RControlExtraRW record A9MSlaveIntEnable:1,A9MClkDiv:2,\
    			A9MClockEnable5:1,A9MClockEnable4:1,\
    			A9MClockEnable3:1,A9MClockEnable2:1,\
    			A9MClockEnable1:1,A9MSoundDir:1,\
    			A9MExonDisable:1,A9MBuzzFromFrc1OrTog:1,\
    			A9MBuzzTog:1,A9MKeyCol:4
  A9VKeyColHigh		equ	0
  A9VKeyColLow		equ	1
  A9VKeyCol0		equ	8
  A9VClkDiv1		equ	(3 shl A9MClkDiv)
  A9VClkDiv2		equ	(2 shl A9MClkDiv)
  A9VClkDiv3		equ	(1 shl A9MClkDiv)
  A9VClkDiv4		equ	(0 shl A9MClkDiv)
A9WPumpControlRW	equ	002eh
  A9RPumpControl record A9MVhPumpDc:4,A9MVhPumpBat:4,\
    			A9MLcdPump:4,A9MPump2:4
  A9VVhPumpBat		equ	(14 shl A9MVhPumpBat)
  A9VVhPumpBatSoft	equ	(4 shl A9MVhPumpBat)
  A9VVhPumpBatMedium	equ	(8 shl A9MVhPumpBat)
  A9VVhPumpDC		equ	(2 shl A9MVhPumpDc)
  A9VVhPumpDCSoft	equ	(1 shl A9MVhPumpDc)
  A9VLcdPump		equ	(7 shl A9MLcdPump)
  A9VLcdPumpSoft	equ	(1 shl A9MLcdPump)
  A9VPacksPumpSoft	equ	(15 shl A9MPump2)
  A9VVhPumpDelay	equ	100	; Milliseconds
  A9VLcdPumpDelay	equ	5	; Milliseconds
  A9VCC3OnDelay		equ	1	; Milliseconds
  A9VCCPacksDelay	equ	20	; Milliseconds    
  A9VCC2Delay		equ	10	; Milliseconds
A9WRtcLSWRW		equ	0080h
A9WRtcMSWRW		equ	0082h
A9WNullFrameW		equ	0084h
A9BSlaveDataR		equ	0088h
A9BSerialDataRW		equ	008ah
A9BSerialControlW	equ	008ch
A9BChannelSelectRW	equ	008eh
  A9RChannelSelect record A9MMultiplexEnable:1,A9MSerialClockRate:2,\
    			A9MPack5Enable:1,A9MPack4Enable:1,\
    			A9MPack3Enable:1,A9MPack2Enable:1,\
    			A9MPack1Enable:1
  A9VSClkRateMedium	equ	(0 shl A9MSerialClockRate)
  A9VSClkRateSpecial	equ	(1 shl A9MSerialClockRate)
  A9VSClkRateSlow	equ	(2 shl A9MSerialClockRate)
  A9VSClkRateFast	equ	(3 shl A9MSerialClockRate)
;
; Asic9 Dependent constants
;
ResetWatchDog		equ	A9WResetWatchDogW
SelectChannel1		equ	(mask A9MPack1Enable)
SelectChannel2		equ	(mask A9MPack2Enable)
SelectChannel3		equ	(mask A9MPack3Enable)
SelectChannel4		equ	(mask A9MPack4Enable)
SelectChannel5		equ	(mask A9MPack5Enable)
;
; Current usage values
;
IdleCurrent		equ	23
RunCurrent		equ	51
Asic5SerialCurrent	equ	54
Flash1ProgramCurrent	equ	76
Flash2ProgramCurrent	equ	99
Flash1EraseCurrent	equ	94
Flash2EraseCurrent	equ	129
;
; We add 26 because most of the work is under the NULL process.
; The value is 26 and not 28 because 10% of the time we are
; under the sound server.
;
SoundCurrentPlayV3	equ	(25+20)
SoundCurrentPlayV2	equ	(30+20)
SoundCurrentPlayV1	equ	(55+20)
SoundCurrentPlayV0	equ	(120+20)
;
; The value here must never equal one of the play values.
; It won't anyway in practise so this is not a big deal.
;
SoundCurrentRecord	equ	5
;
SCONTOUT macro
	out	A9BSerialControlW, al
	endm
;
SDATAOUT macro
	out	A9BSerialDataRW, al
	endm
;
SDATAIN macro
	in	al, A9BSerialDataRW
	endm
;
SBUSY	macro
	endm
;
SREAD	macro _REG
	mov	al, SerialReadSingle or _REG
	out	A9BSerialControlW, al
	in	al, A9BSerialDataRW
	endm
;
SREADM	macro _REG
	mov	al, SerialReadMulti or _REG
	out	A9BSerialControlW, al
	in	al, A9BSerialDataRW
	endm
;
SWRITE	macro _REG,_VAL
	mov	al, SerialWriteSingle or _REG
	out	A9BSerialControlW, al
	mov	al, _VAL
	out	A9BSerialDataRW, al
	endm
;
SWRITEM macro _REG,_VAL
	mov	al, SerialWriteMulti or _REG
	out	A9BSerialControlW, al
	mov	al, _VAL
	out	A9BSerialDataRW, al
	endm
;
SETSPEED macro _SPEED
	pushf
	cli
	in	al, A9BChannelSelectRW
	and	al, not (mask A9MSerialClockRate)
  ifidni <_SPEED>,<FAST>
	or	al, A9VSClkRateFast
  endif
  ifidni <_SPEED>,<NORMAL>
	or	al, A9VSClkRateMedium
  endif
  ifidni <_SPEED>,<SLOW>
	or	al, A9VSClkRateSlow
  endif
	out	A9BChannelSelectRW, al
	popf
	endm
;
XPUSHFCLI macro
	endm
XPOPF	macro
	endm
XNOP	macro
	endm
;
@HwNullFrame macro
	out	A9WNullFrameW, ax
        endm
endif
;
	.list

