И так... Требуеться написать две функции, на fasm одна переводит в графическийий режим, а другая рисую точку по заданным коардинатам. Есть несколько ограничений, нельзя использовать прирывания биоса/доса, код 16 , и очень большое ограничение по размеры, желательно не болеее 100/50 байт Гравический режим как токовой значения не имеет, но желательны комментарии чтобы я при желани мог его изменить на нужный. Хочу заметить что программа будет грузиться сразу после биоса (boot sector)! Возможен вариант когда мне просто обьеснят как енто замутить... PS Зубкова читал там много PSS есче вопрос такой, каким способом(кроме поточечно) можно вывести линию, зная координаты начала и конеца
В аттаче мой хламник из старой документации по сабжу Замутить VGA режим через регистры геморойно, но в принципе реально. Для Vesa режима боюсь без биоса не обойтись. Раз прога пускается не из win эмулятора ДОС, то я бы активизировал Vesa (через биос) и использовал линейный видеобуфер (не нужно страницы переключать) см поле 28h в буфере заполняемом vesa функцией AX = 4F01h. Доступ к LBA из чистого ДОС xor ax, ax mov gs, ax ; адресация из нулевого сегмента mov edi, адрес видеобуфуера mov gs:[edi], цвет ; устанвить пиксел с координатами 0,0 Под виндой этот приём увы не прокатывает
К сожеленю биус/дос прерывания незя а доки твои почитаю, но там очень много букв, и так что если у кого есть еще, а есчё лучше примерв, в студию...
А если тебе БИОС низзя, то как ты переключишь режим видео? Стандартный то - текстовый. А уже давно прошли старые времена где был вроде стандарт - порты ввода\вывода VGA и их программирование - сейчас это все конфиденциальная информация и есть только дрова Я помню страшные мануалы, об описании как вручную через порты установить новый режим видео... Не зря же у кадой видеокарты есть VESA BIOS специально для совместимости создано - включи режим и рисуй...
Насчет рисования линий \ окружностей и иже с ними - есть спецалгоритмы, все расчеты целочисленные - поищи по интернету... По крайней мере алгоритм рисования линий валяется везде...
Ultrin Faern А куда VGA делось , лично на моей gf 440 mx старые игруши в ДОС запускаються вполне, так что vga по моему предположения осталось. А алгоритм рисования линии я уже придумал, около 10 целочисленых операций с циклом...
без DOSа ясно, потому что бутсектор. А почему без BIOSа-то нельзя? оО Или ты пишешь свою прошивку для биоса
Все современные видяхи обратно совместимы с VGA в VGA режимах. Переключиться без использования BIOS можно. Только вот в бут сектор это дело не влезет. Та таблицы составляются в какие регистры чего писать. Дык вот эти таблицы больше 150 байт потянут, а ты ещё с кодом хочешь... Чем BIOS то не угодил?? Про линию не ясно. Это ж растровая графика. Что значит не по точкам? Здесь всё про точкам рисуется...
Можете считать что биосом мне религия пользоваться е позволяет (на самом деле там покруче...) cppasm Не по точкам значит я не сам выщитываю расположения этих точек (например отпровляю в видуху 4 координаты И кстати у Зубкова впринципе есть пример... , но там мало коменнов... И есчё, может кактить мона не полностью переделать режим, а переделать стандартный... который при загрузке стоит, давайте подумаем, неужели ничего не соабразим. PS примеры Зубкова могу кинуть...
Ну вот, боянистый пример, странно, что ты его не нашёл, может это не то, что тебе надо? Код (Text): ;; ;;MODES.ASM - to switch from mode 03h (80x25x16 text) to mode 013h (320x200x256 graphics) ;;without using the VGA BIOS. This sample also demonstrates the setting of the text mode font, ;;and the use of a custom palette. ;; ;;(C) Copyright 1997 Anthony A.J.Williams. All Rights Reserved, This source code may be ;;freely distributed unmodified, so long as it is free of charge. ;;Any part of this code may be used in other programs provided that credit is given to me ;; ;;Thanks to David Lindauer for his help in debugging this program, and in providing me with ;;essential information. ;; ideal smart jumps model large MISC = 03c2h SEQUENCER = 03c4h CRTC = 03d4h GRAPHICS = 03ceh FEATURE = 03dah ATTRIB = 03c0h PELADDRESSWRITE = 03c8h PELDATAREG = 03c9h STATUS = 03dah GRREGWRMODE = 5 GRREGMISC = 6 SQREGMAPMASK = 2 SQREGMEMORY = 4 BYTESPERFONT = 16 PALETTELEN = 256 NUMSEQUENCER = 5 NUMCRTC = 19h NUMGRAPHICS = 9 NUMATTRIB = 15h VREND=011h NOPROT=07fh ENABLEATTRIB = 020h CURSORTOPDATA = 17 CURSORBOTTOMDATA = 18 BIOSMODE = 049h COLUMNS = 04ah CURSORTOP = 061h CURSORBOTTOM = 060h PAGESIZE = 04ch PAGEOFFSET = 04eh PAGENUM = 062h MODESELVAL = 065h macro IODELAY REPT 8 jmp $+2 ENDM endm codeseg p386 proc OutRegs ;Output CL registers to port DX xor al,al ;start at reg 0 @@loop: ; mov ah,[si] ;load data inc si ;update source out dx,ax ;output data IODELAY inc al ;increase register number dec cl ;decrease count jnz @@loop ;loop whilst still OK ret ;and exit endp ; proc SetModeRegs ;set VGA registers for mode data ;pointed to by SI mov dx,STATUS ;get retrace reg @@1: ; in al,dx ;get value IODELAY ;delay test al,8 ;check for vertical retrace bit jnz @@1 ;loop until clear @@2: ; in al,dx ;get value IODELAY ;delay test al,8 ;check for retrace again jz @@2 ;loop until it's set this time ;so we get start of ret. to set mode mov es,[Seg0040] ;load BIOS segment xor ah,ah ;zero AH mov al,[si] ;load BIOS mode number seges mov [BIOSMODE],al ;store mode number inc si ;update SI mov al,[si] ;load number of columns seges mov [COLUMNS],al ;store number of columns inc si ;update SI mov di,[si] ;load Screen Seg mov [VidSeg],di ;store video segment add si,2 ;update SI mov al,[si+CURSORTOPDATA] ;get cursor top data seges mov [CURSORTOP],al ;store it mov al,[si+CURSORBOTTOMDATA] ;get cursor bottom data seges mov [CURSORBOTTOM],al ;store it mov dx,MISC ;get VGA MISC reg num mov al,[si] ;load AL inc si ;update source out dx,al ;output to port IODELAY mov dx,FEATURE ;get Feature controller number mov al,[si] ;load data inc si ;update source out dx,al ;output register data IODELAY mov dx,SEQUENCER ;get sequencer port number mov cl,NUMSEQUENCER ;get number of regs to set call OutRegs ;do them mov ah,[si+VREND] ;load CRTC VREND byte mov al,VREND ;load reg number and ah,NOPROT ;clear protection bit mov dx,CRTC ;CRTC port number out dx,ax ;no protection IODELAY mov cl,NUMCRTC ;number of CRTC regs call OutRegs ;output to port mov dx,GRAPHICS ;get graphics port number mov cl,NUMGRAPHICS ;get number of regs call OutRegs ;do it mov dx,FEATURE ;load feature controller port in al,dx ;reset attrib flip flop by reading IODELAY mov dx,ATTRIB ;attribute controller port mov cl,NUMATTRIB ;number of regs xor al,al ;clear AL @@loop: ; mov ah,[si] ;load AH out dx,al ;output to port IODELAY ;delay before register write xchg al,ah ;swap data/reg num out dx,al ;output to port xchg ah,al ;swap back inc al ;next reg inc si ;increase source cmp al,cl ;done yet? jb @@loop ;loop until done mov al,ENABLEATTRIB ;enable attribute register reads out dx,al ;do it IODELAY ret ;and exit endp ; proc WritePalette ;set up palette mov dx,PELADDRESSWRITE ;colour write reg xor al,al ;select bottom of map out dx,al ;do it IODELAY mov si,offset palette ;get palette data mov dx,PELDATAREG ;get data reg mov cx,PALETTELEN ;length of palette @@loop: ; mov al,[si] ;load Red inc si ;update SI out dx,al ;write it IODELAY mov al,[si] ;load Green inc si ;update SI out dx,al ;write it IODELAY mov al,[si] ;load Blue inc si ;update SI out dx,al ;write it IODELAY dec cx ;decrease count jnz @@loop ;loop until all done ret ;then exit endp ; proc SetFont ; mov dx,GRAPHICS ;get graphics port mov al,GRREGWRMODE ;get write mode reg out dx,al ;select the reg IODELAY ;delay a bit inc dx ;change DX in al,dx ;get value IODELAY ;pause mov [oldmode],al ;store it dec dx ;restore DX mov al,GRREGMISC ;get misc reg out dx,al ;select the reg IODELAY ;delay a bit inc dx ;change DX in al,dx ;get value IODELAY ;pause mov [oldmisc],al ;store it dec dx ;restore DX mov dx,SEQUENCER ;get sequencer port mov al,SQREGMAPMASK ;get map mask reg out dx,al ;select the reg IODELAY ;delay a bit inc dx ;change DX in al,dx ;get value IODELAY ;pause mov [oldmask],al ;store it dec dx ;restore DX mov al,SQREGMEMORY ;get memory selector reg out dx,al ;select the reg IODELAY ;delay a bit inc dx ;change DX in al,dx ;get value IODELAY ;pause mov [oldmem],al ;store it mov dx,GRAPHICS ;select graphics port mov al,GRREGWRMODE ;get write mode reg mov ah,[oldmode] ;get old value and ah,0fch ;mask it out dx,ax ;set new value IODELAY ;pause mov al,GRREGMISC ;get misc reg mov ah,[oldmisc] ;get old value and ah,0f1h ;mask it or ah,4 ;set a flag out dx,ax ;set it IODELAY ;pause mov dx,SEQUENCER ;select sequencer port mov al,SQREGMAPMASK ;get mask reg mov ah,4 ;get new value out dx,ax ;set it IODELAY ;pause mov al,SQREGMEMORY ;get memory reg mov ah,[oldmem] ;get old value or ah,4 ;set flag out dx,ax ;set value IODELAY ;pause mov ax,0a000h ;get seg of font mem mov es,ax ;in ES xor di,di ;zero destination mov si,offset f8x16 ;get source xor ch,ch ;clear entries count cld ;set direction flag correctly @@loop1: ; push di ;save destination mov cl,BYTESPERFONT ;bytes per font @@loop2: ; movsb ;move a byte dec cl ;decrease count jnz @@loop2 ;loop until all done pop di ;restore destination add di,32 ;update it dec ch ;decrease outer count jnz @@loop1 ;loop until all done mov dx,GRAPHICS ;get graphics port mov al,GRREGWRMODE ;get 1st reg mov ah,[oldmode] ;get old value out dx,ax ;set it IODELAY ;pause mov al,GRREGMISC ;get 2nd reg mov ah,[oldmisc] ;get old value out dx,ax ;set it IODELAY ;pause mov dx,SEQUENCER ;get seq port mov al,SQREGMAPMASK ;get 3rd reg mov ah,[oldmask] ;get old value out dx,ax ;set it IODELAY ;pause mov al,SQREGMEMORY ;get 4th reg mov ah,[oldmem] ;get old value out dx,ax ;set it IODELAY ;pause ret ;exit endp proc ClearScreen ;clears the vid mem mov es,[VidSeg] ;load segment of video memory xor eax,eax ;zero screen memory mov ecx,16384 ;32K words xor edi,edi ;zero destination cld ;going up rep stosd ;clear memory ret ;and exit endp ; startup: ; mov ax,seg TextMode ;get data segment mov ds,ax ;in DS ;; ;;Check 320x200x256 ;; mov si,offset MCGAMode ;get mode offset call SetModeRegs ;set registers call WritePalette ;write the palette call ClearScreen ;clear the screen xor edi,edi ;zero EDI mov es,[VidSeg] ;load ES @@loop1: ; seges mov [byte di],0ffh ;draw a white line add di,321 ;move to next line, next position cmp di,64000 ;check for limit jb @@loop1 ;loop whilst still below it mov di,199*320 ;bottom left corner seges mov [byte di],015h ;store bright blue mov di,199*320+319 ;bottom right corner seges mov [byte di],02eh ;store bright green mov di,319 ;top right corner seges mov [byte di],0c4h ;store bright red mov ah,0 ;function 0 int 16h ;wait for key ;; ;;Check 80x25x16 text ;; mov si,offset TextMode ;get offset of mode reg data call SetModeRegs ;set mode call WritePalette ;set the palette call SetFont ;set the font call ClearScreen ;clear the screen mov si,offset TextString ;get string to write mov di,320 ;4th line down =4*80 bytes into buf mov es,[VidSeg] ;load ES @@loop: ; mov al,[si] ;load char cmp al,'$' ;check for end je @@end ;if got, then end seges mov [di],al ;store char seges mov [byte di+1],06eh ;and attribute inc si ;update source add di,2 ;and destination jmp @@loop ;loop again @@end: ; mov dx,offset TextString ;load string data again mov ah,9 ;DOS func 9 int 21h ;write it out mov ah,0 ;function 0 int 16h ;wait for a key mov ax,03h ;select mode 03h int 10h ;initialise it, so BIOS is happy exitcode 0 ;and finish dataseg Seg0040 dw 040h VidSeg dw ? oldmode db ? oldmisc db ? oldmask db ? oldmem db ? TextString db 'Text mode 03h 80x25',13,10,'$' MCGAMode db 013h,40 ;BIOS mode num, and num columns dw 0a000h db 063h,000h db 003h,001h,00fh,000h,00eh db 05fh,04fh,050h,082h,054h,080h,0bfh,01fh,000h,041h,000h,000h,000h,000h db 000h,000h,09ch,00eh,08fh,028h,040h,096h,0b9h,0a3h,0ffh db 000h,000h,000h,000h,000h,050h,007h,00fh,0ffh db 000h,001h,002h,003h,004h,005h,006h,007h,008h,009h,00ah,00bh,00ch,00dh db 00eh,00fh db 041h,000h,00fh,000h,000h TextMode db 03h,80 ;BIOS mode num, and num columns dw 0b800h db 067h,000h db 003h,000h,003h,000h,002h db 05fh,04fh,050h,082h,055h,081h,0bfh,01fh,000h,04fh,00eh,00fh,000h,000h db 000h,000h,09ch,00eh,08fh,028h,01fh,096h,0b9h,0a3h,0ffh db 000h,000h,000h,000h,000h,010h,00eh,000h,0ffh db 000h,001h,002h,003h,004h,005h,006h,007h,008h,009h,00ah,00bh,00ch,00dh db 00eh,00fh db 00ch,000h,00fh,008h,000h palette db 000h,000h,000h ;custom 256 colour palette db 000h,000h,02Ah db 000h,02Ah,000h db 000h,02Ah,02Ah db 02Ah,000h,000h db 02Ah,000h,02Ah db 02Ah,015h,000h db 02Ah,02Ah,02Ah db 015h,015h,015h db 015h,015h,03Fh db 015h,03Fh,015h db 015h,03Fh,03Fh db 03Fh,015h,015h db 03Fh,015h,03Fh db 03Fh,03Fh,015h db 03Fh,03Fh,03Fh db 000h,000h,000h db 000h,000h,00Ch db 000h,000h,019h db 000h,000h,025h db 000h,000h,032h db 000h,000h,03Fh db 000h,00Ch,000h db 000h,00Ch,00Ch db 000h,00Ch,019h db 000h,00Ch,025h db 000h,00Ch,032h db 000h,00Ch,03Fh db 000h,019h,000h db 000h,019h,00Ch db 000h,019h,019h db 000h,019h,025h db 000h,019h,032h db 000h,019h,03Fh db 000h,025h,000h db 000h,025h,00Ch db 000h,025h,019h db 000h,025h,025h db 000h,025h,032h db 000h,025h,03Fh db 000h,032h,000h db 000h,032h,00Ch db 000h,032h,019h db 000h,032h,025h db 000h,032h,032h db 000h,032h,03Fh db 000h,03Fh,000h db 000h,03Fh,00Ch db 000h,03Fh,019h db 000h,03Fh,025h db 000h,03Fh,032h db 000h,03Fh,03Fh db 00Ch,000h,000h db 00Ch,000h,00Ch db 00Ch,000h,019h db 00Ch,000h,025h db 00Ch,000h,032h db 00Ch,000h,03Fh db 00Ch,00Ch,000h db 00Ch,00Ch,00Ch db 00Ch,00Ch,019h db 00Ch,00Ch,025h db 00Ch,00Ch,032h db 00Ch,00Ch,03Fh db 00Ch,019h,000h db 00Ch,019h,00Ch db 00Ch,019h,019h db 00Ch,019h,025h db 00Ch,019h,032h db 00Ch,019h,03Fh db 00Ch,025h,000h db 00Ch,025h,00Ch db 00Ch,025h,019h db 00Ch,025h,025h db 00Ch,025h,032h db 00Ch,025h,03Fh db 00Ch,032h,000h db 00Ch,032h,00Ch db 00Ch,032h,019h db 00Ch,032h,025h db 00Ch,032h,032h db 00Ch,032h,03Fh db 00Ch,03Fh,000h db 00Ch,03Fh,00Ch db 00Ch,03Fh,019h db 00Ch,03Fh,025h db 00Ch,03Fh,032h db 00Ch,03Fh,03Fh db 019h,000h,000h db 019h,000h,00Ch db 019h,000h,019h db 019h,000h,025h db 019h,000h,032h db 019h,000h,03Fh db 019h,00Ch,000h db 019h,00Ch,00Ch db 019h,00Ch,019h db 019h,00Ch,025h db 019h,00Ch,032h db 019h,00Ch,03Fh db 019h,019h,000h db 019h,019h,00Ch db 019h,019h,019h db 019h,019h,025h db 019h,019h,032h db 019h,019h,03Fh db 019h,025h,000h db 019h,025h,00Ch db 019h,025h,019h db 019h,025h,025h db 019h,025h,032h db 019h,025h,03Fh db 019h,032h,000h db 019h,032h,00Ch db 019h,032h,019h db 019h,032h,025h db 019h,032h,032h db 019h,032h,03Fh db 019h,03Fh,000h db 019h,03Fh,00Ch db 019h,03Fh,019h db 019h,03Fh,025h db 019h,03Fh,032h db 019h,03Fh,03Fh db 025h,000h,000h db 025h,000h,00Ch db 025h,000h,019h db 025h,000h,025h db 025h,000h,032h db 025h,000h,03Fh db 025h,00Ch,000h db 025h,00Ch,00Ch db 025h,00Ch,019h db 025h,00Ch,025h db 025h,00Ch,032h db 025h,00Ch,03Fh db 025h,019h,000h db 025h,019h,00Ch db 025h,019h,019h db 025h,019h,025h db 025h,019h,032h db 025h,019h,03Fh db 025h,025h,000h db 025h,025h,00Ch db 025h,025h,019h db 025h,025h,025h db 025h,025h,032h db 025h,025h,03Fh db 025h,032h,000h db 025h,032h,00Ch db 025h,032h,019h db 025h,032h,025h db 025h,032h,032h db 025h,032h,03Fh db 025h,03Fh,000h db 025h,03Fh,00Ch db 025h,03Fh,019h db 025h,03Fh,025h db 025h,03Fh,032h db 025h,03Fh,03Fh db 032h,000h,000h db 032h,000h,00Ch db 032h,000h,019h db 032h,000h,025h db 032h,000h,032h db 032h,000h,03Fh db 032h,00Ch,000h db 032h,00Ch,00Ch db 032h,00Ch,019h db 032h,00Ch,025h db 032h,00Ch,032h db 032h,00Ch,03Fh db 032h,019h,000h db 032h,019h,00Ch db 032h,019h,019h db 032h,019h,025h db 032h,019h,032h db 032h,019h,03Fh db 032h,025h,000h db 032h,025h,00Ch db 032h,025h,019h db 032h,025h,025h db 032h,025h,032h db 032h,025h,03Fh db 032h,032h,000h db 032h,032h,00Ch db 032h,032h,019h db 032h,032h,025h db 032h,032h,032h db 032h,032h,03Fh db 032h,03Fh,000h db 032h,03Fh,00Ch db 032h,03Fh,019h db 032h,03Fh,025h db 032h,03Fh,032h db 032h,03Fh,03Fh db 03Fh,000h,000h db 03Fh,000h,00Ch db 03Fh,000h,019h db 03Fh,000h,025h db 03Fh,000h,032h db 03Fh,000h,03Fh db 03Fh,00Ch,000h db 03Fh,00Ch,00Ch db 03Fh,00Ch,019h db 03Fh,00Ch,025h db 03Fh,00Ch,032h db 03Fh,00Ch,03Fh db 03Fh,019h,000h db 03Fh,019h,00Ch db 03Fh,019h,019h db 03Fh,019h,025h db 03Fh,019h,032h db 03Fh,019h,03Fh db 03Fh,025h,000h db 03Fh,025h,00Ch db 03Fh,025h,019h db 03Fh,025h,025h db 03Fh,025h,032h db 03Fh,025h,03Fh db 03Fh,032h,000h db 03Fh,032h,00Ch db 03Fh,032h,019h db 03Fh,032h,025h db 03Fh,032h,032h db 03Fh,032h,03Fh db 03Fh,03Fh,000h db 03Fh,03Fh,00Ch db 03Fh,03Fh,019h db 03Fh,03Fh,025h db 03Fh,03Fh,032h db 03Fh,03Fh,03Fh db 002h,002h,002h db 005h,005h,005h db 007h,007h,007h db 00Ah,00Ah,00Ah db 00Dh,00Dh,00Dh db 00Fh,00Fh,00Fh db 012h,012h,012h db 015h,015h,015h db 017h,017h,017h db 01Ah,01Ah,01Ah db 01Ch,01Ch,01Ch db 01Fh,01Fh,01Fh db 022h,022h,022h db 024h,024h,024h db 027h,027h,027h db 02Ah,02Ah,02Ah db 02Ch,02Ch,02Ch db 02Fh,02Fh,02Fh db 031h,031h,031h db 034h,034h,034h db 037h,037h,037h db 039h,039h,039h db 03Ch,03Ch,03Ch db 03Fh,03Fh,03Fh ;custom 8x16 font f8x16 db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,07Eh,081h,0A5h,081h,081h,0BDh,099h,081h,081h,07Eh,000h,000h,000h,000h db 000h,000h,07Eh,0FFh,0DBh,0FFh,0FFh,0C3h,0E7h,0FFh,0FFh,07Eh,000h,000h,000h,000h db 000h,000h,000h,000h,06Ch,0FEh,0FEh,0FEh,0FEh,07Ch,038h,010h,000h,000h,000h,000h db 000h,000h,000h,000h,010h,038h,07Ch,0FEh,07Ch,038h,010h,000h,000h,000h,000h,000h db 000h,000h,000h,018h,03Ch,03Ch,0E7h,0E7h,0E7h,099h,018h,03Ch,000h,000h,000h,000h db 000h,000h,000h,018h,03Ch,07Eh,0FFh,0FFh,07Eh,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,018h,03Ch,03Ch,018h,000h,000h,000h,000h,000h,000h db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0E7h,0C3h,0C3h,0E7h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh db 000h,000h,000h,000h,000h,03Ch,066h,042h,042h,066h,03Ch,000h,000h,000h,000h,000h db 0FFh,0FFh,0FFh,0FFh,0FFh,0C3h,099h,0BDh,0BDh,099h,0C3h,0FFh,0FFh,0FFh,0FFh,0FFh db 000h,000h,01Eh,00Eh,01Ah,032h,078h,0CCh,0CCh,0CCh,0CCh,078h,000h,000h,000h,000h db 000h,000h,03Ch,066h,066h,066h,066h,03Ch,018h,07Eh,018h,018h,000h,000h,000h,000h db 000h,000h,03Fh,033h,03Fh,030h,030h,030h,030h,070h,0F0h,0E0h,000h,000h,000h,000h db 000h,000h,07Fh,063h,07Fh,063h,063h,063h,063h,067h,0E7h,0E6h,0C0h,000h,000h,000h db 000h,000h,000h,018h,018h,0DBh,03Ch,0E7h,03Ch,0DBh,018h,018h,000h,000h,000h,000h db 000h,080h,0C0h,0E0h,0F0h,0F8h,0FEh,0F8h,0F0h,0E0h,0C0h,080h,000h,000h,000h,000h db 000h,002h,006h,00Eh,01Eh,03Eh,0FEh,03Eh,01Eh,00Eh,006h,002h,000h,000h,000h,000h db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,07Eh,03Ch,018h,000h,000h,000h,000h db 000h,000h,066h,066h,066h,066h,066h,066h,066h,000h,066h,066h,000h,000h,000h,000h db 000h,000h,07Fh,0DBh,0DBh,0DBh,07Bh,01Bh,01Bh,01Bh,01Bh,01Bh,000h,000h,000h,000h db 000h,07Ch,0C6h,060h,038h,06Ch,0C6h,0C6h,06Ch,038h,00Ch,0C6h,07Ch,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,0FEh,0FEh,0FEh,0FEh,000h,000h,000h,000h db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,07Eh,03Ch,018h,07Eh,000h,000h,000h db 000h,000h,018h,03Ch,07Eh,018h,018h,018h,018h,018h,018h,018h,000h,000h,000h,000h db 000h,000h,018h,018h,018h,018h,018h,018h,018h,07Eh,03Ch,018h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,018h,00Ch,0FEh,00Ch,018h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,030h,060h,0FEh,060h,030h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0C0h,0C0h,0C0h,0C0h,0FEh,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,028h,06Ch,0FEh,06Ch,028h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,010h,038h,038h,07Ch,07Ch,0FEh,0FEh,000h,000h,000h,000h,000h db 000h,000h,000h,000h,0FEh,0FEh,07Ch,07Ch,038h,038h,010h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,018h,03Ch,03Ch,03Ch,018h,018h,018h,000h,018h,018h,000h,000h,000h,000h db 000h,066h,066h,066h,024h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,06Ch,06Ch,0FEh,06Ch,06Ch,06Ch,0FEh,06Ch,06Ch,000h,000h,000h,000h db 018h,018h,07Ch,0C6h,0C2h,0C0h,07Ch,006h,086h,0C6h,07Ch,018h,018h,000h,000h,000h db 000h,000h,000h,000h,0C2h,0C6h,00Ch,018h,030h,060h,0C6h,086h,000h,000h,000h,000h db 000h,000h,038h,06Ch,06Ch,038h,076h,0DCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,030h,030h,030h,060h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,00Ch,018h,030h,030h,030h,030h,030h,030h,018h,00Ch,000h,000h,000h,000h db 000h,000h,030h,018h,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,018h,030h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,066h,03Ch,0FFh,03Ch,066h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,018h,018h,07Eh,018h,018h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,018h,018h,018h,030h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,018h,018h,000h,000h,000h,000h db 000h,000h,000h,000h,002h,006h,00Ch,018h,030h,060h,0C0h,080h,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,0CEh,0D6h,0D6h,0E6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,018h,038h,078h,018h,018h,018h,018h,018h,018h,07Eh,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,006h,00Ch,018h,030h,060h,0C0h,0C6h,0FEh,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,006h,006h,03Ch,006h,006h,006h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,00Ch,01Ch,03Ch,06Ch,0CCh,0FEh,00Ch,00Ch,00Ch,01Eh,000h,000h,000h,000h db 000h,000h,0FEh,0C0h,0C0h,0C0h,0FCh,00Eh,006h,006h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,038h,060h,0C0h,0C0h,0FCh,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,0FEh,0C6h,006h,006h,00Ch,018h,030h,030h,030h,030h,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,0C6h,07Ch,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,0C6h,07Eh,006h,006h,006h,00Ch,078h,000h,000h,000h,000h db 000h,000h,000h,000h,018h,018h,000h,000h,000h,018h,018h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,018h,018h,000h,000h,000h,018h,018h,030h,000h,000h,000h,000h db 000h,000h,000h,006h,00Ch,018h,030h,060h,030h,018h,00Ch,006h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,0FEh,000h,000h,0FEh,000h,000h,000h,000h,000h,000h db 000h,000h,000h,060h,030h,018h,00Ch,006h,00Ch,018h,030h,060h,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,00Ch,018h,018h,018h,000h,018h,018h,000h,000h,000h,000h db 000h,000h,000h,07Ch,0C6h,0C6h,0DEh,0DEh,0DEh,0DCh,0C0h,07Ch,000h,000h,000h,000h db 000h,000h,010h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,0FCh,066h,066h,066h,07Ch,066h,066h,066h,066h,0FCh,000h,000h,000h,000h db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0C0h,0C0h,0C2h,066h,03Ch,000h,000h,000h,000h db 000h,000h,0F8h,06Ch,066h,066h,066h,066h,066h,066h,06Ch,0F8h,000h,000h,000h,000h db 000h,000h,0FEh,066h,062h,068h,078h,068h,060h,062h,066h,0FEh,000h,000h,000h,000h db 000h,000h,0FEh,066h,062h,068h,078h,068h,060h,060h,060h,0F0h,000h,000h,000h,000h db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0DEh,0C6h,0C6h,066h,03Ah,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,03Ch,018h,018h,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,01Eh,00Ch,00Ch,00Ch,00Ch,00Ch,0CCh,0CCh,0CCh,078h,000h,000h,000h,000h db 000h,000h,0E6h,066h,06Ch,06Ch,078h,078h,06Ch,066h,066h,0E6h,000h,000h,000h,000h db 000h,000h,0F0h,060h,060h,060h,060h,060h,060h,062h,066h,0FEh,000h,000h,000h,000h db 000h,000h,0C6h,0EEh,0FEh,0FEh,0D6h,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,0C6h,0E6h,0F6h,0FEh,0DEh,0CEh,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,038h,06Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h db 000h,000h,0FCh,066h,066h,066h,07Ch,060h,060h,060h,060h,0F0h,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0D6h,0DEh,07Ch,00Ch,00Eh,000h,000h db 000h,000h,0FCh,066h,066h,066h,07Ch,06Ch,066h,066h,066h,0E6h,000h,000h,000h,000h db 000h,000h,07Ch,0C6h,0C6h,060h,038h,00Ch,006h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,07Eh,07Eh,05Ah,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,06Ch,038h,010h,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0D6h,0D6h,0FEh,06Ch,06Ch,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,06Ch,06Ch,038h,038h,06Ch,06Ch,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,066h,066h,066h,066h,03Ch,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,0FEh,0C6h,086h,00Ch,018h,030h,060h,0C2h,0C6h,0FEh,000h,000h,000h,000h db 000h,000h,03Ch,030h,030h,030h,030h,030h,030h,030h,030h,03Ch,000h,000h,000h,000h db 000h,000h,000h,080h,0C0h,0E0h,070h,038h,01Ch,00Eh,006h,002h,000h,000h,000h,000h db 000h,000h,03Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,00Ch,03Ch,000h,000h,000h,000h db 010h,038h,06Ch,0C6h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0FFh,000h,000h db 030h,030h,018h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,0E0h,060h,060h,078h,06Ch,066h,066h,066h,066h,0DCh,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Ch,0C6h,0C0h,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,01Ch,00Ch,00Ch,03Ch,06Ch,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,038h,06Ch,064h,060h,0F0h,060h,060h,060h,060h,0F0h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,076h,0CCh,0CCh,0CCh,0CCh,0CCh,07Ch,00Ch,0CCh,078h,000h db 000h,000h,0E0h,060h,060h,06Ch,076h,066h,066h,066h,066h,0E6h,000h,000h,000h,000h db 000h,000h,018h,018h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,006h,006h,000h,00Eh,006h,006h,006h,006h,006h,006h,066h,066h,03Ch,000h db 000h,000h,0E0h,060h,060h,066h,06Ch,078h,078h,06Ch,066h,0E6h,000h,000h,000h,000h db 000h,000h,038h,018h,018h,018h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0ECh,0FEh,0D6h,0D6h,0D6h,0D6h,0D6h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0DCh,066h,066h,066h,066h,066h,066h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0DCh,066h,066h,066h,066h,066h,07Ch,060h,060h,0F0h,000h db 000h,000h,000h,000h,000h,076h,0CCh,0CCh,0CCh,0CCh,0CCh,07Ch,00Ch,00Ch,01Eh,000h db 000h,000h,000h,000h,000h,0DCh,076h,062h,060h,060h,060h,0F0h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Ch,0C6h,060h,038h,00Ch,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,010h,030h,030h,0FCh,030h,030h,030h,030h,036h,01Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,066h,066h,066h,066h,066h,03Ch,018h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0C6h,0C6h,0C6h,0D6h,0D6h,0FEh,06Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0C6h,06Ch,038h,038h,038h,06Ch,0C6h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Eh,006h,00Ch,0F8h,000h db 000h,000h,000h,000h,000h,0FEh,0CCh,018h,030h,060h,0C6h,0FEh,000h,000h,000h,000h db 000h,000h,00Eh,018h,018h,018h,070h,018h,018h,018h,018h,00Eh,000h,000h,000h,000h db 000h,000h,018h,018h,018h,018h,000h,018h,018h,018h,018h,018h,000h,000h,000h,000h db 000h,000h,070h,018h,018h,018h,00Eh,018h,018h,018h,018h,070h,000h,000h,000h,000h db 000h,000h,076h,0DCh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,010h,038h,06Ch,0C6h,0C6h,0C6h,0FEh,000h,000h,000h,000h,000h db 000h,000h,03Ch,066h,0C2h,0C0h,0C0h,0C0h,0C2h,066h,03Ch,00Ch,006h,07Ch,000h,000h db 000h,000h,0CCh,0CCh,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,00Ch,018h,030h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,010h,038h,06Ch,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,0CCh,0CCh,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,060h,030h,018h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,038h,06Ch,038h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,000h,000h,03Ch,066h,060h,060h,066h,03Ch,00Ch,006h,03Ch,000h,000h,000h db 000h,010h,038h,06Ch,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,060h,030h,018h,000h,07Ch,0C6h,0FEh,0C0h,0C0h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,066h,066h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,018h,03Ch,066h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,060h,030h,018h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,0C6h,0C6h,010h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,000h,000h,000h,000h db 038h,06Ch,038h,000h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,0C6h,000h,000h,000h,000h db 018h,030h,060h,000h,0FEh,066h,060h,07Ch,060h,060h,066h,0FEh,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0CCh,076h,036h,07Eh,0D8h,0D8h,06Eh,000h,000h,000h,000h db 000h,000h,03Eh,06Ch,0CCh,0CCh,0FEh,0CCh,0CCh,0CCh,0CCh,0CEh,000h,000h,000h,000h db 000h,010h,038h,06Ch,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,060h,030h,018h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,030h,078h,0CCh,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,060h,030h,018h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,0C6h,0C6h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Eh,006h,00Ch,078h,000h db 000h,0C6h,0C6h,000h,038h,06Ch,0C6h,0C6h,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h db 000h,0C6h,0C6h,000h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,018h,018h,03Ch,066h,060h,060h,060h,066h,03Ch,018h,018h,000h,000h,000h,000h db 000h,038h,06Ch,064h,060h,0F0h,060h,060h,060h,060h,0E6h,0FCh,000h,000h,000h,000h db 000h,000h,066h,066h,03Ch,018h,07Eh,018h,07Eh,018h,018h,018h,000h,000h,000h,000h db 000h,0F8h,0CCh,0CCh,0F8h,0C4h,0CCh,0DEh,0CCh,0CCh,0CCh,0C6h,000h,000h,000h,000h db 000h,00Eh,01Bh,018h,018h,018h,07Eh,018h,018h,018h,018h,018h,0D8h,070h,000h,000h db 000h,018h,030h,060h,000h,078h,00Ch,07Ch,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,00Ch,018h,030h,000h,038h,018h,018h,018h,018h,018h,03Ch,000h,000h,000h,000h db 000h,018h,030h,060h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,018h,030h,060h,000h,0CCh,0CCh,0CCh,0CCh,0CCh,0CCh,076h,000h,000h,000h,000h db 000h,000h,076h,0DCh,000h,0DCh,066h,066h,066h,066h,066h,066h,000h,000h,000h,000h db 076h,0DCh,000h,0C6h,0E6h,0F6h,0FEh,0DEh,0CEh,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,03Ch,06Ch,06Ch,03Eh,000h,07Eh,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,038h,06Ch,06Ch,038h,000h,07Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,030h,030h,000h,030h,030h,060h,0C0h,0C6h,0C6h,07Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,0FEh,0C0h,0C0h,0C0h,0C0h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,0FEh,006h,006h,006h,006h,000h,000h,000h,000h,000h db 000h,0C0h,0C0h,0C2h,0C6h,0CCh,018h,030h,060h,0CEh,093h,006h,00Ch,01Fh,000h,000h db 000h,0C0h,0C0h,0C2h,0C6h,0CCh,018h,030h,066h,0CEh,09Ah,03Fh,006h,00Fh,000h,000h db 000h,000h,018h,018h,000h,018h,018h,018h,03Ch,03Ch,03Ch,018h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,033h,066h,0CCh,066h,033h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0CCh,066h,033h,066h,0CCh,000h,000h,000h,000h,000h,000h db 011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h,011h,044h db 055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h,0AAh db 0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h db 018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,018h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,0F8h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h db 036h,036h,036h,036h,036h,036h,036h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h db 000h,000h,000h,000h,000h,000h,000h,0FEh,036h,036h,036h,036h,036h,036h,036h,036h db 000h,000h,000h,000h,000h,0F8h,018h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h db 036h,036h,036h,036h,036h,0F6h,006h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h,036h db 000h,000h,000h,000h,000h,0FEh,006h,0F6h,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,0F6h,006h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h db 036h,036h,036h,036h,036h,036h,036h,0FEh,000h,000h,000h,000h,000h,000h,000h,000h db 018h,018h,018h,018h,018h,0F8h,018h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,0F8h,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,018h,018h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h db 018h,018h,018h,018h,018h,018h,018h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,018h,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h db 000h,000h,000h,000h,000h,000h,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 018h,018h,018h,018h,018h,018h,018h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,01Fh,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h db 036h,036h,036h,036h,036h,036h,036h,037h,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,037h,030h,03Fh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,03Fh,030h,037h,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,0F7h,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0FFh,000h,0F7h,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,037h,030h,037h,036h,036h,036h,036h,036h,036h,036h,036h db 000h,000h,000h,000h,000h,0FFh,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 036h,036h,036h,036h,036h,0F7h,000h,0F7h,036h,036h,036h,036h,036h,036h,036h,036h db 018h,018h,018h,018h,018h,0FFh,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 036h,036h,036h,036h,036h,036h,036h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0FFh,000h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h db 000h,000h,000h,000h,000h,000h,000h,0FFh,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,036h,036h,03Fh,000h,000h,000h,000h,000h,000h,000h,000h db 018h,018h,018h,018h,018h,01Fh,018h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,01Fh,018h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h db 000h,000h,000h,000h,000h,000h,000h,03Fh,036h,036h,036h,036h,036h,036h,036h,036h db 036h,036h,036h,036h,036h,036h,036h,0FFh,036h,036h,036h,036h,036h,036h,036h,036h db 018h,018h,018h,018h,018h,0FFh,018h,0FFh,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,018h,018h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,01Fh,018h,018h,018h,018h,018h,018h,018h,018h db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh db 000h,000h,000h,000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh db 0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h db 00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,076h,0DCh,0D8h,0D8h,0D8h,0DCh,076h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,0FCh,0C6h,0FCh,0C6h,0C6h,0FCh,0C0h,0C0h,0C0h,000h,000h db 000h,000h,0FEh,0C6h,0C6h,0C0h,0C0h,0C0h,0C0h,0C0h,0C0h,0C0h,000h,000h,000h,000h db 000h,000h,000h,000h,080h,0FEh,06Ch,06Ch,06Ch,06Ch,06Ch,06Ch,000h,000h,000h,000h db 000h,000h,000h,0FEh,0C6h,060h,030h,018h,030h,060h,0C6h,0FEh,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Eh,0D8h,0D8h,0D8h,0D8h,0D8h,070h,000h,000h,000h,000h db 000h,000h,000h,000h,066h,066h,066h,066h,066h,07Ch,060h,060h,0C0h,000h,000h,000h db 000h,000h,000h,000h,076h,0DCh,018h,018h,018h,018h,018h,018h,000h,000h,000h,000h db 000h,000h,000h,07Eh,018h,03Ch,066h,066h,066h,03Ch,018h,07Eh,000h,000h,000h,000h db 000h,000h,000h,038h,06Ch,0C6h,0C6h,0FEh,0C6h,0C6h,06Ch,038h,000h,000h,000h,000h db 000h,000h,038h,06Ch,0C6h,0C6h,0C6h,06Ch,06Ch,06Ch,06Ch,0EEh,000h,000h,000h,000h db 000h,000h,01Eh,030h,018h,00Ch,03Eh,066h,066h,066h,066h,03Ch,000h,000h,000h,000h db 000h,000h,000h,000h,000h,07Eh,0DBh,0DBh,0DBh,07Eh,000h,000h,000h,000h,000h,000h db 000h,000h,000h,003h,006h,07Eh,0CFh,0DBh,0F3h,07Eh,060h,0C0h,000h,000h,000h,000h db 000h,000h,01Ch,030h,060h,060h,07Ch,060h,060h,060h,030h,01Ch,000h,000h,000h,000h db 000h,000h,000h,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,000h,000h,000h,000h db 000h,000h,000h,000h,0FEh,000h,000h,0FEh,000h,000h,0FEh,000h,000h,000h,000h,000h db 000h,000h,000h,000h,018h,018h,07Eh,018h,018h,000h,000h,0FFh,000h,000h,000h,000h db 000h,000h,000h,030h,018h,00Ch,006h,00Ch,018h,030h,000h,07Eh,000h,000h,000h,000h db 000h,000h,000h,00Ch,018h,030h,060h,030h,018h,00Ch,000h,07Eh,000h,000h,000h,000h db 000h,000h,00Eh,01Bh,01Bh,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h,018h db 018h,018h,018h,018h,018h,018h,018h,018h,0D8h,0D8h,0D8h,070h,000h,000h,000h,000h db 000h,000h,000h,000h,018h,018h,000h,07Eh,000h,018h,018h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,076h,0DCh,000h,076h,0DCh,000h,000h,000h,000h,000h,000h db 000h,038h,06Ch,06Ch,038h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,018h,018h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,018h,000h,000h,000h,000h,000h,000h,000h db 000h,00Fh,00Ch,00Ch,00Ch,00Ch,00Ch,0ECh,06Ch,06Ch,03Ch,01Ch,000h,000h,000h,000h db 000h,0D8h,06Ch,06Ch,06Ch,06Ch,06Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,070h,098h,030h,060h,0C8h,0F8h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,07Ch,07Ch,07Ch,07Ch,07Ch,07Ch,07Ch,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h stack 1024 end Startup
Код (Text): ; процедура set_modex ; переводит видеоадаптер VGA в один из режимов X с 256 цветами ; ввод: DI = номер режима ; 0: 320x200, соотношение сторон 1,2:1 ; 1: 320x400, соотношение сторон 2,4:1 ; 2: 360x200, соотношение сторон 1,35:1 ; 3: 360x400, соотношение сторон 2,7:1 ; 4: 320x240, соотношение сторон 1:1 ; 5: 320x480, соотношение сторон 2:1 ; 6: 360x240, соотношение сторон 1,125:1 ; 7: 360x480, соотношение сторон 2,25:1 ; DS = CS ; Для вывода информации на экран в этих режимах ; см. процедуру putpixel_x setmode_x proc near mov ax,12h ; очистить все четыре цветовые int 10h ; плоскости видеопамяти, mov ax,13h ; установить режим 13h, который будем int 10h ; модифицировать cmp di,7 ; если нас вызвали с DI > 7, ja exit_modex ; выйти из процедуры ; (оставшись в режиме 13h), shl di,1 ; умножить на 2, так как x_modes - ; таблица слов, mov di,word ptr x_modes[di] ; прочитать ; адрес таблицы настроек для ; выбранного режима mov dx,03C4h ; порт 03C4h - индекс синхронизатора mov ax,0100h ; регистр 00h, значение 01 out dx,ax ; асинхронный сброс mov ax,0604h ; регистр 04h, значение 06h out dx,ax ; отключить режим CHAIN4 mov dl,0C2h ; порт 03C2h - регистр ; MOR на запись mov al,byte ptr [di] ; записать в него ; значение частоты кадров out dx,al ; и полярности развертки ; для выбранного режима mov dl,0D4h ; порт 03D4h - индекс ; контроллера CRT mov si,word ptr offset [di+2] ; адрес строки с настройками ; для выбранной ширины в DS:SI mov cx,8 ; длина строки настроек в СХ rep outsw ; вывод строки слов ; в порты 03D4/03D5 mov si,word ptr offset [di+4] ; настройки для ; выбранной высоты в DS:SI mov сх,7 ; длина строки настроек в СХ rep outsw mov si,word ptr offset [di+6] ; настройки ; для включения/выключения удвоения ; по вертикали (200/400 и 240/480 строк) mov сх,3 rep outsw mov ax, word ptr offset [di+8] ; число байт в строке mov word ptr x_width,ax ; сохранить ; в переменной x_width mov dl,0C4h ; порт 03C4h - индекс синхронизатора mov ах,0300h ; регистр 00h, значение 03 out dx,ax ; выйти из состояния сброса exit_modex: ret ; таблица адресов таблиц с настройками режимов x_modes dw offset mode_0,offset mode_1 dw offset mode_2,offset mode_3 dw offset mode_4,offset mode_5 dw offset mode_6,offset mode_7 ; таблица настроек режимов: значение регистра MOR, адрес строки ; настроек ширины, адрес строки настроек высоты, адрес строки ; настроек удвоения по вертикали, число байт в строке mode_0 dw 63h,offset mode_320w,offset mode_200h,offset mode_double,320/4 mode_1 dw 63h,offset mode_320w,offset mode_400h,offset mode_single,320/4 mode_2 dw 67h,offset mode_360w,offset mode_200h,offset mode_double,360/4 mode_3 dw 67h,offset mode_360w,offset mode_400h,offset mode_single,360/4 mode_4 dw 0E3h,offset mode_320w,offset mode_240h,offset mode_double,320/4 mode_5 dw 0E3h,offset mode_320w,offset mode_480h,offset mode_single,320/4 mode_6 dw 0E7h,offset mode_360w,offset mode_240h,offset mode_double,360/4 mode_7 dw 0E7h,offset mode_360w,offset mode_480h,offset mode_single,360/4 ; настройки CRT. В каждом слове младший байт - номер регистра, ; старший - значение, которое в этот регистр заносится mode_320w: ; настройка ширины 320 ; Первый регистр обязательно 11h, хотя он и не относится ; к ширине - он разрешает запись в остальные регистры, ; если она была запрещена (!) dw 0E11h,5F00h,4F01h,5002h,8203h,5404h,8005h,2813h mode_360w: ; настройка ширины 360 dw 0E11h,6B00h,5901h,5A02h,8E03h,5E04h,8A05h,2D13h mode_200h: mode_400h: ; настройка высоты 200/400 dw 0BF06h,1F07h,9C10h,0E11h,8F12h,9615h,0B916h mode_240h: mode_480h: ; настройка высоты 240/480 dw 0D06h,3E07h,0EA10h,0C11h,0DF12h,0E715h,0616h mode_single: ; настройка режимов без удвоения dw 4009h,0014h,0E317h mode_double: ; настройка режимов с удвоением dw 4109h,0014h,0E317h setmode_x endp x_width dw ? ; число байт в строке ; эту переменную инициализирует setmode_x, а использует putpixel_x ; процедура putpixel_x ; выводит точку с заданным цветом в текущем режиме X ; Ввод: DX = строка ; СХ = столбец ; ВР = цвет ; ES = A000h ; DS = сегмент, в котором находится переменная x_width putpixel_x proc near pusha mov ax, dx mul word ptr x_width ; AX = строка * число байт в строке mov di,cx ; DI = столбец shr di,2 ; DI = столбец/4 (номер байта в строке) add di,ax ; DI = номер байта в видеопамяти mov ax,0102h ; AL = 02h (номер регистра), ; АН = 01 (битовая маска) and cl,03h ; CL = остаток от деления ; столбца на 4 = номер ; цветовой плоскости shl ah,cl ; теперь в АН выставлен в 1 бит, ; соответствующий нужной ; цветовой плоскости mov dx,03C4h ; порт 03C4h - индекс ; синхронизатора out dx,ax ; разрешить запись только ; в нужную плоскость mov ax,bp ; цвет в AL stosb ; вывод байта в видеопамять рора ret putpixel_x endp это из зубкова, но многовато тут n0name Пасиб, гляну, но он больно длиннолват!
Таких примеров ты нигде не найдёш. Это в принципе возможно, но для этого надо программировать акселератор видяхи. А у разных видях разные регистры+спецификации закрыты... Так что отладчик в руки и копать драйвера производителя. Только ИМХО всё равно смысла нет - для одной видяхи ты раскопаешь, а на другой работать не будет. По поводу кода. Первый пример это то что я имел ввиду. Т.е. переключение в графический режим без BIOS. Размер таблиц можешь заценить Второе это не совсем то - это ModeX. Там при помощи BIOS устанавливается режим 320х200@256 цветов. Но так как соотношение сторон не стандартное (не 4 к 3), то его руками перепрограммируют в 320х240. Это в принципе намного проще.
Во втором аттаче для всех портов есть соответствие их значения и видеорежима, так что можешь упростить задачу изменяя только те что действительно меняются, правда в некоторых (уже не помню каких, но что-то связанное с развёрткой) портах были грабли с последовательностью типа обязательно сначала менять один, затем другой, ну и есно не забывай про индексный доступ к большинству портов. Насколько я понял громоздкость таблиц связана с палитрами и поддержкой множества режимов, есно для конкретного 16 цветного режима они либо не портебуются, либо сильно сократятся. А в VESA без биоса практически никак потому, что VGA - это последний стандарт на регистры, дальше стандартизирован только биос и если даже раскопаешь инфу - то она будет пригодна лишь к конкретной видеокарте, аналогично и с акселераторами (которые за тебя строят граф. примитивы), правда ходят слухи, что на сайте интел валяются исходники некоторых видеодайверов, может чем и помогут
Второй аттач автору не пойдёт - там используется BIOS. При помощи BIOS устанавоивается режим 13h,а потом перепрограммируется. Меняются НЕ ВСЕ нужные регистры. Больше подойдёт первый - там BIOS не используется. Если урезать, то можно конечно выкинуть палитру и таблицу со шрифтом. Правда если шрифт для граф режима в большинстве случаев не нужен, то палитру лучше бы оставить... Исходников драйверов не видел, но на видяхи Intel документация как раз открытая. Можно с ихнего сайта слить. Документов нет на карты ATI и nVidia. А распространение у них ИМХО максимальное.
cppasm Я имел в виду не второй код, а свой второй аттач из #3, там как раз подробно расписаны все ega\vga порты, правда как верно заметил SPA буковь там много и пока всё вкуришь - удовольствия немало получишь ) Палитра насколько я понимаю для текстового режима, который всё равно будет по умолчанию совпадает с палитрой для 16 цветной графики. А про исходники драйверов где то здесь на форуме пробегало, только есно без ссылки.