Added my last two video modes to the DOS port.

This commit is contained in:
stainless
2001-09-10 07:31:07 +00:00
parent 5dbc7f8cd3
commit 48580f1915
8 changed files with 568 additions and 203 deletions

View File

@@ -49,7 +49,7 @@ NEWSYM cfgStereoSound, db 0
NEWSYM cfgguioff, db 0 NEWSYM cfgguioff, db 0
NEWSYM cfgper2exec, db 100 NEWSYM cfgper2exec, db 100
%ifdef __MSDOS__ %ifdef __MSDOS__
NEWSYM cfgcvidmode, db 3 NEWSYM cfgcvidmode, db 4
%else %else
NEWSYM cfgcvidmode, db 1 NEWSYM cfgcvidmode, db 1
%endif %endif
@@ -626,12 +626,13 @@ db '',13,10
%ifdef __MSDOS__ %ifdef __MSDOS__
db '; Video Mode, 0 - 10',13,10 db '; Video Mode, 0 - 10',13,10
db '; 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10 db '; 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10
db '; 2 = 256x256x8B (MODEQ) 3 = 320x240x8B (MODEX)',13,10 db '; 2 = 256x256x8B (MODEQ) 3 = 320x224x8B (MODEX)',13,10
db '; 4 = 640x480x16B (VESA1) 5 = 320x240x8B (VESA2)',13,10 db '; 4 = 320x240x8B (MODEX) 5 = 320x256x8B (MODEX)',13,10
db '; 6 = 320x240x16B (VESA2) 7 = 320x480x8B (VESA2)',13,10 db '; 6 = 640x480x16B (VESA1) 7 = 320x240x8B (VESA2)',13,10
db '; 8 = 320x480x16B (VESA2) 9 = 512x384x8B (VESA2)',13,10 db '; 8 = 320x240x16B (VESA2) 9 = 320x480x8B (VESA2)',13,10
db '; 10 = 512x384x16B (VESA2) 11 = 640x480x8B (VESA2)',13,10 db '; 10 = 320x480x16B (VESA2) 11 = 512x384x8B (VESA2)',13,10
db '; 12 = 640x480x16B (VESA2)',13,10 db '; 12 = 512x384x16B (VESA2) 13 = 640x480x8B (VESA2)',13,10
db '; 14 = 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

