2 TOSHIBA PASOPIA 7 Emulator 'EmuPIA7'
4 Author : Takeda.Toshiya
13 void IOTRAP::initialize()
15 nmi_mask = pasopia = false;
18 void IOTRAP::write_io8(uint32_t addr, uint32_t data)
26 // trap : 8255-2 Port B, bit 1
27 d_pio2->write_signal(SIG_I8255_PORT_B, 2, 2);
30 d_cpu->write_signal(SIG_CPU_NMI, 1, 1);
37 uint32_t IOTRAP::read_io8(uint32_t addr)
45 // trap : 8255-2 Port B, bit 1
46 d_pio2->write_signal(SIG_I8255_PORT_B, 2, 2);
49 d_cpu->write_signal(SIG_CPU_NMI, 1, 1);
57 void IOTRAP::write_signal(int id, uint32_t data, uint32_t mask)
59 if(id == SIG_IOTRAP_I8255_2_A) {
60 // reset nmi : 8255-2 Port B, bit 1+2
62 d_pio2->write_signal(SIG_I8255_PORT_B, 0, 6);
64 } else if(id == SIG_IOTRAP_I8255_2_C) {
65 nmi_mask = ((data & 0x80) != 0);
66 pasopia = ((data & 0x40) != 0);
70 void IOTRAP::do_reset()
72 // reset : 8255-2 Port B, bit 2
73 d_pio2->write_signal(SIG_I8255_PORT_B, 4, 4);
76 d_cpu->write_signal(SIG_CPU_NMI, 1, 1);
80 #define STATE_VERSION 1
82 #include "../../statesub.h"
84 void IOTRAP::decl_state()
86 enter_decl_state(STATE_VERSION);
88 DECL_STATE_ENTRY_BOOL(nmi_mask);
89 DECL_STATE_ENTRY_BOOL(pasopia);
94 void IOTRAP::save_state(FILEIO* state_fio)
96 if(state_entry != NULL) {
97 state_entry->save_state(state_fio);
99 // state_fio->FputUint32(STATE_VERSION);
100 // state_fio->FputInt32(this_device_id);
102 // state_fio->FputBool(nmi_mask);
103 // state_fio->FputBool(pasopia);
106 bool IOTRAP::load_state(FILEIO* state_fio)
109 if(state_entry != NULL) {
110 mb = state_entry->load_state(state_fio);
112 if(!mb) return false;
113 // if(state_fio->FgetUint32() != STATE_VERSION) {
116 // if(state_fio->FgetInt32() != this_device_id) {
119 // nmi_mask = state_fio->FgetBool();
120 // pasopia = state_fio->FgetBool();
124 bool IOTRAP::process_state(FILEIO* state_fio, bool loading)
126 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
129 if(!state_fio->StateCheckInt32(this_device_id)) {
132 state_fio->StateBool(nmi_mask);
133 state_fio->StateBool(pasopia);