mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19:01 +03:00
Make the system24 linscroll screen-relative. [Olivier Galibert]
This commit is contained in:
parent
9671bd3455
commit
bd35db8db4
@ -428,15 +428,12 @@ void sys24_tile_draw(running_machine *machine, bitmap_t *bitmap, const rectangle
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(ctrl & 0x6000) {
|
if(ctrl & 0x6000) {
|
||||||
UINT16 v;
|
|
||||||
// Special window/scroll modes
|
// Special window/scroll modes
|
||||||
if(layer & 1)
|
if(layer & 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
v = vscr & 0x1ff;
|
tilemap_set_scrolly(sys24_tile_layer[layer], 0, vscr & 0x1ff);
|
||||||
|
tilemap_set_scrolly(sys24_tile_layer[layer|1], 0, vscr & 0x1ff);
|
||||||
tilemap_set_scrolly(sys24_tile_layer[layer], 0, v);
|
|
||||||
tilemap_set_scrolly(sys24_tile_layer[layer|1], 0, v);
|
|
||||||
|
|
||||||
if(hscr & 0x8000) {
|
if(hscr & 0x8000) {
|
||||||
UINT16 *hscrtb = sys24_tile_ram + 0x4000 + 0x200*layer;
|
UINT16 *hscrtb = sys24_tile_ram + 0x4000 + 0x200*layer;
|
||||||
@ -444,60 +441,51 @@ void sys24_tile_draw(running_machine *machine, bitmap_t *bitmap, const rectangle
|
|||||||
switch((ctrl & 0x6000) >> 13) {
|
switch((ctrl & 0x6000) >> 13) {
|
||||||
case 1: {
|
case 1: {
|
||||||
int y;
|
int y;
|
||||||
UINT16 vv;
|
UINT16 v = (-vscr) & 0x1ff;
|
||||||
vv = (-vscr) & 0x1ff;
|
|
||||||
if(!((-vscr) & 0x200))
|
if(!((-vscr) & 0x200))
|
||||||
layer ^= 1;
|
layer ^= 1;
|
||||||
for(y=0; y<384; y++) {
|
for(y=cliprect->min_y; y<=cliprect->max_y; y++) {
|
||||||
if(y >= cliprect->min_y && y <= cliprect->max_y) {
|
UINT16 h;
|
||||||
UINT16 h;
|
rectangle c = *cliprect;
|
||||||
rectangle c = *cliprect;
|
int l1 = layer;
|
||||||
int l1 = layer;
|
if(y >= v)
|
||||||
if(y >= vv)
|
l1 ^= 1;
|
||||||
l1 ^= 1;
|
|
||||||
|
|
||||||
c.min_y = c.max_y = y;
|
c.min_y = c.max_y = y;
|
||||||
|
|
||||||
// Whether it's tilemap-relative or screen-relative is unknown
|
hscr = hscrtb[y];
|
||||||
hscr = hscrtb[v];
|
|
||||||
|
|
||||||
h = hscr & 0x1ff;
|
h = hscr & 0x1ff;
|
||||||
tilemap_set_scrollx(sys24_tile_layer[l1], 0, -h);
|
tilemap_set_scrollx(sys24_tile_layer[l1], 0, -h);
|
||||||
tilemap_draw(bitmap, &c, sys24_tile_layer[l1], tpri, lpri);
|
tilemap_draw(bitmap, &c, sys24_tile_layer[l1], tpri, lpri);
|
||||||
}
|
|
||||||
v = (v + 1) & 0x1ff;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: case 3: {
|
case 2: case 3: {
|
||||||
int y;
|
int y;
|
||||||
for(y=0; y<384; y++) {
|
for(y=cliprect->min_y; y<=cliprect->max_y; y++) {
|
||||||
if(y >= cliprect->min_y && y <= cliprect->max_y) {
|
UINT16 h;
|
||||||
UINT16 h;
|
rectangle c1 = *cliprect;
|
||||||
rectangle c1 = *cliprect;
|
rectangle c2 = *cliprect;
|
||||||
rectangle c2 = *cliprect;
|
int l1 = layer;
|
||||||
int l1 = layer;
|
|
||||||
|
|
||||||
// Whether it's tilemap-relative or screen-relative is unknown
|
hscr = hscrtb[y];
|
||||||
hscr = hscrtb[v];
|
|
||||||
|
|
||||||
h = hscr & 0x1ff;
|
h = hscr & 0x1ff;
|
||||||
tilemap_set_scrollx(sys24_tile_layer[layer], 0, -h);
|
tilemap_set_scrollx(sys24_tile_layer[layer], 0, -h);
|
||||||
tilemap_set_scrollx(sys24_tile_layer[layer|1], 0, -h);
|
tilemap_set_scrollx(sys24_tile_layer[layer|1], 0, -h);
|
||||||
|
|
||||||
if(c1.max_x >= h)
|
if(c1.max_x >= h)
|
||||||
c1.max_x = h-1;
|
c1.max_x = h-1;
|
||||||
if(c2.min_x < h)
|
if(c2.min_x < h)
|
||||||
c2.min_x = h;
|
c2.min_x = h;
|
||||||
if(!(hscr & 0x200))
|
if(!(hscr & 0x200))
|
||||||
l1 ^= 1;
|
l1 ^= 1;
|
||||||
|
|
||||||
c1.min_y = c1.max_y = c2.min_y = c2.max_y = y;
|
c1.min_y = c1.max_y = c2.min_y = c2.max_y = y;
|
||||||
|
|
||||||
tilemap_draw(bitmap, &c1, sys24_tile_layer[l1], tpri, lpri);
|
tilemap_draw(bitmap, &c1, sys24_tile_layer[l1], tpri, lpri);
|
||||||
tilemap_draw(bitmap, &c2, sys24_tile_layer[l1^1], tpri, lpri);
|
tilemap_draw(bitmap, &c2, sys24_tile_layer[l1^1], tpri, lpri);
|
||||||
}
|
|
||||||
v = (v + 1) & 0x1ff;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -563,8 +551,7 @@ void sys24_tile_draw(running_machine *machine, bitmap_t *bitmap, const rectangle
|
|||||||
vscr &= 0x1ff;
|
vscr &= 0x1ff;
|
||||||
|
|
||||||
for(y=0; y<384; y++) {
|
for(y=0; y<384; y++) {
|
||||||
// Whether it's tilemap-relative or screen-relative is unknown
|
hscr = (-hscrtb[y]) & 0x1ff;
|
||||||
hscr = (-hscrtb[vscr]) & 0x1ff;
|
|
||||||
if(hscr + 496 <= 512) {
|
if(hscr + 496 <= 512) {
|
||||||
// Horizontal split unnecessary
|
// Horizontal split unnecessary
|
||||||
draw(machine, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0, y, 496, y+1);
|
draw(machine, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0, y, 496, y+1);
|
||||||
|
Loading…
Reference in New Issue
Block a user