mirror of
https://github.com/a2-4am/passport.git
synced 2025-02-12 13:30:44 +00:00
support Micrograms bad block check [fixes Granny Applebee's Cookie Factory, Uncle Clyde's Consonant Slide, and several others]
This commit is contained in:
parent
c475e8597c
commit
691e6f8777
@ -184,7 +184,8 @@ were common in educational software.
|
|||||||
e.g. Fantasy Land, Behind The Wheel
|
e.g. Fantasy Land, Behind The Wheel
|
||||||
|
|
||||||
- Micrograms
|
- Micrograms
|
||||||
e.g. Wild West Math
|
e.g. Wild West Math, Granny
|
||||||
|
Applebee's Cookie Factory
|
||||||
|
|
||||||
- Millennium Group
|
- Millennium Group
|
||||||
e.g. The Brain Game, Concentration
|
e.g. The Brain Game, Concentration
|
||||||
@ -427,6 +428,9 @@ Development (unreleased)
|
|||||||
- NEW: patchers/mastery.a (Mastery
|
- NEW: patchers/mastery.a (Mastery
|
||||||
Arithmetic Games)
|
Arithmetic Games)
|
||||||
- NEW: patchers/leisure.a (Clue, RISK)
|
- NEW: patchers/leisure.a (Clue, RISK)
|
||||||
|
- NEW: patchers/errord51.a (Granny
|
||||||
|
Applebee's Cookie Factory, Uncle
|
||||||
|
Clyde's Consonant Slides)
|
||||||
- IMPROVED: patches/mecc.a to erase
|
- IMPROVED: patches/mecc.a to erase
|
||||||
site license information from final
|
site license information from final
|
||||||
generation of MECC disks (by qkumba)
|
generation of MECC disks (by qkumba)
|
||||||
|
@ -73,6 +73,11 @@
|
|||||||
; set in IDBootFailure() after reading T00
|
; set in IDBootFailure() after reading T00
|
||||||
|
|
||||||
FIRSTFILTER
|
FIRSTFILTER
|
||||||
|
;gIsLowDOS
|
||||||
|
!byte FALSE ; 0=true, 1=false
|
||||||
|
; reset before each operation
|
||||||
|
; set in IDVolumeName() after identifying ProDOS bootloader
|
||||||
|
|
||||||
;gPossibleB4BBBasic
|
;gPossibleB4BBBasic
|
||||||
!byte FALSE ; 0=true, 1=false
|
!byte FALSE ; 0=true, 1=false
|
||||||
; reset before each operation
|
; reset before each operation
|
||||||
|
@ -138,9 +138,10 @@ gIsTSR = gIsDiversi-$01 ; byte
|
|||||||
gPossibleMECCSwapper = gIsTSR-$01 ; byte
|
gPossibleMECCSwapper = gIsTSR-$01 ; byte
|
||||||
gPossibleWoodbury = gPossibleMECCSwapper-$01 ; byte
|
gPossibleWoodbury = gPossibleMECCSwapper-$01 ; byte
|
||||||
gPossibleB4BBBasic = gPossibleWoodbury-$01 ; byte
|
gPossibleB4BBBasic = gPossibleWoodbury-$01 ; byte
|
||||||
|
gIsLowDOS = gPossibleB4BBBasic-$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 = gPossibleB4BBBasic-$01 ; byte
|
gIsInfocom18 = gIsLowDOS-$01 ; byte
|
||||||
;gIs13Sector is a special case whose ID is not in the regular inspection path
|
;gIs13Sector is a special case whose ID is not in the regular inspection path
|
||||||
gIs13Sector = gIsInfocom18-$01 ; byte
|
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
|
||||||
|
@ -72,6 +72,21 @@ IDVolumeName
|
|||||||
bne -
|
bne -
|
||||||
lda #$8D
|
lda #$8D
|
||||||
jsr PrintA
|
jsr PrintA
|
||||||
|
|
||||||
|
; while we're here, we check for a specific file that is
|
||||||
|
; always (!) in a specific place in the root directory
|
||||||
|
; (this will unlock a patcher with an expensive search)
|
||||||
|
lda #$0B
|
||||||
|
ldx #$7A
|
||||||
|
ldy #$06
|
||||||
|
jsr compare
|
||||||
|
!byte $4C,$4F,$57,$44,$4F,$53
|
||||||
|
bcs +
|
||||||
|
lda #TRUE
|
||||||
|
sta gIsLowDOS
|
||||||
|
lda #kSectorOptional
|
||||||
|
sta T00S0C
|
||||||
|
+
|
||||||
clc
|
clc
|
||||||
!byte $24 ; hide next SEC
|
!byte $24 ; hide next SEC
|
||||||
.error
|
.error
|
||||||
|
@ -389,6 +389,7 @@ AnalyzeTrack
|
|||||||
!source "patchers/woodbury.a" ; gPossibleWoodbury only
|
!source "patchers/woodbury.a" ; gPossibleWoodbury only
|
||||||
!source "patchers/leisure.a" ; gIsProDOS && T22 only
|
!source "patchers/leisure.a" ; gIsProDOS && T22 only
|
||||||
!source "patchers/b4bbbasic.a" ; gPossibleB4BBBasic only
|
!source "patchers/b4bbbasic.a" ; gPossibleB4BBBasic only
|
||||||
|
!source "patchers/errord51.a" ; gIsLowDOS only
|
||||||
|
|
||||||
_checkPatchCount
|
_checkPatchCount
|
||||||
lda gPatchCount
|
lda gPatchCount
|
||||||
|
53
src/patchers/errord51.a
Normal file
53
src/patchers/errord51.a
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
;-------------------------------
|
||||||
|
; #ERRORD51
|
||||||
|
; sneaky bad block check sets an error callback
|
||||||
|
; then expects the RWTS call not to return
|
||||||
|
; (prints ']ERROR D51' on failure)
|
||||||
|
;
|
||||||
|
; tested on
|
||||||
|
; - Granny Applebee's Cookie Factory
|
||||||
|
; - Hugo Hound's Vowel Sounds (series)
|
||||||
|
; - Marty's Family Reader (series)
|
||||||
|
; - Marty's Reading Workout (series)
|
||||||
|
; - Uncle Clyde's Consonant Slides (series)
|
||||||
|
;-------------------------------
|
||||||
|
ERRORD51
|
||||||
|
lda gIsLowDOS
|
||||||
|
bne @exit
|
||||||
|
|
||||||
|
ldy #$10
|
||||||
|
jsr SearchTrack
|
||||||
|
!byte $A9,WILDCARD
|
||||||
|
!byte $8D,$07,WILDCARD
|
||||||
|
!byte $A9,WILDCARD
|
||||||
|
!byte $8D,$08,WILDCARD
|
||||||
|
!byte $A9,$01
|
||||||
|
!byte $8D,WILDCARD,WILDCARD
|
||||||
|
!byte $20
|
||||||
|
bcs @exit
|
||||||
|
sta gDisplayBytes
|
||||||
|
pha
|
||||||
|
clc
|
||||||
|
adc #BASEPAGE
|
||||||
|
sta @highBytePtr+2
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
jsr inx6
|
||||||
|
stx @highBytePtr+1
|
||||||
|
lda #s_badblock
|
||||||
|
jsr PrintByID
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
ldy #$01
|
||||||
|
jsr modify
|
||||||
|
!byte $4C ; JMP opcode
|
||||||
|
@highBytePtr
|
||||||
|
ldy $FDFD ; SMC
|
||||||
|
sty +
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
ldy #$01
|
||||||
|
jsr modify
|
||||||
|
+ !byte $FD ; SMC (high byte of JMP address)
|
||||||
|
@exit
|
Loading…
x
Reference in New Issue
Block a user