1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-26 03:41:46 +00:00

[NES]Report loader status on LED

This commit is contained in:
Sebastien Delestaing
2016-09-23 17:30:44 +02:00
parent 65bfa3136f
commit 172f31b144

View File

@@ -12,14 +12,13 @@ module GameLoader(input clk, input reset,
output reg [21:0] mem_addr, output [7:0] mem_data, output mem_write,
output [31:0] mapper_flags,
output reg done,
output error);
output reg error);
reg [1:0] state = 0;
reg [7:0] prgsize;
reg [3:0] ctr;
reg [7:0] ines[0:15]; // 16 bytes of iNES header
reg [21:0] bytes_left;
assign error = (state == 3);
wire [7:0] prgrom = ines[4]; // Number of 16384 byte program ROM pages
wire [7:0] chrrom = ines[5]; // Number of 8192 byte character ROM pages (0 indicates CHR RAM)
wire has_chr_ram = (chrrom == 0);
@@ -71,6 +70,7 @@ module GameLoader(input clk, input reset,
case(state)
// Read 16 bytes of ines header
0: if (indata_clk) begin
error <= 0;
ctr <= ctr + 1;
ines[ctr] <= indata;
bytes_left <= {prgrom, 14'b0};
@@ -91,7 +91,11 @@ module GameLoader(input clk, input reset,
end else if (state == 2) begin
done <= 1;
end
end
end
3: begin
done <= 1;
error <= 1;
end
endcase
end
end
@@ -223,7 +227,7 @@ wire [7:0] nes_joy_B = reset_nes ? 8'd0 : { joyA[0], joyA[1], joyA[2], joyA[3],
wire clk85;
clk clock_21mhz(.inclk0(CLOCK_27[0]), .c0(clk85), .c1(SDRAM_CLK), .locked(clock_locked));
// initial reset after pll startup
// reset after download
reg [7:0] download_reset_cnt;
wire download_reset = download_reset_cnt != 0;
always @(posedge CLOCK_27[0]) begin
@@ -293,7 +297,6 @@ wire [7:0] nes_joy_B = reset_nes ? 8'd0 : { joyA[0], joyA[1], joyA[2], joyA[3],
end
end
// Loader
wire [7:0] loader_input;
wire loader_clk;
@@ -301,14 +304,27 @@ wire [7:0] nes_joy_B = reset_nes ? 8'd0 : { joyA[0], joyA[1], joyA[2], joyA[3],
wire [7:0] loader_write_data;
wire loader_reset = !download_reset; //loader_conf[0];
wire loader_write;
wire [31:0] mapper_flags;
wire [31:0] loader_flags;
reg [31:0] mapper_flags;
wire loader_done, loader_fail;
GameLoader loader(clk, loader_reset, loader_input, loader_clk, mirroring_osd,
loader_addr, loader_write_data, loader_write,
mapper_flags, loader_done, loader_fail);
loader_flags, loader_done, loader_fail);
wire reset_nes = (init_reset || buttons[1] || arm_reset || reset_osd || download_reset);
wire run_nes = (nes_ce == 3) && !reset_nes;
always @(posedge clk)
if (loader_done)
mapper_flags <= loader_flags;
// LED displays loader status
reg [12:0] led_blink; // divide PS2 clock to around 1Hz
always @(posedge ps2_clk) begin
led_blink <= led_blink + 13'd1;
end
assign LED = downloading ? 0 : loader_fail ? led_blink[12] : 1;
wire reset_nes = (init_reset || buttons[1] || arm_reset || reset_osd || download_reset || loader_fail);
wire run_nes = (nes_ce == 3); // keep running even when reset, so that the reset can actually do its job!
// NES is clocked at every 4th cycle.
always @(posedge clk)
@@ -426,8 +442,6 @@ sigma_delta_dac sigma_delta_dac (
.RESET(reset_nes)
);
assign LED = ~downloading;
wire [7:0] kbd_joy0;
wire [7:0] kbd_joy1;
wire [11:0] powerpad;