DAs: start disassembly work on Sort Directory

This commit is contained in:
Joshua Bell 2018-04-19 21:23:23 -07:00
parent 82d664d889
commit 963ead8462
5 changed files with 711 additions and 2 deletions

View File

@ -7,7 +7,8 @@ OUTDIR = out
HEADERS = $(wildcard ../*.inc) $(wildcard ../inc/*.inc) $(wildcard *.inc)
DAS = calculator show.text.file date puzzle show.image.file this.apple eyes
DAS = calculator show.text.file date puzzle sort.directory \
show.image.file this.apple eyes
TARGETS = $(patsubst %,$(OUTDIR)/%.$$F1,$(DAS))

Binary file not shown.

View File

@ -44,6 +44,7 @@ verify "calculator"
verify "show.text.file"
verify "date"
verify "puzzle"
verify "sort.directory"
# Compute stats
echo "Stats:"
@ -51,6 +52,7 @@ stats "calculator.s"
stats "show.text.file.s"
stats "date.s"
stats "puzzle.s"
stats "sort.directory.s"
# Mountable directory
if [ -d mount ]; then

706
desk.acc/sort.directory.s Normal file
View File

@ -0,0 +1,706 @@
.setcpu "6502"
.include "apple2.inc"
.include "../inc/apple2.inc"
.include "../inc/prodos.inc"
.include "../mgtk.inc"
.include "../desktop.inc"
.include "../macros.inc"
.org $800
;;; ============================================================
cli
jmp start
L0804: .byte 0
save_stack:
.byte 0
;;; ============================================================
start: tsx
stx save_stack
jmp L0932
L080D: ldx save_stack
txs
lda a:$0A
bne L0817
rts
L0817: lda #$40
pha
lda #$0B
pha
lda a:$0A
rts
;;; ============================================================
;;; ProDOS Relays
.proc open
sta ALTZPOFF
MLI_CALL OPEN, open_params
sta ALTZPON
rts
.endproc
.proc read
sta ALTZPOFF
MLI_CALL READ, read_params
sta ALTZPON
rts
.endproc
.proc write_block
sta ALTZPOFF
MLI_CALL WRITE_BLOCK, block_params
sta ALTZPON
rts
.endproc
.proc read_block
sta ALTZPOFF
MLI_CALL READ_BLOCK, block_params
sta ALTZPON
rts
.endproc
.proc on_line
sta ALTZPOFF
MLI_CALL ON_LINE, on_line_params
sta ALTZPON
rts
.endproc
.byte 0
;;; unused ???
.proc write
sta ALTZPOFF
MLI_CALL WRITE, write_params
sta ALTZPON
rts
.endproc
;;; unused ???
.proc set_mark
sta ALTZPOFF
MLI_CALL SET_MARK, set_mark_params
sta ALTZPON
rts
.endproc
;;; unused ???
.proc get_file_info
sta ALTZPOFF
MLI_CALL GET_FILE_INFO, file_info_params
sta ALTZPON
rts
.endproc
;;; unused ???
.proc set_file_info
sta ALTZPOFF
MLI_CALL SET_FILE_INFO, file_info_params
sta ALTZPON
rts
.endproc
.proc close
sta ALTZPOFF
MLI_CALL CLOSE, close_params
sta ALTZPON
rts
.endproc
;;; ============================================================
DEFINE_ON_LINE_PARAMS on_line_params,, on_line_buffer
on_line_buffer:
.res 16, 0
DEFINE_SET_MARK_PARAMS set_mark_params, $2B
DEFINE_READ_BLOCK_PARAMS block_params, 0, 0
.byte 0
DEFINE_OPEN_PARAMS open_params, path_buf, $1C00
DEFINE_READ_PARAMS read_params, $0E00, $0E00
DEFINE_WRITE_PARAMS write_params, $0E00, $0E00
DEFINE_CLOSE_PARAMS close_params
DEFINE_GET_FILE_INFO_PARAMS file_info_params, path_buf
.res 3 ; for SET_FILE_INFO ???
path_buf:
.res 65, 0
;;; ============================================================
L0932: sta ALTZPON
lda LCBANK1
lda LCBANK1
yax_call JUMP_TABLE_MGTK_RELAY, MGTK::FrontWindow, $0A
lda $0A
beq L094C
cmp #$09
bcc L094F
L094C: jmp L080D
L094F: asl a
tay
lda $DFB3,y
sta $06
lda $DFB4,y
sta $07
ldy #$00
sty $10
lda ($06),y
sta L0976
sta path_buf
L0967: iny
lda ($06),y
and #$7F
cmp #$61
bcc L0972
and #$DF
L0972: sta path_buf,y
L0976 := *+1
cpy #0
bne L0967
ldy $BF31
sty L0A92
L097F: ldy L0A92
lda $BF32,y
and #$F0
sta on_line_params::unit_num
jsr on_line
bne L0994
jsr L0AB0
beq L099C
L0994: dec L0A92
bpl L097F
L0999: jmp L080D
L099C: lda on_line_params::unit_num
sta L0804
jsr open
bne L0999
lda open_params::ref_num
sta read_params::ref_num
sta close_params::ref_num
jsr read
jsr close
bne L0999
ldx #$02
L09BA: .byte $AD
.byte $02
L09BC: asl $959D
asl a
.byte $AD
.byte $03
L09C2: asl $969D
asl a
ora L0A95,x
beq L09DD
inc L09BC
inc L09BC
inc L09C2
inc L09C2
inx
inx
cpx #$0E
bne L09BA
L09DD: txa
clc
adc #$0E
sta L0A93
jsr L0B40
L09E7: jsr L0B16
bcs L0A3B
ldy #$00
lda ($06),y
and #$F0
beq L09E7
ldy #$25
lda ($06),y
sta L0A95
iny
lda ($06),y
sta L0A96
jsr L0AE8
lda L0804
sta block_params::unit_num
lda #$00
sta L0A94
L0A0F: lda L0A94
asl a
tay
lda L0A95,y
sta block_params::block_num
lda L0A96,y
sta block_params::block_num+1
ora block_params::block_num
beq L0A3E
tya
clc
adc #$0E
sta block_params::data_buffer+1
lda #$00
sta block_params::data_buffer
jsr write_block
bne L0A3B
inc L0A94
bne L0A0F
L0A3B: jmp L080D
L0A3E: copy16 #$1C00, block_params::data_buffer
jsr L0B40
L0A4B: jsr L0B16
bcs L0A8E
ldy #$00
lda ($06),y
and #$F0
beq L0A4B
cmp #$D0
bne L0A4B
ldy #$11
lda ($06),y
sta block_params::block_num
iny
lda ($06),y
sta block_params::block_num+1
jsr read_block
bne L0A8F
lda $07
sec
sbc #$0E
and #$FE
tay
lda L0A95,y
sta $1C27
lda L0A96,y
sta $1C28
lda L0AAF
sta $1C29
jsr write_block
jmp L0A4B
L0A8E: pla
L0A8F: jmp L080D
L0A92: .byte 0
L0A93: .byte 0
L0A94: .byte 0
L0A95: .byte 0
L0A96: .byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
L0AAF: .byte 0
L0AB0: lda on_line_buffer
and #$0F
sta on_line_buffer
ldy #$00
L0ABA: iny
lda on_line_buffer,y
and #$7F
cmp #$61
bcc L0AC6
and #$DF
L0AC6: cmp path_buf+1,y
bne L0AE5
cpy on_line_buffer
bne L0ABA
lda on_line_buffer
clc
adc #$01
cmp path_buf
beq L0AE2
lda path_buf+2,y
cmp #$2F
bne L0AE5
L0AE2: return #$00
L0AE5: return #$FF
L0AE8: lda #$00
sta L0B15
jsr L0B40
jsr L0B16
L0AF3: copy16 $06, $08
jsr L0B16
bcs L0B0F
jsr L0B5E
bcc L0AF3
jsr L0B4E
lda #$FF
sta L0B15
bne L0AF3
L0B0F: lda L0B15
bne L0AE8
rts
L0B15: .byte 0
;;; ============================================================
L0B16: inc L0AAF
lda $06
clc
adc #$27
sta $06
bcc L0B24
inc $07
L0B24: lda $06
cmp #$FF
bne L0B3C
inc $07
lda #$01
sta L0AAF
lda #$04
sta $06
lda $07
cmp L0A93
bcs L0B3E
L0B3C: clc
rts
L0B3E: sec
rts
L0B40: lda #$01
sta L0AAF
lda #$04
sta $06
lda #$0E
sta $07
rts
L0B4E: ldy #$26
L0B50: lda ($06),y
pha
lda ($08),y
sta ($06),y
pla
sta ($08),y
dey
bpl L0B50
rts
L0B5E: ldy #$00
lda ($06),y
and #$F0
bne L0B69
jmp L0BF0
L0B69: lda ($08),y
and #$F0
bne L0B72
jmp L0BEE
L0B72: lda $DF21
beq L0B7F
lda $DF20
beq L0B7F
jmp L0BF5
L0B7F: lda $08
ldx $09
jsr L0CFC
bcc L0BF0
lda $06
ldx $07
jsr L0CFC
bcc L0BEE
ldy #$00
lda ($08),y
and #$F0
sta L0BF2
ldy #$00
lda ($06),y
and #$F0
sta L0BF3
lda L0BF2
cmp #$D0
beq L0BB3
lda L0BF3
cmp #$D0
beq L0BEE
bne L0BC1
L0BB3: lda L0BF3
cmp #$D0
bne L0BF0
jsr L0D33
bcc L0BF0
bcs L0BEE
L0BC1: lda #$04
jsr L0CBE
bne L0BCC
bcc L0BF0
bcs L0BEE
L0BCC: lda #$FF
jsr L0CBE
bne L0BD7
bcc L0BF0
bcs L0BEE
L0BD7: lda #$FD
sta L0BF4
L0BDC: dec L0BF4
lda L0BF4
beq L0BF0
jsr L0CBE
bne L0BDC
bcs L0BEE
jmp L0BF0
L0BEE: sec
rts
L0BF0: clc
rts
L0BF2: .byte 0
L0BF3: .byte 0
L0BF4: .byte 0
;;; ============================================================
L0BF5: ldx $DF21
L0BF8: dex
bmi L0C4A
lda $DF22,x
asl a
tay
lda $DD9F,y
clc
adc #$09
sta $10
lda $DDA0,y
adc #$00
sta $11
ldy #$00
lda ($10),y
sec
sbc #$02
sta L0C24
inc16 $10
L0C1F: lda ($06),y
and #$0F
L0C24 := *+1
cmp #$0
bne L0BF8
sta L0C47
L0C2A: iny
lda ($10),y
and #$7F
cmp #$61
bcc L0C35
and #$DF
L0C35: sta L0C43
lda ($06),y
and #$7F
cmp #$61
bcc L0C42
and #$DF
L0C43 := *+1
L0C42: cmp #0
bne L0BF8
L0C47 := *+1
cpy #0
bne L0C2A
L0C4A: stx L0CBC
ldx $DF21
L0C50: dex
bmi L0CA2
lda $DF22,x
asl a
tay
lda $DD9F,y
clc
adc #$09
sta $10
lda $DDA0,y
adc #$00
sta $11
ldy #$00
lda ($10),y
sec
sbc #$02
sta L0C7C
inc16 $10
L0C77: lda ($08),y
and #$0F
L0C7C := *+1
cmp #0
bne L0C50
sta L0C9F
L0C82: iny
lda ($10),y
and #$7F
cmp #$61
bcc L0C8D
and #$DF
L0C8D: sta L0C9B
lda ($08),y
and #$7F
cmp #$61
bcc L0C9A
and #$DF
L0C9B := *+1
L0C9A: cmp #0
bne L0C50
L0C9F := *+1
cpy #0
bne L0C82
L0CA2: stx L0CBD
lda L0CBC
and L0CBD
cmp #$FF
beq L0CBA
lda L0CBD
cmp L0CBC
beq L0CBA
rts
sec
rts
L0CBA: clc
rts
L0CBC: .byte 0
L0CBD: .byte 0
L0CBE: sta L0CFB
ldy #$10
lda ($08),y
sta L0CF1
lda ($06),y
sta L0CF2
lda L0CF1
cmp L0CFB
beq L0CDF
lda L0CF2
cmp L0CFB
beq L0CF7
bne L0CEE
L0CDF: lda L0CF2
cmp L0CFB
bne L0CF3
jsr L0D33
bcc L0CF3
bcs L0CF7
L0CEE: return #$FF
L0CF1: .byte 0
L0CF2: .byte 0
L0CF3: lda #$00
clc
rts
L0CF7: lda #$00
sec
rts
L0CFB: .byte 0
L0CFC: stax $00
ldy #$10
lda ($00),y
cmp #$FF
bne L0D29
ldy #$00
lda ($00),y
and #$0F
sec
sbc #$06
bcc L0D29
tay
ldx #$00
dey
L0D17: iny
inx
lda ($00),y
and #$7F
cmp L0D2B,x
bne L0D29
cpx L0D2B
bne L0D17
clc
rts
L0D29: sec
rts
L0D2B: .byte $07
rol $5953
.byte $53
.byte $54
eor $4D
L0D33: ldy #$00
lda ($08),y
and #$0F
sta L0D6B
sta L0D5C
lda ($06),y
and #$0F
sta L0D6C
cmp L0D5C
bcs L0D4E
sta L0D5C
L0D4E: ldy #$00
L0D50: iny
lda ($08),y
cmp ($06),y
beq L0D5B
bcc L0D69
L0D59: sec
rts
L0D5C := *+1
L0D5B: cpy #0
bne L0D50
lda L0D6B
cmp L0D6C
beq L0D69
bcs L0D59
L0D69: clc
rts
L0D6B: .byte 0
L0D6C: .byte 0

View File

@ -9,7 +9,7 @@ print <<"END_HEADER";
GLOBAL {
STARTADDR \$$org;
PAGELENGTH 0; # No paging
CPU "65C02";
CPU "6502";
};
END_HEADER