Функции для работы с XMode (320x200x256)
Эхххх, какой был видео-режим…какие для него писали демки.
Приведенный ниже код содержит простейшие функции для работы с XMode: включить режим, восстановить режим, вывести точку, изменить палитру, подождать обратного хода луча (интересно, как это выглядит на LCD мониторах :)), вывести символ и очистить экран.
Вообще приведенный код вряд ли может быть использован для дела… разве что лабораторные сдавать или поэкспериментировать…или так, для истории :)
SMART
CODE SEGMENT
ASSUME cs:Code
P386
PUBLIC _mSetMode
PUBLIC _mRestoreMode
PUBLIC _mPutPixel
PUBLIC _mWaitRetRace
PUBLIC _mChangePalette
PUBLIC _mWriteSymb
PUBLIC _mClrScr
PUBLIC _OldMode
_OLDMODE DB 0
;################## SetMode ##################################################
_mSetMode PROC Far
mov ah,0Fh
int 10h
mov [_OldMode],Al
mov ax,0013h ; 320x200x256
int 10h
ret
_mSetMode ENDP
;################## SetMode ##################################################
_mRestoreMode PROC Far
xor ah,ah
mov al,[_OldMode]
int 10h
ret
_mRestoreMode ENDP
;################## PutPixel #################################################
_mPutPixel PROC Far
push bp
mov bp,sp
mov ax,0A000h
mov es,ax
mov cx,320
mov ax,ss:[bp+08] ;Y
mov bx,ss:[bp+10] ;X
mul cx
add ax,bx
mov dx,ss:[bp+06] ;Color
mov di,ax
mov Byte Ptr es:[di],dl
pop bp
ret 6
_mPutPixel ENDP
;################## WaitRetRace ##############################################
_mWaitRetRace PROC Far
mov dx,03DAh
RetR1: in al,dx
test al,08h
jne RetR1
RetR2: in al,dx
test al,08h
je RetR2
ret
_mWaitRetRace ENDP
;################## ChangePalette ############################################
_mChangePalette PROC Far
push bp
mov bp,sp
mov ax, ss:[bp+12]
mov dx, 3C8h
out dx, al
inc dx ;DX = 3C9h (Pal DATA REG)
mov ax, ss:[bp+10]
out dx, al ;красная составляющая
mov ax, ss:[bp+08]
out dx, al ;зеленая составляющая
mov ax, ss:[bp+06]
out dx, al ;синяя составляющая
pop bp
ret 8
_mChangePalette ENDP
;############## Write ########################################################
_mWriteSymb PROC Far
push bp
mov bp,sp ;6-Символ
mov ax,[bp+10] ;8-Color
mov dh,al ;10-Y
mov bx,[bp+12] ;12-X
mov dl,bl
mov ah,02h
int 10h
mov cx,1
mov ax,[bp+06]
xor ah,ah
mov bx,[bp+08]
mov ah,09h
int 10h
pop bp
ret 8
_mWriteSymb ENDP
;############## Clear Screen #################################################
_mClrScr PROC Far
push es
push 0A000h
pop es
xor di,di
xor eax,eax
mov cx,16000
rep stosd
pop es
ret
_mClrScr ENDP
CODE ENDS
END
Download this code: xmode.asm
Комментарии