mirror of
https://github.com/nippur72/Apple1_MiST.git
synced 2024-09-27 09:55:45 +00:00
reset keyboard key; audio monitor option
This commit is contained in:
parent
6526b236e3
commit
d2db7d0b53
@ -46,7 +46,10 @@ module apple1(
|
|||||||
output vga_red, // red VGA signal
|
output vga_red, // red VGA signal
|
||||||
output vga_grn, // green VGA signal
|
output vga_grn, // green VGA signal
|
||||||
output vga_blu, // blue VGA signal
|
output vga_blu, // blue VGA signal
|
||||||
input vga_cls // clear screen button
|
input vga_cls, // clear screen button
|
||||||
|
|
||||||
|
output reset_key, // keyboard shortcut for reset
|
||||||
|
output poweroff_key // keyboard shortcut for poweroff/on
|
||||||
);
|
);
|
||||||
|
|
||||||
assign ram_addr = addr;
|
assign ram_addr = addr;
|
||||||
@ -102,7 +105,9 @@ module apple1(
|
|||||||
.cs(keyboard_cs),
|
.cs(keyboard_cs),
|
||||||
.address(addr[0]),
|
.address(addr[0]),
|
||||||
.dout(ps2_dout),
|
.dout(ps2_dout),
|
||||||
.cls_key(cls_key)
|
.cls_key(cls_key),
|
||||||
|
.reset_key(reset_key),
|
||||||
|
.poweroff_key(poweroff_key)
|
||||||
);
|
);
|
||||||
|
|
||||||
wire PB7; // (negated) display ready (PB7 of CIA)
|
wire PB7; // (negated) display ready (PB7 of CIA)
|
||||||
|
@ -5,19 +5,19 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
// TODO use a CPU that allows illegal instructions
|
// TODO use a CPU that allows illegal instructions
|
||||||
// TODO make it work with SDRAM
|
|
||||||
// TODO ram refresh lost CPU cycles
|
// TODO ram refresh lost CPU cycles
|
||||||
// TODO power on-off key ? (init ram)
|
// TODO power on-off key ? (init ram)
|
||||||
|
// TODO implement power off/on with F9
|
||||||
// TODO ram powerup initial values
|
// TODO ram powerup initial values
|
||||||
// TODO reorganize file structure
|
// TODO reorganize file structure
|
||||||
// TODO ACI: wav tools
|
// TODO ACI: wav tools
|
||||||
// TODO ACI: audio monitor menu option
|
// TODO ACI: audio monitor menu option
|
||||||
// TODO more accurate chip selection circuit
|
// TODO more accurate chip selection circuit
|
||||||
// TODO check diff with updated data_io.v and other modules
|
// TODO check diff with updated data_io.v and other modules
|
||||||
|
// TODO why F5 (reset) can't be pressed twice
|
||||||
// TODO keyboard: use a PIA
|
// TODO keyboard: use a PIA
|
||||||
// TODO keyboard: isolate ps2 keyboard from apple1
|
// TODO keyboard: isolate ps2 keyboard from apple1
|
||||||
// TODO keyboard: check ps2 clock
|
// TODO keyboard: check ps2 clock
|
||||||
// TODO keyboard: reset key
|
|
||||||
// TODO keyboard: make a true ascii keyboard
|
// TODO keyboard: make a true ascii keyboard
|
||||||
// TODO keyboard: check backspace key
|
// TODO keyboard: check backspace key
|
||||||
// TODO osd menu yellow, why it doesn't work?
|
// TODO osd menu yellow, why it doesn't work?
|
||||||
@ -33,6 +33,7 @@
|
|||||||
// TODO tms9918: make it selectable / use include in code
|
// TODO tms9918: make it selectable / use include in code
|
||||||
// TODO tms9918: connect /INT
|
// TODO tms9918: connect /INT
|
||||||
// TODO sid: implement 6581
|
// TODO sid: implement 6581
|
||||||
|
// *TODO make it work with SDRAM
|
||||||
|
|
||||||
module apple1_mist(
|
module apple1_mist(
|
||||||
input CLOCK_27,
|
input CLOCK_27,
|
||||||
@ -85,14 +86,15 @@ localparam CONF_STR = {
|
|||||||
"APPLE 1;;", // 0 download index for "apple1.rom"
|
"APPLE 1;;", // 0 download index for "apple1.rom"
|
||||||
"F,PRG,Load program;", // 1 download index for ".prg" files
|
"F,PRG,Load program;", // 1 download index for ".prg" files
|
||||||
"O2,TMS9918 output,Off,On;",
|
"O2,TMS9918 output,Off,On;",
|
||||||
"T6,Reset;",
|
"O3,Audio monitor,tape in,tape out;",
|
||||||
|
"T6,Reset (F5);",
|
||||||
"V,v1.01.",`BUILD_DATE
|
"V,v1.01.",`BUILD_DATE
|
||||||
};
|
};
|
||||||
|
|
||||||
localparam conf_str_len = $size(CONF_STR)>>3;
|
localparam conf_str_len = $size(CONF_STR)>>3;
|
||||||
|
|
||||||
wire st_reset_switch = buttons[1];
|
wire st_reset_switch = buttons[1];
|
||||||
wire st_menu_reset = status[6];
|
|
||||||
|
|
||||||
wire r, g, b;
|
wire r, g, b;
|
||||||
wire hs, vs;
|
wire hs, vs;
|
||||||
@ -102,6 +104,8 @@ wire [1:0] buttons;
|
|||||||
wire [1:0] switches;
|
wire [1:0] switches;
|
||||||
|
|
||||||
wire st_tms9918_output = status[2];
|
wire st_tms9918_output = status[2];
|
||||||
|
wire st_audio_mon_tape_in = ~status[3];
|
||||||
|
wire st_menu_reset = status[6];
|
||||||
|
|
||||||
wire scandoubler_disable;
|
wire scandoubler_disable;
|
||||||
wire ypbpr;
|
wire ypbpr;
|
||||||
@ -110,7 +114,7 @@ wire no_csync;
|
|||||||
wire ps2_kbd_clk;
|
wire ps2_kbd_clk;
|
||||||
wire ps2_kbd_data;
|
wire ps2_kbd_data;
|
||||||
|
|
||||||
wire reset_button = status[0] | st_menu_reset | st_reset_switch | !pll_locked;
|
wire reset_button = status[0] | st_menu_reset | st_reset_switch | reset_key_edge |!pll_locked;
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
@ -237,11 +241,13 @@ always @(posedge sys_clock) begin
|
|||||||
end
|
end
|
||||||
|
|
||||||
wire audio;
|
wire audio;
|
||||||
|
wire audio_monitor = st_audio_mon_tape_in ? CASIN : CASOUT ;
|
||||||
|
|
||||||
dac #(.C_bits(16)) dac_AUDIO
|
dac #(.C_bits(16)) dac_AUDIO
|
||||||
(
|
(
|
||||||
.clk_i(sys_clock),
|
.clk_i(sys_clock),
|
||||||
.res_n_i(pll_locked),
|
.res_n_i(pll_locked),
|
||||||
.dac_i({ CASOUT, 15'b0000000 }), // TODO not sure about polarity
|
.dac_i({ audio_monitor, 15'b0000000 }),
|
||||||
.dac_o(audio)
|
.dac_o(audio)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -304,6 +310,17 @@ wire [7:0] bus_dout = rom_cs ? rom_dout :
|
|||||||
ram_cs ? ram_dout :
|
ram_cs ? ram_dout :
|
||||||
8'b0;
|
8'b0;
|
||||||
|
|
||||||
|
wire reset_key;
|
||||||
|
wire poweroff_key;
|
||||||
|
|
||||||
|
// detects the rising edge of the keyboard reset key
|
||||||
|
// otherwise keyboard stays in reset mode
|
||||||
|
wire reset_key_edge = reset_key_old == 0 && reset_key == 1;
|
||||||
|
reg reset_key_old = 0;
|
||||||
|
always @(posedge sys_clock) begin
|
||||||
|
reset_key_old <= reset_key;
|
||||||
|
end
|
||||||
|
|
||||||
apple1 apple1
|
apple1 apple1
|
||||||
(
|
(
|
||||||
.reset(reset_button),
|
.reset(reset_button),
|
||||||
@ -328,7 +345,10 @@ apple1 apple1
|
|||||||
.vga_grn(g),
|
.vga_grn(g),
|
||||||
.vga_blu(b),
|
.vga_blu(b),
|
||||||
|
|
||||||
.vga_cls() // clear screen button (not connected yet)
|
.vga_cls(), // clear screen button (not connected yet)
|
||||||
|
|
||||||
|
.reset_key(reset_key), // keyboard shortcut for reset
|
||||||
|
.poweroff_key(poweroff_key) // keyboard shortcut for power off/on
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +34,9 @@ module ps2keyboard (
|
|||||||
input address, // =0 RX buffer, =1 RX status
|
input address, // =0 RX buffer, =1 RX status
|
||||||
output reg [7:0] dout, // 8-bit output bus.
|
output reg [7:0] dout, // 8-bit output bus.
|
||||||
|
|
||||||
output reg cls_key // F1 acts as clear screeen hardware button
|
output reg cls_key, // F1 acts as clear screeen hardware button
|
||||||
|
output reg reset_key, // F5 acts as reset key
|
||||||
|
output reg poweroff_key // F9 acts as power on/off
|
||||||
);
|
);
|
||||||
|
|
||||||
reg [3:0] rxcnt; // count how many bits have been shift into rxshiftbuf
|
reg [3:0] rxcnt; // count how many bits have been shift into rxshiftbuf
|
||||||
@ -180,6 +182,8 @@ module ps2keyboard (
|
|||||||
if (!shift)
|
if (!shift)
|
||||||
case(rx)
|
case(rx)
|
||||||
8'h05: cls_key <= 1;
|
8'h05: cls_key <= 1;
|
||||||
|
8'h03: reset_key <= 1;
|
||||||
|
8'h01: poweroff_key <= 1;
|
||||||
8'h1C: ascii <= "A";
|
8'h1C: ascii <= "A";
|
||||||
8'h32: ascii <= "B";
|
8'h32: ascii <= "B";
|
||||||
8'h21: ascii <= "C";
|
8'h21: ascii <= "C";
|
||||||
@ -312,6 +316,8 @@ module ps2keyboard (
|
|||||||
shift <= 1'b0;
|
shift <= 1'b0;
|
||||||
next_state = S_KEYNORMAL;
|
next_state = S_KEYNORMAL;
|
||||||
cls_key <= 0;
|
cls_key <= 0;
|
||||||
|
reset_key <= 0;
|
||||||
|
poweroff_key <= 0;
|
||||||
end
|
end
|
||||||
S_KEYE0:
|
S_KEYE0:
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user