From 966f2c5e3283a2abd47727fc831f5c6d644a6746 Mon Sep 17 00:00:00 2001 From: Gehstock Date: Mon, 30 Apr 2018 15:19:00 +0200 Subject: [PATCH] Vectrex Update --- .gitignore | 4 + .../snapshot/apple-one(serial Transfer).rbf | Bin 0 -> 231737 bytes GCE - Vectrex_MiST/README.TXT | 16 +- GCE - Vectrex_MiST/Release/vectrex_MiST.rbf | Bin 259152 -> 257935 bytes GCE - Vectrex_MiST/rtl/YM2149_linmix_sep.vhd | 574 --- GCE - Vectrex_MiST/rtl/build_id.v | 4 +- GCE - Vectrex_MiST/rtl/cpu09l_128a.vhd | 44 +- GCE - Vectrex_MiST/rtl/keyboard.v | 17 +- GCE - Vectrex_MiST/rtl/mc6809.v | 89 + GCE - Vectrex_MiST/rtl/mc6809is.v | 4154 +++++++++++++++++ GCE - Vectrex_MiST/rtl/pll.v | 48 +- GCE - Vectrex_MiST/rtl/vectrex.vhd | 97 +- GCE - Vectrex_MiST/rtl/vectrex_exec_prom.vhd | 58 +- GCE - Vectrex_MiST/rtl/vectrex_mist.sv | 134 +- GCE - Vectrex_MiST/rtl/ym2149.sv | 304 ++ GCE - Vectrex_MiST/vectrex_MiST.qsf | 4 +- 16 files changed, 4815 insertions(+), 732 deletions(-) create mode 100644 .gitignore create mode 100644 Apple - 1_MiST/snapshot/apple-one(serial Transfer).rbf delete mode 100644 GCE - Vectrex_MiST/rtl/YM2149_linmix_sep.vhd create mode 100644 GCE - Vectrex_MiST/rtl/mc6809.v create mode 100644 GCE - Vectrex_MiST/rtl/mc6809is.v create mode 100644 GCE - Vectrex_MiST/rtl/ym2149.sv diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..06fe373b --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +Robotron - Z1013_MiST/Z1013_Mist.pti_db_list.ddb +Robotron - Z1013_MiST/Z1013_Mist.tis_db_list.ddb +Sharp - MZ-80K_MiST/mz80k.qws diff --git a/Apple - 1_MiST/snapshot/apple-one(serial Transfer).rbf b/Apple - 1_MiST/snapshot/apple-one(serial Transfer).rbf new file mode 100644 index 0000000000000000000000000000000000000000..92417a567e21b34e19aa9458a48d2936608b7850 GIT binary patch literal 231737 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

Bi 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 literal 0 HcmV?d00001 diff --git a/GCE - Vectrex_MiST/README.TXT b/GCE - Vectrex_MiST/README.TXT index 968e08f5..132b2781 100644 --- a/GCE - Vectrex_MiST/README.TXT +++ b/GCE - Vectrex_MiST/README.TXT @@ -5,10 +5,20 @@ Max 16kb Roms supported Controls: Movement: Joystick, Keyboard(Arrow Keys) - Buttons: 1-2 on Joystick Fire Buttons - 1-4 on Keyboard 1-4 + Buttons: 1-4 on Joystick Fire Buttons + (Player 1) 1-4 on Keyboard 1-4 and WASD + (Player 2) NUM, /, *, - on Numpad and Arrow Keys + +ToDo: Reset (hold Button longer for a Correct Reset) + + + + + + + + -ToDo: Fix Reset( hangs sometimes) diff --git a/GCE - Vectrex_MiST/Release/vectrex_MiST.rbf b/GCE - Vectrex_MiST/Release/vectrex_MiST.rbf index 4de020ef735e84548893986f14921c5523ec4931..793b466814ea22930aa1d53cbce53d9b349b0f82 100644 GIT binary patch literal 257935 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 z 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 H4Rik=8Ev*Z literal 259152 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

-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

