mirror of
https://github.com/a2-4am/passport.git
synced 2025-01-18 00:32:37 +00:00
add support for MUSE RWTS [fixes The Function Game, The Caverns of Freitag, others]
This commit is contained in:
parent
0618041e91
commit
831441425d
@ -64,7 +64,11 @@
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
|
||||
FIRSTFILTER
|
||||
;gIsRDOS
|
||||
;gIsMUSERWTS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsRDOS13
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
|
@ -98,9 +98,10 @@ gIsAdvent = gForceDiskVol-$01 ; byte
|
||||
gIsPanglosDOS = gIsAdvent-$01 ; byte
|
||||
gIsDavidson = gIsPanglosDOS-$01 ; byte
|
||||
gIsRDOS13 = gIsDavidson-$01 ; byte
|
||||
gIsMUSERWTS = gIsRDOS13-$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
|
||||
gIsInfocom18 = gIsMUSERWTS-$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
|
||||
@ -171,6 +172,7 @@ ConstructStandardDelivery = jConstructStandardDelivery
|
||||
!warn "gIsAdvent=",gIsAdvent
|
||||
!warn "gIsPanglosDOS=",gIsPanglosDOS
|
||||
!warn "gIsDavidson=",gIsDavidson
|
||||
!warn "gIsMUSERWTS=",gIsMUSERWTS
|
||||
!warn "gIsRDOS13=",gIsRDOS13
|
||||
!warn "gIsInfocom18=",gIsInfocom18
|
||||
!warn "gIs13Sector=",gIs13Sector
|
||||
|
@ -66,7 +66,9 @@ IDDOS33
|
||||
!byte $6C,$3E,$00
|
||||
!byte $EE,$FE,$08
|
||||
!byte $EE,$FE,$08
|
||||
bcs .exit
|
||||
bcc +
|
||||
jmp .exit
|
||||
+
|
||||
;
|
||||
; DOS 3.3 has JSR $FE89 / JSR $FE93 / JSR $FB2F
|
||||
; some Sierra have STA $C050 / STA $C057 / STA $C055 instead
|
||||
@ -93,16 +95,33 @@ IDDOS33
|
||||
+
|
||||
|
||||
;
|
||||
; Sector order map must be standard (no exceptions)
|
||||
; Check sector order map
|
||||
;
|
||||
lda #$00
|
||||
ldx #$4D
|
||||
ldy #$10
|
||||
jsr compare ; if T00,S00,$4D ==
|
||||
!byte $00,$0D,$0B,$09,$07,$05,$03,$01
|
||||
!byte $0E,$0C,$0A,$08,$06,$04,$02,$0F
|
||||
!byte WILDCARD,$0C,$0A,$08,$06,$04,$02,$0F
|
||||
bcs .exit
|
||||
;
|
||||
; Check for MUSE sector order map
|
||||
;
|
||||
lda #$00
|
||||
ldx #$55
|
||||
ldy #$01
|
||||
jsr compare ; if T00,S00,$55 ==
|
||||
!byte $02
|
||||
bcs +
|
||||
lda #TRUE
|
||||
sta gIsMUSERWTS
|
||||
lda #$0E
|
||||
sta precheck_sectors+1
|
||||
lda #kSectorIgnore
|
||||
sta T00S08
|
||||
sta T00S0F
|
||||
+
|
||||
;
|
||||
; Minor variant (e.g. Terrapin Logo 3.0) jumps to $08F0 and back
|
||||
; but is still safe to trace. Check for this jump and match
|
||||
; the code at $08F0 exactly.
|
||||
@ -126,6 +145,9 @@ IDDOS33
|
||||
ldy #$09
|
||||
jsr compare ; if T00,S00,$F0 ==
|
||||
!byte $8D,$FE,$08
|
||||
|
||||
|
||||
|
||||
!byte $EE,$F3,$03
|
||||
!byte $4C,$1F,$08
|
||||
; bcs .exit ; unknown code at $08F0 -> failure
|
||||
|
@ -18,6 +18,13 @@ IDBootloader
|
||||
bne -
|
||||
stx gMECCFastloadType
|
||||
stx gLastTrack
|
||||
ldx #$0F
|
||||
ldy #$F8
|
||||
- tya
|
||||
sta precheck_sectors,x
|
||||
iny
|
||||
dex
|
||||
bpl -
|
||||
|
||||
lda gIsInfocom18
|
||||
bne .check13
|
||||
|
@ -13,16 +13,23 @@ TraceDOS33
|
||||
;
|
||||
lda #$00
|
||||
sta gTrack
|
||||
lda #$09
|
||||
ldy #$00
|
||||
@precheck_loop
|
||||
lda precheck_sectors,y
|
||||
bmi +
|
||||
sta gSector
|
||||
jsr IgnoreAddressChecksum
|
||||
precheck
|
||||
tya
|
||||
pha
|
||||
jsr ReadSector
|
||||
pla
|
||||
tay
|
||||
bcc +
|
||||
jmp FatalError
|
||||
+
|
||||
dec gSector
|
||||
bne precheck
|
||||
iny
|
||||
cpy #$10
|
||||
bne @precheck_loop
|
||||
;
|
||||
; pre-check passed, do the trace
|
||||
;
|
||||
@ -30,6 +37,18 @@ precheck
|
||||
ldx #>TraceDOS33b
|
||||
jmp Trace
|
||||
|
||||
precheck_sectors
|
||||
; This list is (re)initialized in IDBootloader,
|
||||
; then potentially altered in IDDOS33.
|
||||
; Values are logical sector numbers.
|
||||
; There are always 16 (0x10) values in this list.
|
||||
; Negative values are ignored.
|
||||
; Positive values are treated as logical
|
||||
; sector numbers and read from track $00.
|
||||
; Sectors are read in the order listed here.
|
||||
!byte $09,$08,$07,$06,$05,$04,$03,$02,$01
|
||||
!byte $00,$FF,$FE,$FD,$FC,$FB,$FA,$F9,$F8
|
||||
|
||||
;-------------------------------
|
||||
; TraceDOS33b
|
||||
; set up 2nd boot trace at $084A
|
||||
|
@ -112,6 +112,7 @@ AnalyzeT00
|
||||
!source "../patchers/rdos13.a"
|
||||
!source "../patchers/swordthrust.a"
|
||||
!source "../patchers/dakin5.a"
|
||||
!source "../patchers/muserwts.a"
|
||||
|
||||
;add only above this line
|
||||
rts
|
||||
|
30
src/patchers/muserwts.a
Normal file
30
src/patchers/muserwts.a
Normal file
@ -0,0 +1,30 @@
|
||||
;-------------------------------
|
||||
; #MUSERWTS
|
||||
; RWTS changes based on track
|
||||
;
|
||||
; tested on
|
||||
; - The Caverns of Freitag (MUSE)
|
||||
; - The Function Game (MUSE)
|
||||
;-------------------------------
|
||||
!zone {
|
||||
bit gMode ; nothing to do here in verify-only mode
|
||||
bpl .exit
|
||||
lda gIsMUSERWTS
|
||||
bne .exit
|
||||
lda #$06
|
||||
ldx #$F2
|
||||
ldy #$03
|
||||
jsr compare ; if T00,S06,$F2 ==
|
||||
!byte $20,$B6,$B6
|
||||
bcs .exit
|
||||
pha
|
||||
lda #6
|
||||
sta gDisplayBytes
|
||||
lda #s_bytrack
|
||||
jsr PrintByID
|
||||
pla
|
||||
ldy #$01
|
||||
jsr modify ; then set T00,S06,$F2 =
|
||||
!byte $2C
|
||||
.exit
|
||||
}
|
@ -60,7 +60,8 @@ InitSectorMap
|
||||
|
||||
sectormap
|
||||
T00S00
|
||||
T00 !byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
T00 !byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
T00S08 !byte $FF
|
||||
T00S09 !byte $FF
|
||||
T00S0A !byte $FF
|
||||
T00S0B !byte $FF
|
||||
|
@ -152,7 +152,7 @@ StringTable
|
||||
; can be set directly before calling PrintByID.
|
||||
;
|
||||
.header
|
||||
!text "Passport by 4am 2019-02-03",$00
|
||||
!text "Passport by 4am 2019-02-04",$00
|
||||
.mainmenu
|
||||
!text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D
|
||||
!text " "
|
||||
|
Loading…
x
Reference in New Issue
Block a user