OSDN Git Service

[INITIAL] Import 20141226 version of http://homepage3.nifty.com/takeda-toshiya/common...
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6001 / display.cpp
1 /*\r
2         NEC PC-6001 Emulator 'yaPC-6001'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2013.08.22-\r
6 \r
7         [ display ]\r
8 */\r
9 \r
10 #include "display.h"\r
11 #include "timer.h"\r
12 #include "../mc6847.h"\r
13 \r
14 void DISPLAY::reset()\r
15 {\r
16         vram_ptr = ram_ptr + 0xe000;\r
17 }\r
18 \r
19 void DISPLAY::write_io8(uint32 addr, uint32 data)\r
20 {\r
21         unsigned int VRAMHead[4] = { 0xc000, 0xe000, 0x8000, 0xa000 };\r
22         uint16 port=(addr & 0x00ff);\r
23         \r
24         switch (port) {\r
25         case 0xB0:\r
26                 vram_ptr = (ram_ptr + VRAMHead[(data & 0x06) >> 1]);\r
27                 d_timer->set_portB0(data);\r
28                 break;\r
29         }\r
30 }\r
31 \r
32 void DISPLAY::draw_screen()\r
33 {\r
34         d_vdp->write_signal(SIG_MC6847_AG, *vram_ptr, 0x80);\r
35         d_vdp->write_signal(SIG_MC6847_GM, *vram_ptr >> 4, 1);\r
36         d_vdp->write_signal(SIG_MC6847_GM, *vram_ptr >> 2, 2);\r
37         d_vdp->write_signal(SIG_MC6847_GM, *vram_ptr >> 0, 4);\r
38         d_vdp->write_signal(SIG_MC6847_CSS, *vram_ptr, 0x02);\r
39         if(*vram_ptr & 0x80) {\r
40                 d_vdp->set_vram_ptr(vram_ptr + 0x200, 0x1800);\r
41         } else {\r
42                 d_vdp->set_vram_ptr(vram_ptr, 0x1800);\r
43         }\r
44         d_vdp->draw_screen();\r
45 }\r