From 55e2c21f27fed005a2a51bb4748c849e4c6e3eaa Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 22 Feb 2020 00:11:14 +0100 Subject: [PATCH] NES: add FDS and NSF support --- cores/nes/mist/NES_mist.sv | 78 ++-- cores/nes/mist/keyboard.v | 5 +- cores/nes/nes.qsf | 4 +- cores/nes/nsf.hex | 180 +++++++++ cores/nes/powerpak_nsf/README.txt | 14 + cores/nes/powerpak_nsf/font.chr | Bin 0 -> 2048 bytes cores/nes/powerpak_nsf/nsf.asm | 581 ++++++++++++++++++++++++++++++ cores/nes/src/GameLoader.sv | 7 +- 8 files changed, 836 insertions(+), 33 deletions(-) create mode 100644 cores/nes/nsf.hex create mode 100644 cores/nes/powerpak_nsf/README.txt create mode 100644 cores/nes/powerpak_nsf/font.chr create mode 100644 cores/nes/powerpak_nsf/nsf.asm diff --git a/cores/nes/mist/NES_mist.sv b/cores/nes/mist/NES_mist.sv index 9f7a400..22fc87a 100644 --- a/cores/nes/mist/NES_mist.sv +++ b/cores/nes/mist/NES_mist.sv @@ -45,19 +45,21 @@ module NES_mist( input UART_RX, input UART_TX ); - + // the configuration string is returned to the io controller to allow // it to control the menu on the OSD parameter CONF_STR = { - "NES;NES;", + "NES;NESFDSNSF;", + "F,BIN,Load FDS BIOS;", "O12,System Type,NTSC,PAL,Dendy;", "O34,Scanlines,OFF,25%,50%,75%;", "O5,Joystick swap,OFF,ON;", "O6,Invert mirroring,OFF,ON;", "O7,Hide overscan,OFF,ON;", "O8,Palette,FCEUX,Unsaturated-V6;", - "T9,Reset;", - "V,v1.0;" + "O9B,Disk side,Auto,A,B,C,D;", + "T0,Reset;", + "V,v2.0-test1;" }; wire [31:0] status; @@ -70,7 +72,7 @@ wire joy_swap = status[5]; wire mirroring_osd = status[6]; wire overscan_osd = status[7]; wire palette2_osd = status[8]; -wire reset_osd = status[9]; +wire [2:0] diskside_osd = status[11:9]; wire scandoubler_disable; wire ypbpr; @@ -125,7 +127,7 @@ wire [7:0] nes_joy_B = { joyB[0], joyB[1], joyB[2], joyB[3], joyB[7], joyB[6], j always @(posedge clk) begin if(downloading) download_reset_cnt <= 8'd255; - else if(download_reset_cnt != 0) + else if(!loader_busy && download_reset_cnt != 0) download_reset_cnt <= download_reset_cnt - 8'd1; end @@ -181,7 +183,7 @@ wire [7:0] nes_joy_B = { joyB[0], joyB[1], joyB[2], joyB[3], joyB[7], joyB[6], j end // Loader - wire [7:0] loader_input; + wire [7:0] loader_input = (loader_busy && !downloading) ? nsf_data : ioctl_dout; wire loader_clk; wire [21:0] loader_addr; wire [7:0] loader_write_data; @@ -190,8 +192,13 @@ wire [7:0] nes_joy_B = { joyB[0], joyB[1], joyB[2], joyB[3], joyB[7], joyB[6], j wire [31:0] loader_flags; reg [31:0] mapper_flags; wire loader_done, loader_fail; - wire type_bios, type_nes = 1, type_fds, type_nsf; - + wire loader_busy; + wire type_bios = (menu_index == 2); + wire is_bios = 0;//type_bios; + wire type_nes = (menu_index == 0) || (menu_index == {2'd0, 6'h1}); + wire type_fds = (menu_index == {2'd1, 6'h1}); + wire type_nsf = (menu_index == {2'd2, 6'h1}); + GameLoader loader ( .clk ( clk ), @@ -205,12 +212,12 @@ GameLoader loader .mem_addr ( loader_addr ), .mem_data ( loader_write_data ), .mem_write ( loader_write ), - .bios_download ( bios_download ), + .bios_download ( ), .mapper_flags ( loader_flags ), .busy ( loader_busy ), .done ( loader_done ), .error ( loader_fail ), - .rom_loaded ( rom_loaded ) + .rom_loaded ( ) ); always @(posedge clk) @@ -222,13 +229,24 @@ GameLoader loader always @(posedge clk) begin led_blink <= led_blink + 13'd1; end - - assign LED = downloading ? 1'b0 : loader_fail ? led_blink[23] : 1'b1; - wire reset_nes = (init_reset || buttons[1] || arm_reset || reset_osd || download_reset || loader_fail); +// Loopy's NSF player ROM +reg [7:0] nsf_player [4096]; +reg [7:0] nsf_data; +initial begin + $readmemh("nsf.hex", nsf_player); +end +always @(posedge clk) nsf_data <= nsf_player[loader_addr[11:0]]; - wire ext_audio = 1; - wire int_audio = 1; +assign LED = downloading ? 1'b0 : loader_fail ? led_blink[23] : 1'b1; + +wire reset_nes = (init_reset || buttons[1] || arm_reset || download_reset || loader_fail); + +wire ext_audio = 1; +wire int_audio = 1; + +wire [1:0] diskside_req; +wire [1:0] diskside = (diskside_osd == 0) ? diskside_req : (diskside_osd - 1'd1); NES nes( .clk(clk), @@ -243,12 +261,10 @@ NES nes( .joypad_data({powerpad_d4[0],powerpad_d3[0],joypad_bits2[0],joypad_bits[0]}), .mic(), .fds_busy(), - .fds_eject(0), - .diskside_req(), - .diskside(), + .fds_eject(fds_eject), + .diskside_req(diskside_req), + .diskside(diskside), .audio_channels(5'b11111), // enable all channels - .ex_sprites(), - .mask(), .cpumem_addr(memory_addr_cpu), .cpumem_read(memory_read_cpu), .cpumem_din(memory_din_cpu), @@ -281,7 +297,8 @@ always @(posedge clk) begin loader_write_data_mem <= loader_write_data; end - if(nes_ce == 1) begin + // signal write in the PPU memory phase + if(nes_ce == 3) begin loader_write_mem <= loader_write_triggered; if(loader_write_triggered) loader_write_triggered <= 1'b0; @@ -305,16 +322,16 @@ sdram sdram ( .init ( !clock_locked ), // cpu/chipset interface - .addrA ( downloading ? {3'b000, loader_addr_mem} : {3'b000, memory_addr_cpu} ), + .addrA ( (downloading | loader_busy) ? {3'b000, loader_addr_mem} : {3'b000, memory_addr_cpu} ), .addrB ( {3'b000, memory_addr_ppu} ), - .weA ( memory_write_cpu || loader_write_mem ), + .weA ( loader_write_mem || memory_write_cpu ), .weB ( memory_write_ppu ), - .dinA ( downloading ? loader_write_data_mem : memory_dout_cpu ), + .dinA ( (downloading | loader_busy) ? loader_write_data_mem : memory_dout_cpu ), .dinB ( memory_dout_ppu ), - .oeA ( memory_read_cpu ), + .oeA ( ~(downloading | loader_busy) & memory_read_cpu ), .doutA ( memory_din_cpu ), .oeB ( memory_read_ppu ), @@ -322,6 +339,8 @@ sdram sdram ( ); wire downloading; +wire [7:0] menu_index; +wire [7:0] ioctl_dout; data_io data_io ( .clk_sys ( clk ), @@ -331,10 +350,11 @@ data_io data_io ( .SPI_DI ( SPI_DI ), .ioctl_download ( downloading ), + .ioctl_index ( menu_index ), // ram interface .ioctl_wr ( loader_clk ), - .ioctl_dout ( loader_input ) + .ioctl_dout ( ioctl_dout ) ); wire nes_hs, nes_vs; @@ -412,6 +432,7 @@ sigma_delta_dac sigma_delta_dac ( wire [7:0] kbd_joy0; wire [7:0] kbd_joy1; wire [11:0] powerpad; +wire fds_eject; keyboard keyboard ( .clk(clk), @@ -422,7 +443,8 @@ keyboard keyboard ( .joystick_0(kbd_joy0), .joystick_1(kbd_joy1), - .powerpad(powerpad) + .powerpad(powerpad), + .fds_eject(fds_eject) ); endmodule diff --git a/cores/nes/mist/keyboard.v b/cores/nes/mist/keyboard.v index 150116e..6e6458c 100644 --- a/cores/nes/mist/keyboard.v +++ b/cores/nes/mist/keyboard.v @@ -10,7 +10,8 @@ module keyboard output [7:0] joystick_0, output [7:0] joystick_1, - output reg [11:0] powerpad + output reg [11:0] powerpad, + output reg fds_eject ); reg pressed; @@ -77,6 +78,8 @@ always @(posedge reset or posedge clk) begin 9'H02A: powerpad[9] <= pressed; // V 9'H032: powerpad[10] <= pressed; // B 9'H031: powerpad[11] <= pressed; // N + + 9'H17D: fds_eject <= pressed; //PgUp endcase; pressed <= 1'b1; diff --git a/cores/nes/nes.qsf b/cores/nes/nes.qsf index aaa261f..a78779d 100644 --- a/cores/nes/nes.qsf +++ b/cores/nes/nes.qsf @@ -123,7 +123,7 @@ set_location_assignment PIN_43 -to SDRAM_CLK set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE BALANCED set_global_assignment -name SMART_RECOMPILE ON set_global_assignment -name ENABLE_SIGNALTAP OFF -set_global_assignment -name USE_SIGNALTAP_FILE out/sdram.stp +set_global_assignment -name USE_SIGNALTAP_FILE out/cpu.stp set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT NORMAL @@ -323,4 +323,6 @@ set_global_assignment -name SYSTEMVERILOG_FILE src/mappers/misc.sv set_global_assignment -name SYSTEMVERILOG_FILE src/mappers/JYCompany.sv set_global_assignment -name SYSTEMVERILOG_FILE src/mappers/generic.sv set_global_assignment -name SYSTEMVERILOG_FILE src/mappers/FDS.sv +set_global_assignment -name SIGNALTAP_FILE out/loader.stp +set_global_assignment -name SIGNALTAP_FILE out/cpu.stp set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/cores/nes/nsf.hex b/cores/nes/nsf.hex new file mode 100644 index 0000000..4bea9df --- /dev/null +++ b/cores/nes/nsf.hex @@ -0,0 +1,180 @@ +/* http://srecord.sourceforge.net/ */ +@00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000017 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000002E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000045 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000005C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000073 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000008A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000000A1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000000B8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000000CF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000000E6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000000FD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000012B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 A2 F3 9A 8E F5 01 +@00000187 A9 00 8D 00 20 8D 01 20 20 8B 42 A2 08 A0 00 8C 06 20 8C 06 20 A9 32 +@0000019E 85 00 A9 45 85 01 B1 00 8D 07 20 C8 D0 F8 E6 01 CA 10 F3 A9 3F 8D 06 +@000001B5 20 A9 00 8D 06 20 A2 08 A9 0F 8D 07 20 A9 30 8D 07 20 8D 07 20 8D 07 +@000001CC 20 CA D0 ED A9 20 8D 06 20 A9 00 8D 06 20 AA A0 04 A9 20 8D 07 20 E8 +@000001E3 D0 FA 88 D0 F7 A9 22 8D 06 20 A9 10 8D 06 20 A9 2F 8D 07 20 AD 06 41 +@000001FA 20 05 45 B9 FC 01 8D 07 20 88 10 F7 A9 20 8D 06 20 A9 C2 8D 06 20 A0 +@00000211 00 B9 0E 41 F0 08 8D 07 20 C8 C0 1E D0 F3 A9 21 8D 06 20 A9 02 8D 06 +@00000228 20 A0 00 B9 2E 41 F0 08 8D 07 20 C8 C0 1E D0 F3 A9 21 8D 06 20 A9 42 +@0000023F 8D 06 20 A0 00 B9 4E 41 F0 08 8D 07 20 C8 C0 1E D0 F3 AD 7B 41 8D F3 +@00000256 5F 09 40 A2 55 8E F2 3F A2 AA 8E EA 3F 8D FA 3F 20 6F 43 AD 07 41 8D +@0000026D F4 01 20 A7 42 A9 0A 8D 01 20 AD F2 5F 10 FB 8D F2 5F EE F9 01 20 51 +@00000284 44 20 2E 44 4C 77 42 AD 02 20 AD 02 20 10 FB A0 18 A2 64 CA D0 FD 88 +@0000029B D0 FA AD 02 20 30 01 E8 8E FA 01 60 20 9D 43 20 2D 43 AD 7B 41 29 04 +@000002B2 D0 12 A9 60 85 01 A9 00 85 00 A8 91 00 C8 D0 FB E6 01 10 F7 A9 00 AA +@000002C9 95 00 9D 00 02 9D 00 03 9D 00 04 9D 00 05 9D 00 06 9D 00 07 E8 D0 E9 +@000002E0 AD F4 01 20 05 45 A9 20 C8 99 FC 01 C0 03 D0 F8 AD 02 20 AD 02 20 10 +@000002F7 FB A9 22 8D 06 20 A9 0D 8D 06 20 AD FE 01 8D 07 20 AD FD 01 8D 07 20 +@0000030E AD FC 01 8D 07 20 A9 00 8D 06 20 8D 06 20 AD F5 01 D0 01 60 AE F4 01 +@00000325 CA 8A AE FA 01 6C 0A 41 A9 00 A2 07 1D 70 41 CA 10 FA AA D0 1D AD 09 +@0000033C 41 4A 4A 4A 4A AA A0 00 98 9D F0 5F C8 E8 E0 10 D0 F6 88 8C F7 5F 88 +@00000353 8C F6 5F 60 A2 07 BD 70 41 9D F8 5F CA 10 F7 AD 76 41 8D F6 5F AD 77 +@0000036A 41 8D F7 5F 60 AD 6E 41 AC 6F 41 AE FA 01 F0 06 AD 78 41 AC 79 41 C0 +@00000381 00 F0 08 C9 41 D0 0A C0 1A D0 06 BD 9B 43 BC 99 43 8D F0 5F 8C F1 5F +@00000398 60 41 4E 1A 20 A9 00 8D 15 40 8D 08 40 A9 10 8D 00 40 8D 04 40 8D 0C +@000003AF 40 A9 0F 8D 15 40 A9 40 8D 17 40 A9 C0 8D 83 40 8D 80 40 8D 84 40 8D +@000003C6 87 40 8D 89 40 A9 E8 8D 8A 40 AD 7B 41 29 01 F0 0B A9 00 8D 00 90 8D +@000003DD 00 A0 8D 00 B0 AD 7B 41 29 02 F0 16 A9 00 A2 35 A0 10 8E 10 90 EA EA +@000003F4 EA EA 8D 30 90 88 D0 FD CA D0 EE AD 7B 41 29 08 F0 03 8D 15 50 AD 7B +@0000040B 41 29 10 F0 0B A2 80 8E 00 F8 8D 00 48 CA 10 FA AD 7B 41 29 20 F0 0B +@00000422 A2 0F 8E 00 C0 8D 00 E0 CA 10 F7 60 AD F5 01 F0 1D A9 04 2C F6 01 F0 +@00000439 06 AD F9 01 4A 90 10 A9 08 2C F6 01 F0 06 20 4D 44 20 4D 44 6C 0C 41 +@00000450 60 AD F6 01 48 20 B2 44 AD F6 01 8D F8 01 20 B2 44 AD F6 01 4D F8 01 +@00000467 D0 EF 68 4D F6 01 2D F6 01 8D F7 01 0A 90 11 AE F4 01 EC 06 41 90 02 +@0000047E A2 00 E8 8E F4 01 4C A7 42 0A 90 0E CE F4 01 D0 06 AD 06 41 8D F4 01 +@00000495 4C A7 42 0A 90 03 4C 12 45 0A 90 08 A9 01 8D F5 01 4C A7 42 0A 0A 0A +@000004AC B0 DC 0A B0 C5 60 A2 01 8E 16 40 CA 8E 16 40 A2 08 18 AD 17 40 AD 16 +@000004C3 40 09 FC 69 03 2E F6 01 CA D0 EF 60 A2 00 8E FB 01 C9 A0 90 02 E9 A0 +@000004DA 2E FB 01 C9 50 90 02 E9 50 2E FB 01 C9 28 90 02 E9 28 2E FB 01 C9 14 +@000004F1 90 02 E9 14 2E FB 01 C9 0A 90 02 E9 0A 2E FB 01 AE FB 01 60 A0 FF 20 +@00000508 CF 44 C8 99 FC 01 8A D0 F6 60 A9 00 8D 00 20 8D 01 20 20 9D 43 A2 07 +@0000051F BD 2A 45 95 00 CA 10 F8 4C 00 00 A9 01 8D 07 42 6C FC FF 7C C6 C6 C6 +@00000536 C6 C6 7C 00 00 00 00 00 00 00 00 00 30 70 30 30 30 30 78 00 00 00 00 +@0000054D 00 00 00 00 00 7C C6 C6 0C 30 60 FE 00 00 00 00 00 00 00 00 00 7C C6 +@00000564 06 3C 06 C6 7C 00 00 00 00 00 00 00 00 00 1C 3C 6C 4C CC FE 0C 00 00 +@0000057B 00 00 00 00 00 00 00 FE C0 FC C6 06 C6 7C 00 00 00 00 00 00 00 00 00 +@00000592 7C C6 C0 FC C6 C6 7C 00 00 00 00 00 00 00 00 00 FE C6 0C 18 18 30 30 +@000005A9 00 00 00 00 00 00 00 00 00 7C C6 C6 7C C6 C6 7C 00 00 00 00 00 00 00 +@000005C0 00 00 7C C6 C6 7E 06 C6 7C 00 00 00 00 00 00 00 00 00 38 6C 44 C6 FE +@000005D7 C6 C6 00 00 00 00 00 00 00 00 00 FC C2 C2 FC C2 C2 FC 00 00 00 00 00 +@000005EE 00 00 00 00 7C C2 C0 C0 C0 C2 7C 00 00 00 00 00 00 00 00 00 FC C2 C2 +@00000605 C2 C2 C2 FC 00 00 00 00 00 00 00 00 00 FE C0 C0 FC C0 C0 FE 00 00 00 +@0000061C 00 00 00 00 00 00 FE C0 C0 FC C0 C0 C0 00 00 00 00 00 00 00 00 00 00 +@00000633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000064A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@0000068F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000006A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000006BD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000006D4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@000006EB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000702 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000730 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 08 08 08 +@00000747 00 08 00 00 00 00 00 00 00 00 00 6C 6C 24 48 00 00 00 00 00 00 00 00 +@0000075E 00 00 00 00 00 24 7E 24 24 7E 24 00 00 00 00 00 00 00 00 00 10 3C 50 +@00000775 38 14 78 10 00 00 00 00 00 00 00 00 00 42 A4 48 10 24 4A 84 00 00 00 +@0000078C 00 00 00 00 00 00 38 40 48 30 4A 44 3A 00 00 00 00 00 00 00 00 00 60 +@000007A3 60 20 40 00 00 00 00 00 00 00 00 00 00 00 00 00 08 10 10 10 10 08 00 +@000007BA 00 00 00 00 00 00 00 00 00 20 10 10 10 10 20 00 00 00 00 00 00 00 00 +@000007D1 00 00 00 10 54 10 54 10 00 00 00 00 00 00 00 00 00 00 10 10 7C 10 10 +@000007E8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 60 20 40 00 00 00 00 00 +@000007FF 00 00 00 00 00 00 7C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000816 00 60 60 00 00 00 00 00 00 00 00 00 02 06 0C 18 30 60 C0 00 00 00 00 +@0000082D 00 00 00 00 00 7C C6 C6 C6 C6 C6 7C 00 00 00 00 00 00 00 00 00 30 70 +@00000844 30 30 30 30 78 00 00 00 00 00 00 00 00 00 7C C6 C6 0C 30 60 FE 00 00 +@0000085B 00 00 00 00 00 00 00 7C C6 06 3C 06 C6 7C 00 00 00 00 00 00 00 00 00 +@00000872 1C 3C 6C 4C CC FE 0C 00 00 00 00 00 00 00 00 00 FE C0 FC C6 06 C6 7C +@00000889 00 00 00 00 00 00 00 00 00 7C C6 C0 FC C6 C6 7C 00 00 00 00 00 00 00 +@000008A0 00 00 FE C6 0C 18 18 30 30 00 00 00 00 00 00 00 00 00 7C C6 C6 7C C6 +@000008B7 C6 7C 00 00 00 00 00 00 00 00 00 7C C6 C6 7E 06 C6 7C 00 00 00 00 00 +@000008CE 00 00 00 00 30 30 00 00 30 30 00 00 00 00 00 00 00 00 00 00 00 60 60 +@000008E5 00 60 60 20 40 00 00 00 00 00 00 00 00 04 08 10 20 10 08 04 00 00 00 +@000008FC 00 00 00 00 00 00 00 00 7C 00 7C 00 00 00 00 00 00 00 00 00 00 00 40 +@00000913 20 10 08 10 20 40 00 00 00 00 00 00 00 00 00 38 44 08 10 10 00 10 00 +@0000092A 00 00 00 00 00 00 00 00 3C 42 9E 96 9C 40 3C 00 00 00 00 00 00 00 00 +@00000941 00 38 6C 44 C6 FE C6 C6 00 00 00 00 00 00 00 00 00 FC C2 C2 FC C2 C2 +@00000958 FC 00 00 00 00 00 00 00 00 00 7C C2 C0 C0 C0 C2 7C 00 00 00 00 00 00 +@0000096F 00 00 00 FC C2 C2 C2 C2 C2 FC 00 00 00 00 00 00 00 00 00 FE C0 C0 FC +@00000986 C0 C0 FE 00 00 00 00 00 00 00 00 00 FE C0 C0 FC C0 C0 C0 00 00 00 00 +@0000099D 00 00 00 00 00 7C C2 C0 DE C2 C6 7C 00 00 00 00 00 00 00 00 00 C2 C2 +@000009B4 C2 FE C2 C2 C2 00 00 00 00 00 00 00 00 00 3C 18 18 18 18 18 3C 00 00 +@000009CB 00 00 00 00 00 00 00 7E 0C 0C 0C 0C 8C 78 00 00 00 00 00 00 00 00 00 +@000009E2 C2 C2 C4 F8 C4 C2 C2 00 00 00 00 00 00 00 00 00 C0 C0 C0 C0 C0 C0 FE +@000009F9 00 00 00 00 00 00 00 00 00 C6 EE FE D6 C6 C6 C6 00 00 00 00 00 00 00 +@00000A10 00 00 C2 E2 D2 CA C6 C2 C2 00 00 00 00 00 00 00 00 00 7C C2 C2 C2 C2 +@00000A27 C2 7C 00 00 00 00 00 00 00 00 00 FC C2 C2 FC C0 C0 C0 00 00 00 00 00 +@00000A3E 00 00 00 00 7C C2 C2 C2 DA D4 7A 00 00 00 00 00 00 00 00 00 FC C2 C2 +@00000A55 FC C8 C4 C2 00 00 00 00 00 00 00 00 00 7C C2 C0 7C 02 C2 7C 00 00 00 +@00000A6C 00 00 00 00 00 00 7E 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 C2 +@00000A83 C2 C2 C2 C2 C2 7C 00 00 00 00 00 00 00 00 00 C6 C6 C6 C6 6C 6C 38 00 +@00000A9A 00 00 00 00 00 00 00 00 C6 C6 D6 D6 FE EE 44 00 00 00 00 00 00 00 00 +@00000AB1 00 C6 C6 6C 38 6C C6 C6 00 00 00 00 00 00 00 00 00 C4 C4 68 30 30 30 +@00000AC8 30 00 00 00 00 00 00 00 00 00 FC 08 10 20 40 C0 FC 00 00 00 00 00 00 +@00000ADF 00 00 00 1C 18 18 18 18 18 1C 00 00 00 00 00 00 00 00 00 80 C0 60 30 +@00000AF6 18 0C 06 00 00 00 00 00 00 00 00 00 70 30 30 30 30 30 70 00 00 00 00 +@00000B0D 00 00 00 00 00 10 28 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000B24 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 20 10 08 00 00 00 00 00 00 +@00000B3B 00 00 00 00 00 00 00 00 00 78 CC CC CC 76 00 00 00 00 00 00 00 00 00 +@00000B52 C0 C0 F8 CC CC CC F8 00 00 00 00 00 00 00 00 00 00 00 7C C0 C0 C0 7C +@00000B69 00 00 00 00 00 00 00 00 00 0C 0C 7C CC CC CC 7C 00 00 00 00 00 00 00 +@00000B80 00 00 00 00 78 CC FC C0 7C 00 00 00 00 00 00 00 00 00 1C 30 30 FC 30 +@00000B97 30 30 00 00 00 00 00 00 00 00 00 00 00 7C CC CC 7C 0C 78 00 00 00 00 +@00000BAE 00 00 00 00 C0 C0 C0 F8 CC CC CC 00 00 00 00 00 00 00 00 00 00 18 00 +@00000BC5 18 18 18 18 00 00 00 00 00 00 00 00 00 00 18 00 18 18 18 D8 70 00 00 +@00000BDC 00 00 00 00 00 00 C0 C0 CC D8 F0 D8 CC 00 00 00 00 00 00 00 00 00 38 +@00000BF3 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 00 00 EC D6 D6 D6 D6 00 +@00000C0A 00 00 00 00 00 00 00 00 00 00 F8 CC CC CC CC 00 00 00 00 00 00 00 00 +@00000C21 00 00 00 78 CC CC CC 78 00 00 00 00 00 00 00 00 00 00 00 F8 CC CC F8 +@00000C38 C0 C0 00 00 00 00 00 00 00 00 00 00 7C CC CC 7C 0C 0C 00 00 00 00 00 +@00000C4F 00 00 00 00 00 DC E0 C0 C0 C0 00 00 00 00 00 00 00 00 00 00 00 78 C0 +@00000C66 78 0C F8 00 00 00 00 00 00 00 00 00 70 30 FC 30 30 30 1C 00 00 00 00 +@00000C7D 00 00 00 00 00 00 00 CC CC CC CC 78 00 00 00 00 00 00 00 00 00 00 00 +@00000C94 CC CC CC 78 30 00 00 00 00 00 00 00 00 00 00 00 C6 D6 D6 D6 6C 00 00 +@00000CAB 00 00 00 00 00 00 00 00 00 C6 6C 38 6C C6 00 00 00 00 00 00 00 00 00 +@00000CC2 00 00 CC CC 78 30 60 C0 00 00 00 00 00 00 00 00 00 00 FC 18 30 60 FC +@00000CD9 00 00 00 00 00 00 00 00 00 0C 08 08 18 08 08 0C 00 00 00 00 00 00 00 +@00000CF0 00 00 10 10 10 00 10 10 10 00 00 00 00 00 00 00 00 00 60 20 20 30 20 +@00000D07 20 60 00 00 00 00 00 00 00 00 00 00 00 00 32 4C 00 00 00 00 00 00 00 +@00000D1E 00 00 00 00 00 00 00 10 28 44 7C 00 00 00 00 00 00 00 00 00 00 00 00 +@00000D35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000D4C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000D63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000D7A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000D91 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000DA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000DBF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000DD6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000DED 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000E8E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000EA5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000EBC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000ED3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000EEA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F2F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000F8B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000FA2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000FB9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000FD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +@00000FE7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 41 +@00000FFE 00 00 diff --git a/cores/nes/powerpak_nsf/README.txt b/cores/nes/powerpak_nsf/README.txt new file mode 100644 index 0000000..ede21d3 --- /dev/null +++ b/cores/nes/powerpak_nsf/README.txt @@ -0,0 +1,14 @@ +Loopy's NSF Player +------------------ + +Use asm6 to compile: + +asm6 nsf.asm + +Strip header: + +dd if=nsf.bin of=nsf.rom bs=1 skip=16 count=4096 + +Convert to hex: + +srec_cat nsf.rom -bin -Output nsf.hex -vmem 8 diff --git a/cores/nes/powerpak_nsf/font.chr b/cores/nes/powerpak_nsf/font.chr new file mode 100644 index 0000000000000000000000000000000000000000..e385a6461a84aee1bcbae113553d41f8cfd2db05 GIT binary patch literal 2048 zcmeHIF{{)-5FQ?nBgGb5yduRFDXy?wtb(LC9#Qh^nmWh&=${^q_u4+MHgSxR`Jrj(VeFd_LL>G_q6j~R zFoYoS-{Zjc{|BchkdQ#alU23aGN8d~zru&7Z1FU|s4e5m_glNVdc`@*^~XA zCpNRmIqwI+<4evy($JbQ!k zTKZAbw8vKIWA&p*eaG9e#|veD&5utXqtf@(9!~oO_J_dw#DDqxk})-#53R(9@%uAn zzn|hwS$}e`c*?G-%9)R`@5kGX!c|_Wc-!_lHDKlky1g(kUQX*R8Q+A`rDnl+N7in~ z*glfAcoN`l9%FjU!$04;>$(>_7s3(okul~M9+ziqj7MHDK-~?BUphBnK&+4UsBZW| z(HSiudG4z`}z%mzE|4- literal 0 HcmV?d00001 diff --git a/cores/nes/powerpak_nsf/nsf.asm b/cores/nes/powerpak_nsf/nsf.asm new file mode 100644 index 0000000..ea869c0 --- /dev/null +++ b/cores/nes/powerpak_nsf/nsf.asm @@ -0,0 +1,581 @@ +;---------------------------------- +; NSF player for PowerPak +; +; Player rom is at $4100-4FFF (NSF header at $4100) +; +; PowerPak registers: +; +; 5FF0: timer latch LSB +; 5FF1: timer latch MSB +; 5FF2: timer status (Read: bit7=timer wrapped, Write: clear status) +; 5FF3: Expansion audio control (copy header[0x7B] here) +; 5FF6-5FFF: banking registers (as described in NSF spec) +; +; Timer details: +; PowerPak NSF mapper has a 16bit 1MHz counter that counts down from [5FF1:5FF0] to 0. +; After the counter reaches 0, it's automatically reloaded and timer status bit is set. +; Clear the status bit by writing to $5FF2. +; +;----------------------------------- + + +A = $80 +B = $40 +SELECT = $20 +START = $10 +UP = $08 +DOWN = $04 +LEFT = $02 +RIGHT = $01 + +HDR_BASE = $4100 +HDR_SONGS = HDR_BASE+$06 +HDR_FIRST = HDR_BASE+$07 +HDR_LOAD = HDR_BASE+$08 +HDR_INIT = HDR_BASE+$0a +HDR_PLAY = HDR_BASE+$0c +HDR_TITLE = HDR_BASE+$0e +HDR_ARTIST = HDR_BASE+$2e +HDR_COPYRIGHT = HDR_BASE+$4e +HDR_NTSC_LO = HDR_BASE+$6E +HDR_NTSC_HI = HDR_BASE+$6F +HDR_BANK = HDR_BASE+$70 +HDR_PAL_LO = HDR_BASE+$78 +HDR_PAL_HI = HDR_BASE+$79 +HDR_EXP_HW = HDR_BASE+$7b + +STACK_TOP = $1f4 + CURRENT = $1f4 ;song# + PLAYING = $1f5 ;nonzero=song is playing + JOYPAD = $1f6 ;button state + JOYD = $1f7 ;button 0->1 + JOYTMP = $1f8 + FRAME = $1f9 + PAL = $1fa ;1=PAL detected + DIVTMP = $1fb + STR = $1fc ;4 bytes used for printing current song # + +; header ------ + + db $4E,$45,$53,$1A + db $01 ;PRG size/16k + db $00 ;CHR size/8k + db $00,$00 ;flags,mapper + db $00,$00,$00,$00,$00,$00,$00,$00 + + .org $4000 + .pad HDR_BASE+$80 + +reset ;------- + + sei + ldx #<(STACK_TOP-1) + txs + stx PLAYING + + lda #$00 + sta $2000 ;nmi off + sta $2001 ;screen off + jsr pal_detect + + ldx #8 ;load CHR: 128 tiles = $800 bytes + ldy #$00 + sty $2006 + sty $2006 + lda #chr + sta 1 +- lda (0),y + sta $2007 + iny + bne - + inc 1 + dex + bpl - + + lda #$3f ;set palette + sta $2006 + lda #$00 + sta $2006 + ldx #8 +- lda #$0f + sta $2007 + lda #$30 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + + lda #$20 ;clear screens + sta $2006 + lda #$00 + sta $2006 + tax + ldy #4 ;$10 + lda #$20 ;" " +- sta $2007 + inx + bne - + dey + bne - + + lda #$22 + sta $2006 + lda #$10 + sta $2006 + lda #$2f ;"/" + sta $2007 + lda HDR_SONGS + jsr deci +- lda STR,y ;print #songs + sta $2007 + dey + bpl - + + lda #$20 ;print song infos + sta $2006 + lda #$c2 + sta $2006 + ldy #0 +- lda HDR_TITLE,y + beq + + sta $2007 + iny + cpy #30 + bne - ++ + lda #$21 + sta $2006 + lda #$02 + sta $2006 + ldy #0 +- lda HDR_ARTIST,y + beq + + sta $2007 + iny + cpy #30 + bne - ++ + lda #$21 + sta $2006 + lda #$42 + sta $2006 + ldy #0 +- lda HDR_COPYRIGHT,y + beq + + sta $2007 + iny + cpy #30 + bne - ++ + lda HDR_EXP_HW ;enable extra audio HW (also PRG write enable for FDS) + sta $5ff3 + + ora #$40 ;- kevtris - swap VRC6 registers which is how all NSFs use VRC6 + ldx #$55 + stx $3ff2 + ldx #$aa + stx $3fea ;- these two writes enable the chip select mode in the HDNES hardware + sta $3ffa ;- automatic enable setting for HDNES + + jsr timer_init + + lda HDR_FIRST ;init first song + sta CURRENT + jsr init + + lda #%00001010 ;screen on, sprites off + sta $2001 + +busywait + lda $5ff2 + bpl busywait + sta $5ff2 + + inc FRAME + jsr joyread + jsr play + jmp busywait + +pal_detect ;----------------- + lda $2002 +- lda $2002 + bpl - + + ldy #24 ;eat about 30000 cycles (1 NTSC frame) + ldx #100 +- dex + bne - + dey + bne - + + lda $2002 ;VBL flag is set if NTSC + bmi + + inx ++ stx PAL + rts + +init ;------------------ ;begin CURRENT song + jsr stopsound + + jsr bank_init + + lda HDR_EXP_HW ;clear 6000-7fff unless FDS is enabled + and #4 + bne no_wram_clear + lda #$60 + sta 1 + lda #0 + sta 0 + tay +- sta (0),y + iny + bne - + inc 1 + bpl - + no_wram_clear + + lda #0 ;clear 0000-07ff + tax +- sta $00,x + sta $200,x ;(not 100-1ff) + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne - + + lda CURRENT ;print song# + jsr deci + lda #$20 ;<--- +- iny + sta STR,y + cpy #3 + bne - + lda $2002 +- lda $2002 + bpl - + lda #$22 + sta $2006 + lda #$0d + sta $2006 + lda STR+2 + sta $2007 + lda STR+1 + sta $2007 + lda STR + sta $2007 + + lda #$00 ;reset scroll + sta $2006 + sta $2006 + + lda PLAYING + bne + + rts ++ + ldx CURRENT ;call INIT w/ A=song#, X=pal + dex + txa + ldx PAL + jmp (HDR_INIT) + +bank_init ;--------------- + lda #0 + ldx #7 +- ora HDR_BANK,x + dex + bpl - + tax + bne banked_nsf + not_banked: + lda HDR_LOAD+1 + lsr + lsr + lsr + lsr + tax + ldy #0 +- tya + sta $5ff0,x + iny + inx + cpx #$10 + bne - + dey + sty $5ff7 + dey + sty $5ff6 + rts + banked_nsf: + ldx #7 +- lda HDR_BANK,x + sta $5ff8,x + dex + bpl - + lda HDR_BANK+6 ;FDS also has banks @ 6000-7FFF + sta $5ff6 + lda HDR_BANK+7 + sta $5ff7 + rts +timer_init ;------------- + lda HDR_NTSC_LO + ldy HDR_NTSC_HI + ldx PAL + beq + + lda HDR_PAL_LO + ldy HDR_PAL_HI ++ + cpy #0 + beq fixit ++ cmp #$41 + bne time_ok + cpy #$1a + bne time_ok + fixit + lda time_lo,x + ldy time_hi,x + time_ok + sta $5ff0 + sty $5ff1 + rts + + time_hi db $41, $4e + time_lo db $1a, $20 + +stopsound ;--------------- + lda #$00 ;reset sound regs + sta $4015 + sta $4008 + lda #$10 + sta $4000 + sta $4004 + sta $400c + lda #$0f + sta $4015 + lda #$40 + sta $4017 + + lda #$c0 ;FDS reset + sta $4083 + sta $4080 + sta $4084 + sta $4087 + sta $4089 + lda #$e8 + sta $408a + + ;-----------------------kevtris start + + lda HDR_EXP_HW + and #$01 + beq szz0 + + lda #$00 ;shut up VRC6 + sta $9000 + sta $a000 + sta $b000 + +szz0 + lda HDR_EXP_HW + and #$02 + beq szz1 + + lda #$00 ;shut up VRC7 + ldx #$35 +sswt ldy #$10 + stx $9010 + nop + nop + nop + nop + sta $9030 +sswx dey + bne sswx + dex + bne sswt + +szz1 + lda HDR_EXP_HW + and #$08 + beq ssz2 + + sta $5015 ;shut up MMC5 + +ssz2 + lda HDR_EXP_HW + and #$10 + beq ssz3 + + ldx #$80 ;shut up N163 + stx $f800 ;start from address 0, auto increment +sswq sta $4800 + dex + bpl sswq ;clear all RAM + +ssz3 + lda HDR_EXP_HW + and #$20 + beq ssz4 + + ldx #$0f ;shut up 5B +sswz stx $c000 + sta $e000 + dex + bpl sswz + +ssz4 + ;-------------------kevtris end + + rts +play ;-------------------- + lda PLAYING + beq + + lda #DOWN + bit JOYPAD + beq ++ + lda FRAME + lsr + bcc + +++ lda #UP + bit JOYPAD + beq playhere + jsr playhere + jsr playhere + playhere + jmp (HDR_PLAY) ++ rts + +joyread ;---------------- + lda JOYPAD + pha + jsr joyread2 +retry lda JOYPAD + sta JOYTMP + jsr joyread2 + lda JOYPAD + eor JOYTMP + bne retry + + pla + eor JOYPAD + and JOYPAD + sta JOYD + + asl ;A + bcc + +_A ldx CURRENT + cpx HDR_SONGS + bcc ++ + ldx #$00 +++ inx + stx CURRENT + jmp init ++ + asl ;B + bcc + +_B dec CURRENT + bne ++ + lda HDR_SONGS + sta CURRENT +++ jmp init ++ + asl ;SEL + bcc + + ;lda #$00 + ;sta PLAYING + ;jmp stopsound + jmp powerpak_bios_reset ++ + asl ;START + bcc + + lda #$01 + sta PLAYING + jmp init ++ + asl ;UP + asl ;DOWN + asl ;LEFT + bcs _B + + asl ;RIGHT + bcs _A + rts +joyread2 ;---------------- + ldx #1 + stx $4016 + dex + stx $4016 + ldx #$08 +- clc + lda $4017 ;kevtris - added to read controller 2 so the HDNES menu is still accessable + lda $4016 + ora #$fc + adc #3 + rol JOYPAD + dex + bne - + rts +div10 ;------------------ + ldx #0 ;in: A=# + stx DIVTMP ;out: X=#/10, A=remainder + cmp #%10100000 + bcc + + sbc #%10100000 ++ rol DIVTMP + cmp #%01010000 + bcc + + sbc #%01010000 ++ rol DIVTMP + cmp #%00101000 + bcc + + sbc #%00101000 ++ rol DIVTMP + cmp #%00010100 + bcc + + sbc #%00010100 ++ rol DIVTMP + cmp #%00001010 + bcc + + sbc #%00001010 ++ rol DIVTMP + ldx DIVTMP + rts +deci ;------------------- ;in: A=# + ldy #$ff ;out: A,X=? Y=strlen-1 +- jsr div10 + iny + sta STR,y + txa + bne - + rts + +powerpak_bios_reset ;--------- + lda #$00 ;screen off + sta $2000 + sta $2001 + jsr stopsound + ldx #(resetcode_end - resetcode - 1) +- lda resetcode,x + sta $0,x + dex + bpl - + jmp 0 + + resetcode + lda #1 + sta $4207 + jmp ($fffc) + resetcode_end + +;------------------------ +chr .bin "font.chr" ;ascii chr set + + .pad $4ffc ;powerpak bios jumps to (4FFC) + .dw reset ;vectors are NOT mapped to $Fxxx, IRQ/NMI must be disabled. + + .align $4000 diff --git a/cores/nes/src/GameLoader.sv b/cores/nes/src/GameLoader.sv index 632aec5..f78b984 100644 --- a/cores/nes/src/GameLoader.sv +++ b/cores/nes/src/GameLoader.sv @@ -200,9 +200,10 @@ always @(posedge clk) begin mem_addr <= mem_addr + 1'd1; end end else begin - mem_addr <= 22'b00_0000_0000_0000_0000_0000; - bytes_left <= 21'h2000; - state <= S_COPYBIOS; +// mem_addr <= 22'b00_0000_0000_0000_0000_0000; +// bytes_left <= 21'h2000; +// state <= S_COPYBIOS; + state <= S_DONE; clearclk <= 4'h0; end end