diff --git a/desk.acc/Makefile b/desk.acc/Makefile index c47ca8b..79a524a 100644 --- a/desk.acc/Makefile +++ b/desk.acc/Makefile @@ -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)) diff --git a/desk.acc/orig/sort.directory.bin b/desk.acc/orig/sort.directory.bin new file mode 100644 index 0000000..5ec1a4b Binary files /dev/null and b/desk.acc/orig/sort.directory.bin differ diff --git a/desk.acc/res/go.sh b/desk.acc/res/go.sh index e5f3116..6aec795 100755 --- a/desk.acc/res/go.sh +++ b/desk.acc/res/go.sh @@ -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 diff --git a/desk.acc/sort.directory.s b/desk.acc/sort.directory.s new file mode 100644 index 0000000..4b3163d --- /dev/null +++ b/desk.acc/sort.directory.s @@ -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 diff --git a/res/make_info.pl b/res/make_info.pl index c3bcbfc..676a550 100755 --- a/res/make_info.pl +++ b/res/make_info.pl @@ -9,7 +9,7 @@ print <<"END_HEADER"; GLOBAL { STARTADDR \$$org; PAGELENGTH 0; # No paging - CPU "65C02"; + CPU "6502"; }; END_HEADER