fix nvram settings; add more configuration options to osd

This commit is contained in:
Eugene Lozovoy
2024-09-13 12:27:40 +03:00
parent 3681138b01
commit 64b6ab3cdb
4 changed files with 79 additions and 70 deletions

View File

@ -12,13 +12,17 @@ module mc146818a
input CS,
input [64:0] RTC,
input [31:0] CMOSCfg,
input [7:0] KEYSCANCODE,
input WR,
input [7:0] A,
input [7:0] DI,
output [7:0] DO
output [7:0] DO,
input loader_WR,
input [7:0] loader_A,
input [7:0] loader_DI,
output [7:0] loader_DO
);
reg [18:0] pre_scaler =0;
@ -59,18 +63,6 @@ always @(*) begin
8'h0c : Dout <= c_reg;
8'h0d : Dout <= 8'b10000000;
// 8'hb1 : Dout <= CMOSCfg[7:6]; // CPU Speed
// 8'hb2 : Dout <= 0; // Boot device
// 8'hb3 : Dout <= CMOSCfg[8]; // CPU Cache
// 8'hb4 : Dout <= CMOSCfg[13:11]; // F11
// 8'hb5 : Dout <= CMOSCfg[15:14]; // F11 bank
// 8'hb6 : Dout <= CMOSCfg[18:16]; // Shift+F11
// 8'hb7 : Dout <= CMOSCfg[20:19]; // Shift+F11 bank
// 8'hb8 : Dout <= CMOSCfg[10:9]; // #7FFD
// 8'hb9 : Dout <= CMOSCfg[23:21]; // ZX Palette
// 8'hba : Dout <= CMOSCfg[24]; // NGS Reset
// 8'hbb : Dout <= CMOSCfg[27:25]; // INT offset
8'hf0 : Dout <= KEYSCANCODE;
default: Dout <= CMOS_Dout;
endcase
@ -86,7 +78,7 @@ always @(posedge CLK) begin
year_reg <= RTC[47:40];
weeks_reg <= RTC[55:48] + 1'b1;
b_reg <= 8'b00000010;
end
end
if (RESET) b_reg <= 8'b00000010;
else if (WR & CS) begin
@ -239,7 +231,11 @@ dpram #(.DATAWIDTH(8), .ADDRWIDTH(8), .MEM_INIT_FILE("rtl/periph/CMOS.mif")) CMO
.address_a (A),
.data_a (DI),
.wren_a (WR & CS),
.q_a (CMOS_Dout)
.q_a (CMOS_Dout),
.address_b (loader_A),
.data_b (loader_DI),
.wren_b (loader_WR),
.q_b (loader_DO)
);
endmodule

View File

@ -44,10 +44,14 @@ module tsconf
input COLD_RESET,
input WARM_RESET,
input [64:0] RTC,
input [31:0] CMOSCfg,
input OUT0,
input TAPE_IN,
// Configuration bits
input CFG_OUT0,
input CFG_60HZ,
input CFG_SCANDOUBLER,
input CFG_VDAC,
// User input
input [10:0] PS2_KEY,
input [24:0] PS2_MOUSE,
@ -55,8 +59,10 @@ module tsconf
input loader_act,
input [15:0] loader_addr,
input [7:0] loader_data,
input loader_wr
input [7:0] loader_do,
output [7:0] loader_di,
input loader_wr_rom,
input loader_wr_cmos
);
wire f0, f1, h0, h1, c0, c1, c2, c3;
@ -98,11 +104,11 @@ module tsconf
wire cfg_tape_sound = 1'b0;
wire cfg_floppy_swap = 1'b0;
wire int_start_wtp = 1'b0;
wire cfg_60hz = 1'b0;
wire cfg_60hz = CFG_60HZ;
wire beeper_mux; // what is mixed to FPGA beeper output - beeper(0) or tapeout(1)
wire tape_read; // tapein data
wire set_nmi;
wire cfg_vga_on = 1'b0;
wire cfg_vga_on = CFG_SCANDOUBLER;
// nmi signals
wire gen_nmi;
@ -326,6 +332,16 @@ module tsconf
wire [15:0] dram_do;
wire [15:0] dram_docpu;
wire [1:0] vred;
wire [1:0] vgrn;
wire [1:0] vblu;
wire [7:0] vred_vdac;
wire [7:0] vgrn_vdac;
wire [7:0] vblu_vdac;
assign VRED = CFG_VDAC? vred_vdac : {vred,vred,vred,vred};
assign VGRN = CFG_VDAC? vgrn_vdac : {vgrn,vgrn,vgrn,vgrn};
assign VBLU = CFG_VDAC? vblu_vdac : {vblu,vblu,vblu,vblu};
wire fclk = clk & ce;
@ -488,8 +504,8 @@ module tsconf
.tm_next(tm_next),
.loader_clk(clk),
.loader_addr(loader_addr),
.loader_data(loader_data),
.loader_wr(loader_wr)
.loader_data(loader_do),
.loader_wr(loader_wr_rom)
);
video_top video_top
@ -502,9 +518,9 @@ module tsconf
.c0(c0),
.c1(c1),
.c3(c3),
.vred(),
.vgrn(),
.vblu(),
.vred(vred),
.vgrn(vgrn),
.vblu(vblu),
.vred_raw(vred_raw),
.vgrn_raw(vgrn_raw),
.vblu_raw(vblu_raw),
@ -575,9 +591,9 @@ module tsconf
.o_r(vred_raw),
.o_g(vgrn_raw),
.o_b(vblu_raw),
.v_r(VRED),
.v_g(VGRN),
.v_b(VBLU)
.v_r(vred_vdac),
.v_g(vgrn_vdac),
.v_b(vblu_vdac)
);
zmaps zmaps
@ -882,7 +898,7 @@ module tsconf
.RD_n(rd_n),
.WR_n(wr_n),
.RFSH_n(rfsh_n),
.OUT0(OUT0),
.OUT0(CFG_OUT0),
.A(a),
.DI(di),
.DO(d)
@ -927,16 +943,19 @@ module tsconf
mc146818a mc146818a
(
.RESET(rst),
.CLK(fclk),
.CLK(clk),
.ENA(ena_0_4375mhz),
.CS(1),
.KEYSCANCODE(key_scancode),
.RTC(RTC),
.CMOSCfg(CMOSCfg),
.KEYSCANCODE(key_scancode),
.WR(wait_start_gluclock & ~wr_n),
.A(wait_addr),
.DI(d),
.DO(wait_read)
.DO(wait_read),
.loader_WR(loader_wr_cmos),
.loader_A(loader_addr[7:0]),
.loader_DI(loader_do),
.loader_DO(loader_di)
);

View File

@ -26,3 +26,5 @@
// `define PENT_312 // for Pentagon 71680 tacts emulation with 312 video lines
`define KEMPSTON_8BIT // 8-bit enhanced Kempston Joystick interface
`define ENABLE_60HZ