mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-27 12:22:34 +00:00
201 lines
2.5 KiB
Plaintext
201 lines
2.5 KiB
Plaintext
PAGE
|
|
SBTTL "--- FAST DISK READ: CBM64 ---"
|
|
|
|
; --------------
|
|
; INIT FAST READ
|
|
; --------------
|
|
|
|
FINIT: LDA #2
|
|
TAY
|
|
LDX #8
|
|
JSR SETLFS
|
|
LDA #2
|
|
LDX #LOW DNAME
|
|
LDY #HIGH DNAME
|
|
JSR SETNAM
|
|
JSR OPEN
|
|
|
|
LDX #15
|
|
JSR CHKOUT
|
|
|
|
LDY #9 ; SEND "U1:2,0,1,1"
|
|
FNT0: LDA DCMND,Y
|
|
JSR CHROUT
|
|
DEY
|
|
BPL FNT0
|
|
|
|
JSR CLRCHN ; RESET CHANNEL
|
|
LDX #15
|
|
JSR CHKOUT
|
|
|
|
LDA #'U' ; SEND "U3" COMMAND
|
|
JSR CHROUT
|
|
LDA #'3'
|
|
JSR CHROUT
|
|
|
|
LDA #$FF
|
|
STA FASTEN ; SET "FAST-READ ENABLED" FLAG
|
|
JMP CLRCHN ; CLEAR & RETURN
|
|
|
|
DNAME: DB "#2"
|
|
|
|
DCMND: DB "1,1,0,2:1U"
|
|
|
|
; ----------------------
|
|
; FAST-READ A DISK BLOCK
|
|
; ----------------------
|
|
|
|
; ENTRY: TARGET TRACK IN [TRACK]
|
|
; TARGET SECTOR IN [SECTOR]
|
|
; EXIT: DATA IN [IOBUFF]
|
|
|
|
DOFAST: LDA TRACK ; SPECIFY
|
|
JSR SNDBYT ; TRACK &
|
|
LDA SECTOR ; SECTOR TO READ
|
|
JSR SNDBYT
|
|
|
|
LDA #0
|
|
STA FINDEX ; INIT LOOP INDEX
|
|
|
|
DFST1: JSR ZOOM ; GET A BYTE FROM DISK
|
|
LDY FINDEX
|
|
STA IOBUFF,Y ; MOVE TO [IOBUFF]
|
|
INC FINDEX
|
|
BNE DFST1 ; FILL THE BUFFER
|
|
CLC
|
|
RTS
|
|
|
|
; -------------------
|
|
; DISENGAGE FAST-READ
|
|
; -------------------
|
|
|
|
FOFF: LDA #0
|
|
STA FASTEN ; CLEAR "FAST-READ ENABLED" FLAG
|
|
JSR SNDBYT ; SEND "TRACK 0"
|
|
LDA #8
|
|
JSR DOPEN ; CLOSE & OPEN BOOT DRIVE
|
|
JSR AOPEN ; OPEN DATA CHANNEL
|
|
|
|
LDX #15
|
|
JSR CHKOUT ; OUTPUT TO COMMAND CHANNEL
|
|
|
|
LDA #'U' ; SEND "UI" TO RE-INIT DRIVE
|
|
JSR CHROUT
|
|
LDA #'I'
|
|
JSR CHROUT
|
|
|
|
JMP CLRCHN ; CLEAR & RETURN
|
|
|
|
; -----------------------
|
|
; GET FAST BYTE FROM DISK
|
|
; -----------------------
|
|
|
|
ZOOM: LDA #$80
|
|
STA FDATA
|
|
|
|
GETBIT: LDA CI2PRA
|
|
ORA #$10
|
|
STA CI2PRA
|
|
|
|
GETBO0: LDA CI2PRA
|
|
TAY
|
|
AND #$80
|
|
BNE GETBO0
|
|
TYA
|
|
AND #$EF
|
|
STA CI2PRA
|
|
|
|
GETBO1: LDA CI2PRA
|
|
TAY
|
|
AND #$80
|
|
BEQ GETBO1
|
|
|
|
GETBO2: TYA
|
|
ORA #$10
|
|
STA CI2PRA
|
|
|
|
LDX #7
|
|
GETBO3: DEX
|
|
BNE GETBO3
|
|
LDA CI2PRA
|
|
TAY
|
|
AND #$EF
|
|
STA CI2PRA
|
|
TYA
|
|
ASL A
|
|
ROR FDATA
|
|
BCC GETBO2
|
|
|
|
LDA FDATA
|
|
EOR #$FF
|
|
RTS
|
|
|
|
; -----------------
|
|
; SEND BYTE TO DISK
|
|
; -----------------
|
|
|
|
SNDBYT: STA FDATA
|
|
|
|
LDX #8
|
|
BIT: JSR SCLK1
|
|
|
|
WAITD: JSR SETTLE
|
|
AND #$80
|
|
BNE WAITD
|
|
JSR SCLK0
|
|
|
|
SNDBO1: JSR SETTLE
|
|
TAY
|
|
AND #$80
|
|
BEQ SNDBO1
|
|
|
|
TYA
|
|
ORA #$10
|
|
LSR FDATA
|
|
BCC SNDBO2
|
|
ORA #$20
|
|
|
|
SNDBO2: STA CI2PRA
|
|
|
|
LDY #7
|
|
SNDBO3: DEY
|
|
BNE SNDBO3
|
|
JSR SCLK0
|
|
|
|
DEX
|
|
BNE BIT
|
|
RTS
|
|
|
|
; ---------------------------
|
|
; WAIT FOR I/O PORT TO SETTLE
|
|
; ---------------------------
|
|
|
|
SETTLE: LDA CI2PRA
|
|
CMP CI2PRA
|
|
BNE SETTLE
|
|
RTS
|
|
|
|
; ---------------
|
|
; SET CLKOUT TO 1
|
|
; ---------------
|
|
|
|
SCLK1: LDA CI2PRA
|
|
ORA #$10
|
|
AND #$DF
|
|
BNE PUTPRT
|
|
|
|
; ---------------
|
|
; SET CLKOUT TO 0
|
|
; ---------------
|
|
|
|
SCLK0: LDA CI2PRA
|
|
AND #$CF
|
|
|
|
PUTPRT: STA CI2PRA
|
|
NOP
|
|
NOP
|
|
RTS
|
|
|
|
END
|
|
|