.DEFINE EQU = .DEFINE DB .BYTE .DEFINE DW .WORD .CODE PISLOT EQU $00 ;* ;* ACIA REGISTERS ;* ACIADR EQU $C088+PISLOT*16 ACIASR EQU $C089+PISLOT*16 ACIACR EQU $C08A+PISLOT*16 ACIAMR EQU $C08B+PISLOT*16 ;* ;* APPLE I/O LOCATIONS ;* KEYBD EQU $C000 STROBE EQU $C010 ;* ;* UTIL ROUTINES ;* WAIT EQU $FCA8 COUT EQU $FDED CROUT EQU $FD8E PRBYTE EQU $FDDA PRHEX EQU $FDE3 PRNTAX EQU $F941 RDKEY EQU $FD0C RDCHAR EQU $FD35 GETLN EQU $FD6A ;* ;* ZERO PAGE PARAMETERS ;* PDCMD EQU $42 PDUNIT EQU $43 PDBUFF EQU $44 PDBUFL EQU $44 PDBUFH EQU $45 PDBLKL EQU $46 PDBLKH EQU $47 ;* ;* DRIVER SCRATCHPAD ;* TMP EQU $0478+PISLOT PAD0 EQU $0478+PISLOT PAD1 EQU $04F8+PISLOT PAD2 EQU $0578+PISLOT PAD3 EQU $05F8+PISLOT PAD4 EQU $0678+PISLOT PAD5 EQU $06F8+PISLOT PAD6 EQU $0778+PISLOT PAD7 EQU $07F8+PISLOT ;* ;* PRODOS COMMANDS ;* PDSTAT EQU 0 PDREAD EQU 1 PDWRITE EQU 2 PDFORMT EQU 3 ;* ;* PRODOS ERRORS ;* PDNOERR EQU $00 PDIOERR EQU $27 PDNODEV EQU $28 PDWRPRT EQU $2B ;* ;* PRODOS GLOBAL PAGE LOCATIONS ;* PDTIME EQU $BF90 ;* ;* VECTORS ;* ;VECTBL: DB >DOCMD ; DB >DOCLK ; DB >FIXUP1+1 ; DB >FIXUP2+1 ; DB >FIXUP3+1 ; DB >FIXUP4+1 ;TMP: DB 0 ;* ;* PRODOS INTELLIGENT DEVICE ENTRYPOINT ;* DOCMD: LDA PDUNIT ASL LDA PDCMD ROL ASL ORA #$A0 LDX PDBLKL LDY PDBLKH PHP JSR SENDCMD LDY PDCMD BEQ STATUS LDX #$02 ; # OF PAGES TO XFER DEY ; CPY #PDREAD BEQ RDBLK DEY ; CMP #PDWRITE BEQ WRBLK IOERR: LDA #PDIOERR CMDERR: PLP SEC RTS RDBLK: JSR RECVACC STA (PDBUFF),Y INY BNE RDBLK INC PDBUFH DEX BNE RDBLK STATUS: LDX #$FF DEY ; LDY #$FF CMDEX: JSR RECVACC BNE CMDERR PLP CLC RTS WRBLK: LDA (PDBUFF),Y JSR SENDACC INY BNE WRBLK INC PDBUFH DEX BNE WRBLK BEQ CMDEX ;* ;* PRODOS CLOCK ROUTINE ;* ;DOCLK: LDA #$AC ; PHP ; JSR SENDCMD ; LDY #$00 ;CLKLP: JSR RECVACC ; STA PDTIME,Y ; INY ; CPY #$04 ; BNE CLKLP ; PLP ; RTS ;* ;* ACIA I/O ROUTINES ;* SENDCMD: STA TMP SEI JSR SENDACC TXA JSR SENDACC TYA JSR SENDACC CHKACK: JSR RECVACC TAX DEX CPX TMP BNE CHKACK GOTACK: RTS SENDACC: PHA FIXUP1: SENDWT: LDA ACIASR AND #$10 BEQ SENDWT PLA FIXUP2: STA ACIADR RTS RECVACC: FIXUP3: RECVWT: LDA ACIASR AND #$08 BEQ RECVWT FIXUP4: LDA ACIADR RTS