comparison vdp.c @ 37:cd59519b26d9

Initial H32 mode support
author Mike Pavone <pavone@retrodev.com>
date Sat, 08 Dec 2012 23:49:51 -0800
parents 04672c060062
children 898e3d035f42
comparison
equal deleted inserted replaced
36:04672c060062 37:cd59519b26d9
521 } 521 }
522 } 522 }
523 523
524 void vdp_h32(uint32_t line, uint32_t linecyc, vdp_context * context) 524 void vdp_h32(uint32_t line, uint32_t linecyc, vdp_context * context)
525 { 525 {
526 uint16_t address;
527 uint32_t mask;
526 switch(linecyc) 528 switch(linecyc)
527 { 529 {
528 //sprite render to line buffer starts 530 //sprite render to line buffer starts
529 case 0: 531 case 0:
532 context->cur_slot = MAX_DRAWS_H32-1;
533 memset(context->linebuf, 0, LINEBUF_SIZE);
534 render_sprite_cells(context);
530 break; 535 break;
531 case 1: 536 case 1:
532 break;
533 case 2: 537 case 2:
534 break;
535 case 3: 538 case 3:
536 break; 539 render_sprite_cells(context);
540 break;
541 //sprite attribute table scan starts
537 case 4: 542 case 4:
543 render_sprite_cells( context);
544 context->sprite_index = 0x80;
545 context->slot_counter = MAX_SPRITES_LINE_H32;
546 scan_sprite_table(line, context);
538 break; 547 break;
539 case 5: 548 case 5:
540 break;
541 case 6: 549 case 6:
542 break;
543 case 7: 550 case 7:
544 break;
545 case 8: 551 case 8:
546 break;
547 case 9: 552 case 9:
548 break;
549 case 10: 553 case 10:
550 break;
551 case 11: 554 case 11:
552 break;
553 case 12: 555 case 12:
554 break;
555 case 13: 556 case 13:
556 break; 557 render_sprite_cells(context);
558 scan_sprite_table(line, context);
557 case 14: 559 case 14:
560 external_slot(context);
558 break; 561 break;
559 case 15: 562 case 15:
560 break;
561 case 16: 563 case 16:
562 break;
563 case 17: 564 case 17:
564 break;
565 case 18: 565 case 18:
566 break;
567 case 19: 566 case 19:
568 break; 567 //HSYNC start
569 case 20: 568 case 20:
570 break;
571 case 21: 569 case 21:
572 break;
573 case 22: 570 case 22:
574 break;
575 case 23: 571 case 23:
576 break;
577 case 24: 572 case 24:
578 break;
579 case 25: 573 case 25:
580 break;
581 case 26: 574 case 26:
575 render_sprite_cells(context);
576 scan_sprite_table(line, context);
582 break; 577 break;
583 case 27: 578 case 27:
579 external_slot(context);
584 break; 580 break;
585 case 28: 581 case 28:
582 address = (context->regs[REG_HSCROLL] & 0x3F) << 10;
583 mask = 0;
584 if (context->regs[REG_MODE_3] & 0x2) {
585 mask |= 0xF8;
586 }
587 if (context->regs[REG_MODE_3] & 0x1) {
588 mask |= 0x7;
589 }
590 line &= mask;
591 address += line * 4;
592 context->hscroll_a = context->vdpmem[address] << 8 | context->vdpmem[address+1];
593 context->hscroll_b = context->vdpmem[address+2] << 8 | context->vdpmem[address+3];
594 //printf("%d: HScroll A: %d, HScroll B: %d\n", line, context->hscroll_a, context->hscroll_b);
586 break; 595 break;
587 case 29: 596 case 29:
588 break;
589 case 30: 597 case 30:
590 break;
591 case 31: 598 case 31:
592 break;
593 case 32: 599 case 32:
594 break; 600 render_sprite_cells(context);
601 scan_sprite_table(line, context);
602 break;
603 //!HSYNC high
595 case 33: 604 case 33:
605 read_map_scroll_a(0, line, context);
596 break; 606 break;
597 case 34: 607 case 34:
608 render_sprite_cells(context);
609 scan_sprite_table(line, context);
598 break; 610 break;
599 case 35: 611 case 35:
612 render_map_1(context);
613 scan_sprite_table(line, context);//Just a guess
600 break; 614 break;
601 case 36: 615 case 36:
616 render_map_2(context);
617 scan_sprite_table(line, context);//Just a guess
602 break; 618 break;
603 case 37: 619 case 37:
620 read_map_scroll_b(0, line, context);
604 break; 621 break;
605 case 38: 622 case 38:
623 render_sprite_cells(context);
624 scan_sprite_table(line, context);
606 break; 625 break;
607 case 39: 626 case 39:
627 render_map_3(context);
628 scan_sprite_table(line, context);//Just a guess
608 break; 629 break;
609 case 40: 630 case 40:
610 break; 631 render_map_output(line, 0, context);
611 case 41: 632 scan_sprite_table(line, context);//Just a guess
612 break; 633 //reverse context slot counter so it counts the number of sprite slots
613 case 42: 634 //filled rather than the number of available slots
614 break; 635 //context->slot_counter = MAX_SPRITES_LINE - context->slot_counter;
615 case 43: 636 context->cur_slot = MAX_SPRITES_LINE_H32-1;
616 break; 637 context->sprite_draws = MAX_DRAWS_H32;
617 case 44: 638 context->flags &= (~FLAG_CAN_MASK & ~FLAG_MASKED);
618 break; 639 break;
619 case 45: 640 COLUMN_RENDER_BLOCK(2, 41)
620 break; 641 COLUMN_RENDER_BLOCK(4, 49)
621 case 46: 642 COLUMN_RENDER_BLOCK(6, 57)
622 break; 643 COLUMN_RENDER_BLOCK_REFRESH(8, 65)
623 case 47: 644 COLUMN_RENDER_BLOCK(10, 73)
624 break; 645 COLUMN_RENDER_BLOCK(12, 81)
625 case 48: 646 COLUMN_RENDER_BLOCK(14, 89)
626 break; 647 COLUMN_RENDER_BLOCK_REFRESH(16, 97)
627 case 49: 648 COLUMN_RENDER_BLOCK(18, 105)
628 break; 649 COLUMN_RENDER_BLOCK(20, 113)
629 case 50: 650 COLUMN_RENDER_BLOCK(22, 121)
630 break; 651 COLUMN_RENDER_BLOCK_REFRESH(24, 129)
631 case 51: 652 COLUMN_RENDER_BLOCK(26, 137)
632 break; 653 COLUMN_RENDER_BLOCK(28, 145)
633 case 52: 654 COLUMN_RENDER_BLOCK(30, 153)
634 break; 655 COLUMN_RENDER_BLOCK_REFRESH(32, 161)
635 case 53:
636 break;
637 case 54:
638 break;
639 case 55:
640 break;
641 case 56:
642 break;
643 case 57:
644 break;
645 case 58:
646 break;
647 case 59:
648 break;
649 case 60:
650 break;
651 case 61:
652 break;
653 case 62:
654 break;
655 case 63:
656 break;
657 case 64:
658 break;
659 case 65:
660 break;
661 case 66:
662 break;
663 case 67:
664 break;
665 case 68:
666 break;
667 case 69:
668 break;
669 case 70:
670 break;
671 case 71:
672 break;
673 case 72:
674 break;
675 case 73:
676 break;
677 case 74:
678 break;
679 case 75:
680 break;
681 case 76:
682 break;
683 case 77:
684 break;
685 case 78:
686 break;
687 case 79:
688 break;
689 case 80:
690 break;
691 case 81:
692 break;
693 case 82:
694 break;
695 case 83:
696 break;
697 case 84:
698 break;
699 case 85:
700 break;
701 case 86:
702 break;
703 case 87:
704 break;
705 case 88:
706 break;
707 case 89:
708 break;
709 case 90:
710 break;
711 case 91:
712 break;
713 case 92:
714 break;
715 case 93:
716 break;
717 case 94:
718 break;
719 case 95:
720 break;
721 case 96:
722 break;
723 case 97:
724 break;
725 case 98:
726 break;
727 case 99:
728 break;
729 case 100:
730 break;
731 case 101:
732 break;
733 case 102:
734 break;
735 case 103:
736 break;
737 case 104:
738 break;
739 case 105:
740 break;
741 case 106:
742 break;
743 case 107:
744 break;
745 case 108:
746 break;
747 case 109:
748 break;
749 case 110:
750 break;
751 case 111:
752 break;
753 case 112:
754 break;
755 case 113:
756 break;
757 case 114:
758 break;
759 case 115:
760 break;
761 case 116:
762 break;
763 case 117:
764 break;
765 case 118:
766 break;
767 case 119:
768 break;
769 case 120:
770 break;
771 case 121:
772 break;
773 case 122:
774 break;
775 case 123:
776 break;
777 case 124:
778 break;
779 case 125:
780 break;
781 case 126:
782 break;
783 case 127:
784 break;
785 case 128:
786 break;
787 case 129:
788 break;
789 case 130:
790 break;
791 case 131:
792 break;
793 case 132:
794 break;
795 case 133:
796 break;
797 case 134:
798 break;
799 case 135:
800 break;
801 case 136:
802 break;
803 case 137:
804 break;
805 case 138:
806 break;
807 case 139:
808 break;
809 case 140:
810 break;
811 case 141:
812 break;
813 case 142:
814 break;
815 case 143:
816 break;
817 case 144:
818 break;
819 case 145:
820 break;
821 case 146:
822 break;
823 case 147:
824 break;
825 case 148:
826 break;
827 case 149:
828 break;
829 case 150:
830 break;
831 case 151:
832 break;
833 case 152:
834 break;
835 case 153:
836 break;
837 case 154:
838 break;
839 case 155:
840 break;
841 case 156:
842 break;
843 case 157:
844 break;
845 case 158:
846 break;
847 case 159:
848 break;
849 case 160:
850 break;
851 case 161:
852 break;
853 case 162:
854 break;
855 case 163:
856 break;
857 case 164:
858 break;
859 case 165:
860 break;
861 case 166:
862 break;
863 case 167:
864 break;
865 case 168:
866 break;
867 case 169: 656 case 169:
868 break;
869 case 170: 657 case 170:
870 break; 658 external_slot(context);
871 case 171:
872 break; 659 break;
873 } 660 }
874 } 661 }
875 void latch_mode(vdp_context * context) 662 void latch_mode(vdp_context * context)
876 { 663 {