(MESS) Cleanup the HD44780 device. (nw)
This commit is contained in:
parent
1e68d547c3
commit
8e40dc87e0
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -7858,7 +7858,6 @@ src/mess/video/pocketc.c svneol=native#text/plain
|
||||
src/mess/video/poly88.c svneol=native#text/plain
|
||||
src/mess/video/pp01.c svneol=native#text/plain
|
||||
src/mess/video/primo.c svneol=native#text/plain
|
||||
src/mess/video/psion.c svneol=native#text/plain
|
||||
src/mess/video/radio86.c svneol=native#text/plain
|
||||
src/mess/video/rm380z.c svneol=native#text/plain
|
||||
src/mess/video/rmnimbus.c svneol=native#text/plain
|
||||
|
@ -68,10 +68,7 @@ WRITE8_MEMBER( alesis_state::p3_w )
|
||||
|
||||
WRITE8_MEMBER( alesis_state::sr16_lcd_w )
|
||||
{
|
||||
if (m_kb_matrix & 0x80)
|
||||
m_lcdc->data_write(space, offset, data);
|
||||
else
|
||||
m_lcdc->control_write(space, offset, data);
|
||||
m_lcdc->write(space, BIT(m_kb_matrix,7), data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START(hr16_mem, AS_PROGRAM, 8, alesis_state)
|
||||
@ -84,8 +81,7 @@ static ADDRESS_MAP_START(hr16_io, AS_IO, 8, alesis_state)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READ(kb_r)
|
||||
AM_RANGE(0x0002, 0x0002) AM_DEVWRITE("dm3ag", alesis_dm3ag_device, write)
|
||||
AM_RANGE(0x0004, 0x0004) AM_WRITE(led_w)
|
||||
AM_RANGE(0x0006, 0x0006) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write)
|
||||
AM_RANGE(0x0007, 0x0007) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write)
|
||||
AM_RANGE(0x0006, 0x0007) AM_DEVREADWRITE("hd44780", hd44780_device, read, write)
|
||||
AM_RANGE(0x0008, 0x0008) AM_WRITE(kb_matrix_w)
|
||||
AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("SELECT") AM_WRITENOP
|
||||
AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITENOP
|
||||
@ -234,30 +230,17 @@ void alesis_state::machine_reset()
|
||||
memset(m_lcd_digits, 0, sizeof(m_lcd_digits));
|
||||
}
|
||||
|
||||
static HD44780_INTERFACE( hr16_display )
|
||||
{
|
||||
2, // number of lines
|
||||
16, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
static HD44780_PIXEL_UPDATE(sr16_pixel_update)
|
||||
{
|
||||
alesis_state *driv_state = device.machine().driver_data<alesis_state>();
|
||||
|
||||
if (line == 1 && pos >= 6) // last 2 characters of the second line are used to control the LCD symbols
|
||||
if (line == 1 && pos >= 6 && pos < 8) // last 2 characters of the second line are used to control the LCD symbols
|
||||
driv_state->update_lcd_symbols(bitmap, pos, y, x, state);
|
||||
else
|
||||
else if (pos < 8)
|
||||
bitmap.pix16(line*9 + y, pos*6 + x) = state;
|
||||
}
|
||||
|
||||
static HD44780_INTERFACE( sr16_display )
|
||||
{
|
||||
2, // number of lines
|
||||
8, // chars for line
|
||||
sr16_pixel_update // pixel update callback
|
||||
};
|
||||
|
||||
static const cassette_interface hr16_cassette_interface =
|
||||
{
|
||||
cassette_default_formats,
|
||||
@ -286,7 +269,8 @@ static MACHINE_CONFIG_START( hr16, alesis_state )
|
||||
|
||||
MCFG_CASSETTE_ADD( CASSETTE_TAG, hr16_cassette_interface )
|
||||
|
||||
MCFG_HD44780_ADD("hd44780", hr16_display)
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 16)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_ALESIS_DM3AG_ADD("dm3ag", XTAL_12MHz/2)
|
||||
@ -308,7 +292,9 @@ static MACHINE_CONFIG_DERIVED( sr16, hr16 )
|
||||
|
||||
MCFG_PALETTE_INIT(black_and_white)
|
||||
|
||||
MCFG_HD44780_REPLACE("hd44780", sr16_display)
|
||||
MCFG_DEVICE_MODIFY("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 8)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(sr16_pixel_update)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* ROM definition */
|
||||
@ -329,9 +315,6 @@ ROM_START( hr16 )
|
||||
ROM_REGION( 0x100000, "dm3ag", 0 )
|
||||
ROM_LOAD( "2-27-0004.u16", 0x00000, 0x80000, CRC(8e103536) SHA1(092e1cf649fbef171cfaf91e20707d89998b7a1e))
|
||||
ROM_LOAD( "2-27-0003.u15", 0x80000, 0x80000, CRC(82e9b78c) SHA1(89728cb38ae172b5e347a03018617c94a087dce0))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( hr16b )
|
||||
@ -344,9 +327,6 @@ ROM_START( hr16b )
|
||||
ROM_REGION( 0x100000, "dm3ag", 0 )
|
||||
ROM_LOAD( "2-27-0008.u16", 0x00000, 0x80000, CRC(11ca930e) SHA1(2f57fdd02f9b2146a551370a74cab1fa800145ab))
|
||||
ROM_LOAD( "2-27-0007.u15", 0x80000, 0x80000, CRC(319746db) SHA1(46b32a3ab2fbad67fb4566f607f578a2e9defd63))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( sr16 )
|
||||
@ -357,9 +337,6 @@ ROM_START( sr16 )
|
||||
ROM_REGION( 0x100000, "dm3ag", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "sr16.u6", 0x00000, 0x80000, CRC(6da96987) SHA1(3ec8627d440bc73841e1408a19def09a8b0b77f7))
|
||||
ROM_LOAD( "sr16.u5", 0x80000, 0x80000, CRC(8bb25cfa) SHA1(273ad59d017b54a7e8d5e1ec61c8cd807a0e4af3))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -100,19 +100,10 @@ WRITE8_MEMBER(alphasmart_state::port_a_w)
|
||||
UINT8 lcdc_data = 0;
|
||||
|
||||
if ((m_port_a ^ data) & 0x80)
|
||||
{
|
||||
if ((m_matrix[1] & 0x02))
|
||||
lcdc_data |= m_lcdc0->data_read(space, 0);
|
||||
else
|
||||
lcdc_data |= m_lcdc0->control_read(space, 0);
|
||||
}
|
||||
lcdc_data |= m_lcdc0->read(space, BIT(m_matrix[1], 1));
|
||||
|
||||
if ((m_port_a ^ data) & 0x20)
|
||||
{
|
||||
if ((m_matrix[1] & 0x02))
|
||||
lcdc_data |= m_lcdc1->data_read(space, 0);
|
||||
else
|
||||
lcdc_data |= m_lcdc1->control_read(space, 0);
|
||||
}
|
||||
lcdc_data |= m_lcdc1->read(space, BIT(m_matrix[1], 1));
|
||||
|
||||
m_port_d = (m_port_d & 0xc3) | (lcdc_data>>2);
|
||||
}
|
||||
@ -121,19 +112,10 @@ WRITE8_MEMBER(alphasmart_state::port_a_w)
|
||||
UINT8 lcdc_data = (m_port_d<<2) & 0xf0;
|
||||
|
||||
if ((m_port_a ^ data) & data & 0x80)
|
||||
{
|
||||
if ((m_matrix[1] & 0x02))
|
||||
m_lcdc0->data_write(space, 0, lcdc_data);
|
||||
else
|
||||
m_lcdc0->control_write(space, 0, lcdc_data);
|
||||
}
|
||||
m_lcdc0->write(space, BIT(m_matrix[1], 1), lcdc_data);
|
||||
|
||||
if ((m_port_a ^ data) & data & 0x20)
|
||||
{
|
||||
if ((m_matrix[1] & 0x02))
|
||||
m_lcdc1->data_write(space, 0, lcdc_data);
|
||||
else
|
||||
m_lcdc1->control_write(space, 0, lcdc_data);
|
||||
}
|
||||
m_lcdc1->write(space, BIT(m_matrix[1], 1), lcdc_data);
|
||||
}
|
||||
|
||||
m_rambank->set_entry(((data>>3) & 0x01) | ((data>>4) & 0x02));
|
||||
@ -334,13 +316,6 @@ static const hc11_config alphasmart_hc11_config =
|
||||
0x00 //registers are at 0-0x3f
|
||||
};
|
||||
|
||||
static HD44780_INTERFACE( alphasmart_4line_display )
|
||||
{
|
||||
2, // number of lines
|
||||
40, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( alphasmart, alphasmart_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", MC68HC11, XTAL_8MHz/2) // MC68HC11D0, XTAL is 8 Mhz, unknown divider
|
||||
@ -348,8 +323,10 @@ static MACHINE_CONFIG_START( alphasmart, alphasmart_state )
|
||||
MCFG_CPU_IO_MAP(alphasmart_io)
|
||||
MCFG_CPU_CONFIG(alphasmart_hc11_config)
|
||||
|
||||
MCFG_HD44780_ADD("ks0066_0", alphasmart_4line_display)
|
||||
MCFG_HD44780_ADD("ks0066_1", alphasmart_4line_display)
|
||||
MCFG_HD44780_ADD("ks0066_0")
|
||||
MCFG_HD44780_LCD_SIZE(2, 40)
|
||||
MCFG_HD44780_ADD("ks0066_1")
|
||||
MCFG_HD44780_LCD_SIZE(2, 40)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
@ -368,12 +345,6 @@ ROM_START( alphasma )
|
||||
ROM_LOAD( "alphasmartpro212.rom", 0x0000, 0x8000, CRC(896ddf1c) SHA1(c3c6a421c9ced92db97431d04b4a3f09a39de716) ) // Checksum 8D24 on label
|
||||
|
||||
ROM_REGION( 0x20000, "mainram", ROMREGION_ERASE )
|
||||
|
||||
ROM_REGION( 0x0860, "ks0066_0", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_REGION( 0x0860, "ks0066_1", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -203,13 +203,6 @@ void lcmate2_state::machine_start()
|
||||
membank("rombank")->configure_entries(0, 0x10, (UINT8*)machine().root_device().memregion("maincpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
static HD44780_INTERFACE( lcmate2_display )
|
||||
{
|
||||
2, // number of lines
|
||||
20, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
static const gfx_layout lcmate2_charlayout =
|
||||
{
|
||||
5, 8, /* 5 x 8 characters */
|
||||
@ -222,7 +215,7 @@ static const gfx_layout lcmate2_charlayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( lcmate2 )
|
||||
GFXDECODE_ENTRY( "hd44780", 0x0000, lcmate2_charlayout, 0, 1 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, lcmate2_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -249,7 +242,8 @@ static MACHINE_CONFIG_START( lcmate2, lcmate2_state )
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
MCFG_GFXDECODE(lcmate2)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780", lcmate2_display)
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 20)
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
@ -267,9 +261,6 @@ ROM_START( lcmate2 )
|
||||
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "u2.bin", 0x00000, 0x08000, CRC(521931b9) SHA1(743a6e2928c4365fbf5ed9a173e2c1bfe695850f) )
|
||||
ROM_LOAD( "u3.bin", 0x20000, 0x20000, CRC(84fe767a) SHA1(8dd306f203e1220f0eab1a284be3095e2642c5b6) ) // spell library
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
@ -128,7 +128,11 @@ class polgar_state : public mboard_state
|
||||
{
|
||||
public:
|
||||
polgar_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: mboard_state(mconfig, type, tag) { }
|
||||
: mboard_state(mconfig, type, tag),
|
||||
m_lcdc(*this, "hd44780")
|
||||
{ }
|
||||
|
||||
optional_device<hd44780_device> m_lcdc;
|
||||
|
||||
UINT8 led_status;
|
||||
UINT8 lcd_char;
|
||||
@ -203,13 +207,6 @@ public:
|
||||
void common_chess_start();
|
||||
};
|
||||
|
||||
static HD44780_INTERFACE( chess_display )
|
||||
{
|
||||
2, // number of lines
|
||||
16, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
static UINT8 convert_imputmask(UINT8 input)
|
||||
{
|
||||
input^=0xff;
|
||||
@ -240,12 +237,7 @@ WRITE8_MEMBER(polgar_state::write_polgar_IO)
|
||||
int i;
|
||||
|
||||
if (BIT(data,1)) {
|
||||
hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
|
||||
if (BIT(data,0)) {
|
||||
hd44780->data_write(space, 128, lcd_char);
|
||||
} else {
|
||||
hd44780->control_write(space, 128, lcd_char);
|
||||
}
|
||||
m_lcdc->write(space, BIT(data,0), lcd_char);
|
||||
}
|
||||
|
||||
if (BIT(data,2) || BIT(data,3)) beep_set_state(machine().device("beep"),1); else beep_set_state(machine().device("beep"),0);
|
||||
@ -330,15 +322,14 @@ WRITE8_MEMBER(polgar_state::write_lcd_IO_sfortea)
|
||||
|
||||
if (BIT(sfortea_latch,2))
|
||||
{
|
||||
hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
|
||||
if(BIT(sfortea_latch,0)) {
|
||||
hd44780->data_write(space, 128, data);
|
||||
m_lcdc->data_write(space, 0, data);
|
||||
logerror("LCD DTA = %02x\n",data);
|
||||
} else {
|
||||
if (BIT(data,7)) {
|
||||
if ((data & 0x7f) >= 0x40) data -= 56; // adjust for 16x1 display as 2 sets of 8
|
||||
}
|
||||
hd44780->control_write(space, 128, data);
|
||||
m_lcdc->control_write(space, 0, data);
|
||||
logerror("LCD CMD = %02x\n",data);
|
||||
}
|
||||
}
|
||||
@ -346,13 +337,7 @@ WRITE8_MEMBER(polgar_state::write_lcd_IO_sfortea)
|
||||
|
||||
WRITE8_MEMBER(polgar_state::write_LCD_academy)
|
||||
{
|
||||
hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
|
||||
|
||||
if (offset) {
|
||||
hd44780->data_write(space, 128, data);
|
||||
} else {
|
||||
hd44780->control_write(space, 128, data);
|
||||
}
|
||||
m_lcdc->write(space, offset & 1, data);
|
||||
}
|
||||
|
||||
// AM_RANGE( 0x3a0000,0x3a0000 ) AM_READ(diablo68_write_LCD)
|
||||
@ -391,17 +376,16 @@ WRITE16_MEMBER(polgar_state::diablo68_reg_select)
|
||||
|
||||
WRITE16_MEMBER(polgar_state::diablo68_write_LCD)
|
||||
{
|
||||
hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
|
||||
data >>= 8;
|
||||
if (!(diablo68_3c0000 & 0x02)) {
|
||||
if (BIT(data,7)) {
|
||||
if ((data & 0x7f) >= 0x40) data -= 56; // adjust for 16x1 display as 2 sets of 8
|
||||
}
|
||||
hd44780->control_write(space, 128, data);
|
||||
m_lcdc->control_write(space, 0, data);
|
||||
// logerror("Control %02x\n", data);
|
||||
// printf("Control %02x\n", data);
|
||||
} else {
|
||||
hd44780->data_write(space, 128, data);
|
||||
m_lcdc->data_write(space, 0, data);
|
||||
// printf("LCDdata %04x [%c]\n", data,data);
|
||||
// logerror("LCDdata %04x [%c]\n", data,data);
|
||||
}
|
||||
@ -890,12 +874,12 @@ static void write_IOenable(unsigned char data,address_space &space) {
|
||||
if (BIT(data,0)) {
|
||||
logerror("Write LCD_DATA [%02x] [%c]\n",lcd32_char,lcd32_char);
|
||||
// printf("Write LCD_DATA [%02x] [%c]\n",lcd32_char,lcd32_char);
|
||||
hd44780->data_write(space, 128, lcd32_char);
|
||||
} else {
|
||||
logerror("Write LCD_CTRL [%02x] [%c]\n",lcd32_char,lcd32_char);
|
||||
// printf("Write LCD_CTRL [%02x] [%c]\n",lcd32_char,lcd32_char);
|
||||
hd44780->control_write(space, 128, lcd32_char);
|
||||
}
|
||||
|
||||
hd44780->write(space, BIT(data,0), lcd32_char);
|
||||
}
|
||||
|
||||
logerror("Write to IOENBL data: %08x\n",data);
|
||||
@ -1087,7 +1071,7 @@ static const gfx_layout chess_charlayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( chess_lcd )
|
||||
GFXDECODE_ENTRY( "hd44780", 0x0000, chess_charlayout, 0, 1 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, chess_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static ADDRESS_MAP_START(polgar_mem , AS_PROGRAM, 8, polgar_state )
|
||||
@ -1519,7 +1503,8 @@ static MACHINE_CONFIG_FRAGMENT ( chess_common )
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||
MCFG_GFXDECODE(chess_lcd)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780", chess_display)
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 16)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
@ -1713,8 +1698,6 @@ MACHINE_CONFIG_END
|
||||
ROM_START(polgar)
|
||||
ROM_REGION(0x10000,"maincpu",0)
|
||||
ROM_LOAD("polgar.bin", 0x0000, 0x10000, CRC(88d55c0f) SHA1(e86d088ec3ac68deaf90f6b3b97e3e31b1515913))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START(sfortea)
|
||||
@ -1722,27 +1705,17 @@ ROM_START(sfortea)
|
||||
ROM_LOAD("sfalo.bin", 0x0000, 0x8000, CRC(86e0230a) SHA1(0d6e18a17e636b8c7292c8f331349d361892d1a8))
|
||||
ROM_LOAD("sfahi.bin", 0x8000, 0x8000, CRC(81c02746) SHA1(0bf68b68ade5a3263bead88da0a8965fc71483c1))
|
||||
ROM_LOAD("sfabook.bin", 0x10000, 0x8000, CRC(3e42cf7c) SHA1(b2faa36a127e08e5755167a25ed4a07f12d62957))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( alm16 )
|
||||
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000,CRC(EE5B6EC4) SHA1(30920C1B9E16FFAE576DA5AFA0B56DA59ADA3DBB))
|
||||
ROM_LOAD16_BYTE("alm16odd.bin" , 0x00001, 0x10000,CRC(D0BE4EE4) SHA1(D36C074802D2C9099CD44E75F9DE3FC7D1FD9908))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( alm32 )
|
||||
ROM_REGION32_BE( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD("alm32.bin", 0x00000, 0x20000,CRC(38F4B305) SHA1(43459A057FF29248C74D656A036AC325202B9C15))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START(sforteb)
|
||||
@ -1750,8 +1723,6 @@ ROM_START(sforteb)
|
||||
ROM_LOAD("forte_b.lo", 0x0000, 0x8000, CRC(48bfe5d6) SHA1(323642686b6d2fb8db2b7d50c6cd431058078ce1))
|
||||
ROM_LOAD("forte_b.hi1", 0x8000, 0x8000, CRC(9778ca2c) SHA1(d8b88b9768a1a9171c68cbb0892b817d68d78351))
|
||||
ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START(sforteba)
|
||||
@ -1759,8 +1730,6 @@ ROM_START(sforteba)
|
||||
ROM_LOAD("forte b_l.bin", 0x0000, 0x8000, CRC(e3d194a1) SHA1(80457580d7c57e07895fd14bfdaf14b30952afca))
|
||||
ROM_LOAD("forte b_h.bin", 0x8000, 0x8000, CRC(dd824be8) SHA1(cd8666b6b525887f9fc48a730b71ceabcf07f3b9))
|
||||
ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, BAD_DUMP CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START(sexpertb)
|
||||
@ -1768,16 +1737,12 @@ ROM_START(sexpertb)
|
||||
ROM_LOAD("seb69u3.bin", 0x0000, 0x8000, CRC(92002eb6) SHA1(ed8ca16701e00b48fa55c856fa4a8c6613079c02))
|
||||
ROM_LOAD("seb69u1.bin", 0x8000, 0x8000, CRC(814b4420) SHA1(c553e6a8c048dcc1cf48d410111a86e06b99d356))
|
||||
ROM_LOAD("seb605u2.bin", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START(academy)
|
||||
ROM_REGION(0x10000,"maincpu",0)
|
||||
ROM_LOAD("acad8000.bin", 0x8000, 0x8000, CRC(A967922B) SHA1(1327903FF89BF96D72C930C400F367AE19E3EC68))
|
||||
ROM_LOAD("acad4000.bin", 0x4000, 0x4000, CRC(EE1222B5) SHA1(98541D87755A7186B69B9723CC4ADBD07F20F0E2))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START(megaiv)
|
||||
@ -1789,8 +1754,6 @@ ROM_END
|
||||
ROM_START(milano)
|
||||
ROM_REGION(0x10000,"maincpu",0)
|
||||
ROM_LOAD("milano.bin", 0x0000, 0x10000, CRC(0e9c8fe1) SHA1(e9176f42d86fe57e382185c703c7eff7e63ca711))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -1799,8 +1762,6 @@ ROM_START(sfortec)
|
||||
ROM_LOAD("sfclow.bin", 0x0000, 0x8000, CRC(f040cf30) SHA1(1fc1220b8ed67cdffa3866d230ce001721cf684f))
|
||||
ROM_LOAD("sfchi.bin", 0x8000, 0x8000, CRC(0f926b32) SHA1(9c7270ecb3f41dd9172a9a7928e6e04e64b2a340))
|
||||
ROM_LOAD("sfcbook.bin", 0x10000, 0x8000, CRC(c6a1419a) SHA1(017a0ffa9aa59438c879624a7ddea2071d1524b8))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -1809,27 +1770,17 @@ ROM_START(sexpertc)
|
||||
ROM_LOAD("seclow.bin", 0x0000, 0x8000, CRC(5a29105e) SHA1(be37bb29b530dbba847a5e8d27d81b36525e47f7))
|
||||
ROM_LOAD("sechi.bin", 0x8000, 0x8000, CRC(0085c2c4) SHA1(d84bf4afb022575db09dd9dc12e9b330acce35fa))
|
||||
ROM_LOAD("secbook.bin", 0x10000, 0x8000, CRC(2d085064) SHA1(76162322aa7d23a5c07e8356d0bbbb33816419af))
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( lyon16 )
|
||||
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000,CRC(497BD41A) SHA1(3FFEFEEAC694F49997C10D248EC6A7AA932898A4))
|
||||
ROM_LOAD16_BYTE("lyon16od.bin" , 0x00001, 0x10000,CRC(F9DE3F54) SHA1(4060E29566D2F40122CCDE3C1F84C94A9C1ED54F))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( lyon32 )
|
||||
ROM_REGION32_BE( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD("lyon32.bin", 0x00000, 0x20000, CRC(5C128B06) SHA1(954C8F0D3FAE29900CB1E9C14A41A9A07A8E185F))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -1844,103 +1795,59 @@ ROM_START( diablo68 )
|
||||
ROM_LOAD16_BYTE("evenurom.bin", 0x00000, 0x8000,CRC(03477746) SHA1(8bffcb159a61e59bfc45411e319aea6501ebe2f9))
|
||||
ROM_LOAD16_BYTE("oddlrom.bin", 0x00001, 0x8000,CRC(e182dbdd) SHA1(24dacbef2173fa737636e4729ff22ec1e6623ca5))
|
||||
ROM_LOAD16_BYTE("book.bin", 0x10000, 0x8000,CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( van16 )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE("va16even.bin", 0x00000, 0x20000,CRC(E87602D5) SHA1(90CB2767B4AE9E1B265951EB2569B9956B9F7F44))
|
||||
ROM_LOAD16_BYTE("va16odd.bin" , 0x00001, 0x20000,CRC(585F3BDD) SHA1(90BB94A12D3153A91E3760020E1EA2A9EAA7EC0A))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( van32 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("vanc32.bin", 0x00000, 0x40000,CRC(F872BEB5) SHA1(9919F207264F74E2B634B723B048AE9CA2CEFBC7))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( risc )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( gen32 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("gen32_4.bin", 0x00000, 0x40000,CRC(6CC4DA88) SHA1(EA72ACF9C67ED17C6AC8DE56A165784AA629C4A1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( gen32_41 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("gen32_41.bin", 0x00000, 0x40000,CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( gen32_oc )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("gen32_41.bin", 0x00000, 0x40000,CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( berlinp )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("berlinp.bin", 0x00000, 0x40000,CRC(82FBAF6E) SHA1(729B7CEF3DFAECC4594A6178FC4BA6015AFA6202))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( bpl32 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("bpl32.bin", 0x00000, 0x40000,CRC(D75E170F) SHA1(AC0EBDAA114ABD4FEF87361A03DF56928768B1AE))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( lond020 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("lond020.bin", 0x00000, 0x40000,CRC(3225B8DA) SHA1(FD8F6F4E9C03B6CDC86D8405E856C26041BFAD12))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
ROM_START( lond030 )
|
||||
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD("lond030.bin", 0x00000, 0x40000,CRC(853BAA4E) SHA1(946951081D4E91E5BDD9E93D0769568A7FE79BAD))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(polgar_state,polgar)
|
||||
|
@ -114,8 +114,7 @@ static ADDRESS_MAP_START( pc2000_io , AS_IO, 8, pc2000_state)
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(rombank1_w)
|
||||
AM_RANGE(0x03, 0x03) AM_WRITE(rombank2_w)
|
||||
AM_RANGE(0x0a, 0x0a) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write)
|
||||
AM_RANGE(0x0b, 0x0b) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write)
|
||||
AM_RANGE(0x0a, 0x0b) AM_DEVREADWRITE("hd44780", hd44780_device, read, write)
|
||||
AM_RANGE(0x10, 0x11) AM_READWRITE(key_matrix_r, key_matrix_w)
|
||||
AM_RANGE(0x12, 0x12) AM_READWRITE(beep_r, beep_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -314,16 +313,9 @@ static const gfx_layout hd44780_charlayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( pc2000 )
|
||||
GFXDECODE_ENTRY( "hd44780", 0x0000, hd44780_charlayout, 0, 1 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, hd44780_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static HD44780_INTERFACE( pc2000_display )
|
||||
{
|
||||
2, // number of lines
|
||||
20, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( pc2000, pc2000_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) /* probably not accurate */
|
||||
@ -343,7 +335,8 @@ static MACHINE_CONFIG_START( pc2000, pc2000_state )
|
||||
MCFG_GFXDECODE(pc2000)
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780", pc2000_display)
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 20)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO( "mono" )
|
||||
@ -360,9 +353,6 @@ ROM_START( pc2000 )
|
||||
ROM_REGION( 0x40000, "bios", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "lh532hee_9344_d.u4", 0x000000, 0x040000, CRC(0b03bf33) SHA1(cb344b94b14975c685041d3e669f386e8a21909f))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
|
||||
ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
|
||||
ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
|
||||
ROM_END
|
||||
|
@ -194,10 +194,7 @@ WRITE8_MEMBER( psion_state::io_w )
|
||||
switch (offset & 0x0ffc0)
|
||||
{
|
||||
case 0x80:
|
||||
if (offset & 1)
|
||||
m_lcdc->data_write(space, offset, data);
|
||||
else
|
||||
m_lcdc->control_write(space, offset, data);
|
||||
m_lcdc->write(space, offset & 0x01, data);
|
||||
break;
|
||||
default:
|
||||
io_rw(space, offset);
|
||||
@ -209,10 +206,7 @@ READ8_MEMBER( psion_state::io_r )
|
||||
switch (offset & 0xffc0)
|
||||
{
|
||||
case 0x80:
|
||||
if (offset & 1)
|
||||
return m_lcdc->data_read(space, offset);
|
||||
else
|
||||
return m_lcdc->control_read(space, offset);
|
||||
return m_lcdc->read(space, offset & 0x01);
|
||||
default:
|
||||
io_rw(space, offset);
|
||||
}
|
||||
@ -437,6 +431,24 @@ void psion_state::machine_reset()
|
||||
update_banks(machine());
|
||||
}
|
||||
|
||||
|
||||
HD44780_PIXEL_UPDATE(psion_state::lz_pixel_update)
|
||||
{
|
||||
if (pos < 40)
|
||||
{
|
||||
static const UINT8 psion_display_layout[] =
|
||||
{
|
||||
0x00, 0x01, 0x02, 0x03, 0x28, 0x29, 0x2a, 0x2b, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x2c, 0x2d, 0x2e, 0x2f,
|
||||
0x30, 0x31, 0x32, 0x33, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
|
||||
0x14, 0x15, 0x16, 0x17, 0x3c, 0x3d, 0x3e, 0x3f, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x40, 0x41, 0x42, 0x43,
|
||||
0x44, 0x45, 0x46, 0x47, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
|
||||
};
|
||||
|
||||
UINT8 char_pos = psion_display_layout[line*40 + pos];
|
||||
bitmap.pix16((char_pos / 20) * 9 + y, (char_pos % 20) * 6 + x) = state;
|
||||
}
|
||||
}
|
||||
|
||||
void psion_state::palette_init()
|
||||
{
|
||||
palette_set_color(machine(), 0, MAKE_RGB(138, 146, 148));
|
||||
@ -455,16 +467,9 @@ static const gfx_layout psion_charlayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( psion )
|
||||
GFXDECODE_ENTRY( "hd44780", 0x0000, psion_charlayout, 0, 1 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, psion_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static HD44780_INTERFACE( psion_2line_display )
|
||||
{
|
||||
2, // number of lines
|
||||
16, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
/* basic configuration for 2 lines display */
|
||||
static MACHINE_CONFIG_START( psion_2lines, psion_state )
|
||||
/* basic machine hardware */
|
||||
@ -481,7 +486,8 @@ static MACHINE_CONFIG_START( psion_2lines, psion_state )
|
||||
MCFG_PALETTE_LENGTH(2)
|
||||
MCFG_GFXDECODE(psion)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780", psion_2line_display)
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 16)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO( "mono" )
|
||||
@ -500,14 +506,6 @@ static MACHINE_CONFIG_START( psion_2lines, psion_state )
|
||||
MCFG_SOFTWARE_LIST_ADD("pack_list", "psion")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static HD44780_INTERFACE( psion_4line_display )
|
||||
{
|
||||
4, // number of lines
|
||||
20, // chars for line
|
||||
NULL // pixel update callback
|
||||
};
|
||||
|
||||
/* basic configuration for 4 lines display */
|
||||
static MACHINE_CONFIG_DERIVED( psion_4lines, psion_2lines )
|
||||
/* video hardware */
|
||||
@ -515,8 +513,9 @@ static MACHINE_CONFIG_DERIVED( psion_4lines, psion_2lines )
|
||||
MCFG_SCREEN_SIZE(6*20, 9*4)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 6*20-1, 0, 9*4-1)
|
||||
|
||||
MCFG_DEVICE_REMOVE("hd44780")
|
||||
MCFG_PSION_CUSTOM_LCDC_ADD("hd44780", psion_4line_display)
|
||||
MCFG_DEVICE_MODIFY("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(4, 20)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(psion_state::lz_pixel_update)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( psioncm, psion_2lines )
|
||||
@ -554,18 +553,12 @@ ROM_START( psioncm )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v24", "CM v2.4")
|
||||
ROMX_LOAD( "24-cm.dat", 0x8000, 0x8000, CRC(f6798394) SHA1(736997f0db9a9ee50d6785636bdc3f8ff1c33c66), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionla )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v33", "LA v3.3")
|
||||
ROMX_LOAD( "33-la.dat", 0x8000, 0x8000, CRC(02668ed4) SHA1(e5d4ee6b1cde310a2970ffcc6f29a0ce09b08c46), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionp350 )
|
||||
@ -574,54 +567,36 @@ ROM_START( psionp350 )
|
||||
ROMX_LOAD( "36-p350.dat", 0x8000, 0x8000, CRC(3a371a74) SHA1(9167210b2c0c3bd196afc08ca44ab23e4e62635e), ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS(1, "v38", "POS350 v3.8")
|
||||
ROMX_LOAD( "38-p350.dat", 0x8000, 0x8000, CRC(1b8b082f) SHA1(a3e875a59860e344f304a831148a7980f28eaa4a), ROM_BIOS(2))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionlam )
|
||||
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v37", "LA v3.7")
|
||||
ROMX_LOAD( "37-lam.dat", 0x8000, 0x10000, CRC(7ee3a1bc) SHA1(c7fbd6c8e47c9b7d5f636e9f56e911b363d6796b), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionlz64 )
|
||||
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v44", "LZ64 v4.4")
|
||||
ROMX_LOAD( "44-lz64.dat", 0x8000, 0x10000, CRC(aa487913) SHA1(5a44390f63fc8c1bc94299ab2eb291bc3a5b989a), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionlz64s )
|
||||
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v46", "LZ64 v4.6")
|
||||
ROMX_LOAD( "46-lz64s.dat", 0x8000, 0x10000, CRC(328d9772) SHA1(7f9e2d591d59ecfb0822d7067c2fe59542ea16dd), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionlz )
|
||||
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v46", "LZ v4.6")
|
||||
ROMX_LOAD( "46-lz.dat", 0x8000, 0x10000, CRC(22715f48) SHA1(cf460c81cadb53eddb7afd8dadecbe8c38ea3fc2), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
ROM_START( psionp464 )
|
||||
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS(0, "v46", "POS464 v4.6")
|
||||
ROMX_LOAD( "46-p464.dat", 0x8000, 0x10000, CRC(672a0945) SHA1(d2a6e3fe1019d1bd7ae4725e33a0b9973f8cd7d8), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
@ -70,6 +70,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/h83002/h8.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "rendlay.h"
|
||||
|
||||
static INPUT_PORTS_START( mu100 )
|
||||
INPUT_PORTS_END
|
||||
@ -166,27 +167,22 @@ static ADDRESS_MAP_START( mu100_iomap, AS_IO, 8, mu100_state )
|
||||
AM_RANGE(H8_ADC_7_H, H8_ADC_7_L) AM_READ(adc7_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static HD44780_INTERFACE( lcd_config )
|
||||
{
|
||||
4,
|
||||
20,
|
||||
NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( mu100, mu100_state )
|
||||
MCFG_CPU_ADD( "maincpu", H8S2655, XTAL_16MHz )
|
||||
MCFG_CPU_PROGRAM_MAP( mu100_map )
|
||||
MCFG_CPU_IO_MAP( mu100_iomap )
|
||||
|
||||
MCFG_HD44780_ADD("lcd", lcd_config)
|
||||
MCFG_HD44780_ADD("lcd")
|
||||
MCFG_HD44780_LCD_SIZE(4, 20)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate, asynchronous updating anyway */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("lcd", hd44780_device, screen_update)
|
||||
MCFG_SCREEN_SIZE(320, 200)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
|
||||
MCFG_SCREEN_SIZE(20*6, 4*9)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 20*6-1, 0, 4*9-1)
|
||||
MCFG_PALETTE_LENGTH(2)
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
MACHINE_CONFIG_END
|
||||
@ -206,9 +202,6 @@ ROM_START( mu100 )
|
||||
ROM_LOAD32_WORD( "sx743b0.ic35", 0x000002, 0x400000, CRC(a9109a6c) SHA1(a67bb49378a38a2d809bd717d286e18bc6496db0) )
|
||||
ROM_LOAD32_WORD( "xt445a0-828.ic36", 0x800000, 0x1000000, CRC(d4483a43) SHA1(5bfd0762dea8598eda19db20251dac20e31fa02c) )
|
||||
ROM_LOAD32_WORD( "xt461a0-829.ic37", 0x800002, 0x1000000, CRC(c5af4501) SHA1(1c88de197c36382311053add8b19a5740802cb78) )
|
||||
|
||||
ROM_REGION( 0x0860, "lcd", ROMREGION_ERASE )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
CONS( 1997, mu100, 0, 0, mu100, mu100, driver_device, 0, "Yamaha", "MU100", GAME_NOT_WORKING )
|
||||
|
@ -14,23 +14,6 @@
|
||||
#include "video/hd44780.h"
|
||||
#include "sound/beep.h"
|
||||
|
||||
#define MCFG_PSION_CUSTOM_LCDC_ADD( _tag , _config) \
|
||||
MCFG_DEVICE_ADD( _tag, PSION_CUSTOM_LCDC, 0 ) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
// ======================> psion_custom_lcdc
|
||||
|
||||
class psion_custom_lcdc : public hd44780_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
psion_custom_lcdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// hd44780_device overrides
|
||||
virtual DECLARE_WRITE8_MEMBER(control_write);
|
||||
virtual UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
|
||||
// ======================> psion_state
|
||||
|
||||
@ -86,9 +69,8 @@ public:
|
||||
virtual void palette_init();
|
||||
DECLARE_INPUT_CHANGED_MEMBER(psion_on);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
|
||||
|
||||
static HD44780_PIXEL_UPDATE(lz_pixel_update);
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type PSION_CUSTOM_LCDC;
|
||||
|
||||
#endif // _PSION_H_
|
||||
|
@ -1548,7 +1548,6 @@ $(MESSOBJ)/poly88.a: \
|
||||
|
||||
$(MESSOBJ)/psion.a: \
|
||||
$(MESS_DRIVERS)/psion.o \
|
||||
$(MESS_VIDEO)/psion.o \
|
||||
$(MESS_MACHINE)/psion_pack.o \
|
||||
|
||||
$(MESSOBJ)/radio.a: \
|
||||
|
@ -3,42 +3,30 @@
|
||||
Hitachi HD44780 LCD controller
|
||||
|
||||
TODO:
|
||||
- 5x10 chars
|
||||
- dump internal CGROM
|
||||
|
||||
HACKS:
|
||||
- A00 10 bit chars are tacked onto recreated chrrom at $700 (until internal rom is dumped)
|
||||
- A00/A02 drawing selected by sizeof romfile, A02 is $800, A00 is $860
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "video/hd44780.h"
|
||||
|
||||
// devices
|
||||
#define LOG 0
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type HD44780 = &device_creator<hd44780_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
// ROM( hd44780 )
|
||||
//-------------------------------------------------
|
||||
|
||||
void hd44780_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const hd44780_interface *intf = reinterpret_cast<const hd44780_interface *>(static_config());
|
||||
|
||||
if (intf != NULL)
|
||||
*static_cast<hd44780_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
height = width = 0;
|
||||
pixel_update_func = NULL;
|
||||
}
|
||||
}
|
||||
ROM_START( hd44780 )
|
||||
ROM_REGION( 0x0860, "cgrom", 0 )
|
||||
ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
|
||||
ROM_END
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -50,13 +38,26 @@ void hd44780_device::device_config_complete()
|
||||
//-------------------------------------------------
|
||||
|
||||
hd44780_device::hd44780_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, HD44780, "HD44780", tag, owner, clock)
|
||||
device_t(mconfig, HD44780, "HD44780", tag, owner, clock),
|
||||
m_pixel_update_func(NULL)
|
||||
{
|
||||
m_shortname = "hd44780";
|
||||
}
|
||||
|
||||
hd44780_device::hd44780_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, type, name, tag, owner, clock)
|
||||
device_t(mconfig, type, name, tag, owner, clock),
|
||||
m_pixel_update_func(NULL)
|
||||
{
|
||||
m_shortname = "hd44780";
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const rom_entry *hd44780_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( hd44780 );
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -65,58 +66,61 @@ hd44780_device::hd44780_device(const machine_config &mconfig, device_type type,
|
||||
|
||||
void hd44780_device::device_start()
|
||||
{
|
||||
m_busy_timer = timer_alloc(BUSY_TIMER);
|
||||
m_blink_timer = timer_alloc(BLINKING_TIMER);
|
||||
if (region())
|
||||
m_cgrom = (UINT8*)(*region());
|
||||
else
|
||||
m_cgrom = (UINT8*)(*memregion("cgrom"));
|
||||
|
||||
m_busy_timer = timer_alloc(TIMER_BUSY);
|
||||
m_blink_timer = timer_alloc(TIMER_BLINKING);
|
||||
m_blink_timer->adjust(attotime::from_msec(409), 0, attotime::from_msec(409));
|
||||
|
||||
save_item( NAME(m_ac));
|
||||
save_item( NAME(m_ac_mode));
|
||||
save_item( NAME(m_data_bus_flag));
|
||||
save_item( NAME(m_cursor_pos));
|
||||
save_item( NAME(m_display_on));
|
||||
save_item( NAME(m_cursor_on));
|
||||
save_item( NAME(m_shift_on));
|
||||
save_item( NAME(m_blink_on));
|
||||
save_item( NAME(m_direction));
|
||||
save_item( NAME(m_data_len));
|
||||
save_item( NAME(m_num_line));
|
||||
save_item( NAME(m_char_size));
|
||||
save_item( NAME(m_disp_shift));
|
||||
save_item( NAME(m_blink));
|
||||
save_item( NAME(m_ddram));
|
||||
save_item( NAME(m_cgram));
|
||||
save_item( NAME(m_nibble));
|
||||
save_item( NAME(m_data_latch));
|
||||
// state saving
|
||||
save_item(NAME(m_busy_flag));
|
||||
save_item(NAME(m_ac));
|
||||
save_item(NAME(m_dr));
|
||||
save_item(NAME(m_ir));
|
||||
save_item(NAME(m_active_ram));
|
||||
save_item(NAME(m_display_on));
|
||||
save_item(NAME(m_cursor_on));
|
||||
save_item(NAME(m_shift_on));
|
||||
save_item(NAME(m_blink_on));
|
||||
save_item(NAME(m_direction));
|
||||
save_item(NAME(m_data_len));
|
||||
save_item(NAME(m_num_line));
|
||||
save_item(NAME(m_char_size));
|
||||
save_item(NAME(m_disp_shift));
|
||||
save_item(NAME(m_blink));
|
||||
save_item(NAME(m_ddram));
|
||||
save_item(NAME(m_cgram));
|
||||
save_item(NAME(m_nibble));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void hd44780_device::device_reset()
|
||||
{
|
||||
m_busy_flag = 0;
|
||||
|
||||
memset(m_ddram, 0x20, sizeof(m_ddram)); // can't use 0 here as it would show CGRAM instead of blank space on a soft reset
|
||||
memset(m_cgram, 0, sizeof(m_cgram));
|
||||
m_ac = 0;
|
||||
m_ac_mode = 0;
|
||||
m_data_bus_flag = 0;
|
||||
m_cursor_pos = 0;
|
||||
m_display_on = 0;
|
||||
m_cursor_on = 0;
|
||||
m_shift_on = 0;
|
||||
m_blink_on = 0;
|
||||
m_direction = 1;
|
||||
m_data_len = -1; // must not be 0 or 1 on intial start to pick up first 4/8 bit mode change
|
||||
m_num_line = 0;
|
||||
m_char_size = 0;
|
||||
|
||||
m_ac = 0;
|
||||
m_dr = 0;
|
||||
m_ir = 0;
|
||||
m_active_ram = DDRAM;
|
||||
m_display_on = false;
|
||||
m_cursor_on = false;
|
||||
m_blink_on = false;
|
||||
m_shift_on = false;
|
||||
m_direction = 1;
|
||||
m_data_len = 8;
|
||||
m_num_line = 1;
|
||||
m_char_size = 8;
|
||||
m_disp_shift = 0;
|
||||
m_blink = 0;
|
||||
m_nibble = false;
|
||||
m_data_latch = 0;
|
||||
m_blink = false;
|
||||
m_nibble = false;
|
||||
m_first_cmd = true;
|
||||
|
||||
set_busy_flag(1520);
|
||||
}
|
||||
@ -125,54 +129,117 @@ void hd44780_device::device_reset()
|
||||
//-------------------------------------------------
|
||||
// device_timer - handler timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void hd44780_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch(id)
|
||||
{
|
||||
case BUSY_TIMER:
|
||||
m_busy_flag = 0;
|
||||
case TIMER_BUSY:
|
||||
m_busy_flag = false;
|
||||
break;
|
||||
|
||||
case BLINKING_TIMER:
|
||||
case TIMER_BLINKING:
|
||||
m_blink = !m_blink;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// HELPERS
|
||||
//**************************************************************************
|
||||
|
||||
void hd44780_device::set_busy_flag(UINT16 usec)
|
||||
{
|
||||
m_busy_flag = 1;
|
||||
|
||||
m_busy_flag = true;
|
||||
m_busy_timer->adjust( attotime::from_usec( usec ) );
|
||||
}
|
||||
|
||||
void hd44780_device::update_ac(int direction)
|
||||
{
|
||||
if (m_active_ram == DDRAM)
|
||||
{
|
||||
if(direction == 1)
|
||||
{
|
||||
if(m_num_line == 2 && m_ac == 0x27)
|
||||
m_ac = 0x40;
|
||||
else if((m_num_line == 2 && m_ac == 0x67) || (m_num_line == 1 && m_ac == 0x4f))
|
||||
m_ac = 0x00;
|
||||
else
|
||||
m_ac = (m_ac + direction) & 0x7f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_num_line == 2 && m_ac == 0x00)
|
||||
m_ac = 0x67;
|
||||
else if(m_num_line == 1 && m_ac == 0x00)
|
||||
m_ac = 0x4f;
|
||||
else if(m_num_line == 2 && m_ac == 0x40)
|
||||
m_ac = 0x27;
|
||||
else
|
||||
m_ac = (m_ac + direction) & 0x7f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ac = (m_ac + direction) & 0x3f;
|
||||
}
|
||||
}
|
||||
|
||||
inline void hd44780_device::pixel_update(bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state)
|
||||
{
|
||||
if (pixel_update_func != NULL)
|
||||
pixel_update_func(*this, bitmap, line, pos, y, x, state);
|
||||
if (m_pixel_update_func != NULL)
|
||||
{
|
||||
m_pixel_update_func(*this, bitmap, line, pos, y, x, state);
|
||||
}
|
||||
else
|
||||
bitmap.pix16(line*9 + y, pos*6 + x) = state;
|
||||
{
|
||||
if (m_lines <= 2)
|
||||
{
|
||||
if (pos < m_chars)
|
||||
bitmap.pix16(line * (m_char_size+1) + y, pos * 6 + x) = state;
|
||||
}
|
||||
else if (m_lines <= 4)
|
||||
{
|
||||
if (pos < m_chars*2)
|
||||
{
|
||||
if (pos >= m_chars)
|
||||
{
|
||||
line += 2;
|
||||
pos -= m_chars;
|
||||
}
|
||||
|
||||
if (line < m_lines)
|
||||
bitmap.pix16(line * (m_char_size+1) + y, pos * 6 + x) = state;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fatalerror("%s: use a custom callback for this LCD configuration (%d x %d)\n", tag(), m_lines, m_chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// device interface
|
||||
//**************************************************************************
|
||||
|
||||
UINT32 hd44780_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
assert(height*9 <= bitmap.height() && width*6 <= bitmap.width());
|
||||
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
if (m_display_on)
|
||||
for (int l=0; l<height; l++)
|
||||
for (int i=0; i<width; i++)
|
||||
{
|
||||
UINT8 line_base = l * 0x40;
|
||||
UINT8 line_size = (m_num_line) ? 40 : 80;
|
||||
INT8 char_pos = line_base + i;
|
||||
{
|
||||
UINT8 line_size = 80 / m_num_line;
|
||||
|
||||
char_pos += m_disp_shift;
|
||||
for (int line=0; line<m_num_line; line++)
|
||||
{
|
||||
UINT8 line_base = line * 0x40;
|
||||
|
||||
for (int pos=0; pos<line_size; pos++)
|
||||
{
|
||||
INT16 char_pos = line_base + pos + m_disp_shift;
|
||||
|
||||
while (char_pos < 0 || (char_pos - line_base) >= line_size)
|
||||
{
|
||||
@ -182,222 +249,253 @@ UINT32 hd44780_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap
|
||||
char_pos -= line_size;
|
||||
}
|
||||
|
||||
for (int y=0; y<8; y++)
|
||||
int char_base = 0;
|
||||
if (m_ddram[char_pos] < 0x10)
|
||||
{
|
||||
// draw CGRAM characters
|
||||
if (m_char_size == 8)
|
||||
char_base = (m_ddram[char_pos] & 0x07) * 8;
|
||||
else
|
||||
char_base = (m_ddram[char_pos] & 0x03) * 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
// draw CGROM characters
|
||||
if (m_ddram[char_pos] < 0xe0)
|
||||
char_base = m_ddram[char_pos] * 8;
|
||||
else
|
||||
char_base = 0x700 + ((m_ddram[char_pos] - 0xe0) * 11);
|
||||
}
|
||||
|
||||
for (int y=0; y<m_char_size; y++)
|
||||
{
|
||||
UINT8 * charset = (m_ddram[char_pos] < 0x10) ? m_cgram : m_cgrom;
|
||||
|
||||
for (int x=0; x<5; x++)
|
||||
if (m_ddram[char_pos] <= 0x10)
|
||||
{
|
||||
//draw CGRAM characters
|
||||
pixel_update(bitmap, l, i, y, x, BIT(m_cgram[(m_ddram[char_pos]&0x07)*8+y], 4-x));
|
||||
}
|
||||
{
|
||||
if (m_ddram[char_pos] >= 0xe0 || y < 8)
|
||||
pixel_update(bitmap, line, pos, y, x, BIT(charset[char_base + y], 4 - x));
|
||||
else
|
||||
{
|
||||
//draw CGROM characters
|
||||
if (region()->bytes() <= 0x800)
|
||||
{
|
||||
pixel_update(bitmap, l, i, y, x, BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_ddram[char_pos] < 0xe0)
|
||||
pixel_update(bitmap, l, i, y, x, BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x));
|
||||
else
|
||||
pixel_update(bitmap, l, i, y, x, BIT(region()->u8(0x700+((m_ddram[char_pos]-0xe0)*11)+y), 4-x));
|
||||
}
|
||||
}
|
||||
pixel_update(bitmap, line, pos, y, x, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// if is the correct position draw cursor and blink
|
||||
if (char_pos == m_cursor_pos)
|
||||
if (char_pos == m_ac)
|
||||
{
|
||||
//draw the cursor
|
||||
// draw the cursor
|
||||
if (m_cursor_on)
|
||||
for (int x=0; x<5; x++)
|
||||
pixel_update(bitmap, l, i, 7, x, 1);
|
||||
pixel_update(bitmap, line, pos, m_char_size - 1, x, 1);
|
||||
|
||||
if (!m_blink && m_blink_on)
|
||||
for (int y=0; y<7; y++)
|
||||
for (int y=0; y<(m_char_size - 1); y++)
|
||||
for (int x=0; x<5; x++)
|
||||
pixel_update(bitmap, l, i, y, x, 1);
|
||||
pixel_update(bitmap, line, pos, y, x, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(hd44780_device::read)
|
||||
{
|
||||
switch(offset & 0x01)
|
||||
{
|
||||
case 0: return control_read(space, 0);
|
||||
case 1: return data_read(space, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hd44780_device::write)
|
||||
{
|
||||
switch(offset & 0x01)
|
||||
{
|
||||
case 0: control_write(space, 0, data); break;
|
||||
case 1: data_write(space, 0, data); break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hd44780_device::control_write)
|
||||
{
|
||||
if (m_data_len == 0)
|
||||
if (m_data_len == 4)
|
||||
{
|
||||
m_nibble = !m_nibble;
|
||||
|
||||
if (m_nibble)
|
||||
{
|
||||
m_data_latch = data & 0xf0;
|
||||
m_ir = data & 0xf0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data_latch |= ((data>>4) & 0x0f);
|
||||
m_ir |= ((data>>4) & 0x0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data_latch = data;
|
||||
m_ir = data;
|
||||
}
|
||||
|
||||
if (BIT(m_data_latch, 7)) // Set DDRAM Address
|
||||
if (BIT(m_ir, 7)) // set DDRAM address
|
||||
{
|
||||
m_ac_mode = 0;
|
||||
m_ac = m_data_latch & 0x7f;
|
||||
m_cursor_pos = m_ac;
|
||||
m_active_ram = DDRAM;
|
||||
m_ac = m_ir & 0x7f;
|
||||
set_busy_flag(37);
|
||||
}
|
||||
else if (BIT(m_data_latch, 6)) // Set CGRAM Address
|
||||
{
|
||||
m_ac_mode = 1;
|
||||
m_ac = m_data_latch & 0x3f;
|
||||
set_busy_flag(37);
|
||||
}
|
||||
else if (BIT(m_data_latch, 5)) // Function Set
|
||||
{
|
||||
// datasheet says you can't change char size after first function set without altering 4/8 bit mode
|
||||
if (BIT(m_data_latch, 4) != m_data_len)
|
||||
m_char_size = BIT(m_data_latch, 2);
|
||||
|
||||
m_data_len = BIT(m_data_latch, 4);
|
||||
m_num_line = BIT(m_data_latch, 3);
|
||||
set_busy_flag(37);
|
||||
if (LOG) logerror("HD44780 '%s': set DDRAM address %x\n", tag(), m_ac);
|
||||
}
|
||||
else if (BIT(m_data_latch, 4)) // Cursor or display shift
|
||||
else if (BIT(m_ir, 6)) // set CGRAM address
|
||||
{
|
||||
UINT8 direct = (BIT(m_data_latch, 2)) ? +1 : -1;
|
||||
m_active_ram = CGRAM;
|
||||
m_ac = m_ir & 0x3f;
|
||||
set_busy_flag(37);
|
||||
|
||||
if (BIT(m_data_latch, 3))
|
||||
m_disp_shift += direct;
|
||||
else
|
||||
if (LOG) logerror("HD44780 '%s': set CGRAM address %x\n", tag(), m_ac);
|
||||
}
|
||||
else if (BIT(m_ir, 5)) // function set
|
||||
{
|
||||
if (!m_first_cmd && m_data_len == (BIT(m_ir, 4) ? 8 : 4) && (m_char_size != (BIT(m_ir, 2) ? 10 : 8) || m_num_line != (BIT(m_ir, 3) + 1)))
|
||||
{
|
||||
m_ac += direct;
|
||||
m_cursor_pos += direct;
|
||||
logerror("HD44780 '%s': function set cannot be executed after other instructions unless the interface data length is changed\n", tag());
|
||||
return;
|
||||
}
|
||||
|
||||
m_char_size = BIT(m_ir, 2) ? 10 : 8;
|
||||
m_data_len = BIT(m_ir, 4) ? 8 : 4;
|
||||
m_num_line = BIT(m_ir, 3) + 1;
|
||||
set_busy_flag(37);
|
||||
|
||||
if (LOG) logerror("HD44780 '%s': char size 5x%d, data len %d, lines %d\n", tag(), m_char_size, m_data_len, m_num_line);
|
||||
return;
|
||||
}
|
||||
else if (BIT(m_data_latch, 3)) // Display on/off Control
|
||||
else if (BIT(m_ir, 4)) // cursor or display shift
|
||||
{
|
||||
m_display_on = BIT(m_data_latch, 2);
|
||||
m_cursor_on = BIT(m_data_latch, 1);
|
||||
m_blink_on = BIT(m_data_latch, 0);
|
||||
int direct = (BIT(m_ir, 2)) ? +1 : -1;
|
||||
|
||||
if (LOG) logerror("HD44780 '%s': %s shift %d\n", tag(), BIT(m_ir, 3) ? "display" : "cursor", direct);
|
||||
|
||||
if (BIT(m_ir, 3))
|
||||
m_disp_shift += direct;
|
||||
else
|
||||
update_ac(direct);
|
||||
|
||||
set_busy_flag(37);
|
||||
}
|
||||
else if (BIT(m_data_latch, 2)) // Entry Mode set
|
||||
else if (BIT(m_ir, 3)) // display on/off control
|
||||
{
|
||||
m_direction = (BIT(m_data_latch, 1)) ? +1 : -1;
|
||||
|
||||
m_shift_on = BIT(m_data_latch, 0);
|
||||
|
||||
m_display_on = BIT(m_ir, 2);
|
||||
m_cursor_on = BIT(m_ir, 1);
|
||||
m_blink_on = BIT(m_ir, 0);
|
||||
set_busy_flag(37);
|
||||
|
||||
if (LOG) logerror("HD44780 '%s': display %d, cursor %d, blink %d\n", tag(), m_display_on, m_cursor_on, m_blink_on);
|
||||
}
|
||||
else if (BIT(m_data_latch, 1)) // return home
|
||||
else if (BIT(m_ir, 2)) // entry mode set
|
||||
{
|
||||
m_ac = 0;
|
||||
m_cursor_pos = 0;
|
||||
m_ac_mode = 0; // datasheet does not specifically say this but mephisto won't run without it
|
||||
m_direction = 1;
|
||||
m_direction = (BIT(m_ir, 1)) ? +1 : -1;
|
||||
m_shift_on = BIT(m_ir, 0);
|
||||
set_busy_flag(37);
|
||||
|
||||
if (LOG) logerror("HD44780 '%s': entry mode set: direction %d, shift %d\n", tag(), m_direction, m_shift_on);
|
||||
}
|
||||
else if (BIT(m_ir, 1)) // return home
|
||||
{
|
||||
if (LOG) logerror("HD44780 '%s': return home\n", tag());
|
||||
|
||||
m_ac = 0;
|
||||
m_active_ram = DDRAM;
|
||||
m_direction = 1;
|
||||
m_disp_shift = 0;
|
||||
set_busy_flag(1520);
|
||||
}
|
||||
else if (BIT(m_data_latch, 0)) // clear display
|
||||
else if (BIT(m_ir, 0)) // clear display
|
||||
{
|
||||
m_ac = 0;
|
||||
m_cursor_pos = 0;
|
||||
m_ac_mode = 0;
|
||||
m_direction = 1;
|
||||
if (LOG) logerror("HD44780 '%s': clear display\n", tag());
|
||||
|
||||
m_ac = 0;
|
||||
m_active_ram = DDRAM;
|
||||
m_direction = 1;
|
||||
m_disp_shift = 0;
|
||||
memset(m_ddram, 0x20, sizeof(m_ddram));
|
||||
set_busy_flag(1520);
|
||||
}
|
||||
|
||||
m_first_cmd = false;
|
||||
}
|
||||
|
||||
READ8_MEMBER(hd44780_device::control_read)
|
||||
{
|
||||
if (m_data_len == 0)
|
||||
if (m_data_len == 4)
|
||||
{
|
||||
m_nibble = !m_nibble;
|
||||
if (!space.debugger_access())
|
||||
m_nibble = !m_nibble;
|
||||
|
||||
if (m_nibble)
|
||||
return (m_busy_flag << 7) | (m_ac & 0x70);
|
||||
return (m_busy_flag ? 0x80 : 0) | (m_ac & 0x70);
|
||||
else
|
||||
return (m_ac<<4) & 0xf0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (m_busy_flag << 7) | (m_ac & 0x7f);
|
||||
return (m_busy_flag ? 0x80 : 0) | (m_ac & 0x7f);
|
||||
}
|
||||
}
|
||||
|
||||
void hd44780_device::update_ac(void) // m_data_bus_flag was left as global so old savestates will work
|
||||
{
|
||||
int new_ac = m_ac + m_direction;
|
||||
m_ac = (new_ac < 0) ? 0 : ((new_ac > 0x7f) ? 0x7f : new_ac);
|
||||
if (m_ac_mode == 0)
|
||||
{
|
||||
m_cursor_pos = m_ac;
|
||||
// display is shifted only after a write
|
||||
if (m_shift_on && m_data_bus_flag == 1) m_disp_shift += m_direction;
|
||||
}
|
||||
m_data_bus_flag = 0;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(hd44780_device::data_write)
|
||||
{
|
||||
if (m_busy_flag)
|
||||
{
|
||||
logerror("HD44780 '%s' Ignoring data write %02x due of busy flag\n", tag(), data);
|
||||
logerror("HD44780 '%s': Ignoring data write %02x due of busy flag\n", tag(), data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_data_len == 0)
|
||||
if (m_data_len == 4)
|
||||
{
|
||||
m_nibble = !m_nibble;
|
||||
|
||||
if (m_nibble)
|
||||
{
|
||||
m_data_latch = data & 0xf0;
|
||||
m_dr = data & 0xf0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data_latch |= ((data>>4) & 0x0f);
|
||||
m_dr |= ((data>>4) & 0x0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data_latch = data;
|
||||
m_dr = data;
|
||||
}
|
||||
|
||||
if (m_ac_mode == 0)
|
||||
m_ddram[m_ac] = m_data_latch;
|
||||
else
|
||||
m_cgram[m_ac] = m_data_latch;
|
||||
if (LOG) logerror("HD44780 '%s': %sRAM write %x %x '%c'\n", tag(), m_active_ram == DDRAM ? "DD" : "CG", m_ac, m_dr, isprint(m_dr) ? m_dr : '.');
|
||||
|
||||
m_data_bus_flag = 1;
|
||||
update_ac();
|
||||
if (m_active_ram == DDRAM)
|
||||
m_ddram[m_ac] = m_dr;
|
||||
else
|
||||
m_cgram[m_ac] = m_dr;
|
||||
|
||||
update_ac(m_direction);
|
||||
if (m_shift_on)
|
||||
m_disp_shift += m_direction;
|
||||
set_busy_flag(41);
|
||||
}
|
||||
|
||||
READ8_MEMBER(hd44780_device::data_read)
|
||||
{
|
||||
UINT8 data;
|
||||
UINT8 data = (m_active_ram == DDRAM) ? m_ddram[m_ac] : m_cgram[m_ac];
|
||||
|
||||
if (m_ac_mode == 0)
|
||||
data = m_ddram[m_ac];
|
||||
else
|
||||
data = m_cgram[m_ac];
|
||||
if (LOG) logerror("HD44780 '%s': %sRAM read %x %c\n", tag(), m_active_ram == DDRAM ? "DD" : "CG", m_ac, data);
|
||||
|
||||
if (m_data_len == 0)
|
||||
if (m_data_len == 4)
|
||||
{
|
||||
m_nibble = !m_nibble;
|
||||
if (!space.debugger_access())
|
||||
m_nibble = !m_nibble;
|
||||
|
||||
if (m_nibble)
|
||||
return data & 0xf0;
|
||||
@ -405,10 +503,11 @@ READ8_MEMBER(hd44780_device::data_read)
|
||||
data = (data<<4) & 0xf0;
|
||||
}
|
||||
|
||||
m_data_bus_flag = 2;
|
||||
update_ac();
|
||||
|
||||
set_busy_flag(41);
|
||||
if (!space.debugger_access())
|
||||
{
|
||||
update_ac(m_direction);
|
||||
set_busy_flag(41);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -10,49 +10,43 @@
|
||||
#define __HD44780_H__
|
||||
|
||||
|
||||
#define MCFG_HD44780_ADD( _tag , _config) \
|
||||
MCFG_DEVICE_ADD( _tag, HD44780, 0 ) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
#define MCFG_HD44780_ADD( _tag ) \
|
||||
MCFG_DEVICE_ADD( _tag, HD44780, 0 )
|
||||
|
||||
#define MCFG_HD44780_REPLACE( _tag , _config) \
|
||||
MCFG_DEVICE_REPLACE( _tag, HD44780, 0 ) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
#define MCFG_HD44780_LCD_SIZE(_lines, _chars) \
|
||||
hd44780_device::static_set_lcd_size(*device, _lines, _chars);
|
||||
|
||||
#define MCFG_HD44780_PIXEL_UPDATE_CB(_cb) \
|
||||
hd44780_device::static_set_pixel_update_cb(*device, _cb);
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
#define HD44780_INTERFACE(name) \
|
||||
const hd44780_interface (name) =
|
||||
|
||||
typedef void (*hd44780_pixel_update_func)(device_t &device, bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state);
|
||||
#define HD44780_PIXEL_UPDATE(name) void name(device_t &device, bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state)
|
||||
|
||||
// ======================> hd44780_interface
|
||||
|
||||
struct hd44780_interface
|
||||
{
|
||||
UINT8 height; // number of lines
|
||||
UINT8 width; // chars for line
|
||||
hd44780_pixel_update_func pixel_update_func; // pixel update callback
|
||||
};
|
||||
|
||||
// ======================> hd44780_device
|
||||
|
||||
class hd44780_device : public device_t,
|
||||
public hd44780_interface
|
||||
class hd44780_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
hd44780_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
hd44780_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// static configuration helpers
|
||||
static void static_set_lcd_size(device_t &device, int _lines, int _chars) { hd44780_device &dev=downcast<hd44780_device &>(device); dev.m_lines = _lines; dev.m_chars = _chars; }
|
||||
static void static_set_pixel_update_cb(device_t &device, hd44780_pixel_update_func _cb) { downcast<hd44780_device &>(device).m_pixel_update_func = _cb; }
|
||||
|
||||
// device interface
|
||||
virtual DECLARE_WRITE8_MEMBER(write);
|
||||
virtual DECLARE_READ8_MEMBER(read);
|
||||
virtual DECLARE_WRITE8_MEMBER(control_write);
|
||||
virtual DECLARE_READ8_MEMBER(control_read);
|
||||
virtual DECLARE_WRITE8_MEMBER(data_write);
|
||||
virtual DECLARE_READ8_MEMBER(data_read);
|
||||
|
||||
virtual UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
@ -60,45 +54,49 @@ protected:
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
virtual void device_config_complete();
|
||||
|
||||
protected:
|
||||
// optional information overrides
|
||||
const rom_entry *device_rom_region() const;
|
||||
|
||||
private:
|
||||
// internal helper
|
||||
void set_busy_flag(UINT16 usec);
|
||||
void update_ac(void);
|
||||
void update_ac(int direction);
|
||||
void pixel_update(bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state);
|
||||
|
||||
// internal state
|
||||
static const device_timer_id BUSY_TIMER = 0;
|
||||
static const device_timer_id BLINKING_TIMER = 1;
|
||||
static const device_timer_id TIMER_BUSY = 0;
|
||||
static const device_timer_id TIMER_BLINKING = 1;
|
||||
|
||||
emu_timer *m_blink_timer;
|
||||
emu_timer *m_busy_timer;
|
||||
emu_timer * m_blink_timer;
|
||||
emu_timer * m_busy_timer;
|
||||
|
||||
UINT8 m_busy_flag;
|
||||
UINT8 m_lines; // number of lines
|
||||
UINT8 m_chars; // chars for line
|
||||
hd44780_pixel_update_func m_pixel_update_func; // pixel update callback
|
||||
|
||||
UINT8 m_ddram[0x80]; //internal display data RAM
|
||||
UINT8 m_cgram[0x40]; //internal chargen RAM
|
||||
bool m_busy_flag; // busy flag
|
||||
UINT8 m_ddram[0x80]; // internal display data RAM
|
||||
UINT8 m_cgram[0x40]; // internal chargen RAM
|
||||
UINT8 * m_cgrom; // internal chargen ROM
|
||||
INT8 m_ac; // address counter
|
||||
UINT8 m_dr; // data register
|
||||
UINT8 m_ir; // instruction register
|
||||
UINT8 m_active_ram; // DDRAM or CGRAM
|
||||
bool m_display_on; // display on/off
|
||||
bool m_cursor_on; // cursor on/off
|
||||
bool m_blink_on; // blink on/off
|
||||
bool m_shift_on; // shift on/off
|
||||
INT8 m_disp_shift; // display shift
|
||||
INT8 m_direction; // auto increment/decrement
|
||||
UINT8 m_data_len; // interface data length 4 or 8 bit
|
||||
UINT8 m_num_line; // number of lines
|
||||
UINT8 m_char_size; // char size 5x8 or 5x10
|
||||
bool m_blink;
|
||||
bool m_first_cmd;
|
||||
bool m_nibble;
|
||||
|
||||
INT8 m_ac; //address counter
|
||||
UINT8 m_ac_mode; //0=DDRAM 1=CGRAM
|
||||
UINT8 m_data_bus_flag; //0=none 1=write 2=read
|
||||
|
||||
INT8 m_cursor_pos; //cursor position
|
||||
UINT8 m_display_on; //display on/off
|
||||
UINT8 m_cursor_on; //cursor on/off
|
||||
UINT8 m_blink_on; //blink on/off
|
||||
UINT8 m_shift_on; //shift on/off
|
||||
INT8 m_disp_shift; //display shift
|
||||
|
||||
INT8 m_direction; //auto increment/decrement
|
||||
UINT8 m_data_len; //interface data length 4 or 8 bit
|
||||
UINT8 m_num_line; //number of lines
|
||||
UINT8 m_char_size; //char size 5x8 or 5x10
|
||||
|
||||
UINT8 m_blink;
|
||||
|
||||
bool m_nibble;
|
||||
UINT8 m_data_latch;
|
||||
enum { DDRAM, CGRAM };
|
||||
};
|
||||
|
||||
// device type definition
|
||||
|
@ -1,105 +0,0 @@
|
||||
/***************************************************************************
|
||||
|
||||
Psion Organiser II LZ series custom LCD controller
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/psion.h"
|
||||
|
||||
// devices
|
||||
const device_type PSION_CUSTOM_LCDC = &device_creator<psion_custom_lcdc>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// live device
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// psion_custom_lcdc - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
psion_custom_lcdc::psion_custom_lcdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
hd44780_device(mconfig, PSION_CUSTOM_LCDC, "Psion Custom LCD Controller", tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// device interface
|
||||
//**************************************************************************
|
||||
|
||||
UINT32 psion_custom_lcdc::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
assert(height*9 <= bitmap.height() && width*6 <= bitmap.width());
|
||||
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
if (m_display_on)
|
||||
for (int l=0; l<height; l++)
|
||||
for (int i=0; i<width; i++)
|
||||
{
|
||||
static const UINT8 psion_display_layout[] =
|
||||
{
|
||||
0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
||||
0x40, 0x41, 0x42, 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||
0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x44, 0x45, 0x46, 0x47, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67
|
||||
};
|
||||
|
||||
INT8 char_pos = psion_display_layout[l*width + i];
|
||||
|
||||
for (int y=0; y<8; y++)
|
||||
for (int x=0; x<5; x++)
|
||||
if (m_ddram[char_pos] <= 0x10)
|
||||
{
|
||||
//draw CGRAM characters
|
||||
bitmap.pix16(l*9 + y, i*6 + x) = BIT(m_cgram[(m_ddram[char_pos]&0x07)*8+y], 4-x);
|
||||
}
|
||||
else
|
||||
{
|
||||
//draw CGROM characters
|
||||
if (region()->bytes() <= 0x800)
|
||||
{
|
||||
bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_ddram[char_pos] < 0xe0)
|
||||
bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x);
|
||||
else
|
||||
bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(0x700+((m_ddram[char_pos]-0xe0)*11)+y), 4-x);
|
||||
}
|
||||
}
|
||||
|
||||
// if is the correct position draw cursor and blink
|
||||
if (char_pos == m_cursor_pos)
|
||||
{
|
||||
//draw the cursor
|
||||
if (m_cursor_on)
|
||||
for (int x=0; x<5; x++)
|
||||
bitmap.pix16(l*9 + 7, i * 6 + x) = 1;
|
||||
|
||||
if (!m_blink && m_blink_on)
|
||||
for (int y=0; y<7; y++)
|
||||
for (int x=0; x<5; x++)
|
||||
bitmap.pix16(l*9 + y, i * 6 + x) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psion_custom_lcdc::control_write)
|
||||
{
|
||||
if (BIT(data, 7)) // Set DDRAM Address
|
||||
{
|
||||
m_ac_mode = 0;
|
||||
m_ac = data & 0x7f;
|
||||
if (data != 0x81)
|
||||
m_cursor_pos = m_ac;
|
||||
set_busy_flag(37);
|
||||
}
|
||||
else
|
||||
hd44780_device::control_write(space, offset, data);
|
||||
}
|
Loading…
Reference in New Issue
Block a user