2 FUJITSU FMR-50 Emulator 'eFMR-50'
\r
3 FUJITSU FMR-60 Emulator 'eFMR-60'
\r
5 Author : Takeda.Toshiya
\r
15 #include "../../emu.h"
\r
16 #include "../device.h"
\r
18 #define SIG_MEMORY_DISP 0
\r
19 #define SIG_MEMORY_VSYNC 1
\r
21 #if defined(HAS_I286)
\r
27 class MEMORY : public DEVICE
\r
30 #if defined(HAS_I286)
\r
37 uint8* rbank[8192]; // 16MB / 2KB
\r
42 uint8 ram[0x400000]; // RAM 1+3MB
\r
44 uint8 vram[0x80000]; // VRAM 512KB
\r
45 uint8 cvram[0x2000];
\r
46 uint8 avram[0x2000];
\r
48 uint8 vram[0x40000]; // VRAM 256KB
\r
49 uint8 cvram[0x1000];
\r
50 uint8 kvram[0x1000];
\r
51 uint8 dummy[0x8000]; // dummy plane
\r
53 uint8 ipl[0x4000]; // IPL 16KB
\r
55 uint8 ank24[0x3000]; // ANK(14x24)
\r
56 uint8 kanji24[0x240000]; // KANJI(24x24)
\r
58 uint8 ank8[0x800]; // ANK(8x8) 2KB
\r
59 uint8 ank16[0x1000]; // ANK(8x16) 4KB
\r
60 uint8 kanji16[0x40000]; // KANJI(16x16) 256KB
\r
62 uint8 machine_id; // MACHINE ID
\r
66 uint8 mainmem, rplane, wplane;
\r
67 uint8 dma_addr_reg, dma_wrap_reg;
\r
68 uint32 dma_addr_mask;
\r
76 uint8 apal[16][3], apalsel, dpal[8];
\r
81 uint8 pagesel, ankcg;
\r
84 uint16 accaddr, dispaddr;
\r
87 int kj_h, kj_l, kj_ofs, kj_row;
\r
89 // logical operation
\r
90 uint8 cmdreg, imgcol, maskreg, compreg[8], compbit, bankdis, tilereg[3];
\r
91 uint16 lofs, lsty, lsx, lsy, lex, ley;
\r
92 void point(int x, int y, int col);
\r
96 uint8 screen_txt[SCREEN_HEIGHT][SCREEN_WIDTH + 14];
\r
97 uint8 screen_cg[SCREEN_HEIGHT][SCREEN_WIDTH];
\r
98 // uint8 screen_txt[400][648];
\r
99 // uint8 screen_cg[400][640];
\r
100 scrntype palette_txt[16];
\r
101 scrntype palette_cg[16];
\r
103 void update_bank();
\r
104 void update_dma_addr_mask();
\r
108 void draw_text40();
\r
109 void draw_text80();
\r
114 MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
\r
117 // common functions
\r
120 void write_data8(uint32 addr, uint32 data);
\r
121 uint32 read_data8(uint32 addr);
\r
122 void write_dma_data8(uint32 addr, uint32 data);
\r
123 uint32 read_dma_data8(uint32 addr);
\r
124 void write_io8(uint32 addr, uint32 data);
\r
125 uint32 read_io8(uint32 addr);
\r
126 void write_signal(int id, uint32 data, uint32 mask);
\r
127 void event_frame();
\r
129 // unitque function
\r
130 #if defined(HAS_I286)
\r
131 void set_context_cpu(I286* device)
\r
133 void set_context_cpu(I386* device)
\r
138 void set_machine_id(uint8 id)
\r
142 void set_context_crtc(DEVICE* device)
\r
146 void set_chregs_ptr(uint8* ptr)
\r
169 void draw_screen();
\r