;EASE$$$ READ ONLY COPY of file ÒIOPDefs.aiiÓ ; 1.2 CCH 07/08/1989 Added EASE comments to file. ;¥1.1 GGD 06/15/1989 Updated to use equates for the latest rev of the IOP chip, ; re-formated tab stops in source. ; 1.0 CCH 11/ 9/1988 Adding to EASE. ; END EASE MODIFICATION HISTORY macro assert &boolExpr if not(&Eval(&boolExpr)) then aerror &concat('Assertion Failed - ',&boolExpr) endif endm ; 65C02 definitions pswC equ %00000001 ; carry bit pswZ equ %00000010 ; zero bit pswI equ %00000100 ; interrupt bit pswD equ %00001000 ; decimal bit pswB equ %00010000 ; break bit psw5 equ %00100000 ; bit 5 unused pswV equ %01000000 ; overflow bit pswN equ %10000000 ; negative bit StackPage equ $0100 ; page 1 is the stack vNMI equ $FFFA ; non-maskable interrupt vRESET equ $FFFC ; reset vector vINT equ $FFFE ; interrupt vector ; IOP Hardware offsets IOBase equ $F000 ; base of I/O space ; TIMER Hardware Control TimerCounterL equ IOBase+$10 ; (RW) Timer low counter (latch on write) TimerCounterH equ IOBase+$11 ; (RW) Timer high counter (load on write) TimerLatchL equ IOBase+$12 ; (RW) Timer low latch TimerLatchH equ IOBase+$13 ; (RW) Timer high latch ; DMA Hardware Control DMA1Control equ IOBase+$20 ; (RW) DMA channel 1 control DMAEN1 equ %00000001 ; enable DMA channel 1 DREQ1 equ %00000010 ; DMA request 1 active DMADIR1 equ %00000100 ; transfer I/O to RAM DEN1ON2 equ %00001000 ; start DMA 1 after DMA 2 complete IOA1 equ %00010000 ; DMA I/O address DMA1RAMAddressL equ IOBase+$21 ; (RW) DMA channel 1 RAM address low byte DMA1RAMAddressH equ IOBase+$22 ; (RW) DMA channel 1 RAM address high byte DMA1XferCountL equ IOBase+$23 ; (RW) DMA channel 1 transfer count low byte DMA1XferCountH equ IOBase+$24 ; (RW) DMA channel 1 transfer count high byte DMA2Control equ IOBase+$28 ; (RW) DMA channel 2 control DMAEN2 equ %00000001 ; enable DMA channel 2 DREQ2 equ %00000010 ; DMA request 2 active DMADIR2 equ %00000100 ; transfer I/O to RAM DEN2ON1 equ %00001000 ; start DMA 2 after DMA 1 complete IOA2 equ %00010000 ; DMA I/O address DMA2RAMAddressL equ IOBase+$29 ; (RW) DMA channel 2 RAM address low byte DMA2RAMAddressH equ IOBase+$2A ; (RW) DMA channel 2 RAM address high byte DMA2XferCountL equ IOBase+$2B ; (RW) DMA channel 2 transfer count low byte DMA2XferCountH equ IOBase+$2C ; (RW) DMA channel 2 transfer count high byte ; Miscelaneous Hardware Control SCCControlReg equ IOBase+$30 ; (RW) SCC control register BYPASS equ %00000001 ; Host processor controls SCC/ISM SCCISM equ %00000010 ; ISM port * equ %00000100 ; unused RTXCA equ %00001000 ; selects SCC channel A clock source RTXCB equ %00100000 ; selects SCC channel B clock source GPOUT1 equ %10000000 ; general purpose output 1 RTXC3MHz equ %00 ; 3.6864MHz RTXCDPCLK equ %01 ; DPCLK/10 RTXCDPLLOut equ %10 ; Digital phase locked loop output RTXCGPI equ %11 ; GPIA or GPIB IOControlReg equ IOBase+$31 ; (RW) I/O Control register IODurationCount equ %00000001 ; I/O duration count IODelayCount equ %00010000 ; I/O delay count TimerDPLLctl equ IOBase+$32 ; (RW) Timer/DPLL control CONT equ %00000001 ; timer continuous mode GPOUT0 equ %00000010 ; general purpose output 0 GPIN0 equ %00000100 ; general purpose input 0 GPIN1 equ %00001000 ; general purpose input 1 DPLL1EN equ %00010000 ; DPLL 1 enabled CRSNS1 equ %00100000 ; carrier present on RXDA DPLL2EN equ %01000000 ; DPLL 2 enabled CRSNS2 equ %10000000 ; carrier present on RXDB InterruptMask equ IOBase+$33 ; (RW) Interrupt Mask Register DMA1ENI equ %00000010 ; enable DMA channel 1 interrupts DMA2ENI equ %00000100 ; enable DMA channel 2 interrupts SCCENI equ %00001000 ; enable SCC interrupts HSTENI equ %00010000 ; enable interrupts from the host processor TMRENI equ %00100000 ; enable timer interrupts InterruptReg equ IOBase+$34 ; (RW) Interrupt Register DMA1INT equ %00000010 ; DMA channel 1 interrupt DMA2INT equ %00000100 ; DMA channel 2 interrupt SCCINT equ %00001000 ; SCC interrupt HSTINT equ %00010000 ; interrupt from the host processor TMRINT equ %00100000 ; timer interrupt HostControl equ IOBase+$35 ; (RW) Host Register INTHST0 equ %00000100 ; host interrupt 0 active INTHST1 equ %00001000 ; host interrupt 1 active MsgCompletedINT equ INTHST0 ; indicates message in MessageCompleted state NewMsgSentINT equ INTHST1 ; indicates message in NewMessageSent state ; IOP Shared Memory Addresses RCVMsgBase equ $0200 ; receive message page RCVMsgMax equ RCVMsgBase+$00 ; Highest receive message number RCVMsg1State equ RCVMsgBase+$01 ; receive message 1 state RCVMsg2State equ RCVMsgBase+$02 ; receive message 2 state RCVMsg3State equ RCVMsgBase+$03 ; receive message 3 state RCVMsg4State equ RCVMsgBase+$04 ; receive message 4 state RCVMsg5State equ RCVMsgBase+$05 ; receive message 5 state RCVMsg6State equ RCVMsgBase+$06 ; receive message 6 state RCVMsg7State equ RCVMsgBase+$07 ; receive message 7 state PatchReq equ RCVMsgBase+$1F ; Host wants to patch IOP code RCVMsg1Data equ RCVMsgBase+$20 ; receive message 1 data RCVMsg2Data equ RCVMsgBase+$40 ; receive message 2 data RCVMsg3Data equ RCVMsgBase+$60 ; receive message 3 data RCVMsg4Data equ RCVMsgBase+$80 ; receive message 4 data RCVMsg5Data equ RCVMsgBase+$A0 ; receive message 5 data RCVMsg6Data equ RCVMsgBase+$C0 ; receive message 6 data RCVMsg7Data equ RCVMsgBase+$E0 ; receive message 7 data XMTMsgBase equ $0300 ; transmit message page XMTMsgMax equ XMTMsgBase+$00 ; Highest transmit message number XMTMsg1State equ XMTMsgBase+$01 ; transmit message 1 state XMTMsg2State equ XMTMsgBase+$02 ; transmit message 2 state XMTMsg3State equ XMTMsgBase+$03 ; transmit message 3 state XMTMsg4State equ XMTMsgBase+$04 ; transmit message 4 state XMTMsg5State equ XMTMsgBase+$05 ; transmit message 5 state XMTMsg6State equ XMTMsgBase+$06 ; transmit message 6 state XMTMsg7State equ XMTMsgBase+$07 ; transmit message 7 state Alive equ XMTMsgBase+$1F ; IOP is alive flag XMTMsg1Data equ XMTMsgBase+$20 ; transmit message 1 data XMTMsg2Data equ XMTMsgBase+$40 ; transmit message 2 data XMTMsg3Data equ XMTMsgBase+$60 ; transmit message 3 data XMTMsg4Data equ XMTMsgBase+$80 ; transmit message 4 data XMTMsg5Data equ XMTMsgBase+$A0 ; transmit message 5 data XMTMsg6Data equ XMTMsgBase+$C0 ; transmit message 6 data XMTMsg7Data equ XMTMsgBase+$E0 ; transmit message 7 data ; IOP Message States Idle equ 0 ; message buffer idle NewMessageSent equ 1 ; new message arrived MessageReceived equ 2 ; message being processed MessageCompleted equ 3 ; request completed ; Block Copy Message Assignments BCxmtState equ XMTMsg1State BCxmtData equ XMTMsg1Data ; Block Copy Driver request format bcIOPtoHOST equ $00 bcHOSTtoIOP equ $01 bcCompare equ $02 bcReqCmd equ BCxmtData+$00 ; (byte) Request Kind bcReqByteCount equ BCxmtData+$02 ; (word) transfer byte count bcReqHostAddr equ BCxmtData+$04 ; (long) host RAM address bcReqIopAddr equ BCxmtData+$08 ; (word) IOP RAM address bcReqCompRel equ BCxmtData+$0A ; (byte) Compare Relation (output) ; TMPB Time constants (1 tick = 256 clocks @1.9584MHz = 130.71895 uSec) TMPB1second equ 7650 ; 1 second TMPB100ms equ TMPB1second/10 ; 100 milliseconds TMPB10ms equ TMPB1second/100 ; 10 milliseconds TMPB1ms equ TMPB1second/1000 ; 1 millisecond