diff --git a/src/mame/drivers/rm380z.cpp b/src/mame/drivers/rm380z.cpp index 1d2d93d6bb7..53baa0c3c7c 100644 --- a/src/mame/drivers/rm380z.cpp +++ b/src/mame/drivers/rm380z.cpp @@ -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) diff --git a/src/mame/includes/rm380z.h b/src/mame/includes/rm380z.h index bc829b4dbe5..763eb043117 100644 --- a/src/mame/includes/rm380z.h +++ b/src/mame/includes/rm380z.h @@ -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 m_floppy0; required_device 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); }; diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 889a89f8470..7c7db655643 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -31705,6 +31705,7 @@ rltennis // (c) 1993 TCH rm380z // rm380z34d // rm380z34e // +rm480z // @source:rmhaihai.cpp rmhaihai // (c) 1985 Alba diff --git a/src/mame/video/rm380z.cpp b/src/mame/video/rm380z.cpp index 23da34017d7..329dcd97ad5 100644 --- a/src/mame/video/rm380z.cpp +++ b/src/mame/video/rm380z.cpp @@ -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; +}