mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-08 17:21:26 +00:00
54 lines
1.1 KiB
NASM
54 lines
1.1 KiB
NASM
PAGE
|
|
SBTTL "DISK ACCESS: ACORN"
|
|
|
|
;****************************
|
|
;READ/WRITE A BLOCK TO IOBUFF
|
|
;****************************
|
|
|
|
;ENTRY: TRACK SET TO TRACK # (0-79)
|
|
; SECTOR SET TO SECTOR # (0-7)
|
|
; DRIVE SET TO 0 OR 1
|
|
; CARRY CLEAR TO READ, SET TO WRITE
|
|
|
|
;NOTE: PARAMS (NUMBER OF PARAMETERS) PERMANENTLY 3
|
|
; L (SECTOR LENGTH) PERMANENTLY $21 (ACORN CODE = 256 + 1)
|
|
|
|
DISK: BCS DWRITE
|
|
LDA #RDCMD ;SET INSTRUCTION BYTE TO READ A BLOCK
|
|
STA COMMD
|
|
JMP TODISK ;ALWAYS BRANCH
|
|
DWRITE: LDA #WTCMD ;ELSE SET TO WRITE A BLOCK
|
|
STA COMMD
|
|
|
|
TODISK: LDA #0 ;MAKE SURE RESULT BYTE IS CLEAR
|
|
STA RWRSLT
|
|
LDA #3 ;SET PARAMETER COUNT TO 3
|
|
STA PARAM
|
|
LDA #$21 ;SET SECTOR LENGTH TO 256
|
|
STA L
|
|
|
|
LDA #0
|
|
STA MEMADD+2 ;SET MEMORY ADDR TO RECEIVE BLOCK (IOBUFF)
|
|
STA MEMADD+3
|
|
LDY #HIGH IOBUFF
|
|
LDX #LOW IOBUFF
|
|
STY MEMADD+1 ;4 BYTES = LOW HIGHER HIGHER HIGHEST
|
|
STX MEMADD ;USE ONLY 2 BYTES SO 1ST 2 - LOWEST.
|
|
|
|
;READ/WRITE A SECTOR
|
|
|
|
LDY #HIGH SECBLK ;GET INSTRUCTION BLOCK
|
|
LDX #LOW SECBLK
|
|
LDA #$7F ;TELL OSWORD TO R/W A SECTOR
|
|
JSR OSWORD
|
|
|
|
LDA RWRSLT ;OK?
|
|
CMP #0
|
|
BNE BADWRT ;NO, FAILED
|
|
CLC
|
|
RTS ;RET OK
|
|
BADWRT: SEC
|
|
RTS ;RET CARRY SET = NO GOOD
|
|
|
|
END
|