diff --git a/src/passport.a b/src/passport.a index aafad0b..21e4e2f 100755 --- a/src/passport.a +++ b/src/passport.a @@ -404,6 +404,7 @@ _endDiversiPatchers + !source "patchers/bbf9.a" ; gIsProDOS only !source "patchers/fbffencrypted.a" ; gIsProDOS only + !source "patchers/e7everywhere.encrypted.a" ; gIsProDOS only !source "patchers/pfs.prodos.a" ; gIsProDOS && T05 only !source "patchers/leisure.a" ; gIsProDOS && T22 only !source "patchers/memory.config.a" ; gIsProDOS only diff --git a/src/patchers/e7everywhere.a b/src/patchers/e7everywhere.a index 600e2cc..7391e72 100644 --- a/src/patchers/e7everywhere.a +++ b/src/patchers/e7everywhere.a @@ -3,8 +3,9 @@ ; E7 bitstream in the track seam of every track ; ; We can't attack the bitstream itself (like #UNIVERSALE7) because it's not -; within any sector data, so we search for the code instead. AFAIK the code -; is never encrypted. +; within any sector data, so we search for the code instead. Encrypted +; variant is handled elsewhere. +; ; This does a full-track search on every track, which is unfortunate. I've ; only seen this protection on DOS and ProDOS disks, so we filter on that ; to optimize performance a little bit. diff --git a/src/patchers/e7everywhere.encrypted.a b/src/patchers/e7everywhere.encrypted.a new file mode 100755 index 0000000..cfc976f --- /dev/null +++ b/src/patchers/e7everywhere.encrypted.a @@ -0,0 +1,30 @@ +;------------------------------------------------------------------------------ +; #E7EVERYWHERE.ENCRYPTED +; E7 bitstream in the track seam of every track +; +; We can't attack the bitstream itself (like #UNIVERSALE7) because it's not +; within any sector data, so we search for the code instead. +; +; tested on +; - Language Carnival 1 & 2 (DLM) +;------------------------------------------------------------------------------ + ; gIsProDOS is TRUE here + lda #$0F + sta .sector+1 +.sector lda #$FF ; modified at runtime + ldx #$0C + ldy #$0A + jsr compare + !byte $F5 + !byte $20,$00,$20 + !byte $90,$04 + !byte $20,$B0,$FE + !byte $60 + bcs .nextsector ; passport-test-suite/Language Carnival.woz [C=0] matches + jsr PrintByID + !byte s_e7everywhere + jsr modify1 ; change branch target to success path + !byte $09 +.nextsector + dec .sector+1 + bpl .sector diff --git a/src/strings/en.a b/src/strings/en.a index 9ae697b..e527c7d 100755 --- a/src/strings/en.a +++ b/src/strings/en.a @@ -387,7 +387,7 @@ StringTableHigh ; must be kept in sync with constants in enid.a .passport !text "Passport ",$00 .header - !text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2024-04-28",$00 + !text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2024-04-29",$00 .bar9 !text "_________",$00 .bar18