Use Win+F11 as original RESTORE when Action Replay or similar cart is used.

This commit is contained in:
sorgelig
2021-01-17 23:11:20 +08:00
parent 4c0f085849
commit 76048ceb33
4 changed files with 27 additions and 12 deletions

15
c64.sv
View File

@@ -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),

View File

@@ -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;

View File

@@ -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;

View File

@@ -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'
);