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 / msdosrom.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         [MSDOS ROM]
8 */
9
10 #include "./towns_common.h"
11 #include "./msdosrom.h"
12
13 namespace FMTOWNS {
14         
15 void MSDOSROM::initialize()
16 {
17         memset(rom, 0xff, sizeof(rom));
18         FILEIO *fio;
19         if(fio->Fopen(create_local_path(_T("FMT_DOS.ROM")), FILEIO_READ_BINARY)) { // MSDOS
20                 fio->Fread(rom, sizeof(rom), 1);
21                 fio->Fclose();
22         }
23         delete fio;
24
25         wait_val = 3;
26 }
27
28 uint32_t MSDOSROM::read_data8(uint32_t addr)    
29 {
30         uint8_t d = 0xff;
31         if((addr >= 0xc2000000) && (addr < 0xc2080000)) {
32                 d = rom[addr & 0x7ffff];
33         }
34         return (uint32_t)d;
35 }
36
37 uint32_t MSDOSROM::read_data8w(uint32_t addr, int* wait)        
38 {
39         if(wait != NULL) *wait = wait_val;
40         return read_data8(addr);
41 }
42 void MSDOSROM::write_data8w(uint32_t addr, uint32_t data, int* wait)    
43 {
44         if(wait != NULL) *wait = wait_val;
45 }
46
47 void MSDOSROM::write_signal(int ch, uint32_t data, uint32_t mask)
48 {
49         switch(ch) {
50         case SIG_FMTOWNS_SET_MEMWAIT:
51                 wait_val = (int)data;
52                 break;
53         }
54 }
55
56 uint32_t MSDOSROM::read_signal(int ch)
57 {
58         switch(ch) {
59         case SIG_FMTOWNS_SET_MEMWAIT:
60                 return (uint32_t)wait_val;
61                 break;
62         }
63         return 0;
64 }
65
66 #define STATE_VERSION   1
67
68 bool DICTIONARY::process_state(FILEIO* state_fio, bool loading)
69 {
70         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
71                 return false;
72         }
73         if(!state_fio->StateCheckInt32(this_device_id)) {
74                 return false;
75         }
76         state_fio->StateValue(wait_val);
77         return true;
78 }
79
80 }