@@ -1015,7 +1015,7 @@ NEWSYM ClearScreen
SECTION .data SECTION .data
; Total Number of Video Modes ; Total Number of Video Modes
NEWSYM NumVideoModes, dd 13 NEWSYM NumVideoModes, dd 15
; 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
@@ -1023,36 +1023,38 @@ NEWSYM GUIVideoModeNames
db '256X224X8B MODEQ',0 ; 0 db '256X224X8B MODEQ',0 ; 0
db '256X240X8B MODEQ',0 ; 1 db '256X240X8B MODEQ',0 ; 1
db '256X256X8B MODEQ',0 ; 2 db '256X256X8B MODEQ',0 ; 2
db '320X240X8B MODEX',0 ; 3 db '320X224X8B MODEX',0 ; 3
db '640X480X16B VESA1',0 ; 4 db '320X240X8B MODEX',0 ; 4
db '320X240X8B VESA2',0 ; 5 db '320X256X8B MODEX',0 ; 5
db '320X240X16B VESA2',0 ; 6 db '640X480X16B VESA1',0 ; 6
db '320X480X8B VESA2',0 ; 7 db '320X240X8B VESA2',0 ; 7
db '320X480X16B VESA2',0 ; 8 db '320X240X16B VESA2',0 ; 8
db '512X384X8B VESA2',0 ; 9 db '320X480X8B VESA2',0 ; 9
db '512X384X16B VESA2',0 ; 10 db '320X480X16B VESA2',0 ; 10
db '640X480X8B VESA2',0 ; 11 db '512X384X8B VESA2',0 ; 11
db '640X480X16B VESA2',0 ; 12 db '512X384X16B VESA2',0 ; 12
db '640X480X8B VESA2',0 ; 13
db '640X480X16B VESA2',0 ; 14
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,0,1,0,1,0,1,0,1,0,1,0 ; 16-bit mode NEWSYM GUI16VID, db 0,0,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,1,0,1,1,1,1,0 ; New Graphics Mode Available NEWSYM GUINGVID, db 1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0 ; New Graphics Mode Available
NEWSYM GUISLVID, db 0,0,1,0,1,0,0,1,1,0,0,1,1,0 ; Scanlines NEWSYM GUISLVID, db 0,0,1,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,0,1,0 ; Interpolation NEWSYM GUIINVID, db 0,0,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,0,1,0,0 ; Eagle NEWSYM GUIEAVID, db 0,0,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,0,1,1,0 ; (Interp | Eagle) NEWSYM GUIIEVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0 ; (Interp | Eagle)
NEWSYM GUIFSVID, db 0,0,0,0,0,1,1,0,0,0,0,1,1,0 ; Full Screen NEWSYM GUIFSVID, db 0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0 ; Full Screen
NEWSYM GUISSVID, db 0,0,0,0,1,0,0,0,0,0,0,1,1,0 ; Small Screen NEWSYM GUISSVID, db 0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0 ; Small Screen
NEWSYM GUITBVID, db 0,0,0,0,0,1,1,1,1,1,1,1,1,0 ; Triple Buffering NEWSYM GUITBVID, db 0,0,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,0,1,0,0,0,1,0 ; Half/Quarter Scanlines NEWSYM GUIHSVID, db 0,0,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,0,1,0 ; 2xSaI/Super Eagle Engines NEWSYM GUI2xVID, db 0,0,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,0 ; If Windows Full Screen NEWSYM GUIWFVID, db 0,0,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,0 ; Interpolation NEWSYM GUII2VID, db 0,0,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,0,1,0 ; Interpolation NEWSYM GUIM7VID, db 0,0,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,0 ; Bilinear Filtering NEWSYM GUIBIFIL, db 0,0,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,0 ; Triple Buffering (Win) NEWSYM GUITBWVID, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Triple Buffering (Win)
SECTION .text SECTION .text
; **************************** ; ****************************

View File

