Added a new video mode to the DOS port.

This commit is contained in:
stainless
2001-09-06 01:40:09 +00:00
parent 100c92912d
commit 7671377681
7 changed files with 266 additions and 86 deletions

View File

@@ -621,12 +621,13 @@ db '',13,10
%endif %endif
%ifdef __MSDOS__ %ifdef __MSDOS__
db '; Video Mode, 0 - 10',13,10 db '; Video Mode, 0 - 10',13,10
db '; 0 = 256x224x8B (MODEQ) 1 = 256x256x8B (MODEQ)',13,10 db '; 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10
db '; 2 = 320x240x8B (MODEX) 3 = 640x480x16B (VESA1)',13,10 db '; 2 = 256x256x8B (MODEQ) 3 = 320x240x8B (MODEX)',13,10
db '; 4 = 320x240x8B (VESA2) 5 = 320x240x16B (VESA2)',13,10 db '; 4 = 640x480x16B (VESA1) 5 = 320x240x8B (VESA2)',13,10
db '; 6 = 320x480x8B (VESA2) 7 = 320x480x16B (VESA2)',13,10 db '; 6 = 320x240x16B (VESA2) 7 = 320x480x8B (VESA2)',13,10
db '; 8 = 512x384x8B (VESA2) 9 = 512x384x16B (VESA2)',13,10 db '; 8 = 320x480x16B (VESA2) 9 = 512x384x8B (VESA2)',13,10
db '; 10 = 640x480x8B (VESA2) 11 = 640x480x16B (VESA2)',13,10 db '; 10 = 512x384x16B (VESA2) 11 = 640x480x8B (VESA2)',13,10
db '; 12 = 640x480x16B (VESA2)',13,10
db '',13,10 db '',13,10
db 'VideoModeDos = %U',13,10 db 'VideoModeDos = %U',13,10
db '',13,10 db '',13,10

View File

