mirror of
https://github.com/a2-4am/passport.git
synced 2025-01-14 05:31:07 +00:00
verify 13-sector disks, too
This commit is contained in:
parent
8b58e3b94f
commit
617a2020b6
@ -48,16 +48,21 @@
|
|||||||
; instead of falling back to built-in RWTS
|
; instead of falling back to built-in RWTS
|
||||||
; compile-time flag, no way to change at runtime
|
; compile-time flag, no way to change at runtime
|
||||||
|
|
||||||
;gMECCFastloadType
|
;gIs13Sector
|
||||||
!byte 00 ; int
|
!byte FALSE ; 0=true, 1=false
|
||||||
; reset before each operation
|
; reset before each operation
|
||||||
; set in IDBootloader() after reading T00,S00
|
; set in IDBootFailure() after reading T00
|
||||||
|
|
||||||
;gIsInfocom18
|
;gIsInfocom18
|
||||||
!byte FALSE ; 0=true, 1=false
|
!byte FALSE ; 0=true, 1=false
|
||||||
; reset before each operation
|
; reset before each operation
|
||||||
; set in IDBootFailure() after reading T00
|
; set in IDBootFailure() after reading T00
|
||||||
|
|
||||||
|
;gMECCFastloadType
|
||||||
|
!byte 00 ; int
|
||||||
|
; reset before each operation
|
||||||
|
; set in IDBootloader() after reading T00,S00
|
||||||
|
|
||||||
FIRSTFILTER
|
FIRSTFILTER
|
||||||
;gIsRDOS
|
;gIsRDOS
|
||||||
!byte FALSE ; 0=true, 1=false
|
!byte FALSE ; 0=true, 1=false
|
||||||
|
@ -101,8 +101,10 @@ gIsRDOS13 = gIsDavidson-$01 ; byte
|
|||||||
;LASTFILTER ; add new gIs* above this line
|
;LASTFILTER ; add new gIs* above this line
|
||||||
;gIsInfocom18 is a special case whose ID is not in the regular inspection path
|
;gIsInfocom18 is a special case whose ID is not in the regular inspection path
|
||||||
gIsInfocom18 = gIsRDOS13-$01 ; byte
|
gIsInfocom18 = gIsRDOS13-$01 ; byte
|
||||||
|
;gIs13Sector is a special case whose ID is not in the regular inspection path
|
||||||
|
gIs13Sector = gIsInfocom18-$01 ; byte
|
||||||
;gMECCFastloadType is a special case integer whose default value cannot be #FALSE
|
;gMECCFastloadType is a special case integer whose default value cannot be #FALSE
|
||||||
gMECCFastloadType = gIsInfocom18-$01 ; byte
|
gMECCFastloadType = gIs13Sector-$01 ; byte
|
||||||
|
|
||||||
gOnAClearDayYouCanReadForever = gMECCFastloadType-$01 ; byte
|
gOnAClearDayYouCanReadForever = gMECCFastloadType-$01 ; byte
|
||||||
gUsingRAMDisk = gOnAClearDayYouCanReadForever-$01 ; byte
|
gUsingRAMDisk = gOnAClearDayYouCanReadForever-$01 ; byte
|
||||||
@ -171,6 +173,7 @@ ConstructStandardDelivery = jConstructStandardDelivery
|
|||||||
!warn "gIsDavidson=",gIsDavidson
|
!warn "gIsDavidson=",gIsDavidson
|
||||||
!warn "gIsRDOS13=",gIsRDOS13
|
!warn "gIsRDOS13=",gIsRDOS13
|
||||||
!warn "gIsInfocom18=",gIsInfocom18
|
!warn "gIsInfocom18=",gIsInfocom18
|
||||||
|
!warn "gIs13Sector=",gIs13Sector
|
||||||
!warn "gOnAClearDayYouCanReadForever=",gOnAClearDayYouCanReadForever
|
!warn "gOnAClearDayYouCanReadForever=",gOnAClearDayYouCanReadForever
|
||||||
!warn "gUsingRAMDisk=",gUsingRAMDisk
|
!warn "gUsingRAMDisk=",gUsingRAMDisk
|
||||||
!warn "gRAMDiskRef=",gRAMDiskRef
|
!warn "gRAMDiskRef=",gRAMDiskRef
|
||||||
|
@ -20,11 +20,18 @@ IDBootloader
|
|||||||
stx gLastTrack
|
stx gLastTrack
|
||||||
|
|
||||||
lda gIsInfocom18
|
lda gIsInfocom18
|
||||||
bne .sanity
|
bne .check13
|
||||||
lda #s_infocom18
|
lda #s_infocom18
|
||||||
jsr PrintByID
|
jsr PrintByID
|
||||||
jmp UseUniversal
|
jmp UseUniversal
|
||||||
|
|
||||||
|
.check13
|
||||||
|
lda gIs13Sector
|
||||||
|
bne .sanity
|
||||||
|
lda #s_13sector
|
||||||
|
jsr PrintByID
|
||||||
|
jmp UseUniversal
|
||||||
|
|
||||||
.sanity
|
.sanity
|
||||||
;
|
;
|
||||||
; Quick sanity check -- only recognized values for $0800
|
; Quick sanity check -- only recognized values for $0800
|
||||||
@ -302,7 +309,8 @@ PrereadT00Partial
|
|||||||
; main entry point to identify the bootloader
|
; main entry point to identify the bootloader
|
||||||
; when the initial read failed
|
; when the initial read failed
|
||||||
; identifies Infocom 18-sector side B disks
|
; identifies Infocom 18-sector side B disks
|
||||||
; doubles as verification routine after ID
|
; and pure 13-sector disks
|
||||||
|
; doubles as Infocom verification routine after ID
|
||||||
; written by qkumba
|
; written by qkumba
|
||||||
;
|
;
|
||||||
; in: nothing
|
; in: nothing
|
||||||
@ -310,40 +318,44 @@ PrereadT00Partial
|
|||||||
;-------------------------------
|
;-------------------------------
|
||||||
!zone {
|
!zone {
|
||||||
IDBootFailure
|
IDBootFailure
|
||||||
lda #FALSE
|
|
||||||
sta gIsInfocom18
|
|
||||||
bit gMode ; only in verify-mode
|
|
||||||
bmi .branchno
|
|
||||||
|
|
||||||
VerifyInfocom18
|
VerifyInfocom18
|
||||||
lda $C0E9
|
lda $C0E9
|
||||||
lda #$1A ; the length of a track
|
.retry13
|
||||||
sta tmp ; keep X register free
|
ldx #$1A ; the length of a track
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
- iny
|
--- iny
|
||||||
bne +
|
bne +
|
||||||
dec tmp
|
dex
|
||||||
beq .branchno
|
bne +
|
||||||
+ lda $C0EC
|
|
||||||
|
.no sec
|
||||||
|
lda $C0E8
|
||||||
|
rts
|
||||||
|
|
||||||
|
.badsect
|
||||||
|
lda gIsInfocom18
|
||||||
|
beq .no ; if in Infocom mode already then we have a true failure
|
||||||
|
bne .retry13 ; otherwise, try to identify 13-sector instead
|
||||||
|
; the issue being that both have a D5 AA AD sequence
|
||||||
|
|
||||||
|
+
|
||||||
|
- lda $C0EC
|
||||||
bpl -
|
bpl -
|
||||||
-- cmp #$D5
|
-- cmp #$D5
|
||||||
bne -
|
bne ---
|
||||||
- lda $C0EC
|
- lda $C0EC
|
||||||
bpl -
|
bpl -
|
||||||
cmp #$AA
|
cmp #$AA
|
||||||
bne --
|
bne --
|
||||||
- lda $C0EC
|
- lda $C0EC
|
||||||
bpl -
|
bpl -
|
||||||
|
cmp #$B5 ; 13-sector only
|
||||||
|
beq .build13
|
||||||
cmp #$AD
|
cmp #$AD
|
||||||
beq .tryinfocom
|
bne --
|
||||||
ldx gIsInfocom18
|
|
||||||
beq -- ; resume if already in Infocom mode
|
|
||||||
;;other things here in future
|
|
||||||
.branchno
|
|
||||||
jmp .no
|
|
||||||
|
|
||||||
.tryinfocom
|
|
||||||
- lda $C0EC
|
- lda $C0EC
|
||||||
bpl -
|
bpl -
|
||||||
nop
|
nop
|
||||||
@ -373,15 +385,113 @@ VerifyInfocom18
|
|||||||
- ldx $C0EC
|
- ldx $C0EC
|
||||||
bpl -
|
bpl -
|
||||||
eor $BA00,x ; from universal RWTS
|
eor $BA00,x ; from universal RWTS
|
||||||
bne .no
|
bne .badsect
|
||||||
dec tmp
|
dec tmp
|
||||||
bne --
|
bne --
|
||||||
sta gIsInfocom18
|
sta gIsInfocom18
|
||||||
clc ; all clear
|
|
||||||
!byte $24
|
.checkmode
|
||||||
.no
|
bit gMode ; verify-mode already?
|
||||||
sec
|
bpl + ; yes, continue
|
||||||
|
|
||||||
|
lda #%00000000 ;
|
||||||
|
sta gMode ; no, switch to verify-mode
|
||||||
|
lda #s_toverify
|
||||||
|
jsr PrintByID ; and say so
|
||||||
|
|
||||||
|
+ clc ; all clear
|
||||||
lda $C0E8
|
lda $C0E8
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
;build 5-and-3 decoding table
|
||||||
|
;for 13-sector support
|
||||||
|
|
||||||
|
.build13
|
||||||
|
ldx #$00
|
||||||
|
ldy #$AB
|
||||||
|
- tya
|
||||||
|
sta tmp
|
||||||
|
lsr
|
||||||
|
ora tmp
|
||||||
|
cmp #$FF
|
||||||
|
bne +
|
||||||
|
cpy #$D5
|
||||||
|
beq +
|
||||||
|
txa
|
||||||
|
sta $800,y
|
||||||
|
inx
|
||||||
|
+ iny
|
||||||
|
bne -
|
||||||
|
sty gIs13Sector
|
||||||
|
beq .checkmode ; always taken
|
||||||
|
|
||||||
|
read13
|
||||||
|
lda $C0E9
|
||||||
|
lda #$1C ; retry count
|
||||||
|
sta tmp
|
||||||
|
|
||||||
|
.readaddr
|
||||||
|
dec tmp
|
||||||
|
bmi .badread
|
||||||
|
clc
|
||||||
|
ldx #$02 ; 512 nibbles
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.readdata
|
||||||
|
php
|
||||||
|
--- iny
|
||||||
|
bne +
|
||||||
|
dex
|
||||||
|
beq .badread
|
||||||
|
+
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
-- cmp #$D5
|
||||||
|
bne ---
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
cmp #$AA
|
||||||
|
bne --
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
cmp #$B5
|
||||||
|
bne +
|
||||||
|
ldy #$03
|
||||||
|
-- lda $C0EC
|
||||||
|
bpl --
|
||||||
|
rol
|
||||||
|
sta $3C
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
and $3C
|
||||||
|
dey
|
||||||
|
bne --
|
||||||
|
plp
|
||||||
|
cmp gSector
|
||||||
|
bne .readaddr
|
||||||
|
bcs .readdata
|
||||||
|
+ plp
|
||||||
|
bcc .readaddr
|
||||||
|
eor #$AD
|
||||||
|
bne read13
|
||||||
|
-- ldy #$9A
|
||||||
|
- ldx $C0EC
|
||||||
|
bpl -
|
||||||
|
eor $800,x
|
||||||
|
dey
|
||||||
|
bne -
|
||||||
|
- ldx $C0EC
|
||||||
|
bpl -
|
||||||
|
eor $800,x
|
||||||
|
iny
|
||||||
|
bne -
|
||||||
|
- ldx $C0EC
|
||||||
|
bpl -
|
||||||
|
eor $800,x
|
||||||
|
cmp #$01 ; set carry if non-zero
|
||||||
|
!byte $24
|
||||||
|
.badread
|
||||||
|
sec
|
||||||
|
lda $C0E8
|
||||||
|
rts
|
||||||
}
|
}
|
||||||
|
@ -254,6 +254,8 @@ Reaction
|
|||||||
sta gTriedUniv
|
sta gTriedUniv
|
||||||
sta gSaidWriting
|
sta gSaidWriting
|
||||||
sta gIsProtDOS
|
sta gIsProtDOS
|
||||||
|
sta gIsInfocom18
|
||||||
|
sta gIs13Sector
|
||||||
lda #$00
|
lda #$00
|
||||||
sta gTrack
|
sta gTrack
|
||||||
sta gSector
|
sta gSector
|
||||||
@ -341,6 +343,17 @@ UseUniversal
|
|||||||
jsr PatchUniversalRWTSForOrigin
|
jsr PatchUniversalRWTSForOrigin
|
||||||
bmi ReadWithRWTS ; always branches
|
bmi ReadWithRWTS ; always branches
|
||||||
;
|
;
|
||||||
|
; On pure 13-sector disks, we just hijack the read routine to perform a
|
||||||
|
; verification instead.
|
||||||
|
;
|
||||||
|
+ lda gIs13Sector
|
||||||
|
bne +
|
||||||
|
lda #<read13
|
||||||
|
sta jCallRWTS+1
|
||||||
|
lda #>read13
|
||||||
|
sta jCallRWTS+2
|
||||||
|
bne ReadWithRWTS ; always branches
|
||||||
|
;
|
||||||
; On other disks that use the universal RWTS for the entire disk, we use
|
; On other disks that use the universal RWTS for the entire disk, we use
|
||||||
; an adaptive RWTS that accepts any epilogue on the first sector but then
|
; an adaptive RWTS that accepts any epilogue on the first sector but then
|
||||||
; enforces all other sectors to have the same epilogue.
|
; enforces all other sectors to have the same epilogue.
|
||||||
@ -370,7 +383,10 @@ ReadWithRWTS
|
|||||||
lda #$22
|
lda #$22
|
||||||
jsr ChangeTrackNW
|
jsr ChangeTrackNW
|
||||||
lda #$0F
|
lda #$0F
|
||||||
jsr ChangeSector
|
ldx gIs13Sector
|
||||||
|
bne +
|
||||||
|
lda #$0C
|
||||||
|
+ jsr ChangeSector
|
||||||
lda #<T22S0F
|
lda #<T22S0F
|
||||||
sta checksector+1
|
sta checksector+1
|
||||||
lda #>T22S0F
|
lda #>T22S0F
|
||||||
@ -415,8 +431,11 @@ checksector
|
|||||||
; If we just got to this track, check for whole-track protections.
|
; If we just got to this track, check for whole-track protections.
|
||||||
;
|
;
|
||||||
ldx #$0F ;16-sector
|
ldx #$0F ;16-sector
|
||||||
|
lda gIs13Sector
|
||||||
|
beq .expect13
|
||||||
lda gIsDOS32
|
lda gIsDOS32
|
||||||
bne +
|
bne +
|
||||||
|
.expect13
|
||||||
ldx #$0C ;13-sector
|
ldx #$0C ;13-sector
|
||||||
+ cpx gSector
|
+ cpx gSector
|
||||||
bne .checkoptional
|
bne .checkoptional
|
||||||
@ -493,7 +512,10 @@ nextsector
|
|||||||
jmp .read
|
jmp .read
|
||||||
.prevtrack
|
.prevtrack
|
||||||
lda #$0F
|
lda #$0F
|
||||||
jsr ChangeSector
|
ldx gIs13Sector
|
||||||
|
bne +
|
||||||
|
lda #$0C
|
||||||
|
+ jsr ChangeSector
|
||||||
lda gTrack
|
lda gTrack
|
||||||
sec
|
sec
|
||||||
sbc #$01
|
sbc #$01
|
||||||
|
@ -124,6 +124,8 @@ StringTable
|
|||||||
!word .ssi
|
!word .ssi
|
||||||
!word .aacount
|
!word .aacount
|
||||||
!word .infocom18
|
!word .infocom18
|
||||||
|
!word .toverify
|
||||||
|
!word .sector13
|
||||||
;
|
;
|
||||||
; Text can contain substitution strings, which
|
; Text can contain substitution strings, which
|
||||||
; are replaced by current values at runtime. Each
|
; are replaced by current values at runtime. Each
|
||||||
@ -149,7 +151,7 @@ StringTable
|
|||||||
; can be set directly before calling PrintByID.
|
; can be set directly before calling PrintByID.
|
||||||
;
|
;
|
||||||
.header
|
.header
|
||||||
!text "Passport by 4am 2018-12-28",$00
|
!text "Passport by 4am 2018-12-29",$00
|
||||||
.mainmenu
|
.mainmenu
|
||||||
!text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D
|
!text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D
|
||||||
!text " "
|
!text " "
|
||||||
@ -459,4 +461,8 @@ StringTable
|
|||||||
!text "T%t,S%0 Found AA nibble count",$8D,$00
|
!text "T%t,S%0 Found AA nibble count",$8D,$00
|
||||||
.infocom18
|
.infocom18
|
||||||
!text "T00,S00 Found Infocom 18-sector format",$8D,$00
|
!text "T00,S00 Found Infocom 18-sector format",$8D,$00
|
||||||
|
.toverify
|
||||||
|
!text "Switching to verify-only mode",$8D,$00
|
||||||
|
.sector13
|
||||||
|
!text "T00,S00 Found 13-sector format",$8D,$00
|
||||||
}
|
}
|
||||||
|
@ -110,4 +110,6 @@ s_rdos13 = $68
|
|||||||
s_ssi = $69
|
s_ssi = $69
|
||||||
s_aacount = $6A
|
s_aacount = $6A
|
||||||
s_infocom18 = $6B
|
s_infocom18 = $6B
|
||||||
STRINGCOUNT = $6C
|
s_toverify = $6C
|
||||||
|
s_13sector = $6D
|
||||||
|
STRINGCOUNT = $6E
|
||||||
|
Loading…
x
Reference in New Issue
Block a user