@@ -41,7 +41,7 @@ SECTION .text
NEWSYM dosinitvideo2 NEWSYM dosinitvideo2
cmp byte[cvidmode],2 cmp byte[cvidmode],2
jne .nomodeq jne .nomodeq
jmp dosinitvideo.initmodeq jmp dosinitvideo.initmodeq256
.nomodeq .nomodeq
ret ret
@@ -57,26 +57,30 @@ NEWSYM dosinitvideo
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near .initmodeq240 je near .initmodeq240
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near .initmodeq je near .initmodeq256
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near .initmodex je near .initmodex224
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near .initvesa12640x480x16 je near .initmodex240
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near .initvesa2320x240x8 je near .initmodex256
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near .initvesa2320x240x16 je near .initvesa12640x480x16
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near .initvesa2320x480x8 je near .initvesa2320x240x8
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near .initvesa2320x480x16 je near .initvesa2320x240x16
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near .initvesa2512x384x8 je near .initvesa2320x480x8
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near .initvesa2512x384x16 je near .initvesa2320x480x16
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near .initvesa2640x480x8 je near .initvesa2512x384x8
cmp byte[cvidmode],12 cmp byte[cvidmode],12
je near .initvesa2512x384x16
cmp byte[cvidmode],13
je near .initvesa2640x480x8
cmp byte[cvidmode],14
je near .initvesa2640x480x16 je near .initvesa2640x480x16
ret ret
@@ -84,19 +88,7 @@ NEWSYM dosinitvideo
;******************************************************* ;*******************************************************
; InitModeX Sets up 320x240 unchained mode ; InitModeQ 224 Sets up 256x224 chained mode
;*******************************************************
.initmodex
%ifdef __MSDOS__
SetVGAMode .Mode320x240
call cscopymodex
%endif
call makepal
ret
;*******************************************************
; InitModeQ224 Sets up 256x224 chained mode
;******************************************************* ;*******************************************************
.initmodeq224 .initmodeq224
@@ -108,7 +100,7 @@ NEWSYM dosinitvideo
ret ret
;******************************************************* ;*******************************************************
; InitModeQ240 Sets up 256x240 chained mode ; InitModeQ 240 Sets up 256x240 chained mode
;******************************************************* ;*******************************************************
.initmodeq240 .initmodeq240
@@ -120,10 +112,10 @@ NEWSYM dosinitvideo
ret ret
;******************************************************* ;*******************************************************
; InitModeQ Sets up 256x256 chained mode ; InitModeQ 256 Sets up 256x256 chained mode
;******************************************************* ;*******************************************************
.initmodeq .initmodeq256
%ifdef __MSDOS__ %ifdef __MSDOS__
cmp byte[scanlines],1 cmp byte[scanlines],1
jne .noscanlines jne .noscanlines
@@ -140,6 +132,44 @@ NEWSYM dosinitvideo
call makepal call makepal
ret ret
;*******************************************************
; InitModeX 224 Sets up 320x224 unchained mode
;*******************************************************
.initmodex224
%ifdef __MSDOS__
SetVGAMode .Mode320x224
call cscopymodex
%endif
call makepal
ret
;*******************************************************
; InitModeX 240 Sets up 320x240 unchained mode
;*******************************************************
.initmodex240
%ifdef __MSDOS__
SetVGAMode .Mode320x240
call cscopymodex
%endif
call makepal
ret
;*******************************************************
; InitModeX 256 Sets up 320x256 unchained mode
;*******************************************************
.initmodex256
%ifdef __MSDOS__
SetVGAMode .Mode320x256
call cscopymodex
%endif
call makepal
ret
;******************************************************* ;*******************************************************
; InitVESA2 320x240x8 Set up Linear 320x240x8b ; InitVESA2 320x240x8 Set up Linear 320x240x8b
;******************************************************* ;*******************************************************

View File

@@ -1,4 +1,6 @@
; by kode54, stainless
%ifdef __MSDOS__ %ifdef __MSDOS__
%macro SetVGAMode 1 %macro SetVGAMode 1
mov byte[cbitmode],0 mov byte[cbitmode],0
@@ -97,6 +99,14 @@ SECTION .data
dw 03c4h,00e04h,03ceh,04005h,03cEh,00506h,03c0h,04110h,03c0h,00013h dw 03c4h,00e04h,03ceh,04005h,03cEh,00506h,03c0h,04110h,03c0h,00013h
dd 0 dd 0
.Mode320x224
dw 03c2h,0e300h,03d4h,05f00h,03d4h,04f01h,03d4h,05002h,03d4h,08203h
dw 03d4h,05404h,03d4h,08005h,03d4h,00b06h,03d4h,03e07h,03d4h,00008h
dw 03d4h,04109h,03d4h,0da10h,03d4h,09c11h,03d4h,0c012h,03d4h,02813h
dw 03d4h,00014h,03d4h,0c715h,03d4h,00416h,03d4h,0e317h,03c4h,00101h
dw 03c4h,00604h,03ceh,04005h,03ceh,00506h,03c0h,04110h,03c0h,00013h
dd 0
.Mode320x240 .Mode320x240
dw 03c2h,0e300h,03d4h,05f00h,03d4h,04f01h,03d4h,05002h,03d4h,08203h dw 03c2h,0e300h,03d4h,05f00h,03d4h,04f01h,03d4h,05002h,03d4h,08203h
dw 03d4h,05404h,03d4h,08005h,03d4h,00d06h,03d4h,03e07h,03d4h,00008h dw 03d4h,05404h,03d4h,08005h,03d4h,00d06h,03d4h,03e07h,03d4h,00008h
@@ -105,6 +115,14 @@ SECTION .data
dw 03c4h,00604h,03ceh,04005h,03ceh,00506h,03c0h,04110h,03c0h,00013h dw 03c4h,00604h,03ceh,04005h,03ceh,00506h,03c0h,04110h,03c0h,00013h
dd 0 dd 0
.Mode320x256
dw 03c2h,0e300h,03d4h,05f00h,03d4h,04f01h,03d4h,05002h,03d4h,08203h
dw 03d4h,05404h,03d4h,08005h,03d4h,02306h,03d4h,0b207h,03d4h,00008h
dw 03d4h,06109h,03d4h,00a10h,03d4h,0ac11h,03d4h,0ff12h,03d4h,02813h
dw 03d4h,00014h,03d4h,00715h,03d4h,01a16h,03d4h,0e317h,03c4h,00101h
dw 03c4h,00604h,03ceh,04005h,03ceh,00506h,03c0h,04110h,03c0h,00013h
dd 0
SECTION .text SECTION .text
%endif %endif

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 > 12) return 13; if(cvidmode > 14) return 13;
p++; p++;
} }
break; break;