@@ -1013,43 +1013,44 @@ NEWSYM ClearScreen
SECTION .data SECTION .data
; Total Number of Video Modes ; Total Number of Video Modes
NEWSYM NumVideoModes, dd 12 NEWSYM NumVideoModes, dd 13
; GUI Video Mode Names - Make sure that all names are of the same length ; GUI Video Mode Names - Make sure that all names are of the same length
; and end with a NULL terminator ; and end with a NULL terminator
NEWSYM GUIVideoModeNames NEWSYM GUIVideoModeNames
db '256X224X8B MODEQ',0 ; 0 db '256X224X8B MODEQ',0 ; 0
db '256X256X8B MODEQ',0 ; 1 db '256X240X8B MODEQ',0 ; 1
db '320X240X8B MODEX',0 ; 2 db '256X256X8B MODEQ',0 ; 2
db '640X480X16B VESA1',0 ; 3 db '320X240X8B MODEX',0 ; 3
db '320X240X8B VESA2',0 ; 4 db '640X480X16B VESA1',0 ; 4
db '320X240X16B VESA2',0 ; 5 db '320X240X8B VESA2',0 ; 5
db '320X480X8B VESA2',0 ; 6 db '320X240X16B VESA2',0 ; 6
db '320X480X16B VESA2',0 ; 7 db '320X480X8B VESA2',0 ; 7
db '512X384X8B VESA2',0 ; 8 db '320X480X16B VESA2',0 ; 8
db '512X384X16B VESA2',0 ; 9 db '512X384X8B VESA2',0 ; 9
db '640X480X8B VESA2',0 ; 10 db '512X384X16B VESA2',0 ; 10
db '640X480X16B VESA2',0 ; 11 db '640X480X8B VESA2',0 ; 11
db '640X480X16B VESA2',0 ; 12
db ' ',0 db ' ',0
; Video Mode Feature Availability (1 = Available, 0 = Not Available) ; Video Mode Feature Availability (1 = Available, 0 = Not Available)
; Left side starts with Video Mode 0 ; Left side starts with Video Mode 0
NEWSYM GUI16VID, db 0,0,0,1,0,1,0,1,0,1,0,1,0 ; 16-bit mode NEWSYM GUI16VID, db 0,0,0,0,1,0,1,0,1,0,1,0,1,0 ; 16-bit mode
NEWSYM GUINGVID, db 1,1,1,1,1,1,1,0,1,1,1,1,0 ; New Graphics Mode Available NEWSYM GUINGVID, db 1,1,1,1,1,1,1,1,0,1,1,1,1,0 ; New Graphics Mode Available
NEWSYM GUISLVID, db 0,0,0,1,0,0,1,1,0,0,1,1,0 ; Scanlines NEWSYM GUISLVID, db 0,0,0,0,1,0,0,1,1,0,0,1,1,0 ; Scanlines
NEWSYM GUIINVID, db 0,0,0,0,0,0,0,0,0,0,0,1,0 ; Interpolation NEWSYM GUIINVID, db 0,0,0,0,0,0,0,0,0,0,0,0,1,0 ; Interpolation
NEWSYM GUIEAVID, db 0,0,0,0,0,0,0,0,0,0,1,0,0 ; Eagle NEWSYM GUIEAVID, db 0,0,0,0,0,0,0,0,0,0,0,1,0,0 ; Eagle
NEWSYM GUIIEVID, db 0,0,0,0,0,0,0,0,0,0,1,1,0 ; (Interp | Eagle) NEWSYM GUIIEVID, db 0,0,0,0,0,0,0,0,0,0,0,1,1,0 ; (Interp | Eagle)
NEWSYM GUIFSVID, db 0,0,0,0,1,1,0,0,0,0,1,1,0 ; Full Screen NEWSYM GUIFSVID, db 0,0,0,0,0,1,1,0,0,0,0,1,1,0 ; Full Screen
NEWSYM GUISSVID, db 0,0,0,1,0,0,0,0,0,0,1,1,0 ; Small Screen NEWSYM GUISSVID, db 0,0,0,0,1,0,0,0,0,0,0,1,1,0 ; Small Screen
NEWSYM GUITBVID, db 0,0,0,0,1,1,1,1,1,1,1,1,0 ; Triple Buffering NEWSYM GUITBVID, db 0,0,0,0,0,1,1,1,1,1,1,1,1,0 ; Triple Buffering
NEWSYM GUIHSVID, db 0,0,0,0,0,0,0,1,0,0,0,1,0 ; Half/Quarter Scanlines NEWSYM GUIHSVID, db 0,0,0,0,0,0,0,0,1,0,0,0,1,0 ; Half/Quarter Scanlines
NEWSYM GUI2xVID, db 0,0,0,0,0,0,0,0,0,0,0,1,0 ; 2xSaI/Super Eagle Engines NEWSYM GUI2xVID, db 0,0,0,0,0,0,0,0,0,0,0,0,1,0 ; 2xSaI/Super Eagle Engines
NEWSYM GUIWFVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0 ; If Windows Full Screen NEWSYM GUIWFVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; If Windows Full Screen
NEWSYM GUII2VID, db 0,0,0,0,0,0,0,0,0,0,0,0,0 ; Interpolation NEWSYM GUII2VID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Interpolation
NEWSYM GUIM7VID, db 0,0,0,0,0,0,0,0,0,0,0,1,0 ; Interpolation NEWSYM GUIM7VID, db 0,0,0,0,0,0,0,0,0,0,0,0,1,0 ; Interpolation
NEWSYM GUIBIFIL, db 0,0,0,0,0,0,0,0,0,0,0,0,0 ; Bilinear Filtering NEWSYM GUIBIFIL, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Bilinear Filtering
NEWSYM GUITBWVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0 ; Triple Buffering (Win) NEWSYM GUITBWVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Triple Buffering (Win)
SECTION .text SECTION .text
; **************************** ; ****************************

View File

@@ -56,26 +56,28 @@ NEWSYM dosinitvideo
cmp byte[cvidmode],0 cmp byte[cvidmode],0
je near .initmodeq224 je near .initmodeq224
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near .initmodeq je near .initmodeq240
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near .initmodex je near .initmodeq
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near .initvesa12640x480x16 je near .initmodex
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near .initvesa2320x240x8 je near .initvesa12640x480x16
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near .initvesa2320x240x16 je near .initvesa2320x240x8
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near .initvesa2320x480x8 je near .initvesa2320x240x16
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near .initvesa2320x480x16 je near .initvesa2320x480x8
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near .initvesa2512x384x8 je near .initvesa2320x480x16
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near .initvesa2512x384x16 je near .initvesa2512x384x8
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near .initvesa2640x480x8 je near .initvesa2512x384x16
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near .initvesa2640x480x8
cmp byte[cvidmode],12
je near .initvesa2640x480x16 je near .initvesa2640x480x16
ret ret
@@ -492,6 +494,135 @@ NEWSYM dosinitvideo
ret ret
;*******************************************************
; InitModeQ240 Sets up 256x240 chained mode
;*******************************************************
.initmodeq240
mov byte[cbitmode],0
mov ax,0013h
int 10h
; enable writes
mov dx,03d4h
mov ax,0011h
out dx,ax
inc dx
in ax,dx
and ax,007fh
push ax
mov dx,03d4h
mov ax,0011h
out dx,ax
inc dx
pop ax
out dx,ax
; tweak regs
mov dx,03c2h
mov ax,00e3h
out dx,ax
mov dx,03d4h
mov ax,1
out dx,ax
inc dx
mov ax,003fh
out dx,ax
mov dx,03d4h
mov ax,2
out dx,ax
inc dx
mov ax,0040h
out dx,ax
mov dx,03d4h
mov ax,4
out dx,ax
inc dx
mov ax,004ah
out dx,ax
mov dx,03d4h
mov ax,5
out dx,ax
inc dx
mov ax,009ah
out dx,ax
mov dx,03d4h
mov ax,6
out dx,ax
inc dx
mov ax,000dh
out dx,ax
mov dx,03d4h
mov ax,7
out dx,ax
inc dx
mov ax,003eh
out dx,ax
mov dx,03d4h
mov ax,9
out dx,ax
inc dx
mov ax,0041h
out dx,ax
mov dx,03d4h
mov ax,0010h
out dx,ax
inc dx
mov ax,00eah
out dx,ax
mov dx,03d4h
mov ax,0011h
out dx,ax
inc dx
mov ax,00ach
out dx,ax
mov dx,03d4h
mov ax,0012h
out dx,ax
inc dx
mov ax,00dfh
out dx,ax
mov dx,03d4h
mov ax,0013h
out dx,ax
inc dx
mov ax,0020h
out dx,ax
mov dx,03d4h
mov ax,0015h
out dx,ax
inc dx
mov ax,00e7h
out dx,ax
mov dx,03d4h
mov ax,0016h
out dx,ax
inc dx
mov ax,0006h
out dx,ax
%ifdef __MSDOS__
call cscopymodeq
%endif
call makepal
ret
;******************************************************* ;*******************************************************
; InitVESA2 320x240x8 Set up Linear 320x240x8b ; InitVESA2 320x240x8 Set up Linear 320x240x8b
;******************************************************* ;*******************************************************

