Support for mode 0 chars in upd7220 (text in DMV diag program)

This commit is contained in:
Angelo Salese 2014-09-27 00:09:56 +00:00
parent b8344eb60a
commit 86e0c8e26e
3 changed files with 39 additions and 33 deletions

View File

@ -985,6 +985,7 @@ void upd7220_device::draw_char(int x, int y)
/* snippet for character checking */
#if 0
if((m_figs.m_dir & 7) == 3)
for(yi=0;yi<8;yi++)
{
for(xi=0;xi<8;xi++)
@ -1000,15 +1001,30 @@ void upd7220_device::draw_char(int x, int y)
ysize = ((m_figs.m_d & 0x400) + m_figs.m_dc) + 1;
/* TODO: internal direction, zooming, size stuff bigger than 8, rewrite using draw_pixel function */
if((m_figs.m_dir & 7) == 0)
{
for(yi=0;yi<8;yi++)
{
for(xi=0;xi<8;xi++)
{
UINT8 dot = (m_ra[((7-xi) & 7) | 8]);
dot >>= yi;
dot &= 1;
dot*=0xff;
draw_pixel(x+xi,y+yi,dot);
}
}
}
else
{
for(yi=0;yi<ysize;yi++)
{
switch(m_figs.m_dir & 7)
{
case 0: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],0,1,2,3,4,5,6,7); break; // TODO
case 2: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],0,1,2,3,4,5,6,7); break;
case 6: tile_data = BITSWAP8(m_ra[((ysize-1-yi) & 7) | 8],7,6,5,4,3,2,1,0); break;
default: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],7,6,5,4,3,2,1,0);
logerror("%d %d %d\n",m_figs.m_dir,xsize,ysize);
logerror("upd7220 draw char: %d %d %d\n",m_figs.m_dir,xsize,ysize);
break;
}
@ -1020,7 +1036,7 @@ void upd7220_device::draw_char(int x, int y)
writebyte(addr & 0x3ffff, readbyte(addr & 0x3ffff) | ((tile_data) & (1 << (xi & 7))));
}
}
}
m_ead = ((x+8*x_dir_dot[m_figs.m_dir]) >> 4) + ((y+8*y_dir_dot[m_figs.m_dir]) * m_pitch);
m_dad = ((x+8*x_dir_dot[m_figs.m_dir]) & 0xf);
}
@ -1343,7 +1359,7 @@ void upd7220_device::process_fifo()
break;
case COMMAND_FIGD: /* figure draw start */
if(m_figs.m_figure_type == 0)
if(m_figs.m_figure_type == 0 || m_figs.m_figure_type == 4)
{
UINT16 line_pattern = check_pattern((m_ra[8]) | (m_ra[9]<<8));
UINT8 dot = ((line_pattern >> (0 & 0xf)) & 1) << 7;

View File

@ -271,7 +271,7 @@ UPD7220_DISPLAY_PIXELS_MEMBER( dmv_state::hgdc_display_pixels )
const rgb_t *palette = m_palette->palette()->entry_list_raw();
// 32KB videoram
UINT8 gfx = m_video_ram[address & 0x7fff];
UINT8 gfx = m_video_ram[address & 0xffff];
for(int xi=0;xi<8;xi++)
{

View File

@ -552,7 +552,6 @@ public:
UINT8 m_joy_sel;
UINT8 m_ext2_ff;
UINT8 m_sys_type;
UINT8 m_is_nec_bank;
DECLARE_WRITE_LINE_MEMBER( keyboard_irq );
DECLARE_WRITE_LINE_MEMBER( write_uart_clock );
@ -1906,14 +1905,6 @@ WRITE8_MEMBER(pc9801_state::pc9801rs_bank_w)
{
if(offset == 1)
{
#if 0
if(m_is_nec_bank)
{
m_rom_bank = 1;
return;
}
#endif
if((data & 0xf0) == 0x00 || (data & 0xf0) == 0x10)
{
if((data & 0xed) == 0x00)
@ -3389,7 +3380,6 @@ MACHINE_START_MEMBER(pc9801_state,pc9821)
m_ide_ram = auto_alloc_array(machine(), UINT8, 0x2000);
m_ext_gvram = auto_alloc_array(machine(), UINT8, 0xa0000);
m_is_nec_bank = 0;
save_pointer(NAME(m_sdip), 24);
save_pointer(NAME(m_ide_ram), 0x2000);
save_pointer(NAME(m_ext_gvram), 0xa0000);
@ -3399,7 +3389,7 @@ MACHINE_START_MEMBER(pc9801_state,pc9821ap2)
{
MACHINE_START_CALL_MEMBER(pc9821);
m_is_nec_bank = 1;
// ...
}
MACHINE_RESET_MEMBER(pc9801_state,pc9801_common)