]> git.sur5r.net Git - cc65/commitdiff
Started to add tgi text output functions
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 3 Oct 2002 11:18:49 +0000 (11:18 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 3 Oct 2002 11:18:49 +0000 (11:18 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1428 b7a2c559-68d2-44c3-8de9-860c34a00d81

asminc/tgi-kernel.inc
include/tgi.h
libsrc/c64/c64-320-200-2.s

index a4c55db93f43dbaca490244fc93369422596b44e..aca870087457e94c9923efdce11a36974c7cb412 100644 (file)
@@ -42,7 +42,9 @@ TGI_HDR_XRES            = 4             ; X resolution
 TGI_HDR_YRES            = 6             ; Y resolution
 TGI_HDR_COLORCOUNT      = 8             ; Number of available colors
 TGI_HDR_PAGECOUNT       = 9             ; Number of screens available
-TGI_HDR_RES             = 10            ; Reserved for extensions
+TGI_HDR_FONTSIZE_X      = 10            ; System font size in X direction
+TGI_HDR_FONTSIZE_Y      = 11            ; System font size in Y direction
+TGI_HDR_RES             = 12            ; Reserved for extensions
 
 TGI_HDR_JUMPTAB         = 16
 TGI_HDR_INSTALL         = TGI_HDR_JUMPTAB+0     ; INSTALL routine
@@ -64,8 +66,16 @@ TGI_HDR_HORLINE         = TGI_HDR_JUMPTAB+30    ; HORLINE routine
 TGI_HDR_LINE            = TGI_HDR_JUMPTAB+32    ; LINE routine
 TGI_HDR_BAR             = TGI_HDR_JUMPTAB+34    ; BAR routine
 TGI_HDR_CIRCLE          = TGI_HDR_JUMPTAB+36    ; CIRCLE routine
+TGI_HDR_TEXTSTYLE       = TGI_HDR_JUMPTAB+39    ; TEXTSTYLE routine
+TGI_HDR_OUTTEXT         = TGI_HDR_JUMPTAB+42    ; OUTTEXT routine
 
-TGI_HDR_JUMPCOUNT       = 19            ; Number of jump vectors
+TGI_HDR_JUMPCOUNT       = 21            ; Number of jump vectors
+
+;------------------------------------------------------------------------------
+; Text style constants
+
+TGI_TEXT_HORIZONTAL     = 0
+TGI_TEXT_VERTICAL       = 1
 
 ;------------------------------------------------------------------------------
 ; Variables
@@ -76,10 +86,15 @@ TGI_HDR_JUMPCOUNT       = 19            ; Number of jump vectors
         .global _tgi_curx               ; Current drawing cursor X
         .global _tgi_cury               ; Current drawing cursor Y
         .global _tgi_color              ; Current drawing color
+        .global _tgi_textdir            ; Current text direction
+        .global _tgi_textmagx           ; Text magnification in X dir
+        .global _tgi_textmagy           ; Text magnification in Y dir
         .global _tgi_xres               ; X resolution of the current mode
         .global _tgi_yres               ; Y resolution of the current mode
         .global _tgi_colorcount         ; Number of available colors
         .global _tgi_pagecount          ; Number of available screen pages
+        .global _tgi_fontsizex          ; System font X size
+        .global _tgi_fontsizey          ; System font Y size
 
 ;------------------------------------------------------------------------------
 ; Driver entry points
@@ -103,7 +118,8 @@ TGI_HDR_JUMPCOUNT       = 19            ; Number of jump vectors
         .global tgi_line
         .global tgi_bar
         .global tgi_circle
-
+        .global tgi_textstyle
+        .global tgi_outtext
 
 ;------------------------------------------------------------------------------
 ; ASM functions
@@ -113,5 +129,8 @@ TGI_HDR_JUMPCOUNT       = 19            ; Number of jump vectors
         .global tgi_inv_arg
         .global tgi_linepop
         .global tgi_set_ptr
+        .global tgi_popxy
+        .global tgi_popxy2
+        .global tgi_curtoxy
+
 
-                           
index fe3fdb9a5a37237e29d2094404ddf24103b83d47..367aa4d830861e5c63f8f0923a656eada7ff1bc6 100644 (file)
 
 
 
+/*****************************************************************************/
+/*                                  Definitions                              */
+/*****************************************************************************/
+
+
+
+/* Constants used for tgi_textstyle */
+#define TGI_TEXT_HORIZONTAL     0
+#define TGI_TEXT_VERTICAL       1
+
+
+
 /*****************************************************************************/
 /*                                Functions                                 */
 /*****************************************************************************/
@@ -163,6 +175,30 @@ void __fastcall__ tgi_outtext (int x, int y, const char* text);
 void __fastcall__ tgi_bar (int x1, int y1, int x2, int y2);
 /* Draw a bar (a filled rectangle) using the current color. */
 
+void __fastcall__ tgi_textstyle (unsigned char magx, unsigned char magy,
+                                 unsigned char dir);
+/* Set the style for text output. */
+
+unsigned __fastcall__ tgi_textwidth (const char* s);
+/* Calculate the width of the text in pixels according to the current text
+ * style.
+ */
+
+unsigned __fastcall__ tgi_textheight (const char* s);
+/* Calculate the height of the text in pixels according to the current text
+ * style.
+ */
+
+void __fastcall__ tgi_outtext (const char* s);
+/* Output text at the current graphics cursor position. The graphics cursor
+ * is moved to the end of the text.
+ */
+
+void __fastcall__ tgi_outtextxy (int x, int y, const char* s);
+/* Output text at the given cursor position. The graphics cursor is moved to
+ * the end of the text.
+ */
+
 
 
 /* End of tgi.h */
index 8872d25156d10777764aec7ca3a0deaa4939a6b4..4ab678c3e65bff473b832ca3d6f1a45a04158c8d 100644 (file)
@@ -28,7 +28,9 @@
         .word   200                     ; Y resolution
         .byte   2                       ; Number of drawing colors
         .byte   1                       ; Number of screens available
-        .res    6, $00                  ; Reserved for future extensions
+        .byte   8                       ; System font X size
+        .byte   8                       ; System font Y size
+        .res    4, $00                  ; Reserved for future extensions
 
 ; Next comes the jump table. Currently all entries must be valid and may point
 ; to an RTS for test versions (function not implemented). A future version may
@@ -55,7 +57,8 @@
         .word   LINE
         .word   0               ; BAR
         .word   CIRCLE
-
+        .word   TEXTSTYLE
+        .word   OUTTEXT
 
 ; ------------------------------------------------------------------------
 ; Data.
@@ -109,6 +112,11 @@ OLDCH1:         .res    1
 CHUNK2:         .res    1
 OLDCH2:         .res    1
 
+; Text output stuff
+TEXTMAGX:       .res    1
+TEXTMAGY:       .res    1
+TEXTDIR:        .res    1
+
 ; Constants and tables
 
 .rodata
@@ -450,7 +458,7 @@ GETPIXEL:
         rts
 
 ; ------------------------------------------------------------------------
-; HORLINE: Draw a horizontal line from X1/Y to X2/Y, where X1 = ptr1, 
+; HORLINE: Draw a horizontal line from X1/Y to X2/Y, where X1 = ptr1,
 ; Y = ptr2 and X2 = ptr3, using the current drawing color.
 ;
 ; This is a special line drawing entry used when the line is know to be
@@ -686,7 +694,7 @@ XFIXC:  sta     TEMP
         bmi     @C1          ;Skip if column is negative
         cmp     #39          ;End if move past end of screen
         bcs     EXIT
-@C1:   lda     POINT
+@C1:   lda     POINT
         adc     #8
         sta     POINT
         bcc     @CONT
@@ -1139,6 +1147,31 @@ PCHUNK2:
         sta     (X2),y
 EXIT3:  rts
 
+; ------------------------------------------------------------------------
+; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
+; direction is passend in X/Y, the text direction is passed in A.
+;
+; Must set an error code: NO
+;
+
+TEXTSTYLE:
+        stx     TEXTMAGX
+        sty     TEXTMAGY
+        sta     TEXTDIR
+        rts
+
+
+; ------------------------------------------------------------------------
+; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
+; current text style. The text to output is given as a zero terminated
+; string with address in ptr3.
+;
+; Must set an error code: NO
+;
+
+OUTTEXT:
+        rts
+
 ; ------------------------------------------------------------------------
 ; Calculate all variables to plot the pixel at X1/Y1. If the point is out
 ; of range, a carry is returned and INRANGE is set to a value !0 zero. If