dvwjr on 31/1/2007 at 19:53
Quote Posted by Bjossi
Code:
@echo off
"C:\Games\System Shock\nolfb.com"
"C:\Games\System Shock\MOUSE2KV.EXE" 640 480 10 10
"C:\Games\System Shock\dos4gw.exe"
cdshock.exe
Thanks for posting your batch file. I suspected that you might have your batch file for the WinXP NTVDM environment set up incorrectly - I was right...:eek:
First off is the fact the
"NOLFB.COM" does nothing for SYSTEM SHOCK. I know that the FAQ says so and it is a comforting myth propagated on this and other forums when applied to SYSTEM SHOCK. The NOLFB.COM Tsr only changes the return from Int10h VESA call 0x4F01 to inform the calling application that no Linear Framebuffer is available. Since SYSTEM SHOCK was released in September and December of 1994 using the VESA 1.2 programming specification and the VESA 2.0 specification which added Int10h API support for LFBs was released in 1995 there is NO need for NOLFB.COM...
Code:
;NOLFB.ASM by Ken Silverman (http://www.advsys.net/ken) 09/21/2002
;
;NOLFB is a TSR that disables the linear framebuffer (LFB) in VESA 2.0
;(and above) BIOS. Doing this will make some DOS games (including BUILD
;engine games and other demos on my website) run under Windows NT/2K/XP.
;Programs will run slower without the LFB, but at least they work!
;
;Compiling info: This MUST be run as a COM file!
;I was able to compile NOLFB.ASM->NOLFB.COM by using utilities from Watcom C:
; >wasm nolfb.asm
; >wlink f nolfb.obj system dos com
;
;It should also be possible to compile with old versions of MASM/LINK/EXE2BIN.
.286
code segment
assume cs:code
org 256
start: jmp short tsrinit
veshandler:
;modify only the VESA set_video_mode calls...
cmp ax, 4f01h
je short myhandler
;pass interrupt to original VESA handler (doesn't return to NOLFB)
jmp dword ptr cs:oveshandler
myhandler:
;call original VESA handler first (returns to NOLFB)
pushf ;pushf allows you to call an interrupt handler like a 'far' call
call dword ptr cs:oveshandler
;do our modifications only if original VESA handler returns 'good'
cmp ax, 4fh
jne short oveserror
;clear flag that says LFB exists (bit 7 of VBE_modeInfo.ModeAttributes)
and byte ptr es:[di], 7fh
oveserror:
iret
oveshandler dd ?
programleng equ $+256-start
mystring db "NOLFB by Ken Silverman (advsys.net/ken) 09/21/2002",'$'
tsrinit:
pop ax ;throw away the return address with COM files
;dos_printstring.. please don't remove! :)
mov dx, offset mystring
mov ah, 9
int 21h
;dos_getvect
mov ax, 3510h
int 21h
mov word ptr cs:[oveshandler+0], bx
mov word ptr cs:[oveshandler+2], es
;dos_setvect
mov dx, offset veshandler
mov ax, 2510h
int 21h
;free environment block
mov es, ds:[2ch]
mov ah, 49h
int 21h
;terminate and stay resident (TSR)
mov ax, 3100h
mov dx, (programleng+15)/16
int 21h
code ends
end start
Next is the
"dos4gw.exe" line in your batch file. This does nothing. Since you are using the MOK patched executable to even make SYSTEM SHOCK function in the Windows NTVDM environment it was rebound by Mok with another DOS extender
(CauseWay DOS Extender v3.25) in addition to his patches. The only way to over-ride the CauseWay DOS extender with Dos4GW.exe would be to pre-pend the Dos4GW to the CDSHOCK.EXE executeable thusly:
"C:\Games\System Shock\Dos4gw CDSHOCK.EXE"
The last thing is your use of
"MOUSE2KV.EXE" in your batch file. What you have done accomplishes nothing. MOUSE2KV.EXE is not a TSR, it is a DOS executable which executes another DOS program in order to attempt to fix the Windows XP NTVDM defects concerning the Int33h APIs AX=0x07 and 0x08. You must have the CDSHOCK.EXE executable after the four MOUSE2KV command line parameters thusly:
"C:\Games\System Shock\MOUSE2KV.EXE 640 480 10 10 CDSHOCK.EXE"
You could reduce your current DOS batch file to:
Code:
@Echo off
CDSHOCK.EXE
and you would accomplish the very same thing as your current batch file. The batch file to allow the NTVDM to support SYSTEM SHOCK in 640x480 VESA mode 0x101 with corrected mouse acceleration is as follows:
Code:
@Echo off
MOUSE2KV.EXE 640 480 10 10 CDSHOCK.EXE
Hope this helps others,
dvwjr
Bjossi on 31/1/2007 at 19:59
Although I barely understood anything there; now I find it even more amazing that SS1 works so well on my system...
Excluding the COM port errors when starting up, I don't have any serious problems. But your version of the batch file will more than likely fix the issues I had with the game crashing if I tried to load a savegame when my mouse pointer wasn't in the upper left part of the screen.
*tries*
Nope, still crashes to desktop. :sweat:
But at least the speed increase works.
dvwjr on 31/1/2007 at 20:11
Quote Posted by Bjossi
Excluding the COM port errors when starting up, I don't have any serious problems. But your version of the batch file will more than likely fix the issues I had with the game crashing if I tried to load a savegame when my mouse pointer wasn't in the upper left part of the screen.
The COM port errors under the WinXP NTVDM environment are due to the SYSTEM SHOCK application looking for a serial mouse on either COM1: or COM2: - which are verboten under the WinXP NTVDM environment. So the double ignore is necessary for now...
Actually the MOUSE2KV.EXE is the reason that you will get a crash when your mouse pointer is not in the upper left quadrant of the screen. When the screen is at 640x480 you are OK, but whenever SYSTEM SHOCK is in the default 320x200 MCGA/VGA mode 0x13 you might have problems with MOUSE2KV doing its mouse co-ordinate multiplying for the 640x480 command-line you will set.
Mouse2KV is not video-mode smart so it does not back-off when 320x200 mode is being used in SYSTEM SHOCK - think full-screen map mode and main-menu startup... It was a prototype for a TSR implemented as an C language Int 21h/AX=4B00h application. The author never got around to implementing it as a video-mode aware assembly language TSR, hence the confusion by many over its use and effects...
I am still curious as to what your CYB.CFG look like... :sly:
Hope this helps,
dvwjr
Bjossi on 31/1/2007 at 20:17
I do run the game in 640 x 480, the savegames that is.
Who in their right mind would use 320 x 240 when you can go higher anyways? :devil:
Oh, and here's my cyb.cfg.
Code:
midi_list 7
lowres_cutscenes 0
midi_io -1
midi_irq -1
inp6d -1
digi_list 0
joystick 131
midi_card 12
midi_dma -1
midi_drq -1
cd_data_dir_path C:\SS1\cdrom\data
digi_io -1
digi_irq -1
digi_card 1
digi_dma -1
language 0
digi_drq -1
Vigil on 31/1/2007 at 20:28
<a href="http://www.strangebedfellows.de/index.php/topic,211.0.html">System Shock Portable</a> is a convenient Just Plain Works package which means you don't have to give a shit about configuration at all. And since it uses DGVESA by default, which offers much more robust resolution-switching handling than MOUSE2KV, it doesn't have mouse crashes either.
Your mileage may vary with it, but it should be the first thing you try, not the last.
dvwjr on 31/1/2007 at 20:43
Quote Posted by Bjossi
I do run the game in 640 x 480, the savegames that is.
Who in their right mind would use 320 x 240 when you can go higher anyways? :devil:
Well, it only 320x200 but those who use the current DosBox v0.65 will find that 320x200 is the only playable video resolution. The next version of DosBox might be able to support 640x480 on a Core2Duo PC workstation.
As far as your CYB.CFG file my only suggestion would be to use VDMsound v2.1.0 to enable you to use the SB16 digital driver
(digi_card 3) instead of the WinXP (SP2) default SB 2.0
(digi_card 1) that you are currently using. Less sound break-up during the game itself...
Code:
midi_card 12
digi_card 3
Try a new game at 640x480 instead of opening a save game and see if having the MOUSE2KV 640 480 10 10 CDSHOCK.EXE command-line works OK...
Hope this helps,
dvwjr
Bjossi on 31/1/2007 at 20:58
I don't hear any sound break-ups during gameplay. :erm:
As for starting a new game, I tried and nothing changed about the crashes. I can load savegames fine, this only seems to happen if I try to load a savegame after I die. To avoid it I just move my mouse into upper left direction to make sure the pointer is there.
beach on 1/2/2007 at 01:34
The portable version is awesome. Great work.