summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-15 02:09:12 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-15 02:09:19 -0400
commit883aa16d83818ac56e7afdfd3e14c32735ef9238 (patch)
tree3bfb578861cd1ae41c58e5d90752571aea3ba4a0
parentbe4994ddc8ff450af88462febe629f07c59b1593 (diff)
rd100: Add LCD controller and working display
-rw-r--r--src/mame/drivers/rd100.cpp83
1 files changed, 24 insertions, 59 deletions
diff --git a/src/mame/drivers/rd100.cpp b/src/mame/drivers/rd100.cpp
index ef6a9076d93..f398fd4bb66 100644
--- a/src/mame/drivers/rd100.cpp
+++ b/src/mame/drivers/rd100.cpp
@@ -1,11 +1,9 @@
// license:BSD-3-Clause
-// copyright-holders:Robbbert
+// copyright-holders:AJR
/********************************************************************************
Data RD100
- 2015-10-02 Skeleton [Robbbert]
-
Little is known about this system except for a few PCB pictures. No
manuals, schematic or circuit description have been found.
@@ -20,11 +18,11 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "machine/6821pia.h"
+#include "video/hd44780.h"
#include "emupal.h"
#include "screen.h"
-
class rd100_state : public driver_device
{
public:
@@ -35,11 +33,9 @@ public:
void rd100(machine_config &config);
- void init_rd100();
-
private:
DECLARE_MACHINE_RESET(rd100);
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ HD44780_PIXEL_UPDATE(pixel_update);
void mem_map(address_map &map);
@@ -51,10 +47,10 @@ void rd100_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).ram();
- //AM_RANGE(0x8608, 0x860f) AM_DEVREADWRITE("timer", ptm6840_device, read, write)
+ //map(0x8608, 0x860f).rw("timer", FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));
map(0x8640, 0x8643).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x8680, 0x8683).rw("pia2", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- //AM_RANGE(0x8700, 0x8700) // device
+ map(0x8700, 0x8701).rw("hd44780", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
map(0x8800, 0xffff).rom().region("roms", 0x800);
}
@@ -62,66 +58,35 @@ void rd100_state::mem_map(address_map &map)
static INPUT_PORTS_START( rd100 )
INPUT_PORTS_END
-uint32_t rd100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
-// for (int y = 0; y < 32*8; y++)
-// {
-// offs_t offset = (y / 8) * 128;
-
-// for (int sx = 0; sx < 64; sx++)
-// {
-// uint8_t code = m_video_ram[offset++];
-// uint8_t attr = m_video_ram[offset++];
-
-// offs_t char_offs = ((code & 0x7f) << 3) | (y & 0x07);
-// if (BIT(code, 7)) char_offs = ((code & 0x7f) << 3) | ((y >> 1) & 0x07);
-
-// uint8_t data = m_char_rom->base()[char_offs];
-
-// rgb_t fg = m_palette->pen_color(attr & 0x07);
-// rgb_t bg = m_palette->pen_color((attr >> 3) & 0x07);
-
-// for (int x = 0; x < 6; x++)
-// {
-// bitmap.pix32(y, (sx * 6) + x) = BIT(data, 7) ? fg : bg;
-
-// data <<= 1;
-// }
-// }
-// }
-
- return 0;
-}
-
-void rd100_state::init_rd100()
-{
-}
-
-MACHINE_RESET_MEMBER( rd100_state, rd100 )
+HD44780_PIXEL_UPDATE(rd100_state::pixel_update)
{
+ if (pos < 16)
+ bitmap.pix16(line * 8 + y, pos * 6 + x) = state;
}
void rd100_state::rd100(machine_config &config)
{
// basic machine hardware
- MC6809(config, m_maincpu, XTAL(4'000'000)); // MC6809P???
+ MC6809(config, m_maincpu, 4_MHz_XTAL); // MC6809P???
m_maincpu->set_addrmap(AS_PROGRAM, &rd100_state::mem_map);
- MCFG_MACHINE_RESET_OVERRIDE(rd100_state, rd100)
-
- PIA6821(config, "pia1", 0);
+ PIA6821(config, "pia1");
- PIA6821(config, "pia2", 0);
+ PIA6821(config, "pia2");
// video hardware
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green()));
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(250));
- screen.set_screen_update(FUNC(rd100_state::screen_update));
- screen.set_size(64*6, 32*8);
- screen.set_visarea(0, 64*6-1, 0, 32*8-1);
- PALETTE(config, "palette", palette_device::MONOCHROME);
- //GFXDECODE(config, "gfxdecode", "palette", gfx_rd100);
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
+ screen.set_size(16*6, 16);
+ screen.set_visarea(0, 16*6-1, 0, 16-1);
+ screen.set_palette("palette");
+
+ hd44780_device &hd44780(HD44780(config, "hd44780"));
+ hd44780.set_lcd_size(2, 16);
+ hd44780.set_pixel_update_cb(FUNC(rd100_state::pixel_update), this);
+
+ PALETTE(config, "palette").set_entries(2);
}
ROM_START( rd100 )
@@ -132,4 +97,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1989, rd100, 0, 0, rd100, rd100, rd100_state, init_rd100, "Data R.D.", "RD100", MACHINE_IS_SKELETON )
+COMP( 1989, rd100, 0, 0, rd100, rd100, rd100_state, empty_init, "Data R.D.", "RD100", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )