refactor track 0 patchers

This commit is contained in:
4am 2021-06-14 10:56:40 -04:00
parent d8c9f21877
commit 765bde89d7
59 changed files with 219 additions and 295 deletions

View File

@ -215,18 +215,6 @@ FIRSTFILTER
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in patchers/t11diskvol.a after reading T11,S00
;gIsRWTS
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in AnalyzeT00() after reading T00
;gIsMaster
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in AnalyzeT00() after reading T00
;gIsBoot1
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in AnalyzeT00() after reading T00
;gIsBoot0
!byte FALSE ; 0=true, 1=false
; reset before each operation

View File

@ -118,10 +118,7 @@ gDiskVolumeNumber = gLastTrack-$01 ; byte
;FIRSTFILTER ; add new gIs* below this line
gIsDOS32 = gDiskVolumeNumber-$01 ; byte
gIsBoot0 = gIsDOS32-$01 ; byte
gIsBoot1 = gIsBoot0-$01 ; byte
gIsMaster = gIsBoot1-$01 ; byte
gIsRWTS = gIsMaster-$01 ; byte
gCapturedDiskVolumeNumber = gIsRWTS-$01 ; byte
gCapturedDiskVolumeNumber = gIsBoot0-$01 ; byte
gIsProDOS = gCapturedDiskVolumeNumber-$01 ; byte
gIsDinkeyDOS = gIsProDOS-$01 ; byte
gIsPascal = gIsDinkeyDOS-$01 ; byte
@ -203,9 +200,6 @@ ConstructStandardDelivery = jConstructStandardDelivery
!warn "gLastTrack=",gLastTrack
!warn "gIsDOS32=",gIsDOS32
!warn "gIsBoot0=",gIsBoot0
!warn "gIsBoot1=",gIsBoot1
!warn "gIsMaster=",gIsMaster
!warn "gIsRWTS=",gIsRWTS
!warn "gCapturedDiskVolumeNumber=",gCapturedDiskVolumeNumber
!warn "gIsProDOS=",gIsProDOS
!warn "gIsDinkeyDOS=",gIsDinkeyDOS

View File