f8>K=*Ut_kS;#g<(i+(Oj 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%0AK}Ei%^69;O*IIm4)CSTd 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 diff --git a/GCE - Vectrex_MiST/rtl/YM2149_linmix_sep.vhd b/GCE - Vectrex_MiST/rtl/YM2149_linmix_sep.vhd deleted file mode 100644 index 6ed2498a..00000000 --- a/GCE - Vectrex_MiST/rtl/YM2149_linmix_sep.vhd +++ /dev/null @@ -1,574 +0,0 @@ --- changes for seperate audio outputs and enable now enables cpu access as well --- --- A simulation model of YM2149 (AY-3-8910 with bells on) - --- Copyright (c) MikeJ - Jan 2005 --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- THIS CODE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" --- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR --- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE --- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR --- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. --- --- You are responsible for any legal issues arising from your use of this code. --- --- The latest version of this file can be found at: www.fpgaarcade.com --- --- Email support@fpgaarcade.com --- --- Revision list --- --- version 001 initial release --- --- Clues from MAME sound driver and Kazuhiro TSUJIKAWA --- --- These are the measured outputs from a real chip for a single Isolated channel into a 1K load (V) --- vol 15 .. 0 --- 3.27 2.995 2.741 2.588 2.452 2.372 2.301 2.258 2.220 2.198 2.178 2.166 2.155 2.148 2.141 2.132 --- As the envelope volume is 5 bit, I have fitted a curve to the not quite log shape in order --- to produced all the required values. --- (The first part of the curve is a bit steeper and the last bit is more linear than expected) --- --- NOTE, this component uses LINEAR mixing of the three analogue channels, and is only --- accurate for designs where the outputs are buffered and not simply wired together. --- The ouput level is more complex in that case and requires a larger table. - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_arith.all; - use ieee.std_logic_unsigned.all; - -entity YM2149 is - port ( - -- data bus - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - O_DA_OE_L : out std_logic; - -- control - I_A9_L : in std_logic; - I_A8 : in std_logic; - I_BDIR : in std_logic; - I_BC2 : in std_logic; - I_BC1 : in std_logic; - I_SEL_L : in std_logic; - - O_AUDIO : out std_logic_vector(7 downto 0); - O_CHAN : out std_logic_vector(1 downto 0); - -- port a - I_IOA : in std_logic_vector(7 downto 0); - O_IOA : out std_logic_vector(7 downto 0); - O_IOA_OE_L : out std_logic; - -- port b - I_IOB : in std_logic_vector(7 downto 0); - O_IOB : out std_logic_vector(7 downto 0); - O_IOB_OE_L : out std_logic; - - ENA : in std_logic; -- clock enable for higher speed operation - RESET_L : in std_logic; - CLK : in std_logic -- note 6 Mhz - ); -end; - -architecture RTL of YM2149 is - type array_16x8 is array (0 to 15) of std_logic_vector( 7 downto 0); - type array_3x12 is array (1 to 3) of std_logic_vector(11 downto 0); - - signal cnt_div : std_logic_vector(3 downto 0) := (others => '0'); - signal cnt_div_t1 : std_logic_vector(3 downto 0); - signal noise_div : std_logic := '0'; - signal ena_div : std_logic; - signal ena_div_noise : std_logic; - signal poly17 : std_logic_vector(16 downto 0) := (others => '0'); - - -- registers - signal addr : std_logic_vector(7 downto 0); - signal busctrl_addr : std_logic; - signal busctrl_we : std_logic; - signal busctrl_re : std_logic; - - signal reg : array_16x8; - signal env_reset : std_logic; - signal ioa_inreg : std_logic_vector(7 downto 0); - signal iob_inreg : std_logic_vector(7 downto 0); - - signal noise_gen_cnt : std_logic_vector(4 downto 0); - signal noise_gen_op : std_logic; - signal tone_gen_cnt : array_3x12 := (others => (others => '0')); - signal tone_gen_op : std_logic_vector(3 downto 1) := "000"; - - signal env_gen_cnt : std_logic_vector(15 downto 0); - signal env_ena : std_logic; - signal env_hold : std_logic; - signal env_inc : std_logic; - signal env_vol : std_logic_vector(4 downto 0); - - signal tone_ena_l : std_logic; - signal tone_src : std_logic; - signal noise_ena_l : std_logic; - signal chan_vol : std_logic_vector(4 downto 0); - - signal dac_amp : std_logic_vector(7 downto 0); -begin - -- cpu i/f - p_busdecode : process(I_BDIR, I_BC2, I_BC1, addr, I_A9_L, I_A8) - variable cs : std_logic; - variable sel : std_logic_vector(2 downto 0); - begin - -- BDIR BC2 BC1 MODE - -- 0 0 0 inactive - -- 0 0 1 address - -- 0 1 0 inactive - -- 0 1 1 read - -- 1 0 0 address - -- 1 0 1 inactive - -- 1 1 0 write - -- 1 1 1 read - busctrl_addr <= '0'; - busctrl_we <= '0'; - busctrl_re <= '0'; - - cs := '0'; - if (I_A9_L = '0') and (I_A8 = '1') and (addr(7 downto 4) = "0000") then - cs := '1'; - end if; - - sel := (I_BDIR & I_BC2 & I_BC1); - case sel is - when "000" => null; - when "001" => busctrl_addr <= '1'; - when "010" => null; - when "011" => busctrl_re <= cs; - when "100" => busctrl_addr <= '1'; - when "101" => null; - when "110" => busctrl_we <= cs; - when "111" => busctrl_addr <= '1'; - when others => null; - end case; - end process; - - p_oe : process(busctrl_re) - begin - -- if we are emulating a real chip, maybe clock this to fake up the tristate typ delay of 100ns - O_DA_OE_L <= not (busctrl_re); - end process; - - -- - -- CLOCKED - -- - p_waddr : process(RESET_L, CLK) - begin - -- looks like registers are latches in real chip, but the address is caught at the end of the address state. - if (RESET_L = '0') then - addr <= (others => '0'); - elsif rising_edge(CLK) then - if (ENA = '1') then - if (busctrl_addr = '1') then - addr <= I_DA; - end if; - end if; - end if; - end process; - - p_wdata : process(RESET_L, CLK) - begin - if (RESET_L = '0') then - reg <= (others => (others => '0')); - env_reset <= '1'; - elsif rising_edge(CLK) then - if (ENA = '1') then - env_reset <= '0'; - if (busctrl_we = '1') then - case addr(3 downto 0) is - when x"0" => reg(0) <= I_DA; - when x"1" => reg(1) <= I_DA; - when x"2" => reg(2) <= I_DA; - when x"3" => reg(3) <= I_DA; - when x"4" => reg(4) <= I_DA; - when x"5" => reg(5) <= I_DA; - when x"6" => reg(6) <= I_DA; - when x"7" => reg(7) <= I_DA; - when x"8" => reg(8) <= I_DA; - when x"9" => reg(9) <= I_DA; - when x"A" => reg(10) <= I_DA; - when x"B" => reg(11) <= I_DA; - when x"C" => reg(12) <= I_DA; - when x"D" => reg(13) <= I_DA; env_reset <= '1'; - when x"E" => reg(14) <= I_DA; - when x"F" => reg(15) <= I_DA; - when others => null; - end case; - end if; - end if; - end if; - end process; - - p_rdata : process(busctrl_re, addr, reg, ioa_inreg, iob_inreg) - begin - O_DA <= (others => '0'); -- 'X' - if (busctrl_re = '1') then -- not necessary, but useful for putting 'X's in the simulator - case addr(3 downto 0) is - when x"0" => O_DA <= reg(0) ; - when x"1" => O_DA <= "0000" & reg(1)(3 downto 0) ; - when x"2" => O_DA <= reg(2) ; - when x"3" => O_DA <= "0000" & reg(3)(3 downto 0) ; - when x"4" => O_DA <= reg(4) ; - when x"5" => O_DA <= "0000" & reg(5)(3 downto 0) ; - when x"6" => O_DA <= "000" & reg(6)(4 downto 0) ; - when x"7" => O_DA <= reg(7) ; - when x"8" => O_DA <= "000" & reg(8)(4 downto 0) ; - when x"9" => O_DA <= "000" & reg(9)(4 downto 0) ; - when x"A" => O_DA <= "000" & reg(10)(4 downto 0) ; - when x"B" => O_DA <= reg(11); - when x"C" => O_DA <= reg(12); - when x"D" => O_DA <= "0000" & reg(13)(3 downto 0); - when x"E" => if (reg(7)(6) = '0') then -- input - O_DA <= ioa_inreg; - else - O_DA <= reg(14); -- read output reg - end if; - when x"F" => if (Reg(7)(7) = '0') then - O_DA <= iob_inreg; - else - O_DA <= reg(15); - end if; - when others => null; - end case; - end if; - end process; - -- - p_divider : process - begin - wait until rising_edge(CLK); - -- / 8 when SEL is high and /16 when SEL is low - if (ENA = '1') then - ena_div <= '0'; - ena_div_noise <= '0'; - if (cnt_div = "0000") then - cnt_div <= (not I_SEL_L) & "111"; - ena_div <= '1'; - - noise_div <= not noise_div; - if (noise_div = '1') then - ena_div_noise <= '1'; - end if; - else - cnt_div <= cnt_div - "1"; - end if; - end if; - end process; - - p_noise_gen : process - variable noise_gen_comp : std_logic_vector(4 downto 0); - variable poly17_zero : std_logic; - begin - wait until rising_edge(CLK); - if (reg(6)(4 downto 0) = "00000") then - noise_gen_comp := "00000"; - else - noise_gen_comp := (reg(6)(4 downto 0) - "1"); - end if; - - poly17_zero := '0'; - if (poly17 = "00000000000000000") then poly17_zero := '1'; end if; - - if (ENA = '1') then - if (ena_div_noise = '1') then -- divider ena - - if (noise_gen_cnt >= noise_gen_comp) then - noise_gen_cnt <= "00000"; - poly17 <= (poly17(0) xor poly17(2) xor poly17_zero) & poly17(16 downto 1); - else - noise_gen_cnt <= (noise_gen_cnt + "1"); - end if; - end if; - end if; - end process; - noise_gen_op <= poly17(0); - - p_tone_gens : process - variable tone_gen_freq : array_3x12; - variable tone_gen_comp : array_3x12; - begin - wait until rising_edge(CLK); - -- looks like real chips count up - we need to get the Exact behaviour .. - tone_gen_freq(1) := reg(1)(3 downto 0) & reg(0); - tone_gen_freq(2) := reg(3)(3 downto 0) & reg(2); - tone_gen_freq(3) := reg(5)(3 downto 0) & reg(4); - -- period 0 = period 1 - for i in 1 to 3 loop - if (tone_gen_freq(i) = x"000") then - tone_gen_comp(i) := x"000"; - else - tone_gen_comp(i) := (tone_gen_freq(i) - "1"); - end if; - end loop; - - if (ENA = '1') then - for i in 1 to 3 loop - if (ena_div = '1') then -- divider ena - - if (tone_gen_cnt(i) >= tone_gen_comp(i)) then - tone_gen_cnt(i) <= x"000"; - tone_gen_op(i) <= not tone_gen_op(i); - else - tone_gen_cnt(i) <= (tone_gen_cnt(i) + "1"); - end if; - end if; - end loop; - end if; - end process; - - p_envelope_freq : process - variable env_gen_freq : std_logic_vector(15 downto 0); - variable env_gen_comp : std_logic_vector(15 downto 0); - begin - wait until rising_edge(CLK); - env_gen_freq := reg(12) & reg(11); - -- envelope freqs 1 and 0 are the same. - if (env_gen_freq = x"0000") then - env_gen_comp := x"0000"; - else - env_gen_comp := (env_gen_freq - "1"); - end if; - - if (ENA = '1') then - env_ena <= '0'; - if (ena_div = '1') then -- divider ena - if (env_gen_cnt >= env_gen_comp) then - env_gen_cnt <= x"0000"; - env_ena <= '1'; - else - env_gen_cnt <= (env_gen_cnt + "1"); - end if; - end if; - end if; - end process; - - p_envelope_shape : process(env_reset, reg, CLK) - variable is_bot : boolean; - variable is_bot_p1 : boolean; - variable is_top_m1 : boolean; - variable is_top : boolean; - begin - -- envelope shapes - -- C AtAlH - -- 0 0 x x \___ - -- - -- 0 1 x x /___ - -- - -- 1 0 0 0 \\\\ - -- - -- 1 0 0 1 \___ - -- - -- 1 0 1 0 \/\/ - -- ___ - -- 1 0 1 1 \ - -- - -- 1 1 0 0 //// - -- ___ - -- 1 1 0 1 / - -- - -- 1 1 1 0 /\/\ - -- - -- 1 1 1 1 /___ - if (env_reset = '1') then - -- load initial state - if (reg(13)(2) = '0') then -- attack - env_vol <= "11111"; - env_inc <= '0'; -- -1 - else - env_vol <= "00000"; - env_inc <= '1'; -- +1 - end if; - env_hold <= '0'; - - elsif rising_edge(CLK) then - is_bot := (env_vol = "00000"); - is_bot_p1 := (env_vol = "00001"); - is_top_m1 := (env_vol = "11110"); - is_top := (env_vol = "11111"); - - if (ENA = '1') then - if (env_ena = '1') then - if (env_hold = '0') then - if (env_inc = '1') then - env_vol <= (env_vol + "00001"); - else - env_vol <= (env_vol + "11111"); - end if; - end if; - - -- envelope shape control. - if (reg(13)(3) = '0') then - if (env_inc = '0') then -- down - if is_bot_p1 then env_hold <= '1'; end if; - else - if is_top then env_hold <= '1'; end if; - end if; - else - if (reg(13)(0) = '1') then -- hold = 1 - if (env_inc = '0') then -- down - if (reg(13)(1) = '1') then -- alt - if is_bot then env_hold <= '1'; end if; - else - if is_bot_p1 then env_hold <= '1'; end if; - end if; - else - if (reg(13)(1) = '1') then -- alt - if is_top then env_hold <= '1'; end if; - else - if is_top_m1 then env_hold <= '1'; end if; - end if; - end if; - - elsif (reg(13)(1) = '1') then -- alternate - if (env_inc = '0') then -- down - if is_bot_p1 then env_hold <= '1'; end if; - if is_bot then env_hold <= '0'; env_inc <= '1'; end if; - else - if is_top_m1 then env_hold <= '1'; end if; - if is_top then env_hold <= '0'; env_inc <= '0'; end if; - end if; - end if; - - end if; - end if; - end if; - end if; - end process; - - p_chan_mixer : process(cnt_div, reg, tone_gen_op) - begin - tone_ena_l <= '1'; tone_src <= '1'; - noise_ena_l <= '1'; chan_vol <= "00000"; - case cnt_div(1 downto 0) is - when "00" => - tone_ena_l <= reg(7)(0); tone_src <= tone_gen_op(1); chan_vol <= reg(8)(4 downto 0); - noise_ena_l <= reg(7)(3); - when "01" => - tone_ena_l <= reg(7)(1); tone_src <= tone_gen_op(2); chan_vol <= reg(9)(4 downto 0); - noise_ena_l <= reg(7)(4); - when "10" => - tone_ena_l <= reg(7)(2); tone_src <= tone_gen_op(3); chan_vol <= reg(10)(4 downto 0); - noise_ena_l <= reg(7)(5); - when "11" => null; -- tone gen outputs become valid on this clock - when others => null; - end case; - end process; - - p_op_mixer : process - variable chan_mixed : std_logic; - variable chan_amp : std_logic_vector(4 downto 0); - begin - wait until rising_edge(CLK); - if (ENA = '1') then - - chan_mixed := (tone_ena_l or tone_src) and (noise_ena_l or noise_gen_op); - - chan_amp := (others => '0'); - if (chan_mixed = '1') then - if (chan_vol(4) = '0') then - if (chan_vol(3 downto 0) = "0000") then -- nothing is easy ! make sure quiet is quiet - chan_amp := "00000"; - else - chan_amp := chan_vol(3 downto 0) & '1'; -- make sure level 31 (env) = level 15 (tone) - end if; - else - chan_amp := env_vol(4 downto 0); - end if; - end if; - - dac_amp <= x"00"; - case chan_amp is - when "11111" => dac_amp <= x"FF"; - when "11110" => dac_amp <= x"D9"; - when "11101" => dac_amp <= x"BA"; - when "11100" => dac_amp <= x"9F"; - when "11011" => dac_amp <= x"88"; - when "11010" => dac_amp <= x"74"; - when "11001" => dac_amp <= x"63"; - when "11000" => dac_amp <= x"54"; - when "10111" => dac_amp <= x"48"; - when "10110" => dac_amp <= x"3D"; - when "10101" => dac_amp <= x"34"; - when "10100" => dac_amp <= x"2C"; - when "10011" => dac_amp <= x"25"; - when "10010" => dac_amp <= x"1F"; - when "10001" => dac_amp <= x"1A"; - when "10000" => dac_amp <= x"16"; - when "01111" => dac_amp <= x"13"; - when "01110" => dac_amp <= x"10"; - when "01101" => dac_amp <= x"0D"; - when "01100" => dac_amp <= x"0B"; - when "01011" => dac_amp <= x"09"; - when "01010" => dac_amp <= x"08"; - when "01001" => dac_amp <= x"07"; - when "01000" => dac_amp <= x"06"; - when "00111" => dac_amp <= x"05"; - when "00110" => dac_amp <= x"04"; - when "00101" => dac_amp <= x"03"; - when "00100" => dac_amp <= x"03"; - when "00011" => dac_amp <= x"02"; - when "00010" => dac_amp <= x"02"; - when "00001" => dac_amp <= x"01"; - when "00000" => dac_amp <= x"00"; - when others => null; - end case; - - cnt_div_t1 <= cnt_div; - end if; - end process; - - p_audio_output : process(RESET_L, CLK) - begin - if (RESET_L = '0') then - O_AUDIO <= (others => '0'); - O_CHAN <= (others => '0'); - elsif rising_edge(CLK) then - - if (ENA = '1') then - O_AUDIO <= dac_amp(7 downto 0); - O_CHAN <= cnt_div_t1(1 downto 0); - end if; - end if; - end process; - - p_io_ports : process(reg) - begin - O_IOA <= reg(14); - O_IOA_OE_L <= not reg(7)(6); - O_IOB <= reg(15); - O_IOB_OE_L <= not reg(7)(7); - end process; - - p_io_ports_inreg : process - begin - wait until rising_edge(CLK); - if (ENA = '1') then -- resync - ioa_inreg <= I_IOA; - iob_inreg <= I_IOB; - end if; - end process; -end architecture RTL; diff --git a/GCE - Vectrex_MiST/rtl/build_id.v b/GCE - Vectrex_MiST/rtl/build_id.v index 6e54558d..938f9991 100644 --- a/GCE - Vectrex_MiST/rtl/build_id.v +++ b/GCE - Vectrex_MiST/rtl/build_id.v @@ -1,2 +1,2 @@ -`define BUILD_DATE "180402" -`define BUILD_TIME "195354" +`define BUILD_DATE "180429" +`define BUILD_TIME "150128" diff --git a/GCE - Vectrex_MiST/rtl/cpu09l_128a.vhd b/GCE - Vectrex_MiST/rtl/cpu09l_128a.vhd index 47b8eddd..6a07aacb 100644 --- a/GCE - Vectrex_MiST/rtl/cpu09l_128a.vhd +++ b/GCE - Vectrex_MiST/rtl/cpu09l_128a.vhd @@ -263,6 +263,7 @@ use ieee.std_logic_unsigned.all; entity cpu09 is port ( clk : in std_logic; -- E clock input (falling edge) + ce : in std_logic; rst : in std_logic; -- reset input (active high) vma : out std_logic; -- valid memory address (active high) lic_out : out std_logic; -- last instruction cycle (active high) @@ -277,8 +278,7 @@ entity cpu09 is irq : in std_logic; -- interrupt request input (active high) firq : in std_logic; -- fast interrupt request input (active high) nmi : in std_logic; -- non maskable interrupt request input (active high) - halt : in std_logic; -- halt input (active high) grants DMA - hold_in : in std_logic -- hold input (active high) extend bus cycle + halt : in std_logic -- halt input (active high) grants DMA ); end cpu09; @@ -498,7 +498,7 @@ begin wait_cycles: process(clk) begin if clk'event and clk = '0' then - + if ce = '1' then if lic = '1' then case op_code is when X"A6" => hold <= '1'; cnt_cycles <= X"1"; -- additional cycles for vectrex tuning @@ -516,11 +516,11 @@ begin if hold = '1' then if cnt_cycles = X"1" then - hold <= '0'; + hold <= '0'; end if; cnt_cycles <= cnt_cycles - '1'; end if; - + end if; end if; end process; @@ -534,6 +534,7 @@ end process; state_stack_proc: process( clk, st_ctrl, return_state ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case st_ctrl is when reset_st => @@ -544,6 +545,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -556,6 +558,7 @@ end process; int_vec_proc: process( clk, iv_ctrl ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case iv_ctrl is when reset_iv => @@ -576,6 +579,7 @@ begin null; end case; end if; -- hold + end if; end if; -- clk end process; @@ -589,6 +593,7 @@ end process; pc_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case pc_ctrl is when reset_pc => @@ -605,6 +610,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -619,6 +625,7 @@ ea_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold= '0' then case ea_ctrl is when reset_ea => @@ -635,6 +642,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -647,6 +655,7 @@ end process; acca_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case acca_ctrl is when reset_acca => @@ -661,6 +670,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -673,6 +683,7 @@ end process; accb_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case accb_ctrl is when reset_accb => @@ -685,6 +696,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -697,6 +709,7 @@ end process; ix_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case ix_ctrl is when reset_ix => @@ -711,6 +724,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -723,6 +737,7 @@ end process; iy_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case iy_ctrl is when reset_iy => @@ -737,6 +752,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -749,6 +765,7 @@ end process; sp_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case sp_ctrl is when reset_sp => @@ -766,6 +783,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -778,6 +796,7 @@ end process; up_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case up_ctrl is when reset_up => @@ -792,6 +811,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -804,6 +824,7 @@ end process; md_reg : process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case md_ctrl is when reset_md => @@ -824,6 +845,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -838,6 +860,7 @@ end process; cc_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case cc_ctrl is when reset_cc => @@ -850,6 +873,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -863,6 +887,7 @@ end process; dp_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case dp_ctrl is when reset_dp => @@ -875,6 +900,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -889,6 +915,7 @@ end process; op_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case op_ctrl is when reset_op => @@ -899,6 +926,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -913,6 +941,7 @@ end process; pre_reg: process( clk ) begin if clk'event and clk = '0' then + if ce = '1' then if hold = '0' then case pre_ctrl is when reset_pre => @@ -923,6 +952,7 @@ begin null; end case; end if; + end if; end if; end process; @@ -941,7 +971,7 @@ begin fic <= '0'; nmi_ack <= '0'; state <= reset_state; - elsif hold = '0' then + elsif ce = '1' and hold = '0' then fic <= lic; -- @@ -1003,6 +1033,7 @@ begin if rst='1' then nmi_req <= '0'; elsif clk'event and clk='0' then + if ce = '1' then if (nmi='1') and (nmi_ack='0') and (nmi_enable='1') then nmi_req <= '1'; else @@ -1010,6 +1041,7 @@ begin nmi_req <= '0'; end if; end if; + end if; end if; end process; diff --git a/GCE - Vectrex_MiST/rtl/keyboard.v b/GCE - Vectrex_MiST/rtl/keyboard.v index 8dde73d6..afa04144 100644 --- a/GCE - Vectrex_MiST/rtl/keyboard.v +++ b/GCE - Vectrex_MiST/rtl/keyboard.v @@ -7,7 +7,7 @@ module keyboard input ps2_kbd_clk, input ps2_kbd_data, - output reg[7:0] joystick + output reg[15:0] joystick ); reg [11:0] shift_reg = 12'hFFF; @@ -33,11 +33,24 @@ always @(negedge clk) begin 'h1E: joystick[5] <= ~release_btn; // 2 'h26: joystick[6] <= ~release_btn; // 3 'h25: joystick[7] <= ~release_btn; // 4 - + + 'h1D: joystick[11] <= ~release_btn; // W + 'h1B: joystick[10] <= ~release_btn; // S + 'h1C: joystick[9] <= ~release_btn; // A + 'h23: joystick[8] <= ~release_btn; // D + + 'h77: joystick[12] <= ~release_btn; // NUM + 'h4A: joystick[13] <= ~release_btn; // / + 'h7C: joystick[14] <= ~release_btn; // * + 'h7B: joystick[15] <= ~release_btn; // - + 'h75: joystick[3] <= ~release_btn; // arrow up 'h72: joystick[2] <= ~release_btn; // arrow down 'h6B: joystick[1] <= ~release_btn; // arrow left 'h74: joystick[0] <= ~release_btn; // arrow right + + + endcase end end diff --git a/GCE - Vectrex_MiST/rtl/mc6809.v b/GCE - Vectrex_MiST/rtl/mc6809.v new file mode 100644 index 00000000..338e9557 --- /dev/null +++ b/GCE - Vectrex_MiST/rtl/mc6809.v @@ -0,0 +1,89 @@ +`timescale 1ns / 1ps +module mc6809 +( + input CLK, + input CLKEN, + input nRESET, + + input CPU, + + output reg E, + output reg riseE, + output reg fallE, // everything except interrupts/dma registered/latched here + + output reg Q, + output reg riseQ, + output reg fallQ, // NMI,IRQ,FIRQ,DMA,HALT registered here + + input [7:0] Din, + output [7:0] Dout, + output [15:0] ADDR, + output RnW, + + input nIRQ, + input nFIRQ, + input nNMI, + input nHALT +); + +cpu09 cpu1 +( + .clk(CLK), + .ce(fallE), + .rst(~nRESET | CPU), + .addr(ADDR1), + .rw(RnW1), + .data_out(Dout1), + .data_in(Din), + .irq(~nIRQ), + .firq(~nFIRQ), + .nmi(~nNMI), + .halt(~nHALT) +); + +mc6809is cpu2 +( + .CLK(CLK), + .D(Din), + .DOut(Dout2), + .ADDR(ADDR2), + .RnW(RnW2), + .fallE_en(fallE), + .fallQ_en(fallQ), + .nIRQ(nIRQ), + .nFIRQ(nFIRQ), + .nNMI(nNMI), + .nHALT(nHALT), + .nRESET(nRESET & CPU), + .nDMABREQ(1) +); + +wire [7:0] Dout1,Dout2; +wire [15:0] ADDR1,ADDR2; +wire RnW1,RnW2; + +assign Dout = CPU ? Dout2 : Dout1; +assign ADDR = CPU ? ADDR2 : ADDR1; +assign RnW = CPU ? RnW2 : RnW1; + +always @(posedge CLK) +begin + reg [1:0] clk_phase =0; + + fallE <= 0; + fallQ <= 0; + riseE <= 0; + riseQ <= 0; + + if (CLKEN) begin + clk_phase <= clk_phase + 1'd1; + case (clk_phase) + 2'b00: begin E <= 0; fallE <= 1; end + 2'b01: begin Q <= 1; riseQ <= 1; end + 2'b10: begin E <= 1; riseE <= 1; end + 2'b11: begin Q <= 0; fallQ <= 1; end + endcase + end +end + +endmodule diff --git a/GCE - Vectrex_MiST/rtl/mc6809is.v b/GCE - Vectrex_MiST/rtl/mc6809is.v new file mode 100644 index 00000000..ebdc88be --- /dev/null +++ b/GCE - Vectrex_MiST/rtl/mc6809is.v @@ -0,0 +1,4154 @@ +`timescale 1ns / 1ns +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: Greg Miller +// Copyright (c) 2016, Greg Miller +// +// Create Date: 14:26:59 08/13/2016 +// Design Name: +// Module Name: mc6809 +// Project Name: Cycle-Accurate 6809 Core +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: Intended to be standalone Vanilla Verilog. +// +// Revision: +// Revision 1.0 - Initial Release +// Revision 1.0s - Sinchronous version (by Sorgelig) +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +// +// The 6809 has incomplete instruction decoding. A collection of instructions, if met, end up actually behaving like +// a binary-adjacent neighbor. +// +// The soft core permits three different behaviors for this situation, controlled by the instantiation parameter +// ILLEGAL_INSTRUCTIONS +// +// "GHOST" - Mimic the 6809's incomplete decoding. This is as similar to a hard 6809 as is practical. [DEFAULT] +// +// "STOP" - Cause the soft core to cease execution, placing $DEAD on the address bus and R/W to 'read'. Interrupts, +// bus control (/HALT, /DMABREQ), etc. are ignored. The core intentionally seizes in this instance. +// (Frankly, this is useful when making changes to the core and you have a logic analyzer connected.) +// +// "IGNORE"- Cause the soft core to merely ignore illegal instructions. It will consider them 1-byte instructions and +// attempt to fetch and run an exception 1 byte later. +// + +module mc6809is +#( + parameter ILLEGAL_INSTRUCTIONS="GHOST" +) +( + input CLK, + input fallE_en, + input fallQ_en, + + input [7:0] D, + output [7:0] DOut, + output [15:0] ADDR, + output RnW, + output BS, + output BA, + input nIRQ, + input nFIRQ, + input nNMI, + output AVMA, + output BUSY, + output LIC, + input nHALT, + input nRESET, + input nDMABREQ, + output [111:0] RegData +); + +reg [7:0] DOutput; + +assign DOut = DOutput; + +reg RnWOut; // Combinatorial + +reg rLIC; +assign LIC = rLIC; + +reg rAVMA; +assign AVMA = rAVMA; + +reg rBUSY; +assign BUSY = rBUSY; + +// Bus control +// BS BA +// 0 0 normal (CPU running, CPU is master) +// 0 1 Interrupt Ack +// 1 0 Sync Ack +// 1 1 CPU has gone high-Z on A, D, R/W +// + +assign RnW = RnWOut; + + +///////////////////////////////////////////////// +// Vectors +`define RESET_VECTOR 16'HFFFE +`define NMI_VECTOR 16'HFFFC +`define SWI_VECTOR 16'HFFFA +`define IRQ_VECTOR 16'HFFF8 +`define FIRQ_VECTOR 16'HFFF6 +`define SWI2_VECTOR 16'HFFF4 +`define SWI3_VECTOR 16'HFFF2 +`define Reserved_VECTOR 16'HFFF0 + +////////////////////////////////////////////////////// +// Latched registers +// + +// The last-latched copy. +reg [7:0] a; +reg [7:0] b; +reg [15:0] x; +reg [15:0] y; +reg [15:0] u; +reg [15:0] s; +reg [15:0] pc; +reg [7:0] dp; +reg [7:0] cc; +reg [15:0] tmp; +reg [15:0] addr; +reg [15:0] ea; + + +// Debug ability to export register contents +assign RegData[7:0] = a; +assign RegData[15:8] = b; +assign RegData[31:16] = x; +assign RegData[47:32] = y; +assign RegData[63:48] = s; +assign RegData[79:64] = u; +assign RegData[87:80] = cc; +assign RegData[95:88] = dp; +assign RegData[111:96] = pc; + + + +// The values as being calculated +reg [7:0] a_nxt; +reg [7:0] b_nxt; +reg [15:0] x_nxt; +reg [15:0] y_nxt; +reg [15:0] u_nxt; +reg [15:0] s_nxt; +reg [15:0] pc_nxt; +reg [7:0] dp_nxt; +reg [7:0] cc_nxt; +reg [15:0] addr_nxt; +reg [15:0] ea_nxt; +reg [15:0] tmp_nxt; + +reg BS_nxt; +reg BA_nxt; + +// for ADDR, BS/BA, assign them to the flops +assign BS = BS_nxt; +assign BA = BA_nxt; +assign ADDR=addr_nxt; + +localparam CC_E= 8'H80; +localparam CC_F= 8'H40; +localparam CC_H= 8'H20; +localparam CC_I= 8'H10; +localparam CC_N= 8'H08; +localparam CC_Z= 8'H04; +localparam CC_V= 8'H02; +localparam CC_C= 8'H01; + +localparam CC_E_BIT= 3'd7; +localparam CC_F_BIT= 3'd6; +localparam CC_H_BIT= 3'd5; +localparam CC_I_BIT= 3'd4; +localparam CC_N_BIT= 3'd3; +localparam CC_Z_BIT= 3'd2; +localparam CC_V_BIT= 3'd1; +localparam CC_C_BIT= 3'd0; + +// Convenience calculations +reg [15:0] pc_p1; +reg [15:0] pc_p2; +reg [15:0] pc_p3; +reg [15:0] s_p1; +reg [15:0] s_m1; +reg [15:0] u_p1; +reg [15:0] u_m1; +reg [15:0] addr_p1; +reg [15:0] ea_p1; + +////////////////////////////////////////////////////// +// NMI Mask +// +// NMI is supposed to be masked - despite the name - until the 6809 loads a value into S. +// Frankly, I'm cheating slightly. If someone does a LDS #$0, it won't disable the mask. Pretty much anything else +// that changes the value of S from the default (which is currently $0) will clear the mask. A reset will set the mask again. +reg NMIMask; + +reg NMILatched; +reg NMISample; +reg NMISample2; +reg NMIClear; +reg NMIClear_nxt; +wire wNMIClear = NMIClear; + +reg IRQLatched; + +reg IRQSample; +reg IRQSample2; +reg FIRQLatched; +reg FIRQSample; +reg FIRQSample2; +reg HALTLatched; +reg HALTSample; +reg HALTSample2; +reg DMABREQLatched; +reg DMABREQSample; +reg DMABREQSample2; + +// Interrupt types +localparam INTTYPE_NMI = 3'H0 ; +localparam INTTYPE_IRQ = 3'H1 ; +localparam INTTYPE_FIRQ = 3'H2 ; +localparam INTTYPE_SWI = 3'H3 ; +localparam INTTYPE_SWI2 = 3'H4 ; +localparam INTTYPE_SWI3 = 3'H5 ; + +reg [2:0] IntType; +reg [2:0] IntType_nxt; + +////////////////////////////////////////////////////// +// Instruction Fetch Details +// +reg InstPage2; +reg InstPage3; +reg InstPage2_nxt; +reg InstPage3_nxt; + +reg [7:0] Inst1; +reg [7:0] Inst2; +reg [7:0] Inst3; +reg [7:0] Inst1_nxt; +reg [7:0] Inst2_nxt; +reg [7:0] Inst3_nxt; + + +localparam CPUSTATE_RESET = 7'd0; +localparam CPUSTATE_RESET0 = 7'd1; + +localparam CPUSTATE_RESET2 = 7'd3; +localparam CPUSTATE_FETCH_I1 = 7'd4; +localparam CPUSTATE_FETCH_I1V2 = 7'd5; +localparam CPUSTATE_FETCH_I2 = 7'd8; + +localparam CPUSTATE_LBRA_OFFSETLOW = 7'd17; +localparam CPUSTATE_LBRA_DONTCARE = 7'd18; +localparam CPUSTATE_LBRA_DONTCARE2 = 7'd19; + + + +localparam CPUSTATE_BRA_DONTCARE = 7'd20; + +localparam CPUSTATE_BSR_DONTCARE1 = 7'd21; +localparam CPUSTATE_BSR_DONTCARE2 = 7'd22; +localparam CPUSTATE_BSR_RETURNLOW = 7'd23; +localparam CPUSTATE_BSR_RETURNHIGH = 7'd24; + +localparam CPUSTATE_TFR_DONTCARE1 = 7'd26; +localparam CPUSTATE_TFR_DONTCARE2 = 7'd27; +localparam CPUSTATE_TFR_DONTCARE3 = 7'd28; +localparam CPUSTATE_TFR_DONTCARE4 = 7'd29; + +localparam CPUSTATE_EXG_DONTCARE1 = 7'd30; +localparam CPUSTATE_EXG_DONTCARE2 = 7'd31; +localparam CPUSTATE_EXG_DONTCARE3 = 7'd32; +localparam CPUSTATE_EXG_DONTCARE4 = 7'd33; +localparam CPUSTATE_EXG_DONTCARE5 = 7'd34; +localparam CPUSTATE_EXG_DONTCARE6 = 7'd35; + +localparam CPUSTATE_ABX_DONTCARE = 7'd36; + +localparam CPUSTATE_RTS_HI = 7'd38; +localparam CPUSTATE_RTS_LO = 7'd39; +localparam CPUSTATE_RTS_DONTCARE2 = 7'd40; + +localparam CPUSTATE_16IMM_LO = 7'd41; +localparam CPUSTATE_ALU16_DONTCARE = 7'd42; +localparam CPUSTATE_DIRECT_DONTCARE = 7'd43; + +localparam CPUSTATE_ALU_EA = 7'd44; + +localparam CPUSTATE_ALU_DONTCARE = 7'd46; +localparam CPUSTATE_ALU_WRITEBACK = 7'd47; + +localparam CPUSTATE_LD16_LO = 7'd48; + +localparam CPUSTATE_ST16_LO = 7'd49; +localparam CPUSTATE_ALU16_LO = 7'd50; + + + + +localparam CPUSTATE_JSR_DONTCARE = 7'd53; +localparam CPUSTATE_JSR_RETLO = 7'd54; +localparam CPUSTATE_JSR_RETHI = 7'd55; +localparam CPUSTATE_EXTENDED_ADDRLO = 7'd56; +localparam CPUSTATE_EXTENDED_DONTCARE = 7'd57; +localparam CPUSTATE_INDEXED_BASE = 7'd58; + + +localparam CPUSTATE_IDX_DONTCARE3 = 7'd60; + +localparam CPUSTATE_IDX_OFFSET_LO = 7'd61; +localparam CPUSTATE_IDX_16OFFSET_LO = 7'd62; + +localparam CPUSTATE_IDX_16OFF_DONTCARE0= 7'd63; +localparam CPUSTATE_IDX_16OFF_DONTCARE1= 7'd64; +localparam CPUSTATE_IDX_16OFF_DONTCARE2= 7'd65; +localparam CPUSTATE_IDX_16OFF_DONTCARE3= 7'd66; + +localparam CPUSTATE_IDX_DOFF_DONTCARE1 = 7'd68; +localparam CPUSTATE_IDX_DOFF_DONTCARE2 = 7'd69; +localparam CPUSTATE_IDX_DOFF_DONTCARE3 = 7'd70; +localparam CPUSTATE_IDX_PC16OFF_DONTCARE = 7'd71; + +localparam CPUSTATE_IDX_EXTIND_LO = 7'd72; +localparam CPUSTATE_IDX_EXTIND_DONTCARE = 7'd73; + +localparam CPUSTATE_INDIRECT_HI = 7'd74; +localparam CPUSTATE_INDIRECT_LO = 7'd75; +localparam CPUSTATE_INDIRECT_DONTCARE = 7'd76; +localparam CPUSTATE_MUL_ACTION = 7'd77; + +localparam CPUSTATE_PSH_DONTCARE1 = 7'd80; +localparam CPUSTATE_PSH_DONTCARE2 = 7'd81; +localparam CPUSTATE_PSH_DONTCARE3 = 7'd82; +localparam CPUSTATE_PSH_ACTION = 7'd83; + +localparam CPUSTATE_PUL_DONTCARE1 = 7'd84; +localparam CPUSTATE_PUL_DONTCARE2 = 7'd85; +localparam CPUSTATE_PUL_ACTION = 7'd86; + +localparam CPUSTATE_NMI_START = 7'd87; +localparam CPUSTATE_IRQ_DONTCARE = 7'd88; +localparam CPUSTATE_IRQ_START = 7'd89; +localparam CPUSTATE_IRQ_DONTCARE2 = 7'd90; +localparam CPUSTATE_IRQ_VECTOR_HI = 7'd91; +localparam CPUSTATE_IRQ_VECTOR_LO = 7'd92; +localparam CPUSTATE_FIRQ_START = 7'd93; +localparam CPUSTATE_CC_DONTCARE = 7'd94; +localparam CPUSTATE_SWI_START = 7'd95; + +localparam CPUSTATE_TST_DONTCARE1 = 7'd96; +localparam CPUSTATE_TST_DONTCARE2 = 7'd97; + +localparam CPUSTATE_DEBUG = 7'd98; + +localparam CPUSTATE_16IMM_DONTCARE = 7'd99; + +localparam CPUSTATE_HALTED = 7'd100; + +localparam CPUSTATE_HALT_EXIT2 = 7'd102; +localparam CPUSTATE_STOP = 7'd105; +localparam CPUSTATE_STOP2 = 7'd106; +localparam CPUSTATE_STOP3 = 7'd107; + + +localparam CPUSTATE_CWAI = 7'd108; +localparam CPUSTATE_CWAI_DONTCARE1 = 7'd109; +localparam CPUSTATE_CWAI_POST = 7'd110; + +localparam CPUSTATE_DMABREQ = 7'd111; +localparam CPUSTATE_DMABREQ_EXIT = 7'd112; +localparam CPUSTATE_SYNC = 7'd113; +localparam CPUSTATE_SYNC_EXIT = 7'd114; + +localparam CPUSTATE_INT_DONTCARE = 7'd115; + + +reg [6:0] CpuState = CPUSTATE_RESET; +reg [6:0] CpuState_nxt = CPUSTATE_RESET; + +reg [6:0] NextState = CPUSTATE_RESET; +reg [6:0] NextState_nxt = CPUSTATE_RESET; + +wire [6:0] PostIllegalState; + +// If we encounter something like an illegal addressing mode (an index mode that's illegal for instance) +// What state should we go to? +generate +if (ILLEGAL_INSTRUCTIONS=="STOP") +begin : postillegal + assign PostIllegalState = CPUSTATE_STOP; +end +else +begin + assign PostIllegalState = CPUSTATE_FETCH_I1; +end +endgenerate + + + +/////////////////////////////////////////////////////////////////////// + +// +// MapInstruction - Considering how the core was instantiated, this +// will either directly return D[7:0] *or* remap values from D[7:0] +// that relate to undefined instructions in the 6809 to the instructions +// that the 6809 actually executed when these were encountered, due to +// incomplete decoding. +// +// NEG, COM, LSR, DEC - these four instructions, in Direct, Inherent (A or B) +// Indexed, or Extended addressing do not actually decode bit 0 on the instruction. +// Thus, for instance, a $51 encountered will be executed as a $50, which is a NEGB. +// + +// Specifically, the input is an instruction; if it matches an unknown instruction that the +// 6809 is known to ghost to another instruction, the output of the function +// is the the instruction that actually gets executed. Otherwise, the output is the +// input. + +function [7:0] MapInstruction(input [7:0] i); +reg [3:0] topnyb; +reg [3:0] btmnyb; +reg [7:0] newinst; +begin + newinst = i; + + topnyb = i[7:4]; + btmnyb = i[3:0]; + + if ( (topnyb == 4'H0) || + (topnyb == 4'H4) || + (topnyb == 4'H5) || + (topnyb == 4'H6) || + (topnyb == 4'H7) + ) + begin + if (btmnyb == 4'H1) + newinst = {topnyb, 4'H0}; + if (btmnyb == 4'H2) + newinst = {topnyb, 4'H3}; + if (btmnyb == 4'H5) + newinst = {topnyb, 4'H4}; + if (btmnyb == 4'HB) + newinst = {topnyb, 4'HA}; + end + MapInstruction = newinst; +end +endfunction + + +wire [7:0] MappedInstruction; +generate +if (ILLEGAL_INSTRUCTIONS=="GHOST") +begin : ghost + assign MappedInstruction = MapInstruction(D); +end +else +begin + assign MappedInstruction = D; +end +endgenerate + + + +/////////////////////////////////////////////////////////////////////// + +function IllegalInstruction(input [7:0] i); +reg [3:0] hi; +reg [3:0] lo; +reg illegal; +begin + illegal = 1'b0; + hi = i[7:4]; + lo = i[3:0]; + if ( (hi == 4'H0) || (hi == 4'H4) || (hi == 4'H5) || (hi == 4'H6) || (hi == 4'H7) ) + begin + if ( (lo == 4'H1) || (lo == 4'H2) || (lo == 4'H5) || (lo == 4'HB) ) + illegal = 1'b1; + if (lo == 4'HE) + if ( (hi == 4'H4) || (hi == 4'H5) ) + illegal = 1'b1; + end + if (hi == 4'H3) + begin + if ( (lo == 4'H8) || (lo == 4'HE) ) + illegal = 1'b1; + end + if (hi == 4'H1) + begin + if ( (lo == 4'H4) || (lo == 4'H5) || (lo == 4'H8) || (lo == 4'HB) ) + illegal = 1'b1; + end + if ( (hi == 4'H8) || (hi == 4'HC) ) + begin + if ( (lo == 4'H7) || (lo == 4'HF) ) + illegal = 1'b1; + if ( lo == 4'HD ) + if (hi == 4'HC) + illegal = 1'b1; + end + IllegalInstruction = illegal; +end +endfunction + +wire IsIllegalInstruction; + +generate +if (ILLEGAL_INSTRUCTIONS=="GHOST") +begin : never_illegal + assign IsIllegalInstruction = 1'b0; +end +else +begin + assign IsIllegalInstruction = IllegalInstruction(Inst1); +end +endgenerate + +wire [6:0] IllegalInstructionState; +generate +if (ILLEGAL_INSTRUCTIONS=="IGNORE") +begin : illegal_state + assign IllegalInstructionState = CPUSTATE_FETCH_I1; +end +else if (ILLEGAL_INSTRUCTIONS=="STOP") +begin + assign IllegalInstructionState = CPUSTATE_STOP; +end +else +begin + assign IllegalInstructionState = 7'd0; +end +endgenerate + + +/////////////////////////////////////////////////////////////////////// + + +always @(posedge CLK) +begin + reg old_sample; + old_sample <= NMISample2; + + if (wNMIClear == 1) NMILatched <= 1; + else if(old_sample & ~NMISample2) NMILatched <= NMIMask; +end + +// +// The 6809 specs say that the CPU control signals are sampled on the falling edge of Q. +// It also says that the interrupts require 1 cycle of synchronization time. +// That's vague, as it doesn't say where "1 cycle" starts or ends. Starting from the +// falling edge of Q, the next cycle notices an assertion. From checking a hard 6809 on +// an analyzer, what they really mean is that it's sampled on the falling edge of Q, +// but there's a one cycle delay from the falling edge of E (0.25 clocks from the falling edge of Q +// where the signals were sampled) before it can be noticed. +// So, SIGNALSample is the latched value at the falling edge of Q +// SIGNALSample2 is the latched value at the falling edge of E (0.25 clocks after the line above) +// SIGNALLatched is the latched value at the falling edge of E (1 cycle after the line above) +// +// /HALT and /DMABREQ are delayed one cycle less than interrupts. The 6809 specs infer these details, +// but don't list the point-of-reference they're written from (for instance, they say that an interrupt requires +// a cycle for synchronization; however, it isn't clear whether that's from the falling Q to the next falling Q, +// a complete intermediate cycle, the falling E to the next falling E, etc.) - which, in the end, required an +// analyzer on the 6809 to determine how many cycles before a new instruction an interrupt (or /HALT & /DMABREQ) +// had to be asserted to be noted instead of the next instruction running start to finish. +// +always @(posedge CLK) +begin + if(fallQ_en) begin + NMISample <= nNMI; + IRQSample <= nIRQ; + FIRQSample <= nFIRQ; + HALTSample <= nHALT; + DMABREQSample <= nDMABREQ; + end +end + + +reg rnRESET=0; // The latched version of /RESET, useful 1 clock after it's latched +always @(posedge CLK) +begin + if(fallE_en) begin + rnRESET <= nRESET; + + NMISample2 <= NMISample; + + IRQSample2 <= IRQSample; + IRQLatched <= IRQSample2; + + FIRQSample2 <= FIRQSample; + FIRQLatched <= FIRQSample2; + + HALTSample2 <= HALTSample; + HALTLatched <= HALTSample2; + + DMABREQSample2 <= DMABREQSample; + DMABREQLatched <= DMABREQSample2; + + + if (rnRESET == 1) + begin + CpuState <= CpuState_nxt; + + // Don't interpret this next item as "The Next State"; it's a special case 'after this + // generic state, go to this programmable state', so that a single state + // can be shared for many tasks. [Specifically, the stack push/pull code, which is used + // for PSH, PUL, Interrupts, RTI, etc. + NextState <= NextState_nxt; + + // CPU registers latch from the combinatorial circuit + a <= a_nxt; + b <= b_nxt; + x <= x_nxt; + y <= y_nxt; + s <= s_nxt; + u <= u_nxt; + cc <= cc_nxt; + dp <= dp_nxt; + pc <= pc_nxt; + tmp <= tmp_nxt; + addr <= addr_nxt; + ea <= ea_nxt; + + InstPage2 <= InstPage2_nxt; + InstPage3 <= InstPage3_nxt; + Inst1 <= Inst1_nxt; + Inst2 <= Inst2_nxt; + Inst3 <= Inst3_nxt; + NMIClear <= NMIClear_nxt; + + IntType <= IntType_nxt; + + // Once S changes at all (default is '0'), release the NMI Mask. + if (s != s_nxt) NMIMask <= 1'b0; + end + else + begin + CpuState <= CPUSTATE_RESET; + NMIMask <= 1'b1; // Mask NMI until S is loaded. + NMIClear <= 1'b0; // Mark us as not having serviced NMI + end + end +end + + +///////////////////////////////////////////////////////////////// +// Decode the Index byte + +localparam IDX_REG_X = 3'd0; +localparam IDX_REG_Y = 3'd1; +localparam IDX_REG_U = 3'd2; +localparam IDX_REG_S = 3'd3; +localparam IDX_REG_PC = 3'd4; + +localparam IDX_MODE_POSTINC1 = 4'd0; +localparam IDX_MODE_POSTINC2 = 4'd1; +localparam IDX_MODE_PREDEC1 = 4'd2; +localparam IDX_MODE_PREDEC2 = 4'd3; +localparam IDX_MODE_NOOFFSET = 4'd4; +localparam IDX_MODE_B_OFFSET = 4'd5; +localparam IDX_MODE_A_OFFSET = 4'd6; +localparam IDX_MODE_5BIT_OFFSET= 4'd7; // Special case, not bit pattern 7; the offset sits in the bit pattern +localparam IDX_MODE_8BIT_OFFSET= 4'd8; +localparam IDX_MODE_16BIT_OFFSET = 4'd9; +localparam IDX_MODE_D_OFFSET = 4'd11; +localparam IDX_MODE_8BIT_OFFSET_PC = 4'd12; +localparam IDX_MODE_16BIT_OFFSET_PC= 4'd13; +localparam IDX_MODE_EXTENDED_INDIRECT = 4'd15; + +// Return: +// Register base [3 bits] +// Indirect [1 bit] +// Mode [4 bits] + +function [7:0] IndexDecode(input [7:0] postbyte); +reg [2:0] regnum; +reg indirect; +reg [3:0] mode; +begin + indirect = 0; + mode = 0; + + if (postbyte[7] == 0) // 5-bit + begin + mode = IDX_MODE_5BIT_OFFSET; + end + else + begin + mode = postbyte[3:0]; + indirect = postbyte[4]; + end + if ((mode != IDX_MODE_8BIT_OFFSET_PC) && (mode != IDX_MODE_16BIT_OFFSET_PC)) + regnum[2:0] = postbyte[6:5]; + else + regnum[2:0] = IDX_REG_PC; + + IndexDecode = {indirect, mode, regnum}; +end +endfunction + +wire [3:0] IndexedMode; +wire IndexedIndirect; +wire [2:0] IndexedRegister; + +assign {IndexedIndirect, IndexedMode, IndexedRegister} = IndexDecode(Inst2); + +///////////////////////////////////////////////////////////////// +// Is this a JMP instruction? (irrespective of addressing mode) +function IsJMP(input [7:0] inst); +reg [3:0] hi; +reg [3:0] lo; +begin + hi = inst[7:4]; + lo = inst[3:0]; + + IsJMP = 0; + if ((hi == 4'H0) || (hi == 4'H6) || (hi == 4'H7)) + if (lo == 4'HE) + IsJMP = 1; +end +endfunction + +/////////////////////////////////////////////////////////////////// +// Is this an 8-bit Store? + +localparam ST8_REG_A = 1'b0; +localparam ST8_REG_B = 1'b1; + +function [1:0] IsST8(input [7:0] inst); +reg regnum; +reg IsStore; +begin + + IsStore = 1'b0; + regnum = 1'b1; + + if ( (Inst1 == 8'H97) || (Inst1 == 8'HA7) || (Inst1 == 8'HB7) ) + begin + IsStore = 1'b1; + regnum = 1'b0; + end + else if ( (Inst1 == 8'HD7) || (Inst1 == 8'HE7) || (Inst1 == 8'HF7) ) + begin + IsStore = 1'b1; + regnum = 1'b1; + end + IsST8 = {IsStore, regnum}; +end +endfunction + +wire IsStore8; +wire Store8RegisterNum; + +assign {IsStore8, Store8RegisterNum} = IsST8(Inst1); + + +///////////////////////////////////////////////////////////////// +// Is this a 16-bit Store? + +localparam ST16_REG_X = 3'd0; +localparam ST16_REG_Y = 3'd1; +localparam ST16_REG_U = 3'd2; +localparam ST16_REG_S = 3'd3; +localparam ST16_REG_D = 3'd4; + + +function [3:0] IsST16(input [7:0] inst); +reg [3:0] hi; +reg [3:0] lo; +reg [2:0] regnum; +reg IsStore; +begin + hi = inst[7:4]; + lo = inst[3:0]; + IsStore = 1'b0; + regnum = 3'b111; + + if ((inst == 8'H9F) || (inst == 8'HAF) || (inst == 8'HBF)) + begin + IsStore = 1; + if (~InstPage2) + regnum = ST16_REG_X; + else + regnum = ST16_REG_Y; + end + else if ((inst == 8'HDF) || (inst == 8'HEF) || (inst == 8'HFF)) + begin + IsStore = 1; + if (~InstPage2) + regnum = ST16_REG_U; + else + regnum = ST16_REG_S; + end + else if ((inst == 8'HDD) || (inst == 8'HED) || (inst == 8'HFD)) + begin + IsStore = 1; + regnum = ST16_REG_D; + end + + IsST16 = {IsStore, regnum}; +end +endfunction + +wire IsStore16; +wire [2:0] StoreRegisterNum; + +assign {IsStore16, StoreRegisterNum} = IsST16(Inst1); + +///////////////////////////////////////////////////////////////// +// Is this a special Immediate mode instruction, ala +// PSH, PUL, EXG, TFR, ANDCC, ORCC +function IsSpecialImm(input [7:0] inst); +reg is; +reg [3:0] hi; +reg [3:0] lo; +begin + hi = inst[7:4]; + lo = inst[3:0]; + is = 0; + + if (hi == 4'H1) + begin + if ( (lo == 4'HA) || (lo == 4'HC) || (lo == 4'HE) || (lo == 4'HF) ) // ORCC, ANDCC, EXG, TFR + is = 1; + end + else if (hi == 4'H3) + begin + if ( (lo >= 4'H3) && (lo <= 4'H7) ) // PSHS, PULS, PSHU, PULU + is = 1; + end + else + is = 0; + + IsSpecialImm = is; +end +endfunction +wire IsSpecialImmediate = IsSpecialImm(Inst1); + +///////////////////////////////////////////////////////////////// +// Is this a one-byte instruction? [The 6809 reads 2 bytes for every instruction, minimum (it can read more). On a one-byte, we have to ensure that we haven't skipped the PC ahead. +function IsOneByteInstruction(input [7:0] inst); +reg is; +reg [3:0] hi; +reg [3:0] lo; +begin + hi = inst[7:4]; + lo = inst[3:0]; + is = 1'b0; + + if ( (hi == 4'H4) || (hi == 4'H5) ) + is = 1'b1; + else if ( hi == 4'H1) + begin + if ( (lo == 4'H2) || (lo == 4'H3) || (lo == 4'H9) || (lo == 4'HD) ) + is = 1'b1; + end + else if (hi == 4'H3) + begin + if ( (lo >= 4'H9) && (lo != 4'HC) ) + is = 1'b1; + end + else + is = 1'b0; + + IsOneByteInstruction = is; +end +endfunction + +///////////////////////////////////////////////////////////////// +// ALU16 - Simpler than the 8 bit ALU + +localparam ALU16_REG_X = 3'd0; +localparam ALU16_REG_Y = 3'd1; +localparam ALU16_REG_U = 3'd2; +localparam ALU16_REG_S = 3'd3; +localparam ALU16_REG_D = 3'd4; + +function [2:0] ALU16RegFromInst(input Page2, input Page3, input [7:0] inst); +reg [2:0] srcreg; +begin + srcreg = 3'b111; // default + casex ({Page2, Page3, inst}) // Note pattern for the matching below + 10'b1010xx0011: // 1083, 1093, 10A3, 10B3 CMPD + srcreg = ALU16_REG_D; + 10'b1010xx1100: // 108C, 109C, 10AC, 10BC CMPY + srcreg = ALU16_REG_Y; + 10'b0110xx0011: // 1183, 1193, 11A3, 11B3 CMPU + srcreg = ALU16_REG_U; + 10'b0110xx1100: // 118C, 119C, 11AC, 11BC CMPS + srcreg = ALU16_REG_S; + 10'b0010xx1100: // 8C,9C,AC,BC CMPX + srcreg = ALU16_REG_X; + + 10'b0011xx0011: // C3, D3, E3, F3 ADDD + srcreg = ALU16_REG_D; + + 10'b0011xx1100: // CC, DC, EC, FC LDD + srcreg = ALU16_REG_D; + 10'b0010xx1110: // 8E LDX, 9E LDX, AE LDX, BE LDX + srcreg = ALU16_REG_X; + 10'b0011xx1110: // CE LDU, DE LDU, EE LDU, FE LDU + srcreg = ALU16_REG_U; + 10'b1010xx1110: // 108E LDY, 109E LDY, 10AE LDY, 10BE LDY + srcreg = ALU16_REG_Y; + 10'b1011xx1110: // 10CE LDS, 10DE LDS, 10EE LDS, 10FE LDS + srcreg = ALU16_REG_S; + 10'b0010xx0011: // 83, 93, A3, B3 SUBD + srcreg = ALU16_REG_D; + + 10'H03A: // 3A ABX + srcreg = ALU16_REG_X; + 10'H030: // 30 LEAX + srcreg = ALU16_REG_X; + 10'H031: // 31 LEAY + srcreg = ALU16_REG_Y; + 10'H032: // 32 LEAS + srcreg = ALU16_REG_S; + 10'H033: // 32 LEAU + srcreg = ALU16_REG_U; + default: + srcreg = 3'b111; + endcase + ALU16RegFromInst = srcreg; +end +endfunction + +wire [2:0] ALU16Reg = ALU16RegFromInst(InstPage2, InstPage3, Inst1); + +localparam ALUOP16_SUB = 3'H0; +localparam ALUOP16_ADD = 3'H1; +localparam ALUOP16_LD = 3'H2; +localparam ALUOP16_CMP = 3'H3; +localparam ALUOP16_LEA = 3'H4; +localparam ALUOP16_INVALID = 3'H7; + +function [3:0] ALU16OpFromInst(input Page2, input Page3, input [7:0] inst); +reg [2:0] aluop; +reg writeback; +begin + aluop = 3'b111; + writeback = 1'b1; + casex ({Page2, Page3, inst}) + 10'b1010xx0011: // 1083, 1093, 10A3, 10B3 CMPD + begin + aluop = ALUOP16_CMP; + writeback = 1'b0; + end + 10'b1010xx1100: // 108C, 109C, 10AC, 10BC CMPY + begin + aluop = ALUOP16_CMP; + writeback = 1'b0; + end + 10'b0110xx0011: // 1183, 1193, 11A3, 11B3 CMPU + begin + aluop = ALUOP16_CMP; + writeback = 1'b0; + end + 10'b0110xx1100: // 118C, 119C, 11AC, 11BC CMPS + begin + aluop = ALUOP16_CMP; + writeback = 1'b0; + end + 10'b0010xx1100: // 8C,9C,AC,BC CMPX + begin + aluop = ALUOP16_CMP; + writeback = 1'b0; + end + + 10'b0011xx0011: // C3, D3, E3, F3 ADDD + aluop = ALUOP16_ADD; + + 10'b0011xx1100: // CC, DC, EC, FC LDD + aluop = ALUOP16_LD; + 10'b001xxx1110: // 8E LDX, 9E LDX, AE LDX, BE LDX, CE LDU, DE LDU, EE LDU, FE LDU + aluop = ALUOP16_LD; + 10'b101xxx1110: // 108E LDY, 109E LDY, 10AE LDY, 10BE LDY, 10CE LDS, 10DE LDS, 10EE LDS, 10FE LDS + aluop = ALUOP16_LD; + + 10'b0010xx0011: // 83, 93, A3, B3 SUBD + aluop = ALUOP16_SUB; + + 10'H03A: // 3A ABX + aluop = ALUOP16_ADD; + + 10'b00001100xx: // $30-$33, LEAX, LEAY, LEAS, LEAU + aluop = ALUOP16_LEA; + + default: + aluop = ALUOP16_INVALID; + endcase + ALU16OpFromInst = {writeback, aluop}; +end +endfunction + +wire ALU16OpWriteback; +wire [2:0] ALU16Opcode; + +assign {ALU16OpWriteback, ALU16Opcode} = ALU16OpFromInst(InstPage2, InstPage3, Inst1); + +wire IsALU16Opcode = (ALU16Opcode != 3'b111); + +function [23:0] ALU16Inst(input [2:0] operation16, input [15:0] a_arg, input [15:0] b_arg, input [7:0] cc_arg); +reg [7:0] cc_out; +reg [15:0] ALUFn; +reg carry; +reg borrow; +begin + cc_out = cc_arg; + case (operation16) + ALUOP16_ADD: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} + b_arg; + cc_out[CC_V_BIT] = (a_arg[15] & b_arg[15] & ~ALUFn[15]) | (~a_arg[15] & ~b_arg[15] & ALUFn[15]); + end + + ALUOP16_SUB: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} - {1'b0, b_arg}; + cc_out[CC_V_BIT] = (a_arg[15] & ~b_arg[15] & ~ALUFn[15]) | (~a_arg[15] & b_arg[15] & ALUFn[15]); + end + + ALUOP16_LD: + begin + ALUFn = b_arg; + cc_out[CC_V_BIT] = 1'b0; + end + + ALUOP16_CMP: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} - {1'b0, b_arg}; + cc_out[CC_V_BIT] = (a_arg[15] & ~b_arg[15] & ~ALUFn[15]) | (~a_arg[15] & b_arg[15] & ALUFn[15]); + end + + ALUOP16_LEA: + begin + ALUFn = a_arg; + end + + default: + ALUFn = 16'H0000; + + endcase + cc_out[CC_Z_BIT] = (ALUFn[15:0] == 16'H0000); + if (operation16 != ALUOP16_LEA) + cc_out[CC_N_BIT] = ALUFn[15]; + ALU16Inst = {cc_out, ALUFn}; +end +endfunction + +reg [2:0] ALU16_OP; +reg [15:0] ALU16_A; +reg [15:0] ALU16_B; +reg [7:0] ALU16_CC; + +// Top 8 bits == CC, bottom 8 bits = output value +wire [23:0] ALU16 = ALU16Inst(ALU16_OP, ALU16_A, ALU16_B, ALU16_CC); + + +///////////////////////////////////////////////////////////////// +// ALU + +// The ops are organized from the 4 low-order bits of the instructions for the first set of ops, then 16-31 are the second set - even though bit 4 isn't representative. +localparam ALUOP_NEG = 5'd0; +localparam ALUOP_COM = 5'd3; +localparam ALUOP_LSR = 5'd4; +localparam ALUOP_ROR = 5'd6; +localparam ALUOP_ASR = 5'd7; +localparam ALUOP_ASL = 5'd8; +localparam ALUOP_LSL = 5'd8; +localparam ALUOP_ROL = 5'd9; +localparam ALUOP_DEC = 5'd10; +localparam ALUOP_INC = 5'd12; +localparam ALUOP_TST = 5'd13; +localparam ALUOP_CLR = 5'd15; + +localparam ALUOP_SUB = 5'd16; +localparam ALUOP_CMP = 5'd17; +localparam ALUOP_SBC = 5'd18; +localparam ALUOP_AND = 5'd20; +localparam ALUOP_BIT = 5'd21; +localparam ALUOP_LD = 5'd22; +localparam ALUOP_EOR = 5'd24; +localparam ALUOP_ADC = 5'd25; +localparam ALUOP_OR = 5'd26; +localparam ALUOP_ADD = 5'd27; + +function [5:0] ALUOpFromInst(input [7:0] inst); +reg [4:0] op; +reg writeback; +begin + // Okay, this turned out to be simpler than I expected ... + op = {inst[7], inst[3:0]}; + case (op) + ALUOP_CMP: + writeback = 0; + ALUOP_TST: + writeback = 0; + ALUOP_BIT: + writeback = 0; + default: + writeback = 1; + endcase + ALUOpFromInst = {writeback, op}; +end +endfunction + +wire [4:0] ALU8Op; +wire ALU8Writeback; + +assign {ALU8Writeback, ALU8Op} = ALUOpFromInst(Inst1); + +reg [7:0] ALU_A; +reg [7:0] ALU_B; +reg [7:0] ALU_CC; +reg [4:0] ALU_OP; + + +function [15:0] ALUInst(input [4:0] operation, input [7:0] a_arg, input [7:0] b_arg, input [7:0] cc_arg); +reg [7:0] cc_out; +reg [7:0] ALUFn; +reg borrow; +begin + cc_out = cc_arg; + case (operation) + ALUOP_NEG: + begin + ALUFn = ~a_arg + 1'b1; + cc_out[CC_C_BIT] = (ALUFn != 8'H00); + cc_out[CC_V_BIT] = (a_arg == 8'H80); + end + + ALUOP_LSL: + begin + {cc_out[CC_C_BIT], ALUFn} = {a_arg, 1'b0}; + cc_out[CC_V_BIT] = a_arg[7] ^ a_arg[6]; + end + + ALUOP_LSR: + begin + {ALUFn, cc_out[CC_C_BIT]} = {1'b0, a_arg}; + end + + ALUOP_ASR: + begin + {ALUFn, cc_out[CC_C_BIT]} = {a_arg[7], a_arg}; + end + + ALUOP_ROL: + begin + {cc_out[CC_C_BIT], ALUFn} = {a_arg, cc_arg[CC_C_BIT]}; + cc_out[CC_V_BIT] = a_arg[7] ^ a_arg[6]; + end + + ALUOP_ROR: + begin + {ALUFn, cc_out[CC_C_BIT]} = {cc_arg[CC_C_BIT], a_arg}; + end + + ALUOP_OR: + begin + ALUFn = (a_arg | b_arg); + cc_out[CC_V_BIT] = 0; + end + + ALUOP_ADD: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} + {1'b0, b_arg}; + cc_out[CC_V_BIT] = (a_arg[7] & b_arg[7] & ~ALUFn[7]) | (~a_arg[7] & ~b_arg[7] & ALUFn[7]); + cc_out[CC_H_BIT] = a_arg[4] ^ b_arg[4] ^ ALUFn[4]; + end + + ALUOP_SUB: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} - {1'b0, b_arg}; + cc_out[CC_V_BIT] = (a_arg[7] & ~b_arg[7] & ~ALUFn[7]) | (~a_arg[7] & b_arg[7] & ALUFn[7]); + end + + ALUOP_AND: + begin + ALUFn = (a_arg & b_arg); + cc_out[CC_V_BIT] = 0; + end + + ALUOP_BIT: + begin + ALUFn = (a_arg & b_arg); + cc_out[CC_V_BIT] = 0; + end + + ALUOP_EOR: + begin + ALUFn = (a_arg ^ b_arg); + cc_out[CC_V_BIT] = 0; + end + + ALUOP_CMP: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} - {1'b0, b_arg}; + cc_out[CC_V_BIT] = (a_arg[7] & ~b_arg[7] & ~ALUFn[7]) | (~a_arg[7] & b_arg[7] & ALUFn[7]); + end + + ALUOP_COM: + begin + ALUFn = ~a_arg; + cc_out[CC_V_BIT] = 0; + cc_out[CC_C_BIT] = 1; + end + + ALUOP_ADC: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} + {1'b0, b_arg} + cc_arg[CC_C_BIT]; + cc_out[CC_V_BIT] = (a_arg[7] & b_arg[7] & ~ALUFn[7]) | (~a_arg[7] & ~b_arg[7] & ALUFn[7]); + cc_out[CC_H_BIT] = a_arg[4] ^ b_arg[4] ^ ALUFn[4]; + end + + ALUOP_LD: + begin + ALUFn = b_arg; + cc_out[CC_V_BIT] = 0; + end + + ALUOP_INC: + begin + ALUFn = a_arg + 1'b1; + cc_out[CC_V_BIT] = (~a_arg[7] & ALUFn[7]); + end + + ALUOP_DEC: + begin + ALUFn = a_arg - 1'b1; + cc_out[CC_V_BIT] = (a_arg[7] & ~ALUFn[7]); + end + + ALUOP_CLR: + begin + ALUFn = 0; + cc_out[CC_V_BIT] = 0; + cc_out[CC_C_BIT] = 0; + end + + ALUOP_TST: + begin + ALUFn = a_arg; + cc_out[CC_V_BIT] = 0; + end + + ALUOP_SBC: + begin + {cc_out[CC_C_BIT], ALUFn} = {1'b0, a_arg} - {1'b0, b_arg} - cc_arg[CC_C_BIT]; + cc_out[CC_V_BIT] = (a_arg[7] & ~b_arg[7] & ~ALUFn[7]) | (~a_arg[7] & b_arg[7] & ALUFn[7]); + end + + default: + ALUFn = 0; + + endcase + + cc_out[CC_N_BIT] = ALUFn[7]; + cc_out[CC_Z_BIT] = !ALUFn; + ALUInst = {cc_out[7:0], ALUFn}; +end +endfunction + + +// Top 8 bits == CC, bottom 8 bits = output value +wire [15:0] ALU = ALUInst(ALU_OP, ALU_A, ALU_B, ALU_CC); + +//////////////////////////////////////////////////////////// + +localparam TYPE_INHERENT = 3'd0; +localparam TYPE_IMMEDIATE = 3'd1; +localparam TYPE_DIRECT = 3'd2; +localparam TYPE_RELATIVE = 3'd3; +localparam TYPE_INDEXED = 3'd4; +localparam TYPE_EXTENDED = 3'd5; + +localparam TYPE_INVALID = 3'd7; + +// Function to decode the addressing mode the instruction uses +function [2:0] addressing_mode_type(input [7:0] inst); +begin + casex (inst) + 8'b0000???? : addressing_mode_type = TYPE_DIRECT; + 8'b0001???? : + begin + casex (inst[3:0]) + 4'b0010: + addressing_mode_type = TYPE_INHERENT; + + 4'b0011: + addressing_mode_type = TYPE_INHERENT; + + 4'b1001: + addressing_mode_type = TYPE_INHERENT; + + 4'b1101: + addressing_mode_type = TYPE_INHERENT; + + 4'b0110: + addressing_mode_type = TYPE_RELATIVE; + + 4'b0111: + addressing_mode_type = TYPE_RELATIVE; + + 4'b1010: + addressing_mode_type = TYPE_IMMEDIATE; + + 4'b1100: + addressing_mode_type = TYPE_IMMEDIATE; + + 4'b1110: + addressing_mode_type = TYPE_IMMEDIATE; + + 4'b1111: + addressing_mode_type = TYPE_IMMEDIATE; + + default: + addressing_mode_type = TYPE_INVALID; + endcase + end + + 8'b0010????: addressing_mode_type = TYPE_RELATIVE; + 8'b0011????: + begin + casex(inst[3:0]) + 4'b00??: + addressing_mode_type = TYPE_INDEXED; + + 4'b01??: + addressing_mode_type = TYPE_IMMEDIATE; + + 4'b1001: + addressing_mode_type = TYPE_INHERENT; + + 4'b101?: + addressing_mode_type = TYPE_INHERENT; + + 4'b1100: + addressing_mode_type = TYPE_INHERENT; + + 4'b1101: + addressing_mode_type = TYPE_INHERENT; + + 4'b1111: + addressing_mode_type = TYPE_INHERENT; + + default: + addressing_mode_type = TYPE_INVALID; + endcase + end + + 8'b010?????: addressing_mode_type = TYPE_INHERENT; + + 8'b0110????: addressing_mode_type = TYPE_INDEXED; + + 8'b0111????: addressing_mode_type = TYPE_EXTENDED; + + 8'b1000????: + begin + casex (inst[3:0]) + 4'b0111: addressing_mode_type = TYPE_INVALID; + 4'b1111: addressing_mode_type = TYPE_INVALID; + 4'b1101: addressing_mode_type = TYPE_RELATIVE; + default: addressing_mode_type = TYPE_IMMEDIATE; + endcase + end + + 8'b1001????: addressing_mode_type = TYPE_DIRECT; + 8'b1010????: addressing_mode_type = TYPE_INDEXED; + 8'b1011????: addressing_mode_type = TYPE_EXTENDED; + 8'b1100????: addressing_mode_type = TYPE_IMMEDIATE; + 8'b1101????: addressing_mode_type = TYPE_DIRECT; + 8'b1110????: addressing_mode_type = TYPE_INDEXED; + 8'b1111????: addressing_mode_type = TYPE_EXTENDED; + + endcase +end +endfunction + +wire [2:0] AddrModeType = addressing_mode_type(Inst1); + +////////////////////////////////////////////////// + +// Individual opcodes that are the top of a column of states. + +localparam OPCODE_INH_ABX = 8'H3A; +localparam OPCODE_INH_RTS = 8'H39; +localparam OPCODE_INH_RTI = 8'H3B; +localparam OPCODE_INH_CWAI = 8'H3C; +localparam OPCODE_INH_MUL = 8'H3D; +localparam OPCODE_INH_SWI = 8'H3F; +localparam OPCODE_INH_SEX = 8'H1D; +localparam OPCODE_INH_NOP = 8'H12; +localparam OPCODE_INH_SYNC = 8'H13; +localparam OPCODE_INH_DAA = 8'H19; + +localparam OPCODE_IMM_ORCC = 8'H1A; +localparam OPCODE_IMM_ANDCC = 8'H1C; +localparam OPCODE_IMM_EXG = 8'H1E; +localparam OPCODE_IMM_TFR = 8'H1F; +localparam OPCODE_IMM_PSHS = 8'H34; +localparam OPCODE_IMM_PULS = 8'H35; +localparam OPCODE_IMM_PSHU = 8'H36; +localparam OPCODE_IMM_PULU = 8'H37; + +localparam OPCODE_IMM_SUBD = 8'H83; +localparam OPCODE_IMM_CMPX = 8'H8C; +localparam OPCODE_IMM_LDX = 8'H8E; +localparam OPCODE_IMM_ADDD = 8'HC3; +localparam OPCODE_IMM_LDD = 8'HCC; +localparam OPCODE_IMM_LDU = 8'HCE; +localparam OPCODE_IMM_CMPD = 8'H83; // Page2 +localparam OPCODE_IMM_CMPY = 8'H8C; // Page2 +localparam OPCODE_IMM_LDY = 8'H8E; // Page2 +localparam OPCODE_IMM_LDS = 8'HCE; // Page2 +localparam OPCODE_IMM_CMPU = 8'H83; // Page3 +localparam OPCODE_IMM_CMPS = 8'H8C; // Page3 + +localparam EXGTFR_REG_D = 4'H0; +localparam EXGTFR_REG_X = 4'H1; +localparam EXGTFR_REG_Y = 4'H2; +localparam EXGTFR_REG_U = 4'H3; +localparam EXGTFR_REG_S = 4'H4; +localparam EXGTFR_REG_PC = 4'H5; +localparam EXGTFR_REG_A = 4'H8; +localparam EXGTFR_REG_B = 4'H9; +localparam EXGTFR_REG_CC = 4'HA; +localparam EXGTFR_REG_DP = 4'HB; + +function IsALU8Set0(input [7:0] instr); +reg result; +reg [3:0] hi; +reg [3:0] lo; +begin + hi = instr[7:4]; + lo = instr[3:0]; + if ( (hi == 4'H0) || (hi == 4'H4) || (hi == 4'H5) || (hi == 4'H6) || (hi == 4'H7) ) + begin + if ( (lo != 4'H1) && (lo != 4'H2) && (lo != 4'H5) && (lo != 4'HB) && (lo != 4'HE) ) // permit NEG, COM, LSR, ROR, ASR, ASL/LSL, ROL, DEC, INC, TST, CLR + result = 1; + else + result = 0; + end + else + result = 0; + IsALU8Set0 = result; +end +endfunction + +function IsALU8Set1(input [7:0] instr); +reg result; +reg [3:0] hi; +reg [3:0] lo; +begin + hi = instr[7:4]; + lo = instr[3:0]; + if ( (hi >= 4'H8) ) + begin + if ( (lo <= 4'HB) && (lo != 4'H3) && (lo != 4'H7) ) // 8-bit SUB, CMP, SBC, AND, BIT, LD, EOR, ADC, OR, ADD + result = 1; + else + result = 0; + end + else + result = 0; + IsALU8Set1 = result; +end +endfunction + +// Determine if the instruction is performing an 8-bit op (ALU only) +function ALU8BitOp(input [7:0] instr); +begin + ALU8BitOp = IsALU8Set0(instr) | IsALU8Set1(instr); +end +endfunction + +wire Is8BitInst = ALU8BitOp(Inst1); + +function IsRegA(input [7:0] instr); +reg result; +reg [3:0] hi; +begin + hi = instr[7:4]; + if ((hi == 4'H4) || (hi == 4'H8) || (hi == 4'H9) || (hi == 4'HA) || (hi == 4'HB) ) + result = 1; + else + result = 0; + IsRegA = result; +end +endfunction + +wire IsTargetRegA = IsRegA(Inst1); + +// +// +// Decode +// 00-0F = DIRECT +// 10-1F = INHERENT, RELATIVE, IMMEDIATE +// 20-2F = RELATIVE +// 30-3F = INDEXED, IMMEDIATE (pus, pul), INHERENT +// 40-4F = INHERENT +// 50-5F = INHERENT +// 60-6F = INDEXED +// 70-7F = EXTENDED +// 80-8F = IMMEDIATE, RELATIVE (BSR) +// 90-9F = DIRECT +// A0-AF = INDEXED +// B0-BF = EXTENDED +// C0-CF = IMMEDIATE +// D0-DF = DIRECT +// E0-EF = INDEXED +// F0-FF = EXTENDED + +// DIRECT; 00-0F, 90-9F, D0-DF +// INHERENT; 10-1F (12, 13, 19, 1D), 30-3F (39-3F), 40-4F, 50-5F, +// RELATIVE: 10-1F (16, 17), 20-2F, 80-8F (8D) +// IMMEDIATE: 10-1F (1A, 1C, 1E, 1F), 30-3F (34-37), 80-8F (80-8C, 8E), C0-CF +// INDEXED: 60-6F, A0-AF, E0-EF +// EXTENDED: 70-7F, B0-Bf, F0-FF + +localparam INST_LBRA = 8'H16; // always -- shitty numbering, damnit +localparam INST_LBSR = 8'H17; // + +localparam INST_BRA = 8'H20; // always +localparam INST_BRN = 8'H21; // never +localparam INST_BHI = 8'H22; // CC.Z = 0 && CC.C = 0 +localparam INST_BLS = 8'H23; // CC.Z != 0 && CC.C != 0 +localparam INST_BCC = 8'H24; // CC.C = 0 +localparam INST_BHS = 8'H24; // same as BCC +localparam INST_BCS = 8'H25; // CC.C = 1 +localparam INST_BLO = 8'H25; // same as BCS +localparam INST_BNE = 8'H26; // CC.Z = 0 +localparam INST_BEQ = 8'H27; // CC.Z = 1 +localparam INST_BVC = 8'H28; // V = 1 +localparam INST_BVS = 8'H29; // V = 0 +localparam INST_BPL = 8'H2A; // CC.N = 0 +localparam INST_BMI = 8'H2B; // CC.N = 1 +localparam INST_BGE = 8'H2C; // CC.N = CC.V +localparam INST_BLT = 8'H2D; // CC.N != CC.V +localparam INST_BGT = 8'H2E; // CC.N = CC.V && CC.Z = 0 +localparam INST_BLE = 8'H2F; // CC.N != CC.V && CC.Z = 1 +localparam INST_BSR = 8'H8D; // always + +localparam NYB_BRA = 4'H0; // always +localparam NYB_BRN = 4'H1; // never +localparam NYB_BHI = 4'H2; // CC.Z = 0 && CC.C = 0 +localparam NYB_BLS = 4'H3; // CC.Z != 0 && CC.C != 0 +localparam NYB_BCC = 4'H4; // CC.C = 0 +localparam NYB_BHS = 4'H4; // same as BCC +localparam NYB_BCS = 4'H5; // CC.C = 1 +localparam NYB_BLO = 4'H5; // same as BCS +localparam NYB_BNE = 4'H6; // CC.Z = 0 +localparam NYB_BEQ = 4'H7; // CC.Z = 1 +localparam NYB_BVC = 4'H8; // V = 0 +localparam NYB_BVS = 4'H9; // V = 1 +localparam NYB_BPL = 4'HA; // CC.N = 0 +localparam NYB_BMI = 4'HB; // CC.N = 1 +localparam NYB_BGE = 4'HC; // CC.N = CC.V +localparam NYB_BLT = 4'HD; // CC.N != CC.V +localparam NYB_BGT = 4'HE; // CC.N = CC.V && CC.Z = 0 +localparam NYB_BLE = 4'HF; // CC.N != CC.V && CC.Z = 1 + + + +function take_branch(input [7:0] Inst1, input [7:0] cc); +begin + take_branch = 0; //default + if ( (Inst1 == INST_BSR) || (Inst1 == INST_LBSR) || (Inst1 == INST_LBRA) ) + take_branch = 1; + else + case (Inst1[3:0]) + NYB_BRA: + take_branch = 1; + NYB_BRN: + take_branch = 0; + NYB_BHI: + if ( ( cc[CC_Z_BIT] | cc[CC_C_BIT] ) == 0) + take_branch = 1; + NYB_BLS: + if ( cc[CC_Z_BIT] | cc[CC_C_BIT] ) + take_branch = 1; + NYB_BCC: + if ( cc[CC_C_BIT] == 0 ) + take_branch = 1; + NYB_BCS: + if ( cc[CC_C_BIT] == 1 ) + take_branch = 1; + NYB_BNE: + if ( cc[CC_Z_BIT] == 0 ) + take_branch = 1; + NYB_BEQ: + if ( cc[CC_Z_BIT] == 1 ) + take_branch = 1; + NYB_BVC: + if ( cc[CC_V_BIT] == 0) + take_branch = 1; + NYB_BVS: + if ( cc[CC_V_BIT] == 1) + take_branch = 1; + NYB_BPL: + if ( cc[CC_N_BIT] == 0 ) + take_branch = 1; + NYB_BMI: + if (cc[CC_N_BIT] == 1) + take_branch = 1; + NYB_BGE: + if ((cc[CC_N_BIT] ^ cc[CC_V_BIT]) == 0) + take_branch = 1; + NYB_BLT: + if ((cc[CC_N_BIT] ^ cc[CC_V_BIT]) == 1) + take_branch = 1; + NYB_BGT: + if ( ((cc[CC_N_BIT] ^ cc[CC_V_BIT]) == 0) & (cc[CC_Z_BIT] == 0) ) + take_branch = 1; + NYB_BLE: + if ( ((cc[CC_N_BIT] ^ cc[CC_V_BIT]) == 1) | (cc[CC_Z_BIT] == 1) ) + take_branch = 1; + endcase +end +endfunction + +wire TakeBranch = take_branch(Inst1, cc); + +///////////////////////////////////////////////////////////////////// +// Convenience function for knowing the contents for TFR, EXG +function [15:0] EXGTFRRegister(input [3:0] regid); +begin + case (regid) + EXGTFR_REG_D: + EXGTFRRegister = {a, b}; + EXGTFR_REG_X: + EXGTFRRegister = x; + EXGTFR_REG_Y: + EXGTFRRegister = y; + EXGTFR_REG_U: + EXGTFRRegister = u; + EXGTFR_REG_S: + EXGTFRRegister = s; + EXGTFR_REG_PC: + EXGTFRRegister = pc_p1; // For both EXG and TFR, this is used on the 2nd byte in the instruction's cycle. The PC intended to transfer is actually the next byte. + EXGTFR_REG_DP: + EXGTFRRegister = {8'HFF, dp}; + EXGTFR_REG_A: + EXGTFRRegister = {8'HFF, a}; + EXGTFR_REG_B: + EXGTFRRegister = {8'HFF, b}; + EXGTFR_REG_CC: + EXGTFRRegister = {8'HFF, cc}; + default: + EXGTFRRegister = 16'H0; + endcase +end +endfunction +wire [15:0] EXGTFRRegA = EXGTFRRegister(D[7:4]); +wire [15:0] EXGTFRRegB = EXGTFRRegister(D[3:0]); + +// CPU state machine +always @(*) +begin + rLIC = 1'b0; + rAVMA = 1'b1; + rBUSY = 1'b0; + + addr_nxt = 16'HFFFF; + pc_p1 = (pc+16'H1); + pc_p2 = (pc+16'H2); + pc_p3 = (pc+16'H3); + s_p1 = (s+16'H1); + s_m1 = (s-16'H1); + u_p1 = (u+16'H1); + u_m1 = (u-16'H1); + addr_p1 = (addr+16'H1); + ea_p1 = (ea+16'H1); + BS_nxt = 1'b0; + BA_nxt = 1'b0; + + // These may be overridden below, but the "next" version by default should be + // the last latched version. + IntType_nxt = IntType; + NMIClear_nxt = NMIClear; + NextState_nxt = NextState; + a_nxt = a; + b_nxt = b; + x_nxt = x; + y_nxt = y; + s_nxt = s; + u_nxt = u; + cc_nxt = cc; + dp_nxt = dp; + pc_nxt = pc; + tmp_nxt = tmp; + ea_nxt = ea; + + ALU_A = 8'H00; + ALU_B = 8'H00; + ALU_CC = 8'H00; + ALU_OP = 5'H00; + + ALU16_OP = 3'H0; + ALU16_A = 16'H0000; + ALU16_B = 16'H0000; + ALU16_CC = 8'H00; + + DOutput = 8'H00; + RnWOut = 1'b1; // read + + Inst1_nxt = Inst1; + Inst2_nxt = Inst2; + Inst3_nxt = Inst3; + InstPage2_nxt = InstPage2; + InstPage3_nxt = InstPage3; + + CpuState_nxt = CpuState; + + case (CpuState) + CPUSTATE_RESET: + begin + addr_nxt = 16'HFFFF; + a_nxt = 0; + b_nxt = 0; + x_nxt = 0; + y_nxt = 0; + s_nxt = 16'HFFFD; // Take care about removing the reset of S. There's logic depending on the delta between s and s_nxt to clear NMIMask. + u_nxt = 0; + cc_nxt = CC_F | CC_I; // reset disables interrupts + dp_nxt = 0; + ea_nxt = 16'HFFFF; + + RnWOut = 1; // read + rLIC = 1'b0; // Instruction incomplete + NMIClear_nxt= 1'b0; + IntType_nxt = 3'b111; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_RESET0; + end + + CPUSTATE_RESET0: + begin + addr_nxt = `RESET_VECTOR; + rBUSY = 1'b1; + pc_nxt[15:8] = D[7:0]; + BS_nxt = 1'b1; // ACK RESET + rAVMA = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_RESET2; + end + + CPUSTATE_RESET2: + begin + addr_nxt = addr_p1; + BS_nxt = 1'b1; // ACK RESET + pc_nxt[7:0] = D[7:0]; + rAVMA = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_FETCH_I1: + begin + if (~DMABREQLatched) + begin + addr_nxt = pc; + RnWOut = 1'b1; + rAVMA = 1'b0; + tmp_nxt = {tmp[15:4], 4'b1111}; + BS_nxt = 1'b1; + BA_nxt = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_DMABREQ; + end + else if (~HALTLatched) + begin + addr_nxt = pc; + RnWOut = 1'b1; + rAVMA = 1'b0; + BS_nxt = 1'b1; + BA_nxt = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_HALTED; + end + else // not halting, run the inst byte fetch + begin + addr_nxt = pc; // Set the address bus for the next instruction, first byte + pc_nxt = pc_p1; + RnWOut = 1; // Set for a READ + Inst1_nxt = MappedInstruction; + InstPage2_nxt = 0; + InstPage3_nxt = 0; + + // New instruction fetch; service interrupts pending + if (NMILatched == 0) + begin + pc_nxt = pc; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_NMI_START; + end + else if ((FIRQLatched == 0) && (cc[CC_F_BIT] == 0)) + begin + pc_nxt = pc; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FIRQ_START; + end + else if ((IRQLatched == 0) && (cc[CC_I_BIT] == 0)) + begin + pc_nxt = pc; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_START; + end + + // The actual 1st byte checks + else if (Inst1_nxt == 8'H10) // Page 2 Note, like the 6809, $10 $10 $10 $10 has the same effect as a single $10. + begin + InstPage2_nxt = 1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1V2; + end + else if (Inst1_nxt == 8'H11) // Page 3 + begin + InstPage3_nxt = 1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1V2; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I2; + end + end // if not halting + end + + CPUSTATE_FETCH_I1V2: + begin + addr_nxt = pc; // Set the address bus for the next instruction, first byte + pc_nxt = pc_p1; + RnWOut = 1; // Set for a READ + Inst1_nxt = MappedInstruction; + + if (Inst1_nxt == 8'H10) // Page 2 Note, like the 6809, $10 $10 $10 $10 has the same effect as a single $10. + begin + if (InstPage3 == 0) // $11 $11 $11 $11 ... $11 $10 still = Page 3 + InstPage2_nxt = 1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1V2; + end + else if (Inst1_nxt == 8'H11) // Page 3 + begin + if (InstPage2 == 0) // $10 $10 ... $10 $11 still = Page 2 + InstPage3_nxt = 1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1V2; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I2; + end + end + + + CPUSTATE_FETCH_I2: // We've fetched the first byte. If a $10 or $11 (page select), mark those flags and fetch the next byte as instruction byte 1. + begin + addr_nxt = addr_p1; // Address bus++ + pc_nxt = pc_p1; + Inst2_nxt = D[7:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + + if (IsIllegalInstruction) // Skip illegal instructions + begin + + rAVMA = 1'b1; + CpuState_nxt = IllegalInstructionState; + rLIC = 1'b1; + end + else + begin + // First byte Decode for this stage + case (AddrModeType) + TYPE_INDEXED: + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_INDEXED_BASE; + end + + + TYPE_EXTENDED: + begin + ea_nxt[15:8] = Inst2_nxt; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_EXTENDED_ADDRLO; + end + TYPE_DIRECT: + begin + ea_nxt = {dp, Inst2_nxt}; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_DIRECT_DONTCARE; + end + + TYPE_INHERENT: + begin + if (Inst1 == OPCODE_INH_NOP) + begin + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else if (Inst1 == OPCODE_INH_DAA) // Bcd lunacy + begin + if ( ((cc[CC_C_BIT]) || (a[7:4] > 4'H9)) || + ((a[7:4] > 4'H8) && (a[3:0] > 4'H9)) ) + tmp_nxt[7:4] = 4'H6; + else + tmp_nxt[7:4] = 4'H0; + + if ((cc[CC_H_BIT]) || (a[3:0] > 4'H9)) + tmp_nxt[3:0] = 4'H6; + else + tmp_nxt[3:0] = 4'H0; + + // DAA handles carry in the weirdest way. + // If it's already set, it remains set, even if carry-out is 0. + // If it wasn't set, but the output of the operation is set, carry-out gets set. + {tmp_nxt[8], a_nxt} = {1'b0, a} + tmp_nxt[7:0]; + + cc_nxt[CC_C_BIT] = cc_nxt[CC_C_BIT] | tmp_nxt[8]; + + cc_nxt[CC_N_BIT] = a_nxt[7]; + cc_nxt[CC_Z_BIT] = (a_nxt == 8'H00); + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else if (Inst1 == OPCODE_INH_SYNC) + begin + CpuState_nxt = CPUSTATE_SYNC; + rLIC = 1'b1; + rAVMA = 1'b0; + end + else if (Inst1 == OPCODE_INH_MUL) + begin + tmp_nxt = 16'H0000; + ea_nxt[15:8] = 8'H00; + ea_nxt[7:0] = a; + a_nxt = 8; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_MUL_ACTION; + end + else if (Inst1 == OPCODE_INH_RTS) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_RTS_HI; + end + else if (Inst1 == OPCODE_INH_RTI) + begin + rAVMA = 1'b1; + tmp_nxt = 16'H1001; // Set tmp[12] to indicate an RTI being processed, and at least pull CC. + CpuState_nxt = CPUSTATE_PUL_ACTION; + NextState_nxt = CPUSTATE_FETCH_I1; + end + else if (Inst1 == OPCODE_INH_SWI) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_SWI_START; + end + else if (Inst1 == OPCODE_INH_CWAI) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_CWAI; + end + else if (Inst1 == OPCODE_INH_SEX) + begin + a_nxt = {8{b[7]}}; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else if (Inst1 == OPCODE_INH_ABX) + begin + x_nxt = x + b; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_ABX_DONTCARE; + end + else + begin + ALU_OP = ALU8Op; + if (IsTargetRegA) + ALU_A = a; + else + ALU_A = b; + + ALU_B = 0; + ALU_CC = cc; + cc_nxt = ALU[15:8]; + + if (ALU8Writeback) + begin + if (IsTargetRegA) + a_nxt = ALU[7:0]; + else + b_nxt = ALU[7:0]; + end + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + if (IsOneByteInstruction(Inst1)) // This check is probably superfluous. Every inherent instruction is 1 byte on the 6809. + pc_nxt = pc; // The 6809 auto-reads 2 bytes for every instruction. :( Adjust by not incrementing PC on the 2nd byte read. + end + + TYPE_IMMEDIATE: + begin + if (IsSpecialImmediate) + begin + if (Inst1 == OPCODE_IMM_ANDCC) + begin + pc_nxt = pc_p1; + cc_nxt = cc & D; //cc_nxt & Inst2_nxt; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_CC_DONTCARE; + end + else if (Inst1 == OPCODE_IMM_ORCC) + begin + pc_nxt = pc_p1; + cc_nxt = cc | D; //cc_nxt | Inst2_nxt; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_CC_DONTCARE; + end + else if ( (Inst1 == OPCODE_IMM_PSHS) | (Inst1 == OPCODE_IMM_PSHU) ) + begin + pc_nxt = pc_p1; + tmp_nxt[15] = 1'b0; + tmp_nxt[14] = Inst1[1]; // Mark whether to save to U or S. + tmp_nxt[13] = 1'b0; // Not pushing due to an interrupt. + tmp_nxt[13:8] = 6'H00; + tmp_nxt[7:0] = Inst2_nxt; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_PSH_DONTCARE1; + NextState_nxt = CPUSTATE_FETCH_I1; + end + else if ( (Inst1 == OPCODE_IMM_PULS) | (Inst1 == OPCODE_IMM_PULU) ) + begin + pc_nxt = pc_p1; + tmp_nxt[15] = 1'b0; + tmp_nxt[14] = Inst1[1]; // S (0) or U (1) stack in use. + tmp_nxt[13:8] = 6'H00; + tmp_nxt[7:0] = Inst2_nxt; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_PUL_DONTCARE1; + NextState_nxt = CPUSTATE_FETCH_I1; + end + else if (Inst1 == OPCODE_IMM_TFR) + begin + // The second byte lists the registers; Top nybble is reg #1, bottom is reg #2. + + case (Inst2_nxt[3:0]) + EXGTFR_REG_D: + {a_nxt,b_nxt} = EXGTFRRegA; + EXGTFR_REG_X: + x_nxt = EXGTFRRegA; + EXGTFR_REG_Y: + y_nxt = EXGTFRRegA; + EXGTFR_REG_U: + u_nxt = EXGTFRRegA; + EXGTFR_REG_S: + s_nxt = EXGTFRRegA; + EXGTFR_REG_PC: + pc_nxt = EXGTFRRegA; + EXGTFR_REG_DP: + dp_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_A: + a_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_B: + b_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_CC: + cc_nxt = EXGTFRRegA[7:0]; + default: + begin + end + endcase + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TFR_DONTCARE1; + + end + else if (Inst1 == OPCODE_IMM_EXG) + begin + // The second byte lists the registers; Top nybble is reg #1, bottom is reg #2. + + case (Inst2_nxt[7:4]) + EXGTFR_REG_D: + {a_nxt,b_nxt} = EXGTFRRegB; + EXGTFR_REG_X: + x_nxt = EXGTFRRegB; + EXGTFR_REG_Y: + y_nxt = EXGTFRRegB; + EXGTFR_REG_U: + u_nxt = EXGTFRRegB; + EXGTFR_REG_S: + s_nxt = EXGTFRRegB; + EXGTFR_REG_PC: + pc_nxt = EXGTFRRegB; + EXGTFR_REG_DP: + dp_nxt = EXGTFRRegB[7:0]; + EXGTFR_REG_A: + a_nxt = EXGTFRRegB[7:0]; + EXGTFR_REG_B: + b_nxt = EXGTFRRegB[7:0]; + EXGTFR_REG_CC: + cc_nxt = EXGTFRRegB[7:0]; + default: + begin + end + endcase + case (Inst2_nxt[3:0]) + EXGTFR_REG_D: + {a_nxt,b_nxt} = EXGTFRRegA; + EXGTFR_REG_X: + x_nxt = EXGTFRRegA; + EXGTFR_REG_Y: + y_nxt = EXGTFRRegA; + EXGTFR_REG_U: + u_nxt = EXGTFRRegA; + EXGTFR_REG_S: + s_nxt = EXGTFRRegA; + EXGTFR_REG_PC: + pc_nxt = EXGTFRRegA; + EXGTFR_REG_DP: + dp_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_A: + a_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_B: + b_nxt = EXGTFRRegA[7:0]; + EXGTFR_REG_CC: + cc_nxt = EXGTFRRegA[7:0]; + default: + begin + end + endcase + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXG_DONTCARE1; + end + end + // Determine if this is an 8-bit ALU operation. + else if (Is8BitInst) + begin + ALU_OP = ALU8Op; + if (IsTargetRegA) + ALU_A = a; + else + ALU_A = b; + + ALU_B = Inst2_nxt; + ALU_CC = cc; + cc_nxt = ALU[15:8]; + + if (ALU8Writeback) + begin + if (IsTargetRegA) + a_nxt = ALU[7:0]; + else + b_nxt = ALU[7:0]; + end + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else // Then it must be a 16 bit instruction + begin + // 83 SUBD + // 8C CMPX + // 8E LDX + // C3 ADDD + // CC LDD + // CE LDU + // 108E CMPD + // 108C CMPY + // 108E LDY + // 10CE LDS + // 1183 CMPU + // 118C CMPS + // Wow, they were just stuffing them in willy-nilly ... + + // LD* 16 bit immediate + if (IsALU16Opcode) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_16IMM_LO; + end + // there's a dead zone here; I need an else to take us back to CPUSTATE_FETCHI1 if we want to ignore illegal instructions, to CPUSTATE_DEAD if we want to catch them. + + end + + end + + TYPE_RELATIVE: + begin + // Is this a LB** or a B**? + // If InstPage2 is set, it's a long branch; if clear, a normal branch. + if ( (InstPage2) || (Inst1 == INST_LBRA) || (Inst1 == INST_LBSR) ) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_LBRA_OFFSETLOW; + end + else + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_BRA_DONTCARE; + end + + end + default: + begin + CpuState_nxt = CPUSTATE_FETCH_I1; + end + endcase + end + end + + + CPUSTATE_LBRA_OFFSETLOW: + begin + addr_nxt = pc; + pc_nxt = pc_p1; + Inst3_nxt = D[7:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_LBRA_DONTCARE; + end + + CPUSTATE_LBRA_DONTCARE: + begin + addr_nxt = 16'HFFFF; + if ( TakeBranch ) + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_LBRA_DONTCARE2; + end + else + begin + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + end + + CPUSTATE_BRA_DONTCARE: + begin + addr_nxt = 16'HFFFF; + tmp_nxt = pc; + if (TakeBranch) + begin + pc_nxt = pc + { {8{Inst2[7]}}, Inst2[7:0]}; // Sign-extend the 8 bit offset to 16. + + if (Inst1 == INST_BSR) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_BSR_DONTCARE1; + end + else + begin + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + end + else + begin + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + end + + CPUSTATE_LBRA_DONTCARE2: + begin + tmp_nxt= pc; + addr_nxt = 16'HFFFF; + + // Take branch + pc_nxt = pc + {Inst2[7:0], Inst3[7:0]}; + if (Inst1 == INST_LBSR) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_BSR_DONTCARE1; + end + else + begin + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + end + + CPUSTATE_BSR_DONTCARE1: + begin + addr_nxt = pc; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_BSR_DONTCARE2; + end + + CPUSTATE_BSR_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_BSR_RETURNLOW; + end + + CPUSTATE_BSR_RETURNLOW: + begin + addr_nxt = s_m1; + s_nxt = s_m1; + DOutput[7:0] = tmp[7:0]; + RnWOut = 0; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_BSR_RETURNHIGH; + end + + CPUSTATE_BSR_RETURNHIGH: + begin + addr_nxt = s_m1; + s_nxt = s_m1; + DOutput[7:0] = tmp[15:8]; + RnWOut = 0; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; // after this, RnWOut must go to 1, and the bus needs the PC placed on it. + end + + CPUSTATE_TFR_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TFR_DONTCARE2; + end + + CPUSTATE_TFR_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TFR_DONTCARE3; + end + + CPUSTATE_TFR_DONTCARE3: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TFR_DONTCARE4; + end + + CPUSTATE_TFR_DONTCARE4: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + rLIC = 1'b1; // Instruction done! + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_EXG_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXG_DONTCARE2; + end + + CPUSTATE_EXG_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXG_DONTCARE3; + end + + CPUSTATE_EXG_DONTCARE3: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXG_DONTCARE4; + end + + CPUSTATE_EXG_DONTCARE4: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXG_DONTCARE5; + end + + CPUSTATE_EXG_DONTCARE5: + begin + rAVMA = 1'b0; + addr_nxt = 16'HFFFF; + CpuState_nxt = CPUSTATE_EXG_DONTCARE6; + end + + CPUSTATE_EXG_DONTCARE6: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + rLIC = 1'b1; // Instruction done! + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_ABX_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + rLIC = 1'b1; // Instruction done! + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_RTS_HI: + begin + addr_nxt = s; + s_nxt = s_p1; + pc_nxt[15:8] = D[7:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_RTS_LO; + end + + CPUSTATE_RTS_LO: + begin + addr_nxt = s; + s_nxt = s_p1; + pc_nxt[7:0] = D[7:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_RTS_DONTCARE2; + end + + CPUSTATE_RTS_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_16IMM_LO: + begin + addr_nxt = pc; + pc_nxt = pc_p1; + + ALU16_OP = ALU16Opcode; + ALU16_CC = cc; + ALU16_B = {Inst2, D[7:0]}; + + case (ALU16Reg) + ALU16_REG_X: + ALU16_A = x; + ALU16_REG_D: + ALU16_A = {a, b}; + ALU16_REG_Y: + ALU16_A = y; + ALU16_REG_U: + ALU16_A = u; + ALU16_REG_S: + ALU16_A = s; + default: + ALU16_A = 16'H0; + endcase + + if (ALU16OpWriteback) + begin + case (ALU16Reg) + ALU16_REG_X: + {cc_nxt, x_nxt} = ALU16; + ALU16_REG_D: + {cc_nxt, a_nxt, b_nxt} = ALU16; + ALU16_REG_Y: + {cc_nxt, y_nxt} = ALU16; + ALU16_REG_U: + {cc_nxt, u_nxt} = ALU16; + ALU16_REG_S: + {cc_nxt, s_nxt} = ALU16; + default: + begin + end + endcase + end + else + cc_nxt = ALU16[23:16]; + + if (ALU16_OP == ALUOP16_LD) + begin + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_16IMM_DONTCARE; + end + end + + CPUSTATE_DIRECT_DONTCARE: + begin + addr_nxt = 16'HFFFF; + + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + + CPUSTATE_ALU_EA: + begin + + // Is Figure 18/5 Column 2? JMP (not Immediate Mode) + // This actually isn't done here. All checks passing in to ALU_EA should check for a JMP; FIXME EVERYWHERE + + // Is Figure 18/5 Column 8? TST (not immediate mode) + // THIS IS BURIED IN THE COLUMN 3 section with comparisons to ALUOP_TST. + + // Is Figure 18/5 Column 3? + if (IsALU8Set1(Inst1)) + begin + addr_nxt = ea; + + ALU_OP = ALU8Op; + ALU_B = D[7:0]; + ALU_CC = cc; + + if (IsTargetRegA) + ALU_A = a; + else + ALU_A = b; + + cc_nxt = ALU[15:8]; + + if ( (ALU8Writeback) ) + begin + if (IsTargetRegA) + a_nxt = ALU[7:0]; + else + b_nxt = ALU[7:0]; + end + + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + // Is Figure 18/5 Column 4? (Store, 8 bits) + else if (IsStore8) + begin + addr_nxt = ea; + RnWOut = 0; // write + + ALU_OP = ALUOP_LD; // load has the same CC characteristics as store + ALU_A = 8'H00; + ALU_CC = cc; + + case (Store8RegisterNum) + ST8_REG_A: + begin + DOutput = a; + ALU_B = a; + end + ST8_REG_B: + begin + DOutput = b; + ALU_B = b; + end + + + endcase + + cc_nxt = ALU[15:8]; + + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + // Is Figure 18/5 Column 5? (Load, 16 bits) + else if (IsALU16Opcode & (ALU16Opcode == ALUOP16_LD)) + begin + addr_nxt = ea; + ea_nxt = ea_p1; + + case (ALU16Reg) + ALU16_REG_X: + x_nxt[15:8] = D[7:0]; + ALU16_REG_D: + a_nxt = D[7:0]; + ALU16_REG_Y: + y_nxt[15:8] = D[7:0]; + ALU16_REG_S: + s_nxt[15:8] = D[7:0]; + ALU16_REG_U: + u_nxt[15:8] = D[7:0]; + default: + begin + end + endcase + rAVMA = 1'b1; + rBUSY = 1'b1; + CpuState_nxt = CPUSTATE_LD16_LO; + + end + + // Is Figure 18/5 Column 6? (Store, 16 bits) + else if (IsStore16) + begin + addr_nxt = ea; + ea_nxt = ea_p1; + + ALU16_OP = ALUOP16_LD; // LD and ST have the same CC characteristics + ALU16_CC = cc; + ALU16_A = 8'H00; + + case (StoreRegisterNum) + ST16_REG_X: + begin + DOutput[7:0] = x[15:8]; + ALU16_B = x; + end + ST16_REG_Y: + begin + DOutput[7:0] = y[15:8]; + ALU16_B = y; + end + ST16_REG_U: + begin + DOutput[7:0] = u[15:8]; + ALU16_B = u; + end + ST16_REG_S: + begin + DOutput[7:0] = s[15:8]; + ALU16_B = s; + end + ST16_REG_D: + begin + DOutput[7:0] = a[7:0]; + ALU16_B = {a,b}; + end + default: + begin + end + endcase + + cc_nxt = ALU16[23:16]; + + RnWOut = 0; // Write + rAVMA = 1'b1; + rBUSY = 1'b1; + CpuState_nxt = CPUSTATE_ST16_LO; + end + + // Is Figure 18/5 Column 7? + else if (IsALU8Set0(Inst1)) + begin + // These are registerless instructions, ala + // ASL, ASR, CLR, COM, DEC, INC, (LSL), LSR, NEG, ROL, ROR + // and TST (special!) + // They require READ, Modify (the operation above), WRITE. Between the Read and the Write cycles, there's actually a /VMA + // cycle where the 6809 likely did the operation. We'll include a /VMA cycle for accuracy, but we'll do the work primarily in the first cycle. + addr_nxt = ea; + + ALU_OP = ALU8Op; + ALU_A = D[7:0]; + ALU_CC = cc; + tmp_nxt[15:8] = cc; // for debug only + tmp_nxt[7:0] = ALU[7:0]; + cc_nxt = ALU[15:8]; + if (ALU8Op == ALUOP_TST) + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TST_DONTCARE1; + end + else + begin + rAVMA = 1'b0; + rBUSY = 1'b1; + CpuState_nxt = CPUSTATE_ALU_DONTCARE; + end + + end + + // Is Figure 18/5 Column 8? TST + // NOTE: + // THIS IS BURIED IN THE COLUMN 3 section with comparisons to ALUOP_TST. [Directly above.] + + + // Is Figure 18/5 Column 9? (16-bit ALU ops, non-load) + else if (IsALU16Opcode && (ALU16Opcode != ALUOP16_LD) && ((Inst1 < 8'H30) || (Inst1 > 8'H33)) ) // 30-33 = LEAX, LEAY, LEAS, LEAU; don't include them here. + begin + addr_nxt = ea; + ea_nxt = ea_p1; + + tmp_nxt[15:8] = D[7:0]; + rAVMA = 1'b1; + rBUSY = 1'b1; + CpuState_nxt = CPUSTATE_ALU16_LO; + + end + + // Is Figure 18/5 Column 10? JSR (not Immediate Mode) + else if ((Inst1 == 8'H9D) || (Inst1 == 8'HAD) || (Inst1 == 8'HBD)) // JSR + begin + pc_nxt = ea; + addr_nxt = ea; + tmp_nxt = pc; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_JSR_DONTCARE; + end + // Is Figure 18/5 Column 11? LEA(X,Y,S,U) + else if ((Inst1 >= 8'H30) && (Inst1<= 8'H33)) + begin + addr_nxt = 16'HFFFF; // Ack, actually a valid cycle, this isn't a dontcare (/VMA) cycle! + + ALU16_OP = ALU16Opcode; + ALU16_CC = cc; + ALU16_A = ea; + + case (ALU16Reg) + ALU16_REG_X: + {cc_nxt, x_nxt} = ALU16; + ALU16_REG_Y: + {cc_nxt, y_nxt} = ALU16; + ALU16_REG_U: + u_nxt = ALU16[15:0]; + ALU16_REG_S: + s_nxt = ALU16[15:0]; + default: + begin + end + endcase + + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + + end + + end + + + CPUSTATE_ALU_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + rBUSY = 1'b1; // We do nothing here, but on the real 6809, they did the modify phase here. :| + CpuState_nxt = CPUSTATE_ALU_WRITEBACK; + end + + CPUSTATE_ALU_WRITEBACK: + begin + addr_nxt = ea; + RnWOut = 0; // Write + DOutput = tmp[7:0]; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_LD16_LO: + begin + addr_nxt = ea; + + case (ALU16Reg) + ALU16_REG_X: + begin + x_nxt[7:0] = D[7:0]; + ALU16_B[15:8] = x[15:8]; + end + ALU16_REG_D: + begin + b_nxt = D[7:0]; + ALU16_B[15:8] = a; + end + ALU16_REG_Y: + begin + y_nxt[7:0] = D[7:0]; + ALU16_B[15:8] = y[15:8]; + end + ALU16_REG_S: + begin + s_nxt[7:0] = D[7:0]; + ALU16_B[15:8] = s[15:8]; + end + ALU16_REG_U: + begin + u_nxt[7:0] = D[7:0]; + ALU16_B[15:8] = u[15:8]; + end + default: + begin + end + + endcase + + ALU16_OP = ALU16Opcode; + ALU16_CC = cc; + ALU16_A = 8'H00; + ALU16_B[7:0] = D[7:0]; + cc_nxt = ALU16[23:16]; + + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_ST16_LO: + begin + addr_nxt = ea; + ea_nxt = ea_p1; + case (StoreRegisterNum) + ST16_REG_X: + DOutput[7:0] = x[7:0]; + ST16_REG_Y: + DOutput[7:0] = y[7:0]; + ST16_REG_U: + DOutput[7:0] = u[7:0]; + ST16_REG_S: + DOutput[7:0] = s[7:0]; + ST16_REG_D: + DOutput[7:0] = b[7:0]; + default: + begin + end + endcase + RnWOut = 0; // write + + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_ALU16_LO: + begin + addr_nxt = ea; + + ALU16_OP = ALU16Opcode; + ALU16_CC = cc; + + ALU16_B = {tmp[15:8], D[7:0]}; + + case (ALU16Reg) + ALU16_REG_X: + ALU16_A = x; + ALU16_REG_D: + ALU16_A = {a, b}; + ALU16_REG_Y: + ALU16_A = y; + ALU16_REG_S: + ALU16_A = s; + ALU16_REG_U: + ALU16_A = u; + default: + ALU16_A = 16'H0; + + endcase + + if (ALU16OpWriteback) + begin + case (ALU16Reg) + ALU16_REG_X: + {cc_nxt, x_nxt} = ALU16; + ALU16_REG_D: + {cc_nxt, a_nxt, b_nxt} = ALU16; + ALU16_REG_Y: + {cc_nxt, y_nxt} = ALU16; + ALU16_REG_U: + {cc_nxt, u_nxt} = ALU16; + ALU16_REG_S: + {cc_nxt, s_nxt} = ALU16; + default: + begin + end + endcase + end + else + cc_nxt = ALU16[23:16]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_ALU16_DONTCARE; + end + + CPUSTATE_ALU16_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + + CPUSTATE_JSR_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_JSR_RETLO; + end + + CPUSTATE_JSR_RETLO: + begin + addr_nxt = s_m1; + s_nxt = s_m1; + RnWOut = 0; + DOutput = tmp[7:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_JSR_RETHI; + end + + CPUSTATE_JSR_RETHI: + begin + addr_nxt = s_m1; + s_nxt = s_m1; + RnWOut = 0; + DOutput = tmp[15:8]; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_EXTENDED_ADDRLO: + begin + addr_nxt = pc; + pc_nxt = pc_p1; + ea_nxt[7:0] = D[7:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_EXTENDED_DONTCARE; + end + + CPUSTATE_EXTENDED_DONTCARE: + begin + addr_nxt = 16'HFFFF; + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + + CPUSTATE_INDEXED_BASE: + begin + addr_nxt = pc; + + Inst3_nxt = D[7:0]; + + case (IndexedRegister) + IDX_REG_X: + ALU16_A = x; + IDX_REG_Y: + ALU16_A = y; + IDX_REG_U: + ALU16_A = u; + IDX_REG_S: + ALU16_A = s; + IDX_REG_PC: + ALU16_A = pc_p1; + default: + ALU16_A = 16'H0; + endcase + ALU16_OP = ALUOP16_ADD; + + case (IndexedMode) + IDX_MODE_NOOFFSET: + begin + case (IndexedRegister) + IDX_REG_X: + ea_nxt = x; + IDX_REG_Y: + ea_nxt = y; + IDX_REG_U: + ea_nxt = u; + IDX_REG_S: + ea_nxt = s; + default: + ea_nxt = 16'H0; + endcase + + if (IndexedIndirect) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_INDIRECT_HI; + end + else + begin + if (IsJMP(Inst1)) + begin + pc_nxt = ea_nxt; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + end + + IDX_MODE_5BIT_OFFSET: + begin + // The offset is the bottom 5 bits of the Index Postbyte, which is Inst2 here. + // We'll sign-extend it to 16 bits. + ALU16_B = { {11{Inst2[4]}}, Inst2[4:0] }; + ea_nxt = ALU16[15:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_DONTCARE3; + end + + + IDX_MODE_8BIT_OFFSET_PC: + begin + ALU16_B = { {8{D[7]}}, D[7:0] }; + pc_nxt = pc_p1; + ea_nxt = ALU16[15:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_DONTCARE3; + end + + IDX_MODE_8BIT_OFFSET: + begin + ALU16_B = { {8{D[7]}}, D[7:0] }; + pc_nxt = pc_p1; + ea_nxt = ALU16[15:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_DONTCARE3; + end + + IDX_MODE_A_OFFSET: + begin + ALU16_B = { {8{a[7]}}, a[7:0] }; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_DONTCARE3; + ea_nxt = ALU16[15:0]; + end + + IDX_MODE_B_OFFSET: + begin + ALU16_B = { {8{b[7]}}, b[7:0] }; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_DONTCARE3; + ea_nxt = ALU16[15:0]; + end + + IDX_MODE_D_OFFSET: + begin + ALU16_B = {a, b}; + + ea_nxt = ALU16[15:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_DOFF_DONTCARE1; + end + + IDX_MODE_POSTINC1: + begin + ALU16_B = 16'H1; + ea_nxt = ALU16_A; + case (IndexedRegister) + IDX_REG_X: + x_nxt = ALU16[15:0]; + IDX_REG_Y: + y_nxt = ALU16[15:0]; + IDX_REG_U: + u_nxt = ALU16[15:0]; + IDX_REG_S: + s_nxt = ALU16[15:0]; + default: + begin + end + endcase + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE2; + end + + IDX_MODE_POSTINC2: + begin + ALU16_B = 16'H2; + ea_nxt = ALU16_A; + case (IndexedRegister) + IDX_REG_X: + x_nxt = ALU16[15:0]; + IDX_REG_Y: + y_nxt = ALU16[15:0]; + IDX_REG_U: + u_nxt = ALU16[15:0]; + IDX_REG_S: + s_nxt = ALU16[15:0]; + default: + begin + end + endcase + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE0; + end + + IDX_MODE_PREDEC1: + begin + ALU16_B = 16'HFFFF; // -1 + case (IndexedRegister) + IDX_REG_X: + x_nxt = ALU16[15:0]; + IDX_REG_Y: + y_nxt = ALU16[15:0]; + IDX_REG_U: + u_nxt = ALU16[15:0]; + IDX_REG_S: + s_nxt = ALU16[15:0]; + default: + begin + end + endcase + ea_nxt = ALU16[15:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE2; + end + + IDX_MODE_PREDEC2: + begin + ALU16_B = 16'HFFFE; // -2 + case (IndexedRegister) + IDX_REG_X: + x_nxt = ALU16[15:0]; + IDX_REG_Y: + y_nxt = ALU16[15:0]; + IDX_REG_U: + u_nxt = ALU16[15:0]; + IDX_REG_S: + s_nxt = ALU16[15:0]; + default: + begin + end + endcase + ea_nxt = ALU16[15:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE0; + end + + IDX_MODE_16BIT_OFFSET_PC: + begin + tmp_nxt[15:8] = D[7:0]; + pc_nxt = pc_p1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_16OFFSET_LO; + end + + IDX_MODE_16BIT_OFFSET: + begin + tmp_nxt[15:8] = D[7:0]; + pc_nxt = pc_p1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_16OFFSET_LO; + end + + IDX_MODE_EXTENDED_INDIRECT: + begin + ea_nxt[15:8] = D[7:0]; + pc_nxt = pc_p1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_EXTIND_LO; + end + + default: + begin + rLIC = 1'b1; + CpuState_nxt = PostIllegalState; + end + + endcase + end + + CPUSTATE_IDX_OFFSET_LO: + begin + tmp_nxt[7:0] = D[7:0]; + addr_nxt = pc; + pc_nxt = pc_p1; + ALU16_B = tmp_nxt; + + case (IndexedRegister) + IDX_REG_X: + ALU16_A = x; + IDX_REG_Y: + ALU16_A = y; + IDX_REG_U: + ALU16_A = u; + IDX_REG_S: + ALU16_A = s; + IDX_REG_PC: + ALU16_A = pc; + default: + ALU16_A = 16'H0; + endcase + ALU16_OP = ALUOP16_ADD; + + ea_nxt = ALU16[15:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE1; + end + + + CPUSTATE_IDX_DONTCARE3: + begin + addr_nxt = 16'HFFFF; + if (IndexedIndirect) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_INDIRECT_HI; + end + else + begin + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + + end + + CPUSTATE_IDX_16OFFSET_LO: + begin + addr_nxt = pc; + pc_nxt = pc_p1; + + case (IndexedRegister) + IDX_REG_X: + ALU16_A = x; + IDX_REG_Y: + ALU16_A = y; + IDX_REG_U: + ALU16_A = u; + IDX_REG_S: + ALU16_A = s; + IDX_REG_PC: + ALU16_A = pc_nxt; // Whups; tricky; not part of the actual pattern + default: + ALU16_A = x; // Default to something + endcase + + ALU16_OP = ALUOP16_ADD; + + ALU16_B = {tmp[15:8], D[7:0]}; + + ea_nxt = ALU16[15:0]; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE1; + end + + CPUSTATE_IDX_16OFF_DONTCARE1: + begin + addr_nxt = pc; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE2; + end + + CPUSTATE_IDX_16OFF_DONTCARE0: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE2; + end + + CPUSTATE_IDX_16OFF_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + if (IndexedRegister == IDX_REG_PC) + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_PC16OFF_DONTCARE; + end + else + begin + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE3; + end + end + + CPUSTATE_IDX_PC16OFF_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE3; + end + + + CPUSTATE_IDX_16OFF_DONTCARE3: + begin + addr_nxt = 16'HFFFF; + if (IndexedIndirect) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_INDIRECT_HI; + end + else + begin + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + end + + CPUSTATE_IDX_DOFF_DONTCARE1: + begin + addr_nxt = pc_p1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_DOFF_DONTCARE2; + end + + CPUSTATE_IDX_DOFF_DONTCARE2: + begin + addr_nxt = pc_p2; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IDX_16OFF_DONTCARE2; + end + + CPUSTATE_IDX_DOFF_DONTCARE3: + begin + addr_nxt = pc_p3; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_DOFF_DONTCARE2; + end + + CPUSTATE_IDX_EXTIND_LO: + begin + ea_nxt[7:0] = D[7:0]; + addr_nxt = pc; + pc_nxt = pc_p1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IDX_EXTIND_DONTCARE; + end + + CPUSTATE_IDX_EXTIND_DONTCARE: + begin + addr_nxt = pc; + if (IndexedIndirect) + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_INDIRECT_HI; + end + else + begin + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + end + + CPUSTATE_INDIRECT_HI: + begin + addr_nxt = ea; + tmp_nxt[15:8] = D[7:0]; + rAVMA = 1'b1; + rBUSY = 1'b1; + CpuState_nxt = CPUSTATE_INDIRECT_LO; + end + + CPUSTATE_INDIRECT_LO: + begin + addr_nxt = ea_p1; + ea_nxt[15:8] = tmp_nxt[15:8]; + ea_nxt[7:0] = D[7:0]; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_INDIRECT_DONTCARE; + end + + CPUSTATE_INDIRECT_DONTCARE: + begin + addr_nxt = 16'HFFFF; + if (IsJMP(Inst1)) + begin + pc_nxt = ea; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + else + begin + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_ALU_EA; + end + end + + CPUSTATE_MUL_ACTION: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + // tmp = result + // ea = additor (the shifted multiplicand) + // a = counter + // b is the multiplier (which gets shifted right) + if (a != 8'H00) + begin + if (b[0]) + begin + tmp_nxt = tmp + ea; + end + ea_nxt = {ea[14:0], 1'b0}; + b_nxt = {1'b0, b[7:1]}; + a_nxt = a - 8'H1; + end + else + begin + {a_nxt, b_nxt} = tmp; + + cc_nxt[CC_Z_BIT] = (tmp == 0); + cc_nxt[CC_C_BIT] = tmp[7]; + rLIC = 1'b1; // Instruction done! + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + end + + CPUSTATE_PSH_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_PSH_DONTCARE2; + end + + CPUSTATE_PSH_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_PSH_DONTCARE3; + end + + CPUSTATE_PSH_DONTCARE3: + begin + addr_nxt = (Inst1[1]) ? u : s; + + CpuState_nxt = CPUSTATE_PSH_ACTION; + end + + CPUSTATE_PSH_ACTION: + begin + rAVMA = 1'b1; + if (tmp[7] & ~(tmp[15])) // PC_LO + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = pc[7:0]; + RnWOut = 1'b0; // write + tmp_nxt[15] = 1'b1; + end + else if (tmp[7] & (tmp[15])) // PC_HI + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = pc[15:8]; + RnWOut = 1'b0; // write + tmp_nxt[7] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[6] & ~(tmp[15])) // U/S_LO + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = (tmp[14]) ? s[7:0] : u[7:0]; + RnWOut = 1'b0; // write + tmp_nxt[15] = 1'b1; + end + else if (tmp[6] & (tmp[15])) // U/S_HI + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = (tmp[14]) ? s[15:8] : u[15:8]; + RnWOut = 1'b0; // write + tmp_nxt[6] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[5] & ~(tmp[15])) // Y_LO + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = y[7:0]; + RnWOut = 1'b0; // write + tmp_nxt[15] = 1'b1; + end + else if (tmp[5] & (tmp[15])) // Y_HI + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = y[15:8]; + RnWOut = 1'b0; // write + tmp_nxt[5] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[4] & ~(tmp[15])) // X_LO + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = x[7:0]; + RnWOut = 1'b0; // write + tmp_nxt[15] = 1'b1; + end + else if (tmp[4] & (tmp[15])) // X_HI + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = x[15:8]; + RnWOut = 1'b0; // write + tmp_nxt[4] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[3]) // DP + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = dp; + RnWOut = 1'b0; // write + tmp_nxt[3] = 1'b0; + end + else if (tmp[2]) // B + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = b; + RnWOut = 1'b0; // write + tmp_nxt[2] = 1'b0; + end + else if (tmp[1]) // A + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = a; + RnWOut = 1'b0; // write + tmp_nxt[1] = 1'b0; + end + else if (tmp[0]) // CC + begin + addr_nxt = (tmp[14]) ? u_m1 : s_m1; + if (tmp[14]) + u_nxt = u_m1; + else + s_nxt = s_m1; + DOutput = cc; + RnWOut = 1'b0; // write + tmp_nxt[0] = 1'b0; + end + if (tmp[13]) // Then we're pushing for an IRQ, and LIC is supposed to be set. + rLIC = 1'b1; + if (tmp_nxt[7:0] == 8'H00) + begin + if (NextState == CPUSTATE_FETCH_I1) + begin + rAVMA = 1'b1; + rLIC = 1'b1; + end + else + rAVMA = 1'b0; + CpuState_nxt = NextState; + end + end + + CPUSTATE_PUL_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_PUL_DONTCARE2; + end + + CPUSTATE_PUL_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_PUL_ACTION; + end + + CPUSTATE_PUL_ACTION: + begin + rAVMA = 1'b1; + if (tmp[0]) // CC + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + cc_nxt = D[7:0]; + if (tmp[12] == 1'b1) // This pull is from an RTI, the E flag comes from the retrieved CC, and set the tmp_nxt accordingly, indicating what other registers to retrieve + begin + if (D[CC_E_BIT]) + tmp_nxt[7:0] = 8'HFE; // Retrieve all registers (ENTIRE) [CC is already retrieved] + else + tmp_nxt[7:0] = 8'H80; // Retrieve PC and CC [CC is already retrieved] + end + else + tmp_nxt[0] = 1'b0; + end + else if (tmp[1]) // A + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + a_nxt = D[7:0]; + tmp_nxt[1] = 1'b0; + end + else if (tmp[2]) // B + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + b_nxt = D[7:0]; + tmp_nxt[2] = 1'b0; + end + else if (tmp[3]) // DP + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + dp_nxt = D[7:0]; + tmp_nxt[3] = 1'b0; + end + else if (tmp[4] & (~tmp[15])) // X_HI + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + x_nxt[15:8] = D[7:0]; + tmp_nxt[15] = 1'b1; + end + else if (tmp[4] & tmp[15]) // X_LO + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + x_nxt[7:0] = D[7:0]; + tmp_nxt[4] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[5] & (~tmp[15])) // Y_HI + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + y_nxt[15:8] = D[7:0]; + tmp_nxt[15] = 1'b1; + end + else if (tmp[5] & tmp[15]) // Y_LO + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + y_nxt[7:0] = D[7:0]; + tmp_nxt[5] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[6] & (~tmp[15])) // U/S_HI + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + if (tmp[14]) + s_nxt[15:8] = D[7:0]; + else + u_nxt[15:8] = D[7:0]; + tmp_nxt[15] = 1'b1; + end + else if (tmp[6] & tmp[15]) // U/S_LO + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + if (tmp[14]) + s_nxt[7:0] = D[7:0]; + else + u_nxt[7:0] = D[7:0]; + tmp_nxt[6] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else if (tmp[7] & (~tmp[15])) // PC_HI + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + pc_nxt[15:8] = D[7:0]; + tmp_nxt[15] = 1'b1; + end + else if (tmp[7] & tmp[15]) // PC_LO + begin + addr_nxt = (tmp[14]) ? u : s; + if (tmp[14]) + u_nxt = u_p1; + else + s_nxt = s_p1; + pc_nxt[7:0] = D[7:0]; + tmp_nxt[7] = 1'b0; + tmp_nxt[15] = 1'b0; + end + else + begin + addr_nxt = (tmp[14]) ? u : s; + if (NextState == CPUSTATE_FETCH_I1) + begin + rAVMA = 1'b1; + rLIC = 1'b1; + end + else + rAVMA = 1'b0; + CpuState_nxt = NextState; + end + end + + CPUSTATE_NMI_START: + begin + NMIClear_nxt = 1'b1; + addr_nxt = pc; + // tmp stands as the bits to push to the stack + tmp_nxt = 16'H20FF; // Save to the S stack, PC, U, Y, X, DP, B, A, CC; set LIC on every push + NextState_nxt = CPUSTATE_IRQ_DONTCARE2; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_IRQ_DONTCARE; + IntType_nxt = INTTYPE_NMI; + cc_nxt[CC_E_BIT] = 1'b1; + end + + CPUSTATE_IRQ_START: + begin + addr_nxt = pc; + tmp_nxt = 16'H20FF; // Save to the S stack, PC, U, Y, X, DP, B, A, CC; set LIC on every push + NextState_nxt = CPUSTATE_IRQ_DONTCARE2; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_DONTCARE; + IntType_nxt = INTTYPE_IRQ; + cc_nxt[CC_E_BIT] = 1'b1; + end + + CPUSTATE_FIRQ_START: + begin + addr_nxt = pc; + tmp_nxt = 16'H2081; // Save to the S stack, PC, CC; set LIC on every push + NextState_nxt = CPUSTATE_IRQ_DONTCARE2; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_DONTCARE; + IntType_nxt = INTTYPE_FIRQ; + cc_nxt[CC_E_BIT] = 1'b0; + end + + CPUSTATE_SWI_START: + begin + addr_nxt = pc; + tmp_nxt = 16'H00FF; // Save to the S stack, PC, U, Y, X, DP, B, A, CC + + NextState_nxt = CPUSTATE_IRQ_DONTCARE2; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_DONTCARE; + if (InstPage3) + IntType_nxt = INTTYPE_SWI3; + if (InstPage2) + IntType_nxt = INTTYPE_SWI2; + else + IntType_nxt = INTTYPE_SWI; + + cc_nxt[CC_E_BIT] = 1'b1; + end + + CPUSTATE_IRQ_DONTCARE: + begin + NMIClear_nxt = 1'b0; + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_PSH_ACTION; + end + + + CPUSTATE_IRQ_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_VECTOR_HI; + rLIC = 1'b1; + end + + CPUSTATE_IRQ_VECTOR_HI: + begin + case (IntType) + INTTYPE_NMI: + begin + addr_nxt = `NMI_VECTOR; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_IRQ: + begin + addr_nxt = `IRQ_VECTOR; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_SWI: + begin + addr_nxt = `SWI_VECTOR; + end + INTTYPE_FIRQ: + begin + addr_nxt = `FIRQ_VECTOR; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_SWI2: + begin + addr_nxt = `SWI2_VECTOR; + end + INTTYPE_SWI3: + begin + addr_nxt = `SWI3_VECTOR; + end + default: // make the default an IRQ, even though it really should never happen + begin + addr_nxt = `IRQ_VECTOR; + BS_nxt = 1'b1; // ACK Interrupt + end + endcase + + pc_nxt[15:8] = D[7:0]; + rAVMA = 1'b1; + rBUSY = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_VECTOR_LO; + + + end + + CPUSTATE_IRQ_VECTOR_LO: + begin + case (IntType) + INTTYPE_NMI: + begin + addr_nxt = `NMI_VECTOR+16'H1; + cc_nxt[CC_I_BIT] = 1'b1; + cc_nxt[CC_F_BIT] = 1'b1; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_IRQ: + begin + addr_nxt = `IRQ_VECTOR+16'H1; + cc_nxt[CC_I_BIT] = 1'b1; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_SWI: + begin + addr_nxt = `SWI_VECTOR+16'H1; + cc_nxt[CC_F_BIT] = 1'b1; + cc_nxt[CC_I_BIT] = 1'b1; + rLIC = 1'b1; + end + INTTYPE_FIRQ: + begin + addr_nxt = `FIRQ_VECTOR+16'H1; + cc_nxt[CC_F_BIT] = 1'b1; + cc_nxt[CC_I_BIT] = 1'b1; + BS_nxt = 1'b1; // ACK Interrupt + end + INTTYPE_SWI2: + begin + addr_nxt = `SWI2_VECTOR+16'H1; + rLIC = 1'b1; + end + INTTYPE_SWI3: + begin + addr_nxt = `SWI3_VECTOR+16'H1; + rLIC = 1'b1; + end + default: + begin + end + endcase + + pc_nxt[7:0] = D[7:0]; + rAVMA = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_INT_DONTCARE; + end + + CPUSTATE_INT_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + rLIC = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_CC_DONTCARE: + begin + addr_nxt = pc; + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_TST_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_TST_DONTCARE2; + end + + CPUSTATE_TST_DONTCARE2: + begin + addr_nxt = 16'HFFFF; + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_DEBUG: + begin + addr_nxt = tmp; + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_16IMM_DONTCARE: + begin + addr_nxt = 16'HFFFF; + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_SYNC: + begin + addr_nxt = 16'HFFFF; + BA_nxt = 1'b1; + rLIC = 1'b1; + rAVMA = 1'b0; + + if (~(NMILatched & FIRQLatched & IRQLatched)) + begin + CpuState_nxt = CPUSTATE_SYNC_EXIT; + end + end + + CPUSTATE_SYNC_EXIT: + begin + addr_nxt = 16'HFFFF; + BA_nxt = 1'b1; + rLIC = 1'b1; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + + CPUSTATE_DMABREQ: + begin + rAVMA = 1'b0; + addr_nxt = 16'HFFFF; + BS_nxt = 1'b1; + BA_nxt = 1'b1; + rLIC = 1'b1; + tmp_nxt[3:0] = tmp[3:0] - 1'b1; + if ( (tmp[3:0] == 4'H0) | (DMABREQSample2) ) + begin + CpuState_nxt = CPUSTATE_DMABREQ_EXIT; + end + end + + CPUSTATE_DMABREQ_EXIT: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_HALTED: + begin + rAVMA = 1'b0; + addr_nxt = 16'HFFFF; + BS_nxt = 1'b1; + BA_nxt = 1'b1; + rLIC = 1'b1; + if (HALTSample2) + begin + CpuState_nxt = CPUSTATE_HALT_EXIT2; + end + end + + + CPUSTATE_HALT_EXIT2: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_FETCH_I1; + end + + CPUSTATE_STOP: + begin + addr_nxt = 16'HDEAD; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_STOP2; + end + + CPUSTATE_STOP2: + begin + addr_nxt = pc; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_STOP3; + end + + CPUSTATE_STOP3: + begin + addr_nxt = 16'H0000; //{Inst1, Inst2}; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_STOP; + end + + // The otherwise critically useful Figure 18 in the 6809 datasheet contains an error; + // it lists that CWAI has a tri-stated bus while it waits for an interrupt. + // That is not true. SYNC tristates the bus, as do things like /HALT and /DMABREQ. + // CWAI does not. It waits with /VMA cycles on the bus until an interrupt occurs. + // The implementation here fits with the 6809 Programming Manual and other Motorola + // sources, not with that typo in Figure 18. + CPUSTATE_CWAI: + begin + addr_nxt = pc; + cc_nxt = {1'b1, (cc[6:0] & Inst2[6:0])}; // Set E flag, AND CC with CWAI argument + tmp_nxt = 16'H00FF; // Save to the S stack, PC, U, Y, X, DP, B, A, CC + + NextState_nxt = CPUSTATE_CWAI_POST; + rAVMA = 1'b0; + CpuState_nxt = CPUSTATE_CWAI_DONTCARE1; + end + + CPUSTATE_CWAI_DONTCARE1: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b1; + CpuState_nxt = CPUSTATE_PSH_ACTION; + end + + CPUSTATE_CWAI_POST: + begin + addr_nxt = 16'HFFFF; + rAVMA = 1'b0; + + CpuState_nxt = CPUSTATE_CWAI_POST; + + // Wait for an interrupt + if (NMILatched == 0) + begin + rAVMA = 1'b1; + IntType_nxt = INTTYPE_NMI; + cc_nxt[CC_F_BIT] = 1'b1; + cc_nxt[CC_I_BIT] = 1'b1; + CpuState_nxt = CPUSTATE_IRQ_VECTOR_HI; + end + else if ((FIRQLatched == 0) && (cc[CC_F_BIT] == 0)) + begin + rAVMA = 1'b1; + cc_nxt[CC_F_BIT] = 1'b1; + cc_nxt[CC_I_BIT] = 1'b1; + IntType_nxt = INTTYPE_FIRQ; + CpuState_nxt = CPUSTATE_IRQ_VECTOR_HI; + end + else if ((IRQLatched == 0) && (cc[CC_I_BIT] == 0)) + begin + rAVMA = 1'b1; + cc_nxt[CC_I_BIT] = 1'b1; + IntType_nxt = INTTYPE_IRQ; + CpuState_nxt = CPUSTATE_IRQ_VECTOR_HI; + end + end + + default: // Picky darned Verilog. + begin + CpuState_nxt = PostIllegalState; + end + + endcase +end + +endmodule + diff --git a/GCE - Vectrex_MiST/rtl/pll.v b/GCE - Vectrex_MiST/rtl/pll.v index cbd56df8..86111024 100644 --- a/GCE - Vectrex_MiST/rtl/pll.v +++ b/GCE - Vectrex_MiST/rtl/pll.v @@ -111,17 +111,17 @@ module pll ( .vcounderrange ()); defparam altpll_component.bandwidth_type = "AUTO", - altpll_component.clk0_divide_by = 44, + altpll_component.clk0_divide_by = 9, altpll_component.clk0_duty_cycle = 50, - altpll_component.clk0_multiply_by = 41, + altpll_component.clk0_multiply_by = 8, altpll_component.clk0_phase_shift = "0", - altpll_component.clk1_divide_by = 88, + altpll_component.clk1_divide_by = 9, altpll_component.clk1_duty_cycle = 50, - altpll_component.clk1_multiply_by = 41, + altpll_component.clk1_multiply_by = 4, altpll_component.clk1_phase_shift = "0", - altpll_component.clk2_divide_by = 176, + altpll_component.clk2_divide_by = 9, altpll_component.clk2_duty_cycle = 50, - altpll_component.clk2_multiply_by = 41, + altpll_component.clk2_multiply_by = 2, altpll_component.clk2_phase_shift = "0", altpll_component.compensate_clock = "CLK0", altpll_component.inclk0_input_frequency = 37037, @@ -196,15 +196,15 @@ endmodule // Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" // Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" // Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" -// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "44" -// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "88" -// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "176" +// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "9" +// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "9" +// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "9" // Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" // Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" // Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" -// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "25.159090" -// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "12.579545" -// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "6.289773" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "24.000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "12.000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "6.000000" // Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" // Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" // Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" @@ -231,13 +231,13 @@ endmodule // Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" // Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" // Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" -// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "41" -// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "41" -// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "41" +// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "8" +// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "4" +// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "2" // Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" -// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "25.17500000" -// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "12.58750000" -// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "6.29375000" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "24.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "12.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "6.00000000" // Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" // Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" // Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" @@ -290,17 +290,17 @@ endmodule // Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" // Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all // Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" -// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "44" +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "9" // Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" -// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "41" +// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "8" // Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" -// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "88" +// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "9" // Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" -// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "41" +// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "4" // Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" -// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "176" +// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "9" // Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" -// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "41" +// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "2" // Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" // Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" // Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" diff --git a/GCE - Vectrex_MiST/rtl/vectrex.vhd b/GCE - Vectrex_MiST/rtl/vectrex.vhd index 324aa844..f93628e0 100644 --- a/GCE - Vectrex_MiST/rtl/vectrex.vhd +++ b/GCE - Vectrex_MiST/rtl/vectrex.vhd @@ -124,7 +124,7 @@ port video_vs : out std_logic; video_blankn : out std_logic; video_csync : out std_logic; - + frame : out std_logic; audio_out : out std_logic_vector(9 downto 0); cart_addr : out std_logic_vector(13 downto 0); cart_do : in std_logic_vector( 7 downto 0); @@ -301,6 +301,27 @@ architecture syn of vectrex is signal compare : std_logic; signal players_switches : std_logic_vector(7 downto 0); + component ym2149 is port +( + CLK : in std_logic; + CE : in std_logic; + RESET : in std_logic; + BDIR : in std_logic; + BC : in std_logic; + DI : in std_logic_vector(7 downto 0); + DO : out std_logic_vector(7 downto 0); + CHANNEL_A : out std_logic_vector(7 downto 0); + CHANNEL_B : out std_logic_vector(7 downto 0); + CHANNEL_C : out std_logic_vector(7 downto 0); + SEL : in std_logic; + MODE : in std_logic; + IOA_in : in std_logic_vector(7 downto 0); + IOA_out : out std_logic_vector(7 downto 0); + IOB_in : in std_logic_vector(7 downto 0); + IOB_out : out std_logic_vector(7 downto 0) +); +end component ym2149; + begin -- debug @@ -636,22 +657,8 @@ end process; video_blankn <= not (hblank or vblank); scan_video_addr <= vcnt_video * std_logic_vector(to_unsigned(max_h,10)) + hcnt_video; - --- sound -process (cpu_clock) -begin - if rising_edge(cpu_clock) then - if ay_audio_chan = "00" then ay_chan_a <= ay_audio_muxed; end if; - if ay_audio_chan = "01" then ay_chan_b <= ay_audio_muxed; end if; - if ay_audio_chan = "10" then ay_chan_c <= ay_audio_muxed; end if; - end if; -end process; - -audio_out <= ("00"&ay_chan_a) + - ("00"&ay_chan_b) + - ("00"&ay_chan_c) + - ("00"&dac_sound); +frame <= frame_line; --------------------------- -- components --------------------------- @@ -660,6 +667,7 @@ audio_out <= ("00"&ay_chan_a) + main_cpu : entity work.cpu09 port map( clk => cpu_clock,-- E clock input (falling edge) + ce => '1', rst => reset, -- reset input (active high) vma => open, -- valid memory address (active high) lic_out => open, -- last instruction cycle (active high) @@ -674,8 +682,8 @@ port map( irq => cpu_irq, -- interrupt request input (active high) firq => cpu_firq, -- fast interrupt request input (active high) nmi => '0', -- non maskable interrupt request input (active high) - halt => '0', -- halt input (active high) grants DMA - hold_in => '0' -- hold input (active high) extend bus cycle + halt => '0'--, -- halt input (active high) grants DMA +-- hold_in => '0' -- hold input (active high) extend bus cycle ); @@ -768,36 +776,31 @@ port map( ENA_4 => via_en_4 -- 4x system clock (4HZ) _-_-_-_-_- ); + + -- AY-3-8910 -ay_3_8910_2 : entity work.YM2149 -port map( - -- data bus - I_DA => via_pa_o, -- in std_logic_vector(7 downto 0); - O_DA => ay_do, -- out std_logic_vector(7 downto 0); - O_DA_OE_L => open, -- out std_logic; - -- control - I_A9_L => '0', -- in std_logic; - I_A8 => '1', -- in std_logic; - I_BDIR => via_pb_o(4), -- in std_logic; - I_BC2 => '1', -- in std_logic; - I_BC1 => via_pb_o(3), -- in std_logic; - I_SEL_L => '0', -- in std_logic; - - O_AUDIO => ay_audio_muxed, -- out std_logic_vector(7 downto 0); - O_CHAN => ay_audio_chan, -- out std_logic_vector(1 downto 0); - - -- port a - I_IOA => players_switches, -- in std_logic_vector(7 downto 0); - O_IOA => open, -- out std_logic_vector(7 downto 0); - O_IOA_OE_L => open, -- out std_logic; - -- port b - I_IOB => (others => '0'), -- in std_logic_vector(7 downto 0); - O_IOB => open, -- out std_logic_vector(7 downto 0); - O_IOB_OE_L => open, -- out std_logic; - - ENA => '1', --cpu_ena, -- in std_logic; -- clock enable for higher speed operation - RESET_L => reset_n, -- in std_logic; - CLK => cpu_clock -- in std_logic -- note 6 Mhz +ym2149_inst : ym2149 +port map +( + CLK => cpu_clock, + CE => '1', + RESET => reset, + BDIR => via_pb_o(4), + BC => via_pb_o(3), + DI => via_pa_o, + DO => ay_do, + CHANNEL_A => ay_chan_a, + CHANNEL_B => ay_chan_b, + CHANNEL_C => ay_chan_c, + SEL => '0', + MODE => '0', + IOA_in => players_switches, + IOB_in => (others => '0') ); +audio_out <= ("00"&ay_chan_a) + + ("00"&ay_chan_b) + + ("00"&ay_chan_c) + + ("00"&dac_sound); + end SYN; diff --git a/GCE - Vectrex_MiST/rtl/vectrex_exec_prom.vhd b/GCE - Vectrex_MiST/rtl/vectrex_exec_prom.vhd index 4431ba3c..cd58c0fd 100644 --- a/GCE - Vectrex_MiST/rtl/vectrex_exec_prom.vhd +++ b/GCE - Vectrex_MiST/rtl/vectrex_exec_prom.vhd @@ -13,24 +13,24 @@ architecture prom of vectrex_exec_prom is type rom is array(0 to 8191) of std_logic_vector(7 downto 0); signal rom_data: rom := ( X"ED",X"77",X"F8",X"50",X"30",X"E8",X"4D",X"49",X"4E",X"45",X"80",X"F8",X"50",X"00",X"DE",X"53", - X"54",X"4F",X"52",X"4D",X"80",X"00",X"8E",X"C8",X"83",X"6F",X"80",X"8C",X"CB",X"C5",X"26",X"F9", + X"54",X"4F",X"52",X"4D",X"80",X"00",X"8E",X"C8",X"83",X"6F",X"80",X"8C",X"CB",X"BB",X"26",X"F9", X"BD",X"E8",X"E3",X"7C",X"C8",X"24",X"86",X"BB",X"B7",X"C8",X"80",X"8E",X"01",X"01",X"BF",X"C8", X"81",X"8E",X"C8",X"83",X"6F",X"80",X"8C",X"CB",X"70",X"26",X"F9",X"20",X"00",X"BD",X"F1",X"AF", X"CC",X"02",X"00",X"BD",X"F7",X"A9",X"0A",X"79",X"0F",X"56",X"0F",X"9B",X"8E",X"C8",X"A8",X"BD", X"F8",X"4F",X"8E",X"C8",X"AF",X"BD",X"F8",X"4F",X"8E",X"C8",X"F9",X"BD",X"F8",X"4F",X"CC",X"00", X"01",X"BD",X"F8",X"7C",X"8E",X"C9",X"00",X"BD",X"F8",X"4F",X"CC",X"00",X"01",X"BD",X"F8",X"7C", - X"8E",X"ED",X"AB",X"9F",X"C4",X"9F",X"C6",X"86",X"05",X"97",X"D9",X"97",X"DA",X"97",X"DB",X"20", - X"24",X"BD",X"E8",X"66",X"10",X"8E",X"C8",X"C4",X"96",X"9B",X"AE",X"A6",X"30",X"04",X"AF",X"A6", - X"8E",X"ED",X"A7",X"96",X"9B",X"AE",X"86",X"A6",X"05",X"84",X"03",X"26",X"02",X"0C",X"D9",X"CC", - X"00",X"01",X"BD",X"F8",X"7C",X"BD",X"E7",X"E4",X"8E",X"C8",X"C4",X"96",X"9B",X"AE",X"86",X"A6", - X"84",X"2B",X"05",X"BD",X"E1",X"29",X"20",X"41",X"DC",X"F0",X"83",X"00",X"01",X"DD",X"F0",X"27", - X"14",X"34",X"08",X"BD",X"F1",X"AA",X"BD",X"EA",X"CF",X"CE",X"EE",X"2F",X"BD",X"EA",X"9D",X"35", - X"08",X"96",X"0F",X"27",X"24",X"8E",X"C8",X"A8",X"CE",X"CB",X"EB",X"BD",X"F8",X"D8",X"8E",X"C8", - X"AF",X"CE",X"CB",X"EB",X"BD",X"F8",X"D8",X"DC",X"F0",X"10",X"26",X"FF",X"44",X"BD",X"F1",X"8B", - X"0F",X"3B",X"10",X"CE",X"CB",X"EA",X"7E",X"F0",X"1C",X"34",X"08",X"BD",X"EA",X"F0",X"BD",X"E5", + X"8E",X"CB",X"B3",X"9F",X"C4",X"8E",X"CB",X"B7",X"9F",X"C6",X"C6",X"08",X"8E",X"CB",X"B3",X"BD", + X"F5",X"3F",X"86",X"05",X"97",X"D9",X"97",X"DA",X"97",X"DB",X"20",X"23",X"BD",X"E8",X"66",X"10", + X"8E",X"C8",X"C4",X"96",X"9B",X"AE",X"A6",X"BD",X"ED",X"AB",X"8E",X"ED",X"A7",X"96",X"9B",X"AE", + X"86",X"A6",X"05",X"84",X"03",X"26",X"02",X"0C",X"D9",X"CC",X"00",X"01",X"BD",X"F8",X"7C",X"BD", + X"E7",X"E4",X"8E",X"C8",X"C4",X"96",X"9B",X"AE",X"86",X"BD",X"E1",X"29",X"20",X"3B",X"DC",X"F0", + X"83",X"00",X"01",X"DD",X"F0",X"27",X"26",X"34",X"08",X"BD",X"F1",X"AA",X"BD",X"EA",X"CF",X"CE", + X"EE",X"2F",X"BD",X"EA",X"9D",X"35",X"08",X"8E",X"C8",X"A8",X"CE",X"CB",X"EB",X"BD",X"F8",X"D8", + X"8E",X"C8",X"AF",X"CE",X"CB",X"EB",X"BD",X"F8",X"D8",X"96",X"0F",X"27",X"0C",X"DC",X"F0",X"10", + X"26",X"FF",X"3E",X"7E",X"EF",X"CC",X"12",X"12",X"12",X"34",X"08",X"BD",X"EA",X"F0",X"BD",X"E5", X"1E",X"BD",X"E2",X"62",X"BD",X"E4",X"B8",X"BD",X"E3",X"53",X"35",X"08",X"BD",X"EB",X"43",X"BD", - X"EC",X"46",X"BD",X"EC",X"95",X"BD",X"E6",X"47",X"25",X"DF",X"96",X"BD",X"10",X"27",X"FF",X"61", - X"96",X"BE",X"10",X"26",X"FF",X"92",X"7E",X"E0",X"A5",X"9F",X"C2",X"CC",X"7F",X"00",X"DD",X"DC", + X"EC",X"46",X"BD",X"EC",X"95",X"BD",X"E6",X"47",X"25",X"DF",X"96",X"BD",X"10",X"27",X"FF",X"6C", + X"96",X"BE",X"10",X"26",X"FF",X"98",X"7E",X"E0",X"AF",X"9F",X"C2",X"CC",X"7F",X"00",X"DD",X"DC", X"97",X"B7",X"86",X"20",X"97",X"9C",X"8E",X"E1",X"E7",X"9F",X"9D",X"8E",X"C9",X"33",X"9F",X"B9", X"86",X"1D",X"97",X"B8",X"0F",X"56",X"CE",X"ED",X"77",X"BD",X"F6",X"8D",X"34",X"08",X"BD",X"E7", X"11",X"BD",X"F6",X"87",X"96",X"26",X"85",X"01",X"26",X"02",X"0A",X"B7",X"BD",X"EA",X"F0",X"BD", @@ -40,7 +40,7 @@ architecture prom of vectrex_exec_prom is X"86",X"04",X"97",X"B7",X"86",X"7F",X"97",X"B8",X"96",X"B7",X"27",X"4A",X"D6",X"B8",X"27",X"04", X"0A",X"B8",X"20",X"12",X"D6",X"26",X"C4",X"1F",X"26",X"0C",X"4A",X"97",X"B7",X"9E",X"C2",X"A6", X"86",X"C6",X"03",X"BD",X"E9",X"A1",X"34",X"08",X"BD",X"EA",X"F0",X"BD",X"F2",X"A9",X"CE",X"EE", - X"20",X"BD",X"EA",X"9D",X"10",X"8E",X"E0",X"F8",X"CE",X"ED",X"A7",X"B6",X"C8",X"9B",X"EE",X"C6", + X"20",X"BD",X"EA",X"9D",X"10",X"8E",X"E0",X"00",X"CE",X"ED",X"A7",X"B6",X"C8",X"9B",X"EE",X"C6", X"BD",X"EA",X"A8",X"BD",X"E5",X"1E",X"BD",X"E2",X"62",X"BD",X"E4",X"B8",X"35",X"08",X"BD",X"EB", X"43",X"BD",X"E6",X"47",X"20",X"B2",X"39",X"0A",X"B8",X"27",X"4E",X"0C",X"ED",X"BD",X"F5",X"17", X"84",X"07",X"8B",X"04",X"97",X"9C",X"DE",X"B9",X"86",X"80",X"A7",X"C4",X"DC",X"DC",X"8B",X"08", @@ -65,8 +65,8 @@ architecture prom of vectrex_exec_prom is X"EF",X"27",X"0D",X"BD",X"E9",X"8A",X"97",X"C8",X"0F",X"C9",X"D7",X"CA",X"0F",X"CB",X"35",X"88", X"04",X"EE",X"86",X"1F",X"97",X"EF",X"35",X"88",X"D6",X"EF",X"C1",X"E0",X"2F",X"0C",X"96",X"EF", X"80",X"04",X"97",X"EF",X"4F",X"BD",X"E9",X"4A",X"35",X"88",X"0F",X"EF",X"0F",X"EE",X"BD",X"E8", - X"37",X"35",X"88",X"B6",X"C8",X"E7",X"27",X"2B",X"34",X"08",X"86",X"C8",X"1F",X"8B",X"96",X"E7", - X"27",X"21",X"DC",X"DE",X"D3",X"E2",X"DD",X"DE",X"97",X"DC",X"DC",X"E0",X"D3",X"E4",X"DD",X"E0", + X"37",X"35",X"88",X"B6",X"C8",X"E7",X"27",X"2B",X"34",X"08",X"86",X"C8",X"1F",X"8B",X"12",X"12", + X"12",X"12",X"DC",X"DE",X"D3",X"E2",X"DD",X"DE",X"97",X"DC",X"DC",X"E0",X"D3",X"E4",X"DD",X"E0", X"97",X"DD",X"35",X"08",X"BD",X"F2",X"A5",X"C6",X"08",X"10",X"BE",X"C8",X"DC",X"8E",X"EF",X"B3", X"BD",X"EA",X"7F",X"39",X"8E",X"E3",X"A1",X"9F",X"A3",X"BD",X"F5",X"17",X"8E",X"E4",X"48",X"84", X"06",X"AE",X"86",X"EC",X"81",X"DD",X"DC",X"97",X"DE",X"0F",X"DF",X"D7",X"E0",X"0F",X"E1",X"20", @@ -104,7 +104,7 @@ architecture prom of vectrex_exec_prom is X"EC",X"46",X"E3",X"4A",X"ED",X"46",X"BD",X"F2",X"A5",X"8E",X"E2",X"5A",X"A6",X"41",X"48",X"AE", X"86",X"31",X"44",X"E6",X"42",X"BD",X"EA",X"8D",X"7E",X"E5",X"2A",X"EC",X"44",X"E3",X"48",X"29", X"1A",X"ED",X"44",X"EC",X"46",X"E3",X"4A",X"29",X"12",X"ED",X"46",X"BD",X"F2",X"A9",X"31",X"44", - X"8E",X"CB",X"A7",X"C6",X"04",X"BD",X"EA",X"8D",X"7E",X"E5",X"2A",X"6F",X"C4",X"7A",X"C8",X"EB", + X"8E",X"CB",X"A4",X"C6",X"04",X"BD",X"EA",X"8D",X"7E",X"E5",X"2A",X"6F",X"C4",X"7A",X"C8",X"EB", X"7E",X"E5",X"2A",X"A6",X"46",X"AB",X"C8",X"10",X"A7",X"46",X"A1",X"C8",X"11",X"26",X"02",X"64", X"C4",X"BD",X"F2",X"A5",X"31",X"44",X"BD",X"EA",X"6D",X"7E",X"E5",X"2A",X"A6",X"43",X"81",X"03", X"26",X"0D",X"A6",X"42",X"A1",X"C8",X"10",X"2C",X"06",X"8B",X"08",X"A7",X"42",X"20",X"1B",X"64", @@ -125,12 +125,12 @@ architecture prom of vectrex_exec_prom is X"9B",X"44",X"8E",X"C8",X"DA",X"E6",X"86",X"F7",X"C8",X"D9",X"27",X"EB",X"B6",X"C8",X"D9",X"26", X"0D",X"86",X"01",X"B7",X"C8",X"BE",X"20",X"06",X"E6",X"44",X"E1",X"41",X"25",X"05",X"6F",X"C4", X"7A",X"C8",X"EC",X"33",X"45",X"7A",X"C8",X"8F",X"10",X"26",X"FF",X"4B",X"BD",X"EC",X"C9",X"20", - X"05",X"34",X"08",X"BD",X"F1",X"AA",X"BD",X"F2",X"A5",X"8E",X"80",X"38",X"BF",X"C8",X"90",X"B6", - X"C8",X"D9",X"27",X"1E",X"B7",X"C8",X"8F",X"7A",X"C8",X"8F",X"27",X"16",X"B6",X"C8",X"91",X"8B", + X"05",X"34",X"08",X"BD",X"F1",X"AA",X"BD",X"F2",X"A5",X"8E",X"80",X"38",X"BF",X"C8",X"90",X"BD", + X"EF",X"D8",X"27",X"1E",X"12",X"12",X"12",X"7A",X"C8",X"8F",X"27",X"16",X"B6",X"C8",X"91",X"8B", X"06",X"B7",X"C8",X"91",X"C6",X"04",X"10",X"BE",X"C8",X"90",X"8E",X"EE",X"EB",X"BD",X"EA",X"7F", X"20",X"E5",X"35",X"08",X"96",X"26",X"84",X"01",X"48",X"48",X"48",X"8E",X"EE",X"AD",X"CE",X"CB", - X"A7",X"BD",X"F6",X"1F",X"D6",X"EC",X"26",X"0F",X"96",X"BD",X"26",X"08",X"D6",X"EB",X"26",X"07", - X"D6",X"ED",X"26",X"03",X"1C",X"FE",X"39",X"1A",X"01",X"39",X"34",X"32",X"8E",X"C8",X"C8",X"BD", + X"A4",X"BD",X"F6",X"1F",X"D6",X"EC",X"26",X"0F",X"96",X"BD",X"26",X"08",X"D6",X"EB",X"DA",X"ED", + X"DA",X"E7",X"26",X"03",X"1C",X"FE",X"39",X"1A",X"01",X"39",X"34",X"32",X"8E",X"C8",X"C8",X"BD", X"F2",X"F2",X"A6",X"E4",X"97",X"04",X"1F",X"20",X"BD",X"F3",X"12",X"C6",X"0C",X"AE",X"61",X"BD", X"F4",X"0E",X"35",X"B2",X"34",X"16",X"8E",X"CB",X"2B",X"86",X"0E",X"E6",X"84",X"27",X"07",X"30", X"05",X"4A",X"26",X"F7",X"20",X"1D",X"A6",X"E4",X"84",X"80",X"4C",X"A7",X"84",X"2A",X"02",X"0C", @@ -230,15 +230,15 @@ architecture prom of vectrex_exec_prom is X"0B",X"00",X"0C",X"00",X"0D",X"00",X"FF",X"ED",X"8F",X"FE",X"B6",X"00",X"19",X"01",X"19",X"00", X"19",X"01",X"32",X"00",X"19",X"01",X"19",X"00",X"19",X"06",X"19",X"05",X"19",X"00",X"80",X"FF", X"EE",X"DD",X"CC",X"BB",X"AA",X"99",X"88",X"77",X"77",X"77",X"77",X"77",X"77",X"77",X"77",X"C8", - X"A8",X"C8",X"AF",X"7F",X"A0",X"7F",X"10",X"C8",X"F9",X"C9",X"00",X"00",X"00",X"00",X"00",X"02", - X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"03",X"00",X"00",X"00",X"02",X"01",X"00",X"00",X"02", - X"03",X"00",X"00",X"01",X"03",X"00",X"00",X"02",X"02",X"00",X"00",X"01",X"01",X"00",X"00",X"03", - X"03",X"00",X"00",X"02",X"02",X"02",X"00",X"01",X"01",X"01",X"00",X"03",X"03",X"03",X"00",X"80", + X"A8",X"C8",X"AF",X"7F",X"A0",X"7F",X"10",X"C8",X"F9",X"C9",X"00",X"86",X"0C",X"A0",X"84",X"A0", + X"01",X"A0",X"02",X"A0",X"03",X"27",X"20",X"E6",X"84",X"CB",X"FD",X"C4",X"03",X"E7",X"84",X"C6", + X"FC",X"E9",X"01",X"C4",X"03",X"E7",X"01",X"C6",X"FC",X"E9",X"02",X"C4",X"03",X"E7",X"02",X"C6", + X"FC",X"E9",X"03",X"C4",X"03",X"E7",X"03",X"39",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", X"C8",X"40",X"3F",X"00",X"20",X"80",X"10",X"1F",X"3F",X"3F",X"00",X"BF",X"BF",X"BF",X"C0",X"20", X"48",X"08",X"F8",X"30",X"A8",X"10",X"D0",X"A0",X"BF",X"BF",X"00",X"3F",X"3F",X"48",X"20",X"80", X"00",X"B0",X"48",X"38",X"FB",X"38",X"80",X"28",X"30",X"48",X"80",X"80",X"45",X"F0",X"28",X"7F", X"3F",X"BF",X"A5",X"00",X"D0",X"60",X"20",X"28",X"B8",X"40",X"15",X"80",X"40",X"F8",X"40",X"18", - X"FA",X"38",X"E0",X"C8",X"4D",X"49",X"4E",X"45",X"20",X"46",X"49",X"45",X"4C",X"44",X"80",X"FA", + X"FA",X"38",X"E0",X"C0",X"4D",X"49",X"4E",X"45",X"20",X"46",X"49",X"45",X"4C",X"44",X"80",X"FA", X"38",X"E0",X"D8",X"47",X"41",X"4D",X"45",X"20",X"4F",X"56",X"45",X"52",X"80",X"00",X"10",X"00", X"FF",X"20",X"A0",X"FF",X"C0",X"40",X"FF",X"90",X"20",X"FF",X"70",X"20",X"FF",X"50",X"50",X"FF", X"D0",X"90",X"01",X"00",X"20",X"00",X"FF",X"30",X"B0",X"FF",X"B0",X"30",X"FF",X"B0",X"D0",X"FF", @@ -264,10 +264,10 @@ architecture prom of vectrex_exec_prom is X"FF",X"F0",X"F8",X"01",X"FF",X"00",X"D8",X"FF",X"E8",X"08",X"FF",X"00",X"40",X"FF",X"18",X"08", X"FF",X"00",X"D8",X"00",X"08",X"E0",X"FF",X"10",X"00",X"FF",X"00",X"40",X"FF",X"F0",X"00",X"FF", X"00",X"C0",X"01",X"00",X"18",X"00",X"FF",X"00",X"20",X"FF",X"C8",X"70",X"FF",X"10",X"A0",X"FF", - X"00",X"A0",X"FF",X"EC",X"A4",X"FF",X"39",X"6D",X"FF",X"00",X"20",X"01",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"A0",X"FF",X"EC",X"A4",X"FF",X"39",X"6D",X"FF",X"00",X"20",X"01",X"7F",X"C8",X"25",X"7F", + X"C8",X"26",X"7F",X"C8",X"3B",X"7E",X"F0",X"1C",X"B6",X"C8",X"D9",X"27",X"09",X"81",X"08",X"2F", + X"02",X"86",X"08",X"B7",X"C8",X"8F",X"39",X"BD",X"F1",X"BA",X"BD",X"F1",X"AF",X"96",X"0F",X"10", + X"26",X"00",X"79",X"7E",X"F0",X"1F",X"67",X"20",X"4D",X"42",X"20",X"80",X"00",X"00",X"00",X"00", X"10",X"CE",X"CB",X"EA",X"BD",X"F1",X"8B",X"CC",X"73",X"21",X"10",X"B3",X"CB",X"FE",X"27",X"5C", X"FD",X"CB",X"FE",X"7C",X"C8",X"3B",X"8E",X"CB",X"EB",X"BD",X"F8",X"4F",X"BD",X"F1",X"AF",X"DC", X"25",X"10",X"83",X"01",X"01",X"26",X"02",X"D7",X"56",X"57",X"C4",X"03",X"8E",X"F0",X"FD",X"E6", diff --git a/GCE - Vectrex_MiST/rtl/vectrex_mist.sv b/GCE - Vectrex_MiST/rtl/vectrex_mist.sv index a16fb6f5..f9a98b49 100644 --- a/GCE - Vectrex_MiST/rtl/vectrex_mist.sv +++ b/GCE - Vectrex_MiST/rtl/vectrex_mist.sv @@ -20,7 +20,13 @@ module vectrex_mist `include "rtl\build_id.v" localparam CONF_STR = { - "Vectrex;BINVEC;", + "Vectrex;BINVECROM;", + "O2,Show Frame,No,Yes;", + "O3,Skip Logo,No,Yes;", +// "O23,Phosphor persistance,1,2,3,4;", +// "O8,Overburn,No,Yes;", + + "T6,Reset;", "V,v1.00.",`BUILD_DATE }; @@ -28,13 +34,13 @@ localparam CONF_STR = { wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; -wire [7:0] kbjoy; +wire [15:0] kbjoy; wire [7:0] joystick_0; wire [7:0] joystick_1; wire ypbpr; wire ps2_kbd_clk, ps2_kbd_data; -wire [7:0] pot_x; -wire [7:0] pot_y; +wire [7:0] pot_x_1, pot_x_2; +wire [7:0] pot_y_1, pot_y_2; wire [9:0] audio; wire hs, vs, cs; wire [3:0] r, g, b; @@ -51,29 +57,39 @@ wire [7:0] ioctl_dout; assign LED = !ioctl_downl; -wire clk_25, clk_12p5, clk_6p25, cpu_clock; +wire clk_24, clk_12, clk_6; wire pll_locked; -always @(clk_6p25)begin - pot_x = 8'h00; - pot_y = 8'h00; - if (joystick_0[3] | joystick_1[3] | kbjoy[3]) pot_y = 8'h7F; - if (joystick_0[2] | joystick_1[2] | kbjoy[2]) pot_y = 8'h80; - if (joystick_0[1] | joystick_1[1] | kbjoy[1]) pot_x = 8'h80; - if (joystick_0[0] | joystick_1[0] | kbjoy[0]) pot_x = 8'h7F; +always @(clk_6)begin + pot_x_1 = 8'h00; + pot_y_1 = 8'h00; + pot_x_2 = 8'h00; + pot_y_2 = 8'h00; + // + if (joystick_0[1] | kbjoy[1]) pot_x_2 = 8'h80; + if (joystick_0[0] | kbjoy[0]) pot_x_2 = 8'h7F; + + if (joystick_0[3] | kbjoy[3]) pot_y_2 = 8'h7F; + if (joystick_0[2] | kbjoy[2]) pot_y_2 = 8'h80; + //Player2 + if (joystick_1[1] | kbjoy[9]) pot_x_1 = 8'h80; + if (joystick_1[0] | kbjoy[8]) pot_x_1 = 8'h7F; + + if (joystick_1[3] | kbjoy[11]) pot_y_1 = 8'h7F; + if (joystick_1[2] | kbjoy[10]) pot_y_1 = 8'h80; end pll pll ( .inclk0 ( CLOCK_27 ), .areset ( 0 ), - .c0 ( clk_25 ), - .c1 ( clk_12p5 ), - .c2 ( clk_6p25 ), + .c0 ( clk_24 ), + .c1 ( clk_12 ), + .c2 ( clk_6 ), .locked ( pll_locked ) ); card card ( - .clock ( clk_25 ), + .clock ( clk_24 ), .address ( ioctl_downl ? ioctl_addr : cart_addr), .data ( ioctl_dout ), .rden ( !ioctl_downl && cart_rd), @@ -81,56 +97,86 @@ card card ( .q ( cart_do ) ); + wire reset = (status[0] | status[6] | buttons[1] | ioctl_downl | second_reset); + +reg second_reset = 0; +always @(posedge clk_24) begin + integer timeout = 0; + + if(ioctl_downl && status[3]) timeout <= 5000000; + else begin + if(!timeout) second_reset <= 0; + else begin + timeout <= timeout - 1; + if(timeout < 1000) second_reset <= 1; + end + end +end + vectrex vectrex ( - .clock_24 ( clk_25 ), - .clock_12 ( clk_12p5 ), - .cpu_clock_o ( cpu_clock ), - .reset ( status[0] | status[6] | buttons[1] | ioctl_downl), - .video_r ( r ), - .video_g ( g ), - .video_b ( b ), + .clock_24 ( clk_24 ), + .clock_12 ( clk_12 ), + .reset ( reset ), + .video_r ( rr ), + .video_g ( gg ), + .video_b ( bb ), .video_csync ( cs ), .video_blankn ( blankn ), .video_hs ( hs ), .video_vs ( vs ), + .frame ( frame_line ), .audio_out ( audio ), .cart_addr ( cart_addr ), .cart_do ( cart_do ), .cart_rd ( cart_rd ), - .btn11 ( joystick_0[4] | joystick_1[4] | kbjoy[4]), - .btn12 ( joystick_0[5] | joystick_1[5] | kbjoy[5]), - .btn13 ( kbjoy[6] ), - .btn14 ( kbjoy[7] ), - .pot_x_1 ( pot_x ), - .pot_y_1 ( pot_y ), - .btn21 ( joystick_0[4] | joystick_1[4] | kbjoy[4]), - .btn22 ( joystick_0[5] | joystick_1[5] | kbjoy[5]), - .btn23 ( kbjoy[6] ), - .btn24 ( kbjoy[7] ), - .pot_x_2 ( pot_x ), - .pot_y_2 ( pot_y ), + .btn11 ( joystick_0[4] | kbjoy[4]), + .btn12 ( joystick_0[5] | kbjoy[5]), + .btn13 ( joystick_0[6] | kbjoy[6]), + .btn14 ( joystick_0[7] | kbjoy[7]), + .pot_x_1 ( pot_x_1 ), + .pot_y_1 ( pot_y_1 ), + .btn21 ( joystick_1[4] | kbjoy[12]), + .btn22 ( joystick_1[5] | kbjoy[13]), + .btn23 ( joystick_1[6] | kbjoy[14]), + .btn24 ( joystick_1[7] | kbjoy[15]), + .pot_x_2 ( pot_x_2 ), + .pot_y_2 ( pot_y_2 ), .leds ( ), .dbg_cpu_addr ( ) ); + + // .pot_x_1(joya_0[7:0] ? joya_0[7:0] : {joystick_0[1], {7{joystick_0[0]}}}), + //.pot_y_1(joya_0[15:8] ? ~joya_0[15:8] : {joystick_0[2], {7{joystick_0[3]}}}), + + // .pot_x_2(joya_1[7:0] ? joya_1[7:0] : {joystick_1[1], {7{joystick_1[0]}}}), + //.pot_y_2(joya_1[15:8] ? ~joya_1[15:8] : {joystick_1[2], {7{joystick_1[3]}}}) + dac dac ( - .clk_i ( clk_25 ), + .clk_i ( clk_24 ), .res_n_i ( 1 ), .dac_i ( audio ), .dac_o ( AUDIO_L ) ); assign AUDIO_R = AUDIO_L; +wire frame_line; +wire [3:0] rr,gg,bb; + + assign r = status[2] & frame_line ? 4'h40 : rr; + assign g = status[2] & frame_line ? 4'h00 : gg; + assign b = status[2] & frame_line ? 4'h00 : bb; + video_mixer #(.LINE_LENGTH(640), .HALF_DEPTH(1)) video_mixer ( - .clk_sys ( clk_25 ), - .ce_pix ( clk_6p25 ), - .ce_pix_actual ( clk_6p25 ), + .clk_sys ( clk_24 ), + .ce_pix ( clk_6 ), + .ce_pix_actual ( clk_6 ), .SPI_SCK ( SPI_SCK ), .SPI_SS3 ( SPI_SS3 ), .SPI_DI ( SPI_DI ), - .R ( blankn ? r : "0000"), - .G ( blankn ? g : "0000"), - .B ( blankn ? b : "0000"), + .R ( blankn ? r : "0000"), + .G ( blankn ? g : "0000"), + .B ( blankn ? b : "0000"), .HSync ( hs ), .VSync ( vs ), .VGA_R ( VGA_R ), @@ -145,7 +191,7 @@ video_mixer #(.LINE_LENGTH(640), .HALF_DEPTH(1)) video_mixer ( ); mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io ( - .clk_sys ( clk_25 ), + .clk_sys ( clk_24 ), .conf_str ( CONF_STR ), .SPI_SCK ( SPI_SCK ), .CONF_DATA0 ( CONF_DATA0 ), @@ -168,7 +214,7 @@ mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io ( ); keyboard keyboard ( - .clk ( clk_25 ), + .clk ( clk_24 ), .reset ( ), .ps2_kbd_clk ( ps2_kbd_clk ), .ps2_kbd_data ( ps2_kbd_data ), diff --git a/GCE - Vectrex_MiST/rtl/ym2149.sv b/GCE - Vectrex_MiST/rtl/ym2149.sv new file mode 100644 index 00000000..b057a768 --- /dev/null +++ b/GCE - Vectrex_MiST/rtl/ym2149.sv @@ -0,0 +1,304 @@ + + +module ym2149 +( + input CLK, // Global clock + input CE, // PSG Clock enable + input RESET, // Chip RESET (set all Registers to '0', active hi) + input BDIR, // Bus Direction (0 - read , 1 - write) + input BC, // Bus control + input [7:0] DI, // Data In + output [7:0] DO, // Data Out + output [7:0] CHANNEL_A, // PSG Output channel A + output [7:0] CHANNEL_B, // PSG Output channel B + output [7:0] CHANNEL_C, // PSG Output channel C + + input SEL, + input MODE, + output [5:0] ACTIVE, + + input [7:0] IOA_in, + output [7:0] IOA_out, + + input [7:0] IOB_in, + output [7:0] IOB_out +); + +assign ACTIVE = ~ymreg[7][5:0]; + +assign IOA_out = ymreg[14]; +assign IOB_out = ymreg[15]; + +reg ena_div; +reg ena_div_noise; +reg [3:0] addr; +reg [7:0] ymreg[16]; +reg env_ena; +reg [4:0] env_vol; + +wire [7:0] volTableAy[16] = + '{8'h00, 8'h03, 8'h04, 8'h06, + 8'h0a, 8'h0f, 8'h15, 8'h22, + 8'h28, 8'h41, 8'h5b, 8'h72, + 8'h90, 8'hb5, 8'hd7, 8'hff + }; + +wire [7:0] volTableYm[32] = + '{8'h00, 8'h01, 8'h01, 8'h02, + 8'h02, 8'h03, 8'h03, 8'h04, + 8'h06, 8'h07, 8'h09, 8'h0a, + 8'h0c, 8'h0e, 8'h11, 8'h13, + 8'h17, 8'h1b, 8'h20, 8'h25, + 8'h2c, 8'h35, 8'h3e, 8'h47, + 8'h54, 8'h66, 8'h77, 8'h88, + 8'ha1, 8'hc0, 8'he0, 8'hff + }; + +// Read from AY +assign DO = dout; +reg [7:0] dout; +always_comb begin + case(addr) + 0: dout = ymreg[0]; + 1: dout = {4'b0000, ymreg[1][3:0]}; + 2: dout = ymreg[2]; + 3: dout = {4'b0000, ymreg[3][3:0]}; + 4: dout = ymreg[4]; + 5: dout = {4'b0000, ymreg[5][3:0]}; + 6: dout = {3'b000, ymreg[6][4:0]}; + 7: dout = ymreg[7]; + 8: dout = {3'b000, ymreg[8][4:0]}; + 9: dout = {3'b000, ymreg[9][4:0]}; + 10: dout = {3'b000, ymreg[10][4:0]}; + 11: dout = ymreg[11]; + 12: dout = ymreg[12]; + 13: dout = {4'b0000, ymreg[13][3:0]}; + 14: dout = (ymreg[7][6] ? ymreg[14] : IOA_in); + 15: dout = (ymreg[7][7] ? ymreg[15] : IOB_in); + endcase +end + +// p_divider +always @(posedge CLK) begin + reg [3:0] cnt_div; + reg noise_div; + + if(CE) begin + ena_div <= 0; + ena_div_noise <= 0; + if(!cnt_div) begin + cnt_div <= {SEL, 3'b111}; + ena_div <= 1; + + noise_div <= (~noise_div); + if (noise_div) ena_div_noise <= 1; + end else begin + cnt_div <= cnt_div - 1'b1; + end + end +end + + +reg noise_gen_op; + +// p_noise_gen +always @(posedge CLK) begin + reg [16:0] poly17; + reg [4:0] noise_gen_cnt; + + if(CE) begin + if (ena_div_noise) begin + if(ymreg[6][4:0]) begin + if (noise_gen_cnt >= ymreg[6][4:0] - 1'd1) begin + noise_gen_cnt <= 0; + poly17 <= {(poly17[0] ^ poly17[2] ^ !poly17), poly17[16:1]}; + end else begin + noise_gen_cnt <= noise_gen_cnt + 1'd1; + end + noise_gen_op <= poly17[0]; + end else begin + noise_gen_op <= 0; + noise_gen_cnt <= 0; + end + end + end +end + +wire [11:0] tone_gen_freq[1:3]; +assign tone_gen_freq[1] = {ymreg[1][3:0], ymreg[0]}; +assign tone_gen_freq[2] = {ymreg[3][3:0], ymreg[2]}; +assign tone_gen_freq[3] = {ymreg[5][3:0], ymreg[4]}; + +reg [3:1] tone_gen_op; + +//p_tone_gens +always @(posedge CLK) begin + integer i; + reg [11:0] tone_gen_cnt[1:3]; + + if(CE) begin + // looks like real chips count up - we need to get the Exact behaviour .. + + for (i = 1; i <= 3; i = i + 1) begin + if(ena_div) begin + if (tone_gen_freq[i]) begin + if (tone_gen_cnt[i] >= (tone_gen_freq[i] - 1'd1)) begin + tone_gen_cnt[i] <= 0; + tone_gen_op[i] <= ~tone_gen_op[i]; + end else begin + tone_gen_cnt[i] <= tone_gen_cnt[i] + 1'd1; + end + end else begin + tone_gen_op[i] <= 0; + tone_gen_cnt[i] <= 0; + end + end + end + end +end + +wire [15:0] env_gen_comp = {ymreg[12], ymreg[11]} ? {ymreg[12], ymreg[11]} - 1'd1 : 16'd0; + +//p_envelope_freq +always @(posedge CLK) begin + reg [15:0] env_gen_cnt; + + if(CE) begin + env_ena <= 0; + if(ena_div) begin + if (env_gen_cnt >= env_gen_comp) begin + env_gen_cnt <= 0; + env_ena <= 1; + end else begin + env_gen_cnt <= (env_gen_cnt + 1'd1); + end + end + end +end + +wire is_bot = (env_vol == 5'b00000); +wire is_bot_p1 = (env_vol == 5'b00001); +wire is_top_m1 = (env_vol == 5'b11110); +wire is_top = (env_vol == 5'b11111); + +always @(posedge CLK) begin + reg old_BDIR; + reg env_reset; + reg env_hold; + reg env_inc; + + // envelope shapes + // C AtAlH + // 0 0 x x \___ + // + // 0 1 x x /___ + // + // 1 0 0 0 \\\\ + // + // 1 0 0 1 \___ + // + // 1 0 1 0 \/\/ + // ___ + // 1 0 1 1 \ + // + // 1 1 0 0 //// + // ___ + // 1 1 0 1 / + // + // 1 1 1 0 /\/\ + // + // 1 1 1 1 /___ + + if(RESET) begin + ymreg[0] <= 0; + ymreg[1] <= 0; + ymreg[2] <= 0; + ymreg[3] <= 0; + ymreg[4] <= 0; + ymreg[5] <= 0; + ymreg[6] <= 0; + ymreg[7] <= 255; + ymreg[8] <= 0; + ymreg[9] <= 0; + ymreg[10] <= 0; + ymreg[11] <= 0; + ymreg[12] <= 0; + ymreg[13] <= 0; + ymreg[14] <= 0; + ymreg[15] <= 0; + addr <= 0; + env_vol <= 0; + end else begin + old_BDIR <= BDIR; + if(~old_BDIR & BDIR) begin + if(BC) addr <= DI[3:0]; + else begin + ymreg[addr] <= DI; + env_reset <= (addr == 13); + end + end + end + + if(CE) begin + if(env_reset) begin + env_reset <= 0; + // load initial state + if(!ymreg[13][2]) begin // attack + env_vol <= 5'b11111; + env_inc <= 0; // -1 + end else begin + env_vol <= 5'b00000; + env_inc <= 1; // +1 + end + env_hold <= 0; + end else begin + + if (env_ena) begin + if (!env_hold) begin + if (env_inc) env_vol <= (env_vol + 5'b00001); + else env_vol <= (env_vol + 5'b11111); + end + + // envelope shape control. + if(!ymreg[13][3]) begin + if(!env_inc) begin // down + if(is_bot_p1) env_hold <= 1; + end else if (is_top) env_hold <= 1; + end else if(ymreg[13][0]) begin // hold = 1 + if(!env_inc) begin // down + if(ymreg[13][1]) begin // alt + if(is_bot) env_hold <= 1; + end else if(is_bot_p1) env_hold <= 1; + end else if(ymreg[13][1]) begin // alt + if(is_top) env_hold <= 1; + end else if(is_top_m1) env_hold <= 1; + end else if(ymreg[13][1]) begin // alternate + if(env_inc == 1'b0) begin // down + if(is_bot_p1) env_hold <= 1; + if(is_bot) begin + env_hold <= 0; + env_inc <= 1; + end + end else begin + if(is_top_m1) env_hold <= 1; + if(is_top) begin + env_hold <= 0; + env_inc <= 0; + end + end + end + end + end + end +end + +wire [4:0] A = ~((ymreg[7][0] | tone_gen_op[1]) & (ymreg[7][3] | noise_gen_op)) ? 5'd0 : ymreg[8][4] ? env_vol[4:0] : { ymreg[8][3:0], ymreg[8][3]}; +wire [4:0] B = ~((ymreg[7][1] | tone_gen_op[2]) & (ymreg[7][4] | noise_gen_op)) ? 5'd0 : ymreg[9][4] ? env_vol[4:0] : { ymreg[9][3:0], ymreg[9][3]}; +wire [4:0] C = ~((ymreg[7][2] | tone_gen_op[3]) & (ymreg[7][5] | noise_gen_op)) ? 5'd0 : ymreg[10][4] ? env_vol[4:0] : {ymreg[10][3:0], ymreg[10][3]}; + +assign CHANNEL_A = MODE ? volTableAy[A[4:1]] : volTableYm[A]; +assign CHANNEL_B = MODE ? volTableAy[B[4:1]] : volTableYm[B]; +assign CHANNEL_C = MODE ? volTableAy[C[4:1]] : volTableYm[C]; + + +endmodule diff --git a/GCE - Vectrex_MiST/vectrex_MiST.qsf b/GCE - Vectrex_MiST/vectrex_MiST.qsf index 385fe152..6031a697 100644 --- a/GCE - Vectrex_MiST/vectrex_MiST.qsf +++ b/GCE - Vectrex_MiST/vectrex_MiST.qsf @@ -43,7 +43,6 @@ set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.1.0 set_global_assignment -name PROJECT_CREATION_TIME_DATE "17:45:13 JUNE 17,2016" set_global_assignment -name LAST_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name VHDL_FILE rtl/YM2149_linmix_sep.vhd set_global_assignment -name VHDL_FILE rtl/vectrex.vhd set_global_assignment -name VHDL_FILE rtl/m6522a.vhd set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd @@ -220,4 +219,7 @@ set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT EXTRA set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE AREA set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON set_global_assignment -name ENABLE_SIGNALTAP OFF +set_global_assignment -name VERILOG_FILE rtl/mc6809is.v +set_global_assignment -name VERILOG_FILE rtl/mc6809.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/ym2149.sv set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file