View File

@@ -223,7 +223,7 @@ NEWSYM BitConv32Ptr, dd 0
NEWSYM previdmode, db 0 ; previous video mode NEWSYM previdmode, db 0 ; previous video mode
%ifdef __MSDOS__ %ifdef __MSDOS__
NEWSYM cvidmode, db 3 ; video mode, 0=320x240, 1=256x256 NEWSYM cvidmode, db 4 ; video mode, 0=320x240, 1=256x256
%else %else
NEWSYM cvidmode, db 1 ; video mode, 0=320x240, 1=256x256 NEWSYM cvidmode, db 1 ; video mode, 0=320x240, 1=256x256
%endif %endif
@@ -1455,12 +1455,13 @@ SECTION .data
%ifndef __LINUX__ %ifndef __LINUX__
db ' -v # Select Video Mode :',13,10 db ' -v # Select Video Mode :',13,10
db ' 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10 db ' 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)',13,10
db ' 2 = 256x256x8B (MODEQ) 3 = 320x240x8B (MODEX)',13,10 db ' 2 = 256x256x8B (MODEQ) 3 = 320x224x8B (MODEX)',13,10
db ' 4 = 640x480x16B (VESA1) 5 = 320x240x8B (VESA2)',13,10 db ' 4 = 320x240x8B (MODEX) 5 = 320x256x8B (MODEX)',13,10
db ' 6 = 320x240x16B (VESA2) 7 = 320x480x8B (VESA2)',13,10 db ' 6 = 640x480x16B (VESA1) 7 = 320x240x8B (VESA2)',13,10
db ' 8 = 320x480x16B (VESA2) 9 = 512x384x8B (VESA2)',13,10 db ' 8 = 320x240x16B (VESA2) 9 = 320x480x8B (VESA2)',13,10
db ' 10 = 512x384x16B (VESA2) 11 = 640x480x8B (VESA2)',13,10 db ' 10 = 320x480x16B (VESA2) 11 = 512x384x8B (VESA2)',13,10
db ' 12 = 640x480x16B (VESA2)',13,10 db ' 12 = 512x384x16B (VESA2) 13 = 640x480x8B (VESA2)',13,10
db ' 14 = 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

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

View File

