Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
34
20 mai 2005 à 03:14
Les paramètres sont dans la pile
(c'est un programme pour Turbo Basic)
(couleur, position X, position Y, Longeur X, Longeur Y)
DEB: PUSH BP
MOV BP, SP
PUSH DS
; couleur dans CH
LDS SI, [BP+22] ; couleur
MOV CH, [SI] ; dans CH
; controleur graphique: registre 1 = Enable Set/Reset
; la valeur inscrite provient du registre Set/Reset
MOV DX, 3CEh
MOV AX, 0F01h
OUT DX, AX
; controleur graphique: registre 0 = Set/Reset
; détermine la valeur pour les différents plans de bits
XOR AX, AX
MOV DS, AX
MOV AH, CH
OUT DX, AX
; calcul adresse vidéo
MOV SI, 44Ah ;nombre colonnes / ligne
MOV CX, [SI]
PUSH CX
LDS SI, [BP+14] ; position Y
LODSW
; dans AX
MUL CX
LDS SI, [BP+18] ; position X
MOV DI, [SI] ; dans DI
MOV DX, DI ; et dans DX
AND DX,7
MOV CL,3
SHR DI, CL
ADD DI, AX
MOV AX, 0A000h
MOV ES, AX
; masque et nombre de bits
LDS SI, [BP+10] ; Longueur X
LODSW
; dans AX
DEC AX
ADD AX, DX
MOV BX, 0FF80h
MOV CX, DX
SHR BH, CL ; BH = masque début
MOV CX, AX
AND CL, 7
SAR BL, CL ; BL = masque fin
MOV CL, 3
SHR AX, CL
MOV CX, AX
; controleur graphique: registre 8 = Bit Mask
MOV DX, 3CEh
MOV AL, 8
OUT DX, AL
INC DX
LDS SI, [BP+6] ; Longueur Y
LODSW
; dans AX
POP
BP
; reprise nb colonne/ligne
DEC BP
SUB BP, CX
; début Ligne
P10: PUSH AX
PUSH CX
; masque début
M10: MOV AL, BH
JCXZ M30
OUT DX, AL
MOV AH, ES:[DI] ; chargement des reg. Latches
STOSB
; milieu ?
DEC CX
JZ M35
; masque fin
M20: MOV AL, 0FFh
OUT DX, AL
M25: REP STOSB
JMP short M35
M30: MOV AL, BH
AND AL, BL
JMP $+4
M35: MOV AL, BL
OUT DX, AL
MOV AH, ES: [DI]
STOSB
; boucle
P20: POP CX
ADD DI, BP
POP AX
DEC AX
JNZ P10
; on remet les registres
P30: DEC DX
MOV AX,1
OUT DX, AX
MOV AX, 0FF08h
OUT DX, AX
FIN: POP DS
POP BP
Daniel