/***************************************************************************** * * pc1403.c * portable sharp pc1403 video emulator interface * (sharp pocket computers) * * Copyright (c) 2001 Peter Trauner, all rights reserved. * * - This source code is released as freeware for non-commercial purposes. * - You are free to use and redistribute this code in modified or * unmodified form, provided you list me in the credits. * - If you modify this source code, you must add a notice to each modified * source file that it has been changed. If you're a nice person, you * will clearly mark each change too. :) * - If you wish to use this for commercial purposes, please contact me at * peter.trauner@jk.uni-linz.ac.at * - The author of this copywritten work reserves the right to change the * terms of its usage and license at any time, including retroactively * - This entire notice must remain in the source code. * * History of changes: * 21.07.2001 Several changes listed below were made by Mario Konegger * (konegger@itp.tu-graz.ac.at) * Placed the grafical symbols onto the right place and added * some symbols, so the display is correct rebuit. * Added a strange behaviour of the display concerning the on/off * state and the BUSY-symbol, which I found out with experiments * with my own pc1403. *****************************************************************************/ #include "emu.h" #include "includes/pocketc.h" #include "includes/pc1403.h" void pc1403_state::video_start() { if (strcmp(machine().system().name, "pc1403h") == 0) { m_DOWN = 69; m_RIGHT = 155; } else { m_DOWN = 67; m_RIGHT = 152; } } READ8_MEMBER(pc1403_state::pc1403_lcd_read) { return m_reg[offset]; } WRITE8_MEMBER(pc1403_state::pc1403_lcd_write) { m_reg[offset]=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" }, kana={ // katakana charset " 1 1 ", " 11111 111", " 1 1 1 ", " 1 1 1 ", "1 1 1e" }, shoo={ // minor " 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" }; UINT32 pc1403_state::screen_update_pc1403(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int x, y, i, j; int color[3]; bitmap.fill(11, cliprect); /* HJB: we cannot initialize array with values from other arrays, thus... */ color[0] = 7; // pocketc_colortable[CONTRAST][0]; color[2] = 8; // pocketc_colortable[CONTRAST][1]; color[1] = (m_portc & 1) ? color[2] : color[0]; if (m_portc & 1) { for (x=m_RIGHT, y=m_DOWN, i=0; i<6*5; x+=2) { for (j=0; j<5; j++, i++, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } for (i=9*5; i<12*5; x+=2) { for (j=0; j<5; j++, i++, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } for (i=6*5; i<9*5; x+=2) { for (j=0; j<5; j++, i++, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } for (i=0x7b-3*5; i>0x7b-6*5; x+=2) { for (j=0; j<5; j++, i--, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } for (i=0x7b; i>0x7b-3*5; x+=2) { for (j=0; j<5; j++, i--, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } for (i=0x7b-6*5; i>0x7b-12*5; x+=2) { for (j=0; j<5; j++, i--, x+=2) drawgfx_opaque(bitmap, cliprect, screen.machine().gfx[0], m_reg[i],CONTRAST,0,0, x,y); } } /* if display is off, busy is always visible? it seems to behave like that. */ /* But if computer is off, busy is hidden. */ if(!(m_portc&8)) { if (m_portc&1) pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, m_reg[0x3d] & 1 ? color[2] : color[0]); else pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, color[2]); } else pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, color[0]); pocketc_draw_special(bitmap, m_RIGHT+18, m_DOWN-13, def, m_reg[0x3d] & 0x02 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+43, m_DOWN-13, shift, m_reg[0x3d] & 0x04 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+63, m_DOWN-13, hyp, m_reg[0x3d] & 0x08 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+155, m_DOWN-13, kana, m_reg[0x3c] & 0x01 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+167, m_DOWN-13, shoo, m_reg[0x3c] & 0x02 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+178, m_DOWN-13, sml, m_reg[0x3c] & 0x04 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+191, m_DOWN-13, de, m_reg[0x7c] & 0x20 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+199, m_DOWN-13, g, m_reg[0x7c] & 0x10 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+203, m_DOWN-13, rad, m_reg[0x7c] & 0x08 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+266, m_DOWN-13, braces, m_reg[0x7c] & 0x04 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+274, m_DOWN-13, m, m_reg[0x7c] & 0x02 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+281, m_DOWN-13, e, m_reg[0x7c] & 0x01 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+10, m_DOWN+27, line /* empty */, m_reg[0x3c] & 0x40 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+31, m_DOWN+27, line /*calc*/, m_reg[0x3d] & 0x40 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+52, m_DOWN+27, line/*run*/, m_reg[0x3d] & 0x20 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+73, m_DOWN+27, line/*prog*/, m_reg[0x3d] & 0x10 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+94, m_DOWN+27, line /* empty */, m_reg[0x3c] & 0x20 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+232, m_DOWN+27, line/*matrix*/, m_reg[0x3c] & 0x10 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+253, m_DOWN+27, line/*stat*/, m_reg[0x3c] & 0x08 ? color[1] : color[0]); pocketc_draw_special(bitmap, m_RIGHT+274, m_DOWN+27, line/*print*/, m_reg[0x7c] & 0x40 ? color[1] : color[0]); return 0; }