OSDN Git Service

[VM][General][WIP] Start to merge upstream 2018-10-14.Open branch upstream_20181014 .
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc98ha / note.cpp
1 /*
2         NEC PC-98LT Emulator 'ePC-98LT'
3         NEC PC-98HA Emulator 'eHANDY98'
4
5         Author : Takeda.Toshiya
6         Date   : 2008.08.14 -
7
8         [ note i/o ]
9 */
10
11 #include "note.h"
12 #include "../i8259.h"
13
14 namespace PC98HA {
15
16 void NOTE::initialize()
17 {
18         ch = 0;
19         memset(regs, 0, sizeof(regs));
20 }
21
22 void NOTE::write_io8(uint32_t addr, uint32_t data)
23 {
24         switch(addr & 0xffff) {
25         case 0x810:
26                 regs[ch & 0x0f] = data;
27                 break;
28         case 0x812:
29                 ch = data;
30                 break;
31         case 0x4810:
32                 // unknown
33                 break;
34         case 0x6e8e:
35                 // modem control 1
36                 break;
37         case 0x7e8e:
38                 // modem control 2
39                 break;
40         case 0x8810:
41                 // power status
42                 // bit5 = 1: unknown
43                 // bit2 = 1: stanby
44                 // bit0 = 1: power off
45 //              d_pic->write_signal(SIG_I8259_IR5, data, 2);
46                 break;
47         case 0xc810:
48                 // unknown
49                 break;
50         }
51 }
52
53 uint32_t NOTE::read_io8(uint32_t addr)
54 {
55         switch(addr & 0xffff) {
56         case 0x810:
57                 return regs[ch & 0x0f];
58         case 0x812:
59                 return ch;
60         case 0xf8e:
61                 // pc card slot
62                 return 0xe;     // 4 if no memcard
63         case 0x5e8e:
64                 // pc card slot ???
65                 return 0x46;    // 0x40 if no memcard
66         case 0x8810:
67                 // bit7 = 1: docking station
68                 // bit6 = 1: ac power supply
69                 // bit4 = 1: alarm
70                 // bit3 = 1: unknown
71                 // bit2 = 1: li.battery low
72                 // bit1 = 1: battery low
73                 // bit0 = 1: power off
74 #ifdef DOCKING_STATION
75                 return 0xc0;
76 #else
77                 return 0x40;
78 #endif
79         }
80         return 0xff;
81 }
82
83 #define STATE_VERSION   1
84
85 bool NOTE::process_state(FILEIO* state_fio, bool loading)
86 {
87         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
88                 return false;
89         }
90         if(!state_fio->StateCheckInt32(this_device_id)) {
91                 return false;
92         }
93         state_fio->StateValue(ch);
94         state_fio->StateArray(regs, sizeof(regs), 1);
95         return true;
96 }
97
98 }
99