mirror of
https://github.com/mi57730/a2d.git
synced 2025-04-06 19:37:13 +00:00
ovl1c: Start understanding low level disk ops
This commit is contained in:
parent
579e3dbd78
commit
f4139c08b5
302
desktop/ovl1c.s
302
desktop/ovl1c.s
@ -18,9 +18,23 @@ LE6FD := $E6FD
|
||||
LE766 := $E766
|
||||
LE7A8 := $E7A8
|
||||
|
||||
;;; Disk II / IWM I/O locations ($C0nX, n = slot + 8)
|
||||
;;; c/o http://archive.li/ewHUL
|
||||
PHASE0 := $C080 ; Stepper motor phase 0
|
||||
PHASE1 := $C082 ; Stepper motor phase 1
|
||||
PHASE2 := $C084 ; Stepper motor phase 2
|
||||
PHASE3 := $C086 ; Stepper motor phase 3
|
||||
DISABLE := $C088 ; Turn disk drive off
|
||||
ENABLE := $C089 ; Turn disk drive on
|
||||
SELECT := $C08A ; Select drive 1 or 2 (at addr+1)
|
||||
Q6 := $C08C ;
|
||||
CHECKWP := $C08D ;
|
||||
Q7 := $C08E ;
|
||||
WRMODE := $C08F ; Turn on write mode
|
||||
|
||||
.org $800
|
||||
|
||||
|
||||
L0800: php
|
||||
sei
|
||||
jsr L083A
|
||||
@ -46,17 +60,17 @@ L0821: sec
|
||||
rts
|
||||
|
||||
L0823: asl a
|
||||
asl L0C24
|
||||
sta L0C36
|
||||
asl current_track
|
||||
sta seltrack_track
|
||||
txa
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
tay
|
||||
lda L0C36
|
||||
jsr L09C6
|
||||
lsr L0C24
|
||||
lda seltrack_track
|
||||
jsr select_track
|
||||
lsr current_track
|
||||
rts
|
||||
|
||||
L083A: tax
|
||||
@ -67,16 +81,16 @@ L083A: tax
|
||||
rol a
|
||||
lda #$00
|
||||
rol a
|
||||
bne L0850
|
||||
lda $C08A,x
|
||||
bne :+
|
||||
lda SELECT,x ; Select drive 1 or 2
|
||||
jmp L0853
|
||||
|
||||
L0850: lda LCBANK1,x
|
||||
L0853: lda $C089,x
|
||||
: lda LCBANK1,x
|
||||
L0853: lda ENABLE,x ; Turn drive on
|
||||
lda #$D7
|
||||
sta $DA
|
||||
lda #$50
|
||||
sta L0C24
|
||||
sta current_track
|
||||
lda #$00
|
||||
jsr L0823
|
||||
L0864: lda $DA
|
||||
@ -98,11 +112,11 @@ L0882: lda $D1
|
||||
ldx L0C23
|
||||
jsr L0823
|
||||
ldx L0C23
|
||||
lda $C08D,x
|
||||
lda $C08E,x
|
||||
lda CHECKWP,x ; Check write protect
|
||||
lda Q7,x
|
||||
tay
|
||||
lda $C08E,x
|
||||
lda $C08C,x
|
||||
lda Q7,x ; Activate read mode
|
||||
lda Q6,x
|
||||
tya
|
||||
bpl L08A2
|
||||
lda #$02
|
||||
@ -150,126 +164,145 @@ L08DB: ldx L0C23
|
||||
lda #$00
|
||||
L08F9: pha
|
||||
ldx L0C23
|
||||
lda $C088,x
|
||||
lda DISABLE,x ; Turn drive off
|
||||
lda #$00
|
||||
jsr L0823
|
||||
pla
|
||||
rts
|
||||
|
||||
L0907: ldy #$20
|
||||
;;; ============================================================
|
||||
|
||||
.proc L0907
|
||||
ldy #$20
|
||||
L0909: dey
|
||||
beq L0968
|
||||
L090C: lda $C08C,x
|
||||
bpl L090C
|
||||
beq return_with_carry_set
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
|
||||
L0911: eor #$D5
|
||||
bne L0909
|
||||
nop
|
||||
L0916: lda $C08C,x
|
||||
bpl L0916
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$AA
|
||||
bne L0911
|
||||
ldy #$56
|
||||
L0921: lda $C08C,x
|
||||
bpl L0921
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$AD
|
||||
bne L0911
|
||||
|
||||
lda #$00
|
||||
L092C: dey
|
||||
sty $D5
|
||||
L092F: lda $C08C,x
|
||||
bpl L092F
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$96
|
||||
bne L0968
|
||||
bne return_with_carry_set
|
||||
ldy $D5
|
||||
bne L092C
|
||||
|
||||
L093C: sty $D5
|
||||
L093E: lda $C08C,x
|
||||
bpl L093E
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$96
|
||||
bne L0968
|
||||
bne return_with_carry_set
|
||||
ldy $D5
|
||||
iny
|
||||
bne L093C
|
||||
L094C: lda $C08C,x
|
||||
bpl L094C
|
||||
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$96
|
||||
bne L0968
|
||||
L0955: lda $C08C,x
|
||||
bpl L0955
|
||||
bne return_with_carry_set
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$DE
|
||||
bne L0968
|
||||
bne return_with_carry_set
|
||||
nop
|
||||
L095F: lda $C08C,x
|
||||
bpl L095F
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$AA
|
||||
beq L09C4
|
||||
L0968: sec
|
||||
beq return_with_carry_clear
|
||||
.endproc
|
||||
return_with_carry_set:
|
||||
sec
|
||||
rts
|
||||
|
||||
L096A: ldy #$FC
|
||||
.proc L096A
|
||||
ldy #$FC
|
||||
sty $DC
|
||||
L096E: iny
|
||||
bne L0975
|
||||
bne :+
|
||||
inc $DC
|
||||
beq L0968
|
||||
L0975: lda $C08C,x
|
||||
bpl L0975
|
||||
beq return_with_carry_set
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
|
||||
L097A: cmp #$D5
|
||||
bne L096E
|
||||
nop
|
||||
L097F: lda $C08C,x
|
||||
bpl L097F
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$AA
|
||||
bne L097A
|
||||
ldy #$03
|
||||
L098A: lda $C08C,x
|
||||
bpl L098A
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$96
|
||||
bne L097A
|
||||
|
||||
lda #$00
|
||||
L0995: sta $DB
|
||||
L0997: lda $C08C,x
|
||||
bpl L0997
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
rol a
|
||||
sta $DD
|
||||
L099F: lda $C08C,x
|
||||
bpl L099F
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
and $DD
|
||||
sta $D7,y
|
||||
eor $DB
|
||||
dey
|
||||
bpl L0995
|
||||
|
||||
tay
|
||||
bne L0968
|
||||
L09B1: lda $C08C,x
|
||||
bpl L09B1
|
||||
bne return_with_carry_set
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$DE
|
||||
bne L0968
|
||||
bne return_with_carry_set
|
||||
nop
|
||||
L09BB: lda $C08C,x
|
||||
bpl L09BB
|
||||
: lda Q6,x
|
||||
bpl :-
|
||||
cmp #$AA
|
||||
bne L0968
|
||||
L09C4: clc
|
||||
bne return_with_carry_set
|
||||
.endproc
|
||||
return_with_carry_clear:
|
||||
clc
|
||||
rts
|
||||
|
||||
L09C6: stx L0C37
|
||||
sta L0C36
|
||||
cmp L0C24
|
||||
beq L0A2D
|
||||
;;; ============================================================
|
||||
;;; Move head to track - A = track, X = slot * 16
|
||||
|
||||
.proc select_track
|
||||
stx seltrack_slot
|
||||
sta seltrack_track
|
||||
cmp current_track
|
||||
beq done
|
||||
lda #$00
|
||||
sta L0C38
|
||||
L09D6: lda L0C24
|
||||
L09D6: lda current_track
|
||||
sta L0C39
|
||||
sec
|
||||
sbc L0C36
|
||||
sbc seltrack_track
|
||||
beq L0A19
|
||||
bcs L09EB
|
||||
eor #$FF
|
||||
inc L0C24
|
||||
inc current_track
|
||||
bcc L09F0
|
||||
L09EB: adc #$FE
|
||||
dec L0C24
|
||||
dec current_track
|
||||
L09F0: cmp L0C38
|
||||
bcc L09F8
|
||||
lda L0C38
|
||||
@ -282,45 +315,48 @@ L09FD: sec
|
||||
jsr L0B3A
|
||||
lda L0C39
|
||||
clc
|
||||
.byte $20
|
||||
L0A0C: jsr $B90A
|
||||
.byte $57
|
||||
.byte $0B
|
||||
jsr motor
|
||||
lda L0B57,y
|
||||
jsr L0B3A
|
||||
inc L0C38
|
||||
bne L09D6
|
||||
L0A19: jsr L0B3A
|
||||
clc
|
||||
L0A1D: lda L0C24
|
||||
L0A20: and #$03
|
||||
L0A1D: lda current_track
|
||||
|
||||
motor: and #$03 ; PHASE0 + 2 * phase
|
||||
rol a
|
||||
ora L0C37
|
||||
ora seltrack_slot
|
||||
tax
|
||||
lda $C080,x
|
||||
ldx L0C37
|
||||
L0A2D: rts
|
||||
lda PHASE0,x
|
||||
ldx seltrack_slot
|
||||
|
||||
done: rts
|
||||
.endproc
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
L0A2E: jsr L0C0E
|
||||
lda $C08D,x
|
||||
lda $C08E,x
|
||||
lda CHECKWP,x ; Check write protect
|
||||
lda Q7,x
|
||||
lda #$FF
|
||||
sta $C08F,x
|
||||
cmp $C08C,x
|
||||
sta WRMODE,x ; Write
|
||||
cmp Q6,x
|
||||
pha
|
||||
pla
|
||||
nop
|
||||
ldy #$04
|
||||
L0A44: pha
|
||||
pla
|
||||
jsr L0AA5
|
||||
jsr write2
|
||||
dey
|
||||
bne L0A44
|
||||
lda #$D5
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$AA
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$AD
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
ldy #$56
|
||||
nop
|
||||
nop
|
||||
@ -331,7 +367,7 @@ L0A65: nop
|
||||
nop
|
||||
lda #$96
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
dey
|
||||
bne L0A62
|
||||
bit $00
|
||||
@ -339,44 +375,47 @@ L0A65: nop
|
||||
L0A75: jsr L0C0E
|
||||
lda #$96
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
lda #$96
|
||||
nop
|
||||
iny
|
||||
bne L0A75
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$DE
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$AA
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$EB
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda #$FF
|
||||
jsr L0AA4
|
||||
jsr write
|
||||
lda $C08E,x
|
||||
lda $C08C,x
|
||||
lda Q6,x
|
||||
rts
|
||||
|
||||
L0AA4: nop
|
||||
L0AA5: pha
|
||||
;;; Write, with appropriate cycle counts
|
||||
write: nop
|
||||
write2: pha
|
||||
pla
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
rts
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
L0AAE: sec
|
||||
lda $C08D,x
|
||||
lda $C08E,x
|
||||
bmi L0B15
|
||||
lda #$FF
|
||||
sta $C08F,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
pha
|
||||
pla
|
||||
L0AC1: jsr L0B1B
|
||||
jsr L0B1B
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
nop
|
||||
dey
|
||||
bne L0AC1
|
||||
@ -399,7 +438,7 @@ L0AC1: jsr L0B1B
|
||||
lsr a
|
||||
ora $D0
|
||||
sta $C08D,x
|
||||
lda $C08C,x
|
||||
lda Q6,x
|
||||
pla
|
||||
ora #$AA
|
||||
jsr L0B2C
|
||||
@ -411,14 +450,16 @@ L0AC1: jsr L0B1B
|
||||
jsr L0B2D
|
||||
clc
|
||||
L0B15: lda $C08E,x
|
||||
lda $C08C,x
|
||||
lda Q6,x
|
||||
L0B1B: rts
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
L0B1C: pha
|
||||
lsr a
|
||||
ora $D0
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
pla
|
||||
nop
|
||||
nop
|
||||
@ -429,37 +470,27 @@ L0B2D: nop
|
||||
pha
|
||||
pla
|
||||
sta $C08D,x
|
||||
cmp $C08C,x
|
||||
cmp Q6,x
|
||||
rts
|
||||
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
L0B3A: ldx #$11
|
||||
L0B3C: dex
|
||||
bne L0B3C
|
||||
|
||||
.proc L0B3A
|
||||
start: ldx #$11
|
||||
: dex
|
||||
bne :-
|
||||
inc16 $D9
|
||||
L0B45: sec
|
||||
sbc #$01
|
||||
bne L0B3A
|
||||
sec
|
||||
sbc #1
|
||||
bne start
|
||||
rts
|
||||
.endproc
|
||||
|
||||
L0B4B: .byte $01, $30, $28, $24, $20, $1E, $1D, $1C, $1C, $1C, $1C, $1C
|
||||
L0B57: .byte $70, $2C, $26, $22, $1F, $1E, $1D, $1C, $1C, $1C, $1C, $1C
|
||||
|
||||
L0B4B: ora ($30,x)
|
||||
plp
|
||||
bit $20
|
||||
asl $1C1D,x
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
L0B57: bvs L0B85
|
||||
rol $22
|
||||
.byte $1F
|
||||
asl $1C1D,x
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
.byte $1C
|
||||
L0B63: lda L0C21
|
||||
sta $D6
|
||||
L0B68: ldy #$80
|
||||
@ -561,7 +592,10 @@ L0C20: .byte $1B
|
||||
L0C21: .byte $03
|
||||
L0C22: .byte $10
|
||||
L0C23: .byte 0
|
||||
L0C24: .byte 0
|
||||
|
||||
current_track:
|
||||
.byte 0
|
||||
|
||||
L0C25: .byte 0
|
||||
L0C26: .byte 0
|
||||
.byte 0
|
||||
@ -579,8 +613,12 @@ L0C26: .byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
L0C36: .byte 0
|
||||
L0C37: .byte 0
|
||||
|
||||
seltrack_track:
|
||||
.byte 0
|
||||
seltrack_slot:
|
||||
.byte 0
|
||||
|
||||
L0C38: .byte 0
|
||||
L0C39: .byte 0
|
||||
|
||||
@ -1156,11 +1194,9 @@ L10ED: sec
|
||||
sbc #$13
|
||||
jmp L10D4
|
||||
|
||||
L10F3: asl L0A0C
|
||||
php
|
||||
asl $04
|
||||
.byte $02
|
||||
.byte 0
|
||||
L10F3:
|
||||
.byte $0E, $0C, $0A, $08, $06, $04, $02, $00
|
||||
|
||||
lda #$14
|
||||
sta L0006
|
||||
lda #$00
|
||||
|
Loading…
x
Reference in New Issue
Block a user