@@ -224,12 +224,11 @@ PreTripleBuffer:
ret ret
%endif %endif
; stupid fix :) VidModeSize dd 0,0,0,0,0,0,320*240,320*240*2,0,320*480,320*480*2
VidModeSize dd 0,0,0,0,320*240,320*240*2,0,320*480,320*480*2
dd 512*384,512*384*2,640*480,640*480*2 dd 512*384,512*384*2,640*480,640*480*2
VidModeLine dd 0,0,0,0,240,240,0,480,480,384,384,480,480 VidModeLine dd 0,0,0,0,0,0,240,240,0,480,480,384,384,480,480
NEWSYM VidStartDraw, dd 0 NEWSYM VidStartDraw, dd 0
VidModeComp db 0,0,0,0,0,1,1,1,1,1,1,1,1 VidModeComp db 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1
CVidStartAd db 0 CVidStartAd db 0
ApplyStart db 4 ApplyStart db 4
NEWSYM NextLineStart, dd 0 NEWSYM NextLineStart, dd 0
@@ -260,31 +259,35 @@ ScreenShow:
cmp byte[debugdisble],0 cmp byte[debugdisble],0
je .debug je .debug
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near copymodeq je near copymodeq256
.debug .debug
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 je near copymodeq240
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near copymodex je near copymodex224
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near copyvesa12640x480x16b je near copymodex240
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near copyvesa2320x240x8b je near copymodex256
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near copyvesa2320x240x16b je near copyvesa12640x480x16b
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near copyvesa2320x480x8b je near copyvesa2320x240x8b
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near copyvesa2320x480x16b je near copyvesa2320x240x16b
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near copyvesa2512x384x8b je near copyvesa2320x480x8b
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near copyvesa2512x384x16b je near copyvesa2320x480x16b
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near copyvesa2640x480x8b je near copyvesa2512x384x8b
cmp byte[cvidmode],12 cmp byte[cvidmode],12
je near copyvesa2512x384x16b
cmp byte[cvidmode],13
je near copyvesa2640x480x8b
cmp byte[cvidmode],14
je near copyvesa2640x480x16b je near copyvesa2640x480x16b
cmp byte[curblank],40h cmp byte[curblank],40h
je .startcopy je .startcopy
@@ -292,7 +295,7 @@ ScreenShow:
; call sounddisplay ; call sounddisplay
call hextestoutput call hextestoutput
.startcopy .startcopy
jmp copymodeq jmp copymodeq256
NEWSYM dosvidpastecopyscr NEWSYM dosvidpastecopyscr
cmp byte[curblank],40h cmp byte[curblank],40h
@@ -308,50 +311,204 @@ ScreenShowGUI:
cmp byte[cvidmode],1 cmp byte[cvidmode],1
je near copymodeq240 je near copymodeq240
cmp byte[cvidmode],2 cmp byte[cvidmode],2
je near copymodeq je near copymodeq256
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near copymodex je near copymodex224
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near copyvesa12640x480x16bgui je near copymodex240
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near copyvesa2320x240x8b je near copymodex256
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near copyvesa2320x240x16bgui je near copyvesa12640x480x16bgui
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near copyvesa2320x480x8bgui je near copyvesa2320x240x8b
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near copyvesa2320x480x16bgui je near copyvesa2320x240x16bgui
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near copyvesa2512x384x8b je near copyvesa2320x480x8bgui
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near copyvesa2512x384x16bgui je near copyvesa2320x480x16bgui
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near copyvesa2640x480x8bgui je near copyvesa2512x384x8b
cmp byte[cvidmode],12 cmp byte[cvidmode],12
je near copyvesa2512x384x16bgui
cmp byte[cvidmode],13
je near copyvesa2640x480x8bgui
cmp byte[cvidmode],14
je near copyvesa2640x480x16bgui je near copyvesa2640x480x16bgui
jmp copymodeq jmp copymodeq256
%endif %endif
;*******************************************************
; CopyModeX Copies buffer into unchained 320x240
;*******************************************************
%ifdef __MSDOS__ %ifdef __MSDOS__
NEWSYM copymodex ;*******************************************************
; CopyModeX 224 Copies buffer into unchained 320x224
;*******************************************************
NEWSYM copymodex224
cmp byte[curblank],40h cmp byte[curblank],40h
jne .startcopy jne .startcopy
ret ret
.startcopy .startcopy
; select plane 1
mov dx,03C4h mov dx,03C4h
mov ax,0102h ; set as plane 1 mov ax,0102h
out dx,ax
push es
mov ax,[selcA000]
mov es,ax
mov esi,[vidbuffer]
mov edi,8
add esi,16+256+32
cmp byte[whichpage],0
jne .pageb
add edi,19200
.pageb
mov [.startesi],esi
mov [.startedi],edi
mov dl,222
.loopa1
mov ecx,16
.loopb1
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb1
add esi,32
add edi,16
dec dl
jnz .loopa1
mov dx,03C4h
mov ax,0202h
out dx,ax
mov esi,[.startesi]
inc esi
mov edi,[.startedi]
mov dl,222
.loopa2
mov ecx,16
.loopb2
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb2
add esi,32
add edi,16
dec dl
jnz .loopa2
mov dx,03C4h
mov ax,0402h
out dx,ax
mov esi,[.startesi]
add esi,2
mov edi,[.startedi]
mov dl,222
.loopa3
mov ecx,16
.loopb3
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb3
add esi,32
add edi,16
dec dl
jnz .loopa3
mov dx,03C4h
mov ax,0802h
out dx,ax
mov esi,[.startesi]
add esi,3
mov edi,[.startedi]
mov dl,222
.loopa4
mov ecx,16
.loopb4
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb4
add esi,32
add edi,16
dec dl
jnz .loopa4
pop es
cmp byte[whichpage],0
jne .setpageb
mov dx,03D4h
mov al,0Ch
out dx,al
inc dx
mov al,75
out dx,al
dec dx
mov al,0Dh
out dx,al
inc dx
xor al,al
out dx,al
mov byte[whichpage],1
ret
.setpageb
mov dx,03D4h
mov al,0Ch
out dx,al
inc dx
xor al,al
out dx,al
dec dx
mov al,0Dh
out dx,al
inc dx
xor al,al
out dx,al
mov byte[whichpage],0
ret
.startesi dd 0
.startedi dd 0
;*******************************************************
; CopyModeX 240 Copies buffer into unchained 320x240
;*******************************************************
NEWSYM copymodex240
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
; select 1st plane
mov dx,03C4h
mov ax,0102h
out dx,ax out dx,ax
push es push es
mov ax,[selcA000] mov ax,[selcA000]
mov es,ax mov es,ax
mov esi,[vidbuffer] mov esi,[vidbuffer]
mov edi,8 ; Draw @ Y from 9 to 247 mov edi,8
cmp word[resolutn],224 cmp word[resolutn],224
jne .res239 jne .res239
mov edi,8*80+8 mov edi,8*80+8
@@ -496,13 +653,248 @@ NEWSYM copymodex
.startesi dd 0 .startesi dd 0
.startedi dd 0 .startedi dd 0
;*******************************************************
; CopyModeX 256 Copies buffer into unchained 320x256
;*******************************************************
NEWSYM copymodex256
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
mov dx,03C4h
mov ax,0102h
out dx,ax
push es
mov ax,[selcA000]
mov es,ax
mov esi,[vidbuffer]
mov edi,8*80+8
cmp word[resolutn],224
jne .res239
add edi,8*80
.res239
add esi,16+256+32
cmp byte[whichpage],0
jne .pageb
add edi,19200
.pageb
mov [.startesi],esi
mov [.startedi],edi
mov dl,[resolutn]
sub dl,2
.loopa1
mov ecx,16
.loopb1
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb1
add esi,32
add edi,16
dec dl
jnz .loopa1
mov dx,03C4h
mov ax,0202h
out dx,ax
mov esi,[.startesi]
inc esi
mov edi,[.startedi]
mov dl,[resolutn]
sub dl,2
.loopa2
mov ecx,16
.loopb2
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb2
add esi,32
add edi,16
dec dl
jnz .loopa2
mov dx,03C4h
mov ax,0402h
out dx,ax
mov esi,[.startesi]
add esi,2
mov edi,[.startedi]
mov dl,[resolutn]
sub dl,2
.loopa3
mov ecx,16
.loopb3
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb3
add esi,32
add edi,16
dec dl
jnz .loopa3
mov dx,03C4h
mov ax,0802h
out dx,ax
mov esi,[.startesi]
add esi,3
mov edi,[.startedi]
mov dl,[resolutn]
sub dl,2
.loopa4
mov ecx,16
.loopb4
mov ah,[esi+12]
mov al,[esi+8]
shl eax,16
mov ah,[esi+4]
mov al,[esi+0]
mov [es:edi],eax
add esi,16
add edi,4
dec ecx
jnz .loopb4
add esi,32
add edi,16
dec dl
jnz .loopa4
pop es
cmp byte[whichpage],0
jne .setpageb
mov dx,03D4h
mov al,0Ch
out dx,al
inc dx
mov al,75
out dx,al
dec dx
mov al,0Dh
out dx,al
inc dx
xor al,al
out dx,al
mov byte[whichpage],1
ret
.setpageb
mov dx,03D4h
mov al,0Ch
out dx,al
inc dx
xor al,al
out dx,al
dec dx
mov al,0Dh
out dx,al
inc dx
xor al,al
out dx,al
mov byte[whichpage],0
ret
.startesi dd 0
.startedi dd 0
NEWSYM whichpage, db 0 ; active page and visual page locations NEWSYM whichpage, db 0 ; active page and visual page locations
;******************************************************* ;*******************************************************
; CopyModeQ Copies buffer into chained 256x256 ; CopyModeQ 224 Copies buffer into chained 256x224
;******************************************************* ;*******************************************************
NEWSYM copymodeq NEWSYM copymodeq224
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
mov ax,[selcA000]
mov es,ax
mov esi,[vidbuffer]
add esi,16+256+32
mov edi,256
mov dl,222
cmp byte[FPUCopy],2
je near .loopb
.loopa
mov ecx,64
rep movsd
add esi,32
dec dl
jnz .loopa
jmp .done
.loopb
mov ecx,16
MMXStuff
add esi,32
dec dl
jnz .loopb
emms
.done
pop es
ret
;*******************************************************
; CopyModeQ 240 Copies buffer into chained 256x240
;*******************************************************
NEWSYM copymodeq240
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
mov ax,[selcA000]
mov es,ax
mov esi,[vidbuffer]
mov edi,256
cmp word[resolutn],224
jne .res239
add edi,8*256
.res239
add esi,16+256+32
mov dl,[resolutn]
sub dl,2
cmp byte[FPUCopy],2
je near .loopb
.loopa
mov ecx,64
rep movsd
add esi,32
dec dl
jnz .loopa
jmp .done
.loopb
mov ecx,16
MMXStuff
add esi,32
dec dl
jnz .loopb
emms
.done
pop es
ret
;********************************************************
; CopyModeQ 256 Copies buffer into chained 256x256
;********************************************************
NEWSYM copymodeq256
cmp byte[curblank],40h cmp byte[curblank],40h
jne .startcopy jne .startcopy
ret ret
@@ -524,109 +916,26 @@ NEWSYM copymodeq
dec dl dec dl
dec dl dec dl
cmp byte[FPUCopy],2 cmp byte[FPUCopy],2
je near .loopc je near .loopb
.loopa .loopa
mov ecx,64 mov ecx,64
rep movsd rep movsd
add esi,32 add esi,32
dec dl dec dl
jnz .loopa jnz .loopa
pop es jmp .done
ret .loopb
.loopc
mov ecx,16 mov ecx,16
MMXStuff MMXStuff
add esi,32 add esi,32
dec dl dec dl
jnz .loopc
emms
pop es
ret
;*******************************************************
; CopyModeQ224 Copies buffer into chained 256x224
;*******************************************************
NEWSYM copymodeq224
cmp byte[curblank],40h ; Check for VBlank.
jne .startcopy ; OK, no VBlank...
ret
.startcopy
push es ; Backup ES register.
; mov ax,[selcA000]
; mov es,ax
mov es,[selcA000] ; Get 0xA000 selector.
mov esi,[vidbuffer] ; vidbuffer to source.
; mov ebp,[vidbufferm]
add esi,16+256+32 ; Skip top+bottom lines.
; add ebp,16+256+32
mov edi,256 ; Start at second line.
mov edx,222 ; Only copy 222 lines.
cmp byte[FPUCopy],2 ; Check for MMX enable.
je near .loopb
.loopa
mov ecx,64
rep movsd ; Copy 64 32-bit words.
add esi,32 ; Skip vidbuffer margins.
dec edx
jnz .loopa ; Loop for each line.
jmp .done
.loopb
mov ecx,16
MMXStuff ; Copy 16 64-bit words.
add esi,32 ; ...
dec edx
jnz .loopb ; ...
emms ; Empty MMX state.
.done
pop es ; Restore ES register.
ret
;*******************************************************
; CopyModeQ240 Copies buffer into chained 256x240
;*******************************************************
NEWSYM copymodeq240
cmp byte[curblank],40h
jne .startcopy
ret
.startcopy
push es
; mov ax,[selcA000]
; mov es,ax
mov es,[selcA000]
mov esi,[vidbuffer]
; mov ebp,[vidbufferm]
mov edi,256
cmp word[resolutn],224
jne .res239
add edi,8*256
.res239
add esi,16+256+32
; add ebp,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 jnz .loopb
emms emms
.done .done
pop es pop es
ret ret
;******************************************************* ;*******************************************************
; Copy VESA2 320x240x8b Copies buffer to 320x240x8bVBE2 ; Copy VESA2 320x240x8b Copies buffer to 320x240x8bVBE2
;******************************************************* ;*******************************************************
@@ -5506,22 +5815,26 @@ NEWSYM DOSClearScreen
cmp byte[cvidmode],3 cmp byte[cvidmode],3
je near cscopymodex je near cscopymodex
cmp byte[cvidmode],4 cmp byte[cvidmode],4
je near cscopyvesa12640x480x16b je near cscopymodex
cmp byte[cvidmode],5 cmp byte[cvidmode],5
je near cscopyvesa2320x240x8b je near cscopymodex
cmp byte[cvidmode],6 cmp byte[cvidmode],6
je near cscopyvesa2320x240x16b je near cscopyvesa12640x480x16b
cmp byte[cvidmode],7 cmp byte[cvidmode],7
je near cscopyvesa2320x480x8b je near cscopyvesa2320x240x8b
cmp byte[cvidmode],8 cmp byte[cvidmode],8
je near cscopyvesa2320x480x16b je near cscopyvesa2320x240x16b
cmp byte[cvidmode],9 cmp byte[cvidmode],9
je near cscopyvesa2512x384x8b je near cscopyvesa2320x480x8b
cmp byte[cvidmode],10 cmp byte[cvidmode],10
je near cscopyvesa2512x384x16b je near cscopyvesa2320x480x16b
cmp byte[cvidmode],11 cmp byte[cvidmode],11
je near cscopyvesa2640x480x8b je near cscopyvesa2512x384x8b
cmp byte[cvidmode],12 cmp byte[cvidmode],12
je near cscopyvesa2512x384x16b
cmp byte[cvidmode],13
je near cscopyvesa2640x480x8b
cmp byte[cvidmode],14
je near cscopyvesa2640x480x16b je near cscopyvesa2640x480x16b
%endif %endif
ret ret