diff --git a/.gitattributes b/.gitattributes index 873c1515ab4..6bc52b5fff5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7615,6 +7615,7 @@ src/mess/video/dai.c svneol=native#text/plain src/mess/video/dgn_beta.c svneol=native#text/plain src/mess/video/dl1416.c svneol=native#text/plain src/mess/video/dl1416.h svneol=native#text/plain +src/mess/video/ef9341_chargen.h svneol=native#text/plain src/mess/video/ef9345.c svneol=native#text/plain src/mess/video/ef9345.h svneol=native#text/plain src/mess/video/electron.c svneol=native#text/plain diff --git a/src/mess/drivers/odyssey2.c b/src/mess/drivers/odyssey2.c index b7fcf708f2a..e8f84a641d3 100644 --- a/src/mess/drivers/odyssey2.c +++ b/src/mess/drivers/odyssey2.c @@ -202,7 +202,7 @@ static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) MCFG_SCREEN_UPDATE_DRIVER(odyssey2_state, screen_update_odyssey2) MCFG_GFXDECODE( odyssey2 ) - MCFG_PALETTE_LENGTH(24) + MCFG_PALETTE_LENGTH(32) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -231,7 +231,7 @@ static MACHINE_CONFIG_START( videopac, odyssey2_state ) MCFG_SCREEN_UPDATE_DRIVER(odyssey2_state, screen_update_odyssey2) MCFG_GFXDECODE( odyssey2 ) - MCFG_PALETTE_LENGTH(24) + MCFG_PALETTE_LENGTH(32) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -261,7 +261,7 @@ static MACHINE_CONFIG_START( g7400, odyssey2_state ) MCFG_VIDEO_START_OVERRIDE(odyssey2_state,g7400) MCFG_GFXDECODE( odyssey2 ) - MCFG_PALETTE_LENGTH(24) + MCFG_PALETTE_LENGTH(32) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/includes/odyssey2.h b/src/mess/includes/odyssey2.h index 755fd50c436..e72aaef73c9 100644 --- a/src/mess/includes/odyssey2.h +++ b/src/mess/includes/odyssey2.h @@ -136,13 +136,14 @@ protected: UINT8 m_ef934x_ext_char_ram[1024]; bool m_g7400; - inline UINT16 ef9340_get_c_addr(); + inline UINT16 ef9340_get_c_addr(UINT8 x, UINT8 y); + inline UINT16 ef9340_get_c_addr() { return ef9340_get_c_addr( m_ef9340.X, m_ef9340.Y ); }; inline void ef9340_inc_c(); // Calculate the external chargen address for a character and slice inline UINT16 external_chargen_address(UINT8 b, UINT8 slice); void i824x_scanline(int vpos); - void er9340_scanline(int vpos); + void ef9340_scanline(int vpos); /* timers */ static const device_timer_id TIMER_LINE = 0; diff --git a/src/mess/video/ef9341_chargen.h b/src/mess/video/ef9341_chargen.h new file mode 100644 index 00000000000..d0de851737c --- /dev/null +++ b/src/mess/video/ef9341_chargen.h @@ -0,0 +1,268 @@ +static const UINT8 ef9341_char_set[2][128][10] = { + // Alphanumeric character set (128 characters) + { + { 0x00,0x38,0x44,0x40,0x20,0x10,0x00,0x10,0x00,0x00 }, + { 0x00,0x10,0x28,0x00,0x38,0x44,0x7c,0x44,0x00,0x00 }, + { 0x00,0x08,0x10,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00 }, + { 0x00,0x08,0x14,0x10,0x38,0x10,0x24,0x3c,0x00,0x00 }, + { 0x00,0x10,0x38,0x50,0x38,0x14,0x54,0x38,0x10,0x00 }, + { 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x10,0x20 }, + { 0x00,0x28,0x28,0x7c,0x28,0x7c,0x28,0x28,0x00,0x00 }, + { 0x00,0x20,0x18,0x00,0x38,0x44,0x7c,0x44,0x00,0x00 }, + { 0x00,0x20,0x18,0x00,0x44,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x10,0x08,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00 }, + { 0x00,0x3c,0x50,0x50,0x58,0x50,0x50,0x3c,0x00,0x00 }, + { 0x00,0x08,0x14,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00 }, + { 0x00,0x00,0x10,0x20,0x7f,0x20,0x10,0x00,0x00,0x00 }, + { 0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,0x10 }, + { 0x00,0x00,0x08,0x04,0xfe,0x04,0x08,0x00,0x00,0x00 }, + { 0x10,0x10,0x10,0x10,0x10,0x10,0x54,0x38,0x10,0x00 }, + { 0x00,0x18,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x7c,0x00,0x00 }, + { 0x00,0x08,0x10,0x38,0x44,0x7c,0x40,0x38,0x00,0x00 }, + { 0x00,0x28,0x00,0x38,0x44,0x7c,0x40,0x38,0x00,0x00 }, + { 0x00,0x28,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x10,0x20 }, + { 0x00,0x10,0x28,0x00,0x44,0x44,0x4c,0x34,0x00,0x00 }, + { 0x00,0x20,0x10,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00 }, + { 0x00,0x00,0x10,0x00,0x7c,0x00,0x10,0x00,0x00,0x00 }, + { 0x00,0x20,0x10,0x38,0x44,0x7c,0x40,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x3c,0x52,0x5e,0x50,0x3e,0x00,0x00 }, + { 0x00,0x10,0x28,0x38,0x44,0x7c,0x40,0x38,0x00,0x00 }, + { 0x00,0x40,0xc0,0x40,0x44,0x4c,0x14,0x3e,0x04,0x00 }, + { 0x00,0x40,0xc0,0x40,0x4c,0x52,0x04,0x08,0x1e,0x00 }, + { 0x00,0xe0,0x20,0x40,0x24,0xcc,0x14,0x3e,0x04,0x00 }, + { 0x00,0x10,0x28,0x00,0x38,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00 }, + { 0x00,0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x28,0x00,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00 }, + { 0x00,0x10,0x28,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00 }, + { 0x00,0x60,0x64,0x08,0x10,0x20,0x4c,0x0c,0x00,0x00 }, + { 0x00,0x20,0x50,0x50,0x20,0x54,0x48,0x34,0x00,0x00 }, + { 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,0x00 }, + { 0x00,0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00,0x00 }, + { 0x00,0x10,0x54,0x38,0x10,0x38,0x54,0x10,0x00,0x00 }, + { 0x00,0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00 }, + { 0x01,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x40,0x80 }, + { 0x00,0x10,0x28,0x44,0x44,0x44,0x28,0x10,0x00,0x00 }, + { 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x00,0x00 }, + { 0x00,0x38,0x44,0x04,0x18,0x20,0x40,0x7c,0x00,0x00 }, + { 0x00,0x7c,0x04,0x08,0x18,0x04,0x44,0x38,0x00,0x00 }, + { 0x00,0x08,0x18,0x28,0x48,0x7c,0x08,0x08,0x00,0x00 }, + { 0x00,0x7c,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00 }, + { 0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x7c,0x04,0x08,0x10,0x20,0x20,0x20,0x00,0x00 }, + { 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x38,0x44,0x44,0x3c,0x04,0x04,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00 }, + { 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40,0x00 }, + { 0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x00 }, + { 0x00,0x00,0x00,0x7c,0x00,0x7c,0x00,0x00,0x00,0x00 }, + { 0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x00 }, + { 0x00,0x38,0x44,0x04,0x08,0x10,0x00,0x10,0x00,0x00 }, + { 0x00,0x38,0x44,0x5c,0x54,0x5c,0x40,0x38,0x00,0x00 }, + { 0x00,0x38,0x44,0x44,0x44,0x7c,0x44,0x44,0x00,0x00 }, + { 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00,0x00 }, + { 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00 }, + { 0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00 }, + { 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x7c,0x00,0x00 }, + { 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x00,0x00 }, + { 0x00,0x38,0x44,0x40,0x40,0x4c,0x44,0x3c,0x00,0x00 }, + { 0x00,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x00,0x00 }, + { 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00 }, + { 0x00,0x1c,0x08,0x08,0x08,0x08,0x48,0x30,0x00,0x00 }, + { 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00 }, + { 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00 }, + { 0x00,0x44,0x6c,0x54,0x44,0x44,0x44,0x44,0x00,0x00 }, + { 0x00,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x00,0x00 }, + { 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00 }, + { 0x00,0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00 }, + { 0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00 }, + { 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00 }, + { 0x00,0x7c,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00 }, + { 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00 }, + { 0x00,0x44,0x44,0x44,0x54,0x54,0x54,0x28,0x00,0x00 }, + { 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00 }, + { 0x00,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00 }, + { 0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x7c,0x00,0x00 }, + { 0x00,0x1c,0x10,0x10,0x10,0x10,0x10,0x1c,0x00,0x00 }, + { 0x80,0x40,0x40,0x20,0x10,0x08,0x04,0x04,0x02,0x01 }, + { 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00 }, + { 0x00,0x10,0x28,0x00,0x30,0x10,0x10,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff }, + { 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00 }, + { 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x78,0x00,0x00 }, + { 0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x00,0x00 }, + { 0x00,0x04,0x04,0x3c,0x44,0x44,0x44,0x3c,0x00,0x00 }, + { 0x00,0x00,0x00,0x38,0x44,0x7c,0x40,0x38,0x00,0x00 }, + { 0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x00,0x00 }, + { 0x00,0x00,0x00,0x3c,0x44,0x44,0x3c,0x04,0x24,0x18 }, + { 0x00,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00,0x00 }, + { 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00 }, + { 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30 }, + { 0x00,0x20,0x20,0x24,0x28,0x30,0x28,0x24,0x00,0x00 }, + { 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x68,0x54,0x54,0x54,0x54,0x00,0x00 }, + { 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00,0x00 }, + { 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00 }, + { 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40 }, + { 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x3c,0x04,0x04 }, + { 0x00,0x00,0x00,0x58,0x64,0x40,0x40,0x40,0x00,0x00 }, + { 0x00,0x00,0x00,0x38,0x40,0x38,0x04,0x78,0x00,0x00 }, + { 0x00,0x20,0x20,0x38,0x20,0x20,0x20,0x18,0x00,0x00 }, + { 0x00,0x00,0x00,0x44,0x44,0x44,0x4c,0x34,0x00,0x00 }, + { 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x00,0x00 }, + { 0x00,0x00,0x00,0x44,0x44,0x54,0x54,0x28,0x00,0x00 }, + { 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00 }, + { 0x00,0x00,0x00,0x44,0x44,0x4c,0x34,0x04,0x44,0x38 }, + { 0x00,0x00,0x00,0x7c,0x08,0x10,0x20,0x7c,0x00,0x00 }, + { 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 }, + { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 }, + { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 }, + { 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff } + }, + + { + // Separated semi-graphic character set (64 characters) + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00 }, + { 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00 }, + { 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00 }, + { 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00 }, + { 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00 }, + { 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00 }, + { 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00 }, + { 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00 }, + { 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00 }, + { 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00 }, + { 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00 }, + { 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00 }, + { 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00 }, + { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00 }, + { 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00 }, + { 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00 }, + { 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00 }, + { 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00 }, + { 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00 }, + { 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00 }, + { 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00 }, + { 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00 }, + { 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00 }, + { 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00 }, + { 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00 }, + { 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00 }, + { 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00 }, + { 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00 }, + { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00 }, + { 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00 }, + { 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00 }, + { 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00 }, + { 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00 }, + { 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00 }, + { 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00 }, + { 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00 }, + { 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00 }, + { 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00 }, + { 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00 }, + { 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00 }, + { 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00 }, + { 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00 }, + { 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00 }, + { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00 }, + { 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00 }, + { 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00 }, + { 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00 }, + { 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00 }, + { 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00 }, + { 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00 }, + { 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00 }, + { 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00 }, + { 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00 }, + { 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00 }, + { 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00 }, + + // Mosaic semi-graphic character set (64 characters) + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00 }, + { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00 }, + { 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00 }, + { 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00 }, + { 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00 }, + { 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00 }, + { 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00 }, + { 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00 }, + { 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00 }, + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0 }, + { 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0 }, + { 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0 }, + { 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0 }, + { 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0 }, + { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0 }, + { 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0 }, + { 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0 }, + { 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0 }, + { 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0 }, + { 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0 }, + { 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0 }, + { 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0 }, + { 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0 }, + { 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0 }, + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f }, + { 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f }, + { 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f }, + { 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f }, + { 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f }, + { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f }, + { 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f }, + { 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f }, + { 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f }, + { 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f }, + { 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f }, + { 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f }, + { 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f }, + { 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f }, + { 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f }, + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff }, + { 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xff }, + { 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0xff,0xff,0xff }, + { 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff }, + { 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff }, + { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff }, + { 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff }, + { 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff }, + { 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff }, + { 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff }, + { 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff }, + { 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff }, + { 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + { 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + { 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff } + } +}; + diff --git a/src/mess/video/odyssey2.c b/src/mess/video/odyssey2.c index db39f19e042..67a8c70554c 100644 --- a/src/mess/video/odyssey2.c +++ b/src/mess/video/odyssey2.c @@ -12,6 +12,7 @@ #include "emu.h" #include "includes/odyssey2.h" +#include "video/ef9341_chargen.h" #define COLLISION_SPRITE_0 0x01 @@ -60,7 +61,17 @@ const UINT8 odyssey2_colors[] = 0x50,0xAE,0xFF, /* Blue */ 0xa9,0x80,0xff, /* Violet */ 0x82,0xfb,0xdb, /* Lt Grey */ - 0xff,0xff,0xff /* White */ + 0xff,0xff,0xff, /* White */ + + /* EF9340/EF9341 colors */ + 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF }; static const UINT8 o2_shape[0x40][8]={ @@ -134,7 +145,7 @@ void odyssey2_state::palette_init() { int i; - for ( i = 0; i < 24; i++ ) + for ( i = 0; i < 32; i++ ) { palette_set_color_rgb( machine(), i, odyssey2_colors[i*3], odyssey2_colors[i*3+1], odyssey2_colors[i*3+2] ); } @@ -554,6 +565,10 @@ void odyssey2_state::device_timer(emu_timer &timer, device_timer_id id, int para case TIMER_LINE: // handle i824x line timer i824x_scanline(vpos); + if ( m_g7400 ) + { + ef9340_scanline(vpos); + } break; case TIMER_HBLANK: @@ -708,17 +723,17 @@ STREAM_UPDATE( odyssey2_sh_update ) Thomson EF9340/EF9341 extra chips in the g7400 */ -UINT16 odyssey2_state::ef9340_get_c_addr() +UINT16 odyssey2_state::ef9340_get_c_addr(UINT8 x, UINT8 y) { - if ( ( m_ef9340.Y & 0x0C ) == 0x0C ) + if ( ( y & 0x0c ) == 0x0c ) { - return 0x318 | ( ( m_ef9340.X & 0x38 ) << 2 ) | ( m_ef9340.X & 0x07 ); + return 0x318 | ( ( x & 0x38 ) << 2 ) | ( x & 0x07 ); } - if ( m_ef9340.X & 0x20 ) + if ( x & 0x20 ) { - return 0x300 | ( ( m_ef9340.Y & 0x07 ) << 5 ) | ( m_ef9340.Y & 0x18 ) | ( m_ef9340.X & 0x07 ); + return 0x380 | ( ( y & 0x07 ) << 5 ) | ( y & 0x18 ) | ( x & 0x07 ); } - return ( m_ef9340.Y << 5 ) | m_ef9340.X; + return y << 5 | x; } @@ -849,6 +864,7 @@ void odyssey2_state::ef9341_w( UINT8 command, UINT8 b, UINT8 data ) } } + UINT8 odyssey2_state::ef9341_r( UINT8 command, UINT8 b ) { UINT8 data = 0xFF; @@ -880,7 +896,7 @@ UINT8 odyssey2_state::ef9341_r( UINT8 command, UINT8 b ) } -void odyssey2_state::er9340_scanline(int vpos) +void odyssey2_state::ef9340_scanline(int vpos) { if ( vpos < m_start_vpos ) { @@ -889,6 +905,55 @@ void odyssey2_state::er9340_scanline(int vpos) if ( vpos < m_start_vblank ) { + int y = vpos - m_start_vpos; + int y_row, slice; + + if ( y < 10 ) + { + // Displaying service row + y_row = 31; + slice = y; + } + else + { + // Displaying regular row + y_row = (y - 10) / 10; + slice = (y - 10) % 10; + } + for ( int x = 0; x < 40; x++ ) + { + UINT16 addr = ef9340_get_c_addr( x, y_row ); + UINT8 a = m_ef934x_ram_a[addr]; + UINT8 b = m_ef934x_ram_b[addr]; + UINT8 fg = 24; + UINT8 bg = 24; + UINT8 char_data = 0x00; + + if ( a & 0x80 ) + { + // Graphics + } + else + { + // Alphannumeric + if ( b & 0x80 ) + { + // Special (DEL or Extension) + } + else + { + // Normal + char_data = ef9341_char_set[0][b & 0x7f][slice]; + fg = 24 + ( a & 0x07 ); + } + } + + for ( int i = 0; i < 8; i++ ) + { + m_tmp_bitmap.pix16(vpos, I824X_START_ACTIVE_SCAN*2 + x*8 + i ) = (char_data & 0x80) ? fg : bg; + char_data <<= 1; + } + } } }