apple2pi/pidrive/rom.s

173 lines
2.1 KiB
ArmAsm
Executable File

.DEFINE EQU =
.CODE
PISLOT EQU $05
;*
;* 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
;*
;* 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
;*
;* AUTOSTART BOOT SIGNATURE
;*
LDX #$20
LDY #$00
LDX #$03
STX $3C
;*
;* INIT ACIA
;*
STY ACIASR ; RESET STATUS REGISTER
LDY #$0B
STY ACIACR ; SET CONTROL REGISTER
LDY #$10
STY ACIAMR ; SET COMMAND REGISTER (115K BAUD)
;*
;* SYNC WITH HOST
;*
SYNC: LDA #$80
STA ACIADR
LDA #$FF
JSR WAIT
LDA KEYBD
BMI SKIPBOOT
LDA ACIASR
AND #$08
BEQ SYNC
LDA ACIADR
CMP #$81
BNE SYNC
BEQ BOOT
SKIPBOOT: STA STROBE
JMP $FABA ; JUMP BACK TO BOOT SCANNER ROM ROUTINE
;*
;* CREATE COMMAND BUFFER FOR BOOT BLOCK
;*
BOOT: LDA #PDREAD
STA PDCMD
LDA #$00
STA PDUNIT
STA PDBUFL
STA PDBLKL
STA PDBLKH
PHA
LDA #$08
STA PDBUFH
PHA
;*
;* PRODOS INTELLIGENT DEVICE ENTRYPOINT
;*
DOCMD: PHP
SEI
LDA PDUNIT
ASL
LDA PDCMD
ROL
ASL
JSR SENDACC
LDA PDBLKL
JSR SENDACC
LDA PDBLKH
JSR SENDACC
CHKACK: JSR RECVACC
TAX
DEX
CPX PDCMD
BNE CHKACK
LDY #$00
CPX #PDREAD
BEQ RDBLK
CPX #PDWRITE
BEQ WRBLK
CPX #PDSTAT
BEQ STATDEV
LDA #PDIOERR
CMDERR: PLP
SEC
RTS
STATDEV:
LDX #$FF
LDY #$FF
CMDEX: JSR RECVACC
BNE CMDERR
PLP
CLC
RTS
RDBLK:
RD1BLK: JSR RECVACC
STA (PDBUFF),Y
INY
BNE RD1BLK
INC PDBUFH
RD2BLK: JSR RECVACC
STA (PDBUFF),Y
INY
BNE RD2BLK
BEQ CMDEX
WRBLK:
WR1BLK: LDA (PDBUFF),Y
JSR SENDACC
INY
BNE WR1BLK
INC PDBUFH
WR2BLK: LDA (PDBUFF),Y
JSR SENDACC
INY
BNE WR1BLK
BEQ CMDEX
SENDACC:
PHA
SENDWT: LDA ACIASR
AND #$10
BEQ SENDWT
PLA
STA ACIADR
RTS
RECVACC:
RECVWT: LDA ACIASR
AND #$08
BEQ RECVWT
LDA ACIADR
RTS