ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
gime.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSì COM'è", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#if defined(__coco3__) || defined(__coco3b__)
36
37#include "../ugbc.h"
38#include <math.h>
39
40static RGBi SYSTEM_PALETTE[] = {
41 { 0x00, 0x00, 0x00, 0xff, 0x00, "BLACK", 0x00 },
42 { 0x00, 0x00, 0x55, 0xff, 0x00, "COLOR", 0x01 },
43 { 0x00, 0x00, 0xaa, 0xff, 0x00, "BLUE", 0x08 },
44 { 0x00, 0x00, 0xff, 0xff, 0x00, "LIGHT BLUE", 0x09 },
45 { 0x00, 0x55, 0x00, 0xff, 0x00, "COLOR", 0x02 },
46 { 0x00, 0x55, 0x55, 0xff, 0x00, "DARK CYAN", 0x03 },
47 { 0x00, 0x55, 0xaa, 0xff, 0x00, "COLOR", 0x0a },
48 { 0x00, 0x55, 0xff, 0xff, 0x00, "COLOR", 0x0b },
49 { 0x00, 0xaa, 0x00, 0xff, 0x00, "GREEN", 0x10 },
50 { 0x00, 0xaa, 0x55, 0xff, 0x00, "COLOR", 0x11 },
51 { 0x00, 0xaa, 0xaa, 0xff, 0x00, "CYAN", 0x18 },
52 { 0x00, 0xaa, 0xff, 0xff, 0x00, "COLOR", 0x19 },
53 { 0x00, 0xff, 0x00, 0xff, 0x00, "LIGHT GREEN", 0x12 },
54 { 0x00, 0xff, 0x55, 0xff, 0x00, "COLOR", 0x13 },
55 { 0x00, 0xff, 0xaa, 0xff, 0x00, "COLOR", 0x1a },
56 { 0x00, 0xff, 0xff, 0xff, 0x00, "LIGHT CYAN", 0x1b },
57 { 0x55, 0x00, 0x00, 0xff, 0x00, "COLOR", 0x04 },
58 { 0x55, 0x00, 0x55, 0xff, 0x00, "PURPLE", 0x05 },
59 { 0x55, 0x00, 0xaa, 0xff, 0x00, "COLOR", 0x0c },
60 { 0x55, 0x00, 0xff, 0xff, 0x00, "COLOR", 0x0d },
61 { 0x55, 0x55, 0x00, 0xff, 0x00, "COLOR", 0x06 },
62 { 0x55, 0x55, 0x55, 0xff, 0x00, "COLOR", 0x07 },
63 { 0x55, 0x55, 0xaa, 0xff, 0x00, "COLOR", 0x0e },
64 { 0x55, 0x55, 0xff, 0xff, 0x00, "COLOR", 0x0f },
65 { 0x55, 0xaa, 0x00, 0xff, 0x00, "COLOR", 0x14},
66 { 0x55, 0xaa, 0x55, 0xff, 0x00, "COLOR", 0x15 },
67 { 0x55, 0xaa, 0xaa, 0xff, 0x00, "COLOR", 0x1c },
68 { 0x55, 0xaa, 0xff, 0xff, 0x00, "PASTEL BLUE", 0x1d },
69 { 0x55, 0xff, 0x00, 0xff, 0x00, "COLOR", 0x16 },
70 { 0x55, 0xff, 0x55, 0xff, 0x00, "COLOR", 0x17 },
71 { 0x55, 0xff, 0xaa, 0xff, 0x00, "COLOR", 0x1e },
72 { 0x55, 0xff, 0xff, 0xff, 0x00, "COLOR", 0x1f },
73 { 0xaa, 0x00, 0x00, 0xff, 0x00, "RED", 0x20 },
74 { 0xaa, 0x00, 0x55, 0xff, 0x00, "COLOR", 0x21 },
75 { 0xaa, 0x00, 0xaa, 0xff, 0x00, "MAGENTA", 0x28 },
76 { 0xaa, 0x00, 0xff, 0xff, 0x00, "COLOR", 0x29 },
77 { 0xaa, 0x55, 0x00, 0xff, 0x00, "COLOR", 0x22 },
78 { 0xaa, 0x55, 0x55, 0xff, 0x00, "COLOR", 0x23 },
79 { 0xaa, 0x55, 0xaa, 0xff, 0x00, "MAUVE", 0x2a },
80 { 0xaa, 0x55, 0xff, 0xff, 0x00, "COLOR", 0x2b },
81 { 0xaa, 0xaa, 0x00, 0xff, 0x00, "YELLOW", 0x30 },
82 { 0xaa, 0xaa, 0x55, 0xff, 0x00, "COLOR", 0x31 },
83 { 0xaa, 0xaa, 0xaa, 0xff, 0x00, "WHITE", 0x38 },
84 { 0xaa, 0xaa, 0xff, 0xff, 0x00, "COLOR", 0x39 },
85 { 0xaa, 0xff, 0x00, 0xff, 0x00, "COLOR", 0x32 },
86 { 0xaa, 0xff, 0x55, 0xff, 0x00, "COLOR", 0x33 },
87 { 0xaa, 0xff, 0xaa, 0xff, 0x00, "COLOR", 0x3a },
88 { 0xaa, 0xff, 0xff, 0xff, 0x00, "COLOR", 0x3b },
89 { 0xff, 0x00, 0x00, 0xff, 0x00, "LIGHT RED", 0x24},
90 { 0xff, 0x00, 0x55, 0xff, 0x00, "COLOR", 0x25 },
91 { 0xff, 0x00, 0xaa, 0xff, 0x00, "COLOR", 0x2c },
92 { 0xff, 0x00, 0xff, 0xff, 0x00, "LIGHT MAGENTA", 0x2d },
93 { 0xff, 0x55, 0x00, 0xff, 0x00, "ORANGE", 0x26 },
94 { 0xff, 0x55, 0x55, 0xff, 0x00, "PINK", 0x27 },
95 { 0xff, 0x55, 0xaa, 0xff, 0x00, "COLOR", 0x2e },
96 { 0xff, 0x55, 0xff, 0xff, 0x00, "COLOR", 0x2f },
97 { 0xff, 0xaa, 0x00, 0xff, 0x00, "COLOR", 0x34 },
98 { 0xff, 0xaa, 0x55, 0xff, 0x00, "COLOR", 0x35 },
99 { 0xff, 0xaa, 0xaa, 0xff, 0x00, "COLOR", 0x3c },
100 { 0xff, 0xaa, 0xff, 0xff, 0x00, "COLOR", 0x3d },
101 { 0xff, 0xff, 0x00, 0xff, 0x00, "COLOR", 0x36 },
102 { 0xff, 0xff, 0x55, 0xff, 0x00, "COLOR", 0x37 },
103 { 0xff, 0xff, 0xaa, 0xff, 0x00, "COLOR", 0x3e },
104 { 0xff, 0xff, 0xff, 0xff, 0x00, "LIGHT WHITE", 0x3f }
105};
106
107static RGBi * commonPalette;
109
110/****************************************************************************
111 * CODE SECTION
112 ****************************************************************************/
113
114static int rgbConverterFunction( int _red, int _green, int _blue ) {
115
116 return RGB2GIME( _red, _green, _blue );
117
118}
119
131void gime_collision( Environment * _environment, char * _sprite_mask, char * _result ) {
132
133}
134
146void gime_hit( Environment * _environment, char * _sprite_mask, char * _result ) {
147
148}
149
159void gime_border_color( Environment * _environment, char * _border_color ) {
160
161 outline1("LDA %s", _border_color );
162 outline0("STA GIMEBRDR" );
163
164}
165
166void gime_background_color_get_vars( Environment * _environment, char * _index, char * _background_color ) {
167
168 outline1( "LDA %s", _index );
169 outline0( "JSR GIMEGETPALETTE" );
170 outline1( "STB %s", _background_color );
171
172}
173
184void gime_background_color( Environment * _environment, char * _index, char * _background_color ) {
185
186 outline1( "LDA %s", _index );
187 outline1( "LDB %s", _background_color );
188 outline0( "JSR GIMEUPDATEPALETTE" );
189
190}
191
202void gime_sprite_common_color( Environment * _environment, char * _index, char * _common_color ) {
203
204}
205
221void gime_raster_at( Environment * _environment, char * _label, char * _positionlo, char * _positionhi ) {
222
223}
224
235void gime_next_raster( Environment * _environment ) {
236
237}
238
252void gime_next_raster_at( Environment * _environment, char * _label, char * _positionlo, char * _positionhi ) {
253
254}
255
256void gime_bank_select( Environment * _environment, int _bank ) {
257
258}
259
260#define GIME_MODE( _graphics, _linesize ) \
261 outline0( "LDA GIMEVIDM" ); \
262 outline0( "ANDA #$8" ); \
263 outline1( "ORA #$%2.2x", ( ( _graphics & 0x01 ) << 7 ) | ( _linesize & 0x03 ) ); \
264 outline0( "STA GIMEVIDM" ); \
265 outline0( "STA GIMEVIDMSHADOW" );
266
267#define GIME_TEXT( ) GIME_MODE( 0, 3 )
268#define GIME_GRAPH( ) GIME_MODE( 1, 1 )
269
270#define GIME_24ROWS 0
271#define GIME_25ROWS 1
272#define GIME_UNUSED 2
273#define GIME_28ROWS 3
274
275#define GIME_HRES_32COLS 0 // or 2 is equal!
276#define GIME_CRES_32COLS 1 // or 3 is equal!
277
278#define GIME_HRES_40COLS 1 // or 3 is equal!
279#define GIME_CRES_40COLS 1 // or 3 is equal!
280
281#define GIME_HRES_64COLS 4 // or 6 is equal!
282#define GIME_CRES_64COLS 1 // or 3 is equal!
283
284#define GIME_HRES_80COLS 5 // or 7 is equal!
285#define GIME_CRES_80COLS 1 // or 3 is equal!
286
287#define GIME_2COLORS 0
288#define GIME_4COLORS 1
289#define GIME_16COLORS 2
290#define GIME_32COLORS 3 // unused!!
291
292#define GIME_128PIXELS 0
293#define GIME_160PIXELS 1
294#define GIME_256PIXELS 2
295#define GIME_320PIXELS 3
296#define GIME_512PIXELS 4
297#define GIME_640PIXELS 5
298#define GIME_1024PIXELS 6
299#define GIME_1280PIXELS 7
300
301#define GIME_RESOLUTION( _hres, _cres, _vres ) \
302 outline1( "LDA #$%2.2x", ( ( _vres & 0x03 ) << 5 ) | ( ( _hres & 0x07 ) << 2 ) | ( ( _cres & 0x03 ) ) ); \
303 outline0( "STA GIMEVIDR" );
304
305#define GIME_ADDRESS( _address ) \
306 outline1( "LDD #$%4.4x", ( _address >> 3 ) ); \
307 outline0( "STA GIMEVOFF1" ); \
308 outline0( "STB GIMEVOFF0" ); \
309 outline0( "CLR GIMEHOFF" );
310
311#define GIME_128K( ) GIME_ADDRESS( 0x60000 )
312#define GIME_512K( ) GIME_\( 0x00000 )
313
314void console_calculate( Environment * _environment ) {
315
316 int consoleSA = 0x4000;
317 int consoleWB = _environment->activeConsole.width * _environment->currentModeBW;
318 int consoleHB = _environment->activeConsole.height * 8;
319
320 int bitmap = 0;
321
322 switch( _environment->currentMode ) {
323
336 bitmap = 0;
337 break;
338
339 default:
340 bitmap = 1;
341 break;
342
343 }
344
345 int currentFrameSize;
346
347 if ( bitmap ) {
348 switch( _environment->screenColors ) {
349 case 2:
350 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight );
351 break;
352 case 4:
353 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight ) * 2;
354 break;
355 case 16:
356 default:
357 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight ) * 4;
358 break;
359 }
360 } else {
361 currentFrameSize = _environment->screenTilesWidth * _environment->screenTilesHeight * 2;
362 }
363
364 if ( currentFrameSize <= 0x2000 ) {
365 consoleSA = 0xc000;
366 } else if ( currentFrameSize <= 0x4000 ) {
367 consoleSA = 0xa000;
368 } else if ( currentFrameSize <= 0x6000 ) {
369 consoleSA = 0x8000;
370 } else if ( currentFrameSize <= 0x8000 ) {
371 consoleSA = 0x6000;
372 } else {
373 consoleSA = 0x6000;
374 }
375
376 cpu_store_16bit( _environment, "CONSOLESA", consoleSA );
377 cpu_store_8bit( _environment, "CONSOLEWB", consoleWB );
378 cpu_store_8bit( _environment, "CONSOLEHB", consoleHB );
379
380}
381
382void console_calculate_vars( Environment * _environment ) {
383
384 _environment->dynamicConsole = 1;
385
386 outline0( "JSR CONSOLECALCULATE" );
387
388}
389
390int gime_screen_mode_enable( Environment * _environment, ScreenMode * _screen_mode ) {
391
392 _screen_mode->selected = 1;
393
394 // deploy_preferred( gimevars, src_hw_gime_vars_asm );
395
396 GIME_128K( );
397
398 _environment->fontWidth = 8;
399 _environment->fontHeight = 8;
400 _environment->screenShades = 4;
401 _environment->screenTiles = 128;
402 switch( _screen_mode->id ) {
403
405
406 GIME_TEXT()
408
409 _environment->screenTilesWidth = 32;
410 _environment->screenTilesHeight = 24;
411 _environment->screenColors = 16;
412 break;
413
415
416 GIME_TEXT()
418
419 _environment->screenTilesWidth = 32;
420 _environment->screenTilesHeight = 25;
421 _environment->screenColors = 16;
422 break;
423
425
426 GIME_TEXT()
428
429 _environment->screenTilesWidth = 32;
430 _environment->screenTilesHeight = 28;
431 _environment->screenColors = 16;
432 break;
433
435
436 GIME_TEXT()
438
439 _environment->screenTilesWidth = 40;
440 _environment->screenTilesHeight = 24;
441 _environment->screenColors = 16;
442 break;
443
445
446 GIME_TEXT()
448
449 _environment->screenTilesWidth = 40;
450 _environment->screenTilesHeight = 25;
451 _environment->screenColors = 16;
452 break;
453
455
456 GIME_TEXT()
458
459 _environment->screenTilesWidth = 40;
460 _environment->screenTilesHeight = 28;
461 _environment->screenColors = 16;
462 break;
463
465
466 GIME_TEXT()
468
469 _environment->screenTilesWidth = 64;
470 _environment->screenTilesHeight = 24;
471 _environment->screenColors = 16;
472 break;
473
475
476 GIME_TEXT()
478
479 _environment->screenTilesWidth = 64;
480 _environment->screenTilesHeight = 25;
481 _environment->screenColors = 16;
482 break;
483
485
486 GIME_TEXT()
488
489 _environment->screenTilesWidth = 64;
490 _environment->screenTilesHeight = 28;
491 _environment->screenColors = 16;
492 break;
493
495
496 GIME_TEXT()
498
499 _environment->screenTilesWidth = 80;
500 _environment->screenTilesHeight = 24;
501 _environment->screenColors = 16;
502 break;
503
505
506 GIME_TEXT()
508
509 _environment->screenTilesWidth = 80;
510 _environment->screenTilesHeight = 25;
511 _environment->screenColors = 16;
512 break;
513
515
516 GIME_TEXT()
518
519 _environment->screenTilesWidth = 80;
520 _environment->screenTilesHeight = 28;
521 _environment->screenColors = 16;
522 break;
523
527
529
530 GIME_GRAPH()
532
533 _environment->screenTilesWidth = 16;
534 _environment->screenTilesHeight = 24;
535 _environment->screenColors = 2;
536 break;
537
539
540 GIME_GRAPH()
542
543 _environment->screenTilesWidth = 16;
544 _environment->screenTilesHeight = 25;
545 _environment->screenColors = 2;
546 break;
547
549
550 GIME_GRAPH()
552
553 _environment->screenTilesWidth = 16;
554 _environment->screenTilesHeight = 29;
555 _environment->screenColors = 2;
556 break;
557
559
560 GIME_GRAPH()
562
563 _environment->screenTilesWidth = 8;
564 _environment->screenTilesHeight = 24;
565 _environment->screenColors = 4;
566 break;
567
569
570 GIME_GRAPH()
572
573 _environment->screenTilesWidth = 8;
574 _environment->screenTilesHeight = 25;
575 _environment->screenColors = 4;
576 break;
577
579
580 GIME_GRAPH()
582
583 _environment->screenTilesWidth = 8;
584 _environment->screenTilesHeight = 28;
585 _environment->screenColors = 4;
586 break;
587
589
590 GIME_GRAPH()
592
593 _environment->screenTilesWidth = 20;
594 _environment->screenTilesHeight = 24;
595 _environment->screenColors = 2;
596 break;
597
599
600 GIME_GRAPH()
602
603 _environment->screenTilesWidth = 20;
604 _environment->screenTilesHeight = 25;
605 _environment->screenColors = 2;
606 break;
607
609
610 GIME_GRAPH()
612
613 _environment->screenTilesWidth = 20;
614 _environment->screenTilesHeight = 28;
615 _environment->screenColors = 2;
616 break;
617
619
620 GIME_GRAPH()
622
623 _environment->screenTilesWidth = 10;
624 _environment->screenTilesHeight = 24;
625 _environment->screenColors = 4;
626 break;
627
629
630 GIME_GRAPH()
632
633 _environment->screenTilesWidth = 10;
634 _environment->screenTilesHeight = 25;
635 _environment->screenColors = 4;
636 break;
637
639
640 GIME_GRAPH()
642
643 _environment->screenTilesWidth = 10;
644 _environment->screenTilesHeight = 28;
645 _environment->screenColors = 4;
646 break;
647
649
650 GIME_GRAPH()
652
653 _environment->screenTilesWidth = 32;
654 _environment->screenTilesHeight = 24;
655 _environment->screenColors = 2;
656 break;
657
659
660 GIME_GRAPH()
662
663 _environment->screenTilesWidth = 32;
664 _environment->screenTilesHeight = 25;
665 _environment->screenColors = 2;
666 break;
667
669
670 GIME_GRAPH()
672
673 _environment->screenTilesWidth = 32;
674 _environment->screenTilesHeight = 28;
675 _environment->screenColors = 2;
676 break;
677
679
680 GIME_GRAPH()
682
683 _environment->screenTilesWidth = 16;
684 _environment->screenTilesHeight = 24;
685 _environment->screenColors = 4;
686 break;
687
689
690 GIME_GRAPH()
692
693 _environment->screenTilesWidth = 16;
694 _environment->screenTilesHeight = 25;
695 _environment->screenColors = 4;
696 break;
697
699
700 GIME_GRAPH()
702
703 _environment->screenTilesWidth = 16;
704 _environment->screenTilesHeight = 28;
705 _environment->screenColors = 4;
706 break;
707
709
710 GIME_GRAPH()
712
713 _environment->screenTilesWidth = 8;
714 _environment->screenTilesHeight = 24;
715 _environment->screenColors = 16;
716 break;
717
719
720 GIME_GRAPH()
722
723 _environment->screenTilesWidth = 8;
724 _environment->screenTilesHeight = 25;
725 _environment->screenColors = 16;
726 break;
727
729
730 GIME_GRAPH()
732
733 _environment->screenTilesWidth = 8;
734 _environment->screenTilesHeight = 28;
735 _environment->screenColors = 16;
736 break;
737
739
740 GIME_GRAPH()
742
743 _environment->screenTilesWidth = 40;
744 _environment->screenTilesHeight = 24;
745 _environment->screenColors = 2;
746 break;
747
749
750 GIME_GRAPH()
752
753 _environment->screenTilesWidth = 40;
754 _environment->screenTilesHeight = 25;
755 _environment->screenColors = 2;
756 break;
757
759
760 GIME_GRAPH()
762
763 _environment->screenTilesWidth = 40;
764 _environment->screenTilesHeight = 28;
765 _environment->screenColors = 2;
766 break;
767
769
770 GIME_GRAPH()
772
773 _environment->screenTilesWidth = 20;
774 _environment->screenTilesHeight = 24;
775 _environment->screenColors = 4;
776 break;
777
779
780 GIME_GRAPH()
782
783 _environment->screenTilesWidth = 20;
784 _environment->screenTilesHeight = 25;
785 _environment->screenColors = 4;
786 break;
787
789
790 GIME_GRAPH()
792
793 _environment->screenTilesWidth = 20;
794 _environment->screenTilesHeight = 28;
795 _environment->screenColors = 4;
796 break;
797
799
800 GIME_GRAPH()
802
803 _environment->screenTilesWidth = 10;
804 _environment->screenTilesHeight = 24;
805 _environment->screenColors = 16;
806 break;
807
809
810 GIME_GRAPH()
812
813 _environment->screenTilesWidth = 10;
814 _environment->screenTilesHeight = 25;
815 _environment->screenColors = 16;
816 break;
817
819
820 GIME_GRAPH()
822
823 _environment->screenTilesWidth = 10;
824 _environment->screenTilesHeight = 28;
825 _environment->screenColors = 16;
826 break;
827
829
830 GIME_GRAPH()
832
833 _environment->screenTilesWidth = 64;
834 _environment->screenTilesHeight = 24;
835 _environment->screenColors = 2;
836 break;
837
839
840 GIME_GRAPH()
842
843 _environment->screenTilesWidth = 64;
844 _environment->screenTilesHeight = 25;
845 _environment->screenColors = 2;
846 break;
847
849
850 GIME_GRAPH()
852
853 _environment->screenTilesWidth = 64;
854 _environment->screenTilesHeight = 28;
855 _environment->screenColors = 2;
856 break;
857
859
860 GIME_GRAPH()
862
863 _environment->screenTilesWidth = 32;
864 _environment->screenTilesHeight = 24;
865 _environment->screenColors = 4;
866 break;
867
869
870 GIME_GRAPH()
872
873 _environment->screenTilesWidth = 32;
874 _environment->screenTilesHeight = 25;
875 _environment->screenColors = 4;
876 break;
877
879
880 GIME_GRAPH()
882
883 _environment->screenTilesWidth = 32;
884 _environment->screenTilesHeight = 28;
885 _environment->screenColors = 4;
886 break;
887
889
890 GIME_GRAPH()
892
893 _environment->screenTilesWidth = 16;
894 _environment->screenTilesHeight = 24;
895 _environment->screenColors = 16;
896 break;
897
899
900 GIME_GRAPH()
902
903 _environment->screenTilesWidth = 16;
904 _environment->screenTilesHeight = 25;
905 _environment->screenColors = 16;
906 break;
907
909
910 GIME_GRAPH()
912
913 _environment->screenTilesWidth = 16;
914 _environment->screenTilesHeight = 28;
915 _environment->screenColors = 16;
916 break;
917
919
920 GIME_GRAPH()
922
923 _environment->screenTilesWidth = 80;
924 _environment->screenTilesHeight = 24;
925 _environment->screenColors = 2;
926 break;
927
929
930 GIME_GRAPH()
932
933 _environment->screenTilesWidth = 80;
934 _environment->screenTilesHeight = 25;
935 _environment->screenColors = 2;
936 break;
937
939
940 GIME_GRAPH()
942
943 _environment->screenTilesWidth = 80;
944 _environment->screenTilesHeight = 28;
945 _environment->screenColors = 2;
946 break;
947
949
950 GIME_GRAPH()
952
953 _environment->screenTilesWidth = 40;
954 _environment->screenTilesHeight = 24;
955 _environment->screenColors = 4;
956 break;
957
959
960 GIME_GRAPH()
962
963 _environment->screenTilesWidth = 40;
964 _environment->screenTilesHeight = 25;
965 _environment->screenColors = 4;
966 break;
967
969
970 GIME_GRAPH()
972
973 _environment->screenTilesWidth = 40;
974 _environment->screenTilesHeight = 28;
975 _environment->screenColors = 4;
976 break;
977
979
980 GIME_GRAPH()
982
983 _environment->screenTilesWidth = 20;
984 _environment->screenTilesHeight = 24;
985 _environment->screenColors = 16;
986 break;
987
989
990 GIME_GRAPH()
992
993 _environment->screenTilesWidth = 20;
994 _environment->screenTilesHeight = 25;
995 _environment->screenColors = 16;
996 break;
997
999
1000 GIME_GRAPH()
1002
1003 _environment->screenTilesWidth = 20;
1004 _environment->screenTilesHeight = 28;
1005 _environment->screenColors = 16;
1006 break;
1007
1009
1010 GIME_GRAPH()
1012
1013 _environment->screenTilesWidth = 64;
1014 _environment->screenTilesHeight = 24;
1015 _environment->screenColors = 4;
1016 break;
1017
1019
1020 GIME_GRAPH()
1022
1023 _environment->screenTilesWidth = 64;
1024 _environment->screenTilesHeight = 25;
1025 _environment->screenColors = 4;
1026 break;
1027
1029
1030 GIME_GRAPH()
1032
1033 _environment->screenTilesWidth = 64;
1034 _environment->screenTilesHeight = 28;
1035 _environment->screenColors = 4;
1036 break;
1037
1039
1040 GIME_GRAPH()
1042
1043 _environment->screenTilesWidth = 32;
1044 _environment->screenTilesHeight = 24;
1045 _environment->screenColors = 16;
1046 break;
1047
1049
1050 GIME_GRAPH()
1052
1053 _environment->screenTilesWidth = 32;
1054 _environment->screenTilesHeight = 25;
1055 _environment->screenColors = 16;
1056 break;
1057
1059
1060 GIME_GRAPH()
1062
1063 _environment->screenTilesWidth = 32;
1064 _environment->screenTilesHeight = 28;
1065 _environment->screenColors = 16;
1066 break;
1067
1069
1070 GIME_GRAPH()
1072
1073 _environment->screenTilesWidth = 80;
1074 _environment->screenTilesHeight = 24;
1075 _environment->screenColors = 4;
1076 break;
1077
1079
1080 GIME_GRAPH()
1082
1083 _environment->screenTilesWidth = 80;
1084 _environment->screenTilesHeight = 25;
1085 _environment->screenColors = 4;
1086 break;
1087
1089
1090 GIME_GRAPH()
1092
1093 _environment->screenTilesWidth = 80;
1094 _environment->screenTilesHeight = 28;
1095 _environment->screenColors = 4;
1096 break;
1097
1099
1100 GIME_GRAPH()
1102
1103 _environment->screenTilesWidth = 40;
1104 _environment->screenTilesHeight = 24;
1105 _environment->screenColors = 16;
1106 break;
1107
1109
1110 GIME_GRAPH()
1112
1113 _environment->screenTilesWidth = 40;
1114 _environment->screenTilesHeight = 25;
1115 _environment->screenColors = 16;
1116 break;
1117
1119
1120 GIME_GRAPH()
1122
1123 _environment->screenTilesWidth = 40;
1124 _environment->screenTilesHeight = 28;
1125 _environment->screenColors = 16;
1126 break;
1127
1128 default:
1129 CRITICAL_SCREEN_UNSUPPORTED( _screen_mode->id );
1130 }
1131
1132 _environment->screenWidth = _environment->screenTilesWidth * _environment->fontWidth;
1133 _environment->screenHeight = _environment->screenTilesHeight * _environment->fontHeight;
1134 _environment->currentRgbConverterFunction = rgbConverterFunction;
1135
1136 int currentFrameSize;
1137
1138 if ( _screen_mode->bitmap ) {
1139 switch( _environment->screenColors ) {
1140 case 2:
1141 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight );
1142 break;
1143 case 4:
1144 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight ) * 2;
1145 break;
1146 case 16:
1147 default:
1148 currentFrameSize = ( ( _environment->screenWidth / 8 ) * _environment->screenHeight ) * 4;
1149 break;
1150 }
1151 } else {
1152 currentFrameSize = _environment->screenTilesWidth * _environment->screenTilesHeight * 2;
1153 }
1154
1155 if ( currentFrameSize <= 0x2000 ) {
1156 cpu_store_8bit( _environment, "GIMEMMUSTART", 3 );
1157 cpu_store_8bit( _environment, "GIMEMMUCOUNT", 1 );
1158 cpu_store_16bit( _environment, "BITMAPADDRESS", 0xc000 );
1159 cpu_store_16bit( _environment, "TEXTADDRESS", 0xc000 );
1160 } else if ( currentFrameSize <= 0x4000 ) {
1161 cpu_store_8bit( _environment, "GIMEMMUSTART", 2 );
1162 cpu_store_8bit( _environment, "GIMEMMUCOUNT", 2 );
1163 cpu_store_16bit( _environment, "BITMAPADDRESS", 0xa000 );
1164 cpu_store_16bit( _environment, "TEXTADDRESS", 0xa000 );
1165 } else if ( currentFrameSize <= 0x6000 ) {
1166 cpu_store_8bit( _environment, "GIMEMMUSTART", 1 );
1167 cpu_store_8bit( _environment, "GIMEMMUCOUNT", 3 );
1168 cpu_store_16bit( _environment, "BITMAPADDRESS", 0x8000 );
1169 cpu_store_16bit( _environment, "TEXTADDRESS", 0x8000 );
1170 } else if ( currentFrameSize <= 0x8000 ) {
1171 cpu_store_8bit( _environment, "GIMEMMUSTART", 0 );
1172 cpu_store_8bit( _environment, "GIMEMMUCOUNT", 4 );
1173 cpu_store_16bit( _environment, "BITMAPADDRESS", 0x6000 );
1174 cpu_store_16bit( _environment, "TEXTADDRESS", 0x6000 );
1175 } else {
1176 cpu_store_8bit( _environment, "GIMEMMUSTART", 0 );
1177 cpu_store_8bit( _environment, "GIMEMMUCOUNT", 5 );
1178 cpu_store_16bit( _environment, "BITMAPADDRESS", 0x6000 );
1179 cpu_store_16bit( _environment, "TEXTADDRESS", 0x6000 );
1180 }
1181
1182 _environment->consoleTilesWidth = _environment->screenTilesWidth;
1183 _environment->consoleTilesHeight = _environment->screenTilesHeight;
1184
1185 cpu_store_16bit( _environment, "ORIGINX", 0 );
1186 cpu_store_16bit( _environment, "ORIGINY", 0 );
1187 cpu_store_16bit( _environment, "CURRENTWIDTH", _environment->screenWidth );
1188 cpu_store_16bit( _environment, "CURRENTHEIGHT", _environment->screenHeight );
1189 cpu_move_16bit( _environment, "CURRENTWIDTH", "RESOLUTIONX" );
1190 cpu_move_16bit( _environment, "CURRENTHEIGHT", "RESOLUTIONY" );
1191 cpu_store_8bit( _environment, "CURRENTTILES", _environment->screenTiles );
1192 cpu_store_8bit( _environment, "CURRENTTILESWIDTH", _environment->screenTilesWidth );
1193 cpu_store_8bit( _environment, "CURRENTTILESHEIGHT", _environment->screenTilesHeight );
1194
1195 cpu_store_16bit( _environment, "CLIPX1", 0 );
1196 cpu_store_16bit( _environment, "CLIPX2", _environment->screenWidth-1 );
1197 cpu_store_16bit( _environment, "CLIPY1", 0 );
1198 cpu_store_16bit( _environment, "CLIPY2", _environment->screenHeight-1 );
1199
1200 console_init( _environment );
1201
1202 cpu_store_8bit( _environment, "PALETTELIMIT", _environment->screenColors );
1203 cpu_store_16bit( _environment, "CURRENTFRAMESIZE", currentFrameSize );
1204 switch( _environment->screenColors ) {
1205 case 2:
1206 cpu_store_8bit( _environment, "CURRENTSL", _environment->screenTilesWidth );
1207 break;
1208 case 4:
1209 cpu_store_8bit( _environment, "CURRENTSL", _environment->screenTilesWidth * 2 );
1210 break;
1211 case 16:
1212 cpu_store_8bit( _environment, "CURRENTSL", _environment->screenTilesWidth * 4 );
1213 break;
1214 }
1215
1216 // cpu_call( _environment, "GIMERESETPALETTE" );
1217 cpu_call( _environment, "GIMERAM" );
1218
1219 if (_environment->vestigialConfig.clsImplicit ) {
1220 gime_cls( _environment );
1221 }
1222
1223}
1224
1225void gime_bitmap_enable( Environment * _environment, int _width, int _height, int _colors ) {
1226
1227 ScreenMode * mode = find_screen_mode_by_suggestion( _environment, 1, _width, _height, _colors, 8, 8 );
1228
1229 if ( mode ) {
1230 gime_screen_mode_enable( _environment, mode );
1231
1232 cpu_store_8bit( _environment, "CURRENTMODE", mode->id );
1233 cpu_store_8bit( _environment, "CURRENTTILEMODE", 0 );
1234
1235 _environment->currentMode = mode->id;
1236 _environment->currentTileMode = 0;
1237 } else {
1238 WARNING_SCREEN_MODE( -1 );
1239 }
1240
1241}
1242
1243void gime_bitmap_disable( Environment * _environment ) {
1244
1245}
1246
1247void gime_tilemap_enable( Environment * _environment, int _width, int _height, int _colors, int _tile_width, int _tile_height ) {
1248
1249 ScreenMode * mode = find_screen_mode_by_suggestion( _environment, 0, _width, _height, _colors, _tile_width, _tile_height );
1250
1251 if ( mode ) {
1252 gime_screen_mode_enable( _environment, mode );
1253
1254 _environment->currentMode = mode->id;
1255 _environment->currentTileMode = 1;
1256
1257 cpu_store_8bit( _environment, "CURRENTMODE", mode->id );
1258 cpu_store_8bit( _environment, "CURRENTTILEMODE", 1 );
1259
1260 } else {
1261 WARNING_SCREEN_MODE( -1 );
1262 }
1263
1264}
1265
1266void gime_bitmap_at( Environment * _environment, char * _address ) {
1267
1268}
1269
1270void gime_colormap_at( Environment * _environment, char * _address ) {
1271
1272}
1273
1274void gime_textmap_at( Environment * _environment, char * _address ) {
1275
1276}
1277
1278void gime_pset_int( Environment * _environment, int _x, int _y, int *_c ) {
1279
1280 deploy_preferred( gimevars, src_hw_gime_vars_asm );
1281 deploy_preferred( plot, src_hw_gime_plot_asm );
1282
1283 outline1("LDX %4.4x", (_x & 0xffff ) );
1284 outline0("STX <PLOTX");
1285 outline1("LDD %4.4x", ( _y & 0xffff ) );
1286 outline0("STD <PLOTY");
1287 if ( _c ) {
1288 outline1("LDB #$%2.2x", (unsigned char)( *_c & 0xff ) );
1289 } else {
1290 Variable * c = variable_retrieve( _environment, "PEN" );
1291 outline1("LDB %s", c->realName );
1292 }
1293 outline0("STB <PLOTCPE");
1294 outline0("LDA #1");
1295 outline0("STA PLOTM");
1296 outline0("JSR PLOT");
1297
1298
1299}
1300
1301void gime_pset_vars( Environment * _environment, char *_x, char *_y, char *_c ) {
1302
1303 Variable * x = variable_retrieve_or_define( _environment, _x, VT_POSITION, 0 );
1304 Variable * y = variable_retrieve_or_define( _environment, _y, VT_POSITION, 0 );
1305 Variable * c;
1306
1307 if ( _c ) {
1308 c = variable_retrieve_or_define( _environment, _c, VT_COLOR, 0 );
1309 } else {
1310 c = variable_retrieve( _environment, "PEN" );
1311 }
1312
1313 deploy_preferred( gimevars, src_hw_gime_vars_asm );
1314 deploy_preferred( plot, src_hw_gime_plot_asm );
1315
1316 outline1("LDX %s", x->realName );
1317 outline0("STX <PLOTX");
1318 outline1("LDD %s", y->realName );
1319 outline0("STD <PLOTY");
1320 outline1("LDB %s", c->realName );
1321 outline0("STB <PLOTCPE");
1322 outline0("LDA #1");
1323 outline0("STA PLOTM");
1324 outline0("JSR PLOT");
1325
1326}
1327
1328void gime_pget_color_vars( Environment * _environment, char *_x, char *_y, char * _result ) {
1329
1330 Variable * x = variable_retrieve_or_define( _environment, _x, VT_POSITION, 0 );
1331 Variable * y = variable_retrieve_or_define( _environment, _y, VT_POSITION, 0 );
1332 Variable * result = variable_retrieve_or_define( _environment, _result, VT_BYTE, 0 );
1333
1334 deploy_preferred( gimevars, src_hw_gime_vars_asm );
1335 deploy_preferred( plot, src_hw_gime_plot_asm );
1336
1337 outline1("LDD %s", x->realName );
1338 outline0("STD <PLOTX");
1339 outline1("LDD %s", y->realName );
1340 outline0("STD <PLOTY");
1341 outline0("LDA #3");
1342 outline0("STA PLOTM");
1343 outline0("JSR PLOT");
1344 outline0("LDA PLOTM");
1345 outline1("STA %s", result->realName );
1346
1347}
1348
1349void gime_screen_on( Environment * _environment ) {
1350
1351}
1352
1353void gime_screen_off( Environment * _environment ) {
1354
1355}
1356
1357void gime_screen_rows( Environment * _environment, char * _rows ) {
1358
1359}
1360
1361void gime_screen_columns( Environment * _environment, char * _columns ) {
1362
1363}
1364
1365void gime_sprite_data_from( Environment * _environment, char * _sprite, char * _address ) {
1366
1367}
1368
1369void gime_sprite_data_set( Environment * _environment, char * _sprite, char * _address ) {
1370
1371}
1372
1373void gime_sprite_enable( Environment * _environment, char * _sprite ) {
1374
1375}
1376
1377void gime_sprite_disable( Environment * _environment, char * _sprite ) {
1378
1379}
1380
1381void gime_sprite_at( Environment * _environment, char * _sprite, char * _x, char * _y ) {
1382
1383}
1384
1385void gime_sprite_expand_vertical( Environment * _environment, char * _sprite ) {
1386
1387}
1388
1389void gime_sprite_expand_horizontal( Environment * _environment, char * _sprite ) {
1390
1391}
1392
1393void gime_sprite_compress_vertical( Environment * _environment, char * _sprite ) {
1394
1395}
1396
1397void gime_sprite_compress_horizontal( Environment * _environment, char * _sprite ) {
1398
1399}
1400
1401void gime_sprite_multicolor( Environment * _environment, char * _sprite ) {
1402
1403}
1404
1405void gime_sprite_monocolor( Environment * _environment, char * _sprite ) {
1406
1407}
1408
1409void gime_sprite_color( Environment * _environment, char * _sprite, char * _color ) {
1410
1411}
1412
1413void gime_sprite_priority( Environment * _environment, char * _sprite, char * _priority ) {
1414
1415}
1416
1417void gime_tiles_at( Environment * _environment, char * _address ) {
1418
1419}
1420
1421void gime_vertical_scroll( Environment * _environment, char * _displacement ) {
1422
1423}
1424
1425void gime_horizontal_scroll( Environment * _environment, char * _displacement ) {
1426
1427 outline1( "LDA %s", _displacement );
1428 outline0( "STA $FF9F" );
1429
1430}
1431
1432void gime_get_width( Environment * _environment, char *_result ) {
1433
1434 outline0("LDX CURRENTWIDTH" );
1435 outline1("STX %s", _result );
1436
1437}
1438
1439void gime_tiles_get( Environment * _environment, char *_result ) {
1440
1441 outline0("LDA CURRENTTILES" );
1442 outline1("STA %s", _result );
1443
1444}
1445
1446void gime_get_height( Environment * _environment, char *_result ) {
1447
1448 outline0("LDX CURRENTHEIGHT" );
1449 outline1("STX %s", _result );
1450
1451}
1452
1453void gime_cls( Environment * _environment ) {
1454
1455 deploy_preferred( gimevars, src_hw_gime_vars_asm);
1456
1457 if ( _environment->currentTileMode ) {
1458 deploy_preferred( clsText, src_hw_gime_cls_text_asm );
1459 outline0("JSR CLST");
1460 } else {
1461 deploy_preferred( clsGraphic, src_hw_gime_cls_graphic_asm );
1462 outline0("JSR CLSG");
1463 }
1464
1465}
1466
1467void gime_cls_box( Environment * _environment, char * _x1, char * _y1, char * _w, char * _h ) {
1468
1469 deploy_preferred( gimevars, src_hw_gime_vars_asm);
1470
1471 if ( _environment->currentTileMode ) {
1472
1473 } else {
1474 deploy( clsBox, src_hw_gime_cls_box_asm );
1475 outline1("LDD %s", _x1 );
1476 outline0("STD <IMAGEX");
1477 outline1("LDD %s", _y1 );
1478 outline0("STD <IMAGEY" );
1479 outline1("LDD %s", _w );
1480 outline0("STD <IMAGEW" );
1481 outline1("LDA %s", _h );
1482 outline0("STA <IMAGEH" );
1483 outline0("JSR CLSBOX");
1484 }
1485
1486}
1487
1488void gime_scroll_text( Environment * _environment, int _direction, int _overlap ) {
1489
1490 deploy_preferred( vScrollText, src_hw_gime_vscroll_text_asm );
1491
1492 outline1("LDA #$%2.2x", ( _direction & 0xff ) );
1493 outline0("STA <DIRECTION" );
1494 outline1("LDA #$%2.2x", ( _overlap & 0xff ) );
1495 outline0("STA <PORT" );
1496
1497 outline0("JSR VSCROLLT");
1498
1499}
1500
1501void gime_text( Environment * _environment, char * _text, char * _text_size, int _raw ) {
1502
1503 deploy_preferred( gimevars, src_hw_gime_vars_asm);
1504
1505 deploy_preferred( textEncodedAt, src_hw_gime_text_at_asm );
1506
1507 outline1("LDY %s", _text);
1508 outline0("STY <TEXTPTR" );
1509 outline1("LDA %s", _text_size);
1510 outline0("STA <TEXTSIZE" );
1511
1512 if ( _raw ) {
1513 if ( _environment->currentMode < 0x10 ) {
1514 deploy_preferred( clsText, src_hw_gime_cls_text_asm );
1515 deploy_preferred( vScrollText, src_hw_gime_vscroll_text_asm );
1516 deploy_preferred( textEncodedAtTextRaw, src_hw_gime_text_at_text_raw_asm );
1517 outline0("JSR TEXTATTILEMODERAW");
1518 } else {
1519 deploy_preferred( clsGraphic, src_hw_gime_cls_graphic_asm );
1520 deploy_preferred( textEncodedAtGraphicRaw, src_hw_gime_text_at_graphic_raw_asm );
1521 outline0("JSR TEXTATBITMAPMODERAW");
1522 }
1523 } else {
1524 if ( _environment->currentMode < 0x10 ) {
1525 deploy_preferred( clsText, src_hw_gime_cls_text_asm );
1526 deploy_preferred( vScrollText, src_hw_gime_vscroll_text_asm );
1527 deploy_preferred( textEncodedAtText, src_hw_gime_text_at_text_asm );
1528 outline0("JSR TEXTATTILEMODE");
1529 } else {
1530 deploy_preferred( clsGraphic, src_hw_gime_cls_graphic_asm );
1531 deploy_preferred( textEncodedAtGraphic, src_hw_gime_text_at_graphic_asm );
1532 outline0("JSR TEXTATBITMAPMODE");
1533 }
1534 }
1535
1536}
1537
1538void gime_initialization( Environment * _environment ) {
1539
1540 deploy_preferred( gimevars, src_hw_gime_vars_asm );
1541 deploy_preferred( gimestartup, src_hw_gime_startup_asm );
1542
1543 variable_import( _environment, "CURRENTMODE", VT_BYTE, 0 );
1544 variable_global( _environment, "CURRENTMODE" );
1545 variable_import( _environment, "CURRENTTILEMODE", VT_BYTE, 1 );
1546 variable_global( _environment, "CURRENTTILEMODE" );
1547
1548 variable_import( _environment, "CURRENTWIDTH", VT_POSITION, 256 );
1549 variable_global( _environment, "CURRENTWIDTH" );
1550 variable_import( _environment, "CURRENTHEIGHT", VT_POSITION, 128 );
1551 variable_global( _environment, "CURRENTHEIGHT" );
1552 variable_import( _environment, "CURRENTTILESWIDTH", VT_SBYTE, 32 );
1553 variable_global( _environment, "CURRENTTILESWIDTH" );
1554 variable_import( _environment, "CURRENTTILESHEIGHT", VT_SBYTE, 16 );
1555 variable_global( _environment, "CURRENTTILESHEIGHT" );
1556 variable_import( _environment, "CURRENTTILES", VT_BYTE, 255 );
1557 variable_global( _environment, "CURRENTTILES" );
1558 variable_import( _environment, "FONTWIDTH", VT_BYTE, 8 );
1559 variable_global( _environment, "FONTWIDTH" );
1560 variable_import( _environment, "FONTHEIGHT", VT_BYTE, 8 );
1561 variable_global( _environment, "FONTHEIGHT" );
1562 variable_import( _environment, "PALETTELIMIT", VT_BYTE, 0 );
1563 variable_global( _environment, "PALETTELIMIT" );
1564 variable_import( _environment, "GIMEMMUSTART", VT_BYTE, 2 );
1565 variable_global( _environment, "GIMEMMUSTART" );
1566 variable_import( _environment, "GIMEMMUCOUNT", VT_BYTE, 0 );
1567 variable_global( _environment, "GIMEMMUCOUNT" );
1568
1569 variable_import( _environment, "GIMESCREENCURRENT", VT_BYTE, 8 );
1570 variable_global( _environment, "GIMESCREENCURRENT" );
1571
1572 SCREEN_MODE_DEFINE( TILEMAP_MODE_40X25, 0, 40, 25, 16, 8, 8, "Alphanumeric 40 columns x 25 rows");
1573 SCREEN_MODE_DEFINE( TILEMAP_MODE_32X24, 0, 32, 24, 16, 8, 8, "Alphanumeric 32 columns x 24 rows");
1574 SCREEN_MODE_DEFINE( TILEMAP_MODE_32X25, 0, 32, 25, 16, 8, 8, "Alphanumeric 32 columns x 25 rows");
1575 SCREEN_MODE_DEFINE( TILEMAP_MODE_32X28, 0, 32, 28, 16, 8, 8, "Alphanumeric 32 columns x 28 rows");
1576 SCREEN_MODE_DEFINE( TILEMAP_MODE_40X24, 0, 40, 24, 16, 8, 8, "Alphanumeric 40 columns x 24 rows");
1577 SCREEN_MODE_DEFINE( TILEMAP_MODE_40X28, 0, 40, 28, 16, 8, 8, "Alphanumeric 40 columns x 28 rows");
1578 SCREEN_MODE_DEFINE( TILEMAP_MODE_64X24, 0, 64, 24, 16, 8, 8, "Alphanumeric 64 columns x 24 rows");
1579 SCREEN_MODE_DEFINE( TILEMAP_MODE_64X25, 0, 64, 25, 16, 8, 8, "Alphanumeric 64 columns x 25 rows");
1580 SCREEN_MODE_DEFINE( TILEMAP_MODE_64X28, 0, 64, 28, 16, 8, 8, "Alphanumeric 64 columns x 28 rows");
1581 SCREEN_MODE_DEFINE( TILEMAP_MODE_80X24, 0, 80, 24, 16, 8, 8, "Alphanumeric 80 columns x 24 rows");
1582 SCREEN_MODE_DEFINE( TILEMAP_MODE_80X25, 0, 80, 25, 16, 8, 8, "Alphanumeric 80 columns x 25 rows");
1583 SCREEN_MODE_DEFINE( TILEMAP_MODE_80X28, 0, 80, 28, 16, 8, 8, "Alphanumeric 80 columns x 28 rows");
1584
1585 SCREEN_MODE_DEFINE( BITMAP_MODE_320x200x16, 1, 320, 200, 16, 8, 8, "Graphic 320x200x16");
1586 SCREEN_MODE_DEFINE( BITMAP_MODE_320x200x4, 1, 320, 200, 4, 8, 8, "Graphic 320x200x4");
1587 SCREEN_MODE_DEFINE( BITMAP_MODE_320x200x2, 1, 320, 200, 2, 8, 8, "Graphic 320x200x2");
1588
1589 SCREEN_MODE_DEFINE( BITMAP_MODE_640x225x4, 1, 640, 225, 4, 8, 8, "Graphic 640x225x4");
1590 SCREEN_MODE_DEFINE( BITMAP_MODE_640x225x2, 1, 640, 225, 2, 8, 8, "Graphic 640x225x2");
1591
1592 SCREEN_MODE_DEFINE( BITMAP_MODE_640x200x4, 1, 640, 200, 4, 8, 8, "Graphic 640x200x4");
1593 SCREEN_MODE_DEFINE( BITMAP_MODE_640x200x2, 1, 640, 200, 2, 8, 8, "Graphic 640x200x2");
1594
1595 SCREEN_MODE_DEFINE( BITMAP_MODE_640x192x4, 1, 640, 192, 4, 8, 8, "Graphic 640x192x4");
1596 SCREEN_MODE_DEFINE( BITMAP_MODE_640x192x2, 1, 640, 192, 2, 8, 8, "Graphic 640x192x2");
1597
1598 SCREEN_MODE_DEFINE( BITMAP_MODE_512x225x2, 1, 512, 225, 2, 8, 8, "Graphic 512x225x2");
1599 SCREEN_MODE_DEFINE( BITMAP_MODE_512x225x4, 1, 512, 225, 4, 8, 8, "Graphic 512x225x4");
1600
1601 SCREEN_MODE_DEFINE( BITMAP_MODE_512x200x2, 1, 512, 200, 2, 8, 8, "Graphic 512x200x2");
1602 SCREEN_MODE_DEFINE( BITMAP_MODE_512x200x4, 1, 512, 200, 4, 8, 8, "Graphic 512x200x4");
1603
1604 SCREEN_MODE_DEFINE( BITMAP_MODE_512x192x2, 1, 512, 192, 2, 8, 8, "Graphic 512x192x2");
1605 SCREEN_MODE_DEFINE( BITMAP_MODE_512x192x4, 1, 512, 192, 4, 8, 8, "Graphic 512x192x4");
1606
1607 SCREEN_MODE_DEFINE( BITMAP_MODE_320x225x16, 1, 320, 225, 16, 8, 8, "Graphic 320x225x16");
1608 SCREEN_MODE_DEFINE( BITMAP_MODE_320x225x4, 1, 320, 225, 4, 8, 8, "Graphic 320x225x4");
1609 SCREEN_MODE_DEFINE( BITMAP_MODE_320x225x2, 1, 320, 225, 2, 8, 8, "Graphic 320x225x2");
1610
1611 SCREEN_MODE_DEFINE( BITMAP_MODE_320x192x16, 1, 320, 192, 16, 8, 8, "Graphic 320x192x16");
1612 SCREEN_MODE_DEFINE( BITMAP_MODE_320x192x4, 1, 320, 192, 4, 8, 8, "Graphic 320x192x4");
1613 SCREEN_MODE_DEFINE( BITMAP_MODE_320x192x2, 1, 320, 192, 2, 8, 8, "Graphic 320x192x2");
1614
1615 SCREEN_MODE_DEFINE( BITMAP_MODE_256x200x16, 1, 256, 200, 16, 8, 8, "Graphic 256x200x16");
1616 SCREEN_MODE_DEFINE( BITMAP_MODE_256x200x4, 1, 256, 200, 4, 8, 8, "Graphic 256x200x4");
1617 SCREEN_MODE_DEFINE( BITMAP_MODE_256x200x2, 1, 256, 200, 2, 8, 8, "Graphic 256x200x2");
1618
1619 SCREEN_MODE_DEFINE( BITMAP_MODE_256x192x16, 1, 256, 192, 16, 8, 8, "Graphic 256x192x16");
1620 SCREEN_MODE_DEFINE( BITMAP_MODE_256x192x4, 1, 256, 192, 4, 8, 8, "Graphic 256x192x4");
1621 SCREEN_MODE_DEFINE( BITMAP_MODE_256x192x2, 1, 256, 192, 2, 8, 8, "Graphic 256x192x2");
1622
1623 SCREEN_MODE_DEFINE( BITMAP_MODE_256x225x16, 1, 256, 225, 16, 8, 8, "Graphic 256x225x16");
1624 SCREEN_MODE_DEFINE( BITMAP_MODE_256x225x4, 1, 256, 225, 4, 8, 8, "Graphic 256x225x4");
1625 SCREEN_MODE_DEFINE( BITMAP_MODE_256x225x2, 1, 256, 225, 2, 8, 8, "Graphic 256x225x2");
1626
1627 SCREEN_MODE_DEFINE( BITMAP_MODE_160x200x16, 1, 160, 200, 16, 8, 8, "Graphic 160x200x16");
1628 SCREEN_MODE_DEFINE( BITMAP_MODE_160x200x4, 1, 160, 200, 4, 8, 8, "Graphic 160x200x4");
1629 SCREEN_MODE_DEFINE( BITMAP_MODE_160x200x2, 1, 160, 200, 2, 8, 8, "Graphic 160x200x2");
1630
1631 SCREEN_MODE_DEFINE( BITMAP_MODE_160x192x16, 1, 160, 192, 16, 8, 8, "Graphic 160x192x16");
1632 SCREEN_MODE_DEFINE( BITMAP_MODE_160x192x4, 1, 160, 192, 4, 8, 8, "Graphic 160x192x4");
1633 SCREEN_MODE_DEFINE( BITMAP_MODE_160x192x2, 1, 160, 192, 2, 8, 8, "Graphic 160x192x2");
1634
1635 SCREEN_MODE_DEFINE( BITMAP_MODE_160x225x16, 1, 160, 225, 16, 8, 8, "Graphic 160x225x16");
1636 SCREEN_MODE_DEFINE( BITMAP_MODE_160x225x4, 1, 160, 225, 4, 8, 8, "Graphic 160x225x4");
1637 SCREEN_MODE_DEFINE( BITMAP_MODE_160x225x2, 1, 160, 225, 2, 8, 8, "Graphic 160x225x2");
1638
1639 SCREEN_MODE_DEFINE( BITMAP_MODE_128x192x16, 1, 128, 192, 16, 8, 8, "Graphic 128x192x16");
1640 SCREEN_MODE_DEFINE( BITMAP_MODE_128x192x4, 1, 128, 192, 4, 8, 8, "Graphic 128x192x4");
1641 SCREEN_MODE_DEFINE( BITMAP_MODE_128x192x2, 1, 128, 192, 2, 8, 8, "Graphic 128x192x2");
1642
1643 SCREEN_MODE_DEFINE( BITMAP_MODE_128x200x16, 1, 128, 200, 16, 8, 8, "Graphic 128x200x16");
1644 SCREEN_MODE_DEFINE( BITMAP_MODE_128x200x4, 1, 128, 200, 4, 8, 8, "Graphic 128x200x4");
1645 SCREEN_MODE_DEFINE( BITMAP_MODE_128x200x2, 1, 128, 200, 2, 8, 8, "Graphic 128x200x2");
1646
1647 SCREEN_MODE_DEFINE( BITMAP_MODE_128x225x16, 1, 128, 225, 16, 8, 8, "Graphic 128x225x16");
1648 SCREEN_MODE_DEFINE( BITMAP_MODE_128x225x4, 1, 128, 225, 4, 8, 8, "Graphic 128x225x4");
1649 SCREEN_MODE_DEFINE( BITMAP_MODE_128x225x2, 1, 128, 225, 2, 8, 8, "Graphic 128x225x2");
1650
1651 SCREEN_MODE_DEFINE( BITMAP_MODE_64x225x16, 1, 64, 225, 16, 8, 8, "Graphic 64x225x16");
1652 SCREEN_MODE_DEFINE( BITMAP_MODE_64x225x4, 1, 64, 225, 4, 8, 8, "Graphic 64x225x4");
1653
1654 SCREEN_MODE_DEFINE( BITMAP_MODE_64x200x16, 1, 64, 200, 16, 8, 8, "Graphic 64x200x16");
1655 SCREEN_MODE_DEFINE( BITMAP_MODE_64x200x4, 1, 64, 200, 4, 8, 8, "Graphic 64x200x4");
1656
1657 SCREEN_MODE_DEFINE( BITMAP_MODE_64x192x16, 1, 64, 192, 16, 8, 8, "Graphic 64x192x16");
1658 SCREEN_MODE_DEFINE( BITMAP_MODE_64x192x4, 1, 64, 192, 4, 8, 8, "Graphic 64x192x4");
1659
1660 SCREEN_MODE_DEFINE( BITMAP_MODE_80x225x16, 1, 80, 225, 16, 8, 8, "Graphic 80x225x16");
1661 SCREEN_MODE_DEFINE( BITMAP_MODE_80x225x4, 1, 80, 225, 4, 8, 8, "Graphic 80x225x4");
1662
1663 SCREEN_MODE_DEFINE( BITMAP_MODE_80x200x16, 1, 80, 200, 16, 8, 8, "Graphic 80x200x16");
1664 SCREEN_MODE_DEFINE( BITMAP_MODE_80x200x4, 1, 80, 200, 4, 8, 8, "Graphic 80x200x4");
1665
1666 SCREEN_MODE_DEFINE( BITMAP_MODE_80x192x16, 1, 80, 192, 16, 8, 8, "Graphic 80x192x16");
1667 SCREEN_MODE_DEFINE( BITMAP_MODE_80x192x4, 1, 80, 192, 4, 8, 8, "Graphic 80x192x4");
1668
1669 outline0("JSR GIMESTARTUP");
1670
1671 cpu_store_8bit( _environment, "_PEN", _environment->defaultPenColor );
1672 cpu_store_8bit( _environment, "_PAPER", _environment->defaultPaperColor );
1673
1674 variable_import( _environment, "XGR", VT_POSITION, 0 );
1675 variable_global( _environment, "XGR" );
1676 variable_import( _environment, "YGR", VT_POSITION, 0 );
1677 variable_global( _environment, "YGR" );
1678 variable_import( _environment, "LINE", VT_WORD, (unsigned short)(0xffff) );
1679 variable_global( _environment, "LINE" );
1680 variable_import( _environment, "TABCOUNT", VT_BYTE, 4 );
1681 variable_global( _environment, "TABCOUNT" );
1682
1683 variable_import( _environment, "CLIPX1", VT_POSITION, 0 );
1684 variable_global( _environment, "CLIPX1" );
1685 variable_import( _environment, "CLIPX2", VT_POSITION, 255 );
1686 variable_global( _environment, "CLIPX2" );
1687 variable_import( _environment, "CLIPY1", VT_POSITION, 0 );
1688 variable_global( _environment, "CLIPY1" );
1689 variable_import( _environment, "CLIPY2", VT_POSITION, 127 );
1690 variable_global( _environment, "CLIPY2" );
1691
1692 variable_import( _environment, "ORIGINX", VT_POSITION, 0 );
1693 variable_global( _environment, "ORIGINX" );
1694 variable_import( _environment, "ORIGINY", VT_POSITION, 0 );
1695 variable_global( _environment, "ORIGINY" );
1696 variable_import( _environment, "RESOLUTIONX", VT_POSITION, 0 );
1697 variable_global( _environment, "RESOLUTIONX" );
1698 variable_import( _environment, "RESOLUTIONY", VT_POSITION, 0 );
1699 variable_global( _environment, "RESOLUTIONY" );
1700
1701 _environment->fontWidth = 8;
1702 _environment->fontHeight = 8;
1703 _environment->screenTilesWidth = 40;
1704 _environment->screenTilesHeight = 25;
1705 _environment->consoleTilesWidth = 40;
1706 _environment->consoleTilesHeight = 25;
1707 _environment->screenTiles = 128;
1708 _environment->screenWidth = _environment->screenTilesWidth*_environment->fontWidth;
1709 _environment->screenHeight = _environment->screenTilesHeight*_environment->fontHeight;
1710 _environment->screenShades = 16;
1711 _environment->screenColors = 16;
1712 _environment->currentTileMode = 1;
1713
1714 _environment->fontConfig.schema = FONT_SCHEMA_ASCII;
1715
1716 gime_tilemap_enable( _environment, 40, 25, 16, 8, 8 );
1717
1718 font_descriptors_init( _environment, 0 );
1719
1720 console_init( _environment );
1721
1722}
1723
1724void gime_finalization( Environment * _environment ) {
1725
1726 int i;
1727
1728 outhead0("PALETTEPAPER");
1729 out0(" fdb ");
1730
1731 RGBi * palette;
1732
1733 if ( commonPalette ) {
1734 palette = commonPalette;
1735 } else {
1736 palette = SYSTEM_PALETTE;
1737 }
1738
1739 for( i=0; i<7; ++i ) {
1740 out1( "$%2.2x, ", palette[i].hardwareIndex );
1741 }
1742 outline1( "$%2.2x ", palette[i].hardwareIndex );
1743 outhead0("PALETTEPEN");
1744 out0(" fdb ");
1745 for( i=8; i<14; ++i ) {
1746 out1( "$%2.2x, ", palette[i].hardwareIndex );
1747 }
1748 outline1( "$%2.2x ", palette[i].hardwareIndex );
1749
1750 if ( _environment->vestigialConfig.clsImplicit ) {
1751 deploy_preferred( clsText, src_hw_gime_cls_text_asm );
1752 }
1753
1754 CopperList * copperList = _environment->copperList;
1755 if ( copperList ) {
1756 while(copperList) {
1757 outhead1("COPPERACTIVATE%s", copperList->name ? copperList->name : "" );
1758 outline0("RTS");
1759 copperList = copperList->next;
1760 }
1761 }
1762
1763}
1764
1765void gime_hscroll_line( Environment * _environment, int _direction, int _overlap ) {
1766
1767 deploy_preferred( textHScroll, src_hw_gime_hscroll_text_asm );
1768
1769 Variable * y = variable_retrieve( _environment, "YCURSYS" );
1770 outline1("LDA #$%2.2x", ( _direction & 0xff ) );
1771 outline0("STA <DIRECTION" );
1772 outline1("LDA #$%2.2x", ( _overlap & 0xff ) );
1773 outline0("STA <PORT" );
1774 outline1("LDA %s", y->realName );
1775 outline0("STA <CLINEY");
1776
1777 outline0("JSR HSCROLLLT");
1778
1779
1780}
1781
1782void gime_hscroll_screen( Environment * _environment, int _direction, int _overlap ) {
1783
1784 deploy_preferred( textHScroll, src_hw_gime_hscroll_text_asm );
1785
1786 outline1("LDA #$%2.2x", ( _direction & 0xff ) );
1787 outline0("STA <DIRECTION" );
1788 outline1("LDA #$%2.2x", ( _overlap & 0xff ) );
1789 outline0("STA <PORT" );
1790
1791 outline0("JSR HSCROLLST");
1792
1793}
1794
1795void gime_back( Environment * _environment ) {
1796
1797}
1798
1799void gime_cline( Environment * _environment, char * _characters ) {
1800
1801 Variable * x = variable_retrieve( _environment, "XCURSYS" );
1802 Variable * y = variable_retrieve( _environment, "YCURSYS" );
1803
1804 if ( _characters ) {
1805 outline1("LDA %s", _characters);
1806 } else {
1807 outline0("LDA #0");
1808 }
1809 outline0("STA <CHARACTERS");
1810 outline1("LDA %s", x->realName );
1811 outline0("STA <CLINEX" );
1812 outline1("LDA %s", y->realName );
1813 outline0("STA <CLINEY");
1814
1815 if ( _environment->currentMode < 0x10 ) {
1816 deploy( textCline, src_hw_gime_cline_text_asm );
1817 outline0("JSR CLINE");
1818 } else {
1819 deploy( textClineGraphic, src_hw_gime_cline_graphic_asm );
1820 outline0("JSR CLINEG");
1821 }
1822
1823}
1824
1825int gime_image_size( Environment * _environment, int _width, int _height, int _mode ) {
1826
1827 switch( _mode ) {
1828
1847
1848 return 3 + ( ( _width >> 3 ) * _height ) + 2;
1849
1874
1875 return 3 + ( ( _width >> 2 ) * _height ) + 4;
1876
1895
1896 return 3 + ( ( _width >> 1 ) * _height ) + 16;
1897
1898 }
1899
1900 return 0;
1901
1902}
1903
1904static int calculate_images_size( Environment * _environment, int _frames, int _width, int _height, int _mode ) {
1905
1906 switch( _mode ) {
1907
1926
1927 return 3 + ( 3 + ( ( _width >> 3 ) * _height ) + 2 ) * _frames;
1928
1953
1954 return 3 + ( 3 + ( ( _width >> 2 ) * _height ) + 4 ) * _frames;
1955
1974
1975 return 3 + ( 3 + ( ( _width >> 1 ) * _height ) + 16 ) * _frames;
1976
1977 }
1978
1979 return 0;
1980
1981}
1982
1983static int calculate_sequence_size( Environment * _environment, int _sequences, int _frames, int _width, int _height, int _mode ) {
1984
1985 switch( _mode ) {
1986
2005
2006 return 3 + ( ( 3 + ( ( _width >> 3 ) * _height ) + 2 ) * _frames ) * _sequences;
2007
2032
2033 return 3 + ( ( 3 + ( ( _width >> 2 ) * _height ) + 4 ) * _frames ) * _sequences;
2034
2053
2054 return 3 + ( ( 3 + ( ( _width >> 1 ) * _height ) + 16 ) * _frames ) * _sequences;
2055
2056 }
2057
2058 return 0;
2059
2060}
2061
2062static Variable * gime_image_converter_bitmap_mode_hires( Environment * _environment, char * _source, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _transparent_color, int _flags ) {
2063
2064 // ignored on bitmap mode
2065 (void)!_transparent_color;
2066
2067 image_converter_asserts_free_height( _environment, _width, _height, _offset_x, _offset_y, &_frame_width, &_frame_height, 8 );
2068
2069 if ( _environment->freeImageWidth ) {
2070 if ( _width % 8 ) {
2071 _width = ( ( ( _width - 1 ) / 8 ) - 1 ) * 8;
2072 }
2073 if ( _frame_width % 8 ) {
2074 _frame_width = ( ( ( _frame_width - 1 ) / 8 ) - 1 ) * 8;
2075 }
2076 }
2077
2078 RGBi * palette = malloc_palette( MAX_PALETTE );
2079
2080 int paletteColorCount = rgbi_extract_palette(_environment, _source, _width, _height, _depth, palette, MAX_PALETTE, ( ( _flags & FLAG_EXACT ) ? 0 : 1 ) /* sorted */);
2081
2082 if (paletteColorCount > 2) {
2083 CRITICAL_IMAGE_CONVERTER_TOO_COLORS( paletteColorCount );
2084 }
2085
2086 int i, j, k;
2087
2088 if ( ! commonPalette ) {
2089
2090 commonPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2091 commonPalette = palette_remove_duplicates( commonPalette, paletteColorCount, &paletteColorCount );
2092
2093 if ( _transparent_color & 0x0f0000 ) {
2094 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, paletteColorCount );
2095 }
2096 if ( _transparent_color & 0xf00000 ) {
2097 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, paletteColorCount, 2 );
2098 paletteColorCount = 2;
2099 }
2100
2101 lastUsedSlotInCommonPalette = paletteColorCount;
2102 adilinepalette( "CPM1:%d", paletteColorCount, commonPalette );
2103
2104 } else {
2105
2106 RGBi * newPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2107 newPalette = palette_remove_duplicates( newPalette, paletteColorCount, &paletteColorCount );
2108 adilinepalette( "CPM1:%d", paletteColorCount, newPalette );
2109
2110 int mergedCommonPalette = 0;
2111
2112 commonPalette = palette_merge( commonPalette, lastUsedSlotInCommonPalette, newPalette, paletteColorCount, &mergedCommonPalette );
2113
2114 if ( _transparent_color & 0x0f0000 ) {
2115 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, mergedCommonPalette );
2116 }
2117 if ( _transparent_color & 0xf00000 ) {
2118 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, mergedCommonPalette, 2 );
2119 mergedCommonPalette = 2;
2120 }
2121
2122 lastUsedSlotInCommonPalette = mergedCommonPalette;
2123 if ( lastUsedSlotInCommonPalette > 2 ) {
2125 }
2126 adilinepalette( "CPM2:%d", lastUsedSlotInCommonPalette, commonPalette );
2127
2128 }
2129
2130 Variable * result = variable_temporary( _environment, VT_IMAGE, 0 );
2132 memcpy( result->originalPalette, commonPalette, lastUsedSlotInCommonPalette * sizeof( RGBi ) );
2133
2134 int bufferSize = gime_image_size( _environment, _frame_width, _frame_height, BITMAP_MODE_128x192x2 );
2135
2136 adiline3("BMP:%4.4x:%4.4x:%2.2x", _frame_width, _frame_height, BITMAP_MODE_128x192x2 );
2137
2138 adilinebeginbitmap("BMD");
2139
2140 char * buffer = malloc ( bufferSize );
2141
2142 // Position of the pixel in the original image
2143 int image_x, image_y;
2144
2145 // Position of the pixel, in terms of tiles
2146 int tile_x, tile_y;
2147
2148 // Position of the pixel, in terms of offset and bitmask
2149 int offset, bitmask;
2150
2151 int colorIndex;
2152
2153 // Color of the pixel to convert
2154 RGBi rgb;
2155
2156 *(buffer) = ( _frame_width >> 8 ) & 0xff;
2157 *(buffer+1) = (_frame_width & 0xff);
2158 *(buffer+2) = _frame_height;
2159
2160 _source += ( ( _offset_y * _width ) + _offset_x ) * _depth;
2161
2162 // Loop for all the source surface.
2163 for (image_y = 0; image_y < _frame_height; ++image_y) {
2164 for (image_x = 0; image_x < _frame_width; ++image_x) {
2165
2166 // Take the color of the pixel
2167 rgb.red = *_source;
2168 rgb.green = *(_source + 1);
2169 rgb.blue = *(_source + 2);
2170 if ( _depth > 3 ) {
2171 rgb.alpha = *(_source + 3);
2172 } else {
2173 rgb.alpha = 255;
2174 }
2175 if ( rgb.alpha == 0 ) {
2176 rgb.red = 0;
2177 rgb.green = 0;
2178 rgb.blue = 0;
2179 }
2180
2181 if ( rgb.alpha < 255 ) {
2182 colorIndex = 0;
2183 } else {
2184 int minDistance = 9999;
2185 for( int i=(_transparent_color)?1:0; i<lastUsedSlotInCommonPalette; ++i ) {
2186 int distance = rgbi_distance(&commonPalette[i], &rgb );
2187 if ( distance < minDistance ) {
2188 minDistance = distance;
2189 colorIndex = i;
2190 }
2191 }
2192 }
2193
2194 adilinepixel(colorIndex);
2195
2196 // Calculate the offset starting from the tile surface area
2197 // and the bit to set.
2198 offset = (image_y *( _frame_width >> 3 ) ) + (image_x >> 3 );
2199 bitmask = 1 << ( 7 - (image_x & 0x7) );
2200
2201 if ( colorIndex == 1 ) {
2202 *( buffer + offset + 3) |= bitmask;
2203 } else {
2204 *( buffer + offset + 3) &= ~bitmask;
2205 }
2206
2207 _source += _depth;
2208
2209 }
2210
2211 _source += ( _width - _frame_width ) * _depth;
2212
2213 }
2214
2216
2217 int hwIndex;
2218
2219 if ( lastUsedSlotInCommonPalette > 1 ) {
2220 hwIndex = commonPalette[1].hardwareIndex;
2221 } else {
2222 hwIndex = 0xff;
2223 }
2224 *(buffer + 3 + ( ( _frame_width >> 3 ) * _frame_height ) + 1 ) = hwIndex;
2225
2226 if ( lastUsedSlotInCommonPalette > 1 ) {
2227 hwIndex = commonPalette[0].hardwareIndex;
2228 } else {
2229 hwIndex = 0xff;
2230 }
2231 *(buffer + 3 + ( ( _frame_width >> 3 ) * _frame_height ) ) = hwIndex;
2232
2233 variable_store_buffer( _environment, result->name, buffer, bufferSize, 0 );
2234
2235 return result;
2236
2237}
2238
2239static Variable * gime_image_converter_multicolor_mode_midres( Environment * _environment, char * _source, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _transparent_color, int _flags ) {
2240
2241 image_converter_asserts_free_height( _environment, _width, _height, _offset_x, _offset_y, &_frame_width, &_frame_height, 8 );
2242
2243 if ( _environment->freeImageWidth ) {
2244 if ( _width % 8 ) {
2245 _width = ( ( ( _width - 1 ) / 8 ) - 1 ) * 8;
2246 }
2247 if ( _frame_width % 8 ) {
2248 _frame_width = ( ( ( _frame_width - 1 ) / 8 ) - 1 ) * 8;
2249 }
2250 }
2251
2252 RGBi * palette = malloc_palette( MAX_PALETTE );
2253
2254 int paletteColorCount = rgbi_extract_palette(_environment, _source, _width, _height, _depth, palette, MAX_PALETTE, ( ( _flags & FLAG_EXACT ) ? 0 : 1 ) /* sorted */);
2255
2256 if (paletteColorCount > 4) {
2257 CRITICAL_IMAGE_CONVERTER_TOO_COLORS( paletteColorCount );
2258 }
2259
2260 int i, j, k;
2261
2262 if ( ! commonPalette ) {
2263
2264 commonPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2265 commonPalette = palette_remove_duplicates( commonPalette, paletteColorCount, &paletteColorCount );
2266 if ( _transparent_color & 0x0f0000 ) {
2267 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, paletteColorCount );
2268 }
2269 if ( _transparent_color & 0xf00000 ) {
2270 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, paletteColorCount, 4 );
2271 paletteColorCount = 4;
2272 }
2273 lastUsedSlotInCommonPalette = paletteColorCount;
2274 adilinepalette( "CPM1:%d", paletteColorCount, commonPalette );
2275
2276 } else {
2277
2278 RGBi * newPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2279 newPalette = palette_remove_duplicates( newPalette, paletteColorCount, &paletteColorCount );
2280 adilinepalette( "CPM1:%d", paletteColorCount, newPalette );
2281
2282 int mergedCommonPalette = 0;
2283
2284 commonPalette = palette_merge( commonPalette, lastUsedSlotInCommonPalette, newPalette, paletteColorCount, &mergedCommonPalette );
2285
2286 if ( _transparent_color & 0x0f0000 ) {
2287 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, mergedCommonPalette );
2288 }
2289 if ( _transparent_color & 0xf00000 ) {
2290 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, mergedCommonPalette, 4 );
2291 mergedCommonPalette = 4;
2292 }
2293
2294 lastUsedSlotInCommonPalette = mergedCommonPalette;
2295 if ( lastUsedSlotInCommonPalette > 4 ) {
2297 }
2298 adilinepalette( "CPM2:%d", lastUsedSlotInCommonPalette, commonPalette );
2299
2300 }
2301
2302 Variable * result = variable_temporary( _environment, VT_IMAGE, 0 );
2304 memcpy( result->originalPalette, commonPalette, lastUsedSlotInCommonPalette * sizeof( RGBi ) );
2305
2306 int bufferSize = gime_image_size( _environment, _frame_width, _frame_height, BITMAP_MODE_320x200x4 );
2307
2308 adiline3("BMP:%4.4x:%4.4x:%2.2x", _frame_width, _frame_height, BITMAP_MODE_320x200x4 );
2309
2310 adilinebeginbitmap("BMD");
2311
2312 char * buffer = malloc ( bufferSize );
2313 memset( buffer, 0, bufferSize );
2314
2315 // Position of the pixel in the original image
2316 int image_x, image_y;
2317
2318 // Position of the pixel, in terms of tiles
2319 int tile_x, tile_y;
2320
2321 // Position of the pixel, in terms of offset and bitmask
2322 int offset, offsetc, bitmask;
2323
2324 // Color of the pixel to convert
2325 RGBi rgb;
2326
2327 *(buffer) = (_frame_width >> 8 ) & 0xff;
2328 *(buffer+1) = (_frame_width & 0xff);
2329 *(buffer+2) = _frame_height;
2330
2331 _source += ( ( _offset_y * _width ) + _offset_x ) * _depth;
2332
2333 // Loop for all the source surface.
2334 for (image_y = 0; image_y < _frame_height; ++image_y) {
2335 for (image_x = 0; image_x < _frame_width; ++image_x) {
2336
2337 // Take the color of the pixel
2338 rgb.red = *_source;
2339 rgb.green = *(_source + 1);
2340 rgb.blue = *(_source + 2);
2341 if ( _depth > 3 ) {
2342 rgb.alpha = *(_source + 3);
2343 } else {
2344 rgb.alpha = 255;
2345 }
2346 if ( rgb.alpha == 0 ) {
2347 rgb.red = 0;
2348 rgb.green = 0;
2349 rgb.blue = 0;
2350 }
2351
2352 // Calculate the offset starting from the tile surface area
2353 // and the bit to set.
2354 offset = (image_y * ( _frame_width >> 2 ) ) + (image_x>>2);
2355
2356 int colorIndex = 0;
2357
2358 if ( rgb.alpha < 255 ) {
2359 colorIndex = 0;
2360 } else {
2361 int minDistance = 9999;
2362 for( int i=(_transparent_color)?1:0; i<lastUsedSlotInCommonPalette; ++i ) {
2363 int distance = rgbi_distance(&commonPalette[i], &rgb );
2364 if ( distance < minDistance ) {
2365 minDistance = distance;
2366 colorIndex = i;
2367 }
2368 }
2369 }
2370
2371 adilinepixel(colorIndex);
2372
2373 bitmask = ( ( colorIndex & 0x3 ) ) << ((3 - ((image_x & 0x3)))*2);
2374
2375 *(buffer + 3 + offset) |= bitmask;
2376
2377 _source += _depth;
2378
2379 }
2380
2381 _source += ( _width - _frame_width ) * _depth;
2382
2383 }
2384
2386
2387 int hwIndex = 0;
2388 if ( lastUsedSlotInCommonPalette > 0 ) {
2389 hwIndex = commonPalette[0].hardwareIndex;
2390 } else {
2391 hwIndex = 0xff;
2392 }
2393 *(buffer + 3 + ( ( _frame_width >> 2 ) * _frame_height ) )= hwIndex;
2394
2395 if ( lastUsedSlotInCommonPalette > 1 ) {
2396 hwIndex = commonPalette[1].hardwareIndex;
2397 } else {
2398 hwIndex = 0xff;
2399 }
2400 *(buffer + 3 + ( ( _frame_width >> 2 ) * _frame_height ) + 1 ) = hwIndex;
2401
2402 if ( lastUsedSlotInCommonPalette > 2 ) {
2403 hwIndex = commonPalette[2].hardwareIndex;
2404 } else {
2405 hwIndex = 0xff;
2406 }
2407 *(buffer + 3 + ( ( _frame_width >> 2 ) * _frame_height ) + 2 ) = hwIndex;
2408
2409 if ( lastUsedSlotInCommonPalette > 3 ) {
2410 hwIndex = commonPalette[3].hardwareIndex;
2411 } else {
2412 hwIndex = 0xff;
2413 }
2414 *(buffer + 3 + ( ( _frame_width >> 2 ) * _frame_height ) + 3 ) = hwIndex;
2415
2416 variable_store_buffer( _environment, result->name, buffer, bufferSize, 0 );
2417
2418 return result;
2419
2420}
2421
2422static Variable * gime_image_converter_multicolor_mode_lores( Environment * _environment, char * _source, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _transparent_color, int _flags ) {
2423
2424 image_converter_asserts_free_height( _environment, _width, _height, _offset_x, _offset_y, &_frame_width, &_frame_height, 8 );
2425
2426 if ( _environment->freeImageWidth ) {
2427 if ( _width % 8 ) {
2428 _width = ( ( ( _width - 1 ) / 8 ) - 1 ) * 8;
2429 }
2430 if ( _frame_width % 8 ) {
2431 _frame_width = ( ( ( _frame_width - 1 ) / 8 ) - 1 ) * 8;
2432 }
2433 }
2434
2435 RGBi * palette = malloc_palette( MAX_PALETTE );
2436
2437 int paletteColorCount = rgbi_extract_palette(_environment, _source, _width, _height, _depth, palette, MAX_PALETTE, ( ( _flags & FLAG_EXACT ) ? 0 : 1 ) /* sorted */);
2438
2439 if (paletteColorCount > 16) {
2440 CRITICAL_IMAGE_CONVERTER_TOO_COLORS( paletteColorCount );
2441 }
2442
2443 int i, j, k;
2444
2445 if ( ! commonPalette ) {
2446
2447 commonPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2448 commonPalette = palette_remove_duplicates( commonPalette, paletteColorCount, &paletteColorCount );
2449
2450 if ( _transparent_color & 0x0f0000 ) {
2451 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, paletteColorCount );
2452 }
2453 if ( _transparent_color & 0xf00000 ) {
2454 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, paletteColorCount, 16 );
2455 paletteColorCount = 16;
2456 }
2457
2458 lastUsedSlotInCommonPalette = paletteColorCount;
2459 adilinepalette( "CPM1:%d", paletteColorCount, commonPalette );
2460
2461 } else {
2462
2463 RGBi * newPalette = palette_match( palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) );
2464
2465 newPalette = palette_remove_duplicates( newPalette, paletteColorCount, &paletteColorCount );
2466
2467 adilinepalette( "CPM1:%d", paletteColorCount, newPalette );
2468
2469 int mergedCommonPalette = 0;
2470
2471 commonPalette = palette_merge( commonPalette, lastUsedSlotInCommonPalette, newPalette, paletteColorCount, &mergedCommonPalette );
2472
2473 if ( _transparent_color & 0x0f0000 ) {
2474 commonPalette = palette_promote_color_as_background( _transparent_color & 0xff, commonPalette, mergedCommonPalette );
2475 }
2476 if ( _transparent_color & 0xf00000 ) {
2477 commonPalette = palette_promote_color_as_foreground( ( _transparent_color >> 8 ) & 0xff, commonPalette, mergedCommonPalette, 16 );
2478 mergedCommonPalette = 16;
2479 }
2480
2481 lastUsedSlotInCommonPalette = mergedCommonPalette;
2482 if ( lastUsedSlotInCommonPalette > 16 ) {
2484 }
2485 adilinepalette( "CPM2:%d", lastUsedSlotInCommonPalette, commonPalette );
2486
2487 }
2488
2489 Variable * result = variable_temporary( _environment, VT_IMAGE, 0 );
2491 memcpy( result->originalPalette, commonPalette, lastUsedSlotInCommonPalette * sizeof( RGBi ) );
2492
2493 int bufferSize = gime_image_size( _environment, _frame_width, _frame_height, BITMAP_MODE_320x200x16 );
2494
2495 adiline3("BMP:%4.4x:%4.4x:%2.2x", _frame_width, _frame_height, BITMAP_MODE_320x200x16 );
2496
2497 adilinebeginbitmap("BMD");
2498
2499 char * buffer = malloc ( bufferSize );
2500 memset( buffer, 0, bufferSize );
2501
2502 // Position of the pixel in the original image
2503 int image_x, image_y;
2504
2505 // Position of the pixel, in terms of tiles
2506 int tile_x, tile_y;
2507
2508 // Position of the pixel, in terms of offset and bitmask
2509 int offset, offsetc, bitmask;
2510
2511 // Color of the pixel to convert
2512 RGBi rgb;
2513
2514 *(buffer) = (_frame_width >> 8 ) & 0xff;
2515 *(buffer+1) = (_frame_width & 0xff);
2516 *(buffer+2) = _frame_height;
2517
2518 _source += ( ( _offset_y * _width ) + _offset_x ) * _depth;
2519
2520 // Loop for all the source surface.
2521 for (image_y = 0; image_y < _frame_height; ++image_y) {
2522 for (image_x = 0; image_x < _frame_width; ++image_x) {
2523
2524 // Take the color of the pixel
2525 rgb.red = *_source;
2526 rgb.green = *(_source + 1);
2527 rgb.blue = *(_source + 2);
2528 if ( _depth > 3 ) {
2529 rgb.alpha = *(_source + 3);
2530 } else {
2531 rgb.alpha = 255;
2532 }
2533 if ( rgb.alpha == 0 ) {
2534 rgb.red = 0;
2535 rgb.green = 0;
2536 rgb.blue = 0;
2537 }
2538
2539 // Calculate the offset starting from the tile surface area
2540 // and the bit to set.
2541 offset = (image_y * ( _frame_width >> 1 ) ) + (image_x>>1);
2542
2543 int colorIndex = 0;
2544
2545 if ( rgb.alpha < 255 ) {
2546 colorIndex = 0;
2547 } else {
2548 int minDistance = 9999;
2549 for( int i=(_transparent_color)?1:0; i<lastUsedSlotInCommonPalette; ++i ) {
2550 int distance = rgbi_distance(&commonPalette[i], &rgb );
2551 if ( distance < minDistance ) {
2552 minDistance = distance;
2553 colorIndex = i;
2554 }
2555 }
2556 }
2557
2558 adilinepixel(colorIndex);
2559
2560 bitmask = ( ( colorIndex & 0xF ) ) << (4 - ((image_x & 0x1)*4));
2561
2562 *(buffer + 3 + offset) |= bitmask;
2563
2564 _source += _depth;
2565
2566 }
2567
2568 _source += ( _width - _frame_width ) * _depth;
2569
2570 }
2571
2573
2574 for( int i=0; i<16; ++i ) {
2575 int hwIndex = 0xff;
2576 if ( lastUsedSlotInCommonPalette > ( i ) ) {
2577 hwIndex = commonPalette[i].hardwareIndex;
2578 }
2579 *(buffer + 3 + ( ( _frame_width >> 1 ) * _frame_height ) + i ) = hwIndex;
2580 }
2581
2582 variable_store_buffer( _environment, result->name, buffer, bufferSize, 0 );
2583
2584 return result;
2585
2586}
2587
2588Variable * gime_image_converter( Environment * _environment, char * _data, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _mode, int _transparent_color, int _flags ) {
2589
2590 switch( _mode ) {
2591
2610
2611 return gime_image_converter_bitmap_mode_hires( _environment, _data, _width, _height, _depth, _offset_x, _offset_y, _frame_width, _frame_height, _transparent_color, _flags );
2612
2637
2638 return gime_image_converter_multicolor_mode_midres( _environment, _data, _width, _height, _depth, _offset_x, _offset_y, _frame_width, _frame_height, _transparent_color, _flags );
2639
2658
2659 return gime_image_converter_multicolor_mode_lores( _environment, _data, _width, _height, _depth, _offset_x, _offset_y, _frame_width, _frame_height, _transparent_color, _flags );
2660
2661 }
2662
2663 return gime_new_image( _environment, 8, 8, _mode );
2664
2665}
2666
2667static void gime_load_image_address_to_y( Environment * _environment, char * _source, char * _sequence, char * _frame, int _frame_size, int _frame_count ) {
2668
2669 outline1("LDY #%s", _source );
2670 if ( _sequence ) {
2671 outline0("LEAY 3,y" );
2672 if ( strlen(_sequence) == 0 ) {
2673 } else {
2674 outline1("LDX #OFFSETS%4.4x", _frame_count * _frame_size );
2675 outline1("LDB %s", _sequence );
2676 outline0("LDA #0" );
2677 outline0("ABX" );
2678 outline0("ABX" );
2679 outline0("LDD ,X" );
2680 outline0("LEAY D, Y" );
2681 }
2682 if ( _frame ) {
2683 if ( strlen(_frame) == 0 ) {
2684 } else {
2685 outline1("LDX #OFFSETS%4.4x", _frame_size );
2686 outline1("LDB %s", _frame );
2687 outline0("LDA #0" );
2688 outline0("ABX" );
2689 outline0("ABX" );
2690 outline0("LDD ,X" );
2691 outline0("LEAY D, Y" );
2692 }
2693 }
2694 } else {
2695 if ( _frame ) {
2696 outline0("LEAY 3,y" );
2697 if ( strlen(_frame) == 0 ) {
2698 } else {
2699 outline1("LDX #OFFSETS%4.4x", _frame_size );
2700 outline1("LDB %s", _frame );
2701 outline0("LDA #0" );
2702 outline0("ABX" );
2703 outline0("ABX" );
2704 outline0("LDD ,X" );
2705 outline0("LEAY D, Y" );
2706 }
2707 }
2708 }
2709
2710}
2711
2712static void gime_load_image_address_to_register( Environment * _environment, char * _register, Resource * _source, char * _sequence, char * _frame, int _frame_size, int _frame_count ) {
2713
2714 if ( _source->isAddress ) {
2715 outline1("LDY %s", _source->realName );
2716 } else {
2717 outline1("LDY #%s", _source->realName );
2718 }
2719 if ( _sequence ) {
2720 outline0("LEAY 3,y" );
2721 if ( strlen(_sequence) == 0 ) {
2722 } else {
2723 outline1("LDB %s", _sequence );
2724 outline1("JSR %soffsetframe", _source->realName );
2725 }
2726 if ( _frame ) {
2727 if ( strlen(_frame) == 0 ) {
2728 } else {
2729 outline1("LDB %s", _frame );
2730 outline1("JSR %soffsetframe", _source->realName );
2731 }
2732 }
2733 } else {
2734 if ( _frame ) {
2735 outline0("LEAY 3,y" );
2736 if ( strlen(_frame) == 0 ) {
2737 } else {
2738 outline1("LDB %s", _frame );
2739 outline1("JSR %soffsetframe", _source->realName );
2740 }
2741 }
2742 }
2743
2744 if ( _register ) {
2745 outline1("STY %s", _register );
2746 }
2747
2748}
2749
2750void gime_blit_image( Environment * _environment, char * _sources[], int _source_count, char * _blit, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, int _flags ) {
2751
2752 deploy_preferred( gimevars, src_hw_gime_vars_asm);
2753 deploy_preferred( blitimage, src_hw_gime_blit_image_asm );
2754
2755 if ( _source_count > 2 ) {
2757 }
2758
2760
2761 outhead1("blitimage%s", label);
2762
2763 outline1("LDY #%s", _blit );
2764 outline0("STY BLITIMAGEBLITADDR" );
2765
2766 if ( _source_count > 0 ) {
2767 Resource resource;
2768 resource.realName = strdup( _sources[0] );
2769 resource.type = VT_IMAGE;
2770 resource.isAddress = 0;
2771 gime_load_image_address_to_register( _environment, "BLITTMPPTR", &resource, _sequence, _frame, _frame_size, _frame_count );
2772 } else {
2773 outline0( "LDY #0" );
2774 outline0( "STY BLITTMPPTR" );
2775 }
2776
2777 if ( _source_count > 1 ) {
2778 Resource resource;
2779 resource.realName = strdup( _sources[1] );
2780 resource.type = VT_IMAGE;
2781 resource.isAddress = 0;
2782 gime_load_image_address_to_register( _environment, "BLITTMPPTR2", &resource, _sequence, _frame, _frame_size, _frame_count );
2783 } else {
2784 outline0( "LDY #0" );
2785 outline0( "STY BLITTMPPTR2" );
2786 }
2787
2788 outline1("LDD %s", _x );
2789 outline0("STD <IMAGEX" );
2790 outline1("LDD %s", _y );
2791 outline0("STD <IMAGEY" );
2792
2793 outline1("LDA #$%2.2x", ( _flags & 0xff ) );
2794 outline0("STA <IMAGEF" );
2795 outline1("LDA #$%2.2x", ( (_flags>>8) & 0xff ) );
2796 outline0("STA <IMAGET" );
2797
2798 outline0("JSR BLITIMAGE");
2799
2800}
2801
2802void gime_put_image( Environment * _environment, Resource * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _flags ) {
2803
2804 deploy_preferred( gimevars, src_hw_gime_vars_asm);
2805 deploy_preferred( putimage, src_hw_gime_put_image_asm );
2806
2807 if ( _image->isAddress ) {
2808 outline1("LDY %s", _image->realName );
2809 } else {
2810 outline1("LDY #%s", _image->realName );
2811 }
2812 if ( _frame_size ) {
2813 if ( _sequence ) {
2814 outline0("LEAY 3,y" );
2815 if ( strlen(_sequence) == 0 ) {
2816 } else {
2817 outline1("LDB %s", _sequence );
2818 outline1("JSR %soffsetframe", _image->realName );
2819 }
2820 if ( _frame ) {
2821 if ( strlen(_frame) == 0 ) {
2822 } else {
2823 outline1("LDB %s", _frame );
2824 outline1("JSR %soffsetframe", _image->realName );
2825 }
2826 }
2827 } else {
2828 if ( _frame ) {
2829 outline0("LEAY 3,y" );
2830 if ( strlen(_frame) == 0 ) {
2831 } else {
2832 outline1("LDB %s", _frame );
2833 outline1("JSR %soffsetframe", _image->realName );
2834 }
2835 }
2836 }
2837 }
2838
2839 outline1("LDD %s", _x );
2840 outline0("STD <IMAGEX" );
2841 outline1("LDD %s", _y );
2842 outline0("STD <IMAGEY" );
2843
2844 outline1("LDD %s", _flags );
2845 outline0("STB <IMAGEF" );
2846 outline0("STA <IMAGET" );
2847
2848 outline0("JSR PUTIMAGE");
2849
2850}
2851
2852Variable * gime_new_image( Environment * _environment, int _width, int _height, int _mode ) {
2853
2854 int size = gime_image_size( _environment, _width, _height, _mode );
2855
2856 if ( ! size ) {
2858 }
2859
2860 Variable * result = variable_temporary( _environment, VT_IMAGE, "(new image)" );
2861
2862 char * buffer = malloc ( size );
2863 memset( buffer, 0, size );
2864
2865 *(buffer) = (_width >> 8 );
2866 *(buffer+1) = (_width & 0xff );
2867 *(buffer+2) = _height;
2868
2869 result->valueBuffer = buffer;
2870 result->size = size;
2871
2872 return result;
2873
2874}
2875
2876Variable * gime_new_images( Environment * _environment, int _frames, int _width, int _height, int _mode ) {
2877
2878 int size = calculate_images_size( _environment, _frames, _width, _height, _mode );
2879 int frameSize = gime_image_size( _environment, _width, _height, _mode );
2880
2881 if ( ! size ) {
2883 }
2884
2885 Variable * result = variable_temporary( _environment, VT_IMAGES, "(new images)" );
2886
2887 char * buffer = malloc ( size );
2888 memset( buffer, 0, size );
2889
2890 *(buffer) = _frames;
2891 *(buffer+1) = ( _width & 0xff );
2892 *(buffer+2) = ( _width >> 8 ) & 0xff;
2893 for( int i=0; i<_frames; ++i ) {
2894 *(buffer+3+(i*frameSize)) = ( ( _width >> 8 ) & 0xff );
2895 *(buffer+3+(i*frameSize)+1) = ( _width & 0xff );
2896 *(buffer+3+(i*frameSize)+2) = ( _height & 0xff );
2897 }
2898
2899 result->valueBuffer = buffer;
2900 result->frameSize = frameSize;
2901 result->size = size;
2902 result->frameCount = _frames;
2903
2904 return result;
2905
2906}
2907
2908Variable * gime_new_sequence( Environment * _environment, int _sequences, int _frames, int _width, int _height, int _mode ) {
2909
2910 int size2 = calculate_sequence_size( _environment, _sequences, _frames, _width, _height, _mode );
2911 int size = calculate_images_size( _environment, _frames, _width, _height, _mode );
2912 int frameSize = gime_image_size( _environment, _width, _height, _mode );
2913
2914 if ( ! size ) {
2916 }
2917
2918 Variable * result = variable_temporary( _environment, VT_SEQUENCE, "(new sequence)" );
2919
2920 char * buffer = malloc ( size2 );
2921 memset( buffer, 0, size2 );
2922
2923 *(buffer) = _frames;
2924 *(buffer+1) = _width;
2925 *(buffer+2) = _sequences;
2926 for( int i=0; i<(_frames*_sequences); ++i ) {
2927 *(buffer+3+(i*frameSize)) = ( ( _width >> 8 ) & 0xff );
2928 *(buffer+3+(i*frameSize)+1) = ( _width & 0xff );
2929 *(buffer+3+(i*frameSize)+2) = ( _height & 0xff );
2930 }
2931
2932 result->valueBuffer = buffer;
2933 result->frameSize = frameSize;
2934 result->size = size;
2935 result->frameCount = _frames;
2936
2937 return result;
2938
2939}
2940
2941void gime_get_image( Environment * _environment, char * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, int _palette ) {
2942
2943 deploy_preferred( gimevars, src_hw_gime_vars_asm);
2944 deploy_preferred( getimage, src_hw_gime_get_image_asm );
2945
2946 gime_load_image_address_to_y( _environment, _image, _sequence, _frame, _frame_size, _frame_count );
2947
2948 outline1("LDD %s", _x );
2949 outline0("STD <IMAGEX" );
2950 outline1("LDD %s", _y );
2951 outline0("STD <IMAGEY" );
2952 outline1("LDA #$%2.2x", _palette );
2953 outline0("STA <IMAGET");
2954
2955 outline0("JSR GETIMAGE");
2956
2957}
2958
2959void gime_scroll( Environment * _environment, int _dx, int _dy ) {
2960
2961}
2962
2963void gime_put_tile( Environment * _environment, char * _tile, char * _x, char * _y ) {
2964
2965}
2966
2967void gime_tile_at( Environment * _environment, char * _x, char * _y, char * _result ) {
2968
2969}
2970
2971void gime_move_tiles( Environment * _environment, char * _tile, char * _x, char * _y ) {
2972
2973}
2974
2975void gime_put_tiles( Environment * _environment, char * _tile, char * _x, char * _y, char *_w, char *_h ) {
2976
2977
2978}
2979
2980void gime_use_tileset( Environment * _environment, char * _tileset ) {
2981
2982}
2983
2985
2986 Variable * result = variable_temporary( _environment, VT_WORD, "(raster line)" );
2987
2988 return result;
2989
2990}
2991
2992void gime_slice_image( Environment * _environment, char * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _destination ) {
2993
2994}
2995
2996int gime_palette_extract( Environment * _environment, char * _data, int _width, int _height, int _depth, int _flags, RGBi * _palette ) {
2997
2998 int paletteColorCount = rgbi_extract_palette(_environment, _data, _width, _height, _depth, _palette, MAX_PALETTE, ( ( _flags & FLAG_EXACT ) ? 0 : 1 ) /* sorted */);
2999
3000 memcpy( _palette, palette_match( _palette, paletteColorCount, SYSTEM_PALETTE, sizeof(SYSTEM_PALETTE) / sizeof(RGBi) ), paletteColorCount * sizeof( RGBi ) );
3001
3002 int uniquePaletteCount = 0;
3003
3004 memcpy( _palette, palette_remove_duplicates( _palette, paletteColorCount, &uniquePaletteCount ), paletteColorCount * sizeof( RGBi ) );
3005
3006 return uniquePaletteCount;
3007
3008}
3009
3010void gime_calculate_sequence_frame_offset( Environment * _environment, char * _offset, char * _sequence, char * _frame, int _frame_size, int _frame_count ) {
3011
3012 outline0("LDY #$0" );
3013 if ( _sequence ) {
3014 outline0("LEAY 3,y" );
3015 if ( strlen(_sequence) == 0 ) {
3016 } else {
3017 outline1("LDX #OFFSETS%4.4x", _frame_count * _frame_size );
3018 outline1("LDB %s", _sequence );
3019 outline0("LDA #0" );
3020 outline0("ABX" );
3021 outline0("ABX" );
3022 outline0("LDD ,X" );
3023 outline0("LEAY D, Y" );
3024 }
3025 if ( _frame ) {
3026 if ( strlen(_frame) == 0 ) {
3027 } else {
3028 outline1("LDX #OFFSETS%4.4x", _frame_size );
3029 outline1("LDB %s", _frame );
3030 outline0("LDA #0" );
3031 outline0("ABX" );
3032 outline0("ABX" );
3033 outline0("LDD ,X" );
3034 outline0("LEAY D, Y" );
3035 }
3036 }
3037 } else {
3038 if ( _frame ) {
3039 outline0("LEAY 3,y" );
3040 if ( strlen(_frame) == 0 ) {
3041 } else {
3042 outline1("LDX #OFFSETS%4.4x", _frame_size );
3043 outline1("LDB %s", _frame );
3044 outline0("LDA #0" );
3045 outline0("ABX" );
3046 outline0("ABX" );
3047 outline0("LDD ,X" );
3048 outline0("LEAY D, Y" );
3049 }
3050 }
3051 }
3052
3053 outline1("STY %s", _offset );
3054
3055}
3056
3057void gime_flip_image( Environment * _environment, Resource * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _direction ) {
3058
3059 deploy( gimevars, src_hw_gime_vars_asm);
3060
3061 if ( strcmp( _direction, "#FLIPIMAGEDIRECTION0001" ) == 0 || strcmp( _direction, "#FLIPIMAGEDIRECTION0003" ) == 0 ) {
3062 gime_load_image_address_to_register( _environment, "TMPPTR", _image, _sequence, _frame, _frame_size, _frame_count );
3063 deploy( flipimagex, src_hw_gime_flip_image_x_asm );
3064 outline0("JSR FLIPIMAGEX");
3065 } else {
3066
3068
3069 gime_load_image_address_to_register( _environment, "TMPPTR", _image, _sequence, _frame, _frame_size, _frame_count );
3070 deploy( flipimagex, src_hw_gime_flip_image_x_asm );
3071 outline1("LDA %s", _direction );
3072 outline1("ANDA #$%2.2x", FLAG_FLIP_X );
3073 outline1("BEQ %s", label );
3074 outline0("JSR FLIPIMAGEX");
3075 outhead1("%s", label );
3076
3077 }
3078
3079 if ( strcmp( _direction, "#FLIPIMAGEDIRECTION0002" ) == 0 || strcmp( _direction, "#FLIPIMAGEDIRECTION0003" ) == 0 ) {
3080 gime_load_image_address_to_register( _environment, "TMPPTR", _image, _sequence, _frame, _frame_size, _frame_count );
3081 deploy( flipimagey, src_hw_gime_flip_image_y_asm );
3082 outline0("JSR FLIPIMAGEY");
3083 } else {
3084
3086
3087 gime_load_image_address_to_register( _environment, "TMPPTR", _image, _sequence, _frame, _frame_size, _frame_count );
3088 deploy( flipimagey, src_hw_gime_flip_image_y_asm );
3089 outline1("LDA %s", _direction );
3090 outline1("ANDA #$%2.2x", FLAG_FLIP_Y );
3091 outline1("BEQ %s", label );
3092 outline0("JSR FLIPIMAGEY");
3093 outhead1("%s", label );
3094
3095 }
3096
3097}
3098
3099void gime_screen( Environment * _environment, char * _x, char * _y, char * _c ) {
3100
3101 deploy_preferred( textEncodedAt, src_hw_gime_text_at_asm );
3102 deploy( screen, src_hw_gime_screen_asm);
3103
3104 outline1("LDA %s", _x );
3105 outline1("LDB %s", _y );
3106 outline0("JSR SCREEN" );
3107 outline1("STA %s", _c );
3108
3109}
3110
3111void gime_flash_begin( Environment * _environment, char * _index, char * _register ) {
3112
3113 deploy( flash, src_hw_gime_flash_asm );
3114
3115 outline0("JSR FLASHBEGIN");
3116 if ( _register ) {
3117 outline1("LDA %s", _index );
3118 outline0("ASLA" );
3119 outline0("LDX FLASHREGISTERADDRESSES" );
3120 outline0("LDY A,X" );
3121 outline1("LDB %s", _register );
3122 outline0("STB ,Y" );
3123 }
3124
3125}
3126
3127void gime_flash_register( Environment * _environment, char * _index, char * _timer, char * _color ) {
3128
3129 deploy( flash, src_hw_gime_flash_asm );
3130
3131 outline1("LDA %s", _index );
3132 outline1("LDB %s", _color );
3133 outline1("LDX %s-1", _timer );
3134 outline0("JSR FLASHREGISTER");
3135
3136}
3137
3138void gime_flash_end( Environment * _environment ) {
3139
3140 deploy( flash, src_hw_gime_flash_asm );
3141
3142 outline0("JSR FLASHEND");
3143
3144}
3145
3146#endif
void cpu_store_16bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 16 bit
Definition 6309.c:1503
void cpu_move_16bit(Environment *_environment, char *_source, char *_destination)
CPU 6309: emit code to move 16 bit
Definition 6309.c:1474
void cpu_call(Environment *_environment, char *_label)
Definition 6309.c:3755
void cpu_store_8bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 8 bit
Definition 6309.c:761
int lastUsedSlotInCommonPalette
Definition 6847.c:100
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
int rgbi_distance(RGBi *_e1, RGBi *_e2)
Calculate the distance between two colors.
RGBi * palette_merge(RGBi *_palette1, int _palette1_size, RGBi *_palette2, int _palette2_size, int *_size)
Make a "palette merge".
void image_converter_asserts_free_height(Environment *_environment, int _width, int _height, int _offset_x, int _offset_y, int *_frame_width, int *_frame_height, int _modulo_x)
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
RGBi * palette_promote_color_as_background(int _index, RGBi *_source, int _source_size)
Promote an index color in a palette.
RGBi * malloc_palette(int _size)
Allocate a palette space.
void variable_global(Environment *_environment, char *_pattern)
ScreenMode * find_screen_mode_by_suggestion(Environment *_environment, int _bitmap, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
int rgbi_extract_palette(Environment *_environment, unsigned char *_source, int _width, int _height, int _depth, RGBi _palette[], int _palette_size, int _sorted)
Extract the color palette from the given image.
RGBi * palette_promote_color_as_foreground(int _index, RGBi *_source, int _source_size, int _max_size)
Promote an index color in a palette.
RGBi * palette_remove_duplicates(RGBi *_source, int _source_size, int *_unique_size)
Remove duplicates from a palette.
void font_descriptors_init(Environment *_environment, int _embedded_present)
RGBi * palette_match(RGBi *_source, int _source_size, RGBi *_system, int _system_size)
Make a "palette match".
Variable * variable_store_buffer(Environment *_environment, char *_destination, unsigned char *_buffer, int _size, int _at)
int size
Definition _optimizer.c:678
int offset
Definition _optimizer.c:681
void plot(Environment *_environment, char *_x, char *_y, char *_c, int _preserve_color)
Definition plot.c:46
#define BITMAP_MODE_320x200x4
Definition cga.h:83
#define BITMAP_MODE_320x200x2
Definition cga.h:82
#define BITMAP_MODE_640x200x2
Definition cga.h:84
void flash(Environment *_environment, char *_index, char *_register)
Definition flash.c:44
void console_init(Environment *_environment)
Definition console.c:41
Variable * distance(Environment *_environment, char *_x1, char *_y1, char *_x2, char *_y2)
Return the distance between two (screen) positions.
Definition distance.c:76
void gime_flash_end(Environment *_environment)
Definition gime.c:3138
void gime_back(Environment *_environment)
Definition gime.c:1795
void gime_cline(Environment *_environment, char *_characters)
Definition gime.c:1799
void gime_hscroll_screen(Environment *_environment, int _direction, int _overlap)
Definition gime.c:1782
void gime_collision(Environment *_environment, char *_sprite_mask, char *_result)
VIC-II: emit code to check for collision
Definition gime.c:131
void gime_cls_box(Environment *_environment, char *_x1, char *_y1, char *_w, char *_h)
Definition gime.c:1467
Variable * gime_image_converter(Environment *_environment, char *_data, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _mode, int _transparent_color, int _flags)
Definition gime.c:2588
void gime_put_tile(Environment *_environment, char *_tile, char *_x, char *_y)
Definition gime.c:2963
void gime_sprite_common_color(Environment *_environment, char *_index, char *_common_color)
VIC-II: emit code to change common sprite's color
Definition gime.c:202
void gime_sprite_priority(Environment *_environment, char *_sprite, char *_priority)
Definition gime.c:1413
void gime_tiles_get(Environment *_environment, char *_result)
Definition gime.c:1439
void gime_calculate_sequence_frame_offset(Environment *_environment, char *_offset, char *_sequence, char *_frame, int _frame_size, int _frame_count)
Definition gime.c:3010
void gime_move_tiles(Environment *_environment, char *_tile, char *_x, char *_y)
Definition gime.c:2971
void gime_scroll(Environment *_environment, int _dx, int _dy)
Definition gime.c:2959
void gime_sprite_multicolor(Environment *_environment, char *_sprite)
Definition gime.c:1401
void gime_get_height(Environment *_environment, char *_result)
Definition gime.c:1446
void gime_screen_rows(Environment *_environment, char *_rows)
Definition gime.c:1357
void gime_sprite_data_set(Environment *_environment, char *_sprite, char *_address)
Definition gime.c:1369
void gime_next_raster(Environment *_environment)
VIC-II: emit code to wait for next raster irq
Definition gime.c:235
void gime_sprite_monocolor(Environment *_environment, char *_sprite)
Definition gime.c:1405
void gime_finalization(Environment *_environment)
Definition gime.c:1724
void gime_background_color_get_vars(Environment *_environment, char *_index, char *_background_color)
Definition gime.c:166
void gime_sprite_color(Environment *_environment, char *_sprite, char *_color)
Definition gime.c:1409
#define GIME_4COLORS
Definition gime.c:288
#define GIME_1024PIXELS
Definition gime.c:298
#define GIME_320PIXELS
Definition gime.c:295
#define GIME_16COLORS
Definition gime.c:289
Variable * gime_get_raster_line(Environment *_environment)
Definition gime.c:2984
void gime_sprite_compress_horizontal(Environment *_environment, char *_sprite)
Definition gime.c:1397
#define GIME_128K()
Definition gime.c:311
void gime_sprite_compress_vertical(Environment *_environment, char *_sprite)
Definition gime.c:1393
void gime_next_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
VIC-II: emit code to wait for next raster irq at different position
Definition gime.c:252
void gime_blit_image(Environment *_environment, char *_sources[], int _source_count, char *_blit, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _flags)
Definition gime.c:2750
#define GIME_HRES_64COLS
Definition gime.c:281
Variable * gime_new_image(Environment *_environment, int _width, int _height, int _mode)
Definition gime.c:2852
void gime_text(Environment *_environment, char *_text, char *_text_size, int _raw)
Definition gime.c:1501
#define GIME_CRES_32COLS
Definition gime.c:276
void gime_flash_register(Environment *_environment, char *_index, char *_timer, char *_color)
Definition gime.c:3127
void gime_sprite_at(Environment *_environment, char *_sprite, char *_x, char *_y)
Definition gime.c:1381
void gime_vertical_scroll(Environment *_environment, char *_displacement)
Definition gime.c:1421
void gime_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Definition gime.c:1247
void gime_initialization(Environment *_environment)
Definition gime.c:1538
void gime_sprite_data_from(Environment *_environment, char *_sprite, char *_address)
Definition gime.c:1365
#define GIME_128PIXELS
Definition gime.c:292
void gime_slice_image(Environment *_environment, char *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_destination)
Definition gime.c:2992
#define GIME_1280PIXELS
Definition gime.c:299
#define GIME_25ROWS
Definition gime.c:271
void gime_tile_at(Environment *_environment, char *_x, char *_y, char *_result)
Definition gime.c:2967
#define GIME_TEXT()
Definition gime.c:267
void gime_cls(Environment *_environment)
Definition gime.c:1453
void gime_hscroll_line(Environment *_environment, int _direction, int _overlap)
Definition gime.c:1765
#define GIME_RESOLUTION(_hres, _cres, _vres)
Definition gime.c:301
#define GIME_2COLORS
Definition gime.c:287
void gime_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Definition gime.c:1225
void gime_tiles_at(Environment *_environment, char *_address)
Definition gime.c:1417
#define GIME_28ROWS
Definition gime.c:273
void gime_pset_int(Environment *_environment, int _x, int _y, int *_c)
Definition gime.c:1278
void gime_border_color(Environment *_environment, char *_border_color)
VIC-II: emit code to change border color
Definition gime.c:159
void gime_hit(Environment *_environment, char *_sprite_mask, char *_result)
VIC-II: emit code to check for collision
Definition gime.c:146
void gime_screen_on(Environment *_environment)
Definition gime.c:1349
void gime_screen_off(Environment *_environment)
Definition gime.c:1353
void gime_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
VIC-II: emit code to set raster irq
Definition gime.c:221
void console_calculate_vars(Environment *_environment)
Definition gime.c:382
int gime_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition gime.c:390
void gime_sprite_disable(Environment *_environment, char *_sprite)
Definition gime.c:1377
void gime_background_color(Environment *_environment, char *_index, char *_background_color)
VIC-II: emit code to change background color
Definition gime.c:184
int gime_palette_extract(Environment *_environment, char *_data, int _width, int _height, int _depth, int _flags, RGBi *_palette)
Definition gime.c:2996
#define GIME_GRAPH()
Definition gime.c:268
void gime_sprite_expand_horizontal(Environment *_environment, char *_sprite)
Definition gime.c:1389
void gime_put_image(Environment *_environment, Resource *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_flags)
Definition gime.c:2802
void gime_bitmap_disable(Environment *_environment)
Definition gime.c:1243
void gime_get_width(Environment *_environment, char *_result)
Definition gime.c:1432
#define GIME_CRES_40COLS
Definition gime.c:279
void gime_bank_select(Environment *_environment, int _bank)
Definition gime.c:256
#define GIME_24ROWS
Definition gime.c:270
void gime_use_tileset(Environment *_environment, char *_tileset)
Definition gime.c:2980
void gime_flash_begin(Environment *_environment, char *_index, char *_register)
Definition gime.c:3111
#define GIME_512PIXELS
Definition gime.c:296
void gime_scroll_text(Environment *_environment, int _direction, int _overlap)
Definition gime.c:1488
#define GIME_CRES_80COLS
Definition gime.c:285
#define GIME_256PIXELS
Definition gime.c:294
Variable * gime_new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
Definition gime.c:2876
void gime_bitmap_at(Environment *_environment, char *_address)
Definition gime.c:1266
void gime_colormap_at(Environment *_environment, char *_address)
Definition gime.c:1270
void gime_get_image(Environment *_environment, char *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _palette)
Definition gime.c:2941
void gime_pset_vars(Environment *_environment, char *_x, char *_y, char *_c)
Definition gime.c:1301
int gime_image_size(Environment *_environment, int _width, int _height, int _mode)
Definition gime.c:1825
void gime_screen_columns(Environment *_environment, char *_columns)
Definition gime.c:1361
void gime_sprite_enable(Environment *_environment, char *_sprite)
Definition gime.c:1373
void gime_pget_color_vars(Environment *_environment, char *_x, char *_y, char *_result)
Definition gime.c:1328
void gime_screen(Environment *_environment, char *_x, char *_y, char *_c)
Definition gime.c:3099
Variable * gime_new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
Definition gime.c:2908
void gime_put_tiles(Environment *_environment, char *_tile, char *_x, char *_y, char *_w, char *_h)
Definition gime.c:2975
void gime_flip_image(Environment *_environment, Resource *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_direction)
Definition gime.c:3057
#define GIME_HRES_40COLS
Definition gime.c:278
#define GIME_CRES_64COLS
Definition gime.c:282
#define GIME_160PIXELS
Definition gime.c:293
void console_calculate(Environment *_environment)
Definition gime.c:314
void gime_sprite_expand_vertical(Environment *_environment, char *_sprite)
Definition gime.c:1385
void gime_textmap_at(Environment *_environment, char *_address)
Definition gime.c:1274
void gime_horizontal_scroll(Environment *_environment, char *_displacement)
Definition gime.c:1425
#define GIME_HRES_80COLS
Definition gime.c:284
#define GIME_640PIXELS
Definition gime.c:297
#define GIME_HRES_32COLS
Definition gime.c:275
#define BITMAP_MODE_256x192x2
Definition gime.h:134
#define BITMAP_MODE_80x225x4
Definition gime.h:159
#define BITMAP_MODE_160x225x16
Definition gime.h:202
#define TILEMAP_MODE_80X25
Definition gime.h:120
#define BITMAP_MODE_320x225x4
Definition gime.h:175
#define BITMAP_MODE_64x225x4
Definition gime.h:155
#define BITMAP_MODE_320x192x2
Definition gime.h:138
#define BITMAP_MODE_80x200x4
Definition gime.h:158
#define TILEMAP_MODE_40X25
Definition gime.h:114
#define BITMAP_MODE_160x225x2
Definition gime.h:132
#define BITMAP_MODE_160x192x16
Definition gime.h:200
#define BITMAP_MODE_512x200x4
Definition gime.h:178
#define BITMAP_MODE_640x192x2
Definition gime.h:146
#define BITMAP_MODE_256x200x2
Definition gime.h:135
#define BITMAP_MODE_160x200x16
Definition gime.h:201
#define BITMAP_MODE_256x225x4
Definition gime.h:171
#define BITMAP_MODE_160x192x4
Definition gime.h:165
#define BITMAP_MODE_256x192x16
Definition gime.h:204
#define BITMAP_MODE_160x200x4
Definition gime.h:166
#define BITMAP_MODE_80x225x16
Definition gime.h:194
#define BITMAP_MODE_512x192x4
Definition gime.h:177
#define TILEMAP_MODE_80X24
Definition gime.h:119
#define BITMAP_MODE_128x225x16
Definition gime.h:198
#define TILEMAP_MODE_64X25
Definition gime.h:117
#define BITMAP_MODE_64x192x16
Definition gime.h:188
#define TILEMAP_MODE_32X24
Definition gime.h:110
#define BITMAP_MODE_640x225x4
Definition gime.h:183
#define BITMAP_MODE_80x192x4
Definition gime.h:157
#define BITMAP_MODE_320x192x4
Definition gime.h:173
#define BITMAP_MODE_128x192x16
Definition gime.h:196
#define BITMAP_MODE_640x192x4
Definition gime.h:181
#define BITMAP_MODE_128x192x4
Definition gime.h:161
#define BITMAP_MODE_256x192x4
Definition gime.h:169
#define TILEMAP_MODE_32X28
Definition gime.h:112
#define BITMAP_MODE_512x192x2
Definition gime.h:142
#define BITMAP_MODE_640x225x2
Definition gime.h:148
#define TILEMAP_MODE_40X28
Definition gime.h:115
#define BITMAP_MODE_160x225x4
Definition gime.h:167
#define BITMAP_MODE_256x200x4
Definition gime.h:170
#define BITMAP_MODE_320x225x2
Definition gime.h:140
#define BITMAP_MODE_256x225x2
Definition gime.h:136
#define BITMAP_MODE_128x200x4
Definition gime.h:162
#define BITMAP_MODE_80x200x16
Definition gime.h:193
#define TILEMAP_MODE_32X25
Definition gime.h:111
#define TILEMAP_MODE_64X24
Definition gime.h:116
#define BITMAP_MODE_128x225x2
Definition gime.h:128
#define BITMAP_MODE_256x200x16
Definition gime.h:205
#define BITMAP_MODE_64x200x4
Definition gime.h:154
#define BITMAP_MODE_320x200x16
Definition gime.h:209
#define BITMAP_MODE_256x225x16
Definition gime.h:206
#define BITMAP_MODE_128x192x2
Definition gime.h:126
#define TILEMAP_MODE_64X28
Definition gime.h:118
#define BITMAP_MODE_64x192x4
Definition gime.h:153
#define BITMAP_MODE_320x225x16
Definition gime.h:210
#define BITMAP_MODE_160x192x2
Definition gime.h:130
#define BITMAP_MODE_128x200x2
Definition gime.h:127
#define BITMAP_MODE_512x200x2
Definition gime.h:143
#define BITMAP_MODE_64x200x16
Definition gime.h:189
#define BITMAP_MODE_128x225x4
Definition gime.h:163
#define BITMAP_MODE_512x225x4
Definition gime.h:179
#define BITMAP_MODE_160x200x2
Definition gime.h:131
#define TILEMAP_MODE_80X28
Definition gime.h:121
#define BITMAP_MODE_80x192x16
Definition gime.h:192
#define BITMAP_MODE_320x192x16
Definition gime.h:208
#define TILEMAP_MODE_40X24
Definition gime.h:113
#define BITMAP_MODE_640x200x4
Definition gime.h:182
#define RGB2GIME(r, g, b)
Definition gime.h:46
#define BITMAP_MODE_64x225x16
Definition gime.h:190
#define BITMAP_MODE_128x200x16
Definition gime.h:197
#define BITMAP_MODE_512x225x2
Definition gime.h:144
int width
Definition ugbc.h:2209
int height
Definition ugbc.h:2210
char * name
Definition ugbc.h:2252
struct _CopperList * next
Definition ugbc.h:2255
int screenTilesWidth
Definition ugbc.h:2880
int screenShades
Definition ugbc.h:2865
int fontHeight
Definition ugbc.h:2905
Console activeConsole
Definition ugbc.h:2910
int freeImageWidth
Definition ugbc.h:3088
int currentMode
Definition ugbc.h:2696
int screenTilesHeight
Definition ugbc.h:2885
int consoleTilesHeight
Definition ugbc.h:2895
RgbConverterFunction currentRgbConverterFunction
Definition ugbc.h:2711
int fontWidth
Definition ugbc.h:2900
CopperList * copperList
Definition ugbc.h:3282
int screenColors
Definition ugbc.h:2870
int dynamicConsole
Definition ugbc.h:3298
FontConfig fontConfig
Definition ugbc.h:2415
int currentModeBW
Definition ugbc.h:2701
int screenHeight
Definition ugbc.h:2860
int consoleTilesWidth
Definition ugbc.h:2890
int currentTileMode
Definition ugbc.h:2706
int screenTiles
Definition ugbc.h:2875
int screenWidth
Definition ugbc.h:2855
int defaultPaperColor
Definition ugbc.h:3226
int defaultPenColor
Definition ugbc.h:3225
VestigialConfig vestigialConfig
Definition ugbc.h:2442
int schema
Definition ugbc.h:2063
unsigned char red
Definition ugbc.h:433
unsigned char green
Definition ugbc.h:434
unsigned char blue
Definition ugbc.h:435
unsigned char alpha
Definition ugbc.h:436
int isAddress
Definition ugbc.h:557
VariableType type
Definition ugbc.h:559
char * realName
Definition ugbc.h:555
int bitmap
Definition ugbc.h:1496
int selected
Definition ugbc.h:1510
unsigned char * valueBuffer
Definition ugbc.h:1061
int size
Definition ugbc.h:1077
char * name
Definition ugbc.h:979
int originalColors
Definition ugbc.h:1154
int frameSize
Definition ugbc.h:1134
int frameCount
Definition ugbc.h:1137
RGBi originalPalette[MAX_PALETTE]
Definition ugbc.h:1169
char * realName
Definition ugbc.h:982
char clsImplicit
Definition ugbc.h:2008
void * malloc(YYSIZE_T)
struct _ScreenMode ScreenMode
#define CRITICAL_IMAGE_CONVERTER_TOO_COLORS(f)
Definition ugbc.h:3502
struct _Resource Resource
struct _RGBi RGBi
Structure to store color components (red, green and blue).
#define adilineendbitmap()
Definition ugbc.h:4241
#define WARNING_SCREEN_MODE(v1)
Definition ugbc.h:3878
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
#define FLAG_FLIP_X
Definition ugbc.h:4553
@ VT_WORD
Definition ugbc.h:455
@ VT_POSITION
Definition ugbc.h:468
@ VT_BYTE
Definition ugbc.h:450
@ VT_SBYTE
Definition ugbc.h:452
@ VT_IMAGES
Definition ugbc.h:495
@ VT_COLOR
Definition ugbc.h:471
@ VT_IMAGE
Definition ugbc.h:489
@ VT_SEQUENCE
Definition ugbc.h:513
#define adiline3(s, a, b, c)
Definition ugbc.h:4197
#define deploy_preferred(s, e)
Definition ugbc.h:4299
#define outhead0(s)
Definition ugbc.h:4246
#define out0(s)
Definition ugbc.h:4259
#define SCREEN_MODE_DEFINE(_id, _bitmap, _width, _height, _colors, _tile_width, _tile_height, _description)
Definition ugbc.h:1516
#define MAX_PALETTE
Definition ugbc.h:568
#define CRITICAL_NEW_IMAGES_UNSUPPORTED_MODE(f)
Definition ugbc.h:3688
#define CRITICAL_SCREEN_UNSUPPORTED(v)
Definition ugbc.h:3496
#define outline0(s)
Definition ugbc.h:4252
#define FLAG_FLIP_Y
Definition ugbc.h:4554
#define out1(s, a)
Definition ugbc.h:4260
#define outline1(s, a)
Definition ugbc.h:4253
#define adilinepalette(s, c, p)
Definition ugbc.h:4219
#define FONT_SCHEMA_ASCII
Definition ugbc.h:582
#define adilinebeginbitmap(s)
Definition ugbc.h:4231
struct _CopperList CopperList
#define FLAG_EXACT
Definition ugbc.h:4569
#define adilinepixel(p)
Definition ugbc.h:4236
#define CRITICAL_NEW_IMAGE_UNSUPPORTED_MODE(f)
Definition ugbc.h:3540
#define CRITICAL_BLIT_TOO_MUCH_SOURCES()
Definition ugbc.h:3613
#define deploy(s, e)
Definition ugbc.h:4288
#define MAKE_LABEL
Definition ugbc.h:3351
#define outhead1(s, a)
Definition ugbc.h:4247