From 9fee0cca8724ced102a98222c517cd146858a032 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Fri, 1 Sep 2017 18:32:37 -0700 Subject: [PATCH] path names --- desk.acc/show.text.file/a2d.inc | 2 + desk.acc/show.text.file/stf.list | 163 ++++++++++++++++--------------- desk.acc/show.text.file/stf.o | Bin 21326 -> 21366 bytes desk.acc/show.text.file/stf.s | 123 ++++++++++++----------- 4 files changed, 151 insertions(+), 137 deletions(-) diff --git a/desk.acc/show.text.file/a2d.inc b/desk.acc/show.text.file/a2d.inc index 4bf9e4b..910fcbd 100644 --- a/desk.acc/show.text.file/a2d.inc +++ b/desk.acc/show.text.file/a2d.inc @@ -26,6 +26,8 @@ A2D_CREATE_WINDOW := $38 ;; bit 0: remove title bar ;; bit 1: add close box ;; bit 2: add resize box + ;; .addr title + ;; ... A2D_DESTROY_WINDOW := $39 ;; .byte id diff --git a/desk.acc/show.text.file/stf.list b/desk.acc/show.text.file/stf.list index 96ef323..6178fcd 100644 --- a/desk.acc/show.text.file/stf.list +++ b/desk.acc/show.text.file/stf.list @@ -103,6 +103,8 @@ Current file: stf.s 000800 2 ;; bit 0: remove title bar 000800 2 ;; bit 1: add close box 000800 2 ;; bit 2: add resize box +000800 2 ;; .addr title +000800 2 ;; ... 000800 2 000800 2 A2D_DESTROY_WINDOW := $39 000800 2 ;; .byte id @@ -368,24 +370,25 @@ Current file: stf.s 000903 1 00 ref_num:.byte 0 ; ref_num 000904 1 .endproc 000904 1 -000904 1 pathname: ; 1st byte is length, rest is full path -000904 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000908 1 00 00 00 00 -00090C 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000910 1 00 00 00 00 -000914 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000918 1 00 00 00 00 -00091C 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000920 1 00 00 00 00 -000924 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000928 1 00 00 00 00 -00092C 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000930 1 00 00 00 00 -000934 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000938 1 00 00 00 00 -00093C 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 -000940 1 00 00 00 00 -000944 1 00 .byte $00 +000904 1 .proc pathname ; 1st byte is length, rest is full path +000904 1 00 length: .byte $00 +000905 1 00 00 00 00 data: .byte $00,$00,$00,$00,$00,$00,$00,$00 +000909 1 00 00 00 00 +00090D 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000911 1 00 00 00 00 +000915 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000919 1 00 00 00 00 +00091D 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000921 1 00 00 00 00 +000925 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000929 1 00 00 00 00 +00092D 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000931 1 00 00 00 00 +000935 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000939 1 00 00 00 00 +00093D 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 +000941 1 00 00 00 00 +000945 1 .endproc 000945 1 000945 1 00 L0945: .byte $00 000946 1 00 L0946: .byte $00 @@ -483,8 +486,7 @@ Current file: stf.s 000994 1 .proc window_params 000994 1 64 id: .byte window_id ; window identifier 000995 1 02 flags: .byte 2 ; window flags (2=include close box) -000996 1 -000996 1 00 10 L0996: .word $1000 ; ??? +000996 1 00 10 title: .addr $1000 000998 1 00 C1 L0998: .byte $00,$C1 ; ??? 00099A 1 00099A 1 20 L099A: .byte $20 ; hscroll? @@ -534,95 +536,100 @@ Current file: stf.s 0009DE 1 8D 09 C0 L09DE: sta ALTZPON 0009E1 1 AD 8B C0 lda LCBANK1 0009E4 1 AD 8B C0 lda LCBANK1 -0009E7 1 A9 00 lda #$00 -0009E9 1 8D 04 09 sta pathname -0009EC 1 AD 21 DF lda $DF21 -0009EF 1 F0 05 beq L09F6 -0009F1 1 AD 20 DF lda $DF20 -0009F4 1 D0 01 bne L09F7 -0009F6 1 60 L09F6: rts +0009E7 1 A9 00 lda #0 +0009E9 1 8D 04 09 sta pathname::length +0009EC 1 AD 21 DF lda $DF21 ; ??? +0009EF 1 F0 05 beq abort ; some file properties? +0009F1 1 AD 20 DF lda $DF20 ; ??? +0009F4 1 D0 01 bne continue +0009F6 1 60 abort: rts +0009F7 1 continue: 0009F7 1 -0009F7 1 0A L09F7: asl a +0009F7 1 path := $DFB3 +0009F7 1 src := $06 +0009F7 1 dst := $08 +0009F7 1 0A asl a 0009F8 1 AA tax -0009F9 1 BD B3 DF lda $DFB3,x -0009FC 1 85 06 sta $06 -0009FE 1 BD B4 DF lda $DFB4,x -000A01 1 85 07 sta $07 -000A03 1 A0 00 ldy #$00 -000A05 1 B1 06 lda ($06),y +0009F9 1 BD B3 DF lda path,x ; pointer to pathname? +0009FC 1 85 06 sta src +0009FE 1 BD B4 DF lda path+1,x +000A01 1 85 07 sta src+1 +000A03 1 A0 00 ldy #0 +000A05 1 B1 06 lda (src),y 000A07 1 AA tax -000A08 1 E6 06 inc $06 -000A0A 1 D0 02 bne L0A0E -000A0C 1 E6 07 inc $07 -000A0E 1 A9 05 L0A0E: lda #$05 -000A10 1 85 08 sta $08 -000A12 1 A9 09 lda #$09 -000A14 1 85 09 sta $09 -000A16 1 20 72 0A jsr L0A72 -000A19 1 A9 2F lda #$2F -000A1B 1 A0 00 ldy #$00 -000A1D 1 91 08 sta ($08),y -000A1F 1 EE 04 09 inc pathname ; ??? -000A22 1 E6 08 inc $08 -000A24 1 D0 02 bne L0A28 -000A26 1 E6 09 inc $09 -000A28 1 AD 22 DF L0A28: lda $DF22 +000A08 1 E6 06 inc src +000A0A 1 D0 02 bne :+ +000A0C 1 E6 07 inc src+1 +000A0E 1 A9 05 : lda #<(pathname::data) +000A10 1 85 08 sta dst +000A12 1 A9 09 lda #>(pathname::data) +000A14 1 85 09 sta dst+1 +000A16 1 20 72 0A jsr copy_pathname +000A19 1 +000A19 1 A9 2F lda #'/' +000A1B 1 A0 00 ldy #0 +000A1D 1 91 08 sta (dst),y +000A1F 1 EE 04 09 inc pathname::length +000A22 1 E6 08 inc dst +000A24 1 D0 02 bne :+ +000A26 1 E6 09 inc dst+1 +000A28 1 AD 22 DF : lda $DF22 000A2B 1 0A asl a 000A2C 1 AA tax 000A2D 1 BD 9F DD lda $DD9F,x -000A30 1 85 06 sta $06 +000A30 1 85 06 sta src 000A32 1 BD A0 DD lda $DDA0,x -000A35 1 85 07 sta $07 +000A35 1 85 07 sta src+1 000A37 1 A0 02 ldy #$02 -000A39 1 B1 06 lda ($06),y +000A39 1 B1 06 lda (src),y 000A3B 1 29 70 and #$70 -000A3D 1 D0 01 bne L0A40 -000A3F 1 60 rts -000A40 1 -000A40 1 18 L0A40: clc -000A41 1 A5 06 lda $06 +000A3D 1 D0 01 bne :+ +000A3F 1 60 rts ; abort ??? +000A40 1 18 : clc +000A41 1 A5 06 lda src 000A43 1 69 09 adc #$09 -000A45 1 8D 96 09 sta window_params::L0996 -000A48 1 A5 07 lda $07 +000A45 1 8D 96 09 sta window_params::title +000A48 1 A5 07 lda src+1 000A4A 1 69 00 adc #$00 -000A4C 1 8D 97 09 sta window_params::L0996+1 +000A4C 1 8D 97 09 sta window_params::title+1 000A4F 1 A0 09 ldy #$09 000A51 1 B1 06 lda ($06),y 000A53 1 AA tax 000A54 1 CA dex 000A55 1 CA dex 000A56 1 18 clc -000A57 1 A5 06 lda $06 +000A57 1 A5 06 lda src 000A59 1 69 0B adc #$0B -000A5B 1 85 06 sta $06 +000A5B 1 85 06 sta src 000A5D 1 90 02 bcc L0A61 -000A5F 1 E6 07 inc $07 -000A61 1 20 72 0A L0A61: jsr L0A72 +000A5F 1 E6 07 inc src+1 +000A61 1 20 72 0A L0A61: jsr copy_pathname 000A64 1 A9 1E lda #$1E 000A66 1 85 27 sta $27 000A68 1 A9 40 lda #$40 000A6A 1 85 28 sta $28 000A6C 1 20 20 00 jsr zp_code_stash 000A6F 1 4C 8A 0A jmp open_file_and_init_window -000A72 1 .endproc 000A72 1 -000A72 1 .proc L0A72 ; ??? -000A72 1 A0 00 ldy #$00 -000A74 1 B1 06 loop: lda ($06),y -000A76 1 91 08 sta ($08),y +000A72 1 .proc copy_pathname ; copy x bytes from src to dst +000A72 1 A0 00 ldy #0 ; incrementing path length and dst +000A74 1 B1 06 loop: lda (src),y +000A76 1 91 08 sta (dst),y 000A78 1 C8 iny -000A79 1 EE 04 09 inc pathname ; ??? +000A79 1 EE 04 09 inc pathname::length 000A7C 1 CA dex 000A7D 1 D0 F5 bne loop 000A7F 1 98 tya 000A80 1 18 clc -000A81 1 65 08 adc $08 -000A83 1 85 08 sta $08 +000A81 1 65 08 adc dst +000A83 1 85 08 sta dst 000A85 1 90 02 bcc end -000A87 1 E6 09 inc $09 +000A87 1 E6 09 inc dst+1 000A89 1 60 end: rts 000A8A 1 .endproc 000A8A 1 +000A8A 1 .endproc +000A8A 1 000A8A 1 .proc open_file_and_init_window 000A8A 1 A9 00 lda #0 000A8C 1 8D 6F 09 sta fixed_mode_flag @@ -711,7 +718,7 @@ Current file: stf.s 000B3C 1 000B3C 1 ;;; How would control get here???? Dead code??? 000B3C 1 .proc maybe_dead_code ; window move routine, maybe? -000B3C 1 20 00 40 45 A2D_CALL $45, L0977 +000B3C 1 20 00 40 45 A2D_CALL $45, L0977 ; run resize loop? 000B40 1 77 09 000B42 1 20 FD 10 jsr L10FD 000B45 1 20 88 10 jsr L1088 @@ -748,17 +755,17 @@ Current file: stf.s 000B89 1 09 01 L0B89: ora #$01 000B8B 1 8D 98 09 L0B8B: sta window_params::L0998 000B8E 1 38 sec -000B8F 1 A9 00 lda #$00 +000B8F 1 A9 00 lda #max_width 000B98 1 ED 62 09 sbc window_width+1 000B9B 1 85 07 sta $07 000B9D 1 20 DF 10 jsr L10DF 000BA0 1 8D 87 09 sta L0987 000BA3 1 A9 02 lda #$02 000BA5 1 8D 86 09 sta L0986 -000BA8 1 20 00 40 49 A2D_CALL $49, L0986 +000BA8 1 20 00 40 49 A2D_CALL $49, L0986 ; change to clamped size ??? 000BAC 1 86 09 000BAE 1 20 98 11 jsr calc_and_draw_mode 000BB1 1 4C F9 0D jmp L0DF9 diff --git a/desk.acc/show.text.file/stf.o b/desk.acc/show.text.file/stf.o index 5fe7cbbc76764be4b5071e497b87f6f5475c1536..89374a4c74f883e6a0cc344f37e38734b7937ad5 100644 GIT binary patch literal 21366 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

)M`d{&kUWuWLJdA$~!e*y5h1y@CBFHw;F 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

pgyzD2Nv11;0jl#6 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 ZZ4$f^`Au5u%vOz_NlR$iE+Zod{vQc*oU#A_ diff --git a/desk.acc/show.text.file/stf.s b/desk.acc/show.text.file/stf.s index 8dc59e3..c512875 100644 --- a/desk.acc/show.text.file/stf.s +++ b/desk.acc/show.text.file/stf.s @@ -186,7 +186,9 @@ ref_num:.byte 0 ; ref_num ref_num:.byte 0 ; ref_num .endproc -pathname: ; 1st byte is length, rest is full path +.proc pathname ; 1st byte is length, rest is full path +length: .byte $00 +data: .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 @@ -194,8 +196,7 @@ pathname: ; 1st byte is length, rest is full path .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 - .byte $00,$00,$00,$00,$00,$00,$00,$00 - .byte $00 +.endproc L0945: .byte $00 L0946: .byte $00 @@ -292,8 +293,7 @@ len: .byte 0 ; length .proc window_params id: .byte window_id ; window identifier flags: .byte 2 ; window flags (2=include close box) - -L0996: .word $1000 ; ??? +title: .addr $1000 L0998: .byte $00,$C1 ; ??? L099A: .byte $20 ; hscroll? @@ -339,95 +339,100 @@ height: .word $96 L09DE: sta ALTZPON lda LCBANK1 lda LCBANK1 - lda #$00 - sta pathname - lda $DF21 - beq L09F6 - lda $DF20 - bne L09F7 -L09F6: rts + lda #0 + sta pathname::length + lda $DF21 ; ??? + beq abort ; some file properties? + lda $DF20 ; ??? + bne continue +abort: rts +continue: -L09F7: asl a + path := $DFB3 + src := $06 + dst := $08 + asl a tax - lda $DFB3,x - sta $06 - lda $DFB4,x - sta $07 - ldy #$00 - lda ($06),y + lda path,x ; pointer to pathname? + sta src + lda path+1,x + sta src+1 + ldy #0 + lda (src),y tax - inc $06 - bne L0A0E - inc $07 -L0A0E: lda #$05 - sta $08 - lda #$09 - sta $09 - jsr L0A72 - lda #$2F - ldy #$00 - sta ($08),y - inc pathname ; ??? - inc $08 - bne L0A28 - inc $09 -L0A28: lda $DF22 + inc src + bne :+ + inc src+1 +: lda #<(pathname::data) + sta dst + lda #>(pathname::data) + sta dst+1 + jsr copy_pathname + + lda #'/' + ldy #0 + sta (dst),y + inc pathname::length + inc dst + bne :+ + inc dst+1 +: lda $DF22 asl a tax lda $DD9F,x - sta $06 + sta src lda $DDA0,x - sta $07 + sta src+1 ldy #$02 - lda ($06),y + lda (src),y and #$70 - bne L0A40 - rts - -L0A40: clc - lda $06 + bne :+ + rts ; abort ??? +: clc + lda src adc #$09 - sta window_params::L0996 - lda $07 + sta window_params::title + lda src+1 adc #$00 - sta window_params::L0996+1 + sta window_params::title+1 ldy #$09 lda ($06),y tax dex dex clc - lda $06 + lda src adc #$0B - sta $06 + sta src bcc L0A61 - inc $07 -L0A61: jsr L0A72 + inc src+1 +L0A61: jsr copy_pathname lda #$1E sta $27 lda #$40 sta $28 jsr zp_code_stash jmp open_file_and_init_window -.endproc -.proc L0A72 ; ??? - ldy #$00 -loop: lda ($06),y - sta ($08),y +.proc copy_pathname ; copy x bytes from src to dst + ldy #0 ; incrementing path length and dst +loop: lda (src),y + sta (dst),y iny - inc pathname ; ??? + inc pathname::length dex bne loop tya clc - adc $08 - sta $08 + adc dst + sta dst bcc end - inc $09 + inc dst+1 end: rts .endproc +.endproc + .proc open_file_and_init_window lda #0 sta fixed_mode_flag