add support for Zoom Grafix

This commit is contained in:
4am 2019-04-07 20:02:19 -04:00
parent 852dfc43f5
commit edb2ebd60c
10 changed files with 86 additions and 9 deletions

View File

@ -64,6 +64,10 @@
; set in IDBootloader() after reading T00,S00
FIRSTFILTER
;gIsPhoenix
!byte FALSE ; 0=true, 1=false
; reset before each operation
; set in IDBootloader() after reading T00,S00
;gIsHolle
!byte FALSE ; 0=true, 1=false
; reset before each operation

View File

@ -100,9 +100,10 @@ gIsDavidson = gIsPanglosDOS-$01 ; byte
gIsRDOS13 = gIsDavidson-$01 ; byte
gIsMUSERWTS = gIsRDOS13-$01 ; byte
gIsHolle = gIsMUSERWTS-$01 ; byte
gIsPhoenix = gIsHolle-$01 ; byte
;LASTFILTER ; add new gIs* above this line
;gIsInfocom18 is a special case whose ID is not in the regular inspection path
gIsInfocom18 = gIsHolle-$01 ; byte
gIsInfocom18 = gIsPhoenix-$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
@ -175,6 +176,7 @@ ConstructStandardDelivery = jConstructStandardDelivery
!warn "gIsDavidson=",gIsDavidson
!warn "gIsMUSERWTS=",gIsMUSERWTS
!warn "gIsHolle=",gIsHolle
!warn "gIsPhoenix=",gIsPhoenix
!warn "gIsRDOS13=",gIsRDOS13
!warn "gIsInfocom18=",gIsInfocom18
!warn "gIs13Sector=",gIs13Sector

View File

@ -217,16 +217,18 @@ IDBootloader
lda #TRUE
sta gIsProDOS
jsr IDVolumeName
bcs .useuniv
; [note: execution may fall through here]
bcc +
jmp .useuniv
+
;
; Dinkey-DOS (ProDOS file structure with DOS 3.3-ish RWTS in language card)
; detectable now because IDVolumeName just read the first sector of the
; volume directory into memory so we can look for a unique filename
;
jsr IDDinkeyDOS
bcs .useuniv
lda #s_dinkeydos
bcc +
jmp .useuniv
+ lda #s_dinkeydos
jsr PrintByID
lda #TRUE
sta gIsDinkeyDOS
@ -264,6 +266,7 @@ IDBootloader
beq .useuniv ; always branches
;
; Micrograms bootloader
; (just for display)
;
+ jsr IDMicrograms
bcs +
@ -272,6 +275,7 @@ IDBootloader
bcc .useuniv ; always branches
;
; Quick-DOS
; (just for display)
;
+ jsr IDQuickDOS
bcs +
@ -280,14 +284,17 @@ IDBootloader
bcc .useuniv ; always branches
;
; RDOS
; (just for display)
;
+ jsr IDRDOS
bcs +
lda #s_rdos
jsr PrintByID
bcc .useuniv ; always branches
;
; Dav Holle encrypted bootloader
; (will be decrypted and patched)
;
+ jsr IDHolle
bcs +

View File

@ -3,8 +3,7 @@
; identify Micrograms bootloader
;
; in: track buffer contains T00,S00
; out: C clear if MECC bootloader was found
; (and track buffer now contains all of track 0)
; out: C clear if Micrograms bootloader was found
; C set if not found
; all other flags clobbered
; all registers clobbered

19
src/id/phoenix.a Normal file
View File

@ -0,0 +1,19 @@
;-------------------------------
; IDPhoenix
; identify Phoenix bootloader
;
; in: track buffer contains T00,S00
; out: C clear if Phoenix bootloader was found
; C set if not found
; all other flags clobbered
; all registers clobbered
;-------------------------------
!zone {
IDPhoenix
lda #$00
ldx #$B8
ldy #$03
jsr compare
!byte $AC,$B7,$F6
rts
}

View File

@ -208,6 +208,14 @@ _Inspect1a
lda #TRUE
sta gAdventureInternational
;
; Check for Phoenix bootloader/RWTS
; (implies possible secondary protection elsewhere)
;
+ jsr IDPhoenix
bcs +
lda #TRUE
sta gIsPhoenix
;
; Turn off drive recalibration
;
+ lda jCallRWTS+2; check for code at $BDD2

View File

@ -151,6 +151,7 @@ FirstMover
!source "id/panglosdos.a"
!source "id/davidson.a"
!source "id/holle.a"
!source "id/phoenix.a"
!source "print.a"
!source "compare.a"
!source "modify.a"
@ -844,6 +845,7 @@ _applyToAll
!source "patchers/aacount.a"
!source "patchers/hallabs.a" ; T01 only
!source "patchers/holle.a" ; gIsHolle only
!source "patchers/zoomgrafix.a" ; gIsPhoenix only
lda gPatchCount
beq .nopatches

31
src/patchers/zoomgrafix.a Normal file
View File

@ -0,0 +1,31 @@
;-------------------------------
; #ZOOMGRAFIX
; secondary protection expects
; disk volume number 0
;
; tested on
; - Zoom Grafix (Phoenix Software) multiple versions
;-------------------------------
!zone {
bit gMode ; nothing to do here in verify-only mode
bpl .exit
lda gIsPhoenix ; only if we found Phoenix boot sector earlier
bne .exit
ldy #$0C
jsr SearchTrack
!byte $4C,$4D,$D0,$E2,$28,$4B,$42,$C9 ; 'LM = PEEK(KB - 2058)' in BASIC
!byte $32,$30,$35,$38
bcs .exit
sta gDisplayBytes
lda #s_diskvol0
jsr PrintByID
txa
clc
adc #$0B
tax
lda gDisplayBytes
ldy #$01
jsr modify
!byte $35 ; 'LM = PEEK(KB - 2055)' instead
.exit
}

View File

@ -131,6 +131,7 @@ StringTable
!word .hallabs
!word .holle
!word .hoffman
!word .diskvol0
;
; Text can contain substitution strings, which
; are replaced by current values at runtime. Each
@ -156,7 +157,7 @@ StringTable
; can be set directly before calling PrintByID.
;
.header
!text "Passport by 4am 2019-04-04",$00
!text "Passport by 4am 2019-04-07",$00
.mainmenu
!text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D
!text " "
@ -481,4 +482,7 @@ StringTable
!text "T00,S00 Found Holle bootloader",$8D,$00
.hoffman
!text "T%t,S%0 Found Hoffman protection check",$8D,$00
.diskvol0
!text "T%t,S%s Secondary protection requires",$8D
!text "disk volume number 000",$8D,$00
}

View File

@ -117,4 +117,5 @@ s_springboard =$6F
s_hallabs = $70
s_holle = $71
s_hoffman = $72
STRINGCOUNT = $73
s_diskvol0 = $73
STRINGCOUNT = $74