cruisin-usa/TEXT.ASM

1023 lines
17 KiB
NASM
Executable File

.FILE "TEXT.ASM"
*----------------------------------------------------------------------------
*TEXT ROUTINES
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
.include MACS.EQU
.include VUNIT.EQU
.include GLOBALS.EQU
.include PALL.EQU
.include OBJECTS.EQU
.include TEXT.EQU
.include TEXTTAB.EQU
hibss TEXT_LIST,NUM_TEXTS*TEXT_SIZ
.bss TEXT_FREE,1
.bss TEXT_ACTIVE,1
.bss TEXT_FREE_COUNT,1
.bss TEXT_FREEZE,1
TEXT_FREEI .word TEXT_FREE
TEXT_ACTIVEI .word TEXT_ACTIVE
TEXT_LISTI .word TEXT_LIST
FIXEDFONT_A .word fixedfnt
TEXTTABLEFIXEDI .word FIXEDFONT
FONTDIGITLG_A
FONTDIGITSM_A .word dnums_I
FONT18_A .word font18_I
TEXTTABLEFONT18 .word FONT18_TAB
FONT40_A .word ommdfont_I
FONT10_A .word osg10fnt_I
*----------------------------------------------------------------------------
TEXT_INIT:
LDI @TEXT_LISTI,AR2
LDI @TEXT_FREEI,R2
LDI @TEXT_ACTIVEI,R3
LDI NUM_TEXTS-1,RC
LDI TEXT_SIZ,RS
CALL INIT_LINKED_LIST
LDI NUM_TEXTS,R2
STI R2,@TEXT_FREE_COUNT
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*TEXT_ADD(int *string_pointer, float posx, float posy, int tiks)
*
*PARAMETERS
* AR2 PTR TO PACKED TEXT STRING
* R2 (FL) POS X
* R3 (FL) POS Y
* RC TIKS TO DISPLAY
*RETURNS
* AR0 PTR TO TEXT STRUCTURE
*
*
TEXT_ADDDS:
PUSH AR2
CALL TEXT_ADD
POP AR2
LDI AR0,AR1
CALL TEXT_ADD
LDI TXT_NRZ,R0
STI R0,*+AR0(TEXT_COLOR)
LDF R2,R0
ADDF 2,R0
STF R0,*+AR0(TEXT_POSX)
LDF R3,R0
ADDF 2,R0
STF R0,*+AR0(TEXT_POSY)
RETS
TEXT_ADD1:
LDI 1,RC
TEXT_ADD:
PUSH AR2
PUSH R2
PUSHF R2
LDI @TEXT_FREEI,AR2
LDI @TEXT_ACTIVEI,R2
CALL GET_LLIST
.if DEBUG
CMPI 0,AR0
BZ $
.endif
LDI @TEXT_FREE_COUNT,R2
DEC R2
STI R2,@TEXT_FREE_COUNT
POPF R2
POP R2
POP AR2
STI AR2,*+AR0(TEXT_PTR)
STF R2,*+AR0(TEXT_POSX)
STF R3,*+AR0(TEXT_POSY)
STI RC,*+AR0(TEXT_TIKS)
CLRI R0
STI R0,*+AR0(TEXT_COLOR) ;clear the flags
CLRF R0
STF R0,*+AR0(TEXT_VELX)
STF R0,*+AR0(TEXT_VELY)
;set default font
BU SET18FONT
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SETSMDIGITFONT:
LDI 12,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONTDIGITSM_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL dnums_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @FONTDIGSMI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SETSMDIGITFONTDS:
LDI 12,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONTDIGITSM_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL dnums_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @FONTDIGSMI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SETLGDIGITFONT:
LDI 22,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONTDIGITLG_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL dnums_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @FONTDIGLGI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SETLGDIGITFONTDS:
LDI 22,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONTDIGITLG_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL dnums_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @FONTDIGLGI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
FONTN43_A .word lgnum43_I
SETN43FONT:
LDI 40,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONTN43_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL lgnum43_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @FONTN43TABI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SETN43FONTDS:
LDI 40,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONTN43_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL lgnum43_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @FONTN43TABI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SET40FONT:
LDI 42,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONT40_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL ommdfont_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @FONT40TABI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SET40FONTDS:
LDI 42,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONT40_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL ommdfont_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @FONT40TABI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
OGSMFONT_TABI .word OGSMFONT_TAB
SET12FONT:
LDI 12,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONT10_A,R0
STI R0,*+AR0(TEXT_IMG)
LDI osg10fnt_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @OGSMFONT_TABI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SET12FONTDS:
LDI 12,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONT10_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDI osg10fnt_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @OGSMFONT_TABI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SET18FONT:
LDI 17,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FONT18_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL font18_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
LDI @TEXTTABLEFONT18,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SET18FONTDS:
LDI 17,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FONT18_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL font18_p,AR2
CALL PAL_FIND
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @TEXTTABLEFONT18,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SETFIXEDFONT:
LDI 6,R0
STI R0,*+AR0(TEXT_HEIGHT)
LDI @FIXEDFONT_A,R0
STI R0,*+AR0(TEXT_IMG)
LDL fixedfnt_tPAL,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
LDI @TEXTTABLEFIXEDI,R0
STI R0,*+AR0(TEXT_ADDR)
RETS
SETFIXEDFONTDS:
LDI 6,R0
STI R0,*+AR0(TEXT_HEIGHT)
STI R0,*+AR1(TEXT_HEIGHT)
LDI @FIXEDFONT_A,R0
STI R0,*+AR0(TEXT_IMG)
STI R0,*+AR1(TEXT_IMG)
LDL fixedfnt_tPAL,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
LDI @TEXTTABLEFIXEDI,R0
STI R0,*+AR0(TEXT_ADDR)
STI R0,*+AR1(TEXT_ADDR)
; LDF *+AR1(TEXT_POSX),R0
; SUBF -1,R0
; STF R0,*+AR1(TEXT_POSX)
; LDF *+AR1(TEXT_POSY),R0
; SUBF -1,R0
; STF R0,*+AR1(TEXT_POSY)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*STRING LENGTH (IN PIXELS)
*
*
*PARAMETERS
* AR2 PTR TO STRING
*RETURNS
* R0 LENGTH (IN PIXEL) OF STRING
*
STRLEN:
PUSH RS
PUSH R1
PUSH R2
PUSH AR0
PUSH AR1
PUSH AR2
CLRI R0 ;length of string
CLRI RS
STRLP CMPI -32,RS
BNE STLP2
CLRI RS
NOP *AR2++
STLP2
LDI *AR2,AR0
LSH RS,AR0
SUBI 8,RS
AND 0FFh,AR0
CMPI 0,AR0
BZ STRLENX
CMPI ' ',AR0
BEQ STRLENNCHAR
SUBI '0',AR0 ;THE START OF THE FONT
LDI AR0,AR1
MPYI FONTENT_SIZE,AR1
ADDI *+AR4(TEXT_ADDR),AR1
LDI *+AR1(FONTENT_XEND),R1
SUBI *+AR1(FONTENT_XSTART),R1
LDI *+AR1(FONTENT_PRE),R2
LS 16,R2
ASH -16,R2 ;MUST SIGN EXTEND THIS DUDE
ADDI R2,R1
LDI *+AR1(FONTENT_TRAIL),R2
RS 16,R2
ADDI R2,R1
STRLENNCHAR
ADDI R1,R0 ;INCREASE STRING LENGTH
BU STRLP
STRLENX
POP AR2
POP AR1
POP AR0
POP R2
POP R1
POP RS
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
TEXT_OUTPUT:
PUSH AR4
PUSH AR5
PUSH R4
PUSH R7
BUD NXTGRP
PUSHF R7
NOP
LDI @TEXT_ACTIVEI,AR4
;----> BUD NXTGRP
TEXTLP
LDI R0,AR4
LDI *+AR4(TEXT_PTR),AR2
FIX *+AR4(TEXT_POSX),R2
FIX *+AR4(TEXT_POSY),R3
LDI *+AR4(TEXT_COLOR),R0
TSTB TXT_CENTER,R0
BZ NO_CENTER
CALL STRLEN
RS 1,R0
SUBI R0,R2
B TEXT_RET
NO_CENTER
TSTB TXT_RIGHT,R0
BZ NO_RIGHT
CALL STRLEN
SUBI R0,R2
;B TEXT_RET
NO_RIGHT
TEXT_RET
CLRI RS
OLP CMPI -32,RS
BNE REGLP
CLRI RS
NOP *AR2++
REGLP
LDI *AR2,AR0
LSH RS,AR0
SUBI 8,RS
AND 0FFh,AR0
CMPI 0,AR0
BZ OUCX
CMPI '/',AR0
LDIEQ '@',AR0
CMPI ' ',AR0
BEQ NXTCHAR
SUBI '0',AR0 ;the start of the font
;NOW PLOT OUT THE CHARACTER
LDI *+AR4(TEXT_COLOR),R0
TSTB TXT_NRZ,R0
BZ IBO1
AND 0FFh,R0
OR NZR|ZS|TM,R0
BU IBO2
IBO1 LDI TM|ZS,R0
IBO2
STI R0,@_ACNTL
LDI *+AR4(TEXT_PAL),R1
STI R1,@_ACMAP
LDI AR0,AR1
MPYI FONTENT_SIZE,AR1
ADDI *+AR4(TEXT_ADDR),AR1
LDI *+AR1(FONTENT_PRE),R0
LS 16,R0
ASH -16,R0 ;MUST SIGN EXTEND THIS DUDE
ADDI R0,R2
LDI *+AR1(FONTENT_XSTART),R0
LDI *+AR1(FONTENT_YSTART),R4
LS 8,R4
OR R4,R0
STI R0,@_AIVI+0
LDI *+AR4(TEXT_HEIGHT),R1
LS 8,R1
ADDI R0,R1
STI R1,@_AIVI+3
LDI *+AR1(FONTENT_XEND),R0
OR R4,R0
STI R0,@_AIVI+1
LDI *+AR4(TEXT_HEIGHT),R1
LS 8,R1
ADDI R0,R1
STI R1,@_AIVI+2
LDI *+AR4(TEXT_IMG),R0
STI R0,@_ADDRL
LDI *+AR1(FONTENT_XEND),R7
SUBI *+AR1(FONTENT_XSTART),R7
STI R2,@_ARPS+0
STI R2,@_ARPS+9 ;FP3X
ADDI R7,R2
STI R2,@_ARPS+3 ;FP1X
STI R2,@_ARPS+6 ;FP2X
SUBI R7,R2
STI R3,@_ARPS+1 ;FP0Y
STI R3,@_ARPS+4 ;FP1Y
ADDI *+AR4(TEXT_HEIGHT),R3
STI R3,@_ARPS+7 ;FP2Y
STI R3,@_ARPS+10 ;FP3Y
SUBI *+AR4(TEXT_HEIGHT),R3
CALL _stuff_fpga
LDI *+AR1(FONTENT_TRAIL),R0
RS 16,R0
ADDI R0,R7
NXTCHAR
ADDI R7,R2 ;to next X position
BU OLP
OUCX
LDI @TEXT_FREEZE,R0
BNZ ISFROZEN
LDF *+AR4(TEXT_POSX),R0
ADDF *+AR4(TEXT_VELX),R0
STF R0,*+AR4(TEXT_POSX)
LDF *+AR4(TEXT_POSY),R0
ADDF *+AR4(TEXT_VELY),R0
STF R0,*+AR4(TEXT_POSY)
ISFROZEN
LDI *+AR4(TEXT_TIKS),R0
LDI *+AR4(TEXT_COLOR),R1
TSTB TXT_NOPULL,R1 ;NOPULL = never decrement tik count
BNZ NODELETE
SUBI 1,R0
BGT NODELETE
LDI *AR4,R7
LDI @TEXT_ACTIVEI,R1 ;get free list pointer
DELLP LDI R1,AR1
LDI *AR1,R1
.if DEBUG
BZ $ ;lockup on end of list found
.endif
CMPI R1,AR4
BNE DELLP
LDI *AR4,R1
STI R1,*AR1 ;LINK AROUND
LDI @TEXT_FREE_COUNT,R1
INC R1
STI R1,@TEXT_FREE_COUNT
LDI @TEXT_FREEI,AR1 ;get free list pointer
LDI *AR1,R1
STI R1,*AR4
STI AR4,*AR1
LDI R7,R0
BNZ TEXTLP
B TXTOUT
NODELETE
STI R0,*+AR4(TEXT_TIKS)
NXTGRP
LDI *AR4,R0
BNZ TEXTLP
TXTOUT
POPF R7
POP R7
POP R4
POP AR5
POP AR4
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*STRING COPY
*
*PARAMETERS
* AR0 SOURCE STRING
* AR1 DESTINATION STRING
*RETURNS
* AR1 SOURCE STRING
*
STRCPY:
PUSH R0
PUSH AR0
PUSH AR1
PUSH AR2
;FIND WHERE AR0 ENDS
CLRI R0
SCPLP0 CMPI -32,R0
BNE REGPLP0
CLRI R0
NOP *AR0++
NOP *AR1++
REGPLP0
LDI *AR0,AR2
STI AR2,*AR1
LSH R0,AR2
SUBI 8,R0
AND 0FFh,AR2
CMPI 0,AR2
BNZ SCPLP0
POP AR2
POP AR1
POP AR0
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*STRING CONCATENATION
*
*APPEND THE CONTENTS OF AR1 TO AR0
*
*PARAMETERS
* AR0 ORIGINAL STRING (W/SPACE FOR ADDITION)
* AR1 APPEND STRING
*RETURNS
* AR0 ORIGINAL STRING + APPEND STRING
*
STRCAT:
PUSH R0
PUSH R1
PUSH R2
PUSH R3
PUSH R4
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
;FIND WHERE AR0 ENDS
CLRI R0
SCLP0 CMPI -32,R0
BNE REGLP0
CLRI R0
NOP *AR0++
REGLP0
LDI *AR0,AR2
LSH R0,AR2
SUBI 8,R0
AND 0FFh,AR2
CMPI 0,AR2
BNZ SCLP0
ADDI 8,R0
;NOW APPEND THE DATA
CLRI R1
SCLP1 CMPI -32,R1
BNE REGLP1
CLRI R1
NOP *AR1++
REGLP1
LDI *AR1,AR3
LSH R1,AR3
SUBI 8,R1
AND 0FFh,AR3
LDI AR3,AR4
NEGI R0,R3
LSH R3,AR3
LDI *AR0,R4
OR AR3,R4
STI R4,*AR0
SUBI 8,R0
CMPI -32,R0
BNE REGLP2
CLRI R0
NOP *AR0++
STI R0,*AR0 ;IN THE CASE OF NULL ALIGNED
REGLP2
CMPI 0,AR4
BNZ SCLP1
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP R4
POP R3
POP R2
POP R1
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*FONTENT .macro PRECEDING,XSTART,XEND,YSTART,TRAIL
*
*
FIXEDFONT:
FONTENT 0,64,71,0,1 ;0
FONTENT 0,72,79,0,1 ;1
FONTENT 0,80,87,0,1 ;2
FONTENT 0,88,95,0,1 ;3
FONTENT 0,96,103,0,1 ;4
FONTENT 0,104,111,0,1 ;5
FONTENT 0,112,119,0,1 ;6
FONTENT 0,120,127,0,1 ;7
FONTENT 0,128,135,0,1 ;8
FONTENT 0,136,143,0,1 ;9
;special characters:
;ASCII actual
FONTENT 0,144,151,0,1 ; :
FONTENT 0,152,159,0,1 ; ;
FONTENT 0,160,167,0,1 ; <
FONTENT 0,48,55,0,1 ; = .
FONTENT 0,32,39,0,1 ; > ,
FONTENT 0,40,47,0,1 ; ? -
FONTENT 0,56,63,0,1 ; @ /
FONTENT 0,200,207,0,1 ;A
FONTENT 0,208,215,0,1
FONTENT 0,216,223,0,1
FONTENT 0,224,231,0,1 ;D
FONTENT 0,232,239,0,1 ;E
FONTENT 0,240,247,0,1 ;F
FONTENT 0,248,255,0,1 ;G
FONTENT 0,0,7,7,1 ;H
FONTENT 0,8,15,7,1
FONTENT 0,16,23,7,1
FONTENT 0,24,31,7,1
FONTENT 0,32,39,7,1 ;L
FONTENT 0,40,47,7,1 ;M
FONTENT 0,48,55,7,1 ;N
FONTENT 0,56,63,7,1 ;O
FONTENT 0,64,71,7,1 ;P
FONTENT 0,72,79,7,1 ;Q
FONTENT 0,80,87,7,1 ;R
FONTENT 0,88,95,7,1
FONTENT 0,96,103,7,1
FONTENT 0,104,111,7,1 ;U
FONTENT 0,112,119,7,1
FONTENT 0,120,127,7,1
FONTENT 0,128,135,7,1
FONTENT 0,136,143,7,1
FONTENT 0,144,151,7,1 ;Z
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*PARAMETERS
* AR2 PTR TO TEXT ENTRY
* R2 CHARACTER TO HIGHLIGHT
* R3 PALETTE
*
HIGHLIGHTN:
INC R2
CALL PUSHALL
LDI R2,IR0
LDI R3,IR1
LDI AR2,AR4
LDI *+AR4(TEXT_PTR),AR2
FIX *+AR4(TEXT_POSX),R2
FIX *+AR4(TEXT_POSY),R3
LDI *+AR4(TEXT_COLOR),R0
TSTB TXT_CENTER,R0
BZ NO_CENTERa
CALL STRLEN
RS 1,R0
SUBI R0,R2
B text_reta
NO_CENTERa
TSTB TXT_RIGHT,R0
BZ NO_RIGHTa
CALL STRLEN
SUBI R0,R2
;---->B text_reta
NO_RIGHTa
text_reta
CLRI BK
CLRI RS
OLPa INC BK
CMPI -32,RS
BNE REGLPa
CLRI RS
NOP *AR2++
REGLPa
LDI *AR2,AR0
LSH RS,AR0
SUBI 8,RS
AND 0FFh,AR0
CMPI 0,AR0
BZ oucXa
CMPI ' ',AR0
BEQ NXTCHARa
SUBI '0',AR0 ;the start of the font
CMPI IR0,BK
BEQ ALLREG
BGT oucXa
LDI AR0,AR1
MPYI FONTENT_SIZE,AR1
ADDI *+AR4(TEXT_ADDR),AR1
LDI *+AR1(FONTENT_XEND),R7
SUBI *+AR1(FONTENT_XSTART),R7
LDI *+AR1(FONTENT_PRE),R0
LS 16,R0
ASH -16,R0 ;MUST SIGN EXTEND THIS DUDE
ADDI R0,R7
LDI *+AR1(FONTENT_TRAIL),R0
ASH -16,R0
ADDI R0,R7
BU NXTCHARa
ALLREG
;NOW PLOT OUT THE CHARACTER
LDI *+AR4(TEXT_COLOR),R0
AND 0FFh,R0
BZ IBO1a
OR NZR,R0
IBO1a OR TM|ZS,R0
LDI TM|ZS|NZR|6,R0
STI R0,@_ACNTL
CLRI IR1 ;palette 0 ignore given
STI IR1,@_ACMAP ;SPECIAL PALETTE
LDI AR0,AR1
MPYI FONTENT_SIZE,AR1
ADDI *+AR4(TEXT_ADDR),AR1
LDI *+AR1(FONTENT_PRE),R0
LS 16,R0
ASH -16,R0 ;MUST SIGN EXTEND THIS DUDE
ADDI R0,R2
LDI *+AR1(FONTENT_XSTART),R0
LDI *+AR1(FONTENT_YSTART),R4
LS 8,R4
OR R4,R0
STI R0,@_AIVI+0
LDI *+AR4(TEXT_HEIGHT),R1
LS 8,R1
ADDI R0,R1
STI R1,@_AIVI+3
LDI *+AR1(FONTENT_XEND),R0
OR R4,R0
STI R0,@_AIVI+1
LDI *+AR4(TEXT_HEIGHT),R1
LS 8,R1
ADDI R0,R1
STI R1,@_AIVI+2
LDI *+AR4(TEXT_IMG),R0
STI R0,@_ADDRL
LDI *+AR1(FONTENT_XEND),R7
SUBI *+AR1(FONTENT_XSTART),R7
STI R2,@_ARPS+0
STI R2,@_ARPS+9 ;FP3X
ADDI R7,R2
STI R2,@_ARPS+3 ;FP1X
STI R2,@_ARPS+6 ;FP2X
SUBI R7,R2
STI R3,@_ARPS+1 ;FP0Y
STI R3,@_ARPS+4 ;FP1Y
ADDI *+AR4(TEXT_HEIGHT),R3
DEC R3
STI R3,@_ARPS+7 ;FP2Y
STI R3,@_ARPS+10 ;FP3Y
SUBI *+AR4(TEXT_HEIGHT),R3
INC R3
CALL _stuff_fpga
LDI *+AR1(FONTENT_TRAIL),R0
ASH -16,R0
ADDI R0,R7
NXTCHARa
ADDI R7,R2 ;to next X position
BU OLPa
oucXa
CALL POPALL
RETS
*----------------------------------------------------------------------------
.END