mirror of
https://github.com/mi57730/a2d.git
synced 2024-06-25 21:29:30 +00:00
DeskTop disasm: ProDOS driver protocol
This commit is contained in:
parent
721c6ce90a
commit
e82df4d29e
|
@ -23,7 +23,7 @@ noop := $0C83
|
||||||
quit := $0C84
|
quit := $0C84
|
||||||
L0CAF := $0CAF
|
L0CAF := $0CAF
|
||||||
eject_disk := $0CED
|
eject_disk := $0CED
|
||||||
L0D26 := $0D26
|
unit_number_to_driver_address := $0D26
|
||||||
L0D51 := $0D51
|
L0D51 := $0D51
|
||||||
L0D5F := $0D5F
|
L0D5F := $0D5F
|
||||||
L0DB5 := $0DB5
|
L0DB5 := $0DB5
|
||||||
|
@ -654,7 +654,7 @@ LD7F2: ldx dest_drive_index
|
||||||
and #$0F
|
and #$0F
|
||||||
beq LD817
|
beq LD817
|
||||||
lda drive_unitnum_table,x
|
lda drive_unitnum_table,x
|
||||||
jsr disk_copy_overlay4::L0D26
|
jsr disk_copy_overlay4::unit_number_to_driver_address
|
||||||
ldy #$FF
|
ldy #$FF
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
beq LD817
|
beq LD817
|
||||||
|
@ -698,7 +698,7 @@ LD852: ldx dest_drive_index
|
||||||
and #$0F
|
and #$0F
|
||||||
beq LD87C
|
beq LD87C
|
||||||
lda drive_unitnum_table,x
|
lda drive_unitnum_table,x
|
||||||
jsr disk_copy_overlay4::L0D26
|
jsr disk_copy_overlay4::unit_number_to_driver_address
|
||||||
ldy #$FE
|
ldy #$FE
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
and #$08
|
and #$08
|
||||||
|
@ -1883,7 +1883,7 @@ LE3B8: pha
|
||||||
beq LE3CC
|
beq LE3CC
|
||||||
lda drive_unitnum_table,x
|
lda drive_unitnum_table,x
|
||||||
and #$F0
|
and #$F0
|
||||||
jsr disk_copy_overlay4::L0D26
|
jsr disk_copy_overlay4::unit_number_to_driver_address
|
||||||
jmp LE3DA
|
jmp LE3DA
|
||||||
|
|
||||||
LE3CC: pla
|
LE3CC: pla
|
||||||
|
@ -1924,21 +1924,24 @@ LE402: stx LE448
|
||||||
sta LD407+1,x
|
sta LD407+1,x
|
||||||
rts
|
rts
|
||||||
|
|
||||||
LE415: ldy #$FF
|
LE415: ldy #$FF ; offset to low byte of driver address
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
sta $06
|
sta $06
|
||||||
|
|
||||||
lda #$00
|
lda #$00
|
||||||
sta $42
|
sta DRIVER_COMMAND
|
||||||
sta $44
|
sta DRIVER_BUFFER
|
||||||
sta $45
|
sta DRIVER_BUFFER+1
|
||||||
sta $46
|
sta DRIVER_BLOCK_NUMBER
|
||||||
sta $47
|
sta DRIVER_BLOCK_NUMBER+1
|
||||||
|
|
||||||
pla
|
pla
|
||||||
pha
|
pha
|
||||||
tax
|
tax
|
||||||
lda drive_unitnum_table,x
|
lda drive_unitnum_table,x
|
||||||
and #$F0
|
and #$F0
|
||||||
sta $43
|
sta DRIVER_UNIT_NUMBER
|
||||||
|
|
||||||
jsr LE445
|
jsr LE445
|
||||||
stx LE448
|
stx LE448
|
||||||
pla
|
pla
|
||||||
|
|
|
@ -676,41 +676,43 @@ params: .addr 0
|
||||||
|
|
||||||
ldx disk_copy_overlay3::dest_drive_index
|
ldx disk_copy_overlay3::dest_drive_index
|
||||||
lda disk_copy_overlay3::drive_unitnum_table,x
|
lda disk_copy_overlay3::drive_unitnum_table,x
|
||||||
sta L0CEC
|
sta unit_number
|
||||||
and #$0F
|
and #$0F
|
||||||
beq L0CCC
|
beq L0CCC
|
||||||
lda disk_copy_overlay3::drive_unitnum_table,x
|
lda disk_copy_overlay3::drive_unitnum_table,x
|
||||||
jsr L0D26
|
jsr unit_number_to_driver_address
|
||||||
ldy #$FF
|
ldy #$FF ; offset to low byte of driver address
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
beq L0CCC
|
beq L0CCC
|
||||||
cmp #$FF
|
cmp #$FF
|
||||||
bne L0CD3
|
bne L0CD3
|
||||||
L0CCC: lda L0CEC
|
L0CCC: lda unit_number
|
||||||
jsr L0800
|
jsr L0800
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L0CD3: lda L0CEC
|
L0CD3: lda unit_number
|
||||||
jsr L0D26
|
jsr unit_number_to_driver_address
|
||||||
ldy #$FF
|
|
||||||
|
ldy #$FF ; offset to low byte of driver address
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
sta $06
|
sta $06
|
||||||
lda #$03
|
lda #DRIVER_COMMAND_FORMAT
|
||||||
sta $42
|
sta DRIVER_COMMAND
|
||||||
lda L0CEC
|
lda unit_number
|
||||||
sta $43
|
sta DRIVER_UNIT_NUMBER
|
||||||
jmp ($06)
|
jmp ($06)
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L0CEC: .byte 0
|
unit_number:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Eject Disk via SmartPort
|
;;; Eject Disk via SmartPort
|
||||||
|
|
||||||
.proc eject_disk
|
.proc eject_disk
|
||||||
sta L0D24
|
sta L0D24
|
||||||
jsr L0D26 ; Point $06 at $Cn00
|
jsr unit_number_to_driver_address ; Point $06 at $Cn00
|
||||||
|
|
||||||
ldy #$07 ; Check firmware bytes
|
ldy #$07 ; Check firmware bytes
|
||||||
lda ($06),y ; $Cn07 = $00 ??
|
lda ($06),y ; $Cn07 = $00 ??
|
||||||
|
@ -756,16 +758,20 @@ L0D24: .byte 0
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
;;; Get driver address for unit number
|
||||||
|
;;; Input: unit_number in A
|
||||||
|
;;; Output: $6/$7 points at driver address
|
||||||
|
|
||||||
L0D26: sta L0D50
|
.proc unit_number_to_driver_address
|
||||||
ldx #$11
|
sta unit_number
|
||||||
lda L0D50
|
ldx #$11 ; $BF11 is DEVADR+1 for S0D1
|
||||||
and #$80
|
lda unit_number
|
||||||
beq L0D34
|
and #$80 ; high bit set?
|
||||||
ldx #$21
|
beq :+
|
||||||
L0D34: stx @load_addr
|
ldx #$21 ; $BF21 is DEVADR+1 for S0D2
|
||||||
lda L0D50
|
: stx @load_addr
|
||||||
and #$70
|
lda unit_number
|
||||||
|
and #$70 ; mask off slot
|
||||||
lsr a
|
lsr a
|
||||||
lsr a
|
lsr a
|
||||||
lsr a
|
lsr a
|
||||||
|
@ -775,12 +781,14 @@ L0D34: stx @load_addr
|
||||||
|
|
||||||
@load_addr := *+1
|
@load_addr := *+1
|
||||||
lda MLI ; self-modified
|
lda MLI ; self-modified
|
||||||
sta $07
|
sta $06+1
|
||||||
lda #$00
|
lda #$00
|
||||||
sta $06
|
sta $06
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L0D50: .byte 0
|
unit_number:
|
||||||
|
.byte 0
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
|
|
|
@ -1073,13 +1073,13 @@ L12A6: lda L12C0
|
||||||
jsr L0E00
|
jsr L0E00
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L12AD: ldy #$FF
|
L12AD: ldy #$FF ; offset to low byte of driver address
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
sta $06
|
sta $06
|
||||||
lda #$03
|
lda #DRIVER_COMMAND_FORMAT
|
||||||
sta $42
|
sta DRIVER_COMMAND
|
||||||
lda L12C0
|
lda L12C0
|
||||||
sta $43
|
sta DRIVER_UNIT_NUMBER
|
||||||
jmp ($06)
|
jmp ($06)
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
@ -1176,17 +1176,18 @@ L134D: stx @lsb
|
||||||
beq L1394
|
beq L1394
|
||||||
cmp #$FF
|
cmp #$FF
|
||||||
beq L1394
|
beq L1394
|
||||||
ldy #$FF
|
|
||||||
|
ldy #$FF ; offset to low byte of driver address
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
sta $06
|
sta $06
|
||||||
lda #$00
|
lda #DRIVER_COMMAND_STATUS
|
||||||
sta $42
|
sta DRIVER_COMMAND
|
||||||
lda L124A
|
lda L124A
|
||||||
and #$F0
|
and #$F0
|
||||||
sta $43
|
sta DRIVER_UNIT_NUMBER
|
||||||
lda #$00
|
lda #$00
|
||||||
sta $46
|
sta DRIVER_BLOCK_NUMBER
|
||||||
sta $47
|
sta DRIVER_BLOCK_NUMBER+1
|
||||||
jsr L1391
|
jsr L1391
|
||||||
bcc L1398
|
bcc L1398
|
||||||
jmp L1483
|
jmp L1483
|
||||||
|
|
|
@ -199,6 +199,22 @@ NAME_LENGTH_MASK := $0F
|
||||||
.endstruct
|
.endstruct
|
||||||
.assert .sizeof(FileEntry) = $27, error, "incorrect struct size"
|
.assert .sizeof(FileEntry) = $27, error, "incorrect struct size"
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; ProDOS Driver Protocol
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
;;; Addresses for command parameters
|
||||||
|
DRIVER_COMMAND := $42
|
||||||
|
DRIVER_UNIT_NUMBER := $43
|
||||||
|
DRIVER_BUFFER := $44
|
||||||
|
DRIVER_BLOCK_NUMBER := $46
|
||||||
|
|
||||||
|
;;; Commands
|
||||||
|
DRIVER_COMMAND_STATUS := 0
|
||||||
|
DRIVER_COMMAND_READ := 1
|
||||||
|
DRIVER_COMMAND_WRITE := 2
|
||||||
|
DRIVER_COMMAND_FORMAT := 3
|
||||||
|
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Macros
|
;;; Macros
|
||||||
|
|
Loading…
Reference in New Issue
Block a user