From 3244b50e1e1c1a0b920535a0ca844911015f4a2a Mon Sep 17 00:00:00 2001 From: Zorchenhimer Date: Sun, 28 Dec 2025 17:20:50 -0500 Subject: [PATCH] Figure out more post-copy stuff - Confirmed the layout of the ROM-QD files - Confirmed the SLOW ROM setup for ROM-QD disks --- Makefile | 37 +++++++++++++++--- dk3.cfg | 7 ++++ dk3_file4-post-copy.cfg | 67 ++++++++++++++++++++++---------- dk3_file4.cfg | 27 ++++++++----- dk3_rom.cfg | 7 ++++ rom-qd.cfg | 20 ++++++++++ sf_rom-qd_file1_precopy.cfg | 4 ++ sf_slow_rom-qd_file1_precopy.cfg | 24 +++++++++++- sf_slow_rom-qd_postromcopy.cfg | 14 +++++++ 9 files changed, 170 insertions(+), 37 deletions(-) create mode 100644 dk3.cfg create mode 100644 dk3_rom.cfg create mode 100644 rom-qd.cfg create mode 100644 sf_slow_rom-qd_postromcopy.cfg diff --git a/Makefile b/Makefile index 6609cc6..ac4f303 100644 --- a/Makefile +++ b/Makefile @@ -2,12 +2,12 @@ export PATH := $(PATH):/home/nick/code/nes/go-fds/bin -LBL=../../go-dasm-labels/bin/dasm2mlb -DA=../../cc65/bin/da65 - all: dasm/ bins/ labels/ \ dasm/disksys.asm \ dasm/dk3_file4.asm \ + dasm/dk3_rom.asm \ + dasm/dk3.asm \ + dasm/dk3_file3.asm \ dasm/dk3_file4-post-copy.asm \ dasm/sf_rom-qd_file1_precopy.asm \ dasm/sf_rom-qd_file1_postcopy.asm \ @@ -17,11 +17,14 @@ all: dasm/ bins/ labels/ \ dasm/sf_slow_rom_file1_postcopy.asm \ dasm/sf_slow_qd_file1_precopy.asm \ dasm/sf_slow_qd_file1_postcopy.asm \ + dasm/sf_slow_rom-qd_postromcopy.asm \ labels/sf_slow_rom_file1_postcopy.mlb \ labels/sf_slow_qd_file1_postcopy.mlb \ labels/sf_slow_rom-qd_file1_postcopy.mlb \ - labels/sf_rom-qd_file1_postcopy.mlb + labels/sf_rom-qd_file1_postcopy.mlb \ + labels/dk3_file4-post-copy.mlb +dasm/dk3_file3.asm: bins/dk3_file3.bin dasm/dk3_file4.asm: bins/dk3_file4.bin dasm/dk3_file4-post-copy.asm: bins/dk3_file4.bin dasm/sf_rom-qd_file1_precopy.asm: bins/sf_rom-qd_file1.bin @@ -32,6 +35,7 @@ dasm/sf_slow_rom_file1_precopy.asm: bins/sf_slow_rom_file1.bin dasm/sf_slow_rom_file1_postcopy.asm: bins/sf_slow_rom_file1.bin dasm/sf_slow_qd_file1_precopy.asm: bins/sf_slow_qd_file1.bin dasm/sf_slow_qd_file1_postcopy.asm: bins/sf_slow_qd_file1.bin +dasm/sf_slow_rom-qd_postromcopy.asm: bins/sf_slow_rom-qd_file1.bin clean: -rm dasm/* bins/* labels/* @@ -39,14 +43,35 @@ clean: %/: -mkdir $@ +dasm/dk3_rom.asm: bins/dk3_file2.bin bins/dk3_file3.bin dk3_rom.cfg + tail -c 6144 bins/dk3_file2.bin > bins/dk3_rom.bin + cat bins/dk3_file3.bin >> bins/dk3_rom.bin + head -c 10240 bins/dk3_file2.bin >> bins/dk3_rom.bin + da65 -i dk3_rom.cfg -o $@ + +dasm/dk3.asm: dk3.cfg + da65 -i $< -o $@ + dasm/%.asm: %.cfg.tmp - $(DA) -i $< -o $@ + da65 -i $< -o $@ + +sf_slow_rom-qd_postromcopy.cfg.tmp: sf_slow_rom-qd_postromcopy.cfg rom-qd.cfg labels.cfg + cat $^ > $@ + +dk3_file4-post-copy.cfg.tmp: dk3_file4-post-copy.cfg rom-qd.cfg labels.cfg + cat $^ > $@ %.cfg.tmp: %.cfg labels.cfg cat $^ > $@ labels/%.mlb: %.cfg.tmp - $(LBL) $^ $@ --rom-start 0xE000 --ram-start 0x5000 + dasm2mlb $^ $@ --rom-start 0xE000 --ram-start 0x5000 + +bins/dk3_file2.bin: roms/sf_dk3.fds + fdsextract --side 0 --file-num 2 --output $@ $^ + +bins/dk3_file3.bin: roms/sf_dk3.fds + fdsextract --side 0 --file-num 3 --output $@ $^ bins/dk3_file4.bin: roms/sf_dk3.fds fdsextract --side 0 --file-num 4 --output $@ $^ diff --git a/dk3.cfg b/dk3.cfg new file mode 100644 index 0000000..55601ad --- /dev/null +++ b/dk3.cfg @@ -0,0 +1,7 @@ +global { + cpu "6502"; + inputname "roms/dk3_mirrored.prg"; + startaddr $8000; + commentcolumn 50; + comments 3; +}; diff --git a/dk3_file4-post-copy.cfg b/dk3_file4-post-copy.cfg index 0ffbbc6..cbecaa1 100644 --- a/dk3_file4-post-copy.cfg +++ b/dk3_file4-post-copy.cfg @@ -4,39 +4,66 @@ global { startaddr $7C00; commentcolumn 50; comments 3; + + newlineafterjmp true; + newlineafterrts true; }; -label { addr $7C47; name "L7C47"; paramsize 3; }; -label { addr $7C5F; name "L7C5F_loop"; }; -label { addr $7D83; name "L7D83_loop"; }; -label { addr $7DCA; name "SF_disable_fds_io"; }; +label { addr $7C00; name "PostCopy_Entry"; }; +label { addr $7C3B; name "doXfer"; }; + +label { addr $7C47; name "SF_Xfer"; paramsize 3; comment "Transfer data. Expects two inline parameters\n; (3 bytes): Xfer count, struct pointer."; }; +label { addr $7CBD; name "SF_CPU_Xfer"; }; + +label { addr $7D43; name "SF_PPU_ReadXfer"; }; +label { addr $7D74; name "readPPU"; comment "Read 256 bytes from the PPU.\n; Destination address must be written to $7D88 and\n; PPU address high byte must be written to $7D75 before calling."; }; + +label { addr $7CFB; name "SF_PPU_WriteXfer"; }; +label { addr $7D2D; name "writePPU"; comment "Read 256 bytes from the PPU.\n; Source data address must be written to $7D3B and\n; PPU address high byte must be written to $7D2E before calling."; }; + +label { addr $7C5F; name "L7C5F_loop"; }; +label { addr $7D83; name "L7D83_loop"; }; +label { addr $7DCA; name "SF_disable_fds_io"; }; # "cv" prefix == "code var" (self modifying code) -label { addr $7C6B; name "cv7C6B"; }; -label { addr $7C6C; name "cv7C6C"; }; +label { addr $7C6B; name "paramPtr_7C6B"; size 3; }; +label { addr $7C7F; name "cv7C7F"; size 2; }; +label { addr $7C8C; name "cv7C8C"; size 2; }; -label { addr $7C7F; name "cv7C7F"; }; -label { addr $7C80; name "cv7C80"; }; +label { addr $7C87; name "L7C87_loop"; }; +label { addr $7CB7; name "L7CB7_next"; }; +label { addr $7C8B; name "L7C8B_inner"; }; -label { addr $7C87; name "L7C87_loop"; }; -label { addr $7CB7; name "L7CB7_next"; }; +label { addr $7CE2; name "cv7CE2"; }; +label { addr $7CE5; name "cv7CE5"; }; -label { addr $7C8C; name "cv7C8C"; }; -label { addr $7C8D; name "cv7C8D"; }; +label { addr $7D2E; name "cv7D2E"; comment "lda immediate value"; }; +label { addr $7D3B; name "cv7D3B"; }; -label { addr $7CE2; name "cv7CE2"; }; -label { addr $7CE5; name "cv7CE5"; }; +label { addr $7D88; name "cv7D88"; comment "sta addr high byte"; }; +label { addr $7D75; name "cv7D75"; }; -label { addr $7D2E; name "cv7D2E"; comment "lda immediate value"; }; -label { addr $7D3B; name "cv7D3B"; }; +label { addr $7EFF; name "var_Mirroring"; comment "Mirror value. 0 = horiz, 1 = vert"; }; +label { addr $7BFE; name "var_SlowCheck"; size 2; }; +label { addr $7FDE; name "var_LoopCounter"; }; +label { addr $7FDF; name "param_Transfer"; size 5; }; +label { addr $7FD0; name "var_PageCount"; }; -label { addr $7D88; name "cv7D88"; comment "sta addr high byte"; }; -label { addr $7D75; name "cv7D75"; }; +#label { addr $7800; name "SF_SlowSetup"; }; +label { addr $7C11; name ""; comment "This is only present if the SLOW rom was\n; loaded beforehand. It would have sat at\n; $D800 before the copy loop."; }; +label { addr $7C27; name "bVert"; }; +label { addr $7C2A; name "bHoriz"; }; + +label { addr $7C35; name "SF_ClearReg"; }; +label { addr $7C37; name "SF_SetReg"; }; range { start $7C47; end $7DB1; type code; }; -range { start $7DF1; end $7EFE; type bytetable; }; +range { start $7DF1; end $7EFF; type bytetable; }; range { start $7F39; end $7FFE; type bytetable; }; +range { start $7C42; end $7C46; type bytetable; }; -range { start $7EFF; end $7F36; type code; name "precopy_copyloop"; } ; +range { start $7F00; end $7F36; name "precopy_copyloop"; type code; } ; range { start $7DB2; end $7DC8; type bytetable; }; +label { addr $7DD5; name "SF_SetHoriz"; comment "Set FDS horizontal mirroring"; }; +label { addr $7DDF; name "SF_SetVert"; comment "Set FDS vertical mirroring"; }; diff --git a/dk3_file4.cfg b/dk3_file4.cfg index 436335d..e025785 100644 --- a/dk3_file4.cfg +++ b/dk3_file4.cfg @@ -3,18 +3,27 @@ global { cpu "6502"; inputname "bins/dk3_file4.bin"; startaddr $DC00; - commentcolumn 30; + commentcolumn 50; comments 3; }; -range { start $DDF1; end $DEFF; type bytetable; }; -range { start $DF39; end $DFD8; type bytetable; }; -range { start $DFE3; end $DFEF; type bytetable; }; +range { start $DC00; end $DEFF; type bytetable; }; +range { start $DF39; end $DFEF; type bytetable; }; +range { start $DFF1; end $DFF5; type bytetable; }; range { start $DF00; end $DF36; type code; }; -label { name "entry"; addr $DF00; }; -label { name "ram_entry"; addr $DC00; }; -label { name "empty_vector"; addr $DFF0; }; -label { name "copy_loop_a"; addr $DF05; }; -label { name "copy_loop_b"; addr $DF20; }; +label { addr $DF00; name "entry"; }; +label { addr $DFF0; name "empty_vector"; }; +label { addr $DF05; name "copy_loop_a"; comment "\n; Copy $5800-$7FFF to $5000-$77FF"; }; +label { addr $DF20; name "copy_loop_b"; comment "\n; Copy $D800-$DFFF to $7800-$7FFF\n; Note that $D800-$DBFF isn't on this disk.\n; That's the slow rom if it was loaded first."; }; +label { addr $7C00; name "PostCopy_Entry"; }; + +label { addr $DF09; name "cvDF09"; }; +label { addr $DF0C; name "cvDF0C"; }; +label { addr $DF24; name "cvDF24"; }; +label { addr $DF27; name "cvDF27"; }; + +label { addr $DEFF; name "var_Mirroring"; comment "Mirror value. 0 = horiz, 1 = vert"; }; + +label { addr $07FF; name "var_07FF"; }; diff --git a/dk3_rom.cfg b/dk3_rom.cfg new file mode 100644 index 0000000..cb1f021 --- /dev/null +++ b/dk3_rom.cfg @@ -0,0 +1,7 @@ +global { + cpu "6502"; + inputname "bins/dk3_rom.bin"; + startaddr $8000; + commentcolumn 50; + comments 3; +}; diff --git a/rom-qd.cfg b/rom-qd.cfg new file mode 100644 index 0000000..cb2fc44 --- /dev/null +++ b/rom-qd.cfg @@ -0,0 +1,20 @@ + +label { addr $7800; name "SF_SlowSetup"; }; +label { addr $7839; name "SF_SlowNMI"; }; +label { addr $7822; name "SF_ReplaceNMI"; }; + +label { addr $7F70; name "var_7F70_state"; }; +label { addr $7F71; name "var_7F71"; }; +label { addr $7F76; name "var_7F76"; size 8; }; +label { addr $7F72; name "var_7F72"; size 2; }; + +label { addr $7969; name "tbl_LedBlink"; size 128; }; + +label { addr $7896; name "Orig_NMI"; size 2; }; +label { addr $77FA; name "FDS_NMI"; size 2; }; +label { addr $7BFC; name "dat_7BFC"; size 2; }; + +range { start $7800; end $7896; type code; }; +range { start $7969; end $7BFF; type bytetable; }; + +label { addr $7C14; name "SF_ROMQD_Start"; comment "SLOW rom not found"; }; diff --git a/sf_rom-qd_file1_precopy.cfg b/sf_rom-qd_file1_precopy.cfg index a6f7dfe..bd1dea6 100644 --- a/sf_rom-qd_file1_precopy.cfg +++ b/sf_rom-qd_file1_precopy.cfg @@ -26,3 +26,7 @@ label { addr $DF0C; name "cvDF0C"; }; # Uses NMI vector as a reset vector label { addr $DFF0; name "LDFF0_irq"; }; +#label { addr $DB6E; name "datDB6E"; size 2; }; +#range { start $DB6E; end $DB6F; type bytetable; }; + +#range {start $DB70; end $DB87; type bytetable; }; diff --git a/sf_slow_rom-qd_file1_precopy.cfg b/sf_slow_rom-qd_file1_precopy.cfg index d4b5863..e7e0e15 100644 --- a/sf_slow_rom-qd_file1_precopy.cfg +++ b/sf_slow_rom-qd_file1_precopy.cfg @@ -8,10 +8,30 @@ global { label { addr $DFF0; name "IRQ"; }; label { addr $DFC0; name "Entry"; }; -label { addr $DB00; name "Start"; }; +label { addr $DB00; name "Start"; }; range { start $DB00; end $DB6D; type code; }; range { start $DFE3; end $DFEF; type bytetable; }; -range { start $DD7E; end $DFBF; type bytetable; }; + +range { start $DD80; end $DFBF; name "LDD80"; type bytetable; }; range { start $DFF1; end $DFF5; type bytetable; }; + +label { addr $DD7E; name "LDD7E"; size 2; }; +range { start $DD7E; end $DD7F; type bytetable; }; + +label { addr $DB6E; name "LDB6E"; size 2; }; +range { start $DB6E; end $DB6F; type bytetable; }; +range { start $DB70; end $DB87; name "LDB70"; type bytetable; }; + +range { start $D969; end $DAFF; type bytetable; }; +range { start $DCB2; end $DD5B; type bytetable; }; + +label { addr $DC60; name "SF_MenuInit"; }; +label { addr $DCA8; name "SF_MenuInit_Done"; }; +label { addr $DB40; name "SF_FDS_ResetIO"; }; +label { addr $DD5C; name "SF_DrawVRAMStruct"; comment "Pointer to struct should be written to\n; $DD67.w before calling."; }; + +label { addr $7FF0; name "var_7FF0"; }; + +label { addr $DD67; name "cv_DD67"; size 2; }; diff --git a/sf_slow_rom-qd_postromcopy.cfg b/sf_slow_rom-qd_postromcopy.cfg new file mode 100644 index 0000000..8be4f72 --- /dev/null +++ b/sf_slow_rom-qd_postromcopy.cfg @@ -0,0 +1,14 @@ +global { + cpu "6502"; + inputname "bins/sf_slow_rom-qd_file1.bin"; + startaddr $7800; + inputsize $0400; + commentcolumn 50; + comments 3; +}; + +label { addr $7F74; name "var_BackupA"; }; +label { addr $7F75; name "var_BackupX"; }; + +label { addr $788A; name "ledOn"; }; +label { addr $7873; name "ledOff"; };