mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
macpwrbk030.cpp: fixed CPU/MCU comms and improved video. [R. Belmont]
This commit is contained in:
parent
59194837ab
commit
48ac30bc7a
@ -200,9 +200,6 @@ private:
|
||||
|
||||
emu_timer *m_6015_timer = nullptr;
|
||||
|
||||
WRITE_LINE_MEMBER(adb_irq_w) { m_adb_irq_pending = state; }
|
||||
int m_adb_irq_pending = 0;
|
||||
|
||||
u16 mac_via_r(offs_t offset);
|
||||
void mac_via_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
u16 mac_via2_r(offs_t offset);
|
||||
@ -285,17 +282,32 @@ private:
|
||||
|
||||
u8 m_pmu_via_bus = 0, m_pmu_ack = 0, m_pmu_req = 0;
|
||||
u8 pmu_data_r() { return m_pmu_via_bus; }
|
||||
void pmu_data_w(u8 data) { m_pmu_via_bus = data; }
|
||||
void pmu_data_w(u8 data)
|
||||
{
|
||||
// if the 68k has valid data on the bus, don't overwrite it
|
||||
if (m_pmu_req)
|
||||
{
|
||||
m_pmu_via_bus = data;
|
||||
}
|
||||
}
|
||||
u8 pmu_comms_r() { return (m_pmu_req<<7); }
|
||||
void pmu_comms_w(u8 data)
|
||||
{
|
||||
m_via1->write_cb1(BIT(data, 5));
|
||||
m_pmu_ack = BIT(data, 6);
|
||||
m_via1->write_cb1(BIT(data, 5) ^ 1);
|
||||
if (m_pmu_ack != BIT(data, 6))
|
||||
{
|
||||
m_pmu_ack = BIT(data, 6);
|
||||
machine().scheduler().synchronize();
|
||||
}
|
||||
}
|
||||
int m_adb_line = 0;
|
||||
void set_adb_line(int state) { m_adb_line = state; }
|
||||
u8 pmu_adb_r() { return (m_adb_line<<1); }
|
||||
void pmu_adb_w(u8 data) { m_macadb->adb_linechange_w((data & 1) ^ 1); }
|
||||
void pmu_adb_w(u8 data)
|
||||
{
|
||||
m_adb_line = (data & 1) ^ 1;
|
||||
m_macadb->adb_linechange_w((data & 1) ^ 1);
|
||||
}
|
||||
|
||||
u8 pmu_in_r() { return 0x20; } // bit 5 is 0 if the Target Disk Mode should be enabled
|
||||
};
|
||||
@ -464,19 +476,14 @@ u32 macpb030_state::screen_update_macpb160(screen_device &screen, bitmap_ind16 &
|
||||
{
|
||||
u16 *line = &bitmap.pix(y);
|
||||
|
||||
for (int x = 0; x < 640; x+=8)
|
||||
for (int x = 0; x < 640/4; x++)
|
||||
{
|
||||
u8 const pixels = vram8[(y * 80) + (BYTE4_XOR_BE(x/8))];
|
||||
static const u16 palette[2] = { 0, 3 };
|
||||
|
||||
*line++ = palette[(pixels >> 7)&1];
|
||||
*line++ = palette[(pixels >> 6)&1];
|
||||
*line++ = palette[(pixels >> 5)&1];
|
||||
*line++ = palette[(pixels >> 4)&1];
|
||||
*line++ = palette[(pixels >> 3)&1];
|
||||
*line++ = palette[(pixels >> 2)&1];
|
||||
*line++ = palette[(pixels >> 1)&1];
|
||||
*line++ = palette[(pixels & 1)];
|
||||
static const u16 palette[4] = { 0, 1, 2, 3 };
|
||||
u8 const pixels = vram8[(y * 640/4) + (BYTE4_XOR_BE(x))];
|
||||
*line++ = palette[((pixels >> 6) & 3)];
|
||||
*line++ = palette[((pixels >> 4) & 3)];
|
||||
*line++ = palette[((pixels >> 2) & 3)];
|
||||
*line++ = palette[(pixels & 3)];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -489,19 +496,10 @@ u32 macpb030_state::screen_update_macpbwd(screen_device &screen, bitmap_rgb32 &b
|
||||
for (int y = 0; y < 480; y++)
|
||||
{
|
||||
u32 *line = &bitmap.pix(y);
|
||||
for (int x = 0; x < 640; x+=8)
|
||||
for (int x = 0; x < 640; x++)
|
||||
{
|
||||
uint8_t const pixels = vram8[(y * 80) + (BYTE4_XOR_BE(x/8))];
|
||||
static const u32 palette[2] = { 0xffffffff, 0 };
|
||||
|
||||
*line++ = palette[(pixels >> 7) & 1];
|
||||
*line++ = palette[(pixels >> 6) & 1];
|
||||
*line++ = palette[(pixels >> 5) & 1];
|
||||
*line++ = palette[(pixels >> 4) & 1];
|
||||
*line++ = palette[(pixels >> 3) & 1];
|
||||
*line++ = palette[(pixels >> 2) & 1];
|
||||
*line++ = palette[(pixels >> 1) & 1];
|
||||
*line++ = palette[(pixels & 1)];
|
||||
u8 const pixels = vram8[(y * 640) + (BYTE4_XOR_BE(x))];
|
||||
*line++ = m_colors[pixels ^ 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
@ -603,7 +601,6 @@ TIMER_CALLBACK_MEMBER(macpb030_state::mac_6015_tick)
|
||||
m_via1->write_ca1(m_ca1_data);
|
||||
|
||||
m_pmu->set_input_line(m50753_device::M50753_INT1_LINE, ASSERT_LINE);
|
||||
m_macadb->adb_vblank();
|
||||
}
|
||||
|
||||
u16 macpb030_state::scsi_r(offs_t offset, u16 mem_mask)
|
||||
@ -721,15 +718,15 @@ void macpb030_state::macwd_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
case 0xf2:
|
||||
if (mem_mask == 0xff000000) // DAC control
|
||||
{
|
||||
m_clutoffs = data >> 24;
|
||||
m_clutoffs = (data >> 24);
|
||||
m_count = 0;
|
||||
}
|
||||
else if (mem_mask == 0x00ff0000) // DAC data
|
||||
{
|
||||
m_colors[m_count++] = (data >> 16) & 0xff;
|
||||
m_colors[m_count++] = ((data >> 16) & 0x3f) << 2;
|
||||
if (m_count == 3)
|
||||
{
|
||||
// printf("RAMDAC: color %d = %02x %02x %02x\n", m_rbv_clutoffs, m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2]);
|
||||
//printf("RAMDAC: color %d = %02x %02x %02x\n", m_clutoffs, m_colors[0], m_colors[1], m_colors[2]);
|
||||
m_wd_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]);
|
||||
m_clutoffs++;
|
||||
m_count = 0;
|
||||
@ -737,7 +734,7 @@ void macpb030_state::macwd_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("macwd: Unknown DAC write, data %08x, mask %08x\n", data, mem_mask);
|
||||
logerror("macwd: Unknown DAC write, data %08x, mask %08x\n", data, mem_mask);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -766,7 +763,6 @@ void macpb030_state::macpb140_map(address_map &map)
|
||||
map(0x50016000, 0x50017fff).rw(FUNC(macpb030_state::swim_r), FUNC(macpb030_state::swim_w)).mirror(0x01f00000);
|
||||
map(0x50024000, 0x50027fff).r(FUNC(macpb030_state::buserror_r)).mirror(0x01f00000); // bus error here to make sure we aren't mistaken for another decoder
|
||||
|
||||
|
||||
map(0xfee08000, 0xfeffffff).ram().share("vram");
|
||||
}
|
||||
|
||||
@ -878,7 +874,11 @@ void macpb030_state::mac_via2_out_a(u8 data)
|
||||
|
||||
void macpb030_state::mac_via2_out_b(u8 data)
|
||||
{
|
||||
m_pmu_req = BIT(data, 2);
|
||||
if (m_pmu_req != BIT(data, 2))
|
||||
{
|
||||
m_pmu_req = BIT(data, 2);
|
||||
machine().scheduler().synchronize();
|
||||
}
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( macadb )
|
||||
@ -903,8 +903,6 @@ void macpb030_state::macpb140(machine_config &config)
|
||||
m_pmu->write_p<4>().set(FUNC(macpb030_state::pmu_adb_w));
|
||||
m_pmu->read_in_p().set(FUNC(macpb030_state::pmu_in_r));
|
||||
|
||||
config.set_perfect_quantum(m_maincpu);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(60.15);
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1260));
|
||||
@ -1191,13 +1189,13 @@ ROM_START(macpd210)
|
||||
ROM_REGION(0x1800, "pmu", ROMREGION_ERASE00)
|
||||
ROM_END
|
||||
|
||||
COMP(1991, macpb140, 0, 0, macpb140, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 140", MACHINE_NOT_WORKING)
|
||||
COMP(1991, macpb170, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 170", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb145, macpb140, 0, macpb145, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb145b, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145B", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb160, 0, 0, macpb160, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 160", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb180, macpb160, 0, macpb180, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb180c, macpb160, 0, macpb180c, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180c", MACHINE_NOT_WORKING)
|
||||
COMP(1991, macpb140, 0, 0, macpb140, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 140", MACHINE_NOT_WORKING)
|
||||
COMP(1991, macpb170, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 170", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb145, macpb140, 0, macpb145, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb145b, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145B", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb160, 0, 0, macpb160, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 160", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb180, macpb160, 0, macpb180, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180", MACHINE_NOT_WORKING)
|
||||
COMP(1992, macpb180c, macpb160, 0, macpb180c, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180c", MACHINE_NOT_WORKING)
|
||||
|
||||
// PowerBook Duos (may or may not belong in this driver ultimately)
|
||||
COMP(1992, macpd210, 0, 0, macpd210, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook Duo 210", MACHINE_NOT_WORKING)
|
||||
// PowerBook Duos (may or may not belong in this driver ultimately)
|
||||
COMP(1992, macpd210, 0, 0, macpd210, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook Duo 210", MACHINE_NOT_WORKING)
|
||||
|
Loading…
Reference in New Issue
Block a user