Mercurial > repos > blastem
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 { |