View File

@@ -198,7 +198,7 @@ int pccmdline(void)
{ {
if(!hasroom) return 4; if(!hasroom) return 4;
cvidmode=my_atoi(argv[p+1]); cvidmode=my_atoi(argv[p+1]);
if(cvidmode > 11) return 13; if(cvidmode > 12) return 13;
p++; p++;
} }
break; break;

View File

@@ -1438,12 +1438,13 @@ SECTION .data
db ' -u Force PAL timing',13,10 db ' -u Force PAL timing',13,10
%ifndef __LINUX__ %ifndef __LINUX__
db ' -v # Select Video Mode :',13,10 db ' -v # Select Video Mode :',13,10
db ' 0 = 256x224x8B (MODEQ) 1 = 256x256x8B (MODEQ)',13,10 db ' 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10
db ' 2 = 320x240x8B (MODEX) 3 = 640x480x16B (VESA1)',13,10 db ' 2 = 256x256x8B (MODEQ) 3 = 320x240x8B (MODEX)',13,10
db ' 4 = 320x240x8B (VESA2) 5 = 320x240x16B (VESA2)',13,10 db ' 4 = 640x480x16B (VESA1) 5 = 320x240x8B (VESA2)',13,10
db ' 6 = 320x480x8B (VESA2) 7 = 320x480x16B (VESA2)',13,10 db ' 6 = 320x240x16B (VESA2) 7 = 320x480x8B (VESA2)',13,10
db ' 8 = 512x384x8B (VESA2) 9 = 512x384x16B (VESA2)',13,10 db ' 8 = 320x480x16B (VESA2) 9 = 512x384x8B (VESA2)',13,10
db ' 10 = 640x480x8B (VESA2) 11 = 640x480x16B (VESA2)',13,10 db ' 10 = 512x384x16B (VESA2) 11 = 640x480x8B (VESA2)',13,10
db ' 12 = 640x480x16B (VESA2)',13,10
%endif %endif
db ' -w Enable VSync',13,10 db ' -w Enable VSync',13,10
db 'Press any key to continue.',0 db 'Press any key to continue.',0

View File

@@ -270,9 +270,9 @@ NEWSYM cachevideo
je .nohires je .nohires
cmp byte[scanlines],1 cmp byte[scanlines],1
je .nohires je .nohires
cmp byte[cvidmode],6 cmp byte[cvidmode],7
je .yeshires je .yeshires
cmp byte[cvidmode],10 cmp byte[cvidmode],11
jne .nohires jne .nohires
.yeshires .yeshires
mov byte[Mode7HiRes],1 mov byte[Mode7HiRes],1

View File

