2017-01-08 03:35:35 +00:00
|
|
|
;-------------------------------
|
|
|
|
; ReadSector
|
|
|
|
; high-level function to read a single sector.
|
|
|
|
; in: gIsProtDOS is TRUE or FALSE
|
|
|
|
; if gProtDOS is FALSE, callrwts+2 has been set to
|
|
|
|
; the RWTS entry point (e.g. $BD or $3D or $FD)
|
|
|
|
; if RWTS is in LC RAM, the appropriate RAM bank
|
|
|
|
; has already been selected for read/write access
|
|
|
|
; out: all registers clobbered
|
|
|
|
; C clear if read was successful
|
|
|
|
; C set if read failed
|
|
|
|
;-------------------------------
|
|
|
|
ReadSector
|
|
|
|
lda #$AA ; lots of custom RWTS routines
|
|
|
|
sta $31 ; need these zero page locations
|
|
|
|
lda #$AD ; set to magic values
|
|
|
|
sta $4E
|
|
|
|
|
|
|
|
lda gIsProtDOS
|
|
|
|
beq _protread
|
|
|
|
|
2017-01-14 15:13:06 +00:00
|
|
|
setuprwts
|
2017-01-08 03:35:35 +00:00
|
|
|
ldy #<gRWTSParams
|
|
|
|
lda #>gRWTSParams
|
|
|
|
callrwts jsr $FF00 ; modified at runtime (see Inspect1)
|
2017-01-14 15:13:06 +00:00
|
|
|
bcc endread
|
|
|
|
lda gOnAClearDayYouCanReadForever
|
|
|
|
beq setuprwts
|
|
|
|
endread
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
|
|
|
|
|
|
|
;
|
|
|
|
; "Protected.DOS" has enough differences that we just
|
|
|
|
; split everything out here. The hi/lo RWTS parameter
|
|
|
|
; table address is set in A/Y instead of Y/A. The
|
|
|
|
; RWTS entry point is $BA00. The third data prologue
|
|
|
|
; nibble is stored in zp$4E and varies based on track
|
|
|
|
; and sector.
|
|
|
|
;
|
2017-01-24 00:57:43 +00:00
|
|
|
!zone {
|
2017-01-08 03:35:35 +00:00
|
|
|
_protread
|
|
|
|
lda gTrack ; T02,S05+ use "protected" mode
|
|
|
|
cmp #$03 ; (altered data prologue and
|
2017-01-24 00:57:43 +00:00
|
|
|
bcs .protected ; nibble translate table)
|
2017-01-08 03:35:35 +00:00
|
|
|
cmp #$02 ; T00,S00 - T02,S04 use
|
2017-01-24 00:57:43 +00:00
|
|
|
bcc .standard ; "standard" mode
|
2017-01-08 03:35:35 +00:00
|
|
|
lda gSector
|
|
|
|
cmp #$05
|
2017-01-24 00:57:43 +00:00
|
|
|
bcs .protected
|
|
|
|
.standard
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$9B
|
|
|
|
sta $BF2C
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .go ; unconditional branch
|
|
|
|
.protected
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$B5
|
|
|
|
sta $4E
|
|
|
|
lda #$D5
|
|
|
|
sta $BF2C ; execution falls through here
|
2017-01-24 00:57:43 +00:00
|
|
|
.go
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #<gRWTSParams
|
|
|
|
ldy #>gRWTSParams
|
|
|
|
jsr $BA00 ; note non-standard entry point
|
2017-01-14 15:13:06 +00:00
|
|
|
bcc endprotread
|
|
|
|
lda gOnAClearDayYouCanReadForever
|
2017-01-24 00:57:43 +00:00
|
|
|
beq .go
|
2017-01-14 15:13:06 +00:00
|
|
|
endprotread
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
2017-01-24 00:57:43 +00:00
|
|
|
}
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
gRWTSParams ; used to read each sector
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $01,$60,$01,$00
|
|
|
|
gTrack !byte $00
|
|
|
|
gSector !byte $00
|
2017-01-08 03:35:35 +00:00
|
|
|
!word dct
|
|
|
|
gAddress !word $1F00
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $00,$00,$01,$00,$FE,$60,$01,$00,$00
|
|
|
|
dct !byte $00,$01,$EF,$D8,$00
|