mirror of
https://github.com/holub/mame
synced 2025-05-30 17:41:47 +03:00
pc9801: fix exvram low address banking (nw)
This commit is contained in:
parent
dad57e3823
commit
97f93a8711
@ -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));
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<am9517a_device> m_dmac;
|
||||
required_device<pit8253_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;
|
||||
|
@ -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];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user