diff --git a/Makefile b/Makefile index 853a3a6..b295d3f 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,7 @@ asm: md $(ACME) -r build/zinfo2.lst src/zinfo/z2/z2.s $(ACME) -r build/zinfo3.lst src/zinfo/z3/z3.s $(ACME) -r build/zinfo4.lst src/zinfo/z4/z4.s + $(ACME) -r build/zinfo5.lst src/zinfo/z5/z5.s dsk: md asm cp res/"Pitch Dark.master games collection.do.not.edit.2mg" build/"$(DISK)" @@ -56,6 +57,7 @@ dsk: md asm $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/LIB/" "build/ZINFO2" $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/LIB/" "build/ZINFO3" $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/LIB/" "build/ZINFO4" + $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/LIB/" "build/ZINFO5" # TODO remove these save game files, just here for development $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/Z/WISHBRINGER/" "res/R69.850920.SAV" $(CADIUS) ADDFILE build/"$(DISK)" "/PITCH.DARK/Z/ZORK.I/" "res/R88.840726.SAV" diff --git a/src/zinfo/z5/gamedata.txt b/src/zinfo/z5/gamedata.txt new file mode 100644 index 0000000..4a34e2b --- /dev/null +++ b/src/zinfo/z5/gamedata.txt @@ -0,0 +1,188 @@ +gamelist + + !byte bzoner9e-bzoner9b +bzoner9b + !text "R9.871008.SAV" +bzoner9e + + !byte hgttgr31e-hgttgr31b +hgttgr31b + !text "R31.871119.SAV" +hgttgr31e + + !byte lgopr4e-lgopr4b +lgopr4b + !text "R4.880405.SAV" +lgopr4e + + !byte planetr10e-planetr10b +planetr10b + !text "R10.880531.SAV" +planetr10e + + !byte sherlockr21e-sherlockr21b +sherlockr21b + !text "R21.871214.SAV" +sherlockr21e + + !byte sherlockr26e-sherlockr26b +sherlockr26b + !text "R26.880127.SAV" +sherlockr26e + + !byte wishbringr23e-wishbringr23b +wishbringr23b + !text "R23.880706.SAV" +wishbringr23e + + !byte zorkr52e-zorkr52b +zorkr52b + !text "R52.871125.SAV" +zorkr52e + + !byte ztuur16e-ztuur16b +ztuur16b + !text "R16.970828.SAV" +ztuur16e + + !byte 0 ;end of list + +gameloc +;bzoner9 + !byte $a4 + +;hgttgr31 + !byte $84 + +;lgopr4 + !byte $81 + +;planetr10 + !byte $b2 + +;sherlockr21 + !byte $75 + +;sherlockr26 + !byte $74 + +;wishbringr23 + !byte $b1 + +;zorkr52 + !byte $7b + +;ztuur16 + !byte $28 + +gametime +;bzoner9 + !byte $8a + +;hgttgr31 + !byte 0 ;no time + +;lgopr4 + !byte 0 ;no time + +;planetr10 + !byte $a4 + +;sherlockr21 + !byte $6e + +;sherlockr26 + !byte $6d + +;wishbringr23 + !byte $9a + +;zorkr52 + !byte 0 ;no time + +;ztuur16 + !byte 0 ;no time + +gamescore +;bzoner9 + !byte 0 ;no score + +;hgttgr31 + !byte $79 + +;lgopr4 + !byte $77 + +;planetr10 + !byte $9b + +;sherlockr21 + !byte $aa + +;sherlockr26 + !byte $ab + +;wishbringr23 + !byte $9c + +;zorkr52 + !byte $6e + +;ztuur16 + !byte $16 + +gamemoves +;bzoner9 + !byte 0 ;no moves + +;hgttgr31 + !byte $6b + +;lgopr4 + !byte $6a + +;planetr10 + !byte 0 ;no moves + +;sherlockr21 + !byte 0 ;no moves + +;sherlockr26 + !byte 0 ;no moves + +;wishbringr23 + !byte $8d + +;zorkr52 + !byte $64 + +;ztuur16 + !byte $17 + +gameday +;bzoner9 + !byte 0 ;no day + +;hgttgr31 + !byte 0 ;no day + +;lgopr4 + !byte 0 ;no day + +;planetr10 + !byte $be + +;sherlockr21 + !byte $6e + +;sherlockr26 + !byte $6d + +;wishbringr23 + !byte 0 ;no day + +;zorkr52 + !byte 0 ;no day + +;ztuur16 + !byte 0 ;no day diff --git a/src/zinfo/z5/z5.s b/src/zinfo/z5/z5.s new file mode 100644 index 0000000..47941dd --- /dev/null +++ b/src/zinfo/z5/z5.s @@ -0,0 +1,1088 @@ +;license:MIT +;(c) 2018 by qkumba + +!cpu 6502 +!to "build/zinfo5",plain +*=$3000 + +save_name = $2006 +read_buffer = $2e00 ;512 bytes +info_buffer = $2000 ;record_size*8, 600 ($258) bytes +zpage_info = $fe ;word +zpage_ptr = $fd +zpage_gamind = $fc +name_offset = 0 ;1+37 bytes, a zero-length name is an empty record +time_offset = 42 ;1+8 bytes ("12:01 pm") +score_offset = 51 ;1+6 bytes (-12345) +moves_offset = 58 ;1+5 bytes (12345) +date_offset = 64 ;1+10 bytes ("10/10/2099") +record_size = 75 ;bytes + +;zpage used by Infocom code + +byte_FE52= $52 +byte_FE53= $53 +zp_58 = $58 +zp_59 = $59 +zp_5A = $5a +zp_5B = $5b +zp_6B = $6b +zp_6C = $6c +zp_6D = $6d +zp_6E = $6e +zp_7B = $7b +zp_7C = $7c +zp_7D = $7d +zp_7E = $7e +zp_7F = $7f +zp_80 = $80 +zp_84 = $84 +zp_85 = $85 +zp_87 = $87 +zp_88 = $88 +zp_8A = $8a +zp_8B = $8b +zp_A0 = $a0 +zp_A1 = $a1 +zp_A9 = $a9 +zp_AA = $aa +zp_AB = $ab +zp_AC = $ac +zp_AD = $ad +zp_AE = $ae +zp_AF = $af +zp_C9 = $c9 +zp_CA = $ca +zp_CD = $cd +zp_CE = $ce +zp_CF = $cf +zp_D0 = $d0 +zp_D1 = $d1 +zp_D2 = $d2 +zp_D3 = $d3 +zp_D4 = $d4 + + jsr exchange + jsr $bf00 + !byte $c8 ;open file + !word c8_parms + lda c8_handle + sta ce_handle + sta ca_handle + + lda #>info_buffer + sta zpage_info+1 + lda #gamelist + sta zpage_info+1 +--- ldy #0 + lda (zpage_info),y + beq close ++ pha + cmp $2006 + beq + +-- inc zpage_gamind + pla + sec + adc zpage_info + sta zpage_info + bcc --- + inc zpage_info+1 + bne --- ++ tay +- lda $2006,y + cmp (zpage_info),y + bne -- + dey + bne - + pla + + lda #>info_buffer + sta zpage_info+1 + lda #read_buffer + sta zp_6E + LDA (zp_6D),Y + STA zp_6C + INY + LDA (zp_6D),Y + STA zp_6B + pla + sta zp_6E + RTS + +sub_E1D9: + SEC + SBC #$10 + LDY #0 + STY zp_6E + ASL + ROL zp_6E + CLC + ADC zp_84 + STA zp_6D + LDA zp_6E + ADC zp_85 + STA zp_6E + +locret_E1EE: + RTS + +decompress + JSR sub_F58D + LDY #$C + jsr load_page + lda #>read_buffer + sta zp_6E + LDA (zp_6D),Y + TAX + INY + LDA (zp_6D),Y + STA zp_6D + STX zp_6E + INC zp_6D + BNE loc_E4C4 + INC zp_6E + +loc_E4C4: + JSR sub_F0B9 + JMP sub_F35C + +sub_E7E1: + JSR sub_E7F5 + LDX zp_CD + LDA zp_CE + rts + +sub_E7F5: + LDA zp_59 + STA zp_D2 + EOR zp_5B + STA zp_D1 + LDA zp_58 + STA zp_CD + LDA zp_59 + STA zp_CE + BPL loc_E80A + JSR sub_E833 + +loc_E80A: + LDA zp_5A + STA zp_CF + LDA zp_5B + STA zp_D0 + BPL loc_E817 + JSR sub_E825 + +loc_E817: + JSR sub_E841 + LDA zp_D1 + BPL loc_E821 + JSR sub_E833 + +loc_E821: + LDA zp_D2 + BPL locret_E832 + +sub_E825: + LDA #0 + SEC + SBC zp_CF + STA zp_CF + LDA #0 + SBC zp_D0 + STA zp_D0 + +locret_E832: + RTS + +sub_E833: + LDA #0 + SEC + SBC zp_CD + STA zp_CD + LDA #0 + SBC zp_CE + STA zp_CE + RTS + +sub_E841: + JSR sub_E87F + +loc_E84A: + ROL zp_CD + ROL zp_CE + ROL byte_FE52 + ROL byte_FE53 + LDA byte_FE52 + SEC + SBC zp_CF + TAY + LDA byte_FE53 + SBC zp_D0 + BCC loc_E868 + STY byte_FE52 + STA byte_FE53 + +loc_E868: + DEX + BNE loc_E84A + ROL zp_CD + ROL zp_CE + LDA byte_FE52 + STA zp_CF + LDA byte_FE53 + STA zp_D0 + RTS + +sub_E87F: + LDX #$10 + LDA #0 + STA byte_FE52 + STA byte_FE53 + CLC + RTS + +loc_EA1C: + LDA zp_58 + STA zp_CD + LDA zp_59 + STA zp_CE + LDA zp_CE + BPL loc_EA30 + LDA #$2D + JSR emit_char + JSR sub_E833 + +loc_EA30: + LDA #0 + STA zp_D3 + +loc_EA34: + LDA zp_CD + ORA zp_CE + BEQ loc_EA4C + LDA #$A + STA zp_CF + LDA #0 + STA zp_D0 + JSR sub_E841 + LDA zp_CF + PHA + INC zp_D3 + BNE loc_EA34 + +loc_EA4C: + LDA zp_D3 + BNE loc_EA55 + LDA #$30 + JMP emit_char + +loc_EA55: + PLA + CLC + ADC #$30 + JSR emit_char + DEC zp_D3 + BNE loc_EA55 + RTS + +sub_F0B9: + LDA zp_6D + STA zp_7B + LDA zp_6E + STA zp_7C + LDA #0 + STA zp_7D + JMP sub_F15E + +sub_F15E: + ldy zp_7D + LDA zp_7C + STY zp_80 + STA zp_7F + RTS + +sub_F301: + PHA + INC zp_7C + BNE loc_F308 + INC zp_7D + +loc_F308: + JSR sub_F15E + PLA + RTS + +sub_F319: + LDY zp_7B + lda zp_7F + pha + jsr load_page + lda #>read_buffer + sta zp_7F + LDA (zp_7E),Y + INC zp_7B + BNE loc_F32C + JSR sub_F301 + +loc_F32C: + TAY + pla + sta zp_7F + tya + RTS + +sub_F343: + LDA zp_6D + ASL + STA zp_7B + LDA zp_6E + ROL + STA zp_7C + LDA #0 + ROL + STA zp_7D + ASL zp_7B + ROL zp_7C + ROL zp_7D + JMP sub_F15E + +locret_F35B: + RTS + +sub_F35C: + LDX #0 + STX zp_A9 + STX zp_AD + DEX + STX zp_AA + +loc_F365: + JSR sub_F442 + BCS locret_F35B + STA zp_AB + TAX + BEQ loc_F3B0 + CMP #4 + BCC loc_F3CE + CMP #6 + BCC loc_F3B4 + JSR sub_F424 + TAX + BNE loc_F388 + LDA #$5B + +loc_F37F: + CLC + ADC zp_AB + +loc_F382: + JSR emit_char + JMP loc_F365 + +loc_F388: + CMP #1 + BNE loc_F390 + LDA #$3B + BNE loc_F37F + +loc_F390: + LDA zp_AB + SEC + SBC #6 + BEQ loc_F39E + TAX + LDA byte_F573,X + JMP loc_F382 + +loc_F39E: + JSR sub_F442 + ASL + ASL + ASL + ASL + ASL + STA zp_AB + JSR sub_F442 + ORA zp_AB + JMP loc_F382 + +loc_F3B0: + LDA #$20 + BNE loc_F382 + +loc_F3B4: + SEC + SBC #3 + TAY + JSR sub_F424 + BNE loc_F3C2 + STY zp_AA + JMP loc_F365 + +loc_F3C2: + STY zp_A9 + CMP zp_A9 + BEQ loc_F365 + LDA #0 + STA zp_A9 + BEQ loc_F365 + +loc_F3CE: + SEC + SBC #1 + ASL + ASL + ASL + ASL + ASL + ASL + STA zp_AC + JSR sub_F442 + ASL + CLC + ADC zp_AC + TAY + lda zp_88 + pha + jsr load_page + lda #>read_buffer + sta zp_88 + LDA (zp_87),Y + STA zp_6E + INY + LDA (zp_87),Y + STA zp_6D + pla + sta zp_88 + LDA zp_7D + PHA + LDA zp_7C + PHA + LDA zp_7B + PHA + LDA zp_A9 + PHA + LDA zp_AD + PHA + LDA zp_AF + PHA + LDA zp_AE + PHA + JSR sub_F430 + JSR sub_F35C + PLA + STA zp_AE + PLA + STA zp_AF + PLA + STA zp_AD + PLA + STA zp_A9 + PLA + STA zp_7B + PLA + STA zp_7C + PLA + STA zp_7D + LDX #$FF + STX zp_AA + JSR sub_F15E + JMP loc_F365 + +sub_F424: + LDA zp_AA + BPL loc_F42B + LDA zp_A9 + RTS + +loc_F42B: + LDY #$FF + STY zp_AA + RTS + +sub_F430: + LDA zp_6D + ASL + STA zp_7B + LDA zp_6E + ROL + STA zp_7C + LDA #0 + ROL + STA zp_7D + JMP sub_F15E + +sub_F442: + LDA zp_AD + BPL loc_F448 + SEC + RTS + +loc_F448: + BNE loc_F45D + INC zp_AD + JSR sub_F319 + STA zp_AF + JSR sub_F319 + STA zp_AE + LDA zp_AF + LSR + LSR + JMP loc_F486 + +loc_F45D: + SEC + SBC #1 + BNE loc_F478 + LDA #2 + STA zp_AD + LDA zp_AE + STA zp_6D + LDA zp_AF + ASL zp_6D + ROL + ASL zp_6D + ROL + ASL zp_6D + ROL + JMP loc_F486 + +loc_F478: + LDA #0 + STA zp_AD + LDA zp_AF + BPL loc_F484 + LDA #$FF + STA zp_AD + +loc_F484: + LDA zp_AE + +loc_F486: + AND #$1F + CLC + RTS + +byte_F573: + !BYTE 0, $D, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '!', '?', '_' + !BYTE '#', $27, '"', '/', $5C, '-', ':', '(', ')' + +sub_F58D: + STX zp_6E + ASL + STA zp_6D + ROL zp_6E + LDX zp_6E + ASL + ROL zp_6E + ASL + ROL zp_6E + ASL + ROL zp_6E + SEC + SBC zp_6D + STA zp_6D + LDA zp_6E + STX zp_6E + SBC zp_6E + STA zp_6E + LDA zp_6D + CLC + ADC #$70 + BCC loc_F5B5 + INC zp_6E + +loc_F5B5: + CLC + ADC zp_8A + STA zp_6D + LDA zp_6E + ADC zp_8B + STA zp_6E + 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 diff --git a/winmake.bat b/winmake.bat index 2ec7f54..a72f821 100644 --- a/winmake.bat +++ b/winmake.bat @@ -32,6 +32,7 @@ if "%1" equ "asm" ( %ACME% -r build\zinfo2.lst src\zinfo\z2\z2.s %ACME% -r build\zinfo3.lst src\zinfo\z3\z3.s %ACME% -r build\zinfo4.lst src\zinfo\z4\z4.s +%ACME% -r build\zinfo5.lst src\zinfo\z5\z5.s goto :EOF ) @@ -59,6 +60,7 @@ cscript /nologo bin\fixFileInformation.js build\_FileInformation.txt %CADIUS% ADDFILE "build\%DISK%" "/PITCH.DARK/LIB/" "build\ZINFO2" %CADIUS% ADDFILE "build\%DISK%" "/PITCH.DARK/LIB/" "build\ZINFO3" %CADIUS% ADDFILE "build\%DISK%" "/PITCH.DARK/LIB/" "build\ZINFO4" +%CADIUS% ADDFILE "build\%DISK%" "/PITCH.DARK/LIB/" "build\ZINFO5" goto :EOF )