; ; File generated by cc65 v 2.11.0 ; .fopt compiler,"cc65 v 2.11.0" .setcpu "6502" .smart on .autoimport on .case on .debuginfo on .importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2 .macpack longbranch .dbg file, "cbm_dir.c", 4845, 1044191914 .dbg file, "../../include/cbm.h", 10064, 1097955127 .dbg file, "../../include/vic20.h", 3723, 1079218289 .dbg file, "../../include/_vic.h", 3582, 1036528430 .dbg file, "../../include/_6522.h", 3530, 1081446207 .import _cbm_k_readst .import _cbm_k_chkin .import _cbm_k_basin .import _cbm_k_clrch .import _cbm_open .import _cbm_close .export _cbm_opendir .export _cbm_readdir .export _cbm_closedir .segment "RODATA" L0001: .byte $24,$00 ; --------------------------------------------------------------- ; unsigned char __fastcall__ cbm_opendir (unsigned char, unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _cbm_opendir .segment "CODE" ; ; { ; .dbg line, "cbm_dir.c", 17 jsr pusha ; ; if ((status = cbm_open (lfn, device, CBM_READ, "$")) == 0) { ; .dbg line, "cbm_dir.c", 19 jsr decsp1 jsr decsp3 ldy #$05 lda (sp),y ldy #$02 sta (sp),y ldy #$04 lda (sp),y ldy #$01 sta (sp),y lda #$00 dey sta (sp),y lda #<(L0001) ldx #>(L0001) jsr _cbm_open ldy #$00 sta (sp),y cmp #$00 bne L0015 ; ; if (cbm_k_chkin (lfn) == 0) { ; .dbg line, "cbm_dir.c", 20 ldy #$02 lda (sp),y jsr _cbm_k_chkin cmp #$00 bne L0015 ; ; if (cbm_k_basin () == 0x01) { /* Start address */ ; .dbg line, "cbm_dir.c", 21 jsr _cbm_k_basin cmp #$01 bne L000F ; ; if (cbm_k_basin () == 0x04) { ; .dbg line, "cbm_dir.c", 22 jsr _cbm_k_basin cmp #$04 bne L0015 ; ; cbm_k_clrch (); ; .dbg line, "cbm_dir.c", 23 jsr _cbm_k_clrch ; ; return 0; ; .dbg line, "cbm_dir.c", 24 ldx #$00 txa jmp incsp3 ; ; cbm_close (lfn); ; .dbg line, "cbm_dir.c", 27 L000F: ldy #$02 lda (sp),y jsr _cbm_close ; ; cbm_k_clrch (); ; .dbg line, "cbm_dir.c", 28 jsr _cbm_k_clrch ; ; return 2; ; .dbg line, "cbm_dir.c", 29 ldx #$00 lda #$02 jmp incsp3 ; ; return status; ; .dbg line, "cbm_dir.c", 33 L0015: ldy #$00 ldx #$00 lda (sp),y ; ; } ; .dbg line, "cbm_dir.c", 34 jmp incsp3 .dbg line .endproc ; --------------------------------------------------------------- ; unsigned char __fastcall__ cbm_readdir (unsigned char, register struct cbm_dirent*) ; --------------------------------------------------------------- .segment "CODE" .proc _cbm_readdir .segment "CODE" ; ; { ; .dbg line, "cbm_dir.c", 39 jsr pushax ldy #$00 ldx #$04 jsr regswap2 ; ; if (cbm_k_chkin (lfn) == 0) { ; .dbg line, "cbm_dir.c", 42 jsr decsp2 ldy #$04 lda (sp),y jsr _cbm_k_chkin cmp #$00 jne L001F ; ; if (cbm_k_readst () == 0) { ; .dbg line, "cbm_dir.c", 43 jsr _cbm_k_readst cmp #$00 jne L001F ; ; cbm_k_basin (); /* 0x01, 0x01, next basic line */ ; .dbg line, "cbm_dir.c", 44 jsr _cbm_k_basin ; ; cbm_k_basin (); ; .dbg line, "cbm_dir.c", 45 jsr _cbm_k_basin ; ; byte = cbm_k_basin(); /* File-size */ ; .dbg line, "cbm_dir.c", 47 jsr _cbm_k_basin ldy #$01 sta (sp),y ; ; l_dirent->size = byte | ((cbm_k_basin()) << 8); ; .dbg line, "cbm_dir.c", 48 lda regbank+4 ldx regbank+4+1 jsr pushax ldy #$03 ldx #$00 lda (sp),y jsr pushax jsr _cbm_k_basin tax lda #$00 jsr tosorax ldy #$11 jsr staxspidx ; ; byte = cbm_k_basin(); ; .dbg line, "cbm_dir.c", 50 jsr _cbm_k_basin ldy #$01 sta (sp),y ; ; if (byte == 'b') { /* "B" BLOCKS FREE. */ ; .dbg line, "cbm_dir.c", 52 cmp #$42 bne L002B ; ; while (cbm_k_readst () == 0) { /* Read until end */ ; .dbg line, "cbm_dir.c", 53 L002D: jsr _cbm_k_readst cmp #$00 bne L002E ; ; cbm_k_basin (); ; .dbg line, "cbm_dir.c", 54 jsr _cbm_k_basin ; ; } ; .dbg line, "cbm_dir.c", 55 jmp L002D ; ; cbm_k_clrch (); ; .dbg line, "cbm_dir.c", 56 L002E: jsr _cbm_k_clrch ; ; return 2; /* END */ ; .dbg line, "cbm_dir.c", 57 ldx #$00 lda #$02 jmp L001B ; ; if (byte != '\"') { ; .dbg line, "cbm_dir.c", 60 L002B: lda (sp),y cmp #$22 beq L0036 ; ; while (cbm_k_basin() != '\"') { ; .dbg line, "cbm_dir.c", 61 L0035: jsr _cbm_k_basin cmp #$22 beq L0036 ; ; if (cbm_k_readst () != 0) { /* ### Included to prevent */ ; .dbg line, "cbm_dir.c", 62 jsr _cbm_k_readst cmp #$00 beq L0035 ; ; cbm_k_clrch (); /* ### Endless loop */ ; .dbg line, "cbm_dir.c", 63 jsr _cbm_k_clrch ; ; return 3; /* ### Should be probably removed */ ; .dbg line, "cbm_dir.c", 64 ldx #$00 lda #$03 jmp L001B ; ; i = 0; ; .dbg line, "cbm_dir.c", 69 L0036: lda #$00 tay L009A: sta (sp),y ; ; while ((byte = cbm_k_basin ()) != '\"') { ; .dbg line, "cbm_dir.c", 70 L003E: jsr _cbm_k_basin ldy #$01 sta (sp),y cmp #$22 beq L003F ; ; if (cbm_k_readst () != 0) { /* ### Included to prevent */ ; .dbg line, "cbm_dir.c", 71 jsr _cbm_k_readst cmp #$00 beq L0043 ; ; cbm_k_clrch (); /* ### Endless loop */ ; .dbg line, "cbm_dir.c", 72 jsr _cbm_k_clrch ; ; return 4; /* ### Should be probably removed */ ; .dbg line, "cbm_dir.c", 73 ldx #$00 lda #$04 jmp L001B ; ; if (i < sizeof (l_dirent->name) - 1) { ; .dbg line, "cbm_dir.c", 76 L0043: tay lda (sp),y cmp #$10 bcs L003E ; ; l_dirent->name[i] = byte; ; .dbg line, "cbm_dir.c", 77 lda regbank+4 ldx regbank+4+1 sta sreg stx sreg+1 lda (sp),y clc adc sreg ldx sreg+1 bcc L0098 inx L0098: sta sreg stx sreg+1 iny lda (sp),y dey sta (sreg),y ; ; ++i; ; .dbg line, "cbm_dir.c", 78 clc lda #$01 adc (sp),y ; ; } ; .dbg line, "cbm_dir.c", 80 jmp L009A ; ; l_dirent->name[i] = '\0'; ; .dbg line, "cbm_dir.c", 81 L003F: lda regbank+4 ldx regbank+4+1 sta sreg stx sreg+1 dey lda (sp),y clc adc sreg ldx sreg+1 bcc L0099 inx L0099: sta sreg stx sreg+1 tya sta (sreg),y ; ; while ((byte=cbm_k_basin ()) == ' ') { ; .dbg line, "cbm_dir.c", 83 L0051: jsr _cbm_k_basin ldy #$01 sta (sp),y cmp #$20 bne L0052 ; ; if (cbm_k_readst ()) { /* ### Included to prevent */ ; .dbg line, "cbm_dir.c", 84 jsr _cbm_k_readst tax beq L0051 ; ; cbm_k_clrch (); /* ### Endless loop */ ; .dbg line, "cbm_dir.c", 85 jsr _cbm_k_clrch ; ; return 5; /* ### Should be probably removed */ ; .dbg line, "cbm_dir.c", 86 ldx #$00 lda #$05 jmp L001B ; ; switch (byte) { ; .dbg line, "cbm_dir.c", 90 L0052: lda (sp),y ; ; } ; .dbg line, "cbm_dir.c", 114 cmp #$43 beq L0079 cmp #$44 beq L0072 cmp #$50 beq L0062 cmp #$52 beq L006A cmp #$53 beq L005E cmp #$55 beq L0066 cmp #$56 beq L0076 jmp L0079 ; ; l_dirent->type = CBM_T_SEQ; ; .dbg line, "cbm_dir.c", 92 L005E: tya ; ; break; ; .dbg line, "cbm_dir.c", 93 jmp L009C ; ; l_dirent->type = CBM_T_PRG; ; .dbg line, "cbm_dir.c", 95 L0062: lda #$02 ; ; break; ; .dbg line, "cbm_dir.c", 96 jmp L009C ; ; l_dirent->type = CBM_T_USR; ; .dbg line, "cbm_dir.c", 98 L0066: lda #$03 ; ; break; ; .dbg line, "cbm_dir.c", 99 jmp L009C ; ; l_dirent->type = CBM_T_REL; ; .dbg line, "cbm_dir.c", 101 L006A: lda #$04 ; ; break; ; .dbg line, "cbm_dir.c", 102 jmp L009C ; ; l_dirent->type = CBM_T_DIR; ; .dbg line, "cbm_dir.c", 107 L0072: lda #$06 ; ; break; ; .dbg line, "cbm_dir.c", 108 jmp L009C ; ; l_dirent->type = CBM_T_VRP; ; .dbg line, "cbm_dir.c", 110 L0076: lda #$08 ; ; break; ; .dbg line, "cbm_dir.c", 111 jmp L009C ; ; l_dirent->type = CBM_T_OTHER; ; .dbg line, "cbm_dir.c", 113 L0079: lda #$05 L009C: ldy #$13 sta (regbank+4),y ; ; cbm_k_basin (); ; .dbg line, "cbm_dir.c", 116 jsr _cbm_k_basin ; ; cbm_k_basin (); ; .dbg line, "cbm_dir.c", 117 jsr _cbm_k_basin ; ; byte = cbm_k_basin (); ; .dbg line, "cbm_dir.c", 119 jsr _cbm_k_basin ldy #$01 sta (sp),y ; ; l_dirent->access = (byte == 0x3C)? CBM_A_RO : CBM_A_RW; ; .dbg line, "cbm_dir.c", 121 cmp #$3C bne L0083 tya jmp L0085 L0083: lda #$03 L0085: ldy #$14 sta (regbank+4),y ; ; if (byte != 0) { ; .dbg line, "cbm_dir.c", 123 ldy #$01 lda (sp),y beq L008B ; ; while (cbm_k_basin() != 0) { ; .dbg line, "cbm_dir.c", 124 L008A: jsr _cbm_k_basin cmp #$00 beq L008B ; ; if (cbm_k_readst () != 0) { /* ### Included to prevent */ ; .dbg line, "cbm_dir.c", 125 jsr _cbm_k_readst cmp #$00 beq L008A ; ; cbm_k_clrch (); /* ### Endless loop */ ; .dbg line, "cbm_dir.c", 126 jsr _cbm_k_clrch ; ; return 6; /* ### Should be probably removed */ ; .dbg line, "cbm_dir.c", 127 ldx #$00 lda #$06 jmp L001B ; ; cbm_k_clrch (); ; .dbg line, "cbm_dir.c", 132 L008B: jsr _cbm_k_clrch ; ; return 0; /* Line read successfuly */ ; .dbg line, "cbm_dir.c", 133 ldx #$00 txa jmp L001B ; ; cbm_k_clrch (); ; .dbg line, "cbm_dir.c", 136 L001F: jsr _cbm_k_clrch ; ; return 1; ; .dbg line, "cbm_dir.c", 137 ldx #$00 lda #$01 ; ; } ; .dbg line, "cbm_dir.c", 138 L001B: pha ldy #$02 lda (sp),y sta regbank+4 iny lda (sp),y sta regbank+5 pla jmp incsp5 .dbg line .endproc ; --------------------------------------------------------------- ; void __fastcall__ cbm_closedir (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _cbm_closedir .segment "CODE" ; ; { ; .dbg line, "cbm_dir.c", 142 jsr pusha ; ; cbm_close(lfn); ; .dbg line, "cbm_dir.c", 143 ldy #$00 lda (sp),y jsr _cbm_close ; ; } ; .dbg line, "cbm_dir.c", 144 jmp incsp1 .dbg line .endproc