add support for Enlightenment disks [fixes Paul Whitehead Teaches Chess]

This commit is contained in:
4am 2022-07-10 00:16:59 -04:00
parent d4793ce09f
commit 5f6f15ce78
11 changed files with 151 additions and 5 deletions

View File

@ -115,6 +115,10 @@ were common in educational software.
e.g. Problem Solving in Algebra,
Math Skills: Elementary Level
- Enlightenment
e.g. Paul Whitehead Teaches Chess,
Living Chess Library
- Focus Media
e.g. The Time Tunnel (series),
Travels with Za-Zoom
@ -417,7 +421,7 @@ IN THE SOFTWARE.
## History
2022-07-07
2022-07-12
- NEW: patchers/mak.a (fixes "Kittens,
Kids, and a Frog")
- NEW: patchers/t00_baudville.a (fixes
@ -428,6 +432,8 @@ IN THE SOFTWARE.
pfs:* Pascal titles)
- NEW: patchers/pfs.prodos.a (fixes
pfs:* ProDOS titles)
- NEW: patchers/enlightenment.a (fixes
Paul Whitehead Teaches Chess)
- IMPROVED: id/555.a (fixes Fax,
Funbunch College Prep)
- IMPROVED: patchers/ea.a (fixes

View File

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

View File

@ -184,9 +184,10 @@ gPossibleWoodbury = gPossibleMECCSwapper-$01 ; byte
gPossibleB4BBBasic = gPossibleWoodbury-$01 ; byte
gIsLowDOS = gPossibleB4BBBasic-$01 ; byte
gIsBaudville = gIsLowDOS-$01 ; byte
gIsEnlightenment = gIsBaudville-$01 ; byte
;LASTFILTER ; add new gIs* above this line
;gIsInfocom18 is a special case whose ID is not in the regular inspection path
gIsInfocom18 = gIsBaudville-$01 ; byte
gIsInfocom18 = gIsEnlightenment-$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

18
src/id/enlightenment.a Normal file
View File

@ -0,0 +1,18 @@
;-------------------------------
; IDEnlightenment
; identify Enlightenment bootloader
;
; in: $800..$8FF contains T00,S00
; out: C clear if Enlightenment bootloader found
; C set otherwise
; all other registers & flags clobbered
;-------------------------------
!macro IDEnlightenment {
lda #$08
ldx #$01
ldy #$04
jsr CompareMemory
!byte $A9,$B7
!byte $85,$27
; passport-test-suite/Paul Whitehead Teaches Chess.woz [C=0] matches
}

View File

@ -57,6 +57,7 @@ IDBootloader
.sanity
;
; Quick sanity check -- only recognized values for $0800 are
; $00 = some Enlightenment disks
; $01 = most disks
; $02 = Special Delivery (DOS 3.3P)
; $05 = some EA disks
@ -67,7 +68,19 @@ IDBootloader
bcc .sane
cmp #$05
beq .sane
+ jmp UseUniversal
- jmp UseUniversal
+
;
; Try to identify Enlightenment bootloader.
; (in none; out none)
;
+IDEnlightenment
bcs -
lda #TRUE
sta gIsEnlightenment
jsr PrintByID
!byte s_enlightenmentb0
bvc - ; always branches
.sane
;

View File

@ -96,6 +96,7 @@ T00_IsNotRWTS
!source "../patchers/t00_rol1e.a"
!source "../patchers/t00_sigcheck.a"
!source "../patchers/t00_baudville.a"
!source "../patchers/t00_enlightenment.a"
rts
!if * > $3200 {

View File

@ -1,7 +1,7 @@
;-------------------------------
; Passport
; a 4am hack
; (c) 2016-2021 by 4am
; (c) 2016-2022 by 4am
;
; Permission is hereby granted, free of charge, to any
; person obtaining a copy of this software and associated
@ -72,6 +72,7 @@ NonRelocatable
!source "id/dinkeydos.a"
!source "id/advent.a"
!source "id/baudville.a"
!source "id/enlightenment.a"
!source "id/panglosdos.a"
!source "id/davidson.a"
!source "id/holle.a"
@ -368,6 +369,7 @@ AnalyzeTrack
!source "patchers/b4bbbasic.a" ; gPossibleB4BBBasic only
!source "patchers/sigcheck.a" ; gPossibleSigCheck only
!source "patchers/errord51.a" ; gIsLowDOS only
!source "patchers/enlightenment.a" ; gIsEnlightenment && T02 only
;
; DOS 3.3-specific patchers
;

View File

@ -0,0 +1,50 @@
;-------------------------------
; #ENLIGHTENMENT
; anti-tamper checks on the changes
; we're about to make on track 0
; to disable the RWTS swapper and
; protection check
;-------------------------------
!zone {
lda gIsEnlightenment
bne .exit
lda gTrack
cmp #$02
bne .exit
lda #$01
ldx #$AE
jsr compare1
!byte $48
bcs +
jsr PrintByID
!byte s_tamper
jsr modify1
!byte $EA
+
lda #$01
ldx #$D5
jsr compare1
!byte $48
bcs +
jsr PrintByID
!byte s_tamper
jsr modify1
!byte $EA
+
lda #$09
ldx #$8A
jsr compare3
!byte $A9,$00
!byte $48
bcs +
inx
jsr PrintByID
!byte s_tamper
jsr modify1
!byte $52
+
.exit
}

View File

@ -0,0 +1,41 @@
;-------------------------------
; #T00_ENLIGHTENMENT
; RWTS third data prologue varies,
; also an insane flux-level timing
; protection
;
; tested on
; - Paul Whitehead Teaches Chess
; - King's Indian Defense
; - Living Chess Library - 50 Classic Games
;-------------------------------
!zone {
lda gIsEnlightenment
bne .exit
lda #$0A
ldx #$26
jsr compare2
!byte $85,$3D
bcs +
jsr PrintByID
!byte s_enlightenment
jsr modify2
!byte $18
!byte $60
+
lda #$0C
ldx #$94
jsr compare3
!byte $BD,$00,$BF
bcs +
jsr PrintByID
!byte s_bytrack
jsr modify3
!byte $EA
!byte $A9,$AD
+
.exit
}

View File

@ -213,6 +213,8 @@ StringTableLow ; must be kept in sync with constants in enid.a
!byte <.protection
!byte <.baudville
!byte <.pfs
!byte <.enlightenmentb0
!byte <.enlightenment
StringTableHigh ; must be kept in sync with constants in enid.a
!byte >.header
@ -365,11 +367,13 @@ StringTableHigh ; must be kept in sync with constants in enid.a
!byte >.protection
!byte >.baudville
!byte >.pfs
!byte >.enlightenmentb0
!byte >.enlightenment
.passport
!text "Passport ",$00
.header
!text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2022-07-07",$00
!text "@",s_passport,"by 4am@",s_space7,"@",s_space7," 2022-07-09",$00
.bar9
!text "_________",$00
.bar18
@ -756,3 +760,7 @@ StringTableHigh ; must be kept in sync with constants in enid.a
!text "@",s_found,"Baudville @",s_bootloader,$8D,$00
.pfs
!text "@",s_found,"PFS @",s_protectioncheck,$8D,$00
.enlightenmentb0
!text "@",s_found,"Enlightenment @",s_bootloader,$8D,$00
.enlightenment
!text "@",s_found,"flux timing @",s_protection,$8D,$00

View File

@ -151,3 +151,5 @@ s_lockitupserial = $92
s_protection = $93
s_baudville = $94
s_pfs = $95
s_enlightenmentb0 = $96
s_enlightenment = $97