318 lines
6.1 KiB
NASM
318 lines
6.1 KiB
NASM
;----------------------------------------------------------------------------
|
|
; 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
|