]> git.sur5r.net Git - cc65/commitdiff
atari5200: conio now uses just four colors altogether
authorChristian Groessler <chris@groessler.org>
Thu, 4 Apr 2019 23:26:34 +0000 (01:26 +0200)
committerOliver Schmidt <ol.sc@web.de>
Fri, 12 Apr 2019 10:49:38 +0000 (12:49 +0200)
See discussion in PR #870.

asminc/atari5200.inc
asminc/atari_gtia.inc
include/_gtia.h
include/atari.h
include/atari5200.h
libsrc/atari5200/bgcolor.s
libsrc/atari5200/conioscreen.s
libsrc/atari5200/cputc.s
libsrc/atari5200/extra/conioscreen_20x12.s
libsrc/atari5200/textcolor.s
testcode/lib/atari5200/hello.c

index a1fe624e6c2b50ff80e266f8b987f3cffd77cde2..a17268de274f90ab8df4c5003be2a5c6a0fcc42b 100644 (file)
@@ -111,6 +111,14 @@ ANTIC     = $D400  ; ANTIC area
 POKEY     = $E800  ; POKEY area
 .include  "atari_pokey.inc"
 
+;-------------------------------------------------------------------------
+; conio color defines
+;-------------------------------------------------------------------------
+
+COLOR_WHITE = 0
+COLOR_RED   = 1
+COLOR_GREEN = 2
+COLOR_BLACK = 3
 
 ;-------------------------------------------------------------------------
 ; Cartridge Parameters
index f50583271a1a902e2d6f7ed45237753a7a177963..dd1c877d52a2ee354ea6f3fc2ff5b81ffd87c703 100644 (file)
@@ -79,3 +79,41 @@ VDELAY  = GTIA + $1C         ;vertical delay
 GRACTL  = GTIA + $1D         ;graphic control
 HITCLR  = GTIA + $1E         ;collision clear
 
