diff options
author | 2013-01-12 21:54:10 +0000 | |
---|---|---|
committer | 2013-01-12 21:54:10 +0000 | |
commit | 5df1c82e6db4ba50ca24ef051f7961cbab2d89cb (patch) | |
tree | 6a247f7958b14885fa2f36c5027407e029155b64 /src/emu/video | |
parent | c972bc6cafd4369d9248decf17a03c7f7ba84854 (diff) |
(MESS) g7400: Moved the EF9340/1 code into a separate device. Merged all the odyseey2 code into the driver file. (nw)
Diffstat (limited to 'src/emu/video')
-rw-r--r-- | src/emu/video/ef9340_1.c | 331 | ||||
-rw-r--r-- | src/emu/video/ef9340_1.h | 85 | ||||
-rw-r--r-- | src/emu/video/ef9341_chargen.h | 267 |
3 files changed, 683 insertions, 0 deletions
diff --git a/src/emu/video/ef9340_1.c b/src/emu/video/ef9340_1.c new file mode 100644 index 00000000000..03a23571940 --- /dev/null +++ b/src/emu/video/ef9340_1.c @@ -0,0 +1,331 @@ +/*************************************************************************** + + ef9340_1.h + + Thomson EF9340 + EF9341 teletext graphics chips with 1KB external + character ram. + +***************************************************************************/ + +#include "ef9340_1.h" +#include "ef9341_chargen.h" + + +// device type definition +const device_type EF9340_1 = &device_creator<ef9340_1_device>; + + +static const UINT8 bgr2rgb[8] = +{ + 0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07 +}; + + +ef9340_1_device::ef9340_1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, EF9340_1, "EF9340+EF9341", tag, owner, clock) + , m_screen_tag(NULL) + , m_screen(NULL) + //, m_start_vpos(START_Y) + //, m_start_vblank(START_Y + SCREEN_HEIGHT) + //, m_screen_lines(LINES) +{ +} + + +void ef9340_1_device::device_start() +{ + assert( m_screen_tag != NULL ); + m_screen = machine().device<screen_device>(m_screen_tag); + assert( m_screen != NULL ); + + // Let the screen create our temporary bitmap with the screen's dimensions + m_screen->register_screen_bitmap(m_tmp_bitmap); + + m_line_timer = timer_alloc(TIMER_LINE); + m_line_timer->adjust( m_screen->time_until_pos(0, 0), 0, m_screen->scan_period() ); + + // register our state + save_item(NAME(m_ef9341.TA)); + save_item(NAME(m_ef9341.TB)); + save_item(NAME(m_ef9341.busy)); + save_item(NAME(m_ef9340.X)); + save_item(NAME(m_ef9340.Y)); + save_item(NAME(m_ef9340.Y0)); + save_item(NAME(m_ef9340.R)); + save_item(NAME(m_ef9340.M)); + save_pointer(NAME(m_ef934x_ram_a), 1024); + save_pointer(NAME(m_ef934x_ram_b), 1024); + save_pointer(NAME(m_ef934x_ext_char_ram), 1024); +} + + +void ef9340_1_device::device_reset() +{ + m_ef9340.X = 0; + m_ef9340.Y = 0; + m_ef9340.Y0 = 0; + m_ef9340.R = 0; + m_ef9340.M = 0; + m_ef9341.TA = 0; + m_ef9341.TB = 0; + m_ef9341.busy = 0; +} + + +void ef9340_1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch ( id ) + { + case TIMER_LINE: + ef9340_scanline(m_screen->vpos()); + break; + } +} + + +UINT16 ef9340_1_device::ef9340_get_c_addr(UINT8 x, UINT8 y) +{ + if ( ( y & 0x18 ) == 0x18 ) + { + return 0x318 | ( ( x & 0x38 ) << 2 ) | ( x & 0x07 ); + } + if ( x & 0x20 ) + { + return 0x300 | ( ( y & 0x07 ) << 5 ) | ( y & 0x18 ) | ( x & 0x07 ); + } + return y << 5 | x; +} + + +void ef9340_1_device::ef9340_inc_c() +{ + m_ef9340.X++; + if ( m_ef9340.X >= 40 ) + { + m_ef9340.Y = ( m_ef9340.Y + 1 ) % 24; + m_ef9340.X = 0; + } +} + + +UINT16 ef9340_1_device::external_chargen_address(UINT8 b, UINT8 slice) +{ + UINT8 cc = b & 0x7f; + + if ( slice & 8 ) + { + // 0 0 CCE4 CCE3 CCE2 CCE1 CCE0 CCE6 CCE5 ADR0 + return ( ( cc << 3 ) & 0xf8 ) | ( ( cc >> 4 ) & 0x06) | ( slice & 0x01 ); + } + // CCE6 CCE5 CCE4 CCE3 CCE2 CCE1 CCE0 ADR2 ADR1 ADR0 + return ( cc << 3 ) | ( slice & 0x07 ); +} + + +void ef9340_1_device::ef9341_write( UINT8 command, UINT8 b, UINT8 data ) +{ + logerror("ef9341 %s write, t%s, data %02X\n", command ? "command" : "data", b ? "B" : "A", data ); + + if ( command ) + { + if ( b ) + { + m_ef9341.TB = data; + m_ef9341.busy = 0x80; + switch( m_ef9341.TB & 0xE0 ) + { + case 0x00: /* Begin row */ + m_ef9340.X = 0; + m_ef9340.Y = m_ef9341.TA & 0x1F; + break; + case 0x20: /* Load Y */ + m_ef9340.Y = m_ef9341.TA & 0x1F; + break; + case 0x40: /* Load X */ + m_ef9340.X = m_ef9341.TA & 0x3F; + break; + case 0x60: /* INC C */ + ef9340_inc_c(); + break; + case 0x80: /* Load M */ + m_ef9340.M = m_ef9341.TA; + break; + case 0xA0: /* Load R */ + m_ef9340.R = m_ef9341.TA; + break; + case 0xC0: /* Load Y0 */ + m_ef9340.Y0 = m_ef9341.TA & 0x3F; + break; + } + m_ef9341.busy = 0; + } + else + { + m_ef9341.TA = data; + } + } + else + { + if ( b ) + { + UINT16 addr = ef9340_get_c_addr( m_ef9340.X, m_ef9340.Y ) & 0x3ff; + + m_ef9341.TB = data; + m_ef9341.busy = 0x80; + switch ( m_ef9340.M & 0xE0 ) + { + case 0x00: /* Write */ + m_ef934x_ram_a[addr] = m_ef9341.TA; + m_ef934x_ram_b[addr] = m_ef9341.TB; + ef9340_inc_c(); + break; + + case 0x20: /* Read */ + m_ef9341.TA = m_ef934x_ram_a[addr]; + m_ef9341.TB = m_ef934x_ram_b[addr]; + ef9340_inc_c(); + break; + + case 0x40: /* Write without increment */ + m_ef934x_ram_a[addr] = m_ef9341.TA; + m_ef934x_ram_b[addr] = m_ef9341.TB; + break; + + case 0x60: /* Read without increment */ + m_ef9341.TA = m_ef934x_ram_a[addr]; + m_ef9341.TB = m_ef934x_ram_b[addr]; + break; + + case 0x80: /* Write slice */ + { + UINT8 b = m_ef934x_ram_b[addr]; + UINT8 slice = ( m_ef9340.M & 0x0f ) % 10; + + if ( b >= 0xa0 ) + { + m_ef934x_ext_char_ram[ external_chargen_address( b, slice ) ] = m_ef9341.TA; + } + + // Increment slice number + m_ef9340.M = ( m_ef9340.M & 0xf0) | ( ( slice + 1 ) % 10 ); + } + break; + + case 0xA0: /* Read slice */ + fatalerror/*logerror*/("ef9341 unimplemented data action %02X\n", m_ef9340.M & 0xE0 ); + break; + } + m_ef9341.busy = 0; + } + else + { + m_ef9341.TA = data; + } + } +} + + +UINT8 ef9340_1_device::ef9341_read( UINT8 command, UINT8 b ) +{ + UINT8 data = 0xFF; + + logerror("ef9341 %s read, t%s\n", command ? "command" : "data", b ? "B" : "A" ); + if ( command ) + { + if ( b ) + { + data = 0xFF; + } + else + { + data = m_ef9341.busy; + } + } + else + { + if ( b ) + { + data = m_ef9341.TB; + } + else + { + data = m_ef9341.TA; + } + } + return data; +} + + +void ef9340_1_device::ef9340_scanline(int vpos) +{ + if ( vpos < 250 ) + { + int y = vpos - 0; + int y_row, slice; + + if ( y < 10 ) + { + // Service row + + if ( m_ef9340.R & 0x08 ) + { + // Service row is enabled + + y_row = 31; + slice = y; + } + else + { + // Service row is disabled + + for ( int i = 0; i < 40 * 8; i++ ) + { + m_tmp_bitmap.pix16(vpos, 0 + i ) = 24; + } + return; + } + } + 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 = 0; + UINT8 bg = 0; + 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 = bgr2rgb[ a & 0x07 ]; + } + } + + for ( int i = 0; i < 8; i++ ) + { + m_tmp_bitmap.pix16(vpos, 0 + x*8 + i ) = (char_data & 0x80) ? fg : bg; + char_data <<= 1; + } + } + } +} + diff --git a/src/emu/video/ef9340_1.h b/src/emu/video/ef9340_1.h new file mode 100644 index 00000000000..da99d9ef069 --- /dev/null +++ b/src/emu/video/ef9340_1.h @@ -0,0 +1,85 @@ +/*************************************************************************** + + ef9340_1.h + + Thomson EF9340 + EF9341 teletext graphics chips with 1KB external + character ram. + +***************************************************************************/ + +#pragma once + +#ifndef __EF9340_1_H__ +#define __EF9340_1_H__ + +#include "emu.h" + + +#define MCFG_EF9340_1_ADD(_tag, _clock, _screen_tag) \ + MCFG_DEVICE_ADD(_tag, EF9340_1, _clock) \ + ef9340_1_device::set_screen_tag(*device, _screen_tag); \ + + +class ef9340_1_device : public device_t +{ +public: + // construction/destruction + ef9340_1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // static configuration helpers + static void set_screen_tag(device_t &device, const char *screen_tag) { downcast<ef9340_1_device &>(device).m_screen_tag = screen_tag; } + + inline bitmap_ind16 *get_bitmap() { return &m_tmp_bitmap; } + + void ef9341_write( UINT8 command, UINT8 b, UINT8 data ); + UINT8 ef9341_read( UINT8 command, UINT8 b ); + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + + inline UINT16 ef9340_get_c_addr(UINT8 x, UINT8 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 ef9340_scanline(int vpos); + + /* timers */ + static const device_timer_id TIMER_LINE = 0; + + emu_timer *m_line_timer; + + const char *m_screen_tag; + screen_device *m_screen; + + bitmap_ind16 m_tmp_bitmap; + + struct + { + UINT8 TA; + UINT8 TB; + UINT8 busy; + } m_ef9341; + struct + { + UINT8 X; + UINT8 Y; + UINT8 Y0; + UINT8 R; + UINT8 M; + } m_ef9340; + UINT8 m_ef934x_ram_a[1024]; + UINT8 m_ef934x_ram_b[1024]; + UINT8 m_ef934x_ext_char_ram[1024]; +}; + + +// device type definition +extern const device_type EF9340_1; + +#endif /* __EF9340_1_H__ */ + diff --git a/src/emu/video/ef9341_chargen.h b/src/emu/video/ef9341_chargen.h new file mode 100644 index 00000000000..b8c72f65b26 --- /dev/null +++ b/src/emu/video/ef9341_chargen.h @@ -0,0 +1,267 @@ +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 } + } +}; |