.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