; asm
TActiveGraphModeparameters STRUC
ResolutionX dd ?
ResolutionY dd ?
ActSetPage dd ?
WindowStatus dd ?
Granularity dd ?
ScanLineLength dd ?
ScanLineNumber dd ?
BytePerScanLine dd ?
Mode dd ?
VidoMemory dd ?
BytePerPix dd ?
LinearAddress dd ?
PageToSet dd ?
TActiveGraphModeparameters ENDS
TFontSettings STRUC
font dd ?
fntcolor db ?
fntbackground db ?
fntmarkcolor db ?
fntcolorfont db ?
fntLength dw ?
fntDirection db ?
fntJustify db ?
fntitalic db ?
fntheight db ?
fntcompmode db ?
fntmarkfont dd ?
ENDS
TMouseSettings STRUC
mouse_x dd ?
mouse_y dd ?
mouse_x1 dd ?
mouse_y1 dd ?
mouse_altx dd ?
mouse_alty dd ?
mouse_background dd ?
mouse_pointer dd ?
mouse_sizex dd ?
mouse_sizey dd ?
mouse_taste db ?
mouse_status db ?
mouse_offx1 dd ?
mouse_offy1 dd ?
mouse_offx2 dd ?
mouse_offy2 dd ?
mouse_hotspotx dd ?
mouse_hotspoty dd ?
mouse_backgroundsize dd ?
ends
SetNextVirtualPage MACRO p
IFB
'Parameter fehlt'
ENDIF
Push eax
push ebx
push edx
push ecx
inc _hardwaregraphmodeparameters.pagetoset
SetVirtualPage
pop ecx
pop edx
pop ebx
pop eax
sub p, 10000h
ENDM
SetPrivVirtualPage MACRO p
IFB
'Parameter fehlt'
ENDIF
Push eax
push ebx
push edx
push ecx
dec _hardwaregraphmodeparameters.pagetoset
SetVirtualPage
pop ecx
pop edx
pop ebx
pop eax
add p, 10000h
ENDM
SetNextVirtualPage2 MACRO parameters
IFB
gmp equ _HardwaregraphModeParameters
ELSE
gmp equ parameters
ENDIF
Push eax
push ebx
push edx
push ecx
inc gmp.pagetoset
SetVirtualPage parameters
pop ecx
pop edx
pop ebx
pop eax
ENDM
SetPrivVirtualPage2 MACRO
Push eax
push ebx
push edx
push ecx
dec _hardwaregraphmodeparameters.pagetoset
SetVirtualPage
pop ecx
pop edx
pop ebx
pop eax
ENDM
SetVirtualPage macro parameters
LOCAL SingleWindow
IFB
agmp equ _HardwareGraphModeParameters
ELSE
agmp equ parameters
ENDIF
mov _handleractive,1
cli
cmp byte ptr agmp.WindowStatus,0
jz SingleWindow
mov eax, 4F05h
mov ebx, 1
mov edx, agmp.pagetoset
mov ecx, agmp.Granularity
shl edx, cl
int 10h
SingleWindow:
mov eax, 4F05h
mov ebx, 0
mov edx,agmp.pagetoset
mov agmp.actsetpage, edx
mov ecx, agmp.Granularity
shl edx, cl
int 10h
sti
mov _handleractive,0
ENDM
stossb macro
stosb
endm
stossw macro
stosw
endm
stossd macro
stosd
endm
lodssb macro
lodsb
endm
lodssw macro
lodsw
endm
lodssd macro
lodsd
endm
;------------------------------------
;-- Setbytes
;------------------------------------
setBytes Macro ID1
LOCAL ID2,ID3
test edi,1
jz ID2
stossb
dec ecx
IFB
jz ID3
ELSE
jz ID1
ENDIF
ID2:
shr ecx,1
rep stossw
IFB
jnc ID3
ELSE
jnc ID1
ENDIF
stossb
ID3:
endm
;------------------------------------
;-- Addbytes
;------------------------------------
AddBytes Macro
LOCAL ID2
ID2:
add [edi], al
inc edi
dec ecx
jnz ID2
endm
;------------------------------------
;-- Copybytes
;------------------------------------
copyBytes Macro ID1
LOCAL ID2,ID3
test edi,1
jz ID2
movsb
dec ecx
IFB
jz ID3
ELSE
jz ID1
ENDIF
ID2:
shr ecx,1
rep movsw
IFB
jnc ID3
ELSE
jnc ID1
ENDIF
movsb
ID3:
endm
;------------------------------------
;-- CopySpritebytes
;------------------------------------
copySpriteBytes Macro
LOCAL ID2,ID3,ID4
ID4:
lodssb
cmp al,255
jz ID2
stossb
dec ecx
jnz ID4
jmp ID3
ID2:
inc edi
dec ecx
jnz ID4
ID3:
endm
;------------------------------------
;-- Rotatebytes
;------------------------------------
RotateByte Macro
LOCAL @@keineRot
cmp al,16
jb @@keinerot
cmp al,23
ja @@keinerot
add al,rotationValue
@@keineRot:
endm
CopyRotSpriteBytes Macro
LOCAL ID1,SetNoByte,Ende
ID1:
lodssb
cmp al,255
jz SetNoByte
rotatebyte
stossb
dec ecx
jnz ID1
jmp ende
SetNoByte:
inc edi
dec ecx
jnz ID1
ende:
endm
;------------------------------------
;-- Filterbytes
;------------------------------------
FilterBytes Macro
LOCAL ID4
ID4:
lodssb
add [edi],al
inc edi
dec ecx
jnz ID4
endm
FilterBytes2 Macro
LOCAL ID4
ID4:
add [edi],al
inc edi
dec ecx
jnz ID4
endm
ProcessBytesLW Macro counter, func, vidptr, funcparm1, funcparm2
LOCAL LB1,LB2,LB5
IFB
'Parameter fehlt'
ENDIF
IFB
'Parameter fehlt'
ENDIF
IFB
'Parameter fehlt'
ENDIF
push ax
mov ax,counter
mov leftr,ax
pop ax
add counter, cx
jc LB5 ; change virtual page
func funcparm1 funcparm2
jmp LB1
LB5:
xor ecx,ecx
sub cx, leftr
func funcparm1 funcparm2
SetNextVirtualPage vidptr
mov vidptr, _ActiveGraphModeParameters.LinearAddress
movzx ecx, counter
cmp ecx,0
jz lb1
func funcparm1 funcparm2
LB1:
endm
ProcessBytesLW2 Macro func, funcparm1, funcparm2
LOCAL LB1,LB2,LB5
IFB
'Parameter fehlt'
ENDIF
mov temp, di
add temp, cx
jc LB5 ; change virtual page
func funcparm1 funcparm2
jmp LB1
LB5:
sub cx, temp
func funcparm1 funcparm2
SetNextVirtualPage2 _hardwaregraphmodeparameters
mov edi, _hardwaregraphmodeparameters.linearaddress
mov cx, temp
cmp cx,0
jz lb1
func funcparm1 funcparm2
LB1:
endm
ProcessBytesLW2s Macro func, funcparm1, funcparm2
LOCAL LB1,LB2,LB5
IFB
'Parameter fehlt'
ENDIF
mov temp, si
add temp, cx
jc LB5 ; change virtual page
func funcparm1 funcparm2
jmp LB1
LB5:
sub cx, temp
func funcparm1 funcparm2
SetNextVirtualPage2 _hardwaregraphmodeparameters
mov esi, _hardwaregraphmodeparameters.linearaddress
mov cx, temp
cmp cx,0
jz lb1
func funcparm1 funcparm2
LB1:
endm