@ -10,118 +10,89 @@ WILDCARD = $97 ; from compare.a
;-------------------------------
; AnalyzeT00
; set additional flags based on contents of track $00
; apply track $00-specific patchers
;
; in: Track $00 in data buffer
; out: gIsBoot1, gIsMaster, gIsRWTS set to #TRUE or #FALSE
; all flags clobbered
; out: all flags clobbered
; all registers clobbered
;-------------------------------
!zone {
AnalyzeT00
lda #$01
ldx #$00
ldy #$38
jsr compare ; if T00,S01,$00 ==
!byte $8E,$E9,$B7,$8E,$F7,$B7,$A9,$01
!byte $8D,$F8,$B7,$8D,$EA,$B7,$AD,$E0
!byte $B7,$8D,$E1,$B7,$A9,$02,$8D,$EC
!byte $B7,$A9,$04,$8D,$ED,$B7,$AC,$E7
!byte $B7,$88,$8C,$F1,$B7,$A9,$01,$8D
!byte $F4,$B7,$8A,$4A,$4A,$4A,$4A,$AA
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
ldx #TRUE
bcc .boot1
ldx #FALSE
.boot1
stx gIsBoot1
lda #$01
ldx #$00
ldy #$38
jsr compare ; if T00,S01,$00 ==
!byte $8E,$E9,$37,$8E,$F7,$37,$A9,$01
!byte $8D,$F8,$37,$8D,$EA,$37,$AD,$E0
!byte $37,$8D,$E1,$37,$A9,$02,$8D,$EC
!byte $37,$A9,$04,$8D,$ED,$37,$AC,$E7
!byte $37,$88,$8C,$F1,$37,$A9,$01,$8D
!byte $F4,$37,$8A,$4A,$4A,$4A,$4A,$AA
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
ldx #TRUE
bcc .master
ldx #FALSE
.master
stx gIsMaster
lda #$07
ldx #$04
ldy #$3C
jsr compare ; if T00,S07,$00 ==
!byte $A0,$02,$8C,WILDCARD
!byte WILDCARD,$A0,$04,$8C,WILDCARD,WILDCARD,$A0,$01
!byte $B1,$48,$AA,$A0,$0F,$D1,$48,$F0
!byte $1B,$8A,$48,$B1,$48,$AA,$68,$48
!byte $91,$48,$BD,$8E,$C0,$A0,$08,$BD
!byte $8C,$C0,$DD,$8C,$C0,$D0,$F6,$88
!byte $D0,$F8,$68,$AA,$BD,$8E,$C0,$BD
!byte $8C,$C0,$A0,$08,$BD,$8C,$C0,$48
ldx #TRUE
bcc .rwts
ldx #FALSE
.rwts
stx gIsRWTS
}
ldy #$21
jsr compare ; if T00,S07,$04 ==
!byte $A0,$02
!byte $8C,WILDCARD,WILDCARD
!byte $A0,$04
!byte $8C,WILDCARD,WILDCARD
!byte $A0,$01
!byte $B1,$48
!byte $AA
!byte $A0,$0F
!byte $D1,$48
!byte $F0,$1B
!byte $8A
!byte $48
!byte $B1,$48
!byte $AA
!byte $68
!byte $48
!byte $91,$48
!byte $BD,$8E,$C0
bcc +
jmp T00_IsNotRWTS
+
; DOS 3.3 RWTS patchers
!source "../patchers/t00_artsci.a"
!source "../patchers/t00_bademu.a"
!source "../patchers/t00_bademu2.a"
!source "../patchers/t00_border.a"
!source "../patchers/t00_dakin5.a"
!source "../patchers/t00_datasoft2.a"
!source "../patchers/t00_earthware.a"
!source "../patchers/t00_jmpb500.a"
!source "../patchers/t00_jmpb660.a"
!source "../patchers/t00_jmpb720.a"
!source "../patchers/t00_jmpbbfe.a"
!source "../patchers/t00_jmpbcf0.a"
!source "../patchers/t00_jmpbeb1.a"
!source "../patchers/t00_jmpbeca.a"
!source "../patchers/t00_jsrb6cc.a"
!source "../patchers/t00_mastery.a"
!source "../patchers/t00_methods.a"
!source "../patchers/t00_microfun.a"
!source "../patchers/t00_microfun2.a"
!source "../patchers/t00_milliken.a"
!source "../patchers/t00_muserwts.a"
!source "../patchers/t00_panglosdos.a"
!source "../patchers/t00_rps.a"
!source "../patchers/t00_rwtsswap.a"
!source "../patchers/t00_rwtsswapmicrofun.a"
!source "../patchers/t00_springboard.a"
!source "../patchers/t00_sunburst.a"
!source "../patchers/t00_sve.a"
!source "../patchers/t00_swordthrust.a"
; ----- add new DOS 3.3 patchers above this line -----
!source "../patchers/t00_nibtable.a"
!source "../patchers/t00_rwts.a"
!source "../patchers/t00_diskvol.a"
; /!\ execution falls through here
!source "../patchers/sunburst.a"
!source "../patchers/jmpbcf0.a"
!source "../patchers/jmpbeb1.a"
!source "../patchers/jmpbeca.a"
!source "../patchers/jmpb660.a"
!source "../patchers/jmpb720.a"
!source "../patchers/bademu.a"
!source "../patchers/bademu2.a"
!source "../patchers/rwts.a"
!source "../patchers/rwtslog.a"
!source "../patchers/mecc.a"
!source "../patchers/rol1e.a"
!source "../patchers/rps.a"
!source "../patchers/bb03.a"
!source "../patchers/rwtsswap.a"
!source "../patchers/rwtsswap2.a"
!source "../patchers/rwtsswapmicrofun.a"
!source "../patchers/border.a"
!source "../patchers/jmpae8e.a"
!source "../patchers/jmpbbfe.a"
!source "../patchers/datasoft.a"
!source "../patchers/nibtable.a"
!source "../patchers/milliken.a"
!source "../patchers/methods.a"
!source "../patchers/jsr8b3.a"
!source "../patchers/laureate.a"
!source "../patchers/pascalrwts.a"
!source "../patchers/micrograms.a"
!source "../patchers/dos32.a"
!source "../patchers/dos32dlm.a"
!source "../patchers/microfun.a"
!source "../patchers/microfun2.a"
!source "../patchers/panglosdos.a"
!source "../patchers/rdos13.a"
!source "../patchers/swordthrust.a"
!source "../patchers/dakin5.a"
!source "../patchers/muserwts.a"
!source "../patchers/artsci.a"
!source "../patchers/springboard.a"
!source "../patchers/hoffman.a"
!source "../patchers/datasoft2.a"
!source "../patchers/jmpb500.a"
!source "../patchers/mastery.a"
!source "../patchers/jsrb6cc.a"
!source "../patchers/earthware.a"
!source "../patchers/sve.a"
;add only above this line
!source "../patchers/diskvol.a"
T00_IsNotRWTS
; patchers that run on every disk
!source "../patchers/t00_bb03.a"
!source "../patchers/t00_datasoft.a"
!source "../patchers/t00_dos32.a"
!source "../patchers/t00_dos32dlm.a"
!source "../patchers/t00_hoffman.a"
!source "../patchers/t00_jsr8b3.a"
!source "../patchers/t00_laureate.a"
!source "../patchers/t00_mecc.a"
!source "../patchers/t00_micrograms.a"
!source "../patchers/t00_pascalrwts.a"
!source "../patchers/t00_rdos13.a"
!source "../patchers/t00_rol1e.a"
!source "../patchers/t00_rwtslog.a"
rts
!if * > $4000 {

View File

@ -272,7 +272,7 @@ AnalyzeTrack
; /!\ execution falls through here
@applyToAll
; run these modules in verify and crack mode
!source "patchers/t11diskvol.a" ; T11 && gIsRWTS only
!source "patchers/t11diskvol.a" ; T11 only
!source "patchers/t02volumename.a" ; T02 && gIsBoot0 only
bit gMode
bmi +
@ -308,10 +308,10 @@ AnalyzeTrack
!source "patchers/jmp2012.a" ; T02 only
!source "patchers/jmpb400.a" ; T02 && gIsBoot0 only
!source "patchers/advint.a" ; gAdventureInternational only
!source "patchers/jsr8635.a" ; gIsRWTS only
!source "patchers/jsr8635.a" ; gIsBoot0 only
!source "patchers/jmpb4bb.a" ; T02 only
!source "patchers/dos32muse.a" ; T01 && gIsDOS32 only
!source "patchers/sra.a" ; gIsDOS32 || gIsRWTS only
!source "patchers/sra.a" ; gIsDOS32 || gIsBoot0 only
!source "patchers/sierra13.a" ; gIsDOS32 only
!source "patchers/ssprot.a" ; gIsF7F6 only
!source "patchers/f7f6.a" ; gIsF7F6 only
@ -415,8 +415,8 @@ _byte_skip_hi:
!source "id/davidson.a"
!source "id/holle.a"
!source "id/phoenix.a"
!source "id/bootfailure.a"
!source "id/555.a"
!source "id/bootfailure.a"
!source "print.a"
!source "compare.a"
!source "modify.a"

View File

@ -26,8 +26,7 @@
; (This filter is subject to revision if we find
; additional samples.)
;
lda gIsBoot0
ora gPossibleD5D5F7
lda gPossibleD5D5F7
bne .exit
+ ldy #$20

View File

@ -1,24 +0,0 @@
;-------------------------------
; #JMPAE8E
; Late stage DOS jumps to $AE8E
; for a nibble check
; e.g. Alien Addition
;-------------------------------
!zone {
lda gIsBoot0 ; if DOS 3.3 boot0 loader
ora gIsBoot1 ; and DOS 3.3 boot1 loader
bne .exit
lda #$0D
ldx #$4D
ldy #$03
jsr compare ; and T00,S0D,$4D ==
!byte $4C,$8E,$AE
bcs .exit
jsr PrintByID
!byte s_jmpae8e
inx ; X=#$4E
dey ; Y=#$01
jsr modify ; then set T00,S0D,$4E =
!byte $80,$A1
.exit
}

View File

@ -11,7 +11,7 @@
; - Leadsheeter Utilities
;-------------------------------
!zone {
lda gIsDiversi ; only if we found Diversi-DOS boot sector earlier
lda gIsDiversi ; only seen this protection on Diversi-DOS disks
bne .exit
ldy #14
jsr SearchTrack

View File

@ -24,9 +24,8 @@
!byte s_lsr6a
inc gPatchCount
+
lda .sector+1
ldx #$EF
ldy #$07
dey
jsr compare
!byte $48
!byte $68

View File

@ -1,47 +0,0 @@
;-------------------------------
; #RWTSSWAP2
; after DOS loads, program calls
; subroutines at $BA69 and $BA7D
; to swap RWTS parameters on the
; fly
; e.g. Mask Parade
;-------------------------------
!zone {
_rwtsswap2
lda gIsBoot0 ; if DOS 3.3 boot0 loader
bne .exit
lda #$04
ldx #$69
ldy #$13
jsr compare ; and T00,S04,$69 ==
!byte $A9,$AB
!byte $8D,$4B,$B8
!byte $A9,$FF
!byte $20,$DF,$BC
!byte $20,$EC,$BC
!byte $A9,$AA
!byte $8D,$29,$BA
!byte $60
bcs .exit
ldx #$7D
ldy #$15
jsr compare ; and T00,S04,$7D ==
!byte $A9,$FF
!byte $8D,$4B,$B8
!byte $A9,$DE
!byte $20,$DF,$BC
!byte $A9,$AA
!byte $20,$EC,$BC
!byte $A9,$96
!byte $8D,$29,$BA
!byte $60
bcs .exit ; passport-test-suite/Mask Parade.woz [C=0] matches
ldx #$69
ldy #$01
jsr modify ; then set T00,S04,$69 =
!byte $60
ldx #$7D
jsr modify ; and set T00,S04,$7D =
!byte $60
.exit
}

View File

@ -10,7 +10,7 @@
; - Xyphus
;-------------------------------
!zone {
ldx gTrack ; and track 1
ldx gTrack ; if track = 1
dex
bne .exit
lda #$04

View File

@ -1,6 +1,6 @@
;-------------------------------
; #SIGCHECK
; productized fat track protection check
; productized extra wide track protection check
;
; tested on
; - Advanced Electricity

View File

@ -9,8 +9,8 @@
; - Photar
;-------------------------------
!zone {
lda gIsRWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$0A
ldx #$FE

View File

@ -13,8 +13,9 @@
; - Let's Go There: Beginning Map and Geography Skills (Troll Associates)
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$03
ldx #$4F
ldy #$11

View File

@ -11,8 +11,9 @@
; - Dinosaur Days
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$03
ldx #$4F
ldy #$11

View File

@ -26,7 +26,6 @@
ldx gIsDavidDOS
beq .maybe
lda gIsBoot0 ; if DOS 3.3 boot0 loader
ora gIsBoot1 ; and DOS 3.3 boot1 loader
bne .noButInYellow
lda #$05 ; sector to check for DOS 3.3 variant
.maybe

View File

@ -7,9 +7,9 @@
; Border Software
;-------------------------------
!zone {
lda gIsBoot0 ; if DOS 3.3 boot0 loader
ora gIsBoot1 ; and DOS 3.3 boot1 loader
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$08
ldx #$5A
ldy #$0A

View File

@ -8,8 +8,9 @@
; - Rings of Saturn
;-------------------------------
!zone {
lda gIsRWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$00
ldx #$B3
ldy #(@compareend-@comparestart)

View File

@ -4,8 +4,8 @@
; e.g. Canyon Climber, Fathom's 40
;-------------------------------
!zone {
lda gIsRWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$01
ldx #$48

View File

@ -5,8 +5,8 @@
; or even its own DOS
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$01
ldx #$EE

View File

@ -10,8 +10,8 @@
; - Star Search (Earthware Computer Services)
;-------------------------------
EARTHWARE
lda gIsBoot0
bne @exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$F6

View File

@ -15,6 +15,8 @@
; - Good Thinking! Sequencing Events Level Two (Hoffman Educational Systems)
;-------------------------------
!zone {
; gTrack = 0 here
lda #$0C
ldx #$00
ldy #$19

View File

@ -8,8 +8,8 @@
; Starship Commander (1981, Voyager Software)
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$B5
sta gDisplayBytes+1 ; address (hi)

View File

@ -6,8 +6,9 @@
;-------------------------------
!zone {
_jmpb660
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$DC
ldy #$1D

View File

@ -7,8 +7,9 @@
;-------------------------------
!zone {
_jmpb720
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$0B
ldx #$08
ldy #$18

View File

@ -1,4 +1,3 @@
; #JMPBBFE
; marketed as 'Lock-It-Up'
; boot0 jumps to ($BBFE) instead of ($08FD)
@ -40,6 +39,7 @@
; - Kindercomp (first release)
; - Knowledge Master (all disks)
; - La Triviata
; - Mask Parade
; - MasterType and Training Ground 2.1
; - MasterType's Figures and Formulas
; - Mastering Consonants
@ -93,11 +93,13 @@
;-------------------------------
!zone {
_jmpbbfe
lda gIsBoot0 ; if DOS 3.3 boot0 loader
bne .exit
; gTrack = 0 here
; Caller found DOS 3.3 RWTS
lda #$00
ldx #$4B
ldy #$02
jsr compare ; and T00,S00,$4B ==
jsr compare ; if T00,S00,$4B ==
!byte $FE,$BB
bcs .exit
@ -120,7 +122,7 @@ _jmpbbfe
!byte $8D,$00,$02
bcs .exit
.yes stx + ; byte offset (varies)
.yes stx @offset ; byte offset (varies)
inx
inx
inx
@ -133,20 +135,24 @@ _jmpbbfe
ldx #$FE
ldy #$01
jsr modify
+ !byte $FD ; SMC (byte offset of new entry point)
@offset !byte $FD ; SMC (byte offset of new entry point)
; check for code that branches over a serial number
ldx #$5E
iny ; Y=#$02
jsr compare ; check for code that branches over serial number
jsr compare
!byte $D0,$05
bcs .exit
bcs .checkSwapper
; see if there is actually a non-zero serial number
inx
inx
ldy #$05
jsr compare ; see if there is actually a non-zero serial number
jsr compare
!byte $00,$00,$00,$00,$00
bcc .exit ; passport-test-suite/Quadrilaterals.woz [C=1] here
bcc .checkSwapper ; passport-test-suite/Quadrilaterals.woz [C=1] here
ldy #4
- lda $1560, y
@ -158,5 +164,24 @@ _jmpbbfe
jsr PrintByID
!byte s_lockitupserial
.checkSwapper
; check for RWTS swappers
lda #$04
ldx #$69
ldy #$01
jsr compare ; if T00,S04,$69 ==
!byte $A9
bcs + ; passport-test-suite/Mask Parade.woz [C=0] matches
jsr modify ; then set T00,S04,$69 =
!byte $60
+
ldx #$7D
jsr compare ; if T00,S04,$7D ==
!byte $A9
bcs + ; passport-test-suite/Mask Parade.woz [C=0] matches
jsr modify ; then set T00,S04,$7D =
!byte $60
+
.exit
}

View File

@ -8,8 +8,9 @@
;-------------------------------
!zone {
_jmpbcf0
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$03
ldx #$94
ldy #$08

View File

@ -31,8 +31,9 @@
;-------------------------------
!zone {
_jmpbeb1
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$48
ldy #$10

View File

@ -8,8 +8,9 @@
; see jmpbeb1.a for compatibility list
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$F4
ldy #$0D

View File

@ -6,8 +6,9 @@
; - KidWriter (Spinnaker Software)
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$07
ldx #$00
ldy #$03

View File

@ -6,8 +6,9 @@
; - Mastery Arithmetic Games v1.2 (Mastery Development)
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$07
ldx #$00
ldy #$03

View File

@ -8,6 +8,8 @@
; e.g. 4: A-201 Conquering Whole Numbers
;-------------------------------
!zone {
; gTrack = 0 here
lda gMECCFastloadType
cmp #ID_MECC1
bcc .scaninfo

View File

@ -6,8 +6,9 @@
; and others by Methods & Solutions
;-------------------------------
!zone {
lda gIsBoot0 ; if DOS 3.3 boot0 loader
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$08
ldx #$5A
ldy #$03

View File

@ -11,8 +11,9 @@
; - Short Circuit
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
ldy #$09
jsr SearchTrack
!byte $A0,$00 ; LDY #$00

View File

@ -6,8 +6,9 @@
; - Crown Of Arthain
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3-shaped RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$5E
ldy #$03

View File

@ -7,6 +7,9 @@
; - The Function Game (MUSE)
;-------------------------------
!zone {
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda gIsMUSERWTS
bne .exit
lda #$06

View File

@ -6,8 +6,9 @@
;-------------------------------
!zone {
_nibtable
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$02
ldx #$6D
ldy #$03

View File

@ -19,7 +19,7 @@
!zone {
lda gIsPanglosDOS ; only if PanglossianDOS
bne .exit
ldy #6
ldy #$06
jsr SearchTrack
!byte $C9,$AD ;CMP #$AD
!byte $D0,$E7 ;BNE *-$17
@ -32,7 +32,7 @@
ldy #$02
jsr modify
!byte $A9,$00 ;LDA #$00
ldy #6
ldy #$06
jsr SearchTrack
!byte $C9,$96 ;CMP #$96
!byte $D0,$E7 ;BNE *-$17
@ -47,7 +47,7 @@
!byte $A9,$00 ;LDA #$00
;Monopoly
ldy #6
ldy #$06
jsr SearchTrack
!byte $C9,$AB ;CMP #$AB
!byte $D0,$A4 ;BNE *-$5A
@ -58,11 +58,10 @@
ldy #$01
jsr modify
!byte $AA
ldy #3
ldy #$03
jsr SearchTrack
!byte $4C,$56,$BB ;JMP $BB56
bcs .exit
ldy #$03
jsr modify
!byte $AD,$00,$E0 ;LDA $E000
.exit

View File

@ -21,8 +21,8 @@
; - Problem Solving in Algebra (Encyclopaedia Britannica)
;-------------------------------
!zone {
lda gIsBoot1 ; and DOS 3.3 boot1 loader
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$01
ldx #$48
@ -39,7 +39,6 @@
!byte $EA
bcs .variant0 ; passport-test-suite/Math Skills Elementary Level.woz [C=1] here
ldy #$04
jsr modify ; then set T00,S03,$3E =
!byte $C9,$AA
!byte $F0,$5C
@ -61,8 +60,9 @@
.variant1
;A=#$01 here regardless of how we got here
;Y=#$02 here regardless of how we got here
ldx #$87
ldy #$03
iny
jsr compare ; if T00,S01,$87 ==
!byte $6C,$58,$9D
bcs .variant2 ; passport-test-suite/Pac-Man (Thunder Mountain).woz [C=0] here

View File

@ -3,9 +3,8 @@
;-------------------------------
!zone {
ldy gIsRWTS ; DOS 3.3-shaped RWTSen only
beq .initmatch1
jmp .exit
ldy #0
jmp .initmatch1
; address prologue (read)
; A,X

View File

@ -5,6 +5,8 @@
; but don't require any patches
;-------------------------------
_rwtslog_start
; gTrack = 0 here
bit gMode ; nothing to do here in verify mode
bmi @lsr6a_start
jmp _rwtslog_end

View File

@ -7,9 +7,9 @@
; e.g. Puzzle Master
;-------------------------------
!zone {
lda gIsBoot0 ; if DOS 3.3 boot0 loader
ora gIsBoot1 ; and DOS 3.3 boot1 loader
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$04
ldx #$69
ldy #$0B

View File

@ -6,6 +6,9 @@
; - Crown of Arthain
;-------------------------------
!zone {
; gTrack = 0 here
; Caller found DOS 3.3 RWTS
lda #$06
ldx #$56
ldy #$05

View File

@ -11,8 +11,9 @@
; - The Chalice of Mostania (Coastal)
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$03
ldx #$92
ldy #$07

View File

@ -57,13 +57,13 @@
; - Word Quest (1985)
;-------------------------------
!zone {
sec
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$03
ldx #$40
ldy #$01
jsr compare ; and T00,S03,$40 ==
jsr compare ; if T00,S03,$40 ==
!byte $D0
bcs .exit
ldx #$9C

View File

@ -7,8 +7,9 @@
; - The Fourth R - Reasoning
;-------------------------------
!zone {
lda gIsRWTS ; if DOS 3.3 RWTS
bne .exit
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$08
ldx #$5A
ldy #$03

View File

@ -6,6 +6,9 @@
; - Swordthrust
;-------------------------------
!zone {
; gTrack = 0
; Caller found DOS 3.3 RWTS
lda #$01
ldx #$75
ldy #(@end_swordthrust-@begin_swordthrust)

View File

@ -22,10 +22,7 @@
jsr PrintByID
!byte s_trillium
inx
inx
inx
inx
jsr inx4
ldy #$01
jsr modify
!byte $2C ; BIT

View File

@ -56,7 +56,7 @@ StringTableLow
!byte <.jmpbeca
!byte <.bb03
!byte <.rps
!byte <.jmpae8e
!byte <.nodiskin
!byte <.diskvol
!byte <.d5d5f7
!byte <.construct
@ -156,7 +156,6 @@ StringTableLow
!byte <.erasingserialnumber
!byte <.lockitupserial
!byte <.protection
!byte <.nodiskin
StringTableHigh
!byte >.header
@ -207,7 +206,7 @@ StringTableHigh
!byte >.jmpbeca
!byte >.bb03
!byte >.rps
!byte >.jmpae8e
!byte >.nodiskin
!byte >.diskvol
!byte >.d5d5f7
!byte >.construct
@ -307,7 +306,6 @@ StringTableHigh
!byte >.erasingserialnumber
!byte >.lockitupserial
!byte >.protection
!byte >.nodiskin
;
; Text can contain substitution strings, which
@ -343,7 +341,7 @@ StringTableHigh
.passport
!text "Passport ",$00
.header
!text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2021-06-13",$00
!text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2021-06-14",$00
.bar9
!text "_________",$00
.bar18
@ -558,10 +556,7 @@ StringTableHigh
.rps
!text "@",s_found,"RPS @",s_protectioncheck,$8D
!text "Some sectors on T02 @",s_maybeunreadable,$8D,$00
.jmpae8e
!text "T00,S0D Disk calls a @",s_protectioncheck," at"
!text "$AE8E after initializing DOS",$8D,$00
.diskvol
.diskvol
!text "@",s_rwts,"requires a non-standard",$8D
!text "disk volume number",$8D,$00
.d5d5f7

View File

@ -50,7 +50,7 @@ s_e7 = $2C
s_jmpbeca = $2D
s_bb03 = $2E
s_rps = $2F
s_jmpae8e = $30
s_nodiskin = $30
s_diskvol = $31
s_d5d5f7 = $32
s_construct= $33
@ -150,4 +150,3 @@ s_555 = $90
s_erasingserialnumber = $91
s_lockitupserial = $92
s_protection = $93
s_nodiskin = $94