diff options
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 |
commit | 883aa16d83818ac56e7afdfd3e14c32735ef9238 (patch) | |
tree | 3bfb578861cd1ae41c58e5d90752571aea3ba4a0 | |
parent | be4994ddc8ff450af88462febe629f07c59b1593 (diff) |
rd100: Add LCD controller and working display
-rw-r--r-- | src/mame/drivers/rd100.cpp | 83 |
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 ) |