416 lines
10 KiB
NASM
416 lines
10 KiB
NASM
.386p
|
|
|
|
.model SMALL, SYSCALL
|
|
|
|
include f:\projet\lib386\lib_svga\svga.ash
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
;*──────────────────────────────────────────────────────────────────────────*
|
|
.data
|
|
;*──────────────────────────────────────────────────────────────────────────*
|
|
|
|
extrn NoLanguage TabOffLine:DWORD
|
|
extrn NoLanguage Screen:DWORD
|
|
|
|
IndexCoul0 db 4*16
|
|
PalRed db 0
|
|
PalGreen db 0
|
|
PalBlue db 0
|
|
PalXor db 0
|
|
|
|
;*──────────────────────────────────────────────────────────────────────────*
|
|
.code
|
|
;*──────────────────────────────────────────────────────────────────────────*
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
public NoLanguage SimpleInitMcga
|
|
public NoLanguage CopyBlockMCGA
|
|
public NoLanguage ShadeBox
|
|
public NoLanguage SmallSort
|
|
; public NoLanguage SpeedRam
|
|
; public NoLanguage TimerPalFx
|
|
public NoLanguage GetHDFreeSize
|
|
public NoLanguage ComputeTime
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
;SpeedRam proc ; pas remarquable
|
|
;
|
|
; mov al, 200
|
|
; out 41, al
|
|
; ret
|
|
;
|
|
;SpeedRam endp
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
comment #
|
|
|
|
TimerPalFx proc uses eax edx ecx
|
|
|
|
xor byte ptr[PalXor], 1
|
|
jnz tpf1
|
|
|
|
add byte ptr[PalBlue], 4
|
|
|
|
mov al, [IndexCoul0]
|
|
mov dx, 03c8h
|
|
out dx, al ; al=Num Color
|
|
|
|
mov ah, [PalBlue]
|
|
|
|
mov cx, 16
|
|
|
|
tpf0: mov dx, 03c9h
|
|
mov al, [PalRed]
|
|
out dx, al ; Red
|
|
mov al, [PalGreen]
|
|
out dx, al ; Green
|
|
mov al, ah
|
|
out dx, al ; Blue
|
|
|
|
add ah, 8
|
|
dec cx
|
|
jnz tpf0
|
|
|
|
tpf1: ret
|
|
|
|
TimerPalFx endp
|
|
|
|
#
|
|
|
|
;----------------------------------------------------------------------------
|
|
ComputeTime proc
|
|
local cpttime:DWORD
|
|
local cptdate:DWORD
|
|
|
|
mov [cpttime], 0
|
|
mov [cptdate], 0
|
|
|
|
mov ah, 2ch
|
|
int 21h
|
|
mov byte ptr [cpttime], ch ;'Heure
|
|
shl cpttime, 6
|
|
or byte ptr [cpttime], cl ;'Minutes
|
|
shl cpttime, 5
|
|
shr dh, 1
|
|
or byte ptr [cpttime], dh ;'Secondes/2
|
|
|
|
mov ah, 2ah
|
|
int 21h
|
|
sub cx, 1980
|
|
mov byte ptr [cptdate], cl ;' Annees
|
|
shl cptdate, 4
|
|
or byte ptr [cptdate], dh ;' Mois
|
|
shl cptdate, 5
|
|
or byte ptr [cptdate], dl ;' Jour
|
|
|
|
mov eax, cpttime
|
|
add eax, cptdate
|
|
ret
|
|
ComputeTime endp
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
SmallSort proc uses esi edi ebx ebp,\
|
|
objetlist:DWORD, nbobjets:DWORD, structsize:DWORD
|
|
|
|
mov esi, objetlist
|
|
mov ecx, nbobjets
|
|
dec ecx
|
|
jle fintri
|
|
|
|
mov edx, structsize
|
|
|
|
; ecx nb entite - 1
|
|
; esi start list sizeof structsize bytes
|
|
EVEN
|
|
tt0: mov ebp, ecx
|
|
mov eax, [esi] ; lit Z
|
|
|
|
mov edi, esi
|
|
add edi, edx
|
|
xor ebx, ebx
|
|
|
|
tt1: cmp [edi], ax
|
|
jl plusgrand
|
|
cont: add edi, edx
|
|
loop tt1
|
|
|
|
or ebx, ebx
|
|
jz short noexchg
|
|
|
|
; mov eax, [ebx]
|
|
; xchg [esi], eax ; permutte
|
|
; mov [ebx], eax
|
|
|
|
mov edi, esi
|
|
push edx
|
|
shr edx, 2
|
|
EVEN
|
|
permute: mov eax, [ebx]
|
|
xchg [edi], eax ; permutte
|
|
mov [ebx], eax
|
|
add ebx, 4
|
|
add edi, 4
|
|
dec dx
|
|
jnz permute
|
|
|
|
pop edx
|
|
|
|
noexchg: add esi, edx
|
|
mov ecx, ebp
|
|
loop tt0
|
|
|
|
fintri: ret
|
|
|
|
plusgrand: mov ebx, edi
|
|
mov eax, [edi]
|
|
jmp short cont
|
|
|
|
SmallSort endp
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
|
|
SimpleInitMcga proc uses esi edi ebp ebx
|
|
|
|
mov ax, 13h
|
|
int 10h
|
|
ret
|
|
|
|
SimpleInitMcga endp
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
|
|
CopyBlockMCGA proc uses esi edi ebx ebp,\
|
|
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD, src:DWORD,\
|
|
xd:DWORD, yd:DWORD, dst:DWORD
|
|
|
|
mov ebx, y0
|
|
mov esi, TabOffLine[ebx*4] ; y0
|
|
add esi, src
|
|
add esi, x0 ; SI Offset Src
|
|
|
|
; mov edi, yd
|
|
; mov eax, edi
|
|
; shl edi, 2 ; *4
|
|
; add edi, eax ; *5
|
|
; shl edi, 6 ; *320
|
|
; add edi, dst
|
|
; add edi, xd ; DI Offset Dst
|
|
|
|
mov edi, dst
|
|
|
|
mov ebx, y1 ; y0 <=> y1
|
|
sub ebx, y0
|
|
inc ebx ; BX Delta Y
|
|
|
|
mov eax, x1
|
|
sub eax, x0
|
|
inc eax ; AX Delta X
|
|
|
|
mov edx, 320
|
|
sub edx, eax ; DX Delta Screen
|
|
mov ebp, 640
|
|
sub ebp, eax
|
|
Again:
|
|
mov ecx, eax
|
|
shr ecx, 2
|
|
rep movsd
|
|
mov ecx, eax
|
|
and ecx, 11b
|
|
rep movsb
|
|
|
|
add esi, ebp
|
|
add edi, edx
|
|
dec ebx
|
|
jne short Again
|
|
|
|
ret
|
|
CopyBlockMCGA endp
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
|
|
ShadeBox proc uses esi edi ebp ebx,\
|
|
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD,\
|
|
deccoul:DWORD
|
|
|
|
mov eax, x0
|
|
mov ebx, y0
|
|
mov ecx, x1
|
|
mov edx, y1
|
|
|
|
;----------------------
|
|
|
|
cmp eax, ClipXmax
|
|
jg Box_End
|
|
cmp ecx, ClipXmin
|
|
jl Box_End
|
|
cmp ebx, ClipYmax
|
|
jg Box_End
|
|
cmp edx, ClipYmin
|
|
jl Box_End
|
|
TestLeft:
|
|
cmp eax, ClipXmin
|
|
jge TestRight
|
|
mov eax, ClipXmin
|
|
TestRight:
|
|
cmp ecx, ClipXmax
|
|
jle TestUp
|
|
mov ecx, ClipXmax
|
|
TestUp:
|
|
cmp ebx, ClipYmin
|
|
jge TestDown
|
|
mov ebx, ClipYmin
|
|
TestDown:
|
|
cmp edx, ClipYmax
|
|
jle OkNoClip
|
|
mov edx, ClipYmax
|
|
OkNoClip:
|
|
;----------------------
|
|
mov edi, ebx ; Y0
|
|
mov edi, TabOffLine[edi*4]
|
|
add edi, Log
|
|
add edi, eax ; EDI Offset Src
|
|
;----------------------
|
|
sub edx, ebx ; Init Delta Y
|
|
mov ebx, edx
|
|
inc ebx
|
|
|
|
mov edx, ecx ; Init Delta X
|
|
sub edx, eax
|
|
inc edx
|
|
|
|
mov esi, Screen_X
|
|
sub esi, edx ; ebp Delta Screen
|
|
|
|
mov ecx, deccoul
|
|
|
|
Again: mov ebp, edx
|
|
|
|
loopx: mov al, byte ptr[edi]
|
|
mov ah, al
|
|
; and ah, 0F0h
|
|
; and al, 00Fh
|
|
and ax, 0F00Fh
|
|
sub al, cl
|
|
jc lesszero
|
|
|
|
add al, ah
|
|
|
|
mov byte ptr[edi], al
|
|
inc edi
|
|
|
|
dec ebp
|
|
jnz loopx
|
|
|
|
add edi, esi
|
|
dec ebx
|
|
jne Again
|
|
Box_End:
|
|
ret
|
|
|
|
lesszero: mov al, ah
|
|
mov byte ptr[edi], al
|
|
inc edi
|
|
|
|
dec ebp
|
|
jnz loopx
|
|
|
|
add edi, esi
|
|
dec ebx
|
|
jne Again
|
|
|
|
ret
|
|
|
|
ShadeBox endp
|
|
|
|
|
|
;*──────────────────────────────────────────────────────────────────────────*/
|
|
;*──────────────────────────────────────────────────────────────────────────*/
|
|
|
|
comment #
|
|
|
|
DesintegreClip proc uses ebx edi esi ebp
|
|
level:DWORD
|
|
|
|
mov eax, ClipXmin
|
|
mov ecx, ClipXmax
|
|
mov ebx, ClipYmin
|
|
mov edx, ClipYmax
|
|
|
|
;----------------------
|
|
|
|
mov edi, ebx ; Y0
|
|
mov edi, TabOffLine[edi*4]
|
|
add edi, eax ; EDI Offset Src
|
|
mov esi, edi
|
|
add edi, Log
|
|
add esi, Screen
|
|
;----------------------
|
|
|
|
sub edx, ebx ; Init Delta Y
|
|
mov ebx, edx
|
|
inc ebx
|
|
|
|
mov edx, ecx ; Init Delta X
|
|
sub edx, eax
|
|
inc edx
|
|
|
|
mov eax, Screen_X
|
|
sub eax, edx ; ebp Delta Screen
|
|
mov [offsety], ecx
|
|
|
|
|
|
Again: mov ebp, edx
|
|
|
|
loopx:
|
|
|
|
mov al, byte ptr[esi]
|
|
|
|
mov ebx, esi
|
|
and ebx, 7
|
|
and al, byte ptr[ebx] ; plus tard table
|
|
|
|
|
|
mov byte ptr[edi], al
|
|
|
|
inc edi
|
|
inc esi
|
|
|
|
dec ebp
|
|
jnz loopx
|
|
|
|
add edi, [offsety]
|
|
dec ebx
|
|
jne Again
|
|
|
|
ret
|
|
|
|
DesintegreClip proc
|
|
|
|
#
|
|
|
|
;*──────────────────────────────────────────────────────────────────────────*/
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
GetHDFreeSize proc uses ebx
|
|
|
|
xor eax, eax ;' Cause IMUL
|
|
mov ebx, eax ;' Cause IMUL
|
|
mov ecx, eax ;' Cause IMUL
|
|
|
|
mov ah, 36h
|
|
mov dl, 0 ;' Current Drive
|
|
int 21h ;' Get Free Space
|
|
|
|
imul ebx
|
|
imul ecx ;' Bytes*Sectors*Clusters
|
|
|
|
ret
|
|
|
|
GetHDFreeSize endp
|
|
;*══════════════════════════════════════════════════════════════════════════*
|
|
;*──────────────────────────────────────────────────────────────────────────*/
|
|
END
|