fix: correction d'un bogue dans la fonction "getxy" (paramètre en trop) Ajout de nombreuses exportations qui n'étaient alors pas au format STDCALL/CE (sauvegarde/restaurations)
This commit is contained in:
parent
2a1dd56ef4
commit
1582591ab8
373
noyau/video.asm
373
noyau/video.asm
|
@ -10,7 +10,7 @@ include "..\include\graphic.h"
|
||||||
|
|
||||||
org 0h
|
org 0h
|
||||||
|
|
||||||
header exe <"CE",1,0,0,offset exports,,,>
|
header exe <"CE",1,0,0,offset exports,offset imports,,>
|
||||||
|
|
||||||
exporting
|
exporting
|
||||||
declare setvideomode
|
declare setvideomode
|
||||||
|
@ -20,7 +20,7 @@ declare setfont
|
||||||
declare loadfont
|
declare loadfont
|
||||||
declare getfont
|
declare getfont
|
||||||
declare addline
|
declare addline
|
||||||
declare showchar
|
declare showchars
|
||||||
declare showpixel
|
declare showpixel
|
||||||
declare getpixel
|
declare getpixel
|
||||||
declare setstyle
|
declare setstyle
|
||||||
|
@ -46,8 +46,31 @@ declare savestate
|
||||||
declare restorestate
|
declare restorestate
|
||||||
declare enablescroll
|
declare enablescroll
|
||||||
declare disablescroll
|
declare disablescroll
|
||||||
declare getchar
|
declare getchars
|
||||||
|
declare savescreen
|
||||||
|
declare savescreento
|
||||||
|
declare saveparamto
|
||||||
|
declare restoreparamfrom
|
||||||
|
declare restorescreen
|
||||||
|
declare restorescreenfrom
|
||||||
|
declare page2to1
|
||||||
|
declare page1to2
|
||||||
|
declare xchgpages
|
||||||
|
declare savestate
|
||||||
|
declare restorestate
|
||||||
|
declare savestate
|
||||||
|
declare restoredacfrom
|
||||||
|
declare restoredac
|
||||||
|
declare savedacto
|
||||||
ende
|
ende
|
||||||
|
|
||||||
|
importing
|
||||||
|
use SYSTEME,mbcreate
|
||||||
|
use SYSTEME,mbfindsb
|
||||||
|
use SYSTEME,mbfree
|
||||||
|
use SYSTEME,mbchown
|
||||||
|
endi
|
||||||
|
|
||||||
;================================Table des modes videos (64 BYTES) ============================================
|
;================================Table des modes videos (64 BYTES) ============================================
|
||||||
;40*25 16 couleurs
|
;40*25 16 couleurs
|
||||||
mode0 DB 67H,00H, 03H,08H,03H,00H,02H
|
mode0 DB 67H,00H, 03H,08H,03H,00H,02H
|
||||||
|
@ -693,14 +716,12 @@ PROC scrolldown FAR
|
||||||
endp scrolldown
|
endp scrolldown
|
||||||
|
|
||||||
;==========GETXY=========
|
;==========GETXY=========
|
||||||
;Met les coordonnées du curseur dans %0 au format point
|
;Met les coordonnées du curseur dans ah,al au format point
|
||||||
;->
|
;->
|
||||||
;<- ah coordonnées x, al coordonnées y
|
;<- ah coordonnées x, al coordonnées y
|
||||||
;========================
|
;========================
|
||||||
PROC getxy FAR
|
PROC getxy FAR
|
||||||
ARG @pointer:word
|
|
||||||
USES bx
|
USES bx
|
||||||
mov bx,[@pointer]
|
|
||||||
mov ah,[cs:datablock.x]
|
mov ah,[cs:datablock.x]
|
||||||
mov al,[cs:datablock.y]
|
mov al,[cs:datablock.y]
|
||||||
ret
|
ret
|
||||||
|
@ -872,7 +893,7 @@ endp waithretrace
|
||||||
;<-
|
;<-
|
||||||
;->
|
;->
|
||||||
;==========================
|
;==========================
|
||||||
PROC getchar FAR
|
PROC getchars FAR
|
||||||
USES di,es
|
USES di,es
|
||||||
mov ax,0B800h
|
mov ax,0B800h
|
||||||
mov es,ax
|
mov es,ax
|
||||||
|
@ -880,14 +901,14 @@ PROC getchar FAR
|
||||||
mov al,[es:di]
|
mov al,[es:di]
|
||||||
xor ah,ah
|
xor ah,ah
|
||||||
ret
|
ret
|
||||||
endp getchar
|
endp getchars
|
||||||
|
|
||||||
;==========SHOWCHAR=========
|
;==========SHOWCHAR=========
|
||||||
;Ecrit le caractère ASCII %0 attribut %1 aprés le curseur, en le mettant à jours
|
;Ecrit le caractère ASCII %0 attribut %1 aprés le curseur, en le mettant à jours
|
||||||
;<-
|
;<-
|
||||||
;->
|
;->
|
||||||
;===========================
|
;===========================
|
||||||
PROC showchar FAR
|
PROC showchars FAR
|
||||||
ARG @char:word,@attr:word
|
ARG @char:word,@attr:word
|
||||||
USES ax,bx,cx,dx,di,es
|
USES ax,bx,cx,dx,di,es
|
||||||
mov cl,[byte ptr @char]
|
mov cl,[byte ptr @char]
|
||||||
|
@ -915,7 +936,7 @@ PROC showchar FAR
|
||||||
@@noadjusted:
|
@@noadjusted:
|
||||||
call setcursor
|
call setcursor
|
||||||
ret
|
ret
|
||||||
endp showchar
|
endp showchars
|
||||||
|
|
||||||
setcursor:
|
setcursor:
|
||||||
push ax cx dx
|
push ax cx dx
|
||||||
|
@ -979,107 +1000,121 @@ ended:
|
||||||
pop di dx cx bx ax
|
pop di dx cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;sauve l'ecran dans un bloc de mémoire
|
;sauve l'ecran dans un bloc de mémoire
|
||||||
savescreen:
|
PROC savescreen FAR
|
||||||
push ax cx dx si di bp ds es gs
|
USES ax,ds
|
||||||
mov bp,sp
|
call [cs:mbcreate],offset data3,[cs:datablock.pagesize]
|
||||||
mov dx,[ss:bp+22]
|
jc @@error
|
||||||
mov ah,2
|
call [cs:mbchown],ax,[word ptr ss:bp+4]
|
||||||
mov cx,[cs:datablock.pagesize]
|
jc @@error
|
||||||
push cs
|
push ax
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data3
|
call savescreento,0
|
||||||
int 49h
|
clc
|
||||||
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
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp savescreen
|
||||||
data3 db '/vgascreen',0
|
data3 db '/vgascreen',0
|
||||||
|
|
||||||
|
|
||||||
;===================================sauve l'ecran rapidement en es:di================
|
;===================================sauve l'ecran rapidement en ds:%1================
|
||||||
savescreento:
|
PROC savescreento FAR
|
||||||
push cx si di ds
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,ds,es
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
mov cx,0B800h
|
mov cx,0B800h
|
||||||
mov ds,cx
|
mov ds,cx
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
mov cx,[cs:datablock.pagesize]
|
mov cx,[cs:datablock.pagesize]
|
||||||
|
mov di,[@offset]
|
||||||
shr cx,2
|
shr cx,2
|
||||||
xor si,si
|
xor si,si
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
pop ds di si cx
|
|
||||||
ret
|
ret
|
||||||
|
endp savescreento
|
||||||
|
|
||||||
;===================================sauve les parametres en es:di================
|
;===================================sauve les parametres en ds:%0================
|
||||||
saveparamto:
|
PROC saveparamto FAR
|
||||||
push ecx si di ds
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,ds,es
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
push cs
|
push cs
|
||||||
pop ds
|
pop ds
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
mov cx,size datablock
|
mov cx,size datablock
|
||||||
|
mov di,[@offset]
|
||||||
mov si,offset datablock
|
mov si,offset datablock
|
||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
pop ds di si ecx
|
|
||||||
ret
|
ret
|
||||||
|
endp saveparamto
|
||||||
|
|
||||||
;===================================restore les parametres depuis en ds:si================
|
;===================================restore les parametres depuis en ds:%0================
|
||||||
restoreparamfrom:
|
PROC restoreparamfrom FAR
|
||||||
push ecx si di es
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,es
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
mov cx,size datablock
|
mov cx,size datablock
|
||||||
|
mov si,[@offset]
|
||||||
mov di,offset datablock
|
mov di,offset datablock
|
||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
pop es di si ecx
|
|
||||||
ret
|
ret
|
||||||
|
endp restoreparamfrom
|
||||||
|
|
||||||
;R‚cupŠ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
|
|
||||||
|
;restaure l'ecran dans un bloc de mémoire
|
||||||
|
PROC restorescreen FAR
|
||||||
|
USES ax,ds
|
||||||
|
call [cs:mbfindsb],offset data3,[word ptr ss:bp+4]
|
||||||
|
jc @@error
|
||||||
|
push ax
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data3
|
call restorescreenfrom,0
|
||||||
mov ah,9
|
clc
|
||||||
int 49h
|
|
||||||
push gs
|
|
||||||
pop ds
|
|
||||||
xor si,si
|
|
||||||
call restorescreenfrom
|
|
||||||
pop gs ds bp si dx ax
|
|
||||||
ret
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp restorescreen
|
||||||
|
|
||||||
;===================================restore l'ecran rapidement de ds:si================
|
|
||||||
restorescreenfrom:
|
;===================================restaure l'ecran rapidement en %1================
|
||||||
push ecx si di ds es
|
PROC restorescreenfrom FAR
|
||||||
mov cx,0B800H
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,es
|
||||||
|
mov cx,0B800h
|
||||||
mov es,cx
|
mov es,cx
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
mov cx,[cs:datablock.pagesize]
|
mov cx,[cs:datablock.pagesize]
|
||||||
|
mov si,[@offset]
|
||||||
shr cx,2
|
shr cx,2
|
||||||
xor di,di
|
xor di,di
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
pop es ds di si ecx
|
|
||||||
ret
|
ret
|
||||||
|
endp restorescreenfrom
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;===============================Page2to1============================
|
;===============================Page2to1============================
|
||||||
page2to1:
|
|
||||||
push ecx si di ds es
|
PROC page2to1 FAR
|
||||||
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,ds,es
|
||||||
mov cx,0B800H
|
mov cx,0B800H
|
||||||
mov es,cx
|
mov es,cx
|
||||||
mov ds,cx
|
mov ds,cx
|
||||||
|
@ -1090,12 +1125,13 @@ page2to1:
|
||||||
xor di,di
|
xor di,di
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
pop es ds di si ecx
|
|
||||||
ret
|
ret
|
||||||
|
endp page2to1
|
||||||
|
|
||||||
;===============================Page1to2============================
|
;===============================Page1to2============================
|
||||||
page1to2:
|
PROC page1to2 FAR
|
||||||
push ecx si di ds es
|
ARG @offset:word
|
||||||
|
USES ecx,si,di,ds,es
|
||||||
mov cx,0B800H
|
mov cx,0B800H
|
||||||
mov es,cx
|
mov es,cx
|
||||||
mov ds,cx
|
mov ds,cx
|
||||||
|
@ -1106,31 +1142,19 @@ page1to2:
|
||||||
xor si,si
|
xor si,si
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
pop ds es di si ecx
|
|
||||||
ret
|
ret
|
||||||
|
endp page1to2
|
||||||
;===============================xchgPages============================
|
;===============================xchgPages============================
|
||||||
xchgpages:
|
PROC xchgpages FAR
|
||||||
push ax cx dx si di bp ds es gs
|
USES ax,ecx,si,di,ds,es
|
||||||
mov bp,sp
|
call [cs:mbcreate],offset data4,[cs:datablock.pagesize]
|
||||||
mov dx,[ss:bp+22]
|
jc @@error
|
||||||
mov ah,2
|
call [cs:mbchown],ax,[word ptr ss:bp+4]
|
||||||
mov cx,size datablock
|
jc @@error
|
||||||
add cx,[cs:datablock.pagesize]
|
push ax
|
||||||
add cx,3*256
|
|
||||||
push cs
|
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data4
|
call savescreento,0
|
||||||
int 49h
|
|
||||||
mov ah,6
|
|
||||||
int 49h
|
|
||||||
push gs
|
|
||||||
pop es
|
|
||||||
xor di,di
|
|
||||||
call savescreento
|
|
||||||
call page2to1
|
call page2to1
|
||||||
push gs
|
|
||||||
pop ds
|
|
||||||
xor si,si
|
xor si,si
|
||||||
mov cx,0B800H
|
mov cx,0B800H
|
||||||
mov es,cx
|
mov es,cx
|
||||||
|
@ -1140,142 +1164,142 @@ mov cx,[cs:datablock.pagesize]
|
||||||
shr cx,2
|
shr cx,2
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
mov ah,01h
|
clc
|
||||||
int 49h
|
|
||||||
pop gs es ds bp di si dx cx ax
|
|
||||||
ret
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp xchgpages
|
||||||
|
|
||||||
data4 db '/vgatemp',0
|
data4 db '/vgatemp',0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;Sauve l'‚tat de la carte dans un bloc mémoire
|
;Sauve l'‚tat de la carte dans un bloc mémoire
|
||||||
savestate:
|
PROC savestate FAR
|
||||||
push ax cx dx si di bp ds es gs
|
USES ax,cx,di,ds
|
||||||
mov bp,sp
|
|
||||||
mov dx,[ss:bp+22]
|
|
||||||
mov ah,2
|
|
||||||
mov cx,size datablock
|
mov cx,size datablock
|
||||||
add cx,[cs:datablock.pagesize]
|
add cx,[cs:datablock.pagesize]
|
||||||
add cx,3*256
|
add cx,3*256
|
||||||
push cs
|
call [cs:mbcreate],offset data,cx
|
||||||
|
jc @@error
|
||||||
|
call [cs:mbchown],ax,[word ptr ss:bp+4]
|
||||||
|
jc @@error
|
||||||
|
push ax
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data
|
|
||||||
int 49h
|
|
||||||
mov ah,6
|
|
||||||
int 49h
|
|
||||||
push gs
|
|
||||||
pop es
|
|
||||||
xor di,di
|
xor di,di
|
||||||
call saveparamto
|
call saveparamto,di
|
||||||
add di,size datablock
|
add di,size datablock
|
||||||
call savescreento
|
call savescreento,di
|
||||||
add di,[cs:datablock.pagesize]
|
add di,[cs:datablock.pagesize]
|
||||||
call savedacto
|
call savedacto,di
|
||||||
pop gs es ds bp di si dx cx ax
|
clc
|
||||||
ret
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp savestate
|
||||||
|
|
||||||
data db '/vga',0
|
data db '/vga',0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;R‚cupŠre l'‚tat de la carte depuis son bloc mémoire
|
;R‚cupŠre l'‚tat de la carte depuis son bloc mémoire
|
||||||
restorestate:
|
PROC restorestate FAR
|
||||||
push ax dx si bp ds gs
|
USES ax,cx,di,ds
|
||||||
mov bp,sp
|
call [cs:mbfindsb],offset data,[word ptr ss:bp+4]
|
||||||
mov dx,[ss:bp+16]
|
jc @@error
|
||||||
push cs
|
push ax
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data
|
xor di,di
|
||||||
mov ah,9
|
call restoreparamfrom,di
|
||||||
int 49h
|
add di,size datablock
|
||||||
push gs
|
call restorescreenfrom,di
|
||||||
pop ds
|
add di,[cs:datablock.pagesize]
|
||||||
mov al,[ds:7]
|
call restoredacfrom,di
|
||||||
cmp [cs:datablock.mode],al
|
clc
|
||||||
je nochangemode
|
|
||||||
mov ah,0
|
|
||||||
call setvideomode
|
|
||||||
nochangemode:
|
|
||||||
xor si,si
|
|
||||||
call restoreparamfrom
|
|
||||||
add si,size datablock
|
|
||||||
call restorescreenfrom
|
|
||||||
add si,[cs:datablock.pagesize]
|
|
||||||
call restoredacfrom
|
|
||||||
pop gs ds bp si dx ax
|
|
||||||
ret
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp restorestate
|
||||||
|
|
||||||
|
|
||||||
;sauve le DAC dans un bloc de mémoire
|
;sauve le DAC dans un bloc de mémoire
|
||||||
savedac:
|
PROC savedac FAR
|
||||||
push ax cx dx si di bp ds es gs
|
USES ax,ds
|
||||||
mov bp,sp
|
call [cs:mbcreate],offset data3,3*256
|
||||||
mov dx,[ss:bp+22]
|
jc @@error
|
||||||
mov ah,2
|
call [cs:mbchown],ax,[word ptr ss:bp+4]
|
||||||
mov cx,3*256
|
jc @@error
|
||||||
push cs
|
push ax
|
||||||
pop ds
|
pop ds
|
||||||
mov si,offset data2
|
call savedacto,0
|
||||||
int 49h
|
clc
|
||||||
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
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp savedac
|
||||||
|
|
||||||
data2 db '/vgadac',0
|
data2 db '/vgadac',0
|
||||||
|
|
||||||
;R‚cupŠ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:
|
;R‚cupŠre le dac depuis son bloc mémoire
|
||||||
push ax cx dx di
|
PROC restoredac FAR
|
||||||
|
USES ax,ds
|
||||||
|
call [cs:mbfindsb],offset data2,[word ptr ss:bp+4]
|
||||||
|
jc @@error
|
||||||
|
push ax
|
||||||
|
pop ds
|
||||||
|
call restoredacfrom,0
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
@@error:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp restoredac
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;sauve le DAC en ds:%0
|
||||||
|
PROC savedacto FAR
|
||||||
|
USES ax,cx,dx,di
|
||||||
mov dx,3C7h
|
mov dx,3C7h
|
||||||
mov cx,256
|
mov cx,256
|
||||||
save:
|
@@save:
|
||||||
mov al,cl
|
mov al,cl
|
||||||
dec al
|
dec al
|
||||||
out dx,al
|
out dx,al
|
||||||
inc dx
|
inc dx
|
||||||
inc dx
|
inc dx
|
||||||
in al,dx
|
in al,dx
|
||||||
mov [es:di],al
|
mov [ds:di],al
|
||||||
inc di
|
inc di
|
||||||
in al,dx
|
in al,dx
|
||||||
mov [es:di],al
|
mov [ds:di],al
|
||||||
inc di
|
inc di
|
||||||
in al,dx
|
in al,dx
|
||||||
mov [es:di],al
|
mov [ds:di],al
|
||||||
inc di
|
inc di
|
||||||
dec dx
|
dec dx
|
||||||
dec dx
|
dec dx
|
||||||
dec cx
|
dec cx
|
||||||
jne save
|
jne @@save
|
||||||
pop di dx cx ax
|
|
||||||
ret
|
ret
|
||||||
|
endp savedacto
|
||||||
|
|
||||||
;restore le DAC depuis ds:si
|
;restore le DAC depuis ds:si
|
||||||
restoredacfrom:
|
PROC restoredacfrom FAR
|
||||||
push ax cx dx si
|
USES ax,cx,dx,si
|
||||||
xor ax,ax
|
xor ax,ax
|
||||||
mov dx,3C8h
|
mov dx,3C8h
|
||||||
mov cx,256
|
mov cx,256
|
||||||
save2:
|
@@save2:
|
||||||
mov al,cl
|
mov al,cl
|
||||||
dec al
|
dec al
|
||||||
out dx,al
|
out dx,al
|
||||||
|
@ -1291,9 +1315,10 @@ inc si
|
||||||
out dx,al
|
out dx,al
|
||||||
dec dx
|
dec dx
|
||||||
dec cx
|
dec cx
|
||||||
jne save2
|
jne @@save2
|
||||||
pop si dx cx ax
|
|
||||||
ret
|
ret
|
||||||
|
endp restoredacfrom
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
font8x8:
|
font8x8:
|
||||||
|
|
Loading…
Reference in New Issue