src/mess/video/smsvdp.c
| r6260 | r6261 | |
| 235 | 235 | READ8_DEVICE_HANDLER( sms_vdp_hcount_latch_r ) |
| 236 | 236 | { |
| 237 | 237 | smsvdp_t *smsvdp = get_safe_token(device); |
| 238 | | |
| 238 | |
| 239 | 239 | return smsvdp->hcounter; |
| 240 | 240 | } |
| 241 | 241 | |
| 242 | 242 | WRITE8_DEVICE_HANDLER( sms_vdp_hcount_latch_w ) |
| 243 | 243 | { |
| 244 | 244 | smsvdp_t *smsvdp = get_safe_token(device); |
| 245 | | |
| 245 | |
| 246 | 246 | smsvdp->hcounter = data; |
| 247 | 247 | } |
| 248 | 248 | |
| r6260 | r6261 | |
| 639 | 639 | if (palette_selected) |
| 640 | 640 | pen_selected |= 0x10; |
| 641 | 641 | |
| 642 | | |
| 642 | |
| 643 | 643 | if (!horiz_selected) |
| 644 | 644 | { |
| 645 | 645 | pixel_plot_x = pixel_x; |
| r6260 | r6261 | |
| 1320 | 1320 | int height = video_screen_get_height(screen); |
| 1321 | 1321 | int x, y; |
| 1322 | 1322 | |
| 1323 | | if (smsvdp->prev_bitmap_saved) |
| 1323 | if (IS_GAMEGEAR_VDP) |
| 1324 | 1324 | { |
| 1325 | 1325 | for (y = 0; y < height; y++) |
| 1326 | 1326 | { |
| 1327 | UINT32 *line0 = BITMAP_ADDR32(smsvdp->tmpbitmap, y, 0); |
| 1328 | UINT32 *line1 = BITMAP_ADDR32(smsvdp->prev_bitmap, y, 0); |
| 1327 | 1329 | for (x = 0; x < width; x++) |
| 1328 | 1330 | { |
| 1329 | | *BITMAP_ADDR32(bitmap, y, x) = (*BITMAP_ADDR32(smsvdp->tmpbitmap, y, x) + *BITMAP_ADDR32(smsvdp->prev_bitmap, y, x)) >> 2; |
| 1330 | | logerror("%x %x %x\n", *BITMAP_ADDR32(smsvdp->tmpbitmap, y, x), *BITMAP_ADDR32(smsvdp->prev_bitmap, y, x), (*BITMAP_ADDR32(smsvdp->tmpbitmap, y, x) + *BITMAP_ADDR32(smsvdp->prev_bitmap, y, x)) >> 2); |
| 1331 | UINT32 color0 = line0[x]; |
| 1332 | UINT32 color1 = line1[x]; |
| 1333 | UINT16 r0 = (color0 >> 16) & 0x000000ff; |
| 1334 | UINT16 g0 = (color0 >> 8) & 0x000000ff; |
| 1335 | UINT16 b0 = (color0 >> 0) & 0x000000ff; |
| 1336 | UINT16 r1 = (color1 >> 16) & 0x000000ff; |
| 1337 | UINT16 g1 = (color1 >> 8) & 0x000000ff; |
| 1338 | UINT16 b1 = (color1 >> 0) & 0x000000ff; |
| 1339 | UINT8 r = (UINT8)((r0 + r1) >> 1); |
| 1340 | UINT8 g = (UINT8)((g0 + g1) >> 1); |
| 1341 | UINT8 b = (UINT8)((b0 + b1) >> 1); |
| 1342 | *BITMAP_ADDR32(bitmap, y, x) = (r << 16) | (g << 8) | b; |
| 1331 | 1343 | } |
| 1332 | 1344 | } |
| 1345 | |
| 1346 | copybitmap(smsvdp->prev_bitmap, smsvdp->tmpbitmap, 0, 0, 0, 0, cliprect); |
| 1333 | 1347 | } |
| 1334 | 1348 | else |
| 1335 | 1349 | { |
| 1336 | 1350 | copybitmap(bitmap, smsvdp->tmpbitmap, 0, 0, 0, 0, cliprect); |
| 1337 | 1351 | } |
| 1338 | 1352 | |
| 1339 | | if (!smsvdp->prev_bitmap_saved) |
| 1340 | | { |
| 1341 | | copybitmap(smsvdp->prev_bitmap, smsvdp->tmpbitmap, 0, 0, 0, 0, cliprect); |
| 1342 | | //smsvdp->prev_bitmap_saved = 1; |
| 1343 | | } |
| 1344 | | |
| 1345 | 1353 | return 0; |
| 1346 | 1354 | } |
| 1347 | 1355 | |
| r6260 | r6261 | |
| 1424 | 1432 | smsvdp->line_counter = 0; |
| 1425 | 1433 | smsvdp->prev_bitmap_saved = 0; |
| 1426 | 1434 | |
| 1427 | | /* for light gun input with "Hang-On & Safari Hunt", hcounter seems to |
| 1435 | /* for light gun input with "Hang-On & Safari Hunt", hcounter seems to |
| 1428 | 1436 | need initialization to some value */ |
| 1429 | | smsvdp->hcounter = 0x40; |
| 1430 | | |
| 1437 | smsvdp->hcounter = 0x40; |
| 1438 | |
| 1431 | 1439 | for (i = 0; i < 0x20; i++) |
| 1432 | 1440 | smsvdp->current_palette[i] = 0; |
| 1433 | 1441 | |