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> </part>
</software> </software>
<software name="qbert" supported="partial"> <software name="qbert">
<description>Q*bert (Euro)</description> <description>Q*bert (Euro)</description>
<year>1983</year> <year>1983</year>
<publisher>Parker Brothers</publisher> <publisher>Parker Brothers</publisher>
@ -1707,7 +1707,7 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM.
</part> </part>
</software> </software>
<software name="turtles"> <software name="turtles" supported="partial">
<description>Turtles (Euro)</description> <description>Turtles (Euro)</description>
<year>1982</year> <year>1982</year>
<publisher>Philips</publisher> <publisher>Philips</publisher>
@ -1721,7 +1721,7 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM.
</part> </part>
</software> </software>
<software name="turtlesu" cloneof="turtles"> <software name="turtlesu" cloneof="turtles" supported="partial">
<description>Turtles (USA)</description> <description>Turtles (USA)</description>
<year>1983</year> <year>1983</year>
<publisher>Philips</publisher> <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 ) offs_t i8244_device::fix_register_mirrors( offs_t offset )
{ {
// registers $40,$41 are mirrored at $44,$45, $48,$49, and $4C,$4D // quad x/y registers are mirrored for each quad
if ( ( offset & 0xF2 ) == 0x40 ) if ( ( offset & 0xC2 ) == 0x40 )
{ {
offset &= ~0x0C; offset &= ~0x0C;
} }
// registers $A0-$AF are mirrored at $B0-$BF // registers $A0-$AF are mirrored at $B0-$BF
if ( ( offset & 0xF0 ) == 0xB0 ) if ( ( offset & 0xE0 ) == 0xA0 )
{ {
offset &= ~0x10; offset &= ~0x10;
} }
@ -556,14 +556,14 @@ void i8244_device::render_scanline(int vpos)
/* Quad objects */ /* Quad objects */
for ( int i = 0; i < ARRAY_LENGTH( m_vdc.s.quad ); i++ ) 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; int height = 8;
if ( y <= scanline && scanline < y + height * 2 ) if ( y <= scanline && scanline < y + height * 2 )
{ {
int x = m_vdc.s.quad[i].single[0].x; 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 ); 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 ) 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: TODO:
- odyssey3 cpu/video should have different clocks - odyssey3 cpu/video should have different clocks
- backgamm does not work, it only shows the background graphics - backgamm does not work, it only shows the background graphics
- chess has graphics issues near the screen borders: missing A-H at bottom, - chess is missing some graphics: half of the statusbar chars at the top,
rightmost column is not erased properly, wrongly places chars at top and the A-H row at the bottom
- qbert has major graphics problems, similar to chess?
- missing questionmark graphics in turtles - missing questionmark graphics in turtles
- homecomp does not work, needs new slot device - homecomp does not work, needs new slot device
- g7400 EF9341 R/W is connected to CPU A2, what happens if it is disobeyed? - g7400 EF9341 R/W is connected to CPU A2, what happens if it is disobeyed?