Advertisement
Kitomas

kit-8 library to draw pico-8 font text to vram

Apr 21st, 2023
2,403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;subscribe to me on yt plz :D
  2. ;https://www.youtube.com/@polybay
  3.  
  4. #ifndef _STD_TEXT8_ASM
  5. #define _STD_TEXT8_ASM
  6. ;std/math.asm
  7.  
  8. #include "pseudoOps.h"
  9. #include "l1_sub.h"
  10.  
  11. ;(231 = 0xe7 = default palette color white)
  12. #ifndef _T8C
  13.  #define _T8C 0xe7
  14. #endif
  15.  
  16. #ifdef TEXT8_USE_ALL
  17.  #ifndef TEXT8_USE_SPECIALS_LOW
  18.   #define TEXT8_USE_SPECIALS_LOW
  19.  #endif
  20.  #ifndef TEXT8_USE_SPECIALS_A
  21.   #define TEXT8_USE_SPECIALS_A
  22.  #endif
  23.  #ifndef TEXT8_USE_SPECIALS_B
  24.   #define TEXT8_USE_SPECIALS_B
  25.  #endif
  26.  #ifndef TEXT8_USE_DIGITS
  27.   #define TEXT8_USE_DIGITS
  28.  #endif
  29.  #ifndef TEXT8_USE_CASE_UPPER
  30.   #define TEXT8_USE_CASE_UPPER
  31.  #endif
  32.  #ifndef TEXT8_USE_CASE_LOWER
  33.   #define TEXT8_USE_CASE_LOWER
  34.  #endif
  35. #endif
  36.  
  37.  
  38. :_text8_char_lookup:
  39. !16  _text8sp,_text8sp,_text8sp,_text8sp    ;00,01,02,03:NUL SOH STX ETX
  40. !16  _text8?_,_text805,_text806,_text807    ;04,05,06,07:EOT ENQ ACK BEL
  41. !16  _text808,_text8sp,_text8sp,_text80B    ;08,09,0A,0B: BS TAB  LF  VT
  42. !16  _text80C,_text80D,_text80E,_text80F    ;0C,0D,0E,0F: FF  CR  SO  SI
  43. !16  _text810,_text811,_text812,_text813    ;10,11,12,13:DLE DC1 DC2 DC3
  44. !16  _text814,_text815,_text816,_text817    ;14,15,16,17:DC4 NAK SYN ETB
  45. !16  _text818,_text819,_text81A,_text81B    ;18,19,1A,1B:CAN  EM SUB ESC
  46. !16  _text81C,_text81D,_text81E,_text81F    ;1C,1D,1E,1F: FS  GS  RS  US
  47. ;
  48. !16  _text8sp,_text8_!,_text8dq,_text8_#    ;20,21,22,23:" "  !   "   #
  49. !16  _text8_$,_text8_%,_text8_&,_text8ap    ;24,25,26,27: $   %   &   '
  50. !16  _text8_(,_text8_),_text8_*,_text8_+    ;28,29,2A,2B: (   )   *   +
  51. !16  _text8cm,_text8_-,_text8_.,_text8_/    ;2C,2D,2E,2F: ,   -   .   /
  52. !16  _text8_0,_text8_1,_text8_2,_text8_3    ;30,31,32,33: 0   1   2   3
  53. !16  _text8_4,_text8_5,_text8_6,_text8_7    ;34,35,36,37: 4   5   6   7
  54. !16  _text8_8,_text8_9,_text8cl,_text8sc    ;38,39,3A,3B: 8   9   :   ;
  55. !16  _text8_<,_text8_=,_text8_>,_text8_?    ;3C,3D,3E,3F: <   =   >   ?
  56. ;
  57. !16  _text8at,_text8_A,_text8_B,_text8_C    ;40,41,42,43: @   A   B   C
  58. !16  _text8_D,_text8_E,_text8_F,_text8_G    ;44,45,46,47: D   E   F   G
  59. !16  _text8_H,_text8_I,_text8_J,_text8_K    ;48,49,4A,4B: H   I   J   K
  60. !16  _text8_L,_text8_M,_text8_N,_text8_O    ;4C,4D,4E,4F: L   M   N   O
  61. !16  _text8_P,_text8_Q,_text8_R,_text8_S    ;50,51,52,53: P   Q   R   S
  62. !16  _text8_T,_text8_U,_text8_V,_text8_W    ;54,55,56,57: T   U   V   W
  63. !16  _text8_X,_text8_Y,_text8_Z,_text8_[    ;58,59,5A,5B: X   Y   Z   [
  64. !16  _text8_\,_text8_],_text8_^,_text8__    ;5C,5D,5E,5F: \   ]   ^   _
  65. ;
  66. !16  _text8_`,_text8_a,_text8_b,_text8_c    ;60,61,62,63: `   a   b   c
  67. !16  _text8_d,_text8_e,_text8_f,_text8_g    ;64,65,66,67: d   e   f   g
  68. !16  _text8_h,_text8_i,_text8_j,_text8_k    ;68,69,6A,6B: h   i   j   k
  69. !16  _text8_l,_text8_m,_text8_n,_text8_o    ;6C,6D,6E,6F: l   m   n   o
  70. !16  _text8_p,_text8_q,_text8_r,_text8_s    ;70,71,72,73: p   q   r   s
  71. !16  _text8_t,_text8_u,_text8_v,_text8_w    ;74,75,76,77: t   u   v   w
  72. !16  _text8_x,_text8_y,_text8_z,_text8_{    ;78,79,7A,7B: x   y   z   {
  73. !16  _text8_|,_text8_},_text8_~,_text8?_    ;7C,7D,7E,7F: |   }   ~  DEL
  74. ;_text8_char_lookup;
  75.  
  76. :_text8_advance_lookup:
  77. #ifndef TEXT8_MONOSPACED
  78.    ;  NYP NXP ░ ▒ ▓ █TB NL
  79. !8  0,0,0,0,0,3,3,3,3,8,0,3,3,3,3,3  ;0
  80.  
  81. !8  4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3  ;1
  82.    ;sp! " # $ % & ' ( ) * + , - . /
  83. !8  4,2,4,4,4,4,4,2,3,3,4,4,3,4,4,4  ;2
  84.    ;0 1 2 3 4 5 6 7 8 9 : ; < = > ?
  85. !8  4,4,4,4,4,4,4,4,4,4,2,3,4,4,4,4  ;3
  86.    ;@ A B C D E F G H I J K L M N O
  87. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4  ;4
  88.    ;P Q R S T U V W X Y Z [ \ ] ^ _
  89. !8  4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4  ;5
  90.    ;` a b c d e f g h i j k l m n o
  91. !8  3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4  ;6
  92.    ;p q r s t u v w x y z { | } ~ missing char
  93. !8  4,4,4,4,4,4,4,4,4,4,4,4,2,4,4,4  ;7
  94.    ;0 1 2 3 4 5 6 7 8 9 A B C D E F
  95. #else
  96. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  97. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  98. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  99. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  100. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  101. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  102. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  103. !8  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
  104. #endif
  105. ;_text8_advance_lookup;
  106.  
  107. ;you can basically do anything for chars > 4 (except \n and \t)
  108. ;(this is because 0 is null terminator, and 1->4 are control codes)
  109. #ifdef TEXT8_USE_SPECIALS_LOW
  110. :_text8_SPECIALS_LOW:
  111. ;:_text800: NULL (do not use)
  112. ;:_text801: -x (do not use)
  113. ;:_text802: +x (do not use)
  114. ;:_text803: -y (do not use)
  115. ;:_text804: +y (do not use)
  116. :_text805: !8  0,0, 3,5
  117.     !8  _T8C,0x00,0x00
  118.     !8  0x00,0x00,0x00
  119.     !8  0x00,0x00,_T8C
  120.     !8  0x00,0x00,0x00
  121.     !8  _T8C,0x00,0x00
  122. :_text806: !8  0,0, 3,5
  123.     !8  _T8C,0x00,0x00
  124.     !8  0x00,0x00,_T8C
  125.     !8  _T8C,0x00,0x00
  126.     !8  0x00,0x00,_T8C
  127.     !8  _T8C,0x00,0x00
  128. :_text807: !8  0,0, 3,5
  129.     !8  _T8C,0x00,_T8C
  130.     !8  0x00,_T8C,0x00
  131.     !8  _T8C,0x00,_T8C
  132.     !8  0x00,_T8C,0x00
  133.     !8  _T8C,0x00,_T8C
  134. :_text808: !8  0,0, 3,5
  135.     !8  _T8C,_T8C,_T8C
  136.     !8  _T8C,_T8C,_T8C
  137.     !8  _T8C,_T8C,_T8C
  138.     !8  _T8C,_T8C,_T8C
  139.     !8  _T8C,_T8C,_T8C
  140. ;:_text809: \t (do not use)
  141. ;:_text80A: \n (do not use)
  142. :_text80B:
  143. :_text80C:
  144. :_text80D:
  145. :_text80E:
  146. :_text80F:
  147. :_text810:
  148. :_text811:
  149. :_text812:
  150. :_text813:
  151. :_text814:
  152. :_text815:
  153. :_text816:
  154. :_text817:
  155. :_text818:
  156. :_text819:
  157. :_text81A:
  158. :_text81B:
  159. :_text81C:
  160. :_text81D:
  161. :_text81E:
  162. :_text81F:
  163. #endif
  164. #ifdef TEXT8_USE_SPECIALS_A
  165. :_text8_SPECIALS_A:
  166. :_text8sp: !8  0,0, 1,1 ; " "
  167.     !8  0x00;0x00,0x00
  168.     ;!8 0x00,0x00,0x00
  169.     ;!8 0x00,0x00,0x00
  170.     ;!8 0x00,0x00,0x00
  171.     ;!8 0x00,0x00,0x00
  172. :_text8_!: !8  0,0, 1,5
  173.     !8  _T8C;0x00,0x00
  174.     !8  _T8C;0x00,0x00
  175.     !8  _T8C;0x00,0x00
  176.     !8  0x00;0x00,0x00
  177.     !8  _T8C;0x00,0x00
  178. :_text8dq: !8  0,0, 3,2 ; "\""
  179.     !8  _T8C,0x00,_T8C
  180.     !8  _T8C,0x00,_T8C
  181.     ;!8 0x00,0x00,0x00
  182.     ;!8 0x00,0x00,0x00
  183.     ;!8 0x00,0x00,0x00
  184. :_text8_#: !8  0,0, 3,5
  185.     !8  _T8C,0x00,_T8C
  186.     !8  _T8C,_T8C,_T8C
  187.     !8  _T8C,0x00,_T8C
  188.     !8  _T8C,_T8C,_T8C
  189.     !8  _T8C,0x00,_T8C
  190. :_text8_$: !8  0,0, 3,5
  191.     !8  _T8C,_T8C,_T8C
  192.     !8  _T8C,_T8C,0x00
  193.     !8  0x00,_T8C,_T8C
  194.     !8  _T8C,_T8C,_T8C
  195.     !8  0x00,_T8C,0x00
  196. :_text8_%: !8  0,0, 3,5
  197.     !8  _T8C,0x00,_T8C
  198.     !8  0x00,0x00,_T8C
  199.     !8  0x00,_T8C,0x00
  200.     !8  _T8C,0x00,0x00
  201.     !8  _T8C,0x00,_T8C
  202. :_text8_&: !8  0,0, 3,5
  203.     !8  _T8C,_T8C,0x00
  204.     !8  _T8C,_T8C,0x00
  205.     !8  _T8C,_T8C,0x00
  206.     !8  _T8C,0x00,_T8C
  207.     !8  _T8C,_T8C,_T8C
  208. :_text8ap: !8  0,0, 1,2 ; "'"
  209.     !8  _T8C;0x00,0x00
  210.     !8  _T8C;0x00,0x00
  211.     ;!8 0x00,0x00,0x00
  212.     ;!8 0x00,0x00,0x00
  213.     ;!8 0x00,0x00,0x00
  214. :_text8_(: !8  0,0, 2,5
  215.     !8  0x00,_T8C;0x00
  216.     !8  _T8C,0x00;0x00
  217.     !8  _T8C,0x00;0x00
  218.     !8  _T8C,0x00;0x00
  219.     !8  0x00,_T8C;0x00
  220. :_text8_): !8  0,0, 2,5
  221.     !8  _T8C,0x00;0x00
  222.     !8  0x00,_T8C;0x00
  223.     !8  0x00,_T8C;0x00
  224.     !8  0x00,_T8C;0x00
  225.     !8  _T8C,0x00;0x00
  226. :_text8cm: !8  0,0, 2,5 ; ","
  227.     !8  0x00,0x00;0x00
  228.     !8  0x00,0x00;0x00
  229.     !8  0x00,0x00;0x00
  230.     !8  0x00,_T8C;0x00
  231.     !8  _T8C,0x00;0x00
  232. :_text8_.: !8  0,0, 1,5
  233.     !8  0x00;0x00,0x00
  234.     !8  0x00;0x00,0x00
  235.     !8  0x00;0x00,0x00
  236.     !8  0x00;0x00,0x00
  237.     !8  _T8C;0x00,0x00
  238. :_text8_/: !8  0,0, 3,5
  239.     !8  0x00,0x00,_T8C
  240.     !8  0x00,_T8C,0x00
  241.     !8  0x00,_T8C,0x00
  242.     !8  0x00,_T8C,0x00
  243.     !8  _T8C,0x00,0x00
  244. :_text8cl: !8  0,0, 1,4 ; ":"
  245.     !8  0x00;0x00,0x00
  246.     !8  _T8C;0x00,0x00
  247.     !8  0x00;0x00,0x00
  248.     !8  _T8C;0x00,0x00
  249.     ;!8 0x00,0x00,0x00
  250. :_text8sc: !8  0,0, 2,5 ; ";"
  251.     !8  0x00,0x00;0x00
  252.     !8  0x00,_T8C;0x00
  253.     !8  0x00,0x00;0x00
  254.     !8  0x00,_T8C;0x00
  255.     !8  _T8C,0x00;0x00
  256. :_text8_?: !8  0,0, 3,5
  257.     !8  _T8C,_T8C,_T8C
  258.     !8  0x00,0x00,_T8C
  259.     !8  0x00,_T8C,_T8C
  260.     !8  0x00,0x00,0x00
  261.     !8  0x00,_T8C,0x00
  262. #endif
  263. #ifdef TEXT8_USE_SPECIALS_B
  264. :_text8_SPECIALS_B:
  265. :_text8_*: !8  0,0, 3,5
  266.     !8  _T8C,0x00,_T8C
  267.     !8  0x00,_T8C,0x00
  268.     !8  _T8C,_T8C,_T8C
  269.     !8  0x00,_T8C,0x00
  270.     !8  _T8C,0x00,_T8C
  271. :_text8_+: !8  0,0, 3,4
  272.     !8  0x00,0x00,0x00
  273.     !8  0x00,_T8C,0x00
  274.     !8  _T8C,_T8C,_T8C
  275.     !8  0x00,_T8C,0x00
  276.     ;!8 0x00,0x00,0x00
  277. :_text8_-: !8  0,0, 3,3
  278.     !8  0x00,0x00,0x00
  279.     !8  0x00,0x00,0x00
  280.     !8  _T8C,_T8C,_T8C
  281.     ;!8 0x00,0x00,0x00
  282.     ;!8 0x00,0x00,0x00
  283. :_text8_<: !8  0,0, 3,5
  284.     !8  0x00,0x00,_T8C
  285.     !8  0x00,_T8C,0x00
  286.     !8  _T8C,0x00,0x00
  287.     !8  0x00,_T8C,0x00
  288.     !8  0x00,0x00,_T8C
  289. :_text8_=: !8  0,0, 3,4
  290.     !8  0x00,0x00,0x00
  291.     !8  _T8C,_T8C,_T8C
  292.     !8  0x00,0x00,0x00
  293.     !8  _T8C,_T8C,_T8C
  294.     ;!8 0x00,0x00,0x00
  295. :_text8_>: !8  0,0, 3,5
  296.     !8  _T8C,0x00,0x00
  297.     !8  0x00,_T8C,0x00
  298.     !8  0x00,0x00,_T8C
  299.     !8  0x00,_T8C,0x00
  300.     !8  _T8C,0x00,0x00
  301. :_text8at: !8  0,0, 3,5 ; "@"
  302.     !8  0x00,_T8C,0x00
  303.     !8  _T8C,0x00,_T8C
  304.     !8  _T8C,0x00,_T8C
  305.     !8  _T8C,0x00,0x00
  306.     !8  0x00,_T8C,_T8C
  307. :_text8_[: !8  0,0, 2,5
  308.     !8  _T8C,_T8C;0x00
  309.     !8  _T8C,0x00;0x00
  310.     !8  _T8C,0x00;0x00
  311.     !8  _T8C,0x00;0x00
  312.     !8  _T8C,_T8C;0x00
  313. :_text8_\: !8  0,0, 3,5
  314.     !8  _T8C,0x00,0x00
  315.     !8  0x00,_T8C,0x00
  316.     !8  0x00,_T8C,0x00
  317.     !8  0x00,_T8C,0x00
  318.     !8  0x00,0x00,_T8C
  319. :_text8_]: !8  0,0, 2,5
  320.     !8  _T8C,_T8C;0x00
  321.     !8  0x00,_T8C;0x00
  322.     !8  0x00,_T8C;0x00
  323.     !8  0x00,_T8C;0x00
  324.     !8  _T8C,_T8C;0x00
  325. :_text8_^: !8  0,0, 3,2
  326.     !8  0x00,_T8C,0x00
  327.     !8  _T8C,0x00,_T8C
  328.     ;!8 0x00,0x00,0x00
  329.     ;!8 0x00,0x00,0x00
  330.     ;!8 0x00,0x00,0x00
  331. :_text8__: !8  0,0, 3,5
  332.     !8  0x00,0x00,0x00
  333.     !8  0x00,0x00,0x00
  334.     !8  0x00,0x00,0x00
  335.     !8  0x00,0x00,0x00
  336.     !8  _T8C,_T8C,_T8C
  337. :_text8_`: !8  0,0, 2,2
  338.     !8  _T8C,0x00;0x00
  339.     !8  0x00,_T8C;0x00
  340.     ;!8 0x00,0x00,0x00
  341.     ;!8 0x00,0x00,0x00
  342.     ;!8 0x00,0x00,0x00
  343. :_text8_{: !8  0,0, 3,5
  344.     !8  0x00,_T8C,_T8C
  345.     !8  0x00,_T8C,0x00
  346.     !8  _T8C,_T8C,0x00
  347.     !8  0x00,_T8C,0x00
  348.     !8  0x00,_T8C,_T8C
  349. :_text8_|: !8  0,0, 1,5
  350.     !8  _T8C;0x00,0x00
  351.     !8  _T8C;0x00,0x00
  352.     !8  _T8C;0x00,0x00
  353.     !8  _T8C;0x00,0x00
  354.     !8  _T8C;0x00,0x00
  355. :_text8_}: !8  0,0, 3,5
  356.     !8  _T8C,_T8C,0x00
  357.     !8  0x00,_T8C,0x00
  358.     !8  0x00,_T8C,_T8C
  359.     !8  0x00,_T8C,0x00
  360.     !8  _T8C,_T8C,0x00
  361. :_text8_~: !8  0,0, 3,4
  362.     !8  0x00,0x00,0x00
  363.     !8  0x00,0x00,_T8C
  364.     !8  _T8C,_T8C,_T8C
  365.     !8  _T8C,0x00,0x00
  366.     ;!8 0x00,0x00,0x00
  367. #endif
  368. #ifdef TEXT8_USE_DIGITS
  369. :_text8_DIGITS:
  370. :_text8_0: !8  0,0, 3,5
  371.     !8  _T8C,_T8C,_T8C
  372.     !8  _T8C,0x00,_T8C
  373.     !8  _T8C,0x00,_T8C
  374.     !8  _T8C,0x00,_T8C
  375.     !8  _T8C,_T8C,_T8C
  376. :_text8_1: !8  0,0, 3,5
  377.     !8  _T8C,_T8C,0x00
  378.     !8  0x00,_T8C,0x00
  379.     !8  0x00,_T8C,0x00
  380.     !8  0x00,_T8C,0x00
  381.     !8  _T8C,_T8C,_T8C
  382. :_text8_2: !8  0,0, 3,5
  383.     !8  _T8C,_T8C,_T8C
  384.     !8  0x00,0x00,_T8C
  385.     !8  _T8C,_T8C,_T8C
  386.     !8  _T8C,0x00,0x00
  387.     !8  _T8C,_T8C,_T8C
  388. :_text8_3: !8  0,0, 3,5
  389.     !8  _T8C,_T8C,_T8C
  390.     !8  0x00,0x00,_T8C
  391.     !8  0x00,_T8C,_T8C
  392.     !8  0x00,0x00,_T8C
  393.     !8  _T8C,_T8C,_T8C
  394. :_text8_4: !8  0,0, 3,5
  395.     !8  _T8C,0x00,_T8C
  396.     !8  _T8C,0x00,_T8C
  397.     !8  _T8C,_T8C,_T8C
  398.     !8  0x00,0x00,_T8C
  399.     !8  0x00,0x00,_T8C
  400. :_text8_5: !8  0,0, 3,5
  401.     !8  _T8C,_T8C,_T8C
  402.     !8  _T8C,0x00,0x00
  403.     !8  _T8C,_T8C,_T8C
  404.     !8  0x00,0x00,_T8C
  405.     !8  _T8C,_T8C,_T8C
  406. :_text8_6: !8  0,0, 3,5
  407.     !8  _T8C,0x00,0x00
  408.     !8  _T8C,0x00,0x00
  409.     !8  _T8C,_T8C,_T8C
  410.     !8  _T8C,0x00,_T8C
  411.     !8  _T8C,_T8C,_T8C
  412. :_text8_7: !8  0,0, 3,5
  413.     !8  _T8C,_T8C,_T8C
  414.     !8  0x00,0x00,_T8C
  415.     !8  0x00,0x00,_T8C
  416.     !8  0x00,0x00,_T8C
  417.     !8  0x00,0x00,_T8C
  418. :_text8_8: !8  0,0, 3,5
  419.     !8  _T8C,_T8C,_T8C
  420.     !8  _T8C,0x00,_T8C
  421.     !8  _T8C,_T8C,_T8C
  422.     !8  _T8C,0x00,_T8C
  423.     !8  _T8C,_T8C,_T8C
  424. :_text8_9: !8  0,0, 3,5
  425.     !8  _T8C,_T8C,_T8C
  426.     !8  _T8C,0x00,_T8C
  427.     !8  _T8C,_T8C,_T8C
  428.     !8  0x00,0x00,_T8C
  429.     !8  0x00,0x00,_T8C
  430. #endif
  431. #ifdef TEXT8_USE_CASE_UPPER
  432. :_text8_CASE_UPPER:
  433. :_text8_A:  !8  0,0, 3,5
  434.     !8  _T8C,_T8C,_T8C
  435.     !8  _T8C,0x00,_T8C
  436.     !8  _T8C,_T8C,_T8C
  437.     !8  _T8C,0x00,_T8C
  438.     !8  _T8C,0x00,_T8C
  439. :_text8_B:  !8  0,0, 3,5
  440.     !8  _T8C,_T8C,_T8C
  441.     !8  _T8C,0x00,_T8C
  442.     !8  _T8C,_T8C,0x00
  443.     !8  _T8C,0x00,_T8C
  444.     !8  _T8C,_T8C,_T8C
  445. :_text8_C:  !8  0,0, 3,5
  446.     !8  0x00,_T8C,_T8C
  447.     !8  _T8C,0x00,0x00
  448.     !8  _T8C,0x00,0x00
  449.     !8  _T8C,0x00,0x00
  450.     !8  0x00,_T8C,_T8C
  451. :_text8_D:  !8  0,0, 3,5
  452.     !8  _T8C,_T8C,0x00
  453.     !8  _T8C,0x00,_T8C
  454.     !8  _T8C,0x00,_T8C
  455.     !8  _T8C,0x00,_T8C
  456.     !8  _T8C,_T8C,_T8C
  457. :_text8_E:  !8  0,0, 3,5
  458.     !8  _T8C,_T8C,_T8C
  459.     !8  _T8C,0x00,0x00
  460.     !8  _T8C,_T8C,0x00
  461.     !8  _T8C,0x00,0x00
  462.     !8  _T8C,_T8C,_T8C
  463. :_text8_F:  !8  0,0, 3,5
  464.     !8  _T8C,_T8C,_T8C
  465.     !8  _T8C,0x00,0x00
  466.     !8  _T8C,_T8C,0x00
  467.     !8  _T8C,0x00,0x00
  468.     !8  _T8C,0x00,0x00
  469. :_text8_G:  !8  0,0, 3,5
  470.     !8  0x00,_T8C,_T8C
  471.     !8  _T8C,0x00,0x00
  472.     !8  _T8C,0x00,0x00
  473.     !8  _T8C,0x00,_T8C
  474.     !8  _T8C,_T8C,_T8C
  475. :_text8_H:  !8  0,0, 3,5
  476.     !8  _T8C,0x00,_T8C
  477.     !8  _T8C,0x00,_T8C
  478.     !8  _T8C,_T8C,_T8C
  479.     !8  _T8C,0x00,_T8C
  480.     !8  _T8C,0x00,_T8C
  481. :_text8_I:  !8  0,0, 3,5
  482.     !8  _T8C,_T8C,_T8C
  483.     !8  0x00,_T8C,0x00
  484.     !8  0x00,_T8C,0x00
  485.     !8  0x00,_T8C,0x00
  486.     !8  _T8C,_T8C,_T8C
  487. :_text8_J:  !8  0,0, 3,5
  488.     !8  _T8C,_T8C,_T8C
  489.     !8  0x00,_T8C,0x00
  490.     !8  0x00,_T8C,0x00
  491.     !8  0x00,_T8C,0x00
  492.     !8  _T8C,_T8C,0x00
  493. :_text8_K:  !8  0,0, 3,5
  494.     !8  _T8C,0x00,_T8C
  495.     !8  _T8C,0x00,_T8C
  496.     !8  _T8C,_T8C,0x00
  497.     !8  _T8C,0x00,_T8C
  498.     !8  _T8C,0x00,_T8C
  499. :_text8_L:  !8  0,0, 3,5
  500.     !8  _T8C,0x00,0x00
  501.     !8  _T8C,0x00,0x00
  502.     !8  _T8C,0x00,0x00
  503.     !8  _T8C,0x00,0x00
  504.     !8  _T8C,_T8C,_T8C
  505. :_text8_M:  !8  0,0, 3,5
  506.     !8  _T8C,_T8C,_T8C
  507.     !8  _T8C,_T8C,_T8C
  508.     !8  _T8C,0x00,_T8C
  509.     !8  _T8C,0x00,_T8C
  510.     !8  _T8C,0x00,_T8C
  511. :_text8_N:  !8  0,0, 3,5
  512.     !8  _T8C,_T8C,0x00
  513.     !8  _T8C,0x00,_T8C
  514.     !8  _T8C,0x00,_T8C
  515.     !8  _T8C,0x00,_T8C
  516.     !8  _T8C,0x00,_T8C
  517. :_text8_O:  !8  0,0, 3,5
  518.     !8  0x00,_T8C,_T8C
  519.     !8  _T8C,0x00,_T8C
  520.     !8  _T8C,0x00,_T8C
  521.     !8  _T8C,0x00,_T8C
  522.     !8  _T8C,_T8C,0x00
  523. :_text8_P:  !8  0,0, 3,5
  524.     !8  _T8C,_T8C,_T8C
  525.     !8  _T8C,0x00,_T8C
  526.     !8  _T8C,_T8C,_T8C
  527.     !8  _T8C,0x00,0x00
  528.     !8  _T8C,0x00,0x00
  529. :_text8_Q:  !8  0,0, 3,5
  530.     !8  0x00,_T8C,0x00
  531.     !8  _T8C,0x00,_T8C
  532.     !8  _T8C,0x00,_T8C
  533.     !8  _T8C,_T8C,0x00
  534.     !8  0x00,_T8C,_T8C
  535. :_text8_R:  !8  0,0, 3,5
  536.     !8  _T8C,_T8C,_T8C
  537.     !8  _T8C,0x00,_T8C
  538.     !8  _T8C,_T8C,0x00
  539.     !8  _T8C,0x00,_T8C
  540.     !8  _T8C,0x00,_T8C
  541. :_text8_S:  !8  0,0, 3,5
  542.     !8  0x00,_T8C,_T8C
  543.     !8  _T8C,0x00,0x00
  544.     !8  _T8C,_T8C,_T8C
  545.     !8  0x00,0x00,_T8C
  546.     !8  _T8C,_T8C,0x00
  547. :_text8_T:  !8  0,0, 3,5
  548.     !8  _T8C,_T8C,_T8C
  549.     !8  0x00,_T8C,0x00
  550.     !8  0x00,_T8C,0x00
  551.     !8  0x00,_T8C,0x00
  552.     !8  0x00,_T8C,0x00
  553. :_text8_U:  !8  0,0, 3,5
  554.     !8  _T8C,0x00,_T8C
  555.     !8  _T8C,0x00,_T8C
  556.     !8  _T8C,0x00,_T8C
  557.     !8  _T8C,0x00,_T8C
  558.     !8  0x00,_T8C,_T8C
  559. :_text8_V:  !8  0,0, 3,5
  560.     !8  _T8C,0x00,_T8C
  561.     !8  _T8C,0x00,_T8C
  562.     !8  _T8C,0x00,_T8C
  563.     !8  _T8C,_T8C,_T8C
  564.     !8  0x00,_T8C,0x00
  565. :_text8_W:  !8  0,0, 3,5
  566.     !8  _T8C,0x00,_T8C
  567.     !8  _T8C,0x00,_T8C
  568.     !8  _T8C,0x00,_T8C
  569.     !8  _T8C,_T8C,_T8C
  570.     !8  _T8C,_T8C,_T8C
  571. :_text8_X:  !8  0,0, 3,5
  572.     !8  _T8C,0x00,_T8C
  573.     !8  _T8C,0x00,_T8C
  574.     !8  0x00,_T8C,0x00
  575.     !8  _T8C,0x00,_T8C
  576.     !8  _T8C,0x00,_T8C
  577. :_text8_Y:  !8  0,0, 3,5
  578.     !8  _T8C,0x00,_T8C
  579.     !8  _T8C,0x00,_T8C
  580.     !8  _T8C,_T8C,_T8C
  581.     !8  0x00,0x00,_T8C
  582.     !8  _T8C,_T8C,_T8C
  583. :_text8_Z:  !8  0,0, 3,5
  584.     !8  _T8C,_T8C,_T8C
  585.     !8  0x00,0x00,_T8C
  586.     !8  0x00,_T8C,0x00
  587.     !8  _T8C,0x00,0x00
  588.     !8  _T8C,_T8C,_T8C
  589. #endif
  590. #ifdef TEXT8_USE_CASE_LOWER
  591. :_text8_CASE_LOWER:
  592. :_text8_a: !8  0,0, 3,5
  593.     !8  0x00,0x00,0x00
  594.     !8  _T8C,_T8C,_T8C
  595.     !8  _T8C,0x00,_T8C
  596.     !8  _T8C,_T8C,_T8C
  597.     !8  _T8C,0x00,_T8C
  598. :_text8_b: !8  0,0, 3,5
  599.     !8  0x00,0x00,0x00
  600.     !8  _T8C,_T8C,0x00
  601.     !8  _T8C,_T8C,0x00
  602.     !8  _T8C,0x00,_T8C
  603.     !8  _T8C,_T8C,_T8C
  604. :_text8_c: !8  0,0, 3,5
  605.     !8  0x00,0x00,0x00
  606.     !8  _T8C,_T8C,_T8C
  607.     !8  _T8C,0x00,0x00
  608.     !8  _T8C,0x00,0x00
  609.     !8  _T8C,_T8C,_T8C
  610. :_text8_d: !8  0,0, 3,5
  611.     !8  0x00,0x00,0x00
  612.     !8  _T8C,_T8C,0x00
  613.     !8  _T8C,0x00,_T8C
  614.     !8  _T8C,0x00,_T8C
  615.     !8  _T8C,_T8C,0x00
  616. :_text8_e: !8  0,0, 3,5
  617.     !8  0x00,0x00,0x00
  618.     !8  _T8C,_T8C,_T8C
  619.     !8  _T8C,_T8C,0x00
  620.     !8  _T8C,0x00,0x00
  621.     !8  _T8C,_T8C,_T8C
  622. :_text8_f: !8  0,0, 3,5
  623.     !8  0x00,0x00,0x00
  624.     !8  _T8C,_T8C,_T8C
  625.     !8  _T8C,_T8C,0x00
  626.     !8  _T8C,0x00,0x00
  627.     !8  _T8C,0x00,0x00
  628. :_text8_g: !8  0,0, 3,5
  629.     !8  0x00,0x00,0x00
  630.     !8  _T8C,_T8C,_T8C
  631.     !8  _T8C,0x00,0x00
  632.     !8  _T8C,0x00,_T8C
  633.     !8  _T8C,_T8C,_T8C
  634. :_text8_h: !8  0,0, 3,5
  635.     !8  0x00,0x00,0x00
  636.     !8  _T8C,0x00,_T8C
  637.     !8  _T8C,0x00,_T8C
  638.     !8  _T8C,_T8C,_T8C
  639.     !8  _T8C,0x00,_T8C
  640. :_text8_i: !8  0,0, 3,5
  641.     !8  0x00,0x00,0x00
  642.     !8  _T8C,_T8C,_T8C
  643.     !8  0x00,_T8C,0x00
  644.     !8  0x00,_T8C,0x00
  645.     !8  _T8C,_T8C,_T8C
  646. :_text8_j: !8  0,0, 3,5
  647.     !8  0x00,0x00,0x00
  648.     !8  _T8C,_T8C,_T8C
  649.     !8  0x00,_T8C,0x00
  650.     !8  0x00,_T8C,0x00
  651.     !8  _T8C,_T8C,0x00
  652. :_text8_k: !8  0,0, 3,5
  653.     !8  0x00,0x00,0x00
  654.     !8  _T8C,0x00,_T8C
  655.     !8  _T8C,_T8C,0x00
  656.     !8  _T8C,0x00,_T8C
  657.     !8  _T8C,0x00,_T8C
  658. :_text8_l: !8  0,0, 3,5
  659.     !8  0x00,0x00,0x00
  660.     !8  _T8C,0x00,0x00
  661.     !8  _T8C,0x00,0x00
  662.     !8  _T8C,0x00,0x00
  663.     !8  _T8C,_T8C,_T8C
  664. :_text8_m: !8  0,0, 3,5
  665.     !8  0x00,0x00,0x00
  666.     !8  _T8C,_T8C,_T8C
  667.     !8  _T8C,_T8C,_T8C
  668.     !8  _T8C,0x00,_T8C
  669.     !8  _T8C,0x00,_T8C
  670. :_text8_n: !8  0,0, 3,5
  671.     !8  0x00,0x00,0x00
  672.     !8  _T8C,_T8C,0x00
  673.     !8  _T8C,0x00,_T8C
  674.     !8  _T8C,0x00,_T8C
  675.     !8  _T8C,0x00,_T8C
  676. :_text8_o: !8  0,0, 3,5
  677.     !8  0x00,0x00,0x00
  678.     !8  0x00,_T8C,_T8C
  679.     !8  _T8C,0x00,_T8C
  680.     !8  _T8C,0x00,_T8C
  681.     !8  _T8C,_T8C,0x00
  682. :_text8_p: !8  0,0, 3,5
  683.     !8  0x00,0x00,0x00
  684.     !8  _T8C,_T8C,_T8C
  685.     !8  _T8C,0x00,_T8C
  686.     !8  _T8C,_T8C,_T8C
  687.     !8  _T8C,0x00,0x00
  688. :_text8_q: !8  0,0, 3,5
  689.     !8  0x00,0x00,0x00
  690.     !8  0x00,_T8C,0x00
  691.     !8  _T8C,0x00,_T8C
  692.     !8  _T8C,_T8C,0x00
  693.     !8  0x00,_T8C,_T8C
  694. :_text8_r: !8  0,0, 3,5
  695.     !8  0x00,0x00,0x00
  696.     !8  _T8C,_T8C,_T8C
  697.     !8  _T8C,0x00,_T8C
  698.     !8  _T8C,_T8C,0x00
  699.     !8  _T8C,0x00,_T8C
  700. :_text8_s: !8  0,0, 3,5
  701.     !8  0x00,0x00,0x00
  702.     !8  0x00,_T8C,_T8C
  703.     !8  _T8C,0x00,0x00
  704.     !8  0x00,0x00,_T8C
  705.     !8  _T8C,_T8C,0x00
  706. :_text8_t: !8  0,0, 3,5
  707.     !8  0x00,0x00,0x00
  708.     !8  _T8C,_T8C,_T8C
  709.     !8  0x00,_T8C,0x00
  710.     !8  0x00,_T8C,0x00
  711.     !8  0x00,_T8C,0x00
  712. :_text8_u: !8  0,0, 3,5
  713.     !8  0x00,0x00,0x00
  714.     !8  _T8C,0x00,_T8C
  715.     !8  _T8C,0x00,_T8C
  716.     !8  _T8C,0x00,_T8C
  717.     !8  0x00,_T8C,_T8C
  718. :_text8_v: !8  0,0, 3,5
  719.     !8  0x00,0x00,0x00
  720.     !8  _T8C,0x00,_T8C
  721.     !8  _T8C,0x00,_T8C
  722.     !8  _T8C,_T8C,_T8C
  723.     !8  0x00,_T8C,0x00
  724. :_text8_w: !8  0,0, 3,5
  725.     !8  0x00,0x00,0x00
  726.     !8  _T8C,0x00,_T8C
  727.     !8  _T8C,0x00,_T8C
  728.     !8  _T8C,_T8C,_T8C
  729.     !8  _T8C,_T8C,_T8C
  730. :_text8_x: !8  0,0, 3,5
  731.     !8  0x00,0x00,0x00
  732.     !8  _T8C,0x00,_T8C
  733.     !8  0x00,_T8C,0x00
  734.     !8  _T8C,0x00,_T8C
  735.     !8  _T8C,0x00,_T8C
  736. :_text8_y: !8  0,0, 3,5
  737.     !8  0x00,0x00,0x00
  738.     !8  _T8C,0x00,_T8C
  739.     !8  _T8C,_T8C,_T8C
  740.     !8  0x00,0x00,_T8C
  741.     !8  _T8C,_T8C,_T8C
  742. :_text8_z: !8  0,0, 3,5
  743.     !8  0x00,0x00,0x00
  744.     !8  _T8C,_T8C,_T8C
  745.     !8  0x00,0x00,_T8C
  746.     !8  _T8C,0x00,0x00
  747.     !8  _T8C,_T8C,_T8C
  748. #endif
  749.  
  750.  
  751. ;if not defined, just make them point to missing char
  752. #ifndef TEXT8_USE_SPECIALS_LOW
  753. :_text8_SPECIALS_LOW:
  754. :_text805: && :_text806: && :_text807: && :_text808:
  755. :_text80B: && :_text80C: && :_text80D: && :_text80E:
  756. :_text80F: && :_text810: && :_text811: && :_text812:
  757. :_text813: && :_text814: && :_text815: && :_text816:
  758. :_text817: && :_text818: && :_text819: && :_text81A:
  759. :_text81B: && :_text81C: && :_text81D: && :_text81E:
  760. :_text81F:
  761. #endif
  762. #ifndef TEXT8_USE_SPECIALS_A
  763. :_text8_SPECIALS_A:
  764. :_text8sp: /* */ && :_text8_!:       && :_text8dq: /*"*/ && :_text8_#:
  765. :_text8_$:       && :_text8_%:       && :_text8_&:       && :_text8ap: /*'*/
  766. :_text8_(:       && :_text8_):       && :_text8cm: /*,*/ && :_text8_.:
  767. :_text8_/:       && :_text8cl: /*:*/ && :_text8sc: /*;*/ && :_text8_?:
  768. #endif
  769. #ifndef TEXT8_USE_SPECIALS_B
  770. :_text8_SPECIALS_B:
  771. :_text8_*:       && :_text8_+:       && :_text8_-:       && :_text8_<:
  772. :_text8_=:       && :_text8_>:       && :_text8at: /*@*/ && :_text8_[:
  773. :_text8_\:       && :_text8_]:       && :_text8_^:       && :_text8__:
  774. :_text8_`:       && :_text8_{:       && :_text8_|:       && :_text8_}:
  775. :_text8_~:
  776. #endif
  777. #ifndef TEXT8_USE_DIGITS
  778. :_text8_DIGITS:
  779. :_text8_0: && :_text8_1: && :_text8_2: && :_text8_3:
  780. :_text8_4: && :_text8_5: && :_text8_6: && :_text8_7:
  781. :_text8_8: && :_text8_9:
  782. #endif
  783. #ifndef TEXT8_USE_CASE_UPPER
  784. :_text8_CASE_UPPER:
  785. :_text8_A: && :_text8_B: && :_text8_C: && :_text8_D:
  786. :_text8_E: && :_text8_F: && :_text8_G: && :_text8_H:
  787. :_text8_I: && :_text8_J: && :_text8_K: && :_text8_L:
  788. :_text8_M: && :_text8_N: && :_text8_O: && :_text8_P:
  789. :_text8_Q: && :_text8_R: && :_text8_S: && :_text8_T:
  790. :_text8_U: && :_text8_V: && :_text8_W: && :_text8_X:
  791. :_text8_Y: && :_text8_Z:
  792. #endif
  793. #ifndef TEXT8_USE_CASE_LOWER
  794. :_text8_CASE_LOWER:
  795. :_text8_a: && :_text8_b: && :_text8_c: && :_text8_d:
  796. :_text8_e: && :_text8_f: && :_text8_g: && :_text8_h:
  797. :_text8_i: && :_text8_j: && :_text8_k: && :_text8_l:
  798. :_text8_m: && :_text8_n: && :_text8_o: && :_text8_p:
  799. :_text8_q: && :_text8_r: && :_text8_s: && :_text8_t:
  800. :_text8_u: && :_text8_v: && :_text8_w: && :_text8_x:
  801. :_text8_y: && :_text8_z:
  802. #endif
  803. :_text8?_: !8  0,0,3,5 ;missing char
  804.     !8  0x00,_T8C,0x00
  805.     !8  _T8C,_T8C,_T8C
  806.     !8  _T8C,_T8C,_T8C
  807.     !8  _T8C,_T8C,_T8C
  808.     !8  0x00,_T8C,0x00
  809.  
  810.  
  811. ;draws text block at ^ to the canvas (250 char limit i think)
  812. ;Ex.: '!8  20,20,0,0,"something",0' will draw "something" at x,y=20,20
  813. ;3rd byte is # of chars to print (0 to keep going until null-terminated)
  814. ;(null terminator must be explicitly defined)
  815. ;(4th byte of block is unused for now)
  816. :_text8_draw: l1prep ;scratch: A,B=chr_sprite C=chr  D,E=x,y
  817.     ldi #,0 && lda *,L1CRG && sta $,_SCRATCH_D ;store x to scratch d
  818.     ldi #,1 && lda *,L1CRG && sta $,_SCRATCH_E ;store y to scratch e
  819.     lda #,4 && sta $,.off+1  ;reset string offset to 4
  820.     .loop:
  821.         ;checking if index is correct
  822.         .off: ldi #,4 ;for self-modifying code; initial value irrelevant
  823.         tia && xor #,0xff && bzs_long .r ;if I==255, return
  824.         ldi #,2 ;index of char limit byte; (this explains the .off-1)
  825.         lda *,L1CRG && bzs .char ;if char limit!=0, do check
  826.          ;if char limit+3 < string offset, return
  827.           lda *,L1CRG ;load char limit into A again
  828.           add #,3 && cmp @,.off-1 ;compare char limit+3 to string offset
  829.           blt_long .r ;branch if char limit+4 < string offset
  830.         ;handling of the char itself
  831.         .char: ;ldi_abs .off+1
  832.         ldi @,.off-1 && lda *,L1CRG ;restore string offset && get char
  833.         ror #,7 && and #,0xfe ;A<<=1
  834.         sta $,_SCRATCH_C ;store char lookup offset
  835.         ;decide what to do for given char
  836.         bzs_long .r ;return if null char
  837.         ldi #,0 ;abs addressing
  838.         .if_strt: lda @,_SCRATCH_C  ;if char lookup offset == 1<<1, --y
  839.                   cmp #,1<<1        ;^^
  840.                   bec_long .not_--y ;^^
  841.             lda @,_SCRATCH_E && add #,-1 && sta $,_SCRATCH_E
  842.         jmp .loop_end
  843.         .not_--y: lda @,_SCRATCH_C  ;else if char lookup offset == 2<<1, ++y
  844.                   cmp #,2<<1        ;^^
  845.                   bec_long .not_++y ;^^
  846.             lda @,_SCRATCH_E && add #,1 && sta $,_SCRATCH_E
  847.         jmp .loop_end
  848.         .not_++y: lda @,_SCRATCH_C  ;else if char lookup offset == 3<<1, --x
  849.                   cmp #,3<<1        ;^^
  850.                   bec_long .not_--x ;^^
  851.             lda @,_SCRATCH_D && add #,-1 && sta $,_SCRATCH_D
  852.         jmp .loop_end
  853.         .not_--x: lda @,_SCRATCH_C  ;else if char lookup offset == 4<<1, ++x
  854.                   cmp #,4<<1        ;^^
  855.                   bec_long .not_++x ;^^
  856.             lda @,_SCRATCH_D && add #,1 && sta $,_SCRATCH_D
  857.         jmp .loop_end
  858.         .not_++x: lda @,_SCRATCH_C  ;else if char lookup offset == '\n'<<1, line break
  859.                   cmp #,0x0A<<1     ;^^(this was made before char literal
  860.                   bec_long .not_\n  ;^^ escape sequences were supported)
  861.             lda *,L1CRG && sta $,_SCRATCH_D ;reset x to its original state
  862.             lda @,_SCRATCH_E && add #,6 && sta $,_SCRATCH_E ;y+=6
  863.         jmp .loop_end
  864.         .not_\n: ;else
  865.             ;get char sprite address
  866.             ldi @,_SCRATCH_C ;abs address, as I should = 0 at this point
  867.             ldl @,_text8_char_lookup && ini ;get low byte of char sprite && inc. I
  868.             ldh @,_text8_char_lookup        ;get high byte
  869.             stl $,_SCRATCH_A && sth $,_SCRATCH_B ;store char sprite address
  870.             ;copy x&y to char sprite before drawing char to canvas
  871.             ldi #,0 ;abs addressing
  872.             lda @,_SCRATCH_D && sta ^ && inc ;copy x,y to char sprite's x,y
  873.             lda @,_SCRATCH_E && sta ^        ;^^
  874.             ldl @,_SCRATCH_A && ldh @,_SCRATCH_B ;restore char sprite address
  875.             sys #,0x06 ;draw char to canvas
  876.             ;advance to the right by a certain amount
  877.             lda @,_SCRATCH_C ;load char lookup offset (I should = 0 at this point)
  878.             ror #,1 && tai ;undo previous shift left && copy A to I
  879.             lda @,_text8_advance_lookup ;load advance width into A
  880.             ldi #,0 && add @,_SCRATCH_D ;add advance width to current x pos.
  881.             sta $,_SCRATCH_D ;store new x position
  882.         .loop_end:
  883.         ldi_abs .off+1      ;increment string offset
  884.         ini && sti $,.off+1 ;^^
  885.         jmp .loop
  886. .r: l1rts
  887.  
  888. #endif
Tags: kit-8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement