mirror of
https://github.com/MiSTer-devel/C64_MiSTer.git
synced 2026-05-17 03:03:24 +00:00
Use Win+F11 as original RESTORE when Action Replay or similar cart is used.
This commit is contained in:
15
c64.sv
15
c64.sv
@@ -43,8 +43,8 @@ module emu
|
||||
output CE_PIXEL,
|
||||
|
||||
//Video aspect ratio for HDMI. Most retro systems have ratio 4:3.
|
||||
output [11:0] VIDEO_ARX,
|
||||
output [11:0] VIDEO_ARY,
|
||||
output [11:0] VIDEO_ARX,
|
||||
output [11:0] VIDEO_ARY,
|
||||
|
||||
output [7:0] VGA_R,
|
||||
output [7:0] VGA_G,
|
||||
@@ -68,8 +68,8 @@ module emu
|
||||
// b[1]: user button
|
||||
// b[0]: osd button
|
||||
output [1:0] BUTTONS,
|
||||
|
||||
input CLK_AUDIO, // 24.576 MHz
|
||||
|
||||
input CLK_AUDIO, // 24.576 MHz
|
||||
output [15:0] AUDIO_L,
|
||||
output [15:0] AUDIO_R,
|
||||
output AUDIO_S, // 1 - signed audio samples, 0 - unsigned
|
||||
@@ -157,8 +157,8 @@ localparam CONF_STR = {
|
||||
"D0S1,D64T64,Mount Drive #9;",
|
||||
"OP,Enable Drive #9,No,Yes;",
|
||||
"-;",
|
||||
"F,PRG,Load File;",
|
||||
"F,CRT,Load Cartridge;",
|
||||
"F4,PRG,Load File;",
|
||||
"F5,CRT,Load Cartridge;",
|
||||
"-;",
|
||||
"F,TAP,Tape Load;",
|
||||
"R7,Tape Play/Pause;",
|
||||
@@ -422,6 +422,7 @@ cartridge cartridge
|
||||
.IOF_ena(IOF_rom),
|
||||
.max_ram(max_ram),
|
||||
.freeze_key(freeze_key),
|
||||
.mod_key(mod_key),
|
||||
.nmi(nmi),
|
||||
.nmi_ack(nmi_ack)
|
||||
);
|
||||
@@ -710,6 +711,7 @@ wire ram_ce;
|
||||
wire ram_we;
|
||||
wire nmi_ack;
|
||||
wire freeze_key;
|
||||
wire mod_key;
|
||||
|
||||
wire IOE;
|
||||
wire IOF;
|
||||
@@ -751,6 +753,7 @@ fpga64_sid_iec fpga64
|
||||
.nmi_n(~nmi),
|
||||
.nmi_ack(nmi_ack),
|
||||
.freeze_key(freeze_key),
|
||||
.mod_key(mod_key),
|
||||
.dma_n(1'b1),
|
||||
.roml(romL),
|
||||
.romh(romH),
|
||||
|
||||
@@ -44,6 +44,7 @@ module cartridge
|
||||
output reg max_ram, // Enable whole C64 RAM in Ultimax mode
|
||||
|
||||
input freeze_key,
|
||||
input mod_key,
|
||||
output reg nmi,
|
||||
input nmi_ack
|
||||
);
|
||||
@@ -109,6 +110,7 @@ wire freeze_req = (~old_freeze & freeze_key);
|
||||
|
||||
reg old_nmiack = 0;
|
||||
wire freeze_ack = (nmi & ~old_nmiack & nmi_ack);
|
||||
wire freeze_crt = freeze_ack & ~mod_key;
|
||||
|
||||
// 0018 - EXROM line status
|
||||
// 0019 - GAME line status
|
||||
@@ -124,7 +126,7 @@ always @(posedge clk32) begin
|
||||
if (!cart_attached) allow_freeze <= 1; // Otherwise it defaults to 0 and freeze/restore does not work after dettaching a freezer (just once).
|
||||
|
||||
old_freeze <= freeze_key;
|
||||
if(freeze_req & allow_freeze) nmi <= 1;
|
||||
if(freeze_req & (allow_freeze | mod_key)) nmi <= 1;
|
||||
|
||||
old_nmiack <= nmi_ack;
|
||||
if(freeze_ack) nmi <= 0;
|
||||
@@ -164,7 +166,7 @@ always @(posedge clk32) begin
|
||||
// controlled by DE00
|
||||
1: begin
|
||||
if(nmi) allow_freeze <= 0;
|
||||
if(!init_n || freeze_ack) begin
|
||||
if(!init_n || freeze_crt) begin
|
||||
cart_disable <= 0;
|
||||
exrom_overide <= 1;
|
||||
game_overide <= 0;
|
||||
@@ -238,7 +240,7 @@ always @(posedge clk32) begin
|
||||
cart_disable <= c64_data_out[7];
|
||||
end
|
||||
end
|
||||
if(freeze_ack) begin
|
||||
if(freeze_crt) begin
|
||||
cart_disable <= 0;
|
||||
game_overide <= 0;
|
||||
allow_freeze <= 0;
|
||||
@@ -346,7 +348,7 @@ always @(posedge clk32) begin
|
||||
IOF_ena <= 1;
|
||||
end
|
||||
|
||||
if(freeze_ack) begin
|
||||
if(freeze_crt) begin
|
||||
game_overide <= 0;
|
||||
allow_freeze <= 0;
|
||||
end
|
||||
@@ -406,7 +408,7 @@ always @(posedge clk32) begin
|
||||
|
||||
// Super Snapshot v5 -(64k rom 8*8k banks/4*16k banks, 32k ram 4*8k banks)
|
||||
20: begin
|
||||
if(!init_n || freeze_ack) begin
|
||||
if(!init_n || freeze_crt) begin
|
||||
init_n <= 1;
|
||||
romL_we <= 1;
|
||||
bank_lo <= 0;
|
||||
|
||||
@@ -47,6 +47,7 @@ entity fpga64_keyboard is
|
||||
pbo: out unsigned(7 downto 0);
|
||||
|
||||
restore_key : out std_logic;
|
||||
mod_key : out std_logic;
|
||||
|
||||
-- Config
|
||||
-- backwardsReadingEnabled = 1 allows reversal of PIA registers to still work.
|
||||
@@ -138,6 +139,9 @@ architecture rtl of fpga64_keyboard is
|
||||
signal key_Q: std_logic := '0';
|
||||
signal key_runstop: std_logic := '0';
|
||||
|
||||
signal mod_key1: std_logic := '0';
|
||||
signal mod_key2: std_logic := '0';
|
||||
|
||||
-- for joystick emulation on PS2
|
||||
signal old_state : std_logic;
|
||||
|
||||
@@ -145,7 +149,9 @@ begin
|
||||
|
||||
pressed <= ps2_key(9);
|
||||
--extended<= ps2_key(8);
|
||||
|
||||
|
||||
mod_key <= mod_key1 or mod_key2;
|
||||
|
||||
matrix: process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
@@ -328,12 +334,14 @@ begin
|
||||
when X"1C" => key_A <= pressed;
|
||||
when X"1D" => key_W <= pressed;
|
||||
when X"1E" => key_2 <= pressed;
|
||||
when X"1F" => mod_key1 <= pressed;
|
||||
when X"21" => key_C <= pressed;
|
||||
when X"22" => key_X <= pressed;
|
||||
when X"23" => key_D <= pressed;
|
||||
when X"24" => key_E <= pressed;
|
||||
when X"25" => key_4 <= pressed;
|
||||
when X"26" => key_3 <= pressed;
|
||||
when X"27" => mod_key2 <= pressed;
|
||||
when X"29" => key_space <= pressed;
|
||||
when X"2A" => key_V <= pressed;
|
||||
when X"2B" => key_F <= pressed;
|
||||
|
||||
@@ -80,6 +80,7 @@ port(
|
||||
IOF : out std_logic; -- cart signals LCA
|
||||
CPU_hasbus : out std_logic; -- CPU has the bus STROBE
|
||||
freeze_key : out std_logic;
|
||||
mod_key : out std_logic;
|
||||
|
||||
ioF_ext : in std_logic;
|
||||
ioE_ext : in std_logic;
|
||||
@@ -732,6 +733,7 @@ port map (
|
||||
pbo => cia1_pbi,
|
||||
|
||||
restore_key => freeze_key,
|
||||
mod_key => mod_key,
|
||||
backwardsReadingEnabled => '1'
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user