comparison tools/lib64fmts.c @ 1592:91d1bb571fca

Implement common encdec ops lists for sharing oplists between formats that use the exact same ops.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 14 May 2018 06:36:18 +0300
parents 22f29c25b349
children a77876a07425
comparison
equal deleted inserted replaced
1591:3cc7b2aadda3 1592:91d1bb571fca
515 return img->screen[vbank].data[scroffs] & 15; 515 return img->screen[vbank].data[scroffs] & 15;
516 } 516 }
517 517
518 518
519 // 519 //
520 // Array with data for supported formats 520 // Helper macros for defining screen ram layouts
521 // common for FLI type foramts
521 // 522 //
522 #define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DT_SCREEN_RAM, (start) + ((osize) * (oindex)), (bindex), 0, NULL, NULL } 523 #define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DT_SCREEN_RAM, (start) + ((osize) * (oindex)), (bindex), 0, NULL, NULL }
523 #define DEF_SCREEN_RAMS_8(start, sindex, osize) \ 524 #define DEF_SCREEN_RAMS_8(start, sindex, osize) \
524 DEF_SCREEN_RAM((start), 0, (sindex + 0), (osize)), \ 525 DEF_SCREEN_RAM((start), 0, (sindex + 0), (osize)), \
525 DEF_SCREEN_RAM((start), 1, (sindex + 1), (osize)), \ 526 DEF_SCREEN_RAM((start), 1, (sindex + 1), (osize)), \
529 DEF_SCREEN_RAM((start), 5, (sindex + 5), (osize)), \ 530 DEF_SCREEN_RAM((start), 5, (sindex + 5), (osize)), \
530 DEF_SCREEN_RAM((start), 6, (sindex + 6), (osize)), \ 531 DEF_SCREEN_RAM((start), 6, (sindex + 6), (osize)), \
531 DEF_SCREEN_RAM((start), 7, (sindex + 7), (osize)) 532 DEF_SCREEN_RAM((start), 7, (sindex + 7), (osize))
532 533
533 534
534 const DMC64ImageFormat dmC64ImageFormats[] = 535
535 { 536 //
536 { 537 // Many formats actually share memory layout, and there are packed and
537 D64_FMT_MC, "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, DM_FMT_RDWR, 538 // unpacked versions of several formats. We'll reuse these here through
538 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 539 // this common formats ops array, referred from dmC64ImageFormats[]
539 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 540 //
540 fmtProbeDrazPaint20Packed, 541 const DMC64EncDecOpList dmC64CommonFormatOps[] =
541 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked, 542 {
542 NULL, NULL, 543 { // #0: Koala Paint type memory layout
543 NULL, 544 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
544 { 545 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
546 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
547 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
548 { DT_LAST, 0, 0, 0, NULL, NULL },
549 },
550
551 { // #1: Amica Paint, Run Paint, etc. layout
552 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
553 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
554 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
555 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
556 { DT_LAST, 0, 0, 0, NULL, NULL },
557 },
558
559 { // #2: Art Studio etc. Hires
560 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
561 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
562 { DT_LAST, 0, 0, 0, NULL, NULL },
563 },
564
565 { // #3: FunPaint II
566 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400),
567 { DT_BITMAP_RAM, 0x2000, 0, 0, NULL, NULL },
568 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
569 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
570 DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400),
571 { DT_BITMAP_RAM, 0x63e8, 1, 0, NULL, NULL },
572 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
573 { DT_LAST, 0, 0, 0, NULL, NULL },
574 },
575
576 { // #4: DrazPaint 1.x & 2
545 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, 577 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
546 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, 578 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
547 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, 579 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
548 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, 580 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
549 { DT_LAST, 0, 0, 0, NULL, NULL }, 581 { DT_LAST, 0, 0, 0, NULL, NULL },
550 } 582 },
551 }, 583
552 584 { // #5: DrazLace 1.0
553 {
554 D64_FMT_MC, "drp", "DrazPaint (unpacked)", 0x5800, 10051, DM_FMT_RDWR,
555 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
556 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
557 NULL,
558 NULL, NULL,
559 NULL, NULL,
560 NULL,
561 {
562 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
563 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
564 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
565 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
566 { DT_LAST, 0, 0, 0, NULL, NULL },
567 }
568 },
569
570 {
571 D64_FMT_MC | D64_FMT_ILACE, "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, DM_FMT_RDWR,
572 C64_SCR_WIDTH , C64_SCR_HEIGHT,
573 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
574 fmtProbeDrazLace10Packed,
575 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked,
576 NULL, NULL,
577 NULL,
578 {
579 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, 585 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
580 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, 586 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
581 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, 587 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
582 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, 588 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
583 { DT_BITMAP_RAM, 0x2800, 1, 0, NULL, NULL }, 589 { DT_BITMAP_RAM, 0x2800, 1, 0, NULL, NULL },
584 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL }, 590 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL },
585 { DT_ENC_FUNCTION, 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType }, 591 { DT_ENC_FUNCTION, 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType },
586 { DT_LAST, 0, 0, 0, NULL, NULL }, 592 { DT_LAST, 0, 0, 0, NULL, NULL },
587 } 593 },
594 };
595
596
597 //
598 // Array with data for supported formats
599 //
600 const DMC64ImageFormat dmC64ImageFormats[] =
601 {
602 {
603 D64_FMT_MC, "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, DM_FMT_RDWR,
604 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
605 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
606 fmtProbeDrazPaint20Packed,
607 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked,
608 NULL, NULL,
609 NULL,
610 { }, &dmC64CommonFormatOps[4]
611 },
612
613 {
614 D64_FMT_MC, "drp", "DrazPaint (unpacked)", 0x5800, 10051, DM_FMT_RDWR,
615 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
616 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
617 NULL,
618 NULL, NULL,
619 NULL, NULL,
620 NULL,
621 { }, &dmC64CommonFormatOps[4]
622 },
623
624 {
625 D64_FMT_MC | D64_FMT_ILACE, "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, DM_FMT_RDWR,
626 C64_SCR_WIDTH , C64_SCR_HEIGHT,
627 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
628 fmtProbeDrazLace10Packed,
629 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked,
630 NULL, NULL,
631 NULL,
632 { }, &dmC64CommonFormatOps[5]
588 }, 633 },
589 634
590 { 635 {
591 D64_FMT_MC | D64_FMT_ILACE, "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, DM_FMT_RDWR, 636 D64_FMT_MC | D64_FMT_ILACE, "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, DM_FMT_RDWR,
592 C64_SCR_WIDTH , C64_SCR_HEIGHT, 637 C64_SCR_WIDTH , C64_SCR_HEIGHT,
593 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, 638 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
594 NULL, 639 NULL,
595 NULL, NULL, 640 NULL, NULL,
596 NULL, NULL, 641 NULL, NULL,
597 NULL, 642 NULL,
598 { 643 { }, &dmC64CommonFormatOps[5]
599 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
600 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
601 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
602 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
603 { DT_BITMAP_RAM, 0x2800, 1, 0, NULL, NULL },
604 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL },
605 { DT_ENC_FUNCTION, 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType },
606 { DT_LAST, 0, 0, 0, NULL, NULL },
607 }
608 }, 644 },
609 645
610 { 646 {
611 D64_FMT_MC, "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, DM_FMT_RDWR, 647 D64_FMT_MC, "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, DM_FMT_RDWR,
612 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 648 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
619 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, 655 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
620 { DT_COLOR_REG, 0x07e8, 0, DC_BGCOL, NULL, NULL }, 656 { DT_COLOR_REG, 0x07e8, 0, DC_BGCOL, NULL, NULL },
621 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, 657 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
622 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, 658 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
623 { DT_LAST, 0, 0, 0, NULL, NULL }, 659 { DT_LAST, 0, 0, 0, NULL, NULL },
624 } 660 },
661 NULL
625 }, 662 },
626 663
627 { 664 {
628 D64_FMT_MC, "p64", "Picasso 64 (unpacked)", 0x1800, 10050, DM_FMT_RDWR, 665 D64_FMT_MC, "p64", "Picasso 64 (unpacked)", 0x1800, 10050, DM_FMT_RDWR,
629 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 666 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
636 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, 673 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
637 { DT_COLOR_REG, 0x07fe, 0, DC_BGCOL, NULL, NULL }, 674 { DT_COLOR_REG, 0x07fe, 0, DC_BGCOL, NULL, NULL },
638 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, 675 { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL },
639 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, 676 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
640 { DT_LAST, 0, 0, 0, NULL, NULL }, 677 { DT_LAST, 0, 0, 0, NULL, NULL },
641 } 678 },
679 NULL
642 }, 680 },
643 681
644 { 682 {
645 D64_FMT_MC | D64_FMT_ILACE, "mci", "Truepaint (unpacked)", 0x9c00, 19434, DM_FMT_RD, 683 D64_FMT_MC | D64_FMT_ILACE, "mci", "Truepaint (unpacked)", 0x9c00, 19434, DM_FMT_RD,
646 C64_SCR_WIDTH , C64_SCR_HEIGHT, 684 C64_SCR_WIDTH , C64_SCR_HEIGHT,
656 { DT_BITMAP_RAM, 0x2400, 1, 0, NULL, NULL }, 694 { DT_BITMAP_RAM, 0x2400, 1, 0, NULL, NULL },
657 { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL }, 695 { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL },
658 { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL }, 696 { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL },
659 { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintGetLaceType, NULL }, 697 { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintGetLaceType, NULL },
660 { DT_LAST, 0, 0, 0, NULL, NULL }, 698 { DT_LAST, 0, 0, 0, NULL, NULL },
661 } 699 },
700 NULL
662 }, 701 },
663 702
664 { 703 {
665 D64_FMT_MC, "kla", "Koala Paint (unpacked)", 0x6000, 10003, DM_FMT_RDWR, 704 D64_FMT_MC, "kla", "Koala Paint (unpacked)", 0x6000, 10003, DM_FMT_RDWR,
666 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 705 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
667 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 706 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
668 NULL, 707 NULL,
669 NULL, NULL, 708 NULL, NULL,
670 NULL, NULL, 709 NULL, NULL,
671 NULL, 710 NULL,
672 { 711 { }, &dmC64CommonFormatOps[0]
673 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
674 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
675 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
676 { DT_COLOR_REG, 0x270f, 0, DC_BGCOL, NULL, NULL },
677 { DT_LAST, 0, 0, 0, NULL, NULL },
678 }
679 }, 712 },
680 713
681 { 714 {
682 D64_FMT_MC, "klp", "Koala Paint (packed)", 0x6000, 0, DM_FMT_RDWR, 715 D64_FMT_MC, "klp", "Koala Paint (packed)", 0x6000, 0, DM_FMT_RDWR,
683 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 716 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
684 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 717 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
685 NULL, 718 NULL,
686 fmtDecodeKoalaPaintPacked, fmtEncodeKoalaPaintPacked, 719 fmtDecodeKoalaPaintPacked, fmtEncodeKoalaPaintPacked,
687 NULL, NULL, 720 NULL, NULL,
688 NULL, 721 NULL,
689 { 722 { }, &dmC64CommonFormatOps[0]
690 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
691 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
692 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
693 { DT_COLOR_REG, 0x270f, 0, DC_BGCOL, NULL, NULL },
694 { DT_LAST, 0, 0, 0, NULL, NULL },
695 }
696 }, 723 },
697 724
698 { 725 {
699 D64_FMT_MC, "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, DM_FMT_RDWR, 726 D64_FMT_MC, "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, DM_FMT_RDWR,
700 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 727 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
718 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 745 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
719 fmtProbeAmicaPaintPacked, 746 fmtProbeAmicaPaintPacked,
720 fmtDecodeAmicaPaintPacked, fmtEncodeAmicaPaintPacked, 747 fmtDecodeAmicaPaintPacked, fmtEncodeAmicaPaintPacked,
721 NULL, NULL, 748 NULL, NULL,
722 NULL, 749 NULL,
723 { 750 { }, &dmC64CommonFormatOps[1]
724 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
725 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
726 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
727 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
728 { DT_LAST, 0, 0, 0, NULL, NULL },
729 }
730 }, 751 },
731 752
732 { 753 {
733 D64_FMT_MC, "rpm", "Run Paint (unpacked)", 0x6000, 10006, DM_FMT_RDWR, 754 D64_FMT_MC, "rpm", "Run Paint (unpacked)", 0x6000, 10006, DM_FMT_RDWR,
734 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 755 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
735 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 756 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
736 NULL, 757 NULL,
737 NULL, NULL, 758 NULL, NULL,
738 NULL, NULL, 759 NULL, NULL,
739 NULL, 760 NULL,
740 { 761 { }, &dmC64CommonFormatOps[1]
741 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, 762 },
742 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, 763
743 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, 764 {
744 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, 765 D64_FMT_MC, "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, DM_FMT_RDWR,
745 { DT_LAST, 0, 0, 0, NULL, NULL }, 766 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
746 } 767 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
768 NULL,
769 NULL, NULL,
770 NULL, NULL,
771 NULL,
772 { }, &dmC64CommonFormatOps[1]
747 }, 773 },
748 774
749 { 775 {
750 D64_FMT_HIRES, "art", "Art Studio (unpacked)", 0x2000, 9009, DM_FMT_RD, 776 D64_FMT_HIRES, "art", "Art Studio (unpacked)", 0x2000, 9009, DM_FMT_RD,
751 C64_SCR_WIDTH , C64_SCR_HEIGHT, 777 C64_SCR_WIDTH , C64_SCR_HEIGHT,
752 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 778 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
753 NULL, 779 NULL,
754 NULL, NULL, 780 NULL, NULL,
755 NULL, NULL, 781 NULL, NULL,
756 NULL, 782 NULL,
757 { 783 { }, &dmC64CommonFormatOps[2]
758 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
759 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
760 { DT_LAST, 0, 0, 0, NULL, NULL },
761 }
762 }, 784 },
763 785
764 { 786 {
765 D64_FMT_HIRES, "iph", "Interpaint (unpacked)", 0x4000, 9002, DM_FMT_RD, 787 D64_FMT_HIRES, "iph", "Interpaint (unpacked)", 0x4000, 9002, DM_FMT_RD,
766 C64_SCR_WIDTH , C64_SCR_HEIGHT, 788 C64_SCR_WIDTH , C64_SCR_HEIGHT,
767 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, 789 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
768 NULL, 790 NULL,
769 NULL, NULL, 791 NULL, NULL,
770 NULL, NULL, 792 NULL, NULL,
771 NULL, 793 NULL,
772 { 794 { }, &dmC64CommonFormatOps[2]
773 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
774 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
775 { DT_LAST, 0, 0, 0, NULL, NULL },
776 }
777 },
778
779 {
780 D64_FMT_MC, "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, DM_FMT_RDWR,
781 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
782 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
783 NULL,
784 NULL, NULL,
785 NULL, NULL,
786 NULL,
787 {
788 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
789 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
790 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
791 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
792 { DT_LAST, 0, 0, 0, NULL, NULL },
793 }
794 }, 795 },
795 796
796 { 797 {
797 D64_FMT_HIRES, "dd", "Doodle (unpacked)", 0x1c00, 9218, DM_FMT_RDWR, 798 D64_FMT_HIRES, "dd", "Doodle (unpacked)", 0x1c00, 9218, DM_FMT_RDWR,
798 C64_SCR_WIDTH , C64_SCR_HEIGHT, 799 C64_SCR_WIDTH , C64_SCR_HEIGHT,
803 NULL, 804 NULL,
804 { 805 {
805 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, 806 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL },
806 { DT_BITMAP_RAM, 0x0400, 0, 0, NULL, NULL }, 807 { DT_BITMAP_RAM, 0x0400, 0, 0, NULL, NULL },
807 { DT_LAST, 0, 0, 0, NULL, NULL }, 808 { DT_LAST, 0, 0, 0, NULL, NULL },
808 } 809 },
810 NULL
809 }, 811 },
810 812
811 { 813 {
812 D64_FMT_MC | D64_FMT_FLI, "bfli", "Big FLI (unpacked) [BROKEN]", 0x3bff, 33795, DM_FMT_RD, 814 D64_FMT_MC | D64_FMT_FLI, "bfli", "Big FLI (unpacked) [BROKEN]", 0x3bff, 33795, DM_FMT_RD,
813 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT * 2, 815 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT * 2,
821 DEF_SCREEN_RAMS_8( 0x0401, 0, 0x400), 823 DEF_SCREEN_RAMS_8( 0x0401, 0, 0x400),
822 { DT_BITMAP_RAM, 0x2401, 0, 0, NULL, NULL }, 824 { DT_BITMAP_RAM, 0x2401, 0, 0, NULL, NULL },
823 DEF_SCREEN_RAMS_8( 0x4401, 8, 0x400), 825 DEF_SCREEN_RAMS_8( 0x4401, 8, 0x400),
824 { DT_BITMAP_RAM, 0x6401 - 24*8, 1, 0, NULL, NULL }, 826 { DT_BITMAP_RAM, 0x6401 - 24*8, 1, 0, NULL, NULL },
825 { DT_LAST, 0, 0, 0, NULL, NULL }, 827 { DT_LAST, 0, 0, 0, NULL, NULL },
826 } 828 },
829 NULL
827 }, 830 },
828 831
829 832
830 { 833 {
831 D64_FMT_MC | D64_FMT_FLI, "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, DM_FMT_RDWR, 834 D64_FMT_MC | D64_FMT_FLI, "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, DM_FMT_RDWR,
839 { DT_EXTRA_DATA, 0x0000, 0, 200, NULL, NULL }, 842 { DT_EXTRA_DATA, 0x0000, 0, 200, NULL, NULL },
840 { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL }, 843 { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL },
841 DEF_SCREEN_RAMS_8( 0x0500, 0, 0x400), 844 DEF_SCREEN_RAMS_8( 0x0500, 0, 0x400),
842 { DT_BITMAP_RAM, 0x2500, 0, 0, NULL, NULL }, 845 { DT_BITMAP_RAM, 0x2500, 0, 0, NULL, NULL },
843 { DT_LAST, 0, 0, 0, NULL, NULL }, 846 { DT_LAST, 0, 0, 0, NULL, NULL },
844 } 847 },
848 NULL
845 }, 849 },
846 850
847 { 851 {
848 D64_FMT_MC | D64_FMT_FLI, "fli", "FLI Designer (unpacked)", 0, 17409, DM_FMT_RD, 852 D64_FMT_MC | D64_FMT_FLI, "fli", "FLI Designer (unpacked)", 0, 17409, DM_FMT_RD,
849 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 853 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
855 { 859 {
856 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, 860 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
857 DEF_SCREEN_RAMS_8( 0x0400, 0, 0x400), 861 DEF_SCREEN_RAMS_8( 0x0400, 0, 0x400),
858 { DT_BITMAP_RAM, 0x2400, 0, 0, NULL, NULL }, 862 { DT_BITMAP_RAM, 0x2400, 0, 0, NULL, NULL },
859 { DT_LAST, 0, 0, 0, NULL, NULL }, 863 { DT_LAST, 0, 0, 0, NULL, NULL },
860 } 864 },
865 NULL
861 }, 866 },
862 867
863 { 868 {
864 D64_FMT_MC, "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, DM_FMT_RD, 869 D64_FMT_MC, "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, DM_FMT_RD,
865 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, 870 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
872 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, 877 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
873 { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL }, 878 { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL },
874 { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL }, 879 { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL },
875 { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL }, 880 { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL },
876 { DT_LAST, 0, 0, 0, NULL, NULL }, 881 { DT_LAST, 0, 0, 0, NULL, NULL },
877 } 882 },
883 NULL
878 }, 884 },
879 885
880 #define XX2_WIDTH_CH 40 886 #define XX2_WIDTH_CH 40
881 #define XX2_HEIGHT_CH 10 887 #define XX2_HEIGHT_CH 10
882 #define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH) 888 #define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH)
894 { DT_BITMAP_RAM, 0x0000, 0, XX2_BSIZE, NULL, NULL }, 900 { DT_BITMAP_RAM, 0x0000, 0, XX2_BSIZE, NULL, NULL },
895 { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, 901 { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL },
896 { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, 902 { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL },
897 { DT_COLOR_SET, 11, 0, DC_BGCOL, NULL, NULL }, 903 { DT_COLOR_SET, 11, 0, DC_BGCOL, NULL, NULL },
898 { DT_LAST, 0, 0, 0, NULL, NULL }, 904 { DT_LAST, 0, 0, 0, NULL, NULL },
899 } 905 },
906 NULL
900 }, 907 },
901 908
902 { 909 {
903 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, 910 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE,
904 "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, DM_FMT_RD, 911 "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, DM_FMT_RD,
906 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 913 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
907 fmtProbeFunPaint2, 914 fmtProbeFunPaint2,
908 fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked, 915 fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked,
909 NULL, NULL, 916 NULL, NULL,
910 fmtGetPixelFunPaint2, 917 fmtGetPixelFunPaint2,
911 { 918 { }, &dmC64CommonFormatOps[3]
912 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400),
913 { DT_BITMAP_RAM, 0x2000, 0, 0, NULL, NULL },
914 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
915 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
916 DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400),
917 { DT_BITMAP_RAM, 0x63e8, 1, 0, NULL, NULL },
918 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
919 { DT_LAST, 0, 0, 0, NULL, NULL },
920 }
921 }, 919 },
922 920
923 { 921 {
924 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, 922 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE,
925 "fp2p", "FunPaint II (packed)", 0x3ff0, 0, DM_FMT_RD, 923 "fp2p", "FunPaint II (packed)", 0x3ff0, 0, DM_FMT_RD,
927 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, 925 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
928 NULL, 926 NULL,
929 fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed, 927 fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed,
930 NULL, NULL, 928 NULL, NULL,
931 fmtGetPixelFunPaint2, 929 fmtGetPixelFunPaint2,
932 { 930 { }, &dmC64CommonFormatOps[3]
933 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400),
934 { DT_BITMAP_RAM, 0x2000, 0, 0, NULL, NULL },
935 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
936 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
937 DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400),
938 { DT_BITMAP_RAM, 0x63e8, 1, 0, NULL, NULL },
939 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
940 { DT_LAST, 0, 0, 0, NULL, NULL },
941 }
942 }, 931 },
943 932
944 { 933 {
945 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, 934 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE,
946 "gun", "GunPaint (unpacked)", 0x4000, 0, DM_FMT_RD, 935 "gun", "GunPaint (unpacked)", 0x4000, 0, DM_FMT_RD,
957 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL }, 946 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
958 DEF_SCREEN_RAMS_8( 0x4400, 8, 0x400), 947 DEF_SCREEN_RAMS_8( 0x4400, 8, 0x400),
959 { DT_BITMAP_RAM, 0x6400, 1, 0, NULL, NULL }, 948 { DT_BITMAP_RAM, 0x6400, 1, 0, NULL, NULL },
960 { DT_EXTRA_DATA, 0x47e8, 1, 20, NULL, NULL }, 949 { DT_EXTRA_DATA, 0x47e8, 1, 20, NULL, NULL },
961 { DT_LAST, 0, 0, 0, NULL, NULL }, 950 { DT_LAST, 0, 0, 0, NULL, NULL },
962 } 951 },
952 NULL
963 }, 953 },
964 954
965 { 955 {
966 D64_FMT_HIRES | D64_FMT_FLI, 956 D64_FMT_HIRES | D64_FMT_FLI,
967 "chi", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386, DM_FMT_RD, 957 "chi", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386, DM_FMT_RD,
973 fmtGetPixelCHFLI, 963 fmtGetPixelCHFLI,
974 { 964 {
975 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, 965 { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL },
976 DEF_SCREEN_RAMS_8( 0x2000, 0, 0x400), 966 DEF_SCREEN_RAMS_8( 0x2000, 0, 0x400),
977 { DT_LAST, 0, 0, 0, NULL, NULL }, 967 { DT_LAST, 0, 0, 0, NULL, NULL },
978 } 968 },
969 NULL
979 }, 970 },
980 }; 971 };
981 972
982 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]); 973 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]);
983 974