mirror of
https://github.com/a2-4am/passport.git
synced 2024-09-30 21:54:50 +00:00
support Choplifter copying
This commit is contained in:
parent
2ea34407e6
commit
74a6d52420
@ -218,7 +218,7 @@ IDBootloader
|
|||||||
sta gIsProDOS
|
sta gIsProDOS
|
||||||
jsr IDVolumeName
|
jsr IDVolumeName
|
||||||
bcc +
|
bcc +
|
||||||
jmp .useuniv
|
jmp UseUniversal
|
||||||
+
|
+
|
||||||
;
|
;
|
||||||
; Dinkey-DOS (ProDOS file structure with DOS 3.3-ish RWTS in language card)
|
; Dinkey-DOS (ProDOS file structure with DOS 3.3-ish RWTS in language card)
|
||||||
@ -227,7 +227,7 @@ IDBootloader
|
|||||||
;
|
;
|
||||||
jsr IDDinkeyDOS
|
jsr IDDinkeyDOS
|
||||||
bcc +
|
bcc +
|
||||||
jmp .useuniv
|
jmp UseUniversal
|
||||||
+ lda #s_dinkeydos
|
+ lda #s_dinkeydos
|
||||||
jsr PrintByID
|
jsr PrintByID
|
||||||
lda #TRUE
|
lda #TRUE
|
||||||
|
@ -74,6 +74,11 @@ IDDOS32LO
|
|||||||
ldy #$03
|
ldy #$03
|
||||||
jsr compare
|
jsr compare
|
||||||
!byte $4C,$01,$03; JMP $0301
|
!byte $4C,$01,$03; JMP $0301
|
||||||
|
bcc .exit
|
||||||
|
ldx #$37
|
||||||
|
ldy #$03
|
||||||
|
jsr compare
|
||||||
|
!byte $4C,$01,$03; JMP $0301
|
||||||
.exit rts
|
.exit rts
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,10 +104,15 @@ TraceDOS32LO
|
|||||||
jmp $0801
|
jmp $0801
|
||||||
|
|
||||||
.TraceDOS32LOb
|
.TraceDOS32LOb
|
||||||
lda #<.TraceDOS32c
|
ldy #$00
|
||||||
sta $0842
|
lda $0837
|
||||||
|
cmp #$4C
|
||||||
|
beq +
|
||||||
|
ldy #$0A
|
||||||
|
+ lda #<.TraceDOS32c
|
||||||
|
sta $0838,y
|
||||||
lda #>.TraceDOS32c
|
lda #>.TraceDOS32c
|
||||||
sta $0843
|
sta $0839,y
|
||||||
jmp $0801
|
jmp $0801
|
||||||
|
|
||||||
.TraceDOS32c
|
.TraceDOS32c
|
||||||
@ -138,7 +148,7 @@ TraceDOS32LO
|
|||||||
!byte $85,$3F
|
!byte $85,$3F
|
||||||
!byte $E6,$3F
|
!byte $E6,$3F
|
||||||
!byte $6C,$3E,$00
|
!byte $6C,$3E,$00
|
||||||
bcs .fail
|
bcs .tryChoplifter
|
||||||
lda $03CC
|
lda $03CC
|
||||||
cmp #$B6
|
cmp #$B6
|
||||||
beq +
|
beq +
|
||||||
@ -174,6 +184,24 @@ TraceDOS32LO
|
|||||||
ldy $0300
|
ldy $0300
|
||||||
jmp $0301
|
jmp $0301
|
||||||
|
|
||||||
|
.tryChoplifter
|
||||||
|
lda #$03
|
||||||
|
ldx #$01
|
||||||
|
ldy #$10
|
||||||
|
jsr CompareMemory
|
||||||
|
!byte $A2,$2E ;LDX #$2E
|
||||||
|
!byte $9A ;TXS
|
||||||
|
!byte $84,$48 ;STY $48
|
||||||
|
!byte $A2,$00 ;LDX #$00
|
||||||
|
!byte $BC,$00,$03 ;LDY $0300,X
|
||||||
|
!byte $88 ;DEY
|
||||||
|
!byte $A9,$EA ;LDA #$EA
|
||||||
|
!byte $20,$26,$03 ;JSR $0326
|
||||||
|
bcs .fail
|
||||||
|
lda #s_choplifter
|
||||||
|
jsr PrintByID
|
||||||
|
jmp Choplifter
|
||||||
|
|
||||||
; something did not match, not comfortable tracing,
|
; something did not match, not comfortable tracing,
|
||||||
; but we know enough to know that the universal RWTS won't work,
|
; but we know enough to know that the universal RWTS won't work,
|
||||||
; so we're done
|
; so we're done
|
||||||
|
@ -411,17 +411,15 @@ ReadWithRWTS
|
|||||||
|
|
||||||
checksector
|
checksector
|
||||||
lda $FFFF ; status of current sector in sector map (modified above)
|
lda $FFFF ; status of current sector in sector map (modified above)
|
||||||
pha
|
|
||||||
cmp #kSectorCustomFirst ; call a custom routine before deciding what to do with this sector?
|
cmp #kSectorCustomFirst ; call a custom routine before deciding what to do with this sector?
|
||||||
bcc +
|
bcc +
|
||||||
cmp #kSectorCustomLast
|
cmp #kSectorCustomLast
|
||||||
bcs +
|
bcs +
|
||||||
pla
|
|
||||||
jsr PreReadSector
|
jsr PreReadSector
|
||||||
pha ; replace status (on stack) with new status returned from PreReadSector
|
+ pha ; replace status (on stack) with new status returned from PreReadSector
|
||||||
+ cmp #kSectorIgnore ; skip this sector?
|
cmp #kSectorIgnore ; skip this sector?
|
||||||
beq nextsector
|
beq nextsector
|
||||||
+ cmp #kSectorSwitchToBuiltinRWTS ; switch to built-in RWTS before reading this sector?
|
cmp #kSectorSwitchToBuiltinRWTS ; switch to built-in RWTS before reading this sector?
|
||||||
bne +
|
bne +
|
||||||
lda gTriedUniv
|
lda gTriedUniv
|
||||||
beq +
|
beq +
|
||||||
@ -499,12 +497,11 @@ checksector
|
|||||||
|
|
||||||
nextsector
|
nextsector
|
||||||
pla
|
pla
|
||||||
dec checksector+1
|
|
||||||
lda checksector+1
|
lda checksector+1
|
||||||
cmp #$FF
|
|
||||||
bne .nodec
|
bne .nodec
|
||||||
dec checksector+2
|
dec checksector+2
|
||||||
.nodec
|
.nodec
|
||||||
|
dec checksector+1
|
||||||
lda gSector
|
lda gSector
|
||||||
sec
|
sec
|
||||||
sbc #$01
|
sbc #$01
|
||||||
@ -524,11 +521,11 @@ nextsector
|
|||||||
jsr ChangeTrack
|
jsr ChangeTrack
|
||||||
jsr IncProgress
|
jsr IncProgress
|
||||||
lda gTrack
|
lda gTrack
|
||||||
bmi .pass
|
bmi Pass
|
||||||
cmp gLastTrack
|
cmp gLastTrack
|
||||||
bcc .pass
|
bcc Pass
|
||||||
jmp .read
|
jmp .read
|
||||||
.pass
|
Pass
|
||||||
bit gMode
|
bit gMode
|
||||||
bmi .passwrite
|
bmi .passwrite
|
||||||
lda #s_pass
|
lda #s_pass
|
||||||
@ -847,6 +844,7 @@ _applyToAll
|
|||||||
!source "patchers/holle.a" ; gIsHolle only
|
!source "patchers/holle.a" ; gIsHolle only
|
||||||
!source "patchers/zoomgrafix.a" ; gIsPhoenix only
|
!source "patchers/zoomgrafix.a" ; gIsPhoenix only
|
||||||
!source "patchers/e7everywhere.a" ; gIsBoot0 || gIsProDOS only
|
!source "patchers/e7everywhere.a" ; gIsBoot0 || gIsProDOS only
|
||||||
|
!source "patchers/choplifter.a" ; gIsChoplifter only
|
||||||
|
|
||||||
lda gPatchCount
|
lda gPatchCount
|
||||||
beq .nopatches
|
beq .nopatches
|
||||||
|
257
src/patchers/choplifter.a
Normal file
257
src/patchers/choplifter.a
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
;-------------------------------
|
||||||
|
; #Choplifter
|
||||||
|
; insane protection by Roland Gustafsson
|
||||||
|
; licensed by Broderbund, Gebelli, and others
|
||||||
|
;
|
||||||
|
; module by qkumba
|
||||||
|
;-------------------------------
|
||||||
|
!zone {
|
||||||
|
.exit rts ; reachable only via inspect
|
||||||
|
|
||||||
|
Choplifter
|
||||||
|
bit gMode ; nothing to do here in verify-only mode
|
||||||
|
bpl .exit
|
||||||
|
lda #$00
|
||||||
|
sta gCommand
|
||||||
|
sta dct+1
|
||||||
|
jsr ChangeTrackNW
|
||||||
|
jsr IncProgress
|
||||||
|
|
||||||
|
.read
|
||||||
|
lda KEY
|
||||||
|
bmi .cancel
|
||||||
|
asl gTrack
|
||||||
|
jsr ReadChoplifter
|
||||||
|
lsr gTrack
|
||||||
|
jsr WriteTrackNA
|
||||||
|
lda gTrack
|
||||||
|
clc
|
||||||
|
adc #$01
|
||||||
|
jsr ChangeTrackNW
|
||||||
|
jsr IncProgress
|
||||||
|
lda gTrack
|
||||||
|
cmp #$23
|
||||||
|
bne .read
|
||||||
|
jsr .cleanup
|
||||||
|
jmp Pass
|
||||||
|
|
||||||
|
.cleanup
|
||||||
|
lda $C0E8
|
||||||
|
lda #$01
|
||||||
|
sta gCommand
|
||||||
|
sta dct+1
|
||||||
|
rts
|
||||||
|
|
||||||
|
.fatal
|
||||||
|
jsr .cleanup
|
||||||
|
; if we get to here, we've
|
||||||
|
jmp FatalError ; decided the read error is fatal
|
||||||
|
|
||||||
|
.cancel
|
||||||
|
jsr .cleanup
|
||||||
|
jmp Cancel
|
||||||
|
|
||||||
|
ReadChoplifter
|
||||||
|
lda #BASEPAGE
|
||||||
|
sta modsrc+1
|
||||||
|
lda #$00
|
||||||
|
sta modsrc
|
||||||
|
- jsr ReadSector ; really just seek
|
||||||
|
lda $C0E9 ; turn the drive back on
|
||||||
|
; no need for spin-up because we are fast enough
|
||||||
|
ldx #$04
|
||||||
|
lda gTrack
|
||||||
|
beq .settrack00
|
||||||
|
cmp #$12
|
||||||
|
bcc .settrack01
|
||||||
|
cmp #$16
|
||||||
|
bcc .ignore
|
||||||
|
beq .readtrack0B
|
||||||
|
cmp #$3E
|
||||||
|
bcs .checktrack1E
|
||||||
|
jsr .readtrack
|
||||||
|
inc gTrack
|
||||||
|
lda gTrack
|
||||||
|
lsr
|
||||||
|
bcs -
|
||||||
|
dec gTrack
|
||||||
|
.ignore
|
||||||
|
rts
|
||||||
|
|
||||||
|
.readtrack0B
|
||||||
|
|
||||||
|
.checkkey1
|
||||||
|
lda KEY
|
||||||
|
bmi .cancel
|
||||||
|
jsr .readnib
|
||||||
|
- cmp #$DD
|
||||||
|
bne .checkkey1
|
||||||
|
jsr .readnib
|
||||||
|
-- cmp #$F5
|
||||||
|
bne -
|
||||||
|
jsr .readnib
|
||||||
|
cmp #$D5
|
||||||
|
bne -- ; this is the same bug
|
||||||
|
ldx #$03
|
||||||
|
- jsr .read4x4
|
||||||
|
jsr .read4x4
|
||||||
|
jsr .read4x4
|
||||||
|
sta cmp1+0,x
|
||||||
|
dex
|
||||||
|
bpl -
|
||||||
|
rts
|
||||||
|
|
||||||
|
.checktrack1E
|
||||||
|
cmp #$40
|
||||||
|
bcs .checktrack20
|
||||||
|
rts
|
||||||
|
|
||||||
|
.settrack00
|
||||||
|
lda #$D5
|
||||||
|
sta cmp1+1
|
||||||
|
sta cmp2+1
|
||||||
|
lda #$DD
|
||||||
|
sta cmp1+0
|
||||||
|
sta cmp2+0
|
||||||
|
!byte $2C
|
||||||
|
.settrack01
|
||||||
|
ldx #$08
|
||||||
|
|
||||||
|
.readtrack
|
||||||
|
stx tmpx
|
||||||
|
ldx #3
|
||||||
|
|
||||||
|
.retry0
|
||||||
|
dex
|
||||||
|
beq .jmpfatal
|
||||||
|
|
||||||
|
.checkkey0
|
||||||
|
lda KEY
|
||||||
|
bmi .jmpcancel
|
||||||
|
jsr .readnib
|
||||||
|
- cmp cmp2+1
|
||||||
|
bne .checkkey0
|
||||||
|
jsr .readnib
|
||||||
|
-- cmp cmp2+0
|
||||||
|
bne -
|
||||||
|
jsr .readnib
|
||||||
|
cmp cmp1+1
|
||||||
|
bne -- ; this is a bug
|
||||||
|
; it allows PR0 PR1 [any] PR1 PR2 instead of requiring PR0 PR1 PR2
|
||||||
|
ldy #0
|
||||||
|
-- jsr .read4x4
|
||||||
|
sta (modsrc), y
|
||||||
|
iny
|
||||||
|
bne --
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
cmp cmp1+0
|
||||||
|
bne .retry0
|
||||||
|
inc modsrc+1
|
||||||
|
dec tmpx
|
||||||
|
bne --
|
||||||
|
jsr .readnib
|
||||||
|
sta cmp1+1 ; prologue 3
|
||||||
|
jsr .readnib
|
||||||
|
sta cmp2+0 ; prologue 2
|
||||||
|
jsr .readnib
|
||||||
|
sta cmp2+1 ; prologue 1
|
||||||
|
jsr .readnib
|
||||||
|
sta cmp1+0 ; epilog
|
||||||
|
rts
|
||||||
|
|
||||||
|
.jmpfatal
|
||||||
|
jmp .fatal
|
||||||
|
|
||||||
|
.jmpcancel
|
||||||
|
jmp .cancel
|
||||||
|
|
||||||
|
.checktrack20
|
||||||
|
beq .readtrack20
|
||||||
|
cmp #$44
|
||||||
|
beq .readtrack22
|
||||||
|
rts
|
||||||
|
|
||||||
|
.readtrack20
|
||||||
|
ldx #1
|
||||||
|
jsr .readtrack
|
||||||
|
lda (BASEPAGE<<8)+$C5
|
||||||
|
sta .prolog1+1
|
||||||
|
lda (BASEPAGE<<8)+$CC
|
||||||
|
sta .prolog2+1
|
||||||
|
lda (BASEPAGE<<8)+$D3
|
||||||
|
sta .prolog3+1
|
||||||
|
|
||||||
|
.checkkey2
|
||||||
|
lda KEY
|
||||||
|
bmi .jmpcancel
|
||||||
|
jsr .readnib
|
||||||
|
.prolog1
|
||||||
|
- cmp #$D1 ; SMC
|
||||||
|
bne .checkkey2
|
||||||
|
jsr .readnib
|
||||||
|
.prolog2
|
||||||
|
-- cmp #$D1 ; SMC
|
||||||
|
bne -
|
||||||
|
jsr .readnib
|
||||||
|
.prolog3
|
||||||
|
cmp #$D1 ; SMC
|
||||||
|
bne -- ; this is the same bug
|
||||||
|
nop ; timing bits
|
||||||
|
ldx #$00
|
||||||
|
- jsr .read4x4
|
||||||
|
sta (BASEPAGE+1)<<8,x
|
||||||
|
inx
|
||||||
|
jsr .read4x4
|
||||||
|
sta (BASEPAGE+1)<<8,x
|
||||||
|
inx
|
||||||
|
jsr .read4x4
|
||||||
|
sta (BASEPAGE+1)<<8,x
|
||||||
|
inx
|
||||||
|
cmp #$EA
|
||||||
|
bne -
|
||||||
|
rts
|
||||||
|
|
||||||
|
.readtrack22
|
||||||
|
ldx #$40
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.checkkey3
|
||||||
|
dey
|
||||||
|
bne +
|
||||||
|
dex
|
||||||
|
beq ++
|
||||||
|
+ lda KEY
|
||||||
|
bmi .jmpcancel
|
||||||
|
jsr .readnib
|
||||||
|
- cmp #$D5
|
||||||
|
bne .checkkey3
|
||||||
|
jsr .readnib
|
||||||
|
-- cmp #$FF
|
||||||
|
bne -
|
||||||
|
jsr .readnib
|
||||||
|
cmp #$DD
|
||||||
|
bne -- ; this is the same bug
|
||||||
|
ldx #$00
|
||||||
|
- jsr .read4x4
|
||||||
|
sta BASEPAGE<<8,x
|
||||||
|
inx
|
||||||
|
bne -
|
||||||
|
++ rts
|
||||||
|
|
||||||
|
.read4x4
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
sec
|
||||||
|
rol
|
||||||
|
sta tmp
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
and tmp
|
||||||
|
rts
|
||||||
|
|
||||||
|
.readnib
|
||||||
|
- lda $C0EC
|
||||||
|
bpl -
|
||||||
|
rts
|
||||||
|
}
|
@ -199,5 +199,6 @@ _track !byte $00
|
|||||||
_sector !byte $00
|
_sector !byte $00
|
||||||
!word dct
|
!word dct
|
||||||
gAddress !word $1F00
|
gAddress !word $1F00
|
||||||
!byte $00,$00,$01,$00,$FE,$60,$01,$00,$00
|
!byte $00,$00
|
||||||
|
gCommand !byte $01,$00,$FE,$60,$01,$00,$00
|
||||||
dct !byte $00,$01,$EF,$D8,$00
|
dct !byte $00,$01,$EF,$D8,$00
|
||||||
|
@ -133,6 +133,7 @@ StringTable
|
|||||||
!word .hoffman
|
!word .hoffman
|
||||||
!word .diskvol0
|
!word .diskvol0
|
||||||
!word .e7everywhere
|
!word .e7everywhere
|
||||||
|
!word .choplifter
|
||||||
;
|
;
|
||||||
; Text can contain substitution strings, which
|
; Text can contain substitution strings, which
|
||||||
; are replaced by current values at runtime. Each
|
; are replaced by current values at runtime. Each
|
||||||
@ -486,4 +487,6 @@ StringTable
|
|||||||
!text "T%t,S%0 Disk requires volume number 000",$8D,$00
|
!text "T%t,S%0 Disk requires volume number 000",$8D,$00
|
||||||
.e7everywhere
|
.e7everywhere
|
||||||
!text "T%t,S%0 Found E7 Everywhere protection",$8D,$00
|
!text "T%t,S%0 Found E7 Everywhere protection",$8D,$00
|
||||||
|
.choplifter
|
||||||
|
!text "T00,S01 Found Choplifter protection",$8D,$00
|
||||||
}
|
}
|
||||||
|
@ -119,4 +119,5 @@ s_holle = $71
|
|||||||
s_hoffman = $72
|
s_hoffman = $72
|
||||||
s_diskvol0 = $73
|
s_diskvol0 = $73
|
||||||
s_e7everywhere=$74
|
s_e7everywhere=$74
|
||||||
STRINGCOUNT = $75
|
s_choplifter = $75
|
||||||
|
STRINGCOUNT = $76
|
||||||
|
Loading…
Reference in New Issue
Block a user