mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-27 12:22:34 +00:00
184 lines
2.1 KiB
Plaintext
184 lines
2.1 KiB
Plaintext
PAGE
|
|
SBTTL "--- CBM64 FAST DISK HANDSHAKE ROUTINES ---"
|
|
|
|
; ------------------
|
|
; 1541 DRIVE EQUATES
|
|
; ------------------
|
|
|
|
PB EQU $1800
|
|
JOBS EQU $00
|
|
HDRS EQU $06
|
|
DATA EQU $0A
|
|
INDEX EQU $0B
|
|
|
|
DATIN EQU $01
|
|
DATOUT EQU $02
|
|
CLKIN EQU $04
|
|
CLKOUT EQU $08
|
|
ATNIN EQU $80
|
|
|
|
READ EQU $80
|
|
WRITE EQU $90
|
|
VERIFY EQU $A0
|
|
SEEK EQU $B0
|
|
SECSEK EQU SEEK+8
|
|
BUMP EQU $C0
|
|
JUMPC EQU $D0
|
|
EXEC EQU $E0
|
|
|
|
BUF1 EQU $0300
|
|
BUF2 EQU $0400
|
|
BUF3 EQU $0500
|
|
BUF4 EQU $0600
|
|
BUF5 EQU $0700
|
|
|
|
DSKCNT EQU $1C00 ; DISK CONTROLLER PORT ADDRESS
|
|
|
|
ORG BUF3
|
|
|
|
INIT0: LDA PB
|
|
AND #$FF-DATOUT-CLKOUT
|
|
STA PB
|
|
|
|
JSR CLK0
|
|
|
|
CMDWT: LDA DSKCNT ; READ CONTROLLER
|
|
AND #%11110111 ; CLEAR BIT 3
|
|
STA DSKCNT ; TO SHUT OFF THE DAMNED LITTLE RED LIGHT
|
|
|
|
JSR BYTGET ; GET TRACK ID (1-35)
|
|
TAX ; SAVE HERE
|
|
BEQ CMDEND ; IF ZERO
|
|
CMP #$FF ; OR $FF,
|
|
BEQ CMDEND ; DISENGAGE
|
|
STA HDRS ; ELSE SET TRACK #
|
|
|
|
JSR BYTGET ; GET SECTOR #
|
|
STA HDRS+1 ; AND SET IT
|
|
|
|
LDA DSKCNT ; TURN BACK ON
|
|
ORA #%00001000 ; THE STUPID LITTLE
|
|
STA DSKCNT ; RED LIGHT
|
|
|
|
JSR RDFILE ; GET THE DATA
|
|
|
|
JMP CMDWT ; WAIT FOR NEXT TRACK/SECTOR
|
|
|
|
CMDEND: RTS ; EXIT HARD LOOP
|
|
|
|
DEBNC: LDA PB ; WAIT FOR SERIAL LINE
|
|
CMP PB ; TO SETTLE DOWN
|
|
BNE DEBNC
|
|
RTS
|
|
|
|
CLK0: JSR DEBNC
|
|
AND #CLKIN
|
|
BNE CLK0
|
|
RTS
|
|
|
|
BYTGET: LDA #$80
|
|
STA DATA
|
|
|
|
GTBIT: JSR DEBNC
|
|
TAY
|
|
AND #CLKIN
|
|
BEQ GTBIT
|
|
SEI
|
|
TYA
|
|
ORA #DATOUT
|
|
STA PB
|
|
|
|
JSR CLK0
|
|
LDA PB
|
|
AND #$FF-DATOUT
|
|
STA PB
|
|
|
|
GTBO0: JSR DEBNC
|
|
TAY
|
|
AND #CLKIN
|
|
BEQ GTBO0
|
|
JSR CLK0
|
|
CLI
|
|
TYA
|
|
LSR A
|
|
ROR DATA
|
|
BCC GTBIT
|
|
|
|
LDA DATA
|
|
RTS
|
|
|
|
BYTSND: LDX #8
|
|
STA DATA
|
|
|
|
BITSND: LDA PB
|
|
TAY
|
|
AND #CLKIN
|
|
BEQ BITSND
|
|
TYA
|
|
ORA #DATOUT
|
|
STA PB
|
|
SEI
|
|
|
|
BSND0: LDA PB
|
|
TAY
|
|
AND #CLKIN
|
|
BNE BSND0
|
|
|
|
BSND1: TYA
|
|
AND #$FF-DATOUT
|
|
STA PB
|
|
|
|
SPEED: LDA PB
|
|
TAY
|
|
AND #CLKIN
|
|
BEQ SPEED
|
|
|
|
TYA
|
|
LSR DATA
|
|
BCC BSND2
|
|
ORA #DATOUT
|
|
|
|
BSND2: STA PB
|
|
|
|
BSND3: LDA PB
|
|
TAY
|
|
AND #CLKIN
|
|
BNE BSND3
|
|
TYA
|
|
AND #$FF-DATOUT
|
|
STA PB
|
|
|
|
DEX
|
|
BNE SPEED
|
|
CLI
|
|
RTS
|
|
|
|
RDFILE: LDA #READ
|
|
STA JOBS
|
|
|
|
TSTDO3: LDA JOBS
|
|
BMI TSTDO3
|
|
|
|
TSTDO5: LDA #0
|
|
STA INDEX
|
|
|
|
TSTDO4: LDY INDEX
|
|
LDA BUF1,Y
|
|
JSR BYTSND
|
|
INC INDEX
|
|
BNE TSTDO4
|
|
RTS
|
|
|
|
; FILL REMAINDER OF SECTOR
|
|
; WITH JUNK
|
|
|
|
DB 0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0
|
|
DB 0,0
|
|
|
|
END
|
|
|