8567 lines
101 KiB
NASM
8567 lines
101 KiB
NASM
; Apple II 3.5 Disk Controller Card
|
|
; Firmware P/N 341-0438A
|
|
; Copyright (C) Apple Computer Inc. 1991
|
|
; Disassembly Copyright 2014, 2018 Eric Smith <spacewar@gmail.com>
|
|
|
|
fillto macro addr
|
|
while * < addr
|
|
size set addr-*
|
|
if size > 256
|
|
size set 256
|
|
endif
|
|
fcb [size] $00
|
|
endm
|
|
endm
|
|
|
|
fcchz macro string
|
|
irpc char,string
|
|
fcb $80+'char'
|
|
endm
|
|
fcb $00
|
|
endm
|
|
|
|
cpu 65c02
|
|
|
|
D0100 equ $0100
|
|
D01ab equ $01ab
|
|
D01af equ $01af
|
|
D01b1 equ $01b1
|
|
D01b2 equ $01b2
|
|
D0200 equ $0200
|
|
slot_1_rom_copy equ $03ee ; first 16 bytes of host slot 1 ROM copied here
|
|
D03fe equ $03fe
|
|
D03ff equ $03ff
|
|
D0400 equ $0400
|
|
D0403 equ $0403
|
|
D0500 equ $0500
|
|
D0503 equ $0503
|
|
D05ff equ $05ff
|
|
D0600 equ $0600
|
|
D0601 equ $0601
|
|
D0602 equ $0602
|
|
D0603 equ $0603
|
|
D0620 equ $0620
|
|
D0640 equ $0640
|
|
D06eb equ $06eb
|
|
D06ef equ $06ef
|
|
D0741 equ $0741
|
|
D07eb equ $07eb
|
|
D07ef equ $07ef
|
|
|
|
|
|
D0803 equ $0803
|
|
D09ff equ $09ff
|
|
|
|
; SWIM chip - IWM registers
|
|
iwm_ph0_off equ $0a00 ; phase 0 off data/corr (r/w)
|
|
iwm_ph0_on equ $0a01 ; phase 0 on header (r/w)
|
|
iwm_ph1_off equ $0a02 ; phase 1 off error (r)/CRC (w)
|
|
iwm_ph1_on equ $0a03 ; phase 1 on param data (r/w)
|
|
iwm_ph2_off equ $0a04 ; phase 2 off phase (r/w)
|
|
iwm_ph2_on equ $0a05 ; phase 2 on setup (r/w)
|
|
iwm_ph3_off equ $0a06 ; phase 3 off status (r)/write zeros (w)
|
|
iwm_ph3_on equ $0a07 ; phase 3 on handshake (r)/write ones (w)
|
|
iwm_motor_off equ $0a08 ; motor off
|
|
iwm_motor_on equ $0a09 ; motor on
|
|
iwm_sel_drive_1 equ $0a0a ; enable drive 1
|
|
iwm_sel_drive_2 equ $0a0b ; enable drive 2
|
|
iwm_q6l equ $0a0c ; Q6 low
|
|
iwm_q6h equ $0a0d ; Q6 high
|
|
iwm_q7l equ $0a0e ; Q7 low
|
|
iwm_q7h equ $0a0f ; Q7 high
|
|
|
|
; IWM registers and states
|
|
; from IWM Design Spec 343-0041-B
|
|
; Q7 Q6 Motor-On register operation selected state name
|
|
; -- -- -------- --------------------------- ----------
|
|
; 0 0 0 read all ones
|
|
; 0 0 1 read data reg
|
|
; 0 1 x read status register write protect sense
|
|
; 1 0 x read write-handshake reg write
|
|
; 1 1 0 write mode reg mode set
|
|
; 1 1 1 write data reg write load
|
|
|
|
; SWIM chip - ISM registers
|
|
; Note: there are probably some references in the code to ISM registers
|
|
; that are currently misidentified as IWM registers
|
|
|
|
ism_w_data equ $0a00
|
|
ism_r_data equ $0a08
|
|
ism_w_mark equ $0a01
|
|
ism_r_mark equ $0a09
|
|
ism_w_crc equ $0a02
|
|
ism_r_error equ $0a0a
|
|
ism_w_param equ $0a03
|
|
ism_r_param equ $0a0b
|
|
ism_w_phase equ $0a04
|
|
ism_r_phase equ $0a0c
|
|
ism_w_setup equ $0a05
|
|
ism_r_setup equ $0a0d
|
|
ism_w_zeros equ $0a06
|
|
ism_r_status equ $0a0e
|
|
ism_w_ones equ $0a07
|
|
ism_r_handshake equ $0a0f
|
|
|
|
|
|
D0a40 equ $0a40
|
|
D0a41 equ $0a41
|
|
D0a80 equ $0a80
|
|
D0a81 equ $0a81
|
|
D0aff equ $0aff
|
|
|
|
D0b00 equ $0b00
|
|
D0b1f equ $0b1f
|
|
D0b20 equ $0b20
|
|
D0b3f equ $0b3f
|
|
D0b40 equ $0b40
|
|
D0b80 equ $0b80
|
|
D0ba0 equ $0ba0
|
|
D0bc0 equ $0bc0
|
|
D0be0 equ $0be0
|
|
D0bff equ $0bff
|
|
D0c00 equ $0c00
|
|
D0c01 equ $0c01
|
|
D0c02 equ $0c02
|
|
D0c03 equ $0c03
|
|
D0c04 equ $0c04
|
|
D0c05 equ $0c05
|
|
D0c06 equ $0c06
|
|
D0c0c equ $0c0c
|
|
D0d00 equ $0d00
|
|
D0d0c equ $0d0c
|
|
D0e00 equ $0e00
|
|
D0f00 equ $0f00
|
|
|
|
D1003 equ $1003
|
|
D1203 equ $1203
|
|
D2003 equ $2003
|
|
D4003 equ $4003
|
|
|
|
; locations in host slot pseudoROM (cn00)
|
|
D7b00 equ $7b00 ; host $cn00
|
|
D7b04 equ $7b04
|
|
D7b0b equ $7b0b
|
|
D7b0d equ $7b0d
|
|
D7b17 equ $7b17 ; beq instruction loop to wait for diagnostic to load
|
|
D7b21 equ $7b21
|
|
D7b23 equ $7b23
|
|
|
|
; locations in host shared pseudoROM (c800-cfff)
|
|
D7c00 equ $7c00 ; host $cc00
|
|
D7c09 equ $7c09 ; host $cc09
|
|
|
|
|
|
; host side defines
|
|
HZ00 equ $00
|
|
HZ01 equ $01
|
|
HZ3c equ $3c
|
|
HZ3e equ $3e
|
|
HZ3f equ $3f
|
|
HZ40 equ $40
|
|
HZ41 equ $41
|
|
HZ42 equ $42
|
|
HZ43 equ $43
|
|
HZ44 equ $44
|
|
HZ45 equ $45
|
|
HZ46 equ $46
|
|
HZ47 equ $47
|
|
HZ48 equ $48
|
|
HZ49 equ $49
|
|
HZ4b equ $4b
|
|
HZ4c equ $4c
|
|
HZ4d equ $4d
|
|
HZ4e equ $4e
|
|
HZ4f equ $4f
|
|
HZ50 equ $50
|
|
HZ51 equ $51
|
|
|
|
HD0100 equ $0100 ; stack
|
|
|
|
mon_softev equ $03f2
|
|
|
|
HD0488 equ $0488 ; somewhere in text page 1
|
|
HD048d equ $048d
|
|
HD0606 equ $0606
|
|
|
|
HD07f8 equ $07f8 ; host side screen hole, stores $c0+slot
|
|
|
|
HD0800 equ $0800
|
|
HL0801 equ $0801
|
|
|
|
HDc000 equ $c000 ; keyboard
|
|
HDc010 equ $c010 ; keyboard strobe reset
|
|
HDc02f equ $c02f
|
|
HDc035 equ $c035
|
|
HDc036 equ $c036
|
|
HDc068 equ $c068
|
|
HDc080 equ $c080
|
|
HDc082 equ $c082
|
|
|
|
HDc100 equ $c100 ; why do we care what's in slot 1 ROM space?
|
|
|
|
; host side shared ROM space
|
|
HDc800 equ $c800
|
|
HDc801 equ $c801
|
|
HDc802 equ $c802
|
|
HDc803 equ $c803
|
|
HDc804 equ $c804
|
|
HDc807 equ $c807
|
|
HDc808 equ $c808
|
|
HDc80b equ $c80b
|
|
HDc80c equ $c80c
|
|
HDc833 equ $c833
|
|
HDc83f equ $c83f
|
|
HDc845 equ $c845
|
|
HDc856 equ $c856
|
|
|
|
HDca00 equ $ca00
|
|
HDca02 equ $ca02
|
|
HSca43 equ $ca43
|
|
HScabf equ $cabf
|
|
HScb8c equ $cb8c
|
|
HScbaa equ $cbaa
|
|
HScbd9 equ $cbd9
|
|
HD_slot_1_rom_copy equ $cbee
|
|
HDcbfe equ $cbfe
|
|
HDcbff equ $cbff
|
|
|
|
HDcfff equ $cfff ; turn off shared slot ROM
|
|
|
|
HLe000 equ $e000 ; ROM BASIC cold start (either Integer or Applesoft)
|
|
|
|
mon_sloop equ $faba
|
|
mon_settxt equ $fb39
|
|
mon_main_id equ $fbb3 ; $06 for IIe or later
|
|
mon_sub_id equ $fbc0 ; $e0 for enhanced IIe or IIgs
|
|
mon_home equ $fc58
|
|
mon_cr equ $fc62
|
|
mon_prbyte equ $fdda
|
|
mon_prhex equ $fde3
|
|
mon_cout equ $fded
|
|
mon_idroutine equ $fe1f
|
|
mon_setkbd equ $fe89
|
|
mon_setvid equ $fe93
|
|
mon_oldrst equ $ff59 ; sets video and keyboard and enters monitor
|
|
|
|
reset_vec equ $fffc
|
|
|
|
org $8000
|
|
zp_init_tab:
|
|
phase $0000
|
|
Z00: fcb $ff
|
|
Z01: fcb $ff
|
|
Z02: fcb $00
|
|
Z03: fcb $ff
|
|
Z04: fcb $00
|
|
Z05: fcb $ff
|
|
Z06: fcb $ff
|
|
Z07: fcb $00
|
|
Z08: fcb $00
|
|
Z09: fcb $00
|
|
Z0a: fcb $00
|
|
Z0b: fcb $00
|
|
Z0c: fcb $00
|
|
Z0d: fcb $ff
|
|
fcb $ff
|
|
Z0f: fcb $80
|
|
fcb $80
|
|
Z11: fcb $00
|
|
fcb $00
|
|
Z13: fcb $00
|
|
Z14: fcb $ff
|
|
Z15: fcb $ff
|
|
Z16: fcb $ff
|
|
Z17: fcb $ff
|
|
Z18: fcb $ff
|
|
Z19: fcb $ff
|
|
Z1a: fcb $00
|
|
Z1b: fcb $ff
|
|
Z1c: fcb $ff
|
|
fcb $00
|
|
Z1e: fcb $ff
|
|
Z1f: fcb $00
|
|
Z20: fcb $00
|
|
Z21: fcb $00
|
|
Z22: fcb $00
|
|
Z23: fcb $00
|
|
Z24: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Z27: fcb $00
|
|
Z28: fcb $00
|
|
Z29: fcb $00
|
|
Z2a: fcb $00
|
|
Z2b: fcb $00
|
|
Z2c: fcb $00
|
|
Z2d: fcb $00
|
|
Z2e: fcb $00
|
|
Z2f: fcb $00
|
|
Z30: fcb $00
|
|
fcb $00
|
|
Z32: fcb $00
|
|
Z33: fcb $00
|
|
Z34: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Z38: fcb $00
|
|
Z39: fcb $00
|
|
Z3a: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Z3f: fcb $00
|
|
Z40: fcb $00
|
|
fcb $00
|
|
Z42: fcb $00
|
|
fcb $00
|
|
Z44: fcb $00
|
|
fcb $00
|
|
Z46: fcb $00
|
|
fcb $00
|
|
Z48: fcb $00
|
|
fcb $00
|
|
Z4a: fcb $00
|
|
fcb $00
|
|
Z4c: fcb $00
|
|
Z4d: fcb $00
|
|
Z4e: fcb $00
|
|
Z4f: fcb $00
|
|
Z50: fcb $00
|
|
Z51: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Z56: fcb $00
|
|
Z57: fcb $00
|
|
Z58: fcb $00
|
|
Z59: fcb $00
|
|
Z5a: fcb $00
|
|
Z5b: fcb $00
|
|
Z5c: fcb $00
|
|
Z5d: fcb $00
|
|
Z5e: fcb $00
|
|
Z5f: fcb $00
|
|
Z60: fcb $00
|
|
Z61: fcb $00
|
|
Z62: fcb $04
|
|
Z63: fcb $80
|
|
Z64: fcb $00
|
|
Z65: fcb $05
|
|
Z66: fcb $00
|
|
Z67: fcb $00
|
|
Z68: fcb $00
|
|
Z69: fcb $00
|
|
Z6a: fcb $00
|
|
Z6b: fcb $00
|
|
Z6c: fcb $00
|
|
Z6d: fcb $00
|
|
Z6e: fcb $00
|
|
Z6f: fcb $80
|
|
|
|
Z70: fcb $1b
|
|
Z71: fcb $00
|
|
|
|
; Hooks
|
|
; see _Apple IIgs Firmware Reference_,
|
|
; Chapter 7: SmartPort Firmware,
|
|
; "UniDisk 3.5 internal functions",
|
|
; "Hook table" (p. 145)
|
|
Z72: jmp Le50a ; RdAddr?
|
|
Z75: jmp Le619 ; ReadData?
|
|
Z78: jmp Le889 ; WriteData?
|
|
Z7b: jmp Ld5db ; Seek?
|
|
Z7e: jmp Lefb0 ; Format?
|
|
Z81: jmp Lf0fc ; WriteTrk?
|
|
Z84: jmp Lf1ea ; Verify?
|
|
|
|
; zero page jump vectors (not hooks)
|
|
Z87: jmp Sd1e7
|
|
Z8a: jmp cmd_init
|
|
|
|
; Mark table
|
|
; see _Apple IIgs Firmware Reference_,
|
|
; Chapter 7: SmartPort Firmware,
|
|
; "SmartPort calls specific to Apple 3.5 disk drive",
|
|
; SetMark (control code $07) (pp. 140-141)
|
|
; and
|
|
; "UniDisk 3.5 internal functions",
|
|
; "Mark table" (pp. 144-145)
|
|
|
|
Z8d: fcb $ff ; sector number
|
|
|
|
; data mark (reverse order)
|
|
Z8e: fcb $ad,$aa,$d5 ; data mark
|
|
|
|
Z91: fcb $ff
|
|
|
|
Z92: fcb $fc,$f3,$cf,$3f,$ff ; sync bytes
|
|
|
|
; bit-slip mark (reverse order)
|
|
Z97: fcb $ff,$aa,$de ; bit-slip mark
|
|
fcb $ff
|
|
|
|
fcb $ff,$ff,$ff,$ff ; interheader gap
|
|
|
|
; address mark (reverse order)
|
|
Z9f: fcb $96,$aa,$d5
|
|
fcb $ff
|
|
|
|
; end of Mark table
|
|
|
|
Za3: fcb $00
|
|
Za4: fcb $00
|
|
Za5: fcb $00
|
|
Za6: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Zab: fcb $00
|
|
Zac: fcb $00
|
|
Zad: fcb $00
|
|
Zae: fcb $00
|
|
Zaf: fcb $00
|
|
Zb0: fcb $00
|
|
Zb1: fcb $00
|
|
Zb2: fcb $00
|
|
fcb $00
|
|
Zb4: fcb $00
|
|
Zb5: fcb $00
|
|
Zb6: fcb $00
|
|
fcb $00
|
|
fcb $00
|
|
Zb9: fcb $00
|
|
Zba: fcb $00
|
|
Zbb: fcb $00
|
|
|
|
Zbc: fcb $4a,$cf,$41,$55
|
|
|
|
fillto $00e0
|
|
|
|
Ze0: fcb $00
|
|
Ze1: fcb $00
|
|
Ze2: fcb $00
|
|
Ze3: fcb $00
|
|
Ze4: fcb $00
|
|
|
|
fillto $00fc
|
|
|
|
Zfc: fdb $0000 ; used to accumulate CRC16 of ROM
|
|
Zfe: fdb $0000 ; pointer used for ROM checksum and
|
|
; CRC16 computation, and ROM copying
|
|
|
|
dephase
|
|
|
|
fillto $8100
|
|
|
|
D8100:
|
|
phase $c600
|
|
cpu 6502 ; host CPU might be 6502, 65C02, or 65816
|
|
|
|
; host-side slot ROM
|
|
|
|
; boot entry point
|
|
HLcn00: ldx #$20 ; cn01 must be $20 for block device
|
|
ldx #$00 ; cn03 must be $00 for block device
|
|
HLcn04: ldy #$03 ; cn05 must be $03 for block device
|
|
lda #$00 ; cn07 must be $00 for SmartPort device
|
|
sec
|
|
adc #$7f
|
|
HLcn0b: bvs HLcn0b
|
|
|
|
; diagnostic entry point at $Cn0d
|
|
HLcn0d: php
|
|
sei
|
|
bit HDcfff
|
|
jsr HScf38
|
|
HLcn15: plp
|
|
tax
|
|
HL_diag_load_wait:
|
|
beq HL_diag_load_wait ; Wait for host side of diagnostic code
|
|
; to be loaded into shared pseudoROM.
|
|
; Card diag code two instructions after
|
|
jmp HLcc00
|
|
|
|
; ProDOS entry point
|
|
HLcn1c: clc
|
|
bcc HLcn20
|
|
|
|
; Protocol Converter (SmartPort) entry point
|
|
; must be at ProDOS entry point + 3
|
|
sec
|
|
|
|
; wait for card firmware to be ready
|
|
HLcn20: clv
|
|
HLcn21: bvc HLcn21 ; card firmware will change this branch
|
|
; target to HLcn23
|
|
|
|
HLcn23: php ; save carry (ProDOS vs. SmartPort) and
|
|
; interrupt enable state
|
|
sei ; disable interrupts
|
|
|
|
lda HDcfff ; turn off other cards' shared ROM
|
|
|
|
; get $C0 + slot number
|
|
jsr HScc08 ; known ret instruction
|
|
tsx
|
|
lda HD0100,x
|
|
sta HD07f8
|
|
|
|
tay
|
|
ldx HD_slotmap,y ; map $C0+slot to slot*10
|
|
|
|
lda HDc082,x
|
|
jsr HScfd9
|
|
|
|
; save HZ40..HZ51 in pseudoROM HDCa02..HDCa13
|
|
ldx #$12
|
|
HLcn3e: lda HZ40-1,x ; HZ40..HZ51 copied to HDCa02..HDCa13
|
|
sta HDca02-1,x
|
|
dex
|
|
bne HLcn3e
|
|
|
|
plp ; restore carry (ProDOS vs. SmartPort) and
|
|
; previous interrupt state
|
|
|
|
ldx HD_slotmap,y ; map $C0+slot to slot*10
|
|
lda HDc080,x
|
|
bvc HLcn54
|
|
|
|
jsr HScabf
|
|
beq HLcn15
|
|
|
|
HLcn54: bit HDcc09
|
|
bpl HLcn5f
|
|
|
|
jsr HDca00
|
|
|
|
ldy HD07f8
|
|
|
|
HLcn5f: bcc HLcna9 ; if carry clear, go handle ProDOS command
|
|
|
|
pla ; pop ret address as ptr to SmartPort command
|
|
sta HZ40
|
|
pla
|
|
sta HZ41
|
|
|
|
ldy #$01 ; first byte is command number
|
|
lda (HZ40),y
|
|
sta HZ50
|
|
iny
|
|
|
|
lda (HZ40),y ; second and third bytes are param list pointer
|
|
sta HZ4c
|
|
iny
|
|
lda (HZ40),y
|
|
sta HZ4d
|
|
iny
|
|
|
|
lda (Z40),y
|
|
dey
|
|
|
|
bit HZ50 ; is it an extended SmartPort command?
|
|
bvc HLcn86 ; no
|
|
|
|
ldy #$05 ; yes, command is longer
|
|
|
|
bit HDcc09 ; on a IIgs?
|
|
bvs HLcn88 ; yes
|
|
|
|
HLcn86: lda #$00 ; high byte of param list pointer is zero
|
|
|
|
HLcn88: sta HZ4e ; store high byte of param list pointer
|
|
|
|
tya ; compute return address
|
|
clc
|
|
adc HZ40
|
|
tax
|
|
lda #$00
|
|
adc HZ41
|
|
|
|
pha ; push new return address
|
|
txa
|
|
pha
|
|
|
|
jsr HSca43
|
|
|
|
lda HZ43
|
|
and #$bf
|
|
cmp #$0c
|
|
bcc HLcnb7
|
|
|
|
HLcna1: lda #$01
|
|
bne HLcnbc ; always taken
|
|
|
|
lda #$11
|
|
bne HLcnbc ; always taken
|
|
|
|
|
|
; handle ProDOS command
|
|
HLcna9: lda HZ42
|
|
cmp #$04
|
|
bcs HLcna1
|
|
|
|
jsr HScefe
|
|
|
|
lda HZ43
|
|
clc
|
|
adc #$8c
|
|
HLcnb7: jsr HScbd9
|
|
|
|
lda HZ50
|
|
|
|
|
|
HLcnbc: pha ; push error code
|
|
lda HZ4e ; push X and Y result
|
|
pha
|
|
lda HZ4f
|
|
pha
|
|
|
|
ldy HD07f8
|
|
ldx HD_slotmap,y ; map $C0+slot to slot*10
|
|
lda HDc082,x
|
|
|
|
; restore HZ40..HZ51 from pseudoROM HDCa02..HDCa13
|
|
ldx #$00
|
|
HLcnce: ldy HDca02,x
|
|
sty HZ40,x
|
|
inx
|
|
cpx #$12
|
|
bcc HLcnce
|
|
|
|
lda #$00
|
|
sta HDca00
|
|
|
|
pla ; pop Y, X, and error code
|
|
tay
|
|
pla
|
|
tax
|
|
pla
|
|
|
|
cmp #$01 ; set carry flag if error code non-zero
|
|
ora #$00 ; set zero flag appropriately
|
|
rts
|
|
|
|
|
|
; copy first 16 bytes of slot 1 ROM into our pseudoROM
|
|
HLcne7: ldy #$0f
|
|
HLcne9: lda HDc100,y
|
|
bit HDcfff
|
|
sta HD_slot_1_rom_copy,y
|
|
dey
|
|
bpl HLcne9
|
|
rts
|
|
|
|
|
|
fillto $c6fb
|
|
|
|
HDcnfb: fcb $c0 ; SmartPort ID type byte
|
|
; bit 7=1: supports extended commands (32-bit)
|
|
; bit 6=1: supports additional commands
|
|
; (see _Apple IIgs Firmware Reference
|
|
; 1 MB Apple IIgs Update)
|
|
; SetFormatOption ($0a, $4a)
|
|
; GetFormatOption ($0b, $4b)
|
|
; bit 1=0: not SCSI
|
|
; bit 0=0: not RAM card
|
|
|
|
HDcnfc: fdb $00 ; ProDOS block count
|
|
|
|
HDcnfe: fcb $bf ; ProDOS block device characteristics
|
|
; bit 7=1: removable medium
|
|
; bit 6=0: not interruptible
|
|
; bits 5..4=11:
|
|
; bit 3=1: supports formatting
|
|
; bit 2=1: supports write
|
|
; bit 1=1: supports read
|
|
; bit 0=1: supports status
|
|
HDcnff: fcb HLcn1c & $ff ; pointer to ProDOS entry
|
|
; end of slot ROM
|
|
dephase
|
|
|
|
D8200:
|
|
phase $ca00
|
|
|
|
HSca00: php
|
|
sei
|
|
lda HDc068
|
|
pha
|
|
ldx #$0a
|
|
HLca08: eor #$0e
|
|
sta HDc068
|
|
cmp HDc068
|
|
bne HLca31
|
|
dex
|
|
bne HLca08
|
|
pla
|
|
sta HDc068
|
|
|
|
; Determine host type
|
|
lda mon_main_id ; IIe or newer?
|
|
cmp #$06
|
|
bne HLca32 ; no
|
|
|
|
lda mon_sub_id
|
|
cmp #$e0 ; enhanced IIe or IIgs?
|
|
bne HLca32 ; no
|
|
|
|
sec ; IIgs?
|
|
jsr mon_idroutine
|
|
bcs HLca32 ; no
|
|
|
|
lda #$7f
|
|
bne HLca34
|
|
|
|
HLca31: pla
|
|
|
|
HLca32: lda #$7e
|
|
HLca34: bit HDc800
|
|
bpl HLca34
|
|
sta HDc800
|
|
HLca3c: bit HDc800
|
|
bpl HLca3c
|
|
plp
|
|
rts
|
|
|
|
bit HZ50
|
|
bvs HLca64
|
|
ldy #$08
|
|
HLca49: tax
|
|
lda (HZ4c),y
|
|
dey
|
|
bmi HLca5d
|
|
cpy #$03
|
|
bcc HLca58
|
|
sta HZ43,y
|
|
bcs HLca49
|
|
HLca58: sta HZ41,y
|
|
bcc HLca49
|
|
HLca5d: iny
|
|
sty HZ44
|
|
sty HZ4b
|
|
beq HLca7a
|
|
HLca64: ldy #$0b
|
|
HLca66: tax
|
|
|
|
bit HDcc09
|
|
bvs HLca70
|
|
|
|
lda (HZ4c),y
|
|
bvc HLca72
|
|
|
|
HLca70:
|
|
cpu 65816
|
|
assume m:1
|
|
ldal (HZ4c),y ; NOTE: HZ4c is a 24-bit pointer! IIgs only
|
|
cpu 65c02
|
|
|
|
HLca72: dey
|
|
bmi HLca7a
|
|
sta HZ41,y
|
|
bpl HLca66
|
|
HLca7a: ldy HZ50
|
|
sta HZ50
|
|
lda HZ42
|
|
sta HZ40
|
|
lda HZ43
|
|
sta HZ41
|
|
lda HZ44
|
|
sta HZ42
|
|
stx HZ44
|
|
sty HZ43
|
|
rts
|
|
|
|
tablh macro namel,nameh
|
|
namel label *
|
|
nameh label *+(ARGCOUNT-2)
|
|
shift
|
|
shift
|
|
irp addr,ALLARGS
|
|
fcb (addr-1) & $ff
|
|
endm
|
|
irp addr,ALLARGS
|
|
fcb (addr-1) >> 8
|
|
endm
|
|
endm
|
|
|
|
tablh HDca8f,HDca9f,HLcc3e,HLcd52,HLcde6,HLcc0a,HLcca1,HLcd34,HLcc0a,HLcc0a,HLcc3e,HLcc92,HLcd0c,HLcc3e,HLcc11,HLcd52,HLcde6,HLcc0a
|
|
|
|
; required arg length?
|
|
HDcaaf: fcb $03,$03,$03,$01,$03,$01,$01,$01
|
|
fcb $04,$04,$03,$03,$ff,$ff,$ff,$ff
|
|
|
|
stx HZ51
|
|
jsr HSca00
|
|
lda #$00
|
|
sta HZ4e
|
|
sta HZ4f
|
|
ldx #$03
|
|
stx HZ3c
|
|
ldy mon_main_id
|
|
cpy #$06
|
|
beq HLcadc
|
|
lda HDc000
|
|
ora #$80
|
|
bmi HLcb02
|
|
HLcadc: bit HDc010
|
|
bpl HLcb1e
|
|
bmi HLcae6
|
|
|
|
HLcae3: sta HDc010
|
|
HLcae6: lda HDc000
|
|
bmi HLcb02
|
|
cpy #$06
|
|
bne HLcaf4
|
|
bit HDc010
|
|
bpl HLcb1e
|
|
HLcaf4: inc HZ4e
|
|
bne HLcae6
|
|
inc HZ4f
|
|
bne HLcae6
|
|
dec HZ3c
|
|
bne HLcae6
|
|
beq HLcb1e
|
|
|
|
HLcb02: cmp #$84
|
|
bne HLcb1e
|
|
dex
|
|
bne HLcae3
|
|
php
|
|
sei
|
|
pla
|
|
tay
|
|
pla
|
|
sta HZ4e
|
|
pla
|
|
sta HZ4f
|
|
tya
|
|
pha
|
|
lda HZ4f
|
|
pha
|
|
lda HZ4e
|
|
pha
|
|
jmp HScf38
|
|
|
|
HLcb1e: ldx #$03
|
|
HLcb20: lda HDc800
|
|
bmi HLcb36
|
|
inc HZ4e
|
|
bne HLcb20
|
|
inc HZ4f
|
|
bne HLcb20
|
|
dex
|
|
bne HLcb20
|
|
lda #$30
|
|
sta HZ50
|
|
bne HLcb87
|
|
HLcb36: lda #$ff
|
|
sta HDc801
|
|
lda #$00
|
|
sta HDc803
|
|
lda #$81
|
|
sta HZ43
|
|
lda #$0c
|
|
sta HDc800
|
|
lda #$08
|
|
sta HZ41
|
|
lda #$00
|
|
sta HZ40
|
|
sta HZ42
|
|
jsr HScd55
|
|
ldx HZ51
|
|
cmp #$01
|
|
bcs HLcb87
|
|
lda #$01
|
|
sta HZ42
|
|
stx HZ43
|
|
lda #$08
|
|
sta HZ45
|
|
lda #$00
|
|
sta HZ44
|
|
sta HZ46
|
|
sta HZ47
|
|
lda HD0800
|
|
cmp #$01
|
|
bne HLcb87
|
|
lda HL0801
|
|
beq HLcb87
|
|
lda #$00 ; 0 .
|
|
|
|
bit HDcc09
|
|
bvc HLcb84
|
|
|
|
sta HDc035
|
|
HLcb84: jmp HL0801
|
|
|
|
HLcb87: stx HZ51
|
|
jmp HLcf53
|
|
|
|
Pcb8c: bit HZ43
|
|
bpl HLcba9
|
|
cmp #$00
|
|
beq HLcba9
|
|
cmp #$2b
|
|
beq HLcba9
|
|
cmp #$28
|
|
beq HLcba9
|
|
cmp #$2f
|
|
beq HLcba9
|
|
cmp #$11
|
|
bne HLcba7
|
|
lda #$28
|
|
rts
|
|
|
|
HLcba7: lda #$27
|
|
HLcba9: rts
|
|
|
|
Pcbaa: cpy #$10
|
|
beq HLcbb9
|
|
lda #$2b
|
|
cpy #$14
|
|
beq HLcbb6
|
|
lda #$2f
|
|
HLcbb6: sta HDc856
|
|
HLcbb9: rts
|
|
|
|
fillto $cbd4
|
|
|
|
HLcbd4: lda #$04
|
|
sta HZ50
|
|
rts
|
|
|
|
Pcbd9: ldy HD07f8
|
|
ldx HD_slotmap,y ; map $C0+slot to slot*10
|
|
stx HZ51
|
|
tax
|
|
lda HDcaaf,x
|
|
bmi HLcbeb
|
|
cmp HZ50
|
|
bne HLcbd4
|
|
HLcbeb: lda HDca9f,x
|
|
pha
|
|
lda HDca8f,x
|
|
pha
|
|
lda #$00
|
|
sta HZ50
|
|
sta HZ4f
|
|
sta HZ4e
|
|
ldx HZ51
|
|
jsr HScfb1
|
|
|
|
HLcc00: lda HDc080,x
|
|
HLcc03: lda HDc800
|
|
bpl HLcc03
|
|
|
|
HScc08: rts
|
|
|
|
HDcc09: fcb $80
|
|
|
|
HLcc0a: jsr HSced6
|
|
clc
|
|
jmp HLceb4
|
|
|
|
HLcc11: lda #$00
|
|
sta HZ46
|
|
jsr HSced6
|
|
HLcc18: lda HDc801
|
|
bmi HLcc18
|
|
beq HLcc3b
|
|
jsr HScd3b
|
|
ldy #$02
|
|
lda (HZ4c),y
|
|
sta HZ4f
|
|
dey
|
|
lda (HZ4c),y
|
|
sta HZ4e
|
|
dey
|
|
lda (HZ4c),y
|
|
and #$14
|
|
tay
|
|
ldx HZ51
|
|
lda HDc080,x
|
|
jsr HScbaa
|
|
|
|
HLcc3b: jmp HLceb3
|
|
|
|
|
|
HLcc3e: lda HZ46
|
|
sta HDc80b
|
|
lda HZ47
|
|
sta HDc80c
|
|
jsr HSced6
|
|
HLcc4b: lda HDc801
|
|
bmi HLcc4b
|
|
beq HLcc6f
|
|
ldx HDc80b
|
|
stx HZ4e
|
|
ldx HDc80c
|
|
stx HZ4f
|
|
jsr HScd3b
|
|
ldx HZ4f
|
|
beq HLcc67
|
|
sec
|
|
jsr HScc72
|
|
HLcc67: ldx HZ4e
|
|
beq HLcc6f
|
|
clc
|
|
jsr HScc72
|
|
HLcc6f: jmp HLceb3
|
|
|
|
HScc72: ldy #$00
|
|
HLcc74: lda (HZ4c),y
|
|
|
|
bit HDcc09
|
|
bvc HLcc7f
|
|
|
|
cpu 65816
|
|
assume m:1
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
bvs HLcc81
|
|
cpu 65c02
|
|
|
|
HLcc7f: sta (HZ40),y
|
|
HLcc81: iny
|
|
bcc HLcc8e
|
|
bne HLcc74
|
|
inc HZ4d
|
|
inc HZ41
|
|
bne HLcc8e
|
|
inc HZ42
|
|
HLcc8e: dex
|
|
bne HLcc74
|
|
rts
|
|
|
|
HLcc92: lda HZ46
|
|
sta HDc80b
|
|
pha
|
|
lda HZ47
|
|
sta HDc80c
|
|
pha
|
|
jmp HLccc6
|
|
|
|
HLcca1: ldy #$00
|
|
|
|
bit HDcc09
|
|
HLcca6: bvc HLccac
|
|
|
|
cpu 65816
|
|
assume m:1
|
|
ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
bvs HLccae
|
|
cpu 65c02
|
|
|
|
HLccac: lda (HZ40),y
|
|
HLccae: sta HDc80b,y
|
|
pha
|
|
iny
|
|
cpy #$01
|
|
beq HLcca6
|
|
lda HZ40
|
|
clc
|
|
adc #$02
|
|
sta HZ40
|
|
bcc HLccc6
|
|
inc HZ41
|
|
bne HLccc6
|
|
inc HZ42
|
|
HLccc6: jsr HSced6
|
|
HLccc9: lda HDc801
|
|
bmi HLccc9
|
|
beq HLcce7
|
|
jsr HScd3b
|
|
pla
|
|
tax
|
|
beq HLccdb
|
|
sec
|
|
jsr HSccec
|
|
HLccdb: pla
|
|
tax
|
|
beq HLcce3
|
|
clc
|
|
jsr HSccec
|
|
HLcce3: clc
|
|
jmp HLceb4
|
|
|
|
HLcce7: pla
|
|
pla
|
|
jmp HLceb3
|
|
|
|
HSccec: ldy #$00
|
|
|
|
HLccee: bit HDcc09
|
|
bvc HLccf7
|
|
|
|
cpu 65816
|
|
assume m:1
|
|
ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
bvs HLccf9
|
|
cpu 65c02
|
|
|
|
HLccf7: lda (HZ40),y
|
|
HLccf9: sta (HZ4c),y
|
|
iny
|
|
bcc HLcd08
|
|
bne HLccee
|
|
inc HZ4d
|
|
inc HZ41
|
|
bne HLcd08
|
|
inc HZ42
|
|
HLcd08: dex
|
|
bne HLccee
|
|
rts
|
|
|
|
HLcd0c: lda #$00
|
|
ldx HZ46
|
|
sta HZ46
|
|
sta HZ47
|
|
sta HZ48
|
|
sta HZ49
|
|
beq HLcd34
|
|
cpx #$05
|
|
bcc HLcd20
|
|
ldx #$04
|
|
HLcd20: ldy #$00
|
|
|
|
HLcd22: bit HDcc09
|
|
bvc HLcd2b
|
|
|
|
cpu 65816
|
|
assume m:1
|
|
ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
bvs HLcd2d
|
|
cpu 65c02
|
|
|
|
HLcd2b: lda (HZ40),y
|
|
HLcd2d: sta HZ46,y
|
|
iny
|
|
dex
|
|
bne HLcd22
|
|
HLcd34: jsr HSced6
|
|
clc
|
|
jmp HLceb4
|
|
|
|
HScd3b: and #$1f
|
|
lsr
|
|
php
|
|
clc
|
|
adc HZ51
|
|
tax
|
|
lda HDc080,x
|
|
lda #$00
|
|
sta HZ4c
|
|
plp
|
|
rol
|
|
asl
|
|
adc #$c8
|
|
sta HZ4d
|
|
rts
|
|
|
|
HLcd52: jsr HSced6
|
|
HScd55: lda HDc801
|
|
bmi HScd55
|
|
bne HLcd62
|
|
lda HDc856
|
|
jmp HLcd7c
|
|
|
|
HLcd62: jsr HScd3b
|
|
ldx #$02
|
|
ldy #$00
|
|
|
|
bit HDcc09
|
|
bvs HLcd80
|
|
|
|
; Apple IIe (65C02) read loop
|
|
HLcd6e: lda (HZ4c),y
|
|
sta (HZ40),y
|
|
iny
|
|
bne HLcd6e
|
|
inc HZ4d
|
|
inc HZ41
|
|
dex
|
|
bne HLcd6e
|
|
HLcd7c: sec
|
|
jmp HLcead
|
|
|
|
; Apple IIgs (65816) read loop
|
|
cpu 65816
|
|
assume m:1
|
|
HLcd80: clc
|
|
xce
|
|
php
|
|
lda HDc036
|
|
pha
|
|
ora #$80
|
|
sta HDc036
|
|
lda #$02
|
|
bit HZ4d
|
|
|
|
rep #$20 ; clear 65816 M bit for 16-bit data
|
|
assume m:0
|
|
|
|
bne HLcdb8
|
|
|
|
HLcd94: lda HDc800,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
lda HDc800,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
bne HLcd94
|
|
|
|
inc HZ41
|
|
HLcda6: lda HDc800+$100,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
lda HDc800+$100,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
bne HLcda6
|
|
beq HLcdda
|
|
|
|
HLcdb8: lda HDc800+$200,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
lda HDc800+$200,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
bne HLcdb8
|
|
|
|
inc HZ41
|
|
HLcdca: lda $c800+$300,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
lda $c800+$300,y
|
|
stal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer! IIgs only
|
|
iny
|
|
iny
|
|
bne HLcdca
|
|
|
|
HLcdda: sep #$30 ; set 65816 M bit for 8-bit data,
|
|
assume m:1 ; and X bit for 8-bit indexing
|
|
assume x:1
|
|
|
|
pla
|
|
sta HDc036
|
|
plp
|
|
xce
|
|
sec
|
|
jmp HLcead
|
|
|
|
cpu 65c02
|
|
|
|
HLcde6: jsr HSced6
|
|
HLcde9: ldx HDc801
|
|
bmi HLcde9
|
|
bne HLcdf3
|
|
jmp HLceb3
|
|
|
|
HLcdf3: lda HDc804
|
|
php
|
|
bpl HLcdff
|
|
sei
|
|
lda #$c0
|
|
sta HDc804
|
|
HLcdff: txa
|
|
jsr HScd3b
|
|
|
|
ldy #$00
|
|
|
|
bit HDcc09 ; bit 6 set for IIgs
|
|
bvs HLce1e
|
|
|
|
; Apple IIe (65C02) write loop
|
|
plp
|
|
ldx #$02
|
|
HLce0d: lda (HZ40),y
|
|
sta (HZ4c),y
|
|
iny
|
|
bne HLce0d
|
|
inc HZ41
|
|
inc HZ4d
|
|
dex
|
|
bne HLce0d
|
|
jmp HLceac
|
|
|
|
; Apple IIgs (65816) write loop
|
|
cpu 65816
|
|
assume m:1
|
|
HLce1e: clc
|
|
xce
|
|
php
|
|
lda HDc036
|
|
pha
|
|
ora #$80
|
|
sta HDc036
|
|
phx
|
|
lda #$02
|
|
bit Z4d
|
|
|
|
rep #$20 ; clear 65816 M bit for 16-bit data
|
|
assume m:0
|
|
|
|
bne HLce67
|
|
HLce33: ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer!
|
|
sta HDc800,y
|
|
iny
|
|
iny
|
|
ldal (HZ40),y
|
|
sta HDc800,y ; NOTE: HZ40 is a 24-bit pointer!
|
|
iny
|
|
iny
|
|
bne HLce33
|
|
inc HZ41
|
|
|
|
sep #$20 ; set 65816 M bit for 8-bit data
|
|
assume m:1
|
|
|
|
ldx HZ51
|
|
lda HDc080,x
|
|
inc HDc804
|
|
plx
|
|
lda HDc080,x
|
|
|
|
rep #$20 ; clear 65816 M bit for 16-bit data
|
|
assume m:0
|
|
|
|
HLce55: ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer!
|
|
sta HDc800+$100,y
|
|
iny
|
|
iny
|
|
ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer!
|
|
sta HDc800+$100,y
|
|
iny
|
|
iny
|
|
bne HLce55
|
|
beq HLce99
|
|
|
|
HLce67: ldal (HZ40),y
|
|
sta HDc800+$200,y
|
|
iny
|
|
iny
|
|
ldal (HZ40),y
|
|
sta HDc800+$200,y
|
|
iny
|
|
iny
|
|
bne HLce67
|
|
|
|
inc HZ41
|
|
|
|
sep #$20 ; set 65816 M bit for 8-bit data
|
|
assume m:1
|
|
|
|
ldx HZ51
|
|
lda HDc080,x
|
|
inc HDc804
|
|
plx
|
|
lda HDc080,x
|
|
|
|
rep #$20 ; clear 65816 M bit for 16-bit data
|
|
assume m:0
|
|
|
|
HLce89: ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer!
|
|
sta HDc800+$300,y
|
|
iny
|
|
iny
|
|
ldal (HZ40),y ; NOTE: HZ40 is a 24-bit pointer!
|
|
sta HDc800+$300,y
|
|
iny
|
|
iny
|
|
bne HLce89
|
|
|
|
HLce99: sep #$30 ; set 65816 M bit for 8-bit data,
|
|
assume m:1 ; and X bit for 8-bit indexing
|
|
assume x:1
|
|
|
|
pla
|
|
sta HDc036
|
|
plp
|
|
xce
|
|
ldx HZ51
|
|
lda HDc080,x
|
|
lda #$d0
|
|
sta HDc804
|
|
plp
|
|
|
|
cpu 65c02
|
|
|
|
HLceac: clc
|
|
HLcead: lda #$02
|
|
sta HZ4f
|
|
bne HLceb4
|
|
HLceb3: sec
|
|
HLceb4: ldx HZ51
|
|
lda HDc080,x
|
|
lda HDc801
|
|
ora #$f0
|
|
sta HDc801
|
|
bcs HLcec8
|
|
HLcec3: lda HDc800
|
|
bpl HLcec3
|
|
HLcec8: lda HDc856
|
|
jsr HScb8c
|
|
sta HZ50
|
|
ldx #$00
|
|
stx HDc856
|
|
rts
|
|
|
|
HSced6: lda HDc800
|
|
bpl HSced6
|
|
lda #$ff
|
|
sta HDc801
|
|
txa
|
|
pha
|
|
ldx #$08
|
|
HLcee4: lda HZ43,x
|
|
sta HDc802,x
|
|
dex
|
|
bpl HLcee4
|
|
pla
|
|
tax
|
|
lda HDc802
|
|
and #$1f
|
|
sta HDc800
|
|
rts
|
|
|
|
; table used to map $C0+slot to slot*10
|
|
HD_slotmap equ *-$c1
|
|
fcb $10,$20,$30,$40,$50,$60,$70
|
|
|
|
HScefe: ora #$80
|
|
ldx HZ43
|
|
sta HZ43
|
|
lda HZ44
|
|
sta HZ40
|
|
lda HZ45
|
|
sta HZ41
|
|
lda #$00
|
|
sta HZ42
|
|
sta HZ48
|
|
sta HZ49
|
|
txa
|
|
and #$70
|
|
beq HLcf35
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
ora #$c0
|
|
sta HZ44
|
|
lda #$00
|
|
cpy HZ44
|
|
beq HLcf31
|
|
lda #$c0
|
|
eor HZ44
|
|
cmp #$02
|
|
beq HLcf31
|
|
lda #$04
|
|
HLcf31: cpx #$80
|
|
adc #$01
|
|
HLcf35: sta HZ44
|
|
rts
|
|
|
|
HScf38: tsx
|
|
lda HD0100+2,x
|
|
sta HD07f8
|
|
tay
|
|
ldx HD_slotmap,y ; map $C0+slot to slot*10
|
|
lda HDc080,x
|
|
HLcf46: bit HDc800
|
|
bpl HLcf46
|
|
lda #$3d
|
|
sta HDc800
|
|
lda #$00
|
|
rts
|
|
|
|
HLcf53: bit HDc082
|
|
lda HZ00
|
|
bne HLcf64
|
|
lda HZ01
|
|
cmp HD07f8
|
|
bne HLcf64
|
|
jmp mon_sloop
|
|
|
|
HLcf64: jsr mon_setvid
|
|
jsr mon_setkbd
|
|
jsr mon_settxt
|
|
jsr mon_home
|
|
ldy #$00
|
|
lda HZ50
|
|
cmp #$30
|
|
bne HLcf7a
|
|
ldy #HDcf9a-HDcf8b
|
|
HLcf7a: ldx #$00
|
|
HLcf7c: lda HDcf8b,y
|
|
beq HLcf88
|
|
sta HD0488,x
|
|
iny
|
|
inx
|
|
bne HLcf7c
|
|
HLcf88: jmp HLe000
|
|
|
|
HDcf8b: fcchz "UNABLE TO BOOT"
|
|
HDcf9a: fcchz "CONTROLLER NEVER READY"
|
|
|
|
HScfb1: lda HZ44
|
|
beq HLcfca
|
|
cmp #$05
|
|
bcs HLcfca
|
|
tya
|
|
pha
|
|
txa
|
|
pha
|
|
lda HDc082,x
|
|
jsr HScfcb
|
|
pla
|
|
tax
|
|
lda HDc080,x
|
|
pla
|
|
tay
|
|
HLcfca: rts
|
|
|
|
HScfcb: lda #$cb
|
|
pha
|
|
ldx HZ44
|
|
lda HDcfd5-1,x
|
|
pha
|
|
rts
|
|
|
|
HDcfd5: fcb $7f,$9f,$bf,$df
|
|
|
|
HScfd9: bvs HLcfe0
|
|
|
|
bit HDcc09
|
|
bpl HLcfe6
|
|
|
|
HLcfe0: lda #$00
|
|
sta HDca00
|
|
rts
|
|
|
|
HLcfe6: bit HDca00
|
|
bmi HLcff1
|
|
lda #$80
|
|
sta HDca00
|
|
rts
|
|
|
|
HLcff1: pla
|
|
pla
|
|
lda #$01
|
|
plp
|
|
sec
|
|
rts
|
|
|
|
fillto $d000
|
|
dephase
|
|
|
|
; 8800-8dff is host diagnostic code, copied into host shared ROM space
|
|
; at host ca00-cfff
|
|
D8800:
|
|
phase $ca00
|
|
|
|
H2Lca00:
|
|
jsr mon_cr
|
|
lda #msg_table_heading >> 8
|
|
sta HZ3f
|
|
lda #msg_table_heading & $ff
|
|
jsr H2Scea7
|
|
lda HDc833
|
|
tax
|
|
jsr mon_prhex
|
|
jsr mon_cr
|
|
txa
|
|
bne H2Lca1c
|
|
jmp H2Lcac9
|
|
|
|
H2Lca1c:
|
|
lda #$01
|
|
pha
|
|
H2Lca1f:
|
|
pla
|
|
pha
|
|
tay
|
|
jsr mon_prhex
|
|
lda HDc833,y
|
|
cmp #$01
|
|
bne H2Lca34
|
|
lda #$a4
|
|
jsr H2Scea7
|
|
jmp H2Lca52
|
|
|
|
H2Lca34:
|
|
cmp #$03
|
|
bne H2Lca40
|
|
lda #$b1
|
|
jsr H2Scea7
|
|
jmp H2Lca52
|
|
|
|
H2Lca40:
|
|
cmp #$80
|
|
bne H2Lca52
|
|
lda #$97
|
|
jsr H2Scea7
|
|
jmp H2Lcab9
|
|
|
|
jsr H2Scafe
|
|
jmp H2Lcab9
|
|
|
|
H2Lca52:
|
|
pla
|
|
pha
|
|
tay
|
|
lda HDc83f,y
|
|
|
|
cmp #$02
|
|
bne H2Lca64
|
|
lda #msg_400k & $ff
|
|
jsr H2Scea7
|
|
jmp H2Lca9e
|
|
|
|
H2Lca64:
|
|
cmp #$08
|
|
bne H2Lca70
|
|
lda #msg_720k & $ff
|
|
jsr H2Scea7
|
|
jmp H2Lca9e
|
|
|
|
H2Lca70:
|
|
cmp #$04
|
|
bne H2Lca7a
|
|
jsr H2Scaf8
|
|
jmp H2Lca9e
|
|
|
|
H2Lca7a:
|
|
cmp #$06
|
|
bne H2Lca84
|
|
jsr H2Scaf8
|
|
jmp H2Lca9e
|
|
|
|
H2Lca84:
|
|
cmp #$0a
|
|
bne H2Lca8e
|
|
jsr H2Scaf2
|
|
jmp H2Lca9e
|
|
|
|
H2Lca8e:
|
|
cmp #$0c
|
|
bne H2Lca98
|
|
jsr H2Scaf2
|
|
jmp H2Lca9e
|
|
|
|
H2Lca98:
|
|
jsr H2Scafe
|
|
jmp H2Lcab9
|
|
|
|
H2Lca9e:
|
|
pla
|
|
pha
|
|
cmp #$03
|
|
bcs H2Lcab9
|
|
tay
|
|
lda HDc845,y
|
|
and #$20
|
|
beq H2Lcab4
|
|
lda #msg_yes & $ff
|
|
jsr H2Scea7
|
|
jmp H2Lcab9
|
|
|
|
H2Lcab4:
|
|
lda #msg_no & $ff
|
|
jsr H2Scea7
|
|
H2Lcab9:
|
|
pla
|
|
tay
|
|
cmp HDc833
|
|
beq H2Lcac9
|
|
iny
|
|
tya
|
|
pha
|
|
jsr mon_cr
|
|
jmp H2Lca1f
|
|
H2Lcac9:
|
|
jsr mon_cr
|
|
jsr mon_cr
|
|
jsr H2Scebd
|
|
lda #msg_passed_rw_for_unit & $ff
|
|
jsr H2Scea7
|
|
lda #$01
|
|
jsr mon_prhex
|
|
jsr mon_cr
|
|
jsr H2Scebd
|
|
lda #msg_passed_rw_for_unit & $ff
|
|
jsr H2Scea7
|
|
lda #$02
|
|
jsr mon_prhex
|
|
jsr mon_cr
|
|
jsr H2Scebd
|
|
|
|
H2Scaf2:
|
|
lda #msg_1440k & $ff
|
|
jsr H2Scea7
|
|
rts
|
|
|
|
H2Scaf8:
|
|
lda #msg_800k & $ff
|
|
jsr H2Scea7
|
|
rts
|
|
|
|
H2Scafe:
|
|
lda #msg_unknown_size & $ff
|
|
jsr H2Scea7
|
|
rts
|
|
|
|
fillto $cb3f
|
|
|
|
msg_passed_rw_for_unit:
|
|
fcchz "Passed R/W for Unit "
|
|
|
|
; cb54
|
|
fcchz "R/W Failure on block $"
|
|
|
|
; cb6b
|
|
fcchz " Err=$"
|
|
|
|
msg_table_heading:
|
|
fcchz "# Unit Volume W/P Drives="
|
|
|
|
; cb97
|
|
fcchz " UniDisk 3.5"
|
|
|
|
; cba4
|
|
fcchz " Apple 3.5 "
|
|
|
|
; cbb0
|
|
fcchz " Apple FDHD "
|
|
|
|
msg_400k:
|
|
fcchz " 400K "
|
|
|
|
msg_720k:
|
|
fcchz " 720K "
|
|
|
|
msg_800k:
|
|
fcchz " 800K "
|
|
|
|
msg_1440k:
|
|
fcchz " 1440K"
|
|
|
|
msg_unknown_size:
|
|
fcchz " ??? "
|
|
|
|
msg_yes:
|
|
fcchz " YES"
|
|
|
|
msg_no:
|
|
fcchz " NO"
|
|
|
|
fillto $cc00
|
|
|
|
H2Lcc00:
|
|
sei
|
|
jsr mon_setvid
|
|
jsr mon_setkbd
|
|
jsr mon_settxt
|
|
jsr mon_home
|
|
lda #$ff
|
|
sta HZ43
|
|
lda #$06
|
|
cmp mon_main_id
|
|
beq H2Lcc1c
|
|
lda #$df
|
|
sta HZ43
|
|
H2Lcc1c:
|
|
lda #msg_banner >> 8
|
|
sta HZ3f
|
|
lda #msg_banner & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
lda #msg_credit & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
lda #msg_copyright & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
jsr mon_cr
|
|
lda #msg_tests & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
lda #msg_slot & $ff
|
|
jsr H2Scea7
|
|
lda HD07f8
|
|
jsr mon_prhex
|
|
lda HD07f8
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
ora #$80
|
|
sta HZ40
|
|
lda #$c0
|
|
sta HZ41
|
|
jsr mon_cr
|
|
lda #msg_card_pseudorom & $ff
|
|
jsr H2Scea7
|
|
jsr H2Sce38
|
|
lda #msg_card_rom_crc & $ff
|
|
jsr H2Scea7
|
|
jsr H2Sce38
|
|
lda #msg_card_rom_checksum & $ff
|
|
jsr H2Scea7
|
|
jsr H2Sce38
|
|
lda #msg_swim_regs & $ff
|
|
jsr H2Scea7
|
|
jsr H2Sce38
|
|
lda #msg_card_ram & $ff
|
|
jsr H2Scea7
|
|
jsr H2Sce38
|
|
lda #msg_host_card_shared_data & $ff
|
|
jsr H2Scea7
|
|
lda #$00
|
|
tax
|
|
ldy #$06
|
|
stx HZ3e
|
|
H2Lcc94:
|
|
stx HZ42
|
|
sty HZ44
|
|
ldy HZ42
|
|
sta (HZ40),y
|
|
ldy HZ44
|
|
ldx #$c8
|
|
stx HZ3f
|
|
ldx #$cc
|
|
H2Lcca4:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
bne H2Lcca4
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lcca4
|
|
ldx HZ42
|
|
cpx #$01
|
|
bne H2Lccb7
|
|
inx
|
|
H2Lccb7:
|
|
cpx #$0f
|
|
beq H2Lccbf
|
|
inx
|
|
jmp H2Lcc94
|
|
|
|
H2Lccbf:
|
|
ldx #$cc
|
|
stx HZ3f
|
|
ldx #$cf
|
|
H2Lccc5:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
bne H2Lccc5
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lccc5
|
|
H2Lccd1:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
cpy #$ff
|
|
bne H2Lccd1
|
|
ldy #$02
|
|
sta (HZ40),y
|
|
ldy #$00
|
|
ldx #$cb
|
|
stx HZ3f
|
|
H2Lcce3:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
bne H2Lcce3
|
|
ldx HD07f8
|
|
stx HZ3f
|
|
H2Lccee:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
bne H2Lccee
|
|
ldx #$c8
|
|
stx HZ3f
|
|
ldx #$ca
|
|
H2Lccfa:
|
|
clc
|
|
adc (HZ3e),y
|
|
iny
|
|
bne H2Lccfa
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lccfa
|
|
cmp #$ff
|
|
beq H2Lcd10
|
|
H2Lcd0a:
|
|
jsr H2Sce9a
|
|
jmp H2Lcda0
|
|
|
|
H2Lcd10:
|
|
jsr H2Sce8d
|
|
lda #msg_host_ram & $ff
|
|
jsr H2Scea7
|
|
ldx #$00
|
|
stx HZ3e
|
|
inx
|
|
H2Lcd1d:
|
|
stx HZ42
|
|
jsr H2Sce78
|
|
ldy HZ42
|
|
sta (HZ40),y
|
|
ldy #$00
|
|
ldx #$c8
|
|
stx HZ3f
|
|
ldx #$cc
|
|
H2Lcd2e:
|
|
tya
|
|
clc
|
|
adc HZ42
|
|
adc HZ3f
|
|
sta (HZ3e),y
|
|
iny
|
|
bne H2Lcd2e
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lcd2e
|
|
ldx HZ42
|
|
cpx #$0f
|
|
beq H2Lcd49
|
|
inx
|
|
jmp H2Lcd1d
|
|
|
|
H2Lcd49:
|
|
ldx #$00
|
|
stx HZ3e
|
|
inx
|
|
H2Lcd4e:
|
|
stx HZ42
|
|
jsr H2Sce78
|
|
ldy HZ42
|
|
sta (HZ40),y
|
|
ldy #$00
|
|
ldx #$c8
|
|
stx HZ3f
|
|
ldx #$cc
|
|
H2Lcd5f:
|
|
tya
|
|
clc
|
|
adc HZ42
|
|
adc HZ3f
|
|
cmp (HZ3e),y
|
|
beq H2Lcd6c
|
|
jmp H2Lcd0a
|
|
|
|
H2Lcd6c:
|
|
iny
|
|
bne H2Lcd5f
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lcd5f
|
|
ldx HZ42
|
|
cpx #$0f
|
|
beq H2Lcd7f
|
|
inx
|
|
jmp H2Lcd4e
|
|
|
|
H2Lcd7f:
|
|
jsr H2Sce8d
|
|
ldy #$00
|
|
sta (HZ40),y
|
|
lda #$cd
|
|
pha
|
|
lda #$93
|
|
pha
|
|
lda HD07f8
|
|
pha
|
|
lda #$e6
|
|
pha
|
|
rts
|
|
|
|
lda HDc02f
|
|
sta HDcbfe
|
|
jsr H2Scebd
|
|
jmp HDca00
|
|
|
|
H2Lcda0:
|
|
lda #$a6
|
|
sta HD048d
|
|
ldy #$00
|
|
sta (HZ40),y
|
|
lda #$4f
|
|
sta HDcbff
|
|
jsr mon_cr
|
|
lda #msg_press_e_to_exit >> 8
|
|
sta HZ3f
|
|
lda #msg_press_e_to_exit & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
lda HDc010
|
|
H2Lcdc0:
|
|
ldx #$00
|
|
stx HZ3e
|
|
H2Lcdc4:
|
|
stx HZ42
|
|
ldy HZ42
|
|
sta (HZ40),y
|
|
ldy #$00
|
|
ldx #$c8
|
|
stx HZ3f
|
|
ldx #$cc
|
|
H2Lcdd2:
|
|
lda (HZ3e),y
|
|
iny
|
|
bne H2Lcdd2
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lcdd2
|
|
ldx HZ42
|
|
cpx #$0f
|
|
beq H2Lcde7
|
|
inx
|
|
jmp H2Lcdc4
|
|
|
|
H2Lcde7:
|
|
ldx HD07f8
|
|
stx HZ3f
|
|
H2Lcdec:
|
|
lda (HZ3e),y
|
|
iny
|
|
bne H2Lcdec
|
|
ldx #$cc
|
|
stx HZ3f
|
|
ldx #$cf
|
|
H2Lcdf7:
|
|
lda (HZ3e),y
|
|
iny
|
|
bne H2Lcdf7
|
|
inc HZ3f
|
|
cpx HZ3f
|
|
bne H2Lcdf7
|
|
H2Lce02:
|
|
lda (HZ3e),y
|
|
iny
|
|
cpy #$ff
|
|
bne H2Lce02
|
|
lda HDc000 ; check keyboard
|
|
bpl H2Lcdc0 ; no key
|
|
sta HDc010 ; reset key
|
|
cmp #'E'+$80
|
|
beq H2Lce1b
|
|
cmp #'e'+$80
|
|
beq H2Lce1b
|
|
bne H2Lcdc0
|
|
|
|
; force a host reset
|
|
H2Lce1b:
|
|
lda mon_softev+1 ; make sure soft reset vector is invalid
|
|
sta mon_softev+2
|
|
lda reset_vec+1
|
|
pha
|
|
lda reset_vec
|
|
pha
|
|
ldy #$00
|
|
sta (HZ40),y
|
|
lda #$55 ; tell card that we're going to reset
|
|
sta HDcbff
|
|
H2Lce32: ; wait for card to clear Cbff
|
|
lda HDcbff
|
|
bne H2Lce32
|
|
rts ; return to reset vector (pushed above)
|
|
|
|
H2Sce38:
|
|
jsr H2Sce78
|
|
ldy #$02
|
|
sta (HZ40),y
|
|
ldy #$00
|
|
lda HDca00
|
|
tax
|
|
H2Lce45:
|
|
inx
|
|
txa
|
|
sta HDca00,y
|
|
iny
|
|
bne H2Lce45 ; immediately following!
|
|
|
|
H2Lce4d:
|
|
inx
|
|
txa
|
|
cmp HDca00,y
|
|
bne H2Lce5a
|
|
iny
|
|
bne H2Lce4d
|
|
jmp H2Lce5f
|
|
|
|
H2Lce5a:
|
|
lda #$c5
|
|
sta HD0606
|
|
H2Lce5f:
|
|
ldy #$00
|
|
sta (HZ40),y
|
|
lda HDc802
|
|
beq H2Sce38
|
|
cmp #$a1
|
|
beq H2Lce72
|
|
jsr H2Sce9a
|
|
jmp H2Lcda0
|
|
|
|
H2Lce72:
|
|
sty HDc802
|
|
jmp H2Sce8d
|
|
|
|
H2Sce78:
|
|
lda HD048d
|
|
ldy #$04
|
|
H2Lce7d:
|
|
cmp H2Dcffa,y
|
|
beq H2Lce86
|
|
dey
|
|
bne H2Lce7d
|
|
iny
|
|
H2Lce86:
|
|
lda H2Dcffa-1,y
|
|
sta HD048d
|
|
rts
|
|
|
|
H2Sce8d:
|
|
lda #msg_pass >> 8
|
|
sta HZ3f
|
|
lda #msg_pass & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
rts
|
|
|
|
H2Sce9a:
|
|
lda #msg_fail >> 8
|
|
sta HZ3f
|
|
lda #msg_fail & $ff
|
|
jsr H2Scea7
|
|
jsr mon_cr
|
|
rts
|
|
|
|
H2Scea7:
|
|
sta HZ3e
|
|
ldy #$00
|
|
H2Lceab:
|
|
lda (HZ3e),y
|
|
bne H2Lceb0
|
|
rts
|
|
|
|
H2Lceb0:
|
|
cmp #$c0
|
|
bcc H2Lceb6
|
|
and HZ43
|
|
H2Lceb6:
|
|
jsr mon_cout
|
|
iny
|
|
bne H2Lceab
|
|
rts
|
|
|
|
H2Scebd:
|
|
ldy #$00
|
|
sta (HZ40),y
|
|
lda #$a1
|
|
sta HDcbff
|
|
H2Lcec6:
|
|
jsr H2Sce78
|
|
lda HDcbff
|
|
cmp #$4f
|
|
bne H2Lced3
|
|
jmp H2Lcda0
|
|
|
|
H2Lced3:
|
|
cmp #$4e
|
|
bne H2Lcef9
|
|
lda #$54
|
|
jsr H2Scea7
|
|
lda HDc808
|
|
jsr mon_prbyte
|
|
lda HDc807
|
|
jsr mon_prbyte
|
|
lda #$6b
|
|
jsr H2Scea7
|
|
lda HDc856
|
|
jsr mon_prbyte
|
|
jsr mon_cr
|
|
jmp H2Lcda0
|
|
|
|
H2Lcef9:
|
|
cmp #$00
|
|
bne H2Lcec6
|
|
rts
|
|
|
|
fillto $cf21
|
|
|
|
msg_banner:
|
|
fcchz " 3.5\" Disk Controller Test"
|
|
|
|
msg_credit:
|
|
fcchz " J.Arkley & T.Rudin"
|
|
|
|
msg_copyright:
|
|
fcchz "(C)Apple Computer Inc.,1991"
|
|
|
|
msg_tests:
|
|
fcchz "Tests:"
|
|
|
|
msg_slot:
|
|
fcchz "Slot #"
|
|
|
|
msg_card_pseudorom:
|
|
fcchz "Card pseudoROM"
|
|
|
|
msg_card_rom_crc:
|
|
fcchz "Card ROM CRC"
|
|
|
|
msg_card_rom_checksum:
|
|
fcchz "Card ROM Checksum"
|
|
|
|
msg_swim_regs:
|
|
fcchz "SWIM Regs."
|
|
|
|
msg_card_ram:
|
|
fcchz "Card RAM"
|
|
|
|
msg_host_card_shared_data:
|
|
fcchz "Host/Card shared data"
|
|
|
|
msg_host_ram:
|
|
fcchz "Host RAM"
|
|
|
|
msg_pass:
|
|
fcchz "-PASS"
|
|
|
|
msg_fail:
|
|
fcchz "-FAIL"
|
|
|
|
msg_press_e_to_exit:
|
|
fcchz "Press E to Exit"
|
|
|
|
H2Dcffa:
|
|
fcb $ad,$af,$fc,$dc,$ad,$00
|
|
|
|
dephase
|
|
|
|
cpu 65c02 ; done with host code, rest is on-card 65c02
|
|
|
|
|
|
; data copied to zero page - all but first two bytes are zero
|
|
D8e00:
|
|
fcb $55,$0f
|
|
fillto $8f00
|
|
|
|
|
|
L8f00: sei
|
|
cld
|
|
ldx #$ff
|
|
txs
|
|
|
|
; test first six bytes of zero page with two patterns
|
|
ldx #$05
|
|
L8f07: lda D990b,x
|
|
sta Z00,x
|
|
dex
|
|
bpl L8f07
|
|
|
|
ldx #$05
|
|
L8f11: lda D990b,x
|
|
cmp Z00,x
|
|
beq L8f1b
|
|
jmp L95cd
|
|
|
|
L8f1b: dex
|
|
bpl L8f11
|
|
|
|
ldx #$05
|
|
L8f20: lda D9911,x
|
|
sta Z00,x
|
|
dex
|
|
bpl L8f20
|
|
|
|
ldx #$05
|
|
L8f2a: lda D9911,x
|
|
cmp Z00,x
|
|
beq L8f34
|
|
jmp L95cd
|
|
|
|
L8f34: dex
|
|
bpl L8f2a
|
|
|
|
; Test all of zero page, though most of it will just be zeros
|
|
jsr copy_D8e00_to_zp
|
|
jsr compare_D8e00_to_zp
|
|
bcc L8f42
|
|
jmp L95cd
|
|
|
|
L8f42: jsr copy_diag_to_host ; copy some of host diagnostic code to host shared ROM
|
|
stz Z02
|
|
stz D7b17+1 ; change branch target of HL_diag_load_wait to allow
|
|
; host to continue
|
|
|
|
lda #$fe ; prevent host from proceeding
|
|
sta D7b0b+1
|
|
sta D7b21+1
|
|
|
|
jsr verify_slot_pseudorom
|
|
bcc L8f5a
|
|
jmp L95cd
|
|
|
|
L8f5a: jsr verify_diag_copied_correctly
|
|
bcc L8f62
|
|
jmp L95cd
|
|
|
|
L8f62: jsr S92ac
|
|
jsr S93f5
|
|
bcc L8f6d
|
|
jmp L95cd
|
|
|
|
L8f6d: jsr S92ac
|
|
jsr S93b1
|
|
bcc L8f78
|
|
jmp L95cd
|
|
|
|
L8f78: jsr S92ac
|
|
jsr S92b5
|
|
bcc L8f83
|
|
jmp L95cd
|
|
|
|
L8f83: jsr S92ac
|
|
lda #$06
|
|
sta Z04
|
|
stz Z05
|
|
lda #$01
|
|
sta Z00
|
|
stz Z01
|
|
L8f92: lda #$0a
|
|
cmp Z05
|
|
bne L8f9c
|
|
lda #$0b
|
|
sta Z05
|
|
L8f9c: lda #$7b
|
|
cmp Z05
|
|
beq L8fc7
|
|
lda Z00
|
|
sta (Z04)
|
|
inc Z04
|
|
lda Z01
|
|
sta (Z04)
|
|
inc Z04
|
|
bne L8fb2
|
|
inc Z05
|
|
L8fb2: clc
|
|
rol Z00
|
|
rol Z01
|
|
bcc L8f92
|
|
lda #$0b
|
|
eor Z00
|
|
sta Z00
|
|
lda #$10
|
|
eor Z01
|
|
sta Z01
|
|
bra L8f92
|
|
L8fc7: lda #$06
|
|
sta Z04
|
|
stz Z05
|
|
lda #$01
|
|
sta Z00
|
|
stz Z01
|
|
L8fd3: lda #$0a
|
|
cmp Z05
|
|
bne L8fdd
|
|
lda #$0b
|
|
sta Z05
|
|
L8fdd: lda #$7b
|
|
cmp Z05
|
|
beq L9012
|
|
lda Z00
|
|
cmp (Z04)
|
|
beq L8fec
|
|
jmp L95cd
|
|
|
|
L8fec: inc Z04
|
|
lda Z01
|
|
cmp (Z04)
|
|
beq L8ff7
|
|
jmp L95cd
|
|
|
|
L8ff7: inc Z04
|
|
bne L8ffd
|
|
inc Z05
|
|
L8ffd: clc
|
|
rol Z00
|
|
rol Z01
|
|
bcc L8fd3
|
|
lda #$0b
|
|
eor Z00
|
|
sta Z00
|
|
lda #$10
|
|
eor Z01
|
|
sta Z01
|
|
bra L8fd3
|
|
L9012: lda #$06
|
|
sta Z04
|
|
stz Z05
|
|
lda #$01
|
|
sta Z00
|
|
stz Z01
|
|
L901e: lda #$0a
|
|
cmp Z05
|
|
bne L9028
|
|
lda #$0b
|
|
sta Z05
|
|
L9028: lda #$7b
|
|
cmp Z05
|
|
beq L9057
|
|
lda Z00
|
|
eor #$ff
|
|
sta (Z04)
|
|
inc Z04
|
|
lda Z01
|
|
eor #$ff
|
|
sta (Z04)
|
|
inc Z04
|
|
bne L9042
|
|
inc Z05
|
|
L9042: clc
|
|
rol Z00
|
|
rol Z01
|
|
bcc L901e
|
|
lda #$0b
|
|
eor Z00
|
|
sta Z00
|
|
lda #$10
|
|
eor Z01
|
|
sta Z01
|
|
bra L901e
|
|
|
|
L9057: lda #$06
|
|
sta Z04
|
|
stz Z05
|
|
lda #$01
|
|
sta Z00
|
|
stz Z01
|
|
L9063: lda #$0a
|
|
cmp Z05
|
|
bne L906d
|
|
lda #$0b
|
|
sta Z05
|
|
L906d: lda #$7b
|
|
cmp Z05
|
|
beq L90a6
|
|
lda Z00
|
|
eor #$ff
|
|
cmp (Z04)
|
|
beq L907e
|
|
jmp L95cd
|
|
|
|
L907e: inc Z04
|
|
lda Z01
|
|
eor #$ff
|
|
cmp (Z04)
|
|
beq L908b
|
|
jmp L95cd
|
|
|
|
L908b: inc Z04
|
|
bne L9091
|
|
inc Z05
|
|
L9091: clc
|
|
rol Z00
|
|
rol Z01
|
|
bcc L9063
|
|
lda #$0b
|
|
eor Z00
|
|
sta Z00
|
|
lda #$10
|
|
eor Z01
|
|
sta Z01
|
|
bra L9063
|
|
|
|
L90a6: ldy #$00 ; copy first two pages of diagnostic code to host shared ROM
|
|
L90a8: lda D8800,y
|
|
sta D0200,y
|
|
lda D8800+$100,y
|
|
sta D0200+$100,y
|
|
dey
|
|
bne L90a8
|
|
lda #$91
|
|
pha
|
|
lda #$36
|
|
pha
|
|
pla
|
|
pla
|
|
stz Z00
|
|
stz Z01
|
|
lda #$00
|
|
ldy #$06
|
|
stz D09ff
|
|
L90ca: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L90ca
|
|
inc Z01
|
|
ldx #$08
|
|
cpx Z01
|
|
bne L90ca
|
|
ldx #$0c
|
|
stx Z01
|
|
L90dc: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L90dc
|
|
inc Z01
|
|
ldx #$40
|
|
cpx Z01
|
|
bne L90dc
|
|
ldx #$7c
|
|
stx Z01
|
|
L90ee: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L90ee
|
|
inc Z01
|
|
ldx #$7f
|
|
cpx Z01
|
|
bne L90ee
|
|
L90fc: clc
|
|
adc (Z00),y
|
|
iny
|
|
cpy #$ff
|
|
bne L90fc
|
|
iny
|
|
ldx #$0b
|
|
stx Z01
|
|
L9109: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L9109
|
|
ldx #$7b
|
|
stx Z01
|
|
L9113: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L9113
|
|
ldx #$08
|
|
stx Z01
|
|
L911d: clc
|
|
adc (Z00),y
|
|
iny
|
|
bne L911d
|
|
inc Z01
|
|
ldx #$0a
|
|
cpx Z01
|
|
bne L911d
|
|
eor #$ff
|
|
sta D09ff
|
|
lda #$a1
|
|
sta Z02
|
|
jsr S929b
|
|
jsr Sd2a1
|
|
lda #$ff
|
|
sta Z00
|
|
stz D03ff
|
|
jsr S929b
|
|
|
|
; look for a 16 byte signature from the host slot 1 card
|
|
; the slot ROM subroutine at HLcne7 has copied c100..c10f
|
|
; to cbee..cbfd, which we see from 03ee..03fd
|
|
ldy #$0f
|
|
L9146: lda slot_1_rom_copy,y
|
|
cmp slot_1_template,y
|
|
bne L9154
|
|
dey
|
|
bpl L9146
|
|
jmp L915c
|
|
|
|
L9154: lda #$4f
|
|
sta D03ff
|
|
jmp L9269
|
|
|
|
L915c: lda Z33
|
|
bne L9163
|
|
jmp L9154
|
|
L9163: lda #$01
|
|
sta Z03
|
|
jsr S917f
|
|
lda Z33
|
|
cmp #$02
|
|
bcc L9177
|
|
lda #$02
|
|
sta Z03
|
|
jsr S917f
|
|
L9177: lda #$4f
|
|
sta D03ff
|
|
jmp L9269
|
|
|
|
S917f: jsr S9248
|
|
jsr S91b4
|
|
bcs L91a1
|
|
jsr S91fa
|
|
bcs L91a1
|
|
jsr S9244
|
|
jsr S91b4
|
|
bcs L91a1
|
|
jsr S91fa
|
|
stz D03ff
|
|
lda iwm_motor_off
|
|
jsr S929b
|
|
rts
|
|
|
|
L91a1: lda Z05
|
|
sta Z07
|
|
lda Z06
|
|
sta Z08
|
|
lda #$4e
|
|
sta D03ff
|
|
lda iwm_motor_off
|
|
jmp L9269
|
|
|
|
S91b4: jsr Sd80b
|
|
lda #$02
|
|
sta Z02
|
|
lda D03fe
|
|
lsr
|
|
lda D03fe
|
|
stz Z06
|
|
rol
|
|
sta Z05
|
|
rol Z06
|
|
lda #$ff
|
|
sta Z01
|
|
sta Zb9
|
|
lda #$02
|
|
sta Z00
|
|
jsr Sd1e7
|
|
stz Zb9
|
|
bcs L91de
|
|
lda #$ff
|
|
sta Z00
|
|
L91de: lda Z56
|
|
beq L91e4
|
|
sec
|
|
rts
|
|
|
|
L91e4: lda Z2d
|
|
jsr Sd9b0
|
|
ldy #$00
|
|
L91eb: lda (Zab),y
|
|
sta D0400,y
|
|
lda (Zaf),y
|
|
sta D0500,y
|
|
iny
|
|
bne L91eb
|
|
clc
|
|
rts
|
|
|
|
S91fa: jsr Sd80b
|
|
lda #$01
|
|
sta Z02
|
|
lda D03fe
|
|
lsr
|
|
lda D03fe
|
|
stz Z06
|
|
rol
|
|
sta Z05
|
|
rol Z06
|
|
lda #$ff
|
|
sta Z01
|
|
sta Z5f
|
|
lda #$01
|
|
sta Z00
|
|
jsr Sd1e7
|
|
lda #$fe
|
|
sta Z00
|
|
lda Z2d
|
|
jsr Sd9b0
|
|
lda #$ff
|
|
sta Z01
|
|
lda Z56
|
|
beq L922f
|
|
L922d: sec
|
|
rts
|
|
|
|
L922f: ldy #$00
|
|
L9231: lda (Zab),y
|
|
cmp D0400,y
|
|
bne L922d
|
|
lda (Zaf),y
|
|
cmp D0500,y
|
|
bne L922d
|
|
iny
|
|
bne L9231
|
|
clc
|
|
rts
|
|
|
|
S9244: ldy #$c3
|
|
bra L924a
|
|
|
|
S9248: ldy #$a5
|
|
L924a: lda #$08
|
|
L924c: jsr S9255
|
|
inc
|
|
cmp #$1c
|
|
bcc L924c
|
|
rts
|
|
|
|
S9255: pha
|
|
jsr Sd9b0
|
|
tya
|
|
sec
|
|
phy
|
|
ldy #$00
|
|
L925e: sta (Zab),y
|
|
sta (Zaf),y
|
|
rol
|
|
iny
|
|
bne L925e
|
|
ply
|
|
pla
|
|
rts
|
|
|
|
L9269: ldy #$00
|
|
sty Z04
|
|
sty Z05
|
|
L926f: lda #$0a
|
|
cmp Z05
|
|
bne L927c
|
|
tya
|
|
and #$c0
|
|
bne L927c
|
|
bra L927e
|
|
L927c: lda (Z04),y
|
|
L927e: iny
|
|
bne L926f
|
|
inc Z05
|
|
bne L926f
|
|
lda D03ff
|
|
cmp #$55
|
|
bne L9269
|
|
L928c: lda #$00
|
|
sta D03ff
|
|
sta D0a80
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
jmp RESET
|
|
|
|
S929b: lda D03ff
|
|
cmp #$a1
|
|
bne L92a3
|
|
rts
|
|
|
|
L92a3: cmp #$4f
|
|
bne S929b
|
|
pla
|
|
pla
|
|
jmp L9269
|
|
|
|
S92ac: lda #$a1
|
|
sta Z02
|
|
L92b0: lda Z02
|
|
bne L92b0
|
|
rts
|
|
|
|
|
|
; SWIM chip test
|
|
S92b5: bit iwm_q7l ; reset IWM (assumed not to be in ISM mode)
|
|
bit iwm_q6l
|
|
bit iwm_ph0_off
|
|
bit iwm_ph1_off
|
|
bit iwm_ph2_off
|
|
bit iwm_ph3_off
|
|
bit iwm_motor_off
|
|
|
|
lda iwm_q7l ; Q6L,Q7L - should read all ones
|
|
cmp #$ff
|
|
beq L92d3 ; yes
|
|
sec ; no, failure
|
|
rts
|
|
|
|
L92d3: lda #$1f
|
|
bit iwm_q6h
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register
|
|
eor iwm_q7l ; Q6H,Q7L - read status register (low 5 match mode reg)
|
|
and #$1f ; match?
|
|
beq L92e4 ; yes
|
|
sec ; no, failure
|
|
rts
|
|
|
|
L92e4: lda #$00
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register
|
|
eor iwm_q7l ; Q6H,Q7L - read status register
|
|
and #$1f ; match?
|
|
beq L92f2 ; yes
|
|
sec ; no, failure
|
|
rts
|
|
|
|
L92f2: lda #$0f
|
|
bit iwm_q6h
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register
|
|
eor iwm_q7l ; Q6H,Q7L - read status register
|
|
and #$1f ; match?
|
|
beq L9303 ; yes
|
|
sec ; no, failure
|
|
rts
|
|
|
|
; set SWIM to ISM mode
|
|
L9303: lda #$4f
|
|
bit iwm_q6h
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register, MZ=1
|
|
eor #$40
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register, MZ=0
|
|
eor #$40
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register, MZ=1
|
|
sta iwm_q7h ; Q6H,Q7H - write mode register, MZ=1
|
|
|
|
lda #$05 ; wait to meet IWM-to-ISM timing spec
|
|
L931a: dec
|
|
bne L931a
|
|
|
|
lda ism_r_phase ; phase should be all enabled, low
|
|
cmp #$f0
|
|
bne L935a
|
|
|
|
lda ism_r_status ; status should be motor on, bit 6=1
|
|
and #$c0
|
|
cmp #$40
|
|
bne L935a
|
|
|
|
stz ism_w_zeros ; reset param pointer
|
|
lda #$01
|
|
L9332: sta ism_w_param ; loop writing a single one bit
|
|
asl
|
|
bcc L9332
|
|
|
|
lda #$fe
|
|
L933a: sta ism_w_param ; loop writing a single zero bit
|
|
rol
|
|
bcs L933a
|
|
|
|
stz ism_w_zeros ; reset param pointer
|
|
lda #$01
|
|
L9345: cmp ism_r_param
|
|
bne L935a
|
|
asl
|
|
bcc L9345
|
|
|
|
lda #$fe
|
|
L934f: cmp ism_r_param
|
|
bne L935a
|
|
sec
|
|
rol
|
|
bcs L934f
|
|
|
|
bra L935c
|
|
|
|
L935a: sec
|
|
rts
|
|
|
|
L935c: lda #$f8 ; switch SWIM from ISM to IWM mode
|
|
sta ism_w_zeros
|
|
|
|
bit iwm_q7l ; reset IWM (assumed not to be in ISM mode)
|
|
bit iwm_q6l
|
|
bit iwm_ph0_off
|
|
bit iwm_ph1_off
|
|
bit iwm_ph2_off
|
|
bit iwm_ph3_off
|
|
bit iwm_motor_off
|
|
|
|
lda iwm_q7l ; Q6L,Q7L - should read all ones
|
|
cmp #$ff
|
|
beq L937f ; yes
|
|
sec ; no, failure
|
|
rts
|
|
|
|
|
|
; repeat IWM tests
|
|
L937f: lda #$1f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L9390
|
|
sec
|
|
rts
|
|
|
|
L9390: lda #$00
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L939e
|
|
sec
|
|
rts
|
|
|
|
L939e: lda #$0f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
bne L93af
|
|
clc
|
|
rts
|
|
|
|
L93af: sec
|
|
rts
|
|
|
|
|
|
; compute ROM checksum
|
|
S93b1: stz Zfe
|
|
lda #$80
|
|
sta Zfe+1
|
|
lda #$00
|
|
tax
|
|
tay
|
|
L93bb: clc
|
|
adc (Zfe),y
|
|
bcc L93c1
|
|
inx
|
|
L93c1: iny
|
|
bne L93bb
|
|
inc Zfe+1
|
|
tay
|
|
lda Zfe+1
|
|
inc
|
|
beq L93d1
|
|
tya
|
|
ldy #$00
|
|
bra L93bb
|
|
|
|
L93d1: tya
|
|
ldy #$00
|
|
L93d4: clc
|
|
adc (Zfe),y
|
|
bcc L93da
|
|
inx
|
|
L93da: iny
|
|
beq L93e4
|
|
cpy #$f9
|
|
bne L93d4
|
|
iny
|
|
bra L93d4
|
|
L93e4: tay
|
|
beq L93ea
|
|
jmp L9888
|
|
|
|
L93ea: txa
|
|
clc
|
|
adc Dfffa-1
|
|
beq L93f3
|
|
sec
|
|
rts
|
|
|
|
L93f3: clc
|
|
rts
|
|
|
|
; compute CRC16 of ROM in 2KB pieces using an unrolled loop
|
|
|
|
S93f5: stz Zfe
|
|
lda #$80
|
|
sta Zfe+1
|
|
L93fb: stz Zfc
|
|
stz Zfc+1
|
|
L93ff: clc
|
|
rol Zfc
|
|
rol Zfc+1
|
|
bcs L941a
|
|
lda (Zfe)
|
|
ror
|
|
tay
|
|
bcc L9422
|
|
L940c: lda #$21
|
|
eor Zfc
|
|
sta Zfc
|
|
lda #$10
|
|
eor Zfc+1
|
|
sta Zfc+1
|
|
bra L9422
|
|
|
|
L941a: lda (Zfe)
|
|
ror
|
|
tay
|
|
|
|
bcs L9422 ; these two instr could be "bcc L940c"
|
|
bra L940c
|
|
L9422:
|
|
|
|
rept 7
|
|
clc
|
|
rol Zfc
|
|
rol Zfc+1
|
|
bcs L943c
|
|
tya
|
|
ror
|
|
tay
|
|
bcc L9443
|
|
|
|
L942e: lda #$21
|
|
eor Zfc
|
|
sta Zfc
|
|
lda #$10
|
|
eor Zfc+1
|
|
sta Zfc+1
|
|
bra L9443
|
|
|
|
L943c: tya
|
|
ror
|
|
tay
|
|
bcs L9443
|
|
bra L942e
|
|
L9443:
|
|
endm
|
|
|
|
inc Zfe
|
|
beq L9510
|
|
jmp L93ff
|
|
|
|
L9510: inc Zfe+1
|
|
lda Zfe+1
|
|
sec
|
|
sbc #$80
|
|
tax
|
|
and #$07
|
|
beq L951f
|
|
jmp L93ff
|
|
|
|
L951f: txa
|
|
clc
|
|
ror
|
|
ror
|
|
ror
|
|
dec
|
|
asl
|
|
tax
|
|
lda Dffda,x
|
|
cmp Zfc
|
|
beq L9530
|
|
L952e: sec
|
|
rts
|
|
|
|
L9530: lda Dffda+1,x
|
|
cmp Zfc+1
|
|
bne L952e
|
|
cpx #$1c
|
|
beq L953e
|
|
jmp L93fb
|
|
|
|
L953e: clc
|
|
rts
|
|
|
|
|
|
; verify slot pseudoROM (7b00, host cn00) against slot ROM image (8100),
|
|
; except that Cn18 is expected to be $00
|
|
verify_slot_pseudorom:
|
|
ldx #$00
|
|
L9542: cpx #$18
|
|
bne L954a
|
|
lda #$00
|
|
bra L954d
|
|
L954a: lda D8100,x
|
|
L954d: cmp D7b00,x
|
|
bne L9557
|
|
dex
|
|
bne L9542
|
|
clc
|
|
rts
|
|
|
|
L9557: sec
|
|
rts
|
|
|
|
|
|
; copy some of diagnostic code to host shared ROM
|
|
copy_diag_to_host:
|
|
ldx #$00
|
|
L955b: lda D8800+$0200,x
|
|
sta D7c00,x
|
|
dex
|
|
bne L955b
|
|
L9564: lda D8800+$0300,x
|
|
sta D7c00+$0100,x
|
|
dex
|
|
bne L9564
|
|
L956d: lda D8800+$0400,x
|
|
sta D7c00+$0200,x
|
|
dex
|
|
bne L956d
|
|
L9576: lda D8800+$0500,x
|
|
sta D7c00+$0300,x
|
|
dex
|
|
bne L9576
|
|
rts
|
|
|
|
verify_diag_copied_correctly:
|
|
ldx #$00
|
|
L9582: lda D8800+$0200,x
|
|
cmp D7c00,x
|
|
bne L95b0
|
|
dex
|
|
bne L9582
|
|
L958d: lda D8800+$0300,x
|
|
cmp D7c00+$0100,x
|
|
bne L95b0
|
|
dex
|
|
bne L958d
|
|
L9598: lda D8800+$0400,x
|
|
cmp D7c00+$0200,x
|
|
bne L95b0
|
|
dex
|
|
bne L9598
|
|
L95a3: lda D8800+$0500,x
|
|
cmp D7c00+$0300,x
|
|
bne L95b0
|
|
dex
|
|
bne L95a3
|
|
clc
|
|
rts
|
|
|
|
L95b0: sec
|
|
rts
|
|
|
|
|
|
copy_D8e00_to_zp:
|
|
ldx #$00
|
|
L95b4: lda D8e00,x
|
|
sta Z00,x
|
|
dex
|
|
bne L95b4
|
|
rts
|
|
|
|
compare_D8e00_to_zp:
|
|
ldx #$00
|
|
L95bf: lda D8e00,x
|
|
cmp Z00,x
|
|
bne L95cb
|
|
dex
|
|
bne L95bf
|
|
clc
|
|
rts
|
|
|
|
L95cb: sec
|
|
rts
|
|
|
|
|
|
; test fail
|
|
L95cd: lda #$4f
|
|
sta Z02
|
|
L95d1: sta D0a81
|
|
ldx #$00
|
|
L95d6: lda #$00
|
|
L95d8: dec
|
|
bne L95db
|
|
L95db: nop
|
|
nop
|
|
bne L95d8
|
|
dex
|
|
bne L95d6
|
|
sta D0a80
|
|
|
|
ldx #$00
|
|
L95e7: lda #$00
|
|
L95e9: dec
|
|
rept 6
|
|
bne *+2
|
|
endm
|
|
nop
|
|
bne L95e9
|
|
dex
|
|
bne L95e7
|
|
|
|
sta D0a81
|
|
ldx #$ff
|
|
L9601: lda #$cb
|
|
L9603: dec
|
|
bne L9606
|
|
L9606: nop
|
|
bne L9603
|
|
dex
|
|
bne L9601
|
|
sta D0a80
|
|
ldx #$96
|
|
L9611: lda #$cb
|
|
L9613: dec
|
|
bne L9616
|
|
L9616: nop
|
|
bne L9613
|
|
dex
|
|
bne L9611
|
|
sta D0a81
|
|
ldx #$ff
|
|
L9621: lda #$cb
|
|
L9623: dec
|
|
bne L9626
|
|
L9626: nop
|
|
bne L9623
|
|
dex
|
|
bne L9621
|
|
sta D0a80
|
|
ldx #$96
|
|
L9631: lda #$cb
|
|
L9633: dec
|
|
bne L9636
|
|
L9636: nop
|
|
bne L9633
|
|
dex
|
|
bne L9631
|
|
sta D0a81
|
|
lda D03ff
|
|
cmp #$55
|
|
bne L95d1
|
|
jmp L928c
|
|
|
|
|
|
; copy 35 bytes of slot ROM image into slot pseudoROM
|
|
; (minimum required while on-board processor is doing
|
|
; self-test and initialization)
|
|
; rest copied later
|
|
reset2: ldy #(HLcn23-HLcn00)-1
|
|
L964b: lda D8100,y
|
|
sta D7b00,y
|
|
dey
|
|
bpl L964b
|
|
|
|
; compute ROM checksum
|
|
stz Zfe
|
|
lda #$80
|
|
sta Zfe+1
|
|
lda #$00
|
|
tax
|
|
tay
|
|
L965e: clc
|
|
adc (Zfe),y
|
|
bcc L9664
|
|
inx
|
|
L9664: iny
|
|
bne L965e
|
|
inc Zfe+1
|
|
tay
|
|
lda Zfe+1
|
|
inc
|
|
beq L9674
|
|
tya
|
|
ldy #$00
|
|
bra L965e
|
|
|
|
L9674: tya
|
|
ldy #$00
|
|
L9677: clc
|
|
adc (Zfe),y
|
|
bcc L967d
|
|
inx
|
|
L967d: iny
|
|
beq L9687
|
|
cpy #$f9
|
|
bne L9677
|
|
iny
|
|
bra L9677
|
|
L9687: tay
|
|
beq L968d
|
|
jmp L9888
|
|
|
|
L968d: txa
|
|
clc
|
|
adc Dfffa-1
|
|
beq L9697
|
|
jmp L9888
|
|
|
|
L9697: bit iwm_q7l ; reset IWM (assumed not to be in ISM mode)
|
|
bit iwm_q6l
|
|
bit iwm_ph0_off
|
|
bit iwm_ph1_off
|
|
bit iwm_ph2_off
|
|
bit iwm_ph3_off
|
|
bit iwm_motor_off
|
|
|
|
lda iwm_q7l ; Q6L,Q7L - should read all ones
|
|
cmp #$ff
|
|
beq L96b6 ; yes
|
|
jmp L9888 ; no, failure
|
|
|
|
L96b6: lda #$1f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L96c8
|
|
jmp L9888
|
|
|
|
L96c8: lda #$00
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L96d7
|
|
jmp L9888
|
|
|
|
L96d7: lda #$0f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L96e9
|
|
jmp L9888
|
|
|
|
; set SWIM to ISM mode
|
|
L96e9: lda #$4f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor #$40
|
|
sta iwm_q7h
|
|
eor #$40
|
|
sta iwm_q7h
|
|
sta iwm_q7h
|
|
lda #$05
|
|
L9700: dec
|
|
bne L9700
|
|
lda iwm_q6l
|
|
cmp #$f0
|
|
bne L9740
|
|
lda iwm_q7l
|
|
and #$c0
|
|
cmp #$40
|
|
bne L9740
|
|
stz iwm_ph3_off
|
|
lda #$01
|
|
L9718: sta iwm_ph1_on
|
|
asl
|
|
bcc L9718
|
|
lda #$fe
|
|
L9720: sta iwm_ph1_on
|
|
rol
|
|
bcs L9720
|
|
stz iwm_ph3_off
|
|
lda #$01
|
|
L972b: cmp iwm_sel_drive_2
|
|
bne L9740
|
|
asl
|
|
bcc L972b
|
|
lda #$fe
|
|
L9735: cmp iwm_sel_drive_2
|
|
bne L9740
|
|
sec
|
|
rol
|
|
bcs L9735
|
|
bra L9743
|
|
L9740: jmp L9888
|
|
|
|
L9743: lda #$f8 ; switch SWIM from ISM to IWM mode
|
|
sta ism_w_zeros
|
|
|
|
bit iwm_q7l ; reset IWM (assumed not to be in ISM mode)
|
|
bit iwm_q6l
|
|
bit iwm_ph0_off
|
|
bit iwm_ph1_off
|
|
bit iwm_ph2_off
|
|
bit iwm_ph3_off
|
|
bit iwm_motor_off
|
|
|
|
lda iwm_q7l ; Q6L,Q7L should read all ones
|
|
cmp #$ff
|
|
beq L9767 ; yes
|
|
jmp L9888 ; no, failure
|
|
|
|
L9767: lda #$1f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L9779
|
|
jmp L9888
|
|
|
|
L9779: lda #$00
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L9788
|
|
jmp L9888
|
|
|
|
L9788: lda #$0f
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
eor iwm_q7l
|
|
and #$1f
|
|
beq L979a
|
|
jmp L9888
|
|
|
|
L979a: lda #$00
|
|
tax
|
|
L979d: sta D0100,x
|
|
inc
|
|
inx
|
|
bne L979d
|
|
lda #$01
|
|
sta D0403
|
|
asl
|
|
sta D0503
|
|
asl
|
|
sta D0603
|
|
asl
|
|
sta D0803
|
|
asl
|
|
sta D1003
|
|
asl
|
|
sta D1203
|
|
asl
|
|
sta D2003
|
|
asl
|
|
sta D4003
|
|
lda #$01
|
|
cmp D0403
|
|
beq L97cf
|
|
jmp L9888
|
|
|
|
L97cf: asl
|
|
cmp D0503
|
|
beq L97d8
|
|
jmp L9888
|
|
|
|
L97d8: asl
|
|
cmp D0603
|
|
beq L97e1
|
|
jmp L9888
|
|
|
|
L97e1: asl
|
|
cmp D0803
|
|
beq L97ea
|
|
jmp L9888
|
|
|
|
L97ea: asl
|
|
cmp D1003
|
|
beq L97f3
|
|
jmp L9888
|
|
|
|
L97f3: asl
|
|
cmp D1203
|
|
beq L97fc
|
|
jmp L9888
|
|
|
|
L97fc: asl
|
|
cmp D2003
|
|
beq L9805
|
|
jmp L9888
|
|
|
|
L9805: asl
|
|
cmp D4003
|
|
beq L980e
|
|
jmp L9888
|
|
|
|
L980e: lda #$00
|
|
tax
|
|
L9811: cmp D0100,x
|
|
bne L981c
|
|
inc
|
|
inx
|
|
bne L9811
|
|
bra L981f
|
|
L981c: jmp L9888
|
|
|
|
L981f: lda #$ff
|
|
ldx #$00
|
|
L9823: sta D0100,x
|
|
dec
|
|
inx
|
|
bne L9823
|
|
lda #$ff
|
|
ldx #$00
|
|
L982e: cmp D0100,x
|
|
bne L9839
|
|
dec
|
|
inx
|
|
bne L982e
|
|
bra L983c
|
|
L9839: jmp L9888
|
|
|
|
L983c: lda #$01
|
|
cmp D0403
|
|
beq L9846
|
|
jmp L9888
|
|
|
|
L9846: asl
|
|
cmp D0503
|
|
beq L984f
|
|
jmp L9888
|
|
|
|
L984f: asl
|
|
cmp D0603
|
|
beq L9858
|
|
jmp L9888
|
|
|
|
L9858: asl
|
|
cmp D0803
|
|
beq L9861
|
|
jmp L9888
|
|
|
|
L9861: asl
|
|
cmp D1003
|
|
beq L986a
|
|
jmp L9888
|
|
|
|
L986a: asl
|
|
cmp D1203
|
|
beq L9873
|
|
jmp L9888
|
|
|
|
L9873: asl
|
|
cmp D2003
|
|
beq L987c
|
|
jmp L9888
|
|
|
|
L987c: asl
|
|
cmp D4003
|
|
bne L9888
|
|
sta D0a81
|
|
jmp Ld129
|
|
|
|
; come here on self-test fail?
|
|
; fill the slot ROM image with stuff to
|
|
; prevent it from looking like a disk?
|
|
L9888: stz D7b04+1
|
|
|
|
lda #$4c ; JMP opcode
|
|
sta D7b00
|
|
sta D7b0d
|
|
sta D7b23
|
|
lda #mon_oldrst & $ff
|
|
sta D7b00+1
|
|
sta D7b0d+1
|
|
sta D7b23+1
|
|
lda #mon_oldrst >> 8
|
|
sta D7b00+2
|
|
sta D7b0d+2
|
|
sta D7b23+2
|
|
|
|
stz D7b0b+1 ; allow host to proceed
|
|
stz D7b21+1
|
|
|
|
ldx #$26 ; fill reset with zeros
|
|
L98b4: stz D7b00,x
|
|
inx
|
|
bne L98b4
|
|
|
|
L98ba: sta D0a81
|
|
ldx #$00
|
|
L98bf: lda #$00
|
|
L98c1: dec
|
|
bne L98c4
|
|
L98c4: nop
|
|
nop
|
|
bne L98c1
|
|
dex
|
|
bne L98bf
|
|
sta D0a80
|
|
ldx #$00
|
|
|
|
L98d0: lda #$00
|
|
L98d2: dec
|
|
rept 6
|
|
bne *+2
|
|
endm
|
|
nop
|
|
bne L98d2
|
|
dex
|
|
bne L98d0
|
|
|
|
sta D0a81
|
|
ldx #$ff
|
|
L98ea: lda #$cb
|
|
L98ec: dec
|
|
bne L98ef
|
|
L98ef: nop
|
|
bne L98ec
|
|
dex
|
|
bne L98ea
|
|
sta D0a80
|
|
ldx #$96
|
|
L98fa: lda #$cb
|
|
L98fc: dec
|
|
bne L98ff
|
|
L98ff: nop
|
|
bne L98fc
|
|
dex
|
|
bne L98fa
|
|
sta D0a81
|
|
jmp L98ba
|
|
|
|
D990b: fcb $00,$ff,$55,$aa,$cc,$33
|
|
D9911: fcb $ff,$00,$aa,$55,$33,$cc
|
|
|
|
; 16 bytes of data to compare to the first 16 bytes of
|
|
; the host slot 1 ROM (c100..c10f)
|
|
slot_1_template:
|
|
fcb $4c,$59,$ff,"AVEX Manufact"
|
|
|
|
fillto $d000
|
|
Dd000:
|
|
; nibblization table
|
|
rept 4
|
|
fcb $96,$97,$9a,$9b,$9d,$9e,$9f,$a6
|
|
fcb $a7,$ab,$ac,$ad,$ae,$af,$b2,$b3
|
|
fcb $b4,$b5,$b6,$b7,$b9,$ba,$bb,$bc
|
|
fcb $bd,$be,$bf,$cb,$cd,$ce,$cf,$d3
|
|
fcb $d6,$d7,$d9,$da,$db,$dc,$dd,$de
|
|
fcb $df,$e5,$e6,$e7,$e9,$ea,$eb,$ec
|
|
fcb $ed,$ee,$ef,$f2,$f3,$f4,$f5,$f6
|
|
fcb $f7,$f9,$fa,$fb,$fc,$fd,$fe,$ff
|
|
endm
|
|
|
|
|
|
Pd100: jmp Sd576
|
|
|
|
Pd103: jmp Sd60b
|
|
|
|
Pd106: jmp Sd5d8
|
|
|
|
Pd109: jmp Sd89f
|
|
|
|
Pd10c: jmp Se600
|
|
|
|
Pd10f: jmp Lec77
|
|
|
|
|
|
cmd_init:
|
|
jsr Sd7cc
|
|
jsr Sf73c
|
|
bit iwm_motor_off
|
|
stz Z01
|
|
|
|
reset: cld
|
|
sei
|
|
ldx #$ff
|
|
txs
|
|
stz Z00
|
|
lda Z6f
|
|
jmp reset2
|
|
|
|
|
|
Ld129: lda Z6f
|
|
jsr copy_rom_to_host_pseudorom
|
|
|
|
ldx #$04
|
|
Ld130: dex
|
|
bmi Ld13f
|
|
|
|
lda Zbc+$8000,x
|
|
cmp Zbc,x
|
|
beq Ld130
|
|
|
|
jsr Sd2a1
|
|
bra Ld188
|
|
|
|
Ld13f: jsr Sd2ea
|
|
ldx #$ff
|
|
stx Z2f
|
|
jsr Sd6e8
|
|
jsr Sd80b
|
|
ldx Z32
|
|
beq Ld15a
|
|
lda #$80
|
|
jsr Sf8ba
|
|
lda #$1f
|
|
jsr Sd651
|
|
Ld15a: lda Z32
|
|
cmp #$01
|
|
beq Ld188
|
|
ldx Z33
|
|
Ld162: dex
|
|
bmi Ld185
|
|
bit Z34,x
|
|
bmi Ld162
|
|
stx Z13
|
|
stx Z2f
|
|
jsr Sd7b0
|
|
ldx Z13
|
|
jsr Sd905
|
|
phx
|
|
clc
|
|
jsr Sd4cc
|
|
jsr Sd80b
|
|
ldx Z13
|
|
jsr Sd835
|
|
plx
|
|
bra Ld162
|
|
Ld185: jsr Sd7b0
|
|
Ld188: bit Z6f
|
|
bmi Ld19e
|
|
ldx #$ff
|
|
stx Z2f
|
|
jsr Sd7b0
|
|
ldx Z6f
|
|
lda iwm_sel_drive_1,x
|
|
bit iwm_motor_on
|
|
jsr Sed05
|
|
Ld19e: lda #$ff
|
|
sta Z01
|
|
sta Z00
|
|
ldx #$03
|
|
Ld1a6: dec Zad
|
|
bne Ld1b6
|
|
dec Zae
|
|
bne Ld1b6
|
|
dex
|
|
bne Ld1b6
|
|
jsr Sd8dd
|
|
ldx #$03
|
|
Ld1b6: lda Z00
|
|
bmi Ld1a6
|
|
sta Ze0
|
|
lda Z02
|
|
sta Ze1
|
|
lda Z03
|
|
sta Ze2
|
|
lda Z05
|
|
sta Ze3
|
|
lda Z06
|
|
sta Ze4
|
|
Ld1cc: jsr Z87
|
|
bcs Ld1d5
|
|
lda #$ff
|
|
sta Z00
|
|
Ld1d5: stz Zae
|
|
stz Z13
|
|
jsr Sd80b
|
|
lda Z00
|
|
bpl Ld1cc
|
|
bit iwm_motor_off
|
|
ldx #$03
|
|
bra Ld1a6
|
|
|
|
Sd1e7: stz Z56
|
|
stz Z58
|
|
stz Z61
|
|
stz Zb4
|
|
lda #$ff
|
|
sta Z15
|
|
sta Z1b
|
|
sta Z14
|
|
lda Z00
|
|
cmp #$0f
|
|
bcc Ld213
|
|
cmp #$7e
|
|
bcc Ld20c
|
|
eor #$7e
|
|
beq Ld207
|
|
lda #$40
|
|
Ld207: sta D7c09
|
|
clc
|
|
rts
|
|
|
|
Ld20c: cmp #$3d
|
|
bne Ld246
|
|
jmp L8f00
|
|
|
|
Ld213: stz Zb5
|
|
Ld215: lda Z33
|
|
cmp Z03
|
|
bcs Ld235
|
|
lda Z00
|
|
ora Z05
|
|
bne Ld231
|
|
bit Z02
|
|
bvc Ld231
|
|
lda Z03
|
|
bpl Ld231
|
|
sta Zb5
|
|
and #$7f
|
|
sta Z03
|
|
bne Ld215
|
|
Ld231: lda #$11
|
|
bra Sd297
|
|
Ld235: ldx Z03
|
|
dex
|
|
stx Z2f
|
|
bmi Ld248
|
|
lda Z34,x
|
|
bpl Ld248
|
|
lda Z00
|
|
cmp #$0d
|
|
bcc Ld257
|
|
Ld246: bra cmd_bad
|
|
Ld248: lda #$1f
|
|
jsr Sd651
|
|
jsr Sd7b0
|
|
lda Z00
|
|
asl
|
|
tax
|
|
jmp (Dd277,x)
|
|
|
|
Ld257: ldx #$ff
|
|
stx Z2f
|
|
jsr Sd7cc
|
|
jsr Sd80b
|
|
ldx Z03
|
|
stx Z2f
|
|
jsr Sf812
|
|
lda Z32
|
|
cmp #$01
|
|
beq Ld275
|
|
lda #$ff
|
|
sta Z2f
|
|
jsr Sd7b0
|
|
Ld275: clc
|
|
rts
|
|
|
|
|
|
Dd277: fdb cmd_status
|
|
fdb cmd_readblock
|
|
fdb cmd_writeblock
|
|
fdb cmd_format
|
|
fdb cmd_control
|
|
fdb cmd_init
|
|
fdb cmd_bad ; open
|
|
fdb cmd_bad ; close
|
|
fdb cmd_read
|
|
fdb cmd_write
|
|
fdb cmd_set_format_option
|
|
fdb cmd_get_format_option
|
|
fdb cmd_unknown_0c
|
|
fdb cmd_unknown_0d
|
|
fdb cmd_unknown_0e
|
|
|
|
|
|
cmd_bad:
|
|
lda #$01
|
|
Sd297: clc
|
|
sta Z56
|
|
stz Z01
|
|
rts
|
|
|
|
|
|
Ld29d: lda #$22
|
|
bra Sd297
|
|
|
|
Sd2a1: jsr zp_init
|
|
lda #$d2
|
|
sta Zbb
|
|
lda #$75
|
|
sta Zba
|
|
lda #$ff
|
|
sta Z2f
|
|
jsr Sd6e8
|
|
lda #$96
|
|
jsr Sf730
|
|
lda #$1f
|
|
jsr Sd651
|
|
jsr Sd7cc
|
|
jsr smartport_bus_reset
|
|
jsr Sd7b0
|
|
jsr Sf73c
|
|
jsr Sd7cc
|
|
jsr Sd362
|
|
stz Z32
|
|
ldx Z33
|
|
inx
|
|
lda #$00
|
|
jsr Sf8ba
|
|
beq Ld2e5
|
|
ldx Z33
|
|
inx
|
|
stx Z32
|
|
clc
|
|
adc Z33
|
|
sta Z33
|
|
Ld2e5: stz Z2f
|
|
jsr Sd30c
|
|
|
|
Sd2ea: ldx #$1f
|
|
lda #$40
|
|
Ld2ee: stz D0b00,x
|
|
stz D0b20,x
|
|
sta D0b40,x
|
|
cpx #$12
|
|
bne Ld2fd
|
|
lda #$80
|
|
Ld2fd: dex
|
|
bpl Ld2ee
|
|
rts
|
|
|
|
|
|
; initializes zero page addr $01 through $bb
|
|
zp_init:
|
|
ldx #$bb
|
|
Ld303: lda zp_init_tab,x
|
|
sta Z00,x
|
|
dex
|
|
bne Ld303
|
|
rts
|
|
|
|
|
|
; initializes zero page addr $bc through $bf
|
|
Sd30c: ldx #$bf
|
|
Ld30e: lda zp_init_tab,x
|
|
sta Z00,x
|
|
dex
|
|
cpx #$bb
|
|
bne Ld30e
|
|
rts
|
|
|
|
|
|
copy_rom_to_host_pseudorom:
|
|
ldy #$00 ; copy cn00 slot ROM image into slot pseudoROM
|
|
Ld31b: lda D8100,y
|
|
sta D7b00,y
|
|
iny
|
|
bne Ld31b
|
|
|
|
Ld324: lda D8200,y ; copy ca00-cfff shared ROM image
|
|
sta D0200,y
|
|
lda D8200+$100,y
|
|
sta D0200+$100,y
|
|
lda D8200+$0200,y
|
|
sta D7c00,y
|
|
lda D8200+$0300,y
|
|
sta D7c00+$0100,y
|
|
lda D8200+$0400,y
|
|
sta D7c00+$0200,y
|
|
lda D8200+$0500,y
|
|
sta D7c00+$0300,y
|
|
|
|
iny
|
|
bne Ld324
|
|
|
|
lda #$16
|
|
sta D7b0b+1 ; change target to HLCn23
|
|
stz D7b21+1 ; allow host to proceed
|
|
|
|
lda #$60
|
|
sta D0b80
|
|
sta D0ba0
|
|
sta D0bc0
|
|
sta D0be0
|
|
rts
|
|
|
|
|
|
Sd362: jsr Sd80b
|
|
ldx #$00
|
|
Ld367: stx Z13
|
|
stx Z2f
|
|
jsr Sd3a2
|
|
bcs Ld398
|
|
ora #$01
|
|
sta Z34,x
|
|
lda #$03
|
|
jsr Sd888
|
|
jsr Sd953
|
|
bvc Ld383
|
|
jsr Sd55a
|
|
bra Ld38e
|
|
Ld383: clc
|
|
jsr Sd4cc
|
|
bcc Ld38e
|
|
ldx Z13
|
|
jsr Sed05
|
|
Ld38e: jsr Sd80b
|
|
ldx Z13
|
|
inx
|
|
cpx #$02
|
|
bcc Ld367
|
|
Ld398: stx Z33
|
|
txa
|
|
beq Ld3a1
|
|
dex
|
|
jsr Sd835
|
|
Ld3a1: rts
|
|
|
|
Sd3a2: jsr Sd7b0
|
|
lda iwm_sel_drive_1,x
|
|
bit iwm_q6l
|
|
bit iwm_q7l
|
|
bit iwm_motor_on
|
|
lda #$01
|
|
jsr Sd888
|
|
lda #$00
|
|
jsr Sd892
|
|
bcc Ld3e0
|
|
lda #$00
|
|
jsr Sd888
|
|
lda #$00
|
|
jsr Sd892
|
|
bcs Ld3e0
|
|
lda #$01
|
|
jsr Sd888
|
|
lda #$00
|
|
jsr Sd892
|
|
bcc Ld3e0
|
|
lda #$05
|
|
jsr Sd892
|
|
bcc Ld3e1
|
|
lda #$02
|
|
clc
|
|
rts
|
|
|
|
Ld3e0: sec
|
|
Ld3e1: rts
|
|
|
|
Sd3e2: stx Z13
|
|
lda #$04
|
|
sta Z58
|
|
jsr Sd8c1
|
|
Ld3eb: stz Z16
|
|
jsr Se500
|
|
bcc Ld40c
|
|
lda Z57
|
|
bit #$20
|
|
bne Ld400
|
|
bit #$04
|
|
beq Ld406
|
|
lda Z2b
|
|
sta Z14
|
|
Ld400: dec Z58
|
|
bne Ld3eb
|
|
bra Ld446
|
|
Ld406: bit #$01
|
|
bne Ld446
|
|
sec
|
|
rts
|
|
|
|
Ld40c: ldx Z13
|
|
jsr Sd94d
|
|
ldy #$04
|
|
lda Z11,x
|
|
and #$1f
|
|
cmp #$02
|
|
bne Ld41d
|
|
ldy #$06
|
|
Ld41d: bit Z0f,x
|
|
bmi Ld429
|
|
lda Z46,x
|
|
ora #$10
|
|
sta Z46,x
|
|
ldy #$02
|
|
Ld429: lda Def63,y
|
|
sta Z42,x
|
|
lda Def64,y
|
|
sta Z44,x
|
|
lda Z46,x
|
|
and #$bf
|
|
sta Z46,x
|
|
lda Z3a,x
|
|
and #$94
|
|
ora Dd4be,y
|
|
sta Z3a,x
|
|
sty Z40,x
|
|
clc
|
|
rts
|
|
|
|
Ld446: ldx Z13
|
|
lda #$02
|
|
bit Z34,x
|
|
beq Ld48e
|
|
lda #$06
|
|
jsr Sd888
|
|
lda #$0b
|
|
jsr Sf730
|
|
jsr Sd7e8
|
|
lda #$07
|
|
jsr Sd892
|
|
bcc Ld446
|
|
jsr Sd8c1
|
|
stz Z14
|
|
lda #$04
|
|
sta Z58
|
|
Ld46b: stz Z16
|
|
jsr Se500
|
|
bcc Ld49b
|
|
lda Z57
|
|
bit #$20
|
|
bne Ld480
|
|
bit #$04
|
|
beq Ld480
|
|
lda Z2b
|
|
sta Z14
|
|
Ld480: dec Z58
|
|
bne Ld46b
|
|
lda #$07
|
|
jsr Sd888
|
|
lda #$0b
|
|
jsr Sf730
|
|
Ld48e: jsr Sd80b
|
|
ldx Z13
|
|
lda Z3a,x
|
|
and #$9f
|
|
sta Z3a,x
|
|
sec
|
|
rts
|
|
|
|
Ld49b: jsr Sd76e
|
|
ldx Z13
|
|
jsr Sd94d
|
|
ldy #$08
|
|
lda Def63,y
|
|
sta Z42,x
|
|
lda Def64,y
|
|
sta Z44,x
|
|
lda Z46,x
|
|
and #$bf
|
|
sta Z46,x
|
|
lda Dd4be,y
|
|
sta Z3a,x
|
|
sty Z40,x
|
|
clc
|
|
rts
|
|
|
|
Dd4be: fcb $00,$00,$11,$88,$11,$88,$11,$88
|
|
fcb $32,$09,$52,$12,$52,$12
|
|
|
|
Sd4cc: php
|
|
pha
|
|
stx Z13
|
|
jsr Sd55e
|
|
lda #$02
|
|
jsr Sd892
|
|
bcc Ld4df
|
|
pla
|
|
lda #$2f
|
|
bra Ld557
|
|
Ld4df: lda #$02
|
|
bit Z34,x
|
|
beq Ld545
|
|
lda #$0f
|
|
jsr Sd892
|
|
bcs Ld545
|
|
lda #$80
|
|
sta Z0f,x
|
|
lda #$54
|
|
ora Z3a,x
|
|
sta Z3a,x
|
|
lda Z46,x
|
|
and #$bf
|
|
sta Z46,x
|
|
jsr Sd60b
|
|
jsr Sd7e8
|
|
jsr Sd576
|
|
stz Z16
|
|
stz Z14
|
|
jsr Sd8c1
|
|
lda #$04
|
|
sta Z58
|
|
Ld510: stz Z16
|
|
jsr Se500
|
|
bcc Ld52b
|
|
lda Z57
|
|
bit #$20
|
|
bne Ld525
|
|
bit #$04
|
|
beq Ld525
|
|
lda Z2b
|
|
sta Z14
|
|
Ld525: dec Z58
|
|
bne Ld510
|
|
bra Ld554
|
|
Ld52b: jsr Sd76e
|
|
ldx Z13
|
|
jsr Sd94d
|
|
ldy #$0a
|
|
lda Def63,y
|
|
sta Z42,x
|
|
lda Def64,y
|
|
sta Z44,x
|
|
sty Z40,x
|
|
clc
|
|
Ld542: pla
|
|
plp
|
|
rts
|
|
|
|
Ld545: jsr Sd60b
|
|
jsr Sd576
|
|
stz Z16
|
|
ldx Z13
|
|
jsr Sd3e2
|
|
bcc Ld542
|
|
Ld554: pla
|
|
lda #$27
|
|
Ld557: plp
|
|
sec
|
|
rts
|
|
|
|
Sd55a: lda #$40
|
|
sta Z46,x
|
|
|
|
Sd55e: stz Z42,x
|
|
stz Z44,x
|
|
lda Z3a,x
|
|
and #$80
|
|
sta Z3a,x
|
|
lda #$ff
|
|
sta Z0d,x
|
|
stz Z40,x
|
|
phx
|
|
phy
|
|
jsr Sda30
|
|
ply
|
|
plx
|
|
rts
|
|
|
|
Sd576: lda #$08
|
|
jsr Sd892
|
|
bcc Ld59b
|
|
jsr Sd59c
|
|
lda #$08
|
|
jsr Sd888
|
|
ldx Z2f
|
|
lda #$01
|
|
bit Z46,x
|
|
bne Ld596
|
|
ora Z46,x
|
|
sta Z46,x
|
|
lda #$c8
|
|
jsr Sf730
|
|
Ld596: lda #$64
|
|
jsr Sf735
|
|
Ld59b: rts
|
|
|
|
Sd59c: ldx Z2f
|
|
lda #$02
|
|
bit Z34,x
|
|
beq Ld5c4
|
|
ldy #$06
|
|
lda #$60
|
|
bit Z3a,x
|
|
bne Ld5ad
|
|
iny
|
|
Ld5ad: lda #$07
|
|
jsr Sd892
|
|
bcs Ld5ba
|
|
cpy #$07
|
|
beq Ld5c4
|
|
bra Ld5be
|
|
Ld5ba: cpy #$06
|
|
beq Ld5c4
|
|
Ld5be: tya
|
|
jsr Sd888
|
|
lda #$07
|
|
Ld5c4: rts
|
|
|
|
Sd5c5: lda #$04
|
|
jsr Sd888
|
|
lda #$04
|
|
jsr Sd8d1
|
|
dex
|
|
bne Sd5c5
|
|
ldx #$3e
|
|
Ld5d4: dex
|
|
bne Ld5d4
|
|
rts
|
|
|
|
|
|
; seek
|
|
Sd5d8: jmp Z7b ; hook to immediately following Ld5db
|
|
|
|
Ld5db: ldx Z2f
|
|
lda Z0d,x
|
|
bpl Ld5e6
|
|
jsr Sd60b
|
|
bcs Ld60a
|
|
Ld5e6: ldx Z2f
|
|
lda Z0d,x
|
|
sec
|
|
sbc Z14
|
|
beq Ld609
|
|
ldy #$01
|
|
bcs Ld5f9
|
|
ldy #$00
|
|
eor #$ff
|
|
adc #$01
|
|
Ld5f9: tax
|
|
tya
|
|
jsr Sd888
|
|
jsr Sd5c5
|
|
ldx Z2f
|
|
lda Z14
|
|
sta Z0d,x
|
|
lda #$01
|
|
Ld609: clc
|
|
Ld60a: rts
|
|
|
|
Sd60b: stz Z57
|
|
lda #$01
|
|
jsr Sd888
|
|
lda #$0a
|
|
jsr Sd892
|
|
bcc Ld63d
|
|
ldy #$05
|
|
Ld61b: ldx #$10
|
|
jsr Sd5c5
|
|
ldx #$10
|
|
Ld622: lda #$07
|
|
jsr Sf735
|
|
lda #$0a
|
|
jsr Sd892
|
|
bcc Ld63d
|
|
dex
|
|
bne Ld622
|
|
dey
|
|
bne Ld61b
|
|
lda #$02
|
|
tsb Z57
|
|
lda #$ff
|
|
sec
|
|
bra Ld640
|
|
Ld63d: lda #$00
|
|
clc
|
|
Ld640: ldx Z2f
|
|
sta Z0d,x
|
|
rts
|
|
|
|
Sd645: lda Z16
|
|
beq Ld64d
|
|
sta D0a41
|
|
rts
|
|
|
|
Ld64d: sta D0a40
|
|
rts
|
|
|
|
Sd651: bit iwm_q7l
|
|
tay
|
|
bit iwm_motor_off
|
|
bit iwm_q6h
|
|
Ld65b: lda iwm_q7l
|
|
and #$20
|
|
bne Ld65b
|
|
bra Ld667
|
|
Ld664: sty iwm_q7h
|
|
Ld667: tya
|
|
eor iwm_q7l
|
|
and #$1f
|
|
bne Ld664
|
|
lda #$40
|
|
trb Zb4
|
|
lda iwm_q6l
|
|
rts
|
|
|
|
|
|
Sd677: lda Z14
|
|
cmp #$50
|
|
bcc Ld67f
|
|
lda #$00
|
|
Ld67f: ldx #$fe
|
|
Ld681: inx
|
|
inx
|
|
cmp Dd6be,x
|
|
bcs Ld681
|
|
lda Dd6be+1,x
|
|
tax
|
|
|
|
ldy #$05 ; max times to retry writing ISM params
|
|
|
|
; verify ISM parameters
|
|
Ld68e: lda #$18 ; clear write and action bits, reset param ptr
|
|
sta ism_w_zeros
|
|
phx ; save table start index in case we rewrite it
|
|
Ld694: dex
|
|
lda Dd6c6,x
|
|
beq Ld6a1
|
|
cmp ism_r_param
|
|
bne Ld6a4
|
|
bra Ld694
|
|
Ld6a1: plx ; pop table start index, no longer needed
|
|
clc
|
|
rts
|
|
|
|
; write ISM parameters
|
|
Ld6a4: lda #$18 ; clear write and action bits, reset param ptr
|
|
sta ism_w_zeros
|
|
plx ; pop and re-push table start index
|
|
phx
|
|
Ld6ab: pha
|
|
pla
|
|
dex
|
|
lda Dd6c6,x
|
|
beq Ld6b8
|
|
sta ism_w_param
|
|
bra Ld6ab
|
|
Ld6b8: plx ; pop table start index, no longer needed
|
|
dey ; any retries left?
|
|
; (stupid, check should be after verify!)
|
|
bne Ld68e ; yes, verify ISM parameters
|
|
sec ; no, fail
|
|
rts
|
|
|
|
|
|
Dd6be: fcb $28,Dd6c6_end-Dd6c6
|
|
fcb $50,Dd6d7_end-Dd6c6
|
|
fcb $50,$00
|
|
fcb $50,$00
|
|
|
|
|
|
; ISM parameters (720K?)
|
|
; See _SWIM Chip User's Reference_
|
|
Dd6c6: fcb $00 ; end of table
|
|
fcb $3b ; WR: time 1
|
|
fcb $57 ; WR: late | normal
|
|
fcb $1b ; WR: time 0
|
|
fcb $97 ; WR: late | normal
|
|
fcb $19 ; RD: LLS
|
|
fcb $19 ; RD: LLL
|
|
fcb $2f ; RD: LSS
|
|
fcb $2f ; RD: LSL
|
|
fcb $1b ; RD: CSLS
|
|
fcb $1b ; RD: RPB
|
|
fcb $18 ; RD: SLS
|
|
fcb $18 ; RD: SLL
|
|
fcb $2e ; RD: SSS
|
|
fcb $2e ; RD: SSL
|
|
fcb 65 ; RD: correction multiplier
|
|
fcb $18 ; RD: min cell time
|
|
Dd6c6_end:
|
|
|
|
; ISM parameters (1440K?)
|
|
Dd6d7: fcb $00
|
|
fcb $3b,$57,$1b,$97,$19,$19,$2f,$2f
|
|
fcb $1b,$1b,$18,$18,$2e,$2e,$41,$18
|
|
Dd6d7_end:
|
|
|
|
|
|
Sd6e8: stz Zb4
|
|
stz Z6a
|
|
jsr Sd714
|
|
lda #$00
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
lda iwm_q6h
|
|
lda #$38
|
|
sta iwm_ph3_off
|
|
lda #$00
|
|
sta iwm_ph1_off
|
|
lda iwm_q7l
|
|
lda iwm_q6l
|
|
ora #$f0
|
|
sta iwm_ph2_off
|
|
jsr Sd677
|
|
jmp Sd76e
|
|
|
|
Sd714: phx
|
|
|
|
bit Zb4
|
|
bvs Ld743
|
|
|
|
bit iwm_q7l
|
|
bit iwm_q6h
|
|
lda iwm_q7l
|
|
pha
|
|
bit iwm_motor_off
|
|
and #$1f
|
|
ora #$40
|
|
sta iwm_q7h
|
|
eor #$40
|
|
sta iwm_q7h
|
|
eor #$40
|
|
sta iwm_q7h
|
|
sta iwm_q7h
|
|
lda #$40
|
|
tsb Zb4
|
|
pla
|
|
bit #$20
|
|
beq Ld767
|
|
Ld743: lda iwm_q7l
|
|
and #$06
|
|
cmp #$06
|
|
bne Ld751
|
|
lda #$06
|
|
sta iwm_ph3_off
|
|
|
|
Ld751: ldx Z2f ; drive number
|
|
cpx #$02 ; out of range?
|
|
bcs Ld767
|
|
lda #$06 ; deselect both drives
|
|
sta ism_w_zeros
|
|
lda Dd76c,x
|
|
sta ism_w_ones
|
|
lda #$80 ; turn on motor
|
|
sta ism_w_ones
|
|
Ld767: plx
|
|
lda ism_r_status
|
|
rts
|
|
|
|
Dd76c: fcb $02,$04 ; drive enable table for ISM mode
|
|
|
|
|
|
Sd76e: lda ism_r_status ; save motor on state
|
|
pha
|
|
|
|
lda #$9e
|
|
sta ism_w_zeros
|
|
|
|
lda #$40 ; switch to IWM mode
|
|
sta ism_w_zeros
|
|
|
|
pha ; delay
|
|
pla
|
|
|
|
bit iwm_q7l
|
|
bit iwm_q6l
|
|
|
|
lda #$40
|
|
trb Zb4
|
|
|
|
pla ; was motor on?
|
|
bmi Ld797
|
|
|
|
phx
|
|
ldx Z2f
|
|
cpx #$02
|
|
bcs Ld795
|
|
bit iwm_sel_drive_1,x
|
|
Ld795: plx
|
|
rts
|
|
|
|
Ld797: phx
|
|
ldx #$00
|
|
bit #$04
|
|
beq Ld7a0
|
|
ldx #$01
|
|
Ld7a0: bit iwm_sel_drive_1,x
|
|
plx
|
|
bit iwm_motor_on
|
|
rts
|
|
|
|
|
|
Sd7a8: bit Zb4
|
|
bvc Ld7af
|
|
|
|
jsr Sd76e
|
|
Ld7af: rts
|
|
|
|
|
|
Sd7b0: pha
|
|
lda #$02
|
|
bit Z6a
|
|
bne Ld7ca
|
|
jsr Sd714
|
|
lda #$02
|
|
ora iwm_q6h
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
cmp iwm_q6h
|
|
jsr Sd76e
|
|
Ld7ca: pla
|
|
rts
|
|
|
|
|
|
Sd7cc: pha
|
|
lda #$02
|
|
bit Z6a
|
|
beq Ld7e6
|
|
jsr Sd714
|
|
lda #$fd
|
|
and iwm_q6h
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
cmp iwm_q6h
|
|
jsr Sd76e
|
|
Ld7e6: pla
|
|
rts
|
|
|
|
Sd7e8: lda #$80
|
|
tsb Zb4
|
|
lda #$20
|
|
bit Z6a
|
|
bne Ld80a
|
|
jsr Sd714
|
|
lda #$20
|
|
sta iwm_ph3_on
|
|
ora iwm_q6h
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
lda #$40
|
|
sta iwm_ph1_off
|
|
jsr Sd76e
|
|
Ld80a: rts
|
|
|
|
Sd80b: lda #$80
|
|
trb Zb4
|
|
lda #$20
|
|
bit Z6a
|
|
beq Ld82f
|
|
jsr Sd714
|
|
lda #$20
|
|
sta iwm_ph3_off
|
|
lda iwm_q6h
|
|
and #$df
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
lda #$00
|
|
sta iwm_ph1_off
|
|
jsr Sd76e
|
|
Ld82f: lda #$1f
|
|
jsr Sd651
|
|
rts
|
|
|
|
Sd835: cpx #$02
|
|
bcs Ld85d
|
|
stx Z2f
|
|
jsr Sd714
|
|
lda Dd76c,x
|
|
ora #$80
|
|
sta iwm_ph3_on
|
|
lda #$32
|
|
Ld848: dec
|
|
bne Ld848
|
|
lda iwm_q6h
|
|
and #$fd
|
|
sta iwm_ph2_on
|
|
sta Z6a
|
|
lda #$19
|
|
Ld857: dec
|
|
bpl Ld857
|
|
jsr Sd76e
|
|
Ld85d: rts
|
|
|
|
Sd85e: bit iwm_ph0_off
|
|
bit iwm_ph1_on
|
|
bit iwm_ph3_off
|
|
bit iwm_ph2_off
|
|
lsr
|
|
bcc Ld870
|
|
bit iwm_ph2_on
|
|
Ld870: lsr
|
|
bcc Ld878
|
|
bit D0a41
|
|
bra Ld87b
|
|
Ld878: bit D0a40
|
|
Ld87b: lsr
|
|
bcc Ld881
|
|
bit iwm_ph0_on
|
|
Ld881: lsr
|
|
bcs Ld887
|
|
bit iwm_ph1_off
|
|
Ld887: rts
|
|
|
|
Sd888: jsr Sd85e
|
|
bit iwm_ph3_on
|
|
bit iwm_ph3_off
|
|
rts
|
|
|
|
Sd892: jsr Sd85e
|
|
bit iwm_q6h
|
|
lda iwm_q7l
|
|
and #$80
|
|
asl
|
|
rts
|
|
|
|
Sd89f: lda #$0b
|
|
jsr Sd892
|
|
bcc Ld8c0
|
|
ldx #$03
|
|
ldy #$e8
|
|
Ld8aa: lda #$92
|
|
sta Z30
|
|
Ld8ae: bit iwm_q7l
|
|
bpl Ld8bf
|
|
dec Z30
|
|
bne Ld8ae
|
|
dey
|
|
bne Ld8aa
|
|
dex
|
|
bne Ld8aa
|
|
sec
|
|
rts
|
|
|
|
Ld8bf: clc
|
|
Ld8c0: rts
|
|
|
|
Sd8c1: lda #$0b
|
|
jsr Sd892
|
|
bcc Ld8d0
|
|
Ld8c8: lda iwm_q7l
|
|
and #$80
|
|
bmi Ld8c8
|
|
asl
|
|
Ld8d0: rts
|
|
|
|
Sd8d1: jsr Sd892
|
|
Ld8d4: lda iwm_q7l
|
|
and #$80
|
|
bpl Ld8d4
|
|
asl
|
|
rts
|
|
|
|
Sd8dd: ldx #$00
|
|
lda Z34,x
|
|
bmi Ld904
|
|
beq Ld904
|
|
jsr Sd7b0
|
|
Ld8e8: ldy #$0a
|
|
Ld8ea: dey
|
|
bne Ld8ea
|
|
jsr Sd94d
|
|
bvc Ld8f5
|
|
jsr Sd55a
|
|
Ld8f5: inx
|
|
cpx #$01
|
|
bne Ld900
|
|
lda Z34,x
|
|
bmi Ld900
|
|
bne Ld8e8
|
|
Ld900: dex
|
|
jsr Sd835
|
|
Ld904: rts
|
|
|
|
Sd905: jsr Sd94d
|
|
bvc Ld91b
|
|
php
|
|
jsr Sd55a
|
|
plp
|
|
bpl Ld916
|
|
jsr Sd93d
|
|
bcs Ld939
|
|
Ld916: lda #$2f
|
|
sec
|
|
bra Ld939
|
|
Ld91b: bmi Ld928
|
|
lda Z40,x
|
|
bne Sd930
|
|
jsr Sd930
|
|
bit Dd93c
|
|
rts
|
|
|
|
Ld928: jsr Sd55e
|
|
jsr Sd93d
|
|
bcs Ld939
|
|
|
|
Sd930: lda #$20
|
|
and Z46,x
|
|
beq Ld938
|
|
lda #$2b
|
|
Ld938: clc
|
|
Ld939: bit Z46,x
|
|
rts
|
|
|
|
Dd93c: fcb $a0
|
|
|
|
Sd93d: lda #$03
|
|
jsr Sd888
|
|
lda #$2e
|
|
sec
|
|
bit Z02
|
|
bvs Ld94c
|
|
lda #$00
|
|
clc
|
|
Ld94c: rts
|
|
|
|
Sd94d: lda iwm_sel_drive_1,x
|
|
bit iwm_motor_on
|
|
|
|
Sd953: lda Z46,x
|
|
sta Z3f
|
|
and #$1f
|
|
ora #$20
|
|
sta Z46,x
|
|
ldy #$03
|
|
Ld95f: lda Dd975,y
|
|
jsr Sd892
|
|
bcc Ld96e
|
|
lda Dd978,y
|
|
eor Z46,x
|
|
sta Z46,x
|
|
Ld96e: dey
|
|
bne Ld95f
|
|
lda #$20
|
|
bit Z46,x
|
|
Dd975: rts
|
|
|
|
fcb $06,$02
|
|
Dd978: fcb $0c,$20,$40,$80
|
|
|
|
Sd97c: lda #$80
|
|
ldx #$12
|
|
Ld980: bit D0b3f,x
|
|
bvs Ld988
|
|
sta D0b3f,x
|
|
Ld988: dex
|
|
bne Ld980
|
|
rts
|
|
|
|
lda D0b3f,y
|
|
bit #$40
|
|
bne Ld998
|
|
lda #$80
|
|
sta D0b3f,y
|
|
Ld998: lda Dd9d9,y
|
|
sty Z2e
|
|
sta Z2d
|
|
rts
|
|
|
|
Sd9a0: lda Dd9ee,x
|
|
tax
|
|
lda #$8f
|
|
sta D0b3f,x
|
|
lda Dd9d9,x
|
|
sta Z2d
|
|
stx Z2e
|
|
|
|
Sd9b0: tax
|
|
lda Dd9be,x
|
|
sta Zb0
|
|
dec
|
|
sta Zac
|
|
stz Zab
|
|
stz Zaf
|
|
rts
|
|
|
|
Dd9be: fcb $01,$03,$05,$07,$09,$0b,$0d,$0f
|
|
fcb $11,$13,$15,$17,$19,$1b,$1d,$1f
|
|
fcb $21,$23,$25,$27,$29,$2b,$2d,$2f
|
|
fcb $31,$33,$35
|
|
|
|
Dd9d9: fcb $37,$08,$09,$0a,$0b,$0c,$0d,$0e
|
|
fcb $0f,$10,$11,$12,$13,$14,$15,$16
|
|
fcb $17,$18,$19,$1a,$1b
|
|
|
|
Dd9ee: fcb $01,$02,$03,$04,$05,$06,$07,$08
|
|
fcb $09,$0a,$0b,$0c,$0d,$0e,$0f,$10
|
|
fcb $11,$12
|
|
|
|
Sda00: ldy Z2e
|
|
beq Lda1b
|
|
sta D0b1f,y
|
|
lda Z16
|
|
cmp #$01
|
|
lda Z14
|
|
rol
|
|
sta D0aff,y
|
|
lda Z2f
|
|
cmp Z33
|
|
bcs Lda1b
|
|
sta D0b3f,y
|
|
rts
|
|
|
|
Lda1b: lda #$8e
|
|
sta D0b3f,y
|
|
rts
|
|
|
|
Sda21: ldx Z2f
|
|
lda Z05
|
|
cmp Z42,x
|
|
lda Z06
|
|
sbc Z44,x
|
|
bcc Lda2f
|
|
lda #$2d
|
|
Lda2f: rts
|
|
|
|
Sda30: stx Z13
|
|
ldy #$12
|
|
Lda34: lda D0b3f,y
|
|
cmp #$20
|
|
bcs Lda44
|
|
cmp Z13
|
|
bne Lda44
|
|
lda #$80
|
|
sta D0b3f,y
|
|
Lda44: dey
|
|
bne Lda34
|
|
rts
|
|
|
|
Sda48: ldy Z15
|
|
lda Dd9ee,y
|
|
tay
|
|
jsr Sda5a
|
|
bne Lda58
|
|
lda Dd9d9,y
|
|
sec
|
|
rts
|
|
|
|
Lda58: clc
|
|
rts
|
|
|
|
Sda5a: lda D0b3f,y
|
|
cmp Z2f
|
|
bne Lda72
|
|
lda Z16
|
|
cmp #$01
|
|
lda Z14
|
|
rol
|
|
cmp D0aff,y
|
|
bne Lda72
|
|
lda Z15
|
|
cmp D0b1f,y
|
|
Lda72: rts
|
|
|
|
Sda73: ldx Z2f
|
|
lda Z40,x
|
|
tax
|
|
jmp (Dda7b,x)
|
|
|
|
Dda7b: fdb Lda89
|
|
fdb Lda93
|
|
fdb Ldb22
|
|
fdb Ldb22
|
|
fdb Ldc47
|
|
fdb Ldbae
|
|
fdb Ldbae
|
|
|
|
Lda89: stz Z16
|
|
stz Z14
|
|
stz Z15
|
|
lda #$3d
|
|
sec
|
|
rts
|
|
|
|
Lda93: lda Z05
|
|
sta Z16
|
|
and #$0f
|
|
sta Z15
|
|
lda Z06
|
|
rol Z16
|
|
rol
|
|
rol Z16
|
|
rol
|
|
rol Z16
|
|
rol
|
|
rol Z16
|
|
rol
|
|
tax
|
|
lda Ddabe,x
|
|
sta Z1b
|
|
lda Ddaf0,x
|
|
and #$e0
|
|
ora Z15
|
|
tay
|
|
lda Ddaf0,x
|
|
jsr Sdd13
|
|
rts
|
|
|
|
Ddabe: fcb $00,$02,$04,$08,$0a,$0c,$10,$12
|
|
fcb $14,$18,$1a,$1c,$20,$22,$24,$28
|
|
fcb $2a,$2e,$30,$34,$36,$3a,$3c,$40
|
|
fcb $42,$46,$48,$4c,$50,$52,$56,$58
|
|
fcb $5c,$60,$62,$66,$6a,$6e,$70,$74
|
|
fcb $78,$7c,$80,$84,$88,$8c,$90,$94
|
|
fcb $98,$9c
|
|
|
|
Ddaf0: fcb $00,$04,$08,$00,$04,$08,$00,$04
|
|
fcb $08,$00,$04,$08,$20,$25,$2a,$24
|
|
fcb $29,$23,$28,$22,$27,$21,$26,$40
|
|
fcb $46,$42,$48,$44,$40,$46,$42,$48
|
|
fcb $44,$60,$67,$65,$63,$61,$68,$66
|
|
fcb $64,$62,$80,$80,$80,$80,$80,$80
|
|
fcb $80,$80
|
|
|
|
Ldb22: lda Z05
|
|
sta Z16
|
|
and #$1f
|
|
sta Z15
|
|
lda Z06
|
|
rol Z16
|
|
rol
|
|
rol Z16
|
|
rol
|
|
rol Z16
|
|
rol
|
|
tax
|
|
lda Ddb4a,x
|
|
sta Z1b
|
|
lda Ddb7c,x
|
|
and #$e0
|
|
ora Z15
|
|
tay
|
|
lda Ddb7c,x
|
|
jsr Sdcd4
|
|
rts
|
|
|
|
Ddb4a: fcb $00,$02,$05,$08,$0a,$0d,$10,$12
|
|
fcb $15,$18,$1a,$1d,$20,$22,$25,$28
|
|
fcb $2b,$2e,$31,$34,$37,$3a,$3d,$40
|
|
fcb $43,$46,$49,$4c,$50,$53,$56,$59
|
|
fcb $5c,$60,$63,$67,$6a,$6e,$71,$75
|
|
fcb $78,$7c,$80,$84,$88,$8c,$90,$94
|
|
fcb $98,$9c
|
|
|
|
Ddb7c: fcb $00,$08,$04,$00,$08,$04,$00,$08
|
|
fcb $04,$00,$08,$04,$20,$2a,$29,$28
|
|
fcb $27,$26,$25,$24,$23,$22,$21,$40
|
|
fcb $42,$44,$46,$48,$40,$42,$44,$46
|
|
fcb $48,$60,$65,$61,$66,$62,$67,$63
|
|
fcb $68,$64,$80,$80,$80,$80,$80,$80
|
|
fcb $80,$80
|
|
|
|
Ldbae: ldx #$fe
|
|
Ldbb0: inx
|
|
inx
|
|
lda Ddc03,x
|
|
cmp Z05
|
|
lda Ddc03+1,x
|
|
sbc Z06
|
|
bcc Ldbb0
|
|
|
|
lda Z05
|
|
sbc Ddc01,x
|
|
sta Z23
|
|
lda Z06
|
|
sbc Ddc01+1,x
|
|
sta Z24
|
|
|
|
lda Ddc25,x
|
|
tax
|
|
lda Z23
|
|
bpl Ldbde
|
|
sec
|
|
sbc #$7e
|
|
tay
|
|
txa
|
|
clc
|
|
adc #$07
|
|
tax
|
|
tya
|
|
Ldbde: cmp #$12
|
|
bcc Ldbed
|
|
Ldbe2: sec
|
|
sbc #$12
|
|
bmi Ldbea
|
|
inx
|
|
bra Ldbe2
|
|
Ldbea: clc
|
|
adc #$12
|
|
Ldbed: sta Z15
|
|
stx Z1b
|
|
txa
|
|
lsr
|
|
sta Z14
|
|
lda #$00
|
|
bcc Ldbfb
|
|
lda #$20
|
|
Ldbfb: sta Z16
|
|
lda #$12
|
|
clc
|
|
rts
|
|
|
|
Ddc01: fdb $0000
|
|
|
|
; multiples of 180
|
|
Ddc03:
|
|
cnt set 1
|
|
while cnt <= 16
|
|
fdb cnt*180
|
|
cnt set cnt+1
|
|
endm
|
|
fdb $ffff
|
|
|
|
; multiples of 10
|
|
Ddc25:
|
|
cnt set 0
|
|
while cnt <= 15
|
|
fdb cnt*10
|
|
cnt set cnt+1
|
|
endm
|
|
fdb $ffff
|
|
|
|
Ldc47: ldx #$fe
|
|
Ldc49: inx
|
|
inx
|
|
lda Ddc90,x
|
|
cmp Z05
|
|
lda Ddc90+1,x
|
|
sbc Z06
|
|
bcc Ldc49
|
|
lda Z05
|
|
sbc Ddc8e,x
|
|
sta Z23
|
|
lda Z06
|
|
sbc Ddc8e+1,x
|
|
sta Z24
|
|
lda Ddcb2,x
|
|
tax
|
|
lda Z23
|
|
cmp #$09
|
|
bcc Ldc7a
|
|
Ldc6f: sec
|
|
sbc #$09
|
|
bmi Ldc77
|
|
inx
|
|
bra Ldc6f
|
|
Ldc77: clc
|
|
adc #$09
|
|
Ldc7a: sta Z15
|
|
stx Z1b
|
|
txa
|
|
lsr
|
|
sta Z14
|
|
lda #$00
|
|
bcc Ldc88
|
|
lda #$20
|
|
Ldc88: sta Z16
|
|
lda #$09
|
|
clc
|
|
rts
|
|
|
|
Ddc8e: fdb $0000
|
|
|
|
; multiples of 90
|
|
Ddc90:
|
|
cnt set 1
|
|
while cnt <= 16
|
|
fdb cnt*90
|
|
cnt set cnt+1
|
|
endm
|
|
fdb $ffff
|
|
|
|
; multiples of 10
|
|
; (could have used the identical table at Ddc25)
|
|
Ddcb2:
|
|
cnt set 0
|
|
while cnt <= 15
|
|
fdb cnt*10
|
|
cnt set cnt+1
|
|
endm
|
|
fdb $ffff
|
|
|
|
Sdcd4: and #$1f
|
|
clc
|
|
sta Z15
|
|
lda Ddd4f,y
|
|
and #$1f
|
|
adc Z15
|
|
tax
|
|
lda Ddd4f,y
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
clc
|
|
adc Z1b
|
|
sta Z1b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tay
|
|
txa
|
|
cmp Dde35,y
|
|
bcc Ldcff
|
|
sbc Dde35,y
|
|
inc Z1b
|
|
Ldcff: sta Z15
|
|
lda Z1b
|
|
lsr
|
|
sta Z14
|
|
lda #$00
|
|
bcc Ldd0c
|
|
lda #$20
|
|
Ldd0c: sta Z16
|
|
lda Dde35,y
|
|
clc
|
|
rts
|
|
|
|
Sdd13: and #$1f
|
|
clc
|
|
sta Z15
|
|
lda Ddd4f,y
|
|
and #$1f
|
|
adc Z15
|
|
tax
|
|
lda Ddd4f,y
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
and #$0e
|
|
clc
|
|
adc Z1b
|
|
sta Z1b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tay
|
|
txa
|
|
cmp Dde35,y
|
|
bcc Ldd41
|
|
sbc Dde35,y
|
|
inc Z1b
|
|
inc Z1b
|
|
Ldd41: sta Z15
|
|
lda Z1b
|
|
lsr
|
|
sta Z14
|
|
stz Z16
|
|
lda Dde35,y
|
|
clc
|
|
rts
|
|
|
|
Ddd4f: fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $08,$09,$0a,$0b,$20,$21,$22,$23
|
|
fcb $24,$25,$26,$27,$28,$29,$2a,$2b
|
|
fcb $40,$41,$42,$43,$44,$45,$46,$47
|
|
fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $08,$09,$0a,$20,$21,$22,$23,$24
|
|
fcb $25,$26,$27,$28,$29,$2a,$40,$41
|
|
fcb $42,$43,$44,$45,$46,$47,$48,$49
|
|
fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $08,$09,$20,$21,$22,$23,$24,$25
|
|
fcb $26,$27,$28,$29,$40,$41,$42,$43
|
|
fcb $44,$45,$46,$47,$48,$49,$60,$61
|
|
fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $08,$20,$21,$22,$23,$24,$25,$26
|
|
fcb $27,$28,$40,$41,$42,$43,$44,$45
|
|
fcb $46,$47,$48,$60,$61,$62,$63,$64
|
|
fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $20,$21,$22,$23,$24,$25,$26,$27
|
|
fcb $40,$41,$42,$43,$44,$45,$46,$47
|
|
fcb $60,$61,$62,$63,$64,$65,$66,$67
|
|
fcb $00,$01,$02,$03,$04,$05,$06,$07
|
|
fcb $08,$09,$0a,$0b,$0c,$0d,$0e,$0f
|
|
fcb $10,$11,$00,$01,$02,$03,$04,$05
|
|
fcb $06,$07,$08,$09,$0a,$0b,$0c,$0d
|
|
fcb $0e,$0f,$10,$11,$00,$01,$02,$03
|
|
fcb $04,$05,$06,$07,$08,$09,$0a,$0b
|
|
fcb $0c,$0d,$0e,$0f,$10,$11,$00,$01
|
|
fcb $02,$03,$04,$05,$06,$07,$08,$09
|
|
fcb $12,$11,$10,$0f,$0e,$0d
|
|
|
|
Dde35: fcb $0c,$0b,$0a,$09,$08
|
|
|
|
Sde3a: inc Z59
|
|
bne Lde40
|
|
inc Z5a
|
|
Lde40: dec Z58
|
|
bpl Lde4a
|
|
lda #$27
|
|
sta Z56
|
|
sec
|
|
rts
|
|
|
|
Lde4a: lda Z57
|
|
stz Z57
|
|
clc
|
|
rts
|
|
|
|
cmd_read:
|
|
cmd_write:
|
|
lda #$11
|
|
ldx Z2f
|
|
bpl Lde59
|
|
Lde56: jmp Sd297
|
|
|
|
Lde59: jsr Sd905
|
|
bpl Lde61
|
|
jsr Sd4cc
|
|
Lde61: bcs Lde56
|
|
lda Z40,y
|
|
cmp #$04
|
|
beq Lde73
|
|
cmp #$02
|
|
beq Lde73
|
|
lda #$27
|
|
jmp Sd297
|
|
|
|
Lde73: lda Z0c
|
|
cmp #$02
|
|
beq Lde7c
|
|
Lde79: jmp Ld29d
|
|
|
|
Lde7c: lda Z0b
|
|
cmp #$0c
|
|
bne Lde79
|
|
lda Z07
|
|
sta Z05
|
|
lda Z08
|
|
sta Z06
|
|
stz Z07
|
|
stz Z08
|
|
dec Z61
|
|
lda #$06
|
|
sta Z2d
|
|
lda Z00
|
|
cmp #$01
|
|
beq Lde9d
|
|
jmp cmd_writeblock
|
|
|
|
Lde9d: jsr Sdec6
|
|
bcs Ldec4
|
|
ldy #$0b
|
|
Ldea4: lda D01b2,y
|
|
sta D0c00,y
|
|
dey
|
|
bpl Ldea4
|
|
ldy #$00
|
|
Ldeaf: lda D0e00,y
|
|
sta D0c0c,y
|
|
lda D0f00,y
|
|
sta D0d0c,y
|
|
iny
|
|
bne Ldeaf
|
|
lda Z2d
|
|
stz Z56
|
|
sta Z01
|
|
Ldec4: clc
|
|
rts
|
|
|
|
Sdec6: jsr Sda21
|
|
bcs Ldf0c
|
|
lda #$06
|
|
sta Z58
|
|
stz Zb4
|
|
jsr Sd576
|
|
jsr Sda73
|
|
bcs Ldf0c
|
|
asl
|
|
asl
|
|
asl
|
|
sta Z1c
|
|
Ldede: jsr Sd5d8
|
|
bcs Ldf0a
|
|
Ldee3: lda Z2d
|
|
jsr Sd9b0
|
|
jsr Sd8c1
|
|
Ldeeb: jsr Se500
|
|
bcc Ldf11
|
|
jsr Sde3a
|
|
bcs Ldf0a
|
|
bit #$04
|
|
bne Ldede
|
|
bit #$01
|
|
beq Ldf02
|
|
jsr Sd60b
|
|
bcc Ldede
|
|
Ldf02: bit #$20
|
|
beq Ldf0a
|
|
Ldf06: dec Z1c
|
|
bne Ldeeb
|
|
Ldf0a: lda #$27
|
|
Ldf0c: jsr Sd297
|
|
sec
|
|
rts
|
|
|
|
Ldf11: lda Z2a
|
|
cmp Z15
|
|
bne Ldf06
|
|
jsr Se60f
|
|
bcc Ldf23
|
|
jsr Sde3a
|
|
bcc Ldee3
|
|
bra Ldf0a
|
|
Ldf23: clc
|
|
rts
|
|
|
|
cmd_readblock:
|
|
lda #$11
|
|
ldx Z2f
|
|
bpl Ldf2e
|
|
Ldf2b: jmp Sd297
|
|
|
|
Ldf2e: jsr Sd905
|
|
bpl Ldf36
|
|
jsr Sd4cc
|
|
Ldf36: bcs Ldf2b
|
|
jsr Sda21
|
|
bcs Ldf2b
|
|
lda #$80
|
|
sta Z6b
|
|
ldx Z2f
|
|
lda #$60
|
|
bit Z3a,x
|
|
beq Ldf55
|
|
bit Z61
|
|
bpl Ldf52
|
|
lda #$21
|
|
sta Z5e
|
|
rts
|
|
|
|
Ldf52: jsr Sd7e8
|
|
Ldf55: jsr Sda73
|
|
bcs Ldf2b
|
|
sta Z1a
|
|
and #$10
|
|
asl
|
|
adc #$60
|
|
sta Z5d
|
|
jsr Sda48
|
|
bcc Ldf6c
|
|
sta Z01
|
|
clc
|
|
rts
|
|
|
|
Ldf6c: lda #$06
|
|
sta Z58
|
|
lda #$04
|
|
sta Z5c
|
|
lda #$14
|
|
sta Z5b
|
|
jsr Sd576
|
|
lda #$00
|
|
sta Zb1
|
|
lda Z1a
|
|
sta Zb2
|
|
dec
|
|
sta Z1c
|
|
lda #$c0
|
|
ldx Z1a
|
|
Ldf8a: sta D0620,x
|
|
cpx Zb1
|
|
bcc Ldf98
|
|
cpx Zb2
|
|
bcs Ldf98
|
|
stz D0620,x
|
|
Ldf98: dex
|
|
bpl Ldf8a
|
|
lda Z5f
|
|
sta Z60
|
|
bra Ldfa6
|
|
Ldfa1: jsr Sd60b
|
|
bcs Le007
|
|
Ldfa6: dec Z5c
|
|
bmi Le007
|
|
jsr Sd5d8
|
|
bcs Le007
|
|
jsr Sd89f
|
|
bcc Ldfb8
|
|
Ldfb4: lda #$2f
|
|
bra Le009
|
|
Ldfb8: stz Z57
|
|
jsr Se500
|
|
bcc Le010
|
|
lda Z57
|
|
bit #$04
|
|
bne Ldfa6
|
|
bit #$20
|
|
beq Ldfe5
|
|
dec Z5d
|
|
beq Le007
|
|
lda Z5d
|
|
and #$3f
|
|
lsr
|
|
cmp Z1a
|
|
beq Ldfdc
|
|
bit #$08
|
|
beq Ldfb8
|
|
bra Ldfa6
|
|
Ldfdc: bit Z60
|
|
bvc Ldfa1
|
|
Ldfe0: jsr Sd7a8
|
|
sec
|
|
rts
|
|
|
|
Ldfe5: bit #$01
|
|
beq Le007
|
|
bit Z60
|
|
bvs Ldfe0
|
|
lda #$02
|
|
jsr Sd892
|
|
bcs Ldfb4
|
|
dec Z5c
|
|
bmi Le007
|
|
jsr Sd60b
|
|
stz Z57
|
|
jsr Se500
|
|
bcc Ldfa6
|
|
ldx Z2f
|
|
jsr Sd55a
|
|
Le007: lda #$27
|
|
Le009: bit Z60
|
|
bvs Ldfe0
|
|
jmp Sd297
|
|
|
|
Le010: ldx Z2a
|
|
cpx Z15
|
|
bne Le03b
|
|
bit Z60
|
|
bvs Ldfe0
|
|
jsr Sd9a0
|
|
stz Z6b
|
|
jsr Se60f
|
|
bcc Le02b
|
|
jsr Sde3a
|
|
bcs Le007
|
|
bra Le0aa
|
|
Le02b: lda Z2d
|
|
sta Z01
|
|
lda Z1c
|
|
ora #$80
|
|
sta Z00
|
|
lda #$40
|
|
tsb Z60
|
|
bra Le08b
|
|
Le03b: bit Z60
|
|
bmi Le0aa
|
|
bit D0620,x
|
|
bvs Le065
|
|
ldy Dd9ee,x
|
|
lda D0b3f,y
|
|
bmi Le079
|
|
cmp Z2f
|
|
bne Le079
|
|
lda D0aff,y
|
|
cmp Z1b
|
|
bne Le079
|
|
lda D0b1f,y
|
|
cmp Z2a
|
|
bne Le079
|
|
lda #$40
|
|
sta D0620,x
|
|
bra Le09c
|
|
Le065: bit Z60
|
|
bvc Le0aa
|
|
ldx #$08
|
|
Le06b: lda #$cc
|
|
Le06d: bit Z00
|
|
bpl Le0b4
|
|
dec
|
|
bne Le06d
|
|
dex
|
|
bne Le06b
|
|
bra Le0aa
|
|
Le079: jsr Sd9a0
|
|
jsr Se60f
|
|
bcc Le08b
|
|
dec Z5b
|
|
bpl Le09c
|
|
lda #$80
|
|
tsb Z60
|
|
bra Le09c
|
|
Le08b: ldx Z2a
|
|
lda #$40
|
|
sta D0620,x
|
|
lda Z2a
|
|
jsr Sda00
|
|
bcc Le09c
|
|
Le099: jmp Le007
|
|
|
|
Le09c: bit Z60
|
|
bvc Le0aa
|
|
bmi Le0b4
|
|
dec Z1c
|
|
beq Le0b4
|
|
lda Z00
|
|
bpl Le0b4
|
|
Le0aa: jsr Sd7a8
|
|
dec Z5d
|
|
beq Le099
|
|
jmp Ldfb8
|
|
|
|
Le0b4: jsr Sd7a8
|
|
bit Z60
|
|
bvs Le0bd
|
|
clc
|
|
rts
|
|
|
|
Le0bd: sec
|
|
rts
|
|
|
|
cmd_writeblock:
|
|
lda #$11
|
|
ldx Z2f
|
|
bmi Le0cf
|
|
jsr Sd905
|
|
bpl Le0cd
|
|
jsr Sd4cc
|
|
Le0cd: bcc Le0d2
|
|
Le0cf: jmp Sd297
|
|
|
|
Le0d2: bne Le0cf
|
|
jsr Sda21
|
|
bcs Le0cf
|
|
ldx Z2f
|
|
lda #$60
|
|
bit Z3a,x
|
|
beq Le0ed
|
|
bit Z61
|
|
bpl Le0ea
|
|
lda #$21
|
|
sta Z5e
|
|
rts
|
|
|
|
Le0ea: jsr Sd7e8
|
|
Le0ed: lda #$06
|
|
sta Z58
|
|
lda #$03
|
|
sta Z5c
|
|
jsr Sda73
|
|
bcs Le0cf
|
|
sta Z1a
|
|
and #$18
|
|
asl
|
|
adc #$60
|
|
sta Z5d
|
|
ldx Z15
|
|
jsr Sd9a0
|
|
stz Z04
|
|
bit Zb9
|
|
bmi Le11d
|
|
bit D7c09
|
|
bvc Le11d
|
|
bit Z61
|
|
bmi Le11d
|
|
|
|
bit Zb4 ; MFM?
|
|
bmi Le11d ; yes
|
|
|
|
dec Z04
|
|
|
|
Le11d: lda Z2d
|
|
sta Z01
|
|
jsr Sd576
|
|
jsr Sd5d8
|
|
bcs Le1a8
|
|
bit Zb9
|
|
bmi Le13e
|
|
bit Z04
|
|
bmi Le135
|
|
Le131: lda Z01
|
|
bpl Le131
|
|
Le135: bit Z61
|
|
bpl Le13e
|
|
jsr Se793
|
|
bra Le141
|
|
Le13e: jsr Se797
|
|
Le141: jsr Sd89f
|
|
bcc Le14a
|
|
Le146: lda #$2f
|
|
bra Le1aa
|
|
Le14a: jsr Se500
|
|
bcc Le189
|
|
lda Z57
|
|
bit #$04
|
|
bne Le171
|
|
bit #$20
|
|
beq Le17c
|
|
dec Z5d
|
|
beq Le1a8
|
|
lda Z5d
|
|
and #$3f
|
|
lsr
|
|
cmp Z1a
|
|
beq Le16c
|
|
bit #$08
|
|
beq Le14a
|
|
bra Le171
|
|
Le16c: jsr Sd60b
|
|
bcs Le1a8
|
|
Le171: dec Z5c
|
|
bmi Le1a8
|
|
jsr Sd5d8
|
|
bcc Le141
|
|
bra Le1a8
|
|
Le17c: bit #$01
|
|
beq Le1a8
|
|
lda #$02
|
|
jsr Sd892
|
|
bcs Le146
|
|
bra Le16c
|
|
Le189: lda Z2a
|
|
cmp Z15
|
|
beq Le198
|
|
dec Z5d
|
|
beq Le1a8
|
|
jsr Sd7a8
|
|
bra Le14a
|
|
Le198: jsr Se87f
|
|
bcs Le1a8
|
|
bit Zb9
|
|
bmi Le1a6
|
|
lda Z15
|
|
jsr Sda00
|
|
Le1a6: clc
|
|
rts
|
|
|
|
Le1a8: lda #$27
|
|
Le1aa: sta Z56
|
|
clc
|
|
rts
|
|
|
|
|
|
cmd_unknown_0c:
|
|
stz Z56
|
|
stz Z16
|
|
stz Z14
|
|
stz Z1b
|
|
jsr Sd97c
|
|
lda #$01
|
|
sta Z00
|
|
ora #$80
|
|
sta Z02
|
|
stz Z05
|
|
stz Z06
|
|
stz Z07
|
|
stz Z2f
|
|
lda #$01
|
|
sta Z03
|
|
stz Z13
|
|
ldx Z13
|
|
lda Z34,x
|
|
beq Le1e5
|
|
bmi Le1dd
|
|
jsr Sd55a
|
|
jmp Ld248
|
|
|
|
Le1dd: lda #$ff
|
|
jsr Sf730
|
|
jmp Ld257
|
|
|
|
Le1e5: lda #$28
|
|
sta Z56
|
|
stz Z01
|
|
clc
|
|
rts
|
|
|
|
fillto $e200
|
|
|
|
De200: fcb $00,$00,$00,$00,$00,$00,$00,$00
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$00
|
|
fcb $40,$40,$40,$40,$40,$40,$40,$40
|
|
fcb $40,$40,$40,$40,$40,$40,$40,$40
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$80
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$80
|
|
fcb $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0
|
|
fcb $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0
|
|
De240: fcb $00,$00,$00,$00,$40,$40,$40,$40
|
|
fcb $80,$80,$80,$80,$c0,$c0,$c0,$c0
|
|
fcb $00,$00,$00,$00,$40,$40,$40,$40
|
|
fcb $80,$80,$80,$80,$c0,$c0,$c0,$c0
|
|
fcb $00,$00,$00,$00,$40,$40,$40,$40
|
|
fcb $80,$80,$80,$80,$c0,$c0,$c0,$c0
|
|
fcb $00,$00,$00,$00,$40,$40,$40,$40
|
|
fcb $80,$80,$80,$80,$c0,$c0,$c0,$c0
|
|
De280: fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
fcb $00,$40,$80,$c0,$00,$40,$80,$c0
|
|
|
|
|
|
cmd_unknown_0d:
|
|
lda #$11
|
|
ldx Z2f
|
|
bpl Le2c9
|
|
Le2c6: jmp Sd297
|
|
|
|
Le2c9: jsr Sd905
|
|
bpl Le2d1
|
|
jsr Sd4cc
|
|
Le2d1: bcs Le2c6
|
|
jsr Sda21
|
|
bcs Le2c6
|
|
lda #$80
|
|
sta Z6b
|
|
ldx Z2f
|
|
lda #$60
|
|
bit Z3a,x
|
|
beq Le2e7
|
|
jsr Sd7e8
|
|
Le2e7: lda Z06
|
|
pha
|
|
lda Z05
|
|
pha
|
|
clc
|
|
adc Z09
|
|
sta Z05
|
|
lda Z06
|
|
adc Z0a
|
|
sta Z05
|
|
jsr Sda21
|
|
bcs Le2c6
|
|
pla
|
|
sta Z05
|
|
pla
|
|
sta Z06
|
|
jsr Sda73
|
|
bcs Le2c6
|
|
sta Z1a
|
|
stz Z0c
|
|
lda Z1a
|
|
sec
|
|
sbc Z15
|
|
sta Z1c
|
|
ldy Z0a
|
|
bne Le31f
|
|
cmp Z09
|
|
beq Le31f
|
|
bcc Le31f
|
|
lda Z09
|
|
Le31f: sta Z0b
|
|
stz Z01
|
|
lda #$ff
|
|
sta Z00
|
|
lda #$05
|
|
sta Zae
|
|
stz Zad
|
|
Le32d: dec Zad
|
|
bne Le335
|
|
dec Zae
|
|
bmi Le339
|
|
Le335: lda Z00
|
|
bmi Le32d
|
|
Le339: sec
|
|
rts
|
|
|
|
|
|
cmd_unknown_0e:
|
|
lda #$11
|
|
ldx Z2f
|
|
bpl Le344
|
|
Le341: jmp Sd297
|
|
|
|
Le344: jsr Sd905
|
|
bpl Le34c
|
|
jsr Sd4cc
|
|
Le34c: bcs Le341
|
|
jsr Sda21
|
|
bcs Le341
|
|
lda #$80
|
|
sta Z6b
|
|
ldx Z2f
|
|
lda #$60
|
|
bit Z3a,x
|
|
beq Le362
|
|
jsr Sd7e8
|
|
Le362: jsr Sda73
|
|
bcs Le341
|
|
sta Z1a
|
|
lda Z15
|
|
sta Z38
|
|
lda Z1b
|
|
sta Z39
|
|
lda Z09
|
|
clc
|
|
adc Z05
|
|
sta Z05
|
|
lda Z0a
|
|
adc Z06
|
|
sta Z06
|
|
lda Z05
|
|
bne Le384
|
|
dec Z06
|
|
Le384: dec Z05
|
|
jsr Sda21
|
|
bcs Le341
|
|
jsr Sda73
|
|
bcs Le341
|
|
lda Z1b
|
|
cmp Z39
|
|
beq Le39b
|
|
lda #$2d
|
|
jmp Sd297
|
|
|
|
Le39b: stz D0600
|
|
stz D0601
|
|
ldx Z1a
|
|
Le3a3: dex
|
|
stz D0602,x
|
|
bne Le3a3
|
|
lda Z38
|
|
sta Zb1
|
|
lda Z15
|
|
inc
|
|
sta Zb2
|
|
sec
|
|
sbc Z38
|
|
sta Z1c
|
|
asl
|
|
asl
|
|
sta Z58
|
|
lda #$40
|
|
ldx Z1a
|
|
stx Z2a
|
|
Le3c1: sta D0620,x
|
|
cpx Zb1
|
|
bcc Le3cf
|
|
cpx Zb2
|
|
bcs Le3cf
|
|
stz D0620,x
|
|
Le3cf: dex
|
|
bpl Le3c1
|
|
lda #$03
|
|
sta Z01
|
|
lda Z1a
|
|
asl
|
|
asl
|
|
inc
|
|
sta Z5d
|
|
lda #$02
|
|
sta Z5c
|
|
jsr Sd576
|
|
bra Le3eb
|
|
Le3e6: jsr Sd60b
|
|
bcs Le415
|
|
Le3eb: dec Z5c
|
|
bmi Le415
|
|
jsr Sd5d8
|
|
bcs Le415
|
|
jsr Sd89f
|
|
bcc Le400
|
|
Le3f9: lda #$2f
|
|
bra Le479
|
|
Le3fd: jsr Sd7a8
|
|
Le400: stz Z57
|
|
jsr Se500
|
|
bcc Le429
|
|
lda Z57
|
|
bit #$04
|
|
bne Le3eb
|
|
bit #$20
|
|
bne Le417
|
|
bit #$01
|
|
bne Le3f9
|
|
Le415: bra Le477
|
|
Le417: dec Z5d
|
|
beq Le477
|
|
lda Z5d
|
|
cmp Z1a
|
|
bne Le423
|
|
bra Le3e6
|
|
Le423: bit #$08
|
|
beq Le400
|
|
bra Le3eb
|
|
Le429: ldx Z2a
|
|
bit D0620,x
|
|
bvs Le452
|
|
jsr Sd9a0
|
|
jsr Se60f
|
|
bcs Le468
|
|
ldx Z2a
|
|
lda #$40
|
|
sta D0620,x
|
|
txa
|
|
sec
|
|
sbc Z38
|
|
tax
|
|
lda Z2d
|
|
sta D0602,x
|
|
inc D0600
|
|
dec Z1c
|
|
beq Le482
|
|
bra Le462
|
|
Le452: stz Z2c
|
|
ldx #$08
|
|
Le456: lda #$cc
|
|
Le458: bit Z2c
|
|
bpl Le45c
|
|
Le45c: dec
|
|
bne Le458
|
|
dex
|
|
bne Le456
|
|
Le462: dec Z5d
|
|
bne Le3fd
|
|
bra Le477
|
|
Le468: dec Z58
|
|
bpl Le3fd
|
|
lda Z2a
|
|
sec
|
|
sbc Z38
|
|
tax
|
|
lda #$a7
|
|
sta D0602,x
|
|
Le477: lda #$27
|
|
Le479: sta Z56
|
|
lda #$01
|
|
sta D0601
|
|
clc
|
|
rts
|
|
|
|
Le482: lda #$ff
|
|
sta Z00
|
|
lda #$05
|
|
sta Zae
|
|
stz Zad
|
|
Le48c: dec Zad
|
|
bne Le494
|
|
dec Zae
|
|
bmi Le498
|
|
Le494: lda Z00
|
|
bmi Le48c
|
|
Le498: sec
|
|
rts
|
|
|
|
fillto $e500
|
|
|
|
; read address mark
|
|
Se500: bit Zb4 ; MFM?
|
|
bpl Le507 ; no
|
|
jmp Le935
|
|
|
|
; read address mark, GCR
|
|
Le507: jmp Z72 ; hook to immediately following Le50a
|
|
|
|
Le50a: jsr Se600
|
|
stz Z57
|
|
lda iwm_q6l
|
|
lda iwm_q7l
|
|
lda #$08
|
|
sta Zad
|
|
ldy #$00
|
|
Le51b: ldx #$02
|
|
Le51d: dey
|
|
bne Le524
|
|
dec Zad
|
|
beq Le585
|
|
Le524: lda iwm_q6l
|
|
bpl Le524
|
|
cmp Z9f,x
|
|
bne Le51b
|
|
dex
|
|
bpl Le51d
|
|
ldx #$04
|
|
stz Z1e
|
|
Le534: ldy iwm_q6l
|
|
bpl Le534
|
|
lda Se500,y
|
|
sta Z27,x
|
|
eor Z1e
|
|
sta Z1e
|
|
dex
|
|
bpl Le534
|
|
tay
|
|
bne Le589
|
|
Le548: ldx iwm_q6l
|
|
bpl Le548
|
|
cpx Z97+2
|
|
bne Le589
|
|
Le551: ldx iwm_q6l
|
|
bpl Le551
|
|
cpx Z97+1
|
|
bne Le589
|
|
ldx Z2f
|
|
lda Z28
|
|
sta Z11,x
|
|
and #$20
|
|
asl
|
|
asl
|
|
sta Z0f,x
|
|
lda Z29
|
|
eor Z16
|
|
lsr
|
|
bne Le581
|
|
lda Z2b
|
|
bcc Le573
|
|
ora #$40
|
|
Le573: cmp Z14
|
|
beq Le57f
|
|
ldx Z2f
|
|
sta Z0d,x
|
|
lda #$04
|
|
bra Le58b
|
|
Le57f: clc
|
|
rts
|
|
|
|
Le581: lda #$28
|
|
bra Le58b
|
|
Le585: lda #$01
|
|
bra Le58b
|
|
Le589: lda #$20
|
|
Le58b: tsb Z57
|
|
sec
|
|
rts
|
|
|
|
fcb $ff,$ff,$ff,$ff,$ff,$ff,$ff
|
|
|
|
; denibblization table, starting at page offset $96
|
|
denib_table equ *-$96
|
|
fcb $00,$01
|
|
fcb $98,$99,$02,$03,$9c,$04,$05,$06
|
|
fcb $a0,$a1,$a2,$a3,$a4,$a5,$07,$08
|
|
fcb $a8,$a9,$aa,$09,$0a,$0b,$0c,$0d
|
|
fcb $b0,$b1,$0e,$0f,$10,$11,$12,$13
|
|
fcb $b8,$14,$15,$16,$17,$18,$19,$1a
|
|
fcb $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7
|
|
fcb $c8,$c9,$ca,$1b,$cc,$1c,$1d,$1e
|
|
fcb $d0,$d1,$d2,$1f,$d4,$d5,$20,$21
|
|
fcb $d8,$22,$23,$24,$25,$26,$27,$28
|
|
fcb $e0,$e1,$e2,$e3,$e4,$29,$2a,$2b
|
|
fcb $e8,$2c,$2d,$2e,$2f,$30,$31,$32
|
|
fcb $f0,$f1,$33,$34,$35,$36,$37,$38
|
|
fcb $f8,$39,$3a,$3b,$3c,$3d,$3e,$3f
|
|
|
|
Se600: lda #$01
|
|
jsr Sd892
|
|
jsr Sd645
|
|
bit iwm_q6l
|
|
bit iwm_q7l
|
|
rts
|
|
|
|
|
|
; read data field
|
|
Se60f: bit Zb4 ; MFM?
|
|
bpl Le616 ; no
|
|
jmp Lea3d
|
|
|
|
Le616: jmp Z75 ; hook to immediately following Le619
|
|
|
|
; read data field GCR
|
|
Le619: stz Z21
|
|
stz Z20
|
|
stz Z1f
|
|
stz Z57
|
|
ldy #$19
|
|
Le623: ldx #$02
|
|
Le625: dey
|
|
beq Le642
|
|
Le628: lda iwm_q6l
|
|
bpl Le628
|
|
cmp Z8e,x
|
|
bne Le623
|
|
dex
|
|
bpl Le625
|
|
ldy #$0c
|
|
Le636: ldx iwm_q6l
|
|
bpl Le636
|
|
lda denib_table,x
|
|
eor Z2a
|
|
beq Le647
|
|
Le642: lda #$01
|
|
jmp Le78f
|
|
|
|
Le647: clc
|
|
Le648: ldx iwm_q6l
|
|
bpl Le648
|
|
adc Z1f
|
|
cmp #$80
|
|
rol
|
|
sta Z1f
|
|
lda denib_table,x
|
|
sta Z23
|
|
Le659: ldx iwm_q6l
|
|
bpl Le659
|
|
lda denib_table,x
|
|
ldx Z23
|
|
ora De200,x
|
|
eor Z1f
|
|
sta D01b1,y
|
|
dey
|
|
adc Z21
|
|
sta Z21
|
|
Le670: ldx iwm_q6l
|
|
bpl Le670
|
|
lda denib_table,x
|
|
ldx Z23
|
|
ora De240,x
|
|
eor Z21
|
|
sta D01b1,y
|
|
dey
|
|
adc Z20
|
|
sta Z20
|
|
Le687: ldx iwm_q6l
|
|
bpl Le687
|
|
lda denib_table,x
|
|
ldx Z23
|
|
ora De280,x
|
|
eor Z20
|
|
sta D01b1,y
|
|
dey
|
|
bne Le648
|
|
bra Le6c2
|
|
Le69e: ldx iwm_q6l
|
|
lda denib_table,x
|
|
ora De240,y
|
|
eor Z21
|
|
sta (Zab)
|
|
inc Zab
|
|
adc Z20
|
|
sta Z20
|
|
Le6b1: ldx iwm_q6l
|
|
bpl Le6b1
|
|
lda denib_table,x
|
|
ora De280,y
|
|
eor Z20
|
|
sta (Zab)
|
|
inc Zab
|
|
Le6c2: ldx iwm_q6l
|
|
bpl Le6c2
|
|
adc Z1f
|
|
cmp #$80
|
|
rol
|
|
sta Z1f
|
|
ldy denib_table,x
|
|
Le6d1: ldx iwm_q6l
|
|
bpl Le6d1
|
|
lda denib_table,x
|
|
ora De200,y
|
|
eor Z1f
|
|
sta (Zab)
|
|
adc Z21
|
|
sta Z21
|
|
inc Zab
|
|
bne Le69e
|
|
ldx iwm_q6l
|
|
lda denib_table,x
|
|
ora De240,y
|
|
eor Z21
|
|
sta (Zaf)
|
|
adc Z20
|
|
sta Z20
|
|
inc Zaf
|
|
nop
|
|
Le6fc: ldx iwm_q6l
|
|
lda denib_table,x
|
|
ora De280,y
|
|
eor Z20
|
|
sta (Zaf)
|
|
inc Zaf
|
|
Le70b: ldx iwm_q6l
|
|
bpl Le70b
|
|
adc Z1f
|
|
cmp #$80
|
|
rol
|
|
sta Z1f
|
|
ldy denib_table,x
|
|
Le71a: ldx iwm_q6l
|
|
bpl Le71a
|
|
lda denib_table,x
|
|
ora De200,y
|
|
eor Z1f
|
|
sta (Zaf)
|
|
inc Zaf
|
|
adc Z21
|
|
sta Z21
|
|
Le72f: ldx iwm_q6l
|
|
bpl Le72f
|
|
lda denib_table,x
|
|
ora De240,y
|
|
eor Z21
|
|
sta (Zaf)
|
|
adc Z20
|
|
sta Z20
|
|
inc Zaf
|
|
bne Le6fc
|
|
ldx iwm_q6l
|
|
ldy denib_table,x
|
|
lda De280,y
|
|
sta Z23
|
|
lda De240,y
|
|
sta Z24
|
|
lda De200,y
|
|
ldx #$02
|
|
Le75b: ldy iwm_q6l
|
|
bpl Le75b
|
|
ora denib_table,y
|
|
eor Z1f,x
|
|
sta Z1f,x
|
|
lda Z22,x
|
|
dex
|
|
bpl Le75b
|
|
ldx #$02
|
|
Le76e: lda iwm_q6l
|
|
bpl Le76e
|
|
cmp Z97,x
|
|
bne Le77c
|
|
dex
|
|
bne Le76e
|
|
bra Le780
|
|
Le77c: lda #$08
|
|
tsb Z57
|
|
Le780: lda Z21
|
|
ora Z20
|
|
ora Z1f
|
|
bne Le78d
|
|
lda Z57
|
|
cmp #$01
|
|
rts
|
|
|
|
Le78d: lda #$10
|
|
Le78f: tsb Z57
|
|
sec
|
|
rts
|
|
|
|
Se793: ldx #$af
|
|
bra Le7a7
|
|
|
|
Se797: ldx #$04
|
|
Le799: stz D01ab,x
|
|
stz D06eb,x
|
|
stz D07eb,x
|
|
dex
|
|
bne Le799
|
|
ldx #$ab
|
|
Le7a7: bit Zb4
|
|
bpl Le7b5
|
|
lda Zac
|
|
inc
|
|
sta Zb0
|
|
lda Zab
|
|
sta Zaf
|
|
rts
|
|
|
|
Le7b5: stx Z6e
|
|
lda Zac
|
|
sta Zb0
|
|
Le7bb: lda Z04
|
|
bpl Le7d4
|
|
cmp #$d0
|
|
beq Le7d2
|
|
cmp #$c1
|
|
beq Le7d4
|
|
cmp #$c0
|
|
bne Le7bb
|
|
ldy #$c8
|
|
Le7cd: dey
|
|
bne Le7cd
|
|
bra Le7d4
|
|
Le7d2: stz Z04
|
|
Le7d4: stz Z21
|
|
stz Z20
|
|
stz Z1f
|
|
clc
|
|
ldy #$00
|
|
bra Le7fc
|
|
Le7df: lda (Zab),y
|
|
eor Z20
|
|
sta D0741,x
|
|
eor Z20
|
|
adc Z1f
|
|
cmp #$80
|
|
rol
|
|
sta Z1f
|
|
iny
|
|
bne Le7fc
|
|
inc Zac
|
|
lda Z04
|
|
bpl Le7fc
|
|
eor #$d0
|
|
bne Le830
|
|
Le7fc: lda (Zab),y
|
|
eor Z1f
|
|
sta D0100,x
|
|
eor Z1f
|
|
adc Z21
|
|
sta Z21
|
|
iny
|
|
bne Le816
|
|
inc Zac
|
|
lda Z04
|
|
bpl Le816
|
|
eor #$d0
|
|
bne Le830
|
|
Le816: lda (Zab),y
|
|
eor Z21
|
|
sta D0640,x
|
|
eor Z21
|
|
adc Z20
|
|
sta Z20
|
|
iny
|
|
bne Le844
|
|
inc Zac
|
|
lda Z04
|
|
bpl Le844
|
|
eor #$d0
|
|
beq Le844
|
|
Le830: cmp #$11
|
|
beq Le83c
|
|
lda #$d0
|
|
Le836: cmp Z04
|
|
bne Le836
|
|
stz Z04
|
|
Le83c: lda Zb0
|
|
sta Zac
|
|
ldx Z6e
|
|
bra Le7d4
|
|
Le844: dex
|
|
bne Le7df
|
|
lda Z1f
|
|
lsr
|
|
lsr
|
|
eor Z20
|
|
and #$30
|
|
eor Z20
|
|
lsr
|
|
lsr
|
|
eor Z21
|
|
and #$3c
|
|
eor Z21
|
|
lsr
|
|
lsr
|
|
sta Z22
|
|
lda D01af
|
|
sta Z67
|
|
asl
|
|
rol Z66
|
|
asl
|
|
rol Z66
|
|
lda D06ef
|
|
sta Z68
|
|
asl
|
|
rol Z66
|
|
asl
|
|
rol Z66
|
|
lda D07ef
|
|
sta Z69
|
|
asl
|
|
rol Z66
|
|
asl
|
|
rol Z66
|
|
rts
|
|
|
|
|
|
; write data field
|
|
Se87f: bit Zb4 ; MFM?
|
|
bpl Le886 ; no
|
|
jmp Leaf0
|
|
|
|
Le886: jmp Z78 ; hook to immediately following Le889
|
|
|
|
; write data field GCR
|
|
Le889: bit iwm_q6h
|
|
lda #$ff
|
|
sta iwm_q7h
|
|
stz Z57
|
|
ldx #$07
|
|
Le895: lda Z8e,x
|
|
Le897: bit iwm_q6l
|
|
bpl Le897
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Le895
|
|
ldy Z2a
|
|
lda Dd000,y
|
|
Le8a7: bit iwm_q6l
|
|
bpl Le8a7
|
|
sta iwm_q6h
|
|
ldx #$ae
|
|
bra Le8c6
|
|
Le8b3: ldy Z69
|
|
lda D0741,x
|
|
sta Z69
|
|
asl
|
|
rol Z66
|
|
asl
|
|
lda Dd000,y
|
|
sta iwm_q6h
|
|
rol Z66
|
|
Le8c6: ldy Z66
|
|
lda Dd000,y
|
|
Le8cb: bit iwm_q6l
|
|
bpl Le8cb
|
|
sta iwm_q6h
|
|
ldy Z67
|
|
lda D0100,x
|
|
sta Z67
|
|
asl
|
|
rol Z66
|
|
asl
|
|
rol Z66
|
|
lda Dd000,y
|
|
sta iwm_q6h
|
|
ldy Z68
|
|
lda D0640,x
|
|
sta Z68
|
|
asl
|
|
rol Z66
|
|
asl
|
|
rol Z66
|
|
lda Dd000,y
|
|
sta iwm_q6h
|
|
dex
|
|
cpx #$ff
|
|
bne Le8b3
|
|
ldx #$03
|
|
Le900: ldy Z1f,x
|
|
lda Dd000,y
|
|
Le905: bit iwm_q6l
|
|
bpl Le905
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Le900
|
|
ldx #$02
|
|
Le912: lda Z97,x
|
|
Le914: bit iwm_q6l
|
|
bpl Le914
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Le912
|
|
lda #$40
|
|
and iwm_q6l
|
|
eor #$40
|
|
tsb Z57
|
|
Le928: bit iwm_q6l
|
|
bvs Le928
|
|
bit iwm_q7l
|
|
lda Z57
|
|
cmp #$01
|
|
rts
|
|
|
|
|
|
; read address mark, MFM
|
|
Le935: jsr Se600
|
|
stz Z57
|
|
jsr Sd714
|
|
ldy #$ff
|
|
sty Zad
|
|
bra Le95c
|
|
Le943: ldx #$02
|
|
ldy #$ff
|
|
Le947: bit ism_r_handshake
|
|
bmi Le951
|
|
dey
|
|
bmi Le947
|
|
bra Le95c
|
|
|
|
Le951: lda ism_r_mark
|
|
cmp Dea33,x
|
|
bne Le95c
|
|
dex
|
|
bpl Le947
|
|
|
|
Le95c: bit ism_r_error
|
|
|
|
lda #$18 ; clear write and action bits
|
|
sta ism_w_zeros
|
|
|
|
lda #$01 ; clear FIFO
|
|
sta ism_w_ones
|
|
sta ism_w_zeros
|
|
|
|
bit ism_r_error
|
|
|
|
lda #$08 ; turn on action bit
|
|
sta ism_w_ones
|
|
|
|
Le974: bit ism_r_handshake
|
|
bmi Le985
|
|
dey
|
|
bne Le974
|
|
dec Zad
|
|
bne Le974
|
|
lda #$01
|
|
jmp Lea1e
|
|
|
|
Le985: lda ism_r_mark
|
|
cmp #$a1
|
|
beq Le992
|
|
cmp #$c2
|
|
beq Le943
|
|
bra Le95c
|
|
|
|
Le992: ldy #$ff
|
|
ldx #$02
|
|
|
|
Le996: bit ism_r_handshake
|
|
bmi Le9a0
|
|
dey
|
|
bmi Le996
|
|
bra Le95c
|
|
|
|
Le9a0: lda ism_r_mark
|
|
cmp Dea36,x
|
|
bne Le95c
|
|
dex
|
|
bpl Le996
|
|
|
|
Le9ab: bit ism_r_handshake
|
|
bpl Le9ab
|
|
lda ism_r_data
|
|
sta Z2b ; save track
|
|
|
|
Le9b5: bit ism_r_handshake
|
|
bpl Le9b5
|
|
lda #$00
|
|
ldy ism_r_data
|
|
beq Le9c3
|
|
lda #$20
|
|
Le9c3: sta Z29 ; save side ($00 or $20)
|
|
|
|
Le9c5: bit ism_r_handshake
|
|
bpl Le9c5
|
|
lda ism_r_data
|
|
dec
|
|
sta Z2a ; save sector (-1 to base at zero)
|
|
|
|
Le9d0: bit ism_r_handshake
|
|
bpl Le9d0
|
|
lda #$20
|
|
ora ism_r_data
|
|
sta Z28 ; save block size ored with $20 (why?)
|
|
|
|
Le9dc: bit ism_r_handshake
|
|
bpl Le9dc
|
|
lda ism_r_data
|
|
sta Z1e ; save first CRC byte
|
|
|
|
Le9e6: lda ism_r_handshake
|
|
bpl Le9e6
|
|
ldy ism_r_data
|
|
sty Z1f ; save second CRC byte
|
|
|
|
ldy ism_r_error
|
|
sty Z20 ; save ISM error
|
|
|
|
sta Z21 ; save
|
|
and #$22
|
|
bne Lea1c
|
|
|
|
lda #$18 ; clear write and action bits
|
|
sta ism_w_zeros
|
|
|
|
ldx Z2f
|
|
lda #$80
|
|
sta Z0f,x
|
|
lda Z29
|
|
beq Lea0c
|
|
lda #$20
|
|
Lea0c: eor Z16
|
|
bne Lea2f
|
|
lda Z2b
|
|
cmp Z14
|
|
beq Lea2d
|
|
sta Z0d,x
|
|
lda #$04
|
|
bra Lea1e
|
|
Lea1c: lda #$20
|
|
Lea1e: tsb Z57
|
|
|
|
lda #$18 ; clear write and action bits
|
|
sta ism_w_zeros
|
|
|
|
lda ism_r_error
|
|
jsr Sd76e
|
|
sec
|
|
rts
|
|
|
|
Lea2d: clc
|
|
rts
|
|
|
|
Lea2f: lda #$28
|
|
bra Lea1e
|
|
|
|
Dea33: fcb $fc,$c2,$c2
|
|
Dea36: fcb $fe,$a1
|
|
Dea38: fcb $a1,$fb,$a1,$a1,$a1
|
|
|
|
|
|
; read data field, MFM
|
|
Lea3d: bit iwm_sel_drive_1
|
|
|
|
lda #$18 ; clear write and action bits
|
|
sta ism_w_zeros
|
|
|
|
lda #$01 ; clear FIFO
|
|
sta ism_w_ones
|
|
sta ism_w_zeros
|
|
|
|
bit ism_r_error
|
|
|
|
lda #$08 ; turn on action bit
|
|
sta ism_w_ones
|
|
|
|
ldy #$80
|
|
Lea57: dey
|
|
bne Lea64
|
|
|
|
Lea5a: lda #$18 ; timeout - clear write and action bits
|
|
sta ism_w_zeros
|
|
jsr Sd76e
|
|
sec
|
|
rts
|
|
|
|
Lea64: bit ism_r_handshake
|
|
bpl Lea57
|
|
lda ism_r_mark
|
|
cmp #$a1
|
|
bne Lea57
|
|
ldx #$03
|
|
ldy #$14
|
|
|
|
Lea74: bit ism_r_handshake
|
|
bmi Lea7e
|
|
dey
|
|
bpl Lea74
|
|
bra Lea5a
|
|
|
|
Lea7e: lda ism_r_mark
|
|
cmp Dea38,x
|
|
bne Lea5a
|
|
dex
|
|
bne Lea74
|
|
|
|
; read first 256 bytes, two at a time
|
|
Lea89: bit ism_r_handshake
|
|
bvc Lea89
|
|
lda ism_r_data
|
|
ldx ism_r_data
|
|
sta (Zab)
|
|
inc Zab
|
|
txa
|
|
sta (Zab)
|
|
inc Zab
|
|
bne Lea89
|
|
|
|
; read second 256 bytes, two at a time
|
|
Lea9f: bit ism_r_handshake
|
|
bvc Lea9f
|
|
lda ism_r_data
|
|
ldx ism_r_data
|
|
sta (Zaf)
|
|
inc Zaf
|
|
txa
|
|
sta (Zaf)
|
|
inc Zaf
|
|
bne Lea9f
|
|
|
|
Leab5: bit ism_r_handshake
|
|
bpl Leab5
|
|
lda ism_r_data
|
|
sta Z1e
|
|
Leabf: lda ism_r_handshake
|
|
bpl Leabf
|
|
ldy ism_r_data
|
|
sty Z1f
|
|
|
|
ldy ism_r_error
|
|
sty Z20
|
|
sta Z21
|
|
and #$22
|
|
bne Leae0
|
|
|
|
lda #$18 ; clear write and action bits
|
|
sta ism_w_zeros
|
|
stz Z57
|
|
jsr Sd76e
|
|
clc
|
|
rts
|
|
|
|
|
|
Leae0: lda #$18
|
|
sta iwm_ph3_off
|
|
jsr Sd76e
|
|
lda #$10
|
|
ora Z57
|
|
sta Z57
|
|
sec
|
|
rts
|
|
|
|
|
|
; write data field, MFM
|
|
Leaf0: lda #$f0
|
|
sta ism_w_phase
|
|
bit ism_r_error
|
|
lda #$18
|
|
sta ism_w_zeros
|
|
lda #$10
|
|
sta ism_w_ones
|
|
lda #$01
|
|
sta ism_w_ones
|
|
sta ism_w_zeros
|
|
bit ism_r_error
|
|
ldy #$24
|
|
Leb0f: lda ism_r_handshake
|
|
lda ism_r_handshake
|
|
lda ism_r_handshake
|
|
dey
|
|
bne Leb0f
|
|
|
|
stz ism_w_data
|
|
stz ism_w_data
|
|
lda #$08
|
|
sta ism_w_ones
|
|
ldx #$0a
|
|
Leb28: bit ism_r_handshake
|
|
bpl Leb28
|
|
stz ism_w_data
|
|
dex
|
|
bne Leb28
|
|
ldx #$03
|
|
Leb35: bit ism_r_handshake
|
|
bpl Leb35
|
|
lda #$a1
|
|
sta ism_w_mark
|
|
dex
|
|
bne Leb35
|
|
Leb42: bit ism_r_handshake
|
|
bpl Leb42
|
|
lda #$fb
|
|
sta ism_w_data
|
|
|
|
; write first 256 bytes
|
|
ldy #$00
|
|
Leb4e: lda (Zab),y
|
|
Leb50: bit ism_r_handshake
|
|
bpl Leb50
|
|
sta ism_w_data
|
|
iny
|
|
bne Leb4e
|
|
|
|
; write last 256 bytes
|
|
Leb5b: lda (Zaf),y
|
|
Leb5d: bit ism_r_handshake
|
|
bpl Leb5d
|
|
sta ism_w_data
|
|
iny
|
|
bne Leb5b
|
|
|
|
Leb68: bit ism_r_handshake
|
|
bpl Leb68
|
|
stz ism_w_crc
|
|
|
|
ldx #$04
|
|
lda #$4e
|
|
Leb74: ldy ism_r_handshake
|
|
bpl Leb74
|
|
sta ism_w_data
|
|
dex
|
|
bne Leb74
|
|
|
|
Leb7f: bit ism_r_handshake
|
|
bvc Leb7f
|
|
lda #$18
|
|
sta ism_w_zeros
|
|
tya
|
|
and #$20
|
|
clc
|
|
beq Leb94
|
|
lda iwm_sel_drive_1
|
|
sta Z20
|
|
Leb94: php
|
|
ldx #$78
|
|
Leb97: bne Leb99
|
|
Leb99: nop
|
|
dex
|
|
bne Leb97
|
|
jsr Sd76e
|
|
plp
|
|
rts
|
|
|
|
|
|
cmd_control:
|
|
ldx Z05
|
|
cpx #$14
|
|
bcs Lebca
|
|
lda Z2f
|
|
bpl Lebb5
|
|
bit Debd3,x
|
|
bmi Lebca
|
|
bvc Lebb5
|
|
bra Lebca
|
|
Lebb5: ldx Z0c
|
|
cpx #$04
|
|
bcs Lebce
|
|
lda #$06
|
|
sta Z01
|
|
Lebbf: lda Z01
|
|
bpl Lebbf
|
|
lda Z05
|
|
asl
|
|
tax
|
|
jmp (Debe7,x)
|
|
|
|
Lebca: lda #$21
|
|
bra Lebd0
|
|
Lebce: lda #$22
|
|
Lebd0: jmp Sd297
|
|
|
|
Debd3: fcb $80,$80,$80,$80,$80,$80,$80,$80
|
|
fcb $80,$80,$80,$80,$00,$80,$00,$00
|
|
fcb $00,$00,$00,$00
|
|
|
|
|
|
Debe7: fdb Lec64
|
|
fdb Lebca
|
|
fdb Lebca
|
|
fdb Lebca
|
|
fdb Lec77 ; eject (Apple 3.5, UniDisk 3.5)
|
|
fdb Lebca ; sethook (Apple 3.5), execute (UniDisk 3.5)
|
|
fdb Lebca ; resethook (Apple 3.5), setaddress (Unidisk 3.5)
|
|
fdb Lebca ; setmark (Apple 3.5), download (Unidisk 3.5)
|
|
fdb Lebca ; resetmark (Apple 3.5), unidiskstat (UniDisk 3.5)
|
|
fdb Lec51 ; setsides (Apple 3.5)
|
|
fdb Lec39 ; setinterleave (Apple 3.5)
|
|
fdb Lebca
|
|
fdb Lec9e
|
|
fdb ResetMark
|
|
fdb ResetHook
|
|
fdb Lec28
|
|
fdb Lecaa
|
|
fdb Lecc0
|
|
fdb Lec86
|
|
fdb Lec95
|
|
|
|
|
|
ResetMark:
|
|
ldx #$16
|
|
Lec11: lda Z8d+$8000-1,x
|
|
sta Z8d-1,x
|
|
dex
|
|
bne Lec11
|
|
bra Lec5f
|
|
|
|
|
|
ResetHook:
|
|
ldx Z70+$8000
|
|
Lec1e: lda Z71+$8000,x
|
|
sta Z71,x
|
|
dex
|
|
bne Lec1e
|
|
bra Lec5f
|
|
|
|
|
|
Lec28: lda #$01
|
|
jsr Secfe
|
|
lda D0c00
|
|
and #$80
|
|
sta Z5f
|
|
jsr Sd97c
|
|
bra Lec5f
|
|
|
|
|
|
Lec39: lda #$01
|
|
jsr Secfe
|
|
bne Lebce
|
|
lda #$32
|
|
ldy D0c00
|
|
cpy #$0d
|
|
bcs Lebd0
|
|
sty Z62
|
|
ldx Z2f
|
|
sty Z4a,x
|
|
bra Lec5f
|
|
|
|
|
|
Lec51: lda #$01
|
|
jsr Secfe
|
|
bne Lecbd
|
|
lda D0c00
|
|
and #$80
|
|
sta Z63
|
|
Lec5f: lda #$00
|
|
jmp Lebd0
|
|
|
|
|
|
Lec64: ldx Z2f
|
|
jsr Sd55a
|
|
jsr Sd905
|
|
bpl Lec71
|
|
jsr Sd4cc
|
|
Lec71: bcc Lec76
|
|
jmp Sd297
|
|
|
|
Lec76: rts
|
|
|
|
|
|
Lec77: ldx Z2f
|
|
jsr Sd94d
|
|
jsr Sed05
|
|
ldx Z2f
|
|
jsr Sda30
|
|
clc
|
|
rts
|
|
|
|
|
|
Lec86: jsr Sece3
|
|
sta Z59
|
|
stx Z5a
|
|
sty Z5b
|
|
php
|
|
pla
|
|
sta Z5c
|
|
|
|
Lec93: clc
|
|
rts
|
|
|
|
|
|
Lec95: jsr Lecaa
|
|
lda (Z64)
|
|
sta Z58
|
|
clc
|
|
rts
|
|
|
|
Lec9e: lda #$03
|
|
jsr Secac
|
|
lda D0c04
|
|
sta (Z64)
|
|
clc
|
|
rts
|
|
|
|
Lecaa: lda #$02
|
|
|
|
Secac: jsr Secfe
|
|
bne Lecbd
|
|
lda D0c00
|
|
sta Z64
|
|
lda D0c01
|
|
sta Z65
|
|
clc
|
|
rts
|
|
|
|
Lecbd: jmp Lebce
|
|
|
|
Lecc0: ldx Z65
|
|
ldy #$00
|
|
lda #$00
|
|
sta Zad
|
|
lda #$0c
|
|
sta Zae
|
|
Leccc: lda (Zad),y
|
|
sta (Z64),y
|
|
iny
|
|
bne Lecd7
|
|
inc Zae
|
|
inc Z65
|
|
Lecd7: dec Z0b
|
|
bne Leccc
|
|
dec Z0c
|
|
bpl Leccc
|
|
stx Z65
|
|
clc
|
|
rts
|
|
|
|
Sece3: lda D0c04
|
|
sta Zad
|
|
lda D0c05
|
|
sta Zae
|
|
lda D0c03
|
|
pha
|
|
ldx D0c01
|
|
ldy D0c02
|
|
lda D0c00
|
|
plp
|
|
jmp (Zad)
|
|
|
|
Secfe: ldy Z0c
|
|
bne Led04
|
|
cmp Z0b
|
|
Led04: rts
|
|
|
|
Sed05: stx Z6f
|
|
lda #$02
|
|
jsr Sd892
|
|
bcs Led42
|
|
lda #$08
|
|
jsr Sd892
|
|
bcs Led1f
|
|
lda #$09
|
|
jsr Sd888
|
|
lda #$c8
|
|
jsr Sf735
|
|
Led1f: lda #$03
|
|
sta Z58
|
|
lda #$0d
|
|
jsr Sd888
|
|
ldy #$c3
|
|
Led2a: lda #$0a
|
|
jsr Sf735
|
|
lda #$02
|
|
jsr Sd892
|
|
bcs Led3f
|
|
dey
|
|
bne Led2a
|
|
lda #$27
|
|
sta Z56
|
|
bra Led42
|
|
Led3f: jsr Sd55a
|
|
Led42: lda #$80
|
|
sta Z6f
|
|
clc
|
|
Ded47: rts
|
|
|
|
|
|
controller_model_name:
|
|
fcb "APPLE UNIVERSAL 3.5 CONTROLLER"
|
|
controller_model_name_len equ *-controller_model_name
|
|
|
|
|
|
cmd_status:
|
|
stz Z0b
|
|
stz Z0c
|
|
ldx Z2f
|
|
bpl Led89
|
|
lda Z05
|
|
beq Ledb4
|
|
cmp #$01
|
|
bne Led9c
|
|
|
|
; status $01 - get Device Control Block
|
|
ldx #controller_model_name_len
|
|
stx D0c00
|
|
Led7b: lda controller_model_name-1,x
|
|
sta D0c00,x
|
|
dex
|
|
bne Led7b
|
|
|
|
ldx #$1e
|
|
inx
|
|
bra Leda1
|
|
|
|
Led89: ldx Z05
|
|
beq Lede4
|
|
cpx #$03
|
|
beq Lede4
|
|
cpx #$05
|
|
bne Led98
|
|
jmp Ledd6
|
|
|
|
Led98: cpx #$06
|
|
bne Led9c
|
|
Led9c: lda #$21
|
|
jmp Sd297
|
|
|
|
Leda1: stx Z0b
|
|
lda #$06
|
|
sta Z01
|
|
ldx Z2f
|
|
bit Zb5
|
|
bmi Ledb2
|
|
jsr Sd835
|
|
clc
|
|
rts
|
|
|
|
Ledb2: clc
|
|
rts
|
|
|
|
; status $00 - get device status
|
|
Ledb4: lda Z33
|
|
sta D0c00
|
|
|
|
ldx #$01
|
|
lda #$00
|
|
Ledbd: sta D0c00,x
|
|
inx
|
|
cpx #$08
|
|
bne Ledbd
|
|
|
|
lda #$01
|
|
sta D0c02
|
|
lda #$00
|
|
sta D0c04
|
|
lda #$01
|
|
sta D0c05
|
|
Ledd4: bra Leda1
|
|
Ledd6: ldx #$00
|
|
Ledd8: lda Z56,x
|
|
sta D0c00,x
|
|
inx
|
|
cpx #$08
|
|
bcc Ledd8
|
|
bra Leda1
|
|
Lede4: ldx Z2f
|
|
jsr Sd94d
|
|
php
|
|
and Z46,x
|
|
lsr
|
|
lsr
|
|
lsr
|
|
ora #$e8
|
|
bvs Ledf5
|
|
ora #$10
|
|
Ledf5: plp
|
|
bmi Ledfe
|
|
bvs Lee04
|
|
bit Z3f
|
|
bvc Lee04
|
|
Ledfe: bit Z02
|
|
bvc Lee04
|
|
ora #$01
|
|
Lee04: sta D0c00
|
|
jsr Sd905
|
|
bpl Lee0f
|
|
jsr Sd4cc
|
|
Lee0f: ldx #$04
|
|
ldy Z2f
|
|
lda Z42,y
|
|
sta D0c01
|
|
lda Z44,y
|
|
sta D0c02
|
|
stz D0c03
|
|
bit Z02
|
|
bvc Lee2a
|
|
stz D0c04
|
|
inx
|
|
Lee2a: lda Z05
|
|
beq Ledd4
|
|
ldy Z2f
|
|
lda Z34,y
|
|
ldy #$00
|
|
bit #$02
|
|
beq Lee3b
|
|
ldy #Dee61-Dee4b
|
|
Lee3b: lda Dee4b,y
|
|
sta D0c00,x
|
|
inx
|
|
iny
|
|
cmp #$ff
|
|
bne Lee3b
|
|
dex
|
|
jmp Leda1
|
|
|
|
|
|
Dee4b: fcb $08,"DISK 3.5 ",$01,$c0,$10,$10,$ff
|
|
Dee61: fcb $08,"DISK 3.5HD ",$01,$c1,$10,$10,$ff
|
|
|
|
|
|
cmd_get_format_option:
|
|
ldx Z2f
|
|
bpl Lee80
|
|
lda #$11
|
|
jmp Sd297
|
|
|
|
Lee80: jsr Sd905
|
|
bpl Lee88
|
|
jsr Sd4cc
|
|
Lee88: ldx #$ff
|
|
Lee8a: stz D0c00,x
|
|
stz D0d00,x
|
|
dex
|
|
bne Lee8a
|
|
lda #$08
|
|
sta Zaf
|
|
lda #$0c
|
|
sta Zb0
|
|
stz D0c00
|
|
stz D0c02
|
|
ldx Z2f
|
|
lda Z40,x
|
|
sta D0c06
|
|
lda #$02
|
|
bit Z34,x
|
|
beq Leecf
|
|
lda #$0a
|
|
sta D0c04
|
|
lda Z3a,x
|
|
bit #$40
|
|
bne Leebe
|
|
lda #$06
|
|
sta D0c04
|
|
Leebe: lda #$0a
|
|
jsr Sef01
|
|
lda #$06
|
|
jsr Sef01
|
|
lda #$08
|
|
jsr Sef01
|
|
bra Leed9
|
|
Leecf: lda #$06
|
|
sta D0c04
|
|
lda #$06
|
|
jsr Sef01
|
|
Leed9: ldy #$00
|
|
lda D0c00
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
bcc Leee5
|
|
iny
|
|
Leee5: clc
|
|
adc #$08
|
|
cpy Z06
|
|
bcc Leef7
|
|
beq Leef1
|
|
Leeee: jmp Ld29d
|
|
|
|
Leef1: cmp Z05
|
|
beq Leef7
|
|
bcs Leeee
|
|
Leef7: sta Z0b
|
|
sty Z0c
|
|
lda #$06
|
|
sta Z01
|
|
clc
|
|
rts
|
|
|
|
Sef01: inc D0c00
|
|
inc D0c02
|
|
ldy #$00
|
|
sta (Zaf)
|
|
tax
|
|
lda Def55,x
|
|
and #$0f
|
|
ldy #$04
|
|
sta (Zaf),y
|
|
lda Def55,x
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
ldy #$0c
|
|
sta (Zaf),y
|
|
lda Def63,x
|
|
ldy #$06
|
|
sta (Zaf),y
|
|
iny
|
|
lda Def64,x
|
|
sta (Zaf),y
|
|
ldy #$0b
|
|
lda #$02
|
|
sta (Zaf),y
|
|
lda Def64,x
|
|
lsr
|
|
ldy #$0f
|
|
sta (Zaf),y
|
|
lda Def63,x
|
|
ror
|
|
dey
|
|
sta (Zaf),y
|
|
lda Zaf
|
|
clc
|
|
adc #$10
|
|
sta Zaf
|
|
bcc Lef4d
|
|
inc Zb0
|
|
Lef4d: lda Def56,x
|
|
beq Lef54
|
|
bpl Sef01
|
|
Lef54: rts
|
|
|
|
Def55: fcb $00
|
|
Def56: fcb $00,$25,$00,$45,$00,$25,$04,$16
|
|
fcb $00,$24,$0c,$14,$00
|
|
|
|
Def63: fcb $00
|
|
Def64: fcb $00,$20,$03,$40,$06,$40,$06,$a0
|
|
fcb $05,$40,$0b,$40,$0b,$00,$00
|
|
|
|
|
|
cmd_set_format_option:
|
|
lda Z06
|
|
beq Lef7a
|
|
Lef77: jmp Lebca
|
|
|
|
Lef7a: lda Z05
|
|
cmp #$0d
|
|
bcs Lef77
|
|
and #$01
|
|
bne Lef77
|
|
ldx Z2f
|
|
lda Z05
|
|
bne Lef93
|
|
lda #$02
|
|
sta Z48,x
|
|
jsr Sf0a0
|
|
bra Lefa9
|
|
Lef93: sta Z48,x
|
|
tay
|
|
lda Def55,y
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
sta Z4a,x
|
|
lda Z07
|
|
beq Lefa9
|
|
cmp #$0d
|
|
bcs Lef77
|
|
sta Z4a,x
|
|
Lefa9: stz Z01
|
|
clc
|
|
rts
|
|
|
|
|
|
cmd_format:
|
|
jmp Z7e ; hook to immediately following Lefb0
|
|
|
|
Lefb0: lda #$01
|
|
ldx Z2f
|
|
bmi Lefc8
|
|
jsr Sda30
|
|
lda #$03
|
|
jsr Sd888
|
|
jsr Sd80b
|
|
ldx Z2f
|
|
jsr Sd905
|
|
bcc Lefcb
|
|
Lefc8: jmp Sd297
|
|
|
|
Lefcb: bne Lefc8
|
|
lda #$80
|
|
sta Z0f,x
|
|
lda #$02
|
|
bit Z34,x
|
|
bne Lefe9
|
|
lda Z48,x
|
|
beq Lefdf
|
|
cmp #$08
|
|
bcs Lf004
|
|
Lefdf: jsr Sefe6
|
|
bcs Lf004
|
|
bra Lf029
|
|
|
|
Sefe6: jmp (Zba)
|
|
|
|
Lefe9: lda #$0f
|
|
jsr Sd892
|
|
bcc Lf008
|
|
ldy Z48,x
|
|
cpy #$08
|
|
bne Lf000
|
|
lda #$50
|
|
sta Zb6
|
|
lda #$20
|
|
sta Z3a,x
|
|
bra Lf022
|
|
Lf000: cpy #$08
|
|
bcc Lf029
|
|
Lf004: lda #$21
|
|
bra Lefc8
|
|
Lf008: lda #$40
|
|
sta Z3a,x
|
|
lda #$02
|
|
sta Z62
|
|
lda #$65
|
|
sta Zb6
|
|
ldx Z2f
|
|
lda Z48,x
|
|
beq Lf022
|
|
cmp #$0a
|
|
beq Lf022
|
|
cmp #$0c
|
|
bne Lf004
|
|
Lf022: jsr Sd7e8
|
|
stz Z66
|
|
stz Z67
|
|
Lf029: jsr Sda30
|
|
jsr Sd576
|
|
jsr Sd60b
|
|
bcs Lf091
|
|
jsr Sd89f
|
|
bcs Lf091
|
|
ldy Z2f
|
|
ldx Z48,y
|
|
beq Lf04a
|
|
lda Z4a,y
|
|
sta Z62
|
|
cpx #$02
|
|
bne Lf04a
|
|
stz Z63
|
|
Lf04a: stz Z16
|
|
stz Z14
|
|
Lf04e: lda #$03
|
|
sta Z58
|
|
Lf052: jsr Sf0f2
|
|
bcs Lf091
|
|
jsr Sf1e7
|
|
bcc Lf063
|
|
jsr Sde3a
|
|
bcc Lf052
|
|
bra Lf091
|
|
Lf063: bit Z63
|
|
bmi Lf06e
|
|
lda #$20
|
|
sta Z16
|
|
jsr Sf0b1
|
|
Lf06e: lda #$20
|
|
eor Z16
|
|
sta Z16
|
|
bne Lf04e
|
|
inc Z14
|
|
lda Z14
|
|
cmp #$50
|
|
bcc Lf04e
|
|
stz Z16
|
|
stz Z14
|
|
ldx Z2f
|
|
jsr Sf0a0
|
|
jsr Sd60b
|
|
clc
|
|
jsr Sd4cc
|
|
bcs Lf093
|
|
rts
|
|
|
|
Lf091: lda #$27
|
|
Lf093: pha
|
|
ldx Z2f
|
|
jsr Sf0a0
|
|
jsr Sed05
|
|
pla
|
|
jmp Sd297
|
|
|
|
Sf0a0: lda Z48,x
|
|
beq Lf0b0
|
|
lda #$80
|
|
sta Z63
|
|
lda #$04
|
|
sta Z62
|
|
stz Z4a,x
|
|
stz Z48,x
|
|
Lf0b0: rts
|
|
|
|
Sf0b1: bit Zb4
|
|
bmi Lf0e7
|
|
lda Z14
|
|
lsr
|
|
lsr
|
|
lsr
|
|
and #$0e
|
|
sta Z2c
|
|
jsr Se600
|
|
ldx Z2c
|
|
lda Df0e9,x
|
|
tay
|
|
lda Df0e8,x
|
|
tax
|
|
lda #$bb
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
Lf0d3: bit iwm_q6l
|
|
bpl Lf0d3
|
|
sta iwm_q6h
|
|
dex
|
|
bne Lf0d3
|
|
dey
|
|
bne Lf0d3
|
|
bit iwm_q7l
|
|
bit iwm_q6l
|
|
Lf0e7: rts
|
|
|
|
Df0e8: fcb $94
|
|
Df0e9: fcb $25,$74,$22,$54,$1f,$34,$1c,$14
|
|
fcb $19
|
|
|
|
|
|
; write track
|
|
Sf0f2: bit Zb4
|
|
bpl Lf0f9
|
|
jmp Lf2a3
|
|
|
|
; write track GCR
|
|
Lf0f9: jmp Z81 ; hook to immediately following Lf0fc
|
|
|
|
Lf0fc: jsr Sd5d8
|
|
jsr Sf22b
|
|
jsr Sd8c1
|
|
stz Z57
|
|
lda Z16
|
|
bne Lf11e
|
|
lda Z14
|
|
and #$0f
|
|
bne Lf11e
|
|
lda Z14
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
lda Df1e2,x
|
|
jsr Sf730
|
|
Lf11e: jsr Se600
|
|
lda Z1a
|
|
sta Z1c
|
|
ldy #$c8
|
|
lda #$ff
|
|
bit iwm_q6h
|
|
sta iwm_q7h
|
|
Lf12f: ldx #$04
|
|
Lf131: lda Z92,x
|
|
Lf133: bit iwm_q6l
|
|
bpl Lf133
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Lf131
|
|
dey
|
|
bne Lf12f
|
|
ldx #$03
|
|
Lf143: lda Z9f,x
|
|
Lf145: bit iwm_q6l
|
|
bpl Lf145
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Lf143
|
|
ldx #$04
|
|
Lf152: ldy Z27,x
|
|
lda Dd000,y
|
|
Lf157: bit iwm_q6l
|
|
bpl Lf157
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Lf152
|
|
ldx #$0b
|
|
Lf164: lda Z8e,x
|
|
Lf166: bit iwm_q6l
|
|
bpl Lf166
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Lf164
|
|
ldx Z2a
|
|
lda Dd000,x
|
|
Lf176: bit iwm_q6l
|
|
bpl Lf176
|
|
sta iwm_q6h
|
|
ldx #$03
|
|
ldy #$eb
|
|
bra Lf186
|
|
Lf184: ldy #$ea
|
|
Lf186: lda #$96
|
|
Lf188: bit iwm_q6l
|
|
bpl Lf188
|
|
sta iwm_q6h
|
|
dey
|
|
bne Lf186
|
|
dex
|
|
bne Lf184
|
|
ldx #$01
|
|
Lf198: lda Z97+1,x
|
|
Lf19a: bit iwm_q6l
|
|
bpl Lf19a
|
|
sta iwm_q6h
|
|
dex
|
|
bpl Lf198
|
|
dec Z1c
|
|
beq Lf1c2
|
|
lda Z2a
|
|
eor Z27
|
|
ldy Z1c
|
|
ldx D05ff,y
|
|
stx Z2a
|
|
eor Z2a
|
|
ldy #$ff
|
|
sty iwm_q6h
|
|
sta Z27
|
|
ldy #$0a
|
|
jmp Lf12f
|
|
|
|
Lf1c2: lda #$40
|
|
and iwm_q6l
|
|
eor #$40
|
|
tsb Z57
|
|
Lf1cb: lda iwm_q6l
|
|
bpl Lf1cb
|
|
lda #$ff
|
|
sta iwm_q6h
|
|
Lf1d5: bit iwm_q6l
|
|
bvs Lf1d5
|
|
bit iwm_q7l
|
|
lda Z57
|
|
cmp #$01
|
|
rts
|
|
|
|
Df1e2: fcb $96,$19,$19,$19,$19
|
|
|
|
|
|
; verify
|
|
Sf1e7: jmp Z84 ; hook to immediately following Lf1ea
|
|
|
|
Lf1ea: jsr Sf73c
|
|
lda #$00
|
|
sta Zab
|
|
sta Zaf
|
|
lda #$0c
|
|
sta Zac
|
|
sta Zb0
|
|
jsr Se600
|
|
ldx Z1a
|
|
stx Z1c
|
|
Lf200: stz D0620,x
|
|
dex
|
|
bpl Lf200
|
|
Lf206: jsr Se500
|
|
bcs Lf229
|
|
ldx Z2a
|
|
cpx Z1a
|
|
bcs Lf226
|
|
lda D0620,x
|
|
bmi Lf226
|
|
lda #$ff
|
|
sta D0620,x
|
|
jsr Se60f
|
|
bcs Lf229
|
|
dec Z1c
|
|
bne Lf206
|
|
clc
|
|
rts
|
|
|
|
Lf226: jsr Sd7a8
|
|
Lf229: sec
|
|
rts
|
|
|
|
Sf22b: lda Z14
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
lda Dde35,x
|
|
sta Z1a
|
|
jsr Sf262
|
|
lda Z14
|
|
and #$3f
|
|
sta Z2b
|
|
stz Z2a
|
|
lda Z14
|
|
and #$40
|
|
beq Lf249
|
|
inc
|
|
Lf249: ldx Z16
|
|
beq Lf24f
|
|
ora #$20
|
|
Lf24f: sta Z29
|
|
lda Z62
|
|
bit Z63
|
|
bpl Lf259
|
|
ora #$20
|
|
Lf259: sta Z28
|
|
eor Z29
|
|
eor Z2b
|
|
sta Z27
|
|
rts
|
|
|
|
Sf262: lda Z62
|
|
bne Lf26a
|
|
lda #$01
|
|
sta Z62
|
|
Lf26a: lda Z1a
|
|
dec
|
|
dec
|
|
cmp Z62
|
|
bcs Lf274
|
|
sta Z62
|
|
Lf274: ldx Z1a
|
|
inx
|
|
lda #$ff
|
|
Lf279: sta D0600,x
|
|
dex
|
|
bpl Lf279
|
|
ldx Z1a
|
|
dex
|
|
ldy #$00
|
|
Lf284: tya
|
|
sta D0600,x
|
|
iny
|
|
cpy Z1a
|
|
beq Lf2a1
|
|
txa
|
|
sec
|
|
sbc Z62
|
|
tax
|
|
Lf292: bpl Lf299
|
|
txa
|
|
clc
|
|
adc Z1a
|
|
tax
|
|
Lf299: bit D0600,x
|
|
bmi Lf284
|
|
dex
|
|
bra Lf292
|
|
Lf2a1: clc
|
|
Lf2a2: rts
|
|
|
|
|
|
; write track, MFM
|
|
Lf2a3: jsr Sd5d8
|
|
stz Zb5
|
|
lda #$12
|
|
ldx Z2f
|
|
ldy Z48,x
|
|
cpy #$08
|
|
bne Lf2b6
|
|
lda #$09
|
|
dec Zb5
|
|
Lf2b6: sta Z1a
|
|
sta Z1c
|
|
jsr Sf262
|
|
jsr Sd89f
|
|
bcs Lf2a2
|
|
lda Z14
|
|
bne Lf2d4
|
|
lda Z16
|
|
bne Lf2d4
|
|
lda #$96
|
|
jsr Sf730
|
|
lda #$96
|
|
jsr Sf730
|
|
Lf2d4: jsr Se600
|
|
jsr Sd714
|
|
bit iwm_sel_drive_1
|
|
lda #$18
|
|
sta iwm_ph3_off
|
|
lda #$10
|
|
sta iwm_ph3_on
|
|
lda #$01
|
|
sta iwm_ph3_on
|
|
sta iwm_ph3_off
|
|
sta Z2a
|
|
bit iwm_sel_drive_1
|
|
ldy #$34
|
|
ldx #$35
|
|
bit Zb5
|
|
bpl Lf300
|
|
ldy #$9a
|
|
ldx #$1a
|
|
Lf300: lda #$4e
|
|
sta iwm_ph0_off
|
|
sta iwm_ph0_off
|
|
lda #$08
|
|
sta iwm_ph3_on
|
|
Lf30d: bit iwm_q7h
|
|
bpl Lf30d
|
|
beq Lf324
|
|
lda #$4e
|
|
sta iwm_ph0_off
|
|
lda #$08
|
|
dey
|
|
bne Lf30d
|
|
dex
|
|
bne Lf30d
|
|
jmp Lf4ac
|
|
|
|
Lf324: lda #$4e
|
|
sta iwm_ph0_off
|
|
lda #$08
|
|
Lf32b: bit iwm_q7h
|
|
bpl Lf32b
|
|
bne Lf342
|
|
lda #$4e
|
|
sta iwm_ph0_off
|
|
lda #$08
|
|
dey
|
|
bne Lf32b
|
|
dex
|
|
bne Lf32b
|
|
jmp Lf4ac
|
|
|
|
Lf342: lda #$4e
|
|
sta iwm_ph0_off
|
|
lda #$f0
|
|
sta iwm_ph2_off
|
|
ldx #$4f
|
|
lda #$4e
|
|
Lf350: bit iwm_q7h
|
|
bpl Lf350
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf350
|
|
ldx #$0c
|
|
Lf35d: bit iwm_q7h
|
|
bpl Lf35d
|
|
stz iwm_ph0_off
|
|
dex
|
|
bne Lf35d
|
|
ldx #$03
|
|
Lf36a: bit iwm_q7h
|
|
bpl Lf36a
|
|
lda #$c2
|
|
sta iwm_ph0_on
|
|
dex
|
|
bne Lf36a
|
|
Lf377: bit iwm_q7h
|
|
bpl Lf377
|
|
lda #$fc
|
|
sta iwm_ph0_off
|
|
ldx #$32
|
|
lda #$4e
|
|
Lf385: bit iwm_q7h
|
|
bpl Lf385
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf385
|
|
bra Lf3a1
|
|
Lf392: ldx Zb6
|
|
lda #$4e
|
|
Lf396: bit iwm_q7h
|
|
bpl Lf396
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf396
|
|
Lf3a1: ldx #$0c
|
|
Lf3a3: bit iwm_q7h
|
|
bpl Lf3a3
|
|
stz iwm_ph0_off
|
|
dex
|
|
bne Lf3a3
|
|
ldx #$03
|
|
Lf3b0: bit iwm_q7h
|
|
bpl Lf3b0
|
|
lda #$a1
|
|
sta iwm_ph0_on
|
|
dex
|
|
bne Lf3b0
|
|
Lf3bd: bit iwm_q7h
|
|
bpl Lf3bd
|
|
lda #$fe
|
|
sta iwm_ph0_off
|
|
lda Z14
|
|
Lf3c9: bit iwm_q7h
|
|
bpl Lf3c9
|
|
sta iwm_ph0_off
|
|
lda #$00
|
|
ldx Z16
|
|
beq Lf3d8
|
|
inc
|
|
Lf3d8: bit iwm_q7h
|
|
bpl Lf3d8
|
|
sta iwm_ph0_off
|
|
lda Z2a
|
|
Lf3e2: bit iwm_q7h
|
|
bpl Lf3e2
|
|
sta iwm_ph0_off
|
|
Lf3ea: bit iwm_q7h
|
|
bpl Lf3ea
|
|
lda #$02
|
|
sta iwm_ph0_off
|
|
Lf3f4: bit iwm_q7h
|
|
bpl Lf3f4
|
|
stz iwm_ph1_off
|
|
ldx #$16
|
|
lda #$4e
|
|
Lf400: bit iwm_q7h
|
|
bpl Lf400
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf400
|
|
ldx #$0c
|
|
Lf40d: bit iwm_q7h
|
|
bpl Lf40d
|
|
stz iwm_ph0_off
|
|
dex
|
|
bne Lf40d
|
|
ldx #$03
|
|
Lf41a: bit iwm_q7h
|
|
bpl Lf41a
|
|
lda #$a1
|
|
sta iwm_ph0_on
|
|
dex
|
|
bne Lf41a
|
|
Lf427: bit iwm_q7h
|
|
bpl Lf427
|
|
lda #$fb
|
|
sta iwm_ph0_off
|
|
ldx #$00
|
|
lda #$00
|
|
Lf435: bit iwm_q7h
|
|
bpl Lf435
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf435
|
|
Lf440: bit iwm_q7h
|
|
bpl Lf440
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf440
|
|
Lf44b: bit iwm_q7h
|
|
bpl Lf44b
|
|
stz iwm_ph1_off
|
|
dec Z1c
|
|
beq Lf462
|
|
ldy Z1c
|
|
lda D05ff,y
|
|
inc
|
|
sta Z2a
|
|
jmp Lf392
|
|
|
|
Lf462: lda #$04
|
|
sta Z2c
|
|
ldx #$05
|
|
Lf468: bit iwm_q7h
|
|
bpl Lf468
|
|
lda #$4e
|
|
sta iwm_ph0_off
|
|
dex
|
|
bne Lf468
|
|
ldy #$00
|
|
lda #$f4
|
|
sta iwm_ph2_off
|
|
ldx #$4e
|
|
Lf47e: lda iwm_q7h
|
|
bpl Lf47e
|
|
stx iwm_ph0_off
|
|
bit #$08
|
|
bne Lf493
|
|
dey
|
|
bne Lf47e
|
|
dec Z2c
|
|
bne Lf47e
|
|
bra Lf4ac
|
|
Lf493: and #$20
|
|
beq Lf49c
|
|
lda #$34
|
|
sec
|
|
bra Lf49f
|
|
Lf49c: lda #$00
|
|
clc
|
|
Lf49f: sta Z57
|
|
php
|
|
lda #$18
|
|
sta iwm_ph3_off
|
|
jsr Sd76e
|
|
plp
|
|
rts
|
|
|
|
Lf4ac: lda #$35
|
|
sec
|
|
bra Lf49f
|
|
|
|
fillto $f500
|
|
|
|
Sf500: stz Za4
|
|
ldx #$08
|
|
lda Zae
|
|
Lf506: asl Zad
|
|
rol
|
|
cmp #$07
|
|
bcc Lf50f
|
|
sbc #$07
|
|
Lf50f: rol Za4
|
|
dex
|
|
bne Lf506
|
|
sta Za5
|
|
rts
|
|
|
|
Sf517: ldx #$07
|
|
Lf519: stz Za3,x
|
|
dex
|
|
bne Lf519
|
|
stz Z1e
|
|
stz Z57
|
|
jsr smartport_bus_enable
|
|
tsx
|
|
Lf526: stz D0100,x
|
|
dex
|
|
cpx #$e1
|
|
bcs Lf526
|
|
bit iwm_q6h
|
|
ldx Z1e
|
|
Lf533: lda #$64
|
|
Lf535: ldy #$cd
|
|
Lf537: bit iwm_q7l
|
|
bmi Lf547
|
|
dey
|
|
bne Lf537
|
|
dec
|
|
bne Lf535
|
|
dex
|
|
bne Lf533
|
|
bra Lf550
|
|
Lf547: lda iwm_ph0_on
|
|
ldy #$00
|
|
Lf54c: lda iwm_q6l
|
|
dey
|
|
Lf550: beq Lf5ca
|
|
cmp #$c3
|
|
bne Lf54c
|
|
ldy #$07
|
|
Lf558: lda iwm_q6l
|
|
bpl Lf558
|
|
and #$7f
|
|
sta Za3,y
|
|
ora #$80
|
|
eor Z1e
|
|
sta Z1e
|
|
dey
|
|
bne Lf558
|
|
lda Za4
|
|
bmi Lf5c6
|
|
sta Z18
|
|
ldx Za5
|
|
beq Lf596
|
|
Lf575: lda iwm_q6l
|
|
bpl Lf575
|
|
asl
|
|
sta Z17
|
|
Lf57d: lda iwm_q6l
|
|
bpl Lf57d
|
|
asl Z17
|
|
bcs Lf588
|
|
and #$7f
|
|
Lf588: sta (Zab),y
|
|
eor Z1e
|
|
sta Z1e
|
|
iny
|
|
bne Lf593
|
|
inc Zac
|
|
Lf593: dex
|
|
bne Lf57d
|
|
Lf596: ldx #$07
|
|
dec Z18
|
|
bpl Lf575
|
|
Lf59c: lda iwm_q6l
|
|
bpl Lf59c
|
|
sta Z2c
|
|
Lf5a3: lda iwm_q6l
|
|
bpl Lf5a3
|
|
sec
|
|
rol
|
|
and Z2c
|
|
eor Z1e
|
|
bne Lf5d2
|
|
Lf5b0: lda iwm_q6l
|
|
bpl Lf5b0
|
|
cmp #$c8
|
|
bne Lf5ce
|
|
lda iwm_q6h
|
|
Lf5bc: lda iwm_q7l
|
|
bmi Lf5bc
|
|
lda iwm_ph0_off
|
|
clc
|
|
rts
|
|
|
|
Lf5c6: lda #$8a
|
|
bra Lf5d4
|
|
Lf5ca: lda #$80
|
|
bra Lf5d4
|
|
Lf5ce: lda #$81
|
|
bra Lf5d4
|
|
Lf5d2: lda #$83
|
|
Lf5d4: sta Z57
|
|
sec
|
|
rts
|
|
|
|
|
|
Sf5d8: bit iwm_q7l
|
|
bit iwm_q6l
|
|
jsr Sf6dc
|
|
jsr smartport_bus_enable
|
|
lda iwm_sel_drive_1
|
|
lda iwm_motor_on
|
|
bit iwm_q6h
|
|
ldy #$fa
|
|
Lf5ef: lda iwm_q7l
|
|
bmi Lf5fc
|
|
dey
|
|
bne Lf5ef
|
|
lda #$84
|
|
jmp Lf697
|
|
|
|
Lf5fc: lda iwm_ph0_on
|
|
|
|
; send SmartPort Bus sync
|
|
ldy #smartport_bus_sync_tab_len-1
|
|
lda #$ff
|
|
sta iwm_q7h
|
|
Lf606: lda smartport_bus_sync_tab,y
|
|
Lf609: bit iwm_q6l
|
|
bpl Lf609
|
|
sta iwm_q6h
|
|
dey
|
|
bpl Lf606
|
|
|
|
lda #$00
|
|
sta Z1e
|
|
lda Z2f
|
|
ora #$80
|
|
jsr Sf6cb
|
|
jsr Sf6c9
|
|
lda Z19
|
|
jsr Sf6cb
|
|
jsr Sf6c9
|
|
jsr Sf6c9
|
|
lda Za5
|
|
ora #$80
|
|
jsr Sf6cb
|
|
lda Za4
|
|
ora #$80
|
|
jsr Sf6cb
|
|
ldy #$00
|
|
ldx Za5
|
|
beq Lf64f
|
|
lda Z17
|
|
jsr Sf6d3
|
|
Lf646: lda (Zab),y
|
|
jsr Sf6cb
|
|
iny
|
|
dex
|
|
bne Lf646
|
|
Lf64f: dec Za4
|
|
bmi Lf674
|
|
lda Z18
|
|
jsr Sf6d3
|
|
lda #$01
|
|
sta Z18
|
|
ldx #$07
|
|
Lf65e: lda (Zab),y
|
|
jsr Sf6cb
|
|
lda (Zad),y
|
|
asl
|
|
rol Z18
|
|
iny
|
|
bne Lf66f
|
|
inc Zac
|
|
inc Zae
|
|
Lf66f: dex
|
|
bne Lf65e
|
|
beq Lf64f
|
|
Lf674: lda Z1e
|
|
ora #$aa
|
|
jsr Sf6d3
|
|
lda Z1e
|
|
lsr
|
|
ora #$aa
|
|
jsr Sf6d3
|
|
lda #$c8
|
|
jsr Sf6d3
|
|
Lf688: bit iwm_q6l
|
|
bvs Lf688
|
|
sta iwm_q6h
|
|
ldy #$fa
|
|
Lf692: dey
|
|
bne Lf69a
|
|
lda #$82
|
|
Lf697: sec
|
|
bra Lf6a2
|
|
Lf69a: lda iwm_q7l
|
|
bmi Lf692
|
|
lda #$00
|
|
clc
|
|
Lf6a2: bit iwm_ph0_off
|
|
bit iwm_q6l
|
|
sta Z57
|
|
rts
|
|
|
|
Sf6ab: stz Z2c
|
|
lda Za4
|
|
asl
|
|
rol Z2c
|
|
asl
|
|
rol Z2c
|
|
asl
|
|
rol Z2c
|
|
sec
|
|
sbc Za4
|
|
bcs Lf6bf
|
|
dec Z2c
|
|
Lf6bf: clc
|
|
adc Za5
|
|
bcc Lf6c6
|
|
inc Z2c
|
|
Lf6c6: ldy Z2c
|
|
rts
|
|
|
|
Sf6c9: lda #$80
|
|
|
|
Sf6cb: pha
|
|
eor Z1e
|
|
sta Z1e
|
|
pla
|
|
ora #$80
|
|
|
|
Sf6d3: bit iwm_q6l
|
|
bpl Sf6d3
|
|
sta iwm_q6h
|
|
rts
|
|
|
|
Sf6dc: lda Z6c
|
|
sta Zad
|
|
lda Z6d
|
|
sta Zae
|
|
jsr Sf500
|
|
lda Zab
|
|
clc
|
|
adc #$07
|
|
sta Zad
|
|
lda Zac
|
|
adc #$00
|
|
sta Zae
|
|
ldy #$00
|
|
jsr Sf703
|
|
lda Z18
|
|
sta Z17
|
|
ldy Za5
|
|
jsr Sf703
|
|
rts
|
|
|
|
Sf703: ldx #$07
|
|
lda #$01
|
|
sta Z18
|
|
Lf709: lda (Zab),y
|
|
asl
|
|
rol Z18
|
|
iny
|
|
dex
|
|
bne Lf709
|
|
rts
|
|
|
|
|
|
; SmartPort Bus enable
|
|
smartport_bus_enable:
|
|
jsr iwm_all_phases_off
|
|
lda iwm_ph1_on
|
|
lda iwm_ph3_on
|
|
rts
|
|
|
|
|
|
; SmartPort Bus reset
|
|
smartport_bus_reset:
|
|
jsr iwm_all_phases_off
|
|
lda iwm_ph0_on
|
|
lda iwm_ph2_on
|
|
lda #$50
|
|
jsr Sf735
|
|
jsr iwm_all_phases_off
|
|
lda #$05
|
|
|
|
Sf730: pha
|
|
jsr Sf735
|
|
pla
|
|
|
|
Sf735: jsr Sf73c
|
|
dec
|
|
bne Sf735
|
|
rts
|
|
|
|
Sf73c: pha
|
|
lda #$cb
|
|
Lf73f: dec
|
|
bne Lf742
|
|
Lf742: nop
|
|
bne Lf73f
|
|
pla
|
|
rts
|
|
|
|
|
|
iwm_all_phases_off:
|
|
bit iwm_ph0_off
|
|
bit iwm_ph1_off
|
|
bit iwm_ph2_off
|
|
bit iwm_ph3_off
|
|
rts
|
|
|
|
|
|
smartport_bus_sync_tab:
|
|
fcb $c3,$ff,$fc,$f3,$cf,$3f
|
|
smartport_bus_sync_tab_len equ *-smartport_bus_sync_tab
|
|
|
|
|
|
Sf75a: lda #$80
|
|
sta Z19
|
|
lda Z02
|
|
and #$0f
|
|
sta Z4c
|
|
ldy Z00
|
|
lda Df8b0,y
|
|
and #$0f
|
|
sta Z4d
|
|
stz Z4e
|
|
stz Z4f
|
|
ldx #$06
|
|
Lf773: lda Z04,x
|
|
sta Z4f,x
|
|
dex
|
|
bne Lf773
|
|
|
|
Sf77a: lda #$09
|
|
sta Z6c
|
|
stz Z6d
|
|
lda #$4c
|
|
sta Zab
|
|
stz Zac
|
|
rts
|
|
|
|
Sf787: jsr Sf7bc
|
|
bcs Sf78d
|
|
rts
|
|
|
|
Sf78d: lda Z2f
|
|
pha
|
|
ldx Z32
|
|
lda #$80
|
|
jsr Sf8ba
|
|
pla
|
|
sta Z2f
|
|
sec
|
|
rts
|
|
|
|
Sf79c: lda #$01
|
|
jsr Sf7be
|
|
bcc Lf7bb
|
|
jsr Sf78d
|
|
jsr Sf75a
|
|
lda #$64
|
|
jsr Sf7be
|
|
bcc Lf7bb
|
|
jsr Sf78d
|
|
jsr Sf75a
|
|
lda #$64
|
|
jsr Sf7be
|
|
Lf7bb: rts
|
|
|
|
Sf7bc: lda #$20
|
|
|
|
Sf7be: ldx Z6d
|
|
beq Lf7c6
|
|
Lf7c2: lsr
|
|
dex
|
|
bne Lf7c2
|
|
Lf7c6: sta Z58
|
|
Lf7c8: jsr Sf5d8
|
|
bcc Lf7dc
|
|
dec Z58
|
|
beq Lf7dc
|
|
ldx Z6d
|
|
bne Lf7c8
|
|
lda #$05
|
|
jsr Sf735
|
|
bra Lf7c8
|
|
Lf7dc: rts
|
|
|
|
Sf7dd: lda #$05
|
|
sta Z58
|
|
lda Z00
|
|
cmp #$03
|
|
bne Lf7eb
|
|
lda #$3c
|
|
sta Z58
|
|
Lf7eb: jsr Sf517
|
|
bcc Lf7fe
|
|
jsr Sf73c
|
|
sec
|
|
bit iwm_ph0_off
|
|
bit iwm_q6l
|
|
dec Z58
|
|
bne Lf7eb
|
|
Lf7fe: rts
|
|
|
|
Sf7ff: ldy #$19
|
|
Lf801: lda D0bff,y
|
|
sta D0c00,y
|
|
dey
|
|
cpy #$04
|
|
bne Lf801
|
|
stz D0c04
|
|
inc Z0b
|
|
rts
|
|
|
|
Sf812: lda #$17
|
|
jsr Sd651
|
|
stz Za6
|
|
jsr Sf75a
|
|
jsr iwm_all_phases_off
|
|
jsr Sf79c
|
|
bcs Lf868
|
|
ldx Z00
|
|
bit Df8b0,x
|
|
bpl Lf86a
|
|
cpx #$02
|
|
beq Lf83e
|
|
lda Z0c
|
|
cmp #$05
|
|
bcc Lf83e
|
|
bit Df8b0
|
|
ldy #$00
|
|
lda #$22
|
|
bra Lf897
|
|
Lf83e: lda #$06
|
|
sta Z01
|
|
Lf842: lda Z01
|
|
bpl Lf842
|
|
ldx Z0b
|
|
ldy Z0c
|
|
lda Z00
|
|
cmp #$02
|
|
bne Lf854
|
|
ldy #$02
|
|
ldx #$00
|
|
Lf854: sty Z6d
|
|
stx Z6c
|
|
lda #$82
|
|
sta Z19
|
|
jsr iwm_all_phases_off
|
|
stz Zab
|
|
lda #$0c
|
|
sta Zac
|
|
jsr Sf787
|
|
Lf868: bcs Lf8aa
|
|
Lf86a: stz Zab
|
|
lda #$0c
|
|
sta Zac
|
|
jsr Sf7dd
|
|
bcs Lf8a2
|
|
jsr Sf6ab
|
|
sta Z0b
|
|
sty Z0c
|
|
Lf87c: ldy #$00
|
|
ldx Z00
|
|
bne Lf889
|
|
bit Z02
|
|
bvc Lf889
|
|
jsr Sf7ff
|
|
Lf889: cpx #$0a
|
|
clv
|
|
bcs Lf897
|
|
bit Df8b0,x
|
|
bvc Lf895
|
|
ldy #$06
|
|
Lf895: lda Za6
|
|
Lf897: sta Z56
|
|
bvc Lf89d
|
|
sty Z01
|
|
Lf89d: jsr iwm_all_phases_off
|
|
clc
|
|
rts
|
|
|
|
Lf8a2: cmp #$80
|
|
beq Lf8aa
|
|
lda #$27
|
|
bra Lf8ac
|
|
Lf8aa: lda #$06
|
|
Lf8ac: sta Za6
|
|
bra Lf87c
|
|
|
|
Df8b0: fcb $43,$43,$83,$01,$83,$01,$01,$01
|
|
fcb $44,$84
|
|
|
|
Sf8ba: sta Z50
|
|
phx
|
|
lda #$00
|
|
Lf8bf: sta Z33,x
|
|
inx
|
|
cpx #$04
|
|
bcc Lf8bf
|
|
bit iwm_motor_off
|
|
lda #$ff
|
|
sta Z2f
|
|
jsr Sd7cc
|
|
jsr Sd80b
|
|
lda #$17
|
|
jsr Sd651
|
|
plx
|
|
stx Z2f
|
|
jsr smartport_bus_reset
|
|
jsr iwm_all_phases_off
|
|
stz Z13
|
|
Lf8e3: lda #$80
|
|
sta Z19
|
|
lda #$05
|
|
sta Z4c
|
|
lda #$02
|
|
sta Z4d
|
|
stz Z4f
|
|
stz Z51
|
|
jsr Sf77a
|
|
jsr Sf5d8
|
|
bcs Lf928
|
|
stz Zab
|
|
lda #$0c
|
|
sta Zac
|
|
jsr Sf517
|
|
bcs Lf928
|
|
ldy Z2f
|
|
cpy #$05
|
|
bcs Lf916
|
|
lda #$80
|
|
sta Z33,y
|
|
lda #$00
|
|
sta Z39,y
|
|
Lf916: inc Z13
|
|
inc Z2f
|
|
lda Za6
|
|
beq Lf8e3
|
|
lda Z13
|
|
cmp #$03
|
|
bcc Lf928
|
|
lda #$02
|
|
sta Z13
|
|
Lf928: jsr iwm_all_phases_off
|
|
bit iwm_motor_off
|
|
lda Z13
|
|
rts
|
|
|
|
irq: ldx #$ff
|
|
Lf933: inx
|
|
bit D0a80,x
|
|
ldy #$00
|
|
Lf939: lda #$00
|
|
Lf93b: dec
|
|
bne Lf93e
|
|
Lf93e: bne Lf93b
|
|
dey
|
|
bne Lf939
|
|
txa
|
|
beq Lf933
|
|
bra irq
|
|
|
|
fillto $ffda
|
|
|
|
Dffda: fcb $50,$c8,$a7,$b8,$ec,$67,$86,$46
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$00
|
|
fcb $00,$00,$00,$00,$ca,$89,$f6,$c2
|
|
fcb $19,$73,$9a,$b1,$81,$9e,$78,$73
|
|
|
|
Dfffa:
|
|
; vectors
|
|
fdb reset
|
|
fdb reset
|
|
fdb irq
|