diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp index e1feb1639b5..196a0af79fe 100644 --- a/src/mame/drivers/pc9801.cpp +++ b/src/mame/drivers/pc9801.cpp @@ -1365,7 +1365,11 @@ READ16_MEMBER(pc9801_state::pc9821_grcg_gvram_r) { if(m_ex_video_ff[ANALOG_256_MODE]) { - return space.read_word(0xf00000|(offset*2)|((m_analog256.write_bank)*0x8000),mem_mask); + u16 *ext_gvram = (u16 *)m_ext_gvram.target(); + int bank = offset >> 14; + if(bank <= 1) + return ext_gvram[((m_analog256.bank[bank])*0x4000) + (offset & 0x3fff)]; + return 0xffff; } return grcg_gvram_r(space,offset,mem_mask); @@ -1375,7 +1379,10 @@ WRITE16_MEMBER(pc9801_state::pc9821_grcg_gvram_w) { if(m_ex_video_ff[ANALOG_256_MODE]) { - space.write_word(0xf00000|(offset*2)|(m_analog256.write_bank*0x8000),data,mem_mask); + u16 *ext_gvram = (u16 *)m_ext_gvram.target(); + int bank = offset >> 14; + if(bank <= 1) + COMBINE_DATA(&ext_gvram[((m_analog256.bank[bank])*0x4000) + (offset & 0x3fff)]); return; } @@ -1388,8 +1395,8 @@ READ16_MEMBER(pc9801_state::pc9821_grcg_gvram0_r) { switch(offset*2) { - case 4: return m_analog256.write_bank; -// case 6: return m_analog256.read_bank; + case 4: return m_analog256.bank[0] & 0xf; + case 6: return m_analog256.bank[1] & 0xf; } //return 0; @@ -1405,8 +1412,8 @@ WRITE16_MEMBER(pc9801_state::pc9821_grcg_gvram0_w) //printf("%08x %08x\n",offset*2,data); switch(offset*2) { - case 4: COMBINE_DATA(&m_analog256.write_bank); break; -// case 6: COMBINE_DATA(&m_analog256.read_bank); break; + case 4: COMBINE_DATA(&m_analog256.bank[0]); break; + case 6: COMBINE_DATA(&m_analog256.bank[1]); break; } //return; } @@ -1417,12 +1424,12 @@ WRITE16_MEMBER(pc9801_state::pc9821_grcg_gvram0_w) void pc9801_state::pc9821_map(address_map &map) { - //AM_RANGE(0x00080000, 0x0009ffff) AM_READWRITE8(winram_r, winram_w, 0xffffffff) + //map(0x00080000, 0x0009ffff).rw(this, FUNC(pc9801_state::winram_r), FUNC(pc9801_state::winram_w)) map(0x000a0000, 0x000a3fff).rw(this, FUNC(pc9801_state::tvram_r), FUNC(pc9801_state::tvram_w)); map(0x000a4000, 0x000a4fff).rw(this, FUNC(pc9801_state::pc9801rs_knjram_r), FUNC(pc9801_state::pc9801rs_knjram_w)); map(0x000a8000, 0x000bffff).rw(this, FUNC(pc9801_state::pc9821_grcg_gvram_r), FUNC(pc9801_state::pc9821_grcg_gvram_w)); map(0x000cc000, 0x000cdfff).rom().region("sound_bios", 0); //sound BIOS -// AM_RANGE(0x000d8000, 0x000d9fff) AM_ROM AM_REGION("ide",0) + //map(0x000d8000, 0x000d9fff).rom().region("ide",0) map(0x000da000, 0x000dbfff).ram(); // ide ram map(0x000e0000, 0x000e7fff).rw(this, FUNC(pc9801_state::pc9821_grcg_gvram0_r), FUNC(pc9801_state::pc9821_grcg_gvram0_w)); map(0x000e8000, 0x000fffff).m(m_ipl, FUNC(address_map_bank_device::amap16)); diff --git a/src/mame/includes/pc9801.h b/src/mame/includes/pc9801.h index c2a311d7e94..c55dd1f7f35 100644 --- a/src/mame/includes/pc9801.h +++ b/src/mame/includes/pc9801.h @@ -109,6 +109,23 @@ public: { } + void pc9821v20(machine_config &config); + void pc9801ux(machine_config &config); + void pc9801vm(machine_config &config); + void pc9801(machine_config &config); + void pc9801bx2(machine_config &config); + void pc9821ap2(machine_config &config); + void pc9821(machine_config &config); + void pc9801rs(machine_config &config); + DECLARE_CUSTOM_INPUT_MEMBER(system_type_r); + DECLARE_DRIVER_INIT(pc9801_kanji); + +protected: + virtual void video_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + +private: + required_device m_maincpu; required_device m_dmac; required_device m_pit8253; @@ -160,7 +177,6 @@ public: DECLARE_READ8_MEMBER(gvram_r); DECLARE_WRITE8_MEMBER(gvram_w); DECLARE_WRITE8_MEMBER(pc9801rs_mouse_freq_w); - DECLARE_CUSTOM_INPUT_MEMBER(system_type_r); DECLARE_READ16_MEMBER(grcg_gvram_r); DECLARE_WRITE16_MEMBER(grcg_gvram_w); DECLARE_READ16_MEMBER(grcg_gvram0_r); @@ -285,7 +301,6 @@ public: TIMER_DEVICE_CALLBACK_MEMBER( mouse_irq_cb ); DECLARE_READ8_MEMBER(unk_r); - DECLARE_DRIVER_INIT(pc9801_kanji); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t a20_286(bool state); @@ -296,14 +311,6 @@ public: void pc9801_sasi(machine_config &config); void pc9801_ide(machine_config &config); void pc9801_common(machine_config &config); - void pc9821v20(machine_config &config); - void pc9801ux(machine_config &config); - void pc9801vm(machine_config &config); - void pc9801(machine_config &config); - void pc9801bx2(machine_config &config); - void pc9821ap2(machine_config &config); - void pc9821(machine_config &config); - void pc9801rs(machine_config &config); void ipl_bank(address_map &map); void pc9801_common_io(address_map &map); void pc9801_io(address_map &map); @@ -317,12 +324,7 @@ public: void upd7220_1_map(address_map &map); void upd7220_2_map(address_map &map); void upd7220_grcg_2_map(address_map &map); -protected: - virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - -private: enum { TIMER_VBIRQ @@ -380,8 +382,7 @@ private: struct { uint8_t pal_entry; uint8_t r[0x100],g[0x100],b[0x100]; - uint16_t read_bank; - uint16_t write_bank; + uint16_t bank[2]; }m_analog256; struct { uint8_t mode; diff --git a/src/mame/video/pc9801.cpp b/src/mame/video/pc9801.cpp index fc8b30e2760..b8b1fba704a 100644 --- a/src/mame/video/pc9801.cpp +++ b/src/mame/video/pc9801.cpp @@ -60,7 +60,7 @@ UPD7220_DISPLAY_PIXELS_MEMBER( pc9801_state::hgdc_display_pixels ) res_x = x + xi; res_y = y; - pen = ext_gvram[(address >> 1)*16+xi+(m_vram_disp*0x20000)]; + pen = ext_gvram[(address >> 1)*16+xi+(m_vram_disp*0x40000)]; bitmap.pix32(res_y, res_x) = palette[pen + 0x20]; }