diff options
Diffstat (limited to 'src/mame/video/pc1401.c')
-rw-r--r-- | src/mame/video/pc1401.c | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/src/mame/video/pc1401.c b/src/mame/video/pc1401.c new file mode 100644 index 00000000000..d7663dce91b --- /dev/null +++ b/src/mame/video/pc1401.c @@ -0,0 +1,213 @@ +// license:GPL-2.0+ +// copyright-holders:Peter Trauner +#include "emu.h" + +#include "includes/pocketc.h" +#include "includes/pc1401.h" + +/* pc140x + 16 5x7 with space between char + 6000 .. 6027, 6067.. 6040 + 603c: 3 STAT + 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 HYP, 4 PRO, 5 RUN, 6 CAL + 607c: 0 E, 1 M, 2 (), 3 RAD, 4 G, 5 DE, 6 PRINT */ + +/* pc1421 + 16 5x7 with space between char + 6000 .. 6027, 6067.. 6040 + 603c: 3 RUN + 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 BGN, 4 STAT, 5 FIN, 6 PRINT + 607c: 0 E, 1 M, 2 BAL, 3 INT, 4 PRN, 5 Sum-Sign, 6 PRO */ + +READ8_MEMBER(pc1401_state::pc1401_lcd_read) +{ + return m_reg[offset & 0xff]; +} + +WRITE8_MEMBER(pc1401_state::pc1401_lcd_write) +{ + m_reg[offset & 0xff]=data; +} + +static const POCKETC_FIGURE line={ /* simple line */ + "11111", + "11111", + "11111e" +}; +static const POCKETC_FIGURE busy={ + "11 1 1 11 1 1", + "1 1 1 1 1 1 1", + "11 1 1 1 1 1", + "1 1 1 1 1 1", + "11 1 11 1e" +}, def={ + "11 111 111", + "1 1 1 1", + "1 1 111 11", + "1 1 1 1", + "11 111 1e" +}, shift={ + " 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 1e" +}, hyp={ + "1 1 1 1 11", + "1 1 1 1 1 1", + "111 1 1 11", + "1 1 1 1", + "1 1 1 1e" +}, de={ + "11 111", + "1 1 1", + "1 1 111", + "1 1 1", + "11 111e" +}, g={ + " 11", + "1", + "1 1", + "1 1", + " 11e" +}, rad={ + "11 1 11", + "1 1 1 1 1 1", + "11 111 1 1", + "1 1 1 1 1 1", + "1 1 1 1 11e" +}, braces={ + " 1 1", + "1 1", + "1 1", + "1 1", + " 1 1e" +}, m={ + "1 1", + "11 11", + "1 1 1", + "1 1", + "1 1e" +}, e={ + "111", + "1", + "111", + "1", + "111e" +}/*, run={ + "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 1e" +}, pro={ + "11 11 1 ", + "1 1 1 1 1 1", + "11 11 1 1", + "1 1 1 1 1", + "1 1 1 1e" +}, japan={ + " 1 1 11 1 1 1", + " 1 1 1 1 1 1 1 11 1", + " 1 111 11 111 1 11", + "1 1 1 1 1 1 1 1 1", + " 1 1 1 1 1 1 1 1e" +}, sml={ + " 11 1 1 1", + "1 111 1", + " 1 1 1 1", + " 1 1 1 1", + "11 1 1 111e" +}, rsv={ + "11 11 1 1", + "1 1 1 1 1", + "11 1 1 1", + "1 1 1 1 1", + "1 1 11 1e" +}*/; + +#define DOWN 57 +#define RIGHT 114 + +UINT32 pc1401_state::screen_update_pc1401(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int x, y, i, j; + int color[2]; + + bitmap.fill(11, cliprect); + +#if 0 + /* HJB: we cannot initialize array with values from other arrays, thus... */ + color[0] = pocketc_colortable[CONTRAST][0]; + color[1] = pocketc_colortable[CONTRAST][1]; +#endif + /* Above can be unreadable or misleading at certain contrast settings, this is better */ + color[0] = 7; + color[1] = 8; + + if (m_portc&1) + { + for (x=RIGHT,y=DOWN,i=0; i<0x28;x+=2) + { + for (j=0; j<5;j++,i++,x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0,x,y); + } + for (i=0x67; i>=0x40;x+=2) + { + for (j=0; j<5;j++,i--,x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0,x,y); + } + } + + pocketc_draw_special(bitmap, RIGHT+149, DOWN+24, line, + m_reg[0x3c] & 0x08 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT, DOWN-10, busy, + m_reg[0x3d] & 0x01 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, def, + m_reg[0x3d] & 0x02 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+43, DOWN-10,shift, + m_reg[0x3d] & 0x04 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+63, DOWN-10,hyp, + m_reg[0x3d] & 0x08 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+38, DOWN+24,line, + m_reg[0x3d] & 0x10 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+23, DOWN+24,line, + m_reg[0x3d] & 0x20 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+8, DOWN+24,line, + m_reg[0x3d] & 0x40 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+183, DOWN-10,e, + m_reg[0x7c] & 0x01 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+176, DOWN-10,m, + m_reg[0x7c] & 0x02 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+168, DOWN-10,braces, + m_reg[0x7c] & 0x04 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+138, DOWN-10,rad, + m_reg[0x7c] & 0x08 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+134, DOWN-10,g, + m_reg[0x7c] & 0x10 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+126, DOWN-10,de, + m_reg[0x7c] & 0x20 ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+165, DOWN+24,line, + m_reg[0x7c] & 0x40 ? color[1] : color[0]); + +/* + 603c: 3 STAT + 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 HYP, 4 PRO, 5 RUN, 6 CAL + 607c: 0 E, 1 M, 2 (), 3 RAD, 4 G, 5 DE, 6 PRINT +*/ + return 0; +} |