mirror of https://github.com/zxdos/zxuno.git
Apple2 a última versión
This commit is contained in:
parent
90e0749c58
commit
bba00ea2ba
|
@ -76,7 +76,7 @@
|
||||||
<association xil_pn:name="Implementation" xil_pn:seqID="13"/>
|
<association xil_pn:name="Implementation" xil_pn:seqID="13"/>
|
||||||
</file>
|
</file>
|
||||||
<file xil_pn:name="source/apple2_zxuno_v3.ucf" xil_pn:type="FILE_UCF">
|
<file xil_pn:name="source/apple2_zxuno_v3.ucf" xil_pn:type="FILE_UCF">
|
||||||
<association xil_pn:name="Implementation" xil_pn:seqID="114"/>
|
<association xil_pn:name="Implementation" xil_pn:seqID="67"/>
|
||||||
</file>
|
</file>
|
||||||
</files>
|
</files>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
copy /B Apple33.nib + LodeRunner.nib + MarioBros.nib + MoonPatrol.nib + SpyVsSpy.nib + Zaxxon.nib + ZorkIII.nib + Choplifter.nib + Karateka.nib + Pacman.nib apple2_10disks.img
|
|
@ -1,5 +1,5 @@
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
--
|
--
|
||||||
-- Papilio DUO with Classic computing shield top-level module for the Apple ][
|
-- Papilio DUO with Classic computing shield top-level module for the Apple ][
|
||||||
--
|
--
|
||||||
-- VLA
|
-- VLA
|
||||||
|
@ -26,6 +26,7 @@ entity APPLE2_TOP is
|
||||||
|
|
||||||
CLOCK50 : in std_logic;
|
CLOCK50 : in std_logic;
|
||||||
LED : out std_logic;
|
LED : out std_logic;
|
||||||
|
LED2 : out std_logic;
|
||||||
I_RESET : in std_logic;
|
I_RESET : in std_logic;
|
||||||
|
|
||||||
-- SRAM
|
-- SRAM
|
||||||
|
@ -59,8 +60,7 @@ entity APPLE2_TOP is
|
||||||
O_AUDIO_L : out std_logic; -- ADC Data
|
O_AUDIO_L : out std_logic; -- ADC Data
|
||||||
O_AUDIO_R : out std_logic; -- ADC Data
|
O_AUDIO_R : out std_logic; -- ADC Data
|
||||||
|
|
||||||
SW_LEFT : in std_logic;
|
BTN2 : in std_logic;
|
||||||
SW_UP : in std_logic;
|
|
||||||
JOYSTICK1 : in std_logic_vector(4 downto 0)
|
JOYSTICK1 : in std_logic_vector(4 downto 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -108,17 +108,53 @@ architecture datapath of APPLE2_TOP is
|
||||||
signal PDL_STROBE : std_logic;
|
signal PDL_STROBE : std_logic;
|
||||||
signal joy1_x, joy1_y : std_logic;
|
signal joy1_x, joy1_y : std_logic;
|
||||||
signal csjudlr1 : std_logic_vector(6 downto 0);
|
signal csjudlr1 : std_logic_vector(6 downto 0);
|
||||||
|
signal BTN3 : std_logic;
|
||||||
|
|
||||||
|
signal keyCode : unsigned(11 downto 0);
|
||||||
|
signal resetKey : std_logic;
|
||||||
|
signal imageCount : unsigned(7 downto 0) := (others => '0');
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
reset <= I_RESET or power_on_reset;
|
reset <= I_RESET or power_on_reset;
|
||||||
|
|
||||||
|
resetKey <= '1' when keyCode = X"007" else '0'; --F12 reset
|
||||||
|
|
||||||
|
img_select : process (keyCode) --Disk image selection = SHIFT + Fx (F1 to F10)
|
||||||
|
begin
|
||||||
|
if keyCode = X"105" then --F1
|
||||||
|
imageCount <= X"00";
|
||||||
|
elsif keyCode = X"106" then
|
||||||
|
imageCount <= X"01";
|
||||||
|
elsif keyCode = X"104" then
|
||||||
|
imageCount <= X"02";
|
||||||
|
elsif keyCode = X"10C" then
|
||||||
|
imageCount <= X"03";
|
||||||
|
elsif keyCode = X"103" then
|
||||||
|
imageCount <= X"04";
|
||||||
|
elsif keyCode = X"10B" then
|
||||||
|
imageCount <= X"05";
|
||||||
|
elsif keyCode = X"183" then
|
||||||
|
imageCount <= X"06";
|
||||||
|
elsif keyCode = X"10A" then
|
||||||
|
imageCount <= X"07";
|
||||||
|
elsif keyCode = X"101" then
|
||||||
|
imageCount <= X"08";
|
||||||
|
elsif keyCode = X"109" then --F10
|
||||||
|
imageCount <= X"09";
|
||||||
|
else
|
||||||
|
imageCount <= imageCount + 0;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
power_on : process(CLK_14M)
|
power_on : process(CLK_14M)
|
||||||
begin
|
begin
|
||||||
if rising_edge(CLK_14M) then
|
if rising_edge(CLK_14M) then
|
||||||
if flash_clk(22) = '1' then
|
if flash_clk(22) = '1' and resetKey = '0' then
|
||||||
power_on_reset <= '0';
|
power_on_reset <= '0';
|
||||||
end if;
|
elsif resetKey = '1' then
|
||||||
|
power_on_reset <= '1';
|
||||||
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|
||||||
|
@ -126,7 +162,11 @@ begin
|
||||||
flash_clkgen : process (CLK_14M)
|
flash_clkgen : process (CLK_14M)
|
||||||
begin
|
begin
|
||||||
if rising_edge(CLK_14M) then
|
if rising_edge(CLK_14M) then
|
||||||
flash_clk <= flash_clk + 1;
|
if resetKey = '0' then
|
||||||
|
flash_clk <= flash_clk + 1;
|
||||||
|
else
|
||||||
|
flash_clk <= "00000000000000000000000";
|
||||||
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|
||||||
|
@ -138,6 +178,8 @@ begin
|
||||||
O_CLK_28M => CLK_28M,
|
O_CLK_28M => CLK_28M,
|
||||||
O_CLK_14M => CLK_14M
|
O_CLK_14M => CLK_14M
|
||||||
);
|
);
|
||||||
|
|
||||||
|
BTN3 <= '1';
|
||||||
|
|
||||||
-- joystick inputs, these should probably be debounced first
|
-- joystick inputs, these should probably be debounced first
|
||||||
csjudlr1 <= "00" & JOYSTICK1;
|
csjudlr1 <= "00" & JOYSTICK1;
|
||||||
|
@ -149,7 +191,7 @@ begin
|
||||||
-- y x bt3 bt2 bt1
|
-- y x bt3 bt2 bt1
|
||||||
|
|
||||||
-- Paddle buttons
|
-- Paddle buttons
|
||||||
GAMEPORT <= "00" & joy1_y & joy1_x & SW_LEFT & SW_UP & not csjudlr1(4) & '0'; --"0000" & "0000"; -- (not KEY(2 downto 0)) & "0";
|
GAMEPORT <= "00" & joy1_y & joy1_x & not BTN3 & not BTN2 & not csjudlr1(4) & '0'; --"0000" & "0000"; -- (not KEY(2 downto 0)) & "0";
|
||||||
|
|
||||||
-- fake analog joystick...
|
-- fake analog joystick...
|
||||||
-- PDL_STROBE starts the counter
|
-- PDL_STROBE starts the counter
|
||||||
|
@ -244,6 +286,7 @@ begin
|
||||||
PS2_Data => PS2_DAT,
|
PS2_Data => PS2_DAT,
|
||||||
CLK_14M => CLK_14M,
|
CLK_14M => CLK_14M,
|
||||||
reset => reset,
|
reset => reset,
|
||||||
|
key_code => keyCode, --Q
|
||||||
read => read_key,
|
read => read_key,
|
||||||
K => K
|
K => K
|
||||||
);
|
);
|
||||||
|
@ -284,7 +327,7 @@ begin
|
||||||
ram_we => TRACK_RAM_WE
|
ram_we => TRACK_RAM_WE
|
||||||
);
|
);
|
||||||
|
|
||||||
image <= "0" & "000000000";
|
image <= "00" & imageCount; --disk image selection
|
||||||
|
|
||||||
SD_DAT3 <= CS_N;
|
SD_DAT3 <= CS_N;
|
||||||
SD_CMD <= MOSI;
|
SD_CMD <= MOSI;
|
||||||
|
@ -309,7 +352,6 @@ begin
|
||||||
SRAM_WE_N <= not ram_we;
|
SRAM_WE_N <= not ram_we;
|
||||||
|
|
||||||
LED <= not CS_N; --Led SD
|
LED <= not CS_N; --Led SD
|
||||||
|
-- LED2 <= '1' when imageCount = "0000000001" else '0'; --Led ext3
|
||||||
|
|
||||||
-- Set all other unused bidirectional ports to tri-state
|
|
||||||
|
|
||||||
end datapath;
|
end datapath;
|
||||||
|
|
|
@ -61,16 +61,13 @@ NET SRAM_DQ<7> LOC="P104" | IOSTANDARD = LVCMOS33;
|
||||||
|
|
||||||
NET SRAM_WE_N LOC="P134" | IOSTANDARD=LVCMOS33;
|
NET SRAM_WE_N LOC="P134" | IOSTANDARD=LVCMOS33;
|
||||||
|
|
||||||
NET JOYSTICK1(0) LOC="P142" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(0) LOC="P5" | IOSTANDARD=LVCMOS33 | PULLUP; #right
|
||||||
NET JOYSTICK1(1) LOC="P1" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(1) LOC="P2" | IOSTANDARD=LVCMOS33 | PULLUP; #left
|
||||||
NET JOYSTICK1(2) LOC="P2" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(2) LOC="P1" | IOSTANDARD=LVCMOS33 | PULLUP; #down
|
||||||
NET JOYSTICK1(4) LOC="P5" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(4) LOC="P6" | IOSTANDARD=LVCMOS33 | PULLUP; #btn1
|
||||||
NET JOYSTICK1(3) LOC="P143" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(3) LOC="P142" | IOSTANDARD=LVCMOS33 | PULLUP; #up
|
||||||
|
NET BTN2 LOC="P143" | IOSTANDARD=LVCMOS33 | PULLUP; #btn2
|
||||||
|
|
||||||
NET LED LOC="P10" | IOSTANDARD=LVCMOS33;
|
NET LED LOC="P10" | IOSTANDARD=LVCMOS33;
|
||||||
|
#NET LED2 LOC="P11" | IOSTANDARD=LVCMOS33; #EXT3 test led
|
||||||
|
|
||||||
|
|
||||||
#NET SW_LEFT LOC="P33" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_UP LOC="P34" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_DOWN LOC="P101" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_RIGHT LOC="P100" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
|
@ -61,15 +61,12 @@ NET SRAM_DQ(7) LOC="P127" | IOSTANDARD=LVCMOS33;
|
||||||
|
|
||||||
NET SRAM_WE_N LOC="P118" | IOSTANDARD=LVCMOS33;
|
NET SRAM_WE_N LOC="P118" | IOSTANDARD=LVCMOS33;
|
||||||
|
|
||||||
NET JOYSTICK1(0) LOC="P1" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(0) LOC="P7" | IOSTANDARD=LVCMOS33 | PULLUP; #right
|
||||||
NET JOYSTICK1(1) LOC="P5" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(1) LOC="P6" | IOSTANDARD=LVCMOS33 | PULLUP; #left
|
||||||
NET JOYSTICK1(2) LOC="P6" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(2) LOC="P5" | IOSTANDARD=LVCMOS33 | PULLUP; #down
|
||||||
NET JOYSTICK1(4) LOC="P7" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(4) LOC="P2" | IOSTANDARD=LVCMOS33 | PULLUP; #btn1
|
||||||
NET JOYSTICK1(3) LOC="P2" | IOSTANDARD=LVCMOS33;
|
NET JOYSTICK1(3) LOC="P1" | IOSTANDARD=LVCMOS33 | PULLUP; #up
|
||||||
|
NET BTN2 LOC="P39" | IOSTANDARD=LVCMOS33 | PULLUP; #btn2
|
||||||
|
|
||||||
NET LED LOC="P10" | IOSTANDARD=LVCMOS33;
|
NET LED LOC="P10" | IOSTANDARD=LVCMOS33;
|
||||||
|
#NET LED2 LOC="P11" | IOSTANDARD=LVCMOS33; #EXT3 test led
|
||||||
#NET SW_LEFT LOC="P33" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_UP LOC="P34" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_DOWN LOC="P101" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
#NET SW_RIGHT LOC="P100" | IOSTANDARD=LVCMOS33 | DRIVE=8 | SLEW=FAST;
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ entity keyboard is
|
||||||
CLK_14M : in std_logic;
|
CLK_14M : in std_logic;
|
||||||
read : in std_logic; -- Read strobe
|
read : in std_logic; -- Read strobe
|
||||||
reset : in std_logic;
|
reset : in std_logic;
|
||||||
|
key_code : out unsigned(11 downto 0);
|
||||||
K : out unsigned(7 downto 0) -- Latched, decoded keyboard data
|
K : out unsigned(7 downto 0) -- Latched, decoded keyboard data
|
||||||
);
|
);
|
||||||
end keyboard;
|
end keyboard;
|
||||||
|
@ -69,9 +70,9 @@ begin
|
||||||
Scan_DAV => code_available,
|
Scan_DAV => code_available,
|
||||||
Scan_Code => code);
|
Scan_Code => code);
|
||||||
|
|
||||||
K <= key_pressed & "00" & ascii(4 downto 0) when ctrl = '1' else
|
K <= key_pressed & "00" & ascii(4 downto 0) when ctrl = '1' and ascii /= "00" else
|
||||||
key_pressed & ascii(6 downto 0);
|
key_pressed & ascii(6 downto 0) when ascii /= "00" else X"00"; --Q ascii
|
||||||
|
|
||||||
shift_ctrl : process (CLK_14M, reset)
|
shift_ctrl : process (CLK_14M, reset)
|
||||||
begin
|
begin
|
||||||
if reset = '1' then
|
if reset = '1' then
|
||||||
|
@ -132,6 +133,7 @@ begin
|
||||||
elsif code = LEFT_SHIFT or code = RIGHT_SHIFT or code = LEFT_CTRL then
|
elsif code = LEFT_SHIFT or code = RIGHT_SHIFT or code = LEFT_CTRL then
|
||||||
next_state <= IDLE;
|
next_state <= IDLE;
|
||||||
else
|
else
|
||||||
|
|
||||||
next_state <= NORMAL_KEY;
|
next_state <= NORMAL_KEY;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
|
@ -155,6 +157,8 @@ begin
|
||||||
|
|
||||||
shifted_code <= "00" & alt & shift & latched_code;
|
shifted_code <= "00" & alt & shift & latched_code;
|
||||||
|
|
||||||
|
key_code <= shifted_code when state = KEY_UP else X"000"; --Q
|
||||||
|
|
||||||
EN_us: if KEYMAP = "EN-us" generate
|
EN_us: if KEYMAP = "EN-us" generate
|
||||||
with shifted_code select
|
with shifted_code select
|
||||||
ascii <=
|
ascii <=
|
||||||
|
|
Loading…
Reference in New Issue