General Purpose library for Freestanding C++ and POSIX systems
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

268 Zeilen
3.7 KiB

  1. #pragma once
  2. #include "gp/array.hpp"
  3. using display_char = gp::array<uint8_t, 8>;
  4. constexpr display_char ascii_tr(unsigned char c) {
  5. display_char whitespace{
  6. 0b00000000,
  7. 0b00000000,
  8. 0b00000000,
  9. 0b00000000,
  10. 0b00000000,
  11. 0b00000000,
  12. 0b00000000,
  13. 0b00000000
  14. };
  15. display_char invalid{
  16. 0b11111111,
  17. c,
  18. 0b10101011,
  19. 0b10101011,
  20. 0b10011001,
  21. 0b10100101,
  22. 0b11000011,
  23. 0b11111111
  24. };
  25. switch(c) {
  26. case '\0':
  27. return whitespace;
  28. case ' ':
  29. return whitespace;
  30. case '!':
  31. return {
  32. 0b00000000,
  33. 0b00010000,
  34. 0b00010000,
  35. 0b00010000,
  36. 0b00010000,
  37. 0b00000000,
  38. 0b00010000,
  39. 0b00000000
  40. };
  41. case '"':
  42. return {
  43. 0b00000000,
  44. 0b00101000,
  45. 0b00101000,
  46. 0b00000000,
  47. 0b00000000,
  48. 0b00000000,
  49. 0b00000000,
  50. 0b00000000
  51. };
  52. case '#':
  53. return {
  54. 0b00010010,
  55. 0b00100100,
  56. 0b11111110,
  57. 0b00100100,
  58. 0b01001000,
  59. 0b11111110,
  60. 0b01001000,
  61. 0b10010000
  62. };
  63. case '$':
  64. return {
  65. 0b01111000,
  66. 0b10100100,
  67. 0b10100000,
  68. 0b01111000,
  69. 0b00100100,
  70. 0b00100100,
  71. 0b01111000,
  72. 0b00100000
  73. };
  74. case '%':
  75. return {
  76. 0b11100001,
  77. 0b10100010,
  78. 0b11100100,
  79. 0b00001000,
  80. 0b00010000,
  81. 0b00100111,
  82. 0b01000101,
  83. 0b10000111
  84. };
  85. case '&':
  86. return {
  87. 0b00011000,
  88. 0b00100100,
  89. 0b01000000,
  90. 0b00100000,
  91. 0b01010100,
  92. 0b10001000,
  93. 0b01110100,
  94. 0b00000000
  95. };
  96. case '\'':
  97. return {
  98. 0b00000000,
  99. 0b00010000,
  100. 0b00010000,
  101. 0b00000000,
  102. 0b00000000,
  103. 0b00000000,
  104. 0b00000000,
  105. 0b00000000
  106. };
  107. case '(':
  108. return {
  109. 0b00100000,
  110. 0b01000000,
  111. 0b10000000,
  112. 0b10000000,
  113. 0b10000000,
  114. 0b01000000,
  115. 0b00100000,
  116. 0b00000000
  117. };
  118. case ')':
  119. return {
  120. 0b00100000,
  121. 0b00010000,
  122. 0b00001000,
  123. 0b00001000,
  124. 0b00001000,
  125. 0b00010000,
  126. 0b00100000,
  127. 0b00000000
  128. };
  129. case '*':
  130. return {
  131. 0b00000000,
  132. 0b00010000,
  133. 0b01111100,
  134. 0b00101000,
  135. 0b00000000,
  136. 0b00000000,
  137. 0b00000000,
  138. 0b00000000
  139. };
  140. case '+':
  141. return {
  142. 0b00000000,
  143. 0b00000000,
  144. 0b00010000,
  145. 0b00010000,
  146. 0b01111100,
  147. 0b00010000,
  148. 0b00010000,
  149. 0b00000000
  150. };
  151. case ',':
  152. return {
  153. 0b00000000,
  154. 0b00000000,
  155. 0b00000000,
  156. 0b00000000,
  157. 0b00000000,
  158. 0b00001000,
  159. 0b00010000,
  160. 0b00000000
  161. };
  162. case '-':
  163. return {
  164. 0b00000000,
  165. 0b00000000,
  166. 0b00000000,
  167. 0b00000000,
  168. 0b01111100,
  169. 0b00000000,
  170. 0b00000000,
  171. 0b00000000
  172. };
  173. case '.':
  174. return {
  175. 0b00000000,
  176. 0b00000000,
  177. 0b00000000,
  178. 0b00000000,
  179. 0b00000000,
  180. 0b00011000,
  181. 0b00011000,
  182. 0b00000000
  183. };
  184. case '/':
  185. return {
  186. 0b00000100,
  187. 0b00001000,
  188. 0b00001000,
  189. 0b00010000,
  190. 0b00100000,
  191. 0b00100000,
  192. 0b01000000,
  193. 0b00000000
  194. };
  195. case '0':
  196. return {
  197. 0b00111000,
  198. 0b01000100,
  199. 0b10001010,
  200. 0b10010010,
  201. 0b10100010,
  202. 0b01000100,
  203. 0b00111000,
  204. 0b00000000
  205. };
  206. case '1':
  207. return {
  208. 0b00100000,
  209. 0b01100000,
  210. 0b00100000,
  211. 0b00100000,
  212. 0b00100000,
  213. 0b00100000,
  214. 0b00100000,
  215. 0b00000000
  216. };
  217. case '2':
  218. return {
  219. 0b00111000,
  220. 0b01000100,
  221. 0b00000100,
  222. 0b00001000,
  223. 0b00010000,
  224. 0b00100000,
  225. 0b11111100,
  226. 0b00000000
  227. };
  228. case '3':
  229. return {
  230. 0b00111000,
  231. 0b01000100,
  232. 0b00000100,
  233. 0b00011000,
  234. 0b00000100,
  235. 0b01000100,
  236. 0b00111000,
  237. 0b00000000
  238. };
  239. case '4':
  240. return {
  241. 0b00001000,
  242. 0b00011000,
  243. 0b00101000,
  244. 0b01001000,
  245. 0b11111100,
  246. 0b00001000,
  247. 0b00001000,
  248. 0b00000000
  249. };
  250. case '5':
  251. return {
  252. 0b01111110,
  253. 0b01000000,
  254. 0b00111100,
  255. 0b00000010,
  256. 0b00000010,
  257. 0b00000010,
  258. 0b01111100,
  259. 0b00000000
  260. };
  261. default:
  262. return invalid;
  263. }
  264. }