Added a new video mode to the DOS port.

This commit is contained in:
stainless
2001-09-05 23:14:01 +00:00
parent 42c5e322da
commit d4fa4e1fdb
7 changed files with 257 additions and 87 deletions

View File

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

View File

@@ -20,7 +20,7 @@
EXTSYM AddSub256,InitVesa2,cbitmode,cvidmode,makepal
EXTSYM scanlines,selcA000,vesa2_bits,vesa2_bpos,vesa2_clbit
EXTSYM vesa2_gpos,vesa2_rpos,vesa2_usbit,vesa2_x,vesa2_y
EXTSYM vesa2selec,InitVesa12,videotroub
EXTSYM vesa2selec,InitVesa12,videotroub,cscopymodeq
NEWSYM InitVidAsmStart
@@ -51,26 +51,28 @@ NEWSYM dosinitvideo
mov byte[res640],0
mov byte[res480],0
cmp byte[cvidmode],0
je near .initmodeq
je near .initmodeq224
cmp byte[cvidmode],1
je near .initmodex
je near .initmodeq
cmp byte[cvidmode],2
je near .initvesa12640x480x16
je near .initmodex
cmp byte[cvidmode],3
je near .initvesa2320x240x8
je near .initvesa12640x480x16
cmp byte[cvidmode],4
je near .initvesa2320x240x16
je near .initvesa2320x240x8
cmp byte[cvidmode],5
je near .initvesa2320x480x8
je near .initvesa2320x240x16
cmp byte[cvidmode],6
je near .initvesa2320x480x16
je near .initvesa2320x480x8
cmp byte[cvidmode],7
je near .initvesa2512x384x8
je near .initvesa2320x480x16
cmp byte[cvidmode],8
je near .initvesa2512x384x16
je near .initvesa2512x384x8
cmp byte[cvidmode],9
je near .initvesa2640x480x8
je near .initvesa2512x384x16
cmp byte[cvidmode],10
je near .initvesa2640x480x8
cmp byte[cvidmode],11
je near .initvesa2640x480x16
ret
@@ -358,6 +360,132 @@ NEWSYM dosinitvideo
; pop es
; ret
;*******************************************************
; InitModeQ224 Sets up 256x224 chained mode
;*******************************************************
.initmodeq224
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,000bh
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,0061h
out dx,ax
mov dx,03d4h
mov ax,0010h
out dx,ax
inc dx
mov ax,00dah
out dx,ax
mov dx,03d4h
mov ax,0011h
out dx,ax
inc dx
mov ax,009ah
out dx,ax
mov dx,03d4h
mov ax,0012h
out dx,ax
inc dx
mov ax,00bfh
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,0007h
out dx,ax
mov dx,03d4h
mov ax,0016h
out dx,ax
inc dx
mov ax,001ah
out dx,ax
call cscopymodeq
call makepal
ret
;*******************************************************
; InitVESA2 320x240x8 Set up Linear 320x240x8b
;*******************************************************

View File

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