summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/intv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/intv.c')
-rw-r--r--src/mame/video/intv.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/mame/video/intv.c b/src/mame/video/intv.c
new file mode 100644
index 00000000000..42c12b743a8
--- /dev/null
+++ b/src/mame/video/intv.c
@@ -0,0 +1,137 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods,Frank Palazzolo
+#include "emu.h"
+#include "includes/intv.h"
+
+void intv_state::video_start()
+{
+ m_tms9927_num_rows = 25;
+}
+
+
+/* very rudimentary support for the tms9927 character generator IC */
+
+
+READ8_MEMBER( intv_state::intvkbd_tms9927_r )
+{
+ UINT8 rv;
+ switch (offset)
+ {
+ case 8:
+ rv = m_tms9927_cursor_row;
+ break;
+ case 9:
+ /* note: this is 1-based */
+ rv = m_tms9927_cursor_col;
+ break;
+ case 11:
+ m_tms9927_last_row = (m_tms9927_last_row + 1) % m_tms9927_num_rows;
+ rv = m_tms9927_last_row;
+ break;
+ default:
+ rv = 0;
+ }
+ return rv;
+}
+
+WRITE8_MEMBER( intv_state::intvkbd_tms9927_w )
+{
+ switch (offset)
+ {
+ case 3:
+ m_tms9927_num_rows = (data & 0x3f) + 1;
+ break;
+ case 6:
+ m_tms9927_last_row = data;
+ break;
+ case 11:
+ m_tms9927_last_row = (m_tms9927_last_row + 1) % m_tms9927_num_rows;
+ break;
+ case 12:
+ /* note: this is 1-based */
+ m_tms9927_cursor_col = data;
+ break;
+ case 13:
+ m_tms9927_cursor_row = data;
+ break;
+ }
+}
+
+
+UINT32 intv_state::screen_update_intv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ m_stic->screen_update(screen, bitmap, cliprect);
+ return 0;
+}
+
+
+UINT32 intv_state::screen_update_intvkbd(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ UINT8 *videoram = m_videoram;
+ int x,y,offs;
+ int current_row;
+// char c;
+
+ /* Draw the underlying INTV screen first */
+ m_stic->screen_update(screen, bitmap, cliprect);
+
+ /* if the intvkbd text is not blanked, overlay it */
+ if (!m_intvkbd_text_blanked)
+ {
+ current_row = (m_tms9927_last_row + 1) % m_tms9927_num_rows;
+ for(y=0;y<24;y++)
+ {
+ for(x=0;x<40;x++)
+ {
+ offs = current_row*64+x;
+
+ m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
+ videoram[offs],
+ 7, /* white */
+ 0,0,
+ x<<3,y<<3, 0);
+ }
+ if (current_row == m_tms9927_cursor_row)
+ {
+ /* draw the cursor as a solid white block */
+ /* (should use a filled rect here!) */
+
+ m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
+ 191, /* a block */
+ 7, /* white */
+ 0,0,
+ (m_tms9927_cursor_col-1)<<3,y<<3, 0);
+ }
+ current_row = (current_row + 1) % m_tms9927_num_rows;
+ }
+ }
+
+#if 0
+ // debugging
+ c = tape_motor_mode_desc[m_tape_motor_mode][0];
+ m_gfxdecode->gfx(0)->transpen(bitmap,&machine().screen[0].visarea,
+ c,
+ 1,
+ 0,0,
+ 0*8,0*8, 0);
+ for(y=0;y<5;y++)
+ {
+ m_gfxdecode->gfx(0)->transpen(bitmap,&machine().screen[0].visarea,
+ m_tape_unknown_write[y]+'0',
+ 1,
+ 0,0,
+ 0*8,(y+2)*8, 0);
+ }
+ m_gfxdecode->gfx(0)->transpen(bitmap,&machine().screen[0].visarea,
+ m_tape_unknown_write[5]+'0',
+ 1,
+ 0,0,
+ 0*8,8*8, 0);
+ m_gfxdecode->gfx(0)->transpen(bitmap,&machine().screen[0].visarea,
+ m_tape_interrupts_enabled+'0',
+ 1,
+ 0,0,
+ 0*8,10*8, 0);
+#endif
+ return 0;
+}