mirror of
https://github.com/hoglet67/AtomBusMon.git
synced 2025-08-15 15:27:23 +00:00
Z80: indicate NMI and INT cycles when single stepping
Change-Id: Iafef4059bd136dd9f3aebf2b03ab5ac186e035a6
This commit is contained in:
@@ -1333,6 +1333,7 @@ void doCmdContinue(char *params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void initialize() {
|
void initialize() {
|
||||||
|
PDC_DDR = 0;
|
||||||
CTRL_DDR = 255;
|
CTRL_DDR = 255;
|
||||||
STATUS_DDR = MUXSEL_MASK;
|
STATUS_DDR = MUXSEL_MASK;
|
||||||
MUX_DDR = 0;
|
MUX_DDR = 0;
|
||||||
|
@@ -46,6 +46,7 @@ void doCmdHelp(char *params);
|
|||||||
void doCmdIO(char *params);
|
void doCmdIO(char *params);
|
||||||
void doCmdList(char *params);
|
void doCmdList(char *params);
|
||||||
void doCmdMem(char *params);
|
void doCmdMem(char *params);
|
||||||
|
void doCmdNext(char *params);
|
||||||
void doCmdReadIO(char *params);
|
void doCmdReadIO(char *params);
|
||||||
void doCmdReadMem(char *params);
|
void doCmdReadMem(char *params);
|
||||||
void doCmdRegs(char *params);
|
void doCmdRegs(char *params);
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
#ifndef __DIS_DEFINES__
|
#ifndef __DIS_DEFINES__
|
||||||
#define __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);
|
unsigned int disassemble(unsigned int addr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -862,7 +862,13 @@ void disassem (unsigned int *ip) {
|
|||||||
|
|
||||||
unsigned int disassemble(unsigned int addr) {
|
unsigned int disassemble(unsigned int addr) {
|
||||||
log0("%04X : ", addr);
|
log0("%04X : ", addr);
|
||||||
disassem(&addr);
|
if (PDC_DIN & 0x80) {
|
||||||
|
log0("**NMI**");
|
||||||
|
} else if (PDC_DIN & 0x40) {
|
||||||
|
log0("**INT**");
|
||||||
|
} else {
|
||||||
|
disassem(&addr);
|
||||||
|
}
|
||||||
log0("\n");
|
log0("\n");
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
@@ -56,6 +56,9 @@ entity BusMonCore is
|
|||||||
-- unused in pure bus monitor mode
|
-- unused in pure bus monitor mode
|
||||||
Regs : in std_logic_vector(255 downto 0);
|
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
|
-- CPU Memory Read/Write
|
||||||
-- unused in pure bus monitor mode
|
-- unused in pure bus monitor mode
|
||||||
RdMemOut : out std_logic;
|
RdMemOut : out std_logic;
|
||||||
@@ -182,15 +185,7 @@ begin
|
|||||||
clk16M => clock_avr,
|
clk16M => clock_avr,
|
||||||
nrst => nrst_avr,
|
nrst => nrst_avr,
|
||||||
|
|
||||||
portain(0) => '0',
|
portain => PdcData,
|
||||||
portain(1) => '0',
|
|
||||||
portain(2) => '0',
|
|
||||||
portain(3) => '0',
|
|
||||||
portain(4) => '0',
|
|
||||||
portain(5) => '0',
|
|
||||||
portain(6) => '0',
|
|
||||||
portain(7) => '0',
|
|
||||||
|
|
||||||
portaout => open,
|
portaout => open,
|
||||||
|
|
||||||
-- Command Port
|
-- Command Port
|
||||||
|
@@ -117,6 +117,7 @@ entity T80 is
|
|||||||
MC : out std_logic_vector(2 downto 0);
|
MC : out std_logic_vector(2 downto 0);
|
||||||
TS : out std_logic_vector(2 downto 0);
|
TS : out std_logic_vector(2 downto 0);
|
||||||
IntCycle_n : out std_logic;
|
IntCycle_n : out std_logic;
|
||||||
|
NMICycle_n : out std_logic;
|
||||||
IntE : out std_logic;
|
IntE : out std_logic;
|
||||||
Stop : out std_logic;
|
Stop : out std_logic;
|
||||||
out0 : in std_logic := '0'; -- 0 => OUT(C),0, 1 => OUT(C),255
|
out0 : in std_logic := '0'; -- 0 => OUT(C),0, 1 => OUT(C),255
|
||||||
@@ -1170,6 +1171,7 @@ begin
|
|||||||
HALT_n <= not Halt_FF;
|
HALT_n <= not Halt_FF;
|
||||||
BUSAK_n <= not BusAck;
|
BUSAK_n <= not BusAck;
|
||||||
IntCycle_n <= not IntCycle;
|
IntCycle_n <= not IntCycle;
|
||||||
|
NMICycle_n <= not NMICycle;
|
||||||
IntE <= IntE_FF1;
|
IntE <= IntE_FF1;
|
||||||
IORQ <= IORQ_i;
|
IORQ <= IORQ_i;
|
||||||
Stop <= I_DJNZ;
|
Stop <= I_DJNZ;
|
||||||
|
@@ -103,6 +103,7 @@ package T80_Pack is
|
|||||||
MC : out std_logic_vector(2 downto 0);
|
MC : out std_logic_vector(2 downto 0);
|
||||||
TS : out std_logic_vector(2 downto 0);
|
TS : out std_logic_vector(2 downto 0);
|
||||||
IntCycle_n : out std_logic;
|
IntCycle_n : out std_logic;
|
||||||
|
NMICycle_n : out std_logic;
|
||||||
IntE : out std_logic;
|
IntE : out std_logic;
|
||||||
Stop : 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
|
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
|
||||||
|
@@ -72,8 +72,9 @@ entity T80a is
|
|||||||
);
|
);
|
||||||
port(
|
port(
|
||||||
-- Additions
|
-- Additions
|
||||||
TS : out std_logic_vector(2 downto 0);
|
TS : out std_logic_vector(2 downto 0);
|
||||||
Regs : out std_logic_vector(255 downto 0);
|
Regs : out std_logic_vector(255 downto 0);
|
||||||
|
PdcData : out std_logic_vector(7 downto 0);
|
||||||
-- Original Signals
|
-- Original Signals
|
||||||
RESET_n : in std_logic;
|
RESET_n : in std_logic;
|
||||||
CLK_n : in std_logic;
|
CLK_n : in std_logic;
|
||||||
@@ -101,6 +102,7 @@ architecture rtl of T80a is
|
|||||||
|
|
||||||
signal Reset_s : std_logic;
|
signal Reset_s : std_logic;
|
||||||
signal IntCycle_n : std_logic;
|
signal IntCycle_n : std_logic;
|
||||||
|
signal NMICycle_n : std_logic;
|
||||||
signal IORQ : std_logic;
|
signal IORQ : std_logic;
|
||||||
signal NoRead : std_logic;
|
signal NoRead : std_logic;
|
||||||
signal Write : std_logic;
|
signal Write : std_logic;
|
||||||
@@ -175,6 +177,7 @@ begin
|
|||||||
MC => MCycle,
|
MC => MCycle,
|
||||||
TS => TState,
|
TS => TState,
|
||||||
IntCycle_n => IntCycle_n,
|
IntCycle_n => IntCycle_n,
|
||||||
|
NMICycle_n => NMICycle_n,
|
||||||
REG => Regs(211 downto 0),
|
REG => Regs(211 downto 0),
|
||||||
DIRSet => '0',
|
DIRSet => '0',
|
||||||
DIR => (others => '0')
|
DIR => (others => '0')
|
||||||
@@ -297,4 +300,7 @@ begin
|
|||||||
end process;
|
end process;
|
||||||
|
|
||||||
TS <= TState;
|
TS <= TState;
|
||||||
|
|
||||||
|
PdcData <= (not NMICycle_n) & (not IntCycle_n) & "000000";
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
@@ -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 skipNextOpcode : std_logic;
|
||||||
|
|
||||||
signal Regs : std_logic_vector(255 downto 0);
|
signal Regs : std_logic_vector(255 downto 0);
|
||||||
|
signal PdcData : std_logic_vector(7 downto 0);
|
||||||
signal io_not_mem : std_logic;
|
signal io_not_mem : std_logic;
|
||||||
signal io_rd : std_logic;
|
signal io_rd : std_logic;
|
||||||
signal io_wr : std_logic;
|
signal io_wr : std_logic;
|
||||||
@@ -249,6 +250,7 @@ begin
|
|||||||
tdin => tdin,
|
tdin => tdin,
|
||||||
tcclk => tcclk,
|
tcclk => tcclk,
|
||||||
Regs => Regs,
|
Regs => Regs,
|
||||||
|
PdcData => PdcData,
|
||||||
RdMemOut => memory_rd,
|
RdMemOut => memory_rd,
|
||||||
WrMemOut => memory_wr,
|
WrMemOut => memory_wr,
|
||||||
RdIOOut => io_rd,
|
RdIOOut => io_rd,
|
||||||
@@ -270,6 +272,7 @@ begin
|
|||||||
inst_t80: entity work.T80a port map (
|
inst_t80: entity work.T80a port map (
|
||||||
TS => TState,
|
TS => TState,
|
||||||
Regs => Regs,
|
Regs => Regs,
|
||||||
|
PdcData => PdcData,
|
||||||
RESET_n => RESET_n_int,
|
RESET_n => RESET_n_int,
|
||||||
CLK_n => cpu_clk,
|
CLK_n => cpu_clk,
|
||||||
CEN => cpu_clken,
|
CEN => cpu_clken,
|
||||||
|
Reference in New Issue
Block a user