passport/src/patchers/ssprot.a
2021-06-21 11:57:02 -04:00

90 lines
3.0 KiB
Plaintext

;-------------------------------
; #SSPROT
; nibble check hidden inside encrypted startup program SSPROT$$1
;
; tested on
; - Grammar Lab 1 (1986, Southwell)
; - Grammar Lab 2 (1986, Southwell)
; - Mathematics Activities Courseware Level 4 (1983, Houghton Mifflin)
; - Mathematics Activities Courseware Level 6 (1983, Houghton Mifflin)
; - Sailing Through Story Problems (1987, DLM)
; - Spanish Grammar Review - Future and Conditional Tenses of Regular and Irregular Verbs (1984, Gessler)
; - Spanish Grammar Review - Familiar and Formal Commands in the Affirmative and Negative (1984, Gessler)
; - Spanish Grammar Review - Por vs. Para (1984, Gessler)
; - Water in the Air Quiz (1985, EME)
; - Comic Strip Maker (1986, Walt Disney)
; - Wortgefecht (Word Attack German) (1984, Gessler)
;-------------------------------
!zone {
lda gIsF7F6
bne .exit
lda #$0F
sta .sector+1
.sector lda #$FF ; modified above
ldx #$00
ldy #$08
jsr compare
!byte $00,$08,$02,$03 ; DOS 3.3 file addr/len
!byte $D8 ; CLD
!byte $20,$0B,$08 ; JSR $080B
bcs .nextsector
ldx #$17
ldy #$0C
jsr compare
!byte $A9,$00 ; LDA #$00
!byte $AA ; TAX
!byte $5D,$00,$08 ; EOR $0800,X
!byte $CA ; DEX
!byte $F0,$03 ; BEQ +3
!byte $4C,$16,$08 ; JMP $0816
bcs .nextsector
ldx #$76
jsr compare3
!byte $23,$2A,$28
bcc .variant1 ; passport-test-suite/Creative Contraptions.woz [C=0] matches
jsr compare3
!byte $70,$79,$77
bcc .variant2 ; passport-test-suite/Wortgefecht.woz [C=0] matches
jsr compare3
!byte $23,$2A,$24 ; passport-test-suite/Metric System Tutor.woz [C=0] matches
bcc .variant3
.nextsector
dec .sector+1
bpl .sector
bmi .exit
.variant1
dey
jsr modify
!byte $AA,$A2 ; new JMP entry point ($0900 when decrypted)
ldx #$20
iny
jsr modify
!byte $EA ; NOP
!byte $A9,$35 ; LDA #$35
bvc .exit ; always branches
.variant2
dey
jsr modify ; new JMP entry point ($0903 when decrypted)
!byte $FA,$F2
bvc .variant2and3common ; always branches
.variant3
dey
jsr modify ; new JMP entry point ($0903 when decrypted)
!byte $A9,$A1
.variant2and3common
ldx #$20
iny
jsr modify
!byte $EA ; NOP
!byte $A9,$27 ; LDA #$27
.exit
}