173 lines
2.1 KiB
ArmAsm
Executable File
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
|