n_bank = 0;
rcb_address = 0;
halted = false;
- kanji_address = 0x00000;
+ kanji_address.d = 0x00000000;
jis78_emulation = false;
memset(prog_rom, 0xff, sizeof(prog_rom));
{0, 0},
};
+ uint8_t *p;
for(uint32_t patchaddr = 0; patchaddr < 0x6000; patchaddr += 32) {
- if((jis78_table[patchaddr >> 10] & (1 << (patchaddr >> 5))) != 0) {
+ if((jis78_table[patchaddr >> 10] & (1 << ((patchaddr >> 5) & 0x1f))) != 0) {
+ p = &(kanji_rom[patchaddr]);
for(uint32_t offset = 0; offset < 32; offset++) {
- kanji_rom[patchaddr + offset] = (uint8_t)(offset & 1);
+ *p++ = (uint8_t)(offset & 1);
}
}
}
return false;
}
+ uint8_t *src;
+ uint8_t *dst;
for (uint32_t patchaddr = 0; convert_table[patchaddr][0] != 0; patchaddr++) {
+ src = &(tmpbuf[convert_table[patchaddr][1] * 2]);
+ dst = &(kanji_rom[convert_table[patchaddr][0] * 2]);
for (uint32_t offset = 0; offset < 32; offset++) {
- kanji_rom[convert_table[patchaddr][0] * 2 + offset] =
- tmpbuf[convert_table[patchaddr][1] * 2 + offset];
+ *dst++ = *src++;
}
}
case 2:
case 3:
/* Kanji Data */
- if((jis78_emulation) && (kanji_address >= 0x3000) && (kanji_address < 0x4000)) {
+ if((jis78_emulation) && (kanji_address.d >= 0x3000) && (kanji_address.d < 0x4000)) {
/* JIS78 */
data = address & 1;
} else {
- data = kanji_rom[(kanji_address << 1) + (address & 1)];
+ data = kanji_rom[(kanji_address.d << 1) + (address & 1)];
}
break;
}
switch(address & 3) {
case 0:
/* Kanji Address High */
- kanji_address = (kanji_address & 0x0000ff) | ((data & 0x000000ff) << 8);
+ kanji_address.b.h = (uint8_t)(data & 0xff);
break;
case 1:
/* Kanji Address Low */
- kanji_address = (kanji_address & 0x00ff00) | (data & 0x000000ff);
+ kanji_address.b.l = (uint8_t)(data & 0xff);
break;
case 2:
/* REQUEST TO HALT */
void FM7_JCOMMCARD::reset(void)
{
rcb_address = 0x00;
- kanji_address = 0x00000;
+ kanji_address.d = 0x00000000;
if(cpu != NULL) cpu->write_signal(SIG_CPU_HALTREQ, 0, 0xffffffff);
#if defined(_FM77AV_VARIANTS)
jis78_emulation = false;
state_fio->FputUint8(n_bank & 0x3f);
state_fio->FputUint8(rcb_address);
- state_fio->FputUint32_BE(kanji_address);
+ state_fio->FputUint32_BE(kanji_address.d);
state_fio->FputBool(halted);
if(version >= 1) {
n_bank = state_fio->FgetUint8() & 0x3f;
rcb_address = state_fio->FgetUint8();
- kanji_address = state_fio->FgetUint32_BE();
+ kanji_address.d = state_fio->FgetUint32_BE();
halted = state_fio->FgetBool();