mirror of
https://github.com/holub/mame
synced 2025-05-28 08:33:05 +03:00
f2mc16: start populating the core (nw)
This commit is contained in:
parent
2cb7842e56
commit
c3a0f06caf
@ -20,10 +20,14 @@ DEFINE_DEVICE_TYPE(F2MC16, f2mc16_device, "f2mc16", "Fujitsu Micro F2MC-16")
|
||||
// memory accessors
|
||||
#define read_8(addr) m_program->read_byte(addr)
|
||||
#define read_16(addr) m_program->read_word(addr)
|
||||
#define read_32(addr) m_program->read_dword(addr)
|
||||
#define write_8(addr, data) m_program->write_byte(addr, data)
|
||||
#define write_16(addr, data) m_program->write_word(addr, data)
|
||||
#define write_32(addr, data) m_program->write_dword(addr, data)
|
||||
|
||||
#define read_8_vector(addr) m_program->read_byte(addr)
|
||||
#define read_16_vector(addr) m_program->read_word(addr)
|
||||
#define read_32_vector(addr) m_program->read_dword(addr)
|
||||
|
||||
std::unique_ptr<util::disasm_interface> f2mc16_device::create_disassembler()
|
||||
{
|
||||
@ -53,26 +57,67 @@ void f2mc16_device::device_start()
|
||||
|
||||
set_icountptr(m_icount);
|
||||
|
||||
state_add(F2MC16_PC, "PC", m_pc);
|
||||
state_add(STATE_GENPC, "GENPC", m_pc).callimport().noshow();
|
||||
state_add(STATE_GENPCBASE, "CURPC", m_pc).callimport().noshow();
|
||||
state_add(F2MC16_ACC, "AL", m_acc);
|
||||
state_add(F2MC16_PCB, "PCB", m_pcb);
|
||||
state_add(F2MC16_PC, "PC", m_pc).formatstr("%04X");
|
||||
state_add(STATE_GENPC, "GENPC", m_temp).callimport().callexport().noshow();
|
||||
state_add(STATE_GENPCBASE, "CURPC", m_temp).callimport().callexport().noshow();
|
||||
state_add(F2MC16_PS, "PS", m_ps).formatstr("%04X");
|
||||
state_add(F2MC16_PCB, "DTB", m_dtb).formatstr("%02X");
|
||||
state_add(F2MC16_PCB, "ADB", m_adb).formatstr("%02X");
|
||||
state_add(F2MC16_ACC, "AL", m_acc).formatstr("%08X");
|
||||
state_add(F2MC16_USB, "USB", m_usb).formatstr("%02X");
|
||||
state_add(F2MC16_USP, "USP", m_usp).formatstr("%04X");
|
||||
state_add(F2MC16_SSB, "SSB", m_ssb).formatstr("%02X");
|
||||
state_add(F2MC16_SSP, "SSP", m_ssp).formatstr("%04X");
|
||||
state_add(F2MC16_DPR, "DPR", m_dpr).formatstr("%02X");
|
||||
|
||||
set_icountptr(m_icount);
|
||||
}
|
||||
|
||||
void f2mc16_device::device_reset()
|
||||
{
|
||||
m_pc = (read_8_vector(0xffffde) << 16) | (read_8_vector(0xffffdd) << 8) | read_8_vector(0xffffdc);
|
||||
printf("RESET: PC=%x\n", m_pc);
|
||||
m_usb = m_ssb = 0;
|
||||
m_usp = m_ssp = 0;
|
||||
m_ps = 0;
|
||||
m_acc = 0;
|
||||
m_dpr = m_dtb = 0;
|
||||
|
||||
m_pc = read_16_vector(0xffffdc);
|
||||
m_pcb = read_8_vector(0xffffde);
|
||||
}
|
||||
|
||||
void f2mc16_device::state_import(const device_state_entry &entry)
|
||||
{
|
||||
switch (entry.index())
|
||||
{
|
||||
case STATE_GENPC:
|
||||
case STATE_GENPCBASE:
|
||||
m_pc = (m_temp & 0xffff);
|
||||
m_pcb = (m_temp >> 16) & 0xff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void f2mc16_device::state_export(const device_state_entry &entry)
|
||||
{
|
||||
switch (entry.index())
|
||||
{
|
||||
case STATE_GENPC:
|
||||
case STATE_GENPCBASE:
|
||||
m_temp = m_pc;
|
||||
m_temp |= (m_pcb << 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void f2mc16_device::execute_run()
|
||||
{
|
||||
debugger_instruction_hook(m_pc);
|
||||
debugger_instruction_hook((m_pcb<<16) | m_pc);
|
||||
printf("Debug hook: %06x\n", (m_pcb<<16) | m_pc);
|
||||
|
||||
m_icount = 0;
|
||||
}
|
||||
|
||||
void f2mc16_device::execute_set_input(int inputnum, int state)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
@ -16,18 +16,11 @@ class f2mc16_device : public cpu_device
|
||||
public:
|
||||
enum
|
||||
{
|
||||
F2MC16_PC,
|
||||
F2MC16_S,
|
||||
F2MC16_SP,
|
||||
F2MC16_ACC,
|
||||
F2MC16_R0,
|
||||
F2MC16_R1,
|
||||
F2MC16_R2,
|
||||
F2MC16_R3,
|
||||
F2MC16_R4,
|
||||
F2MC16_R5,
|
||||
F2MC16_R6,
|
||||
F2MC16_R7
|
||||
F2MC16_PC, F2MC16_PS, F2MC16_USP, F2MC16_SSP, F2MC16_ACC,
|
||||
F2MC16_PCB, F2MC16_DTB, F2MC16_USB, F2MC16_SSB, F2MC16_ADB, F2MC16_DPR,
|
||||
F2MC16_RW0, F2MC16_RW1, F2MC16_RW2, F2MC16_RW3,
|
||||
F2MC16_RW4, F2MC16_RW5, F2MC16_RW6, F2MC16_RW7,
|
||||
F2MC16_RL0, F2MC16_RL1, F2MC16_RL2, F2MC16_RL3
|
||||
};
|
||||
|
||||
// construction/destruction
|
||||
@ -40,6 +33,9 @@ protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
virtual void state_import(const device_state_entry &entry) override;
|
||||
virtual void state_export(const device_state_entry &entry) override;
|
||||
|
||||
// device_execute_interface overrides
|
||||
virtual void execute_run() override;
|
||||
virtual void execute_set_input(int inputnum, int state) override;
|
||||
@ -54,8 +50,9 @@ private:
|
||||
address_space_config m_program_config;
|
||||
address_space *m_program;
|
||||
|
||||
u32 m_pc;
|
||||
u8 m_acc;
|
||||
u16 m_pc, m_usp, m_ssp, m_ps;
|
||||
u8 m_pcb, m_dtb, m_usb, m_ssb, m_adb, m_dpr;
|
||||
u32 m_acc, m_temp;
|
||||
s32 m_icount;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user