mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
rd100: Add LCD controller and working display
This commit is contained in:
parent
be4994ddc8
commit
883aa16d83
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user