136 lines
2.7 KiB
C
136 lines
2.7 KiB
C
#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;
|
|
}
|