@@ -262,27 +262,29 @@ ScreenShow:
cmp byte[cvidmode],0 cmp byte[cvidmode],0
je near copymodeq224 je near copymodeq224
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near copymodeq240
cmp byte[cvidmode],2
je near copymodeq je near copymodeq
.debug .debug
cmp byte[cvidmode],2
je near copymodex
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near copyvesa12640x480x16b je near copymodex
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near copyvesa2320x240x8b je near copyvesa12640x480x16b
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near copyvesa2320x240x16b je near copyvesa2320x240x8b
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near copyvesa2320x480x8b je near copyvesa2320x240x16b
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near copyvesa2320x480x16b je near copyvesa2320x480x8b
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near copyvesa2512x384x8b je near copyvesa2320x480x16b
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near copyvesa2512x384x16b je near copyvesa2512x384x8b
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near copyvesa2640x480x8b je near copyvesa2512x384x16b
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near copyvesa2640x480x8b
cmp byte[cvidmode],12
je near copyvesa2640x480x16b je near copyvesa2640x480x16b
cmp byte[curblank],40h cmp byte[curblank],40h
je .startcopy je .startcopy
@@ -304,26 +306,28 @@ ScreenShowGUI:
cmp byte[cvidmode],0 cmp byte[cvidmode],0
je near copymodeq224 je near copymodeq224
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near copymodeq je near copymodeq240
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near copymodex je near copymodeq
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near copyvesa12640x480x16bgui je near copymodex
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near copyvesa2320x240x8b je near copyvesa12640x480x16bgui
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near copyvesa2320x240x16bgui je near copyvesa2320x240x8b
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near copyvesa2320x480x8bgui je near copyvesa2320x240x16bgui
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near copyvesa2320x480x16bgui je near copyvesa2320x480x8bgui
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near copyvesa2512x384x8b je near copyvesa2320x480x16bgui
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near copyvesa2512x384x16bgui je near copyvesa2512x384x8b
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near copyvesa2640x480x8bgui je near copyvesa2512x384x16bgui
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near copyvesa2640x480x8bgui
cmp byte[cvidmode],12
je near copyvesa2640x480x16bgui je near copyvesa2640x480x16bgui
jmp copymodeq jmp copymodeq
%endif %endif
@@ -575,6 +579,46 @@ NEWSYM copymodeq224
pop es pop es
ret ret
;*******************************************************
; CopyModeQ240 Copies buffer into chained 256x240
;*******************************************************
NEWSYM copymodeq240
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
mov es,[selcA000]
mov esi,[vidbuffer]
mov edi,256
cmp word[resolutn],224
jne .res239
add edi,8*256
.res239
add esi,16+256+32
mov edx,[resolutn]
sub edx,2
cmp byte[FPUCopy],2
je near .loopb
.loopa
mov ecx,64
rep movsd
add esi,32
dec edx
jnz .loopa
jmp .done
.loopb
mov ecx,16
MMXStuff
add esi,32
dec edx
jnz .loopb
emms
.done
pop es
ret
;******************************************************* ;*******************************************************
; Copy VESA2 320x240x8b Copies buffer to 320x240x8bVBE2 ; Copy VESA2 320x240x8b Copies buffer to 320x240x8bVBE2
;******************************************************* ;*******************************************************
@@ -5434,28 +5478,30 @@ NEWSYM copyvesa12640x480x16b
NEWSYM DOSClearScreen NEWSYM DOSClearScreen
%ifdef __MSDOS__ %ifdef __MSDOS__
cmp byte[cvidmode],0 cmp byte[cvidmode],0
je near copymodeq224 je near cscopymodeq
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near cscopymodeq je near cscopymodeq
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near cscopymodex je near cscopymodeq
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near cscopyvesa12640x480x16b je near cscopymodex
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near cscopyvesa2320x240x8b je near cscopyvesa12640x480x16b
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near cscopyvesa2320x240x16b je near cscopyvesa2320x240x8b
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near cscopyvesa2320x480x8b je near cscopyvesa2320x240x16b
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near cscopyvesa2320x480x16b je near cscopyvesa2320x480x8b
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near cscopyvesa2512x384x8b je near cscopyvesa2320x480x16b
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near cscopyvesa2512x384x16b je near cscopyvesa2512x384x8b
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near cscopyvesa2640x480x8b je near cscopyvesa2512x384x16b
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near cscopyvesa2640x480x8b
cmp byte[cvidmode],12
je near cscopyvesa2640x480x16b je near cscopyvesa2640x480x16b
%endif %endif
ret ret
@@ -5625,11 +5671,11 @@ NEWSYM GetScreen
; jbe .getscreen ; jbe .getscreen
; ret ; ret
;.getscreen ;.getscreen
cmp byte[cvidmode],5 cmp byte[cvidmode],6
je near getcopyvesa2320x240x16b je near getcopyvesa2320x240x16b
cmp byte[cvidmode],11 cmp byte[cvidmode],12
; je near getcopyvesa2640x480x16b ; je near getcopyvesa2640x480x16b
cmp byte[cvidmode],9 cmp byte[cvidmode],10
; je near getcopyvesa2512x384x16b ; je near getcopyvesa2512x384x16b
%endif %endif
ret ret