Initial commit
This commit is contained in:
6
LIB386/LIB_SVGA/BLOC.C
Normal file
6
LIB386/LIB_SVGA/BLOC.C
Normal file
@@ -0,0 +1,6 @@
|
||||
/*ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ*
|
||||
ロロ゚゚゚ ロ゚゚゚゚ ロ゚゚゚ロ ロ゚゚゚゚ ロ゚゚゚゚ ロロワ ロ ロワ ワロ ロ゚゚゚ロ ロ゚゚゚ワ ロ゚゚゚゚
|
||||
゚゚゚゚ロ ロロ ロロ゚ロ゚ ロロ゚゚ ロロ゚゚ ロロ゚ロロ ロロ゚ ロ ロロ ロ ロロ ロ ロロ゚゚
|
||||
゚゚゚゚゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚゚゚ ゚゚゚゚゚
|
||||
*ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ*/
|
||||
/*トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト*/
|
||||
13
LIB386/LIB_SVGA/BUILD.BAT
Normal file
13
LIB386/LIB_SVGA/BUILD.BAT
Normal file
@@ -0,0 +1,13 @@
|
||||
call watcom10
|
||||
|
||||
pkunzip -o obj >NUL
|
||||
wmake
|
||||
pkzip -m obj *.obj >NUL
|
||||
|
||||
call watcom9
|
||||
|
||||
pkunzip -o obj9 >NUL
|
||||
wmake WATCOM9=yes
|
||||
pkzip -m obj9 *.obj >NUL
|
||||
|
||||
call watcom10
|
||||
3
LIB386/LIB_SVGA/BUILDDLL.BAT
Normal file
3
LIB386/LIB_SVGA/BUILDDLL.BAT
Normal file
@@ -0,0 +1,3 @@
|
||||
pkunzip -o obj >NUL
|
||||
wmake /f dll.mak
|
||||
pkzip -m obj *.obj >NUL
|
||||
405
LIB386/LIB_SVGA/CPYMASK.ASM
Normal file
405
LIB386/LIB_SVGA/CPYMASK.ASM
Normal file
@@ -0,0 +1,405 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; Mask_A.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
;----------------------------------------------------------------------------
|
||||
include \projet\lib386\lib_svga\svga.ash
|
||||
comment @
|
||||
DWORD TabOffset[]
|
||||
Brick:
|
||||
- BYTE Delta X
|
||||
- BYTE Delta Y
|
||||
Line(Delta Y):
|
||||
- BYTE NbBlock
|
||||
Block 0: Nb Zero to Jump
|
||||
Block 1: Nb Zero to Write
|
||||
Block 2: Nb Zero to Jump
|
||||
etc...
|
||||
@
|
||||
|
||||
BufferClip db 512 dup(?)
|
||||
OffsetBegin dd 0
|
||||
NbPix dd 0
|
||||
|
||||
extrn NoLanguage Screen:DWORD
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyMask
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
CopyMask proc uses esi edi ebx ebp,\
|
||||
nummask:DWORD, xmask:DWORD, ymask:DWORD, \
|
||||
bankmask:DWORD, ptsrc:DWORD
|
||||
|
||||
mov eax, nummask
|
||||
mov ebx, xmask
|
||||
mov ecx, ymask
|
||||
mov esi, bankmask
|
||||
|
||||
add esi, [esi+eax*4]; ESI = Begin Data
|
||||
|
||||
|
||||
movzx eax, byte ptr[esi+2] ; Hot X
|
||||
add ebx, eax
|
||||
movzx eax, byte ptr[esi+3] ; Hot Y
|
||||
add ecx, eax
|
||||
|
||||
|
||||
;-----------------------------------------------
|
||||
lodsb ; Delta X
|
||||
movzx edx, al ;
|
||||
lodsb ; Nb Line ( Delta Y )
|
||||
movzx eax, al
|
||||
|
||||
|
||||
add esi, 2 ; Jump Hot X & Hot Y
|
||||
|
||||
|
||||
;----------------------------------------------- Test Clipping
|
||||
add edx, ebx
|
||||
add eax, ecx
|
||||
dec edx
|
||||
dec eax
|
||||
cmp ebx, ClipXmin
|
||||
jl ClippingMask
|
||||
cmp ecx, ClipYmin
|
||||
jl ClippingMask
|
||||
cmp edx, ClipXmax
|
||||
jg ClippingMask
|
||||
cmp eax, ClipYmax
|
||||
jg ClippingMask
|
||||
sub edx, ebx
|
||||
sub eax, ecx
|
||||
inc edx
|
||||
inc eax
|
||||
;----------------------------------------------- Calcul Offset Ecran
|
||||
add ebx, TabOffLine[ecx*4]
|
||||
|
||||
mov edi, Log
|
||||
add edi, ebx
|
||||
|
||||
mov ebp, ptsrc
|
||||
add ebp, ebx
|
||||
|
||||
mov bh, al ; BH = NbLine
|
||||
sub edx, Screen_X ; EDX = Offset Screen
|
||||
neg edx ; EDX = Screen_X-edx
|
||||
xor ecx, ecx ; Maz Compteur
|
||||
mov eax, ecx
|
||||
;----------------------------------------------- Init NbBlock for this line
|
||||
NextLine: lodsb ; Nb Block for this line
|
||||
mov bl, al ; BL = NbBlock
|
||||
;----------------------------------------------- Manage One Line
|
||||
SameLine: lodsb ; Nb Zero to Jump
|
||||
add edi, eax ; Incrust on Log
|
||||
add ebp, eax ; And on PtSrc
|
||||
|
||||
dec bl
|
||||
je EndBlock
|
||||
|
||||
lodsb ; Nb Zero to Write
|
||||
mov cl, al
|
||||
|
||||
; xor al, al
|
||||
; rep stosb
|
||||
|
||||
xchg esi, ebp
|
||||
mov al, cl
|
||||
shr cl, 2
|
||||
rep movsd ; Write Datas From PtSrc
|
||||
mov cl, al
|
||||
and cl, 11b
|
||||
rep movsb
|
||||
xchg esi, ebp
|
||||
|
||||
|
||||
dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
EndBlock:
|
||||
add edi, edx ; EDI += Offset Screen
|
||||
add ebp, edx
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
;----------------------------------------------- Incrust
|
||||
ret
|
||||
;-------------------------------------------------------------------- Clipping
|
||||
; Graph : ( EBX, ECX ) ( EDX, EAX )
|
||||
ClippingMask:
|
||||
cmp ebx, ClipXmax
|
||||
jg EndMask
|
||||
cmp ecx, ClipYmax
|
||||
jg EndMask
|
||||
cmp edx, ClipXmin
|
||||
jl EndMask
|
||||
cmp eax, ClipYmin
|
||||
jl EndMask
|
||||
|
||||
cmp ecx, ClipYmin
|
||||
jge PasHaut
|
||||
|
||||
;---------------------- Clipping Haut, Saute ClipYmin-ECX Line(s)
|
||||
|
||||
sub ecx, ClipYMin
|
||||
neg ecx
|
||||
mov ebp, eax
|
||||
xor eax, eax
|
||||
|
||||
NextH: lodsb
|
||||
add esi, eax
|
||||
loop NextH
|
||||
|
||||
mov ecx, ClipYMin
|
||||
mov eax, ebp
|
||||
|
||||
;---------------------- Clipping Bas
|
||||
PasHaut: cmp eax, ClipYmax
|
||||
jle PasBas
|
||||
mov eax, ClipYmax
|
||||
;---------------------- Clipping Gauche
|
||||
Pasbas: mov OffsetBegin, 0
|
||||
cmp ebx, ClipXmin
|
||||
jge PasGauche
|
||||
|
||||
mov ebp, ClipXmin
|
||||
sub ebp, ebx
|
||||
mov OffsetBegin, ebp
|
||||
|
||||
;---------------------- Clipping Droit
|
||||
PasGauche:
|
||||
mov ebp, edx
|
||||
sub ebp, ebx
|
||||
sub ebp, OffsetBegin
|
||||
inc ebp
|
||||
mov NbPix, ebp
|
||||
|
||||
cmp edx, ClipXmax
|
||||
jle PasDroit
|
||||
|
||||
sub edx, ClipXmax
|
||||
sub NbPix, edx
|
||||
mov edx, ClipXmax
|
||||
;----------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PasDroit: ; ESI debut data Y ok pas X
|
||||
; EBX not clipped X0
|
||||
; ECX good Y0
|
||||
; EAX clipped Y1
|
||||
; NbPix real X nb pix
|
||||
; OffsetBegin start X ( !!!!! < 128 )
|
||||
|
||||
mov ebp, esi
|
||||
|
||||
mov edi, TabOffLine[ecx*4]
|
||||
add edi, ebx
|
||||
mov esi, edi ; good Y offset screen
|
||||
add edi, Log
|
||||
add esi, Screen ; Screen
|
||||
|
||||
mov edx, eax
|
||||
sub edx, ecx
|
||||
inc edx
|
||||
|
||||
xor ecx, ecx
|
||||
|
||||
l1: push esi
|
||||
push edi
|
||||
|
||||
mov bl, byte ptr[ebp] ; nb blocs
|
||||
inc ebp
|
||||
|
||||
mov bh, byte ptr[NbPix] ; nb point … copier
|
||||
|
||||
mov ecx, [OffsetBegin] ; start x
|
||||
mov ah, cl ; nb pix count
|
||||
add edi, ecx ; new pos screen
|
||||
add esi, ecx
|
||||
|
||||
l0: mov al, byte ptr[ebp] ; nb pix to jump
|
||||
inc ebp
|
||||
dec bl
|
||||
sub ah, al
|
||||
jz okdraw ; tombe pile
|
||||
jc rptj ; reste pix to jump
|
||||
or bl, bl
|
||||
jz aplus
|
||||
|
||||
mov al, byte ptr[ebp] ; nb copy point
|
||||
inc ebp
|
||||
dec bl
|
||||
sub ah, al
|
||||
jz okjump
|
||||
jc rgtc ; reste graph to copy
|
||||
|
||||
or bl, bl ; jmp l0
|
||||
jnz l0
|
||||
jmp aplus
|
||||
|
||||
rptj: neg ah ; ah nb pix to jump
|
||||
mov cl, ah
|
||||
sub bh, ah ; reste … ecrire
|
||||
jle aplus
|
||||
add edi, ecx
|
||||
add esi, ecx
|
||||
jmp okdraw
|
||||
|
||||
rgtc: neg ah ; al nb pix to copy
|
||||
mov cl, ah
|
||||
sub bh, ah ; reste … ecrire
|
||||
jc cpt ; copy pas tout
|
||||
rep movsb ; copy
|
||||
jz aplus ; tombe pile
|
||||
jmp okjump
|
||||
|
||||
cpt: add cl, bh
|
||||
rep movsb
|
||||
jmp aplus
|
||||
|
||||
EVEN
|
||||
okjump: mov cl, byte ptr[ebp] ; al nb pix to jump
|
||||
inc ebp
|
||||
dec bl
|
||||
jz aplus
|
||||
sub bh, cl ; reste … ecrire
|
||||
jle aplus ; fini
|
||||
add edi, ecx
|
||||
add esi, ecx
|
||||
|
||||
okdraw: mov cl, byte ptr[ebp] ; nb pix to copy
|
||||
inc ebp
|
||||
dec bl
|
||||
sub bh, cl ; reste … ecrire
|
||||
jc cpt ; copy pas tout
|
||||
rep movsb ; copy
|
||||
jz aplus ; tombe pile
|
||||
or bl,bl ; nb bloc--
|
||||
jz aplus
|
||||
jmp short okjump
|
||||
|
||||
aplus: ; ligne finie
|
||||
|
||||
movzx eax, bl
|
||||
add ebp, eax
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
add edi, 640
|
||||
add esi, 640
|
||||
|
||||
|
||||
dec dl ; nb lig--
|
||||
jnz l1
|
||||
|
||||
|
||||
|
||||
|
||||
comment #
|
||||
add ebx, TabOffLine[ecx*4]
|
||||
mov edi, Log
|
||||
add edi, ebx
|
||||
|
||||
sub eax, ecx
|
||||
inc al
|
||||
mov bh, al ; BH NbLine
|
||||
xor ecx, ecx
|
||||
mov ebp, edi
|
||||
;----------------------------------------------
|
||||
; ESI = DATAS LINE
|
||||
NextL: lea edi, BufferClip ; EDI = BUFFERCLIP
|
||||
lodsb ; NbBlock
|
||||
mov bl, al
|
||||
SameL: lodsb
|
||||
mov cl, al
|
||||
mov al, 1
|
||||
rep stosb
|
||||
dec bl
|
||||
je EndLine
|
||||
lodsb
|
||||
mov cl, al
|
||||
xor al, al
|
||||
rep stosb
|
||||
dec bl
|
||||
jne SameL
|
||||
;----------------------
|
||||
EndLine: push esi ; SAVE ESI
|
||||
lea esi, BufferClip ; ESI = BUFFERCLIP
|
||||
mov edi, ebp ; EDI = SCREEN
|
||||
mov ecx, OffsetBegin
|
||||
add esi, ecx
|
||||
add edi, ecx
|
||||
mov ecx, NbPix
|
||||
;----------------------
|
||||
Again:
|
||||
lodsb
|
||||
or al, al
|
||||
jne Incrust
|
||||
mov [edi], al
|
||||
Incrust: inc edi
|
||||
loop Again
|
||||
|
||||
add ebp, 640
|
||||
pop esi
|
||||
dec bh
|
||||
jne NextL
|
||||
;----------------------
|
||||
#
|
||||
|
||||
EndMask: ret
|
||||
|
||||
CopyMask endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1
LIB386/LIB_SVGA/DB.BAT
Normal file
1
LIB386/LIB_SVGA/DB.BAT
Normal file
@@ -0,0 +1 @@
|
||||
td286 -do -vg test
|
||||
628
LIB386/LIB_SVGA/DLL.ASM
Normal file
628
LIB386/LIB_SVGA/DLL.ASM
Normal file
@@ -0,0 +1,628 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; INITSVGA.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
.386p
|
||||
jumps
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
PUBLIC driver_start
|
||||
|
||||
driver_start dd OFFSET ListFuncs
|
||||
|
||||
IFDEF REALTEK
|
||||
db 'Realtek RTG 3105'
|
||||
ENDIF
|
||||
|
||||
IFDEF OAK
|
||||
db 'OAK OTI 067/077'
|
||||
ENDIF
|
||||
|
||||
IFDEF NCR
|
||||
db 'NCR 77C22'
|
||||
ENDIF
|
||||
|
||||
IFDEF COMPAQ
|
||||
db 'Compaq QVision/AVGA'
|
||||
ENDIF
|
||||
|
||||
IFDEF TSENG
|
||||
db 'Tseng Lab ET 3000/4000'
|
||||
ENDIF
|
||||
|
||||
IFDEF PARADISE
|
||||
db 'Paradise/Western Digital'
|
||||
ENDIF
|
||||
|
||||
IFDEF GENOA
|
||||
db 'Genoa'
|
||||
ENDIF
|
||||
|
||||
IFDEF S3
|
||||
db 'S3'
|
||||
ENDIF
|
||||
|
||||
IFDEF CIRRUS
|
||||
db 'Cirrus Logic'
|
||||
ENDIF
|
||||
|
||||
IFDEF TRIDENT
|
||||
db 'Trident'
|
||||
ENDIF
|
||||
|
||||
IFDEF ATI
|
||||
db 'ATI'
|
||||
ENDIF
|
||||
|
||||
db ' Super VGA Driver, Version 1.00,', 13, 10
|
||||
db 'Copyright (c) Adeline Software International 1994, All Rights Reserved.', 13, 10, 10, 0
|
||||
|
||||
|
||||
Scanline textequ <dword ptr[eax]>
|
||||
BankSize textequ <dword ptr[eax+4]>
|
||||
BankOver textequ <dword ptr[eax+8]>
|
||||
NonStdVESA textequ <byte ptr[eax+12]>
|
||||
BankShift textequ <byte ptr[eax+13]>
|
||||
|
||||
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
; ÛÛßßß Ûßßßß ÛßßßÛ Ûßßßß Ûßßßß ÛÛÜ Û ÛÜ ÜÛ ÛßßßÛ ÛßßßÜ Ûßßßß
|
||||
; ßßßßÛ ÛÛ ÛÛßÛß ÛÛßß ÛÛßß ÛÛßÛÛ ÛÛß Û ÛÛ Û ÛÛ Û ÛÛßß
|
||||
; ßßßßß ßßßßß ßß ß ßßßßß ßßßßß ßß ß ßßßßß ßß ß ßßßßß ßßßß ßßßßß
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef REALTEK
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
mov dx, 3D7h
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 26h
|
||||
int 10h
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef OAK
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
mov ah, al
|
||||
shl al, 4
|
||||
or ah, al
|
||||
mov dx, 3DEh
|
||||
mov al, 11h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 53h
|
||||
int 10h
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef NCR
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
shl ax, 10
|
||||
mov al, 18h
|
||||
mov dx, 03C4h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 5Fh
|
||||
int 10h
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef COMPAQ
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
shl ax, 12
|
||||
mov al, 45h
|
||||
mov dx, 03CEh
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ScanLine, 1024
|
||||
mov NonStdVESA, 1
|
||||
|
||||
mov ax, 32h
|
||||
int 10h
|
||||
|
||||
mov dx, 03CEh
|
||||
mov ax, 050Fh
|
||||
out dx, ax ; unlock extended regs
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef TSENG
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc ; ET3000, Should work
|
||||
; on the ET4000 also
|
||||
; as long as we don't
|
||||
; read the screen...
|
||||
mov dx, 03CDh
|
||||
or al, 40h
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc ; ET3000/ET4000
|
||||
|
||||
mov ax, 2Eh ; Basculer Mode Video
|
||||
int 10h ; Tseng 640*480*256
|
||||
|
||||
mov dx, 3BFh ; Enable access to extended registers
|
||||
mov al, 3 ; for ET4000
|
||||
out dx, al
|
||||
mov dl, 0D8h
|
||||
mov al, 0A0h
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef PARADISE
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc ; Western Digital /
|
||||
; Paradise
|
||||
|
||||
mov dx, 03CEh
|
||||
shl ax, 12 ; 4K banks
|
||||
mov al, 09h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 5Fh ; Basculer Mode Video
|
||||
int 10h ; WD/Paradise 640*480*256
|
||||
|
||||
mov dx, 03CEh
|
||||
mov al, 0Fh
|
||||
out dx, al
|
||||
inc dx ; 3CFh
|
||||
in al, dx
|
||||
and al, 11101000b
|
||||
or al, 00000101b
|
||||
out dx, al
|
||||
|
||||
dec dx ; 3CEh
|
||||
mov al, 0Bh
|
||||
out dx, al
|
||||
inc dx ; 3CFh
|
||||
in al, dx
|
||||
and al, 11110111b
|
||||
out dx, al
|
||||
|
||||
mov dl, 0C4h ; 3C4h
|
||||
mov al, 11h
|
||||
out dx, al
|
||||
inc dx ; 3C5h
|
||||
in al, dx
|
||||
and al, 01111111b
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef GENOA
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc ; Genoa (not old ET3000 model)
|
||||
|
||||
mov dx, 03C4h
|
||||
mov ah, al
|
||||
shl ah, 3
|
||||
or ah, al
|
||||
or ah, 40h
|
||||
mov al, 06h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc ; Genoa (not old ET3000 model)
|
||||
|
||||
mov ax, 5Ch ; Basculer Mode Video
|
||||
int 10h ; Genoa 640*480*256
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef S3
|
||||
|
||||
ListFuncs dd 0
|
||||
dd offset NewBank
|
||||
dd offset Enable
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
mov dx, 3d4h ; Switch banks
|
||||
mov ah, al
|
||||
mov al, 35h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
Enable proc
|
||||
|
||||
mov dx, 3d4h ; Enable extended registers
|
||||
mov al, 38h
|
||||
out dx, al
|
||||
inc dx
|
||||
mov al, 48h
|
||||
out dx, al
|
||||
|
||||
dec dx ; Enable write to bank registers
|
||||
mov al, 31h
|
||||
out dx, al
|
||||
inc dx
|
||||
mov al, 89h
|
||||
in al, dx
|
||||
mov ah, al
|
||||
dec dx
|
||||
mov al, 31h
|
||||
out dx, al
|
||||
inc dx
|
||||
mov al, ah
|
||||
or al, 9
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
Enable endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef CIRRUS
|
||||
|
||||
ListFuncs dd 0
|
||||
dd offset NewBank
|
||||
dd offset Enable
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
mov dx, 03CEh
|
||||
shl ax, 12
|
||||
mov al, 09h
|
||||
out dx, ax
|
||||
dec al
|
||||
out dx, al
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
Enable proc
|
||||
|
||||
comment @
|
||||
mov dx, 03D4h ; 3D4h
|
||||
mov al, 0Ch ; Screen A start addr Hi
|
||||
out dx, al
|
||||
inc dx ; 3D5h
|
||||
in al, dx
|
||||
mov cl, al ; cl = start addr
|
||||
xor al, al
|
||||
out dx, al ; write 0 to gain
|
||||
; access to Eagle ID
|
||||
|
||||
dec dx ; 3D4h
|
||||
mov al, 1Fh ; Eagle ID reg
|
||||
out dx, al
|
||||
inc dx ; 3D5h
|
||||
in al, dx ; get Eagle ID
|
||||
mov ah, al ; ah = Eagle ID
|
||||
|
||||
mov dl, 0C4h ; 3C4h
|
||||
mov al, 06h ; extension register
|
||||
mov ah, 12h ; should not be there
|
||||
out dx, ax ; write Eagle ID to
|
||||
; enable extended regs
|
||||
; Used to be 12h...
|
||||
|
||||
mov dl, 0D4h ; 3D4h
|
||||
mov al, 0Ch ; Screen A start addr Hi
|
||||
mov ah, cl ; old start addr
|
||||
out dx, ax ; write old value
|
||||
|
||||
@
|
||||
mov dx, 3c4h
|
||||
mov ax, 1206h
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
Enable endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef TRIDENT
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
mov dx, 3C4h
|
||||
xor al, 2 ; (strange chip design)
|
||||
mov ah, al
|
||||
mov al, 0Eh
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 5Dh ; Basculer Mode Video
|
||||
int 10h ; Trident 640*480*256
|
||||
|
||||
mov dx, 3CEh ; set pagesize to 64k
|
||||
mov al, 6
|
||||
out dx, al
|
||||
inc dx
|
||||
in al, dx
|
||||
or al, 4
|
||||
mov ah, al
|
||||
mov al, 6
|
||||
dec dx
|
||||
out dx, ax
|
||||
|
||||
mov dl, 0C4h ; switch to BPS mode
|
||||
mov al, 0Bh
|
||||
out dx, al
|
||||
inc dx
|
||||
in al, dx
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ifdef ATI
|
||||
|
||||
ListFuncs dd offset InitMode
|
||||
dd offset NewBank
|
||||
dd 0
|
||||
|
||||
comment @
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBank proc
|
||||
|
||||
shl ax, 9
|
||||
|
||||
mov dx, 1CEh
|
||||
mov al, 0B2h
|
||||
out dx, al
|
||||
inc dx
|
||||
in al, dx
|
||||
and al, 0E1h
|
||||
or ah, al
|
||||
mov al, 0B2h
|
||||
dec dx
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 62h ; Basculer Mode Video
|
||||
int 10h ; ATI 640*480*256
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
@
|
||||
|
||||
NewBank proc
|
||||
|
||||
shl ax, 9
|
||||
|
||||
extended_reg equ $+4
|
||||
mov dx, 1CEh
|
||||
mov al, 0B2h
|
||||
out dx, al
|
||||
inc dx
|
||||
in al, dx
|
||||
and al, 0E1h
|
||||
or ah, al
|
||||
mov al, 0B2h
|
||||
dec dx
|
||||
out dx, ax
|
||||
|
||||
ret
|
||||
|
||||
NewBank endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMode proc
|
||||
|
||||
mov ax, 62h ; Basculer Mode Video
|
||||
int 10h ; ATI 640*480*256
|
||||
|
||||
mov ax, [0C0010h]
|
||||
mov word ptr[extended_reg], ax
|
||||
|
||||
ret
|
||||
|
||||
InitMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
endif
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
End
|
||||
91
LIB386/LIB_SVGA/DLL.MAK
Normal file
91
LIB386/LIB_SVGA/DLL.MAK
Normal file
@@ -0,0 +1,91 @@
|
||||
AFLAGS = /Cx /Zm /c /W0 /Sa /DNoLanguage=SYSCALL /Djumps=;
|
||||
LINKDIR = format os2 lx dll
|
||||
|
||||
dll: realtek.dll oak.dll ncr.dll compaq.dll ati.dll cirrus.dll genoa.dll paradise.dll s3.dll trident.dll tseng.dll
|
||||
|
||||
#
|
||||
# Svga driver: REALTEK
|
||||
#
|
||||
|
||||
realtek.dll: dll.asm
|
||||
ml $(AFLAGS) /DREALTEK dll.asm
|
||||
wlink n realtek.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: OAK
|
||||
#
|
||||
|
||||
oak.dll: dll.asm
|
||||
ml $(AFLAGS) /DOAK dll.asm
|
||||
wlink n oak.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: NCR
|
||||
#
|
||||
|
||||
ncr.dll: dll.asm
|
||||
ml $(AFLAGS) /DNCR dll.asm
|
||||
wlink n ncr.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: COMPAQ
|
||||
#
|
||||
|
||||
compaq.dll: dll.asm
|
||||
ml $(AFLAGS) /DCOMPAQ dll.asm
|
||||
wlink n compaq.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: ATI
|
||||
#
|
||||
|
||||
ati.dll: dll.asm
|
||||
ml $(AFLAGS) /DATI dll.asm
|
||||
wlink n ati.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: CIRRUS
|
||||
#
|
||||
|
||||
cirrus.dll: dll.asm
|
||||
ml $(AFLAGS) /DCIRRUS dll.asm
|
||||
wlink n cirrus.dll f dll $(LINKDIR)
|
||||
#
|
||||
# Svga driver: GENOA
|
||||
#
|
||||
|
||||
genoa.dll: dll.asm
|
||||
ml $(AFLAGS) /DGENOA dll.asm
|
||||
wlink n genoa.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: PARADISE
|
||||
#
|
||||
|
||||
paradise.dll: dll.asm
|
||||
ml $(AFLAGS) /DPARADISE dll.asm
|
||||
wlink n paradise.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: S3
|
||||
#
|
||||
|
||||
s3.dll: dll.asm
|
||||
ml $(AFLAGS) /DS3 dll.asm
|
||||
wlink n s3.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: TRIDENT
|
||||
#
|
||||
|
||||
trident.dll: dll.asm
|
||||
ml $(AFLAGS) /DTRIDENT dll.asm
|
||||
wlink n trident.dll f dll $(LINKDIR)
|
||||
|
||||
#
|
||||
# Svga driver: Tseng Lab ET3000 & ET4000
|
||||
#
|
||||
|
||||
tseng.dll: dll.asm
|
||||
ml $(AFLAGS) /DTSENG dll.asm
|
||||
wlink n tseng.dll f dll $(LINKDIR)
|
||||
129
LIB386/LIB_SVGA/DLL_I.ASM
Normal file
129
LIB386/LIB_SVGA/DLL_I.ASM
Normal file
@@ -0,0 +1,129 @@
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
; SAMP_A.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
|
||||
;*--------------------------------------------------------------------------*
|
||||
|
||||
.386
|
||||
jumps
|
||||
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.DATA
|
||||
|
||||
PUBLIC NoLanguage listfcts
|
||||
|
||||
listfcts dd offset Vesafcts
|
||||
|
||||
Vesafcts dd offset SvgaInitVesa
|
||||
dd offset SvgaBankVesa
|
||||
|
||||
.CODE
|
||||
|
||||
PUBLIC NoLanguage SvgaInit
|
||||
PUBLIC NoLanguage SvgaBank
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
RMI equ $
|
||||
RMI_EDI dd 0
|
||||
RMI_ESI dd 0
|
||||
RMI_EBP dd 0
|
||||
RMI_RESERVED dd 0
|
||||
RMI_EBX dd 0
|
||||
RMI_EDX dd 0
|
||||
RMI_ECX dd 0
|
||||
RMI_EAX dd 0
|
||||
RMI_flags dw 0
|
||||
RMI_ES dw 0
|
||||
RMI_DS dw 0
|
||||
RMI_FS dw 0
|
||||
RMI_GS dw 0
|
||||
RMI_IP dw 0
|
||||
RMI_CS dw 0
|
||||
RMI_SP dw 0
|
||||
RMI_SS dw 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBankVesa proc
|
||||
|
||||
push ebx
|
||||
|
||||
Shift equ $+3
|
||||
shl ax, 0
|
||||
mov dx, ax
|
||||
mov eax, 4F05h ; change bank VESA
|
||||
xor ebx, ebx ; bh = 0, set bank
|
||||
int 10h
|
||||
|
||||
pop ebx
|
||||
|
||||
ret
|
||||
|
||||
NewBankVesa endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitModeVesa proc
|
||||
|
||||
mov eax, 0100h ; DMPI Allocate Dos Mem
|
||||
mov ebx, 32 ; 512 byte just in case
|
||||
int 31h ; return dos segment in ax
|
||||
push edx ; save selector
|
||||
push eax ; save real-mode segment
|
||||
|
||||
push es ; save es
|
||||
mov RMI_ES, ax ; buffer segment
|
||||
xor RMI_EDI, 0 ; buffer offset 0
|
||||
mov RMI_EAX, 4F01h ; Vesa information
|
||||
mov RMI_ECX, 0101h ; mode 101h
|
||||
mov ax, ds
|
||||
mov es, ax ; es = ds (just in case)
|
||||
mov edi, offset RMI ; registers
|
||||
mov ax, 0300h ; DMPI generate real-mode int
|
||||
mov bx, 10h ; int 10h
|
||||
int 31h
|
||||
pop es ; restore es
|
||||
|
||||
pop eax ; restore real-mode segment
|
||||
and eax, 0FFFFh ; only segment
|
||||
shl eax, 4 ; convert to linear
|
||||
mov ax, [eax+4] ; get granularity
|
||||
bsr ax, ax ; get higher bit position
|
||||
neg al ; - position
|
||||
add al, 6 ; shift = 6 - position
|
||||
mov byte ptr[Shift], al
|
||||
|
||||
pop edx ; restore selector
|
||||
mov eax, 0101h ; DPMI return Dos memory
|
||||
int 31h
|
||||
|
||||
mov ax, 4F02h ; Switch to Video Mode
|
||||
mov bx, 0101h ; VESA 640*480*256
|
||||
int 10h
|
||||
ret
|
||||
|
||||
InitModeVesa endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
NewBank PROC
|
||||
|
||||
mov eax, dword ptr[listfcts]
|
||||
jmp dword ptr[eax]
|
||||
|
||||
NewBank ENDP
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
InitMode PROC
|
||||
|
||||
mov eax, dword ptr[listfcts]
|
||||
jmp dword ptr[eax+4]
|
||||
|
||||
InitMode ENDP
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
END
|
||||
522
LIB386/LIB_SVGA/FONT6X6.ASM
Normal file
522
LIB386/LIB_SVGA/FONT6X6.ASM
Normal file
@@ -0,0 +1,522 @@
|
||||
Font6X6 label byte
|
||||
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,00FH,000H,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 000H,00FH,000H,00FH,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,00FH,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,000H,00FH,000H,00FH,00FH,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,00FH,00FH,000H,00FH,000H,000H,00FH,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 00FH,000H,00FH,000H,00FH,000H,000H,00FH,000H,000H
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,00FH,00FH,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,00FH,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,00FH,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,00FH,000H,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,00FH,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,00FH,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,00FH,000H,00FH
|
||||
db 00FH,000H,00FH,000H,00FH,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,000H,000H,00FH,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,00FH,000H,000H,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,000H,00FH,000H,000H,000H,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,000H,00FH
|
||||
db 000H,000H,000H,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,00FH,000H,00FH,000H,00FH,00FH
|
||||
db 000H,00FH,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,00FH,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,00FH,00FH,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,00FH,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,00FH,00FH
|
||||
db 000H,00FH,00FH,000H,00FH,000H,00FH,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,00FH,000H,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,00FH,000H,00FH,000H,000H,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 00FH,000H,00FH,000H,00FH,000H,000H,00FH,000H,000H
|
||||
db 000H,00FH,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,00FH,00FH,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,00FH,000H,00FH,000H
|
||||
db 00FH,00FH,000H,00FH,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,00FH,000H,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,000H,00FH,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,00FH,000H,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,00FH,00FH,00FH,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,00FH,000H,00FH,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,00FH,00FH,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,00FH,00FH,00FH,000H,00FH,00FH
|
||||
db 00FH,000H,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,00FH,00FH,000H,000H,000H
|
||||
db 00FH,00FH,00FH,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,00FH,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,00FH,00FH,00FH,00FH,000H
|
||||
db 00FH,00FH,00FH,000H,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,00FH,00FH,000H,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,000H,00FH
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,000H,00FH,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,00FH,00FH,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,00FH,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,00FH,00FH
|
||||
db 00FH,00FH,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,00FH,000H,000H,00FH,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 00FH,00FH,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,000H,00FH
|
||||
db 000H,000H,00FH,00FH,000H,00FH,00FH,000H,00FH,000H
|
||||
db 000H,00FH,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,00FH,000H,000H,000H,000H
|
||||
db 00FH,000H,00FH,000H,000H,00FH,00FH,000H,000H,000H
|
||||
db 000H,000H,00FH,00FH,000H,000H,00FH,000H,00FH,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,00FH,000H,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,00FH,00FH,00FH,00FH
|
||||
db 00FH,000H,00FH,000H,000H,000H,00FH,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,00FH,000H,000H
|
||||
db 000H,000H,00FH,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,000H,000H
|
||||
db 00FH,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,00FH,000H,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,000H,00FH,00FH,00FH,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,000H,00FH,00FH,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,00FH
|
||||
db 000H,000H,000H,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,00FH,000H
|
||||
db 000H,00FH,00FH,00FH,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,00FH,000H,00FH,000H,000H,000H,000H,00FH
|
||||
db 000H,00FH,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 00FH,00FH,000H,00FH,000H,000H,00FH,000H,00FH,00FH
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,00FH,000H
|
||||
db 00FH,000H,000H,000H,000H,00FH,000H,00FH,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,00FH,00FH,000H,00FH
|
||||
db 000H,000H,00FH,000H,00FH,00FH,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
|
||||
db 000H,000H,000H,000H
|
||||
|
||||
1
LIB386/LIB_SVGA/FONT8X8.ASM
Normal file
1
LIB386/LIB_SVGA/FONT8X8.ASM
Normal file
File diff suppressed because one or more lines are too long
216
LIB386/LIB_SVGA/FONT_A.ASM
Normal file
216
LIB386/LIB_SVGA/FONT_A.ASM
Normal file
@@ -0,0 +1,216 @@
|
||||
;----------------------------------------------------------------------------
|
||||
;
|
||||
;' Text_A.ASM 386
|
||||
;' (c) Adeline 1994
|
||||
;'
|
||||
;
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
;----------------------------------------------------------------------------
|
||||
include \projet\lib386\lib_svga\svga.ash
|
||||
|
||||
ALIGN 4
|
||||
|
||||
PtrFont dd 0
|
||||
DxFont dd ?
|
||||
|
||||
InterLeave dd 1
|
||||
InterSpace dd 10
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CoulFont
|
||||
public NoLanguage SetFont
|
||||
public NoLanguage SizeFont
|
||||
public NoLanguage CarFont
|
||||
public NoLanguage Font
|
||||
|
||||
extrn NoLanguage CoulMask :PROC
|
||||
extrn NoLanguage AffMask_Asm :PROC
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;'
|
||||
CoulFont proc ,\
|
||||
coul:DWORD
|
||||
|
||||
movzx eax, byte ptr [coul]
|
||||
push eax
|
||||
Call CoulMask
|
||||
add esp, 4
|
||||
ret
|
||||
|
||||
CoulFont endp
|
||||
;----------------------------------------------------------------------------
|
||||
;'
|
||||
SetFont proc ,\
|
||||
ptfont:DWORD, inle:DWORD, insp:DWORD
|
||||
|
||||
mov eax, ptfont
|
||||
mov [PtrFont], eax
|
||||
|
||||
mov eax, inle
|
||||
mov [InterLeave], eax
|
||||
|
||||
mov eax, insp
|
||||
mov [InterSpace], eax
|
||||
|
||||
ret
|
||||
|
||||
SetFont endp
|
||||
;----------------------------------------------------------------------------
|
||||
;'
|
||||
SizeFont proc uses esi edi ,\
|
||||
chaine:DWORD
|
||||
|
||||
mov esi, [chaine]
|
||||
mov edi, [PtrFont]
|
||||
xor eax, eax
|
||||
xor edx, edx
|
||||
mov [DxFont], eax
|
||||
;' --------------------------------
|
||||
NextCar:
|
||||
lodsb
|
||||
|
||||
or al, al
|
||||
je short EndSizeFont
|
||||
|
||||
cmp al, 32
|
||||
jne PlusLoin0
|
||||
|
||||
mov edx, [InterSpace]
|
||||
add [DxFont], edx
|
||||
jmp short NextCar
|
||||
|
||||
PlusLoin0:
|
||||
mov edi, [PtrFont]
|
||||
add edi, [edi+eax*4]
|
||||
|
||||
|
||||
mov edx, [InterLeave]
|
||||
add [DxFont], edx
|
||||
|
||||
mov dl, byte ptr[edi]
|
||||
|
||||
add [DxFont], edx
|
||||
|
||||
jmp short NextCar
|
||||
;' --------------------------------
|
||||
EndSizeFont:
|
||||
mov eax, [DxFont]
|
||||
ret
|
||||
SizeFont endp
|
||||
;----------------------------------------------------------------------------
|
||||
CarFont proc uses esi edi ebx ebp,\
|
||||
xcar:DWORD, ycar:DWORD, car:DWORD
|
||||
|
||||
mov eax, car
|
||||
cmp eax, 32 ;' SPACE
|
||||
je Space
|
||||
|
||||
mov ebx, xcar
|
||||
mov ecx, ycar
|
||||
mov esi, [PtrFont]
|
||||
|
||||
mov edi, [PtrFont]
|
||||
add edi, [edi+eax*4]
|
||||
|
||||
xor edx, edx
|
||||
mov dl, [edi+0]
|
||||
add edx, [InterLeave]
|
||||
|
||||
push edx
|
||||
|
||||
Call AffMask_Asm
|
||||
|
||||
pop eax
|
||||
|
||||
ret
|
||||
Space:
|
||||
mov eax, [InterSpace]
|
||||
ret
|
||||
|
||||
CarFont endp
|
||||
;----------------------------------------------------------------------------
|
||||
;'
|
||||
Font proc uses esi edi ebx ebp,\
|
||||
xfont:DWORD, yfont:DWORD,chaine:DWORD
|
||||
|
||||
cmp dword ptr [PtrFont], 0
|
||||
je short EndFont
|
||||
|
||||
;' --------------------------------
|
||||
|
||||
mov esi, [chaine]
|
||||
mov edi, [PtrFont]
|
||||
mov ebx, [xfont]
|
||||
mov ecx, [yfont]
|
||||
xor eax, eax
|
||||
|
||||
jmp NextCar
|
||||
|
||||
;' --------------------------------
|
||||
Space:
|
||||
add ebx, [InterSpace]
|
||||
NextCar:
|
||||
xor eax, eax
|
||||
lodsb
|
||||
|
||||
or al, al
|
||||
je short EndFont
|
||||
|
||||
cmp al, 32
|
||||
je Space
|
||||
|
||||
PasSpace: mov edi, [PtrFont]
|
||||
add edi, [edi+eax*4]
|
||||
|
||||
xor edx, edx
|
||||
mov dl, byte ptr[edi]
|
||||
mov [DxFont], edx
|
||||
|
||||
push esi
|
||||
push ebx
|
||||
push ecx
|
||||
mov esi, [PtrFont]
|
||||
|
||||
Call AffMask_Asm
|
||||
|
||||
pop ecx
|
||||
pop ebx
|
||||
pop esi
|
||||
|
||||
add ebx, [InterLeave]
|
||||
add ebx, [DxFont]
|
||||
|
||||
jmp short NextCar
|
||||
;' --------------------------------
|
||||
EndFont:
|
||||
ret
|
||||
Font endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
401
LIB386/LIB_SVGA/GIF.C
Normal file
401
LIB386/LIB_SVGA/GIF.C
Normal file
@@ -0,0 +1,401 @@
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º GIF = PROGRAM TO READ .GIF GRAPHICS FILES º
|
||||
º º
|
||||
º GIF and 'Graphics Interchange Format' are trademarks (tm) of º
|
||||
º Compuserve, Incorporated, an H&R Block Company º
|
||||
º º
|
||||
º By Roger T. Stevens 12-9-91 º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
*/
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
/*
|
||||
struct ffblk {
|
||||
char ff_reserved[21];
|
||||
char ff_attrib;
|
||||
unsigned ff_ftime;
|
||||
unsigned ff_fdate;
|
||||
long ff_fsize;
|
||||
char ff_name[13];
|
||||
};
|
||||
*/
|
||||
|
||||
#define UP_ARROW 328
|
||||
#define DOWN_ARROW 336
|
||||
#define LEFT_ARROW 331
|
||||
#define RIGHT_ARROW 333
|
||||
#define BACKSPACE 8
|
||||
|
||||
void decoder(LONG fd, WORD linewidth);
|
||||
WORD next_code(LONG fd);
|
||||
|
||||
//union REGS reg;
|
||||
|
||||
struct
|
||||
{
|
||||
char name[3] ;
|
||||
char version[3] ;
|
||||
short int xres ;
|
||||
short int yres ;
|
||||
unsigned short int packed;
|
||||
char back_col_index ;
|
||||
char aspect_ratio ;
|
||||
} gif_header;
|
||||
|
||||
struct
|
||||
{
|
||||
char red;
|
||||
char green;
|
||||
char blue;
|
||||
} color_table[256], loc_color_table[256];
|
||||
|
||||
struct
|
||||
{
|
||||
short int start_col ;
|
||||
short int start_row ;
|
||||
short int width ;
|
||||
short int height ;
|
||||
char packed ;
|
||||
} image_descriptor;
|
||||
|
||||
char ch, col_tab_flag, interlace_flag ;
|
||||
|
||||
/*
|
||||
buffer[64],
|
||||
color_flag,
|
||||
color_res,
|
||||
dirbuf[64][13],
|
||||
filename[32],
|
||||
loc_sort_flag,
|
||||
sort_flag;
|
||||
*/
|
||||
|
||||
unsigned char bytes = 0, b1, display_line[640/*2049*/], file_buf[512] ;
|
||||
|
||||
//unsigned char last[4096], stack[4096] ;
|
||||
unsigned char *last, *stack ;
|
||||
|
||||
// unsigned char PALETTE[17]={0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63,0};
|
||||
|
||||
short int bits_left = 0, code_size, clear, col_tab_size,
|
||||
linewidth, loc_col_tab_size,
|
||||
newcodes, rows,
|
||||
slot, top ;
|
||||
|
||||
extern short int i, end, index ;
|
||||
/*
|
||||
mode,
|
||||
disp_height,
|
||||
active_page = 0,
|
||||
column,
|
||||
dir_index= 0,
|
||||
done,
|
||||
end,
|
||||
i,index = 0,
|
||||
j, k,
|
||||
key,
|
||||
xres;
|
||||
*/
|
||||
|
||||
short unsigned int height, width ;
|
||||
|
||||
//short unsigned int link[4096] ;
|
||||
short unsigned int *link ;
|
||||
|
||||
//FILE *fin ;
|
||||
//struct ffblk ffblk ;
|
||||
|
||||
UBYTE *PtBuff ;
|
||||
extern UBYTE *PtDest;
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void line_out_gif( char *pt, WORD size )
|
||||
{
|
||||
WORD i ;
|
||||
UBYTE *pts ;
|
||||
|
||||
pts = pt ;
|
||||
|
||||
PtDest = PtBuff + (rows*640) ;
|
||||
|
||||
for ( i = 0 ; i < size ; i++ ) *PtDest++ = *pts++ ;
|
||||
|
||||
rows++ ;
|
||||
/*
|
||||
Box( 0, 0, 160, 7, 0 ) ;
|
||||
Text( 0, 0, "Ligne:%d", rows ) ;
|
||||
CopyBlockPhys( 0, 0, 160, 7 ) ;
|
||||
*/
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
// fd pointe deja sur le debut du gif sur disk
|
||||
// Faire le Close a plus haut niveau !
|
||||
|
||||
void Read_Gif( LONG fd, UBYTE *screen, UBYTE *tabcol, UBYTE *buffers )
|
||||
{
|
||||
char color ;
|
||||
char dummy ;
|
||||
short int finished ;
|
||||
|
||||
PtBuff = PtDest = screen ;
|
||||
|
||||
// buffers doit faire au moins 16K
|
||||
|
||||
last = buffers ; // 4096
|
||||
stack = buffers + 4096 ; // 4096
|
||||
link = buffers + 8192 ; // 8192
|
||||
|
||||
Read( fd, &gif_header, 13L ) ;
|
||||
|
||||
// color_flag = (gif_header.packed & 0x80) >> 7 ;
|
||||
// color_res = (gif_header.packed & 0x70) >> 4 ;
|
||||
// sort_flag = (gif_header.packed & 0x08) >> 3 ;
|
||||
|
||||
// col_tab_size = (WORD)pow(2,(gif_header.packed & 0x07)+1.0);
|
||||
|
||||
col_tab_size = (WORD)(2<<(gif_header.packed & 0x07)) ;
|
||||
|
||||
if (col_tab_size > 0)
|
||||
Read( fd, tabcol, col_tab_size *3L ) ;
|
||||
/* Si image en 16 couleurs
|
||||
for ( i = 0 ; i < 16 ; i++ )
|
||||
{
|
||||
PALETTE[i] = ((color_table[i].red & 0x40) >> 1) |
|
||||
((color_table[i].red & 0x80) >> 5) |
|
||||
((color_table[i].green & 0x40) >> 2) |
|
||||
(color_table[i].green & 0x80) >> 6 |
|
||||
((color_table[i].blue & 0x40) >> 3) |
|
||||
((color_table[i].blue & 0x80) >> 7) ;
|
||||
}
|
||||
*/
|
||||
/* Decalage en library automatique
|
||||
for ( i = 0 ; i < 256 ; i++ )
|
||||
{
|
||||
color_table[i].red >>= 2 ;
|
||||
color_table[i].green >>= 2 ;
|
||||
color_table[i].blue >>= 2 ;
|
||||
}
|
||||
*/
|
||||
|
||||
rows = 0 ;
|
||||
finished = 0 ;
|
||||
|
||||
while ( !finished )
|
||||
{
|
||||
Read( fd, &ch, 1L ) ;
|
||||
|
||||
switch ( ch )
|
||||
{
|
||||
case ';': /*End of .GIF data */
|
||||
finished = 1 ;
|
||||
break ;
|
||||
|
||||
case '!': /* .GIF extension block - read and discard */
|
||||
|
||||
Read( fd, &dummy, 1L ) ;
|
||||
Read( fd, &i, 2L ) ;
|
||||
Read( fd, file_buf, (LONG)i ) ;
|
||||
break ;
|
||||
|
||||
case ',': /* read image description */
|
||||
|
||||
Read( fd, &image_descriptor, 9L ) ;
|
||||
width = image_descriptor.width ;
|
||||
linewidth = min(640,width) ;
|
||||
height = image_descriptor.height ;
|
||||
col_tab_flag = (image_descriptor.packed & 0x80) >> 7 ;
|
||||
// interlace_flag = (image_descriptor.packed & 0x40) >> 6 ;
|
||||
// loc_sort_flag = (image_descriptor.packed & 0x20) >> 5 ;
|
||||
loc_col_tab_size = (WORD)pow(2,(image_descriptor.packed
|
||||
& 0x07) + 1.0);
|
||||
|
||||
if (col_tab_flag == 1)
|
||||
Read( fd,loc_color_table, loc_col_tab_size * 3L );
|
||||
|
||||
decoder( fd, width ) ;
|
||||
break ;
|
||||
default:
|
||||
finished = 1 ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º restore_screen() = Reads and displays a file º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
*/
|
||||
|
||||
void Load_Gif(char *filename, UBYTE *screen, UBYTE *tabcol)
|
||||
{
|
||||
LONG fd ;
|
||||
UBYTE *buffers ;
|
||||
|
||||
fd = OpenRead( filename ) ;
|
||||
|
||||
buffers = Malloc( 16384 ) ;
|
||||
|
||||
Read_Gif( fd, screen, tabcol, buffers ) ;
|
||||
|
||||
Free( buffers ) ;
|
||||
|
||||
Close(fd) ;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º decoder() = .GIF file decode º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
*/
|
||||
|
||||
void decoder( LONG fd, WORD width )
|
||||
{
|
||||
short int code, fc=0, old_code=0, counter;
|
||||
short int ch, size=0, ret ;
|
||||
short int s_index=0 ;
|
||||
short int l_index=0 ;
|
||||
|
||||
|
||||
Read( fd, &size, 1L ) ;
|
||||
code_size = size + 1 ;
|
||||
top = 1 << code_size ;
|
||||
clear = 1 << size ;
|
||||
end = clear + 1 ;
|
||||
|
||||
slot = newcodes = end + 1;
|
||||
counter = width ;
|
||||
bits_left = 0 ;
|
||||
b1 = 0 ;
|
||||
bytes = 0 ;
|
||||
|
||||
while ((ch = next_code(fd)) != end)
|
||||
{
|
||||
if (ch == clear)
|
||||
{
|
||||
code_size = size + 1 ;
|
||||
slot = newcodes ;
|
||||
top = 1 << code_size ;
|
||||
ch = next_code(fd) ;
|
||||
old_code = fc = ch ;
|
||||
display_line[l_index++] = ch;
|
||||
counter-- ;
|
||||
}
|
||||
else
|
||||
{
|
||||
code = ch ;
|
||||
if ( code >= slot )
|
||||
{
|
||||
code = old_code ;
|
||||
stack[s_index++] = fc ;
|
||||
}
|
||||
while ( code >= newcodes )
|
||||
{
|
||||
stack[s_index++] = last[code] ;
|
||||
code = link[code] ;
|
||||
}
|
||||
stack[s_index++] = code ;
|
||||
if ( slot < top )
|
||||
{
|
||||
fc = code ;
|
||||
last[slot] = code ;
|
||||
link[slot++] = old_code ;
|
||||
old_code = ch ;
|
||||
}
|
||||
if ( slot >= top )
|
||||
if ( code_size < 12 )
|
||||
{
|
||||
top <<= 1 ;
|
||||
++code_size ;
|
||||
}
|
||||
while ( s_index > 0 )
|
||||
{
|
||||
display_line[l_index++] = stack[--s_index] ;
|
||||
if ( --counter == 0 )
|
||||
{
|
||||
line_out_gif( display_line, linewidth ) ;
|
||||
if ( rows >= height )
|
||||
return ;
|
||||
|
||||
l_index = 0 ;
|
||||
counter = width ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( counter != linewidth )
|
||||
line_out_gif( display_line, linewidth-counter );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º next_code(fd) = reads next code from file º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
|
||||
ULONG code
|
||||
UBYTE b1
|
||||
UBYTE bytes
|
||||
WORD bits_left
|
||||
*/
|
||||
|
||||
WORD next_code( LONG fd )
|
||||
{
|
||||
short int flag=0 ;
|
||||
unsigned long int code ;
|
||||
|
||||
if ( bits_left == 0 ) flag = 1; /* BUG */
|
||||
|
||||
code = (b1 >> (8 - bits_left)) ;
|
||||
|
||||
while ( code_size > bits_left )
|
||||
{
|
||||
if ( bytes <= 0 )
|
||||
{
|
||||
index = 0 ;
|
||||
Read( fd, &bytes, 1L ) ;
|
||||
Read( fd, file_buf, (LONG)bytes );
|
||||
}
|
||||
|
||||
b1 = file_buf[index++] ;
|
||||
|
||||
if (flag == 1)
|
||||
{
|
||||
/* code = (b1 >> (8 - bits_left)) ; SUPER BUG*/
|
||||
code = b1 ;
|
||||
flag = 0 ; /* BUG */
|
||||
}
|
||||
else code |= (b1 << bits_left);
|
||||
|
||||
bits_left += 8 ;
|
||||
--bytes ;
|
||||
}
|
||||
|
||||
bits_left -= code_size ;
|
||||
|
||||
code &= ( 0xFFF >> (12 - code_size)) ;
|
||||
|
||||
return((WORD)(code)) ;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
154
LIB386/LIB_SVGA/GRAPHMSK.ASM
Normal file
154
LIB386/LIB_SVGA/GRAPHMSK.ASM
Normal file
@@ -0,0 +1,154 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; GraphMsk.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
;----------------------------------------------------------------------------
|
||||
include \projet\lib386\lib_svga\svga.ash
|
||||
|
||||
comment @
|
||||
DWORD TabOffset[]
|
||||
Brick:
|
||||
- BYTE Delta X
|
||||
- BYTE Delta Y
|
||||
Line(Delta Y):
|
||||
- BYTE NbBlock
|
||||
Block:
|
||||
- 00xxxxxxb xxxxxx zeros to jump
|
||||
- 01xxxxxxb xxxxxx Copy Pix
|
||||
- 10xxxxxxb xxxxxx Repeat Pix
|
||||
- BYTE datas[]
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CalcGraphMsk
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
CalcGraphMsk proc uses esi edi ebx ebp,\
|
||||
numbrick:DWORD, bankbrick:DWORD, ptmask:DWORD
|
||||
|
||||
mov eax, numbrick
|
||||
mov esi, bankbrick
|
||||
mov edi, ptmask
|
||||
push edi
|
||||
add esi, [esi+eax*4]; ESI = Begin Data
|
||||
|
||||
;-----------------------------------------------
|
||||
xor edx, edx
|
||||
mov ebx, [esi] ; Get DX, DY, Hot X, Hot Y
|
||||
mov [edi], ebx ; Stock DX, DY, Hot X, Hot Y
|
||||
add esi, 4 ; bh = NbLine
|
||||
add edi, 4
|
||||
;-----------------------------------------------
|
||||
xor ecx, ecx ; Maz Compteur
|
||||
;----------------------------------------------- Init NbBlock for this line
|
||||
NextLine: xor dl, dl ; NbBlockDst = 0
|
||||
xor ah, ah ; NbData = 0
|
||||
mov ebp, edi ; Sauve Pos NbBlockDst
|
||||
inc edi ; Jump NbBlockDst
|
||||
mov bl, [esi] ; BL = Nb Block for this line
|
||||
inc esi
|
||||
test byte ptr [esi], 11000000b; Jump Zero ?
|
||||
je SameLine ; Line MUST Begin JumpZero
|
||||
;----------------------------------------------- Premier Block En Jump Zero
|
||||
mov byte ptr[edi], 0
|
||||
inc edi
|
||||
inc dl ; NbBlockDst++
|
||||
;----------------------------------------------- Manage One Line
|
||||
SameLine: mov al, [esi]
|
||||
inc esi ; OpCode
|
||||
mov cl, al ; Sauve AL
|
||||
and cl, 00111111b ; AH = Bit 0-5
|
||||
inc cl ; One More Please...
|
||||
;-----------------------
|
||||
test al, 10000000b
|
||||
jne RepeatCol
|
||||
test al, 01000000b
|
||||
jne CopyCol
|
||||
;----------------------------------------------- 00 Jump CL Zero
|
||||
or ah, ah ; NbData
|
||||
je RienEnCours
|
||||
;-----------------------
|
||||
mov [edi], ah
|
||||
inc edi
|
||||
inc dl ; NbBlockDst++
|
||||
xor ah, ah ; NbData=0
|
||||
RienEnCours: mov [edi], cl
|
||||
inc edi
|
||||
inc dl ; NbBlockDst++
|
||||
jmp EndLoop
|
||||
;----------------------------------------------- 01 Repeat Nb Col
|
||||
RepeatCol: add ah, cl ; NbData += Nb
|
||||
inc esi ; pts++
|
||||
jmp EndLoop
|
||||
;----------------------------------------------- 10 Copy Nb Col
|
||||
CopyCol: add ah, cl ; NbData += Nb
|
||||
add esi, ecx ; pts += nb
|
||||
;----------------------------------------------- End Loop
|
||||
EndLoop: dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
;----------------------------------------------- Cloture Eventuelle
|
||||
or ah, ah ; NbData
|
||||
je PasDeCloture
|
||||
;-----------------------
|
||||
mov [edi], ah
|
||||
inc edi
|
||||
inc dl ; NbBlockDst++
|
||||
;-----------------------
|
||||
PasDeCloture: mov ds:[ebp], dl ; Write NbBlockDst
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
;-----------------------
|
||||
mov eax, edi
|
||||
pop edi
|
||||
sub eax, edi ; Size Mask
|
||||
ret
|
||||
;----------------------
|
||||
CalcGraphMsk endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
358
LIB386/LIB_SVGA/GRAPH_A.ASM
Normal file
358
LIB386/LIB_SVGA/GRAPH_A.ASM
Normal file
@@ -0,0 +1,358 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; Graph_A.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
;----------------------------------------------------------------------------
|
||||
include \projet\lib386\lib_svga\svga.ash
|
||||
|
||||
|
||||
FULL_OPTIMIZE equ 1
|
||||
|
||||
comment @
|
||||
DWORD TabOffset[]
|
||||
Brick:
|
||||
- BYTE Delta X
|
||||
- BYTE Delta Y
|
||||
Line(Delta Y):
|
||||
- BYTE NbBlock
|
||||
Block:
|
||||
- 00xxxxxxb xxxxxx zeros to jump
|
||||
- 01xxxxxxb xxxxxx Copy Pix
|
||||
- 10xxxxxxb xxxxxx Repeat Pix
|
||||
- BYTE datas[]
|
||||
@
|
||||
|
||||
ALIGN 4
|
||||
|
||||
OffsetBegin dd 0
|
||||
NbPix dd 0
|
||||
BufferClip db 512 dup(?)
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage AffGraph
|
||||
public NoLanguage GetDxDyGraph
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
AffGraph proc uses esi edi ebx ebp,\
|
||||
numbrick:DWORD, xbrick:DWORD, ybrick:DWORD, \
|
||||
bankbrick:DWORD
|
||||
|
||||
mov eax, numbrick
|
||||
mov ebx, xbrick
|
||||
mov ecx, ybrick
|
||||
mov esi, bankbrick
|
||||
|
||||
add esi, [esi+eax*4] ; ESI = Begin Data
|
||||
|
||||
xor eax, eax
|
||||
xor edx, edx
|
||||
|
||||
mov al, byte ptr[esi+2] ; Hot X
|
||||
add ebx, eax
|
||||
mov al, byte ptr[esi+3] ; Hot Y
|
||||
add ecx, eax
|
||||
mov dl, [esi] ; Delta X
|
||||
mov al, [esi+1] ; Nb Line ( Delta Y )
|
||||
add esi, 4 ; Jump Hot X & Hot Y
|
||||
|
||||
;----------------------------------------------- Test Clipping
|
||||
|
||||
add edx, ebx
|
||||
add eax, ecx
|
||||
dec edx
|
||||
dec eax
|
||||
|
||||
cmp ebx, ClipXmin
|
||||
jl ClippingGraph
|
||||
cmp ecx, ClipYmin
|
||||
jl ClippingGraph
|
||||
cmp edx, ClipXmax
|
||||
jg ClippingGraph
|
||||
cmp eax, ClipYmax
|
||||
jg ClippingGraph
|
||||
|
||||
inc edx
|
||||
inc eax
|
||||
sub edx, ebx
|
||||
sub eax, ecx
|
||||
|
||||
|
||||
;----------------------------------------------- Calcul Offset Ecran
|
||||
|
||||
mov edi, Log
|
||||
add edi, TabOffLine[ecx*4]
|
||||
add edi, ebx
|
||||
mov bh, al ; BH = NbLine
|
||||
sub edx, Screen_X ; EDX = Offset Screen
|
||||
neg edx ; EDX = Screen_X-edx
|
||||
xor ecx, ecx ; Maz Compteur
|
||||
|
||||
;----------------------------------------------- Init NbBlock for this line
|
||||
|
||||
NextLine: mov bl, [esi] ; BL = Nb Block for this line
|
||||
inc esi
|
||||
|
||||
;----------------------------------------------- Manage One Line
|
||||
|
||||
SameLine: mov al, [esi] ; OpCode
|
||||
mov cl, al ; Sauve AL
|
||||
and cl, 00111111b ; AH = Bit 0-5
|
||||
test al, 11000000b ; AL = Bit 6-7
|
||||
je JumpZero ; Incrust
|
||||
inc cl ; One More Please...
|
||||
test al, 01000000b ; AL = 01b
|
||||
jne WriteDiffPix ; Pix Differents
|
||||
|
||||
;----------------------------------------------- Repeat Same Color
|
||||
|
||||
mov al, [esi+1] ; Color to Repeat
|
||||
add esi, 2
|
||||
shr ecx, 1
|
||||
mov ah, al
|
||||
rep stosw ; Fill
|
||||
jnc nobytec
|
||||
mov [edi], al
|
||||
inc edi
|
||||
nobytec: dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
add edi, edx ; EDI += Offset Screen
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
ret
|
||||
|
||||
;----------------------------------------------- Copy Diff Pix
|
||||
|
||||
WriteDiffPix: inc esi
|
||||
shr ecx, 1
|
||||
rep movsw ; Copy Pix
|
||||
jnc nobyted
|
||||
mov al, [esi]
|
||||
mov [edi], al
|
||||
inc esi
|
||||
inc edi
|
||||
nobyted: dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
add edi, edx ; EDI += Offset Screen
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
ret
|
||||
|
||||
;----------------------------------------------- Incrust
|
||||
|
||||
JumpZero: inc esi
|
||||
lea edi, [edi+ecx+1]; Jump Zero (incrust)
|
||||
dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
add edi, edx ; EDI += Offset Screen
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------- Clipping
|
||||
; Graph : ( EBX, ECX ) ( EDX, EAX )
|
||||
ClippingGraph:
|
||||
cmp ebx, ClipXmax
|
||||
jg EndGraph
|
||||
cmp ecx, ClipYmax
|
||||
jg EndGraph
|
||||
cmp edx, ClipXmin
|
||||
jl EndGraph
|
||||
cmp eax, ClipYmin
|
||||
jl EndGraph
|
||||
cmp ecx, ClipYmin
|
||||
jge PasHaut
|
||||
|
||||
;---------------------- Clipping Haut, Saute ClipYmin-ECX Line(s)
|
||||
|
||||
mov ebp, eax
|
||||
mov edi, ebx
|
||||
|
||||
mov ebx, ClipYmin
|
||||
sub ebx, ecx
|
||||
|
||||
NextH: mov bh, [esi]
|
||||
inc esi
|
||||
SameH: mov al, [esi]
|
||||
inc esi
|
||||
test al, 11000000b
|
||||
je JumpzH
|
||||
xor ecx, ecx
|
||||
test al, 01000000b
|
||||
je AquiH
|
||||
and eax, 00111111b
|
||||
mov ecx, eax
|
||||
AquiH: lea esi, [esi+ecx+1]
|
||||
JumpzH: dec bh
|
||||
jne SameH
|
||||
dec bl
|
||||
jne NextH
|
||||
|
||||
mov ecx, ClipYmin ; New Y Haut
|
||||
|
||||
mov eax, ebp
|
||||
mov ebx, edi
|
||||
|
||||
;---------------------- Clipping Bas
|
||||
PasHaut: cmp eax, ClipYmax
|
||||
jle PasBas
|
||||
mov eax, ClipYmax
|
||||
;---------------------- Clipping Gauche
|
||||
Pasbas: xor edi, edi
|
||||
cmp ebx, ClipXmin
|
||||
jge PasGauche
|
||||
mov edi, ClipXmin
|
||||
sub edi, ebx
|
||||
PasGauche: mov OffsetBegin, edi
|
||||
;---------------------- Clipping Droit
|
||||
lea edi, [edi+ebx-1]
|
||||
sub edi, edx
|
||||
neg edi
|
||||
mov NbPix, edi
|
||||
|
||||
sub edx, ClipXmax
|
||||
jle PasDroit
|
||||
sub NbPix, edx
|
||||
;----------------------
|
||||
PasDroit:
|
||||
|
||||
mov edi, Log
|
||||
add edi, TabOffLine[ecx*4]
|
||||
add edi, ebx
|
||||
|
||||
|
||||
sub eax, ecx
|
||||
inc al
|
||||
mov bh, al ; BH NbLine
|
||||
xor ecx, ecx
|
||||
mov edx, edi
|
||||
;----------------------------------------------
|
||||
; ESI = DATAS LINE
|
||||
NextL: lea edi, BufferClip ; EDI = BUFFERCLIP
|
||||
mov bl, [esi]
|
||||
inc esi
|
||||
SameL: mov al, [esi]
|
||||
inc esi
|
||||
mov cl, al
|
||||
and cl, 00111111b
|
||||
inc cl
|
||||
test al, 11000000b
|
||||
je JumpL
|
||||
test al, 01000000b
|
||||
jne WriteDiffL
|
||||
;----------------------
|
||||
mov al, [esi]
|
||||
inc esi
|
||||
shr ecx, 1
|
||||
mov ah, al
|
||||
rep stosw
|
||||
jnc nobyte
|
||||
mov [edi], al
|
||||
inc edi
|
||||
dec bl
|
||||
jne SameL
|
||||
jmp NextLine2
|
||||
;----------------------
|
||||
JumpL: xor ax, ax
|
||||
shr ecx, 1
|
||||
rep stosw
|
||||
jnc nobyte
|
||||
mov [edi], al
|
||||
inc edi
|
||||
dec bl
|
||||
jne SameL
|
||||
jmp NextLine2
|
||||
;----------------------
|
||||
WriteDiffL: shr ecx, 1
|
||||
rep movsw
|
||||
jnc nobyte
|
||||
mov al, [esi]
|
||||
mov [edi], al
|
||||
inc esi
|
||||
inc edi
|
||||
nobyte: dec bl
|
||||
jne SameL
|
||||
;----------------------
|
||||
NextLine2: mov ebp, esi ; SAVE ESI
|
||||
mov ecx, OffsetBegin
|
||||
lea esi, [BufferClip+ecx] ; ESI = BUFFERCLIP
|
||||
lea edi, [edx+ecx] ; EDI = SCREEN
|
||||
mov ecx, NbPix
|
||||
Again: mov al, [esi]
|
||||
inc esi
|
||||
or al, al
|
||||
je Incrust
|
||||
mov [edi], al
|
||||
Incrust: inc edi
|
||||
dec ecx
|
||||
jnz Again
|
||||
add edx, 640
|
||||
mov esi, ebp
|
||||
dec bh
|
||||
jne NextL
|
||||
;----------------------
|
||||
EndGraph: ret
|
||||
AffGraph endp
|
||||
;----------------------------------------------------------------------------
|
||||
GetDxDyGraph proc uses esi edi ebx,\
|
||||
num:DWORD, ptdx:DWORD, ptdy:DWORD, bankgraph:DWORD
|
||||
|
||||
mov esi, bankgraph
|
||||
mov eax, num
|
||||
add esi, [esi+eax*4]
|
||||
mov edi, ptdx
|
||||
xor eax, eax
|
||||
mov al, [esi]
|
||||
mov dword ptr[edi], eax
|
||||
mov edi, ptdy
|
||||
mov al, [esi+1]
|
||||
mov dword ptr[edi], eax
|
||||
ret
|
||||
GetDxDyGraph endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
50
LIB386/LIB_SVGA/INITMODE.C
Normal file
50
LIB386/LIB_SVGA/INITMODE.C
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/* INITGRAFSVGA 386 */
|
||||
/* (c) Adeline 1993 */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <dos.h>
|
||||
#include <i86.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void InitGraphSvga()
|
||||
{
|
||||
InitSvga();
|
||||
|
||||
Log = Malloc(640L*480L); /* 307200L */
|
||||
MemoLog = Log;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void ClearGraphSvga()
|
||||
{
|
||||
Free(MemoLog) ;
|
||||
ClearVideo() ;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void InitGraphMcga()
|
||||
{
|
||||
InitMcga();
|
||||
|
||||
Log = Malloc(320L*200L); /* 64000L */
|
||||
MemoLog = Log;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void ClearGraphMcga()
|
||||
{
|
||||
Free(MemoLog) ;
|
||||
ClearVideo() ;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
317
LIB386/LIB_SVGA/INITSVGA.ASM
Normal file
317
LIB386/LIB_SVGA/INITSVGA.ASM
Normal file
@@ -0,0 +1,317 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; INITSVGA.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
|
||||
include vesa.ash
|
||||
|
||||
public NoLanguage Log
|
||||
public NoLanguage Phys
|
||||
public NoLanguage Text_Ink
|
||||
public NoLanguage Text_Paper
|
||||
public NoLanguage Screen_X
|
||||
public NoLanguage Screen_Y
|
||||
public NoLanguage MemoLog
|
||||
public NoLanguage ClipXmin
|
||||
public NoLanguage ClipYmin
|
||||
public NoLanguage ClipXmax
|
||||
public NoLanguage ClipYmax
|
||||
public NoLanguage TabOffLine
|
||||
public NoLanguage OldVideo
|
||||
public NoLanguage SizeCar
|
||||
public NoLanguage BankChange
|
||||
public NoLanguage BankCurrent
|
||||
|
||||
public NoLanguage InitSvgaMode
|
||||
public NoLanguage NewBank
|
||||
public NoLanguage Enable
|
||||
|
||||
|
||||
ClipXmin dd 0
|
||||
ClipYmin dd 0
|
||||
ClipXmax dd 639
|
||||
ClipYmax dd 479
|
||||
|
||||
MemoClipXmin dd 0
|
||||
MemoClipYmin dd 0
|
||||
MemoClipXmax dd 639
|
||||
MemoClipYmax dd 479
|
||||
|
||||
TabOffLine dd 480 dup(?) ; LONG et non pas WORD comme MCGA
|
||||
|
||||
TabOffPhysLine dd 480 dup(?) ; LONG et non pas WORD comme MCGA
|
||||
|
||||
OldVideo db -1
|
||||
|
||||
Text_Ink db 15
|
||||
Text_Paper db -1
|
||||
db 0
|
||||
|
||||
Screen_X dd 640
|
||||
Screen_Y dd 480
|
||||
SizeCar dw 8 ; 6 old affstring
|
||||
|
||||
ALIGN 2
|
||||
|
||||
Save_1 dd ?
|
||||
|
||||
Log dd 0
|
||||
Phys dd 0A0000h
|
||||
MemoLog dd 0
|
||||
BankChange dd ?
|
||||
BankCurrent dd ?
|
||||
|
||||
InitSvgaMode dd offset InitModeVesa
|
||||
NewBank dd offset NewBankVesa
|
||||
Enable dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
InitModeVesa PROTO
|
||||
NewBankVesa PROTO
|
||||
|
||||
extrn NoLanguage ScanLine:DWORD
|
||||
|
||||
public NoLanguage InitSvga
|
||||
public NoLanguage InitMcga
|
||||
public NoLanguage InitMcgaMode
|
||||
public NoLanguage SimpleInitSvga
|
||||
public NoLanguage ClearVideo
|
||||
|
||||
public NoLanguage SetClip
|
||||
public NoLanguage UnSetClip
|
||||
public NoLanguage MemoClip
|
||||
public NoLanguage RestoreClip
|
||||
|
||||
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
; ÛÛßßß Ûßßßß ÛßßßÛ Ûßßßß Ûßßßß ÛÛÜ Û ÛÜ ÜÛ ÛßßßÛ ÛßßßÜ Ûßßßß
|
||||
; ßßßßÛ ÛÛ ÛÛßÛß ÛÛßß ÛÛßß ÛÛßÛÛ ÛÛß Û ÛÛ Û ÛÛ Û ÛÛßß
|
||||
; ßßßßß ßßßßß ßß ß ßßßßß ßßßßß ßß ß ßßßßß ßß ß ßßßßß ßßßß ßßßßß
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitSvga proc
|
||||
|
||||
;---------------------- Save regs
|
||||
|
||||
pushad
|
||||
|
||||
;---------------------- memo video mode
|
||||
|
||||
mov ah, 0Fh
|
||||
int 10h
|
||||
mov [OldVideo], al
|
||||
|
||||
;---------------------- Video Mode
|
||||
|
||||
mov edx, [InitSvgaMode]
|
||||
or edx, edx
|
||||
jnz ok
|
||||
|
||||
mov edx, offset InitModeVESA
|
||||
mov [InitSvgaMode], edx
|
||||
ok:
|
||||
mov eax, offset ScanLine
|
||||
call edx
|
||||
|
||||
mov edx, [Enable]
|
||||
or edx, edx
|
||||
jz skip
|
||||
|
||||
call edx
|
||||
skip:
|
||||
|
||||
;---------------------- Restore regs
|
||||
|
||||
popad
|
||||
|
||||
;---------------------- Table Offset Line
|
||||
|
||||
mov ecx, Screen_Y
|
||||
xor eax, eax
|
||||
mov edx, eax
|
||||
Again:
|
||||
mov TabOffLine[edx*4], eax
|
||||
inc edx
|
||||
add eax, Screen_X
|
||||
dec ecx
|
||||
jnz Again
|
||||
|
||||
mov dword ptr[BankCurrent], -1
|
||||
|
||||
ret
|
||||
|
||||
InitSvga endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
SimpleInitSvga proc uses ebx
|
||||
|
||||
call [InitSvgaMode]
|
||||
|
||||
mov eax, [Enable]
|
||||
or eax, eax
|
||||
jz skip
|
||||
|
||||
call eax
|
||||
skip:
|
||||
mov dword ptr[BankCurrent], -1
|
||||
|
||||
ret
|
||||
|
||||
SimpleInitSvga endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
ClearSvga proc
|
||||
|
||||
xor ax, ax
|
||||
mov al, OldVideo
|
||||
int 10h
|
||||
ret
|
||||
|
||||
ClearSvga endp
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMcgaMode proc uses esi edi
|
||||
|
||||
mov ax, 13h
|
||||
int 10h
|
||||
ret
|
||||
|
||||
InitMcgaMode endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitMcga proc
|
||||
|
||||
;---------------------- Save regs
|
||||
|
||||
pushad
|
||||
|
||||
;---------------------- memo video mode
|
||||
|
||||
mov ah, 0Fh
|
||||
int 10h
|
||||
mov [OldVideo], al
|
||||
|
||||
;---------------------- Video Mode
|
||||
|
||||
call InitMcgaMode
|
||||
|
||||
;---------------------- Restore regs
|
||||
|
||||
popad
|
||||
|
||||
ret
|
||||
|
||||
InitMcga endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
ClearVideo proc
|
||||
|
||||
xor ax, ax
|
||||
mov al, OldVideo
|
||||
int 10h
|
||||
ret
|
||||
|
||||
ClearVideo endp
|
||||
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
; Ûßßßß Û Û ÛßßßÛ ÛßßßÛ Û ÛÛÜ Û Ûßßßß
|
||||
; ÛÛ ÛÛ ÛÛ ÛÛßßß ÛÛßßß ÛÛ ÛÛßÛÛ ÛÛ ßÛ
|
||||
; ßßßßß ßßßßß ßß ßß ßß ßß ßß ß ßßßßß
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
|
||||
SetClip proc ,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
|
||||
|
||||
mov eax, x0
|
||||
cmp eax, 0
|
||||
jge OkLeft
|
||||
xor eax, eax
|
||||
OkLeft: mov ClipXmin, eax
|
||||
|
||||
mov eax, y0
|
||||
cmp eax, 0
|
||||
jge OkUp
|
||||
xor eax, eax
|
||||
OkUp: mov ClipYmin, eax
|
||||
|
||||
mov eax, x1
|
||||
cmp eax, Screen_X
|
||||
jl OkRight
|
||||
mov eax, Screen_X
|
||||
dec eax
|
||||
OkRight: mov ClipXmax, eax
|
||||
|
||||
mov eax, y1
|
||||
cmp eax, Screen_Y
|
||||
jl OkDown
|
||||
mov eax, Screen_Y
|
||||
dec eax
|
||||
OkDown: mov ClipYmax, eax
|
||||
|
||||
ret
|
||||
SetClip endp
|
||||
;----------------------------------------------------------------------------
|
||||
UnSetClip proc
|
||||
|
||||
xor eax, eax
|
||||
mov ClipXmin, eax
|
||||
mov ClipYmin, eax
|
||||
|
||||
mov eax, Screen_X
|
||||
dec eax
|
||||
mov ClipXmax, eax
|
||||
|
||||
mov eax, Screen_Y
|
||||
dec eax
|
||||
mov ClipYmax, eax
|
||||
|
||||
ret
|
||||
|
||||
UnSetClip endp
|
||||
;----------------------------------------------------------------------------
|
||||
MemoClip proc
|
||||
|
||||
mov eax,ClipXmin
|
||||
mov MemoClipXmin, eax
|
||||
mov eax,ClipYmin
|
||||
mov MemoClipYmin, eax
|
||||
mov eax,ClipXmax
|
||||
mov MemoClipXmax, eax
|
||||
mov eax,ClipYmax
|
||||
mov MemoClipYmax, eax
|
||||
|
||||
ret
|
||||
|
||||
MemoClip endp
|
||||
;----------------------------------------------------------------------------
|
||||
RestoreClip proc
|
||||
|
||||
mov eax,MemoClipXmin
|
||||
mov ClipXmin, eax
|
||||
mov eax,MemoClipYmin
|
||||
mov ClipYmin, eax
|
||||
mov eax,MemoClipXmax
|
||||
mov ClipXmax, eax
|
||||
mov eax,MemoClipYmax
|
||||
mov ClipYmax, eax
|
||||
|
||||
ret
|
||||
|
||||
RestoreClip endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
340
LIB386/LIB_SVGA/LBM.C
Normal file
340
LIB386/LIB_SVGA/LBM.C
Normal file
@@ -0,0 +1,340 @@
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
Û ÛßßÛ ÛÜ ÜÛ
|
||||
ÛÛ ÛÛßßÛ ÛÛß Û
|
||||
ßßßßß ßßßßß ßß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
#define MAXBUFLIGNE 1500
|
||||
#define RowByte(w) ((((w)+15)>>4) << 1)
|
||||
|
||||
UWORD Larg ;
|
||||
|
||||
WORD Lbm_Width = 640 ;
|
||||
|
||||
#define BUFLIGNEMAX 720
|
||||
|
||||
static WORD Handle ;
|
||||
static ULONG rejet ;
|
||||
static ULONG len ;
|
||||
static BYTE head[] = "BMHD" ;
|
||||
static WORD larg,haut ;
|
||||
static BYTE nbr_plan ;
|
||||
static BYTE flgcomp ; /* flg de compression */
|
||||
static BYTE Masking ;
|
||||
//static BYTE bufflig[BUFLIGNEMAX] ;
|
||||
|
||||
static UBYTE tabmsk[8] = { 0x01,0x02,0x04,0x08,
|
||||
0x10,0x20,0x40,0x80 } ;
|
||||
|
||||
static LONG CptIff ;
|
||||
static UBYTE *PtrIff ;
|
||||
static UBYTE *BufferIff ;
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
UBYTE ReadIff()
|
||||
{
|
||||
if( CptIff == 0 )
|
||||
{
|
||||
Read( Handle, BufferIff, 64000L ) ;
|
||||
CptIff = 64000L ;
|
||||
PtrIff =(void *)BufferIff ;
|
||||
}
|
||||
CptIff-- ;
|
||||
return *PtrIff++ ;
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void WriteIff( void *ptrin, ULONG len )
|
||||
{
|
||||
Write( Handle, ptrin, len );
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void WriteIffLong( ULONG data )
|
||||
{
|
||||
WriteIff( (void*)&((UBYTE*)&data)[3], 1L );
|
||||
WriteIff( (void*)&((UBYTE*)&data)[2], 1L );
|
||||
WriteIff( (void*)&((UBYTE*)&data)[1], 1L );
|
||||
WriteIff( (void*)&((UBYTE*)&data)[0], 1L );
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void itoml( void *l )
|
||||
{
|
||||
UBYTE c ;
|
||||
UBYTE *ptc ;
|
||||
|
||||
ptc = (char*)l ;
|
||||
c = ptc[0] ;
|
||||
ptc[0] = ptc[3] ;
|
||||
ptc[3] = c ;
|
||||
c = ptc[1] ;
|
||||
ptc[1] = ptc[2] ;
|
||||
ptc[2] = c ;
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void lit_bmhd()
|
||||
{
|
||||
UBYTE a,b ;
|
||||
|
||||
Read( Handle, &a, 1L ) ;
|
||||
Read( Handle, &b, 1L ) ;
|
||||
larg = ((unsigned int)a)*256 + b ;
|
||||
|
||||
Read( Handle, &a, 1L ) ;
|
||||
Read( Handle, &b, 1L ) ;
|
||||
haut = ((unsigned int)a)*256 + b ;
|
||||
|
||||
Read( Handle, &len, 4L ) ; /* lit 4 octets */
|
||||
Read( Handle, &nbr_plan, 1L );
|
||||
Read( Handle, &Masking, 1L ) ;
|
||||
Read( Handle, &flgcomp, 1L );
|
||||
Read( Handle, &a, 1L ) ; /* pad */
|
||||
Read( Handle, &rejet, 4L ) ;
|
||||
Read( Handle, &rejet, 4L ) ;
|
||||
Larg = larg;
|
||||
if( larg>320 ) larg = 320;
|
||||
if( haut>200 ) haut = 200;
|
||||
Masking &= 1;
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void lit_bloc() /* on a un bloc inconnu */
|
||||
{
|
||||
WORD l ;
|
||||
|
||||
for(l = 0 ; l < (int)len ; l++)
|
||||
Read(Handle, &rejet, 1L ) ; /* a jeter */
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void lit_ligne( UBYTE *ptdst, WORD nboctet )
|
||||
{
|
||||
UBYTE *dst;
|
||||
BYTE o;
|
||||
WORD nb;
|
||||
UWORD i;
|
||||
|
||||
dst = ptdst;
|
||||
if(flgcomp)
|
||||
{
|
||||
while(nboctet > 0)
|
||||
{
|
||||
o = ReadIff();
|
||||
if(o >= 0)
|
||||
{
|
||||
nb = o + 1;
|
||||
nboctet -= nb;
|
||||
for ( i=0 ; i<nb ; i++) *dst++ = ReadIff();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(o != -128)
|
||||
{
|
||||
nb = -o + 1;
|
||||
nboctet -= nb;
|
||||
o = ReadIff();
|
||||
while(nb--) *dst++ = o;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
while( nboctet-- ) *dst++ = ReadIff();
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void ConvertMCGA(UBYTE *bufligne, UBYTE *dst, UWORD nboctet, WORD nbplan )
|
||||
{
|
||||
WORD a,b,p,msk ;
|
||||
UBYTE col ;
|
||||
|
||||
for(a = 0 ; a < nboctet ; a++)
|
||||
{
|
||||
for(b = 0 ; b < 8; b++)
|
||||
{
|
||||
col = 0;
|
||||
msk = tabmsk[7-b] ;
|
||||
for(p = nbplan-1 ; p >= 0 ; p--)
|
||||
{
|
||||
col <<= 1 ;
|
||||
if(*(bufligne + p*nboctet + a) & msk) col++ ;
|
||||
}
|
||||
*dst++ = col;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void lit_bodyILBM( UBYTE *ptr )
|
||||
{
|
||||
WORD lig,nboctet ;
|
||||
UBYTE *bufligne ;
|
||||
|
||||
if ((bufligne = Malloc(MAXBUFLIGNE)) == 0 ) return ;
|
||||
nboctet = RowByte(Larg) ;
|
||||
|
||||
for(lig = 0 ; lig < 200 ; lig++)
|
||||
{
|
||||
memset( bufligne, 0, MAXBUFLIGNE ) ;
|
||||
if (lig < haut )
|
||||
{
|
||||
lit_ligne( bufligne,nboctet*nbr_plan ) ;
|
||||
ConvertMCGA(bufligne,ptr,nboctet,nbr_plan ) ;
|
||||
memset( ptr+nboctet*8,0, 320-nboctet*8 ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
memset( ptr, 0, Lbm_Width ) ;
|
||||
}
|
||||
ptr += Lbm_Width ;
|
||||
}
|
||||
Free( bufligne ) ;
|
||||
}
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void lit_bodyPBM( UBYTE *ptr )
|
||||
{
|
||||
WORD lig ;
|
||||
|
||||
for(lig = 0 ; lig < 200 ; lig++)
|
||||
{
|
||||
lit_ligne( ptr,larg ) ;
|
||||
ptr += Lbm_Width ;
|
||||
}
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
Û ÛßßßÛ ÛßßßÛ ÛßßßÜ Û ÛßßÛ ÛÜ ÜÛ
|
||||
ÛÛ ÛÛ Û ÛÛßßÛ ÛÛ Û ÛÛ ÛÛßßÛ ÛÛß Û
|
||||
ßßßßß ßßßßß ßß ß ßßßß ßßßßß ßßßßß ßßßßß ßß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
LONG Load_Lbm( char *name, UBYTE *ptrscreen, UBYTE *ptrpal )
|
||||
{
|
||||
ULONG len2 ;
|
||||
WORD type = 0 ; /* 0 = ILBM; 1 = PBM */
|
||||
UBYTE *ptr ;
|
||||
|
||||
CptIff = 0;
|
||||
Handle = OpenRead( name ) ;
|
||||
if( !Handle ) return FALSE ;
|
||||
|
||||
BufferIff = Malloc( 64000 ) ;
|
||||
|
||||
/* printf( "%s: ", name ) ; */
|
||||
|
||||
Read( Handle, head, 4L ) ;
|
||||
Read( Handle, &len, 4L ) ; /* lit taille */
|
||||
Read( Handle, head, 4L ) ; /* lit ILBM */
|
||||
if( strcmp( head, "ILBM" )!= 0 ) type = 1; /* PBM */
|
||||
|
||||
while( TRUE )
|
||||
{
|
||||
len2 = Read( Handle, head, 4L ) ;
|
||||
if( len2 != 4 ) break ; /* fin de fichier */
|
||||
Read( Handle, &len, 4L ) ; /* lit taille du chunk */
|
||||
itoml( &len ) ;
|
||||
if( len&1 ) len++ ;
|
||||
if(strcmp(head,"BMHD") == 0) lit_bmhd() ;
|
||||
else
|
||||
if(strcmp(head,"CMAP") == 0) /* pal */
|
||||
Read( Handle, ptrpal, 768 ) ;
|
||||
else
|
||||
if(strcmp(head,"BODY") == 0)
|
||||
{
|
||||
if( type==0 )
|
||||
lit_bodyILBM( ptrscreen ) ;
|
||||
else
|
||||
lit_bodyPBM( ptrscreen ) ;
|
||||
break;
|
||||
}
|
||||
else lit_bloc() ;/* bloc inconnu on le saute */
|
||||
}
|
||||
|
||||
Free( BufferIff ) ;
|
||||
Close( Handle ) ;
|
||||
|
||||
/* printf( "converted to VGA " ) ; */
|
||||
return TRUE ;
|
||||
}
|
||||
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
ÛÛßßß ÛßßßÛ Û Û Ûßßßß Û ÛßßÛ ÛÜ ÜÛ
|
||||
ßßßßÛ ÛÛßßÛ ÛÛ Üß ÛÛßß ÛÛ ÛÛßßÛ ÛÛß Û
|
||||
ßßßßß ßß ß ßßß ßßßßß ßßßßß ßßßßß ßßßßß ßß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
LONG Save_Lbm( char *name, UBYTE *ptrscr, UBYTE *ptrpal )
|
||||
{
|
||||
UWORD nbplan=8,a=0;
|
||||
UWORD resolx = 320;
|
||||
UWORD resoly = 200;
|
||||
UWORD y ;
|
||||
UWORD ligne,colonne;
|
||||
|
||||
Handle = OpenWrite( name );
|
||||
if ( Handle == 0) return 0 ;
|
||||
WriteIff("FORM",4L);
|
||||
WriteIffLong(64816L);
|
||||
WriteIff("PBM ",4L);
|
||||
WriteIff("BMHD",4L);
|
||||
WriteIffLong(20L);
|
||||
WriteIff((void *)&((UBYTE*)&resolx)[1],1L);
|
||||
WriteIff((void *)&((UBYTE*)&resolx)[0],1L);
|
||||
WriteIff((void *)&((UBYTE*)&resoly)[1],1L) ;
|
||||
WriteIff((void *)&((UBYTE*)&resoly)[0],1L) ;
|
||||
WriteIffLong(0L); /* lit 4 octets avant le, */
|
||||
WriteIff(&nbplan,1L);
|
||||
WriteIff(&a,1L);
|
||||
a = 0; /* flg non compilee */
|
||||
WriteIff(&a,1L);
|
||||
WriteIff(&a,1L); /* pad */
|
||||
WriteIffLong(0L);
|
||||
WriteIffLong(0L);
|
||||
|
||||
WriteIff("CMAP",4L); /* pal */
|
||||
WriteIffLong(3*256L);
|
||||
WriteIff(ptrpal,3*256L);
|
||||
|
||||
colonne = 40;
|
||||
ligne = 200;
|
||||
|
||||
WriteIff ("BODY",4L);
|
||||
WriteIffLong ((LONG)(colonne*nbplan*ligne));
|
||||
|
||||
for( y=0; y<200; y++ )
|
||||
{
|
||||
Write( Handle, ptrscr, 320 ) ;
|
||||
ptrscr += Lbm_Width ;
|
||||
}
|
||||
|
||||
/* Write (Handle, ptrscr, 64000L ); */
|
||||
|
||||
Close( Handle );
|
||||
return TRUE ;
|
||||
}
|
||||
209
LIB386/LIB_SVGA/LIB_SVGA.H
Normal file
209
LIB386/LIB_SVGA/LIB_SVGA.H
Normal file
@@ -0,0 +1,209 @@
|
||||
/*-----------------------------------------------------------------------------
|
||||
; Extern lib_svga 386
|
||||
;-----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef WATCOM9
|
||||
#pragma library ( "f:\projet\lib386\lib_svga\lb9_svga.lib" );
|
||||
#else
|
||||
#pragma library ( "f:\projet\lib386\lib_svga\lib_svga.lib" );
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
|
||||
#define SVGA_VESA 0 /* VESA compliant board at Adress 0xA0000 */
|
||||
#define SVGA_TRIDENT 1 /* Trident 8800 & 8900 */
|
||||
#define SVGA_ATI 2 /* ATI Chipset */
|
||||
#define SVGA_S3 3 /* S3 Boards (expect init with VESA mode 102) */
|
||||
#define SVGA_CIRRUS 4 /* Cirrus (some Genoa) (expect init with VESA mode 102) */
|
||||
#define SVGA_TSENG 5 /* Tseng ET3000 & ET4000 */
|
||||
#define SVGA_WESTERN 6 /* Western Digital / Paradise */
|
||||
#define SVGA_GENOA 7 /* REAL Genoa (not Cirrus or ET3000) */
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
extern WORD ClipXmin ;
|
||||
extern WORD ClipYmin ;
|
||||
extern WORD ClipXmax ;
|
||||
extern WORD ClipYmax ;
|
||||
|
||||
extern ULONG TabOffLine ;
|
||||
extern UBYTE *Phys ;
|
||||
extern UBYTE *Log ;
|
||||
extern UBYTE *MemoLog ;
|
||||
extern WORD Screen_X ;
|
||||
extern WORD Screen_Y ;
|
||||
extern UBYTE Text_Ink ;
|
||||
extern UBYTE Text_Paper ;
|
||||
extern UBYTE OldVideo ;
|
||||
extern WORD SizeCar ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
extern WORD Svga_Card ;
|
||||
extern void *BankChange ;
|
||||
extern LONG BankCurrent ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
|
||||
extern WORD TypePoly ;
|
||||
|
||||
extern WORD NbPolyPoints ;
|
||||
|
||||
extern WORD TabPoly[] ;
|
||||
extern WORD TabText[] ;
|
||||
|
||||
extern WORD TabVerticG[] ;
|
||||
extern WORD TabVerticD[] ;
|
||||
extern WORD Ymin ;
|
||||
extern WORD Ymax ;
|
||||
|
||||
extern WORD TabCoulG[] ;
|
||||
extern WORD TabCoulD[] ;
|
||||
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
/* MOUSE.C */
|
||||
extern volatile LONG Click ;
|
||||
extern volatile LONG Mouse_X ;
|
||||
extern volatile LONG Mouse_Y ;
|
||||
extern LONG Mouse_X_Dep ;
|
||||
extern LONG Mouse_Y_Dep ;
|
||||
extern UBYTE *GphMouse ;
|
||||
|
||||
extern void __loadds __far click_handler(int ,int ,int );
|
||||
extern void SetMouseBox(long ,long ,long ,long );
|
||||
extern void SetMouseSpeed(long ,long );
|
||||
extern void SetMousePos(long ,long );
|
||||
extern void GetMouseDep(void);
|
||||
extern void ShowMouse(long );
|
||||
extern void AffMouse(void);
|
||||
extern void SetMouse(short );
|
||||
extern void InitMouse(void);
|
||||
extern void ClearMouse(void);
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_PAL.asm */
|
||||
void PalOne( UBYTE coul, UBYTE r, UBYTE v, UBYTE b ) ;
|
||||
void PalMulti( WORD startcoul, WORD nbcoul, UBYTE *pal ) ;
|
||||
void Palette( void *pal ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* FONT.ASM */
|
||||
void CoulFont( LONG couleur ) ;
|
||||
void SetFont( void *font, LONG interleave, LONG interspace ) ;
|
||||
LONG SizeFont( void *chaine ) ;
|
||||
LONG CarFont( LONG xcar, LONG ycar, LONG car ) ;
|
||||
void Font( LONG xchaine, LONG ychaine, void *chaine ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* GRAPH_A.ASM */
|
||||
void AffGraph( LONG num, LONG x, LONG y, void *bank ) ;
|
||||
void GetDxDyGraph( LONG num, LONG *dx, LONG *dy, void *bank ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* MASK_A.ASM */
|
||||
void AffMask( LONG num, LONG x, LONG y, void *bank ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* InitSvga.asm */
|
||||
void SetClip( LONG x0, LONG y0, LONG x1, LONG y1 ) ;
|
||||
void UnSetClip( void ) ;
|
||||
void MemoClip( void ) ;
|
||||
void RestoreClip( void ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Box.asm */
|
||||
void Box( LONG x0, LONG y0, LONG x1, LONG y1, LONG couleur ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Line.asm */
|
||||
void Line( LONG x0, LONG y0, LONG x1, LONG y1, LONG couleur ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Zoom.asm */
|
||||
void ScaleLine( LONG xa0, LONG xa1, void *src, LONG xb0, LONG xb1, void *dst ) ;
|
||||
void ScaleBox( LONG xa0, LONG ya0, LONG xa1, LONG ya1, void *src,
|
||||
LONG xb0, LONG yb0, LONG xb1, LONG yb1, void *dst ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* CopyMask.asm */
|
||||
void CopyMask( LONG num, LONG x, LONG y, void *bank, void* screen ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Mask_A.asm */
|
||||
void CoulMask( LONG coulmask ) ;
|
||||
void AffMask( LONG num, LONG x, LONG y, void *bank ) ;
|
||||
void GetDxDyMask( LONG num, LONG *dx, LONG *dy, void *bank ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_PLOT.asm.asm */
|
||||
void Plot( LONG x, LONG y, LONG couleur ) ;
|
||||
LONG GetPlot( LONG x, LONG y ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_SCREEN.asm */
|
||||
void Cls( void ) ;
|
||||
void CopyScreen( void *src, void *dst ) ;
|
||||
void Vsync( void ) ;
|
||||
void Flip( void ) ;
|
||||
void FlipComp( void ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_STRING.asm */
|
||||
void AffString( LONG x, LONG y, void *text ) ;
|
||||
void CoulText( LONG coul0, LONG coul1 ) ;
|
||||
extern UBYTE Font8X8 ;
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_BLOCK2.asm */
|
||||
void CopyBlockOnBlack( LONG x0, LONG y0, LONG x1, LONG y1, void *src, void *dst ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* GRAPHMSK.asm */
|
||||
LONG CalcGraphMsk( LONG num, void *bank, void *mask ) ;
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_BLOCK.asm */
|
||||
void CopyBlock( LONG x0, LONG y0, LONG x1, LONG y1, void *src,
|
||||
LONG xd, LONG yd, void *dst ) ;
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_BLOCK3.asm */
|
||||
void CopyBlockIncrust( LONG x0, LONG y0, LONG x1, LONG y1, void *src,
|
||||
LONG xd, LONG yd, void *dst ) ;
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* S_PHYS.asm */
|
||||
// void CopyBlockIncrust( LONG x0, LONG y0, LONG x1, LONG y1 ) ;
|
||||
void CopyBlockPhysClip( LONG x0, LONG y0, LONG x1, LONG y1 ) ;
|
||||
void CopyBlockPhys( LONG x0, LONG y0, LONG x1, LONG y1 ) ;
|
||||
void SaveBlock( void *screen, void *buffer, LONG x, LONG y, LONG dx, LONG dy ) ;
|
||||
void RestoreBlock( void *screen, void *buffer, LONG x, LONG y, LONG dx, LONG dy ) ;
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* LBM.c 320*200 */
|
||||
|
||||
extern WORD Lbm_Width ; // 640 or 320 (for source format)
|
||||
|
||||
extern unsigned char ReadIff(void);
|
||||
extern void WriteIff(void *,unsigned long );
|
||||
extern void WriteIffLong(unsigned long );
|
||||
extern void itoml(void *);
|
||||
extern void lit_bmhd(void);
|
||||
extern void lit_bloc(void);
|
||||
extern void lit_ligne(unsigned char *,short );
|
||||
extern void ConvertMCGA(unsigned char *,unsigned char *,unsigned short ,short );
|
||||
extern void lit_bodyILBM(unsigned char *);
|
||||
extern void lit_bodyPBM(unsigned char *);
|
||||
extern long Load_Lbm(char *,unsigned char *,unsigned char *);
|
||||
extern long Save_Lbm(char *,unsigned char *,unsigned char *);
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* PCX.c 640*480 */
|
||||
|
||||
extern void line_out(unsigned char *);
|
||||
extern unsigned char next_char(unsigned long ,unsigned char *);
|
||||
extern void Load_Pcx(char *,unsigned char *,unsigned char *);
|
||||
extern void Save_Pcx(char *,unsigned char *,unsigned char *);
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* s_dll.c */
|
||||
|
||||
extern long SvgaInitDLL(char *);
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* s_text.c */
|
||||
extern void Text(short ,short ,char * ,... );
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* s_rect.c */
|
||||
|
||||
extern void Rect(long ,long ,long ,long ,long );
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* initmode.c */
|
||||
|
||||
extern void InitGraphSvga(void);
|
||||
extern void ClearGraphSvga(void);
|
||||
extern void InitGraphMcga(void);
|
||||
extern void ClearGraphMcga(void);
|
||||
66
LIB386/LIB_SVGA/MAKEFILE
Normal file
66
LIB386/LIB_SVGA/MAKEFILE
Normal file
@@ -0,0 +1,66 @@
|
||||
# name the compiler
|
||||
!ifdef %HOME
|
||||
!ifeq WATCOM9 yes
|
||||
CC = c:\compil\watcom\bin\wcc386p
|
||||
WL = c:\compil\watcom\binb\wlib
|
||||
!else
|
||||
CC = c:\compil\watcom10\binb\wcc386
|
||||
WL = c:\compil\watcom10\binb\wlib
|
||||
!endif
|
||||
!else
|
||||
!ifeq WATCOM9 yes
|
||||
CC = f:\compil\watcom\bin\wcc386p
|
||||
WL = f:\compil\watcom\binb\wlib
|
||||
!else
|
||||
CC = f:\compil\watcom10\binb\wcc386
|
||||
WL = f:\compil\watcom10\binb\wlib
|
||||
!endif
|
||||
!endif
|
||||
|
||||
ASM = ml
|
||||
|
||||
!ifeq WATCOM9 yes
|
||||
CFLAGS = /oeaxt /zp2 /4s /zq /s /DWATCOM9
|
||||
!else
|
||||
CFLAGS = /oeaxt /zp2 /5s /zq /s
|
||||
!endif
|
||||
LFLAGS = /c /q /b /n
|
||||
#AFLAGS = /m2 /mx /z /zi /t /jMASM51 /jQUIRKS
|
||||
AFLAGS = /Cx /Zm /c /W0 /Sa /DNoLanguage=SYSCALL /Djumps=;
|
||||
|
||||
|
||||
OBJETS1 = InitMode.obj InitSvga.obj Graph_A.obj
|
||||
OBJETS2 = S_Text.obj S_string.obj S_Mouse.Obj Mask_A.obj Font_A.obj
|
||||
OBJETS3 = S_Screen.obj S_Block.obj S_Block2.obj S_Pal.obj
|
||||
OBJETS4 = S_Plot.obj S_Box.obj S_Line.obj S_Poly.obj S_FillV.obj
|
||||
OBJETS5 = S_MouseA.obj Rect.obj Zoom.obj MaskGph.obj GraphMsk.obj
|
||||
OBJETS6 = S_Phys.obj texture.obj s_block3.obj Lbm.obj Pcx.obj
|
||||
OBJETS7 = S_Dll.obj vesa.obj Gif.obj
|
||||
|
||||
!ifeq WATCOM9 yes
|
||||
LIB = LB9_SVGA
|
||||
!else
|
||||
LIB = LIB_SVGA
|
||||
!endif
|
||||
|
||||
$(LIB).LIB: $(OBJETS1) $(OBJETS2) $(OBJETS3) $(OBJETS4) $(OBJETS5) $(OBJETS6) $(OBJETS7)
|
||||
|
||||
@echo $(OBJETS1) > clibmak.rsp
|
||||
@echo $(OBJETS2) >> clibmak.rsp
|
||||
@echo $(OBJETS3) >> clibmak.rsp
|
||||
@echo $(OBJETS4) >> clibmak.rsp
|
||||
@echo $(OBJETS5) >> clibmak.rsp
|
||||
@echo $(OBJETS6) >> clibmak.rsp
|
||||
@echo $(OBJETS7) >> clibmak.rsp
|
||||
|
||||
@$(WL) $(LIBFLAGS) $(LIB) @clibmak.rsp
|
||||
@del clibmak.rsp
|
||||
@prntitre M "$(LIB) OK"
|
||||
|
||||
.asm.obj:
|
||||
@PRNTITRE M "$*.ASM"
|
||||
@$(ASM) $(AFLAGS) $*.ASM
|
||||
|
||||
.c.obj:
|
||||
@PRNTITRE M "$*.C"
|
||||
@$(CC) $(CFLAGS) $*
|
||||
62
LIB386/LIB_SVGA/MASKGPH.C
Normal file
62
LIB386/LIB_SVGA/MASKGPH.C
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <i86.h>
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
ULONG CreateMaskGph( UBYTE *ptsrc, UBYTE *ptdst )
|
||||
{
|
||||
UBYTE *ptd ;
|
||||
ULONG nbg, off;
|
||||
ULONG *ptoff ;
|
||||
ULONG size, i ;
|
||||
|
||||
ptoff = (ULONG*)ptdst ;
|
||||
|
||||
off = *(ULONG *)ptsrc ;/* First Offset Src */
|
||||
|
||||
*ptoff++ = off ;/* First Offset */
|
||||
|
||||
ptd = ptdst+off ;
|
||||
|
||||
nbg = (off-4)>>2 ;/* Nombre de Graph */
|
||||
|
||||
for ( i = 0 ; i < nbg ; i++ )
|
||||
{
|
||||
size = CalcGraphMsk( i, ptsrc, ptd ) ;
|
||||
|
||||
off += size ;/* Maj Offset */
|
||||
*ptoff++ = off ;/* Write Offset */
|
||||
ptd += size ;/* Maj Pt Dest */
|
||||
}
|
||||
return(off) ;
|
||||
}
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
318
LIB386/LIB_SVGA/MASK_A.ASM
Normal file
318
LIB386/LIB_SVGA/MASK_A.ASM
Normal file
@@ -0,0 +1,318 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; Mask_A.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
;----------------------------------------------------------------------------
|
||||
include \projet\lib386\lib_svga\svga.ash
|
||||
comment @
|
||||
DWORD TabOffset[]
|
||||
Brick:
|
||||
- BYTE Delta X
|
||||
- BYTE Delta Y
|
||||
Line(Delta Y):
|
||||
- BYTE NbBlock
|
||||
Block 0: Nb Zero to Jump
|
||||
Block 1: Nb Zero to Write
|
||||
Block 2: Nb Zero to Jump
|
||||
etc...
|
||||
@
|
||||
|
||||
BufferClip db 512 dup(?)
|
||||
|
||||
ColMask db 0 ; Noir par Defaut
|
||||
|
||||
ALIGN 4
|
||||
|
||||
OffsetBegin dd 0
|
||||
NbPix dd 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CoulMask
|
||||
public NoLanguage AffMask
|
||||
public NoLanguage AffMask_Asm
|
||||
public NoLanguage GetDxDyMask
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
CoulMask proc ,\
|
||||
coul:DWORD
|
||||
|
||||
mov eax, coul
|
||||
mov byte ptr [ColMask], al
|
||||
ret
|
||||
|
||||
CoulMask endp
|
||||
;----------------------------------------------------------------------------
|
||||
AffMask proc uses esi edi ebx ebp,\
|
||||
nummask:DWORD, xmask:DWORD, ymask:DWORD, \
|
||||
bankmask:DWORD
|
||||
|
||||
mov eax, nummask
|
||||
mov ebx, xmask
|
||||
mov ecx, ymask
|
||||
mov esi, bankmask
|
||||
|
||||
Call AffMask_Asm
|
||||
|
||||
ret
|
||||
|
||||
AffMask endp
|
||||
;----------------------------------------------------------------------------
|
||||
AffMask_Asm proc
|
||||
|
||||
add esi, [esi+eax*4] ; ESI = Begin Data
|
||||
|
||||
xor eax, eax
|
||||
mov al, [esi+2]
|
||||
add ebx, eax ; Hot X
|
||||
mov al, [esi+3]
|
||||
add ecx, eax ; Hot Y
|
||||
|
||||
;-----------------------------------------------
|
||||
|
||||
xor edx, edx
|
||||
mov dl, [esi] ; Delta X
|
||||
mov al, [esi+1] ; Nb Line ( Delta Y )
|
||||
add esi, 4 ; Jump HotX & HotY
|
||||
|
||||
;----------------------------------------------- Test Clipping
|
||||
|
||||
add edx, ebx
|
||||
add eax, ecx
|
||||
dec edx
|
||||
dec eax
|
||||
|
||||
cmp ebx, ClipXmin
|
||||
jl ClippingMask
|
||||
cmp ecx, ClipYmin
|
||||
jl ClippingMask
|
||||
cmp edx, ClipXmax
|
||||
jg ClippingMask
|
||||
cmp eax, ClipYmax
|
||||
jg ClippingMask
|
||||
|
||||
inc edx
|
||||
inc eax
|
||||
sub edx, ebx
|
||||
sub eax, ecx
|
||||
|
||||
;----------------------------------------------- Calcul Offset Ecran
|
||||
mov edi, Log
|
||||
add edi, TabOffLine[ecx*4]
|
||||
add edi, ebx
|
||||
mov bh, al ; BH = NbLine
|
||||
sub edx, Screen_X ; EDX = Offset Screen
|
||||
neg edx ; EDX = Screen_X-edx
|
||||
xor ecx, ecx ; Maz Compteur
|
||||
mov ebp, edx ; EBP Offset Next Line
|
||||
mov al, byte ptr [ColMask]; Couleur du Masque
|
||||
mov ah, al
|
||||
;----------------------------------------------- Init NbBlock for this line
|
||||
NextLine: mov bl, [esi] ; BL = Nb Block for this line
|
||||
inc esi
|
||||
;----------------------------------------------- Manage One Line
|
||||
SameLine: mov cl, [esi] ; Nb Zero to Jump
|
||||
add edi, ecx ; Incrust
|
||||
dec bl
|
||||
je EndBlock
|
||||
mov cl, [esi+1] ; Nb Zero to Write
|
||||
add esi, 2
|
||||
shr ecx, 1
|
||||
rep stosw ; Write Zero
|
||||
jnc nobyte
|
||||
stosb
|
||||
nobyte: dec bl ; Nb Block--
|
||||
jne SameLine ; Continue Same Line
|
||||
add edi, ebp ; EDI += Offset Next Line
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
ret
|
||||
EndBlock:
|
||||
inc esi
|
||||
add edi, ebp ; EDI += Offset Next Line
|
||||
dec bh ; NbLine--
|
||||
jne NextLine ; Next Line
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------- Clipping
|
||||
; Graph : ( EBX, ECX ) ( EDX, EAX )
|
||||
ClippingMask:
|
||||
cmp ebx, ClipXmax
|
||||
jg EndMask
|
||||
cmp ecx, ClipYmax
|
||||
jg EndMask
|
||||
cmp edx, ClipXmin
|
||||
jl EndMask
|
||||
cmp eax, ClipYmin
|
||||
jl EndMask
|
||||
|
||||
cmp ecx, ClipYmin
|
||||
jge PasHaut
|
||||
|
||||
;---------------------- Clipping Haut, Saute ClipYmin-ECX Line(s)
|
||||
|
||||
sub ecx, ClipYmin
|
||||
neg ecx
|
||||
|
||||
mov ebp, eax
|
||||
;----------------------
|
||||
xor eax, eax
|
||||
|
||||
NextH: mov al, [esi] ; NbBlock
|
||||
lea esi, [esi+1+eax] ; Jump Data
|
||||
dec ecx
|
||||
jnz NextH
|
||||
|
||||
mov eax, ebp
|
||||
|
||||
mov ecx, ClipYmin ; New Y Haut
|
||||
|
||||
;---------------------- Clipping Bas
|
||||
PasHaut: cmp eax, ClipYmax
|
||||
jle PasBas
|
||||
mov eax, ClipYmax
|
||||
;---------------------- Clipping Gauche
|
||||
Pasbas: mov OffsetBegin, 0
|
||||
cmp ebx, ClipXmin
|
||||
jge PasGauche
|
||||
push eax
|
||||
mov eax, ClipXmin
|
||||
sub eax, ebx
|
||||
mov OffsetBegin, eax
|
||||
pop eax
|
||||
;---------------------- Clipping Droit
|
||||
PasGauche: mov ebp, edx
|
||||
sub ebp, ebx
|
||||
sub ebp, OffsetBegin
|
||||
inc ebp
|
||||
mov NbPix, ebp
|
||||
|
||||
cmp edx, ClipXmax
|
||||
jle PasDroit
|
||||
|
||||
sub edx, ClipXmax
|
||||
sub NbPix, edx
|
||||
mov edx, ClipXmax
|
||||
;----------------------
|
||||
PasDroit:
|
||||
|
||||
mov edi, Log
|
||||
add edi, TabOffLine[ecx*4]
|
||||
add edi, ebx
|
||||
|
||||
|
||||
sub eax, ecx
|
||||
inc al
|
||||
mov bh, al ; BH NbLine
|
||||
xor ecx, ecx
|
||||
mov ebp, edi
|
||||
;----------------------------------------------
|
||||
mov dl, byte ptr [ColMask]
|
||||
mov dh, dl
|
||||
; ESI = DATAS LINE
|
||||
NextL: lea edi, BufferClip ; EDI = BUFFERCLIP
|
||||
mov bl, [esi] ; NbBlock
|
||||
inc esi
|
||||
SameL: mov cl, [esi]
|
||||
xor ax, ax
|
||||
shr ecx, 1
|
||||
rep stosw
|
||||
jnc nobyte1
|
||||
stosb
|
||||
nobyte1: dec bl
|
||||
je EndLine
|
||||
mov cl, [esi+1]
|
||||
add esi, 2
|
||||
mov ax, dx ; ColMask
|
||||
shr ecx, 1
|
||||
rep stosw
|
||||
jnc nobyte2
|
||||
stosb
|
||||
nobyte2: dec bl
|
||||
jne SameL
|
||||
dec esi
|
||||
;----------------------
|
||||
EndLine: inc esi
|
||||
push esi ; SAVE ESI
|
||||
mov ecx, OffsetBegin
|
||||
lea edi, [ebp+ecx] ; EDI = SCREEN
|
||||
lea esi, [BufferClip+ecx] ; ESI = BUFFERCLIP
|
||||
mov ecx, NbPix
|
||||
Again: lodsb
|
||||
or al, al
|
||||
je Incrust
|
||||
mov [edi], al
|
||||
Incrust: inc edi
|
||||
dec ecx
|
||||
jnz Again
|
||||
add ebp, 640
|
||||
pop esi
|
||||
dec bh
|
||||
jne NextL
|
||||
|
||||
;----------------------
|
||||
EndMask: ret
|
||||
AffMask_Asm endp
|
||||
;----------------------------------------------------------------------------
|
||||
GetDxDyMask proc uses esi edi ebx,\
|
||||
num:DWORD, ptdx:DWORD, ptdy:DWORD, bankmask:DWORD
|
||||
|
||||
mov esi, bankmask
|
||||
mov eax, num
|
||||
add esi, [esi+eax*4]
|
||||
mov edi, ptdx
|
||||
xor eax, eax
|
||||
mov al, [esi]
|
||||
mov [edi], eax
|
||||
mov edi, ptdy
|
||||
mov al, [esi+1]
|
||||
mov [edi], eax
|
||||
ret
|
||||
GetDxDyMask endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4
LIB386/LIB_SVGA/MODEL.INC
Normal file
4
LIB386/LIB_SVGA/MODEL.INC
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
.model large,c
|
||||
|
||||
|
||||
BIN
LIB386/LIB_SVGA/MOUSE.GPH
Normal file
BIN
LIB386/LIB_SVGA/MOUSE.GPH
Normal file
Binary file not shown.
BIN
LIB386/LIB_SVGA/MOUSE.PCX
Normal file
BIN
LIB386/LIB_SVGA/MOUSE.PCX
Normal file
Binary file not shown.
218
LIB386/LIB_SVGA/PCX.C
Normal file
218
LIB386/LIB_SVGA/PCX.C
Normal file
@@ -0,0 +1,218 @@
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
ÛßßßÛ Ûßßßß ßÜ Üß
|
||||
ÛÛßßß ÛÛ ÜßÜ
|
||||
ßß ßßßßß ß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
|
||||
struct ffblk {
|
||||
char ff_reserved[21];
|
||||
char ff_attrib;
|
||||
unsigned ff_ftime;
|
||||
unsigned ff_fdate;
|
||||
long ff_fsize;
|
||||
char ff_name[13];
|
||||
};
|
||||
|
||||
union REGS reg;
|
||||
|
||||
struct SREGS segregs;
|
||||
|
||||
static struct {
|
||||
char password;
|
||||
char version;
|
||||
char encoding;
|
||||
char bits_per_pixel;
|
||||
short int xmin, ymin, xmax, ymax;
|
||||
short int xres, yres;
|
||||
unsigned char palette[48];
|
||||
char reserved;
|
||||
char no_of_planes;
|
||||
short int bytes_per_line;
|
||||
short int palette_type;
|
||||
char filler[58];
|
||||
} pcx_header;
|
||||
|
||||
short int srcseg, srcoff, destseg, destoff;
|
||||
short int xres, yres, active_bank, bank;
|
||||
short int attr, i, j, k, dir_index= 0, type, length[7];
|
||||
|
||||
short int column, end, done, level,key, start_x, start_y, start_angle,
|
||||
cursor_x, cursor_y, mode;
|
||||
|
||||
struct ffblk ffblk;
|
||||
|
||||
long int col,row;
|
||||
|
||||
short int index = 0 ;
|
||||
|
||||
#define SIZE_BUF 2048L
|
||||
|
||||
UBYTE *PtDest ;
|
||||
|
||||
LONG debugline=0 ;
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void line_out( UBYTE *pts )
|
||||
{
|
||||
UBYTE *pt ;
|
||||
WORD i ;
|
||||
|
||||
pt = pts ;
|
||||
|
||||
for ( i = 0 ; i < 640 ; i++ ) *PtDest++ = *pt++ ;
|
||||
|
||||
/* Box( 0, 0, 160, 7, 0 ) ;
|
||||
Text( 0, 0, "Ligne:%d", debugline++ ) ;
|
||||
CopyBlockPhys( 0, 0, 160, 7 ) ;
|
||||
*/
|
||||
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
UBYTE next_char( ULONG fd, UBYTE *pt)
|
||||
{
|
||||
if ( index == SIZE_BUF )
|
||||
{
|
||||
index = 0 ;
|
||||
Read( fd, pt, SIZE_BUF );
|
||||
}
|
||||
|
||||
return(pt[index++]) ;
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
Û ÛßßßÛ ÛßßßÛ ÛßßßÜ ÛßßßÛ Ûßßßß ßÜ Üß
|
||||
ÛÛ ÛÛ Û ÛÛßßÛ ÛÛ Û ÛÛßßß ÛÛ ÜßÜ
|
||||
ßßßßß ßßßßß ßß ß ßßßß ßßßßß ßß ßßßßß ß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void Load_Pcx(char *file_name, UBYTE *screen, UBYTE *tabcol)
|
||||
{
|
||||
ULONG fd ;
|
||||
FILE *fsave ;
|
||||
unsigned char ch,color,buffer[650],file_buf[SIZE_BUF] ;
|
||||
short int i,j,k,m,pass,col,row,plane ;
|
||||
|
||||
|
||||
PtDest = screen ;
|
||||
|
||||
fd = OpenRead( file_name ) ;
|
||||
|
||||
Read( fd, &pcx_header, 128L ) ;
|
||||
|
||||
Seek( fd, -768L, SEEK_END ) ;
|
||||
|
||||
Read( fd, tabcol, 768 ) ;
|
||||
|
||||
Seek( fd, 128L, SEEK_START ) ;
|
||||
|
||||
index = SIZE_BUF ;/* For Load in next_char */
|
||||
|
||||
for ( row=pcx_header.ymin ; row<=pcx_header.ymax ; row++ )
|
||||
{
|
||||
for ( col=pcx_header.xmin ; col<=pcx_header.xmax ; col++ )
|
||||
{
|
||||
ch = next_char( fd, file_buf ) ;
|
||||
if ((ch & 0xC0) != 0xC0)
|
||||
pass = 1 ;
|
||||
else
|
||||
{
|
||||
pass = ch & 0x3F ;
|
||||
ch = next_char( fd, file_buf );
|
||||
}
|
||||
|
||||
for ( m=0 ; m<pass ; m++ )
|
||||
buffer[col++] = ch ;
|
||||
col--;
|
||||
}
|
||||
line_out( buffer ) ;
|
||||
}
|
||||
Close( fd ) ;
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
ÛÛßßß ÛßßßÛ Û Û Ûßßßß ÛßßßÛ Ûßßßß ßÜ Üß
|
||||
ßßßßÛ ÛÛßßÛ ÛÛ Üß ÛÛßß ÛÛßßß ÛÛ ÜßÜ
|
||||
ßßßßß ßß ß ßßß ßßßßß ßßßßß ßß ßßßßß ß ß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void Save_Pcx( char *filename, UBYTE *screen, UBYTE *ptrpalette )
|
||||
{
|
||||
short int index = 0, i,k,number,num_out ;
|
||||
unsigned char ch, old_ch, file_buf[640*2];
|
||||
ULONG handle ;
|
||||
UBYTE c ;
|
||||
|
||||
pcx_header.password = 0x0A;
|
||||
pcx_header.version = 0x05;
|
||||
pcx_header.encoding = 0x01;
|
||||
pcx_header.xmin = 0;
|
||||
pcx_header.ymin = 0;
|
||||
pcx_header.reserved = 0;
|
||||
pcx_header.palette_type = 0;
|
||||
|
||||
/* 640 x 480 - 256 colors */
|
||||
pcx_header.bits_per_pixel = 0x08;
|
||||
pcx_header.xmax = 639;
|
||||
pcx_header.ymax = 479;
|
||||
pcx_header.xres = 640;
|
||||
pcx_header.yres = 480;
|
||||
pcx_header.no_of_planes = 1 ;
|
||||
pcx_header.bytes_per_line = 640 ;
|
||||
|
||||
handle = OpenWrite( filename ) ;
|
||||
|
||||
Write( handle, &pcx_header, 128 ) ;
|
||||
|
||||
for ( k = pcx_header.ymin ; k <= pcx_header.ymax ; k++ )
|
||||
{
|
||||
number = 1 ;
|
||||
|
||||
old_ch = *( screen + 640*k ) ;
|
||||
|
||||
for ( i = 1 ; i <= 640; i++ )
|
||||
{
|
||||
if ( i == 640 ) ch = old_ch-1 ;
|
||||
else ch = *( screen + 640*k + i ) ;
|
||||
|
||||
if (( ch == old_ch ) && number < 63 ) number++ ;
|
||||
else
|
||||
{
|
||||
num_out = ((unsigned char) number | 0xC0);
|
||||
if ((number != 1) || ((old_ch & 0xC0) == 0xC0))
|
||||
file_buf[index++] = num_out;
|
||||
file_buf[index++] = old_ch;
|
||||
old_ch = ch;
|
||||
number = 1;
|
||||
}
|
||||
}
|
||||
|
||||
Write( handle, file_buf, index );
|
||||
index = 0 ;
|
||||
}
|
||||
|
||||
c = 0x0C ;
|
||||
Write( handle, &c, 1 ) ;
|
||||
|
||||
Write( handle, ptrpalette ,768 ) ;
|
||||
|
||||
Close( handle ) ;
|
||||
}
|
||||
|
||||
|
||||
17
LIB386/LIB_SVGA/RECT.C
Normal file
17
LIB386/LIB_SVGA/RECT.C
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <i86.h>
|
||||
|
||||
void Rect( LONG x0, LONG y0, LONG x1, LONG y1, LONG coul )
|
||||
{
|
||||
Line( x0, y0, x1, y0, coul ) ;
|
||||
Line( x0, y1, x1, y1, coul ) ;
|
||||
Line( x0, y0, x0, y1, coul ) ;
|
||||
Line( x1, y0, x1, y1, coul ) ;
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
108
LIB386/LIB_SVGA/SAVEPCX.C
Normal file
108
LIB386/LIB_SVGA/SAVEPCX.C
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º SAVETEST = PROGRAM TO STORE .PCX GRAPHICS FILES º
|
||||
º º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
*/
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
|
||||
/* voir pcx.c */
|
||||
|
||||
static struct {
|
||||
char password;
|
||||
char version;
|
||||
char encoding;
|
||||
char bits_per_pixel;
|
||||
short int xmin, ymin, xmax, ymax;
|
||||
short int xres, yres;
|
||||
unsigned char palette[48];
|
||||
char reserved;
|
||||
char no_of_planes;
|
||||
short int bytes_per_line;
|
||||
short int palette_type;
|
||||
char filler[58];
|
||||
} pcx_header;
|
||||
|
||||
|
||||
/*
|
||||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
º º
|
||||
º º
|
||||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
*/
|
||||
|
||||
void PcxSave( UBYTE *filename, UBYTE *screen, UBYTE *ptrpalette )
|
||||
|
||||
{
|
||||
short int index = 0, i,k,number,num_out ;
|
||||
unsigned char ch, old_ch, file_buf[640*2];
|
||||
ULONG handle ;
|
||||
UBYTE c ;
|
||||
|
||||
pcx_header.password = 0x0A;
|
||||
pcx_header.version = 0x05;
|
||||
pcx_header.encoding = 0x01;
|
||||
pcx_header.xmin = 0;
|
||||
pcx_header.ymin = 0;
|
||||
pcx_header.reserved = 0;
|
||||
pcx_header.palette_type = 0;
|
||||
|
||||
/* 640 x 480 - 256 colors */
|
||||
pcx_header.bits_per_pixel = 0x08;
|
||||
pcx_header.xmax = 639;
|
||||
pcx_header.ymax = 479;
|
||||
pcx_header.xres = 640;
|
||||
pcx_header.yres = 480;
|
||||
pcx_header.no_of_planes = 1 ;
|
||||
pcx_header.bytes_per_line = 640 ;
|
||||
|
||||
handle = OpenWrite( filename ) ;
|
||||
|
||||
Write( handle, &pcx_header, 128 ) ;
|
||||
|
||||
for ( k = pcx_header.ymin ; k <= pcx_header.ymax ; k++ )
|
||||
{
|
||||
number = 1 ;
|
||||
|
||||
old_ch = *( screen + 640*k ) ;
|
||||
|
||||
for ( i = 1 ; i <= 640; i++ )
|
||||
{
|
||||
if ( i == 640 ) ch = old_ch-1 ;
|
||||
else ch = *( screen + 640*k + i ) ;
|
||||
|
||||
if (( ch == old_ch ) && number < 63 ) number++ ;
|
||||
else
|
||||
{
|
||||
num_out = ((unsigned char) number | 0xC0);
|
||||
if ((number != 1) || ((old_ch & 0xC0) == 0xC0))
|
||||
file_buf[index++] = num_out;
|
||||
file_buf[index++] = old_ch;
|
||||
old_ch = ch;
|
||||
number = 1;
|
||||
}
|
||||
}
|
||||
|
||||
Write( handle, file_buf, index );
|
||||
index = 0 ;
|
||||
}
|
||||
|
||||
c = 0x0C ;
|
||||
Write( handle, &c, 1 ) ;
|
||||
|
||||
Write( handle, ptrpalette ,768 ) ;
|
||||
|
||||
Close( handle ) ;
|
||||
}
|
||||
|
||||
|
||||
36
LIB386/LIB_SVGA/SVGA.ASH
Normal file
36
LIB386/LIB_SVGA/SVGA.ASH
Normal file
@@ -0,0 +1,36 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Extern lib_svga 386
|
||||
;-----------------------------------------------------------------------------
|
||||
.data
|
||||
|
||||
extrn NoLanguage ClipXmin :DWORD
|
||||
extrn NoLanguage ClipYmin :DWORD
|
||||
extrn NoLanguage ClipXmax :DWORD
|
||||
extrn NoLanguage ClipYmax :DWORD
|
||||
extrn NoLanguage Phys :DWORD
|
||||
extrn NoLanguage Log :DWORD
|
||||
extrn NoLanguage MemoLog :DWORD
|
||||
extrn NoLanguage BankCurrent :DWORD
|
||||
|
||||
extrn NoLanguage Screen_X :DWORD
|
||||
extrn NoLanguage Screen_Y :DWORD
|
||||
extrn NoLanguage TabOffLine :DWORD
|
||||
|
||||
extrn NoLanguage SizeCar :WORD
|
||||
|
||||
extrn NoLanguage Text_Ink :BYTE
|
||||
extrn NoLanguage Text_Paper :BYTE
|
||||
extrn NoLanguage OldVideo :BYTE
|
||||
|
||||
POLY_TRISTE equ 0
|
||||
POLY_COPPER equ 1
|
||||
POLY_BOPPER equ 2
|
||||
POLY_MARBRE equ 3
|
||||
POLY_TELE equ 4
|
||||
POLY_TRANS equ 5
|
||||
POLY_TRAME equ 6
|
||||
POLY_GOURAUD equ 7
|
||||
POLY_DITHER equ 8
|
||||
|
||||
|
||||
|
||||
285
LIB386/LIB_SVGA/S_BLOCK.ASM
Normal file
285
LIB386/LIB_SVGA/S_BLOCK.ASM
Normal file
@@ -0,0 +1,285 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_BLOCK.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include f:\projet\lib386\lib_svga\svga.ash
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyBlock
|
||||
public NoLanguage SaveBlock
|
||||
public NoLanguage RestoreBlock
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlock( x0, y0, x1, y1, *src, xd, yd, *dst )
|
||||
;
|
||||
CopyBlock proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD, src:DWORD,\
|
||||
xd:DWORD, yd:DWORD, dst:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;----------------------
|
||||
|
||||
mov esi, TabOffLine[ecx*4]
|
||||
add esi, src
|
||||
add esi, edx ; SI Offset Src
|
||||
|
||||
mov edi, yd
|
||||
mov edi, TabOffLine[edi*4]
|
||||
add edi, dst
|
||||
add edi, xd ; DI Offset Dst
|
||||
|
||||
sub ebx, edx
|
||||
inc ebx ; BX Delta Y
|
||||
|
||||
sub eax, ecx
|
||||
inc eax ; AX Delta X
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
|
||||
mov ebp, ebx
|
||||
inc eax
|
||||
shr ebx, 2
|
||||
and ebp, 11b
|
||||
|
||||
shr eax, 1
|
||||
jnc short odd
|
||||
Again:
|
||||
mov ecx, ebx
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
odd:
|
||||
mov ecx, ebx
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
|
||||
dec eax
|
||||
jnz short Again
|
||||
|
||||
CopyBlock_End: ret
|
||||
|
||||
CopyBlock endp
|
||||
|
||||
comment @
|
||||
|
||||
CopyBlock proc uses esi edi ebx,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD, src:DWORD,\
|
||||
xd:DWORD, yd:DWORD, dst:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;----------------------
|
||||
|
||||
mov esi, TabOffLine[ecx*4] ; y0
|
||||
add esi, src
|
||||
add esi, edx ; SI Offset Src
|
||||
|
||||
mov edi, yd
|
||||
mov edi, TabOffLine[edi*4]
|
||||
add edi, dst
|
||||
add edi, xd ; DI Offset Dst
|
||||
|
||||
sub ebx, edx
|
||||
inc ebx ; BX Delta Y
|
||||
|
||||
sub eax, ecx
|
||||
inc eax ; AX Delta X
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
dec eax
|
||||
jne short Again
|
||||
CopyBlock_End: ret
|
||||
CopyBlock endp
|
||||
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; SaveBlock( *screen, *buffer, x0, y0, dx, dy )
|
||||
;
|
||||
; DS:SI *screen
|
||||
; ES:DI *buffer
|
||||
; AX x0
|
||||
; BX y0
|
||||
; CX dx
|
||||
; dx dy
|
||||
;
|
||||
|
||||
SaveBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD
|
||||
|
||||
mov edi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov esi, TabOffLine[ebx*4]
|
||||
add esi, eax
|
||||
add esi, screen ; SI Offset Src
|
||||
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov eax, Screen_X
|
||||
sub eax, ebx ; bp Delta Screen
|
||||
|
||||
mov ebp, ebx
|
||||
inc edx
|
||||
shr ebx, 2
|
||||
and ebp, 11b
|
||||
|
||||
shr edx, 1
|
||||
jnc short odd
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, eax
|
||||
odd:
|
||||
mov ecx, ebx ; Delta X
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, eax
|
||||
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
SaveBlock endp
|
||||
|
||||
comment @
|
||||
|
||||
SaveBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD,\
|
||||
|
||||
mov edi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov esi, TabOffLine[ebx*4]
|
||||
add esi, eax ; SI Offset Src
|
||||
add esi, screen
|
||||
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov ebp, Screen_X
|
||||
sub ebp, ebx ; bp Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add esi, ebp
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
SaveBlock endp
|
||||
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; RestoreBlock( *buffer, *screen, x0, y0, dx, dy )
|
||||
;
|
||||
; DS:SI *buffer
|
||||
; ES:DI *screen
|
||||
; AX x0
|
||||
; BX y0
|
||||
; CX x1
|
||||
; dx y1
|
||||
; Already Clipped
|
||||
;
|
||||
RestoreBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD
|
||||
|
||||
mov esi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov edi, TabOffLine[ebx*4]
|
||||
add edi, eax ; SI Offset Src
|
||||
add edi, screen
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov ebp, Screen_X
|
||||
sub ebp, ebx ; bp Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add edi, ebp
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
RestoreBlock endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
124
LIB386/LIB_SVGA/S_BLOCK2.ASM
Normal file
124
LIB386/LIB_SVGA/S_BLOCK2.ASM
Normal file
@@ -0,0 +1,124 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_BLOCK2.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
EVEN
|
||||
|
||||
CptPixl dw 0
|
||||
CptLine dw 0
|
||||
|
||||
include f:\projet\lib386\lib_svga\svga.ash
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyBlockOnBlack
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; ptsrc -> ptdst
|
||||
; CopyBlockOnBlack( x0, y0, x1, y1, BufSrc, BufDst )
|
||||
;
|
||||
; Copy datas from BufSrc to Bufdst, but only on Black
|
||||
;
|
||||
CopyBlockOnBlack proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD,\
|
||||
ptsrc:DWORD, ptdst:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;---------------------- Compute Delta X & Y
|
||||
sub ebx, edx ; EBX Delta X
|
||||
sub eax, ecx ; EAX Delta Y
|
||||
inc ebx ; EBX = Delta X + 1
|
||||
inc eax ; EAX = Delta Y + 1
|
||||
mov word ptr [CptPixl], bx
|
||||
mov word ptr [CptLine], ax
|
||||
;---------------------- Compute Adresse
|
||||
mov eax, TabOffLine[ecx*4]
|
||||
mov esi, ptsrc
|
||||
mov edi, ptdst
|
||||
add eax, edx
|
||||
add esi, eax
|
||||
add edi, eax
|
||||
xor eax, eax ; Je cherche != 0
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
;----------------------
|
||||
NewLine:
|
||||
xor ebx, ebx
|
||||
mov bx, [CptPixl]
|
||||
;-----------------------------------------------------------------------------
|
||||
ScanAgain:
|
||||
mov ecx, ebx ; EBX Bytes to Scan
|
||||
repne scasb ; Arret quand != 0
|
||||
jne EndLine2 ; c'est fini!
|
||||
|
||||
dec edi ; EDI un peu trop loin
|
||||
inc ecx ; ECX trop Petit
|
||||
|
||||
sub ebx, ecx ; EBX = Bytes Parcourus
|
||||
add esi, ebx ; Maj ESI
|
||||
|
||||
mov ebx, ecx ; EBX = Bytes Restant
|
||||
rep scasb ; Combien != 0 ?
|
||||
je short UntilEnd ; Tous jusqu'a fin (Quick!
|
||||
|
||||
inc ecx ; Maj ECX
|
||||
dec edi ; Maj EDI
|
||||
sub ebx, ecx ; EBX = Nb Same Bytes
|
||||
sub edi, ebx ; Recule EDI
|
||||
|
||||
xchg ecx, ebx
|
||||
;-----------------------
|
||||
mov ebp, ecx
|
||||
shr ecx, 2
|
||||
rep movsd ; movsD Plus Tard!
|
||||
mov ecx, ebp
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
;-----------------------
|
||||
jmp short ScanAgain
|
||||
UntilEnd:
|
||||
sub edi, ebx
|
||||
mov ecx, ebx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
EndLine:
|
||||
;-----------------------------------------------------------------------------
|
||||
add edi, edx
|
||||
add esi, edx
|
||||
dec word ptr [CptLine]
|
||||
jne short NewLine
|
||||
;----------------------
|
||||
ret
|
||||
EndLine2:
|
||||
add esi, ebx
|
||||
add edi, edx
|
||||
add esi, edx
|
||||
dec word ptr [CptLine]
|
||||
jne short NewLine
|
||||
;----------------------
|
||||
ret
|
||||
|
||||
CopyBlockOnBlack endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
75
LIB386/LIB_SVGA/S_BLOCK3.ASM
Normal file
75
LIB386/LIB_SVGA/S_BLOCK3.ASM
Normal file
@@ -0,0 +1,75 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_BLOCK.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include f:\projet\lib386\lib_svga\svga.ash
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyBlockIncrust
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlockIncrust( x0, y0, x1, y1, *src, xd, yd, *dst )
|
||||
;
|
||||
CopyBlockIncrust proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD, src:DWORD,\
|
||||
xd:DWORD, yd:DWORD, dst:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;----------------------
|
||||
|
||||
mov esi, TabOffLine[ecx*4] ; y0
|
||||
add esi, src
|
||||
add esi, edx ; SI Offset Src
|
||||
|
||||
mov edi, yd
|
||||
mov edi, TabOffLine[edi*4]
|
||||
add edi, dst
|
||||
add edi, xd ; DI Offset Dst
|
||||
|
||||
sub ebx, edx
|
||||
inc ebx ; BX Delta Y
|
||||
|
||||
sub eax, ecx
|
||||
inc eax ; AX Delta X
|
||||
mov ebp, eax
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx
|
||||
|
||||
loopx: lodsb
|
||||
or al, al
|
||||
jz incrust
|
||||
mov byte ptr[edi], al
|
||||
incrust: inc edi
|
||||
dec ecx
|
||||
jnz loopx
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
dec ebp
|
||||
jne short Again
|
||||
CopyBlock_End: ret
|
||||
CopyBlockIncrust endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
93
LIB386/LIB_SVGA/S_BOX.ASM
Normal file
93
LIB386/LIB_SVGA/S_BOX.ASM
Normal file
@@ -0,0 +1,93 @@
|
||||
; S_BOX.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage Box
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Box( x0, y0, x1, y1, col )
|
||||
;
|
||||
;
|
||||
Box proc uses edi ebp ebx,\
|
||||
X0:DWORD, Y0:DWORD, X1:DWORD, Y1:DWORD, Col: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 al, byte ptr [Col]
|
||||
mov ah, al ; Init Color
|
||||
mov cx, ax
|
||||
shl eax, 16
|
||||
mov ax, cx
|
||||
;----------------------
|
||||
mov ebp, Screen_X
|
||||
sub ebp, edx ; ebp Delta Screen
|
||||
Again:
|
||||
mov ecx, edx
|
||||
shr ecx, 2
|
||||
rep stosd
|
||||
mov ecx, edx
|
||||
and ecx, 11b
|
||||
rep stosb
|
||||
|
||||
add edi, ebp
|
||||
dec ebx
|
||||
jne Again
|
||||
Box_End:
|
||||
ret
|
||||
Box endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
346
LIB386/LIB_SVGA/S_CPYBOX.ASM
Normal file
346
LIB386/LIB_SVGA/S_CPYBOX.ASM
Normal file
@@ -0,0 +1,346 @@
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
|
||||
.code LIB_SVGA
|
||||
|
||||
.386
|
||||
jumps
|
||||
|
||||
OSEG equ FS:
|
||||
|
||||
extrn curbk:WORD
|
||||
extrn newbank:PROC
|
||||
|
||||
|
||||
TestSVGA proc uses es ds si di,\
|
||||
ptrlog:PTR
|
||||
|
||||
lds si, ptrlog
|
||||
|
||||
xor ax,ax
|
||||
call newbank
|
||||
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
|
||||
xor di,di
|
||||
mov dx,100
|
||||
|
||||
b1:
|
||||
mov ecx,80
|
||||
rep movsd
|
||||
|
||||
|
||||
add di,320
|
||||
dec dx
|
||||
jnz b1
|
||||
|
||||
mov ax,1
|
||||
call newbank
|
||||
|
||||
xor di,di
|
||||
mov dx,100
|
||||
|
||||
b2:
|
||||
mov ecx,80
|
||||
rep movsd
|
||||
|
||||
|
||||
add di,320
|
||||
dec dx
|
||||
jnz b2
|
||||
|
||||
ret
|
||||
|
||||
TestSVGA endp
|
||||
|
||||
TestSVGA2 proc uses es ds si di,\
|
||||
ptrlog:PTR
|
||||
|
||||
lds si, ptrlog
|
||||
|
||||
xor ax,ax
|
||||
call newbank
|
||||
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
|
||||
xor di,di
|
||||
|
||||
mov dx,200
|
||||
|
||||
b1:
|
||||
mov bx,di
|
||||
add bx,320
|
||||
jnc ok1
|
||||
|
||||
mov cx,320
|
||||
sub cx,bx
|
||||
rep movsb
|
||||
|
||||
mov ax, OSEG[curbk]
|
||||
inc ax
|
||||
call newbank
|
||||
|
||||
mov cx,bx
|
||||
rep movsb
|
||||
|
||||
jmp nxt
|
||||
|
||||
ok1:
|
||||
mov ecx,80
|
||||
rep movsd
|
||||
|
||||
|
||||
nxt: mov di,bx
|
||||
add di,320
|
||||
|
||||
dec dx
|
||||
jnz b1
|
||||
|
||||
ret
|
||||
|
||||
TestSVGA2 endp
|
||||
|
||||
opt_stos_line macro
|
||||
|
||||
mov ax,cx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
and ax,3
|
||||
mov cx,ax
|
||||
|
||||
;shr cx,1
|
||||
;rep movsw
|
||||
;rcl cx,1
|
||||
|
||||
rep movsb
|
||||
|
||||
endm
|
||||
|
||||
; CopyBox de MCGA vers SVGA
|
||||
|
||||
|
||||
TestSVGA3 proc uses es ds si di,\
|
||||
sox:WORD,soy:WORD,sol:WORD,soh:WORD,soptr:PTR,\
|
||||
dex:WORD,dey:WORD
|
||||
|
||||
|
||||
|
||||
lds si, soptr
|
||||
|
||||
mov ax, soy
|
||||
mov bx,ax
|
||||
shl ax,2 ; *4
|
||||
add ax,bx ; *5
|
||||
shl ax,6 ; *320
|
||||
add ax, sox
|
||||
|
||||
add si,ax
|
||||
|
||||
|
||||
|
||||
xor eax,eax
|
||||
mov ax, dey
|
||||
mov ebx,eax
|
||||
shl eax,2 ; *4
|
||||
add eax,ebx ; *5
|
||||
shl eax,7 ; *640
|
||||
|
||||
mov bx, dex
|
||||
add eax,ebx
|
||||
|
||||
mov bx,ax
|
||||
shr eax,16 ; ax start bank
|
||||
call newbank
|
||||
|
||||
mov di,bx
|
||||
xor ebx,ebx
|
||||
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
|
||||
mov ax, sol
|
||||
mov cs:word ptr[patch_larg1],ax
|
||||
mov cs:word ptr[patch_larg2],ax
|
||||
mov cs:word ptr[patch_larg3],ax
|
||||
neg ax
|
||||
add ax,640
|
||||
mov cs:word ptr[patch_deoff],ax
|
||||
|
||||
mov ax,320
|
||||
sub ax, sol
|
||||
mov cs:word ptr[patch_sooff],ax
|
||||
|
||||
jmp $+2
|
||||
|
||||
mov dx, soh
|
||||
|
||||
b1: mov bx,di
|
||||
patch_larg1 equ $+2
|
||||
add bx,1234h
|
||||
jnc ok1
|
||||
|
||||
patch_larg2 equ $+1
|
||||
mov cx,1234h
|
||||
sub cx,bx
|
||||
opt_stos_line
|
||||
|
||||
mov ax, OSEG[curbk]
|
||||
inc ax
|
||||
call newbank
|
||||
|
||||
mov cx,bx
|
||||
opt_stos_line
|
||||
|
||||
jmp nxt
|
||||
|
||||
ok1: xor ecx,ecx
|
||||
patch_larg3 equ $+1
|
||||
mov cx,1234h
|
||||
opt_stos_line
|
||||
|
||||
nxt: mov di,bx
|
||||
patch_deoff equ $+2
|
||||
add di,1234h
|
||||
jnc ok2
|
||||
|
||||
mov ax, OSEG[curbk]
|
||||
inc ax
|
||||
call newbank
|
||||
|
||||
ok2:
|
||||
patch_sooff equ $+2
|
||||
add si,1234h
|
||||
|
||||
dec dx
|
||||
jnz b1
|
||||
|
||||
|
||||
|
||||
ret
|
||||
|
||||
TestSVGA3 endp
|
||||
|
||||
; CopyBox de MCGA vers SVGA en incrustation coul 0
|
||||
|
||||
inc_line macro
|
||||
local lbl1,lbl2,lbl3
|
||||
|
||||
jcxz lbl3
|
||||
lbl1: lodsb
|
||||
or al,al
|
||||
jz lbl2
|
||||
stosb
|
||||
loop lbl1
|
||||
jmp short lbl3
|
||||
lbl2: inc di
|
||||
loop lbl1
|
||||
lbl3:
|
||||
endm
|
||||
|
||||
|
||||
TestSVGA4 proc uses es ds si di,\
|
||||
sox:WORD,soy:WORD,sol:WORD,soh:WORD,soptr:PTR,\
|
||||
dex:WORD,dey:WORD
|
||||
|
||||
|
||||
|
||||
lds si, soptr
|
||||
|
||||
mov ax, soy
|
||||
mov bx,ax
|
||||
shl ax,2 ; *4
|
||||
add ax,bx ; *5
|
||||
shl ax,6 ; *320
|
||||
add ax, sox
|
||||
|
||||
add si,ax
|
||||
|
||||
|
||||
|
||||
xor eax,eax
|
||||
mov ax, dey
|
||||
mov ebx,eax
|
||||
shl eax,2 ; *4
|
||||
add eax,ebx ; *5
|
||||
shl eax,7 ; *640
|
||||
|
||||
mov bx, dex
|
||||
add eax,ebx
|
||||
|
||||
mov bx,ax
|
||||
shr eax,16 ; ax start bank
|
||||
call newbank
|
||||
|
||||
mov di,bx
|
||||
xor ebx,ebx
|
||||
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
|
||||
mov ax, sol
|
||||
mov cs:word ptr[patch_larg1b],ax
|
||||
mov cs:word ptr[patch_larg2b],ax
|
||||
mov cs:word ptr[patch_larg3b],ax
|
||||
neg ax
|
||||
add ax,640
|
||||
mov cs:word ptr[patch_deoffb],ax
|
||||
|
||||
mov ax,320
|
||||
sub ax, sol
|
||||
mov cs:word ptr[patch_sooffb],ax
|
||||
|
||||
jmp $+2
|
||||
|
||||
mov dx, soh
|
||||
|
||||
b1: mov bx,di
|
||||
patch_larg1b equ $+2
|
||||
add bx,1234h
|
||||
jnc ok1
|
||||
|
||||
patch_larg2b equ $+1
|
||||
mov cx,1234h
|
||||
sub cx,bx
|
||||
inc_line
|
||||
|
||||
mov ax, OSEG[curbk]
|
||||
inc ax
|
||||
call newbank
|
||||
|
||||
mov cx,bx
|
||||
inc_line
|
||||
|
||||
jmp nxt
|
||||
|
||||
ok1: xor ecx,ecx
|
||||
patch_larg3b equ $+1
|
||||
mov cx,1234h
|
||||
inc_line
|
||||
|
||||
nxt: mov di,bx
|
||||
patch_deoffb equ $+2
|
||||
add di,1234h
|
||||
jnc ok2
|
||||
|
||||
mov ax, OSEG[curbk]
|
||||
inc ax
|
||||
call newbank
|
||||
|
||||
ok2:
|
||||
patch_sooffb equ $+2
|
||||
add si,1234h
|
||||
|
||||
dec dx
|
||||
jnz b1
|
||||
|
||||
|
||||
|
||||
ret
|
||||
|
||||
TestSVGA4 endp
|
||||
|
||||
|
||||
|
||||
end
|
||||
57
LIB386/LIB_SVGA/S_DLL.C
Normal file
57
LIB386/LIB_SVGA/S_DLL.C
Normal file
@@ -0,0 +1,57 @@
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
SAMP.C 386
|
||||
(c) Adeline 1993
|
||||
*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <i86.h>
|
||||
|
||||
extern void *NewBank;
|
||||
extern void *InitSvgaMode;
|
||||
extern void *Enable;
|
||||
|
||||
char *SvgaError = "Error SvgaDriver:";
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
LONG SvgaInitDLL(char *driverpathname)
|
||||
{
|
||||
char *dll, *drvr;
|
||||
void **funcs;
|
||||
|
||||
//
|
||||
// Load driver file
|
||||
//
|
||||
|
||||
dll = FILE_read(driverpathname, NULL);
|
||||
if (dll==NULL)
|
||||
{
|
||||
printf("%s Could not load driver '%s'.\n", SvgaError, driverpathname );
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
drvr = DLL_load(dll, DLLMEM_ALLOC | DLLSRC_MEM, NULL);
|
||||
|
||||
Free(dll);
|
||||
|
||||
if (drvr==NULL)
|
||||
{
|
||||
printf("%s Invalid DLL image.\n", SvgaError );
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
funcs = *(void ***)drvr;
|
||||
|
||||
InitSvgaMode = funcs[0];
|
||||
NewBank = funcs[1];
|
||||
Enable = funcs[2];
|
||||
|
||||
printf("%s", drvr+4);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
1118
LIB386/LIB_SVGA/S_FILLV.ASM
Normal file
1118
LIB386/LIB_SVGA/S_FILLV.ASM
Normal file
File diff suppressed because it is too large
Load Diff
1567
LIB386/LIB_SVGA/S_FIND.ASM
Normal file
1567
LIB386/LIB_SVGA/S_FIND.ASM
Normal file
File diff suppressed because it is too large
Load Diff
289
LIB386/LIB_SVGA/S_LINE.ASM
Normal file
289
LIB386/LIB_SVGA/S_LINE.ASM
Normal file
@@ -0,0 +1,289 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_LINE.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
EVEN
|
||||
|
||||
couleur dw 00
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage Line
|
||||
public NoLanguage Line_A
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Line( x0, y0, x1, y1, coul )
|
||||
;
|
||||
Line proc uses esi edi ebp ebx,\
|
||||
x0:DWORD, y0:DWORD,\
|
||||
x1:DWORD, y1:DWORD,\
|
||||
coul:DWORD
|
||||
|
||||
; X0:ax Y0:bx
|
||||
; X1:cx Y1:DX
|
||||
; couleur: bp
|
||||
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, x1
|
||||
mov edx, y1
|
||||
|
||||
mov ebp, coul
|
||||
|
||||
call Line_A
|
||||
|
||||
ret
|
||||
|
||||
Line endp
|
||||
|
||||
Line_A proc
|
||||
|
||||
; X0:eax Y0:ebx
|
||||
; X1:ecx Y1:edx
|
||||
|
||||
mov [couleur], bp
|
||||
|
||||
cmp eax, ecx ; x0 < x1
|
||||
jle sensok
|
||||
xchg eax, ecx
|
||||
xchg ebx, edx
|
||||
sensok:
|
||||
; XY 0
|
||||
|
||||
onceagain: xor bp, bp
|
||||
|
||||
cmp eax, [ClipXmin] ; x0
|
||||
jge ncxi
|
||||
or bp, 1
|
||||
jmp short ncxg
|
||||
|
||||
ncxi: cmp eax, [ClipXmax]
|
||||
jg notseen
|
||||
|
||||
ncxg: cmp ebx, [ClipYmin]
|
||||
jge ncyi
|
||||
or bp, 8
|
||||
jmp short ncya
|
||||
|
||||
ncyi: cmp ebx, [ClipYmax]
|
||||
jle ncya
|
||||
or bp, 4
|
||||
ncya:
|
||||
; XY 1
|
||||
|
||||
shl bp, 8
|
||||
|
||||
cmp ecx, [ClipXmin]
|
||||
jl notseen
|
||||
|
||||
cmp ecx, [ClipXmax]
|
||||
jle ncx2a
|
||||
or bp, 2
|
||||
ncx2a:
|
||||
cmp edx, [ClipYmin]
|
||||
jge ncy2i
|
||||
or bp, 8
|
||||
jmp short ncy2a
|
||||
|
||||
ncy2i: cmp edx, [ClipYmax]
|
||||
jle ncy2a
|
||||
or bp, 4
|
||||
ncy2a:
|
||||
|
||||
; test
|
||||
|
||||
mov si, bp
|
||||
shr si, 8
|
||||
test si, bp
|
||||
jnz notseen
|
||||
or si, bp
|
||||
and si, 0FFh
|
||||
jz draw
|
||||
|
||||
mov edi, ecx
|
||||
sub edi, eax ; edi delta x
|
||||
|
||||
mov esi, edx
|
||||
sub esi, ebx ; esi delta y
|
||||
|
||||
|
||||
test bp, 100h
|
||||
jz c0
|
||||
|
||||
mov ebp, edx
|
||||
|
||||
sub eax, [ClipXmin] ; xmin - x0
|
||||
neg eax
|
||||
imul si ; * dy
|
||||
idiv di ; / dx
|
||||
movsx eax, ax
|
||||
add ebx, eax ; y0 +=
|
||||
mov eax, [ClipXmin] ; x0 = xmin
|
||||
|
||||
mov edx, ebp
|
||||
|
||||
jmp onceagain
|
||||
c0:
|
||||
test bp, 800h
|
||||
jz c1
|
||||
|
||||
mov ebp, edx
|
||||
|
||||
xchg eax, ebx
|
||||
sub eax, [ClipYmin] ; ymin - y0
|
||||
neg eax
|
||||
imul di ; * dx
|
||||
idiv si ; / dy
|
||||
movsx eax, ax
|
||||
add eax, ebx ; x0 +=
|
||||
mov ebx, [ClipYmin] ; y0 = ymin
|
||||
|
||||
mov edx, ebp
|
||||
|
||||
jmp onceagain
|
||||
c1:
|
||||
test bp, 400h
|
||||
jz c2
|
||||
|
||||
mov ebp, edx
|
||||
|
||||
xchg eax, ebx
|
||||
sub eax, [ClipYmax] ; ymax - y0
|
||||
neg eax
|
||||
imul di ; * dx
|
||||
idiv si ; / dy
|
||||
movsx eax, ax
|
||||
add eax, ebx ; x0 +=
|
||||
mov ebx, [ClipYmax] ; y0 = ymax
|
||||
|
||||
mov edx, ebp
|
||||
|
||||
jmp onceagain
|
||||
|
||||
|
||||
|
||||
c2:
|
||||
test bp, 2
|
||||
jz c3
|
||||
|
||||
mov ecx, eax ; save x0
|
||||
mov eax, [ClipXmax]
|
||||
sub eax, ecx ; xmax - x0
|
||||
imul si ; * dy
|
||||
idiv di ; / dx
|
||||
movsx edx, ax
|
||||
add edx, ebx ; + y0
|
||||
mov eax, ecx ; restore x0
|
||||
mov ecx, [ClipXmax]
|
||||
|
||||
jmp onceagain
|
||||
|
||||
c3:
|
||||
test bp, 8
|
||||
jz c4
|
||||
|
||||
mov ecx, eax
|
||||
mov eax, ebx
|
||||
sub eax, [ClipYmin] ; ymin - y0
|
||||
neg eax
|
||||
imul di ; * dx
|
||||
idiv si ; / dy
|
||||
movsx edx, ax
|
||||
mov eax, ecx
|
||||
add ecx, edx ; x0 +=
|
||||
mov edx, [ClipYmin]
|
||||
|
||||
jmp onceagain
|
||||
|
||||
c4:
|
||||
test bp, 4
|
||||
jz onceagain
|
||||
|
||||
mov ecx, eax
|
||||
mov eax, ebx
|
||||
sub eax, [ClipYmax] ; ymax - y0
|
||||
neg eax
|
||||
imul di ; * dx
|
||||
idiv si ; / dy
|
||||
movsx edx, ax
|
||||
mov eax, ecx
|
||||
add ecx, edx
|
||||
mov edx, [ClipYmax]
|
||||
|
||||
jmp onceagain
|
||||
|
||||
notseen: ret
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
draw: mov esi, 640
|
||||
sub ecx, eax
|
||||
sub edx, ebx
|
||||
jns descend
|
||||
|
||||
neg esi
|
||||
neg edx
|
||||
|
||||
descend: mov edi, Log
|
||||
add edi, TabOffLine[ ebx * 4 ]
|
||||
add edi, eax
|
||||
|
||||
mov ax, [couleur]
|
||||
|
||||
cmp ecx, edx
|
||||
jl vertical
|
||||
|
||||
horizontal: mov ebp, ecx
|
||||
shl ebp, 1
|
||||
mov ebx, ecx
|
||||
shl edx, 1
|
||||
inc ecx
|
||||
jmp loopX
|
||||
|
||||
noovfy: dec ecx
|
||||
jz exit
|
||||
loopX: mov byte ptr[edi], al
|
||||
inc edi
|
||||
sub ebx, edx
|
||||
jnc noovfy
|
||||
add ebx, ebp
|
||||
add edi, esi
|
||||
dec ecx
|
||||
jnz loopX
|
||||
|
||||
ret
|
||||
|
||||
vertical: xchg ecx, edx
|
||||
mov ebp, ecx
|
||||
shl ebp, 1
|
||||
mov ebx, ecx
|
||||
shl edx, 1
|
||||
inc ecx
|
||||
jmp loopY
|
||||
|
||||
noovfx: add edi, esi
|
||||
dec ecx
|
||||
jz exit
|
||||
loopY: mov byte ptr[edi], al
|
||||
sub ebx, edx
|
||||
jnc noovfx
|
||||
add ebx, ebp
|
||||
adc edi, esi
|
||||
dec ecx
|
||||
jnz loopY
|
||||
|
||||
exit:
|
||||
ret
|
||||
|
||||
Line_A endp
|
||||
|
||||
|
||||
end
|
||||
217
LIB386/LIB_SVGA/S_MODE.ASM
Normal file
217
LIB386/LIB_SVGA/S_MODE.ASM
Normal file
@@ -0,0 +1,217 @@
|
||||
|
||||
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
|
||||
include vesa.inc
|
||||
|
||||
;
|
||||
; VGAKIT Version 5.2b
|
||||
;
|
||||
; Copyright 1988,89,90,91,92 John Bridges
|
||||
; Free for use in commercial, shareware or freeware applications
|
||||
;
|
||||
; SVGAMODE.ASM
|
||||
;
|
||||
;
|
||||
.data
|
||||
extrn cirrus:byte,everex:byte,paradise:byte,tseng:byte,trident:byte
|
||||
extrn t8900:byte,ativga:byte,aheada:byte,aheadb:byte
|
||||
extrn oaktech:byte,video7:byte,chipstech:byte,tseng4:byte,genoa:byte
|
||||
extrn ncr:byte,compaq:byte,acumos:byte,vesa:byte
|
||||
|
||||
extrn curbk:word,bksize:word
|
||||
|
||||
extrn vesafunc:dword
|
||||
|
||||
public maxx,maxy,scanline,ourseg
|
||||
|
||||
maxx dw ? ;scanline of screen in pixels
|
||||
maxy dw ? ;height of screen in pixels
|
||||
scanline dw ? ;actual width screen in bytes
|
||||
ourseg dw ? ;segment of screen buffer
|
||||
|
||||
|
||||
public adrtbl
|
||||
|
||||
adrtbl dd 1024 dup (?) ;offset and bank for each scanline
|
||||
|
||||
.code LIB_SVGA
|
||||
|
||||
public mkadrtbl
|
||||
public svgamode
|
||||
public txtmode
|
||||
public setmany
|
||||
|
||||
mkadrtbl proc uses di si
|
||||
mov di,offset adrtbl
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
mov bx,[maxy]
|
||||
|
||||
mov ax,[bksize]
|
||||
cmp ax,64
|
||||
jz nobnk
|
||||
mov cl,10
|
||||
shl ax,cl
|
||||
dec ax
|
||||
mov si,ax
|
||||
mov cl,9
|
||||
mov ax,[bksize]
|
||||
shlp: inc cl
|
||||
shr ax,1
|
||||
jnz shlp
|
||||
xor ax,ax
|
||||
xor dx,dx
|
||||
lp: push ax
|
||||
shr ax,cl
|
||||
add dx,ax
|
||||
pop ax
|
||||
and ax,si
|
||||
stosw
|
||||
xchg ax,dx
|
||||
stosw
|
||||
xchg ax,dx
|
||||
add ax,[scanline]
|
||||
dec bx
|
||||
jnz lp
|
||||
ret
|
||||
|
||||
nobnk: xor ax,ax
|
||||
xor dx,dx
|
||||
mov si,[scanline]
|
||||
mov cx,bx
|
||||
nlp: stosw
|
||||
xchg ax,dx
|
||||
stosw
|
||||
xchg ax,dx
|
||||
add ax,si
|
||||
adc dx,0
|
||||
loop nlp
|
||||
ret
|
||||
|
||||
mkadrtbl endp
|
||||
|
||||
svgamode proc ;Set 640x480x256 on most SVGA cards
|
||||
mov [ourseg],0a000h
|
||||
mov ax,640
|
||||
mov [maxx],ax ;default width to 640 for now
|
||||
mov [scanline],ax
|
||||
|
||||
cmp [vesa],0
|
||||
jz novs
|
||||
mov bx,101h
|
||||
call vesaset
|
||||
jmp godo2
|
||||
novs: cmp [compaq],0
|
||||
jz nocp
|
||||
mov [scanline],1024
|
||||
mov ax,2eh
|
||||
jmp godo
|
||||
nocp: cmp [genoa],0
|
||||
jz nogn
|
||||
mov ax,5ch
|
||||
jmp godo
|
||||
nogn: cmp [ncr],0
|
||||
jz noncr
|
||||
mov ax,5fh
|
||||
jmp godo
|
||||
noncr: cmp [oaktech],0
|
||||
jz noak
|
||||
mov ax,53h
|
||||
jmp short godo
|
||||
noak: cmp [aheada],0
|
||||
jnz @f
|
||||
cmp [aheadb],0
|
||||
jz noab
|
||||
@@: mov ax,61h
|
||||
jmp short godo
|
||||
noab: cmp [everex],0
|
||||
jz noev
|
||||
mov ax,70h
|
||||
mov bl,30h
|
||||
jmp short godo
|
||||
noev: cmp [ativga],0
|
||||
jz noati
|
||||
mov ax,62h
|
||||
jmp short godo
|
||||
noati: cmp [trident],0
|
||||
jz notr
|
||||
mov ax,5dh
|
||||
jmp short godo
|
||||
notr: cmp [video7],0
|
||||
jz nov7
|
||||
mov ax,6f05h
|
||||
mov bl,67h
|
||||
jmp short godo
|
||||
nov7: cmp [chipstech],0
|
||||
jz noct
|
||||
mov ax,79h
|
||||
jmp short godo
|
||||
noct: cmp [acumos],0
|
||||
jnz dopd
|
||||
cmp [paradise],0
|
||||
jz nopd
|
||||
dopd: mov ax,5fh
|
||||
jmp short godo
|
||||
nopd: cmp [tseng],0
|
||||
jz nots
|
||||
mov ax,2eh
|
||||
godo: int 10h
|
||||
|
||||
godo2: mov [curbk],-1
|
||||
mov ax,40h
|
||||
mov es,ax
|
||||
mov al,es:[84h] ;get height of screen
|
||||
inc al
|
||||
mul byte ptr es:[85h]
|
||||
mov [maxy],ax
|
||||
call mkadrtbl
|
||||
nots: ret
|
||||
svgamode endp
|
||||
|
||||
vesaset proc near uses di
|
||||
local modebuf[260]:byte ; extra large to make up for
|
||||
; bugs in some VESA VBE's
|
||||
|
||||
push bx
|
||||
mov ax,4f02h ; set the VESA videomode
|
||||
int 10h
|
||||
pop cx
|
||||
mov ax,ss
|
||||
mov es,ax
|
||||
lea di,modebuf[0] ; get the mode information
|
||||
mov ax,4f01h
|
||||
int 10h
|
||||
mov ax,modebuf.vesamode.WinGranularity
|
||||
mov [bksize],ax ; bank size from vesamode structure
|
||||
mov ax,modebuf.vesamode.BytesPerLine
|
||||
mov [scanline],ax ; scan line byte width from vesamode
|
||||
mov ax,word ptr modebuf.vesamode.WinFuncPtr
|
||||
mov word ptr [vesafunc],ax
|
||||
mov ax,word ptr modebuf.vesamode.WinFuncPtr+2
|
||||
mov word ptr [vesafunc+2],ax
|
||||
ret
|
||||
vesaset endp
|
||||
|
||||
txtmode proc
|
||||
mov ax,3
|
||||
int 10h
|
||||
ret
|
||||
txtmode endp
|
||||
|
||||
setmany proc uses es,\
|
||||
palbuf:ptr byte,begcol:word,numcol:word
|
||||
|
||||
les dx,[palbuf]
|
||||
mov bx,[begcol]
|
||||
mov cx,[numcol]
|
||||
mov ax,1012h
|
||||
int 10h
|
||||
ret
|
||||
|
||||
setmany endp
|
||||
|
||||
|
||||
end
|
||||
|
||||
238
LIB386/LIB_SVGA/S_MOUSE.C
Normal file
238
LIB386/LIB_SVGA/S_MOUSE.C
Normal file
@@ -0,0 +1,238 @@
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <i86.h>
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
ÛÜ ÜÛ ÛßßßÛ Û Û ÛÛßßß Ûßßßß
|
||||
ÛÛß Û ÛÛ Û ÛÛ Û ßßßßÛ ÛÛßß
|
||||
ßß ß ßßßßß ßßßßß ßßßßß ßßßßß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
volatile LONG Click = 0 ;
|
||||
volatile LONG Mouse_X = 0 ;
|
||||
volatile LONG Mouse_Y = 0 ;
|
||||
LONG Mouse_X_Dep = 0 ;
|
||||
LONG Mouse_Y_Dep = 0 ;
|
||||
|
||||
LONG OldX0Mouse=-1, OldY0Mouse, OldX1Mouse, OldY1Mouse ;
|
||||
WORD DefMouse = 0 ;
|
||||
LONG FlagMouse = TRUE ;
|
||||
|
||||
UBYTE *GphMouse ;
|
||||
UBYTE *BufferMouse ;
|
||||
|
||||
extern UBYTE *Log ;
|
||||
extern UBYTE BinGphMouse ;
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
#pragma off (check_stack)
|
||||
void _loadds far click_handler (int max, int mcx, int mdx)
|
||||
{
|
||||
#pragma aux click_handler parm [EAX] [ECX] [EDX]
|
||||
Mouse_X = mcx>>3 ;
|
||||
Mouse_Y = mdx>>3 ;
|
||||
if( max & 0x02 ) Click |= 1 ;
|
||||
if( max & 0x04 ) Click &= ~1 ;
|
||||
if( max & 0x08 ) Click |= 2 ;
|
||||
if( max & 0x10 ) Click &= ~2 ;
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
void SetMouseBox( LONG x0, LONG y0, LONG x1, LONG y1 )
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
inregs.w.ax = 0x07 ;
|
||||
inregs.w.cx = x0<<3 ;
|
||||
inregs.w.dx = x1<<3 ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
|
||||
inregs.w.ax = 0x08 ;
|
||||
inregs.w.cx = y0<<3 ;
|
||||
inregs.w.dx = y1<<3 ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void SetMouseSpeed( LONG dx, LONG dy )
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
inregs.w.ax = 0x0F ;
|
||||
inregs.w.cx = (UWORD)dx ;
|
||||
inregs.w.dx = (UWORD)dy ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void SetMousePos( LONG x, LONG y )
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
inregs.w.ax = 0x04 ;
|
||||
inregs.w.cx = (UWORD)x<<3 ;
|
||||
inregs.w.dx = (UWORD)y<<3 ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
|
||||
inregs.w.ax = 0x01 ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
|
||||
Mouse_X = x ;
|
||||
Mouse_Y = y ;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void GetMouseDep()
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
inregs.w.ax = 0x0B ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
|
||||
Mouse_X_Dep = (LONG)((WORD)outregs.w.cx) ;
|
||||
Mouse_Y_Dep = (LONG)((WORD)outregs.w.dx) ;
|
||||
}
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
void ShowMouse( LONG flag )
|
||||
{
|
||||
if( !flag )
|
||||
{
|
||||
if( FlagMouse )
|
||||
{
|
||||
if( OldX0Mouse != -1 )
|
||||
{
|
||||
CopyBlockPhys( OldX0Mouse,OldY0Mouse, OldX1Mouse, OldY1Mouse ) ;
|
||||
OldX0Mouse = -1 ;
|
||||
}
|
||||
FlagMouse = FALSE ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !FlagMouse )
|
||||
{
|
||||
OldX0Mouse = -1 ; /* force aff et evite restore */
|
||||
AffMouse() ;
|
||||
FlagMouse = TRUE ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void AffMouse()
|
||||
{
|
||||
LONG dx, dy ;
|
||||
LONG x0, y0 ;
|
||||
LONG x1, y1 ;
|
||||
|
||||
if( FlagMouse )
|
||||
{
|
||||
x0 = Mouse_X ;
|
||||
y0 = Mouse_Y ;
|
||||
|
||||
if( (OldX0Mouse == x0) AND (OldY0Mouse == y0) ) return ;
|
||||
|
||||
GetDxDyGraph( DefMouse, &dx, &dy, GphMouse ) ;
|
||||
x1 = x0 + dx - 1 ;
|
||||
y1 = y0 + dy - 1 ;
|
||||
|
||||
MemoClip() ;
|
||||
|
||||
SetClip( x0,y0,x1,y1 ) ;
|
||||
|
||||
if( OldX0Mouse != -1 )
|
||||
CopyBlockPhys( OldX0Mouse,OldY0Mouse, OldX1Mouse, OldY1Mouse ) ;
|
||||
|
||||
SaveBlock( Log, BufferMouse, x0,y0, ClipXmax,ClipYmax ) ;
|
||||
|
||||
AffGraph( DefMouse, x0, y0, GphMouse ) ;
|
||||
|
||||
CopyBlockPhys( x0,y0, ClipXmax,ClipYmax ) ;
|
||||
|
||||
RestoreBlock( Log, BufferMouse, x0,y0, ClipXmax,ClipYmax ) ;
|
||||
|
||||
OldX0Mouse = x0 ;
|
||||
OldY0Mouse = y0 ;
|
||||
OldX1Mouse = ClipXmax ;
|
||||
OldY1Mouse = ClipYmax ;
|
||||
|
||||
RestoreClip() ;
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void SetMouse( WORD num )
|
||||
{
|
||||
DefMouse = num ;
|
||||
OldX0Mouse = -1 ;
|
||||
AffMouse() ;
|
||||
}
|
||||
|
||||
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
void InitMouse()
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
int installed = 0 ;
|
||||
int orig_mode = 0 ;
|
||||
int far *ptr ;
|
||||
int (far *function_ptr)() ;
|
||||
|
||||
segread(&sregs) ;
|
||||
|
||||
/* check for mouse driver */
|
||||
inregs.w.ax = 0 ;
|
||||
int386 (0x33, &inregs, &outregs);
|
||||
if( installed = (outregs.w.ax != -1) ) return ;
|
||||
|
||||
SetMouseBox( 0, 0, 639, 479 ) ;
|
||||
SetMouseSpeed( 4, 4 ) ;
|
||||
|
||||
GphMouse = &BinGphMouse ;
|
||||
|
||||
BufferMouse = Malloc( 48*48 ) ; /* max size mouse ! */
|
||||
|
||||
Click = 0 ;
|
||||
FlagMouse = TRUE ;
|
||||
|
||||
/* install click watcher */
|
||||
|
||||
inregs.w.ax = 0xC ;
|
||||
inregs.w.cx = 0x01 | 0x02 | 0x04 | 0x08 |0x10 ;
|
||||
function_ptr = click_handler ;
|
||||
inregs.x.edx = FP_OFF( function_ptr ) ;
|
||||
sregs.es = FP_SEG( function_ptr ) ;
|
||||
int386x( 0x33, &inregs, &outregs, &sregs );
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void ClearMouse()
|
||||
{
|
||||
struct SREGS sregs ;
|
||||
union REGS inregs, outregs ;
|
||||
|
||||
inregs.w.ax = 0 ;
|
||||
int386( 0x33, &inregs, &outregs );
|
||||
|
||||
FlagMouse = FALSE ;
|
||||
|
||||
Free( BufferMouse ) ;
|
||||
}
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
153
LIB386/LIB_SVGA/S_MOUSEA.ASM
Normal file
153
LIB386/LIB_SVGA/S_MOUSEA.ASM
Normal file
@@ -0,0 +1,153 @@
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
.386p
|
||||
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
.data
|
||||
|
||||
public NoLanguage BinGphMouse
|
||||
|
||||
BinGphMouse LABEL WORD
|
||||
|
||||
db 28, 0, 0, 0, 149, 0, 0, 0, 14, 1, 0, 0, 194, 1, 0, 0
|
||||
db 132, 2, 0, 0, 57, 3, 0, 0, 235, 3, 0, 0, 10, 15, 0, 0
|
||||
db 2, 130, 16, 6, 2, 67, 16, 15, 15, 16, 5, 4, 64, 16, 130, 15
|
||||
db 64, 16, 4, 4, 64, 16, 131, 15, 64, 16, 3, 4, 64, 16, 132, 15
|
||||
db 64, 16, 2, 4, 64, 16, 133, 15, 64, 16, 1, 4, 64, 16, 134, 15
|
||||
db 64, 16, 0, 3, 64, 16, 135, 15, 64, 16, 3, 64, 16, 135, 15, 64
|
||||
db 16, 4, 64, 16, 133, 15, 65, 16, 16, 0, 4, 67, 16, 15, 15, 16
|
||||
db 130, 15, 64, 16, 1, 5, 0, 130, 16, 131, 15, 64, 16, 0, 5, 3
|
||||
db 64, 16, 130, 15, 64, 16, 0, 5, 3, 64, 16, 130, 15, 64, 16, 0
|
||||
db 3, 4, 130, 16, 1, 10, 15, 0, 0, 2, 130, 14, 6, 2, 67, 14
|
||||
db 12, 12, 14, 5, 4, 64, 14, 130, 12, 64, 14, 4, 4, 64, 14, 131
|
||||
db 12, 64, 14, 3, 4, 64, 14, 132, 12, 64, 14, 2, 4, 64, 14, 133
|
||||
db 12, 64, 14, 1, 4, 64, 14, 134, 12, 64, 14, 0, 3, 64, 14, 135
|
||||
db 12, 64, 14, 3, 64, 14, 135, 12, 64, 14, 4, 64, 14, 133, 12, 65
|
||||
db 14, 14, 0, 4, 67, 14, 12, 12, 14, 130, 12, 64, 14, 1, 5, 0
|
||||
db 130, 14, 131, 12, 64, 14, 0, 5, 3, 64, 14, 130, 12, 64, 14, 0
|
||||
db 5, 3, 64, 14, 130, 12, 64, 14, 0, 3, 4, 130, 14, 1, 14, 17
|
||||
db 0, 0, 3, 3, 65, 16, 16, 7, 3, 2, 67, 16, 15, 15, 16, 6
|
||||
db 3, 1, 69, 16, 15, 16, 16, 15, 16, 5, 3, 1, 69, 16, 15, 16
|
||||
db 16, 15, 16, 5, 3, 1, 69, 16, 15, 16, 16, 15, 16, 5, 3, 1
|
||||
db 70, 16, 15, 16, 16, 15, 16, 16, 4, 5, 1, 67, 16, 15, 16, 16
|
||||
db 130, 15, 130, 16, 1, 5, 1, 70, 16, 15, 16, 16, 15, 16, 16, 130
|
||||
db 15, 64, 16, 0, 2, 0, 76, 16, 15, 15, 16, 16, 15, 16, 16, 15
|
||||
db 16, 16, 15, 16, 3, 67, 16, 15, 16, 15, 132, 16, 68, 15, 16, 16
|
||||
db 15, 16, 3, 67, 16, 15, 16, 15, 135, 16, 65, 15, 16, 3, 65, 16
|
||||
db 15, 137, 16, 65, 15, 16, 3, 65, 16, 15, 137, 16, 65, 15, 16, 3
|
||||
db 65, 16, 15, 137, 16, 65, 15, 16, 4, 0, 65, 16, 15, 136, 16, 65
|
||||
db 15, 16, 5, 1, 65, 16, 15, 134, 16, 65, 15, 16, 0, 3, 2, 136
|
||||
db 16, 1, 15, 16, 0, 0, 3, 1, 138, 16, 1, 5, 0, 64, 16, 138
|
||||
db 15, 64, 16, 0, 5, 67, 16, 15, 16, 15, 134, 16, 64, 15, 0, 65
|
||||
db 15, 16, 5, 67, 16, 15, 16, 15, 134, 16, 64, 15, 0, 65, 15, 16
|
||||
db 3, 67, 16, 15, 16, 15, 134, 16, 67, 15, 16, 15, 16, 3, 67, 16
|
||||
db 15, 16, 15, 134, 16, 67, 15, 16, 15, 16, 3, 67, 16, 15, 16, 15
|
||||
db 134, 16, 67, 15, 16, 15, 16, 3, 67, 16, 15, 16, 16, 134, 15, 67
|
||||
db 16, 16, 15, 16, 3, 65, 16, 15, 138, 16, 65, 15, 16, 3, 65, 16
|
||||
db 15, 138, 16, 65, 15, 16, 5, 65, 16, 15, 130, 16, 132, 15, 130, 16
|
||||
db 65, 15, 16, 1, 78, 16, 15, 16, 16, 15, 16, 15, 15, 16, 16, 15
|
||||
db 16, 16, 15, 16, 1, 78, 16, 15, 16, 16, 15, 16, 15, 15, 16, 16
|
||||
db 15, 16, 16, 15, 16, 2, 0, 77, 16, 15, 16, 15, 16, 15, 15, 16
|
||||
db 16, 15, 16, 16, 15, 16, 5, 1, 64, 16, 137, 15, 64, 16, 0, 3
|
||||
db 2, 137, 16, 1, 19, 13, 0, 0, 5, 0, 131, 16, 8, 131, 16, 0
|
||||
db 7, 65, 16, 16, 130, 14, 65, 16, 16, 4, 65, 16, 16, 130, 14, 65
|
||||
db 16, 16, 3, 67, 16, 14, 16, 14, 138, 16, 67, 14, 16, 14, 16, 7
|
||||
db 66, 16, 16, 14, 130, 16, 65, 14, 14, 130, 16, 65, 14, 14, 130, 16
|
||||
db 66, 14, 16, 16, 7, 0, 66, 16, 14, 14, 130, 16, 68, 14, 14, 16
|
||||
db 14, 14, 130, 16, 66, 14, 14, 16, 0, 5, 1, 68, 16, 14, 16, 14
|
||||
db 16, 132, 14, 68, 16, 14, 16, 14, 16, 1, 5, 1, 68, 16, 16, 14
|
||||
db 16, 16, 132, 14, 68, 16, 16, 14, 16, 16, 1, 5, 2, 64, 16, 138
|
||||
db 14, 64, 16, 2, 5, 2, 64, 16, 138, 14, 64, 16, 2, 7, 2, 64
|
||||
db 16, 131, 14, 130, 16, 131, 14, 64, 16, 2, 7, 3, 64, 16, 131, 14
|
||||
db 64, 16, 131, 14, 64, 16, 3, 5, 4, 66, 16, 14, 14, 130, 16, 66
|
||||
db 14, 14, 16, 4, 3, 5, 134, 16, 5, 19, 13, 0, 0, 5, 0, 131
|
||||
db 16, 8, 131, 16, 0, 7, 65, 16, 16, 130, 14, 65, 16, 16, 4, 65
|
||||
db 16, 16, 130, 14, 65, 16, 16, 3, 67, 16, 14, 16, 14, 138, 16, 67
|
||||
db 14, 16, 14, 16, 7, 66, 16, 16, 14, 130, 16, 65, 14, 14, 130, 16
|
||||
db 65, 14, 14, 130, 16, 66, 14, 16, 16, 7, 0, 67, 16, 14, 14, 16
|
||||
db 131, 14, 64, 16, 131, 14, 67, 16, 14, 14, 16, 0, 5, 1, 66, 16
|
||||
db 14, 16, 136, 14, 66, 16, 14, 16, 1, 7, 1, 66, 16, 16, 14, 130
|
||||
db 16, 130, 14, 130, 16, 66, 14, 16, 16, 1, 5, 2, 64, 16, 138, 14
|
||||
db 64, 16, 2, 5, 2, 64, 16, 138, 14, 64, 16, 2, 7, 2, 64, 16
|
||||
db 131, 14, 130, 16, 131, 14, 64, 16, 2, 7, 3, 64, 16, 131, 14, 64
|
||||
db 16, 131, 14, 64, 16, 3, 5, 4, 66, 16, 14, 14, 130, 16, 66, 14
|
||||
db 14, 16, 4, 5, 5, 130, 16, 0, 130, 16, 5, 0, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
comment #
|
||||
db 28, 0, 0, 0, 150, 0, 0, 0, 16, 1, 0, 0, 203, 1, 0, 0
|
||||
db 143, 2, 0, 0, 70, 3, 0, 0, 250, 3, 0, 0, 10, 15, 2, 130
|
||||
db 16, 6, 2, 67, 16, 15, 15, 16, 5, 4, 64, 16, 130, 15, 64, 16
|
||||
db 4, 4, 64, 16, 131, 15, 64, 16, 3, 4, 64, 16, 132, 15, 64, 16
|
||||
db 2, 5, 64, 16, 133, 15, 64, 16, 0, 0, 4, 64, 16, 134, 15, 64
|
||||
db 16, 0, 3, 64, 16, 135, 15, 64, 16, 3, 64, 16, 135, 15, 64, 16
|
||||
db 4, 64, 16, 133, 15, 65, 16, 16, 0, 5, 67, 16, 15, 15, 16, 130
|
||||
db 15, 64, 16, 0, 0, 5, 0, 130, 16, 131, 15, 64, 16, 0, 5, 3
|
||||
db 64, 16, 130, 15, 64, 16, 0, 5, 3, 64, 16, 130, 15, 64, 16, 0
|
||||
db 4, 4, 130, 16, 0, 0, 10, 15, 2, 130, 14, 6, 2, 67, 14, 12
|
||||
db 12, 14, 5, 4, 64, 14, 130, 12, 64, 14, 4, 4, 64, 14, 131, 12
|
||||
db 64, 14, 3, 4, 64, 14, 132, 12, 64, 14, 2, 5, 64, 14, 133, 12
|
||||
db 64, 14, 0, 0, 4, 64, 14, 134, 12, 64, 14, 0, 3, 64, 14, 135
|
||||
db 12, 64, 14, 3, 64, 14, 135, 12, 64, 14, 4, 64, 14, 133, 12, 65
|
||||
db 14, 14, 0, 5, 67, 14, 12, 12, 14, 130, 12, 64, 14, 0, 0, 5
|
||||
db 0, 130, 14, 131, 12, 64, 14, 0, 5, 3, 64, 14, 130, 12, 64, 14
|
||||
db 0, 5, 3, 64, 14, 130, 12, 64, 14, 0, 4, 4, 130, 14, 0, 0
|
||||
db 14, 17, 3, 3, 65, 16, 16, 7, 3, 2, 67, 16, 15, 15, 16, 6
|
||||
db 4, 0, 0, 69, 16, 15, 16, 16, 15, 16, 5, 4, 0, 0, 69, 16
|
||||
db 15, 16, 16, 15, 16, 5, 4, 0, 0, 69, 16, 15, 16, 16, 15, 16
|
||||
db 5, 4, 0, 0, 70, 16, 15, 16, 16, 15, 16, 16, 4, 7, 0, 0
|
||||
db 67, 16, 15, 16, 16, 130, 15, 130, 16, 0, 0, 6, 0, 0, 70, 16
|
||||
db 15, 16, 16, 15, 16, 16, 130, 15, 64, 16, 0, 2, 0, 76, 16, 15
|
||||
db 15, 16, 16, 15, 16, 16, 15, 16, 16, 15, 16, 3, 67, 16, 15, 16
|
||||
db 15, 132, 16, 68, 15, 16, 16, 15, 16, 3, 67, 16, 15, 16, 15, 135
|
||||
db 16, 65, 15, 16, 3, 65, 16, 15, 137, 16, 65, 15, 16, 3, 65, 16
|
||||
db 15, 137, 16, 65, 15, 16, 3, 65, 16, 15, 137, 16, 65, 15, 16, 4
|
||||
db 0, 65, 16, 15, 136, 16, 65, 15, 16, 6, 0, 0, 65, 16, 15, 134
|
||||
db 16, 65, 15, 16, 0, 4, 2, 136, 16, 0, 0, 15, 16, 5, 0, 0
|
||||
db 138, 16, 0, 0, 5, 0, 64, 16, 138, 15, 64, 16, 0, 5, 67, 16
|
||||
db 15, 16, 15, 134, 16, 64, 15, 0, 65, 15, 16, 5, 67, 16, 15, 16
|
||||
db 15, 134, 16, 64, 15, 0, 65, 15, 16, 3, 67, 16, 15, 16, 15, 134
|
||||
db 16, 67, 15, 16, 15, 16, 3, 67, 16, 15, 16, 15, 134, 16, 67, 15
|
||||
db 16, 15, 16, 3, 67, 16, 15, 16, 15, 134, 16, 67, 15, 16, 15, 16
|
||||
db 3, 67, 16, 15, 16, 16, 134, 15, 67, 16, 16, 15, 16, 3, 65, 16
|
||||
db 15, 138, 16, 65, 15, 16, 3, 65, 16, 15, 138, 16, 65, 15, 16, 5
|
||||
db 65, 16, 15, 130, 16, 132, 15, 130, 16, 65, 15, 16, 1, 78, 16, 15
|
||||
db 16, 16, 15, 16, 15, 15, 16, 16, 15, 16, 16, 15, 16, 1, 78, 16
|
||||
db 15, 16, 16, 15, 16, 15, 15, 16, 16, 15, 16, 16, 15, 16, 2, 0
|
||||
db 77, 16, 15, 16, 15, 16, 15, 15, 16, 16, 15, 16, 16, 15, 16, 6
|
||||
db 0, 0, 64, 16, 137, 15, 64, 16, 0, 4, 2, 137, 16, 0, 0, 19
|
||||
db 13, 5, 0, 131, 16, 8, 131, 16, 0, 7, 65, 16, 16, 130, 14, 65
|
||||
db 16, 16, 4, 65, 16, 16, 130, 14, 65, 16, 16, 3, 67, 16, 14, 16
|
||||
db 14, 138, 16, 67, 14, 16, 14, 16, 7, 66, 16, 16, 14, 130, 16, 65
|
||||
db 14, 14, 130, 16, 65, 14, 14, 130, 16, 66, 14, 16, 16, 7, 0, 66
|
||||
db 16, 14, 14, 130, 16, 68, 14, 14, 16, 14, 14, 130, 16, 66, 14, 14
|
||||
db 16, 0, 7, 0, 0, 68, 16, 14, 16, 14, 16, 132, 14, 68, 16, 14
|
||||
db 16, 14, 16, 0, 0, 7, 0, 0, 68, 16, 16, 14, 16, 16, 132, 14
|
||||
db 68, 16, 16, 14, 16, 16, 0, 0, 5, 2, 64, 16, 138, 14, 64, 16
|
||||
db 2, 5, 2, 64, 16, 138, 14, 64, 16, 2, 7, 2, 64, 16, 131, 14
|
||||
db 130, 16, 131, 14, 64, 16, 2, 7, 3, 64, 16, 131, 14, 64, 16, 131
|
||||
db 14, 64, 16, 3, 5, 4, 66, 16, 14, 14, 130, 16, 66, 14, 14, 16
|
||||
db 4, 3, 5, 134, 16, 5, 19, 13, 5, 0, 131, 16, 8, 131, 16, 0
|
||||
db 7, 65, 16, 16, 130, 14, 65, 16, 16, 4, 65, 16, 16, 130, 14, 65
|
||||
db 16, 16, 3, 67, 16, 14, 16, 14, 138, 16, 67, 14, 16, 14, 16, 7
|
||||
db 66, 16, 16, 14, 130, 16, 65, 14, 14, 130, 16, 65, 14, 14, 130, 16
|
||||
db 66, 14, 16, 16, 7, 0, 67, 16, 14, 14, 16, 131, 14, 64, 16, 131
|
||||
db 14, 67, 16, 14, 14, 16, 0, 7, 0, 0, 66, 16, 14, 16, 136, 14
|
||||
db 66, 16, 14, 16, 0, 0, 9, 0, 0, 66, 16, 16, 14, 130, 16, 130
|
||||
db 14, 130, 16, 66, 14, 16, 16, 0, 0, 5, 2, 64, 16, 138, 14, 64
|
||||
db 16, 2, 5, 2, 64, 16, 138, 14, 64, 16, 2, 7, 2, 64, 16, 131
|
||||
db 14, 130, 16, 131, 14, 64, 16, 2, 7, 3, 64, 16, 131, 14, 64, 16
|
||||
db 131, 14, 64, 16, 3, 5, 4, 66, 16, 14, 14, 130, 16, 66, 14, 14
|
||||
db 16, 4, 5, 5, 130, 16, 0, 130, 16, 5, 0, 0, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0
|
||||
#
|
||||
.code
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
142
LIB386/LIB_SVGA/S_PAL.ASM
Normal file
142
LIB386/LIB_SVGA/S_PAL.ASM
Normal file
@@ -0,0 +1,142 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_PAL.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
MyTab db 768 dup(0)
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage Palette
|
||||
public NoLanguage PalMulti
|
||||
public NoLanguage PalOne
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Palette( (UBYTE*)PalColor )
|
||||
;
|
||||
Palette proc uses esi edi,\
|
||||
PalColor:DWORD
|
||||
;----------------------
|
||||
mov esi, PalColor
|
||||
lea edi, MyTab
|
||||
mov ecx, 256
|
||||
;----------------------
|
||||
Again: mov al, [esi]
|
||||
shr al, 2
|
||||
mov [edi], al
|
||||
mov al, [esi+1]
|
||||
shr al, 2
|
||||
mov [edi+1], al
|
||||
mov al, [esi+2]
|
||||
shr al, 2
|
||||
mov [edi+2], al
|
||||
add esi, 3
|
||||
add edi, 3
|
||||
dec ecx
|
||||
jnz Again
|
||||
;----------------------
|
||||
lea esi, MyTab
|
||||
|
||||
mov dx, 03c8h
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
inc dx
|
||||
mov ecx, 256
|
||||
Encore:
|
||||
outsb ; R
|
||||
outsb ; G
|
||||
outsb ; B
|
||||
|
||||
dec ecx
|
||||
jnz Encore
|
||||
;----------------------
|
||||
ret
|
||||
|
||||
Palette endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Palette( (UBYTE*)PalColor )
|
||||
;
|
||||
PalMulti proc uses esi edi ebx,\
|
||||
colstart:DWORD, nbcol:DWORD, PalColor:DWORD
|
||||
;----------------------
|
||||
mov esi, PalColor
|
||||
lea edi, MyTab
|
||||
|
||||
mov ecx, nbcol
|
||||
;----------------------
|
||||
Again: mov al, [esi]
|
||||
shr al, 2
|
||||
mov [edi], al
|
||||
mov al, [esi+1]
|
||||
shr al, 2
|
||||
mov [edi+1], al
|
||||
mov al, [esi+2]
|
||||
shr al, 2
|
||||
mov [edi+2], al
|
||||
add esi, 3
|
||||
add edi, 3
|
||||
dec ecx
|
||||
jnz Again
|
||||
;----------------------
|
||||
lea esi, MyTab ; Mytab + start col
|
||||
|
||||
mov dx, 03c8h
|
||||
mov ax, word ptr[colstart]
|
||||
out dx, al
|
||||
inc dx
|
||||
mov ecx, nbcol
|
||||
Encore:
|
||||
outsb ; R
|
||||
outsb ; G
|
||||
outsb ; B
|
||||
|
||||
dec ecx
|
||||
jnz Encore
|
||||
;----------------------
|
||||
ret
|
||||
|
||||
PalMulti endp
|
||||
;----------------------------------------------------------------------------
|
||||
; PalOne( col, red, green, blue )
|
||||
; ax col
|
||||
; bx red
|
||||
; cx, green
|
||||
; dx, blue
|
||||
;
|
||||
PalOne proc uses ebx,\
|
||||
col:DWORD, red:DWORD, green:DWORD, blue:DWORD
|
||||
;----------------------
|
||||
mov eax, col
|
||||
mov ebx, red
|
||||
mov ecx, green
|
||||
mov edx, blue
|
||||
|
||||
shr bl, 2 ; Red >> 2
|
||||
shr cl, 2 ; Green >> 2
|
||||
shr dl, 2 ; Blue >> 2
|
||||
mov ch, dl ; Save Blue
|
||||
|
||||
mov dx, 03c8h
|
||||
out dx, al ; al=Num Color
|
||||
inc dx
|
||||
mov al, bl
|
||||
out dx, al ; Red
|
||||
mov al, cl
|
||||
out dx, al ; Green
|
||||
mov al, ch
|
||||
out dx, al ; Blue
|
||||
;----------------------
|
||||
ret
|
||||
PalOne endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
929
LIB386/LIB_SVGA/S_PHYS.ASM
Normal file
929
LIB386/LIB_SVGA/S_PHYS.ASM
Normal file
@@ -0,0 +1,929 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_PHYS.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
extrn NoLanguage NewBank : DWORD
|
||||
|
||||
public NoLanguage ScanLine
|
||||
public NoLanguage BankSize
|
||||
public NoLanguage BankOver
|
||||
public NoLanguage BankShift
|
||||
public NoLanguage NonStdVESA
|
||||
|
||||
ALIGN 4
|
||||
|
||||
Diff dd ?
|
||||
SaveEAX dd ?
|
||||
SaveEBX dd ?
|
||||
SaveEDX dd ?
|
||||
DeltaLog dd ?
|
||||
|
||||
ScanLine dd 640
|
||||
BankSize dd 00000FFFFh
|
||||
BankOver dd 0FFFF0000h
|
||||
NonStdVESA db 0
|
||||
BankShift db 16
|
||||
|
||||
|
||||
CptLine dw 0
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyBlockPhysClip
|
||||
public NoLanguage CopyBlockPhys
|
||||
public NoLanguage Flip
|
||||
public NoLanguage Vsync
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Vsync()
|
||||
;
|
||||
Vsync proc
|
||||
mov dx, 03DAh
|
||||
NotReady: in al, dx
|
||||
jmp $+2
|
||||
test al, 08h
|
||||
jnz short NotReady
|
||||
Ready: in al, dx
|
||||
jmp $+2
|
||||
test al, 08h
|
||||
jz short Ready
|
||||
ret
|
||||
Vsync endp
|
||||
;----------------------------------------------------------------------------
|
||||
SuperMovsD macro
|
||||
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
endm
|
||||
|
||||
|
||||
SwitchBank macro
|
||||
local noswitch
|
||||
|
||||
cmp eax, BankCurrent
|
||||
je noswitch
|
||||
mov BankCurrent, eax
|
||||
call [NewBank]
|
||||
noswitch:
|
||||
endm
|
||||
|
||||
|
||||
SwitchBankNoTest macro
|
||||
|
||||
mov BankCurrent, eax
|
||||
call [NewBank]
|
||||
|
||||
endm
|
||||
|
||||
|
||||
SwitchBankDirect macro
|
||||
|
||||
call [NewBank]
|
||||
|
||||
endm
|
||||
|
||||
|
||||
ChangeVideoBank macro
|
||||
|
||||
mov [SaveEAX], eax
|
||||
mov eax, BankCurrent
|
||||
mov [SaveEDX], edx
|
||||
inc eax
|
||||
mov BankCurrent, eax
|
||||
call [NewBank]
|
||||
mov eax, [SaveEAX]
|
||||
mov edx, [SaveEDX]
|
||||
|
||||
endm
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlockClip( x0, y0, x1, y1 )
|
||||
;
|
||||
CopyBlockPhysClip proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
|
||||
;---------------------- Clipping Source Part 1
|
||||
|
||||
cmp edx, ClipXmax
|
||||
jg CopyBlockPhysClip_End
|
||||
cmp ebx, ClipXmin
|
||||
jl CopyBlockPhysClip_End
|
||||
cmp ecx, ClipYmax
|
||||
jg CopyBlockPhysClip_End
|
||||
cmp eax, ClipYmin
|
||||
jl CopyBlockPhysClip_End
|
||||
|
||||
;---------------------- Clipping Source Part 2
|
||||
|
||||
cmp edx, ClipXmin ; X0 < ClipXmin ?
|
||||
jge Ok_X0_L ; A plus tart
|
||||
mov edx, ClipXmin ; X0 = ClipXmin
|
||||
Ok_X0_L: cmp ebx, ClipXmax ; X1 > ClipXmax
|
||||
jle Ok_X1_R ; Goodbye
|
||||
mov ebx, ClipXmax ; X1 = ClipXmax
|
||||
Ok_X1_R: cmp ecx, ClipYmin ; Y0 < ClipYmin
|
||||
jge Ok_Y0_U ; On se casse
|
||||
mov ecx, ClipYmin ; Y0 = ClipYmin
|
||||
Ok_Y0_U: cmp eax, ClipYmax ; Y1 > ClipYMax
|
||||
jle Ok_Y1_D ; A priori non
|
||||
mov eax, ClipYmax ; Y1 = ClipYmax
|
||||
Ok_Y1_D:
|
||||
;---------------------- Compute Delta X & Y
|
||||
|
||||
sub ebx, edx ; EBX Delta X
|
||||
sub eax, ecx ; EAX Delta Y
|
||||
inc ebx ; EBX = Delta X + 1
|
||||
inc eax ; EAX = Delta Y + 1
|
||||
|
||||
mov esi, TabOffLine[ecx*4] ; y0
|
||||
add esi, edx ; SI Offset Src
|
||||
mov edi, esi
|
||||
|
||||
mov ebp, eax
|
||||
mov eax, edi
|
||||
shr eax, 16
|
||||
SwitchBank ; Change Bank 64Kb
|
||||
mov eax, ebp
|
||||
|
||||
xor ebp, ebp
|
||||
add esi, Log
|
||||
and edi, 0FFFFh ; 64Kb bank
|
||||
or edi, 0A0000h ; EDI = Phys
|
||||
mov bp, di ; BP For Bank
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
;----------------------
|
||||
Again: add bp, bx
|
||||
jc NewBankNear0c
|
||||
mov ecx, ebx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1c
|
||||
dec eax
|
||||
jne short Again
|
||||
;----------------------
|
||||
CopyBlockPhysClip_End: ret
|
||||
;-----------------------------------------------------------------------------
|
||||
NewBankNear0c: mov ecx, ebx
|
||||
sub ecx, ebp
|
||||
push ebx ; Sauve EBX
|
||||
mov ebx, ecx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
ChangeVideoBank : Macro
|
||||
|
||||
mov edi, 0A0000h ; Begin Phys
|
||||
mov ecx, ebp
|
||||
mov ebx, ebp
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
pop ebx ; Restore EBX
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1c
|
||||
dec eax
|
||||
jne Again
|
||||
ret
|
||||
;----------------------
|
||||
NewBankNear1c: ChangeVideoBank ; Macro
|
||||
sub edi, 010000h ; Stay in Phys
|
||||
dec eax
|
||||
jne Again
|
||||
ret
|
||||
CopyBlockPhysClip endp
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlockPhys( x0, y0, x1, y1 )
|
||||
;
|
||||
CopyBlockPhys proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
|
||||
|
||||
cmp [NonStdVESA], 0
|
||||
jne CopyBlockPhys2
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;---------------------- Compute Delta X & Y
|
||||
sub ebx, edx ; EBX Delta X
|
||||
sub eax, ecx ; EAX Delta Y
|
||||
inc ebx ; EBX = Delta X + 1
|
||||
inc eax ; EAX = Delta Y + 1
|
||||
;---------------------- Compute Adresse
|
||||
mov esi, TabOffLine[ecx*4]
|
||||
add esi, edx
|
||||
mov edi, esi
|
||||
|
||||
mov ebp, eax
|
||||
mov eax, edi
|
||||
shr eax, 16
|
||||
SwitchBank ; Change Bank 64Kb
|
||||
mov eax, ebp
|
||||
|
||||
add esi, Log
|
||||
|
||||
xor ebp, ebp
|
||||
and edi, 0FFFFh ; 64Kb bank
|
||||
or edi, 0A0000h ; EDI = Phys
|
||||
mov bp, di ; BP For Bank
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
;----------------------
|
||||
Again: add bp, bx
|
||||
jc NewBankNear0p
|
||||
mov ecx, ebx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1p
|
||||
dec eax
|
||||
jne short Again
|
||||
;----------------------
|
||||
ret
|
||||
;-----------------------------------------------------------------------------
|
||||
NewBankNear0p: mov ecx, ebx
|
||||
sub ecx, ebp
|
||||
mov [SaveEBX], ebx ; Sauve EBX
|
||||
mov ebx, ecx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
ChangeVideoBank : Macro
|
||||
|
||||
mov edi, 0A0000h ; Begin Phys
|
||||
mov ecx, ebp
|
||||
mov ebx, ebp
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
mov ebx, [SaveEBX] ; Restore EBX
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1p
|
||||
dec eax
|
||||
jne Again
|
||||
ret
|
||||
;----------------------
|
||||
NewBankNear1p: ChangeVideoBank ; Macro
|
||||
sub edi, 010000h ; Stay in Phys
|
||||
dec eax
|
||||
jne Again
|
||||
ret
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlockPhys( x0, y0, x1, y1 )
|
||||
;
|
||||
CopyBlockPhys2: mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
|
||||
;---------------------- Compute Delta X & Y
|
||||
sub ebx, edx ; EBX Delta X
|
||||
sub eax, ecx ; EAX Delta Y
|
||||
inc ebx ; EBX = Delta X + 1
|
||||
inc eax ; EAX = Delta Y + 1
|
||||
|
||||
;---------------------- Compute Adresse
|
||||
mov edi, ecx
|
||||
imul edi, [ScanLine]
|
||||
add edi, edx
|
||||
|
||||
mov [SaveEDX], edx
|
||||
mov ebp, eax
|
||||
mov esi, ecx
|
||||
|
||||
mov eax, edi
|
||||
mov cl, [BankShift]
|
||||
shr eax, cl
|
||||
SwitchBank ; Change Bank
|
||||
|
||||
mov ecx, esi
|
||||
mov eax, ebp
|
||||
mov edx, [SaveEDX]
|
||||
|
||||
mov esi, TabOffLine[ecx*4]
|
||||
add esi, edx
|
||||
add esi, Log
|
||||
|
||||
and edi, [BankSize] ; bank size
|
||||
mov ebp, edi ; BP For Bank
|
||||
or edi, 0A0000h ; EDI = Phys
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Log
|
||||
mov [DeltaLog], edx
|
||||
|
||||
mov edx, [ScanLine]
|
||||
sub edx, ebx ; DX Delta Phys
|
||||
;----------------------
|
||||
Again2: add ebp, ebx
|
||||
test ebp, [BankOver]
|
||||
jnz NewBankNear0p2
|
||||
mov ecx, ebx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
add esi, [DeltaLog]
|
||||
add edi, edx
|
||||
add ebp, edx
|
||||
test ebp, [BankOver]
|
||||
jnz NewBankNear1p2
|
||||
dec eax
|
||||
jne Again2
|
||||
;----------------------
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
NewBankNear0p2: and ebp, [BankSize]
|
||||
|
||||
mov ecx, ebx
|
||||
sub ecx, ebp
|
||||
mov [SaveEBX], ebx ; Sauve EBX
|
||||
mov ebx, ecx
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
ChangeVideoBank : Macro
|
||||
|
||||
mov edi, 0A0000h ; Begin Phys
|
||||
mov ecx, ebp
|
||||
mov ebx, ebp
|
||||
|
||||
SuperMovsD ; Macro
|
||||
|
||||
mov ebx, [SaveEBX] ; Restore EBX
|
||||
|
||||
add esi, [DeltaLog]
|
||||
add edi, edx
|
||||
add ebp, edx
|
||||
test ebp, [BankOver]
|
||||
jnz NewBankNear1p2
|
||||
dec eax
|
||||
jne Again2
|
||||
ret
|
||||
;----------------------
|
||||
NewBankNear1p2: ChangeVideoBank ; Macro
|
||||
sub edi, [BankSize] ; Stay in Phys
|
||||
and ebp, [BankSize]
|
||||
dec edi
|
||||
dec eax
|
||||
jne Again2
|
||||
|
||||
ret
|
||||
|
||||
CopyBlockPhys endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;----------------------------------------------------------------------------
|
||||
; Flip()
|
||||
;
|
||||
; Attention: de Log (m‚moire) vers Phys (vid‚o ram) … modifier
|
||||
;
|
||||
Flip proc
|
||||
|
||||
cmp [NonStdVESA], 0
|
||||
jne flip2
|
||||
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov esi, Log
|
||||
|
||||
mov eax, 0
|
||||
SwitchBank
|
||||
|
||||
mov edi, Phys
|
||||
mov ecx, 04000h
|
||||
rep movsd
|
||||
|
||||
mov eax, 1
|
||||
SwitchBankDirect
|
||||
|
||||
mov edi, Phys
|
||||
mov ecx, 04000h
|
||||
rep movsd
|
||||
|
||||
mov eax, 2
|
||||
SwitchBankDirect
|
||||
|
||||
mov edi, Phys
|
||||
mov ecx, 04000h
|
||||
rep movsd
|
||||
|
||||
mov eax, 3
|
||||
SwitchBankDirect
|
||||
|
||||
mov edi, Phys
|
||||
mov ecx, 04000h
|
||||
rep movsd
|
||||
|
||||
mov eax, 4
|
||||
SwitchBankNoTest
|
||||
|
||||
mov edi, Phys
|
||||
mov ecx, 02C00h
|
||||
rep movsd
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
ret
|
||||
|
||||
flip2: push 479
|
||||
push 639
|
||||
push 0
|
||||
push 0
|
||||
call CopyBlockPhys
|
||||
add esp, 16
|
||||
|
||||
ret
|
||||
|
||||
Flip endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
comment @
|
||||
{' EN COMMENTAIRE
|
||||
|
||||
SuperIncrust MACRO
|
||||
local Again, OkCopy, EndLine, UntilEnd
|
||||
|
||||
push ebx
|
||||
xor eax, eax ; Je cherche != 0
|
||||
Again:
|
||||
xchg esi, edi
|
||||
rep scasb ; Arret quand != 0
|
||||
jne OkCopy ; Ok Data Rencontr‚e(s)
|
||||
;-----------------------
|
||||
add esi, ebx
|
||||
xchg esi, edi
|
||||
jmp EndLine ; c'est fini!
|
||||
;-----------------------
|
||||
OkCopy: dec edi ; EDI un peu trop loin
|
||||
inc ecx ; ECX trop Petit
|
||||
|
||||
sub ebx, ecx ; EBX = Bytes Parcourus
|
||||
add esi, ebx ; Maj ESI
|
||||
|
||||
mov ebx, ecx ; EBX = Bytes Restant
|
||||
repne scasb ; Combien != 0 ?
|
||||
jne UntilEnd ; Tous jusqu'a fin (Quick!
|
||||
|
||||
inc ecx ; Maj ECX
|
||||
dec edi ; Maj EDI
|
||||
sub ebx, ecx ; EBX = Nb Same Bytes
|
||||
sub edi, ebx ; Recule EDI
|
||||
xchg esi, edi ; Log <=> Phys
|
||||
|
||||
xchg ecx, ebx
|
||||
rep movsb ; movsD Plus Tard!
|
||||
|
||||
mov ecx, ebx
|
||||
jmp Again
|
||||
UntilEnd:
|
||||
sub edi, ebx
|
||||
xchg esi, edi
|
||||
mov ecx, ebx
|
||||
rep movsb
|
||||
EndLine:
|
||||
pop ebx
|
||||
|
||||
endm
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
; Log -> Phys
|
||||
; CopyBlockIncrust( x0, y0, x1, y1 )
|
||||
;
|
||||
CopyBlockIncrust proc uses esi edi ebx ebp,\
|
||||
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
|
||||
|
||||
mov edx, x0
|
||||
mov ecx, y0
|
||||
mov ebx, x1
|
||||
mov eax, y1
|
||||
;---------------------- Compute Delta X & Y
|
||||
sub ebx, edx ; EBX Delta X
|
||||
sub eax, ecx ; EAX Delta Y
|
||||
inc ebx ; EBX = Delta X + 1
|
||||
inc eax ; EAX = Delta Y + 1
|
||||
mov word ptr [CptLine], ax
|
||||
;---------------------- Compute Adresse
|
||||
mov esi, TabOffLine[ecx*4]
|
||||
add esi, edx
|
||||
|
||||
mov edi, esi
|
||||
|
||||
mov eax, edi
|
||||
shr eax, 16
|
||||
SwitchBank ; Change Bank 64Kb
|
||||
|
||||
add esi, Log
|
||||
|
||||
xor ebp, ebp
|
||||
and edi, 0FFFFh ; 64Kb bank
|
||||
or edi, 0A0000h ; EDI = Phys
|
||||
mov bp, di ; BP For Bank
|
||||
|
||||
mov edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
;----------------------
|
||||
Again: add bp, bx
|
||||
jc NewBankNear0i
|
||||
mov ecx, ebx
|
||||
|
||||
SuperIncrust
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1i
|
||||
dec word ptr [CptLine]
|
||||
jne short Again
|
||||
;----------------------
|
||||
ret
|
||||
;----------------------
|
||||
NewBankNear0i: mov ecx, ebx
|
||||
sub ecx, ebp
|
||||
push ebx ; Sauve EBX
|
||||
mov ebx, ecx
|
||||
|
||||
SuperIncrust ; Macro
|
||||
|
||||
ChangeVideoBank : Macro
|
||||
|
||||
mov edi, 0A0000h ; Begin Phys
|
||||
mov ecx, ebp
|
||||
mov ebx, ecx
|
||||
|
||||
SuperIncrust
|
||||
|
||||
pop ebx ; Restore EBX
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
add bp, dx
|
||||
jc NewBankNear1i
|
||||
dec word ptr [CptLine]
|
||||
jne Again
|
||||
ret
|
||||
;----------------------
|
||||
NewBankNear1i: ChangeVideoBank ; Macro
|
||||
sub edi, 010000h ; Stay in Phys
|
||||
dec word ptr [CptLine]
|
||||
jne Again
|
||||
ret
|
||||
CopyBlockIncrust endp
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
FlipComp proc uses esi edi ebx ebp,\
|
||||
log0:DWORD, log1:DWORD
|
||||
|
||||
mov esi, log0 ; ESI = log0
|
||||
mov edi, log1 ; EDI = log1
|
||||
call Vsync
|
||||
;-------------------------------------------------------
|
||||
Bank0: mov eax, 0 ; Bank 0
|
||||
SwitchBank ; De l'ecran Phys
|
||||
mov eax, esi ; EAX = log0
|
||||
sub eax, 0A0000h ; EAX = log0-Phys
|
||||
mov ecx, 04000h ; 64Kb
|
||||
Cont0:
|
||||
rep cmpsd ; Cherche Difference
|
||||
jne Diff0 ; Il y a Difference
|
||||
;----------------------
|
||||
Bank1: mov eax, 1 ; Bank 1
|
||||
SwitchBank ; De l'ecran Phys
|
||||
mov eax, esi ; Maj offset Phys
|
||||
sub eax, 0A0000h ; Car Nouvelle Bank
|
||||
mov ecx, 04000h ; 64Kb
|
||||
Cont1:
|
||||
rep cmpsd ; Cherche Difference
|
||||
jne Diff1 ; Il y a Difference
|
||||
;----------------------
|
||||
Bank2: mov eax, 2 ; Bank 1
|
||||
SwitchBank ; De l'ecran Phys
|
||||
mov eax, esi ; Maj offset Phys
|
||||
sub eax, 0A0000h ; Car Nouvelle Bank
|
||||
mov ecx, 04000h ; 64Kb
|
||||
Cont2:
|
||||
rep cmpsd ; Cherche Difference
|
||||
jne Diff2 ; Il y a Difference
|
||||
;----------------------
|
||||
Bank3: mov eax, 3 ; Bank 1
|
||||
SwitchBank ; De l'ecran
|
||||
mov eax, esi ; Maj offset Phys
|
||||
sub eax, 0A0000h ; Car Nouvelle Bank
|
||||
mov ecx, 04000h ; 64Kb
|
||||
Cont3:
|
||||
rep cmpsd ; Cherche Difference
|
||||
jne Diff3 ; Il y a Difference
|
||||
;----------------------
|
||||
Bank4: mov eax, 4 ; Bank 1
|
||||
SwitchBank ; De l'ecran
|
||||
mov eax, esi ; Maj offset Phys
|
||||
sub eax, 0A0000h ; Car Nouvelle Bank
|
||||
mov ecx, 02C00h ; 64Kb
|
||||
Cont4:
|
||||
rep cmpsd ; Cherche Difference
|
||||
jne Diff4 ; Il y a Difference
|
||||
;----------------------
|
||||
ret
|
||||
;-------------------------------------------------------
|
||||
Diff0: sub esi, 4 ; Recule ESI
|
||||
sub edi, 4 ; Recule EDI
|
||||
inc ecx ; One More
|
||||
mov edx, esi ; Sauve ESI
|
||||
mov ebx, ecx ; Sauve ECX
|
||||
|
||||
repne cmpsd ; Combien ?
|
||||
sub edi, 4 ; Recule EDI
|
||||
mov esi, edx ; Restore ESI
|
||||
mov edx, edi ; Sauve EDI
|
||||
inc ecx ; One More
|
||||
sub ebx, ecx ; Calcul Nb Diffs
|
||||
xchg ecx, ebx ; Sauve ECX
|
||||
mov edi, esi ; Calcul
|
||||
sub edi, eax ; Adresse Phys
|
||||
rep movsd ; Ecriture Diffs
|
||||
mov edi, edx ; Restore EDI
|
||||
add ecx, ebx ; Restore ECX
|
||||
je Bank1 ; Fin De cette Bank
|
||||
jmp Cont0 ; Again and Again...
|
||||
;----------------------
|
||||
Diff1: sub esi, 4 ; Recule ESI
|
||||
sub edi, 4 ; Recule EDI
|
||||
inc ecx ; One More
|
||||
mov edx, esi ; Sauve ESI
|
||||
mov ebx, ecx ; Sauve ECX
|
||||
|
||||
repne cmpsd ; Combien ?
|
||||
sub edi, 4 ; Recule EDI
|
||||
mov esi, edx ; Restore ESI
|
||||
mov edx, edi ; Sauve EDI
|
||||
inc ecx ; One More
|
||||
sub ebx, ecx ; Calcul Nb Diffs
|
||||
xchg ecx, ebx ; Sauve ECX
|
||||
mov edi, esi ; Calcul
|
||||
sub edi, eax ; Adresse Phys
|
||||
rep movsd ; Ecriture Diffs
|
||||
mov edi, edx ; Restore EDI
|
||||
add ecx, ebx ; Restore ECX
|
||||
je Bank2 ; Fin De cette Bank
|
||||
jmp Cont1 ; Again and Again...
|
||||
;----------------------
|
||||
Diff2: sub esi, 4 ; Recule ESI
|
||||
sub edi, 4 ; Recule EDI
|
||||
inc ecx ; One More
|
||||
mov edx, esi ; Sauve ESI
|
||||
mov ebx, ecx ; Sauve ECX
|
||||
|
||||
repne cmpsd ; Combien ?
|
||||
sub edi, 4 ; Recule EDI
|
||||
mov esi, edx ; Restore ESI
|
||||
mov edx, edi ; Sauve EDI
|
||||
inc ecx ; One More
|
||||
sub ebx, ecx ; Calcul Nb Diffs
|
||||
xchg ecx, ebx ; Sauve ECX
|
||||
mov edi, esi ; Calcul
|
||||
sub edi, eax ; Adresse Phys
|
||||
rep movsd ; Ecriture Diffs
|
||||
mov edi, edx ; Restore EDI
|
||||
add ecx, ebx ; Restore ECX
|
||||
je Bank3 ; Fin De cette Bank
|
||||
jmp Cont2 ; Again and Again...
|
||||
;----------------------
|
||||
Diff3: sub esi, 4 ; Recule ESI
|
||||
sub edi, 4 ; Recule EDI
|
||||
inc ecx ; One More
|
||||
mov edx, esi ; Sauve ESI
|
||||
mov ebx, ecx ; Sauve ECX
|
||||
|
||||
repne cmpsd ; Combien ?
|
||||
sub edi, 4 ; Recule EDI
|
||||
mov esi, edx ; Restore ESI
|
||||
mov edx, edi ; Sauve EDI
|
||||
inc ecx ; One More
|
||||
sub ebx, ecx ; Calcul Nb Diffs
|
||||
xchg ecx, ebx ; Sauve ECX
|
||||
mov edi, esi ; Calcul
|
||||
sub edi, eax ; Adresse Phys
|
||||
rep movsd ; Ecriture Diffs
|
||||
mov edi, edx ; Restore EDI
|
||||
add ecx, ebx ; Restore ECX
|
||||
je Bank4 ; Fin De cette Bank
|
||||
jmp Cont3 ; Again and Again...
|
||||
;----------------------
|
||||
Diff4: sub esi, 4 ; Recule ESI
|
||||
sub edi, 4 ; Recule EDI
|
||||
inc ecx ; One More
|
||||
mov edx, esi ; Sauve ESI
|
||||
mov ebx, ecx ; Sauve ECX
|
||||
|
||||
repne cmpsd ; Combien ?
|
||||
sub edi, 4 ; Recule EDI
|
||||
mov esi, edx ; Restore ESI
|
||||
mov edx, edi ; Sauve EDI
|
||||
inc ecx ; One More
|
||||
sub ebx, ecx ; Calcul Nb Diffs
|
||||
xchg ecx, ebx ; Sauve ECX
|
||||
mov edi, esi ; Calcul
|
||||
sub edi, eax ; Adresse Phys
|
||||
rep movsd ; Ecriture Diffs
|
||||
mov edi, edx ; Restore EDI
|
||||
add ecx, ebx ; Restore ECX
|
||||
jne Cont4 ; Again and Again
|
||||
ret
|
||||
FlipComp endp
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
.386
|
||||
FlipComp386 proc uses ds es si di, \
|
||||
scr0:DWORD, scr1:DWORD
|
||||
|
||||
mov dx, word ptr [scr0+2] ; dx = Log0
|
||||
mov ds, word ptr [scr1+2] ; ds = Log1
|
||||
mov ax, 0A000h ; Phys
|
||||
xor si, si ; Maj Offset
|
||||
mov di, si ; a zero
|
||||
mov cx, 07D00h/2 ; 100 Lines * 4 (LONG)
|
||||
Aqui:
|
||||
mov es, dx ; es = Log0
|
||||
rep cmpsd ; Comp Log0 & Log1
|
||||
je TheEnd ; No difference, End
|
||||
|
||||
mov bp, si ; Save offset in BP
|
||||
mov bx, cx ; Save Nb Left
|
||||
repne cmpsd ; How many difference(s) ?
|
||||
jne UntilEnd ; All left are different...
|
||||
|
||||
mov es, ax
|
||||
sub bp, 4 ; Maj BP
|
||||
mov si, bp ; Maj Offset SI
|
||||
mov di, bp ; & DI
|
||||
sub bx, cx ; How much in BX
|
||||
xchg cx, bx ; Now in CX
|
||||
rep movsd ; Copy CX Bytes Log1->Phys
|
||||
|
||||
mov cx, bx ; Restore Bytes Left
|
||||
inc cx
|
||||
inc cx
|
||||
jmp short Aqui ; Twist again
|
||||
UntilEnd:
|
||||
mov es, ax ; ES = Phys
|
||||
sub bp, 4 ; Maj BP
|
||||
mov si, bp ; Maj offset SI
|
||||
mov di, bp ; & DI
|
||||
sub bx, cx ; How much left in BX
|
||||
mov cx, bx ; Now in CX ( ex: XCHG CX,BX )
|
||||
inc cx
|
||||
inc cx
|
||||
rep movsd
|
||||
TheEnd: .8086
|
||||
ret
|
||||
FlipComp386 endp
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
opt_stos_line macro
|
||||
|
||||
mov eax, ecx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
and eax, 3
|
||||
mov ecx, eax
|
||||
rep movsb
|
||||
endm
|
||||
;----------------------------------------------------------------------------
|
||||
; Flip de Log vers Phys
|
||||
|
||||
|
||||
BlockLogPhys proc uses es ds si di,\
|
||||
sox:DWORD,soy:DWORD,sol:DWORD,soh:DWORD,\
|
||||
dex:DWORD,dey:DWORD
|
||||
|
||||
|
||||
mov esi, soy
|
||||
mov esi, TabOffLine[esi*4]
|
||||
add esi, soy
|
||||
mov edi, esi
|
||||
|
||||
mov eax, edi
|
||||
shr eax, 16
|
||||
SwitchBank
|
||||
|
||||
add esi, Log
|
||||
add edi, Phys
|
||||
|
||||
|
||||
|
||||
mov di,bx
|
||||
xor ebx,ebx
|
||||
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
|
||||
mov ax, sol
|
||||
mov cs:word ptr[patch_larg1],ax
|
||||
mov cs:word ptr[patch_larg2],ax
|
||||
mov cs:word ptr[patch_larg3],ax
|
||||
neg ax
|
||||
add ax,640
|
||||
mov cs:word ptr[patch_deoff],ax
|
||||
|
||||
mov ax,320
|
||||
sub ax, sol
|
||||
mov cs:word ptr[patch_sooff],ax
|
||||
|
||||
jmp $+2
|
||||
|
||||
mov dx, soh
|
||||
|
||||
Aqui: mov ebx, edi
|
||||
add ebx, sol
|
||||
jnc ok1
|
||||
|
||||
mov ecx, sol
|
||||
sub ecx, ebx
|
||||
opt_stos_line
|
||||
|
||||
mov eax, BankCurrent
|
||||
inc eax
|
||||
SwitchBank
|
||||
|
||||
mov ecx, ebx
|
||||
opt_stos_line
|
||||
|
||||
jmp Next
|
||||
|
||||
ok1: xor ecx, ecx
|
||||
mov ecx, sol
|
||||
opt_stos_line
|
||||
|
||||
Next: mov edi, ebx
|
||||
patch_deoff equ $+2
|
||||
add edi, 1234h
|
||||
jnc ok2
|
||||
|
||||
mov eax, BankCurrent
|
||||
inc eax
|
||||
push eax
|
||||
SwitchBank
|
||||
|
||||
ok2:
|
||||
patch_sooff equ $+2
|
||||
add esi,1234h
|
||||
|
||||
dec edx
|
||||
jnz Aqui
|
||||
|
||||
ret
|
||||
|
||||
BlockLogPhys endp
|
||||
|
||||
}
|
||||
@
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
101
LIB386/LIB_SVGA/S_PLOT.ASM
Normal file
101
LIB386/LIB_SVGA/S_PLOT.ASM
Normal file
@@ -0,0 +1,101 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_PLOT.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage Plot
|
||||
public NoLanguage GetPlot
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Plot( x, y, coul )
|
||||
;
|
||||
Plot proc uses esi,\
|
||||
XX:DWORD, YY:DWORD, CC:DWORD
|
||||
mov eax, XX
|
||||
mov esi, YY
|
||||
;----------------------
|
||||
cmp eax, ClipXmin
|
||||
jl Plot_End
|
||||
cmp eax, ClipXmax
|
||||
jg Plot_End
|
||||
cmp esi, ClipYmin
|
||||
jl Plot_End
|
||||
cmp esi, ClipYmax
|
||||
jg Plot_End
|
||||
;----------------------
|
||||
mov esi, TabOffLine[esi*4]
|
||||
|
||||
add esi, Log
|
||||
|
||||
add esi, eax
|
||||
|
||||
mov al, byte ptr [CC]
|
||||
|
||||
mov [esi], al
|
||||
Plot_End:
|
||||
ret
|
||||
Plot endp
|
||||
;----------------------------------------------------------------------------
|
||||
; GetPlot( x, y, coul )
|
||||
;
|
||||
GetPlot proc uses esi,\
|
||||
XX:DWORD, YY:DWORD
|
||||
mov eax, XX
|
||||
mov esi, YY
|
||||
;----------------------
|
||||
cmp eax, ClipXmin
|
||||
jl GetPlot_End
|
||||
cmp eax, ClipXmax
|
||||
jg GetPlot_End
|
||||
cmp esi, ClipYmin
|
||||
jl GetPlot_End
|
||||
cmp esi, ClipYmax
|
||||
jg GetPlot_End
|
||||
;----------------------
|
||||
|
||||
mov esi, TabOffLine[esi*4]
|
||||
|
||||
add esi, Log
|
||||
|
||||
add esi, eax
|
||||
|
||||
xor eax, eax
|
||||
mov al, [esi]
|
||||
ret
|
||||
GetPlot_End:
|
||||
xor eax, eax
|
||||
ret
|
||||
GetPlot endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1376
LIB386/LIB_SVGA/S_POLY.ASM
Normal file
1376
LIB386/LIB_SVGA/S_POLY.ASM
Normal file
File diff suppressed because it is too large
Load Diff
84
LIB386/LIB_SVGA/S_SCREEN.ASM
Normal file
84
LIB386/LIB_SVGA/S_SCREEN.ASM
Normal file
@@ -0,0 +1,84 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_SCREEN.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;----------------------------------------------------------------------------
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
ALIGN 4
|
||||
|
||||
Diff dd ?
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage Cls
|
||||
public NoLanguage CopyScreen
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Cls()
|
||||
;
|
||||
Cls proc uses edi
|
||||
mov edi, Log
|
||||
xor eax, eax
|
||||
mov ecx, 307200/4
|
||||
rep stosd
|
||||
ret
|
||||
Cls endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyScreen( UBYTE *src, UBYTE *dst )
|
||||
;
|
||||
; Attention:De m‚moire … m‚moire (pas sur vid‚o ram)
|
||||
;
|
||||
CopyScreen proc uses esi edi,\
|
||||
src:DWORD, dst:DWORD
|
||||
|
||||
mov esi, src
|
||||
mov edi, dst
|
||||
mov ecx, 307200/4
|
||||
rep movsd
|
||||
ret
|
||||
CopyScreen endp
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
;
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
434
LIB386/LIB_SVGA/S_STRING.ASM
Normal file
434
LIB386/LIB_SVGA/S_STRING.ASM
Normal file
@@ -0,0 +1,434 @@
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
; S_TEST.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
|
||||
; include Font6X6.asm
|
||||
|
||||
; include Font8X8.asm
|
||||
|
||||
Font8X8 db 0, 0, 0, 0, 0, 0, 0, 0
|
||||
db 126, 129, 165, 129, 189, 153, 129, 126
|
||||
db 126, 255, 219, 255, 195, 231, 255, 126
|
||||
db 108, 254, 254, 254, 124, 56, 16, 0
|
||||
db 16, 56, 124, 254, 124, 56, 16, 0
|
||||
db 56, 124, 56, 254, 254, 146, 16, 124
|
||||
db 0, 16, 56, 124, 254, 124, 56, 124
|
||||
db 0, 0, 24, 60, 60, 24, 0, 0
|
||||
db 255, 255, 231, 195, 195, 231, 255, 255
|
||||
db 0, 60, 102, 66, 66, 102, 60, 0
|
||||
db 255, 195, 153, 189, 189, 153, 195, 255
|
||||
db 15, 7, 15, 125, 204, 204, 204, 120
|
||||
db 60, 102, 102, 102, 60, 24, 126, 24
|
||||
db 63, 51, 63, 48, 48, 112, 240, 224
|
||||
db 127, 99, 127, 99, 99, 103, 230, 192
|
||||
db 153, 90, 60, 231, 231, 60, 90, 153
|
||||
db 128, 224, 248, 254, 248, 224, 128, 0
|
||||
db 2, 14, 62, 254, 62, 14, 2, 0
|
||||
db 24, 60, 126, 24, 24, 126, 60, 24
|
||||
db 102, 102, 102, 102, 102, 0, 102, 0
|
||||
db 127, 219, 219, 123, 27, 27, 27, 0
|
||||
db 62, 99, 56, 108, 108, 56, 134, 252
|
||||
db 0, 0, 0, 0, 126, 126, 126, 0
|
||||
db 24, 60, 126, 24, 126, 60, 24, 255
|
||||
db 24, 60, 126, 24, 24, 24, 24, 0
|
||||
db 24, 24, 24, 24, 126, 60, 24, 0
|
||||
db 0, 24, 12, 254, 12, 24, 0, 0
|
||||
db 0, 48, 96, 254, 96, 48, 0, 0
|
||||
db 0, 0, 192, 192, 192, 254, 0, 0
|
||||
db 0, 36, 102, 255, 102, 36, 0, 0
|
||||
db 0, 24, 60, 126, 255, 255, 0, 0
|
||||
db 0, 255, 255, 126, 60, 24, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0
|
||||
db 24, 60, 60, 24, 24, 0, 24, 0
|
||||
db 108, 108, 108, 0, 0, 0, 0, 0
|
||||
db 108, 108, 254, 108, 254, 108, 108, 0
|
||||
db 24, 126, 192, 124, 6, 252, 24, 0
|
||||
db 0, 198, 204, 24, 48, 102, 198, 0
|
||||
db 56, 108, 56, 118, 220, 204, 118, 0
|
||||
db 48, 48, 96, 0, 0, 0, 0, 0
|
||||
db 24, 48, 96, 96, 96, 48, 24, 0
|
||||
db 96, 48, 24, 24, 24, 48, 96, 0
|
||||
db 0, 102, 60, 255, 60, 102, 0, 0
|
||||
db 0, 24, 24, 126, 24, 24, 0, 0
|
||||
db 0, 0, 0, 0, 0, 24, 24, 48
|
||||
db 0, 0, 0, 126, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 24, 24, 0
|
||||
db 6, 12, 24, 48, 96, 192, 128, 0
|
||||
db 124, 206, 222, 246, 230, 198, 124, 0
|
||||
db 48, 112, 48, 48, 48, 48, 252, 0
|
||||
db 120, 204, 12, 56, 96, 204, 252, 0
|
||||
db 120, 204, 12, 56, 12, 204, 120, 0
|
||||
db 28, 60, 108, 204, 254, 12, 30, 0
|
||||
db 252, 192, 248, 12, 12, 204, 120, 0
|
||||
db 56, 96, 192, 248, 204, 204, 120, 0
|
||||
db 252, 204, 12, 24, 48, 48, 48, 0
|
||||
db 120, 204, 204, 120, 204, 204, 120, 0
|
||||
db 120, 204, 204, 124, 12, 24, 112, 0
|
||||
db 0, 24, 24, 0, 0, 24, 24, 0
|
||||
db 0, 24, 24, 0, 0, 24, 24, 48
|
||||
db 24, 48, 96, 192, 96, 48, 24, 0
|
||||
db 0, 0, 126, 0, 126, 0, 0, 0
|
||||
db 96, 48, 24, 12, 24, 48, 96, 0
|
||||
db 60, 102, 12, 24, 24, 0, 24, 0
|
||||
db 124, 198, 222, 222, 220, 192, 124, 0
|
||||
db 48, 120, 204, 204, 252, 204, 204, 0
|
||||
db 252, 102, 102, 124, 102, 102, 252, 0
|
||||
db 60, 102, 192, 192, 192, 102, 60, 0
|
||||
db 248, 108, 102, 102, 102, 108, 248, 0
|
||||
db 254, 98, 104, 120, 104, 98, 254, 0
|
||||
db 254, 98, 104, 120, 104, 96, 240, 0
|
||||
db 60, 102, 192, 192, 206, 102, 58, 0
|
||||
db 204, 204, 204, 252, 204, 204, 204, 0
|
||||
db 120, 48, 48, 48, 48, 48, 120, 0
|
||||
db 30, 12, 12, 12, 204, 204, 120, 0
|
||||
db 230, 102, 108, 120, 108, 102, 230, 0
|
||||
db 240, 96, 96, 96, 98, 102, 254, 0
|
||||
db 198, 238, 254, 254, 214, 198, 198, 0
|
||||
db 198, 230, 246, 222, 206, 198, 198, 0
|
||||
db 56, 108, 198, 198, 198, 108, 56, 0
|
||||
db 252, 102, 102, 124, 96, 96, 240, 0
|
||||
db 124, 198, 198, 198, 214, 124, 14, 0
|
||||
db 252, 102, 102, 124, 108, 102, 230, 0
|
||||
db 124, 198, 224, 120, 14, 198, 124, 0
|
||||
db 252, 180, 48, 48, 48, 48, 120, 0
|
||||
db 204, 204, 204, 204, 204, 204, 252, 0
|
||||
db 204, 204, 204, 204, 204, 120, 48, 0
|
||||
db 198, 198, 198, 198, 214, 254, 108, 0
|
||||
db 198, 198, 108, 56, 108, 198, 198, 0
|
||||
db 204, 204, 204, 120, 48, 48, 120, 0
|
||||
db 254, 198, 140, 24, 50, 102, 254, 0
|
||||
db 120, 96, 96, 96, 96, 96, 120, 0
|
||||
db 192, 96, 48, 24, 12, 6, 2, 0
|
||||
db 120, 24, 24, 24, 24, 24, 120, 0
|
||||
db 16, 56, 108, 198, 0, 0, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0, 255
|
||||
db 48, 48, 24, 0, 0, 0, 0, 0
|
||||
db 0, 0, 120, 12, 124, 204, 118, 0
|
||||
db 224, 96, 96, 124, 102, 102, 220, 0
|
||||
db 0, 0, 120, 204, 192, 204, 120, 0
|
||||
db 28, 12, 12, 124, 204, 204, 118, 0
|
||||
db 0, 0, 120, 204, 252, 192, 120, 0
|
||||
db 56, 108, 100, 240, 96, 96, 240, 0
|
||||
db 0, 0, 118, 204, 204, 124, 12, 248
|
||||
db 224, 96, 108, 118, 102, 102, 230, 0
|
||||
db 48, 0, 112, 48, 48, 48, 120, 0
|
||||
db 12, 0, 28, 12, 12, 204, 204, 120
|
||||
db 224, 96, 102, 108, 120, 108, 230, 0
|
||||
db 112, 48, 48, 48, 48, 48, 120, 0
|
||||
db 0, 0, 204, 254, 254, 214, 214, 0
|
||||
db 0, 0, 184, 204, 204, 204, 204, 0
|
||||
db 0, 0, 120, 204, 204, 204, 120, 0
|
||||
db 0, 0, 220, 102, 102, 124, 96, 240
|
||||
db 0, 0, 118, 204, 204, 124, 12, 30
|
||||
db 0, 0, 220, 118, 98, 96, 240, 0
|
||||
db 0, 0, 124, 192, 112, 28, 248, 0
|
||||
db 16, 48, 252, 48, 48, 52, 24, 0
|
||||
db 0, 0, 204, 204, 204, 204, 118, 0
|
||||
db 0, 0, 204, 204, 204, 120, 48, 0
|
||||
db 0, 0, 198, 198, 214, 254, 108, 0
|
||||
db 0, 0, 198, 108, 56, 108, 198, 0
|
||||
db 0, 0, 204, 204, 204, 124, 12, 248
|
||||
db 0, 0, 252, 152, 48, 100, 252, 0
|
||||
db 28, 48, 48, 224, 48, 48, 28, 0
|
||||
db 24, 24, 24, 0, 24, 24, 24, 0
|
||||
db 224, 48, 48, 28, 48, 48, 224, 0
|
||||
db 118, 220, 0, 0, 0, 0, 0, 0
|
||||
db 0, 16, 56, 108, 198, 198, 254, 0
|
||||
db 124, 198, 192, 198, 124, 12, 6, 124
|
||||
db 0, 204, 0, 204, 204, 204, 118, 0
|
||||
db 28, 0, 120, 204, 252, 192, 120, 0
|
||||
db 126, 129, 60, 6, 62, 102, 59, 0
|
||||
db 204, 0, 120, 12, 124, 204, 118, 0
|
||||
db 224, 0, 120, 12, 124, 204, 118, 0
|
||||
db 48, 48, 120, 12, 124, 204, 118, 0
|
||||
db 0, 0, 124, 198, 192, 120, 12, 56
|
||||
db 126, 129, 60, 102, 126, 96, 60, 0
|
||||
db 204, 0, 120, 204, 252, 192, 120, 0
|
||||
db 224, 0, 120, 204, 252, 192, 120, 0
|
||||
db 204, 0, 112, 48, 48, 48, 120, 0
|
||||
db 124, 130, 56, 24, 24, 24, 60, 0
|
||||
db 224, 0, 112, 48, 48, 48, 120, 0
|
||||
db 198, 16, 124, 198, 254, 198, 198, 0
|
||||
db 48, 48, 0, 120, 204, 252, 204, 0
|
||||
db 28, 0, 252, 96, 120, 96, 252, 0
|
||||
db 0, 0, 127, 12, 127, 204, 127, 0
|
||||
db 62, 108, 204, 254, 204, 204, 206, 0
|
||||
db 120, 132, 0, 120, 204, 204, 120, 0
|
||||
db 0, 204, 0, 120, 204, 204, 120, 0
|
||||
db 0, 224, 0, 120, 204, 204, 120, 0
|
||||
db 120, 132, 0, 204, 204, 204, 118, 0
|
||||
db 0, 224, 0, 204, 204, 204, 118, 0
|
||||
db 0, 204, 0, 204, 204, 124, 12, 248
|
||||
db 195, 24, 60, 102, 102, 60, 24, 0
|
||||
db 204, 0, 204, 204, 204, 204, 120, 0
|
||||
db 24, 24, 126, 192, 192, 126, 24, 24
|
||||
db 56, 108, 100, 240, 96, 230, 252, 0
|
||||
db 204, 204, 120, 48, 252, 48, 252, 48
|
||||
db 248, 204, 204, 250, 198, 207, 198, 195
|
||||
db 14, 27, 24, 60, 24, 24, 216, 112
|
||||
db 28, 0, 120, 12, 124, 204, 118, 0
|
||||
db 56, 0, 112, 48, 48, 48, 120, 0
|
||||
db 0, 28, 0, 120, 204, 204, 120, 0
|
||||
db 0, 28, 0, 204, 204, 204, 118, 0
|
||||
db 0, 248, 0, 184, 204, 204, 204, 0
|
||||
db 252, 0, 204, 236, 252, 220, 204, 0
|
||||
db 60, 108, 108, 62, 0, 126, 0, 0
|
||||
db 56, 108, 108, 56, 0, 124, 0, 0
|
||||
db 24, 0, 24, 24, 48, 102, 60, 0
|
||||
db 0, 0, 0, 252, 192, 192, 0, 0
|
||||
db 0, 0, 0, 252, 12, 12, 0, 0
|
||||
db 198, 204, 216, 54, 107, 194, 132, 15
|
||||
db 195, 198, 204, 219, 55, 109, 207, 3
|
||||
db 24, 0, 24, 24, 60, 60, 24, 0
|
||||
db 0, 51, 102, 204, 102, 51, 0, 0
|
||||
db 0, 204, 102, 51, 102, 204, 0, 0
|
||||
db 34, 136, 34, 136, 34, 136, 34, 136
|
||||
db 85, 170, 85, 170, 85, 170, 85, 170
|
||||
db 219, 246, 219, 111, 219, 126, 215, 237
|
||||
db 24, 24, 24, 24, 24, 24, 24, 24
|
||||
db 24, 24, 24, 24, 248, 24, 24, 24
|
||||
db 24, 24, 248, 24, 248, 24, 24, 24
|
||||
db 54, 54, 54, 54, 246, 54, 54, 54
|
||||
db 0, 0, 0, 0, 254, 54, 54, 54
|
||||
db 0, 0, 248, 24, 248, 24, 24, 24
|
||||
db 54, 54, 246, 6, 246, 54, 54, 54
|
||||
db 54, 54, 54, 54, 54, 54, 54, 54
|
||||
db 0, 0, 254, 6, 246, 54, 54, 54
|
||||
db 54, 54, 246, 6, 254, 0, 0, 0
|
||||
db 54, 54, 54, 54, 254, 0, 0, 0
|
||||
db 24, 24, 248, 24, 248, 0, 0, 0
|
||||
db 0, 0, 0, 0, 248, 24, 24, 24
|
||||
db 24, 24, 24, 24, 31, 0, 0, 0
|
||||
db 24, 24, 24, 24, 255, 0, 0, 0
|
||||
db 0, 0, 0, 0, 255, 24, 24, 24
|
||||
db 24, 24, 24, 24, 31, 24, 24, 24
|
||||
db 0, 0, 0, 0, 255, 0, 0, 0
|
||||
db 24, 24, 24, 24, 255, 24, 24, 24
|
||||
db 24, 24, 31, 24, 31, 24, 24, 24
|
||||
db 54, 54, 54, 54, 55, 54, 54, 54
|
||||
db 54, 54, 55, 48, 63, 0, 0, 0
|
||||
db 0, 0, 63, 48, 55, 54, 54, 54
|
||||
db 54, 54, 247, 0, 255, 0, 0, 0
|
||||
db 0, 0, 255, 0, 247, 54, 54, 54
|
||||
db 54, 54, 55, 48, 55, 54, 54, 54
|
||||
db 0, 0, 255, 0, 255, 0, 0, 0
|
||||
db 54, 54, 247, 0, 247, 54, 54, 54
|
||||
db 24, 24, 255, 0, 255, 0, 0, 0
|
||||
db 54, 54, 54, 54, 255, 0, 0, 0
|
||||
db 0, 0, 255, 0, 255, 24, 24, 24
|
||||
db 0, 0, 0, 0, 255, 54, 54, 54
|
||||
db 54, 54, 54, 54, 63, 0, 0, 0
|
||||
db 24, 24, 31, 24, 31, 0, 0, 0
|
||||
db 0, 0, 31, 24, 31, 24, 24, 24
|
||||
db 0, 0, 0, 0, 63, 54, 54, 54
|
||||
db 54, 54, 54, 54, 255, 54, 54, 54
|
||||
db 24, 24, 255, 24, 255, 24, 24, 24
|
||||
db 24, 24, 24, 24, 248, 0, 0, 0
|
||||
db 0, 0, 0, 0, 31, 24, 24, 24
|
||||
db 255, 255, 255, 255, 255, 255, 255, 255
|
||||
db 0, 0, 0, 0, 255, 255, 255, 255
|
||||
db 240, 240, 240, 240, 240, 240, 240, 240
|
||||
db 15, 15, 15, 15, 15, 15, 15, 15
|
||||
db 255, 255, 255, 255, 0, 0, 0, 0
|
||||
db 0, 0, 118, 220, 200, 220, 118, 0
|
||||
db 0, 120, 204, 248, 204, 248, 192, 192
|
||||
db 0, 252, 204, 192, 192, 192, 192, 0
|
||||
db 0, 0, 254, 108, 108, 108, 108, 0
|
||||
db 252, 204, 96, 48, 96, 204, 252, 0
|
||||
db 0, 0, 126, 216, 216, 216, 112, 0
|
||||
db 0, 102, 102, 102, 102, 124, 96, 192
|
||||
db 0, 118, 220, 24, 24, 24, 24, 0
|
||||
db 252, 48, 120, 204, 204, 120, 48, 252
|
||||
db 56, 108, 198, 254, 198, 108, 56, 0
|
||||
db 56, 108, 198, 198, 108, 108, 238, 0
|
||||
db 28, 48, 24, 124, 204, 204, 120, 0
|
||||
db 0, 0, 126, 219, 219, 126, 0, 0
|
||||
db 6, 12, 126, 219, 219, 126, 96, 192
|
||||
db 56, 96, 192, 248, 192, 96, 56, 0
|
||||
db 120, 204, 204, 204, 204, 204, 204, 0
|
||||
db 0, 126, 0, 126, 0, 126, 0, 0
|
||||
db 24, 24, 126, 24, 24, 0, 126, 0
|
||||
db 96, 48, 24, 48, 96, 0, 252, 0
|
||||
db 24, 48, 96, 48, 24, 0, 252, 0
|
||||
db 14, 27, 27, 24, 24, 24, 24, 24
|
||||
db 24, 24, 24, 24, 24, 216, 216, 112
|
||||
db 24, 24, 0, 126, 0, 24, 24, 0
|
||||
db 0, 118, 220, 0, 118, 220, 0, 0
|
||||
db 56, 108, 108, 56, 0, 0, 0, 0
|
||||
db 0, 0, 0, 24, 24, 0, 0, 0
|
||||
db 0, 0, 0, 0, 24, 0, 0, 0
|
||||
db 15, 12, 12, 12, 236, 108, 60, 28
|
||||
db 88, 108, 108, 108, 108, 0, 0, 0
|
||||
db 112, 152, 48, 96, 248, 0, 0, 0
|
||||
db 0, 0, 60, 60, 60, 60, 0, 0
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage AffString
|
||||
public NoLanguage CoulText
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
; Text( x, y, pttext )
|
||||
;
|
||||
;
|
||||
|
||||
AffString proc uses ebp ebx edi esi,\
|
||||
XText:DWORD, YText:DWORD, PtText:DWORD
|
||||
|
||||
;----------------------
|
||||
mov ebx, YText
|
||||
mov edi, TabOffLine[ebx*4]
|
||||
add edi, Log
|
||||
add edi, XText
|
||||
;----------------------
|
||||
mov esi, PtText
|
||||
mov ebp, edi
|
||||
;----------------------
|
||||
bcar: xor eax, eax
|
||||
|
||||
mov al, [esi]
|
||||
or al, al
|
||||
jz short finstr
|
||||
|
||||
lea ebx, [esi+1] ; save esi
|
||||
|
||||
lea esi, [Font8X8+eax*8]; esi sur caractere
|
||||
|
||||
mov dl, 8
|
||||
;----------------------
|
||||
blig: mov edi, ebp
|
||||
|
||||
mov ah, [esi]
|
||||
inc esi
|
||||
mov ecx, 8
|
||||
;----------------------
|
||||
bcol: shl ah, 1
|
||||
jc short coulencre
|
||||
|
||||
mov al, byte ptr[Text_Paper]
|
||||
cmp al, -1
|
||||
jnz short coulfond
|
||||
|
||||
jmp short next
|
||||
coulencre: mov al, byte ptr[Text_Ink]
|
||||
coulfond: mov byte ptr[edi], al
|
||||
next: inc edi
|
||||
dec ecx
|
||||
jnz short bcol
|
||||
|
||||
add ebp, Screen_X
|
||||
dec dl
|
||||
jnz short blig
|
||||
|
||||
sub ebp, (640*8)-8
|
||||
|
||||
mov esi, ebx
|
||||
;----------------------
|
||||
jmp short bcar
|
||||
finstr:
|
||||
ret
|
||||
|
||||
AffString endp
|
||||
|
||||
comment #
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
; Text( x, y, pttext )
|
||||
;
|
||||
;
|
||||
AffString1 proc uses ebp ebx edi esi,\
|
||||
XText:DWORD, YText:DWORD, PtText:DWORD
|
||||
|
||||
;----------------------
|
||||
mov ebx, YText
|
||||
mov edi, TabOffLine[ebx*4]
|
||||
add edi, Log
|
||||
add edi, XText
|
||||
;----------------------
|
||||
mov esi, PtText
|
||||
mov ebp, edi
|
||||
;----------------------
|
||||
bcar: xor eax, eax
|
||||
|
||||
lodsb
|
||||
or al, al
|
||||
jz short finstr
|
||||
|
||||
sub al, 32
|
||||
shl eax, 2 ; *4
|
||||
mov edi, eax
|
||||
shl eax, 3 ; *36
|
||||
add eax, edi ; *36
|
||||
;----------------------
|
||||
mov ebx, esi
|
||||
lea esi, [Font6X6+eax]; pointe datas car
|
||||
mov cl, 6
|
||||
;----------------------
|
||||
blig: mov edi, ebp
|
||||
mov ch, 6
|
||||
;----------------------
|
||||
bcol: lodsb
|
||||
or al, al
|
||||
jnz short coulencre
|
||||
|
||||
mov al, byte ptr[Text_Paper]
|
||||
cmp al, -1
|
||||
jnz short coulfond
|
||||
|
||||
jmp short next
|
||||
coulencre: mov al, byte ptr[Text_Ink]
|
||||
coulfond: mov byte ptr[edi], al
|
||||
next: inc edi
|
||||
dec ch
|
||||
jnz short bcol
|
||||
|
||||
add ebp, Screen_X
|
||||
dec cl
|
||||
jnz short blig
|
||||
|
||||
sub ebp, (640*6)-6
|
||||
|
||||
mov esi, ebx
|
||||
;----------------------
|
||||
jmp short bcar
|
||||
finstr:
|
||||
ret
|
||||
|
||||
AffString1 endp
|
||||
|
||||
#
|
||||
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
CoulText proc ,\
|
||||
ink:DWORD, paper:DWORD
|
||||
mov eax, ink
|
||||
mov byte ptr [Text_Ink], al
|
||||
mov eax, paper
|
||||
mov byte ptr [Text_Paper], al
|
||||
ret
|
||||
CoulText endp
|
||||
;ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
190
LIB386/LIB_SVGA/S_TEXT.C
Normal file
190
LIB386/LIB_SVGA/S_TEXT.C
Normal file
@@ -0,0 +1,190 @@
|
||||
|
||||
#include "\projet\lib386\lib_sys\adeline.h"
|
||||
#include "\projet\lib386\lib_sys\lib_sys.h"
|
||||
|
||||
#include "\projet\lib386\lib_svga\lib_svga.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/* (c) Adeline 1993 */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
|
||||
ßßÛßß Ûßßßß ßÜ Üß ßßÛßß
|
||||
ÛÛ ÛÛßß ÜßÜ ÛÛ
|
||||
ßß ßßßßß ß ß ßß
|
||||
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
||||
|
||||
void Text( WORD x,WORD y,char *msk, ... )
|
||||
{
|
||||
// ULONG *pt = (ULONG *)&str_in ;
|
||||
WORD l ;
|
||||
char c ;
|
||||
char str[256] ;
|
||||
char tempo[34] ;
|
||||
char *str_out = str ;
|
||||
char *ptr ;
|
||||
WORD flagflip = 0 ;
|
||||
va_list ap;
|
||||
|
||||
if( (y < ClipYmin)
|
||||
OR (y > ClipYmax-7)
|
||||
OR (x > ClipXmax) ) return ;
|
||||
|
||||
l = 0 ;
|
||||
|
||||
va_start(ap, msk);
|
||||
|
||||
*str_out = 0 ;
|
||||
while( (c=*msk++) != 0 )
|
||||
{
|
||||
if( c == '%' )
|
||||
{
|
||||
switch( toupper(*msk++) )
|
||||
{
|
||||
case 'C': /* char */
|
||||
tempo[0] = va_arg(ap,char);
|
||||
tempo[1] = 0 ;
|
||||
strcat(str_out, tempo ) ;
|
||||
l++ ;
|
||||
break ;
|
||||
|
||||
case 'S': /* string */
|
||||
ptr = va_arg(ap,char*) ;
|
||||
strcat(str_out, ptr) ;
|
||||
l += strlen(ptr) ;
|
||||
break ;
|
||||
|
||||
case 'B': /* byte */
|
||||
strcat(str_out, ltoa( va_arg(ap, UBYTE), tempo, 10 )) ;
|
||||
l += strlen( tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'D': /* decimal */
|
||||
strcat(str_out, ltoa( va_arg(ap, int), tempo, 10 )) ;
|
||||
l += strlen( tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'L': /* long decimal */
|
||||
strcat(str_out, ltoa( va_arg(ap, int), tempo, 10 )) ;
|
||||
l += strlen( tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'U': /* unsigned decimal */
|
||||
strcat(str_out, ultoa( va_arg(ap, unsigned), tempo, 10 )) ;
|
||||
l += strlen( tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'P': /* pointeur hexa */
|
||||
strcat(str_out, ultoa( va_arg(ap, unsigned), tempo, 16 )) ;
|
||||
l += strlen( tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'F':
|
||||
flagflip = 1 ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
return ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
str[l] = c ;
|
||||
l++ ;
|
||||
str[l] = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = str ;
|
||||
|
||||
if( x + l*8 - 1 > ClipXmax )
|
||||
{
|
||||
ptr[ (ClipXmax-x)/8 ] = 0 ;
|
||||
}
|
||||
|
||||
if( x < ClipXmin )
|
||||
{
|
||||
ptr += (ClipXmin-x)/8 ;
|
||||
x += ClipXmin-x ;
|
||||
}
|
||||
|
||||
AffString( x, y, ptr ) ;
|
||||
|
||||
if( flagflip )
|
||||
{
|
||||
CopyBlockPhys( x,y, x+strlen(ptr)*8-1, y+7 ) ;
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
|
||||
#ifdef OLD_VERSION
|
||||
|
||||
void Text( WORD x,WORD y,char *msk, ULONG str_in )
|
||||
{
|
||||
ULONG *pt = (ULONG *)&str_in ;
|
||||
WORD l ;
|
||||
char c ;
|
||||
char str[256] ;
|
||||
char tempo[34] ;
|
||||
char *str_out = str ;
|
||||
void *ptr ;
|
||||
|
||||
*str_out = 0 ;
|
||||
while( (c=*msk++) != 0 )
|
||||
{
|
||||
if( c == '%' )
|
||||
{
|
||||
switch( toupper(*msk++) )
|
||||
{
|
||||
case 'C': /* char */
|
||||
tempo[0] = *(char *)pt;
|
||||
tempo[1] = 0 ;
|
||||
strcat(str_out, tempo ) ;
|
||||
break ;
|
||||
|
||||
case 'S': /* string */
|
||||
strcat(str_out, *(char **)pt) ;
|
||||
break ;
|
||||
|
||||
case 'B': /* byte */
|
||||
strcat(str_out, ltoa( *(UBYTE *)pt, tempo, 10 )) ;
|
||||
break ;
|
||||
|
||||
case 'D': /* decimal */
|
||||
strcat(str_out, ltoa( *pt, tempo, 10 )) ;
|
||||
break ;
|
||||
|
||||
case 'L': /* long decimal */
|
||||
strcat(str_out, ltoa( *pt, tempo, 10 )) ;
|
||||
break ;
|
||||
|
||||
case 'U': /* unsigned decimal */
|
||||
strcat(str_out, ultoa( *pt, tempo, 10 )) ;
|
||||
break ;
|
||||
|
||||
case 'P': /* pointeur hexa */
|
||||
strcat(str_out, ltoa( *pt, tempo, 16 )) ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
return ;
|
||||
}
|
||||
pt++;
|
||||
}
|
||||
else
|
||||
{
|
||||
l = strlen( str ) ;
|
||||
str[l] = c ;
|
||||
str[l+1] = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
AffString( x, y, str ) ;
|
||||
}
|
||||
#endif
|
||||
2
LIB386/LIB_SVGA/TA.BAT
Normal file
2
LIB386/LIB_SVGA/TA.BAT
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
tasm /m2 /mx /z /zi /t /jMASM51 /jQUIRKS %1
|
||||
2257
LIB386/LIB_SVGA/TEXTURE.ASM
Normal file
2257
LIB386/LIB_SVGA/TEXTURE.ASM
Normal file
File diff suppressed because it is too large
Load Diff
33
LIB386/LIB_SVGA/VESA.ASH
Normal file
33
LIB386/LIB_SVGA/VESA.ASH
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
vgainfo struc
|
||||
VESASignature db 4 dup (?) ; 4 signature bytes
|
||||
VESAVersion dw ? ; VESA version number
|
||||
OEMStringPtr dd ? ; Pointer to OEM string
|
||||
Capabilities db 4 dup (?) ; Capabilities of the video environment
|
||||
VideoModePtr dd ? ; Pointer to supported Super VGA modes
|
||||
vgainfo ends
|
||||
|
||||
vesamode struc
|
||||
ModeAttributes dw ? ; mode attributes
|
||||
WinAAttributes db ? ; window A attributes
|
||||
WinBAttributes db ? ; window B attributes
|
||||
WinGranularity dw ? ; window granularity
|
||||
WinSize dw ? ; window size
|
||||
WinASegment dw ? ; window A start segment
|
||||
WinBSegment dw ? ; window B start segment
|
||||
WinFuncPtr dd ? ; pointer to window function
|
||||
BytesPerLine dw ? ; bytes per scan line
|
||||
;
|
||||
; optional information (provided if bit D1 of ModeAttributes is set)
|
||||
;
|
||||
XResolution dw ? ; horizontal resolution
|
||||
YResolution dw ? ; vertical resolution
|
||||
XCharSize db ? ; character cell width
|
||||
YCharSize db ? ; character cell height
|
||||
NumberOfPlanes db ? ; number of memory planes
|
||||
BitsPerPixel db ? ; bits per pixel
|
||||
NumberOfBanks db ? ; number of banks
|
||||
MemoryModel db ? ; memory model type
|
||||
BankSize db ? ; bank size in kb
|
||||
vesamode ends
|
||||
|
||||
138
LIB386/LIB_SVGA/VESA.ASM
Normal file
138
LIB386/LIB_SVGA/VESA.ASM
Normal file
@@ -0,0 +1,138 @@
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
; VESA.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
|
||||
|
||||
;*--------------------------------------------------------------------------*
|
||||
|
||||
.386
|
||||
jumps
|
||||
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
.DATA
|
||||
|
||||
PUBLIC NoLanguage VESA_Error
|
||||
|
||||
extrn NoLanguage ScanLine: DWORD
|
||||
extrn NoLanguage NonStdVESA: BYTE
|
||||
extrn NoLanguage BankShift: BYTE
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
RMI equ $
|
||||
RMI_EDI dd 0
|
||||
RMI_ESI dd 0
|
||||
RMI_EBP dd 0
|
||||
RMI_RESERVED dd 0
|
||||
RMI_EBX dd 0
|
||||
RMI_EDX dd 0
|
||||
RMI_ECX dd 0
|
||||
RMI_EAX dd 0
|
||||
RMI_flags dw 0
|
||||
RMI_ES dw 0
|
||||
RMI_DS dw 0
|
||||
RMI_FS dw 0
|
||||
RMI_GS dw 0
|
||||
RMI_IP dw 0
|
||||
RMI_CS dw 0
|
||||
RMI_SP dw 0
|
||||
RMI_SS dw 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
Vesa_Error db 0
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
.CODE
|
||||
|
||||
PUBLIC NoLanguage NewBankVesa
|
||||
PUBLIC NoLanguage InitModeVesa
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewBankVesa proc
|
||||
|
||||
push ebx
|
||||
|
||||
Shift equ $+3
|
||||
shl ax, 0
|
||||
|
||||
mov dx, ax
|
||||
mov eax, 4F05h ; change bank VESA
|
||||
xor ebx, ebx ; bh = 0, set bank
|
||||
int 10h
|
||||
|
||||
pop ebx
|
||||
|
||||
ret
|
||||
|
||||
NewBankVesa endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
InitModeVesa proc
|
||||
|
||||
mov byte ptr[VESA_Error], 0
|
||||
|
||||
mov eax, 0100h ; DMPI Allocate Dos Mem
|
||||
mov ebx, 32 ; 512 byte just in case
|
||||
int 31h ; return dos segment in ax
|
||||
push edx ; save selector
|
||||
push eax ; save real-mode segment
|
||||
|
||||
push es ; save es
|
||||
mov RMI_ES, ax ; buffer segment
|
||||
xor RMI_EDI, 0 ; buffer offset 0
|
||||
mov RMI_EAX, 4F01h ; Vesa information
|
||||
mov RMI_ECX, 0101h ; mode 101h
|
||||
mov ax, ds
|
||||
mov es, ax ; es = ds (just in case)
|
||||
mov edi, offset RMI ; registers
|
||||
mov ax, 0300h ; DMPI generate real-mode int
|
||||
mov bx, 10h ; int 10h
|
||||
int 31h
|
||||
pop es ; restore es
|
||||
|
||||
mov eax, RMI_EAX
|
||||
cmp ax, 004Fh
|
||||
jne error
|
||||
|
||||
pop eax ; restore real-mode segment
|
||||
and eax, 0FFFFh ; only segment
|
||||
shl eax, 4 ; convert to linear
|
||||
|
||||
movzx ebx, word ptr[eax+10h]
|
||||
cmp ebx, 640
|
||||
je okscan
|
||||
mov [ScanLine], ebx ; Scanline
|
||||
mov [NonStdVESA], 1
|
||||
|
||||
okscan: mov ax, [eax+4] ; get granularity
|
||||
bsr ax, ax ; get higher bit position
|
||||
neg al ; - position
|
||||
add al, 6 ; shift = 6 - position
|
||||
mov byte ptr[Shift], al
|
||||
|
||||
pop edx ; restore selector
|
||||
mov eax, 0101h ; DPMI return Dos memory
|
||||
int 31h
|
||||
|
||||
mov ax, 4F02h ; Switch to Video Mode
|
||||
mov bx, 0101h ; VESA 640*480*256
|
||||
int 10h
|
||||
ret
|
||||
error:
|
||||
pop eax
|
||||
pop edx ; restore selector
|
||||
mov eax, 0101h ; DPMI return Dos memory
|
||||
int 31h
|
||||
|
||||
mov byte ptr[VESA_Error], 1
|
||||
|
||||
ret
|
||||
|
||||
InitModeVesa endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
END
|
||||
33
LIB386/LIB_SVGA/VESA.INC
Normal file
33
LIB386/LIB_SVGA/VESA.INC
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
vgainfo struc
|
||||
VESASignature db 4 dup (?) ; 4 signature bytes
|
||||
VESAVersion dw ? ; VESA version number
|
||||
OEMStringPtr dd ? ; Pointer to OEM string
|
||||
Capabilities db 4 dup (?) ; Capabilities of the video environment
|
||||
VideoModePtr dd ? ; Pointer to supported Super VGA modes
|
||||
vgainfo ends
|
||||
|
||||
vesamode struc
|
||||
ModeAttributes dw ? ; mode attributes
|
||||
WinAAttributes db ? ; window A attributes
|
||||
WinBAttributes db ? ; window B attributes
|
||||
WinGranularity dw ? ; window granularity
|
||||
WinSize dw ? ; window size
|
||||
WinASegment dw ? ; window A start segment
|
||||
WinBSegment dw ? ; window B start segment
|
||||
WinFuncPtr dd ? ; pointer to window function
|
||||
BytesPerLine dw ? ; bytes per scan line
|
||||
;
|
||||
; optional information (provided if bit D1 of ModeAttributes is set)
|
||||
;
|
||||
XResolution dw ? ; horizontal resolution
|
||||
YResolution dw ? ; vertical resolution
|
||||
XCharSize db ? ; character cell width
|
||||
YCharSize db ? ; character cell height
|
||||
NumberOfPlanes db ? ; number of memory planes
|
||||
BitsPerPixel db ? ; bits per pixel
|
||||
NumberOfBanks db ? ; number of banks
|
||||
MemoryModel db ? ; memory model type
|
||||
BankSize db ? ; bank size in kb
|
||||
vesamode ends
|
||||
|
||||
288
LIB386/LIB_SVGA/ZOOM.ASM
Normal file
288
LIB386/LIB_SVGA/ZOOM.ASM
Normal file
@@ -0,0 +1,288 @@
|
||||
.386p
|
||||
jumps
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include svga.ash
|
||||
|
||||
EVEN
|
||||
|
||||
Virgule dw 00
|
||||
|
||||
ALIGN 4
|
||||
|
||||
Largeur dd 0000
|
||||
OffsetLine dd 0000
|
||||
PoidFort dd 0000
|
||||
Hauteur dd 0000
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage ScaleLine
|
||||
public NoLanguage ScaleBox
|
||||
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
ScaleBox proc uses ebx esi edi ebp,\
|
||||
xs0:DWORD, ys0:DWORD, xs1:DWORD, ys1:DWORD, ptrs:DWORD,\
|
||||
xd0:DWORD, yd0:DWORD, xd1:DWORD, yd1:DWORD, ptrd:DWORD
|
||||
|
||||
mov esi, ptrs
|
||||
mov edi, ptrd
|
||||
|
||||
mov eax, xd0
|
||||
add edi, eax
|
||||
mov ecx, xd1
|
||||
sub ecx, eax ; ECX delta x screen
|
||||
|
||||
|
||||
mov edx, xs0 ; start x source
|
||||
add esi, edx
|
||||
mov eax, xs1 ; end x source
|
||||
sub eax, edx ; delta source
|
||||
inc eax
|
||||
shl eax, 16 ; *65536
|
||||
|
||||
xor edx, edx
|
||||
div ecx
|
||||
mov [Virgule], ax
|
||||
shr eax, 16 ; poid fort
|
||||
mov [PoidFort], eax
|
||||
|
||||
inc ecx
|
||||
mov [Largeur], ecx
|
||||
mov eax, 640
|
||||
sub eax, ecx
|
||||
mov [OffsetLine], eax
|
||||
|
||||
mov eax, yd0
|
||||
add edi, TabOffLine[eax*4]
|
||||
mov ecx, yd1
|
||||
sub ecx, eax
|
||||
|
||||
mov eax, ys0
|
||||
add esi, TabOffLine[eax*4]
|
||||
mov edx, eax
|
||||
|
||||
mov eax, ys1
|
||||
sub eax, edx
|
||||
inc eax
|
||||
shl eax, 16
|
||||
|
||||
xor edx, edx
|
||||
div ecx
|
||||
inc ecx
|
||||
mov [Hauteur], ecx
|
||||
mov ebp, eax
|
||||
shr ebp, 16
|
||||
mov dx, ax
|
||||
xor bx, bx
|
||||
|
||||
yloop: push ebp
|
||||
push edx
|
||||
push ebx
|
||||
push esi
|
||||
|
||||
mov ebp, [PoidFort]
|
||||
mov dx, [Virgule]
|
||||
mov ecx, [Largeur]
|
||||
xor bx, bx
|
||||
EVEN
|
||||
xloop: mov al, byte ptr[esi]
|
||||
mov [edi], al
|
||||
inc edi
|
||||
add bx, dx ; virgule 16 bits
|
||||
adc esi, ebp ; poid fort
|
||||
dec ecx
|
||||
jnz xloop
|
||||
|
||||
add edi, [OffsetLine] ; 640-delta x screen
|
||||
|
||||
pop esi
|
||||
pop ebx
|
||||
pop edx
|
||||
pop ebp
|
||||
|
||||
xor eax, eax
|
||||
add bx, dx ; virgule 16 bits
|
||||
adc eax, ebp ; poid fort
|
||||
add esi, TabOffLine[eax*4]
|
||||
|
||||
dec [Hauteur]
|
||||
jnz yloop
|
||||
|
||||
ret
|
||||
|
||||
ScaleBox endp
|
||||
|
||||
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
|
||||
|
||||
ScaleLine proc uses ebx esi edi ebp,\
|
||||
xs0:DWORD, xs1:DWORD, ptrs:DWORD,\
|
||||
xe0:DWORD, xe1:DWORD, ptrd:DWORD
|
||||
|
||||
|
||||
mov esi, ptrs
|
||||
mov edi, ptrd
|
||||
|
||||
mov eax, xe0
|
||||
mov ecx, xe1
|
||||
|
||||
sub ecx, eax ; ECX delta x screen
|
||||
; jz
|
||||
|
||||
mov edx, xs0 ; start x source
|
||||
mov eax, xs1 ; end x source
|
||||
|
||||
sub eax, edx ; delta source
|
||||
|
||||
shl eax, 16 ; *65536
|
||||
xor edx, edx
|
||||
|
||||
div ecx
|
||||
mov ebp, eax ; EBP step intensite, EDX reste
|
||||
|
||||
shr ebp, 16 ; poid fort
|
||||
|
||||
mov dx, ax
|
||||
|
||||
xor bx, bx
|
||||
|
||||
EVEN
|
||||
xloop: mov al, byte ptr[esi]
|
||||
mov [edi], al
|
||||
inc edi
|
||||
add bx, dx ; virgule
|
||||
adc esi, ebp ; poid fort
|
||||
dec ecx
|
||||
jnz xloop
|
||||
|
||||
ret
|
||||
|
||||
ScaleLine endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
cumul_low dw 00
|
||||
cumul_high dw 00
|
||||
y_sprite dw 00
|
||||
|
||||
ScaleSprite proc uses es ds si di,\
|
||||
Xaff:WORD,Yaff:WORD,NumSpf:WORD,PtrSpf:PTR,\
|
||||
largeur:WORD,hauteur:WORD
|
||||
|
||||
mov ax,largeur
|
||||
mov cs:word ptr[patch_largeur],ax
|
||||
|
||||
mov ax,hauteur
|
||||
mov cs:word ptr[patch_hauteur],ax
|
||||
mov cx,ax
|
||||
|
||||
les di,Log
|
||||
|
||||
mov bx,Yaff
|
||||
shl bx,1
|
||||
mov di,ss:[bx]
|
||||
add di,Xaff
|
||||
|
||||
lds si,PtrSpf
|
||||
|
||||
mov bx,NumSpf
|
||||
shl bx,1
|
||||
add si,word ptr[si+bx]
|
||||
add si,4 ; saute start x y
|
||||
|
||||
lodsw
|
||||
mov cs:word ptr[patch_largeur_sprite],ax ; largeur sprite
|
||||
mov bx,ax
|
||||
|
||||
lodsw ; hauteur sprite
|
||||
|
||||
xor dx,dx
|
||||
div cx
|
||||
mov bp,ax
|
||||
xor ax,ax
|
||||
mov y_sprite,ax
|
||||
div cx
|
||||
mov cumul_low,ax
|
||||
|
||||
mov ax,bp
|
||||
mul bx
|
||||
mov cumul_high,ax
|
||||
|
||||
jmp $+2
|
||||
|
||||
patch_hauteur equ $+1
|
||||
mov cx,1234h
|
||||
|
||||
l1: push cx
|
||||
push di
|
||||
|
||||
patch_largeur_sprite equ $+1
|
||||
mov bx,1234h
|
||||
|
||||
patch_largeur equ $+1
|
||||
mov cx,1234h
|
||||
|
||||
mov ax,bx ; delta
|
||||
xor dx,dx
|
||||
div cx ; /NbStep
|
||||
mov bp,ax
|
||||
xor ax,ax ; reste*65536
|
||||
div cx ; /NbStep
|
||||
mov dx,bp ; low
|
||||
mov bp,ax ; high
|
||||
|
||||
xor bx,bx
|
||||
|
||||
push si
|
||||
|
||||
cl0: mov al,byte ptr[si]
|
||||
stosb
|
||||
add bx,bp
|
||||
adc si,dx
|
||||
loop cl0
|
||||
|
||||
pop si
|
||||
|
||||
mov ax,cumul_low
|
||||
add y_sprite,ax
|
||||
jnc l4
|
||||
add si,cs:word ptr[patch_largeur_sprite]
|
||||
l4: add si,cumul_high
|
||||
|
||||
pop di
|
||||
add di,320
|
||||
pop cx
|
||||
loop l1
|
||||
|
||||
ret
|
||||
|
||||
ScaleSprite endp
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user