passport/src/id/laureate.a
2021-06-19 19:42:56 -04:00

93 lines
2.4 KiB
Plaintext

;-------------------------------
; IDLaureate
; identify custom bootloader seen on disks from
; Laureate Learning Systems
; loads RWTS directly into language card
;
; in: track buffer contains T00,S00
; A = 0
; out: C clear if Laureate bootloader was found
; C set if not found
; A = 0
; all other registers & flags clobbered
;-------------------------------
!macro IDLaureate {
ldx #$2E
ldy #$08
jsr compare ; if T00,S00,$2E ==
!byte $AE,$FF,$08; LDX $08FF
!byte $30,$1E ; BMI +$1E
!byte $E0,$02 ; CPX #$02
!byte $D0 ; BNE
bcs +
ldx #$F8
jsr compare ; and T00,S00,$F8 ==
!byte $4C,$00,$B7; JMP $B700
!byte $00,$00,$00
!byte $FF,$0B
; passport-test-suite/Sound Ideas- Word Attack - Disk 1 - Ending Consonants.woz [C=0] matches
+
}
;-------------------------------
; TraceLaureate
; Create an RWTS that can read the disk (T01+).
; The original RWTS lives at $F800, which is
; inconvenient. So, starting with our built-in RWTS,
; we copy bits and pieces to create a similar RWTS
; that lives at $B800.
;;
; in: track buffer contains all of track 0
; exits via ADStyle
;-------------------------------
!zone {
TraceLaureate
lda #$00
sta modsrc
lda #$04
clc
adc #BASEPAGE
sta modsrc+1
ldy #$E7
lda (modsrc),y
sta UNIV_D1
ldy #$F1
lda (modsrc),y
sta UNIV_D2
ldy #$FC
lda (modsrc),y
sta UNIV_D3
inc modsrc+1
ldy #$44
- lda (modsrc),y
sta $b900,y
iny
cpy #$A0
bne -
inc modsrc+1
ldy #$29
- lda (modsrc),y
sta $BA00,y
iny
bne -
;
; use built-in RWTS for track 0
;
lda #$FE
sta T00S0B
;
; don't read track 0 sectors $0C-$0F
; (never read, some disks have intentionally bad sectors there)
; (seen on Sound Ideas)
;
lda #kSectorIgnore
sta T00S0C
sta T00S0D
sta T00S0E
sta T00S0F
;
; read the rest of the disk with this constructed RWTS
;
jmp ADStyle
}