+
+; Hue values
+
+HUE_GREY        = 0
+HUE_GOLD        = 1
+HUE_GOLDORANGE  = 2
+HUE_REDORANGE   = 3
+HUE_ORANGE      = 4
+HUE_MAGENTA     = 5
+HUE_PURPLE      = 6
+HUE_BLUE        = 7
+HUE_BLUE2       = 8
+HUE_CYAN        = 9
+HUE_BLUEGREEN   = 10
+HUE_BLUEGREEN2  = 11
+HUE_GREEN       = 12
+HUE_YELLOWGREEN = 13
+HUE_YELLOW      = 14
+HUE_YELLOWRED   = 15
+
+; Color defines, similar to c64 colors (untested)
+
+GTIA_COLOR_BLACK      = (HUE_GREY << 4)
+GTIA_COLOR_WHITE      = (HUE_GREY << 4 | 7 << 1)
+GTIA_COLOR_RED        = (HUE_REDORANGE << 4 | 1 << 1)
+GTIA_COLOR_CYAN       = (HUE_CYAN << 4 | 3 << 1)
+GTIA_COLOR_VIOLET     = (HUE_PURPLE << 4 | 4 << 1)
+GTIA_COLOR_GREEN      = (HUE_GREEN << 4 | 2 << 1)
+GTIA_COLOR_BLUE       = (HUE_BLUE << 4 | 2 << 1)
+GTIA_COLOR_YELLOW     = (HUE_YELLOW << 4 | 7 << 1)
+GTIA_COLOR_ORANGE     = (HUE_ORANGE << 4 | 5 << 1)
+GTIA_COLOR_BROWN      = (HUE_YELLOW << 4 | 2 << 1)
+GTIA_COLOR_LIGHTRED   = (HUE_REDORANGE << 4 | 6 << 1)
+GTIA_COLOR_GRAY1      = (HUE_GREY << 4 | 2 << 1)
+GTIA_COLOR_GRAY2      = (HUE_GREY << 4 | 3 << 1)
+GTIA_COLOR_LIGHTGREEN = (HUE_GREEN << 4 | 6 << 1)
+GTIA_COLOR_LIGHTBLUE  = (HUE_BLUE << 4 | 6 << 1)
+GTIA_COLOR_GRAY3      = (HUE_GREY << 4 | 5 << 1)
index ae3e6944561dd1b9534366a241765182c3789780..cbdf7608ee6df997b21fe254447e4f3323c75578 100644 (file)
@@ -131,44 +131,23 @@ struct __gtia_write {
 #define HUE_YELLOWRED   15
 
 /* Color defines, similar to c64 colors (untested) */
-/* Note that the conio color implementation is monochrome
-** (bgcolor and textcolor are only placeholders)
-*/
-/* Use the defines with the setcolor() or _atari_xxxcolor() functions */
-#define COLOR_BLACK             _gtia_mkcolor(HUE_GREY,0)
-#define COLOR_WHITE             _gtia_mkcolor(HUE_GREY,7)
-#define COLOR_RED               _gtia_mkcolor(HUE_REDORANGE,1)
-#define COLOR_CYAN              _gtia_mkcolor(HUE_CYAN,3)
-#define COLOR_VIOLET            _gtia_mkcolor(HUE_PURPLE,4)
-#define COLOR_GREEN             _gtia_mkcolor(HUE_GREEN,2)
-#define COLOR_BLUE              _gtia_mkcolor(HUE_BLUE,2)
-#define COLOR_YELLOW            _gtia_mkcolor(HUE_YELLOW,7)
-#define COLOR_ORANGE            _gtia_mkcolor(HUE_ORANGE,5)
-#define COLOR_BROWN             _gtia_mkcolor(HUE_YELLOW,2)
-#define COLOR_LIGHTRED          _gtia_mkcolor(HUE_REDORANGE,6)
-#define COLOR_GRAY1             _gtia_mkcolor(HUE_GREY,2)
-#define COLOR_GRAY2             _gtia_mkcolor(HUE_GREY,3)
-#define COLOR_LIGHTGREEN        _gtia_mkcolor(HUE_GREEN,6)
-#define COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
-#define COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
-
-/* TGI color defines */
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         COLOR_WHITE
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_ORANGE        COLOR_ORANGE
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_LIGHTRED      COLOR_LIGHTRED
-#define TGI_COLOR_GRAY1         COLOR_GRAY1
-#define TGI_COLOR_GRAY2         COLOR_GRAY2
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_GRAY3         COLOR_GRAY3
+/* Hardware palette values (for GTIA colxxx registers) */
+#define GTIA_COLOR_BLACK             _gtia_mkcolor(HUE_GREY,0)
+#define GTIA_COLOR_WHITE             _gtia_mkcolor(HUE_GREY,7)
+#define GTIA_COLOR_RED               _gtia_mkcolor(HUE_REDORANGE,1)
+#define GTIA_COLOR_CYAN              _gtia_mkcolor(HUE_CYAN,3)
+#define GTIA_COLOR_VIOLET            _gtia_mkcolor(HUE_PURPLE,4)
+#define GTIA_COLOR_GREEN             _gtia_mkcolor(HUE_GREEN,2)
+#define GTIA_COLOR_BLUE              _gtia_mkcolor(HUE_BLUE,2)
+#define GTIA_COLOR_YELLOW            _gtia_mkcolor(HUE_YELLOW,7)
+#define GTIA_COLOR_ORANGE            _gtia_mkcolor(HUE_ORANGE,5)
+#define GTIA_COLOR_BROWN             _gtia_mkcolor(HUE_YELLOW,2)
+#define GTIA_COLOR_LIGHTRED          _gtia_mkcolor(HUE_REDORANGE,6)
+#define GTIA_COLOR_GRAY1             _gtia_mkcolor(HUE_GREY,2)
+#define GTIA_COLOR_GRAY2             _gtia_mkcolor(HUE_GREY,3)
+#define GTIA_COLOR_LIGHTGREEN        _gtia_mkcolor(HUE_GREEN,6)
+#define GTIA_COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
+#define GTIA_COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
 
 
 /*****************************************************************************/
index 455c43260436254d71a906ef272b4df91d073e6e..4fc027d20fcf1a736e2d4f0c6968b62d259d4c59 100644 (file)
@@ -377,6 +377,51 @@ extern void atrx15p2_tgi[];
 #define ANTIC (*(struct __antic*)0xD400)
 
 
+/*****************************************************************************/
+/* conio and TGI color defines                                               */
+/*****************************************************************************/
+
+/* Note that the conio color implementation is monochrome
+** (textcolor just sets text brightness low or high, depending on background
+** color)
+** These values can be used with bordercolor(), bgcolor(), and _setcolor_low()
+*/
+#define COLOR_BLACK      GTIA_COLOR_BLACK
+#define COLOR_WHITE      GTIA_COLOR_WHITE
+#define COLOR_RED        GTIA_COLOR_RED
+#define COLOR_CYAN       GTIA_COLOR_CYAN
+#define COLOR_VIOLET     GTIA_COLOR_VIOLET
+#define COLOR_GREEN      GTIA_COLOR_GREEN
+#define COLOR_BLUE       GTIA_COLOR_BLUE
+#define COLOR_YELLOW     GTIA_COLOR_YELLOW
+#define COLOR_ORANGE     GTIA_COLOR_ORANGE
+#define COLOR_BROWN      GTIA_COLOR_BROWN
+#define COLOR_LIGHTRED   GTIA_COLOR_LIGHTRED
+#define COLOR_GRAY1      GTIA_COLOR_GRAY1
+#define COLOR_GRAY2      GTIA_COLOR_GRAY2
+#define COLOR_LIGHTGREEN GTIA_COLOR_LIGHTGREEN
+#define COLOR_LIGHTBLUE  GTIA_COLOR_LIGHTBLUE
+#define COLOR_GRAY3      GTIA_COLOR_GRAY3
+
+/* TGI color defines */
+#define TGI_COLOR_BLACK      COLOR_BLACK
+#define TGI_COLOR_WHITE      COLOR_WHITE
+#define TGI_COLOR_RED        COLOR_RED
+#define TGI_COLOR_CYAN       COLOR_CYAN
+#define TGI_COLOR_VIOLET     COLOR_VIOLET
+#define TGI_COLOR_GREEN      COLOR_GREEN
+#define TGI_COLOR_BLUE       COLOR_BLUE
+#define TGI_COLOR_YELLOW     COLOR_YELLOW
+#define TGI_COLOR_ORANGE     COLOR_ORANGE
+#define TGI_COLOR_BROWN      COLOR_BROWN
+#define TGI_COLOR_LIGHTRED   COLOR_LIGHTRED
+#define TGI_COLOR_GRAY1      COLOR_GRAY1
+#define TGI_COLOR_GRAY2      COLOR_GRAY2
+#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
+#define TGI_COLOR_LIGHTBLUE  COLOR_LIGHTBLUE
+#define TGI_COLOR_GRAY3      COLOR_GRAY3
+
+
 /*****************************************************************************/
 /* PIA PORTA and PORTB register bits                                         */
 /*****************************************************************************/
index 10cd32fe979e65a950b652070d6af1da5e93fc1a..d6c2561b25520292461ac053f91c9ff5584454cc 100644 (file)
@@ -77,6 +77,12 @@ extern void atr5200std_joy[];        /* referred to by joy_static_stddrv[] */
 #include <_antic.h>
 #define ANTIC (*(struct __antic*)0xD400)
 
+/* conio color defines */
+#define COLOR_WHITE 0x00
+#define COLOR_RED   0x01
+#define COLOR_GREEN 0x02
+#define COLOR_BLACK 0x03
+
 /* The following #define will cause the matching function calls in conio.h
 ** to be overlaid by macros with the same names, saving the function call
 ** overhead.
index 1f9f772601fd196ccec6b7d627c19d3bfc68838e..bf10dff2cd4f9572c9cd861530a2444d8bf29378 100644 (file)
@@ -1 +1,37 @@
-.include "../atari/bgcolor.s"
+;
+; Christian Groessler, 05-Apr-2019
+;
+
+        .import         conio_colors
+        .export         _bgcolor
+
+        .include        "atari5200.inc"
+
+        .constructor    init_old_bgcolor
+
+.bss
+
+old_bg_color:
+        .res    1
+
+.code
+
+_bgcolor:
+        and     #3
+        tax
+        lda     conio_colors,x
+        ldx     old_bg_color
+        sta     COLOR4                  ; set new value
+        sta     old_bg_color
+        txa
+        ldx     #0                      ; fix X
+        rts
+
+.segment        "ONCE"
+
+init_old_bgcolor:
+        lda     conio_colors+3          ; see also conioscreen.s for initialization
+        sta     old_bg_color
+        rts
+
+        .end
index a16557d2ac5f7966dcdae5a7a9a0a6d32b96443a..d1a709fc3a035d78fa5e41aa896a120c31d1bf0e 100644 (file)
@@ -7,6 +7,7 @@
 SCREEN_BUF_SIZE =       20 * 24
 SCREEN_BUF      =       $4000 - SCREEN_BUF_SIZE
 
+                .import conio_colors
                 .export screen_setup
                 .export screen_width, screen_height
                 .export conio_color
@@ -43,16 +44,15 @@ clrscr:         sta     (SAVMSC),y
 
                 ; set default colors
 
-                lda     #40
+                lda     conio_colors
                 sta     COLOR0
-                lda     #202
+                lda     conio_colors+1
                 sta     COLOR1
-                lda     #148
+                lda     conio_colors+2
                 sta     COLOR2
-                lda     #70
+                lda     conio_colors+3
                 sta     COLOR3
-                lda     #0
-                sta     COLOR4
+                sta     COLOR4          ; background
 
                 ; set display list
 
index b230df68c79a0d57238dbd7c8a898dbc545a0cc7..6de397182bd584b50f53bb4997281925d3ced68f 100644 (file)
@@ -82,8 +82,8 @@ putchar:
         sta     ptr4+1
         pla                     ; get char again
 
-;       and     #$C0            ; without this we are compatible with the old version. user must not try to output a char >= $3F
-        ora     conio_color
+        and     #$3F            ; clear palette index bits
+        ora     conio_color     ; use currently selected palette
 
         ldy     COLCRS_5200
         sta     (ptr4),y
index 12043c74c8df2351c951abfda951bed26cdf9ced..20ab7ea2ba27237e749dd8185b09a4cca055f121 100644 (file)
@@ -7,6 +7,7 @@
 SCREEN_BUF_SIZE =       20 * 12
 SCREEN_BUF      =       $4000 - SCREEN_BUF_SIZE
 
+                .import conio_colors
                 .export screen_setup
                 .export screen_width, screen_height
                 .export conio_color
@@ -43,16 +44,15 @@ clrscr:         sta     (SAVMSC),y
 
                 ; set default colors
 
-                lda     #40
+                lda     conio_colors
                 sta     COLOR0
-                lda     #202
+                lda     conio_colors+1
                 sta     COLOR1
-                lda     #148
+                lda     conio_colors+2
                 sta     COLOR2
-                lda     #70
+                lda     conio_colors+3
                 sta     COLOR3
-                lda     #0
-                sta     COLOR4
+                sta     COLOR4          ; background
 
                 ; set display list
 
index 5989451349629c78c1d2365162a85558daa14bbe..511e23de3d787d0ea1625257d4f3c82a77a2d5fa 100644 (file)
@@ -2,6 +2,8 @@
 ; Christian Groessler, 02-Apr-2019
 ;
 ; unsigned char __fastcall__ textcolor (unsigned char color);
+;
+; "color" value is a palette index (0..3) or COLOR_xxx value (0..3)
 
         .export         _textcolor
         .import         conio_color
index b2088461bc12b46557882d42aa9aadefdbe63150..18daf0bdfdbf9d7ff9a66f0024a62b34442c5753 100644 (file)
@@ -69,15 +69,15 @@ int main (void)
     gotoxy ((XSize - strlen (Text)) / 2, YSize / 2);
     cprintf ("%s", Text);
 
-    PosY = wherey () + 1;
+    PosY = wherey ();
     textcolor (0); /* switch to color #0 */
-    cputsxy(3, PosY++, "COLOR 0");
+    cputsxy(3, ++PosY, "COLOR 0");
     textcolor (1); /* switch to color #1 */
-    cputsxy(3, PosY++, "COLOR 1");
+    cputsxy(3, ++PosY, "COLOR 1");
     textcolor (2); /* switch to color #2 */
-    cputsxy(3, PosY++, "COLOR 2");
-    textcolor (3); /* switch to color #3 */
-    cputsxy(3, PosY, "COLOR 3");
+    cputsxy(3, ++PosY, "COLOR 2");
+    textcolor (3); /* switch to color #3 */ /* color #3 is the background color. So written text isn't visible. */
+    cputsxy(3, ++PosY, "COLOR 3");
 
 #if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__) || defined(__ATARI5200__)