2004-06-12 23:34:04 +02:00
|
|
|
|
.model tiny
|
|
|
|
|
.486
|
|
|
|
|
smart
|
|
|
|
|
.code
|
|
|
|
|
|
2004-11-19 18:21:20 +01:00
|
|
|
|
org 0h
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
include ..\include\bmp.h
|
|
|
|
|
|
|
|
|
|
start:
|
|
|
|
|
jmp tsr ;Saute <20> la routine r<>sidente
|
|
|
|
|
names db 'VIDEO' ;Nom drivers
|
|
|
|
|
id dw 1234h ;Identifiant drivers
|
|
|
|
|
Tsr:
|
|
|
|
|
cli ;D<>sactive interruptions logiciellement
|
|
|
|
|
cmp ax,cs:ID ;Compare si test de chargement
|
|
|
|
|
jne nomore ;Si pas test alors on continu
|
|
|
|
|
rol ax,3*4 ;Rotation de 3 chiffre de l'ID pour montrer que le drivers est charg<72>
|
|
|
|
|
jmp itsok ;On termine l'int avec notre code d'ID preuve du bon chargement de VIDEO
|
|
|
|
|
nomore:
|
|
|
|
|
cmp ah,maxfunc
|
|
|
|
|
jbe noerrorint
|
|
|
|
|
stc
|
|
|
|
|
jmp itsok
|
|
|
|
|
noerrorint:
|
|
|
|
|
clc
|
|
|
|
|
push bx
|
|
|
|
|
mov bl,ah ;On calcule d'apr<70>s le n<> de fonction
|
|
|
|
|
xor bh,bh ;quel sera l'entr<74>e dans la table index<65>e
|
|
|
|
|
shl bx,1 ;des adresses fonctions.
|
|
|
|
|
mov bx,cs:[bx+tables] ;On r<>cup<75>re cette adresse depuis la table
|
|
|
|
|
mov cs:current,bx ;On la stocke temporairement pour obtenir les registres d'origine
|
|
|
|
|
pop bx
|
|
|
|
|
clc
|
|
|
|
|
call cs:current ;Puis on execute la fonction
|
|
|
|
|
itsok:
|
|
|
|
|
push bp
|
|
|
|
|
mov bp,sp ;On prend sp dans bp pour adresser la pile
|
|
|
|
|
jnc noerror ;La fonction appel<65>e a renvoyer une erreur : Flag CARRY ?
|
|
|
|
|
or byte ptr [bp+6],1b;Si oui on le retranscrit sur le registre FLAG qui sera d<>pil<69> lors du IRET
|
|
|
|
|
;xor eax,eax
|
|
|
|
|
;mov ax,cs ;On r<>cup<75>re le segment et l'offset puis en renvoie l'adresse physique
|
|
|
|
|
;shl eax,4 ;de l'erreur.
|
|
|
|
|
;add ax,cs:current
|
|
|
|
|
;jmp endofint ;on termine l'int
|
|
|
|
|
noerror:
|
|
|
|
|
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera d<>pil<69> lors du IRET
|
|
|
|
|
endofint:
|
|
|
|
|
pop bp
|
|
|
|
|
sti ;On r<>active les interruptions logiciellement
|
|
|
|
|
iret ;Puis on retourne au programme appelant.
|
|
|
|
|
|
|
|
|
|
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appel<65>e
|
|
|
|
|
tables dw setvideomode ;Table qui contient les adresses de toutes les fonctions de VIDEO (WORD)
|
|
|
|
|
dw getvideomode
|
|
|
|
|
dw clearscreen
|
|
|
|
|
dw setfont
|
|
|
|
|
dw loadfont
|
|
|
|
|
dw showspace
|
|
|
|
|
dw showline
|
|
|
|
|
dw showchar
|
|
|
|
|
dw showint
|
|
|
|
|
dw showsigned
|
|
|
|
|
dw showhex
|
|
|
|
|
dw showbin
|
|
|
|
|
dw showstring
|
|
|
|
|
dw showstring0
|
|
|
|
|
dw showcharat
|
|
|
|
|
dw showintat
|
|
|
|
|
dw showsignedat
|
|
|
|
|
dw showhexat
|
|
|
|
|
dw showbinat
|
|
|
|
|
dw showstringat
|
|
|
|
|
dw showstring0at
|
|
|
|
|
dw setcolor
|
|
|
|
|
dw getcolor
|
|
|
|
|
dw scrolldown
|
|
|
|
|
dw getxy
|
|
|
|
|
dw setxy2
|
|
|
|
|
dw savescreen
|
|
|
|
|
dw restorescreen
|
|
|
|
|
dw page2to1
|
|
|
|
|
dw page1to2
|
|
|
|
|
dw xchgPages
|
|
|
|
|
dw savepage1
|
|
|
|
|
dw changelineattr
|
|
|
|
|
dw waitretrace
|
|
|
|
|
dw getvgainfos
|
|
|
|
|
dw loadbmppalet
|
|
|
|
|
dw showbmp
|
|
|
|
|
dw viewbmp
|
|
|
|
|
dw savedac
|
|
|
|
|
dw restoredac
|
|
|
|
|
dw savestate
|
|
|
|
|
dw restorestate
|
|
|
|
|
dw enablescroll
|
|
|
|
|
dw disablescroll
|
|
|
|
|
dw showdate
|
|
|
|
|
dw showtime
|
|
|
|
|
dw showname
|
|
|
|
|
dw showattr
|
|
|
|
|
dw showsize
|
2004-11-11 17:19:18 +01:00
|
|
|
|
dw getchar
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;================================Table des modes videos (64 BYTES) ============================================
|
|
|
|
|
;40*25 16 couleurs
|
|
|
|
|
mode0 DB 67H,00H, 03H,08H,03H,00H,02H
|
|
|
|
|
DB 2DH,27H,28H,90H,2BH,0A0H,0BFH,01FH,00H,4FH,0DH,0EH,00H,00H,00H,00H
|
|
|
|
|
DB 9CH,8EH,8FH,14H,1FH,96H,0B9H,0A3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,14H,07H,38H,39H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
|
|
|
DB 0CH,00H,0FH,08H,00H
|
|
|
|
|
DB 40,25
|
|
|
|
|
|
|
|
|
|
;80*25 16 couleurs
|
|
|
|
|
mode1 DB 67H,00H, 03H,00H,03H,00H,02H
|
|
|
|
|
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,4FH,0DH,0EH,00H,00H,00H,00H
|
|
|
|
|
DB 9CH,0EH,8FH,28H,1FH,96H,0B9H,0A3h,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,14H,07H,38H,39H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
|
|
|
DB 0CH,00H,0FH,08H,00H
|
|
|
|
|
DB 80,25
|
|
|
|
|
|
|
|
|
|
;80*50 16 couleurs
|
|
|
|
|
mode2 DB 63H, 00H, 03H,01H,03H,01H,02H
|
|
|
|
|
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
|
|
|
|
DB 00H,9CH,8EH,8FH,28H,1FH,96H,0B9H,0A3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
|
|
|
DB 0CH,00H,0FH,00H,00H
|
|
|
|
|
DB 80,50
|
|
|
|
|
|
|
|
|
|
;100*50 16 couleurs
|
|
|
|
|
mode3 DB 067H,00H,03H,01H,03H,01H,02H
|
|
|
|
|
DB 70H,63H,64H,85H,68H,84H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
|
|
|
|
DB 00H,9Ch,08EH,8FH,32H,1FH,96H,0B9H,0A3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
|
|
|
DB 0CH,00H,0FH,00H,00H
|
|
|
|
|
DB 100,50
|
|
|
|
|
|
|
|
|
|
;100*60 16 couleurs
|
|
|
|
|
mode4 DB 0A7H,00H,03H,01H,03H,01H,02H
|
|
|
|
|
DB 70H,63H,64H,85H,68H,84H,0FFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
|
|
|
|
DB 00H,0E7H,8EH,0DFH,32H,1FH,0DFH,0E5H,0A3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
|
|
|
DB 0CH,00H,0FH,00H,00H
|
|
|
|
|
DB 100,60
|
|
|
|
|
|
|
|
|
|
;320*200 256 couleurs
|
|
|
|
|
mode5 DB 63H, 00H, 03H,01H,0FH,00H,06H
|
|
|
|
|
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,41H,00H,00H,00H,00H,00H,00H
|
|
|
|
|
DB 9CH,0EH,8FH,28H,00H,96H,0B9H,0E3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
|
|
|
DB 41H,00H,0FH,00H,00H
|
|
|
|
|
DB 40,25
|
|
|
|
|
|
|
|
|
|
;320*400 256 couleurs
|
|
|
|
|
mode6 DB 063H, 00H, 03H,01H,0FH,00H,06H
|
|
|
|
|
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,40H,00H,00H,00H,00H,00H,00H
|
|
|
|
|
DB 9CH,8EH,8FH,28H,00H,96H,0B9H,0E3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
|
|
|
DB 41H,00H,0FH,00H,00H
|
|
|
|
|
DB 40,50
|
|
|
|
|
|
|
|
|
|
;320*480 256 couleurs
|
|
|
|
|
mode7 DB 0E3H, 00H, 03H,01H,0FH,00H,06H
|
|
|
|
|
DB 5FH,4FH,50H,82H,54H,80H,0BH,3EH,00H,40H,00H,00H,00H,00H,00H,00H
|
|
|
|
|
DB 0EAH,0ACH,0DFH,28H,00H,0E7H,06H,0E3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04h,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
|
|
|
DB 41H,00H,0FH,00H,00H
|
|
|
|
|
DB 40,60
|
|
|
|
|
|
|
|
|
|
;360*480 256 couleurs
|
|
|
|
|
mode8 DB 0E7H, 00H, 03H,01H,0FH,00H,06H
|
|
|
|
|
DB 6BH,59H,5AH,8EH,5EH,8AH,0DH,3EH,00H,40H,00H,00H,00H,00H,00H,00H
|
|
|
|
|
DB 0EAH,0ACH,0DFH,2DH,00H,0E7H,06H,0E3H,0FFH
|
|
|
|
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04h,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
|
|
|
DB 41H,00H,0FH,00H,00H
|
|
|
|
|
DB 45,60
|
|
|
|
|
|
|
|
|
|
;400*600 256 couleurs
|
|
|
|
|
mode9 DB 0E7H, 00H, 03H,01H,0FH,00H,06H
|
|
|
|
|
DB 74h,63h,64h,97h,68h,95h,86h,0F0h,00h,60h,00h,00h,00h,00h,00h,00h
|
|
|
|
|
DB 5Bh,8Dh,57h,32h,00h,60h,80h,0E3h,0FFh
|
|
|
|
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
|
|
|
|
DB 00H,01H,02H,03H,04h,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
|
|
|
DB 41H,00H,0FH,00H,00H
|
|
|
|
|
DB 50,75
|
|
|
|
|
|
|
|
|
|
DATABLOCKSIZE equ 40
|
|
|
|
|
DATABLOCK equ $
|
|
|
|
|
;============================================DATABLOCK=========================================================
|
|
|
|
|
lines db 0
|
|
|
|
|
columns db 0
|
|
|
|
|
x db 0
|
|
|
|
|
y db 0
|
|
|
|
|
xy dw 0
|
|
|
|
|
colors db 7
|
|
|
|
|
mode db 0FFh
|
|
|
|
|
pagesize dw 0
|
|
|
|
|
pages db 0
|
|
|
|
|
font db 0
|
|
|
|
|
graphic db 0
|
|
|
|
|
xg dw 0
|
|
|
|
|
yg dw 0
|
|
|
|
|
style dw 0
|
|
|
|
|
nbpage db 0
|
|
|
|
|
pagesshowed db 0
|
|
|
|
|
plane db 0
|
|
|
|
|
xyg dw 0
|
|
|
|
|
linesize dw 0
|
|
|
|
|
adress dw 0
|
|
|
|
|
base dw 0
|
|
|
|
|
scrolling db 1
|
|
|
|
|
|
|
|
|
|
;=======================================Equivalence pour la clart<72> du code========================================
|
|
|
|
|
Sequencer equ 03C4h
|
|
|
|
|
misc equ 03C2h
|
|
|
|
|
CCRT equ 03D4h
|
|
|
|
|
Attribs equ 03C0h
|
|
|
|
|
graphics equ 03CEh
|
|
|
|
|
statut equ 03DAh
|
|
|
|
|
|
2004-11-11 17:19:18 +01:00
|
|
|
|
maxfunc equ 39h
|
2004-06-12 23:34:04 +02:00
|
|
|
|
maxmode equ 9
|
|
|
|
|
planesize equ 64000
|
|
|
|
|
;============================================Fonctions de l'int VIDEO===========================================
|
|
|
|
|
|
|
|
|
|
;=============ENABLESCROLLING (Fonction 02AH)=========
|
|
|
|
|
;Autorise le d<>filement
|
|
|
|
|
;-> AH=42
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
EnableScroll:
|
|
|
|
|
mov cs:scrolling,1
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;=============DISABLESCROLLING (Fonction 2Bh)=========
|
|
|
|
|
;D<>sactive le d<>filement
|
|
|
|
|
;-> AH=43
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
DisableScroll:
|
|
|
|
|
mov cs:scrolling,0
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;================SHOWDATE (Fonction 2Ch)==============
|
|
|
|
|
;Affiche la date contenu en DX
|
|
|
|
|
;-> AH=44
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
ShowDate:
|
|
|
|
|
push ax cx edx
|
|
|
|
|
mov ax,dx
|
|
|
|
|
mov cx,2
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov dx,ax
|
|
|
|
|
and dx,11111b
|
|
|
|
|
call showfixint
|
|
|
|
|
mov dl,'/'
|
|
|
|
|
call showchar
|
|
|
|
|
mov dx,ax
|
|
|
|
|
shr dx,5
|
|
|
|
|
and dx,111b
|
|
|
|
|
call showfixint
|
|
|
|
|
mov dl,'/'
|
|
|
|
|
call showchar
|
|
|
|
|
mov dx,ax
|
|
|
|
|
shr dx,8
|
|
|
|
|
and dx,11111111b
|
|
|
|
|
add dx,1956
|
|
|
|
|
mov cx,4
|
|
|
|
|
call showfixint
|
|
|
|
|
pop edx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;================SHOWTIME (Fonction 2Dh)==============
|
|
|
|
|
;Affiche l'heure contenu en DX
|
|
|
|
|
;-> AH=45
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
ShowTime:
|
|
|
|
|
push ax cx edx
|
|
|
|
|
mov ax,dx
|
|
|
|
|
mov cx,2
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov dx,ax
|
|
|
|
|
shr dx,11
|
|
|
|
|
and dx,11111b
|
|
|
|
|
call showfixint
|
|
|
|
|
mov dl,':'
|
|
|
|
|
call showchar
|
|
|
|
|
mov dx,ax
|
|
|
|
|
shr dx,5
|
|
|
|
|
and dx,111111b
|
|
|
|
|
call showfixint
|
|
|
|
|
mov dl,':'
|
|
|
|
|
call showchar
|
|
|
|
|
mov dx,ax
|
|
|
|
|
and dx,11111b
|
|
|
|
|
shl dx,1
|
|
|
|
|
call showfixint
|
|
|
|
|
pop edx cx ax
|
|
|
|
|
ret
|
2004-11-19 18:21:20 +01:00
|
|
|
|
db 'ICI'
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;================SHOWNAME (Fonction 2Eh)==============
|
|
|
|
|
;Affiche le nom point<6E> par SI
|
|
|
|
|
;-> AH=46
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
ShowName:
|
|
|
|
|
push cx dx si
|
|
|
|
|
xor cx,cx
|
|
|
|
|
showthename:
|
|
|
|
|
mov dl,ds:[si]
|
|
|
|
|
call showchar
|
|
|
|
|
inc si
|
|
|
|
|
inc cx
|
|
|
|
|
cmp cx,8
|
|
|
|
|
jne suiteaname
|
|
|
|
|
mov dl,' '
|
|
|
|
|
call showchar
|
|
|
|
|
suiteaname:
|
|
|
|
|
cmp cx,8+3
|
|
|
|
|
jb showthename
|
|
|
|
|
pop si dx cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;================SHOWATTR (Fonction 2Fh)==============
|
|
|
|
|
;Affiche les attributs sp<73>cifi<66> par DL
|
|
|
|
|
;-> AH=47
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
ShowAttr:
|
|
|
|
|
push dx
|
|
|
|
|
mov al,dl
|
|
|
|
|
|
|
|
|
|
test al,00000001b
|
|
|
|
|
je noreadonly
|
|
|
|
|
mov dl,'L'
|
|
|
|
|
jmp readonly
|
|
|
|
|
noreadonly:
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
readonly:
|
|
|
|
|
call showchar
|
|
|
|
|
|
|
|
|
|
test al,00000010b
|
|
|
|
|
je nohidden
|
|
|
|
|
mov dl,'C'
|
|
|
|
|
jmp hidden
|
|
|
|
|
nohidden:
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
hidden:
|
|
|
|
|
call showchar
|
|
|
|
|
|
|
|
|
|
test al,00000100b
|
|
|
|
|
je nosystem
|
|
|
|
|
mov dl,'S'
|
|
|
|
|
jmp system
|
|
|
|
|
nosystem:
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
system:
|
|
|
|
|
call showchar
|
|
|
|
|
|
|
|
|
|
test al,00100000b
|
|
|
|
|
je noarchive
|
|
|
|
|
mov dl,'A'
|
|
|
|
|
jmp archive
|
|
|
|
|
noarchive:
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
archive:
|
|
|
|
|
call showchar
|
|
|
|
|
|
|
|
|
|
test al,00010000b
|
|
|
|
|
je nodirectory
|
|
|
|
|
mov dl,'R'
|
|
|
|
|
jmp directory
|
|
|
|
|
nodirectory:
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
directory:
|
|
|
|
|
call showchar
|
|
|
|
|
|
|
|
|
|
pop dx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;================SHOWSIZE (Fonction 30h)==============
|
|
|
|
|
;Affiche le nom point<6E> par DI
|
|
|
|
|
;-> AH=48
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================================
|
|
|
|
|
ShowSize:
|
|
|
|
|
push cx edx si ds
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov cx,4
|
|
|
|
|
cmp edx,1073741824
|
|
|
|
|
ja giga
|
|
|
|
|
cmp edx,1048576*9
|
|
|
|
|
ja mega
|
|
|
|
|
cmp edx,1024*9
|
|
|
|
|
ja kilo
|
|
|
|
|
call showintR
|
|
|
|
|
mov si,offset unit
|
|
|
|
|
call showstring0
|
|
|
|
|
jmp finsize
|
|
|
|
|
kilo:
|
|
|
|
|
shr edx,10
|
|
|
|
|
call showintR
|
|
|
|
|
mov si,offset unitkilo
|
|
|
|
|
call showstring0
|
|
|
|
|
jmp finsize
|
|
|
|
|
mega:
|
|
|
|
|
shr edx,20
|
|
|
|
|
call showintR
|
|
|
|
|
mov si,offset unitmega
|
|
|
|
|
call showstring0
|
|
|
|
|
jmp finsize
|
|
|
|
|
giga:
|
|
|
|
|
shr edx,30
|
|
|
|
|
call showintR
|
|
|
|
|
mov si,offset unitgiga
|
|
|
|
|
call showstring0
|
|
|
|
|
finsize:
|
|
|
|
|
pop ds si edx cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
unit db ' o ',0
|
|
|
|
|
unitkilo db ' ko',0
|
|
|
|
|
unitmega db ' mo',0
|
|
|
|
|
unitgiga db ' go',0
|
|
|
|
|
|
|
|
|
|
;=============SetVideoMode (Fonction 00h)=========
|
|
|
|
|
;Fixe le mode vid<69>o courant a AL
|
|
|
|
|
;-> AH=0, AL mode d'<27>cran
|
|
|
|
|
;<- Carry if error
|
|
|
|
|
;=================================================
|
|
|
|
|
setvideomode:
|
|
|
|
|
push ax cx dx di
|
|
|
|
|
cmp al,maxmode
|
|
|
|
|
ja errorsetvideomode
|
|
|
|
|
cmp cs:mode,5h
|
|
|
|
|
jb nographic
|
|
|
|
|
cmp al,5h
|
|
|
|
|
jae nographic
|
|
|
|
|
call initvideo
|
|
|
|
|
nographic:
|
|
|
|
|
cmp cs:mode,0FFh
|
|
|
|
|
jne noinit
|
|
|
|
|
call initvideo
|
|
|
|
|
noinit:
|
|
|
|
|
mov cs:mode,al
|
|
|
|
|
xor ah,ah
|
|
|
|
|
mov di,ax
|
|
|
|
|
shl di,6
|
|
|
|
|
add di,offset mode0
|
|
|
|
|
mov dx,misc
|
|
|
|
|
mov al,cs:[di]
|
|
|
|
|
out dx,al
|
|
|
|
|
inc di
|
|
|
|
|
mov dx,statut
|
|
|
|
|
mov al,cs:[di]
|
|
|
|
|
out dx,al
|
|
|
|
|
inc di
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
xor ax,ax
|
|
|
|
|
initsequencer:
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc al
|
|
|
|
|
inc di
|
|
|
|
|
cmp al,4
|
|
|
|
|
jbe initsequencer
|
|
|
|
|
mov ax,0E11h
|
|
|
|
|
mov dx,ccrt
|
|
|
|
|
out dx,ax
|
|
|
|
|
xor ax,ax
|
|
|
|
|
initcrt:
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc al
|
|
|
|
|
inc di
|
|
|
|
|
cmp al,24
|
|
|
|
|
jbe initcrt
|
|
|
|
|
mov dx,graphics
|
|
|
|
|
xor ax,ax
|
|
|
|
|
initgraphic:
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc al
|
|
|
|
|
inc di
|
|
|
|
|
cmp al,8
|
|
|
|
|
jbe initgraphic
|
|
|
|
|
mov dx,statut
|
|
|
|
|
in al,dx
|
|
|
|
|
mov dx,attribs
|
|
|
|
|
xor ax,ax
|
|
|
|
|
initattribs:
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
push ax
|
|
|
|
|
in ax,dx
|
|
|
|
|
pop ax
|
|
|
|
|
out dx,al
|
|
|
|
|
xchg ah,al
|
|
|
|
|
out dx,al
|
|
|
|
|
xchg ah,al
|
|
|
|
|
inc al
|
|
|
|
|
inc di
|
|
|
|
|
cmp al,20
|
|
|
|
|
jbe initattribs
|
|
|
|
|
mov al,20h
|
|
|
|
|
out dx,al
|
|
|
|
|
mov al,cs:[di]
|
|
|
|
|
mov cs:columns,al
|
|
|
|
|
mov ah,cs:[di+1]
|
|
|
|
|
mov cs:lines,ah
|
|
|
|
|
mul ah
|
|
|
|
|
shl ax,1
|
|
|
|
|
cmp cs:mode,5
|
2004-11-19 18:21:20 +01:00
|
|
|
|
setae cs:graphic
|
2004-06-12 23:34:04 +02:00
|
|
|
|
jb istext
|
|
|
|
|
shl ax,3
|
|
|
|
|
istext:
|
|
|
|
|
mov cs:pagesize,ax
|
|
|
|
|
mov ax,planesize
|
|
|
|
|
xor dx,dx
|
|
|
|
|
div cs:pagesize
|
|
|
|
|
mov cs:nbpage,al
|
|
|
|
|
mov al,cs:[di-36]
|
|
|
|
|
xor ah,ah
|
|
|
|
|
shl ax,2
|
2004-11-19 18:21:20 +01:00
|
|
|
|
mov cl,cs:graphic
|
2004-06-12 23:34:04 +02:00
|
|
|
|
shr ax,cl
|
|
|
|
|
mov cs:linesize,ax
|
|
|
|
|
mov ax,cs:[di-43]
|
|
|
|
|
mov cs:adress,ax
|
|
|
|
|
mov cs:base,ax
|
|
|
|
|
mov cs:pages,0
|
|
|
|
|
pop di dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
errorsetvideomode:
|
|
|
|
|
pop di dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
initvideo:
|
|
|
|
|
push bx cx si ds
|
|
|
|
|
;xor bx,bx
|
|
|
|
|
;mov ds,bx
|
|
|
|
|
;lds si,ds:[43h*4]
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset font8x8
|
|
|
|
|
mov cl,8
|
|
|
|
|
mov bl,1
|
|
|
|
|
call loadfont
|
|
|
|
|
mov si,offset font8x16
|
|
|
|
|
mov cl,16
|
|
|
|
|
mov bl,0
|
|
|
|
|
call loadfont
|
|
|
|
|
mov cs:pagesize,64000
|
|
|
|
|
call clearscreen
|
|
|
|
|
pop ds si cx bx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;=============GetVideoMode (Fonction 01h)=========
|
|
|
|
|
;Renvoie le mode vid<69>o courant dans AL
|
|
|
|
|
;-> AH=1
|
|
|
|
|
;<- AL mode d'<27>cran
|
|
|
|
|
;=================================================
|
|
|
|
|
getvideomode:
|
|
|
|
|
mov al,cs:mode
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;=============CLEARSCREEN (Fonction 02h)=========
|
|
|
|
|
;Efface l'ecran graphique ou texte
|
|
|
|
|
;-> AH=2
|
|
|
|
|
;<-
|
|
|
|
|
;================================================
|
|
|
|
|
clearscreen:
|
|
|
|
|
push eax cx dx di es
|
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
mov di,cs:adress
|
|
|
|
|
shr cx,2
|
2004-11-19 18:21:20 +01:00
|
|
|
|
cmp byte ptr cs:graphic,1
|
2004-06-12 23:34:04 +02:00
|
|
|
|
jne erasetext
|
|
|
|
|
mov ax,0A000h
|
|
|
|
|
mov es,ax
|
|
|
|
|
erasegraph:
|
|
|
|
|
mov ah,0
|
|
|
|
|
gogot:
|
|
|
|
|
push ax cx
|
|
|
|
|
mov cl,ah
|
|
|
|
|
mov ah,1
|
|
|
|
|
shl ah,cl
|
|
|
|
|
mov al,2
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
out dx,ax
|
|
|
|
|
pop cx ax
|
|
|
|
|
push si di cx eax
|
|
|
|
|
mov eax,00000000h
|
|
|
|
|
rep stosd
|
|
|
|
|
pop eax cx di si
|
|
|
|
|
inc ah
|
|
|
|
|
cmp ah,3
|
|
|
|
|
jbe gogot
|
|
|
|
|
jmp enderase
|
|
|
|
|
erasetext:
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov eax,07200720h
|
|
|
|
|
cld
|
|
|
|
|
rep stosd
|
|
|
|
|
enderase:
|
|
|
|
|
mov cs:x,0
|
|
|
|
|
mov cs:y,0
|
|
|
|
|
mov cs:xg,0
|
|
|
|
|
mov cs:yg,0
|
|
|
|
|
mov cs:xy,0
|
|
|
|
|
mov cs:xyg,0
|
|
|
|
|
mov cs:plane,0
|
|
|
|
|
pop es di dx cx eax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;=============SetFont (Fonction 03h)=========
|
|
|
|
|
;Active la font cl parmi les 8
|
|
|
|
|
;-> AH=3, CL n<> font
|
|
|
|
|
;<- Carry if error
|
|
|
|
|
;============================================
|
|
|
|
|
setfont:
|
|
|
|
|
push ax cx dx
|
|
|
|
|
cmp cl,7
|
|
|
|
|
ja errorsetfont
|
|
|
|
|
mov cs:font,cl
|
|
|
|
|
mov ah,cl
|
|
|
|
|
and cl,11b
|
|
|
|
|
and ah,0100b
|
|
|
|
|
shl ah,2
|
|
|
|
|
add ah,cl
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
mov al,3
|
|
|
|
|
out dx,ax
|
|
|
|
|
pop dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
errorsetfont:
|
|
|
|
|
pop dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;=============GetFont (Fonction 0xh)=========
|
|
|
|
|
;R<>cup<75>re le n<> de la font active
|
|
|
|
|
;-> AH=x
|
|
|
|
|
;<- CL n<> font, Carry if error
|
|
|
|
|
;============================================
|
|
|
|
|
Getfont:
|
|
|
|
|
push ax cx dx
|
|
|
|
|
cmp cl,7
|
|
|
|
|
ja errorgetfont
|
|
|
|
|
mov cs:font,cl
|
|
|
|
|
mov ah,cl
|
|
|
|
|
and cl,11b
|
|
|
|
|
and ah,0100b
|
|
|
|
|
shl ah,2
|
|
|
|
|
add ah,cl
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
mov al,3
|
|
|
|
|
out dx,ax
|
|
|
|
|
pop dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
errorgetfont:
|
|
|
|
|
stc
|
|
|
|
|
pop dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;=============LoadFont (Fonction 04h)==========
|
|
|
|
|
;Charge une police point<6E>e par ds:si dans la carte vid<69>o sous n<>font BL, taille police dans CL
|
|
|
|
|
;-> AH=4, BL n<>font, DS:SI pointeur vers Font, CL taille police
|
|
|
|
|
;<- Carry if error
|
|
|
|
|
;===========================================
|
|
|
|
|
loadfont:
|
|
|
|
|
push ax bx cx dx si di es
|
|
|
|
|
cmp bl,7
|
|
|
|
|
ja errorloadfont
|
|
|
|
|
xor di,di
|
|
|
|
|
cli
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
doseq:
|
|
|
|
|
mov ax,cs:[di+offset reg1]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc di
|
|
|
|
|
inc di
|
|
|
|
|
cmp di,6
|
|
|
|
|
jbe doseq
|
|
|
|
|
mov dx,graphics
|
|
|
|
|
doseq2:
|
|
|
|
|
mov ax,cs:[di+offset reg1]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc di
|
|
|
|
|
inc di
|
|
|
|
|
cmp di,6+6
|
|
|
|
|
jbe doseq2
|
|
|
|
|
sti
|
|
|
|
|
mov ax,0A000h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov dx,256
|
|
|
|
|
mov al,0
|
|
|
|
|
xor bh,bh
|
|
|
|
|
cmp bl,4
|
|
|
|
|
jb isless
|
|
|
|
|
sub bl,4
|
|
|
|
|
shl bl,1
|
|
|
|
|
inc bl
|
|
|
|
|
jmp okmake
|
|
|
|
|
isless:
|
|
|
|
|
shl bl,1
|
|
|
|
|
okmake:
|
|
|
|
|
mov di,bx
|
|
|
|
|
shl di,13
|
|
|
|
|
mov bh,cl
|
|
|
|
|
mov bl,cl
|
|
|
|
|
sub bl,32
|
|
|
|
|
neg bl
|
|
|
|
|
xor cx,cx
|
|
|
|
|
cld
|
|
|
|
|
popz:
|
|
|
|
|
mov cl,bh
|
|
|
|
|
rep movsb
|
|
|
|
|
mov cl,bl
|
|
|
|
|
rep stosb
|
|
|
|
|
dec dx
|
|
|
|
|
jnz popz
|
|
|
|
|
xor di,di
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
doseqs:
|
|
|
|
|
mov ax,cs:[di+offset reg2]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc di
|
|
|
|
|
inc di
|
|
|
|
|
cmp di,6
|
|
|
|
|
jbe doseqs
|
|
|
|
|
mov dx,graphics
|
|
|
|
|
doseqs2:
|
|
|
|
|
mov ax,cs:[di+offset reg2]
|
|
|
|
|
out dx,ax
|
|
|
|
|
inc di
|
|
|
|
|
inc di
|
|
|
|
|
cmp di,6+6
|
|
|
|
|
jbe doseqs2
|
|
|
|
|
pop es di si dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
errorloadfont:
|
|
|
|
|
stc
|
|
|
|
|
pop es di si dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
reg2 dw 0100h, 0302h, 0304h, 0300h
|
|
|
|
|
dw 0004h, 1005h, 0E06h
|
|
|
|
|
reg1 dw 0100h, 0402h, 0704h, 0300h
|
|
|
|
|
dw 0204h, 0005h, 0406h
|
|
|
|
|
|
|
|
|
|
;==========SHOWSPACE (Fonction 05h)===========
|
|
|
|
|
;met un espace apr<70>s le curseur
|
|
|
|
|
;-> AH=5
|
|
|
|
|
;<-
|
|
|
|
|
;=============================================
|
|
|
|
|
showspace:
|
|
|
|
|
push cx
|
|
|
|
|
mov cl,' '
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
call charout
|
|
|
|
|
clc
|
|
|
|
|
pop cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWLINE (Fonction 06h)===============
|
|
|
|
|
;remet le curseur text a la ligne avec un retour chariot
|
|
|
|
|
;-> AH=6
|
|
|
|
|
;<-
|
|
|
|
|
;================================================
|
|
|
|
|
showline:
|
|
|
|
|
push bx cx
|
|
|
|
|
mov bl,cs:y
|
|
|
|
|
xor bh,bh
|
|
|
|
|
mov cl,cs:lines
|
|
|
|
|
sub cl,2
|
|
|
|
|
cmp bl,cl
|
|
|
|
|
jne scro
|
|
|
|
|
dec bl
|
|
|
|
|
mov cx,1
|
2004-11-19 18:21:20 +01:00
|
|
|
|
cmp byte ptr cs:graphic,0
|
2004-06-12 23:34:04 +02:00
|
|
|
|
je okscro
|
|
|
|
|
mov cx,8
|
|
|
|
|
okscro:
|
|
|
|
|
call scrolldown
|
|
|
|
|
scro:
|
|
|
|
|
inc bl
|
|
|
|
|
call setxy2
|
|
|
|
|
pop cx bx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWCHAR (Fonction 07h)===========
|
|
|
|
|
;met un caract<63>re de code ASCII DL apr<70>s le curseur
|
|
|
|
|
;-> AH=7, DL code ASCII du caract<63>re
|
|
|
|
|
;<-
|
|
|
|
|
;============================================
|
|
|
|
|
showchar:
|
|
|
|
|
push cx
|
|
|
|
|
mov cl,dl
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
call charout
|
|
|
|
|
pop cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWINT (Fonction 08h)===========
|
|
|
|
|
;Affiche un entier EDX apr<70>s le curseur
|
|
|
|
|
;-> AH=8, EDX un entier
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
ShowInt:
|
|
|
|
|
push eax bx cx edx esi
|
|
|
|
|
xor cx,cx
|
|
|
|
|
mov eax,edx
|
|
|
|
|
mov esi,10
|
|
|
|
|
mov bx,offset showbuffer+27
|
|
|
|
|
decint:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div esi
|
|
|
|
|
add dl,'0'
|
|
|
|
|
inc cx
|
|
|
|
|
mov cs:[bx],dl
|
|
|
|
|
dec bx
|
|
|
|
|
cmp ax,0
|
|
|
|
|
jne decint
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
showinteger:
|
|
|
|
|
inc bx
|
|
|
|
|
mov cl,cs:[bx]
|
|
|
|
|
call charout
|
|
|
|
|
dec ax
|
|
|
|
|
jnz showinteger
|
|
|
|
|
pop esi edx cx bx eax
|
|
|
|
|
ret
|
|
|
|
|
|
2004-11-19 18:21:20 +01:00
|
|
|
|
showbuffer db 50 dup (0FFh)
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;==========SHOWFIXINT (Fonction h)===========
|
|
|
|
|
;Affiche un entier EDX apr<70>s le curseur de taille cx
|
|
|
|
|
;-> AH=8, EDX un entier et al="cara"
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
ShowfixInt:
|
|
|
|
|
push eax bx cx edx esi di
|
|
|
|
|
mov di,cx
|
|
|
|
|
xor cx,cx
|
|
|
|
|
mov eax,edx
|
|
|
|
|
mov esi,10
|
|
|
|
|
mov bx,offset showbuffer+27
|
|
|
|
|
decint2:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div esi
|
|
|
|
|
add dl,'0'
|
|
|
|
|
inc cx
|
|
|
|
|
mov cs:[bx],dl
|
|
|
|
|
dec bx
|
|
|
|
|
cmp cx,di
|
|
|
|
|
jae nomuch
|
|
|
|
|
cmp ax,0
|
|
|
|
|
jne decint2
|
|
|
|
|
mov ax,di
|
|
|
|
|
xchg cx,di
|
|
|
|
|
sub cx,di
|
|
|
|
|
rego:
|
|
|
|
|
mov byte ptr cs:[bx],'0'
|
|
|
|
|
dec bx
|
|
|
|
|
dec cx
|
|
|
|
|
jnz rego
|
|
|
|
|
jmp finishim
|
|
|
|
|
nomuch:
|
|
|
|
|
mov ax,di
|
|
|
|
|
finishim:
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
showinteger2:
|
|
|
|
|
inc bx
|
|
|
|
|
mov cl,cs:[bx]
|
|
|
|
|
call charout
|
|
|
|
|
dec ax
|
|
|
|
|
jnz showinteger2
|
|
|
|
|
pop di esi edx cx bx eax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWINTR (Fonction h)===========
|
|
|
|
|
;Affiche un entier EDX apr<70>s le curseur de taille cx
|
|
|
|
|
;-> AH=8, EDX un entier
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
ShowIntR:
|
|
|
|
|
push eax bx cx edx esi di
|
|
|
|
|
mov di,cx
|
|
|
|
|
xor cx,cx
|
|
|
|
|
mov eax,edx
|
|
|
|
|
mov esi,10
|
|
|
|
|
mov bx,offset showbuffer+27
|
|
|
|
|
decint3:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div esi
|
|
|
|
|
add dl,'0'
|
|
|
|
|
inc cx
|
|
|
|
|
mov cs:[bx],dl
|
|
|
|
|
dec bx
|
|
|
|
|
cmp cx,di
|
|
|
|
|
jae nomuch
|
|
|
|
|
cmp ax,0
|
|
|
|
|
jne decint3
|
|
|
|
|
mov ax,di
|
|
|
|
|
xchg cx,di
|
|
|
|
|
sub cx,di
|
|
|
|
|
rego2:
|
|
|
|
|
mov byte ptr cs:[bx],' '
|
|
|
|
|
dec bx
|
|
|
|
|
dec cx
|
|
|
|
|
jnz rego2
|
|
|
|
|
jmp finishim2
|
|
|
|
|
nomuch2:
|
|
|
|
|
mov ax,di
|
|
|
|
|
finishim2:
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
showinteger3:
|
|
|
|
|
inc bx
|
|
|
|
|
mov cl,cs:[bx]
|
|
|
|
|
call charout
|
|
|
|
|
dec ax
|
|
|
|
|
jnz showinteger3
|
|
|
|
|
pop di esi edx cx bx eax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSIGNED (Fonction 09h)===========
|
|
|
|
|
;Affiche un entier EDX de taille CX apr<70>s le curseur
|
|
|
|
|
;-> AH=9, EDX un entier, CX la taille
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
Showsigned:
|
|
|
|
|
push ebx edx
|
|
|
|
|
mov ebx,edx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
cmp cx,8
|
|
|
|
|
ja signed16
|
|
|
|
|
mov dl,bl
|
|
|
|
|
cmp dl,7Fh
|
|
|
|
|
jbe notsigned
|
|
|
|
|
neg dl
|
|
|
|
|
jmp showminus
|
|
|
|
|
signed16:
|
|
|
|
|
cmp cx,16
|
|
|
|
|
ja signed32
|
|
|
|
|
mov dx,bx
|
|
|
|
|
cmp dx,7FFFh
|
|
|
|
|
jbe notsigned
|
|
|
|
|
neg dx
|
|
|
|
|
jmp showminus
|
|
|
|
|
signed32:
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
cmp edx,7FFFFFFFh
|
|
|
|
|
jbe notsigned
|
|
|
|
|
neg edx
|
|
|
|
|
showminus:
|
|
|
|
|
push dx
|
|
|
|
|
mov dl,'-'
|
|
|
|
|
call showchar
|
|
|
|
|
pop dx
|
|
|
|
|
notsigned:
|
|
|
|
|
call showint
|
|
|
|
|
pop edx ebx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWHEX (Fonction 0Ah)===========
|
|
|
|
|
;Affiche un nombre hexad<61>cimal EDX de taille CX apr<70>s le curseur
|
|
|
|
|
;-> AH=10, EDX un entier, CX la taille
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
ShowHex:
|
|
|
|
|
push ax bx cx edx
|
|
|
|
|
mov ax,cx
|
|
|
|
|
shr ax,2
|
|
|
|
|
sub cx,32
|
|
|
|
|
neg cx
|
|
|
|
|
shl edx,cl
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
Hexaize:
|
|
|
|
|
rol edx,4
|
|
|
|
|
mov bx,dx
|
|
|
|
|
and bx,0fh
|
|
|
|
|
mov cl,cs:[bx+offset Tab]
|
|
|
|
|
call charout
|
|
|
|
|
dec al
|
|
|
|
|
jnz Hexaize
|
|
|
|
|
pop edx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
Tab db '0123456789ABCDEF'
|
|
|
|
|
|
|
|
|
|
;==========SHOWBIN (Fonction 0Bh)===========
|
|
|
|
|
;Affiche un nombre binaire EDX de taille CX apr<70>s le curseur
|
|
|
|
|
;-> AH=11, EDX un entier, CX la taille
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
Showbin:
|
|
|
|
|
push ax cx edx
|
|
|
|
|
mov ax,cx
|
|
|
|
|
sub cx,32
|
|
|
|
|
neg cx
|
|
|
|
|
shl edx,cl
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
binaize:
|
|
|
|
|
rol edx,1
|
|
|
|
|
mov cl,'0'
|
|
|
|
|
adc cl,0
|
|
|
|
|
call charout
|
|
|
|
|
dec al
|
|
|
|
|
jnz binaize
|
|
|
|
|
pop edx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWBCD (Fonction 0xh)===========
|
|
|
|
|
;Affiche un nombre en BCD EDX de taille CX apr<70>s le curseur
|
|
|
|
|
;-> AH=x, EDX un entier, CX la taille
|
|
|
|
|
;<-
|
|
|
|
|
;===========================================
|
|
|
|
|
ShowBCD:
|
|
|
|
|
push ax cx edx
|
|
|
|
|
mov ax,cx
|
|
|
|
|
shr ax,2
|
|
|
|
|
sub cx,32
|
|
|
|
|
neg cx
|
|
|
|
|
shl edx,cl
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
BCDaize:
|
|
|
|
|
rol edx,4
|
|
|
|
|
mov cl,dl
|
|
|
|
|
and cl,0fh
|
|
|
|
|
add cl,'0'
|
|
|
|
|
call charout
|
|
|
|
|
dec al
|
|
|
|
|
jnz BCDaize
|
|
|
|
|
pop edx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSTRING (Fonction 0Ch)===========
|
|
|
|
|
;Affiche une chaine de caract<63>re point<6E>e par DS:SI apr<70>s le curseur
|
|
|
|
|
;-> AH=12, DS:SI pointeur chaine type pascal
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
showstring:
|
|
|
|
|
push bx cx si
|
|
|
|
|
mov bl,[si]
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
strinaize:
|
|
|
|
|
inc si
|
|
|
|
|
mov cl,[si]
|
|
|
|
|
call charout
|
|
|
|
|
dec bl
|
|
|
|
|
jnz strinaize
|
|
|
|
|
pop si cx bx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSTRING0 (Fonction 0Dh)===========
|
|
|
|
|
;Affiche une chaine de caract<63>re point<6E>e par DS:SI apr<70>s le curseur
|
|
|
|
|
;-> AH=13, DS:SI pointeur chaine type z<>ro terminal
|
|
|
|
|
;<-
|
|
|
|
|
;===============================================
|
|
|
|
|
showstring0:
|
|
|
|
|
push cx si
|
|
|
|
|
mov ch,cs:colors
|
|
|
|
|
strinaize0:
|
|
|
|
|
mov cl,[si]
|
|
|
|
|
cmp cl,0
|
|
|
|
|
je no0
|
|
|
|
|
call charout
|
|
|
|
|
inc si
|
|
|
|
|
jmp strinaize0
|
|
|
|
|
no0:
|
|
|
|
|
pop si cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWCHARAT (Fonction 0Eh)===========
|
|
|
|
|
;met un caract<63>re de code ASCII DL en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=14, DL code ASCII du caract<63>re, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
showcharat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showchar
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWINTAT (Fonction 0Fh)===========
|
|
|
|
|
;Affiche un entier EDX en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=15, EDX entier, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
showintat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showint
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSIGNEDAT (Fonction 10h)===========
|
|
|
|
|
;Affiche un entier EDX de taille CX apr<70>s le curseur en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=16, EDX entier, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
showsignedat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showsigned
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWHEXAT (Fonction 11h)===========
|
|
|
|
|
;Affiche un nombre hexad<61>cimal EDX de taille CX en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=17, EDX un entier, CX la taille, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;==============================================
|
|
|
|
|
showhexat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showhex
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWBINAT (Fonction 012h)===========
|
|
|
|
|
;Affiche un nombre binaire EDX de taille CX en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=18, EDX un entier, CX la taille, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;=============================================
|
|
|
|
|
showbinat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showbin
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSTRINGAT (Fonction 13h)===========
|
|
|
|
|
;Affiche une chaine de caract<63>re point<6E>e par DS:SI en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=19, DS:SI pointeur chaine type pascal, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;================================================
|
|
|
|
|
showstringat:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showstring
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWSTRING0AT (Fonction 14h)===========
|
|
|
|
|
;Affiche une chaine de caract<63>re point<6E>e par DS:SI en (x;y) (BH;BL)
|
|
|
|
|
;-> AH=20, DS:SI pointeur chaine type z<>ro terminal, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;=================================================
|
|
|
|
|
showstring0at:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
call showstring0
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SETCOLOR (Fonction 15h)=========
|
|
|
|
|
;Change les attributs du texte a CL
|
|
|
|
|
;-> AH=21 ,CL couleur
|
|
|
|
|
;<-
|
|
|
|
|
;=========================================
|
|
|
|
|
setcolor:
|
|
|
|
|
mov cs:colors,CL
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========GETCOLOR (Fonction 16h)=========
|
|
|
|
|
;R<>cup<75>re les attributs du texte dans CL
|
|
|
|
|
;-> AH=22
|
|
|
|
|
;<- CL couleur
|
|
|
|
|
;=========================================
|
|
|
|
|
getcolor:
|
|
|
|
|
mov cl,cs:colors
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SETSTYLE (Fonction xh)=========
|
|
|
|
|
;Change le style du texte a CL
|
|
|
|
|
;-> AH=x ,CX style
|
|
|
|
|
;<-
|
|
|
|
|
;=========================================
|
|
|
|
|
setstyle:
|
|
|
|
|
mov cs:style,CX
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========GETSTYLE (Fonction xh)=========
|
|
|
|
|
;R<>cup<75>re le style du texte dans CL
|
|
|
|
|
;-> AH=x
|
|
|
|
|
;<- CX style
|
|
|
|
|
;=========================================
|
|
|
|
|
getstyle:
|
|
|
|
|
mov cx,cs:style
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SCROLLDOWN (Fonction 17h)=========
|
|
|
|
|
;defile de cx lines vers le bas
|
|
|
|
|
;-> AH=23, CX lines <20> d<>filer vers le bas
|
|
|
|
|
;<-
|
|
|
|
|
;=============================
|
|
|
|
|
scrolldown:
|
|
|
|
|
push ax cx dx si di ds es
|
|
|
|
|
cmp cs:scrolling,0
|
|
|
|
|
je graphp
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mul cs:linesize
|
|
|
|
|
mov si,ax
|
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
sub cx,si
|
|
|
|
|
mov di,cs:adress
|
|
|
|
|
cld
|
2004-11-19 18:21:20 +01:00
|
|
|
|
cmp byte ptr cs:graphic,1
|
2004-06-12 23:34:04 +02:00
|
|
|
|
jne textp
|
|
|
|
|
mov ax,0A000h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov ds,ax
|
|
|
|
|
shr cx,2
|
|
|
|
|
transfert:
|
|
|
|
|
mov ah,0
|
|
|
|
|
gogo:
|
|
|
|
|
push ax cx
|
|
|
|
|
mov cl,ah
|
|
|
|
|
mov ah,1
|
|
|
|
|
shl ah,cl
|
|
|
|
|
mov al,2
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
out dx,ax
|
|
|
|
|
pop cx ax
|
|
|
|
|
mov al,4
|
|
|
|
|
mov dx,graphics
|
|
|
|
|
out dx,ax
|
|
|
|
|
push si di cx
|
|
|
|
|
rep movsd
|
|
|
|
|
pop cx di si
|
|
|
|
|
inc ah
|
|
|
|
|
cmp ah,3
|
|
|
|
|
jbe gogo
|
|
|
|
|
jmp graphp
|
|
|
|
|
textp:
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov ds,ax
|
|
|
|
|
rep movsb
|
|
|
|
|
graphp:
|
|
|
|
|
pop es ds di si dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========GETXY (Fonction 18h)=========
|
|
|
|
|
;Change les coordonn<6E>es du curseur a X:BH,Y:BL
|
|
|
|
|
;-> AH=24
|
|
|
|
|
;<- BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;=============================
|
|
|
|
|
getxy:
|
|
|
|
|
mov bh,cs:x
|
|
|
|
|
mov bl,cs:y
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SETXY (Fonction 19h)=========
|
|
|
|
|
;Change les coordonn<6E>es du curseur a X:BH,Y:BL
|
|
|
|
|
;-> AH=25, BH coordonn<6E>es x, BL coordonn<6E>es y
|
|
|
|
|
;<-
|
|
|
|
|
;=====================================
|
|
|
|
|
setxy:
|
|
|
|
|
push ax bx cx dx
|
2004-11-11 17:19:18 +01:00
|
|
|
|
; xor ax,ax
|
|
|
|
|
; int 16h
|
|
|
|
|
; mov cl,cs:lines
|
|
|
|
|
; dec cl
|
|
|
|
|
; sub cl,bl
|
|
|
|
|
; neg cl
|
|
|
|
|
; js zero
|
|
|
|
|
; xor ch,ch
|
|
|
|
|
; inc cl
|
|
|
|
|
; jmp nozero
|
|
|
|
|
;zero:
|
|
|
|
|
; mov cx,0
|
|
|
|
|
;nozero:
|
|
|
|
|
; call scrolldown
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cs:x,bh
|
|
|
|
|
mov cs:y,bl
|
|
|
|
|
mov al,bl
|
|
|
|
|
mov bl,bh
|
|
|
|
|
xor bh,bh
|
|
|
|
|
mov di,cs:adress
|
|
|
|
|
add di,bx
|
|
|
|
|
mul cs:columns
|
|
|
|
|
add di,ax
|
|
|
|
|
shl di,1
|
|
|
|
|
mov cs:xy,di
|
2004-11-19 18:21:20 +01:00
|
|
|
|
cmp byte ptr cs:graphic,1
|
2004-06-12 23:34:04 +02:00
|
|
|
|
jne oktext
|
|
|
|
|
mov bl,cs:x
|
|
|
|
|
mov cl,cs:y
|
|
|
|
|
xor bh,bh
|
|
|
|
|
xor ch,ch
|
|
|
|
|
shl bx,3
|
|
|
|
|
shl cx,3
|
|
|
|
|
call setxyg
|
|
|
|
|
jmp endofsetxy
|
|
|
|
|
oktext:
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
2004-11-11 17:19:18 +01:00
|
|
|
|
call setcursor
|
2004-06-12 23:34:04 +02:00
|
|
|
|
endofsetxy:
|
|
|
|
|
pop dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
setxy2:
|
|
|
|
|
push es di
|
|
|
|
|
call setxy
|
|
|
|
|
pop di es
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SETXYG (Fonction 0xh)=========
|
|
|
|
|
;Change les coordonn<6E>es du curseur graphique a X:BX,Y:CX
|
|
|
|
|
;-> AH=x, BX coordonn<6E>es x, CX coordonn<6E>es y
|
|
|
|
|
;<- ES:DI pointeur sur pixel avec plan de bit ajust<73>
|
|
|
|
|
;======================================
|
|
|
|
|
setxyg:
|
|
|
|
|
push ax bx cx dx
|
|
|
|
|
mov cs:xg,bx
|
|
|
|
|
mov cs:yg,cx
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mov cl,bl
|
|
|
|
|
mul cs:linesize
|
|
|
|
|
shr bx,2
|
|
|
|
|
add ax,bx
|
|
|
|
|
mov di,ax
|
|
|
|
|
and cl,3
|
|
|
|
|
mov ah,1
|
|
|
|
|
shl ah,cl
|
|
|
|
|
mov al,2
|
|
|
|
|
mov dx, 3c4h
|
|
|
|
|
out dx,ax
|
|
|
|
|
mov cs:plane,cl
|
|
|
|
|
mov cs:xyg,di
|
|
|
|
|
mov ax,0A000h
|
|
|
|
|
mov es,ax
|
|
|
|
|
pop dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWPIXEL (Fonction 0xh)=========
|
|
|
|
|
;Affiche un pixel de couleur AL en X:BX,Y:CX
|
|
|
|
|
;-> AH=x, BX coordonn<6E>es x, CX coordonn<6E>es y, AL couleur
|
|
|
|
|
;<-
|
|
|
|
|
;=========================================
|
|
|
|
|
showpixel:
|
|
|
|
|
push ax bx cx dx di bp es
|
|
|
|
|
mov bp,ax
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mov cl,bl
|
|
|
|
|
mul cs:linesize
|
|
|
|
|
shr bx,2
|
|
|
|
|
add ax,bx
|
|
|
|
|
mov di,ax
|
|
|
|
|
add di,cs:adress
|
|
|
|
|
and cl,3
|
|
|
|
|
mov ah,1
|
|
|
|
|
shl ah,cl
|
|
|
|
|
mov al,2
|
|
|
|
|
mov dx,sequencer
|
|
|
|
|
out dx,ax
|
|
|
|
|
mov bx,0A000h
|
|
|
|
|
mov es,bx
|
|
|
|
|
mov ax,bp
|
|
|
|
|
mov es:[di],al
|
|
|
|
|
pop es bp di dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWPIXEL (Fonction 0xh)=========
|
|
|
|
|
;R<>cup<75>re en al la couleur du pixel de coordonn<6E>es X:BX,Y:CX
|
|
|
|
|
;-> AH=x, BX coordonn<6E>es x, CX coordonn<6E>es y, AL couleur
|
|
|
|
|
;<-
|
|
|
|
|
;=========================================
|
|
|
|
|
getpixel:
|
|
|
|
|
push ax bx cx dx di bp es
|
|
|
|
|
mov bp,ax
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mov cl,bl
|
|
|
|
|
mul cs:linesize
|
|
|
|
|
shr bx,2
|
|
|
|
|
add ax,bx
|
|
|
|
|
mov di,ax
|
|
|
|
|
add di,cs:adress
|
|
|
|
|
and cl,3
|
|
|
|
|
mov ah,cl
|
|
|
|
|
mov al,4
|
|
|
|
|
mov dx,graphics
|
|
|
|
|
out dx,ax
|
|
|
|
|
mov bx,0A000h
|
|
|
|
|
mov es,bx
|
|
|
|
|
mov ax,bp
|
|
|
|
|
|
|
|
|
|
mov al,es:[di]
|
|
|
|
|
pop es bp di dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========LOADBMPPALET (Fonction 0xh)=========
|
|
|
|
|
;Charge la palette du BMP point<6E>e par DS:SI
|
|
|
|
|
;-> AH=x, DS:SI BMP
|
|
|
|
|
;<-
|
|
|
|
|
;=============================================
|
|
|
|
|
loadbmppalet:
|
|
|
|
|
push ax bx cx dx
|
|
|
|
|
mov bx,0400h+36h-4
|
|
|
|
|
mov cx,100h
|
|
|
|
|
mov dx, 3c8h
|
|
|
|
|
paletteload:
|
|
|
|
|
mov al, cl
|
|
|
|
|
dec al
|
|
|
|
|
out dx, al
|
|
|
|
|
inc dx
|
|
|
|
|
mov al,[bx+si+2]
|
|
|
|
|
shr al,2
|
|
|
|
|
out dx, al
|
|
|
|
|
mov al,[bx+si+1]
|
|
|
|
|
shr al,2
|
|
|
|
|
out dx, al
|
|
|
|
|
mov al,[bx+si]
|
|
|
|
|
shr al,2
|
|
|
|
|
out dx, al
|
|
|
|
|
sub bx,4
|
|
|
|
|
dec dx
|
|
|
|
|
dec cl
|
|
|
|
|
jnz paletteload
|
|
|
|
|
pop dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========VIEWBMP (Fonction 0xh)=========
|
|
|
|
|
;Affiche le BMP point<6E>e par DS:SI en X:BX, Y:CX avec la pr<70>paration de la palette
|
|
|
|
|
;<- AH=x, DS:SI BMP, BX coordonn<6E>es X, CX coordonn<6E>es Y
|
|
|
|
|
;->
|
|
|
|
|
;=========================================
|
|
|
|
|
viewbmp:
|
|
|
|
|
call loadbmppalet
|
|
|
|
|
call showbmp
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========SHOWBMP (Fonction 0xh)=========
|
|
|
|
|
;Affiche le BMP point<6E>e par DS:SI en X:BX, Y:CX
|
|
|
|
|
;<- AH=x, DS:SI BMP, BX coordonn<6E>es X, CX coordonn<6E>es Y
|
|
|
|
|
;->
|
|
|
|
|
;=========================================
|
|
|
|
|
showbmp:
|
|
|
|
|
push ax bx cx dx
|
|
|
|
|
cmp word ptr ds:[si+BMP_file.BMP_FileType],"MB"
|
|
|
|
|
jne errorshowing
|
|
|
|
|
mov cs:xc,bx
|
|
|
|
|
mov cs:yc,cx
|
|
|
|
|
xor cx,cx
|
|
|
|
|
xor bx,bx
|
|
|
|
|
xor dx,dx
|
|
|
|
|
bouclette:
|
|
|
|
|
mov al,[si+bx+436h]
|
|
|
|
|
push bx cx
|
|
|
|
|
sub cx,cs:yc
|
|
|
|
|
neg cx
|
|
|
|
|
mov bx,dx
|
|
|
|
|
add bx,cs:xc
|
|
|
|
|
call showpixel
|
|
|
|
|
pop cx bx
|
|
|
|
|
inc bx
|
|
|
|
|
inc dx
|
|
|
|
|
cmp dx,[si+offset BMP_File.BMP_width]
|
|
|
|
|
jb bouclette
|
|
|
|
|
xor dx,dx
|
|
|
|
|
inc cx
|
|
|
|
|
cmp cx,[si+offset BMP_File.BMP_height]
|
|
|
|
|
jb bouclette
|
|
|
|
|
clc
|
|
|
|
|
pop dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
errorshowing:
|
|
|
|
|
stc
|
|
|
|
|
pop dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
xc dw 0
|
|
|
|
|
yc dw 0
|
|
|
|
|
|
|
|
|
|
;==========GETVGAINFO (Fonction 0xh)=========
|
|
|
|
|
;Renvoie un bloc de donn<6E>e en ES:DI sur l'<27>tat de la carte graphique
|
|
|
|
|
;<- AH=x, ES:DI pointeur
|
|
|
|
|
;->
|
|
|
|
|
;=============================================
|
|
|
|
|
Getvgainfos:
|
|
|
|
|
push cx si di ds
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov cx,datablocksize
|
|
|
|
|
mov si,offset datablock
|
|
|
|
|
cld
|
|
|
|
|
rep movsb
|
|
|
|
|
pop ds di si cx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;==========WAITRETRACE (Fonction 0xh)=========
|
|
|
|
|
;Synchronisation avec la retrace verticale
|
|
|
|
|
;<- AH=x
|
|
|
|
|
;->
|
|
|
|
|
;=============================================
|
|
|
|
|
waitretrace:
|
|
|
|
|
push ax dx
|
|
|
|
|
mov dx,3DAh
|
|
|
|
|
waitr:
|
|
|
|
|
in al,dx
|
|
|
|
|
test al,8
|
|
|
|
|
jz waitr
|
|
|
|
|
pop dx ax
|
|
|
|
|
ret
|
|
|
|
|
|
2004-11-11 17:19:18 +01:00
|
|
|
|
;Renvoie le caract<63>re sur le curseur en dl
|
|
|
|
|
getchar:
|
|
|
|
|
push ax di es
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov di,cs:xy
|
|
|
|
|
mov dl,es:[di]
|
|
|
|
|
pop es di ax
|
|
|
|
|
ret
|
|
|
|
|
|
2004-06-12 23:34:04 +02:00
|
|
|
|
;Ecrit le caract<63>re ASCII CL attribut CH apr<70>s le curseur, en le mettant <20> jours
|
|
|
|
|
charout:
|
|
|
|
|
push ax bx cx dx di es
|
2004-11-19 18:21:20 +01:00
|
|
|
|
cmp byte ptr cs:graphic,1
|
2004-06-12 23:34:04 +02:00
|
|
|
|
jne textaccess
|
2004-11-11 17:19:18 +01:00
|
|
|
|
call emulatechar
|
|
|
|
|
jmp adjusttext
|
|
|
|
|
textaccess:
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov di,cs:xy
|
|
|
|
|
mov es:[di],cx
|
|
|
|
|
add cs:xy,2
|
|
|
|
|
adjusttext:
|
|
|
|
|
inc cs:x
|
|
|
|
|
mov cl,cs:columns
|
|
|
|
|
cmp cs:x,cl
|
|
|
|
|
jb noadjusted
|
|
|
|
|
call showline
|
|
|
|
|
noadjusted:
|
|
|
|
|
call setcursor
|
|
|
|
|
pop es di dx cx bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
setcursor:
|
|
|
|
|
push ax cx dx
|
|
|
|
|
mov dx,CCRT
|
|
|
|
|
mov al,0Eh
|
|
|
|
|
mov cx,cs:xy
|
|
|
|
|
shr cx,1
|
|
|
|
|
mov ah,ch
|
|
|
|
|
out dx,ax
|
|
|
|
|
mov ah,cl
|
|
|
|
|
inc al
|
|
|
|
|
out dx,ax
|
|
|
|
|
pop dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;Ecrit le caract<63>re ASCII CL attribut CH apr<70>s le curseur graphique, en le mettant <20> jours en mode graphique
|
|
|
|
|
emulatechar:
|
|
|
|
|
push ax bx cx dx di
|
|
|
|
|
mov dx,cx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov di,dx
|
|
|
|
|
and di,11111111b
|
|
|
|
|
shl di,3
|
|
|
|
|
add di,offset font8x8
|
|
|
|
|
xor bx,bx
|
|
|
|
|
xor cx,cx
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
bouclet:
|
|
|
|
|
mov al,dh
|
|
|
|
|
rol ah,1
|
|
|
|
|
jc colored
|
|
|
|
|
shr al,4
|
|
|
|
|
bt word ptr cs:style,0
|
|
|
|
|
jc transparent
|
|
|
|
|
colored:
|
|
|
|
|
and al,1111b
|
|
|
|
|
push bx cx
|
|
|
|
|
add cx,cs:yg
|
|
|
|
|
add bx,cs:xg
|
|
|
|
|
call showpixel
|
|
|
|
|
pop cx bx
|
|
|
|
|
transparent:
|
|
|
|
|
inc bx
|
|
|
|
|
cmp bx,8
|
|
|
|
|
jb bouclet
|
|
|
|
|
xor bx,bx
|
|
|
|
|
inc di
|
|
|
|
|
mov ah,cs:[di]
|
|
|
|
|
inc cx
|
|
|
|
|
cmp cx,8
|
|
|
|
|
jb bouclet
|
|
|
|
|
add cs:xg,8
|
|
|
|
|
mov cx,cs:linesize
|
|
|
|
|
shl cx,2
|
|
|
|
|
cmp cs:xg,cx
|
2004-11-11 17:19:18 +01:00
|
|
|
|
jb ended
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cs:xg,0
|
|
|
|
|
add cs:yg,8
|
2004-11-11 17:19:18 +01:00
|
|
|
|
ended:
|
|
|
|
|
pop di dx cx bx ax
|
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
;sauve l'ecran dans un bloc de m<>moire
|
|
|
|
|
savescreen:
|
|
|
|
|
push ax cx dx si di bp ds es gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+22]
|
|
|
|
|
mov ah,2
|
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data3
|
|
|
|
|
int 49h
|
|
|
|
|
mov ah,6
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop es
|
|
|
|
|
xor di,di
|
|
|
|
|
call savescreento
|
|
|
|
|
pop gs es ds bp di si dx cx ax
|
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
data3 db '/vgascreen',0
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;===================================sauve l'ecran rapidement en es:di================
|
|
|
|
|
SaveScreento:
|
|
|
|
|
push cx si di ds
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov cx,0B800h
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov ds,cx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor ecx,ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
|
|
|
|
xor si,si
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
|
|
|
|
pop ds di si cx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
;===================================sauve les parametres en es:di================
|
|
|
|
|
Saveparamto:
|
|
|
|
|
push ecx si di ds
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,datablocksize
|
|
|
|
|
mov si,offset datablock
|
|
|
|
|
cld
|
|
|
|
|
rep movsb
|
|
|
|
|
pop ds di si ecx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;===================================restore les parametres depuis en ds:si================
|
|
|
|
|
Restoreparamfrom:
|
|
|
|
|
push ecx si di es
|
2004-06-12 23:34:04 +02:00
|
|
|
|
push cs
|
|
|
|
|
pop es
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,datablocksize
|
|
|
|
|
mov di,offset datablock
|
2004-06-12 23:34:04 +02:00
|
|
|
|
cld
|
2004-11-05 01:58:45 +01:00
|
|
|
|
rep movsb
|
|
|
|
|
pop es di si ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
ret
|
2004-11-05 01:58:45 +01:00
|
|
|
|
|
|
|
|
|
;sauve la page1 dans un bloc de m<>moire
|
|
|
|
|
Savepage1:
|
|
|
|
|
push ax cx dx si di bp ds es gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+22]
|
|
|
|
|
mov ah,2
|
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data4
|
|
|
|
|
int 49h
|
|
|
|
|
mov ah,6
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop es
|
|
|
|
|
xor di,di
|
|
|
|
|
call Savepage1to
|
|
|
|
|
pop gs es ds bp di si dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
data4 db '/vgapage1',0
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;===================================sauve l'ecran rapidement================
|
2004-11-05 01:58:45 +01:00
|
|
|
|
Savepage1to:
|
|
|
|
|
push ecx si di ds
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,0B800H
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov ds,cx
|
|
|
|
|
xor ecx,ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov si,cs:pagesize
|
2004-06-12 23:34:04 +02:00
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
2004-11-05 01:58:45 +01:00
|
|
|
|
pop ds di si ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
ret
|
2004-11-05 01:58:45 +01:00
|
|
|
|
|
|
|
|
|
;R<>cup<75>re l'ecran de la carte depuis son bloc m<>moire
|
|
|
|
|
RestoreScreen:
|
|
|
|
|
push ax dx si bp ds gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+16]
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data3
|
|
|
|
|
mov ah,9
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop ds
|
|
|
|
|
xor si,si
|
|
|
|
|
call restorescreenfrom
|
|
|
|
|
pop gs ds bp si dx ax
|
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;===================================restore l'ecran rapidement de ds:si================
|
|
|
|
|
RestoreScreenfrom:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ecx si di ds es
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,0B800H
|
|
|
|
|
mov es,cx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor ecx,ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
|
|
|
|
xor di,di
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
2004-11-05 01:58:45 +01:00
|
|
|
|
pop es ds di si ecx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
;===============================Page2to1============================
|
|
|
|
|
Page2to1:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ecx si di ds es
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,0B800H
|
|
|
|
|
mov es,cx
|
|
|
|
|
mov ds,cx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor ecx,ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov si,cs:pagesize
|
2004-06-12 23:34:04 +02:00
|
|
|
|
xor di,di
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
2004-11-05 01:58:45 +01:00
|
|
|
|
pop es ds di si ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;===============================Page1to2============================
|
|
|
|
|
Page1to2:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ecx si di ds es
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,0B800H
|
|
|
|
|
mov es,cx
|
|
|
|
|
mov ds,cx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor ecx,ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov di,cs:pagesize
|
2004-06-12 23:34:04 +02:00
|
|
|
|
xor si,si
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
2004-11-05 01:58:45 +01:00
|
|
|
|
pop ds es di si ecx
|
2004-06-12 23:34:04 +02:00
|
|
|
|
ret
|
2004-11-05 01:58:45 +01:00
|
|
|
|
|
2004-06-12 23:34:04 +02:00
|
|
|
|
;===============================xchgPages============================
|
|
|
|
|
xchgPages:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ax cx dx si di bp ds es gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+22]
|
|
|
|
|
mov ah,2
|
|
|
|
|
mov cx,datablocksize
|
|
|
|
|
add cx,cs:pagesize
|
|
|
|
|
add cx,3*256
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data4
|
|
|
|
|
int 49h
|
|
|
|
|
mov ah,6
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop es
|
|
|
|
|
xor di,di
|
|
|
|
|
call savescreento
|
|
|
|
|
call Page2to1
|
|
|
|
|
push gs
|
|
|
|
|
pop ds
|
|
|
|
|
xor si,si
|
|
|
|
|
mov cx,0B800H
|
|
|
|
|
mov es,cx
|
|
|
|
|
mov di,cs:pagesize
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,cs:pagesize
|
|
|
|
|
shr cx,2
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
|
|
|
|
mov ah,01h
|
|
|
|
|
int 49h
|
|
|
|
|
pop gs es ds bp di si dx cx ax
|
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
|
|
|
|
|
;Sauve l'<27>tat de la carte dans un bloc m<>moire
|
2004-06-12 23:34:04 +02:00
|
|
|
|
savestate:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ax cx dx si di bp ds es gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+22]
|
|
|
|
|
mov ah,2
|
|
|
|
|
mov cx,datablocksize
|
|
|
|
|
add cx,cs:pagesize
|
|
|
|
|
add cx,3*256
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data
|
|
|
|
|
int 49h
|
|
|
|
|
mov ah,6
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop es
|
|
|
|
|
xor di,di
|
|
|
|
|
call saveparamto
|
|
|
|
|
add di,datablocksize
|
|
|
|
|
call savescreento
|
|
|
|
|
add di,cs:pagesize
|
|
|
|
|
call savedacto
|
|
|
|
|
pop gs es ds bp di si dx cx ax
|
2004-06-12 23:34:04 +02:00
|
|
|
|
ret
|
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
data db '/vga',0
|
|
|
|
|
|
|
|
|
|
;R<>cup<75>re l'<27>tat de la carte depuis son bloc m<>moire
|
2004-06-12 23:34:04 +02:00
|
|
|
|
restorestate:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ax dx si bp ds gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+16]
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data
|
|
|
|
|
mov ah,9
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop ds
|
|
|
|
|
mov al,ds:[7]
|
|
|
|
|
cmp cs:mode,al
|
|
|
|
|
je nochangemode
|
|
|
|
|
mov ah,0
|
|
|
|
|
call setvideomode
|
2004-06-12 23:34:04 +02:00
|
|
|
|
nochangemode:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
xor si,si
|
|
|
|
|
call restoreparamfrom
|
|
|
|
|
add si,datablocksize
|
|
|
|
|
call restorescreenfrom
|
|
|
|
|
add si,cs:pagesize
|
|
|
|
|
call restoredacfrom
|
|
|
|
|
pop gs ds bp si dx ax
|
|
|
|
|
ret
|
2004-06-12 23:34:04 +02:00
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
;sauve le DAC dans un bloc de m<>moire
|
2004-06-12 23:34:04 +02:00
|
|
|
|
savedac:
|
2004-11-05 01:58:45 +01:00
|
|
|
|
push ax cx dx si di bp ds es gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+22]
|
|
|
|
|
mov ah,2
|
|
|
|
|
mov cx,3*256
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data2
|
|
|
|
|
int 49h
|
|
|
|
|
mov ah,6
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop es
|
|
|
|
|
xor di,di
|
|
|
|
|
call savedacto
|
|
|
|
|
pop gs es ds bp di si dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
data2 db '/vgadac',0
|
|
|
|
|
|
|
|
|
|
;R<>cup<75>re le dac depuis son bloc m<>moire
|
|
|
|
|
restoredac:
|
|
|
|
|
push ax dx si bp ds gs
|
|
|
|
|
mov bp,sp
|
|
|
|
|
mov dx,ss:[bp+16]
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov si,offset data2
|
|
|
|
|
mov ah,9
|
|
|
|
|
int 49h
|
|
|
|
|
push gs
|
|
|
|
|
pop ds
|
|
|
|
|
xor si,si
|
|
|
|
|
call restoredacfrom
|
|
|
|
|
pop gs ds bp si dx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;sauve le DAC en es:di
|
|
|
|
|
savedacto:
|
2004-06-12 23:34:04 +02:00
|
|
|
|
push ax cx dx di
|
|
|
|
|
mov dx,3C7h
|
|
|
|
|
mov cx,256
|
|
|
|
|
save:
|
|
|
|
|
mov al,cl
|
|
|
|
|
dec al
|
|
|
|
|
out dx,al
|
|
|
|
|
inc dx
|
|
|
|
|
inc dx
|
|
|
|
|
in al,dx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov es:[di],al
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc di
|
|
|
|
|
in al,dx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov es:[di],al
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc di
|
|
|
|
|
in al,dx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov es:[di],al
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc di
|
|
|
|
|
dec dx
|
|
|
|
|
dec dx
|
|
|
|
|
dec cx
|
|
|
|
|
jne save
|
|
|
|
|
pop di dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
2004-11-05 01:58:45 +01:00
|
|
|
|
;restore le DAC depuis ds:si
|
|
|
|
|
restoredacfrom:
|
2004-06-12 23:34:04 +02:00
|
|
|
|
push ax cx dx si
|
|
|
|
|
xor ax,ax
|
|
|
|
|
mov dx,3C8h
|
|
|
|
|
mov cx,256
|
|
|
|
|
save2:
|
|
|
|
|
mov al,cl
|
|
|
|
|
dec al
|
|
|
|
|
out dx,al
|
|
|
|
|
inc dx
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov al,ds:[si]
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc si
|
|
|
|
|
out dx,al
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov al,ds:[si]
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc si
|
|
|
|
|
out dx,al
|
2004-11-05 01:58:45 +01:00
|
|
|
|
mov al,ds:[si]
|
2004-06-12 23:34:04 +02:00
|
|
|
|
inc si
|
|
|
|
|
out dx,al
|
|
|
|
|
dec dx
|
|
|
|
|
dec cx
|
|
|
|
|
jne save2
|
|
|
|
|
pop si dx cx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;couleur al pour ligne di A SUPPRIMER
|
|
|
|
|
changelineattr:
|
|
|
|
|
push ax bx di es
|
|
|
|
|
mov bx,ax
|
|
|
|
|
mov ax,0B800h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov ax,di
|
|
|
|
|
mul cs:columns
|
|
|
|
|
mov di,ax
|
|
|
|
|
shl di,1
|
|
|
|
|
mov al,cs:columns
|
|
|
|
|
inc di
|
|
|
|
|
popep:
|
|
|
|
|
mov es:[di],bl
|
|
|
|
|
add di,2
|
|
|
|
|
dec al
|
|
|
|
|
jnz popep
|
|
|
|
|
pop es di bx ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
font8x8:
|
|
|
|
|
include ..\include\pol8x8.inc
|
|
|
|
|
font8x16:
|
|
|
|
|
include ..\include\pol8x16.inc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end start
|