Files
sibo-playground/code/HDK/OSSIBO.INC
T

621 lines
16 KiB
PHP
Raw Normal View History

2026-07-06 18:28:16 +01:00
.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