mirror of
https://github.com/a2-4am/passport.git
synced 2024-12-22 04:29:59 +00:00
verify Infocom 18-sector format
This commit is contained in:
parent
7ac054c7b4
commit
8b58e3b94f
@ -53,6 +53,11 @@
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
|
||||
;gIsInfocom18
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootFailure() after reading T00
|
||||
|
||||
FIRSTFILTER
|
||||
;gIsRDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
|
@ -99,8 +99,10 @@ gIsPanglosDOS = gIsAdvent-$01 ; byte
|
||||
gIsDavidson = gIsPanglosDOS-$01 ; byte
|
||||
gIsRDOS13 = gIsDavidson-$01 ; byte
|
||||
;LASTFILTER ; add new gIs* above this line
|
||||
;gIsInfocom18 is a special case whose ID is not in the regular inspection path
|
||||
gIsInfocom18 = gIsRDOS13-$01 ; byte
|
||||
;gMECCFastloadType is a special case integer whose default value cannot be #FALSE
|
||||
gMECCFastloadType = gIsRDOS13-$01 ; byte
|
||||
gMECCFastloadType = gIsInfocom18-$01 ; byte
|
||||
|
||||
gOnAClearDayYouCanReadForever = gMECCFastloadType-$01 ; byte
|
||||
gUsingRAMDisk = gOnAClearDayYouCanReadForever-$01 ; byte
|
||||
@ -168,6 +170,7 @@ ConstructStandardDelivery = jConstructStandardDelivery
|
||||
!warn "gIsPanglosDOS=",gIsPanglosDOS
|
||||
!warn "gIsDavidson=",gIsDavidson
|
||||
!warn "gIsRDOS13=",gIsRDOS13
|
||||
!warn "gIsInfocom18=",gIsInfocom18
|
||||
!warn "gOnAClearDayYouCanReadForever=",gOnAClearDayYouCanReadForever
|
||||
!warn "gUsingRAMDisk=",gUsingRAMDisk
|
||||
!warn "gRAMDiskRef=",gRAMDiskRef
|
||||
|
@ -18,6 +18,14 @@ IDBootloader
|
||||
bne -
|
||||
stx gMECCFastloadType
|
||||
stx gLastTrack
|
||||
|
||||
lda gIsInfocom18
|
||||
bne .sanity
|
||||
lda #s_infocom18
|
||||
jsr PrintByID
|
||||
jmp UseUniversal
|
||||
|
||||
.sanity
|
||||
;
|
||||
; Quick sanity check -- only recognized values for $0800
|
||||
; are 1 or 2 for regular disks, and 5 for possible Electronic Arts.
|
||||
@ -288,3 +296,92 @@ PrereadT00Partial
|
||||
.exit
|
||||
rts
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
; IDBootFailure
|
||||
; main entry point to identify the bootloader
|
||||
; when the initial read failed
|
||||
; identifies Infocom 18-sector side B disks
|
||||
; doubles as verification routine after ID
|
||||
; written by qkumba
|
||||
;
|
||||
; in: nothing
|
||||
; out: carry set if we can't ID it
|
||||
;-------------------------------
|
||||
!zone {
|
||||
IDBootFailure
|
||||
lda #FALSE
|
||||
sta gIsInfocom18
|
||||
bit gMode ; only in verify-mode
|
||||
bmi .branchno
|
||||
|
||||
VerifyInfocom18
|
||||
lda $C0E9
|
||||
lda #$1A ; the length of a track
|
||||
sta tmp ; keep X register free
|
||||
ldy #0
|
||||
|
||||
- iny
|
||||
bne +
|
||||
dec tmp
|
||||
beq .branchno
|
||||
+ lda $C0EC
|
||||
bpl -
|
||||
-- cmp #$D5
|
||||
bne -
|
||||
- lda $C0EC
|
||||
bpl -
|
||||
cmp #$AA
|
||||
bne --
|
||||
- lda $C0EC
|
||||
bpl -
|
||||
cmp #$AD
|
||||
beq .tryinfocom
|
||||
ldx gIsInfocom18
|
||||
beq -- ; resume if already in Infocom mode
|
||||
;;other things here in future
|
||||
.branchno
|
||||
jmp .no
|
||||
|
||||
.tryinfocom
|
||||
- lda $C0EC
|
||||
bpl -
|
||||
nop
|
||||
nop ; ignore half of 4x4 track number
|
||||
- lda $C0EC
|
||||
bpl - ; ignore half of 4x4 track number
|
||||
|
||||
lda #$12 ; all 18 sectors when in verify mode
|
||||
ldx gIsInfocom18
|
||||
beq .setcount
|
||||
lda #$01 ; only one sector when in ID mode
|
||||
.setcount
|
||||
sta tmp ; sector counter
|
||||
|
||||
lda #$00
|
||||
-- ldy #$56
|
||||
- ldx $C0EC
|
||||
bpl -
|
||||
eor $BA00,x ; from universal RWTS
|
||||
dey
|
||||
bne -
|
||||
- ldx $C0EC
|
||||
bpl -
|
||||
eor $BA00,x ; from universal RWTS
|
||||
iny
|
||||
bne -
|
||||
- ldx $C0EC
|
||||
bpl -
|
||||
eor $BA00,x ; from universal RWTS
|
||||
bne .no
|
||||
dec tmp
|
||||
bne --
|
||||
sta gIsInfocom18
|
||||
clc ; all clear
|
||||
!byte $24
|
||||
.no
|
||||
sec
|
||||
lda $C0E8
|
||||
rts
|
||||
|
||||
}
|
||||
|
@ -274,6 +274,8 @@ Reaction
|
||||
jsr IgnoreAddressChecksum
|
||||
jsr ReadSector
|
||||
bcc +
|
||||
jsr IDBootFailure ; /src/id/inspect0
|
||||
bcc +
|
||||
lda #s_fail
|
||||
jsr PrintByID
|
||||
lda #s_fatal0000
|
||||
@ -375,11 +377,20 @@ ReadWithRWTS
|
||||
sta checksector+2
|
||||
.read
|
||||
lda KEY
|
||||
bpl checksector
|
||||
bpl .checkinfocom
|
||||
bit STROBE
|
||||
cmp #$e0 ;ignore backtick (MAME debug break)
|
||||
beq checksector
|
||||
beq .checkinfocom
|
||||
jmp Cancel
|
||||
.checkinfocom
|
||||
lda gIsInfocom18
|
||||
bne checksector
|
||||
jsr VerifyInfocom18
|
||||
bcc .passtrack
|
||||
jmp FatalError
|
||||
.passtrack
|
||||
jmp .prevtrack
|
||||
|
||||
checksector
|
||||
lda $FFFF ; status of current sector in sector map (modified above)
|
||||
pha
|
||||
@ -387,10 +398,8 @@ checksector
|
||||
bcc +
|
||||
cmp #kSectorCustomLast
|
||||
bcs +
|
||||
jsr PreReadSector
|
||||
tax
|
||||
pla
|
||||
txa
|
||||
jsr PreReadSector
|
||||
pha ; replace status (on stack) with new status returned from PreReadSector
|
||||
+ cmp #kSectorIgnore ; skip this sector?
|
||||
beq nextsector
|
||||
|
@ -123,6 +123,7 @@ StringTable
|
||||
!word .rdos13
|
||||
!word .ssi
|
||||
!word .aacount
|
||||
!word .infocom18
|
||||
;
|
||||
; Text can contain substitution strings, which
|
||||
; are replaced by current values at runtime. Each
|
||||
@ -148,7 +149,7 @@ StringTable
|
||||
; can be set directly before calling PrintByID.
|
||||
;
|
||||
.header
|
||||
!text "Passport by 4am 2018-10-14",$00
|
||||
!text "Passport by 4am 2018-12-28",$00
|
||||
.mainmenu
|
||||
!text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D
|
||||
!text " "
|
||||
@ -456,4 +457,6 @@ StringTable
|
||||
!text "T%t,S%0 Found SSI protection check",$8D,$00
|
||||
.aacount
|
||||
!text "T%t,S%0 Found AA nibble count",$8D,$00
|
||||
.infocom18
|
||||
!text "T00,S00 Found Infocom 18-sector format",$8D,$00
|
||||
}
|
||||
|
@ -109,4 +109,5 @@ s_davidson = $67
|
||||
s_rdos13 = $68
|
||||
s_ssi = $69
|
||||
s_aacount = $6A
|
||||
STRINGCOUNT = $6B
|
||||
s_infocom18 = $6B
|
||||
STRINGCOUNT = $6C
|
||||
|
Loading…
Reference in New Issue
Block a user