mirror of
https://github.com/holub/mame
synced 2025-04-30 03:47:13 +03:00
ctk551: lcd support
This commit is contained in:
parent
470258626b
commit
d18b504236
@ -64,6 +64,7 @@ public:
|
|||||||
: driver_device(mconfig, type, tag)
|
: driver_device(mconfig, type, tag)
|
||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
, m_lcdc(*this, "lcdc")
|
, m_lcdc(*this, "lcdc")
|
||||||
|
, m_outputs(*this, "%02x.%d.%d", 0U, 0U, 0U)
|
||||||
, m_led_touch(*this, "led_touch")
|
, m_led_touch(*this, "led_touch")
|
||||||
, m_led_power(*this, "led_power")
|
, m_led_power(*this, "led_power")
|
||||||
{
|
{
|
||||||
@ -85,16 +86,16 @@ private:
|
|||||||
|
|
||||||
virtual void driver_start() override;
|
virtual void driver_start() override;
|
||||||
|
|
||||||
HD44780_PIXEL_UPDATE(lcd_update);
|
|
||||||
void palette_init(palette_device &palette);
|
|
||||||
|
|
||||||
required_device<gt913_device> m_maincpu;
|
required_device<gt913_device> m_maincpu;
|
||||||
required_device<hd44780_device> m_lcdc;
|
required_device<hd44780_device> m_lcdc;
|
||||||
|
|
||||||
|
output_finder<64, 8, 5> m_outputs;
|
||||||
output_finder<> m_led_touch;
|
output_finder<> m_led_touch;
|
||||||
output_finder<> m_led_power;
|
output_finder<> m_led_power;
|
||||||
|
|
||||||
ioport_value m_switch;
|
ioport_value m_switch;
|
||||||
|
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(render_w);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -121,16 +122,21 @@ WRITE_LINE_MEMBER(ctk551_state::apo_w)
|
|||||||
m_led_power = !state;
|
m_led_power = !state;
|
||||||
}
|
}
|
||||||
|
|
||||||
HD44780_PIXEL_UPDATE(ctk551_state::lcd_update)
|
|
||||||
{
|
|
||||||
if (x < 6 && y < 8 && line < 2 && pos < 8)
|
|
||||||
bitmap.pix(line * 8 + y, pos * 6 + x) = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ctk551_state::palette_init(palette_device &palette)
|
WRITE_LINE_MEMBER(ctk551_state::render_w)
|
||||||
{
|
{
|
||||||
palette.set_pen_color(0, rgb_t(255, 255, 255));
|
if(!state)
|
||||||
palette.set_pen_color(1, rgb_t(0, 0, 0));
|
return;
|
||||||
|
|
||||||
|
const u8 *render = m_lcdc->render();
|
||||||
|
for(int x=0; x != 64; x++) {
|
||||||
|
for(int y=0; y != 8; y++) {
|
||||||
|
u8 v = *render++;
|
||||||
|
for(int z=0; z != 5; z++)
|
||||||
|
m_outputs[x][y][z] = (v >> z) & 1;
|
||||||
|
}
|
||||||
|
render += 8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ctk551_state::ctk551_io_map(address_map &map)
|
void ctk551_state::ctk551_io_map(address_map &map)
|
||||||
@ -146,6 +152,7 @@ void ctk551_state::driver_start()
|
|||||||
{
|
{
|
||||||
m_led_touch.resolve();
|
m_led_touch.resolve();
|
||||||
m_led_power.resolve();
|
m_led_power.resolve();
|
||||||
|
m_outputs.resolve();
|
||||||
|
|
||||||
m_switch = 0x2;
|
m_switch = 0x2;
|
||||||
|
|
||||||
@ -173,19 +180,12 @@ void ctk551_state::ctk551(machine_config &config)
|
|||||||
// LCD
|
// LCD
|
||||||
HD44780(config, m_lcdc, 0);
|
HD44780(config, m_lcdc, 0);
|
||||||
m_lcdc->set_lcd_size(2, 8);
|
m_lcdc->set_lcd_size(2, 8);
|
||||||
m_lcdc->set_pixel_update_cb(FUNC(ctk551_state::lcd_update));
|
|
||||||
|
|
||||||
// screen (for testing only)
|
auto &screen = SCREEN(config, "screen", SCREEN_TYPE_SVG);
|
||||||
// TODO: the actual LCD with custom segments
|
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
|
||||||
screen.set_refresh_hz(60);
|
screen.set_refresh_hz(60);
|
||||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
|
screen.set_size(1000, 737);
|
||||||
screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update));
|
|
||||||
screen.set_size(6 * 8, 8 * 2);
|
|
||||||
screen.set_visarea_full();
|
screen.set_visarea_full();
|
||||||
screen.set_palette("palette");
|
screen.screen_vblank().set(FUNC(ctk551_state::render_w));
|
||||||
|
|
||||||
PALETTE(config, "palette", FUNC(ctk551_state::palette_init), 2);
|
|
||||||
|
|
||||||
SPEAKER(config, "lspeaker").front_left();
|
SPEAKER(config, "lspeaker").front_left();
|
||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
@ -363,9 +363,13 @@ INPUT_PORTS_END
|
|||||||
ROM_START(ctk551)
|
ROM_START(ctk551)
|
||||||
ROM_REGION(0x100000, "maincpu", 0)
|
ROM_REGION(0x100000, "maincpu", 0)
|
||||||
ROM_LOAD16_WORD_SWAP("ctk551.lsi2", 0x000000, 0x100000, CRC(66fc34cd) SHA1(47e9559edc106132f8a83462ed17a6c5c3872157))
|
ROM_LOAD16_WORD_SWAP("ctk551.lsi2", 0x000000, 0x100000, CRC(66fc34cd) SHA1(47e9559edc106132f8a83462ed17a6c5c3872157))
|
||||||
|
|
||||||
|
ROM_REGION(285230, "screen", 0)
|
||||||
|
ROM_LOAD("ctk551lcd.svg", 0, 285230, CRC(9ec1787c) SHA1(9a2f2eb36fa7574baa92cdec1a6f62d5dffd63a7))
|
||||||
|
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||||
SYST( 1999, ctk551, 0, 0, ctk551, ctk551, ctk551_state, empty_init, "Casio", "CTK-551", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
SYST( 1999, ctk551, 0, 0, ctk551, ctk551, ctk551_state, empty_init, "Casio", "CTK-551", MACHINE_SUPPORTS_SAVE )
|
||||||
|
Loading…
Reference in New Issue
Block a user