-- ----------------------------------------------------------------------- -- -- Turbo Chameleon -- -- Multi purpose FPGA expansion for the Commodore 64 computer -- -- ----------------------------------------------------------------------- -- Copyright 2005-2018 by Peter Wendrich (pwsoft@syntiac.com) -- http://www.syntiac.com -- -- This source file is free software: you can redistribute it and/or modify -- it under the terms of the GNU Lesser General Public License as published -- by the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This source file is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- -- ----------------------------------------------------------------------- -- -- Chameleon timing and I/O driver. Handles all the timing and multiplexing -- details of the cartridge port for the Chameleon second edition. -- - Detects the type of mode the chameleon is running in. -- - Multiplexes the PS/2 keyboard and mouse signals. -- - Gives access to joysticks and keyboard on a C64 in cartridge mode. -- - Gives access to joysticks and keyboard on a docking-station -- - Gives access to MMC card and serial-flash through -- - Drives the two LEDs on the Chameleon (or an optional Amiga keyboard). -- - Can optionally give access to the IEC bus -- - Can optionally give access to other C64 resources like the SID. -- -- ----------------------------------------------------------------------- -- enable_docking_station - Enable support for the docking-station. -- enable_cdtv_remove - Enable support for the cdtv remote. CDTV will -- be mapped to first two joysticks and the "keys" -- array when set to true. Otherwise the raw ir signal -- is also available for external decoding. -- enable_c64_joykeyb - Automatically read joystick and keyboard on the C64 bus. -- Take note this disables the C64 bus access feature -- on this entity (c64_* inputs). -- enable_c64_4player - Enable 4player support on the user-port of the C64. -- The flag enable_c64_joykeyb must be true for this to work. -- ----------------------------------------------------------------------- -- clk - system clock -- ena_1mhz - Enable must be '1' one clk cycle each 1 Mhz. -- phi2_n - PHI2 clock from the cartridge port (inverted on Chameleon) -- dotclock_n - Dotclock from the cartridge port (inverted on Chameleon) -- -- reset - Perform a reset of the subsystems. Should be high directly at -- start and stay high for a while to give soft PLL time to -- lock to phi2_n (in cartridge mode). -- -- ir_data - Data from IR-eye for decoding the CDTV remote signals -- ioef - Combined IO_E and IO_F from the cartridge port -- romlh - Combined ROML and ROMH from the cartridge port -- dma_out - Drives DMA line, when high pulls DMA signal low -- rw_out - Drives R/W line, when high pulls R/W signal low. -- -- sa_dir -- sa_oe -- sa15_out -- low_a -- sd_dir -- sd_oe -- low_d -- -- no_clock - '0' when connected to C64 cartridge port. -- '1' when in standalone mode or docking-station connected. -- docking_station - '0' standalone/cartrdige mode -- '1' when docking-station is connected. -- ----------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- ----------------------------------------------------------------------- entity chameleon2_io is generic ( enable_docking_station : boolean := true; enable_cdtv_remote : boolean := false; enable_c64_joykeyb : boolean := false; enable_c64_4player : boolean := false ); port ( -- Clocks clk : in std_logic; ena_1mhz : in std_logic; phi2_n : in std_logic; dotclock_n : in std_logic; -- Control reset : in std_logic; -- Toplevel signals ir_data : in std_logic; clock_ior : out std_logic; clock_iow : out std_logic; ioef : in std_logic; romlh : in std_logic; dma_out : out std_logic; game_out : out std_logic; exrom_out : out std_logic; ba_in : in std_logic; -- rw_in : in std_logic; rw_out : out std_logic; sa_dir : out std_logic; sa_oe : out std_logic; sa15_out : out std_logic; low_a : inout unsigned(15 downto 0); sd_dir : out std_logic; sd_oe : out std_logic; low_d : inout unsigned(7 downto 0); -- Config no_clock : out std_logic; docking_station : out std_logic; -- C64 timing (only for C64 related cores) phi_mode : in std_logic := '0'; phi_out : out std_logic; phi_cnt : out unsigned(7 downto 0); phi_end_0 : out std_logic; phi_end_1 : out std_logic; phi_post_1 : out std_logic; phi_post_2 : out std_logic; phi_post_3 : out std_logic; phi_post_4 : out std_logic; -- C64 bus (only for C64 related cores) c64_vicii_data : in unsigned(7 downto 0) := (others => '1'); c64_cs : in std_logic := '0'; c64_cs_roms : in std_logic := '0'; c64_cs_vicii : in std_logic := '0'; c64_cs_clockport : in std_logic := '0'; c64_we : in std_logic := '0'; c64_a : in unsigned(15 downto 0) := (others => '0'); c64_d : in unsigned(7 downto 0) := (others => '1'); c64_q : out unsigned(7 downto 0); -- Joysticks joystick1 : out unsigned(5 downto 0); joystick2 : out unsigned(5 downto 0); joystick3 : out unsigned(5 downto 0); joystick4 : out unsigned(5 downto 0); -- Keyboards -- 0 = col0, row0 -- 1 = col1, row0 -- 8 = col0, row1 -- 63 = col7, row7 keys : out unsigned(63 downto 0); restore_key_n : out std_logic; amiga_reset_n : out std_logic; amiga_trigger : out std_logic; amiga_scancode : out unsigned(7 downto 0) ); end entity;