Initial commit

This commit is contained in:
Gwen Gourevich
2021-10-27 10:34:18 +02:00
parent 43ad18eb04
commit c5f4f6ba25
199 changed files with 73169 additions and 0 deletions

6
LIB386/LIB_SVGA/BLOC.C Normal file
View File

@@ -0,0 +1,6 @@
/*ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ*
ロロ゚゚゚ ロ゚゚゚゚ ロ゚゚゚ロ ロ゚゚゚゚ ロ゚゚゚゚ ロロワ ロ ロワ ワロ ロ゚゚゚ロ ロ゚゚゚ワ ロ゚゚゚゚
゚゚゚゚ロ ロロ ロロ゚ロ゚ ロロ゚゚ ロロ゚゚ ロロ゚ロロ ロロ゚ ロ ロロ ロ ロロ ロ ロロ゚゚
゚゚゚゚゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚ ゚ ゚゚゚゚゚ ゚゚゚゚ ゚゚゚゚゚
*ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ*/
/*トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト*/

13
LIB386/LIB_SVGA/BUILD.BAT Normal file
View 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

View 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
View 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
View File

@@ -0,0 +1 @@
td286 -do -vg test

628
LIB386/LIB_SVGA/DLL.ASM Normal file
View 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
View 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
View 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
View 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

File diff suppressed because one or more lines are too long

216
LIB386/LIB_SVGA/FONT_A.ASM Normal file
View 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
View 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)) ;
}
/*--------------------------------------------------------------------------*/

View 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
View 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

View 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() ;
}
/*--------------------------------------------------------------------------*/

View 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
View 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
View 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
View 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
View 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
View 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

View File

@@ -0,0 +1,4 @@
.model large,c

BIN
LIB386/LIB_SVGA/MOUSE.GPH Normal file

Binary file not shown.

BIN
LIB386/LIB_SVGA/MOUSE.PCX Normal file

Binary file not shown.

218
LIB386/LIB_SVGA/PCX.C Normal file
View 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
View 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
View 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
View 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
View 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

View 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

View 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
View 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

View 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
View 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

File diff suppressed because it is too large Load Diff

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
View 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
View 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
View 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 ) ;
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/

View 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
View 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
View 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 (mmoire) vers Phys (vido 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 Rencontre(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
View 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

File diff suppressed because it is too large Load Diff

View 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 mmoire … mmoire (pas sur vido 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

View 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
View 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
View File

@@ -0,0 +1,2 @@
tasm /m2 /mx /z /zi /t /jMASM51 /jQUIRKS %1

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
View 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
View 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
View 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
View 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