rd100: Add LCD controller and working display

This commit is contained in:
AJR 2019-04-15 02:09:12 -04:00
parent be4994ddc8
commit 883aa16d83

View File

@ -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");
PIA6821(config, "pia1", 0);
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 )