Advertisement
iocoder

bios.s

Jul 2nd, 2013
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.32 KB | None | 0 0
  1. # these are the first lines of my BIOS!
  2.  
  3. .code16
  4. .global _start
  5.  
  6. .data
  7.  
  8. font_data:
  9. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  10. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  11.  
  12. .byte 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xBD
  13. .byte 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00
  14.  
  15. .byte 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xC3
  16. .byte 0xE7, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00
  17.  
  18. .byte 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE
  19. .byte 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00
  20.  
  21. .byte 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE
  22. .byte 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
  23.  
  24. .byte 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7
  25. .byte 0xE7, 0x99, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  26.  
  27. .byte 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF
  28. .byte 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  29.  
  30. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C
  31. .byte 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  32.  
  33. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3
  34. .byte 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  35.  
  36. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42
  37. .byte 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00
  38.  
  39. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD
  40. .byte 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  41.  
  42. .byte 0x00, 0x00, 0x1E, 0x0E, 0x1A, 0x32, 0x78, 0xCC
  43. .byte 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00
  44.  
  45. .byte 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C
  46. .byte 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  47.  
  48. .byte 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30
  49. .byte 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00
  50.  
  51. .byte 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63
  52. .byte 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00
  53.  
  54. .byte 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7
  55. .byte 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  56.  
  57. .byte 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8
  58. .byte 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00
  59.  
  60. .byte 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E
  61. .byte 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00
  62.  
  63. .byte 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18
  64. .byte 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
  65.  
  66. .byte 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66
  67. .byte 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00
  68.  
  69. .byte 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B
  70. .byte 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00
  71.  
  72. .byte 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6
  73. .byte 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00
  74.  
  75. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  76. .byte 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00
  77.  
  78. .byte 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18
  79. .byte 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00
  80.  
  81. .byte 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18
  82. .byte 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  83.  
  84. .byte 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  85. .byte 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
  86.  
  87. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE
  88. .byte 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  89.  
  90. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE
  91. .byte 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  92.  
  93. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0
  94. .byte 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  95.  
  96. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C, 0xFE
  97. .byte 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  98.  
  99. .byte 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7C
  100. .byte 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00
  101.  
  102. .byte 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C
  103. .byte 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
  104.  
  105. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  106. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  107.  
  108. .byte 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18
  109. .byte 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  110.  
  111. .byte 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00
  112. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  113.  
  114. .byte 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C
  115. .byte 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00
  116.  
  117. .byte 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06
  118. .byte 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00, 0x00
  119.  
  120. .byte 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18
  121. .byte 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00
  122.  
  123. .byte 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC
  124. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  125.  
  126. .byte 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00
  127. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  128.  
  129. .byte 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30
  130. .byte 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00
  131.  
  132. .byte 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C
  133. .byte 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00
  134.  
  135. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF
  136. .byte 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  137.  
  138. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E
  139. .byte 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  140.  
  141. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  142. .byte 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00
  143.  
  144. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE
  145. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  146.  
  147. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  148. .byte 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  149.  
  150. .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18
  151. .byte 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00
  152.  
  153. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xCE, 0xD6, 0xD6
  154. .byte 0xE6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  155.  
  156. .byte 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18
  157. .byte 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00
  158.  
  159. .byte 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30
  160. .byte 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00
  161.  
  162. .byte 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06
  163. .byte 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  164.  
  165. .byte 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE
  166. .byte 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00
  167.  
  168. .byte 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x0E
  169. .byte 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  170.  
  171. .byte 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6
  172. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  173.  
  174. .byte 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18
  175. .byte 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00
  176.  
  177. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6
  178. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  179.  
  180. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06
  181. .byte 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00
  182.  
  183. .byte 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00
  184. .byte 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00
  185.  
  186. .byte 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00
  187. .byte 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00
  188.  
  189. .byte 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60
  190. .byte 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00
  191.  
  192. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00
  193. .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  194.  
  195. .byte 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06
  196. .byte 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00
  197.  
  198. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18
  199. .byte 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  200.  
  201. .byte 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE
  202. .byte 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00
  203.  
  204. .byte 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE
  205. .byte 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  206.  
  207. .byte 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66
  208. .byte 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00
  209.  
  210. .byte 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0
  211. .byte 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00
  212.  
  213. .byte 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66
  214. .byte 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00
  215.  
  216. .byte 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68
  217. .byte 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00
  218.  
  219. .byte 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68
  220. .byte 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00
  221.  
  222. .byte 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE
  223. .byte 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00
  224.  
  225. .byte 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6
  226. .byte 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  227.  
  228. .byte 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18
  229. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  230.  
  231. .byte 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C
  232. .byte 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00
  233.  
  234. .byte 0x00, 0x00, 0xE6, 0x66, 0x6C, 0x6C, 0x78, 0x78
  235. .byte 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00
  236.  
  237. .byte 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60
  238. .byte 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00
  239.  
  240. .byte 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6
  241. .byte 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  242.  
  243. .byte 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE
  244. .byte 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  245.  
  246. .byte 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6
  247. .byte 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00
  248.  
  249. .byte 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60
  250. .byte 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00
  251.  
  252. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6
  253. .byte 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00
  254.  
  255. .byte 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C
  256. .byte 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00
  257.  
  258. .byte 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C
  259. .byte 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  260.  
  261. .byte 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18
  262. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  263.  
  264. .byte 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6
  265. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  266.  
  267. .byte 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6
  268. .byte 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00
  269.  
  270. .byte 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6
  271. .byte 0xD6, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00
  272.  
  273. .byte 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38
  274. .byte 0x6C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  275.  
  276. .byte 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18
  277. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  278.  
  279. .byte 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30
  280. .byte 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00
  281.  
  282. .byte 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30
  283. .byte 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00
  284.  
  285. .byte 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38
  286. .byte 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00
  287.  
  288. .byte 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C
  289. .byte 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00
  290.  
  291. .byte 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00
  292. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  293.  
  294. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  295. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
  296.  
  297. .byte 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00
  298. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  299.  
  300. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C
  301. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  302.  
  303. .byte 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66
  304. .byte 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x00
  305.  
  306. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0
  307. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  308.  
  309. .byte 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC
  310. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  311.  
  312. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE
  313. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  314.  
  315. .byte 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60
  316. .byte 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00
  317.  
  318. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC
  319. .byte 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00
  320.  
  321. .byte 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66
  322. .byte 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00
  323.  
  324. .byte 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18
  325. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  326.  
  327. .byte 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06
  328. .byte 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00
  329.  
  330. .byte 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78
  331. .byte 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00
  332.  
  333. .byte 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18
  334. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  335.  
  336. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6
  337. .byte 0xD6, 0xD6, 0xD6, 0xD6, 0x00, 0x00, 0x00, 0x00
  338.  
  339. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66
  340. .byte 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00
  341.  
  342. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6
  343. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  344.  
  345. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66
  346. .byte 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00
  347.  
  348. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC
  349. .byte 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00
  350.  
  351. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x62
  352. .byte 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00
  353.  
  354. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60
  355. .byte 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  356.  
  357. .byte 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30
  358. .byte 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00
  359.  
  360. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC
  361. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  362.  
  363. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66
  364. .byte 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
  365.  
  366. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6
  367. .byte 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00
  368.  
  369. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38
  370. .byte 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00
  371.  
  372. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6
  373. .byte 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00
  374.  
  375. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18
  376. .byte 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00
  377.  
  378. .byte 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18
  379. .byte 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00
  380.  
  381. .byte 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18
  382. .byte 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  383.  
  384. .byte 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18
  385. .byte 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00
  386.  
  387. .byte 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00
  388. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  389.  
  390. .byte 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6
  391. .byte 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00
  392.  
  393. .byte 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0
  394. .byte 0xC2, 0x66, 0x3C, 0x0C, 0x06, 0x7C, 0x00, 0x00
  395.  
  396. .byte 0x00, 0x00, 0xCC, 0xCC, 0x00, 0xCC, 0xCC, 0xCC
  397. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  398.  
  399. .byte 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE
  400. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  401.  
  402. .byte 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C
  403. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  404.  
  405. .byte 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x78, 0x0C, 0x7C
  406. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  407.  
  408. .byte 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C
  409. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  410.  
  411. .byte 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C
  412. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  413.  
  414. .byte 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60
  415. .byte 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00
  416.  
  417. .byte 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE
  418. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  419.  
  420. .byte 0x00, 0x00, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xFE
  421. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  422.  
  423. .byte 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE
  424. .byte 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  425.  
  426. .byte 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18
  427. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  428.  
  429. .byte 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18
  430. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  431.  
  432. .byte 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18
  433. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  434.  
  435. .byte 0x00, 0xC6, 0xC6, 0x10, 0x38, 0x6C, 0xC6, 0xC6
  436. .byte 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  437.  
  438. .byte 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6
  439. .byte 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  440.  
  441. .byte 0x18, 0x30, 0x60, 0x00, 0xFE, 0x66, 0x60, 0x7C
  442. .byte 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00
  443.  
  444. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36
  445. .byte 0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00
  446.  
  447. .byte 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC
  448. .byte 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00
  449.  
  450. .byte 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6
  451. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  452.  
  453. .byte 0x00, 0x00, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xC6
  454. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  455.  
  456. .byte 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6
  457. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  458.  
  459. .byte 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC
  460. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  461.  
  462. .byte 0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC
  463. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  464.  
  465. .byte 0x00, 0x00, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0xC6
  466. .byte 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00
  467.  
  468. .byte 0x00, 0xC6, 0xC6, 0x00, 0x38, 0x6C, 0xC6, 0xC6
  469. .byte 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00
  470.  
  471. .byte 0x00, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6
  472. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  473.  
  474. .byte 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60
  475. .byte 0x66, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  476.  
  477. .byte 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60
  478. .byte 0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00
  479.  
  480. .byte 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18
  481. .byte 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  482.  
  483. .byte 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC4, 0xCC, 0xDE
  484. .byte 0xCC, 0xCC, 0xCC, 0xC6, 0x00, 0x00, 0x00, 0x00
  485.  
  486. .byte 0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18
  487. .byte 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00
  488.  
  489. .byte 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C
  490. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  491.  
  492. .byte 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18
  493. .byte 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00
  494.  
  495. .byte 0x00, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0xC6
  496. .byte 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  497.  
  498. .byte 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC
  499. .byte 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00
  500.  
  501. .byte 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66
  502. .byte 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00
  503.  
  504. .byte 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE
  505. .byte 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  506.  
  507. .byte 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00
  508. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  509.  
  510. .byte 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00
  511. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  512.  
  513. .byte 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60
  514. .byte 0xC0, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00
  515.  
  516. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC0
  517. .byte 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00
  518.  
  519. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06
  520. .byte 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
  521.  
  522. .byte 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30
  523. .byte 0x60, 0xCE, 0x93, 0x06, 0x0C, 0x1F, 0x00, 0x00
  524.  
  525. .byte 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30
  526. .byte 0x66, 0xCE, 0x9A, 0x3F, 0x06, 0x0F, 0x00, 0x00
  527.  
  528. .byte 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18
  529. .byte 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
  530.  
  531. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC
  532. .byte 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  533.  
  534. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33
  535. .byte 0x66, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  536.  
  537. .byte 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44
  538. .byte 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44
  539.  
  540. .byte 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA
  541. .byte 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA
  542.  
  543. .byte 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77
  544. .byte 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77
  545.  
  546. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  547. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  548.  
  549. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8
  550. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  551.  
  552. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8
  553. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  554.  
  555. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6
  556. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  557.  
  558. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE
  559. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  560.  
  561. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8
  562. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  563.  
  564. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6
  565. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  566.  
  567. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  568. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  569.  
  570. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6
  571. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  572.  
  573. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE
  574. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  575.  
  576. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE
  577. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  578.  
  579. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8
  580. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  581.  
  582. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8
  583. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  584.  
  585. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F
  586. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  587.  
  588. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF
  589. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  590.  
  591. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
  592. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  593.  
  594. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F
  595. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  596.  
  597. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
  598. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  599.  
  600. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF
  601. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  602.  
  603. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F
  604. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  605.  
  606. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37
  607. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  608.  
  609. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F
  610. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  611.  
  612. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37
  613. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  614.  
  615. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF
  616. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  617.  
  618. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7
  619. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  620.  
  621. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37
  622. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  623.  
  624. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF
  625. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  626.  
  627. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7
  628. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  629.  
  630. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF
  631. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  632.  
  633. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF
  634. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  635.  
  636. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF
  637. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  638.  
  639. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
  640. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  641.  
  642. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F
  643. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  644.  
  645. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F
  646. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  647.  
  648. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F
  649. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  650.  
  651. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F
  652. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  653.  
  654. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF
  655. .byte 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
  656.  
  657. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF
  658. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  659.  
  660. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8
  661. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  662.  
  663. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F
  664. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  665.  
  666. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  667. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  668.  
  669. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
  670. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  671.  
  672. .byte 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
  673. .byte 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
  674.  
  675. .byte 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
  676. .byte 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
  677.  
  678. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
  679. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  680.  
  681. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8
  682. .byte 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00
  683.  
  684. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC6, 0xFC
  685. .byte 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, 0xC0, 0x00, 0x00
  686.  
  687. .byte 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0
  688. .byte 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00
  689.  
  690. .byte 0x00, 0x00, 0x00, 0x00, 0x80, 0xFE, 0x6C, 0x6C
  691. .byte 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00
  692.  
  693. .byte 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18
  694. .byte 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00
  695.  
  696. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xD8
  697. .byte 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00
  698.  
  699. .byte 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66
  700. .byte 0x66, 0x7C, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00
  701.  
  702. .byte 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18, 0x18
  703. .byte 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00
  704.  
  705. .byte 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66
  706. .byte 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00
  707.  
  708. .byte 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE
  709. .byte 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00
  710.  
  711. .byte 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C
  712. .byte 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00
  713.  
  714. .byte 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66
  715. .byte 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00
  716.  
  717. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB
  718. .byte 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  719.  
  720. .byte 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xCF, 0xDB
  721. .byte 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00
  722.  
  723. .byte 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60
  724. .byte 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00
  725.  
  726. .byte 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6
  727. .byte 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
  728.  
  729. .byte 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE
  730. .byte 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00
  731.  
  732. .byte 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18
  733. .byte 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00
  734.  
  735. .byte 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C
  736. .byte 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00
  737.  
  738. .byte 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30
  739. .byte 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00
  740.  
  741. .byte 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18
  742. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  743.  
  744. .byte 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
  745. .byte 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00
  746.  
  747. .byte 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E
  748. .byte 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00
  749.  
  750. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00
  751. .byte 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  752.  
  753. .byte 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00
  754. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  755.  
  756. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18
  757. .byte 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  758.  
  759. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  760. .byte 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  761.  
  762. .byte 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC
  763. .byte 0x6C, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00
  764.  
  765. .byte 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00
  766. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  767.  
  768. .byte 0x00, 0x70, 0x98, 0x30, 0x60, 0xC8, 0xF8, 0x00
  769. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  770.  
  771. .byte 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C
  772. .byte 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00
  773.  
  774. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  775. .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  776.  
  777. palette:
  778. .byte 0, 0, 0
  779. .byte 0, 0, 42
  780. .byte 0, 42, 0
  781. .byte 0, 42, 42
  782. .byte 42, 0, 0
  783. .byte 42, 0, 42
  784. .byte 42, 21, 0
  785. .byte 42, 42, 42
  786. .byte 21, 21, 21
  787. .byte 21, 21, 63
  788. .byte 21, 63, 21
  789. .byte 21, 63, 63
  790. .byte 63, 21, 21
  791. .byte 63, 21, 63
  792. .byte 63, 63, 21
  793. .byte 63, 63, 63
  794.  
  795. .text
  796. _start:
  797.  
  798. # initialize DS/ES
  799. mov $0xE000, %ax
  800. mov %ax, %ds
  801. mov %ax, %es
  802.  
  803. # initialize a stack
  804. mov $0, %ax
  805. mov %ax, %ss
  806. mov $0, %sp
  807.  
  808. # jmp clearscreen
  809.  
  810. # init vga:
  811. # ----------
  812. // from vgabios:
  813. /*
  814. # switch to color mode and enable CPU access 480 lines
  815. mov $0x3C2, %dx
  816. mov $0xC3, %al
  817. outb %al, %dx
  818.  
  819. # more than 64k 3C4/04
  820. mov $0x3C4, %dx
  821. mov $0x04, %al
  822. outb %al, %dx
  823. inc %dx
  824. mov $0x02, %al
  825. outb %al, %dx
  826. */
  827.  
  828. mov $0x3C6, %dx
  829. mov $0xFF, %al
  830. out %al, %dx
  831.  
  832.  
  833. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  834. # % STEP 1: SET PALETTE %
  835. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  836.  
  837. jmp cont
  838.  
  839. setpal:
  840. # AX = color
  841. # bl = red
  842. # bh = green
  843. # cl = blue
  844.  
  845. push %ax
  846.  
  847. # send color
  848. mov $0x3C8, %dx
  849. out %al, %dx
  850.  
  851. mov $0x3C9, %dx
  852. mov %bl, %al # red
  853. out %al, %dx
  854. mov %bh, %al # green
  855. out %al, %dx
  856. mov %cl, %al # blue
  857. out %al, %dx
  858.  
  859. pop %ax
  860.  
  861. ret
  862.  
  863. cont:
  864. # set 16 colors palette
  865. mov $0xE000, %ax
  866. mov %ax, %ds
  867. mov $0x1000, %si
  868. mov $0, %ax # color address
  869.  
  870. setcolor:
  871. mov (%si), %bl
  872. inc %si
  873. mov (%si), %bh
  874. inc %si
  875. mov (%si), %cl
  876. inc %si
  877.  
  878. call setpal
  879.  
  880. inc %ax
  881. cmp $16, %ax
  882. jne setcolor
  883.  
  884.  
  885. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  886. # % STEP 2: LOAD REGS %
  887. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  888.  
  889. # =======================================
  890. # MISC
  891. # =======================================
  892.  
  893. mov $0x3C2, %dx
  894. mov $0x67, %al
  895. out %al, %dx
  896.  
  897. # =======================================
  898. # AC
  899. # =======================================
  900.  
  901. # read from 0x3DA resets 0x3C0 to index mode.
  902. mov $0x3DA, %dx
  903. in %dx, %al
  904.  
  905. # set Palette 0x00 Register:
  906. mov $0x3C0, %dx # address port
  907. mov $0x3C0, %cx # write port
  908. mov $0x00, %al # index
  909. mov $0x00, %ah # data
  910. call vga_io
  911.  
  912. # set Palette 0x01 Register:
  913. mov $0x3C0, %dx # address port
  914. mov $0x3C0, %cx # write port
  915. mov $0x01, %al # index
  916. mov $0x01, %ah # data
  917. call vga_io
  918.  
  919. # set Palette 0x02 Register:
  920. mov $0x3C0, %dx # address port
  921. mov $0x3C0, %cx # write port
  922. mov $0x02, %al # index
  923. mov $0x02, %ah # data
  924. call vga_io
  925.  
  926. # set Palette 0x03 Register:
  927. mov $0x3C0, %dx # address port
  928. mov $0x3C0, %cx # write port
  929. mov $0x03, %al # index
  930. mov $0x03, %ah # data
  931. call vga_io
  932.  
  933. # set Palette 0x04 Register:
  934. mov $0x3C0, %dx # address port
  935. mov $0x3C0, %cx # write port
  936. mov $0x04, %al # index
  937. mov $0x04, %ah # data
  938. call vga_io
  939.  
  940. # set Palette 0x05 Register:
  941. mov $0x3C0, %dx # address port
  942. mov $0x3C0, %cx # write port
  943. mov $0x05, %al # index
  944. mov $0x05, %ah # data
  945. call vga_io
  946.  
  947. # set Palette 0x06 Register:
  948. mov $0x3C0, %dx # address port
  949. mov $0x3C0, %cx # write port
  950. mov $0x06, %al # index
  951. mov $0x14, %ah # data
  952. call vga_io
  953.  
  954. # set Palette 0x07 Register:
  955. mov $0x3C0, %dx # address port
  956. mov $0x3C0, %cx # write port
  957. mov $0x07, %al # index
  958. mov $0x07, %ah # data
  959. call vga_io
  960.  
  961. # set Palette 0x08 Register:
  962. mov $0x3C0, %dx # address port
  963. mov $0x3C0, %cx # write port
  964. mov $0x08, %al # index
  965. mov $0x38, %ah # data
  966. call vga_io
  967.  
  968. # set Palette 0x09 Register:
  969. mov $0x3C0, %dx # address port
  970. mov $0x3C0, %cx # write port
  971. mov $0x09, %al # index
  972. mov $0x39, %ah # data
  973. call vga_io
  974.  
  975. # set Palette 0x0A Register:
  976. mov $0x3C0, %dx # address port
  977. mov $0x3C0, %cx # write port
  978. mov $0x0A, %al # index
  979. mov $0x3A, %ah # data
  980. call vga_io
  981.  
  982. # set Palette 0x0B Register:
  983. mov $0x3C0, %dx # address port
  984. mov $0x3C0, %cx # write port
  985. mov $0x0B, %al # index
  986. mov $0x3B, %ah # data
  987. call vga_io
  988.  
  989. # set Palette 0x0C Register:
  990. mov $0x3C0, %dx # address port
  991. mov $0x3C0, %cx # write port
  992. mov $0x0C, %al # index
  993. mov $0x3C, %ah # data
  994. call vga_io
  995.  
  996. # set Palette 0x0D Register:
  997. mov $0x3C0, %dx # address port
  998. mov $0x3C0, %cx # write port
  999. mov $0x0D, %al # index
  1000. mov $0x3D, %ah # data
  1001. call vga_io
  1002.  
  1003. # set Palette 0x0E Register:
  1004. mov $0x3C0, %dx # address port
  1005. mov $0x3C0, %cx # write port
  1006. mov $0x0E, %al # index
  1007. mov $0x3E, %ah # data
  1008. call vga_io
  1009.  
  1010. # set Palette 0x0F Register:
  1011. mov $0x3C0, %dx # address port
  1012. mov $0x3C0, %cx # write port
  1013. mov $0x0F, %al # index
  1014. mov $0x3F, %ah # data
  1015. call vga_io
  1016.  
  1017. # set Mode Control Register:
  1018. mov $0x3C0, %dx # address port
  1019. mov $0x3C0, %cx # write port
  1020. mov $0x10, %al # index
  1021. mov $0x0C, %ah # data
  1022. call vga_io
  1023.  
  1024. # set Overscan Register:
  1025. mov $0x3C0, %dx # address port
  1026. mov $0x3C0, %cx # write port
  1027. mov $0x11, %al # index
  1028. mov $0x00, %ah # data
  1029. call vga_io
  1030.  
  1031. # set Color Plane Enable Register:
  1032. mov $0x3C0, %dx # address port
  1033. mov $0x3C0, %cx # write port
  1034. mov $0x12, %al # index
  1035. mov $0x0F, %ah # data
  1036. call vga_io
  1037.  
  1038. # set Horizontal Planning Register:
  1039. mov $0x3C0, %dx # address port
  1040. mov $0x3C0, %cx # write port
  1041. mov $0x13, %al # index
  1042. mov $0x08, %ah # data
  1043. call vga_io
  1044.  
  1045. # set Color Select Register:
  1046. mov $0x3C0, %dx # address port
  1047. mov $0x3C0, %cx # write port
  1048. mov $0x14, %al # index
  1049. mov $0x00, %ah # data
  1050. call vga_io
  1051.  
  1052. # =======================================
  1053. # SEQ
  1054. # =======================================
  1055.  
  1056. # set Reset Register:
  1057. mov $0x3C4, %dx # address port
  1058. mov $0x3C5, %cx # write port
  1059. mov $0x00, %al # index
  1060. mov $0x03, %ah # data
  1061. call vga_io
  1062.  
  1063. # set Clock mode Register:
  1064. mov $0x3C4, %dx # address port
  1065. mov $0x3C5, %cx # write port
  1066. mov $0x01, %al # index
  1067. mov $0x00, %ah # data
  1068. call vga_io
  1069.  
  1070. # set Map Mask Register:
  1071. mov $0x3C4, %dx # address port
  1072. mov $0x3C5, %cx # write port
  1073. mov $0x02, %al # index
  1074. mov $0x03, %ah # data
  1075. call vga_io
  1076.  
  1077. # set Character Select Register:
  1078. mov $0x3C4, %dx # address port
  1079. mov $0x3C5, %cx # write port
  1080. mov $0x03, %al # index
  1081. mov $0x00, %ah # data
  1082. call vga_io
  1083.  
  1084. # set Memory mode Register:
  1085. mov $0x3C4, %dx # address port
  1086. mov $0x3C5, %cx # write port
  1087. mov $0x04, %al # index
  1088. mov $0x02, %ah # data
  1089. call vga_io
  1090.  
  1091. # =======================================
  1092. # GC
  1093. # =======================================
  1094.  
  1095. # set Set/Reset Register:
  1096. mov $0x3CE, %dx # address port
  1097. mov $0x3CF, %cx # write port
  1098. mov $0x00, %al # index
  1099. mov $0x00, %ah # data
  1100. call vga_io
  1101.  
  1102. # set Enable Set/Reset Register:
  1103. mov $0x3CE, %dx # address port
  1104. mov $0x3CF, %cx # write port
  1105. mov $0x01, %al # index
  1106. mov $0x00, %ah # data
  1107. call vga_io
  1108.  
  1109. # set Color Compare Register:
  1110. mov $0x3CE, %dx # address port
  1111. mov $0x3CF, %cx # write port
  1112. mov $0x02, %al # index
  1113. mov $0x00, %ah # data
  1114. call vga_io
  1115.  
  1116. # set Data Rotate Register:
  1117. mov $0x3CE, %dx # address port
  1118. mov $0x3CF, %cx # write port
  1119. mov $0x03, %al # index
  1120. mov $0x00, %ah # data
  1121. call vga_io
  1122.  
  1123. # set Read Map Select Register:
  1124. mov $0x3CE, %dx # address port
  1125. mov $0x3CF, %cx # write port
  1126. mov $0x04, %al # index
  1127. mov $0x00, %ah # data
  1128. call vga_io
  1129.  
  1130. # set Graphics Mode Register:
  1131. mov $0x3CE, %dx # address port
  1132. mov $0x3CF, %cx # write port
  1133. mov $0x05, %al # index
  1134. mov $0x10, %ah # data
  1135. call vga_io
  1136.  
  1137. # set Miscellaneous Graphics Register:
  1138. mov $0x3CE, %dx # address port
  1139. mov $0x3CF, %cx # write port
  1140. mov $0x06, %al # index
  1141. mov $0x0E, %ah # data
  1142. call vga_io
  1143.  
  1144. # set Color Don't Care Register:
  1145. mov $0x3CE, %dx # address port
  1146. mov $0x3CF, %cx # write port
  1147. mov $0x07, %al # index
  1148. mov $0x00, %ah # data
  1149. call vga_io
  1150.  
  1151. # set Bit Mask Register:
  1152. mov $0x3CE, %dx # address port
  1153. mov $0x3CF, %cx # write port
  1154. mov $0x08, %al # index
  1155. mov $0xFF, %ah # data
  1156. call vga_io
  1157.  
  1158. # =======================================
  1159. # CRTC
  1160. # =======================================
  1161.  
  1162. # clear protection bits:
  1163. # set Horizontal Blank End:
  1164. mov $0x3D4, %dx # address port
  1165. mov $0x3D5, %cx # write port
  1166. mov $0x03, %al # index
  1167. mov $0x82, %ah # data
  1168. call vga_io
  1169.  
  1170. # set Vertical Retrace End:
  1171. mov $0x3D4, %dx # address port
  1172. mov $0x3D5, %cx # write port
  1173. mov $0x11, %al # index
  1174. mov $0x0E, %ah # data
  1175. call vga_io
  1176.  
  1177. # set CRT control regs:
  1178.  
  1179. # set Horizontal Total:
  1180. mov $0x3D4, %dx # address port
  1181. mov $0x3D5, %cx # write port
  1182. mov $0x00, %al # index
  1183. mov $0x5F, %ah # data
  1184. call vga_io
  1185.  
  1186. # set Horizontal Display Enable End:
  1187. mov $0x3D4, %dx # address port
  1188. mov $0x3D5, %cx # write port
  1189. mov $0x01, %al # index
  1190. mov $0x4F, %ah # data
  1191. call vga_io
  1192.  
  1193. # set Horizontal Blank Start:
  1194. mov $0x3D4, %dx # address port
  1195. mov $0x3D5, %cx # write port
  1196. mov $0x02, %al # index
  1197. mov $0x50, %ah # data
  1198. call vga_io
  1199.  
  1200. # set Horizontal Blank End:
  1201. mov $0x3D4, %dx # address port
  1202. mov $0x3D5, %cx # write port
  1203. mov $0x03, %al # index
  1204. mov $0x82, %ah # data
  1205. call vga_io
  1206.  
  1207. # set Horizontal Retrace Start:
  1208. mov $0x3D4, %dx # address port
  1209. mov $0x3D5, %cx # write port
  1210. mov $0x04, %al # index
  1211. mov $0x55, %ah # data
  1212. call vga_io
  1213.  
  1214. # set Horizontal Retrace End:
  1215. mov $0x3D4, %dx # address port
  1216. mov $0x3D5, %cx # write port
  1217. mov $0x05, %al # index
  1218. mov $0x81, %ah # data
  1219. call vga_io
  1220.  
  1221. # set Vertical Total:
  1222. mov $0x3D4, %dx # address port
  1223. mov $0x3D5, %cx # write port
  1224. mov $0x06, %al # index
  1225. mov $0xBF, %ah # data
  1226. call vga_io
  1227.  
  1228. # set Overflow Register:
  1229. mov $0x3D4, %dx # address port
  1230. mov $0x3D5, %cx # write port
  1231. mov $0x07, %al # index
  1232. mov $0x1F, %ah # data
  1233. call vga_io
  1234.  
  1235. # set Preset row scan:
  1236. mov $0x3D4, %dx # address port
  1237. mov $0x3D5, %cx # write port
  1238. mov $0x08, %al # index
  1239. mov $0x00, %ah # data
  1240. call vga_io
  1241.  
  1242. # set Maximum Scan Line:
  1243. mov $0x3D4, %dx # address port
  1244. mov $0x3D5, %cx # write port
  1245. mov $0x09, %al # index
  1246. mov $0x4F, %ah # data
  1247. call vga_io
  1248.  
  1249. # set reg 0x0A:
  1250. mov $0x3D4, %dx # address port
  1251. mov $0x3D5, %cx # write port
  1252. mov $0x0A, %al # index
  1253. mov $0x0D, %ah # data
  1254. call vga_io
  1255.  
  1256. # set reg 0x0B:
  1257. mov $0x3D4, %dx # address port
  1258. mov $0x3D5, %cx # write port
  1259. mov $0x0B, %al # index
  1260. mov $0x0E, %ah # data
  1261. call vga_io
  1262.  
  1263. # set reg 0x0C:
  1264. mov $0x3D4, %dx # address port
  1265. mov $0x3D5, %cx # write port
  1266. mov $0x0C, %al # index
  1267. mov $0x00, %ah # data
  1268. call vga_io
  1269.  
  1270. # set reg 0x0D:
  1271. mov $0x3D4, %dx # address port
  1272. mov $0x3D5, %cx # write port
  1273. mov $0x0D, %al # index
  1274. mov $0x00, %ah # data
  1275. call vga_io
  1276.  
  1277. # set reg 0x0E:
  1278. mov $0x3D4, %dx # address port
  1279. mov $0x3D5, %cx # write port
  1280. mov $0x0E, %al # index
  1281. mov $0x00, %ah # data
  1282. call vga_io
  1283.  
  1284. # set reg 0x0F:
  1285. mov $0x3D4, %dx # address port
  1286. mov $0x3D5, %cx # write port
  1287. mov $0x0F, %al # index
  1288. mov $0x50, %ah # data
  1289. call vga_io
  1290.  
  1291. # set Vertical Retrace Start:
  1292. mov $0x3D4, %dx # address port
  1293. mov $0x3D5, %cx # write port
  1294. mov $0x10, %al # index
  1295. mov $0x9C, %ah # data
  1296. call vga_io
  1297.  
  1298. # set Vertical Retrace End:
  1299. mov $0x3D4, %dx # address port
  1300. mov $0x3D5, %cx # write port
  1301. mov $0x11, %al # index
  1302. mov $0x0E, %ah # data
  1303. call vga_io
  1304.  
  1305. # set Vertical Display Enable End:
  1306. mov $0x3D4, %dx # address port
  1307. mov $0x3D5, %cx # write port
  1308. mov $0x12, %al # index
  1309. mov $0x8F, %ah # data
  1310. call vga_io
  1311.  
  1312. # set Logical Width:
  1313. mov $0x3D4, %dx # address port
  1314. mov $0x3D5, %cx # write port
  1315. mov $0x13, %al # index
  1316. mov $0x28, %ah # data
  1317. call vga_io
  1318.  
  1319. # set Underline Location:
  1320. mov $0x3D4, %dx # address port
  1321. mov $0x3D5, %cx # write port
  1322. mov $0x14, %al # index
  1323. mov $0x1F, %ah # data
  1324. call vga_io
  1325.  
  1326. # set Vertical Blank Start:
  1327. mov $0x3D4, %dx # address port
  1328. mov $0x3D5, %cx # write port
  1329. mov $0x15, %al # index
  1330. mov $0x96, %ah # data
  1331. call vga_io
  1332.  
  1333. # set Vertical Blank End:
  1334. mov $0x3D4, %dx # address port
  1335. mov $0x3D5, %cx # write port
  1336. mov $0x16, %al # index
  1337. mov $0xB9, %ah # data
  1338. call vga_io
  1339.  
  1340. # set CRTC Mode Control:
  1341. mov $0x3D4, %dx # address port
  1342. mov $0x3D5, %cx # write port
  1343. mov $0x17, %al # index
  1344. mov $0xA3, %ah # data
  1345. call vga_io
  1346.  
  1347. # set reg 0x18:
  1348. mov $0x3D4, %dx # address port
  1349. mov $0x3D5, %cx # write port
  1350. mov $0x18, %al # index
  1351. mov $0xFF, %ah # data
  1352. call vga_io
  1353.  
  1354. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1355. # % STEP 3: LOAD FONTS %
  1356. # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1357.  
  1358. # =======================================
  1359. # a. Turn off even/odd adressing
  1360. # =======================================
  1361.  
  1362. // SEQ4 |= 0x04 -- Memory mode Register:
  1363. mov $0x3C4, %dx # address port
  1364. mov $0x3C5, %cx # write port
  1365. mov $0x04, %al # index
  1366. mov $0x02, %ah # data
  1367. or $0x04, %ah
  1368. call vga_io
  1369.  
  1370. // GC5 &= ~0x10 -- Graphics Mode Register:
  1371. mov $0x3CE, %dx # address port
  1372. mov $0x3CF, %cx # write port
  1373. mov $0x05, %al # index
  1374. mov $0x10, %ah # data
  1375. and $0xEF, %ah
  1376. call vga_io
  1377.  
  1378. // GC6 &= ~0x02 -- Miscellaneous Graphics Register:
  1379. mov $0x3CE, %dx # address port
  1380. mov $0x3CF, %cx # write port
  1381. mov $0x06, %al # index
  1382. mov $0x0E, %ah # data
  1383. and $0xFD, %ah
  1384. call vga_io
  1385.  
  1386. # =======================================
  1387. # b. Set Plane 2 (P4)
  1388. # =======================================
  1389.  
  1390. // GC4 = 2 -- Read Map Select Register:
  1391. mov $0x3CE, %dx # address port
  1392. mov $0x3CF, %cx # write port
  1393. mov $0x04, %al # index
  1394. mov $0x02, %ah # data
  1395. call vga_io
  1396.  
  1397. // SEQ2 = 4 -- set Map Mask Register:
  1398. mov $0x3C4, %dx # address port
  1399. mov $0x3C5, %cx # write port
  1400. mov $0x02, %al # index
  1401. mov $0x04, %ah # data
  1402. call vga_io
  1403.  
  1404. # =======================================
  1405. # c. Write font (256 Character)
  1406. # =======================================
  1407.  
  1408. mov $0xE000, %ax
  1409. mov %ax, %ds
  1410. mov $0, %si
  1411.  
  1412. mov $0xB800, %ax
  1413. mov %ax, %es
  1414. mov $0x0, %di
  1415.  
  1416. mov $0, %bx # i counter.
  1417.  
  1418. copy_char:
  1419. mov $0, %cx
  1420.  
  1421. copy_byte:
  1422. mov %ds:(%si), %al
  1423. mov %al, %es:(%di)
  1424. inc %si
  1425. inc %di
  1426. inc %cx
  1427. cmp $0x10, %cx
  1428. jne copy_byte
  1429. add $0x10, %di
  1430. inc %bx
  1431. cmp $0x100, %bx
  1432. jne copy_char
  1433.  
  1434. # =======================================
  1435. # d. Reset Registers
  1436. # =======================================
  1437.  
  1438. // Reset SEQ2 -- set Map Mask Register:
  1439. mov $0x3C4, %dx # address port
  1440. mov $0x3C5, %cx # write port
  1441. mov $0x02, %al # index
  1442. mov $0x03, %ah # data
  1443. call vga_io
  1444.  
  1445. // Reset SEQ4 -- Memory mode Register:
  1446. mov $0x3C4, %dx # address port
  1447. mov $0x3C5, %cx # write port
  1448. mov $0x04, %al # index
  1449. mov $0x02, %ah # data
  1450. call vga_io
  1451.  
  1452. // Reset GC4 -- Read Map Select Register:
  1453. mov $0x3CE, %dx # address port
  1454. mov $0x3CF, %cx # write port
  1455. mov $0x04, %al # index
  1456. mov $0x00, %ah # data
  1457. call vga_io
  1458.  
  1459. // Reset GC5 -- Graphics Mode Register:
  1460. mov $0x3CE, %dx # address port
  1461. mov $0x3CF, %cx # write port
  1462. mov $0x05, %al # index
  1463. mov $0x10, %ah # data
  1464. call vga_io
  1465.  
  1466. // Reset GC6 -- Miscellaneous Graphics Register:
  1467. mov $0x3CE, %dx # address port
  1468. mov $0x3CF, %cx # write port
  1469. mov $0x06, %al # index
  1470. mov $0x0E, %ah # data
  1471. call vga_io
  1472.  
  1473. # lock
  1474. mov $0x20, %al
  1475. mov $0x3C0, %dx
  1476. out %al, %dx
  1477. mov $0x3DA, %dx
  1478. in %dx, %al
  1479.  
  1480. #----------------------------------------
  1481.  
  1482. # write to vga memory
  1483.  
  1484. clearscreen:
  1485. mov $0xB800, %ax
  1486. mov %ax, %ds
  1487. mov %ax, %es
  1488.  
  1489. mov $0, %si
  1490. clear_byte_vga:
  1491. movw $0x0200, (%si)
  1492. add $0x2, %si
  1493. cmp $2000, %si
  1494. jne clear_byte_vga
  1495.  
  1496. mov $0, %si
  1497.  
  1498. movb $'I', 0x00
  1499. movb $' ', 0x02
  1500. movb $'a', 0x04
  1501. movb $'m', 0x06
  1502. movb $' ', 0x08
  1503. movb $'B', 0x0A
  1504. movb $'I', 0x0C
  1505. movb $'O', 0x0E
  1506. movb $'S', 0x10
  1507. movb $'!', 0x12
  1508.  
  1509. mov $0x55AA, %cx
  1510.  
  1511. # idle:
  1512. jmp .
  1513.  
  1514. vga_io:
  1515. # al contains the index.
  1516. # ah contains the data.
  1517. # cx contains the read/write port.
  1518. # dx contains the address port.
  1519.  
  1520. # select the register by index
  1521. out %al, %dx
  1522. mov %cx, %dx
  1523. mov %ah, %al
  1524. out %al, %dx
  1525.  
  1526. # return
  1527. ret
  1528.  
  1529.  
  1530. .section .entry,"ax"
  1531. _entry:
  1532. jmp _start
  1533. .string "02/07/2013"
  1534. .org 0x10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement