src/mess/video/vic6567.c
| r3152 | r3153 | |
| 354 | 354 | case 0xf: |
| 355 | 355 | /* sprite y positions */ |
| 356 | 356 | if (vic2.reg[offset] != data) { |
| 357 | | if (vic2.on) |
| 358 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 357 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 359 | 358 | vic2.reg[offset] = data; |
| 360 | 359 | vic2.sprites[offset/2].y=SPRITE_Y_POS(offset/2); |
| 361 | 360 | } |
| r3152 | r3153 | |
| 370 | 369 | case 0xe: |
| 371 | 370 | /* sprite x positions */ |
| 372 | 371 | if (vic2.reg[offset] != data) { |
| 373 | | if (vic2.on) |
| 374 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 372 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 375 | 373 | vic2.reg[offset] = data; |
| 376 | 374 | vic2.sprites[offset/2].x=SPRITE_X_POS(offset/2); |
| 377 | 375 | } |
| r3152 | r3153 | |
| 379 | 377 | case 0x10: |
| 380 | 378 | /* sprite x positions */ |
| 381 | 379 | if (vic2.reg[offset] != data) { |
| 382 | | if (vic2.on) |
| 383 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 380 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 384 | 381 | vic2.reg[offset] = data; |
| 385 | 382 | vic2.sprites[0].x=SPRITE_X_POS(0); |
| 386 | 383 | vic2.sprites[1].x=SPRITE_X_POS(1); |
| r3152 | r3153 | |
| 407 | 404 | if (vic2.reg[offset] != data) |
| 408 | 405 | { |
| 409 | 406 | vic2.reg[offset] = data; |
| 410 | | if (vic2.on) |
| 411 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 407 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 412 | 408 | } |
| 413 | 409 | break; |
| 414 | 410 | case 0x25: |
| r3152 | r3153 | |
| 416 | 412 | { |
| 417 | 413 | vic2.reg[offset] = data; |
| 418 | 414 | vic2.spritemulti[1] = SPRITE_MULTICOLOR1; |
| 419 | | if (vic2.on) |
| 420 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 415 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 421 | 416 | } |
| 422 | 417 | break; |
| 423 | 418 | case 0x26: |
| r3152 | r3153 | |
| 425 | 420 | { |
| 426 | 421 | vic2.reg[offset] = data; |
| 427 | 422 | vic2.spritemulti[3] = SPRITE_MULTICOLOR2; |
| 428 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 423 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 429 | 424 | } |
| 430 | 425 | break; |
| 431 | 426 | case 0x19: |
| r3152 | r3153 | |
| 438 | 433 | case 0x11: |
| 439 | 434 | if (vic2.reg[offset] != data) |
| 440 | 435 | { |
| 441 | | if (vic2.on) |
| 442 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 436 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 443 | 437 | vic2.reg[offset] = data; |
| 444 | 438 | if (LINES25) |
| 445 | 439 | { |
| r3152 | r3153 | |
| 462 | 456 | case 0x16: |
| 463 | 457 | if (vic2.reg[offset] != data) |
| 464 | 458 | { |
| 465 | | if (vic2.on) |
| 466 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 459 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 467 | 460 | vic2.reg[offset] = data; |
| 468 | 461 | if (COLUMNS40) |
| 469 | 462 | { |
| r3152 | r3153 | |
| 480 | 473 | case 0x18: |
| 481 | 474 | if (vic2.reg[offset] != data) |
| 482 | 475 | { |
| 483 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 476 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 484 | 477 | vic2.reg[offset] = data; |
| 485 | 478 | vic2.videoaddr = VIDEOADDR; |
| 486 | 479 | vic2.chargenaddr = CHARGENADDR; |
| r3152 | r3153 | |
| 489 | 482 | case 0x21: /* backgroundcolor */ |
| 490 | 483 | if (vic2.reg[offset] != data) |
| 491 | 484 | { |
| 492 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 485 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 493 | 486 | vic2.reg[offset] = data; |
| 494 | 487 | vic2.mono[0] = vic2.bitmapmulti[0] = vic2.multi[0] = |
| 495 | 488 | vic2.colors[0] = BACKGROUNDCOLOR; |
| r3152 | r3153 | |
| 498 | 491 | case 0x22: /* background color 1 */ |
| 499 | 492 | if (vic2.reg[offset] != data) |
| 500 | 493 | { |
| 501 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 494 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 502 | 495 | vic2.reg[offset] = data; |
| 503 | 496 | vic2.multi[1] = vic2.colors[1] = MULTICOLOR1; |
| 504 | 497 | } |
| r3152 | r3153 | |
| 506 | 499 | case 0x23: /* background color 2 */ |
| 507 | 500 | if (vic2.reg[offset] != data) |
| 508 | 501 | { |
| 509 | | if (vic2.on) |
| 510 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 502 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 511 | 503 | vic2.reg[offset] = data; |
| 512 | 504 | vic2.multi[2] = vic2.colors[2] = MULTICOLOR2; |
| 513 | 505 | } |
| r3152 | r3153 | |
| 515 | 507 | case 0x24: /* background color 3 */ |
| 516 | 508 | if (vic2.reg[offset] != data) |
| 517 | 509 | { |
| 518 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 510 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 519 | 511 | vic2.reg[offset] = data; |
| 520 | 512 | vic2.colors[3] = FOREGROUNDCOLOR; |
| 521 | 513 | } |
| r3152 | r3153 | |
| 523 | 515 | case 0x20: /* framecolor */ |
| 524 | 516 | if (vic2.reg[offset] != data) |
| 525 | 517 | { |
| 526 | | if (vic2.on) |
| 527 | | vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 518 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 528 | 519 | vic2.reg[offset] = data; |
| 529 | 520 | } |
| 530 | 521 | break; |
| r3152 | r3153 | |
| 573 | 564 | { |
| 574 | 565 | case 0x11: |
| 575 | 566 | val = (vic2.reg[offset] & ~0x80) | ((vic2.rasterline & 0x100) >> 1); |
| 576 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 567 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 577 | 568 | break; |
| 578 | 569 | case 0x12: |
| 579 | 570 | val = vic2.rasterline & 0xff; |
| 580 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 571 | // if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 581 | 572 | break; |
| 582 | 573 | case 0x16: |
| 583 | 574 | val = vic2.reg[offset] | 0xc0; |
| r3152 | r3153 | |
| 740 | 731 | } |
| 741 | 732 | } |
| 742 | 733 | |
| 743 | | static void vic2_draw_character (int ybegin, int yend, int ch, |
| 744 | | int yoff, int xoff, UINT16 *color) |
| 734 | static void vic2_draw_character (int ybegin, int yend, int ch, int yoff, int xoff, UINT16 *color) |
| 745 | 735 | { |
| 746 | 736 | int y, code; |
| 747 | 737 | |
| r3152 | r3153 | |
| 760 | 750 | } |
| 761 | 751 | } |
| 762 | 752 | |
| 763 | | static void vic2_draw_character_multi (int ybegin, int yend, int ch, |
| 764 | | int yoff, int xoff) |
| 753 | static void vic2_draw_character_multi (int ybegin, int yend, int ch, int yoff, int xoff) |
| 765 | 754 | { |
| 766 | 755 | int y, code; |
| 767 | 756 | |
| r3152 | r3153 | |
| 780 | 769 | } |
| 781 | 770 | } |
| 782 | 771 | |
| 783 | | static void vic2_draw_bitmap (int ybegin, int yend, |
| 784 | | int ch, int yoff, int xoff) |
| 772 | static void vic2_draw_bitmap (int ybegin, int yend, int ch, int yoff, int xoff) |
| 785 | 773 | { |
| 786 | 774 | int y, code; |
| 787 | 775 | |
| r3152 | r3153 | |
| 800 | 788 | } |
| 801 | 789 | } |
| 802 | 790 | |
| 803 | | static void vic2_draw_bitmap_multi (int ybegin, int yend, |
| 804 | | int ch, int yoff, int xoff) |
| 791 | static void vic2_draw_bitmap_multi (int ybegin, int yend, int ch, int yoff, int xoff) |
| 805 | 792 | { |
| 806 | 793 | int y, code; |
| 807 | 794 | |
| r3152 | r3153 | |
| 820 | 807 | } |
| 821 | 808 | } |
| 822 | 809 | |
| 823 | | static void vic2_draw_sprite_code_multi (int y, int xbegin, |
| 824 | | int code, int prior) |
| 810 | static void vic2_draw_sprite_code_multi (int y, int xbegin, int code, int prior) |
| 825 | 811 | { |
| 826 | 812 | register int x, mask, shift; |
| 827 | 813 | |
| r3152 | r3153 | |
| 1325 | 1311 | memset (vic2.sprites[i].paintedline, 0, sizeof (vic2.sprites[i].paintedline)); |
| 1326 | 1312 | } |
| 1327 | 1313 | } |
| 1328 | | plot_box(vic2.bitmap, 0, yoff+ybegin, xbegin, yend-ybegin+1, |
| 1329 | | FRAMECOLOR); |
| 1330 | | plot_box(vic2.bitmap, xend, yoff+ybegin, vic2.bitmap->width - xend, yend-ybegin+1, |
| 1331 | | FRAMECOLOR); |
| 1314 | plot_box(vic2.bitmap, 0, yoff+ybegin, xbegin, yend-ybegin+1, FRAMECOLOR); |
| 1315 | plot_box(vic2.bitmap, xend, yoff+ybegin, vic2.bitmap->width - xend, yend-ybegin+1, FRAMECOLOR); |
| 1332 | 1316 | } |
| 1333 | 1317 | if (last < vic2.bitmap->height) |
| 1334 | 1318 | end = last; |
| 1335 | 1319 | else |
| 1336 | 1320 | end = vic2.bitmap->height; |
| 1337 | | if (line<end) { |
| 1338 | | plot_box(vic2.bitmap, 0, line, vic2.bitmap->width, end-line, |
| 1339 | | FRAMECOLOR); |
| 1340 | | line=end; |
| 1321 | |
| 1322 | if (line < end) { |
| 1323 | plot_box(vic2.bitmap, 0, line, vic2.bitmap->width, end-line, FRAMECOLOR); |
| 1324 | line = end; |
| 1341 | 1325 | } |
| 1342 | 1326 | } |
| 1343 | 1327 | |
| r3152 | r3153 | |
| 1363 | 1347 | } |
| 1364 | 1348 | } |
| 1365 | 1349 | |
| 1366 | | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 1367 | | |
| 1368 | 1350 | if (vic2.rasterline == C64_2_RASTERLINE(RASTERLINE)) |
| 1369 | 1351 | { |
| 1370 | 1352 | vic2_set_interrupt (1); |
| 1371 | 1353 | } |
| 1354 | |
| 1355 | if (vic2.on) vic2_drawlines (vic2.lastline, vic2.rasterline); |
| 1372 | 1356 | } |
| 1373 | 1357 | |
| 1374 | 1358 | VIDEO_UPDATE( vic2 ) |