filter d5d5f7 patcher based on markers in T00S00

This commit is contained in:
4am 2017-05-05 18:06:30 -04:00
parent 4016698078
commit edc2f30894
4 changed files with 77 additions and 6 deletions

34
src/id/d5d5f7.a Normal file
View File

@ -0,0 +1,34 @@
;-------------------------------
; IDD5D5F7
; Identify specific version of DOS 3.3 bootloader
; shared by all disks that use the D5D5F7 check.
; Note: this detection pattern makes no logical
; sense; it just happens to be a useful filter for
; the D5D5F7 patcher to use later. It filters out
; about 2/3 of disks on which I've never seen a
; D5D5F7 protection check, so we can save time by
; not doing full-track searches on those disks.
;
; in: $0800..$08FF contains T00,S00
; IDDOS33 returned success
; out: C clear if specific version of DOS 3.3 bootloader found
; C set otherwise
; X,Y preserved
; all other flags and registers clobbered
;-------------------------------
!zone {
IDD5D5F7
lda $084C
cmp #$08
bne .no
lda $08B0
cmp #$B6
bne .no
lda $08D0
cmp #$20
bne .no
clc
!byte $24
.no sec
rts
}

View File

@ -22,6 +22,7 @@ IDBootloader
sta gIsEA sta gIsEA
sta gIsEEEF sta gIsEEEF
sta gIsMECCFastloader sta gIsMECCFastloader
sta gPossibleD5D5F7
lda #$00 lda #$00
sta gLastTrack sta gLastTrack
; ;
@ -50,10 +51,14 @@ IDBootloader
; Exit via custom trace function if found. ; Exit via custom trace function if found.
; ;
jsr IDDOS33 jsr IDDOS33
bcs + bcs .notdos33
lda #TRUE lda #TRUE
sta gIsBoot0 sta gIsBoot0
jsr IDDiversi jsr IDD5D5F7
bcs +
lda #TRUE
sta gPossibleD5D5F7
+ jsr IDDiversi
bcc .diversi bcc .diversi
jsr IDPronto jsr IDPronto
bcc .pronto bcc .pronto
@ -71,7 +76,8 @@ IDBootloader
; early to munge the nibble tables used by the drive firmware. ; early to munge the nibble tables used by the drive firmware.
; Exit via custom trace function if found. ; Exit via custom trace function if found.
; ;
+ jsr ID8b3 .notdos33
jsr ID8b3
bcs + bcs +
lda #s_jsr8b3 lda #s_jsr8b3
jsr PrintByID jsr PrintByID

View File

@ -157,6 +157,7 @@ FirstMover
!source "id/quickdos.a" !source "id/quickdos.a"
!source "id/diversidos.a" !source "id/diversidos.a"
!source "id/prontodos.a" !source "id/prontodos.a"
!source "id/d5d5f7.a"
!source "print.a" !source "print.a"
!source "compare.a" !source "compare.a"
!source "modify.a" !source "modify.a"
@ -806,6 +807,10 @@ gIsMECCFastloader
!byte FALSE ; 0=true, 1=false !byte FALSE ; 0=true, 1=false
; reset before each operation ; reset before each operation
; set in IDBootloader() after reading T00,S00 ; set in IDBootloader() after reading T00,S00
gPossibleD5D5F7
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in IDBootloader() after reading T00,S00
gOnAClearDayYouCanReadForever gOnAClearDayYouCanReadForever
!byte FALSE ; 0=true, 1=false !byte FALSE ; 0=true, 1=false
; retry reads with a captured RWTS forever, ; retry reads with a captured RWTS forever,

View File

@ -2,11 +2,37 @@
; #D5D5F7 ; #D5D5F7
; nibble count with weird bitstream ; nibble count with weird bitstream
; involving $D5 and $F7 as delimiters ; involving $D5 and $F7 as delimiters
; e.g. NoteCard Maker, many Mindplay titles ;
; (Ace Detective, Robomath, Fraction-oids) ; Ace Detective
; Cat 'N Mouse
; Cotton Tales
; Dyno-Quest
; Easy Street
; Fraction-oids
; Math Magic
; RoboMath
; Sum Ducks
; NoteCard Maker
;------------------------------- ;-------------------------------
!zone { !zone {
ldy #$20 ;
; always run on Pascal disks
;
lda gIsPascal
beq +
;
; if DOS 3.3-shaped bootloader, only run if we found
; specific markers on T00,S00 earlier that are shared
; by all the samples I have that use this protection.
; (This filter is subject to revision if we find
; additional samples.)
;
lda gIsBoot0
bne .exit
lda gPossibleD5D5F7
bne .exit
+ ldy #$20
jsr SearchTrack jsr SearchTrack
!byte $BD,$8C,$C0; LDA $C08C,X !byte $BD,$8C,$C0; LDA $C08C,X
!byte $10,$FB ; BPL -$FB !byte $10,$FB ; BPL -$FB