// license:GPL-2.0+
// copyright-holders:Peter Trauner
#include "emu.h"
#include "includes/pocketc.h"
#include "includes/pc1251.h"
// TODO: Convert to SVG rendering or internal layout
#define LOG_LCD (1 << 0)
#define VERBOSE (0)
#include "logmacro.h"
const char *const pc1251_state::s_def[5] =
{
"11 111 111",
"1 1 1 1 ",
"1 1 111 11 ",
"1 1 1 1 ",
"11 111 1 "
};
const char *const pc1251_state::s_shift[5] =
{
" 11 1 1 1 111 111",
"1 1 1 1 1 1 ",
" 1 111 1 11 1 ",
" 1 1 1 1 1 1 ",
"11 1 1 1 1 1 "
};
const char *const pc1251_state::s_de[5] =
{
"11 111",
"1 1 1 ",
"1 1 111",
"1 1 1 ",
"11 111"
};
const char *const pc1251_state::s_g[5] =
{
" 11",
"1 ",
"1 1",
"1 1",
" 11"
};
const char *const pc1251_state::s_rad[5] =
{
"11 1 11 ",
"1 1 1 1 1 1",
"11 111 1 1",
"1 1 1 1 1 1",
"1 1 1 1 11 "
};
const char *const pc1251_state::s_run[5] =
{
"11 1 1 1 1",
"1 1 1 1 11 1",
"11 1 1 1 11",
"1 1 1 1 1 1",
"1 1 1 1 1"
};
const char *const pc1251_state::s_pro[5] =
{
"11 11 1 ",
"1 1 1 1 1 1 ",
"11 11 1 1 ",
"1 1 1 1 1 ",
"1 1 1 1 "
};
const char *const pc1251_state::s_rsv[5] =
{
"11 11 1 1",
"1 1 1 1 1",
"11 1 1 1 ",
"1 1 1 1 1 ",
"1 1 11 1 "
};
READ8_MEMBER(pc1251_state::lcd_read)
{
uint8_t data = m_reg[offset & 0xff];
LOGMASKED(LOG_LCD, "pc1251 read %.3x %.2x\n", offset, data);
return data;
}
WRITE8_MEMBER(pc1251_state::lcd_write)
{
LOGMASKED(LOG_LCD, "pc1251 write %.3x %.2x\n", offset, data);
m_reg[offset & 0xff] = data;
}
#define DOWN 62
#define RIGHT 68
uint32_t pc1251_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int color[2] =
{
7, //pocketc_colortable[PC1251_CONTRAST][0],
8, //pocketc_colortable[PC1251_CONTRAST][1]
};
bitmap.fill(11, cliprect);
const int contrast = m_dsw0->read() & 7;
int x = RIGHT;
int y = DOWN;
for (int i = 0; i < 60; x += 3)
for (int j = 0; j < 5; j++, i++, x += 3)
m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y);
for (int i = 0x7b; i >= 0x40; x += 3)
for (int j = 0; j < 5; j++, i--, x += 3)
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i], contrast, 0, 0, x, y);
/* 0x3c 1 def?, 4 g, 8 de
0x3d 2 shift, 4 rad, 8 error
0x3e 1 pro?, 2 run?, 4rsv?*/
pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, s_def, BIT(m_reg[0x3c], 0) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+142, DOWN-10, s_g, BIT(m_reg[0x3c], 2) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+134, DOWN-10, s_de, BIT(m_reg[0x3c], 3) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT, DOWN-10, s_shift, BIT(m_reg[0x3d], 1) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+146, DOWN-10, s_rad, BIT(m_reg[0x3d], 2) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+38, DOWN-10, s_pro, BIT(m_reg[0x3e], 0) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+53, DOWN-10, s_run, BIT(m_reg[0x3e], 1) ? color[1] : color[0]);
pocketc_draw_special(bitmap, RIGHT+68, DOWN-10, s_rsv, BIT(m_reg[0x3e], 2) ? color[1] : color[0]);
return 0;
}