apple2pi/pidrive/pidriveclock.s

173 lines
2.1 KiB
ArmAsm
Executable File

.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