From 89b8fecb6c00e8fb7e0ece8268aad194edefbfba Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Thu, 12 Apr 2018 20:50:28 -0700 Subject: [PATCH] ZInfo for Z1 --- src/zinfo/info.a | 790 --------------------------------------- src/zinfo/z1/z1.s | 682 +++++++++++++++++++++++++++++++++ src/zinfo/zinfo.system.s | 173 +++++++++ 3 files changed, 855 insertions(+), 790 deletions(-) delete mode 100755 src/zinfo/info.a create mode 100644 src/zinfo/z1/z1.s create mode 100644 src/zinfo/zinfo.system.s diff --git a/src/zinfo/info.a b/src/zinfo/info.a deleted file mode 100755 index f2f6d04..0000000 --- a/src/zinfo/info.a +++ /dev/null @@ -1,790 +0,0 @@ -;license:MIT -;(c) 2018 by qkumba - -!to "info#063000",plain -*=$3000 - -save_name = $300 -;;read_size = ?? can be as large as $4000-$300 bytes -read_buffer = $3500 ;read_size bytes, must be page-aligned -file_buffer = $7400 ;$400 bytes, must not overlap with read_buffer, must be page-aligned -record_size = $40 -info_buffer = $7200 ;record_size*8 (currently $200) bytes, can be anywhere -zpage_info = $fe ;word -zpage_ptr = $fd -name_offset = 0 ;1+37 bytes -time_offset = 42 ;1+8 bytes ("12:01 pm") -score_offset = 51 ;1+6 bytes (-12345) -moves_offset = 58 ;1+5 bytes (12345) - - -;zpage used by Infocom code -zp_8C = $8c -zp_8D = $8d -zp_8E = $8e ;word -zp_9C = $9c -zp_9D = $9d -zp_9E = $9e -zp_9F = $9f -zp_A0 = $a0 ;word -zp_A3 = $a3 -zp_AC = $ac -zp_AD = $ad -zp_B0 = $b0 ;word -zp_B2 = $b2 -zp_B3 = $b3 -zp_C9 = $c9 -zp_CA = $ca -zp_CB = $cb -zp_CC = $cc -zp_CD = $cd -zp_CE = $ce -zp_CF = $cf -zp_D3 = $d3 -zp_D4 = $d4 -zp_D5 = $d5 -zp_D6 = $d6 -zp_D7 = $d7 -zp_D8 = $d8 -zp_DB = $db -zp_DC = $dc - - - ;set prefix if not defined, needed only if stand-alone code - -- jsr $bf00 -op_c7 - !byte $c7 - !word c7_parms - ldx $200 - bne + - lda $bf30 - sta c5_parms+1 - jsr $bf00 - !byte $c5 - !word c5_parms - ldx $201 - inx - txa - and #$0f - sta $200 - lda #$2f - sta $201 - dec op_c7 - bne - -+ - - jsr exchange - lda #>info_buffer - sta zpage_info+1 - lda #read_buffer - sta zp_A3 - lda read_buffer+1 - and #2 - sta zp_DC - clc - lda read_buffer+$0d - sta zp_AC - lda read_buffer+$0c - adc #>read_buffer - sta zp_AD - clc - lda read_buffer+$19 - sta zp_B0 - lda read_buffer+$18 - adc #>read_buffer - sta zp_B0+1 - clc - lda read_buffer+$0b - sta zp_B2 - lda read_buffer+$0a - adc #>read_buffer - sta zp_B3 - - ;dump info, actual Infocom code in upper-case - - lda #42 - sta max_chars - LDA #$10 ; location - JSR fetch_obj - LDA zp_8C - JSR decompress - - lda zpage_ptr - !if name_offset>0 { - sec - sbc #name_offset - } - ldy #name_offset - sta (zpage_info),y - - ldy #time_offset - sty zpage_ptr - lda #0 - sta max_chars ;can't overflow anymore - sta (zpage_info),y - - LDA #$11 ; score - JSR fetch_obj - - LDA zp_DC - BNE loc_1627 - - ldy #score_offset - sty zpage_ptr - - LDA zp_8C - STA zp_D3 - LDA zp_8D - STA zp_D4 - JSR sub_215D - - sec - lda zpage_ptr - sbc #score_offset - ldy #score_offset - sta (zpage_info),y - JMP loc_165F - -loc_1627: - LDA zp_8C - BNE loc_164B - LDA #$18 - -loc_164B: - CMP #$0D - BCC loc_1651 - SBC #$0C - -loc_1651: - STA zp_D3 - LDA #$00 - STA zp_D4 - JSR sub_215D - LDA #$3A - JSR emit_char - -loc_165F: - LDA #$12 ; moves or minutes - JSR fetch_obj - LDA zp_8C - STA zp_D3 - LDA zp_8D - STA zp_D4 - LDA zp_DC - BNE loc_1676 - - ldy #moves_offset - sty zpage_ptr - - JSR sub_215D - - sec - lda zpage_ptr - sbc #moves_offset - ldy #moves_offset - sta (zpage_info),y - rts - -loc_1676: - LDA zp_8C - CMP #$0A - BCS loc_1681 - LDA #$30 - JSR emit_char - -loc_1681: - JSR sub_215D - LDA #$20 - JSR emit_char - LDA #$11 ; hours - JSR fetch_obj - LDA zp_8C - CMP #$0C - BCS loc_1698 - LDA #$61 - BNE loc_169A - -loc_1698: - LDA #$70 - -loc_169A: - JSR emit_char - LDA #$6D - JSR emit_char - - sec - lda zpage_ptr - sbc #time_offset - ldy #time_offset - sta (zpage_info),y - rts - -loc_1459: - jmp * ;internal error - -fetch_obj: - JSR sub_1A70 - LDA (zp_8E),Y - STA zp_8D - INY - LDA (zp_8E),Y - STA zp_8C - RTS - -sub_1A70: - SEC - SBC #$10 - LDY #0 - STY zp_8E+1 - ASL - ROL zp_8E+1 - CLC - ADC zp_AC - STA zp_8E - LDA zp_8E+1 - ADC zp_AD - STA zp_8E+1 - -locret_1A85: - RTS - -decompress: - JSR sub_26A0 - LDY #7 - LDA (zp_8E),Y - TAX - INY - LDA (zp_8E),Y - STA zp_8E - STX zp_8E+1 - INC zp_8E - BNE loc_1D23 - INC zp_8E+1 - -loc_1D23: - JSR sub_2474 - JMP sub_2495 - -sub_1FE2: - LDA #0 - SEC - SBC zp_D3 - STA zp_D3 - LDA #0 - SBC zp_D4 - STA zp_D4 - RTS - -sub_1FF0: - LDA zp_D5 - ORA zp_D6 - BEQ loc_2021 - JSR sub_2026 - -loc_1FF9: - ROL zp_D3 - ROL zp_D4 - ROL zp_D7 - ROL zp_D8 - LDA zp_D7 - SEC - SBC zp_D5 - TAY - LDA zp_D8 - SBC zp_D6 - BCC loc_2011 - STY zp_D7 - STA zp_D8 - -loc_2011: - DEX - BNE loc_1FF9 - ROL zp_D3 - ROL zp_D4 - LDA zp_D7 - STA zp_D5 - LDA zp_D8 - STA zp_D6 - RTS - -loc_2021: - LDA #8 - JMP loc_1459 - -sub_2026: - LDX #$10 - LDA #0 - STA zp_D7 - STA zp_D8 - CLC - RTS - -sub_215D: - LDA zp_D4 - BPL loc_2169 - LDA #$2D - JSR emit_char - JSR sub_1FE2 - -loc_2169: - LDA #0 - STA zp_DB - -loc_216D: - LDA zp_D3 - ORA zp_D4 - BEQ loc_2185 - LDA #$A - STA zp_D5 - LDA #0 - STA zp_D6 - JSR sub_1FF0 - LDA zp_D5 - PHA - INC zp_DB - BNE loc_216D - -loc_2185: - LDA zp_DB - BNE loc_218E - LDA #$30 - JMP emit_char - -loc_218E: - PLA - CLC - ADC #$30 - JSR emit_char - DEC zp_DB - BNE loc_218E - RTS - -sub_237E: - LDA zp_9D - CLC - ADC zp_A3 - STA zp_A0+1 - LDX #$FF - STX zp_9F - INX - STX zp_A0 - -loc_23A0: - LDY zp_9C - LDA (zp_A0),Y - INC zp_9C - BNE loc_23B2 - LDY #0 - STY zp_9F - INC zp_9D - BNE loc_23B2 - INC zp_9E - -loc_23B2: - TAY - RTS - -sub_2474: - LDA zp_8E - STA zp_9C - LDA zp_8E+1 - STA zp_9D - LDA #0 - STA zp_9E - STA zp_9F - RTS - -sub_2483: - LDA zp_8E - ASL - STA zp_9C - LDA zp_8E+1 - ROL - STA zp_9D - LDA #0 - STA zp_9F - ROL - STA zp_9E - -locret_2494: - RTS - -sub_2495: - LDX #0 - STX zp_C9 - STX zp_CD - DEX - STX zp_CA - -loc_249E: - JSR sub_2569 - BCS locret_2494 - STA zp_CB - TAX - BEQ loc_24E9 - CMP #4 - BCC loc_2507 - CMP #6 - BCC loc_24ED - JSR sub_255D - TAX - BNE loc_24C1 - LDA #$5B - -loc_24B8: - CLC - ADC zp_CB - -loc_24BB: - JSR emit_char - JMP loc_249E - -loc_24C1: - CMP #1 - BNE loc_24C9 - LDA #$3B - BNE loc_24B8 - -loc_24C9: - LDA zp_CB - SEC - SBC #6 - BEQ loc_24D7 - TAX - LDA byte_2686,X - JMP loc_24BB - -loc_24D7: - JSR sub_2569 - ASL - ASL - ASL - ASL - ASL - STA zp_CB - JSR sub_2569 - ORA zp_CB - JMP loc_24BB - -loc_24E9: - LDA #$20 - BNE loc_24BB - -loc_24ED: - SEC - SBC #3 - TAY - JSR sub_255D - BNE loc_24FB - STY zp_CA - JMP loc_249E - -loc_24FB: - STY zp_C9 - CMP zp_C9 - BEQ loc_249E - LDA #0 - STA zp_C9 - BEQ loc_249E - -loc_2507: - SEC - SBC #1 - ASL - ASL - ASL - ASL - ASL - ASL - STA zp_CC - JSR sub_2569 - ASL - CLC - ADC zp_CC - TAY - LDA (zp_B0),Y - STA zp_8E+1 - INY - LDA (zp_B0),Y - STA zp_8E - LDA zp_9E - PHA - LDA zp_9D - PHA - LDA zp_9C - PHA - LDA zp_C9 - PHA - LDA zp_CD - PHA - LDA zp_CF - PHA - LDA zp_CE - PHA - JSR sub_2483 - JSR sub_2495 - PLA - STA zp_CE - PLA - STA zp_CF - PLA - STA zp_CD - PLA - STA zp_C9 - PLA - STA zp_9C - PLA - STA zp_9D - PLA - STA zp_9E - LDX #$FF - STX zp_CA - INX - STX zp_9F - JMP loc_249E - -sub_255D: - LDA zp_CA - BPL loc_2564 - LDA zp_C9 - RTS - -loc_2564: - LDY #$FF - STY zp_CA - RTS - -sub_2569: - LDA zp_CD - BPL loc_256F - SEC - RTS - -loc_256F: - BNE loc_2584 - INC zp_CD - JSR sub_237E - STA zp_CF - JSR sub_237E - STA zp_CE - LDA zp_CF - LSR - LSR - JMP loc_25AD - -loc_2584: - SEC - SBC #1 - BNE loc_259F - LDA #2 - STA zp_CD - LDA zp_CE - STA zp_8E - LDA zp_CF - ASL zp_8E - ROL - ASL zp_8E - ROL - ASL zp_8E - ROL - JMP loc_25AD - -loc_259F: - LDA #0 - STA zp_CD - LDA zp_CF - BPL loc_25AB - LDA #$FF - STA zp_CD - -loc_25AB: - LDA zp_CE - -loc_25AD: - AND #$1F - CLC - RTS - -byte_2686: - !BYTE 0 - !BYTE $D, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '!', '?', '_' - !BYTE '#', $27, '"', '/', $5C, '-', ':', '(', ')' - -sub_26A0: - STA zp_8E - LDX #0 - STX zp_8E+1 - ASL - ROL zp_8E+1 - ASL - ROL zp_8E+1 - ASL - ROL zp_8E+1 - CLC - ADC zp_8E - BCC loc_26B6 - INC zp_8E+1 - -loc_26B6: - CLC - ADC #$35 - BCC loc_26BD - INC zp_8E+1 - -loc_26BD: - CLC - ADC zp_B2 - STA zp_8E - LDA zp_8E+1 - ADC zp_B3 - STA zp_8E+1 - RTS - -emit_char - sty yreg+1 - inc zpage_ptr - ldy zpage_ptr - sta (zpage_info),y - dec max_chars - beq fail_slot -yreg - ldy #0 - rts - -fail_slot -stack_pointer - ldx #0 - txs - rts - -max_chars !byte 0 - -zpage_old -!if *+(zp_DC-zp_8C)>=read_buffer { - !error "Code is too large" -} \ No newline at end of file diff --git a/src/zinfo/z1/z1.s b/src/zinfo/z1/z1.s new file mode 100644 index 0000000..e67c01e --- /dev/null +++ b/src/zinfo/z1/z1.s @@ -0,0 +1,682 @@ +;license:MIT +;(c) 2018 by qkumba + +!cpu 6502 +!to "build/zinfo1#063000",plain +*=$3000 + +save_name = $2006 +read_buffer = $3500 ;512 bytes +file_buffer = $3900 ;$400 bytes, must not overlap with read_buffer, must be page-aligned +record_size = $40 +info_buffer = $2000 ;record_size*8 (currently $200) bytes, can be anywhere +zpage_info = $fe ;word +zpage_ptr = $fd +name_offset = 0 ;1+37 bytes +time_offset = 42 ;1+8 bytes ("12:01 pm") +score_offset = 51 ;1+6 bytes (-12345) +moves_offset = 58 ;1+5 bytes (12345) + + +;zpage used by Infocom code + +zp_91 = $91 +zp_92 = $92 +zp_93 = $93 +zp_94 = $94 +zp_95 = $95 +zp_96 = $96 +zp_98 = $98 +zp_99 = $99 +zp_BA = $BA +zp_BB = $BB +zp_CE = $CE +zp_CF = $CF +zp_D0 = $D0 +zp_D1 = $D1 +zp_D2 = $D2 +zp_E2 = $E2 +zp_E3 = $E3 +zp_E4 = $E4 +zp_E5 = $E5 +zp_E6 = $E6 +zp_E7 = $E7 + + jsr $bf00 + !byte $c8 ;open file + !word c8_parms + bcs quit + lda c8_handle + sta ce_handle + sta ca_handle + + jsr exchange + lda #>info_buffer + sta zpage_info+1 + lda #info_buffer + sta zpage_info+1 + lda #0 { + sec + sbc #name_offset + } + ldy #name_offset + sta (zpage_info),y + + lda #0 + sta max_chars ;can't overflow anymore + ldy #time_offset + sta (zpage_info),y + + LDA #$11 ; score + JSR fetch_obj + + ldy #score_offset + sty zpage_ptr + JSR sub_1521 + + sec + lda zpage_ptr + sbc #score_offset + ldy #score_offset + sta (zpage_info),y + + LDA #$12 ; moves + JSR fetch_obj + + ldy #moves_offset + sty zpage_ptr + + JSR sub_1521 + + sec + lda zpage_ptr + sbc #moves_offset + ldy #moves_offset + sta (zpage_info),y + rts + +fetch_obj: + SEC + SBC #$10 + ASL + STA zp_E2 + LDA #0 + ROL + STA zp_E3 + CLC + LDA zp_98 + ADC zp_E2 + STA zp_E2 + LDA zp_99 + ADC zp_E3 + STA zp_E3 + LDY #0 + lda zp_E3 + pha + jsr load_page + lda #>read_buffer + sta zp_E3 + LDA (zp_E2),Y + STA zp_E5 + INY + LDA (zp_E2),Y + STA zp_E4 + pla + sta zp_E3 + RTS + +decompress: + JSR sub_170D + LDY #7 + jsr load_page + lda #>read_buffer + sta zp_E5 + LDA (zp_E4),Y + STA zp_E3 + INY + LDA (zp_E4),Y + STA zp_E2 + LDA zp_E2 + STA zp_E4 + LDA zp_E3 + STA zp_E5 + INC zp_E4 + BNE loc_E01 + INC zp_E5 + +loc_E01: + JSR sub_1823 + JMP loc_1948 + +sub_1521: + LDA zp_E5 + BPL loc_1528 + JSR sub_155A + +loc_1528: + LDA #0 + STA zp_E6 + +loc_152C: + LDA zp_E5 + ORA zp_E4 + BEQ loc_1545 + LDA #$A + STA zp_E2 + LDA #0 + STA zp_E3 + JSR sub_1613 + LDA zp_E2 + PHA + INC zp_E6 + JMP loc_152C + +loc_1545: + LDA zp_E6 + BEQ loc_1555 + +loc_1549: + PLA + CLC + ADC #$30 + JSR emit_char + DEC zp_E6 + BNE loc_1549 + RTS + +loc_1555: + LDA #$30 + JMP emit_char + +sub_155A: + LDA #$2D + JSR emit_char + JMP loc_1677 + +sub_1613: + LDA zp_E6 + PHA + LDA zp_E7 + PHA + LDA zp_E4 + STA zp_E6 + LDA zp_E5 + STA zp_E7 + LDA #0 + STA zp_E4 + LDA #0 + STA zp_E5 + LDX #$11 + +loc_162B: + SEC + LDA zp_E4 + SBC zp_E2 + TAY + LDA zp_E5 + SBC zp_E3 + BCC loc_163C + STA zp_E5 + TYA + STA zp_E4 + +loc_163C: + ROL zp_E6 + ROL zp_E7 + ROL zp_E4 + ROL zp_E5 + DEX + BNE loc_162B + CLC + LDA zp_E5 + ROR + STA zp_E3 + LDA zp_E4 + ROR + STA zp_E2 + LDA zp_E6 + STA zp_E4 + LDA zp_E7 + STA zp_E5 + PLA + STA zp_E7 + PLA + STA zp_E6 + RTS + +loc_1677: + SEC + LDA #0 + SBC zp_E4 + STA zp_E4 + LDA #0 + SBC zp_E5 + STA zp_E5 + RTS + +sub_170D: + STA zp_E4 + LDA #0 + STA zp_E5 + LDA zp_E4 + ASL zp_E4 + ROL zp_E5 + ASL zp_E4 + ROL zp_E5 + ASL zp_E4 + ROL zp_E5 + CLC + ADC zp_E4 + BCC loc_1729 + INC zp_E5 + CLC + +loc_1729: + ADC #$35 + STA zp_E4 + BCC loc_1731 + INC zp_E5 + +loc_1731: + lda zp_BA + CLC + ADC zp_E4 + STA zp_E4 + lda #0 + ADC zp_E5 + STA zp_E5 + RTS + +sub_1823: + LDA zp_E4 + STA zp_93 + LDA zp_E5 + STA zp_91 + LDA #0 + STA zp_92 + +loc_182F: + LDA #0 + STA zp_96 + RTS + +sub_1863: + JSR sub_1870 + PHA + JSR sub_1870 + STA zp_E4 + PLA + STA zp_E5 + RTS + +sub_1870: + LDA zp_96 + BEQ loc_1889 + LDY zp_93 + lda zp_95 + pha + jsr load_page + lda #>read_buffer + sta zp_95 + LDA (zp_94),Y + STY zp_93 + tay + pla + sta zp_95 + tya + inc zp_93 + BEQ loc_187E + RTS + +loc_187E: + LDY #0 + STY zp_96 + INC zp_91 + BNE locret_1888 + INC zp_92 + +locret_1888: + RTS + +loc_1889: + LDA zp_91 + STA zp_95 + LDA #0 + STA zp_94 + LDA #$FF + STA zp_96 + JMP sub_1870 + +loc_1948: + LDA #0 + STA zp_CF + STA zp_D0 + LDA #$FF + STA zp_CE + +loc_1952: + JSR sub_1A08 + BCC loc_1958 + RTS + +loc_1958: + STA zp_E6 + BEQ loc_19AB + CMP #1 + BEQ loc_19B0 + CMP #4 + BCC loc_19BA + CMP #6 + BCC loc_19CA + JSR sub_19FC + ORA #0 + BNE loc_197A + LDA #$5B + +loc_1971: + CLC + ADC zp_E6 + +loc_1974: + JSR emit_char + JMP loc_1952 + +loc_197A: + CMP #1 + BNE loc_1983 + LDA #$3B + JMP loc_1971 + +loc_1983: + LDA zp_E6 + SEC + SBC #7 + BCC loc_1991 + TAY + LDA byte_19E3,Y + JMP loc_1974 + +loc_1991: + JSR sub_1A08 + ASL + ASL + ASL + ASL + ASL + PHA + JSR sub_1A08 + STA zp_E6 + PLA + ORA zp_E6 + CMP #9 + BNE loc_1974 + LDA #$20 + JMP loc_1974 + +loc_19AB: + LDA #$20 + JMP loc_1974 + +loc_19B0: + LDA #$D + JSR emit_char + LDA #$A + JMP loc_1974 + +loc_19BA: + JSR sub_19FC + CLC + ADC #2 + ADC zp_E6 + JSR sub_19D8 + STA zp_CE + JMP loc_1952 + +loc_19CA: + JSR sub_19FC + CLC + ADC zp_E6 + JSR sub_19D8 + STA zp_CF + JMP loc_1952 + +sub_19D8: + CMP #3 + BCC locret_19E2 + SEC + SBC #3 + JMP sub_19D8 + +locret_19E2: + RTS + +byte_19E3: + !BYTE '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '!', '?', '_', '#' + !BYTE $27, '"', '/', $5C, '|', '-', ':', '(', ')' + +sub_19FC: + LDA zp_CE + BPL loc_1A03 + LDA zp_CF + RTS + +loc_1A03: + LDY #$FF + STY zp_CE + RTS + +sub_1A08: + LDA zp_D0 + BPL loc_1A0E + SEC + RTS + +loc_1A0E: + BNE loc_1A25 + INC zp_D0 + JSR sub_1863 + LDA zp_E4 + STA zp_D1 + LDA zp_E5 + STA zp_D2 + LDA zp_D2 + LSR + LSR + AND #$1F + CLC + RTS + +loc_1A25: + SEC + SBC #1 + BNE loc_1A42 + LDA #2 + STA zp_D0 + LDA zp_D2 + LSR + LDA zp_D1 + ROR + TAY + LDA zp_D2 + LSR + LSR + TYA + ROR + LSR + LSR + LSR + AND #$1F + CLC + RTS + +loc_1A42: + LDA #0 + STA zp_D0 + LDA zp_D2 + BPL loc_1A4E + LDA #$FF + STA zp_D0 + +loc_1A4E: + LDA zp_D1 + AND #$1F + CLC + RTS + +emit_char + sty yreg+1 + inc zpage_ptr + ldy zpage_ptr + sta (zpage_info),y + dec max_chars + beq fail_slot +yreg + ldy #0 + rts + +fail_slot +stack_pointer + ldx #0 + txs + rts + +max_chars !byte 0 + +zpage_old +!if *+(zp_E7-zp_91)>=read_buffer { + !error "Code is too large" +} \ No newline at end of file diff --git a/src/zinfo/zinfo.system.s b/src/zinfo/zinfo.system.s new file mode 100644 index 0000000..2b26487 --- /dev/null +++ b/src/zinfo/zinfo.system.s @@ -0,0 +1,173 @@ +;license:MIT +;(c) 2018 by qkumba + +!to "ZINFO.SYSTEM",plain +*=$2000 + +jmp init +!byte $ee,$ee,64 +!fill 64 + +filetype=$f5 +auxtype=$8000 ;really $80xx + + ;get prefix, if any +init + lda $bf30 + sta c5_parms+1 +- jsr $bf00 +op_c7 + !byte $c7 + !word c7_parms + ldx $200 + bne + + + ;if not, get volume name + + jsr $bf00 + !byte $c5 + !word c5_parms + ldx $201 + inx + txa + and #$0f + sta $200 + lda #$2f + sta $201 + + ;set that as prefix + + dec op_c7 + bne - ++ lda #$2f + cmp $200,x + beq + + inc $200 + sta $201,x + + ;get attributes for passed file + ++ jsr $bf00 + !byte $c4 + !word c4_parms + bcc + +quit jsr $bf00 + !byte $65 + !word quit_parms ++ lda c4_parms+4 + cmp #filetype + bne quit + lda c4_parms+6 + cmp #>auxtype + bne quit + + ;select interpreter by auxtype + ;1, 2, 3, 4, 5, "$55" (special case) + + lda c4_parms+5 + beq quit + cmp #$55 + beq + + cmp #6 + bcs quit + dec filename + ora #$30 + sta version ++ + + ;get volume name + + inc c5_parms+3 + jsr $bf00 + !byte $c5 + !word c5_parms + ldx $301 + inx + txa + and #$0f + sta $300 + lda #$2f + sta $301 + + ;use that for intepreter location + + jsr $bf00 + !byte $c6 + !word c6_parms + + ;open/read/close + + jsr $bf00 + !byte $c8 + !word c8_parms + lda c8_parms+5 + sta ca_parms+1 + jsr $bf00 + !byte $ca + !word ca_parms + jsr $bf00 + !byte $cc + !word cc_parms + + ;replace suffix + + ldy $2006 + inc $2006 + lda #'V' + sta $2006+1,y + lda #'A' + sta $2006,y + lda #'S' + sta $2006-1,y + + ;set prefix to passed file + + jsr $bf00 + !byte $c6 + !word c7_parms + + ;run interpreter + + jmp $3000 + +c7_parms +cc_parms + !byte 1 + !word $200 + +c5_parms + !byte 2 + !byte 0 + !word $201 + !byte $d1 + +c6_parms + !byte 1 + !word $300 + +c4_parms + !byte $0a + !word $2006 + !text "qkumba was here" + +c8_parms + !byte 3 + !word filename + !word $800 + !byte 0 + +quit_parms +ca_parms + !byte 4 + !byte $ff + !word $3000 + !word $ffff + !word $ffff + +filename + !byte (filename_e-filename)-1 + !text "LIB/ZINFO" +version !text "5U" +filename_e + +!byte $D3,$C1,$CE,$A0,$C9,$CE,$C3,$AE