Русификация видеоадаптера

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 27 дек 2010.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всем доброго дня!

    Собственно просто для интереса решил попробовать русифицировать видеоадаптер для текстового режима. Вначале хотел для режима 0x03, но так и не понял какого там размера шрифт (8x8 или 8x16). Поэтому решил использовать режим 0x01.

    Создал файл font.asm и вставил туда описание шрифта для всех 256 символов (из сайта Фроловых):

    Код (Text):
    1. boot_font0     db  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    2. boot_font1     db  0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E
    3. boot_font2     db  0x7E,0xFF,0xdb,0xFF,0xC3,0xE7,0xFF,0x7E
    4. boot_font3     db  0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00
    5. boot_font4     db  0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00
    6. boot_font5     db  0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C
    7. boot_font6     db  0x10,0x10,0x38,0x7C,0xFE,0x7C,0x38,0x7C
    8. boot_font7     db  0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00
    9. boot_font8     db  0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF
    10. boot_font9     db  0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00
    11. boot_font10    db  0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF
    12. boot_font11    db  0x0F,0x07,0x0F,0x7D,0xCC,0xCC,0xCC,0x78
    13. boot_font12    db  0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18
    14. boot_font13    db  0x3F,0x33,0x3F,0x30,0x30,0x70,0xF0,0xE0
    15. boot_font14    db  0x7F,0x63,0x7F,0x63,0x63,0x67,0xE6,0xC0
    16. boot_font15    db  0x99,0x5A,0x3C,0xE7,0xE7,0x3C,0x5A,0x99
    17. boot_font16    db  0x80,0xE0,0xF8,0xFE,0xF8,0xE0,0x80,0x00
    18. boot_font17    db  0x02,0x0E,0x3E,0xFE,0x3E,0x0E,0x02,0x00
    19. boot_font18    db  0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18
    20. boot_font19    db  0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x00
    21. boot_font20    db  0x7F,0xdb,0xdb,0x7B,0x1B,0x1B,0x1B,0x00
    22. boot_font21    db  0x3E,0x63,0x38,0x6C,0x6C,0x38,0xCC,0x78
    23. boot_font22    db  0x00,0x00,0x00,0x00,0x7E,0x7E,0x7E,0x00
    24. boot_font23    db  0x18,0x3C,0x7E,0x18,0x7E,0x3C,0x18,0xFF
    25. boot_font24    db  0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x00
    26. boot_font25    db  0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00
    27. boot_font26    db  0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00
    28. boot_font27    db  0x00,0x30,0x60,0xFE,0x60,0x30,0x00,0x00
    29. boot_font28    db  0x00,0x00,0xC0,0xC0,0xC0,0xFE,0x00,0x00
    30. boot_font29    db  0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00
    31. boot_font30    db  0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x00,0x00
    32. boot_font31    db  0x00,0xFF,0xFF,0x7E,0x3C,0x18,0x00,0x00
    33. boot_font32    db  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    34. boot_font33    db  0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00
    35. boot_font34    db  0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00
    36. boot_font35    db  0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00
    37. boot_font36    db  0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00
    38. boot_font37    db  0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00
    39. boot_font38    db  0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00
    40. boot_font39    db  0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00
    41. boot_font40    db  0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00
    42. boot_font41    db  0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00
    43. boot_font42    db  0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00
    44. boot_font43    db  0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00
    45. boot_font44    db  0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60
    46. boot_font45    db  0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00
    47. boot_font46    db  0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00
    48. boot_font47    db  0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00
    49. boot_font48    db  0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00
    50. boot_font49    db  0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00
    51. boot_font50    db  0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00
    52. boot_font51    db  0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00
    53. boot_font52    db  0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00
    54. boot_font53    db  0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00
    55. boot_font54    db  0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00
    56. boot_font55    db  0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00
    57. boot_font56    db  0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00
    58. boot_font57    db  0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00
    59. boot_font58    db  0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00
    60. boot_font59    db  0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60
    61. boot_font60    db  0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00
    62. boot_font61    db  0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00
    63. boot_font62    db  0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00
    64. boot_font63    db  0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00
    65. boot_font64    db  0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00
    66. ;boot_font65    db  0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00
    67. boot_font65    db 00000000b,01111110b,00000010b,00000010b,00000010b,00000010b,00000010b,00000000b
    68. boot_font66    db  0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00
    69. boot_font67    db  0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00
    70. boot_font68    db  0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00
    71. boot_font69    db  0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00
    72. boot_font70    db  0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00
    73. boot_font71    db  0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00
    74. boot_font72    db  0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00
    75. boot_font73    db  0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00
    76. boot_font74    db  0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00
    77. boot_font75    db  0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00
    78. boot_font76    db  0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00
    79. boot_font77    db  0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00
    80. boot_font78    db  0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00
    81. boot_font79    db  0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00
    82. boot_font80    db  0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00
    83. boot_font81    db  0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00
    84. boot_font82    db  0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00
    85. boot_font83    db  0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00
    86. boot_font84    db  0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00
    87. boot_font85    db  0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00
    88. boot_font86    db  0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00
    89. boot_font87    db  0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00
    90. boot_font88    db  0xC6,0x44,0x6C,0x38,0x38,0x6C,0xC6,0x00
    91. boot_font89    db  0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00
    92. boot_font90    db  0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00
    93. boot_font91    db  0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00
    94. boot_font92    db  0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00
    95. boot_font93    db  0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00
    96. boot_font94    db  0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00
    97. boot_font95    db  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF
    98. boot_font96    db  0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00
    99. boot_font97    db  0x00,0x00,0x78,0x0C,0x7C,0xCC,0x7C,0x00
    100. boot_font98    db  0x60,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00
    101. boot_font99    db  0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00
    102. boot_font100   db  0x0C,0x0C,0x0C,0x7C,0xCC,0xCC,0x7C,0x00
    103. boot_font101   db  0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00
    104. boot_font102   db  0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00
    105. boot_font103   db  0x00,0x00,0x7C,0xCC,0xCC,0x7C,0x0C,0xF8
    106. boot_font104   db  0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x00
    107. boot_font105   db  0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00
    108. boot_font106   db  0x0C,0x00,0x0C,0x0C,0x0C,0x0C,0x6C,0x38
    109. boot_font107   db  0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0x00
    110. boot_font108   db  0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00
    111. boot_font109   db  0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00
    112. boot_font110   db  0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00
    113. boot_font111   db  0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00
    114. boot_font112   db  0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60
    115. boot_font113   db  0x00,0x00,0x7C,0xCC,0xCC,0x7C,0x0C,0x0C
    116. boot_font114   db  0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00
    117. boot_font115   db  0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00
    118. boot_font116   db  0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00
    119. boot_font117   db  0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x7C,0x00
    120. boot_font118   db  0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00
    121. boot_font119   db  0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00
    122. boot_font120   db  0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00
    123. boot_font121   db  0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8
    124. boot_font122   db  0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00
    125. boot_font123   db  0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00
    126. boot_font124   db  0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00
    127. boot_font125   db  0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00
    128. boot_font126   db  0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00
    129. boot_font127   db  0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0x00
    130. boot_font128   db  0x1E,0x36,0x66,0x66,0x7E,0x66,0x66,0x00
    131. boot_font129   db  0x7C,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00
    132. boot_font130   db  0x7C,0x66,0x66,0x7C,0x66,0x66,0x7C,0x00
    133. boot_font131   db  0x7E,0x60,0x60,0x60,0x60,0x60,0x60,0x00
    134. boot_font132   db  0x38,0x6C,0x6C,0x6C,0x6C,0x6C,0xFE,0xC6
    135. boot_font133   db  0x7E,0x60,0x60,0x7C,0x60,0x60,0x7E,0x00
    136. boot_font134   db  0xdb,0xdb,0x7E,0x3C,0x7E,0xdb,0xdb,0x00
    137. boot_font135   db  0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00
    138. boot_font136   db  0x66,0x66,0x6E,0x7E,0x76,0x66,0x66,0x00
    139. boot_font137   db  0x3C,0x66,0x6E,0x7E,0x76,0x66,0x66,0x00
    140. boot_font138   db  0x66,0x6C,0x78,0x70,0x78,0x6C,0x66,0x00
    141. boot_font139   db  0x1E,0x36,0x66,0x66,0x66,0x66,0x66,0x00
    142. boot_font140   db  0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00
    143. boot_font141   db  0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00
    144. boot_font142   db  0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00
    145. boot_font143   db  0x7E,0x66,0x66,0x66,0x66,0x66,0x66,0x00
    146. boot_font144   db  0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x00
    147. boot_font145   db  0x3C,0x66,0x60,0x60,0x60,0x66,0x3C,0x00
    148. boot_font146   db  0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00
    149. boot_font147   db  0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00
    150. boot_font148   db  0x7E,0xdb,0xdb,0xdb,0x7E,0x18,0x18,0x00
    151. boot_font149   db  0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00
    152. boot_font150   db  0x66,0x66,0x66,0x66,0x66,0x66,0x7F,0x03
    153. boot_font151   db  0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00
    154. boot_font152   db  0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xFF,0x00
    155. boot_font153   db  0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xFF,0x03
    156. boot_font154   db  0xE0,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00
    157. boot_font155   db  0xC6,0xC6,0xC6,0xF6,0xDE,0xDE,0xF6,0x00
    158. boot_font156   db  0x60,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00
    159. boot_font157   db  0x78,0x8C,0x06,0x3E,0x06,0x8C,0x78,0x00
    160. boot_font158   db  0xCE,0xdb,0xdb,0xFB,0xdb,0xdb,0xCE,0x00
    161. boot_font159   db  0x3E,0x66,0x66,0x66,0x3E,0x36,0x66,0x00
    162. boot_font160   db  0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00
    163. boot_font161   db  0x00,0x3C,0x60,0x3C,0x66,0x66,0x3C,0x00
    164. boot_font162   db  0x00,0x00,0x7C,0x66,0x7C,0x66,0x7C,0x00
    165. boot_font163   db  0x00,0x00,0x7E,0x60,0x60,0x60,0x60,0x00
    166. boot_font164   db  0x00,0x00,0x3C,0x6C,0x6C,0x6C,0xFE,0xC6
    167. boot_font165   db  0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00
    168. boot_font166   db  0x00,0x00,0xdb,0x7E,0x3C,0x7E,0xdb,0x00
    169. boot_font167   db  0x00,0x00,0x3C,0x66,0x0C,0x66,0x3C,0x00
    170. boot_font168   db  0x00,0x00,0x66,0x6E,0x7E,0x76,0x66,0x00
    171. boot_font169   db  0x00,0x18,0x66,0x6E,0x7E,0x76,0x66,0x00
    172. boot_font170   db  0x00,0x00,0x66,0x6C,0x78,0x6C,0x66,0x00
    173. boot_font171   db  0x00,0x00,0x1E,0x36,0x66,0x66,0x66,0x00
    174. boot_font172   db  0x00,0x00,0xC6,0xFE,0xFE,0xD6,0xC6,0x00
    175. boot_font173   db  0x00,0x00,0x66,0x66,0x7E,0x66,0x66,0x00
    176. boot_font174   db  0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00
    177. boot_font175   db  0x00,0x00,0x7E,0x66,0x66,0x66,0x66,0x00
    178. boot_font176   db  0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44
    179. boot_font177   db  0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA
    180. boot_font178   db  0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77
    181. boot_font179   db  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18
    182. boot_font180   db  0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18
    183. boot_font181   db  0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18
    184. boot_font182   db  0x36,0x36,0x36,0xF6,0x36,0x36,0x36,0x36
    185. boot_font183   db  0x00,0x00,0x00,0xFE,0x36,0x36,0x36,0x36
    186. boot_font184   db  0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18
    187. boot_font185   db  0x36,0xF6,0x06,0xF6,0x36,0x36,0x36,0x36
    188. boot_font186   db  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36
    189. boot_font187   db  0x00,0xFE,0x06,0xF6,0x36,0x36,0x36,0x36
    190. boot_font188   db  0x36,0xF6,0x06,0xFE,0x00,0x00,0x00,0x00
    191. boot_font189   db  0x36,0x36,0x36,0xFE,0x00,0x00,0x00,0x00
    192. boot_font190   db  0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00
    193. boot_font191   db  0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x18
    194. boot_font192   db  0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00
    195. boot_font193   db  0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00
    196. boot_font194   db  0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18
    197. boot_font195   db  0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18
    198. boot_font196   db  0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00
    199. boot_font197   db  0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18
    200. boot_font198   db  0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18
    201. boot_font199   db  0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36
    202. boot_font200   db  0x36,0x37,0x30,0x3F,0x00,0x00,0x00,0x00
    203. boot_font201   db  0x00,0x3F,0x30,0x37,0x36,0x36,0x36,0x36
    204. boot_font202   db  0x36,0xF7,0x00,0xFF,0x00,0x00,0x00,0x00
    205. boot_font203   db  0x00,0xFF,0x00,0xF7,0x36,0x36,0x36,0x36
    206. boot_font204   db  0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36
    207. boot_font205   db  0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00
    208. boot_font206   db  0x36,0xF7,0x00,0xF7,0x36,0x36,0x36,0x36
    209. boot_font207   db  0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00
    210. boot_font208   db  0x36,0x36,0x36,0xFF,0x00,0x00,0x00,0x00
    211. boot_font209   db  0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18
    212. boot_font210   db  0x00,0x00,0x00,0xFF,0x36,0x36,0x36,0x36
    213. boot_font211   db  0x36,0x36,0x36,0x3F,0x00,0x00,0x00,0x00
    214. boot_font212   db  0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00
    215. boot_font213   db  0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18
    216. boot_font214   db  0x00,0x00,0x00,0x3F,0x36,0x36,0x36,0x36
    217. boot_font215   db  0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x36
    218. boot_font216   db  0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x18
    219. boot_font217   db  0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00
    220. boot_font218   db  0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x18
    221. boot_font219   db  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
    222. boot_font220   db  0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF
    223. boot_font221   db  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
    224. boot_font222   db  0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F
    225. boot_font223   db  0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00
    226. boot_font224   db  0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x00
    227. boot_font225   db  0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00
    228. boot_font226   db  0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x00
    229. boot_font227   db  0x00,0x00,0x66,0x66,0x3E,0x06,0x3C,0x00
    230. boot_font228   db  0x00,0x00,0x7E,0xdb,0xdb,0x7E,0x18,0x00
    231. boot_font229   db  0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00
    232. boot_font230   db  0x00,0x00,0x66,0x66,0x66,0x66,0x7F,0x03
    233. boot_font231   db  0x00,0x00,0x66,0x66,0x3E,0x06,0x06,0x00
    234. boot_font232   db  0x00,0x00,0xdb,0xdb,0xdb,0xdb,0xFF,0x00
    235. boot_font233   db  0x00,0x00,0xdb,0xdb,0xdb,0xdb,0xFF,0x03
    236. boot_font234   db  0x00,0x00,0xE0,0x60,0x7C,0x66,0x7C,0x00
    237. boot_font235   db  0x00,0x00,0xC6,0xC6,0xF6,0xDE,0xF6,0x00
    238. boot_font236   db  0x00,0x00,0x60,0x60,0x7C,0x66,0x7C,0x00
    239. boot_font237   db  0x00,0x00,0x7C,0x06,0x3E,0x06,0x7C,0x00
    240. boot_font238   db  0x00,0x00,0xCE,0xdb,0xFB,0xdb,0xCE,0x00
    241. boot_font239   db  0x00,0x00,0x3E,0x66,0x3E,0x36,0x66,0x00
    242. boot_font240   db  0x66,0x00,0x7E,0x60,0x7C,0x60,0x7E,0x00
    243. boot_font241   db  0x24,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00
    244. boot_font242   db  0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30
    245. boot_font243   db  0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C
    246. boot_font244   db  0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18
    247. boot_font245   db  0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0x70
    248. boot_font246   db  0x00,0x18,0x18,0x00,0x7E,0x00,0x18,0x18
    249. boot_font247   db  0x00,0x76,0xDC,0x00,0x76,0xDC,0x00,0x00
    250. boot_font248   db  0x00,0x38,0x6C,0x6C,0x38,0x00,0x00,0x00
    251. boot_font249   db  0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00
    252. boot_font250   db  0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00
    253. boot_font251   db  0xF8,0x06,0x73,0x79,0x23,0xFE,0xA0,0xA0
    254. boot_font252   db  0x06,0x08,0xCB,0x6B,0x68,0x5B,0x58,0x8C
    255. boot_font253   db  0x30,0x48,0x10,0x20,0x78,0x00,0x00,0x00
    256. boot_font254   db  0xFF,0x81,0xBD,0xA5,0xA5,0xBD,0x81,0xFF
    257. boot_font255   db  0x00,0x00,0x00,0x00,0x00,0x42,0x7E,0x00
    Не знаю заметили Вы или нет, то там символ boot_font65 (а это буква A) мной изменённый. Я решил на него изобразить букву Г. Далее я пишу главный файл boot.asm:

    Код (Text):
    1. use16
    2. org 0x7C00
    3.  
    4. boot_code:
    5.     mov AX,CS
    6.     mov DS,AX
    7.     mov ES,AX
    8.     mov FS,AX
    9.     mov GS,AX
    10.     mov SS,AX
    11.     mov SP,0x7C00-4
    12.    
    13.     mov AH,0x02
    14.     mov AL,4                    ; Количество читаемых секторов
    15.     mov CL,2                    ; Сектор
    16.     mov CH,0                    ; Цилиндр
    17.     mov DH,0                    ; Головка
    18.     mov DL,0                    ; Диск
    19.     mov BX,boot_font
    20.     int 0x13
    21.    
    22.     mov AH,0x11
    23.     mov AL,0x01
    24.     mov BH,8
    25.     mov BL,0
    26.     mov CX,256
    27.     mov DX,0
    28.     mov BP,boot_font
    29.     int 0x10
    30.    
    31.     mov AH,0x00
    32.     mov AL,0x01
    33.     int 0x10
    34.    
    35.     mov AH,0x09
    36.     mov AL,65
    37.     mov BH,0
    38.     mov BL,00001010b
    39.     mov CX,1
    40.     int 0x10
    41.    
    42.     hlt
    43.  
    44. rb 510-($-$$)
    45. db 0x55,0xAA
    46.  
    47. boot_font:
    48.     include "Font.asm"
    49.  
    50. rb (2880*512)-($-$$)-1
    51. db 0
    Вроде всё правильно. Я загружаю дополнительно 4 сектора где находится описание шрифта. Почему 4?! Каждый символ занимает 8 байт, а всего у нас 256 символов. 256 * 8 = 2048. А если перевести в сектора, то 2048 / 512 = 4.

    Далее я загружаю весь шрифт. Потом переключаю режим и вывожу символ. Всё это я компилирую. Запускаю в QEMU:

    Код (Text):
    1. qemu -fda boot.bin -boot a
    Он выводит стандартную A и почему то тут же ломается:

    [​IMG]

    Запускаю через Bochs. Ошибок нет, но также символ A как и обычный. Почему не работает?

    И кое что заметил. Когда я убираю вот эту строчку из загрузки шрифтов в видеопамять (знакогенератор):

    Код (Text):
    1. mov BP,boot_font
    Тогда, разумеется у меня русифицировано ничего и не будет, но тогда и QEMU не выдаёт ошибку. В чём дело?
     
  2. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    mov BP,boot_font

    Вы уверены что это компелируеца в mov bp,offset boot_font

    ?

    PS Когда я делал русефекатор я в конце сделал через порты. Почему я не был счастлев с int 10h the service - не помню, alas.
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    PSR1257
    судя по rb 510 вместо db 510 dup(?) это синтаксис ФАСМА поэтому mov BP,boot_font соответствует mov bp,offset boot_font или lea BP,[boot_font]
     
  4. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    PSR1257
    Нет. Я пишу на ассемблере FASM. И если я введу:

    Код (Text):
    1. mov BP,offset boot_font
    То получу ругательство от ассемблера:

    Так как нужно сделать?
     
  5. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Кстати, вот этот код:

    Код (Text):
    1. lea BP,[boot_font]
    Вместо вот этого:

    Код (Text):
    1. mov BP,boot_font
    Не вызывает ошибку при запуске QEMU. Однако так ничего и не русифицировалось. Почему?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    s3dworld
    Чтобы с ходу ответить на твой вопрос нужно
    1) либо заниматься руссификацией видеоадаптеров постоянно,
    2) либо вдумчиво и с отладчиком в руках пройтись по тексту твоей программы
    на первое у меня нет такого опыта. но могу посоветовать книгу Кулакова "Программирование на аппаратном уровне" на второе - у меня нет времени и желания заниматься этой проблемой. Вопрос, а почему сам с отладчиком не смотришь, как работает твоя программа?
     
  7. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Mikl___
    Посмотреть то я посмотрю, но я же не знаю какие должны быть внутренности BIOS процедур. А следовать там за каждой инструкцией, я просто заблужусь. Я собственно по книге Кулакова и нашёл эту функцию русификации. Вот только что-то она не заработала. Решил спросить почему. Всё же правильно написал.
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    s3dworld

    Насчет оффсета - просто загрузите ваш код в ЛЮБОЙ дизассемблер или отладчик типа td.exe и посмотрите что там.

    Предлагаю загрузку в знакогенератор отладить на РЕАЛЬНОЙ машине. Отдельно. Если у вас нет дисковода - почему бы не сделать один маленький раздельчег с DOS/win98?

    Эмулятор может и не эмулировать все подряд.
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    s3dworld
    Есть книга Джордейна "Справочник программиста персонального компьютера", там в главе, посвященной видеоадаптеру пример, как выводить на экран символы заданные пользователем - чем не руссификация? Есть книга Майкла Абраша "Таинства программирования графики" (Michael Abrash's zen of graphics) там о выводе символов в графическом режиме, то чем ты занялся достаточно специфично и, наверное, мало кто может помочь так как DOS давно умер и здесь программируют либо на API либо пишут драйвера. Насколько я помню к книге Кулакова прилагалась дискета с рабочими программами, может быть стоит поискать?
    По поводу отладки целиком поддерживаю PSR1257 такие вещи нужно делать на реальной машине, а не под эмулятором
     
  10. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    PSR1257
    Что за TD? Turbo Debugger от Borland? А он разве не 16 битный только лишь? Хотя нет, по моему был и 32-битный. Но он же умеет только COM и EXE файлы дизассемблировать и отлаживать. Сырые бинарники у меня не получилось. Или там как-то по другому нужно? А что именно Вы предлагаете, сказав сделать раздел и проверить на реальной машине?

    Mikl___
    Не, ну я вот и сам придумал способ как можно вывести любые символы в графическом режиме. Но вот в текстовом так не катит. А знакогенератор почему-то не поменялся. Однако в той же KolibriOS по русский выводится в загрузчике. А там текстовый режим. Однако как-то переопределены символы.

    Вообще есть какой-нибудь простой способ заменить символы своими для текстового режима?
     
  11. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    ++ Можете поискать и запрограммировать порты - кодом примерно таким:

    Код (Text):
    1.         mov  ax,0a000h
    2.         mov  es,ax
    3.         mov  dx,03c4h
    4.         mov  ax,402h
    5.         out   dx,ax
    6.         mov  ax,704h
    7.         out   dx,ax
    8.         mov  dx,3ceh
    9.         mov  ax,204h
    10.         out   dx,ax
    11.         mov  ax,05h
    12.         out   dx,ax
    13.         mov  ax,406h
    14.         out   dx,ax
    15. ...(окончание опущено)
    Но имхо все это тоже может не работать и не будет никакой уверенности - почему. Единственное, что можно заметить - загрузка знаков идет в память A000h:код_символа * 32, так что при переключении на этот банк памяти загруженные символы должны быть видны. Но как работает эмулятор - ... ?
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    Возьми исходный код загрузчика Колибри и распотроши его или задай вопрос на сайте Колибри... Делов-то
     
  13. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Turbo Debugger от Borland?

    Yeah.

    Но он же умеет только COM и EXE файлы дизассемблировать и отлаживать.

    Переименуйте свой boot.xxx в *.com. Если совсем плохо - откройте в hview. Или в любом хексредакторе, найдите команду и проверьте. Не умеете читать опкоды? Забейте два маркера до и после команды типа dd 0ABCDEF99h.

    А что именно Вы предлагаете, сказав сделать раздел и проверить на реальной машине?

    Я и Mikl___ рекомендовале вам реальный эксперимент. Поскольку даже на РЕАЛЬНОЙ машине эта функция BIOS может не работать! Что говорить о муляторе?

    Вы как собераетесь USB пейсать, драйвер шины и все такое? Делайте еще один раздел и мультизагрузку. Ставьте на новый DOS/win98/etc - все, что угодно где можно напрямую работать с железками.
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
  15. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Если кому интересно, то я добился чего хотел, только другим способом и в графическом режиме. По определённому адресу загрузил все символы (шрифт). Потом просто напросто брал от туда описание символа и по маске рисовал. Разрешение 320x200 при 256 цветах. Вот как получилось:

    [​IMG]
     
  16. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    s3dworld
    Почему используется подфункция al=1? Установкой пользовательского шрифта заведует подфункция 0.
     
  17. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Сделал с подфункцией 0:

    Код (Text):
    1. use16
    2. org 0x7C00
    3.  
    4. boot__code16:
    5.     mov AX,CS
    6.     mov DS,AX
    7.     mov ES,AX
    8.     mov FS,AX
    9.     mov GS,AX
    10.     mov SS,AX
    11.     mov AX,0x7BF0
    12.     mov SP,AX
    13.    
    14.     mov AH,0x02
    15.     mov AL,25                   ; Количество читаемых секторов
    16.     mov CL,4                    ; Сектор
    17.     mov CH,0                    ; Цилиндр
    18.     mov DH,0                    ; Головка
    19.     mov DL,0                    ; Диск
    20.     mov BX,boot__font
    21.     int 0x13
    22.    
    23.     mov AH,0x11
    24.     mov AL,0x00
    25.     mov BH,8
    26.     mov BL,0
    27.     mov CX,256
    28.     mov DX,0
    29.     mov BP,boot__font
    30.     int 0x10
    31.    
    32.     mov AH,0x00
    33.     mov AL,0x01
    34.     int 0x10
    35.    
    36.     mov AH,0x09
    37.     mov AL,0x9F
    38.     mov BH,0
    39.     mov BL,00001010b
    40.     mov CX,1
    41.     int 0x10
    42.    
    43.     hlt
    44.    
    45.     jmp boot__continuation
    46.  
    47. boot__stack16:
    48.     db 0,0,0,0,0,0,0,0
    49.     boot_stack16_start:
    50.     db 0,0,0,0,0,0,0,0
    51.  
    52. rb 510-($-$$)
    53. db 0x55,0xAA
    54.  
    55. boot__font:
    56.     include "Font.asm"
    57.  
    58. boot__continuation:
    59.     include "Preparing.asm"
    60.  
    61. rb (3*1024-1)-($-$$)
    62. db 0x00
    Никакого результата.
     
  18. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Установка режима сбрасывает все настройки. Устанавливать шрифт нужно после установки режима. Кроме того, в принципе никто не обещал, что int 13h не разрушает es, а он нужен для последующего int 10h, так что лучше заново явно выставить es в соответствующем месте. Больше ничего в глаза не бросается.
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    s3dworld
    В общем-то поиск по форуму иногда тоже имеет смысл:
    http://www.wasm.ru/forum/viewtopic.php?id=27615
    В частности посты 5 и 10 стоят внимания. :)
    diamond
    Разве значения регистров не обязаны сохраняться всегда, когда в описании ф-ии прерывания не указано обратное?
    По крайней мере здесь подтверждается такое поведение. Хотя, возможно, не все BIOS'ы всегда могут следовать этому правилу, но изменить сегментный регистр (по крайней мере его видимую часть) им совесть не позволит.
     
  20. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    l_inc
    В справочнике Брауна куча примеров, когда BIOSы разрушают то, что по идее не должны. Первый, но далеко не единственный - int 05 ("BUG: some old BIOSes/applications appear to destroy BP on return"). Впрочем, про 1302 ничего такого не написано, так что второй мой совет - по существу перестраховка на случай, если не сработает первый :)
    Насчёт порчи именно сегментного регистра es - поскольку объём считанных данных запросто может быть больше 64K, то BIOSу, читающему "по кусочкам", проще при переходе к следующему куску увеличивать es, чем проверять, не вышел ли bx за границы сегмента. Если при этом es не сохраняется явно - получим фигню. Впрочем, это скорее теоретические рассуждения.