OSDN Git Service
(root)
/
csp-qt
/
common_source_project-fm7.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[VM][FM7] Add Japanese communication board (日本語通信カード) .
[csp-qt/common_source_project-fm7.git]
/
source
/
src
/
vm
/
fm7
/
kanjirom.cpp
diff --git
a/source/src/vm/fm7/kanjirom.cpp
b/source/src/vm/fm7/kanjirom.cpp
index
0558eb6
..
d6da593
100644
(file)
--- a/
source/src/vm/fm7/kanjirom.cpp
+++ b/
source/src/vm/fm7/kanjirom.cpp
@@
-21,12
+21,19
@@
KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(paren
memset(data_table, 0xff, 0x20000);
// read_table[0].memory = data_table;
p_emu = parent_emu;
memset(data_table, 0xff, 0x20000);
// read_table[0].memory = data_table;
p_emu = parent_emu;
+
+#if !defined(_FM77AV_VARIANTS)
+ jis78_emulation = ((config.dipswitch & FM7_DIPSW_JIS78EMU_ON) != 0);
+#else
+ jis78_emulation = false;
+#endif
if(type_2std) {
class2 = true;
if(fio->Fopen(create_local_path(_T("KANJI2.ROM")), FILEIO_READ_BINARY)) {
fio->Fread(data_table, 0x20000, 1);
fio->Fclose();
read_ok = true;
if(type_2std) {
class2 = true;
if(fio->Fopen(create_local_path(_T("KANJI2.ROM")), FILEIO_READ_BINARY)) {
fio->Fread(data_table, 0x20000, 1);
fio->Fclose();
read_ok = true;
+ jis78_emulation = false;
}
} else {
class2 = false;
}
} else {
class2 = false;
@@
-62,6
+69,11
@@
KANJIROM::~KANJIROM()
void KANJIROM::reset(void)
{
kanjiaddr.d = 0;
void KANJIROM::reset(void)
{
kanjiaddr.d = 0;
+#if defined(_FM77AV_VARIANTS)
+ jis78_emulation = false;
+#else
+ jis78_emulation = ((config.dipswitch & FM7_DIPSW_JIS78EMU_ON) != 0);
+#endif
}
void KANJIROM::write_data8(uint32_t addr, uint32_t data)
}
void KANJIROM::write_data8(uint32_t addr, uint32_t data)
@@
-80,8
+92,14
@@
void KANJIROM::write_data8(uint32_t addr, uint32_t data)
uint32_t KANJIROM::read_data8(uint32_t addr)
{
if(addr == KANJIROM_DATA_HI) {
uint32_t KANJIROM::read_data8(uint32_t addr)
{
if(addr == KANJIROM_DATA_HI) {
+ if((jis78_emulation) && (kanjiaddr.d >= 0x3000) && (kanjiaddr.d < 0x4000)) {
+ return 0;
+ }
return data_table[(kanjiaddr.d << 1) & 0x1ffff];
} else if(addr == KANJIROM_DATA_LO) {
return data_table[(kanjiaddr.d << 1) & 0x1ffff];
} else if(addr == KANJIROM_DATA_LO) {
+ if((jis78_emulation) && (kanjiaddr.d >= 0x3000) && (kanjiaddr.d < 0x4000)) {
+ return 1;
+ }
return data_table[((kanjiaddr.d << 1) & 0x1ffff) + 1];
} else if(addr == KANJIROM_READSTAT) {
return (read_ok) ? 0xffffffff : 0x00000000;
return data_table[((kanjiaddr.d << 1) & 0x1ffff) + 1];
} else if(addr == KANJIROM_READSTAT) {
return (read_ok) ? 0xffffffff : 0x00000000;
@@
-100,7
+118,7
@@
void KANJIROM::release()
{
}
{
}
-#define STATE_VERSION
2
+#define STATE_VERSION
3
void KANJIROM::save_state(FILEIO *state_fio)
{
state_fio->FputUint32_BE(STATE_VERSION);
void KANJIROM::save_state(FILEIO *state_fio)
{
state_fio->FputUint32_BE(STATE_VERSION);
@@
-111,6
+129,10
@@
void KANJIROM::save_state(FILEIO *state_fio)
state_fio->FputBool(read_ok);
state_fio->Fwrite(data_table, sizeof(data_table), 1);
state_fio->FputUint16_BE(kanjiaddr.w.l);
state_fio->FputBool(read_ok);
state_fio->Fwrite(data_table, sizeof(data_table), 1);
state_fio->FputUint16_BE(kanjiaddr.w.l);
+
+#if !defined(_FM77AV_VARIANTS)
+ state_fio->FputBool(jis78_emulation);
+#endif
}
bool KANJIROM::load_state(FILEIO *state_fio)
}
bool KANJIROM::load_state(FILEIO *state_fio)
@@
-131,6
+153,13
@@
bool KANJIROM::load_state(FILEIO *state_fio)
kanjiaddr.w.l = state_fio->FgetUint16_BE();
if(version == 2) return true;
}
kanjiaddr.w.l = state_fio->FgetUint16_BE();
if(version == 2) return true;
}
+#if !defined(_FM77AV_VARIANTS)
+ if(version >= 3) {
+ jis78_emulation = state_fio->FgetBool();
+ }
+#else
+ jis78_emulation = false;
+#endif
return false;
}
return false;
}