i8244: fix register mirroring

This commit is contained in:
hap 2020-08-03 12:27:35 +02:00
parent 163d26b939
commit 0a657cb32f
3 changed files with 10 additions and 11 deletions

View File

@ -1356,7 +1356,7 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM.
</part>
</software>
<software name="qbert" supported="partial">
<software name="qbert">
<description>Q*bert (Euro)</description>
<year>1983</year>
<publisher>Parker Brothers</publisher>
@ -1707,7 +1707,7 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM.
</part>
</software>
<software name="turtles">
<software name="turtles" supported="partial">
<description>Turtles (Euro)</description>
<year>1982</year>
<publisher>Philips</publisher>
@ -1721,7 +1721,7 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM.
</part>
</software>
<software name="turtlesu" cloneof="turtles">
<software name="turtlesu" cloneof="turtles" supported="partial">
<description>Turtles (USA)</description>
<year>1983</year>
<publisher>Philips</publisher>

View File

@ -280,14 +280,14 @@ int i8244_device::get_x_beam()
offs_t i8244_device::fix_register_mirrors( offs_t offset )
{
// registers $40,$41 are mirrored at $44,$45, $48,$49, and $4C,$4D
if ( ( offset & 0xF2 ) == 0x40 )
// quad x/y registers are mirrored for each quad
if ( ( offset & 0xC2 ) == 0x40 )
{
offset &= ~0x0C;
}
// registers $A0-$AF are mirrored at $B0-$BF
if ( ( offset & 0xF0 ) == 0xB0 )
if ( ( offset & 0xE0 ) == 0xA0 )
{
offset &= ~0x10;
}
@ -556,14 +556,14 @@ void i8244_device::render_scanline(int vpos)
/* Quad objects */
for ( int i = 0; i < ARRAY_LENGTH( m_vdc.s.quad ); i++ )
{
int y = m_vdc.s.quad[i].single[0].y;
int y = m_vdc.s.quad[i].single[0].y & 0xFE;
int height = 8;
if ( y <= scanline && scanline < y + height * 2 )
{
int x = m_vdc.s.quad[i].single[0].x;
// Charaecter height is always determined by the height of the 4th character
// Character height is always determined by the height of the 4th character
int char_height = 8 - ( ( ( y >> 1 ) + m_vdc.s.quad[i].single[3].ptr ) & 7 );
for ( int j = 0; j < ARRAY_LENGTH( m_vdc.s.quad[0].single ); j++, x += 8 )

View File

@ -7,9 +7,8 @@ Driver file to handle emulation of the Odyssey2.
TODO:
- odyssey3 cpu/video should have different clocks
- backgamm does not work, it only shows the background graphics
- chess has graphics issues near the screen borders: missing A-H at bottom,
rightmost column is not erased properly, wrongly places chars at top
- qbert has major graphics problems, similar to chess?
- chess is missing some graphics: half of the statusbar chars at the top,
and the A-H row at the bottom
- missing questionmark graphics in turtles
- homecomp does not work, needs new slot device
- g7400 EF9341 R/W is connected to CPU A2, what happens if it is disobeyed?