New skeleton LINK RM480Z

This commit is contained in:
Robbbert 2017-01-03 13:11:39 +11:00
parent 2b13832d36
commit 3ffb5e1707
4 changed files with 58 additions and 8 deletions

View File

@ -170,12 +170,18 @@ static MACHINE_CONFIG_START( rm380z, rm380z_state )
MCFG_GENERIC_KEYBOARD_CB(WRITE8(rm380z_state, keyboard_put))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rm480z, rm380z )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_SIZE(64*8, 24*11)
MCFG_SCREEN_VISIBLE_AREA(0, 64*8-1, 0, 24*11-1)
MCFG_SCREEN_UPDATE_DRIVER(rm380z_state, screen_update_rm480z)
MACHINE_CONFIG_END
/* ROM definitions */
ROM_START( rm380z34d )
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
ROM_LOAD( "cos34d-f.bin", 0x0000, 0x1000, CRC(eb128b40) SHA1(c46f358fb76459987e41750d052995563f2f7d53))
// chargen ROM is undumped, afaik
ROM_REGION( 0x1680, "chargen", 0 )
@ -199,15 +205,22 @@ ROM_START( rm380z )
// chargen ROM is undumped, afaik
ROM_REGION( 0x1680, "chargen", 0 )
ROM_LOAD( "ch3.raw", 0x0000, 0x1680, BAD_DUMP CRC(c223622b) SHA1(185ef24896419d7ff46f71a760ac217de3811684))
// The characters on the 480Z are very close (or identical) to the 380Z ones
//ROM_REGION( 0x2000, "chargen", 0 )
//ROM_LOAD( "CG06.BIN", 0x0000, 0x2000, CRC(15d40f7e) SHA1(a7266357eb9be849f77a97ff3013b236c0af8289))
ROM_END
ROM_START( rm480z )
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
ROM_LOAD( "cos40b-m.bin", 0x0000, 0x1000, CRC(1f0b3a5c) SHA1(0b29cb2a3b7eaa3770b34f08c4fd42844f42700f))
ROM_LOAD( "cos40b-m_f600-f9ff.bin", 0x1000, 0x400, CRC(e3397d9d) SHA1(490a0c834b0da392daf782edc7d51ca8f0668b1a))
ROM_LOAD( "cos40b-m_1c00-1dff.bin", 0x1400, 0x200, CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff))
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD( "cg06.bin", 0x0000, 0x2000, CRC(15d40f7e) SHA1(a7266357eb9be849f77a97ff3013b236c0af8289) )
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
COMP(1978, rm380z, 0, 0, rm380z, rm380z, rm380z_state, rm380z, "Research Machines", "RM-380Z, COS 4.0B", MACHINE_NO_SOUND_HW)
COMP(1978, rm380z, 0, 0, rm380z, rm380z, rm380z_state, rm380z, "Research Machines", "RM-380Z, COS 4.0B", MACHINE_NO_SOUND_HW)
COMP(1978, rm380z34d, rm380z, 0, rm380z, rm380z, rm380z_state, rm380z34d, "Research Machines", "RM-380Z, COS 3.4D", MACHINE_BTANB_FLAGS)
COMP(1978, rm380z34e, rm380z, 0, rm380z, rm380z, rm380z_state, rm380z34e, "Research Machines", "RM-380Z, COS 3.4E", MACHINE_BTANB_FLAGS)
COMP(1981, rm480z, rm380z, 0, rm480z, rm380z, rm380z_state, rm380z34e, "Research Machines", "LINK RM-480Z", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)

View File

@ -60,12 +60,9 @@ private:
int writenum;
protected:
virtual void machine_reset() override;
virtual void machine_start() override;
public:
uint8_t m_port0;
uint8_t m_port0_mask;
uint8_t m_port0_kbd;
@ -96,6 +93,7 @@ public:
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
public:
rm380z_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, RM380Z_MAINCPU_TAG),
@ -136,6 +134,7 @@ public:
void config_memory_map();
void update_screen(bitmap_ind16 &bitmap);
uint32_t screen_update_rm380z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_rm480z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(static_vblank_timer);
};

View File

@ -31705,6 +31705,7 @@ rltennis // (c) 1993 TCH
rm380z //
rm380z34d //
rm380z34e //
rm480z //
@source:rmhaihai.cpp
rmhaihai // (c) 1985 Alba

View File

@ -404,3 +404,40 @@ void rm380z_state::update_screen(bitmap_ind16 &bitmap)
}
}
}
// This needs the attributes etc from above to be added
uint32_t rm380z_state::screen_update_rm480z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t *chargen = memregion("chargen")->base();
uint8_t y,ra,chr,gfx;
uint16_t sy=0,ma=0,x;
for (y = 0; y < RM380Z_SCREENROWS; y++)
{
for (ra = 0; ra < 11; ra++)
{
uint16_t *p = &bitmap.pix16(sy++);
for (x = ma; x < ma + 64; x++)
{
gfx = 0;
if (ra < 10)
{
chr = m_vramchars[x];
gfx = chargen[(chr<<4) | ra ];
}
/* Display a scanline of a character */
*p++ = BIT(gfx, 7);
*p++ = BIT(gfx, 6);
*p++ = BIT(gfx, 5);
*p++ = BIT(gfx, 4);
*p++ = BIT(gfx, 3);
*p++ = BIT(gfx, 2);
*p++ = BIT(gfx, 1);
*p++ = BIT(gfx, 0);
}
}
ma+=64;
}
return 0;
}