OSDN Git Service

[VM][FMTOWNS] Add FONT ROMS, MSDOS ROM, SYSTEM ROM and SERIAL ROM.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / fontroms.cpp
1 /*
2         FUJITSU FM Towns Emulator 'eFMTowns'
3
4         Author : Kyuma.Ohta <whatisthis.sowhat _at_ gmail.com>
5         Date   : 2019.01.09 -
6
7         [fonts]
8 */
9
10 #inclide "../towns_common.h"
11 #include "../../fileio.h"
12 #include "./fontroms.h"
13
14 namespace FMTOWNS {
15         
16 void FONT_ROMS::initialize()
17 {
18         wait_val = 3;
19         memset(font_kanji16, sizeof(font_kanji16), 0xff);
20         FILEIO* fio = new FILEIO();
21         
22         if(fio->Fopen(create_local_path(_T("FMT_FNT.ROM")), FILEIO_READ_BINARY)) { // FONT
23                 fio->Fread(font_kanji16, sizeof(font_kanji16), 1);
24                 fio->Fclose();
25         }
26         
27 #if defined(HAVE_20PIXS_FONT)   
28         memset(font_kanji20, sizeof(font_kanji20), 0xff);
29         if(fio->Fopen(create_local_path(_T("FMT_F20.ROM")), FILEIO_READ_BINARY)) { // FONT
30                 fio->Fread(font_kanji20, sizeof(font_kanji20), 1);
31                 fio->Fclose();
32         }
33 #endif
34
35         delete fio;
36 }
37
38 uint32_t FONT_ROMS::read_data8(uint32_t addr)
39 {
40         if((addr >= 0xc2100000) && (addr < 0xc2140000)) {
41                 return (uint32_t)(font_kanji16[addr & 0x3ffff]);
42         } else if((addr >= 0xc2180000) && (addr < 0xc2200000)) {
43 #if defined(HAVE_20PIXS_FONT)   
44                 return (uint32_t)(font_kanji20[addr & 0x7ffff]);
45 #else
46                 return 0xff;
47 #endif
48         } else if((addr >= 0x000ca000) && (addr < 0x000ca800)) {
49                 return (uint32_t)(font_kanji16[0x1e800 + (addr & 0x7ff)]);
50         } else if((addr >= 0x000cb000) && (addr < 0x000cc000)) {
51                 return (uint32_t)(font_kanji16[0x1f000 + (addr & 0x7ff)]);
52         }
53         return 0xff;
54 }
55
56 uint32_t FONT_ROMS::read_data8w(uint32_t addr, int* wait)
57 {
58         if(wait != NULL) *wait = wait_val;
59         return read_data8(addr);
60 }
61
62 void FONT_ROMS::write_data8w(uint32_t addr, uint32_t data, int* wait)
63 {
64         if(wait != NULL) *wait = wait_val;
65 }
66
67 void FONT_ROMS::write_signal(int ch, uint32_t data, uint32_t mask)
68 {
69         if(ch == SIG_FMTOWNS_SET_MEMWAIT) {
70                 wait_val = (int)data;
71         }
72 }       
73
74 #define STATE_VERSION   1
75
76 bool FONT_ROMS::process_state(FILEIO* state_fio, bool loading)
77 {
78         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
79                 return false;
80         }
81         if(!state_fio->StateCheckInt32(this_device_id)) {
82                 return false;
83         }
84         state_fio->StateValue(wait_val);
85
86         return true;
87 }
88
89 }