VGA порты ввода/вывода

Тема в разделе "WASM.ASSEMBLER", создана пользователем spa, 15 фев 2007.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    И так...
    Требуеться написать две функции, на fasm одна переводит в графическийий режим, а другая рисую точку по заданным коардинатам.
    Есть несколько ограничений, нельзя использовать прирывания биоса/доса, код 16 :), и очень большое ограничение по размеры, желательно не болеее 100/50 байт ;)
    Гравический режим как токовой значения не имеет, но желательны комментарии чтобы я при желани мог его изменить на нужный. Хочу заметить что программа будет грузиться сразу после биоса (boot sector)! Возможен вариант когда мне просто обьеснят как енто замутить...


    PS Зубкова читал там много
    PSS есче вопрос такой, каким способом(кроме поточечно) можно вывести линию, зная координаты начала и конеца
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    В аттаче мой хламник из старой документации по сабжу :)
    Замутить VGA режим через регистры геморойно, но в принципе реально. Для Vesa режима боюсь без биоса не обойтись.
    Раз прога пускается не из win эмулятора ДОС, то я бы активизировал Vesa (через биос) и использовал линейный видеобуфер (не нужно страницы переключать) см поле 28h в буфере заполняемом vesa функцией AX = 4F01h.
    Доступ к LBA из чистого ДОС
    xor ax, ax
    mov gs, ax ; адресация из нулевого сегмента
    mov edi, адрес видеобуфуера
    mov gs:[edi], цвет ; устанвить пиксел с координатами 0,0
    Под виндой этот приём увы не прокатывает :dntknw:
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Полный архив не прицепился, пришлось самую интересную часть отделить :)
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    К сожеленю биус/дос прерывания незя :dntknw: а доки твои почитаю, но там очень много букв, и так что если у кого есть еще, а есчё лучше примерв, в студию...
     
  5. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    А если тебе БИОС низзя, то как ты переключишь режим видео? Стандартный то - текстовый. А уже давно прошли старые времена где был вроде стандарт - порты ввода\вывода VGA и их программирование - сейчас это все конфиденциальная информация и есть только дрова :)

    Я помню страшные мануалы, об описании как вручную через порты установить новый режим видео...

    Не зря же у кадой видеокарты есть VESA BIOS специально для совместимости создано - включи режим и рисуй...
     
  6. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Насчет рисования линий \ окружностей и иже с ними - есть спецалгоритмы, все расчеты целочисленные - поищи по интернету...

    По крайней мере алгоритм рисования линий валяется везде...
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Ultrin Faern
    А куда VGA делось :), лично на моей gf 440 mx старые игруши в ДОС запускаються вполне, так что vga по моему предположения осталось. А алгоритм рисования линии я уже придумал, около 10 целочисленых операций с циклом...
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Y_Mur
    А вот про активацию vesa, без биуса не как, всмысле без его прирываний ;)
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    без DOSа ясно, потому что бутсектор.
    А почему без BIOSа-то нельзя? оО
    Или ты пишешь свою прошивку для биоса :lol:
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Все современные видяхи обратно совместимы с VGA в VGA режимах.
    Переключиться без использования BIOS можно.
    Только вот в бут сектор это дело не влезет.
    Та таблицы составляются в какие регистры чего писать.
    Дык вот эти таблицы больше 150 байт потянут, а ты ещё с кодом хочешь...
    Чем BIOS то не угодил??

    Про линию не ясно.
    Это ж растровая графика.
    Что значит не по точкам?
    Здесь всё про точкам рисуется...
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Можете считать что биосом мне религия пользоваться е позволяет :) (на самом деле там покруче...)

    cppasm
    Не по точкам значит я не сам выщитываю расположения этих точек (например отпровляю в видуху 4 координаты :)

    И кстати у Зубкова впринципе есть пример... , но там мало коменнов...

    И есчё, может кактить мона не полностью переделать режим, а переделать стандартный... который при загрузке стоит, давайте подумаем, неужели ничего не соабразим.

    PS примеры Зубкова могу кинуть...
     
  12. NoResponse

    NoResponse New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    89
    да, кинь пжалста. очень интересно взглянуть
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну вот, боянистый пример, странно, что ты его не нашёл, может это не то, что тебе надо?
    Код (Text):
    1. ;;
    2. ;;MODES.ASM - to switch from mode 03h (80x25x16 text) to mode 013h (320x200x256 graphics)
    3. ;;without using the VGA BIOS. This sample also demonstrates the setting of the text mode font,
    4. ;;and the use of a custom palette.
    5. ;;
    6. ;;(C) Copyright 1997 Anthony A.J.Williams. All Rights Reserved, This source code may be
    7. ;;freely distributed unmodified, so long as it is free of charge.
    8. ;;Any part of this code may be used in other programs provided that credit is given to me
    9. ;;
    10. ;;Thanks to David Lindauer for his help in debugging this program, and in providing me with
    11. ;;essential information.
    12. ;;
    13. ideal
    14. smart
    15. jumps
    16.  
    17. model large
    18.  
    19. MISC = 03c2h
    20. SEQUENCER = 03c4h
    21. CRTC = 03d4h
    22. GRAPHICS = 03ceh
    23. FEATURE = 03dah
    24. ATTRIB = 03c0h
    25. PELADDRESSWRITE = 03c8h
    26. PELDATAREG = 03c9h
    27. STATUS = 03dah
    28.  
    29. GRREGWRMODE = 5
    30. GRREGMISC = 6
    31. SQREGMAPMASK = 2
    32. SQREGMEMORY = 4
    33.  
    34. BYTESPERFONT = 16
    35. PALETTELEN = 256
    36. NUMSEQUENCER = 5
    37. NUMCRTC = 19h
    38. NUMGRAPHICS = 9
    39. NUMATTRIB = 15h
    40.  
    41. VREND=011h
    42. NOPROT=07fh
    43.  
    44. ENABLEATTRIB = 020h
    45.  
    46. CURSORTOPDATA = 17
    47. CURSORBOTTOMDATA = 18
    48.  
    49. BIOSMODE = 049h
    50. COLUMNS = 04ah
    51. CURSORTOP = 061h
    52. CURSORBOTTOM = 060h
    53. PAGESIZE = 04ch
    54. PAGEOFFSET = 04eh
    55. PAGENUM = 062h
    56. MODESELVAL = 065h
    57.  
    58. macro IODELAY
    59.  REPT 8
    60.   jmp $+2
    61.  ENDM
    62. endm
    63.  
    64. codeseg
    65.  
    66. p386
    67.  
    68. proc OutRegs                            ;Output CL registers to port DX
    69.  xor al,al                              ;start at reg 0
    70. @@loop:                                 ;
    71.  mov ah,[si]                            ;load data
    72.  inc si                                 ;update source
    73.  out dx,ax                              ;output data
    74.  IODELAY
    75.  inc al                                 ;increase register number
    76.  dec cl                                 ;decrease count
    77.  jnz @@loop                             ;loop whilst still OK
    78.  ret                                    ;and exit
    79. endp                                    ;
    80.  
    81. proc SetModeRegs                        ;set VGA registers for mode data
    82.                                         ;pointed to by SI
    83.  mov dx,STATUS                          ;get retrace reg
    84. @@1:                                    ;
    85.  in al,dx                               ;get value
    86.  IODELAY                                ;delay
    87.  test al,8                              ;check for vertical retrace bit
    88.  jnz @@1                                ;loop until clear
    89. @@2:                                    ;
    90.  in al,dx                               ;get value
    91.  IODELAY                                ;delay
    92.  test al,8                              ;check for retrace again
    93.  jz @@2                                 ;loop until it's set this time
    94.                                         ;so we get start of ret. to set mode
    95.  mov es,[Seg0040]                       ;load BIOS segment
    96.  xor ah,ah                              ;zero AH
    97.  mov al,[si]                            ;load BIOS mode number
    98.  seges mov [BIOSMODE],al                ;store mode number
    99.  inc si                                 ;update SI
    100.  mov al,[si]                            ;load number of columns
    101.  seges mov [COLUMNS],al                 ;store number of columns
    102.  inc si                                 ;update SI
    103.  mov di,[si]                            ;load Screen Seg
    104.  mov [VidSeg],di                        ;store video segment
    105.  add si,2                               ;update SI
    106.  mov al,[si+CURSORTOPDATA]              ;get cursor top data
    107.  seges mov [CURSORTOP],al               ;store it
    108.  mov al,[si+CURSORBOTTOMDATA]           ;get cursor bottom data
    109.  seges mov [CURSORBOTTOM],al            ;store it
    110.  mov dx,MISC                            ;get VGA MISC reg num
    111.  mov al,[si]                            ;load AL
    112.  inc si                                 ;update source
    113.  out dx,al                              ;output to port
    114.  IODELAY
    115.  mov dx,FEATURE                         ;get Feature controller number
    116.  mov al,[si]                            ;load data
    117.  inc si                                 ;update source
    118.  out dx,al                              ;output register data
    119.  IODELAY
    120.  mov dx,SEQUENCER                       ;get sequencer port number
    121.  mov cl,NUMSEQUENCER                    ;get number of regs to set
    122.  call OutRegs                           ;do them
    123.  mov ah,[si+VREND]                      ;load CRTC VREND byte
    124.  mov al,VREND                           ;load reg number
    125.  and ah,NOPROT                          ;clear protection bit
    126.  mov dx,CRTC                            ;CRTC port number
    127.  out dx,ax                              ;no protection
    128.  IODELAY
    129.  mov cl,NUMCRTC                         ;number of CRTC regs
    130.  call OutRegs                           ;output to port
    131.  mov dx,GRAPHICS                        ;get graphics port number
    132.  mov cl,NUMGRAPHICS                     ;get number of regs
    133.  call OutRegs                           ;do it
    134.  mov dx,FEATURE                         ;load feature controller port
    135.  in al,dx                               ;reset attrib flip flop by reading
    136.  IODELAY
    137.  mov dx,ATTRIB                          ;attribute controller port
    138.  mov cl,NUMATTRIB                       ;number of regs
    139.  xor al,al                              ;clear AL
    140. @@loop:                                 ;
    141.  mov ah,[si]                            ;load AH
    142.  out dx,al                              ;output to port
    143.  IODELAY                                ;delay before register write
    144.  xchg al,ah                             ;swap data/reg num
    145.  out dx,al                              ;output to port
    146.  xchg ah,al                             ;swap back
    147.  inc al                                 ;next reg
    148.  inc si                                 ;increase source
    149.  cmp al,cl                              ;done yet?
    150.  jb @@loop                              ;loop until done
    151.  mov al,ENABLEATTRIB                    ;enable attribute register reads
    152.  out dx,al                              ;do it
    153.  IODELAY
    154.  ret                                    ;and exit
    155. endp                                    ;
    156.  
    157. proc WritePalette                       ;set up palette
    158.  mov dx,PELADDRESSWRITE                 ;colour write reg
    159.  xor al,al                              ;select bottom of map
    160.  out dx,al                              ;do it
    161.  IODELAY
    162.  mov si,offset palette                  ;get palette data
    163.  mov dx,PELDATAREG                      ;get data reg
    164.  mov cx,PALETTELEN                      ;length of palette
    165. @@loop:                                 ;
    166.  mov al,[si]                            ;load Red
    167.  inc si                                 ;update SI
    168.  out dx,al                              ;write it
    169.  IODELAY
    170.  mov al,[si]                            ;load Green
    171.  inc si                                 ;update SI
    172.  out dx,al                              ;write it
    173.  IODELAY
    174.  mov al,[si]                            ;load Blue
    175.  inc si                                 ;update SI
    176.  out dx,al                              ;write it
    177.  IODELAY
    178.  dec cx                                 ;decrease count
    179.  jnz @@loop                             ;loop until all done
    180.  ret                                    ;then exit
    181. endp                                    ;
    182.  
    183. proc SetFont                            ;
    184.  mov dx,GRAPHICS                        ;get graphics port
    185.  mov al,GRREGWRMODE                     ;get write mode reg
    186.  out dx,al                              ;select the reg
    187.  IODELAY                                ;delay a bit
    188.  inc dx                                 ;change DX
    189.  in al,dx                               ;get value
    190.  IODELAY                                ;pause
    191.  mov [oldmode],al                       ;store it
    192.  dec dx                                 ;restore DX
    193.  mov al,GRREGMISC                       ;get misc reg
    194.  out dx,al                              ;select the reg
    195.  IODELAY                                ;delay a bit
    196.  inc dx                                 ;change DX
    197.  in al,dx                               ;get value
    198.  IODELAY                                ;pause
    199.  mov [oldmisc],al                       ;store it
    200.  dec dx                                 ;restore DX
    201.  mov dx,SEQUENCER                       ;get sequencer port
    202.  mov al,SQREGMAPMASK                    ;get map mask reg
    203.  out dx,al                              ;select the reg
    204.  IODELAY                                ;delay a bit
    205.  inc dx                                 ;change DX
    206.  in al,dx                               ;get value
    207.  IODELAY                                ;pause
    208.  mov [oldmask],al                       ;store it
    209.  dec dx                                 ;restore DX
    210.  mov al,SQREGMEMORY                     ;get memory selector reg
    211.  out dx,al                              ;select the reg
    212.  IODELAY                                ;delay a bit
    213.  inc dx                                 ;change DX
    214.  in al,dx                               ;get value
    215.  IODELAY                                ;pause
    216.  mov [oldmem],al                        ;store it
    217.  mov dx,GRAPHICS                        ;select graphics port
    218.  mov al,GRREGWRMODE                     ;get write mode reg
    219.  mov ah,[oldmode]                       ;get old value
    220.  and ah,0fch                            ;mask it
    221.  out dx,ax                              ;set new value
    222.  IODELAY                                ;pause
    223.  mov al,GRREGMISC                       ;get misc reg
    224.  mov ah,[oldmisc]                       ;get old value
    225.  and ah,0f1h                            ;mask it
    226.  or ah,4                                ;set a flag
    227.  out dx,ax                              ;set it
    228.  IODELAY                                ;pause
    229.  mov dx,SEQUENCER                       ;select sequencer port
    230.  mov al,SQREGMAPMASK                    ;get mask reg
    231.  mov ah,4                               ;get new value
    232.  out dx,ax                              ;set it
    233.  IODELAY                                ;pause
    234.  mov al,SQREGMEMORY                     ;get memory reg
    235.  mov ah,[oldmem]                        ;get old value
    236.  or ah,4                                ;set flag
    237.  out dx,ax                              ;set value
    238.  IODELAY                                ;pause
    239.  mov ax,0a000h                          ;get seg of font mem
    240.  mov es,ax                              ;in ES
    241.  xor di,di                              ;zero destination
    242.  mov si,offset f8x16                    ;get source
    243.  xor ch,ch                              ;clear entries count
    244.  cld                                    ;set direction flag correctly
    245. @@loop1:                                ;
    246.  push di                                ;save destination
    247.  mov cl,BYTESPERFONT                    ;bytes per font
    248. @@loop2:                                ;
    249.  movsb                                  ;move a byte
    250.  dec cl                                 ;decrease count
    251.  jnz @@loop2                            ;loop until all done
    252.  pop di                                 ;restore destination
    253.  add di,32                              ;update it
    254.  dec ch                                 ;decrease outer count
    255.  jnz @@loop1                            ;loop until all done
    256.  mov dx,GRAPHICS                        ;get graphics port
    257.  mov al,GRREGWRMODE                     ;get 1st reg
    258.  mov ah,[oldmode]                       ;get old value
    259.  out dx,ax                              ;set it
    260.  IODELAY                                ;pause
    261.  mov al,GRREGMISC                       ;get 2nd reg
    262.  mov ah,[oldmisc]                       ;get old value
    263.  out dx,ax                              ;set it
    264.  IODELAY                                ;pause
    265.  mov dx,SEQUENCER                       ;get seq port
    266.  mov al,SQREGMAPMASK                    ;get 3rd reg
    267.  mov ah,[oldmask]                       ;get old value
    268.  out dx,ax                              ;set it
    269.  IODELAY                                ;pause
    270.  mov al,SQREGMEMORY                     ;get 4th reg
    271.  mov ah,[oldmem]                        ;get old value
    272.  out dx,ax                              ;set it
    273.  IODELAY                                ;pause
    274.  ret                                    ;exit
    275. endp
    276.  
    277. proc ClearScreen                        ;clears the vid mem
    278.  mov es,[VidSeg]                        ;load segment of video memory
    279.  xor eax,eax                            ;zero screen memory
    280.  mov ecx,16384                          ;32K words
    281.  xor edi,edi                            ;zero destination
    282.  cld                                    ;going up
    283.  rep stosd                              ;clear memory
    284.  ret                                    ;and exit
    285. endp                                    ;
    286.  
    287.  
    288. startup:                                ;
    289.  mov ax,seg TextMode                    ;get data segment
    290.  mov ds,ax                              ;in DS
    291. ;;
    292. ;;Check 320x200x256
    293. ;;
    294.  mov si,offset MCGAMode                 ;get mode offset
    295.  call SetModeRegs                       ;set registers
    296.  call WritePalette                      ;write the palette
    297.  call ClearScreen                       ;clear the screen
    298.  xor edi,edi                            ;zero EDI
    299.  mov es,[VidSeg]                        ;load ES
    300. @@loop1:                                ;
    301.  seges mov [byte di],0ffh               ;draw a white line
    302.  add di,321                             ;move to next line, next position
    303.  cmp di,64000                           ;check for limit
    304.  jb @@loop1                             ;loop whilst still below it
    305.  mov di,199*320                         ;bottom left corner
    306.  seges mov [byte di],015h               ;store bright blue
    307.  mov di,199*320+319                     ;bottom right corner
    308.  seges mov [byte di],02eh               ;store bright green
    309.  mov di,319                             ;top right corner
    310.  seges mov [byte di],0c4h               ;store bright red
    311.  mov ah,0                               ;function 0
    312.  int 16h                                ;wait for key
    313. ;;
    314. ;;Check 80x25x16 text
    315. ;;
    316.  mov si,offset TextMode                 ;get offset of mode reg data
    317.  call SetModeRegs                       ;set mode
    318.  call WritePalette                      ;set the palette
    319.  call SetFont                           ;set the font
    320.  call ClearScreen                       ;clear the screen
    321.  mov si,offset TextString               ;get string to write
    322.  mov di,320                             ;4th line down =4*80 bytes into buf
    323.  mov es,[VidSeg]                        ;load ES
    324. @@loop:                                 ;
    325.  mov al,[si]                            ;load char
    326.  cmp al,'$'                             ;check for end
    327.  je @@end                               ;if got, then end
    328.  seges mov [di],al                      ;store char
    329.  seges mov [byte di+1],06eh             ;and attribute
    330.  inc si                                 ;update source
    331.  add di,2                               ;and destination
    332.  jmp @@loop                             ;loop again
    333. @@end:                                  ;
    334.  mov dx,offset TextString               ;load string data again
    335.  mov ah,9                               ;DOS func 9
    336.  int 21h                                ;write it out
    337.  mov ah,0                               ;function 0
    338.  int 16h                                ;wait for a key
    339.  mov ax,03h                             ;select mode 03h
    340.  int 10h                                ;initialise it, so BIOS is happy
    341.  exitcode 0                             ;and finish
    342.  
    343.  
    344. dataseg
    345.  
    346. Seg0040 dw 040h
    347. VidSeg dw ?
    348.  
    349. oldmode db ?
    350. oldmisc db ?
    351. oldmask db ?
    352. oldmem db ?
    353.  
    354. TextString db 'Text mode 03h 80x25',13,10,'$'
    355.  
    356. MCGAMode db 013h,40                     ;BIOS mode num, and num columns
    357.  dw 0a000h
    358.  db 063h,000h
    359.  db 003h,001h,00fh,000h,00eh
    360.  db 05fh,04fh,050h,082h,054h,080h,0bfh,01fh,000h,041h,000h,000h,000h,000h
    361.  db 000h,000h,09ch,00eh,08fh,028h,040h,096h,0b9h,0a3h,0ffh
    362.  db 000h,000h,000h,000h,000h,050h,007h,00fh,0ffh
    363.  db 000h,001h,002h,003h,004h,005h,006h,007h,008h,009h,00ah,00bh,00ch,00dh
    364.  db 00eh,00fh
    365.  db 041h,000h,00fh,000h,000h
    366.  
    367. TextMode db 03h,80                      ;BIOS mode num, and num columns
    368.  dw 0b800h
    369.  db 067h,000h
    370.  db 003h,000h,003h,000h,002h
    371.  db 05fh,04fh,050h,082h,055h,081h,0bfh,01fh,000h,04fh,00eh,00fh,000h,000h
    372.  db 000h,000h,09ch,00eh,08fh,028h,01fh,096h,0b9h,0a3h,0ffh
    373.  db 000h,000h,000h,000h,000h,010h,00eh,000h,0ffh
    374.  db 000h,001h,002h,003h,004h,005h,006h,007h,008h,009h,00ah,00bh,00ch,00dh
    375.  db 00eh,00fh
    376.  db 00ch,000h,00fh,008h,000h
    377.  
    378. palette db 000h,000h,000h               ;custom 256 colour palette
    379.  db 000h,000h,02Ah
    380.  db 000h,02Ah,000h
    381.  db 000h,02Ah,02Ah
    382.  db 02Ah,000h,000h
    383.  db 02Ah,000h,02Ah
    384.  db 02Ah,015h,000h
    385.  db 02Ah,02Ah,02Ah
    386.  db 015h,015h,015h
    387.  db 015h,015h,03Fh
    388.  db 015h,03Fh,015h
    389.  db 015h,03Fh,03Fh
    390.  db 03Fh,015h,015h
    391.  db 03Fh,015h,03Fh
    392.  db 03Fh,03Fh,015h
    393.  db 03Fh,03Fh,03Fh
    394.  db 000h,000h,000h
    395.  db 000h,000h,00Ch
    396.  db 000h,000h,019h
    397.  db 000h,000h,025h
    398.  db 000h,000h,032h
    399.  db 000h,000h,03Fh
    400.  db 000h,00Ch,000h
    401.  db 000h,00Ch,00Ch
    402.  db 000h,00Ch,019h
    403.  db 000h,00Ch,025h
    404.  db 000h,00Ch,032h
    405.  db 000h,00Ch,03Fh
    406.  db 000h,019h,000h
    407.  db 000h,019h,00Ch
    408.  db 000h,019h,019h
    409.  db 000h,019h,025h
    410.  db 000h,019h,032h
    411.  db 000h,019h,03Fh
    412.  db 000h,025h,000h
    413.  db 000h,025h,00Ch
    414.  db 000h,025h,019h
    415.  db 000h,025h,025h
    416.  db 000h,025h,032h
    417.  db 000h,025h,03Fh
    418.  db 000h,032h,000h
    419.  db 000h,032h,00Ch
    420.  db 000h,032h,019h
    421.  db 000h,032h,025h
    422.  db 000h,032h,032h
    423.  db 000h,032h,03Fh
    424.  db 000h,03Fh,000h
    425.  db 000h,03Fh,00Ch
    426.  db 000h,03Fh,019h
    427.  db 000h,03Fh,025h
    428.  db 000h,03Fh,032h
    429.  db 000h,03Fh,03Fh
    430.  db 00Ch,000h,000h
    431.  db 00Ch,000h,00Ch
    432.  db 00Ch,000h,019h
    433.  db 00Ch,000h,025h
    434.  db 00Ch,000h,032h
    435.  db 00Ch,000h,03Fh
    436.  db 00Ch,00Ch,000h
    437.  db 00Ch,00Ch,00Ch
    438.  db 00Ch,00Ch,019h
    439.  db 00Ch,00Ch,025h
    440.  db 00Ch,00Ch,032h
    441.  db 00Ch,00Ch,03Fh
    442.  db 00Ch,019h,000h
    443.  db 00Ch,019h,00Ch
    444.  db 00Ch,019h,019h
    445.  db 00Ch,019h,025h
    446.  db 00Ch,019h,032h
    447.  db 00Ch,019h,03Fh
    448.  db 00Ch,025h,000h
    449.  db 00Ch,025h,00Ch
    450.  db 00Ch,025h,019h
    451.  db 00Ch,025h,025h
    452.  db 00Ch,025h,032h
    453.  db 00Ch,025h,03Fh
    454.  db 00Ch,032h,000h
    455.  db 00Ch,032h,00Ch
    456.  db 00Ch,032h,019h
    457.  db 00Ch,032h,025h
    458.  db 00Ch,032h,032h
    459.  db 00Ch,032h,03Fh
    460.  db 00Ch,03Fh,000h
    461.  db 00Ch,03Fh,00Ch
    462.  db 00Ch,03Fh,019h
    463.  db 00Ch,03Fh,025h
    464.  db 00Ch,03Fh,032h
    465.  db 00Ch,03Fh,03Fh
    466.  db 019h,000h,000h
    467.  db 019h,000h,00Ch
    468.  db 019h,000h,019h
    469.  db 019h,000h,025h
    470.  db 019h,000h,032h
    471.  db 019h,000h,03Fh
    472.  db 019h,00Ch,000h
    473.  db 019h,00Ch,00Ch
    474.  db 019h,00Ch,019h
    475.  db 019h,00Ch,025h
    476.  db 019h,00Ch,032h
    477.  db 019h,00Ch,03Fh
    478.  db 019h,019h,000h
    479.  db 019h,019h,00Ch
    480.  db 019h,019h,019h
    481.  db 019h,019h,025h
    482.  db 019h,019h,032h
    483.  db 019h,019h,03Fh
    484.  db 019h,025h,000h
    485.  db 019h,025h,00Ch
    486.  db 019h,025h,019h
    487.  db 019h,025h,025h
    488.  db 019h,025h,032h
    489.  db 019h,025h,03Fh
    490.  db 019h,032h,000h
    491.  db 019h,032h,00Ch
    492.  db 019h,032h,019h
    493.  db 019h,032h,025h
    494.  db 019h,032h,032h
    495.  db 019h,032h,03Fh
    496.  db 019h,03Fh,000h
    497.  db 019h,03Fh,00Ch
    498.  db 019h,03Fh,019h
    499.  db 019h,03Fh,025h
    500.  db 019h,03Fh,032h
    501.  db 019h,03Fh,03Fh
    502.  db 025h,000h,000h
    503.  db 025h,000h,00Ch
    504.  db 025h,000h,019h
    505.  db 025h,000h,025h
    506.  db 025h,000h,032h
    507.  db 025h,000h,03Fh
    508.  db 025h,00Ch,000h
    509.  db 025h,00Ch,00Ch
    510.  db 025h,00Ch,019h
    511.  db 025h,00Ch,025h
    512.  db 025h,00Ch,032h
    513.  db 025h,00Ch,03Fh
    514.  db 025h,019h,000h
    515.  db 025h,019h,00Ch
    516.  db 025h,019h,019h
    517.  db 025h,019h,025h
    518.  db 025h,019h,032h
    519.  db 025h,019h,03Fh
    520.  db 025h,025h,000h
    521.  db 025h,025h,00Ch
    522.  db 025h,025h,019h
    523.  db 025h,025h,025h
    524.  db 025h,025h,032h
    525.  db 025h,025h,03Fh
    526.  db 025h,032h,000h
    527.  db 025h,032h,00Ch
    528.  db 025h,032h,019h
    529.  db 025h,032h,025h
    530.  db 025h,032h,032h
    531.  db 025h,032h,03Fh
    532.  db 025h,03Fh,000h
    533.  db 025h,03Fh,00Ch
    534.  db 025h,03Fh,019h
    535.  db 025h,03Fh,025h
    536.  db 025h,03Fh,032h
    537.  db 025h,03Fh,03Fh
    538.  db 032h,000h,000h
    539.  db 032h,000h,00Ch
    540.  db 032h,000h,019h
    541.  db 032h,000h,025h
    542.  db 032h,000h,032h
    543.  db 032h,000h,03Fh
    544.  db 032h,00Ch,000h
    545.  db 032h,00Ch,00Ch
    546.  db 032h,00Ch,019h
    547.  db 032h,00Ch,025h
    548.  db 032h,00Ch,032h
    549.  db 032h,00Ch,03Fh
    550.  db 032h,019h,000h
    551.  db 032h,019h,00Ch
    552.  db 032h,019h,019h
    553.  db 032h,019h,025h
    554.  db 032h,019h,032h
    555.  db 032h,019h,03Fh
    556.  db 032h,025h,000h
    557.  db 032h,025h,00Ch
    558.  db 032h,025h,019h
    559.  db 032h,025h,025h
    560.  db 032h,025h,032h
    561.  db 032h,025h,03Fh
    562.  db 032h,032h,000h
    563.  db 032h,032h,00Ch
    564.  db 032h,032h,019h
    565.  db 032h,032h,025h
    566.  db 032h,032h,032h
    567.  db 032h,032h,03Fh
    568.  db 032h,03Fh,000h
    569.  db 032h,03Fh,00Ch
    570.  db 032h,03Fh,019h
    571.  db 032h,03Fh,025h
    572.  db 032h,03Fh,032h
    573.  db 032h,03Fh,03Fh
    574.  db 03Fh,000h,000h
    575.  db 03Fh,000h,00Ch
    576.  db 03Fh,000h,019h
    577.  db 03Fh,000h,025h
    578.  db 03Fh,000h,032h
    579.  db 03Fh,000h,03Fh
    580.  db 03Fh,00Ch,000h
    581.  db 03Fh,00Ch,00Ch
    582.  db 03Fh,00Ch,019h
    583.  db 03Fh,00Ch,025h
    584.  db 03Fh,00Ch,032h
    585.  db 03Fh,00Ch,03Fh
    586.  db 03Fh,019h,000h
    587.  db 03Fh,019h,00Ch
    588.  db 03Fh,019h,019h
    589.  db 03Fh,019h,025h
    590.  db 03Fh,019h,032h
    591.  db 03Fh,019h,03Fh
    592.  db 03Fh,025h,000h
    593.  db 03Fh,025h,00Ch
    594.  db 03Fh,025h,019h
    595.  db 03Fh,025h,025h
    596.  db 03Fh,025h,032h
    597.  db 03Fh,025h,03Fh
    598.  db 03Fh,032h,000h
    599.  db 03Fh,032h,00Ch
    600.  db 03Fh,032h,019h
    601.  db 03Fh,032h,025h
    602.  db 03Fh,032h,032h
    603.  db 03Fh,032h,03Fh
    604.  db 03Fh,03Fh,000h
    605.  db 03Fh,03Fh,00Ch
    606.  db 03Fh,03Fh,019h
    607.  db 03Fh,03Fh,025h
    608.  db 03Fh,03Fh,032h
    609.  db 03Fh,03Fh,03Fh
    610.  db 002h,002h,002h
    611.  db 005h,005h,005h
    612.  db 007h,007h,007h
    613.  db 00Ah,00Ah,00Ah
    614.  db 00Dh,00Dh,00Dh
    615.  db 00Fh,00Fh,00Fh
    616.  db 012h,012h,012h
    617.  db 015h,015h,015h
    618.  db 017h,017h,017h
    619.  db 01Ah,01Ah,01Ah
    620.  db 01Ch,01Ch,01Ch
    621.  db 01Fh,01Fh,01Fh
    622.  db 022h,022h,022h
    623.  db 024h,024h,024h
    624.  db 027h,027h,027h
    625.  db 02Ah,02Ah,02Ah
    626.  db 02Ch,02Ch,02Ch
    627.  db 02Fh,02Fh,02Fh
    628.  db 031h,031h,031h
    629.  db 034h,034h,034h
    630.  db 037h,037h,037h
    631.  db 039h,039h,039h
    632.  db 03Ch,03Ch,03Ch
    633.  db 03Fh,03Fh,03Fh
    634.  
    635. ;custom 8x16 font
    636. f8x16 db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    637.  db 000h,000h,07Eh,081h,0A5h,081h,081h,0BDh,099h,081h,081h,07Eh,000h,000h,000h,000h
    638.  db 000h,000h,07Eh,0FFh,0DBh,0FFh,0FFh,0C3h,0E7h,0FFh,0FFh,07Eh,000h,000h,000h,000h
    639.  db 000h,000h,000h,000h,06Ch,0FEh,0FEh,0FEh,0FEh,07Ch,038h,010h,000h,000h,000h,000h
    640.  db 000h,000h,000h,000h,010h,038h,07Ch,0FEh,07Ch,038h,010h,000h,000h,000h,000h,000h
    641.  db 000h,000h,000h,018h,03Ch,03Ch,0E7h,0E7h,0E7h,099h,018h,03Ch,000h,000h,000h,000h
    642.  db 000h,000h,000h,018h,03Ch,07Eh,0FFh,0FFh,07Eh,018h,018h,03Ch,000h,000h,000h,000h
    643.  db 000h,000h,000h,000h,000h,000h,018h,03Ch,03Ch,018h,000h,000h,000h,000h,000h,000h
    644.  db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0E7h,0C3h,0C3h,0E7h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
    645.  db 000h,000h,000h,000h,000h,03Ch,066h,042h,042h,066h,03Ch,000h,000h,000h,000h,000h
    646.  db 0FFh,0FFh,0FFh,0FFh,0FFh,0C3h,099h,0BDh,0BDh,099h,0C3h,0FFh,0FFh,0FFh,0FFh,0FFh
    647.  db 000h,000h,01Eh,00Eh,01Ah,032h,078h,0CCh,0CCh,0CCh,0CCh,078h,000h,000h,000h,000h
    648.  db 000h,000h,03Ch,066h,066h,066h,066h,03Ch,018h,07Eh,018h,018h,000h,000h,000h,000h
    649.  db 000h,000h,03Fh,033h,03Fh,030h,030h,030h,030h,070h,0F0h,0E0h,000h,000h,000h,000h
    650.  db 000h,000h,07Fh,063h,07Fh,063h,063h,063h,063h,067h,0E7h,0E6h,0C0h,000h,000h,000h
    651.  db 000h,000h,000h,018h,018h,0DBh,03Ch,0E7h,03Ch,0DBh,018h,018h,000h,000h,000h,000h
    652.  db 000h,080h,0C0h,0E0h,0F0h,0F8h,0FEh,0F8h,0F0h,0E0h,0C0h,080h,000h,000h,000h,000h
    653.  db 000h,002h,006h,00Eh,01Eh,03Eh,0FEh,03Eh,01Eh,00Eh,006h,002h,000h,000h,000h,000h
    654.  db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,07Eh,03Ch,018h,000h,000h,000h,000h
    655.  db 000h,000h,066h,066h,066h,066h,066h,066h,066h,000h,066h,066h,000h,000h,000h,000h
    656.  db 000h,000h,07Fh,0DBh,0DBh,0DBh,07Bh,01Bh,01Bh,01Bh,01Bh,01Bh,000h,000h,000h,000h
    657.  db 000h,07Ch,0C6h,060h,038h,06Ch,0C6h,0C6h,06Ch,038h,00Ch,0C6h,07Ch,000h,000h,000h
    658.  db 000h,000h,000h,000h,000h,000h,000h,000h,0FEh,0FEh,0FEh,0FEh,000h,000h,000h,000h
    659.  db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,07Eh,03Ch,018h,07Eh,000h,000h,000h
    660.  db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,018h,018h,018h,000h,000h,000h,000h
    661.  db 000h,000h,018h,018h,018h,018h,018h,018h,018h,07Eh,03Ch,018h,000h,000h,000h,000h
    662.  db 000h,000h,000h,000h,000h,018h,00Ch,0FEh,00Ch,018h,000h,000h,000h,000h,000h,000h
    663.  db 000h,000h,000h,000h,000h,030h,060h,0FEh,060h,030h,000h,000h,000h,000h,000h,000h
    664.  db 000h,000h,000h,000h,000h,0C0h,0C0h,0C0h,0C0h,0FEh,000h,000h,000h,000h,000h,000h
    665.  db 000h,000h,000h,000h,000h,028h,06Ch,0FEh,06Ch,028h,000h,000h,000h,000h,000h,000h
    666.  db 000h,000h,000h,000h,010h,038h,038h,07Ch,07Ch,0FEh,0FEh,000h,000h,000h,000h,000h
    667.  db 000h,000h,000h,000h,0FEh,0FEh,07Ch,07Ch,038h,038h,010h,000h,000h,000h,000h,000h
    668.  db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    669.  db 000h,000h,018h,03Ch,03Ch,03Ch,018h,018h,018h,000h,018h,018h,000h,000h,000h,000h
    670.  db 000h,066h,066h,066h,024h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    671.  db 000h,000h,000h,06Ch,06Ch,0FEh,06Ch,06Ch,06Ch,0FEh,06Ch,06Ch,000h,000h,000h,000h
    672.  db 018h,018h,07Ch,0C6h,0C2h,0C0h,07Ch,006h,086h,0C6h,07Ch,018h,018h,000h,000h,000h
    673.  db 000h,000h,000h,000h,0C2h,0C6h,00Ch,018h,030h,060h,0C6h,086h,000h,000h,000h,000h
    674.  db 000h,000h,038h,06Ch,06Ch,038h,076h,0DCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    675.  db 000h,030h,030h,030h,060h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    676.  db 000h,000h,00Ch,018h,030h,030h,030h,030h,030h,030h,018h,00Ch,000h,000h,000h,000h
    677.  db 000h,000h,030h,018h,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,018h,030h,000h,000h,000h,000h
    678.  db 000h,000h,000h,000h,000h,066h,03Ch,0FFh,03Ch,066h,000h,000h,000h,000h,000h,000h
    679.  db 000h,000h,000h,000h,000h,018h,018h,07Eh,018h,018h,000h,000h,000h,000h,000h,000h
    680.  db 000h,000h,000h,000h,000h,000h,000h,000h,000h,018h,018h,018h,030h,000h,000h,000h
    681.  db 000h,000h,000h,000h,000h,000h,000h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h
    682.  db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,018h,018h,000h,000h,000h,000h
    683.  db 000h,000h,000h,000h,002h,006h,00Ch,018h,030h,060h,0C0h,080h,000h,000h,000h,000h
    684.  db 000h,000h,07Ch,0C6h,0C6h,0CEh,0D6h,0D6h,0E6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    685.  db 000h,000h,018h,038h,078h,018h,018h,018h,018h,018h,018h,07Eh,000h,000h,000h,000h
    686.  db 000h,000h,07Ch,0C6h,006h,00Ch,018h,030h,060h,0C0h,0C6h,0FEh,000h,000h,000h,000h
    687.  db 000h,000h,07Ch,0C6h,006h,006h,03Ch,006h,006h,006h,0C6h,07Ch,000h,000h,000h,000h
    688.  db 000h,000h,00Ch,01Ch,03Ch,06Ch,0CCh,0FEh,00Ch,00Ch,00Ch,01Eh,000h,000h,000h,000h
    689.  db 000h,000h,0FEh,0C0h,0C0h,0C0h,0FCh,00Eh,006h,006h,0C6h,07Ch,000h,000h,000h,000h
    690.  db 000h,000h,038h,060h,0C0h,0C0h,0FCh,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    691.  db 000h,000h,0FEh,0C6h,006h,006h,00Ch,018h,030h,030h,030h,030h,000h,000h,000h,000h
    692.  db 000h,000h,07Ch,0C6h,0C6h,0C6h,07Ch,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    693.  db 000h,000h,07Ch,0C6h,0C6h,0C6h,07Eh,006h,006h,006h,00Ch,078h,000h,000h,000h,000h
    694.  db 000h,000h,000h,000h,018h,018h,000h,000h,000h,018h,018h,000h,000h,000h,000h,000h
    695.  db 000h,000h,000h,000h,018h,018h,000h,000h,000h,018h,018h,030h,000h,000h,000h,000h
    696.  db 000h,000h,000h,006h,00Ch,018h,030h,060h,030h,018h,00Ch,006h,000h,000h,000h,000h
    697.  db 000h,000h,000h,000h,000h,000h,0FEh,000h,000h,0FEh,000h,000h,000h,000h,000h,000h
    698.  db 000h,000h,000h,060h,030h,018h,00Ch,006h,00Ch,018h,030h,060h,000h,000h,000h,000h
    699.  db 000h,000h,07Ch,0C6h,0C6h,00Ch,018h,018h,018h,000h,018h,018h,000h,000h,000h,000h
    700.  db 000h,000h,000h,07Ch,0C6h,0C6h,0DEh,0DEh,0DEh,0DCh,0C0h,07Ch,000h,000h,000h,000h
    701.  db 000h,000h,010h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h
    702.  db 000h,000h,0FCh,066h,066h,066h,07Ch,066h,066h,066h,066h,0FCh,000h,000h,000h,000h
    703.  db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0C0h,0C0h,0C2h,066h,03Ch,000h,000h,000h,000h
    704.  db 000h,000h,0F8h,06Ch,066h,066h,066h,066h,066h,066h,06Ch,0F8h,000h,000h,000h,000h
    705.  db 000h,000h,0FEh,066h,062h,068h,078h,068h,060h,062h,066h,0FEh,000h,000h,000h,000h
    706.  db 000h,000h,0FEh,066h,062h,068h,078h,068h,060h,060h,060h,0F0h,000h,000h,000h,000h
    707.  db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0DEh,0C6h,0C6h,066h,03Ah,000h,000h,000h,000h
    708.  db 000h,000h,0C6h,0C6h,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h
    709.  db 000h,000h,03Ch,018h,018h,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    710.  db 000h,000h,01Eh,00Ch,00Ch,00Ch,00Ch,00Ch,0CCh,0CCh,0CCh,078h,000h,000h,000h,000h
    711.  db 000h,000h,0E6h,066h,06Ch,06Ch,078h,078h,06Ch,066h,066h,0E6h,000h,000h,000h,000h
    712.  db 000h,000h,0F0h,060h,060h,060h,060h,060h,060h,062h,066h,0FEh,000h,000h,000h,000h
    713.  db 000h,000h,0C6h,0EEh,0FEh,0FEh,0D6h,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h
    714.  db 000h,000h,0C6h,0E6h,0F6h,0FEh,0DEh,0CEh,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h
    715.  db 000h,000h,038h,06Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h
    716.  db 000h,000h,0FCh,066h,066h,066h,07Ch,060h,060h,060h,060h,0F0h,000h,000h,000h,000h
    717.  db 000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0D6h,0DEh,07Ch,00Ch,00Eh,000h,000h
    718.  db 000h,000h,0FCh,066h,066h,066h,07Ch,06Ch,066h,066h,066h,0E6h,000h,000h,000h,000h
    719.  db 000h,000h,07Ch,0C6h,0C6h,060h,038h,00Ch,006h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    720.  db 000h,000h,07Eh,07Eh,05Ah,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    721.  db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    722.  db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,06Ch,038h,010h,000h,000h,000h,000h
    723.  db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0D6h,0D6h,0FEh,06Ch,06Ch,000h,000h,000h,000h
    724.  db 000h,000h,0C6h,0C6h,06Ch,06Ch,038h,038h,06Ch,06Ch,0C6h,0C6h,000h,000h,000h,000h
    725.  db 000h,000h,066h,066h,066h,066h,03Ch,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    726.  db 000h,000h,0FEh,0C6h,086h,00Ch,018h,030h,060h,0C2h,0C6h,0FEh,000h,000h,000h,000h
    727.  db 000h,000h,03Ch,030h,030h,030h,030h,030h,030h,030h,030h,03Ch,000h,000h,000h,000h
    728.  db 000h,000h,000h,080h,0C0h,0E0h,070h,038h,01Ch,00Eh,006h,002h,000h,000h,000h,000h
    729.  db 000h,000h,03Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,03Ch,000h,000h,000h,000h
    730.  db 010h,038h,06Ch,0C6h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    731.  db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0FFh,000h,000h
    732.  db 030h,030h,018h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    733.  db 000h,000h,000h,000h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    734.  db 000h,000h,0E0h,060h,060h,078h,06Ch,066h,066h,066h,066h,0DCh,000h,000h,000h,000h
    735.  db 000h,000h,000h,000h,000h,07Ch,0C6h,0C0h,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    736.  db 000h,000h,01Ch,00Ch,00Ch,03Ch,06Ch,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    737.  db 000h,000h,000h,000h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    738.  db 000h,000h,038h,06Ch,064h,060h,0F0h,060h,060h,060h,060h,0F0h,000h,000h,000h,000h
    739.  db 000h,000h,000h,000h,000h,076h,0CCh,0CCh,0CCh,0CCh,0CCh,07Ch,00Ch,0CCh,078h,000h
    740.  db 000h,000h,0E0h,060h,060h,06Ch,076h,066h,066h,066h,066h,0E6h,000h,000h,000h,000h
    741.  db 000h,000h,018h,018h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    742.  db 000h,000h,006h,006h,000h,00Eh,006h,006h,006h,006h,006h,006h,066h,066h,03Ch,000h
    743.  db 000h,000h,0E0h,060h,060h,066h,06Ch,078h,078h,06Ch,066h,0E6h,000h,000h,000h,000h
    744.  db 000h,000h,038h,018h,018h,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    745.  db 000h,000h,000h,000h,000h,0ECh,0FEh,0D6h,0D6h,0D6h,0D6h,0D6h,000h,000h,000h,000h
    746.  db 000h,000h,000h,000h,000h,0DCh,066h,066h,066h,066h,066h,066h,000h,000h,000h,000h
    747.  db 000h,000h,000h,000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    748.  db 000h,000h,000h,000h,000h,0DCh,066h,066h,066h,066h,066h,07Ch,060h,060h,0F0h,000h
    749.  db 000h,000h,000h,000h,000h,076h,0CCh,0CCh,0CCh,0CCh,0CCh,07Ch,00Ch,00Ch,01Eh,000h
    750.  db 000h,000h,000h,000h,000h,0DCh,076h,062h,060h,060h,060h,0F0h,000h,000h,000h,000h
    751.  db 000h,000h,000h,000h,000h,07Ch,0C6h,060h,038h,00Ch,0C6h,07Ch,000h,000h,000h,000h
    752.  db 000h,000h,010h,030h,030h,0FCh,030h,030h,030h,030h,036h,01Ch,000h,000h,000h,000h
    753.  db 000h,000h,000h,000h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    754.  db 000h,000h,000h,000h,000h,066h,066h,066h,066h,066h,03Ch,018h,000h,000h,000h,000h
    755.  db 000h,000h,000h,000h,000h,0C6h,0C6h,0C6h,0D6h,0D6h,0FEh,06Ch,000h,000h,000h,000h
    756.  db 000h,000h,000h,000h,000h,0C6h,06Ch,038h,038h,038h,06Ch,0C6h,000h,000h,000h,000h
    757.  db 000h,000h,000h,000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Eh,006h,00Ch,0F8h,000h
    758.  db 000h,000h,000h,000h,000h,0FEh,0CCh,018h,030h,060h,0C6h,0FEh,000h,000h,000h,000h
    759.  db 000h,000h,00Eh,018h,018h,018h,070h,018h,018h,018h,018h,00Eh,000h,000h,000h,000h
    760.  db 000h,000h,018h,018h,018h,018h,000h,018h,018h,018h,018h,018h,000h,000h,000h,000h
    761.  db 000h,000h,070h,018h,018h,018h,00Eh,018h,018h,018h,018h,070h,000h,000h,000h,000h
    762.  db 000h,000h,076h,0DCh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    763.  db 000h,000h,000h,000h,010h,038h,06Ch,0C6h,0C6h,0C6h,0FEh,000h,000h,000h,000h,000h
    764.  db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0C0h,0C2h,066h,03Ch,00Ch,006h,07Ch,000h,000h
    765.  db 000h,000h,0CCh,0CCh,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    766.  db 000h,00Ch,018h,030h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    767.  db 000h,010h,038h,06Ch,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    768.  db 000h,000h,0CCh,0CCh,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    769.  db 000h,060h,030h,018h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    770.  db 000h,038h,06Ch,038h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    771.  db 000h,000h,000h,000h,03Ch,066h,060h,060h,066h,03Ch,00Ch,006h,03Ch,000h,000h,000h
    772.  db 000h,010h,038h,06Ch,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    773.  db 000h,000h,0C6h,0C6h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    774.  db 000h,060h,030h,018h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h
    775.  db 000h,000h,066h,066h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    776.  db 000h,018h,03Ch,066h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    777.  db 000h,060h,030h,018h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    778.  db 000h,0C6h,0C6h,010h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,000h,000h,000h,000h
    779.  db 038h,06Ch,038h,000h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,000h,000h,000h,000h
    780.  db 018h,030h,060h,000h,0FEh,066h,060h,07Ch,060h,060h,066h,0FEh,000h,000h,000h,000h
    781.  db 000h,000h,000h,000h,000h,0CCh,076h,036h,07Eh,0D8h,0D8h,06Eh,000h,000h,000h,000h
    782.  db 000h,000h,03Eh,06Ch,0CCh,0CCh,0FEh,0CCh,0CCh,0CCh,0CCh,0CEh,000h,000h,000h,000h
    783.  db 000h,010h,038h,06Ch,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    784.  db 000h,000h,0C6h,0C6h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    785.  db 000h,060h,030h,018h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    786.  db 000h,030h,078h,0CCh,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    787.  db 000h,060h,030h,018h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    788.  db 000h,000h,0C6h,0C6h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Eh,006h,00Ch,078h,000h
    789.  db 000h,0C6h,0C6h,000h,038h,06Ch,0C6h,0C6h,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h
    790.  db 000h,0C6h,0C6h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    791.  db 000h,018h,018h,03Ch,066h,060h,060h,060h,066h,03Ch,018h,018h,000h,000h,000h,000h
    792.  db 000h,038h,06Ch,064h,060h,0F0h,060h,060h,060h,060h,0E6h,0FCh,000h,000h,000h,000h
    793.  db 000h,000h,066h,066h,03Ch,018h,07Eh,018h,07Eh,018h,018h,018h,000h,000h,000h,000h
    794.  db 000h,0F8h,0CCh,0CCh,0F8h,0C4h,0CCh,0DEh,0CCh,0CCh,0CCh,0C6h,000h,000h,000h,000h
    795.  db 000h,00Eh,01Bh,018h,018h,018h,07Eh,018h,018h,018h,018h,018h,0D8h,070h,000h,000h
    796.  db 000h,018h,030h,060h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    797.  db 000h,00Ch,018h,030h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h
    798.  db 000h,018h,030h,060h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    799.  db 000h,018h,030h,060h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h
    800.  db 000h,000h,076h,0DCh,000h,0DCh,066h,066h,066h,066h,066h,066h,000h,000h,000h,000h
    801.  db 076h,0DCh,000h,0C6h,0E6h,0F6h,0FEh,0DEh,0CEh,0C6h,0C6h,0C6h,000h,000h,000h,000h
    802.  db 000h,03Ch,06Ch,06Ch,03Eh,000h,07Eh,000h,000h,000h,000h,000h,000h,000h,000h,000h
    803.  db 000h,038h,06Ch,06Ch,038h,000h,07Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h
    804.  db 000h,000h,030h,030h,000h,030h,030h,060h,0C0h,0C6h,0C6h,07Ch,000h,000h,000h,000h
    805.  db 000h,000h,000h,000h,000h,000h,0FEh,0C0h,0C0h,0C0h,0C0h,000h,000h,000h,000h,000h
    806.  db 000h,000h,000h,000h,000h,000h,0FEh,006h,006h,006h,006h,000h,000h,000h,000h,000h
    807.  db 000h,0C0h,0C0h,0C2h,0C6h,0CCh,018h,030h,060h,0CEh,093h,006h,00Ch,01Fh,000h,000h
    808.  db 000h,0C0h,0C0h,0C2h,0C6h,0CCh,018h,030h,066h,0CEh,09Ah,03Fh,006h,00Fh,000h,000h
    809.  db 000h,000h,018h,018h,000h,018h,018h,018h,03Ch,03Ch,03Ch,018h,000h,000h,000h,000h
    810.  db 000h,000h,000h,000h,000h,033h,066h,0CCh,066h,033h,000h,000h,000h,000h,000h,000h
    811.  db 000h,000h,000h,000h,000h,0CCh,066h,033h,066h,0CCh,000h,000h,000h,000h,000h,000h
    812.  db 011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h
    813.  db 055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh
    814.  db 0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h
    815.  db 018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h
    816.  db 018h,018h,018h,018h,018h,018h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h
    817.  db 018h,018h,018h,018h,018h,0F8h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h
    818.  db 036h,036h,036h,036h,036h,036h,036h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h
    819.  db 000h,000h,000h,000h,000h,000h,000h,0FEh,036h,036h,036h,036h,036h,036h,036h,036h
    820.  db 000h,000h,000h,000h,000h,0F8h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h
    821.  db 036h,036h,036h,036h,036h,0F6h,006h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h
    822.  db 036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h
    823.  db 000h,000h,000h,000h,000h,0FEh,006h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h
    824.  db 036h,036h,036h,036h,036h,0F6h,006h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h
    825.  db 036h,036h,036h,036h,036h,036h,036h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h
    826.  db 018h,018h,018h,018h,018h,0F8h,018h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h
    827.  db 000h,000h,000h,000h,000h,000h,000h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h
    828.  db 018h,018h,018h,018h,018h,018h,018h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h
    829.  db 018h,018h,018h,018h,018h,018h,018h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    830.  db 000h,000h,000h,000h,000h,000h,000h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h
    831.  db 018h,018h,018h,018h,018h,018h,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h
    832.  db 000h,000h,000h,000h,000h,000h,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    833.  db 018h,018h,018h,018h,018h,018h,018h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h
    834.  db 018h,018h,018h,018h,018h,01Fh,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h
    835.  db 036h,036h,036h,036h,036h,036h,036h,037h,036h,036h,036h,036h,036h,036h,036h,036h
    836.  db 036h,036h,036h,036h,036h,037h,030h,03Fh,000h,000h,000h,000h,000h,000h,000h,000h
    837.  db 000h,000h,000h,000h,000h,03Fh,030h,037h,036h,036h,036h,036h,036h,036h,036h,036h
    838.  db 036h,036h,036h,036h,036h,0F7h,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    839.  db 000h,000h,000h,000h,000h,0FFh,000h,0F7h,036h,036h,036h,036h,036h,036h,036h,036h
    840.  db 036h,036h,036h,036h,036h,037h,030h,037h,036h,036h,036h,036h,036h,036h,036h,036h
    841.  db 000h,000h,000h,000h,000h,0FFh,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    842.  db 036h,036h,036h,036h,036h,0F7h,000h,0F7h,036h,036h,036h,036h,036h,036h,036h,036h
    843.  db 018h,018h,018h,018h,018h,0FFh,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    844.  db 036h,036h,036h,036h,036h,036h,036h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
    845.  db 000h,000h,000h,000h,000h,0FFh,000h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h
    846.  db 000h,000h,000h,000h,000h,000h,000h,0FFh,036h,036h,036h,036h,036h,036h,036h,036h
    847.  db 036h,036h,036h,036h,036h,036h,036h,03Fh,000h,000h,000h,000h,000h,000h,000h,000h
    848.  db 018h,018h,018h,018h,018h,01Fh,018h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h
    849.  db 000h,000h,000h,000h,000h,01Fh,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h
    850.  db 000h,000h,000h,000h,000h,000h,000h,03Fh,036h,036h,036h,036h,036h,036h,036h,036h
    851.  db 036h,036h,036h,036h,036h,036h,036h,0FFh,036h,036h,036h,036h,036h,036h,036h,036h
    852.  db 018h,018h,018h,018h,018h,0FFh,018h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h
    853.  db 018h,018h,018h,018h,018h,018h,018h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h
    854.  db 000h,000h,000h,000h,000h,000h,000h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h
    855.  db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
    856.  db 000h,000h,000h,000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
    857.  db 0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h
    858.  db 00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh
    859.  db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,000h,000h,000h,000h,000h,000h,000h,000h
    860.  db 000h,000h,000h,000h,000h,076h,0DCh,0D8h,0D8h,0D8h,0DCh,076h,000h,000h,000h,000h
    861.  db 000h,000h,000h,000h,000h,0FCh,0C6h,0FCh,0C6h,0C6h,0FCh,0C0h,0C0h,0C0h,000h,000h
    862.  db 000h,000h,0FEh,0C6h,0C6h,0C0h,0C0h,0C0h,0C0h,0C0h,0C0h,0C0h,000h,000h,000h,000h
    863.  db 000h,000h,000h,000h,080h,0FEh,06Ch,06Ch,06Ch,06Ch,06Ch,06Ch,000h,000h,000h,000h
    864.  db 000h,000h,000h,0FEh,0C6h,060h,030h,018h,030h,060h,0C6h,0FEh,000h,000h,000h,000h
    865.  db 000h,000h,000h,000h,000h,07Eh,0D8h,0D8h,0D8h,0D8h,0D8h,070h,000h,000h,000h,000h
    866.  db 000h,000h,000h,000h,066h,066h,066h,066h,066h,07Ch,060h,060h,0C0h,000h,000h,000h
    867.  db 000h,000h,000h,000h,076h,0DCh,018h,018h,018h,018h,018h,018h,000h,000h,000h,000h
    868.  db 000h,000h,000h,07Eh,018h,03Ch,066h,066h,066h,03Ch,018h,07Eh,000h,000h,000h,000h
    869.  db 000h,000h,000h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h
    870.  db 000h,000h,038h,06Ch,0C6h,0C6h,0C6h,06Ch,06Ch,06Ch,06Ch,0EEh,000h,000h,000h,000h
    871.  db 000h,000h,01Eh,030h,018h,00Ch,03Eh,066h,066h,066h,066h,03Ch,000h,000h,000h,000h
    872.  db 000h,000h,000h,000h,000h,07Eh,0DBh,0DBh,0DBh,07Eh,000h,000h,000h,000h,000h,000h
    873.  db 000h,000h,000h,003h,006h,07Eh,0CFh,0DBh,0F3h,07Eh,060h,0C0h,000h,000h,000h,000h
    874.  db 000h,000h,01Ch,030h,060h,060h,07Ch,060h,060h,060h,030h,01Ch,000h,000h,000h,000h
    875.  db 000h,000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h
    876.  db 000h,000h,000h,000h,0FEh,000h,000h,0FEh,000h,000h,0FEh,000h,000h,000h,000h,000h
    877.  db 000h,000h,000h,000h,018h,018h,07Eh,018h,018h,000h,000h,0FFh,000h,000h,000h,000h
    878.  db 000h,000h,000h,030h,018h,00Ch,006h,00Ch,018h,030h,000h,07Eh,000h,000h,000h,000h
    879.  db 000h,000h,000h,00Ch,018h,030h,060h,030h,018h,00Ch,000h,07Eh,000h,000h,000h,000h
    880.  db 000h,000h,00Eh,01Bh,01Bh,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h
    881.  db 018h,018h,018h,018h,018h,018h,018h,018h,0D8h,0D8h,0D8h,070h,000h,000h,000h,000h
    882.  db 000h,000h,000h,000h,018h,018h,000h,07Eh,000h,018h,018h,000h,000h,000h,000h,000h
    883.  db 000h,000h,000h,000h,000h,076h,0DCh,000h,076h,0DCh,000h,000h,000h,000h,000h,000h
    884.  db 000h,038h,06Ch,06Ch,038h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    885.  db 000h,000h,000h,000h,000h,000h,000h,018h,018h,000h,000h,000h,000h,000h,000h,000h
    886.  db 000h,000h,000h,000h,000h,000h,000h,000h,018h,000h,000h,000h,000h,000h,000h,000h
    887.  db 000h,00Fh,00Ch,00Ch,00Ch,00Ch,00Ch,0ECh,06Ch,06Ch,03Ch,01Ch,000h,000h,000h,000h
    888.  db 000h,0D8h,06Ch,06Ch,06Ch,06Ch,06Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h
    889.  db 000h,070h,098h,030h,060h,0C8h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    890.  db 000h,000h,000h,000h,07Ch,07Ch,07Ch,07Ch,07Ch,07Ch,07Ch,000h,000h,000h,000h,000h
    891.  db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
    892.  
    893. stack 1024
    894.  
    895. end Startup
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Код (Text):
    1. ; процедура set_modex
    2. ; переводит видеоадаптер VGA в один из режимов X с 256 цветами
    3. ; ввод: DI = номер режима
    4. ;       0: 320x200, соотношение сторон 1,2:1
    5. ;       1: 320x400, соотношение сторон 2,4:1
    6. ;       2: 360x200, соотношение сторон 1,35:1
    7. ;       3: 360x400, соотношение сторон 2,7:1
    8. ;       4: 320x240, соотношение сторон 1:1
    9. ;       5: 320x480, соотношение сторон 2:1
    10. ;       6: 360x240, соотношение сторон 1,125:1
    11. ;       7: 360x480, соотношение сторон 2,25:1
    12. ;       DS = CS
    13. ; Для вывода информации на экран в этих режимах
    14. ; см. процедуру putpixel_x
    15. setmode_x          proc    near
    16.         mov        ax,12h               ; очистить все четыре цветовые
    17.         int        10h                  ; плоскости видеопамяти,
    18.         mov        ax,13h               ; установить режим 13h, который будем
    19.         int        10h                  ; модифицировать
    20.         cmp        di,7                 ; если нас вызвали с DI > 7,
    21.         ja         exit_modex           ; выйти из процедуры
    22.                                         ; (оставшись в режиме 13h),
    23.         shl        di,1                 ; умножить на 2, так как x_modes -
    24.                                         ; таблица слов,
    25.         mov        di,word ptr x_modes[di] ; прочитать
    26.                                            ; адрес таблицы настроек для
    27.                                            ; выбранного режима
    28.         mov        dx,03C4h             ; порт 03C4h - индекс синхронизатора
    29.         mov        ax,0100h             ; регистр 00h, значение 01
    30.         out        dx,ax                ; асинхронный сброс
    31.         mov        ax,0604h             ; регистр 04h, значение 06h
    32.         out        dx,ax                ; отключить режим CHAIN4
    33.         mov        dl,0C2h              ; порт 03C2h - регистр
    34.                                         ; MOR на запись
    35.         mov        al,byte ptr [di]     ; записать в него
    36.                                         ; значение частоты кадров
    37.         out        dx,al                ; и полярности развертки
    38.                                         ; для выбранного режима
    39.         mov        dl,0D4h              ; порт 03D4h - индекс
    40.                                         ; контроллера CRT
    41.         mov        si,word ptr offset [di+2]
    42.                                         ; адрес строки с настройками
    43.                                         ; для выбранной ширины в DS:SI
    44.         mov        cx,8                 ; длина строки настроек в СХ
    45.         rep        outsw                ; вывод строки слов
    46.                                         ; в порты 03D4/03D5
    47.         mov        si,word ptr offset [di+4] ; настройки для
    48.                                         ; выбранной высоты в DS:SI
    49.         mov        сх,7                 ; длина строки настроек в СХ
    50.         rep        outsw
    51.         mov        si,word ptr offset [di+6] ; настройки
    52.                                         ; для включения/выключения удвоения
    53.                                         ; по вертикали (200/400 и 240/480 строк)
    54.         mov        сх,3
    55.         rep        outsw
    56.         mov        ax, word ptr offset [di+8] ; число байт в строке
    57.         mov        word ptr x_width,ax        ; сохранить
    58.                                               ; в переменной x_width
    59.         mov        dl,0C4h              ; порт 03C4h - индекс синхронизатора
    60.         mov        ах,0300h             ; регистр 00h,  значение 03
    61.         out        dx,ax                ; выйти из состояния сброса
    62. exit_modex:
    63.         ret
    64.  
    65. ; таблица адресов таблиц с настройками режимов
    66. x_modes dw         offset mode_0,offset mode_1
    67.         dw         offset mode_2,offset mode_3
    68.         dw         offset mode_4,offset mode_5
    69.         dw         offset mode_6,offset mode_7
    70.  
    71. ; таблица настроек режимов: значение регистра MOR, адрес строки
    72. ; настроек ширины, адрес строки настроек высоты, адрес строки
    73. ; настроек удвоения по вертикали, число байт в строке
    74. mode_0  dw         63h,offset mode_320w,offset mode_200h,offset mode_double,320/4
    75. mode_1  dw         63h,offset mode_320w,offset mode_400h,offset mode_single,320/4
    76. mode_2  dw         67h,offset mode_360w,offset mode_200h,offset mode_double,360/4
    77. mode_3  dw         67h,offset mode_360w,offset mode_400h,offset mode_single,360/4
    78. mode_4  dw         0E3h,offset mode_320w,offset mode_240h,offset mode_double,320/4
    79. mode_5  dw         0E3h,offset mode_320w,offset mode_480h,offset mode_single,320/4
    80. mode_6  dw         0E7h,offset mode_360w,offset mode_240h,offset mode_double,360/4
    81. mode_7  dw         0E7h,offset mode_360w,offset mode_480h,offset mode_single,360/4
    82.  
    83. ; настройки CRT. В каждом слове младший байт - номер регистра,
    84. ; старший - значение, которое в этот регистр заносится
    85. mode_320w:                              ; настройка ширины 320
    86. ; Первый регистр обязательно 11h, хотя он и не относится
    87. ; к ширине - он разрешает запись в остальные регистры,
    88. ; если она была запрещена (!)
    89.         dw         0E11h,5F00h,4F01h,5002h,8203h,5404h,8005h,2813h
    90. mode_360w:                              ; настройка ширины 360
    91.         dw         0E11h,6B00h,5901h,5A02h,8E03h,5E04h,8A05h,2D13h
    92. mode_200h:
    93. mode_400h:                              ; настройка высоты 200/400
    94.         dw         0BF06h,1F07h,9C10h,0E11h,8F12h,9615h,0B916h
    95. mode_240h:
    96. mode_480h:                              ; настройка высоты 240/480
    97.         dw         0D06h,3E07h,0EA10h,0C11h,0DF12h,0E715h,0616h
    98. mode_single:                            ; настройка режимов без удвоения
    99.         dw         4009h,0014h,0E317h
    100. mode_double:                            ; настройка режимов с удвоением
    101.         dw         4109h,0014h,0E317h
    102. setmode_x          endp
    103.  
    104. x_width            dw    ?              ; число байт в строке
    105. ; эту переменную инициализирует setmode_x, а использует putpixel_x
    106.  
    107. ; процедура putpixel_x
    108. ; выводит точку с заданным цветом в текущем режиме X
    109. ; Ввод: DX = строка
    110. ;       СХ = столбец
    111. ;       ВР = цвет
    112. ;       ES = A000h
    113. ;       DS = сегмент, в котором находится переменная x_width
    114.  
    115. putpixel_x         proc    near
    116.         pusha
    117.         mov        ax, dx
    118.         mul        word ptr x_width     ; AX = строка * число байт в строке
    119.         mov        di,cx                ; DI = столбец
    120.         shr        di,2                 ; DI = столбец/4 (номер байта в строке)
    121.         add        di,ax                ; DI = номер байта в видеопамяти
    122.         mov        ax,0102h             ; AL = 02h (номер регистра),
    123.                                         ; АН = 01 (битовая маска)
    124.         and        cl,03h               ; CL = остаток от деления
    125.                                         ; столбца на 4 = номер
    126.                                         ; цветовой плоскости
    127.         shl        ah,cl                ; теперь в АН выставлен в 1 бит,
    128.                                         ; соответствующий нужной
    129.                                         ; цветовой плоскости
    130.         mov        dx,03C4h             ; порт 03C4h - индекс
    131.                                         ; синхронизатора
    132.         out        dx,ax                ; разрешить запись только
    133.                                         ; в нужную плоскость
    134.         mov        ax,bp                ; цвет в AL
    135.         stosb                           ; вывод байта в видеопамять
    136.         рора
    137.         ret
    138. putpixel_x         endp
    это из зубкова, но многовато тут

    n0name
    Пасиб, гляну, но он больно длиннолват!
     
  15. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Таких примеров ты нигде не найдёш.
    Это в принципе возможно, но для этого надо программировать акселератор видяхи.
    А у разных видях разные регистры+спецификации закрыты...
    Так что отладчик в руки и копать драйвера производителя.
    Только ИМХО всё равно смысла нет - для одной видяхи ты раскопаешь, а на другой работать не будет.

    По поводу кода.
    Первый пример это то что я имел ввиду.
    Т.е. переключение в графический режим без BIOS.
    Размер таблиц можешь заценить :)
    Второе это не совсем то - это ModeX.
    Там при помощи BIOS устанавливается режим 320х200@256 цветов.
    Но так как соотношение сторон не стандартное (не 4 к 3), то его руками перепрограммируют в 320х240.
    Это в принципе намного проще.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Во втором аттаче для всех портов есть соответствие их значения и видеорежима, так что можешь упростить задачу изменяя только те что действительно меняются, правда в некоторых (уже не помню каких, но что-то связанное с развёрткой) портах были грабли с последовательностью типа обязательно сначала менять один, затем другой, ну и есно не забывай про индексный доступ к большинству портов. Насколько я понял громоздкость таблиц связана с палитрами и поддержкой множества режимов, есно для конкретного 16 цветного режима они либо не портебуются, либо сильно сократятся.
    А в VESA без биоса практически никак потому, что VGA - это последний стандарт на регистры, дальше стандартизирован только биос и если даже раскопаешь инфу - то она будет пригодна лишь к конкретной видеокарте, аналогично и с акселераторами (которые за тебя строят граф. примитивы), правда ходят слухи, что на сайте интел валяются исходники некоторых видеодайверов, может чем и помогут :)
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Второй аттач автору не пойдёт - там используется BIOS.
    При помощи BIOS устанавоивается режим 13h,а потом перепрограммируется.
    Меняются НЕ ВСЕ нужные регистры.
    Больше подойдёт первый - там BIOS не используется.
    Если урезать, то можно конечно выкинуть палитру и таблицу со шрифтом.
    Правда если шрифт для граф режима в большинстве случаев не нужен, то палитру лучше бы оставить...

    Исходников драйверов не видел, но на видяхи Intel документация как раз открытая.
    Можно с ихнего сайта слить.
    Документов нет на карты ATI и nVidia.
    А распространение у них ИМХО максимальное.
     
  18. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    cppasm
    Я имел в виду не второй код, а свой второй аттач из #3, там как раз подробно расписаны все ega\vga порты, правда как верно заметил SPA буковь там много и пока всё вкуришь - удовольствия немало получишь :))
    Палитра насколько я понимаю для текстового режима, который всё равно будет по умолчанию совпадает с палитрой для 16 цветной графики.
    А про исходники драйверов где то здесь на форуме пробегало, только есно без ссылки.