diff --git a/firmware/AtomBusMon.c b/firmware/AtomBusMon.c index 822d758..75142d3 100644 --- a/firmware/AtomBusMon.c +++ b/firmware/AtomBusMon.c @@ -1333,6 +1333,7 @@ void doCmdContinue(char *params) { } void initialize() { + PDC_DDR = 0; CTRL_DDR = 255; STATUS_DDR = MUXSEL_MASK; MUX_DDR = 0; diff --git a/firmware/AtomBusMon.h b/firmware/AtomBusMon.h index c37b160..c6c69a4 100644 --- a/firmware/AtomBusMon.h +++ b/firmware/AtomBusMon.h @@ -46,6 +46,7 @@ void doCmdHelp(char *params); void doCmdIO(char *params); void doCmdList(char *params); void doCmdMem(char *params); +void doCmdNext(char *params); void doCmdReadIO(char *params); void doCmdReadMem(char *params); void doCmdRegs(char *params); diff --git a/firmware/dis.h b/firmware/dis.h index 414f453..c8c564c 100644 --- a/firmware/dis.h +++ b/firmware/dis.h @@ -1,6 +1,11 @@ #ifndef __DIS_DEFINES__ #define __DIS_DEFINES__ +// The processor dependent config/status port +#define PDC_PORT PORTA +#define PDC_DDR DDRA +#define PDC_DIN PINA + unsigned int disassemble(unsigned int addr); #endif diff --git a/firmware/disz80.c b/firmware/disz80.c index b645515..b2752ef 100644 --- a/firmware/disz80.c +++ b/firmware/disz80.c @@ -862,7 +862,13 @@ void disassem (unsigned int *ip) { unsigned int disassemble(unsigned int addr) { log0("%04X : ", addr); - disassem(&addr); + if (PDC_DIN & 0x80) { + log0("**NMI**"); + } else if (PDC_DIN & 0x40) { + log0("**INT**"); + } else { + disassem(&addr); + } log0("\n"); return addr; } diff --git a/src/BusMonCore.vhd b/src/BusMonCore.vhd index 3ed9a07..199c526 100644 --- a/src/BusMonCore.vhd +++ b/src/BusMonCore.vhd @@ -56,6 +56,9 @@ entity BusMonCore is -- unused in pure bus monitor mode Regs : in std_logic_vector(255 downto 0); + -- CPI Specific data + PdcData : in std_logic_vector(7 downto 0) := x"00"; + -- CPU Memory Read/Write -- unused in pure bus monitor mode RdMemOut : out std_logic; @@ -182,15 +185,7 @@ begin clk16M => clock_avr, nrst => nrst_avr, - portain(0) => '0', - portain(1) => '0', - portain(2) => '0', - portain(3) => '0', - portain(4) => '0', - portain(5) => '0', - portain(6) => '0', - portain(7) => '0', - + portain => PdcData, portaout => open, -- Command Port diff --git a/src/T80/T80.vhd b/src/T80/T80.vhd index 83a301b..997333b 100644 --- a/src/T80/T80.vhd +++ b/src/T80/T80.vhd @@ -117,6 +117,7 @@ entity T80 is MC : out std_logic_vector(2 downto 0); TS : out std_logic_vector(2 downto 0); IntCycle_n : out std_logic; + NMICycle_n : out std_logic; IntE : out std_logic; Stop : out std_logic; out0 : in std_logic := '0'; -- 0 => OUT(C),0, 1 => OUT(C),255 @@ -1170,6 +1171,7 @@ begin HALT_n <= not Halt_FF; BUSAK_n <= not BusAck; IntCycle_n <= not IntCycle; + NMICycle_n <= not NMICycle; IntE <= IntE_FF1; IORQ <= IORQ_i; Stop <= I_DJNZ; diff --git a/src/T80/T80_Pack.vhd b/src/T80/T80_Pack.vhd index cb1ffe1..0b2cfa9 100644 --- a/src/T80/T80_Pack.vhd +++ b/src/T80/T80_Pack.vhd @@ -103,6 +103,7 @@ package T80_Pack is MC : out std_logic_vector(2 downto 0); TS : out std_logic_vector(2 downto 0); IntCycle_n : out std_logic; + NMICycle_n : out std_logic; IntE : out std_logic; Stop : out std_logic; REG : out std_logic_vector(211 downto 0); -- IFF2, IFF1, IM, IY, HL', DE', BC', IX, HL, DE, BC, PC, SP, R, I, F', A', F, A diff --git a/src/T80/T80a.vhd b/src/T80/T80a.vhd index bf32f0d..bc0f518 100644 --- a/src/T80/T80a.vhd +++ b/src/T80/T80a.vhd @@ -72,8 +72,9 @@ entity T80a is ); port( -- Additions - TS : out std_logic_vector(2 downto 0); - Regs : out std_logic_vector(255 downto 0); + TS : out std_logic_vector(2 downto 0); + Regs : out std_logic_vector(255 downto 0); + PdcData : out std_logic_vector(7 downto 0); -- Original Signals RESET_n : in std_logic; CLK_n : in std_logic; @@ -101,6 +102,7 @@ architecture rtl of T80a is signal Reset_s : std_logic; signal IntCycle_n : std_logic; + signal NMICycle_n : std_logic; signal IORQ : std_logic; signal NoRead : std_logic; signal Write : std_logic; @@ -175,6 +177,7 @@ begin MC => MCycle, TS => TState, IntCycle_n => IntCycle_n, + NMICycle_n => NMICycle_n, REG => Regs(211 downto 0), DIRSet => '0', DIR => (others => '0') @@ -297,4 +300,7 @@ begin end process; TS <= TState; + + PdcData <= (not NMICycle_n) & (not IntCycle_n) & "000000"; + end; diff --git a/src/Z80CpuMon.vhd b/src/Z80CpuMon.vhd index ba126c8..502a51b 100644 --- a/src/Z80CpuMon.vhd +++ b/src/Z80CpuMon.vhd @@ -121,6 +121,7 @@ type state_type is (idle, nop_t1, nop_t2, nop_t3, nop_t4, rd_t1, rd_wa, rd_t2, r signal skipNextOpcode : std_logic; signal Regs : std_logic_vector(255 downto 0); + signal PdcData : std_logic_vector(7 downto 0); signal io_not_mem : std_logic; signal io_rd : std_logic; signal io_wr : std_logic; @@ -249,6 +250,7 @@ begin tdin => tdin, tcclk => tcclk, Regs => Regs, + PdcData => PdcData, RdMemOut => memory_rd, WrMemOut => memory_wr, RdIOOut => io_rd, @@ -270,6 +272,7 @@ begin inst_t80: entity work.T80a port map ( TS => TState, Regs => Regs, + PdcData => PdcData, RESET_n => RESET_n_int, CLK_n => cpu_clk, CEN => cpu_clken,