mirror of https://github.com/a2-4am/passport.git
231 lines
5.8 KiB
Plaintext
Executable File
231 lines
5.8 KiB
Plaintext
Executable File
;-------------------------------
|
|
; IDMECC
|
|
; identify MECC custom bootloader
|
|
; note: there are several MECC RWTSes that share
|
|
; the same bootloader, so further checks will be
|
|
; required to distinguish between them
|
|
;
|
|
; in: track buffer contains T00,S00
|
|
; out: C clear if MECC bootloader was found
|
|
; C set if not found
|
|
; all other flags clobbered
|
|
; all registers clobbered
|
|
;-------------------------------
|
|
IDMECC
|
|
lda #$00
|
|
ldx #$00
|
|
ldy #$17
|
|
jsr compare
|
|
!byte 01,$4C,$1A,08,$17,$0F,00,00
|
|
!byte $0D,$0B,09,07,05,03,01,$0E
|
|
!byte $0C,$0A,08,06,04,02,$0F
|
|
rts
|
|
|
|
;-------------------------------
|
|
; IDMECCM8
|
|
; identify MECC "M8" bootloader
|
|
;
|
|
; in: track buffer contains T00,S00
|
|
; out: C clear if MECC "M8" bootloader was found
|
|
; C set if not found
|
|
; all other flags clobbered
|
|
; all registers clobbered
|
|
;-------------------------------
|
|
IDMECCM8
|
|
lda #$00
|
|
sta gTrack
|
|
sta gAddress
|
|
lda #$0B
|
|
sta gSector
|
|
clc
|
|
adc #BASEPAGE
|
|
sta gAddress+1
|
|
jsr ReadSector
|
|
bcc +
|
|
mecc_no1
|
|
rts
|
|
+
|
|
lda #$0B
|
|
ldx #$02
|
|
ldy #$06
|
|
jsr compare ; IF T00,S0B,$02 ==
|
|
!byte $BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no1
|
|
lda #$0B
|
|
ldx #$09
|
|
ldy #$09
|
|
jsr compare ; AND T00,S0B,$09 ==
|
|
!byte $D0,$EF,$EA,$BD,$8C,$C0,$10,$FB
|
|
!byte $C9
|
|
bcs mecc_no1
|
|
lda #$0B
|
|
ldx #$13
|
|
ldy #$0A
|
|
jsr compare ; AND T00,S0B,$13 ==
|
|
!byte $D0,$E5,$A0,03,$BD,$8C,$C0,$10
|
|
!byte $FB,$C9
|
|
bcs mecc_no1
|
|
lda #$0B
|
|
ldx #$89
|
|
ldy #$06
|
|
jsr compare ; AND T00,S0B,$89 ==
|
|
!byte $BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no1
|
|
lda #$0B
|
|
ldx #$90
|
|
ldy #$09
|
|
jsr compare ; AND T00,S0B,$90 ==
|
|
!byte $D0,$F4,$EA,$BD,$8C,$C0,$10,$FB
|
|
!byte $C9
|
|
bcs mecc_no1
|
|
lda #$0B
|
|
ldx #$9A
|
|
ldy #$09
|
|
jsr compare ; AND T00,S0B,$9A ==
|
|
!byte $D0,$F2,$EA,$BD,$8C,$C0,$10,$FB
|
|
!byte $C9
|
|
rts
|
|
|
|
foundmeccm8
|
|
;
|
|
; We found an "M8" MECC bootloader. Now we create
|
|
; an RWTS that can read the rest of the disk.
|
|
; Starting with our built-in RWTS, we modify address
|
|
; and data prologues based on the parameters of the
|
|
; original disk.
|
|
;
|
|
lda #s_meccb0
|
|
jsr PrintByID
|
|
jsr CopyUniversal
|
|
lda #$00
|
|
sta modsrc
|
|
lda #$0B
|
|
clc
|
|
adc #BASEPAGE
|
|
sta modsrc+1
|
|
ldy #$08
|
|
lda (modsrc),y
|
|
lsr
|
|
sta $B956
|
|
ldy #$12
|
|
lda (modsrc),y
|
|
sta $B966
|
|
ldy #$1D
|
|
lda (modsrc),y
|
|
sta $B96F
|
|
ldy #$8F
|
|
lda (modsrc),y
|
|
sta $B8E7
|
|
ldy #$99
|
|
lda (modsrc),y
|
|
sta $B8F1
|
|
ldy #$A3
|
|
lda (modsrc),y
|
|
sta $B8FC
|
|
pla
|
|
plp
|
|
jmp ADStyle
|
|
|
|
;-------------------------------
|
|
; IDMECCM7
|
|
; identify MECC "M7" bootloader
|
|
;
|
|
; in: track buffer contains T00,S00
|
|
; out: C clear if MECC "M7" bootloader was found
|
|
; C set if not found
|
|
; all other flags clobbered
|
|
; all registers clobbered
|
|
;-------------------------------
|
|
IDMECCM7
|
|
lda #$00
|
|
sta gTrack
|
|
sta gAddress
|
|
lda #$07
|
|
sta gSector
|
|
clc
|
|
adc #BASEPAGE
|
|
sta gAddress+1
|
|
jsr ReadSector
|
|
bcc +
|
|
mecc_no2
|
|
rts
|
|
+
|
|
lda #$07
|
|
ldx #$7D
|
|
ldy #$06
|
|
jsr compare ; IF T00,S07,$7D ==
|
|
!byte $BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no2
|
|
lda #$07
|
|
ldx #$84
|
|
ldy #$09
|
|
jsr compare ; AND T00,S07,$84 ==
|
|
!byte $D0,$F0,$EA,$BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no2
|
|
lda #$07
|
|
ldx #$8E
|
|
ldy #$0A
|
|
jsr compare ; and T00,S07,$8E ==
|
|
!byte $D0,$F2,$A0,03,$BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no2
|
|
lda #$07
|
|
ldx #$0F
|
|
ldy #$06
|
|
jsr compare ; and T00,S07,$0F ==
|
|
!byte $BD,$8C,$C0,$10,$FB,$49
|
|
bcs mecc_no2
|
|
lda #$07
|
|
ldx #$18
|
|
ldy #$07
|
|
jsr compare ; and T00,S07,$18 ==
|
|
!byte $EA,$BD,$8C,$C0,$10,$FB,$C9
|
|
bcs mecc_no2
|
|
lda #$07
|
|
ldx #$20
|
|
ldy #$0A
|
|
jsr compare ; and T00,S07,$20 ==
|
|
!byte $D0,$F2,$A0,$56,$BD,$8C,$C0,$10,$FB,$C9
|
|
rts
|
|
|
|
foundmeccm7
|
|
;
|
|
; We found an "M7" MECC bootloader. Now we create
|
|
; an RWTS that can read the rest of the disk.
|
|
; Starting with our built-in RWTS, we modify address
|
|
; and data prologues based on the parameters of the
|
|
; original disk.
|
|
;
|
|
lda #s_meccm7
|
|
jsr PrintByID
|
|
|
|
jsr CopyUniversal
|
|
|
|
lda #$00
|
|
sta modsrc
|
|
lda #$07
|
|
clc
|
|
adc #BASEPAGE
|
|
sta modsrc+1
|
|
ldy #$83
|
|
lda (modsrc),y
|
|
lsr
|
|
sta $B956
|
|
ldy #$8D
|
|
lda (modsrc),y
|
|
sta $B966
|
|
ldy #$98
|
|
lda (modsrc),y
|
|
sta $B96F
|
|
ldy #$15
|
|
lda (modsrc),y
|
|
sta $B8E7
|
|
ldy #$1F
|
|
lda (modsrc),y
|
|
sta $B8F1
|
|
ldy #$2A
|
|
lda (modsrc),y
|
|
sta $B8FC
|
|
pla
|
|
plp
|
|
jmp ADStyle
|