mirror of
https://github.com/mist-devel/mist-board.git
synced 2026-02-05 07:34:41 +00:00
NES: add FDS and NSF support
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
180
cores/nes/nsf.hex
Normal file
180
cores/nes/nsf.hex
Normal file
@@ -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
|
||||
14
cores/nes/powerpak_nsf/README.txt
Normal file
14
cores/nes/powerpak_nsf/README.txt
Normal file
@@ -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
|
||||
BIN
cores/nes/powerpak_nsf/font.chr
Normal file
BIN
cores/nes/powerpak_nsf/font.chr
Normal file
Binary file not shown.
581
cores/nes/powerpak_nsf/nsf.asm
Normal file
581
cores/nes/powerpak_nsf/nsf.asm
Normal file
@@ -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 0
|
||||
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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user