A lot of updates

This commit is contained in:
pagefault
2003-03-16 23:40:07 +00:00
parent 2d67154926
commit 0480456f7d
25 changed files with 3225 additions and 3539 deletions

View File

@@ -55,7 +55,7 @@ WINDOSOBJ=${DOSDIR}/debug.o ${DOSDIR}/joy.o ${DOSDIR}/modemrtn.o ${DOSDIR}/vesa2
ZIPOBJ=${ZIPDIR}/zzip.o ${ZIPDIR}/unzip.o ${ZIPDIR}/zpng.o
MAINOBJ=cfgload.o endmem.o fixsin.o init.o ui.o vcache.o water.o smoke.o
MAINOBJ=cfgload.o endmem.o fixsin.o init.o ui.o vcache.o water.o smoke.o burn.o
OBJS=${CHIPSOBJ} ${CPUOBJ} ${WINOBJ} ${WINDOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${ZIPOBJ} ${MAINOBJ}
@@ -78,6 +78,7 @@ ${ZIPDIR}/zzip.o: ${ZIPDIR}/zzip.c ${ZIPDIR}/zunzip.h
fixsin.o: fixsin.c
water.o: water.c
smoke.o: smoke.c
burn.o: burn.c
${VIDEODIR}/procvid.o: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xsaimmx.inc
${CHIPDIR}/dsp1proc.o: ${CHIPDIR}/dsp1proc.asm macros.mac
${CHIPDIR}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.mac\

302
zsnes/src/burn.c Normal file
View File

@@ -0,0 +1,302 @@
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#ifndef M_PI
#ifndef PI
#define M_PI 3.1415926535897932384626433832795
#else
#define M_PI PI
#endif
#endif
/*
Hi guys, try this, use it in your code, but please credit
Frank Jan Sorensen Alias:Frank Patxi (fjs@lab.jt.dk) for the
fireroutine.
*/
/*
Hi again, guys!
If you use this code, please also credit me, Joachim Fenkes, 'cause I added
the following speedups:
-Replaced one tiny loop with a faster Move(...) (not much speedup)
-Wrote the main display loop in 100% assembler, including a faster random
number generator (the RNG is only a more or less optimized version of
Borland's generator (see MEGARAND.ASM), but with the advantage of the
ultimate crash if you call it normally :-)
-Changed version number into 1.10 (this isn't a speedup, but necessary :-)
*/
/*
Bcoz of the knowledge that reading from videocards is much slower than
writing to them, I changed some things to write and read from/to a pointer
and put the result with 32-Bit moves to the screen
Also I added now a much more faster randommer.
The result of this change is more than 3 times fast than before
Stefan Goehler
Please credit me!
...
to JF: your bug is fixed!
*/
/*
Oops, silly me, I removed all of the assembly code, so I can let the compiler
have at it. Also makes it more portable... even though I am doing this to add
to a project that is very non-portable.
*/
#define BUF_WIDTH 288
#define BUF_HEIGHT 224
const int rootrand = 20; /* Max/Min decrease of the root of the flames */
const int decay = 5; /* How far should the flames go up on the screen? */
/* This MUST be positive - JF */
const int miny = 0; /* Startingline of the flame routine.
(should be adjusted along with MinY above) */
const int smooth = 1; /* How descrete can the flames be?*/
const int minfire = 50; /* limit between the "starting to burn" and
the "is burning" routines */
const int xstart = 0; /* Startingpos on the screen, should be divideable by 4 without remain!*/
const int xend = 287; /* Guess! */
const int width = 1 + 287; /* +xend-xstart; Well- */
const int maxcolor = 110; /* Constant for the MakePal procedure */
const int fireincrease = 3; /*3 = Wood, 90 = Gazolin*/
typedef struct colorvalue
{
unsigned char r, g, b;
} colorvalue;
typedef colorvalue vgapalettetype[256];
void hsi2rgb(double h, double s, double i, struct colorvalue *c)
/*Convert (Hue, Saturation, Intensity) -> (RGB)*/
{
double t;
double rv, gv, bv;
t = h;
rv = 1 + s * sin(t - 2 * M_PI / 3);
gv = 1 + s * sin(t);
bv = 1 + s * sin(t + 2 * M_PI / 3);
t = 255.999 * i / 2;
{
c->r = floor(rv * t);
c->g = floor(gv * t);
c->b = floor(bv * t);
}
}
void genpal()
{
int i;
vgapalettetype pal;
memset(pal, 0, 3);
for( i=1; i <= maxcolor; i ++)
hsi2rgb(4.6-1.5*i/maxcolor,(double)(i)/maxcolor,(double)(i)/maxcolor,&pal[i]);
for( i=maxcolor; i <= 255; i ++)
{
pal[i]=pal[i-1];
{
struct colorvalue *with = &pal[i];
if (with->r<255) with->r += 1;
if (with->r<255) with->r += 1;
if ((~i & 1) && (with->g<215)) with->g += 1;
if ((~i & 1) && (with->b<255)) with->b += 1;
}
}
}
int started = 0;
#if 0 // emulating Turbo Pascal
unsigned int randseed;
const unsigned modulus = 2147483647;
const unsigned factor = 397204094;
void Randomize()
{
randseed = time(NULL);
}
unsigned int randint(unsigned range)
{
randseed = randseed * factor % modulus;
return range ? randseed % range : 0;
}
double randreal()
{
randseed = randseed * factor % modulus;
return (double)randseed / modulus;
}
int rand1(int r) /* Return a random number between -R And R*/
{
int result;
result=randint(r*2+1)-r;
return result;
}
#else
#define Randomize()
#define randint(a) (rand() % (a))
#define randreal() (((double)rand()) / ((double)RAND_MAX))
#define rand1(a) ((randint(a*2+1))-a)
#endif
unsigned char flamearray[BUF_WIDTH];
int morefire;
extern unsigned char *vidbuffer;
/* damn, this seems like such a waste */
static unsigned char pt[BUF_WIDTH * BUF_HEIGHT];
#if 0
int burn_init()
{
int i;
if (flamearray) return 1;
flamearray = (unsigned char *) malloc(BUF_WIDTH);
for( i=xstart; i <= xend; i++)
flamearray[i]=0;
Randomize();
morefire=1;
genpal();
return 0;
}
void burn_shutdown()
{
if (flamearray)
{
free(flamearray);
flamearray = NULL;
}
}
#endif
void DrawBurn()
{
int i,j;
int x,p;
int v;
if (!started)
{
started = 1;
for( i=xstart; i <= xend; i++)
flamearray[i]=0;
Randomize();
morefire=1;
memset(pt, 0, BUF_HEIGHT * BUF_WIDTH);
/* genpal(); */
}
/*
for (x=0; x < BUF_WIDTH*BUF_HEIGHT; x++)
{
i = pt[x];
j = vidbuffer[x] << 2;
if (i > j) pt[x] = i;
else pt[x] = (i + j) >> 1;
}
*/
/* Put the values from FlameArray on the bottom line of the screen */
memcpy(pt+((BUF_HEIGHT-1)*BUF_WIDTH)+xstart,flamearray, width);
/* This loop makes the actual flames */
for( i=xstart; i <= xend; i++)
for( j=miny; j <= (BUF_HEIGHT-1); j ++)
{
v = pt[j*BUF_WIDTH + i];
if ((v==0) ||
(v<decay) ||
(i<=xstart) ||
(i>=xend))
pt[(j-1)*BUF_WIDTH + i] = 0;
else
pt[((j-1)*BUF_WIDTH) + (i-(randint(3)-1))] = v - randint(decay);
}
/*Match?*/
if (randint(150)==0)
memset(flamearray + xstart + randint(xend-xstart-5),255,5);
/*This loop controls the "root" of the
flames ie. the values in FlameArray.*/
for( i=xstart; i <= xend; i++)
{
x=flamearray[i];
if (x<minfire) /* Increase by the "burnability"*/
{
/*Starting to burn:*/
if (x>10) x += randint(fireincrease);
}
else
/* Otherwise randomize and increase by intensity (is burning)*/
x += rand1(rootrand)+morefire;
if (x>255) x=255; /* X Too large ?*/
flamearray[i]=x;
}
/* Pour a little water on both sides of
the fire to make it look nice on the sides*/
/*
for( i=1; i <= width / 8; i ++)
{
x=floor(sqrt(randreal())*width/8);
flamearray[xstart+x]=0;
flamearray[xend-x]=0;
}
*/
/*Smoothen the values of FrameArray to avoid "descrete" flames*/
p=0;
for( i=xstart+smooth; i <= xend-smooth; i++)
{
x=0;
for( j=-smooth; j <= smooth; j++) x += flamearray[i+j];
flamearray[i] = x / ((smooth << 1) + 1);
}
for (x=0; x < BUF_WIDTH*BUF_HEIGHT; x++)
{
i = vidbuffer[x];
j = pt[x] >> 3;
if (j > i) vidbuffer[x] = j;
else vidbuffer[x] = ((i + j) >> 1) + 1;
}
}

View File

@@ -21,7 +21,7 @@ EXTSYM BRRPlace0,BRRPlace1,BRRPlace2,BRRPlace3,BRRPlace4,BRRPlace5,BRRPlace6
EXTSYM BRRPlace7,Decrease,DecreaseRateExp,EchoFB,EchoRate,EchoVL,EchoVR
EXTSYM FIRTAPVal0,FIRTAPVal1,FIRTAPVal2,FIRTAPVal3,FIRTAPVal4,FIRTAPVal5
EXTSYM FIRTAPVal6,FIRTAPVal7,GlobalVL,GlobalVR,Increase,IncreaseBent
EXTSYM MaxEcho,MusicVol,NoiseInc,NoiseSpeeds,SBToSPC,Voice0End,Voice0EnvInc
EXTSYM MaxEcho,MusicVol,NoiseInc,NoiseSpeeds,dspPAdj,Voice0End,Voice0EnvInc
EXTSYM Voice0IncNumber,Voice0Loop,Voice0Noise,Voice0Prev0,Voice0Prev1
EXTSYM Voice0Start,Voice0State,Voice0Status,Voice0Time,Voice1End,Voice1Noise
EXTSYM Voice1Prev0,Voice1Prev1,Voice1Start,Voice2End,Voice2Noise,Voice2Prev0
@@ -47,7 +47,9 @@ NEWSYM DspAsmStart
;none times 256 db 0
SECTION .data
identcode db 255,1,78,78
SECTION .text
;sardcode db 234,76,80,128,65,65 ; 6
;efxcode db 17,47,62,97,26,126,98 ; 7
;zopcode db 54,39,21,0,0,8,14,12,18 ; 9
@@ -67,9 +69,10 @@ identcode db 255,1,78,78
mov [DSPMem+00h+%1],al
%endmacro
ALIGN32
NEWSYM DSPMem, times 256 db 0
SECTION .bss ;ALIGN=32
alignb 32
NEWSYM DSPMem, resb 256
SECTION .text
;Read DSP Registers functions
@@ -1114,7 +1117,7 @@ NEWSYM RDSPRegFF ;
test byte [DSPMem+07h+%1*10h],40h
jnz near %%Increase
test byte [DSPMem+07h+%1*10h],20h
jz near %%LinearDec
jz %%LinearDec
xor eax,eax
mov al,[DSPMem+07h+%1*10h]
and al,1Fh
@@ -1216,7 +1219,7 @@ NEWSYM RDSPRegFF ;
test byte [DSPMem+07h+%1*10h],40h
jnz near %%Increase
test byte [DSPMem+07h+%1*10h],20h
jz near %%LinearDec
jz %%LinearDec
xor eax,eax
mov al,[DSPMem+07h+%1*10h]
and al,1Fh
@@ -1524,11 +1527,11 @@ NEWSYM RDSPRegFF ;
%macro VoiceGain 1
test byte[MuteVoiceF],1 << %1
jnz near .nogain
jnz .nogain
cmp byte[Voice0State+%1],200
je near .nogain
je .nogain
cmp [DSPMem+07h+%1*10h],al
je near .nogain
je .nogain
mov [DSPMem+07h+%1*10h],al
cmp byte[Voice0Status+%1],1
jne .nogain
@@ -1550,7 +1553,9 @@ NEWSYM RDSPRegFF ;
ProcessGain2 %1
%endmacro
NEWSYM ADSRGAINSwitch, db 0
SECTION .bss
NEWSYM ADSRGAINSwitch, resb 1
SECTION .text
;Write DSP Registers functions
@@ -1584,7 +1589,9 @@ NEWSYM WDSPReg04 ; Voice 0 SCRN
mov [DSPMem+04h],al
ret
NEWSYM TempValueSnd, db 0
SECTION .bss
NEWSYM TempValueSnd, resb 1
SECTION .text
NEWSYM WDSPReg05 ; Voice 0 ADSR (1)
inc byte[TempValueSnd]
@@ -2231,7 +2238,9 @@ NEWSYM WDSPReg6B ; Voice 6
mov [DSPMem+06Bh],al
ret
spcres db 0
SECTION .bss
spcres resb 1
SECTION .text
NEWSYM WDSPReg6C ; Voice 6
mov [DSPMem+06Ch],al
@@ -2258,10 +2267,8 @@ NEWSYM WDSPReg6C ; Voice 6
and eax,1Fh
xor edx,edx
mov eax,[NoiseSpeeds+eax*4]
mov ebx,[SBToSPC]
shl eax,16
div ebx
shl eax,2
Mul dword [dspPAdj]
ShrD EAX, EDX, 17
mov [NoiseInc],eax
pop edx
pop ecx

File diff suppressed because it is too large Load Diff

View File

@@ -28,8 +28,8 @@ EXTSYM Op08X,Op18X,Op28X,Op0CA,Op02FX,Op0AVS,Op06X,Op0DX,Op03F,Op14Zr
EXTSYM Op0EH,DSP1Type,Op01m
EXTSYM Voice0Status
EXTSYM UpdateDPage
EXTSYM Interror,MessageOn,MsgCount,Msgptr,StartGUI,cbitmode,debuggeron,romdata
EXTSYM frameskip,initvideo,newgfx16b,oldhandSBo,oldhandSBs,soundon,cvidmode
EXTSYM MessageOn,MsgCount,Msgptr,StartGUI,cbitmode,debuggeron,romdata
EXTSYM frameskip,initvideo,newgfx16b,soundon,cvidmode
EXTSYM vidbuffer,vidbufferofsa,vidbufferofsb,disable65816sh,GUISaveVars,virqnodisable
EXTSYM KeySaveState,KeyLoadState,KeyQuickExit,KeyQuickLoad,KeyQuickRst,GUIDoReset
EXTSYM KeyOnStA,KeyOnStB,ProcessKeyOn,printnum,sramsavedis,DSPDisable,C4Enable
@@ -39,8 +39,8 @@ EXTSYM csounddisable,videotroub,Open_File,Close_File,Read_File,ResetTripleBuf
EXTSYM Write_File,Output_Text,Create_File,Check_Key,Get_Key,Change_Dir,InitPreGame
;EXTSYM OSPort
; EXTSYM tempblah,romdata
EXTSYM Curtableaddr,DeInitSPC,InitSB,PICMaskP,SBHandler,SBInt
EXTSYM SBIrq,curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
EXTSYM Curtableaddr
EXTSYM curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
EXTSYM memtablew8,regaccessbankr8,showmenu,snesmap2,snesmmap,DeInitPostGame
EXTSYM spcPCRam,startdebugger,xp,xpb,xpc,tablead,tableadb,tableadc
; EXTSYM oamram
@@ -53,8 +53,10 @@ EXTSYM OSExit,DosExit,InitDir,InitDrive,createnewcfg,fnames,gotoroot,previdmode
EXTSYM ramsize,sfxramdata,sram,SRAMDrive,SRAMDir,welcome
; EXTSYM tempstore
EXTSYM printhex
%ifdef __MSDOS__
EXTSYM ModemInitStat, DeInitModem
EXTSYM deinitipx
%endif
EXTSYM deinitvideo
EXTSYM BRRBuffer,DSPMem,PrepareSaveState,ResetState,SFXEnable,PHdspsave
EXTSYM fnamest,sndrot,spcRam,spcRamDP,tableA,unpackfunct,vram,wramdata
@@ -67,11 +69,10 @@ EXTSYM CapturePicture,PrevPicture,NoPictureSave
EXTSYM BRRPlace0,SfxCPB,SfxCROM,SfxLastRamAdr,SfxMemTable,Totalbyteloaded
EXTSYM SfxRAMBR,SfxRAMMem,SfxROMBR,SfxRomBuffer,Voice0Freq
EXTSYM cycpbl,cycpbl2,cycpblt,cycpblt2,irqon,nexthdma
EXTSYM repackfunct,spcnumread,spcon,versn,headerhack,initpitch
EXTSYM repackfunct,spcnumread,spchalted,spcon,versn,headerhack,initpitch
EXTSYM SPCMultA,PHnum2writespc7110reg
EXTSYM multchange,procexecloop,vidmemch2
EXTSYM romispal
EXTSYM dssel
EXTSYM scrndis,sprlefttot,sprleftpr,processsprites,cachesprites
EXTSYM NextLineStart,FlipWait,LastLineStart
EXTSYM opcjmptab
@@ -118,6 +119,14 @@ EXTSYM ReadSPC7110log,WriteSPC7110log
EXTSYM NetPlayNoMore
EXTSYM statefileloc
%ifdef OPENSPC
EXTSYM OSPC_Run, ospc_cycle_frac
%endif
%ifdef __MSDOS__
EXTSYM dssel
%endif
NEWSYM ExecuteAsmStart
%macro BackupCVMacM 2
@@ -130,7 +139,8 @@ NEWSYM ExecuteAsmStart
movq [ebx+8],mm1
add edx,16
add ebx,16
loop %%loop
dec ecx
jnz %%loop
%endmacro
%macro BackupCVMac 2
@@ -141,7 +151,8 @@ NEWSYM ExecuteAsmStart
mov [ebx],eax
add edx,4
add ebx,4
loop %%loop
dec ecx
jnz %%loop
%endmacro
%macro BackupCVMacB 2
@@ -152,7 +163,8 @@ NEWSYM ExecuteAsmStart
mov [ebx],al
inc edx
inc ebx
loop %%loop
dec ecx
jnz %%loop
%endmacro
%macro BackupCVRMacM 2
@@ -165,7 +177,8 @@ NEWSYM ExecuteAsmStart
movq [edx+8],mm1
add edx,16
add ebx,16
loop %%loop
dec ecx
jnz %%loop
%endmacro
%macro BackupCVRMac 2
@@ -176,7 +189,8 @@ NEWSYM ExecuteAsmStart
mov [edx],eax
add edx,4
add ebx,4
loop %%loop
dec ecx
jnz %%loop
%endmacro
%macro BackupCVRMacB 2
@@ -187,46 +201,57 @@ NEWSYM ExecuteAsmStart
mov [edx],al
inc edx
inc ebx
loop %%loop
dec ecx
jnz %%loop
%endmacro
NEWSYM CBackupPos, dd 0
NEWSYM StateBackup, dd 0
NEWSYM PBackupPos, dd 0
NEWSYM PPValue, dd 0 ; Previous PValue
NEWSYM DPValue, dd 0 ; Destination PValue
NEWSYM CurRecv, dd 0 ; Set to 1 if Recovery mode is on
SECTION .bss
NEWSYM CBackupPos, resd 1
NEWSYM StateBackup, resd 1
NEWSYM PBackupPos, resd 1
NEWSYM PPValue, resd 1 ; Previous PValue
NEWSYM DPValue, resd 1 ; Destination PValue
NEWSYM CurRecv, resd 1 ; Set to 1 if Recovery mode is on
; if CurRecv=1, then do not send tcp/ip data, always frame skip, do not
; draw to screen, do not key on, restore previous local key presses,
; when disabling key ons, divert dspmem write/read to a different
; array temporarly, then re-copy back in when finished
NEWSYM PPContrl, times 16 dd 0 ; Previous Controller 1 Data
NEWSYM PPContrl2, times 16 dd 0 ; Previous Controller 2 Data
NEWSYM PPContrl3, times 16 dd 0 ; Previous Controller 3 Data
NEWSYM PPContrl4, times 16 dd 0 ; Previous Controller 4 Data
NEWSYM PPContrl5, times 16 dd 0 ; Previous Controller 5 Data
NEWSYM tempedx, dd 0
NEWSYM NetSent2, dd 0
NEWSYM NetQuitter, dd 0
NEWSYM QBackupPos, dd 0
NEWSYM LatencyV, times 256 db 0
NEWSYM LatencyRecvPtr, dd 0
NEWSYM LatencySendPtr, dd 0
NEWSYM latencytimer, dd 0
NEWSYM PPContrl, resd 16 ; Previous Controller 1 Data
NEWSYM PPContrl2, resd 16 ; Previous Controller 2 Data
NEWSYM PPContrl3, resd 16 ; Previous Controller 3 Data
NEWSYM PPContrl4, resd 16 ; Previous Controller 4 Data
NEWSYM PPContrl5, resd 16 ; Previous Controller 5 Data
NEWSYM tempedx, resd 1
NEWSYM NetSent2, resd 1
NEWSYM NetQuitter, resd 1
NEWSYM QBackupPos, resd 1
NEWSYM LatencyV, resb 256
NEWSYM LatencyRecvPtr, resd 1
NEWSYM LatencySendPtr, resd 1
NEWSYM latencytimer, resd 1
SECTION .data
NEWSYM BackState, db 1
NEWSYM BackStateSize, dd 6
NEWSYM nojoystickpoll, dd 0
NEWSYM RemoteLValue, db 0
NEWSYM LocalLValue, db 0
NEWSYM chatstrLt, times 15 db 0
NEWSYM RewindOldPos, dd 0
NEWSYM RewindPos, dd 0
NEWSYM RewindTimer, dd 0
SECTION .bss
NEWSYM nojoystickpoll, resd 1
NEWSYM RemoteLValue, resb 1
NEWSYM LocalLValue, resb 1
NEWSYM chatstrLt, resb 15
NEWSYM RewindOldPos, resd 1
NEWSYM RewindPos, resd 1
NEWSYM RewindTimer, resd 1
SECTION .data
NEWSYM ResendTimer, dd 60
NEWSYM valuea, dd 0
NEWSYM valueb, dd 0
NEWSYM valuet, dd 0
BackupArray times 2000 dd 0
SECTION .bss
NEWSYM valuea, resd 1
NEWSYM valueb, resd 1
NEWSYM valuet, resd 1
BackupArray resd 3000
SECTION .text
NEWSYM SplitStringChat
push ebx
@@ -352,7 +377,9 @@ NEWSYM GenLatencyDisplay
mov [chatstrLt+4],dl
mov [chatstrLt+3],al
ret
.temp dd 0
SECTION .bss
.temp resd 1
SECTION .text
NEWSYM ResetExecStuff
mov dword[soundcycleft],0
@@ -363,7 +390,8 @@ NEWSYM ResetExecStuff
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov byte[NextLineCache],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov dword[timer2upd],0
mov dword[HIRQCycNext],0
mov byte[HIRQNextExe],0
@@ -465,7 +493,8 @@ NEWSYM BackupSystemVars
BackupCVMac spc700read,10
BackupCVMac timer2upd,1
BackupCVMac xa,14
BackupCVMacB spcnumread,1
BackupCVMacB spcnumread,4
BackupCVMacB spchalted,4
BackupCVMac opcd,6
BackupCVMacB HIRQCycNext,5
BackupCVMac oamaddr,14
@@ -487,7 +516,8 @@ NEWSYM RestoreSystemVars
BackupCVRMac spc700read,10
BackupCVRMac timer2upd,1
BackupCVRMac xa,14
BackupCVRMacB spcnumread,1
BackupCVRMacB spcnumread,4
BackupCVRMacB spchalted,4
BackupCVRMac opcd,6
BackupCVRMacB HIRQCycNext,5
BackupCVRMac oamaddr,14
@@ -560,7 +590,8 @@ NEWSYM BackupCVFrame
BackupCVMac spc700read,10
BackupCVMac timer2upd,1
BackupCVMac xa,14
BackupCVMacB spcnumread,1
BackupCVMacB spcnumread,4
BackupCVMacB spchalted,4
BackupCVMac opcd,6
BackupCVMacB HIRQCycNext,5
BackupCVMac oamaddr,14
@@ -654,7 +685,8 @@ NEWSYM RestoreCVFrame
BackupCVRMac spc700read,10
BackupCVRMac timer2upd,1
BackupCVRMac xa,14
BackupCVRMacB spcnumread,1
BackupCVRMacB spcnumread,4
BackupCVRMacB spchalted,4
BackupCVRMac opcd,6
BackupCVRMacB HIRQCycNext,5
BackupCVRMac oamaddr,14
@@ -689,7 +721,9 @@ NEWSYM RestoreCVFrame
emms
ret
NEWSYM MuteVoiceF, db 0
SECTION .bss
NEWSYM MuteVoiceF, resb 0
SECTION .text
VoiceEndMute:
mov byte[MuteVoiceF],0
@@ -973,19 +1007,22 @@ NetSaveState:
; pexecs
; *** Copy to PC whenever a non-relative jump is executed
NEWSYM romloadskip, db 0
NEWSYM abcdefg, dd 0
NEWSYM abcdefg1, dd 0
NEWSYM abcdefg2, dd 0
NEWSYM abcdefg3, dd 0
NEWSYM SSKeyPressed, dd 0
NEWSYM SPCKeyPressed, dd 0
NEWSYM NoSoundReinit, dd 0
NEWSYM NextNGDisplay, db 0
NEWSYM TempVidInfo, dd 0
SECTION .bss
NEWSYM romloadskip, resb 1
NEWSYM abcdefg, resd 1
NEWSYM abcdefg1, resd 1
NEWSYM abcdefg2, resd 1
NEWSYM abcdefg3, resd 1
NEWSYM SSKeyPressed, resd 1
NEWSYM SPCKeyPressed, resd 1
NEWSYM NoSoundReinit, resd 1
NEWSYM NextNGDisplay, resb 1
NEWSYM TempVidInfo, resd 1
NEWSYM tempdh, db 0
NEWSYM tempdh, resb 1
SECTION .text
NEWSYM start65816
@@ -1282,8 +1319,10 @@ reexecuteb2:
jnz near endprog
jmp StartGUI
SECTION .data
NEWSYM EndMessage
db ' ',13,10,0
SECTION .text
NEWSYM endprog
call deinitvideo
@@ -1417,6 +1456,7 @@ NEWSYM endprog
mov ebx,InitDir
call Change_Dir
%ifdef __MSDOS__
; Deinit modem if necessary
cmp byte[ModemInitStat],0
je .nodeinitmodem
@@ -1424,12 +1464,13 @@ NEWSYM endprog
.nodeinitmodem
; cmp byte[OSPort],1
; jae .nodeinitipx
%ifdef __MSDOS__
call deinitipx
%endif
;.nodeinitipx
%endif
jmp OSExit
SECTION .data
NEWSYM sdd1fname, db 'sdd1dat.dat',0,0
SECTION .text
NEWSYM interror
stim
@@ -1439,31 +1480,38 @@ NEWSYM interror
call Output_Text ;to print a string
jmp DosExit
SECTION .data
.nohand db 'Cannot process interrupt handler!',13,10,0
SECTION .bss
; global variables
NEWSYM invalid, db 0
NEWSYM invopcd, db 0
NEWSYM pressed, times 256+128+64 db 0 ; keyboard pressed keys in scancode
NEWSYM exiter, db 0
NEWSYM oldhand9o, dd 0
NEWSYM oldhand9s, dw 0
NEWSYM oldhand8o, dd 0
NEWSYM oldhand8s, dw 0
NEWSYM opcd, dd 0
NEWSYM pdh, dd 0
NEWSYM pcury, dd 0
NEWSYM timercount, dd 0
NEWSYM initaddrl, dd 0 ; initial address location
NEWSYM NetSent, dd 0
NEWSYM nextframe, dd 0 ; tick count for timer
NEWSYM curfps, db 0 ; frame/sec for current screen
NEWSYM SFXSRAM, db 0
NEWSYM invalid, resb 1
NEWSYM invopcd, resb 1
NEWSYM pressed, resb 256+128+64 ; keyboard pressed keys in scancode
NEWSYM exiter, resb 1
NEWSYM oldhand9o, resd 1
NEWSYM oldhand9s, resw 1
NEWSYM oldhand8o, resd 1
NEWSYM oldhand8s, resw 1
NEWSYM opcd, resd 1
NEWSYM pdh, resd 1
NEWSYM pcury, resd 1
NEWSYM timercount, resd 1
NEWSYM initaddrl, resd 1 ; initial address location
NEWSYM NetSent, resd 1
NEWSYM nextframe, resd 1 ; tick count for timer
NEWSYM curfps, resb 1 ; frame/sec for current screen
NEWSYM SFXSRAM, resb 1
SECTION .data
NEWSYM newgfxerror, db 'NEED MEMORY FOR GFX ENGINE',0
NEWSYM newgfxerror2, db 'NEED 320x240 FOR NEW GFX 16B',0
;newgfxerror db 'NEW GFX IN 16BIT IS N/A',0
NEWSYM HIRQCycNext, dd 0
NEWSYM HIRQNextExe, db 0
SECTION .bss
NEWSYM HIRQCycNext, resd 1
NEWSYM HIRQNextExe, resb 1
SECTION .text
;*******************************************************
; Save/Load States
@@ -1496,10 +1544,13 @@ NEWSYM sramsave
mov [MessageOn],eax
jmp reexecute
SECTION .data
.savesrmmsg1 db 'SRAM DATA SAVED.',0
.savesrmmsg2 db 'NO SRAM DATA.',0
NEWSYM firstsaveinc, db 0
SECTION .bss
NEWSYM firstsaveinc, resb 1
SECTION .text
NEWSYM statesaver
clim
@@ -1671,8 +1722,10 @@ NEWSYM statesaver
mov [MessageOn],eax
ret
SECTION .data
.savemsg db 'STATE - SAVED.',0
.savemsgfail db 'UNABLE TO SAVE.',0
SECTION .text
NEWSYM savestate
jmp .save
@@ -1708,9 +1761,12 @@ NEWSYM savestate
call statesaver
jmp reexecuteb
SECTION .data
.fname2 db 9,'image.dat',0
cycpblblah dd 0,0
SECTION .bss
cycpblblah resd 2
SECTION .text
; Load State
NEWSYM stateloader
@@ -1835,7 +1891,8 @@ NEWSYM stateloader
.nosdd1
call Close_File
call repackfunct
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[nexthdma],0
; call headerhack
@@ -1900,7 +1957,8 @@ NEWSYM stateloader
call Close_File
call repackfunct
mov dword[cycpbl],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[nexthdma],0
call headerhack
call initpitch
@@ -1964,9 +2022,11 @@ NEWSYM loadstate
stim
jmp reexecuteb
SECTION .data
.loadmsg db 'STATE - LOADED.',0
.convmsg db 'STATE - LOADED/CONVERTED',0
.nfndmsg db 'UNABLE TO LOAD STATE -.',0
SECTION .text
NEWSYM loadstate2
mov edx,fnamest+1
@@ -2034,6 +2094,7 @@ NEWSYM Game60hzcall
inc byte[nextframe]
ret
%ifdef __MSDOS__
NEWSYM handler8h
cli
push ds
@@ -2056,16 +2117,23 @@ NEWSYM handler8hseg
pop ds
sti
iretd
%endif
SECTION .data
NEWSYM timeradj, dd 65536
NEWSYM t1cc, dw 0
SECTION .bss
NEWSYM t1cc, resw 1
SECTION .text
;*******************************************************
; Int 09h vector
;*******************************************************
NEWSYM skipnextkey42, db 0
SECTION .bss
NEWSYM skipnextkey42, resb 1
SECTION .text
%ifdef __MSDOS__
NEWSYM handler9h
cli
push ds
@@ -2127,21 +2195,26 @@ NEWSYM handler9h
pop ds
sti
iretd
%endif
ALIGN32
SECTION .bss ;ALIGN=32
NEWSYM soundcycleft, resd 1
NEWSYM curexecstate, resd 1
NEWSYM soundcycleft, dd 0
NEWSYM curexecstate, dd 0
NEWSYM nmiprevaddrl, resd 1 ; observed address -5
NEWSYM nmiprevaddrh, resd 1 ; observed address +5
NEWSYM nmirept, resd 1 ; NMI repeat check, if 6 then okay
NEWSYM nmiprevaddrl, dd 0 ; observed address -5
NEWSYM nmiprevaddrh, dd 0 ; observed address +5
NEWSYM nmirept, dd 0 ; NMI repeat check, if 6 then okay
SECTION .data
NEWSYM nmiprevline, dd 224 ; previous line
NEWSYM nmistatus, dd 0 ; 0 = none, 1 = waiting for nmi location,
SECTION .bss
NEWSYM nmistatus, resd 1 ; 0 = none, 1 = waiting for nmi location,
; 2 = found, disable at next line
NEWSYM joycontren, dd 0 ; joystick read control check
NEWSYM NextLineCache, db 0
NEWSYM NetQuit, db 0
NEWSYM joycontren, resd 1 ; joystick read control check
NEWSYM NextLineCache, resb 1
NEWSYM NetQuit, resb 1
SECTION .text
Donextlinecache:
cmp word[curypos],0
@@ -2235,6 +2308,8 @@ Donextlinecache:
; 65816 execution
;*******************************************************
SECTION .data
SpeedHackSafeTable
db 1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0
db 0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0
@@ -2252,6 +2327,7 @@ SpeedHackSafeTable
db 0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0
db 0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1
db 0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,1
SECTION .text
NEWSYM exitloop2
mov byte[ExecExitOkay],0
@@ -2316,7 +2392,6 @@ ALIGN16
%%noflip
%endmacro
NEWSYM execute
NEWSYM execloop
mov bl,dl
@@ -2333,6 +2408,17 @@ NEWSYM execloop
jmp cpuover
.sound
mov edi,[tableadc+ebx*4]
%ifdef OPENSPC
pushad
mov bl,[esi]
movzx eax,byte[cpucycle+ebx]
mov ebx,0xC3A13DE6
mul ebx
add [ospc_cycle_frac],eax
adc [SPC_Cycles],edx
call OSPC_Run
popad
%else
sub dword[cycpbl],55
jnc .skipallspc
mov eax,[cycpblt]
@@ -2343,6 +2429,7 @@ NEWSYM execloop
call dword near [opcjmptab+ebx*4]
xor ebx,ebx
.skipallspc
%endif
mov bl,[esi]
inc esi
sub dh,[cpucycle+ebx]
@@ -2353,25 +2440,27 @@ NEWSYM execloop
SECTION .data
SECTION .data ;ALIGN=32
ALIGN32
NEWSYM ExecExitOkay, db 1
NEWSYM JoyABack, dd 0
NEWSYM JoyBBack, dd 0
NEWSYM JoyCBack, dd 0
NEWSYM JoyDBack, dd 0
NEWSYM JoyEBack, dd 0
NEWSYM NetCommand, dd 0
NEWSYM spc700read, dd 0
NEWSYM lowestspc, dd 0
NEWSYM highestspc, dd 0
NEWSYM SA1UBound, dd 0
NEWSYM SA1LBound, dd 0
NEWSYM SA1SH, dd 0
NEWSYM SA1SHb, dd 0
NEWSYM NumberOfOpcodes2, dd 0
NEWSYM ChangeOps, dd 0
NEWSYM SFXProc, dd 0
SECTION .bss ;ALIGN=32
NEWSYM JoyABack, resd 1
NEWSYM JoyBBack, resd 1
NEWSYM JoyCBack, resd 1
NEWSYM JoyDBack, resd 1
NEWSYM JoyEBack, resd 1
NEWSYM NetCommand, resd 1
NEWSYM spc700read, resd 1
NEWSYM lowestspc, resd 1
NEWSYM highestspc, resd 1
NEWSYM SA1UBound, resd 1
NEWSYM SA1LBound, resd 1
NEWSYM SA1SH, resd 1
NEWSYM SA1SHb, resd 1
NEWSYM NumberOfOpcodes2, resd 1
NEWSYM ChangeOps, resd 1
NEWSYM SFXProc, resd 1
SECTION .text
@@ -2388,7 +2477,7 @@ NEWSYM cpuover
dec esi
cmp byte[HIRQNextExe],0
je .nohirq
mov dh,[HIRQCycNext]
add dh,[HIRQCycNext]
mov byte[HIRQCycNext],0
jmp .hirq
.nohirq
@@ -3974,7 +4063,9 @@ NEWSYM cpuover
pop eax
jmp .returncheat
.numcheat db 0
SECTION .bss ;ALIGN=32
.numcheat resb 1
SECTION .text ;ALIGN=32
ALIGN16

View File

@@ -31,9 +31,6 @@ NEWSYM Spc700AsmStart
; SPC 700 Emulation by _Demo_
; Version 2.0
@@ -42,6 +39,7 @@ NEWSYM Spc700AsmStart
; Read byte : read al from [ebx]
; update timer : update the timers, called every scanline
SECTION .data ;ALIGN=32
ALIGN32
@@ -126,72 +124,81 @@ NEWSYM SPCROM
db 0CBh,0F4h,0D7h,000h,0FCh,0D0h,0F3h,0ABh,001h,010h,0EFh,07Eh,0F4h,010h,0EBh,0BAh
db 0F6h,0DAh,000h,0BAh,0F4h,0C4h,0F4h,0DDh,05Dh,0D0h,0DBh,01Fh,000h,000h,0C0h,0FFh
SECTION .text
%macro WriteByte 0
cmp ebx,0ffh+spcRam
ja .extramem
ja %%extramem
cmp ebx,0f0h+spcRam
jb .normalmem
jb %%normalmem
sub ebx,spcRam
call dword near [spcWptr+ebx*4-0f0h*4]
jmp .finished
.extramem
push dword %%finished
jmp dword near [spcWptr+ebx*4-0f0h*4]
; call dword near [spcWptr+ebx*4-0f0h*4]
; jmp .finished
%%extramem
cmp ebx,0ffc0h+spcRam
jb .normalmem
jb %%normalmem
mov [spcextraram+ebx-0FFC0h-spcRam],al
test byte[spcRam+0F1h],80h
jnz .finished
jnz %%finished
; push ecx
; mov cl,[DSPMem+06Ch]
; test cl,20h
; pop ecx
; jz .finished
.normalmem
%%normalmem
mov [ebx],al
.finished
%%finished
%endmacro
%macro ReadByte 0
cmp ebx,0f0h+spcRam
jb .rnormalmem2
jb %%normalmem2
cmp ebx,0ffh+spcRam
ja .rnormalmem
ja %%normalmem
sub ebx,spcRam
call dword near [spcRptr+ebx*4-0f0h*4]
jmp .rfinished
.rnormalmem
push dword %%finished
jmp dword near [spcRptr+ebx*4-0f0h*4]
; call dword near [spcRptr+ebx*4-0f0h*4]
; jmp .rfinished
%%normalmem
; cmp ebx,0ffc0h+spcRam
; jb .rnormalmem2
; test byte [DSPMem+6Ch],10h
; jz .rnormalmem2
; mov al,[spcextraram+ebx-0FFC0h-spcRam]
; jmp .rfinished
.rnormalmem2
%%normalmem2
mov al,[ebx]
.rfinished
%%finished
%endmacro
%macro ReadByte2 0
cmp ebx,0f0h+spcRam
jb .rnormalmem2
jb %%normalmem2
cmp ebx,0ffh+spcRam
ja .rnormalmem
ja %%normalmem
sub ebx,spcRam
call dword near [spcRptr+ebx*4-0f0h*4]
add ebx,spcRam
jmp .rfinished
.rnormalmem
jmp %%finished
%%normalmem
; cmp ebx,0ffc0h+spcRam
; jb .rnormalmem2
; test byte [DSPMem+6Ch],10h
; jz .rnormalmem2
; mov al,[spcextraram+ebx-0FFC0h-spcRam]
; jmp .rfinished
.rnormalmem2
%%normalmem2
mov al,[ebx]
.rfinished
%%finished
%endmacro
NEWSYM timer2upd, dd 0
SECTION .bss
NEWSYM timer2upd, resd 1
SECTION .text
; This function is called every scanline (262*60 times/sec)
; Make it call 0.9825 times (393/400) (skip when divisible by 64)
; 2 8khz, 1 64khz
@@ -223,6 +230,8 @@ NEWSYM updatetimer
mov [timinl0],al
cmp byte[spcRam+0FDh],1
jne .noin0
cmp byte[spchalted],0
jz .noin0
reenablespc
mov dword[cycpbl],0
.noin0
@@ -235,6 +244,8 @@ NEWSYM updatetimer
mov [timinl1],al
cmp byte[spcRam+0FEh],1
jne .noin1
cmp byte[spchalted+1],0
jz .noin1
reenablespc
mov dword[cycpbl],0
.noin1
@@ -248,6 +259,8 @@ NEWSYM updatetimer
mov [timinl2],al
cmp byte[spcRam+0FFh],1
jne .noin2
cmp byte[spchalted+2],0
jz .noin2
reenablespc
mov dword[cycpbl],0
.noin2
@@ -258,6 +271,8 @@ NEWSYM updatetimer
mov [timinl2],al
cmp byte[spcRam+0FFh],1
jne .noin2b
cmp byte[spchalted+2],0
jz .noin2b
reenablespc
mov dword[cycpbl],0
.noin2b
@@ -268,6 +283,8 @@ NEWSYM updatetimer
mov [timinl2],al
cmp byte[spcRam+0FFh],1
jne .noin2c
cmp byte[spchalted+2],0
jz .noin2c
reenablespc
mov dword[cycpbl],0
.noin2c
@@ -278,6 +295,8 @@ NEWSYM updatetimer
mov [timinl2],al
cmp byte[spcRam+0FFh],1
jne .noin2d
cmp byte[spchalted+2],0
jz .noin2d
reenablespc
mov dword[cycpbl],0
.noin2d
@@ -438,17 +457,63 @@ NEWSYM RSPCRegF2
NEWSYM RSPCRegF3
mov al,[spcRam+0f3h]
ret
%ifdef SPCDUMP
SECTION .bss
ALIGNB 4
NEWSYM SPCSave_start, resd 2
NEWSYM SPCSave_buffer, resb 4
NEWSYM SPCSave_ports, resb 4
SECTION .text
EXTSYM SPCSave_dump, SPCSave_handle, Write_File
%macro spcdump 1
cmp byte[SPCSave_dump], 1
jne %%nodump
inc dword[SPCSave_buffer]
cmp [SPCSave_ports+%1], al
je %%nodump
mov [SPCSave_ports+%1], al
pushad
mov byte[SPCSave_buffer+2], %1
mov byte[SPCSave_buffer+3], al
mov ebx, [SPCSave_handle]
mov ecx, 4
mov edx, SPCSave_buffer
call Write_File
xor eax, eax
mov [SPCSave_buffer], eax
popad
%%nodump
%endmacro
%endif
NEWSYM RSPCRegF4
mov al,[spcRam+0f4h]
%ifdef SPCDUMP
spcdump 0
%endif
ret
NEWSYM RSPCRegF5
mov al,[spcRam+0f5h]
%ifdef SPCDUMP
spcdump 1
%endif
ret
NEWSYM RSPCRegF6
mov al,[spcRam+0f6h]
%ifdef SPCDUMP
spcdump 2
%endif
ret
NEWSYM RSPCRegF7
mov al,[spcRam+0f7h]
%ifdef SPCDUMP
spcdump 3
%endif
ret
NEWSYM RSPCRegF8
mov al,0 ;[spcRam+0f8h]
@@ -465,30 +530,74 @@ NEWSYM RSPCRegFB
NEWSYM RSPCRegFC
mov al,[spcRam+0fch]
ret
%macro skipmacro 1
.spcnextskip
test byte[timeron],1<<%1
je .ret
cmp byte[timincr0+%1],0
je .ret
;cmp byte[SpeedHack],0
;je .ret
inc byte[spcnumread+%1]
cmp byte[spcnumread+%1],8h
je near haltspc
.ret
ret
%endmacro
ALIGN16
NEWSYM haltspc
cmp byte[SPC700sh],1
je .nochangestate
mov dword[cycpbl],0FFFFFFFFh
test byte[curexecstate],02h
jz .nochangestate
and byte[curexecstate],0FDh
push ebx
mov ebx,[spcnumread]
mov [spchalted],ebx
xor ebx,ebx
mov bl,dl
mov edi,[tableadb+ebx*4]
pop ebx
.nochangestate
mov dword[spcnumread],0
ret
NEWSYM RSPCRegFD
mov al,[spcRam+0fdh]
and al,0Fh
cmp byte[spcRam+0fdh],0
je spcnextskip
je .spcnextskip
mov byte [spcRam+0fdh],0
mov byte [spcnumread],0
ret
skipmacro 0
NEWSYM RSPCRegFE
mov al,[spcRam+0feh]
and al,0Fh
cmp byte[spcRam+0feh],0
je spcnextskip
je .spcnextskip
mov byte [spcRam+0feh],0
mov byte [spcnumread],0
mov byte [spcnumread+1],0
ret
skipmacro 1
NEWSYM RSPCRegFF
mov al,[spcRam+0ffh]
and al,0Fh
cmp byte[spcRam+0ffh],0
je spcnextskip
je .spcnextskip
mov byte [spcRam+0ffh],0
mov byte [spcnumread],0
mov byte [spcnumread+2],0
ret
skipmacro 2
%if 0
NEWSYM spcnextskip
inc byte[spcnumread]
cmp byte[spcnumread],5
@@ -510,9 +619,12 @@ NEWSYM haltspc
.nochangestate
mov byte[spcnumread],0
ret
%endif
NEWSYM spcnumread, db 0
SECTION .data
NEWSYM spcnumread, dd 0
NEWSYM spchalted, dd 0
SECTION .text
%macro SPCSetFlagnzc 0
js .setsignflag

View File

@@ -18,10 +18,14 @@
%include "macros.mac"
EXTSYM ComNum, ComIRQ, BaudRate
EXTSYM dssel,FossilUse
EXTSYM FossilUse
EXTSYM GUIinit18_2hz,GUIinit36_4hz
EXTSYM GUIMenuItem
EXTSYM delay
EXTSYM delay
%ifdef __MSDOS__
EXTSYM dssel
%endif
NEWSYM DosModemRTNAsmStart
@@ -30,20 +34,36 @@ NEWSYM DosModemRTNAsmStart
SECTION .bss
NEWSYM UartType, resb 1
NEWSYM UartType, db 0
SECTION .data
NEWSYM cantinitmodem, db 1
NEWSYM ModemInited, db 0
SECTION .bss
NEWSYM ModemInited, resb 1
SECTION .data
ComPort dw 2E8h ; 1=3F8,2=2F8,3=3E8,4=2E8
PortData dw 0,3F8h,2F8h,3E8h,2E8h
ComInt db 0
SECTION .bss
ComInt resb 1
SECTION .data
BRateSel dw 000Ch,0008h,0006h,0004h,0003h,0002h,0001h
oldhandmodems dw 0
oldhandmodemo dd 0
SECTION .bss
oldhandmodems resw 1
oldhandmodemo resd 1
SECTION .data
PICMaskPm db 21h
PortNum dw 0
CharStore db 0
SECTION .bss
PortNum resw 1
CharStore resb 1
SECTION .text
NEWSYM ModemGetChar
cmp byte[UartType],2
@@ -165,7 +185,6 @@ FossilSendChar:
popad
ret
NEWSYM InitModem
mov byte[ModemInited],1
cmp byte[FossilUse],0
@@ -302,7 +321,9 @@ InitFossil:
modemhandler:
push ds
push eax
%ifdef __MSDOS__
mov ax,[cs:dssel]
%endif
mov ds,ax
push edx
mov dx,[ComPort]
@@ -349,9 +370,11 @@ NEWSYM ModemClearBuffer
mov dword[modemtail],0
ret
NEWSYM modembuffer, times 2048 db 0
NEWSYM modemhead, dd 0
NEWSYM modemtail, dd 0
SECTION .bss
NEWSYM modembuffer, resb 2048
NEWSYM modemhead, resd 1
NEWSYM modemtail, resd 1
SECTION .text
NEWSYM DeInitModem
cmp byte[ModemInited],1

View File

@@ -64,9 +64,9 @@
%include "macros.mac"
EXTSYM dssel, curblank, vidpastecopyscr, frameskip, newengen, vsyncon, cantinitmodem
EXTSYM curblank, vidpastecopyscr, frameskip, newengen, vsyncon
EXTSYM cvidmode, antienab, smallscreenon, smallscreence,NetQuit
EXTSYM soundon, StereoSound, SoundCompD, SoundQuality, MusicRelVol,UartType
EXTSYM soundon, StereoSound, SoundCompD, SoundQuality, MusicRelVol
EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal
EXTSYM t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip
EXTSYM fname, makeextension, sram, clearmem2, loadfileGUI, GUIloadfailed
@@ -89,14 +89,12 @@ EXTSYM cfgdontsave,videotroub,Open_File,Read_File,Close_File,Write_File,Create_F
EXTSYM File_Seek,File_Seek_End,Open_File_Write,Get_Date,Check_Key,Get_Key
EXTSYM Change_Drive,Change_Single_Dir,Change_Dir,Get_Dir,Get_First_Entry
EXTSYM Get_Next_Entry,Set_DTA_Address,timer2upd,curexecstate,TripBufAvail
EXTSYM nmiprevaddrl,nmiprevaddrh,nmirept,nmiprevline,nmistatus,spcnumread
EXTSYM nmiprevaddrl,nmiprevaddrh,nmirept,nmiprevline,nmistatus,spcnumread,spchalted
EXTSYM NextLineCache,VidStartDraw,ResetTripleBuf,GUINGVID
EXTSYM ScanCodeListing,AdjustFrequency,GUISaveVars,Init_Mouse
EXTSYM Get_MouseData,Set_MouseXMax,Set_MouseYMax,Set_MousePosition,Get_MousePositionDisplacement
EXTSYM GUIInit,GUIDeInit,SpecialLine
EXTSYM DrawWater,DrawSmoke,RemoteDisconnect,loadstate3
EXTSYM ModemClearBuffer,IPXSearchval
EXTSYM ipxlookforconnect
EXTSYM DrawWater,DrawBurn,RemoteDisconnect,loadstate3
EXTSYM SA1Enable,SA1RAMArea
EXTSYM GUIFName,GUICName
EXTSYM printnum
@@ -108,7 +106,6 @@ EXTSYM showinfogui
EXTSYM BackupCVFrame
EXTSYM Wait1SecWin,ClearUDPStuff
EXTSYM DisableSUDPPacket,EnableSUDPPacket
EXTSYM ModemGetChar
EXTSYM BackStateSize
EXTSYM ResetExecStuff
EXTSYM RestoreCVFrame
@@ -141,11 +138,8 @@ EXTSYM Force8b,convertnum,converthex
EXTSYM per2exec
EXTSYM hostname
EXTSYM UDPConfig
EXTSYM DeInitModem
EXTSYM snesmouse
EXTSYM pl1upk,pl1downk,pl1leftk,pl1rightk,pl1Lk,pl1Rk,pl1Ak,pl1Bk
EXTSYM deinitipx
EXTSYM InitModem
EXTSYM outofmemfix,yesoutofmemory
EXTSYM CReadHead,ReadHead,CFWriteHead,CFWriteStart
EXTSYM JoyX,JoyY,JoyMinX,JoyMinY,JoyMaxX,JoyMaxY,JoyMinX209,JoyMaxX209
@@ -158,26 +152,29 @@ EXTSYM TCPIPWaitForConnection
EXTSYM tcperr
EXTSYM TCPIPConnectToServer
EXTSYM TCPIPConnectToServerW
EXTSYM initipx
EXTSYM selc0040
EXTSYM ModemCheckRing
EXTSYM ModemCheckDCD
EXTSYM PreparePacketIPX,TCPIPPreparePacket
EXTSYM SendPacketIPX,TCPIPSendPacket,TCPIPSendPacketUDP
EXTSYM TCPIPPreparePacket
EXTSYM TCPIPSendPacket,TCPIPSendPacketUDP
EXTSYM TCPIPDisconnect,TCPIPStatus
EXTSYM DeInitModemC
EXTSYM ipxgetchar,ipxsendchar,TCPIPStoreByte
EXTSYM TCPIPStoreByte
EXTSYM TCPIPGetByte,GUIBIFIL
EXTSYM ModemSendChar
EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
%ifndef __MSDOS__
EXTSYM GUIMBVID
%endif
%ifdef __LINUX__
EXTSYM numlockptr
%endif
%ifdef __WIN32__
EXTSYM initDirectDraw
EXTSYM reInitSound
%endif
%ifdef __MSDOS__
EXTSYM dssel, cantinitmodem, ModemClearBuffer, ModemGetChar
EXTSYM InitModem, DeInitModem, ModemCheckRing, ModemCheckDCD
EXTSYM DeInitModemC, ModemSendChar, UartType
EXTSYM deinitipx, IPXSearchval, ipxlookforconnect, initipx
EXTSYM PreparePacketIPX,SendPacketIPX,ipxgetchar,ipxsendchar
%endif
NEWSYM GuiAsmStart
@@ -193,6 +190,7 @@ NEWSYM GuiAsmStart
SECTION .data
; ProcessRemoteCommand
@@ -597,33 +595,37 @@ NEWSYM KeyQuickClock, dd 0
NEWSYM KeyQuickSaveSPC, dd 0
NEWSYM AutoIncSaveSlot, db 0
NEWSYM TCPIPAddress, times 29 db 0
NEWSYM SoundInterpType, db 1
NEWSYM SoundInterpType, db 2
NEWSYM KeyDisplayFPS, dd 0
NEWSYM KeyIncStateSlot, dd 0
NEWSYM KeyDecStateSlot, dd 0
NEWSYM MotionBlur, dd 0
GUIsave equ $-GUIRAdd
NEWSYM ForceROMTiming, db 0
NEWSYM ForceHiLoROM, db 0
section .bss
NEWSYM CombinDataGlob, times 3300 db 0 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
NEWSYM CombinDataLocl, times 3300 db 0
NEWSYM ForceROMTiming, resb 1
NEWSYM ForceHiLoROM, resb 1
NEWSYM CombinDataGlob, resb 3300 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
NEWSYM CombinDataLocl, resb 3300
section .data
NEWSYM CmdLineNetPlay, db 0
NEWSYM CmdLineTCPIPAddress, times 29 db 0
section .bss
GUIwinorder times 18 db 0
GUIwinpos times 18 db 0
GUIwinactiv times 18 db 0
DialNumber times 40 db 0
ViewBuffer times 50*32 db 0
NEWSYM ModemInitStat, db 0
ModemProcess db 0 ; Shows current dial/answer process
ModemPTimer dd 0 ; Timer for modem process
ModemOKStat db 0 ; OK is detected on modem status
GUIwinorder resb 18
GUIwinpos resb 18
GUIwinactiv resb 18
DialNumber resb 40
ViewBuffer resb 50*32
NEWSYM ModemInitStat, resb 1
ModemProcess resb 1 ; Shows current dial/answer process
ModemPTimer resd 1 ; Timer for modem process
ModemOKStat resb 1 ; OK is detected on modem status
SECTION .data
; LOAD STAT INPT OPT VID SND CHT NET GMKEY GUIOP ABT RSET SRC STCN MOVE CMBO ADDO
GUIwinposxo dd 0,5 ,60 ,30 ,55 ,50 ,35 ,5 ,30 ,10 ,10 ,50 ,65 ,20 ,70 ,50 ,3 ,50
GUIwinposyo dd 0,20 ,70 ,30 ,20 ,20 ,20 ,20 ,30 ,20 ,20 ,20 ,60 ,30 ,65 ,50 ,22 ,60
@@ -631,125 +633,133 @@ GUIwinsizex dd 0,244 ,126 ,189 ,167 ,170 ,188 ,244 ,8*16,235 ,240 ,190 ,9*16,8
GUIwinsizey dd 0,190 ,3*16,166 ,190 ,192 ,188 ,191 ,40 ,189 ,150 ,190 ,42 ,40 ,42 ,70 ,190 ,100
GUIwinptr db 0
GUItextcolor db 0,0,0,0,0
GUIcmenupos db 0
GUIescpress db 0
GUIcwinpress db 0
GUIpmenupos db 0
GUIcrowpos dd 0
GUIpclicked db 0
GUImouseposx dd 0
GUImouseposy dd 0
GUICYLocPtr dd 0
GUIMenuL dd 0
GUIMenuR dd 0
GUIMenuD dd 0
GUIOnMenuItm db 0
NEWSYM GUIQuit, db 0
GUIHold db 0
GUIHoldx dd 0
GUIHoldy dd 0
GUIHoldxm dd 0
GUIHoldym dd 0
GUIcolscaleval dd 0
cwindrawn db 0
GUIWincol dd 0
GUIWincoladd dd 0
GUITemp dd 0
GUIHoldXlimL dd 0
GUIHoldXlimR dd 0
GUIHoldYlim dd 0
GUIHoldYlimR dd 0
cloadnpos dd 0
cloadnposb dd 0
cloadmaxlen dd 0
cloadnleft dd 0
cplayernum db 0
vbuflimtop dd 0
vbuflimbot dd 0
GUIScrolTim1 dd 0
GUIScrolTim2 dd 0
GUICHold dd 0
GUICBHold dd 0
GUICBHold2 dd 0
GUIDClickTL dd 0
GUIDClCWin dd 0
GUIDClCEntry dd 0
GUICResetPos dd 0
GUICStatePos dd 0
GUICCFlash db 0
GUILDFlash db 0
GUIPalConv dd 0
PrevResoln dw 0
SnowMover dd 0
keycontrolval dd 0
NEWSYM CheatBDoor, db 0
NEWSYM ShowTimer, db 0
NEWSYM MousePRClick, db 0
NEWSYM MouseDis, db 0
NEWSYM NetPlayNoMore, db 0
RestoreValues db 0
NEWSYM NetChatFirst, db 0
NEWSYM NetServer, db 0
NEWSYM NetQuitAfter, db 0
NEWSYM NetNewNick, times 16 db 0
NEWSYM NetFilename, times 512 db 0
section .bss
GUItextcolor resb 5
GUIcmenupos resb 1
GUIescpress resb 1
GUIcwinpress resb 1
GUIpmenupos resb 1
GUIcrowpos resd 1
GUIpclicked resb 1
GUImouseposx resd 1
GUImouseposy resd 1
GUICYLocPtr resd 1
GUIMenuL resd 1
GUIMenuR resd 1
GUIMenuD resd 1
GUIOnMenuItm resb 1
NEWSYM GUIQuit, resb 1
GUIHold resb 1
GUIHoldx resd 1
GUIHoldy resd 1
GUIHoldxm resd 1
GUIHoldym resd 1
GUIcolscaleval resd 1
cwindrawn resb 1
GUIWincol resd 1
GUIWincoladd resd 1
GUITemp resd 1
GUIHoldXlimL resd 1
GUIHoldXlimR resd 1
GUIHoldYlim resd 1
GUIHoldYlimR resd 1
cloadnpos resd 1
cloadnposb resd 1
cloadmaxlen resd 1
cloadnleft resd 1
cplayernum resb 1
vbuflimtop resd 1
vbuflimbot resd 1
GUIScrolTim1 resd 1
GUIScrolTim2 resd 1
GUICHold resd 1
GUICBHold resd 1
GUICBHold2 resd 1
GUIDClickTL resd 1
GUIDClCWin resd 1
GUIDClCEntry resd 1
GUICResetPos resd 1
GUICStatePos resd 1
GUICCFlash resb 1
GUILDFlash resb 1
GUIPalConv resd 1
PrevResoln resw 1
SnowMover resd 1
keycontrolval resd 1
NEWSYM CheatBDoor, resb 1
NEWSYM ShowTimer, resb 1
NEWSYM MousePRClick, resb 1
NEWSYM MouseDis, resb 1
NEWSYM NetPlayNoMore, resb 1
RestoreValues resb 1
NEWSYM NetChatFirst, resb 1
NEWSYM NetServer, resb 1
NEWSYM NetQuitAfter, resb 1
NEWSYM NetNewNick, resb 16
NEWSYM NetFilename, resb 512
NEWSYM CheatOn, dd 0
NEWSYM NumCheats, dd 0
NEWSYM cheatdataprev, times 28 db 0 ; leave contents blank
NEWSYM cheatdata, times 28*255+56 db 0 ; toggle, value, address, pvalue, name(22)
NEWSYM CheatOn, resd 1
NEWSYM NumCheats, resd 1
NEWSYM cheatdataprev, resb 28 ; leave contents blank
NEWSYM cheatdata, resb 28*255+56 ; toggle, value, address, pvalue, name(22)
NEWSYM GUIcurrentdir, times 131 db 0
NEWSYM GUIcurrentdir, resb 131
numdrives dd 26
curgsval db 0
curgsval resb 1
SECTION .data
NEWSYM numdrives, dd 26
SubPalTable times 256 db 1 ; Corresponding Gray Scale Color
WhichRemote dd 0 ; Modem = 1, IPX = 2, TCP/IP = 4
Connected dd 0
IDCheckPos dd 0
NEWSYM pl1neten, db 0
NEWSYM pl2neten, db 0
NEWSYM pl3neten, db 0
NEWSYM pl4neten, db 0
NEWSYM pl5neten, db 0
NEWSYM cnetplaybuf, times 512 db 0
NEWSYM cnetptrhead, dd 0
NEWSYM cnetptrtail, dd 0
NEWSYM prevp1net, dd 0
NEWSYM prevp2net, dd 0
NEWSYM prevp3net, dd 0
NEWSYM prevp4net, dd 0
NEWSYM prevp5net, dd 0
NEWSYM netdelayed, db 0
NEWSYM ChatProgress,dd 0
NEWSYM RecvProgress,dd 0
NEWSYM IPXInfoStr, dw 0
NEWSYM IPXInfoStrR, dw 0
NEWSYM GUICMessage, dd 0
NEWSYM GUICTimer, dd 0
NEWSYM GUIOn, db 0
NEWSYM GUIOn2, db 0
NEWSYM GUIReset, db 0
SECTION .bss
WhichRemote resd 1 ; Modem = 1, IPX = 2, TCP/IP = 4
Connected resd 1
IDCheckPos resd 1
NEWSYM pl1neten, resb 1
NEWSYM pl2neten, resb 1
NEWSYM pl3neten, resb 1
NEWSYM pl4neten, resb 1
NEWSYM pl5neten, resb 1
NEWSYM cnetplaybuf, resb 512
NEWSYM cnetptrhead, resd 1
NEWSYM cnetptrtail, resd 1
NEWSYM prevp1net, resd 1
NEWSYM prevp2net, resd 1
NEWSYM prevp3net, resd 1
NEWSYM prevp4net, resd 1
NEWSYM prevp5net, resd 1
NEWSYM netdelayed, resb 1
NEWSYM ChatProgress,resd 1
NEWSYM RecvProgress,resd 1
NEWSYM IPXInfoStr, resw 1
NEWSYM IPXInfoStrR, resw 1
NEWSYM GUICMessage, resd 1
NEWSYM GUICTimer, resd 1
NEWSYM GUIOn, resb 1
NEWSYM GUIOn2, resb 1
NEWSYM GUIReset, resb 1
;GOSPort db 0
NEWSYM CurPalSelect, db 0
NEWSYM CurPalSelect, resb 1
NEWSYM MotionBlur, resb 1
NEWSYM StartLL, dd 0
NEWSYM StartLR, dd 0
NEWSYM LatencyVal, times 32 db 0
NEWSYM StartLL, resd 1
NEWSYM StartLR, resd 1
NEWSYM LatencyVal, resb 32
NEWSYM NetLoadState, db 0
NEWSYM NetLoadState, resb 1
NEWSYM TRVal, dw 0
NEWSYM TGVal, dw 0
NEWSYM TBVal, dw 0
NEWSYM TRVali, dw 0
NEWSYM TGVali, dw 0
NEWSYM TBVali, dw 0
NEWSYM TRVal2, dw 0
NEWSYM TGVal2, dw 0
NEWSYM TBVal2, dw 0
NEWSYM TRVal, resw 1
NEWSYM TGVal, resw 1
NEWSYM TBVal, resw 1
NEWSYM TRVali, resw 1
NEWSYM TGVali, resw 1
NEWSYM TBVali, resw 1
NEWSYM TRVal2, resw 1
NEWSYM TGVal2, resw 1
NEWSYM TBVal2, resw 1
SECTION .text
%macro stim 0
%ifdef __MSDOS__
@@ -1032,14 +1042,14 @@ NEWSYM ExecGUISaveVars
call GUIDeInit
%endmacro
SECTION .data
NEWSYM GUIoldhand9o, dd 0
NEWSYM GUIoldhand9s, dw 0
NEWSYM GUIoldhand8o, dd 0
NEWSYM GUIoldhand8s, dw 0
GUIt1cc dd 0
GUIt1ccSwap db 0
GUIskipnextkey42 db 0
SECTION .bss
NEWSYM GUIoldhand9o, resd 1
NEWSYM GUIoldhand9s, resw 1
NEWSYM GUIoldhand8o, resd 1
NEWSYM GUIoldhand8s, resw 1
GUIt1cc resd 1
GUIt1ccSwap resb 1
GUIskipnextkey42 resb 1
SECTION .text
NEWSYM GUIinit18_2hz
@@ -1099,6 +1109,7 @@ NEWSYM GUI36hzcall
and byte[GUINetTextm2+2],0Fh
ret
%ifdef __MSDOS__
NEWSYM GUIhandler8h
cli
push ds
@@ -1166,6 +1177,7 @@ NEWSYM GUIhandler9h
pop ds
sti
iretd
%endif
%macro loadmenuopen 1
mov al,[GUIcmenupos]
@@ -1211,7 +1223,9 @@ loadnetopen:
loadmenuopen 8
ret
MouseInitOkay db 0
SECTION .bss
MouseInitOkay resb 1
SECTION .text
LoadDetermine:
mov byte[GUIGameMenuData+14],1
@@ -1333,7 +1347,9 @@ DrawSnow:
.nomore
ret
SECTION .data
.giftmsg db 'A GIFT TO YOU IN THE OPTIONS!',0
SECTION .text
ProcessSnowVelocity:
cmp dword[MsgGiftLeft],0
@@ -1388,8 +1404,11 @@ ProcessSnowVelocity:
jnz .loop
ret
OkaySC db 0
SECTION .bss
OkaySC resb 1
SECTION .data
cstempfname db 'tmpchtsr.___',0
SECTION .text
NEWSYM SaveSramData
@@ -1465,7 +1484,9 @@ NEWSYM ProcRewind
mov dword[eax+8],0
.noteq
ret
.temp dd 0,0
section .bss
.temp resd 2
section .text
%macro ProcessOneDigit 1
cmp dl,9
@@ -1500,7 +1521,9 @@ NEWSYM TestSent
mov dword[GUICMessage],.message
mov dword[GUICTimer],100000
ret
SECTION .data
.message db 0,0,0,0,' ',0,0,0,0,0,0,0
SECTION .text
NEWSYM StartGUI
; cmp byte[OSPort],1
@@ -1846,12 +1869,14 @@ NEWSYM StartGUI
mov byte[GUIcmenupos],0
mov byte[GUIcrowpos],0
call loadnetopen
%ifdef __MSDOS__
cmp byte[WhichRemote],1
jne .yesdcd
call ModemCheckDCD
cmp al,1
jne near .nostat20
.yesdcd
%endif
mov byte[RestoreValues],1
pushad
@@ -2029,7 +2054,8 @@ NEWSYM StartGUI
.nowater2
cmp byte[GUIEffect],4
jne .nosmoke
call DrawSmoke
; call DrawSmoke
call DrawBurn
.nosmoke
; call TestSent
cmp byte[CNetType],20
@@ -2087,6 +2113,7 @@ NEWSYM StartGUI
jne near .nomodem
.modem
call ProcessModem
%ifdef __MSDOS__
cmp byte[Connected],1
je near .nomodem
call ModemGetChar
@@ -2121,6 +2148,7 @@ NEWSYM StartGUI
.skipstat
mov dh,0
call NetAddChar
%endif
.nomodem
cmp dword[GUIEditStringcWin],0
@@ -2249,7 +2277,8 @@ NEWSYM StartGUI
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
mov byte[DSPMem+08h],0
mov byte[DSPMem+18h],0
@@ -2474,8 +2503,12 @@ NEWSYM StartGUI
call WinErrorB
jmp continueprog
CheckSumVal dd 0
SECTION .bss
CheckSumVal resd 1
SECTION .data
WrongCheckSum db 10,13,'ROM Data Mismatch',10,13,10,13,0
SECTION .text
SRAMDirc:
; get LoadDrive/LoadDir
@@ -2550,6 +2583,7 @@ guifirsttimemsg:
.mousedis2
ret
SECTION .data
guiftimemsg1 db 'ONE TIME USER REMINDER :',0
guiftimemsg2 db 'PLEASE BE SURE TO READ',0
guiftimemsg3 db 'GUINOTES.TXT FOR AN',0
@@ -2558,6 +2592,7 @@ guiftimemsg5 db 'ALSO, WHENEVER YOU HAVE',0
guiftimemsg6 db 'PROBLEMS, BE SURE TO READ',0
guiftimemsg7 db 'ZSNES.FAQ AND README.TXT',0
guiftimemsg8 db 'PRESS "Z" TO CONTINUE.',0
SECTION .text
guimustrestartmsg:
xor ebx,ebx
@@ -2623,11 +2658,13 @@ guimustrestartmsg:
mov byte[GUIQuit],1
ret
SECTION .data
guiqtimemsg1 db 'ZSNES MUST BE RESTARTED',0
guiqtimemsg2 db 'TO USE THIS OPTION.',0
guiqtimemsg3 db 'THIS PROGRAM WILL NOW',0
guiqtimemsg4 db 'EXIT.',0
guiqtimemsg8 db 'PRESS ANY KEY.',0
SECTION .text
guiprevideo:
xor ebx,ebx
@@ -2695,6 +2732,7 @@ guiprevideo:
.mousedis2
ret
SECTION .data
guiprevidmsg1 db 'ZSNES WILL NOW ATTEMPT',0
guiprevidmsg2 db 'TO CHANGE YOUR VIDEO',0
guiprevidmsg3 db 'MODE. IF THE CHANGE',0
@@ -2702,6 +2740,7 @@ guiprevidmsg4 db 'IS UNSUCCESSFUL, WAIT',0
guiprevidmsg5 db '10 SECONDS AND VIDEO',0
guiprevidmsg6 db 'MODE WILL BE RESET',0
guiprevidmsg7 db 'PRESS ANY KEY',0
SECTION .text
guipostvideo:
mov ecx,255*144
@@ -2790,8 +2829,10 @@ guipostvideo:
mov byte[GUIpclicked],1
ret
SECTION .data
guipostvidmsg1 db 'VIDEO MODE CHANGED.',0
guipostvidmsg2 db 'PRESS ANY KEY',0
SECTION .text
guipostvideofail:
mov dword[guipostvidptr],guipostvidmsg3b
@@ -2883,13 +2924,16 @@ guipostvideofail:
%endif
jmp guipostvideo.pressedfail
SECTION .data
guipostvidmsg1b db 'VIDEO MODE CHANGE FAILED.',0
guipostvidmsg2b db 'UNABLE TO INIT VESA2:',0
guipostvidmsg3b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg4b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg5b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
guipostvidmsg8b db 'PRESS ANY KEY',0
guipostvidptr dd 0
SECTION .bss
guipostvidptr resd 1
SECTION .text
GUILoadManualDir
mov ebx,GUILoadTextA
@@ -2982,14 +3026,18 @@ GUILoadManualDir
.norefresh
ret
ManualCPtr dd 0
ManualStatus db 0
SECTION .bss
ManualCPtr resd 1
ManualStatus resb 1
NEWSYM MovieCounter, dd 0
NEWSYM MovieCounter, resd 1
SECTION .data
UnableMovie2 db 'MUST PLAY WITH SOUND OFF',0
UnableMovie3 db 'MUST PLAY WITH SOUND ON',0
SECTION .text
MoviePlay:
cmp byte[CNetType],20
je near .dontplay
@@ -3029,7 +3077,8 @@ MoviePlay:
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
.noextra
mov al,[RecData]
@@ -3077,12 +3126,15 @@ MoviePlay:
pop eax
ret
NEWSYM Totalbyteloaded, dd 0
NEWSYM sramsavedis, db 0
SECTION .bss
NEWSYM Totalbyteloaded, resd 1
NEWSYM sramsavedis, resb 1
SECTION .data
DevicePtr dd pl1selk,pl2selk,pl3selk,pl4selk,pl5selk
SECTION .text
CheckMenuItemHelp:
mov al,[GUIcmenupos]
mov [GUIpmenupos],al
@@ -3370,7 +3422,9 @@ GUITryMenuItem:
.nomisc
ret
SECTION .data
.message1 db 'CONFIGURATION FILES SAVED.',0
SECTION .text
DisplayBoxes:
xor esi,esi
@@ -3585,8 +3639,9 @@ GUIProcReset:
dec byte[GUIwinptr]
ret
LoadDuplicFound db 0
SECTION .bss
LoadDuplicFound resb 1
SECTION .text
%macro GUIDMHelp 4
mov byte[GUItextcolor],46
@@ -4289,7 +4344,9 @@ GUISetPal:
jnz .next
ret
NEWSYM GUICPC, times 256 dw 0
SECTION .bss ;ALIGN=32
NEWSYM GUICPC, resw 256
SECTION .text
%macro GUIPal16b 4
mov ax,%2
@@ -4746,9 +4803,11 @@ GUISetPal16:
jnz .next
ret
SECTION .data
.multab db 1,1,1,2,2,3,4,4,5,6,6,7,8,8,9,10,10,11,12,12,13,14,14,15,16,16,
db 17,18,18,19,20,20,21,22,22,23,24,24,25,26,26,27,28,28,29,30,30,
db 31
SECTION .text
GUIBufferData:
mov ecx,16384
@@ -4906,6 +4965,7 @@ GUIconvpal:
mov [cgram],ax
ret
SECTION .data
GUIMousePtr db 50+88,47+88,45+88,43+88,42+88,00,00,00
db 53+88,52+88,46+88,42+88,00,00,00,00
db 55+88,54+88,54+88,44+88,00,00,00,00
@@ -5505,4 +5565,6 @@ db 57,103,110,236,113,118,203,200,22,87,251,7,138,37,12,84,221,171,51,209
db 242,37,89,73,151,162,139,189,131,209,221,96,107,144,175,79,199,123,98,138
db 226,86,221,254,72,14,126,180,200,171,85,94,120,124,196,225,150,57,219,158
SECTION .text
NEWSYM GuiAsmEnd

View File

@@ -222,8 +222,10 @@ CheatCodeSearchProcess:
mov byte[CopyRamToggle],1
ret
CopyRamToggle db 0
FirstSearch db 0
SECTION .bss
CopyRamToggle resb 1
FirstSearch resb 1
SECTION .text
CheatCodeSearchInit:
mov byte[CSInputDisplay],'_'
@@ -1189,7 +1191,9 @@ decodegg:
mov dword[GUIcurrentcheatviewloc],0
.noview
ret
SECTION .data
.GG2Norm db 04h,06h,0Dh,0Eh,02h,07h,08h,03h,0Bh,05h,0Ch,09h,0Ah,00h,0Fh,01h
SECTION .text
decodepar:
; convert code to number format
@@ -1344,10 +1348,12 @@ guicheaterror:
mov dword[GUIcurrentcheatwin],1
mov byte[GUIpclicked],1
ret
SECTION .data
guicheaterror1 db 'INVALID CODE! YOU',0
guicheaterror2 db 'MUST ENTER A VALID',0
guicheaterror3 db 'GAME GENIE,PAR, OR',0
guicheaterror4 db 'GOLD FINGER CODE.',0
guicheaterror5 db 'PRESS ANY KEY.',0
guicheatvalrep db 0
SECTION .bss
guicheatvalrep resb 1
SECTION .text

View File

@@ -122,14 +122,17 @@
%%noclick
%endmacro
GUIfirstkey dd 0
GUIlastkey dd 0
NEWSYM GUIkeydelay, dd 0
NEWSYM GUIkeydelay2, dd 0
GUInextkeydelay dd 0
GUIJoyPadnk db 0,0,0,0,0,0,0,0
NEWSYM GUIDelayB, db 0
UseExtKey db 0
SECTION .bss
GUIfirstkey resd 1
GUIlastkey resd 1
NEWSYM GUIkeydelay, resd 1
NEWSYM GUIkeydelay2, resd 1
GUInextkeydelay resd 1
GUIJoyPadnk resb 8
NEWSYM GUIDelayB, resb 1
UseExtKey resb 1
SECTION .text
GUIgetcurrentinput:
cmp byte[HoldCommand],2
@@ -331,8 +334,10 @@ GUIgetcurrentinput:
cmp dh,32
jb .noprocess7
.ret
%ifdef __MSDOS__
mov al,dh
call ModemSendChar
%endif
ret
.noprocess7
cmp dl,27
@@ -352,17 +357,21 @@ GUIgetcurrentinput:
jmp .nonetwin
.yesnet15
mov byte[CNetType],0
%ifdef __MSDOS__
; cmp byte[OSPort],1
; je .nodeinitipx
call deinitipx
.nodeinitipx
%endif
jmp .closewin
.yesnetwin
%ifdef __MSDOS__
cmp byte[ModemInitStat],0
je .nodeinitmodem
call DeInitModemC
mov byte[ModemInitStat],0
.nodeinitmodem
%endif
mov byte[CNetType],1
ret
.nonetwin
@@ -795,7 +804,9 @@ GUITCPIPKeys:
ret
SECTION .data
NEWSYM TCPIPPortNum, dd 7845
SECTION .text
GUIOptionKeys:
cmp dh,'a'
@@ -1158,16 +1169,6 @@ GUIVideoKeys:
je .nohiresmode7
xor byte[Mode7HiRes16b],1
.nohiresmode7
%ifndef __MSDOS__
cmp dh,'M'
jne .nomotionblur
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIMBVID+ebx],0
je .nomotionblur
xor byte[MotionBlur],1
.nomotionblur
%endif
cmp dh,'B'
jne .nobilinearfilter
xor ebx,ebx
@@ -1176,6 +1177,7 @@ GUIVideoKeys:
je .nobilinearfilter
xor byte[BilinearFilter],1
.nobilinearfilter
%ifdef __WIN32__
cmp dh,'T'
jne .notriplebufferwin
xor eax,eax
@@ -1183,9 +1185,12 @@ GUIVideoKeys:
cmp byte[GUITBWVID+eax],0
je near .notriplebufferwin
xor byte[TripleBufferWin],1
mov byte[vsyncon],0
mov byte[cfgvsync],0
; mov byte[vsyncon],0
; mov byte[cfgvsync],0
call initDirectDraw
.notriplebufferwin
%endif
%ifdef __MSDOS__
cmp dh,'T'
jne .notriplebuffer
xor ebx,ebx
@@ -1193,9 +1198,10 @@ GUIVideoKeys:
cmp byte[GUITBVID+ebx],0
je .notriplebuffer
xor byte[Triplebufen],1
mov byte[vsyncon],0
mov byte[cfgvsync],0
; mov byte[vsyncon],0
; mov byte[cfgvsync],0
.notriplebuffer
%endif
cmp dh,'G'
jne .nograyscale
xor byte[GrayscaleMode],1
@@ -1207,10 +1213,11 @@ GUIVideoKeys:
mov al,[vsyncon]
mov [cfgvsync],al
%ifdef __WIN32__
mov byte[TripleBufferWin],0
; mov byte[TripleBufferWin],0
call initDirectDraw
%endif
%ifdef __MSDOS__
mov byte[Triplebufen],0
; mov byte[Triplebufen],0
%endif
.novsync
%endif
@@ -1226,6 +1233,11 @@ GUISoundKeys:
cmp dh,'E'
jne .notenablesound
xor byte[cfgsoundon],1
%ifdef __WIN32__
pushad
call reInitSound
popad
%endif
.notenablesound
%ifdef __MSDOS__
cmp dh,'F'
@@ -1300,7 +1312,9 @@ GUISoundKeys:
%endif
ret
SECTION .data
.sampratenext db 1,4,5,6,2,3,0,0,0,0
SECTION .text
GUINetMenuKeys1:
cmp dh,'a'
@@ -1321,22 +1335,26 @@ GUINetMenuKeys1:
jne .notmanual
mov byte[CNetType],12
mov byte[ModemProcess],0
%ifdef __MSDOS__
cmp byte[ModemInitStat],1
je .noinit
call InitModem
mov byte[ModemInitStat],1
.noinit
%endif
ret
.notmanual
cmp dh,'W'
jne .notwait
mov byte[CNetType],10
mov byte[ModemProcess],0
%ifdef __MSDOS__
cmp byte[ModemInitStat],1
je .noinit2
call InitModem
mov byte[ModemInitStat],1
.noinit2
%endif
ret
.notwait
ret
@@ -1357,10 +1375,12 @@ GUIGetInputLine:
jne .nodial
mov byte[CNetType],11
mov byte[ModemProcess],0
%ifdef __MSDOS__
cmp byte[ModemInitStat],1
je .noinit
call InitModem
mov byte[ModemInitStat],1
%endif
.noedit
ret
.noinit
@@ -1409,12 +1429,14 @@ GUIGetInputLine:
mov [GUIEditStringcLen],eax
ret
GUIEditString dd 0 ; Pointer to string
GUIEditStringcLen dd 0 ; Pointer to end of string (done in function)
GUIEditStringmLen dd 0 ; Max length of string
GUIEditStringLTxt dd 0 ; blink value, should be set to 0 when box selected
GUIEditStringLstb dd 0 ; if cursor is placed (set in main function)
GUIEditStringcWin dd 0 ; 0 = no text window selected
SECTION .bss
GUIEditString resd 1 ; Pointer to string
GUIEditStringcLen resd 1 ; Pointer to end of string (done in function)
GUIEditStringmLen resd 1 ; Max length of string
GUIEditStringLTxt resd 1 ; blink value, should be set to 0 when box selected
GUIEditStringLstb resd 1 ; if cursor is placed (set in main function)
GUIEditStringcWin resd 1 ; 0 = no text window selected
SECTION .text
GUIComboKeys:
; Calculate Position
@@ -1837,8 +1859,10 @@ InsertSearchCharacter:
pop edx
ret
CSOverValue db 0
CSCurValue dd 0
SECTION .bss
CSOverValue resb 1
CSCurValue resd 1
SECTION .text
InsertSearchDescription:
mov eax,CSDescDisplay
@@ -2792,9 +2816,11 @@ GUILoadKeys:
call GUILoadData
.notdirectload
ret
.foundval dd 0
.numfound dd 0
.maxfound dd 0
SECTION .bss
.foundval resd 1
.numfound resd 1
.maxfound resd 1
SECTION .text
.dirwin
%ifdef __LINUX__

View File

@@ -166,7 +166,9 @@
;LGUI
netlastloaded db 0
SECTION .bss
netlastloaded resb 1
SECTION .text
GUIloadfilename:
cmp byte[CNetType],15
@@ -266,7 +268,8 @@ GUIloadfilename:
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
mov byte[curexecstate],1
@@ -339,14 +342,12 @@ GUIloadfilename:
mov al,2
.nopal2
mov byte[romispal],0
mov word[totlines],262
mov word[totlines],263
mov dword[MsgCount],120
cmp al,1
jbe .nopal
cmp al,0Dh
je .nopal
mov byte[romispal],1
mov word[totlines],314
mov word[totlines],313
mov dword[MsgCount],100
.nopal
call showinfogui
@@ -565,7 +566,9 @@ GUILoadData:
mov byte[GUIwinorder+eax],0
dec byte[GUIwinptr]
ret
SECTION .data
.drivefn db 'A:\temp.tmp',0
SECTION .text
GetNormalEntries2:
cmp byte[showallext],1
@@ -781,8 +784,10 @@ GetLoadLfn:
pop edi
ret
LFNData times 400 db 0
LFNHandle dw 0
SECTION .bss
LFNData resb 400
LFNHandle resw 1
SECTION .text
GetLoadNormal:
call GetNormalEntries2
@@ -1035,8 +1040,11 @@ GetLoadHeader:
jnz .loop3
ret
SECTION .data
.invfile db ' ** INVALID FILE **',0
fnameheadtemp times 22 db 0
SECTION .bss
fnameheadtemp resb 22
SECTION .text
GetNormalDirEntries2:
GUIGetDir2
@@ -1090,7 +1098,9 @@ GetLoadDirNormallfn:
pop edi
ret
Win95Failed db 0
SECTION .bss
Win95Failed resb 1
SECTION .text
NEWSYM GetCurDir
; get Drive/Dir
@@ -1400,16 +1410,19 @@ GUIGetDirs:
%endif
ret
BubbleSorted db 0
GUIcurrentfilewin dd 0
GUIcurrentviewloc dd 0
GUIcurrentcursloc dd 0
GUIcurrentdirviewloc dd 0
GUIcurrentdircursloc dd 0
GUIdirStartLoc dd 0
GUInumentries dd 0
GUIdirentries dd 0
GUIfileentries dd 0
SECTION .bss
BubbleSorted resb 1
GUIcurrentfilewin resd 1
GUIcurrentviewloc resd 1
GUIcurrentcursloc resd 1
GUIcurrentdirviewloc resd 1
GUIcurrentdircursloc resd 1
GUIdirStartLoc resd 1
GUInumentries resd 1
GUIdirentries resd 1
GUIfileentries resd 0
SECTION .data
%ifdef __LINUX__
NEWSYM GUIsmcfind, db '*.[sS][mM][cC]',0
NEWSYM GUIsfcfind, db '*.[sS][fF][cC]',0
@@ -1444,8 +1457,12 @@ NEWSYM GUIfindall, db '*',0
GUIfindDIR db '*.*',0
NEWSYM GUIfindall, db '*.*',0
%endif
SECTION .data
NEWSYM DTALoc, times 2048+32 db 0
SECTION .text
; Routines to load from the Quick Menu
loadquickfname:
pushad
@@ -1622,4 +1639,7 @@ loadquickfname:
.failed
pop eax
ret
.temp times 256 dd 0
SECTION .bss
.temp resd 256
SECTION .text

View File

@@ -90,7 +90,8 @@ MovieRecord:
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov byte[spcnumread],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
mov dword[PJoyAOrig],0
mov dword[PJoyBOrig],0
@@ -114,12 +115,15 @@ MovieRecord:
.dontrecord
ret
MovieRecordWinVal db 0
NEWSYM MovieProcessing, db 0
NEWSYM MovieFileHand, dw 0
NEWSYM RepeatFrame, db 0
NEWSYM RecData, times 16 db 0
NEWSYM NoPictureSave, db 0
SECTION .bss
MovieRecordWinVal resb 1
NEWSYM MovieProcessing, resb 1
NEWSYM MovieFileHand, resw 1
NEWSYM RepeatFrame, resb 1
NEWSYM RecData, resb 16
NEWSYM NoPictureSave, resb 1
SECTION .text
SkipMovie:
mov byte[MovieRecordWinVal],0
@@ -190,6 +194,7 @@ CalibrateDispB:
call WaitForKey
ret
SECTION .data
guicalberror1 db 'PRESS THE TOP LEFT',0
guicalberror2 db 'CORNER AND PRESS A',0
guicalberror3 db 'BUTTON OR KEY',0
@@ -197,6 +202,7 @@ guicalberror4 db 'PRESS THE BOTTOM',0
guicalberror5 db 'RIGHT CORNER AND',0
guicalberror6 db 'PRESS A BUTTON OR',0
guicalberror7 db 'KEY',0
SECTION .text
SetAllKeys:
@@ -247,7 +253,9 @@ SetAllKeys:
dec ecx
jnz .loop
ret
SECTION .data
.ordercalb dd 2,3,4,5,1,0,7,10,6,9,8,11
SECTION .text
CalibrateDev1:
xor eax,eax
@@ -392,10 +400,12 @@ CalibrateDev1:
mov [JoyMaxY209],eax
mov [CalibYmax209],eax
ret
.joyblx dd 0
.joybly dd 0
.joybcx dd 0
.joybcy dd 0
SECTION .bss
.joyblx resd 1
.joybly resd 1
.joybcx resd 1
.joybcy resd 1
SECTION .text
SetDevice:

View File

@@ -23,10 +23,12 @@ EXTSYM CheckScreenSaver
EXTSYM MinimizeWindow
%endif
lastmouseholded db 0
mousebuttonstat dw 0
MouseMoveOkay db 0
LastHoldEnable db 0
SECTION .bss
lastmouseholded resb 1
mousebuttonstat resw 1
MouseMoveOkay resb 1
LastHoldEnable resb 1
SECTION .text
ProcessMouse:
; Process holds
@@ -832,6 +834,9 @@ GUIProcVideo:
je .failed2
mov dword[GUIkeydelay],0
ret
.fullsc
mov [PrevFSMode],al
ret
.failed
mov byte[videotroub],0
mov al,[.prevvid]
@@ -851,7 +856,9 @@ GUIProcVideo:
call GUISetPal
mov dword[GUIkeydelay],0
ret
.prevvid db 0
SECTION .bss
.prevvid resb 1
SECTION .text
NEWSYM SwitchFullScreen
pushad
@@ -1007,6 +1014,43 @@ GUIWinClicked:
%%noclick
%endmacro
%macro GUIClickCButtonf 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
%ifdef __WIN32__
pushad
call %4
popad
%endif
%%noclick
%endmacro
%macro GUIClickCButtonfT 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,1
mov %4,0
%ifdef __WIN32__
pushad
call %5
popad
%endif
%%noclick
%endmacro
%macro GUIClickCButtonC 3
cmp eax,%1+1
jl %%noclick
@@ -1108,6 +1152,29 @@ GUIWinClicked:
%%noclick
%endmacro
%ifndef __LINUX__
%macro GUIClickCButton2r 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
%ifdef __WIN32__
pushad
call initDirectDraw
popad
%endif
ret
%%noclick
%endmacro
%endif
%macro GUIClickCButton3 5
cmp eax,%1+1
jl %%noclick
@@ -1443,11 +1510,13 @@ GUIWinClicked:
%%nolower
%endmacro
GUIlastdispval dd 0
GUIdispmode dd 0
GUIlastypos dd 0
GUIlastcpos dd 0
GUIlastvpos dd 0
SECTION .bss
GUIlastdispval resd 1
GUIdispmode resd 1
GUIlastypos resd 1
GUIlastcpos resd 1
GUIlastvpos resd 1
SECTION .text
%macro GUISlidebarImpl 10 ; x1,y1,x2,y2,GUI?StA,ScrnSize,ViewLoc,CursLoc,Entries,win#
mov dword[GUIdispmode],0
@@ -2243,7 +2312,7 @@ DisplayGUIVideoClick:
.nocheckboxttb
GUIClickCButton 11,183,byte[GrayscaleMode]
%ifdef __WIN32__
GUIClickCButtonT 115,183,byte[vsyncon],byte[TripleBufferWin]
GUIClickCButtonf 115,183,byte[vsyncon],initDirectDraw
%endif
%ifdef __MSDOS__
GUIClickCButtonT 115,183,byte[vsyncon],byte[Triplebufen]
@@ -2251,16 +2320,9 @@ DisplayGUIVideoClick:
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIM7VID+ebx],0
je .nocheckboxm7
je .nocheckboxtm7
GUIClickCButton5 11,173,byte[Mode7HiRes16b],1
.nocheckboxm7
%ifndef __MSDOS__
mov bl,[cvidmode]
cmp byte[GUIMBVID+ebx],0
je .nocheckboxmb
GUIClickCButton5 11,173,byte[MotionBlur],1
.nocheckboxmb
%endif
.nocheckboxtm7
xor ebx,ebx
mov bl,[cvidmode]
cmp byte[GUIHSVID+ebx],0
@@ -2273,7 +2335,7 @@ DisplayGUIVideoClick:
mov bl,[cvidmode]
cmp byte[GUITBWVID+ebx],0
je near .notriplebufferwin
GUIClickCButtonT 11,123,byte[TripleBufferWin],byte[vsyncon]
GUIClickCButtonf 11,123,byte[TripleBufferWin],initDirectDraw
.notriplebufferwin
%endif
xor ebx,ebx
@@ -2320,15 +2382,17 @@ DisplayGUIVideoClick:
xor al,al
ret
GUINumValue dd 0
GUIBlankVar dd 0
SECTION .bss
GUINumValue resd 1
GUIBlankVar resd 1
SECTION .text
DisplayGUISoundClick:
mov eax,[GUImouseposx]
sub eax,[GUIwinposx+6*4]
mov edx,[GUImouseposy]
sub edx,[GUIwinposy+6*4]
GUIClickCButton 11,21,byte[cfgsoundon]
GUIClickCButtonf 11,21,byte[cfgsoundon],reInitSound
%ifdef __MSDOS__
GUIClickCButton 102,21,byte[cfgforce8b]
%endif
@@ -2404,7 +2468,9 @@ DisplayGUISoundClick:
.nomovebar
ret
SECTION .data
sampratenext db 1,4,5,6,2,3,0,0,0,0
SECTION .text
%macro GUIBoxVar 6
cmp eax,%1
@@ -2600,9 +2666,11 @@ guipresstest:
; pop ebx
ret
SECTION .data
guipresstext1 db 'ENTER THE KEY',0
guipresstext2 db 'OR BUTTON TO USE',0
guipresstext3 db '(ESC TO CLEAR)',0
SECTION .text
guipresstestb:
call GUIUnBuffer
@@ -2674,6 +2742,7 @@ guipresstestb:
; pop ebx
ret
SECTION .data
guipresstext3b db '(ESC TO SKIP)',0
guipresstext4b db 'FOR UP ',0
db 'FOR DOWN ',0
@@ -2687,8 +2756,10 @@ db 'FOR X (TOP BUTTON) ',0
db 'FOR Y (LEFT BUTTON) ',0
db 'FOR THE L BUTTON ',0
db 'FOR THE R BUTTON ',0
guipressptr dd 0
guicpressptr dd 0
SECTION .bss
guipressptr resd 1
guicpressptr resd 1
SECTION .text
DisplayGameOptnsClick:
; Process boxes

View File

@@ -19,6 +19,7 @@
; GUI NetPlay Routines (Modem,IPX,UDP+TCP/IP)
ProcessModem:
%ifdef __WIN32__
cmp byte[ModemProcess],40
jne near .noprocess40
cmp byte[maxskip],3
@@ -28,7 +29,7 @@ ProcessModem:
mov byte[frameskip],0
mov byte[Latencytochange],3
mov byte[Latency],3
mov byte[IPXSearchval],0
; mov byte[IPXSearchval],0
mov byte[RemoteDisconnect],0
mov byte[HoldCommand],1
mov byte[RemoteCommand],1
@@ -63,6 +64,7 @@ ProcessModem:
call .writestr
mov byte[ModemProcess],42
ret
SECTION .data
.tcpipdones db 'DONE',13,10,13,10,'WAITING FOR CLIENT...',0
.tcpipdonec db 'DONE',13,10,13,10,'CONNECTING TO SERVER...',0
.tcpipdones2 db 13,10,13,10,'FOUND CLIENT.',0
@@ -77,6 +79,8 @@ ProcessModem:
.errorinit db 'FAILED NET INIT',0
.errorinit2 db 'CANNOT START SERVER',0
.errorinit3 db 'CANNOT CONNECT',0
SECTION .text
.noprocess40
cmp byte[ModemProcess],41
jne near .noprocess41
@@ -87,7 +91,7 @@ ProcessModem:
mov byte[frameskip],0
mov byte[Latencytochange],3
mov byte[Latency],3
mov byte[IPXSearchval],0
; mov byte[IPXSearchval],0
mov byte[RemoteDisconnect],0
mov byte[HoldCommand],1
mov byte[RemoteCommand],1
@@ -226,6 +230,8 @@ ProcessModem:
mov byte[ModemProcess],66
ret
.noprocess47
%endif
%ifdef __MSDOS__
cmp byte[ModemProcess],30
jne near .noprocess30
mov byte[Latencytochange],2
@@ -477,6 +483,7 @@ ProcessModem:
.nocdc7
ret
.noprocess7
%endif
; Connect initialization
cmp byte[ModemProcess],64
@@ -746,7 +753,9 @@ ProcessModem:
mov dl,[.hexval+edx]
call NetAddChar
ret
SECTION .data
.hexval db '0123456789ABCDEF'
%ifdef __MSDOS__
.unableinit db 'CANNOT INIT DRIVER!',13,10,0
.init db 'ZSNES MODEM TERMINAL',13,10,0
.initb db 13,10,'INITIALIZING MODEM :',13,10,13,10,0
@@ -757,21 +766,28 @@ ProcessModem:
.tout db 'MODEM RESPONSE TIMEOUT',13,10,0
.ata db 'ATA',13,0
.cdet db 'CARRIER DETECTED',13,10,0
.invver db 13,10,'INCOMPATIBLE VERSION!',13,10,0
.rdet db 'WAITING FOR RING...',13,10,0
.invsnd db 'INVALID SOUND SETTING!',13,10,0
.noipx db 13,10,13,10,'UNABLE TO INIT IPX!',13,10,0
.yesipx db 13,10,13,10,'IPX INITIALIZED.',13,10,13,10,'WAITING FOR REMOTE',13,10,0
.localid db 'LOCAL ID : ',0
.remoteid db 'REMOTE ID : ',0
.connectest db 'CONNECTION ESTABLISHED',13,10,0
%endif
.invver db 13,10,'INCOMPATIBLE VERSION!',13,10,0
.invsnd db 'INVALID SOUND SETTING!',13,10,0
%ifdef __WIN32__
.tcpipinit db 'ZSNES NET INTERFACE',13,10,13,10,0
.tcpipserv db 'INIT SERVER ... ',0
.tcpipclie db 'INIT CLIENT ... ',0
InitStr1Done db 0
%endif
SECTION .bss
InitStr1Done resb 1
SECTION .text
NEWSYM PreparePacket
%ifdef __MSDOS__
call PreparePacketIPX
%endif
cmp byte[WhichRemote],4
jne .nottcpip
call TCPIPPreparePacket
@@ -779,7 +795,9 @@ NEWSYM PreparePacket
ret
NEWSYM SendPacket
%ifdef __MSDOS__
call SendPacketIPX
%endif
cmp byte[WhichRemote],4
jne .nottcpip
call TCPIPSendPacket
@@ -787,7 +805,9 @@ NEWSYM SendPacket
ret
NEWSYM SendPacketUDP
%ifdef __MSDOS__
call SendPacketIPX
%endif
cmp byte[WhichRemote],4
jne .nottcpip
call TCPIPSendPacketUDP
@@ -807,15 +827,19 @@ NEWSYM WritetochatBuffer
.nomore
ret
NEWSYM RemoteCommand, db 0
HoldCommand db 0
SECTION .bss
NEWSYM RemoteCommand, resb 1
HoldCommand resb 1
SECTION .text
RemoteDeInit:
%ifdef __MSDOS__
cmp byte[ModemInitStat],0
je .nodeinitmodem
call DeInitModemC
mov byte[ModemInitStat],0
.nodeinitmodem
%endif
mov byte[CNetType],1
cmp byte[WhichRemote],2
jne .noipx
@@ -850,9 +874,12 @@ Checkfileexist:
.failed
mov eax,1
ret
.temp db 0
SECTION .bss
.temp resb 1
SECTION .text
ProcessRemoteCommand:
%ifdef __MSDOS__
cmp byte[WhichRemote],1
jne .notmodem
push edx
@@ -861,6 +888,7 @@ ProcessRemoteCommand:
cmp al,1
jne near .nomulti
.notmodem
%endif
cmp byte[RemoteDisconnect],1
je near .nomulti
call ProcRewind
@@ -1379,6 +1407,7 @@ ProcessRemoteCommand:
mov byte[RemoteCommand],1
ret
SECTION .data
.chatinitial db '>',0
.actinitial db '*',0
.actinitial2 db ' ',0
@@ -1390,6 +1419,7 @@ ProcessRemoteCommand:
.strinvalid db '** INVALID NICK **',13,10,0
.strtoolong db '** NICK IS TOO LONG **',13,10,0
.nickchangeb db ' IS NOW KNOWN AS ',0
SECTION .text
transfersram:
cmp byte[SFXSRAM],0
@@ -1528,6 +1558,7 @@ NEWSYM RemoteGetEAX
NEWSYM RemoteSendChar
%ifdef __MSDOS__
cmp byte[WhichRemote],1
jne .nomodem
call ModemSendChar
@@ -1536,6 +1567,7 @@ NEWSYM RemoteSendChar
jne .noipx
call ipxsendchar
.noipx
%endif
cmp byte[WhichRemote],4
jne .notcpip
call TCPIPStoreByte
@@ -1543,6 +1575,7 @@ NEWSYM RemoteSendChar
ret
NEWSYM RemoteGetChar
%ifdef __MSDOS
cmp byte[WhichRemote],1
jne .nomodem
call ModemGetChar
@@ -1551,12 +1584,14 @@ NEWSYM RemoteGetChar
jne .noipx
call ipxgetchar
.noipx
%endif
cmp byte[WhichRemote],4
jne .notcpip
call TCPIPGetByte
.notcpip
ret
%ifdef __MSDOS__
ModemSendStr:
.loop
mov al,[esi]
@@ -1567,13 +1602,17 @@ ModemSendStr:
jmp .loop
.nomore
ret
%endif
NetLoadHandle dw 0
NetStateSize dd 0
NetStateTotal dd 0
NetStateQuit db 0
NetStateBuffer times 2048 db 0
SECTION .bss
NetLoadHandle resw 1
NetStateSize resd 1
NetStateTotal resd 1
NetStateQuit resb 1
NetStateBuffer resb 2048
SECTION .data
Netfname db 'nettemp.zst',0
SECTION .text
NetLoadStuff:
call loadnetopen
@@ -1783,6 +1822,7 @@ loadstaterecv:
.notzero
ret
SECTION .data
StateLoadedOk db 10,13,'STATE LOADED.',10,13,10,13,0
StateLoadedFail db 10,13,'LOAD FAILED.',10,13,10,13,0
SECTION .text

View File

@@ -804,6 +804,7 @@ DisplayGUILoad:
DrawGUIWinBox 1,229,144,228,152,dl
ret
SECTION .data
GUILoadText1 db 'SELECT FILE TO LOAD :',0
GUILoadText2 db 'DISPLAY TYPE :',0
GUILoadText3 db 'NORMAL 8.3 FORMAT',0
@@ -819,9 +820,12 @@ GUILoadTextC db 'NTSC',0
GUILoadTextD db 'PAL',0
GUILoadTextE db 'LOROM',0
GUILoadTextF db 'HIROM',0
GUILStA dd 0,0,0
GUILStB dd 0,0,0
GUILoadPos db 0
SECTION .bss
GUILStA resd 3
GUILStB resd 3
GUILoadPos resb 1
SECTION .text
DisplayGUIReset:
GUIDrawWindowBox 12,GUIResetDisp
@@ -854,9 +858,11 @@ DisplayGUIReset:
GUIOuttextwin2 12,5,15,GUIResetText1
ret
SECTION .data
GUIResetText1 db 'RESET : ARE YOU SURE ?',0
GUIResetText2 db 'YES',0
GUIResetText3 db 'NO',0
SECTION .text
DisplayGUIStates:
GUIDrawWindowBox 14,GUIStatesDisp
@@ -901,11 +907,13 @@ DisplayGUIStates:
.save2
ret
SECTION .data
GUIStatesText1 db 'OKAY TO SAVE STATE?',0
GUIStatesText2 db 'OKAY TO LOAD STATE?',0
GUIStatesText3 db 'YES',0
GUIStatesText4 db 'NO',0
GUIStatesText5 db 0
SECTION .text
DisplayGUIChoseSave:
GUIDrawWindowBox 2,GUIStateSelDisp
@@ -980,8 +988,10 @@ DisplayGUIChoseSave:
GUIDisplayButtonHole 2,90,43,byte[GUIChoseSaveText2],'9'
ret
SECTION .data
GUIChoseSaveText1 db 'SELECT SAVE SLOT :',0
GUIChoseSaveText2 db '-',0
SECTION .text
%macro DGOptnsDrawBox 3
mov eax,dword[GUIwinposx+9*4]
@@ -1333,6 +1343,7 @@ DisplayGUIInput:
DrawGUIWinBox 3,5,78,107,78,dl
ret
SECTION .data
GUIInputRefF db 0,1,2,3,5,18,6,7,8,9,10,11,14,15,16,17
GUIInputRefB db 0,1,2,3,3,4,6,7,8,9,10,11,11,11,12,13,14,15,5
GUIInputRefP dd pl1contrl,pl2contrl,pl3contrl,pl4contrl,pl5contrl
@@ -1363,10 +1374,13 @@ GUIInputTextd db 'UL',0
GUIInputTexte db 'UR',0
GUIInputTextf db 'DL',0
GUIInputTextg db 'DR',0
GUIIStA dd 0,0,0
GUIcurrentinputviewloc dd 0
GUIcurrentinputcursloc dd 0
SECTION .bss
GUIIStA resd 3
GUIcurrentinputviewloc resd 1
GUIcurrentinputcursloc resd 1
SECTION .text
DisplayGUIOption:
; Frame Rate/Auto Frame Rate/Max Frame Skip/New Gfx Engine/Save Confirm
@@ -1591,6 +1605,7 @@ DisplayGUIOption:
DrawGUIButton 4,129,12,137,22,GUIOptionText10,13,-2,0
ret
SECTION .data
GUIOptionText1 db 'FRAME RATE',0
GUIOptionText2 db 'AUTO FRAME RATE',0
GUIOptionText3 db 'MAX FRAME SKIP',0
@@ -1614,6 +1629,7 @@ GUIOptionTextL db 'USE ALTERNATE TIMER',0
GUIOptionText8 db '-',0
GUIOptionText9 db '+',0
GUIOptionText10 db '-',0
SECTION .text
DisplayGUIVideo:
cmp byte[TripBufAvail],0
@@ -1742,13 +1758,6 @@ DisplayGUIVideo:
je .notext8
GUIOuttextwin2u 5,26,178,GUIVideoText8b,0
.notext8
%ifndef __MSDOS__
mov al,[cvidmode]
cmp byte[GUIMBVID+eax],0
je .notext82
GUIOuttextwin2u 5,26,178,GUIVideoText8b2,0
.notext82
%endif
GUIOuttextwin2u 5,26,188,GUIVideoText8c,0
%ifndef __LINUX__
GUIOuttextwin2u 5,130,188,GUIVideoText9,0
@@ -1850,13 +1859,6 @@ DisplayGUIVideo:
je .notext8b
GUIOuttextwin2 5,25,177,GUIVideoText8b
.notext8b
%ifndef __MSDOS__
mov al,[cvidmode]
cmp byte[GUIMBVID+eax],0
je .notext8b2
GUIOuttextwin2 5,25,177,GUIVideoText8b2
.notext8b2
%endif
GUIOuttextwin2 5,25,187,GUIVideoText8c
%ifndef __LINUX__
GUIOuttextwin2 5,129,187,GUIVideoText9
@@ -1982,18 +1984,6 @@ DisplayGUIVideo:
.nocheckbox1m72
GUIDisplayIconWin 5,11,173,[GUITemp]
.nocheckboxm72
%ifndef __MSDOS__
mov al,[cvidmode]
cmp byte[GUIMBVID+eax],0
je .nocheckboxmb2
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[MotionBlur],0
je .nocheckboxmb
mov dword[GUITemp],GUIIconDataCheckBoxC
.nocheckboxmb
GUIDisplayIconWin 5,11,173,[GUITemp]
.nocheckboxmb2
%endif
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[GrayscaleMode],0
je .nocheckboxm73
@@ -2147,6 +2137,7 @@ DisplayGUIVideo:
GUIOuttextwin2 5,48,195,[GUITemp]
ret
SECTION .data
GUIVideoText1 db 'VIDEO MODES :',0
GUIVideoText2 db 'FULL SCANLINES',0
GUIVideoTextb db 'SCANLINES:',0
@@ -2164,7 +2155,6 @@ GUIVideoText5b db 'WIDE SCREEN',0 ; -c
GUIVideoText6 db 'SMALL SCREEN',0 ; -c
GUIVideoText7 db 'TRIPLE BUFFERING',0 ; -c
GUIVideoText8b db 'HI-RESOLUTION MODE7',0 ; -c
GUIVideoText8b2 db 'MOTION BLUR',0 ; -c
GUIVideoText8c db 'GRAYSCALE MODE',0 ; -c
GUIVideoText8 db 'SET',0 ; set button
GUIVideoText9 db 'VSYNC',0 ; -c
@@ -2173,10 +2163,14 @@ GUIVideoTextw0 db 'LEGEND:',0
GUIVideoTextw1 db ' S = SCALED TO FIT SCREEN',0
GUIVideoTextw2 db ' R = MATCHED SCREEN RATIO',0
GUIVideoTextw3 db ' D = ALLOW 2XSAI,HIRES,ETC',0
GUIVStA dd 0,0,0
GUIcurrentvideoviewloc dd 0
GUIcurrentvideocursloc dd 0
SECTION .bss
GUIVStA resd 3
GUIcurrentvideoviewloc resd 1
GUIcurrentvideocursloc resd 1
SECTION .text
DisplayGUISound:
@@ -2433,6 +2427,7 @@ DisplayGUISound:
GUIOuttextwin2 6,118,88,[GUITemp]
ret
SECTION .data
GUISoundText1 db 'ENABLE SOUND',0
GUISoundText1b db 'FORCE 8-BIT',0
GUISoundText2 db 'SAMPLING RATE :',0
@@ -2461,7 +2456,7 @@ GUISoundTextT db 'LOWPASS :',0
GUISoundTextU db 'SIMPLE',0
GUISoundTextV db 'DYNAMIC',0
GUISoundTextW db 'HI QUALITY',0
SECTION .text
DisplayGUICheatConv:
@@ -2775,6 +2770,7 @@ DisplayGUICheat:
GUIDisplayIconWin 7,11,186,[GUITemp]
ret
SECTION .data
GUICheatText1 db 'ENTER CODE :',0
GUICheatText2 db 'DESCRIPTION:',0
GUICheatText3 db 'ADDRESS CV PV TGL DESCRIPTION',0
@@ -2793,14 +2789,16 @@ GUICheatTextE db 'NOTE : YOU MAY HAVE TO RESET THE GAME',0
GUICheatTextF db ' AFTER ENTERING THE CODE. REMEMBER TO',0
GUICheatTextG db ' INSERT THE "-" FOR GAME GENIE CODES',0
GUICheatTextJ db 'AUTO-LOAD .CHT FILE AT GAME LOAD',0
GUICheatPosA db 0
GUICheatPosB db 0
GUICStA dd 0,0,0
GUIcurrentcheatviewloc dd 0
GUIcurrentcheatcursloc dd 0
GUIcurrentcheatwin dd 0
ccheatnpos dd 0
ccheatnleft dd 0
SECTION .bss
GUICheatPosA resb 1
GUICheatPosB resb 1
GUICStA resd 3
GUIcurrentcheatviewloc resd 1
GUIcurrentcheatcursloc resd 1
GUIcurrentcheatwin resd 1
ccheatnpos resd 1
ccheatnleft resd 1
SECTION .text
DrawWindowSearch:
GUIDrawWindowBox 13,GUISearchDisp
@@ -3440,29 +3438,35 @@ Cheatmodeadd:
;CheatSrcByteSize db 0
;CheatSrcByteBase db 0
;CheatSrcSearchType db 0
CheatWinMode db 0
CheatSearchStatus db 0
CheatCompareValue dd 0
NumCheatSrc dd 0
GUIcurrentchtsrcviewloc dd 0
GUIcurrentchtsrccursloc dd 0
CSStartEntry dd 0
CSCurEntry dd 0
CheatSearchXPos dd 0
CheatSearchYPos dd 0
CheatLooped dd 0
ccheatnleftb dd 0
CurCStextpos dd 0
SECTION .bss
CheatWinMode resb 1
CheatSearchStatus resb 1
CheatCompareValue resd 1
NumCheatSrc resd 1
GUIcurrentchtsrcviewloc resd 1
GUIcurrentchtsrccursloc resd 1
CSStartEntry resd 1
CSCurEntry resd 1
CheatSearchXPos resd 1
CheatSearchYPos resd 1
CheatLooped resd 1
ccheatnleftb resd 1
CurCStextpos resd 1
SECTION .data
SrcMask dd 0FFh,0FFFFh,0FFFFFFh,0FFFFFFFFh
CSInputDisplay db '_',0,' ',0
CSDescDisplay db ' ',0,0
curentryval dd 0
curentryleft dd 0
curaddrvalcs dd 0
curvaluecs dd 0
GUICSStA dd 0,0,0
SECTION .bss
curentryval resd 1
curentryleft resd 1
curaddrvalcs resd 1
curvaluecs resd 1
GUICSStA resd 3
SECTION .data
GUISrcText1 db 'CHEAT SEARCH',0
GUISrcText2 db 'HAS NOT BEEN',0
GUISrcText3 db 'IMPLEMENTED YET',0
@@ -3500,6 +3504,7 @@ GUICSrcTextV db 'ENTER NEW VALUE:',0
GUICSrcTextW db 'ENTER CHEAT DESCRIPTION:',0
GUICSrcTextX db 'PAR CODE EQUIVALENT:',0
GUICSrcTextY db 'USE ONLY UPPER BYTE',0
SECTION .text
NEWSYM NetAddChar ; dl = color, dh = char
@@ -3621,13 +3626,16 @@ NEWSYM NetAddChar ; dl = color, dh = char
ret
CCursLoc dd 0
CViewLoc dd 0
NViewLoc dd 0
TViewLoc dd 0
section .bss
CCursLoc resd 1
CViewLoc resd 1
NViewLoc resd 1
TViewLoc resd 1
section .text
DisplayNetOptns:
mov dword[GUIwinsizex+8*4],7*16
mov dword[GUIwinsizey+8*4],57
mov dword[GUINetDisp],'IPX '
@@ -3641,6 +3649,7 @@ DisplayNetOptns:
mov dword[GUINetDisp+4],'R! '
jmp .nomodem
.netokay
%ifdef __MSDOS__
cmp byte[CNetType],8
jne .noipxinvalid
mov dword[GUIwinsizex+8*4],7*16
@@ -3648,6 +3657,7 @@ DisplayNetOptns:
mov dword[GUINetDisp],'ERRO'
mov dword[GUINetDisp+4],'R! '
.noipxinvalid
%endif
cmp byte[CNetType],22
je .yesstate
@@ -3703,6 +3713,7 @@ DisplayNetOptns:
mov dword[GUIwinsizex+8*4],201
mov dword[GUIwinsizey+8*4],48
.notcpip
%ifdef __MSDOS__
cmp byte[CNetType],3
je .yesmodem
cmp byte[CNetType],1
@@ -3729,6 +3740,7 @@ DisplayNetOptns:
mov dword[GUINetDisp+8],'TTIN'
mov word[GUINetDisp+12],'GS'
mov byte[GUINetDisp+14],0
%endif
.nomodem
GUIDrawWindowBox 8,GUINetDisp
cmp byte[per2exec],99
@@ -3739,12 +3751,14 @@ DisplayNetOptns:
cmp byte[CNetType],21
je near DisplayNetTCPIPState
%ifdef __MSDOS__
cmp byte[CNetType],1
je near DisplayNetOptnsModem
cmp byte[CNetType],2
je near DisplayNetOptnsModemConfig
cmp byte[CNetType],3
je near DisplayNetOptnsModemDial
%endif
cmp byte[CNetType],4
je near DisplayNetOptnsTCPIP
cmp byte[CNetType],10
@@ -3757,6 +3771,7 @@ DisplayNetOptns:
je near DisplayNetOptnsModemTerm
cmp byte[CNetType],20
je near DisplayNetOptnsChatWindow
%ifdef __MSDOS__
cmp byte[CNetType],7
je near DisplayNetIPXStart
cmp byte[CNetType],8
@@ -3785,6 +3800,7 @@ DisplayNetOptns:
GUIOuttextwin2 8,5,15,GUINetText1
GUIOuttextwin2 8,5,25,GUINetText2
ret
%endif
DisplayNetTCPIPState:
DrawGUIButton 8,73,48,127,59,GUITCPStateText3,64,0,0
@@ -3833,10 +3849,13 @@ DisplayNetTCPIPState:
DrawGUIWinBox 8,122,30,121,40,dl ; 2,0,1,0
ret
SECTION .data
GUITCPStateText1 db 'SENDING STATUS',0
GUITCPStateText2 db 'RECEIVING STATUS',0
GUITCPStateText3 db 'CANCEL',0
SECTION .text
%ifdef __MSDOS
DisplayNetIPXStart:
DrawGUIButton 8,53,48,87,59,GUINetTextZ,34,0,0
sub byte[GUItextcolor],15
@@ -3851,6 +3870,7 @@ DisplayNetIPXStart:
DisplayNetIPXInvalid:
ret
%endif
DisplayNetOptnsTCPIP:
; Your IP:
@@ -3973,6 +3993,7 @@ DisplayNetOptnsInvalid:
GUIOuttextwin2 8,5,25,GUINetText2b
GUIOuttextwin2 8,5,35,GUINetText3b
ret
%ifdef __MSDOS__
DisplayNetOptnsModem:
mov dword[GUIEditStringcWin],0
DrawGUIButton 8,5,15,89,26,GUINetTextG,21,0,0
@@ -4101,6 +4122,7 @@ DisplayNetOptnsModemDial:
; mov dword[GUIEditStringmLenM],27
mov dword[GUIEditStringcWin],1
ret
%endif
DisplayNetOptnsModemTerm:
DrawGUIWinBox 8,6,15,181,127,167
; draw borders
@@ -4378,23 +4400,30 @@ DisplayNetOptnsChatWindow:
; DrawSlideBarWin 8,181,15,[NViewLoc],[TViewLoc],12,97,GUINCStA
ret
NEWSYM GUINCStA, dd 0,0,0
NEWSYM CNetType, db 0
SECTION .bss
NEWSYM GUINCStA, resd 3
NEWSYM CNetType, resb 1
SECTION .data
NEWSYM Latency, db 2
NEWSYM Latencytochange, db 2
NEWSYM LatencyLeft, db 2
NEWSYM NetSwap, db 0
RemCNetType db 0
UseRemoteSRAMData db 0
ChatString times 276 db 0
FileNameMod times 512 db 0
CurCStringPos dd 0
SECTION .bss
NEWSYM NetSwap, resb 1
RemCNetType resb 1
UseRemoteSRAMData resb 1
ChatString resb 276
FileNameMod resb 512
CurCStringPos resd 1
SECTION .data
%ifdef __MSDOS__
GUINetText1 db 'IPX HAS NOT BEEN',0
GUINetText2 db 'IMPLEMENTED YET',0
%endif
GUINetText1b db 'PLEASE SET THE',0
GUINetText2b db 'PERCENTAGE OF',0
GUINetText3b db 'EXECUTION TO 100',0
%ifdef __MSDOS__
GUINetText1c db 'IPX IS IN BETA',0
GUINetText2c db 'STAGES. IT MAY',0
GUINetText3c db 'NOT WORK RIGHT!',0
@@ -4403,9 +4432,11 @@ GUINetText4 db 'COM2 (2F8)',0
GUINetText5 db 'COM3 (3E8)',0
GUINetText6 db 'COM4 (2E8)',0
GUINetText7 db 'IRQ ',0
%endif
GUINetText8 db '00',0
GUINetText9 db '+',0
GUINetTextA db '-',0
%ifdef __MSDOS__
GUINetTextC db 'TONE (ATDT)',0
GUINetTextD db 'PULSE (ATDP)',0
GUINetTextE db 'INIT STRINGS :',0
@@ -4425,12 +4456,17 @@ GUINetTextO db '57600',0
GUINetTextP db '115200',0
GUINetTextQ db 'BAUDRATE (BPS) :',0
GUINetTextR db 'COMPORT :',0
%endif
GUINetTextS db 'CANCEL',0
%ifdef __MSDOS__
GUINetTextT db 'DIAL',0
%endif
GUINetTextU db 'DISCONNECT',0
GUINetTextV db 'PLAYER SELECT :',0
GUINetTextW db '1',0,'2',0,'3',0,'4',0,'5',0
%ifdef __MSDOS__
GUINetTextX db 'USE FOSSIL DRIVER',0
%endif
GUINetTextY db 'LATENCY',0
GUINetTextZ db 'OKAY',0
GUINetTexta db 'SAVE DATA :',0
@@ -4453,7 +4489,11 @@ GUINetTextr1 db 'PLEASE RESTART ZSNESW',0
GUINetTextr2 db 'BEFORE STARTING A NEW',0
GUINetTextr3 db 'NETPLAY SESSION',0
%ifdef __MSDOS__
BaudVal dd 9600,14400,19200,28800,38400,57600,115200
%endif
SECTION .text
DisplayGameOptns:
; Key redefinition for :
@@ -4735,9 +4775,12 @@ DisplayGameOptns:
DGOptnsDrawBox 8+108+70,188,[KeyQuickSaveSPC]
ret
GUIGameOptnsColA db 0
GUIGameOptnsColB db 0
GUIGameDisplayKy dd 0
SECTION .bss
GUIGameOptnsColA resb 1
GUIGameOptnsColB resb 1
GUIGameDisplayKy resd 1
SECTION .data
GUIGameOptnsText1 db 'SOUND DISABLES :',0
GUIGameOptnsText2 db 'CH#',0
GUIGameOptnsText3 db 'BG DISABLES :',0
@@ -4772,6 +4815,7 @@ GUIGameOptnsTextV db 'SAVE SPC',0
GUIGameOptnsTextX db 'DISPLAY FPS',0
GUIGameOptnsTextY db 'ST+',0
GUIGameOptnsTextZ db 'ST-',0
SECTION .text
DisplayGUIOptns:
%ifdef __WIN32__
@@ -5101,6 +5145,7 @@ DisplayGUIOptns:
;lastcursres db 0 ; 0 = go to load, 1 = go to previous menu, 2 = no menu
;resetposn db 1 ; 0 = no window reset, 1 = window reset
SECTION .data
GUIGUIOptnsText1 db 'COLOR:',0
GUIGUIOptnsText2 db 'MOUSE WRAP',0
GUIGUIOptnsText3 db 'MOUSE SHADOW',0
@@ -5112,7 +5157,7 @@ GUIGUIOptnsText8 db 'CLICK ENTERS GUI',0
GUIGUIOptnsText9 dd 0
GUIGUIOptnsTextA db 'USE JOYPAD1',0
GUIGUIOptnsTextB dd 'SNOW EFFECT',0
GUIGUIOptnsTextBb dd 'SMOKE EFFECT',0
GUIGUIOptnsTextBb dd 'BURNING EFFECT',0
GUIGUIOptnsTextC dd 'WATER EFFECT A',0
GUIGUIOptnsTextCb dd 'WATER EFFECT B',0
GUIGUIOptnsTextD dd 'MAIN WINDOW OPTIONS :',0
@@ -5126,6 +5171,7 @@ GUIGUIOptnsTextK db 'WHEEL MOUSE',0
GUIGUIOptnsTextL db 'ALLOW MULTIPLE INSTANCES',0
GUIGUIOptnsTextM db 'FILTERED GUI',0
GUIGUIOptnsTextN db 'TRAP MOUSE CURSOR',0
SECTION .text
DisplayGUIAbout:
GUIDrawWindowBox 11,GUIAboutDisp
@@ -5184,6 +5230,7 @@ DisplayGUIAbout:
GUIOuttextwin2 11,5,75,GUIGUIAboutText5
ret
SECTION .data
GUIGUIAboutText1 db 'ZSNES V',ZVERSION,0
GUIGUIAboutText2 db 'CODED BY : ',0
GUIGUIAboutText3 db ' ZSKNIGHT',0
@@ -5212,6 +5259,8 @@ GUIGUIAboutTextE db 'certain conditions; please',0
GUIGUIAboutTextF db 'please read ',39,'LICENSE',39,0
GUIGUIAboutTextG db 'thoroughly before using it.',0
SECTION .text
DisplayGUIMovies:
GUIDrawWindowBox 15,GUIMovieDisp
cmp byte[MovieRecordWinVal],0
@@ -5312,6 +5361,7 @@ DisplayGUIMovies:
GUIDisplayButtonHole 15,80,55,byte[CMovieExt],'9'
ret
SECTION .data
GUIMovieText1 db 'PLAY',0
GUIMovieText2 db 'RECORD',0
GUIMovieText3 db 'STOP',0
@@ -5324,6 +5374,8 @@ GUIMovieText9 db 'NO',0
GUIMovieTextA db 'STATUS : ',0
CMovieExt db 'v'
SECTION .text
; Key types: Up, Down, Left, Right, A, B, X, Y, L, R (Press/Relase/P+R)
; Frame delays: 1 frame, 2, 3, 4, 5, 1 sec., 2, 3 ,4 ,5
@@ -5712,6 +5764,15 @@ DisplayGUICombo:
mov byte[GUIGameDisplayKy+3],0
GUIOuttextwin2c 16,139,94,GUIGameDisplayKy
; Buttons
mov al,[TextColorSp+2]
add al,15
mov byte[GUItextcolor],al
DrawGUIButton 16,202,20,246,31,GUIComboTextA,60,-1,0
DrawGUIButton 16,202,35,246,46,GUIComboTextB,61,-1,0
DrawGUIButton 16,202,50,246,61,GUIComboTextC,62,-1,0
DrawGUIButton 16,202,65,246,76,GUIComboTextD,63,-1,0
; Hole Switches
GUIDisplayButtonHole 16,178,82,byte[GUIComboPNum],0
GUIDisplayButtonHole 16,196,82,byte[GUIComboPNum],1
@@ -5921,27 +5982,28 @@ DisplayGUICombo:
.noscrolldisplay
ret
GUIccombviewloc dd 0
GUIccombcursloc dd 0
GUIccomblcursloc dd 0
NEWSYM NumCombo, dd 0
NumComboGlob dd 0
NEWSYM NumComboLocl, dd 0
GUICSStC dd 0,0,0
GUIComboKey dd 0
GUIComboPos db 0
GUIComboPNum db 0
GUIComboLHorz db 0
NEWSYM GUINumCombo, db 0
GUIComboData times 50 db 0
GUIScrolBufA times 21 db 0
GUIScrolBufB times 10 db 0
SECTION .bss
GUIccombviewloc resd 1
GUIccombcursloc resd 1
GUIccomblcursloc resd 1
NEWSYM NumCombo, resd 1
NumComboGlob resd 1
NEWSYM NumComboLocl, resd 1
GUICSStC resd 3
GUIComboKey resd 1
GUIComboPos resb 1
GUIComboPNum resb 1
GUIComboLHorz resb 1
NEWSYM GUINumCombo, resb 1
GUIComboData resb 50
GUIScrolBufA resb 21
GUIScrolBufB resb 10
;CombinDataGlob times 3300 db 0 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
;CombinDataLocl times 3300 db 0
SECTION .data
GUIComboText1 db 'DESCRIPTION',0
GUIComboText2 db 'KEY P# LH',0
GUIComboText3 db ' ',0
@@ -6024,6 +6086,8 @@ GUIIconDataComboSecond:
db 0 ,48 ,46 ,44 ,42 ,0 ,0 ,0 ,0 ,0
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
SECTION .text
DisplayGUIAddOns:
GUIDrawWindowBox 17,GUIAddOnsDisp
sub byte[GUItextcolor],15
@@ -6095,6 +6159,7 @@ DisplayGUIAddOns:
GUIDisplayIconWin 17,109,93,[GUITemp]
ret
SECTION .data
GUIAddOnText1 db 'NONE',0
GUIAddOnText2 db 'SNES MOUSE AT PORT #1',0
GUIAddOnText3 db 'SNES MOUSE AT PORT #2',0
@@ -6126,9 +6191,11 @@ GUIStatesDisp db 'STATE CONFIRM',0
GUIComboDisp db 'KEY COMBINATION EDITOR',0
GUIAddOnsDisp db 'ADD-ON SELECTOR',0
GUIItemBoxColor dd 0
TextColorSp dd 0
SECTION .bss
GUIItemBoxColor resd 1
TextColorSp resd 1
SECTION .data
NEWSYM GUIMenuItem, db 'GAME ',0
db 'CONFIG',0
db 'CHEAT ',0
@@ -6136,3 +6203,4 @@ NEWSYM GUIMenuItem, db 'GAME ',0
db 'MISC ',0
db 25,0
SECTION .text

View File

@@ -85,14 +85,25 @@ GUIUnBuffer:
jnz .loop
ret
SECTION .bss
NEWSYM nextmenupopup, resb 1
NEWSYM NoInputRead, resb 1
NEWSYM PrevMenuPos, resb 1
NEWSYM MenuDisplace, resd 1
NEWSYM MenuDisplace16, resd 1
NEWSYM MenuNoExit, resb 1
NEWSYM SPCSave, resb 1
NEWSYM nextmenupopup, db 0
NEWSYM NoInputRead, db 0
NEWSYM PrevMenuPos, db 0
NEWSYM MenuDisplace, dd 0
NEWSYM MenuDisplace16, dd 0
NEWSYM MenuNoExit, db 0
NEWSYM SPCSave, db 0
%ifdef SPCDUMP
SECTION .data
NEWSYM SPCSave_dump, db 0
SECTION .bss
EXTSYM SPCSave_buffer, SPCSave_ports
NEWSYM SPCSave_handle, resd 1
%endif
SECTION .text
NEWSYM showmenu
mov byte[ForceNonTransp],1
@@ -160,13 +171,13 @@ NEWSYM showmenu
call savepcx
jmp .nopalwrite
.nosskey
cmp byte[SPCKeyPressed],1
je near .savespckey
test byte[pressed+14],1
jz .nof12
call savepcx
jmp .nopalwrite
.nof12
cmp byte[SPCKeyPressed],1
je near .savespckey
mov dword[menucloc],0
cmp byte[nextmenupopup],0
je .nomenuinc2
@@ -237,10 +248,10 @@ NEWSYM showmenu
.nogoup
sub dword[menucloc],10*288
call menudrawbox8b
mov al,[newengen]
mov byte[newengen],0
; mov al,[newengen] ; WTF?
; mov byte[newengen],0
mov [newengen],al
; mov [newengen],al
jmp .nextkey
.noup
cmp al,80
@@ -251,12 +262,12 @@ NEWSYM showmenu
.nogodown
add dword[menucloc],10*288
call menudrawbox8b
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
jmp .nextkey
.nodown
jmp .nextkey
@@ -268,12 +279,12 @@ NEWSYM showmenu
jmp .nextkey
.done
call GUIUnBuffer
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
cmp dword[menucloc],0
jne .nosavepcx
call savepcx
@@ -340,17 +351,34 @@ NEWSYM showmenu
.savespckey
cmp byte[spcon],0
je .nospc
cmp byte[newengen],1
%ifdef SPCDUMP
cmp byte[SPCSave_dump], 1
jne .start_dump
mov ebx, [SPCSave_handle]
mov eax, -1
mov [SPCSave_buffer], eax
mov ecx, 4
mov edx, SPCSave_buffer
call Write_File
call Close_File
mov byte[SPCSave_dump], 0
jmp .nospcsave
.start_dump
%endif
; cmp byte[newengen],1
; je .unablespc
mov dword[Msgptr],.search
mov eax,[MsgCount]
mov [MessageOn],eax
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
; call breakatsignc
; cmp byte[prbreak],1
; je .yesesc
@@ -360,6 +388,7 @@ NEWSYM showmenu
; cmp byte[prbreak],1
; je .yesesc
call savespcdata
mov byte[curblank],40h
mov dword[Msgptr],.saved
mov eax,[MsgCount]
@@ -393,12 +422,12 @@ NEWSYM showmenu
jmp .nopalwrite
.exitloop
call GUIUnBuffer
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
cmp byte[cbitmode],1
je near .nopalwrite
mov edi,[vidbuffer]
@@ -447,6 +476,7 @@ NEWSYM showmenu
mov byte[MenuNoExit],0
jmp showmenu
SECTION .data
.unablefps db 'NEED AUTO FRAMERATE ON',0
.sndbufsav db 'BUFFER SAVED AS SOUNDDMP.RAW',0
.search db 'SEARCHING FOR SONG START.',0
@@ -454,6 +484,7 @@ NEWSYM showmenu
.unable db 'CANNOT USE IN NEW GFX ENGINE.',0
.escpress db 'ESC TERMINATED SEARCH.',0
.saved db '.SPC FILE SAVED.',0
SECTION .text
NEWSYM menudrawbox8b
cmp byte[cbitmode],1
@@ -551,14 +582,15 @@ NEWSYM menudrawbox8b
add esi,[MenuDisplace]
mov edi,.stringi
call OutputGraphicString
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
ret
SECTION .data
.string db 'MISC OPTIONS',0
.stringa db 'SAVE SNAPSHOT',0
.stringb db 'SHOW FPS',0
@@ -569,6 +601,7 @@ NEWSYM menudrawbox8b
.stringg db 'INCR FRAME ONLY',0
.stringh db 'MOVE THIS WINDOW',0
.stringi db 'IMAGE FORMAT: ---',0
SECTION .text
NEWSYM menudrawcursor8b
cmp byte[cbitmode],1
@@ -592,7 +625,9 @@ NEWSYM menudrawcursor8b
mov al,128
ret
NEWSYM menucloc, dd 0
SECTION .bss ;ALIGN=32
NEWSYM menucloc, resd 1
SECTION .text
NEWSYM menudrawbox16b
; draw shadow behind box
@@ -736,19 +771,22 @@ NEWSYM menudrawbox16b
add esi,[MenuDisplace16]
mov edi,menudrawbox8b.stringi
call OutputGraphicString16b
mov al,[newengen]
mov byte[newengen],0
push eax
; mov al,[newengen]
; mov byte[newengen],0
; push eax
call copyvid
pop eax
mov [newengen],al
; pop eax
; mov [newengen],al
ret
.allred dw 0
.blue dw 0
.stepb dw 0
SECTION .bss
.allred resw 1
.blue resw 1
.stepb resw 1
NEWSYM menu16btrans, db 0
NEWSYM menu16btrans, resb 1
SECTION .text
NEWSYM menudrawcursor16b
; draw a small red box
@@ -944,13 +982,38 @@ NEWSYM savespcdata
mov ecx,256
mov edx,DSPMem
call Write_File
%ifdef SPCDUMP
mov [SPCSave_handle], ebx
%else
call Close_File
%endif
add dword[spcPCRam],spcRam
add dword[spcRamDP],spcRam
call ResetState
%ifdef SPCDUMP
; w00t, reg dump crapola
; using a time reference because I don't feel like adding
; cycle counting to the SPC emulation just for this
mov byte[SPCSave_dump],1
mov eax, [spcRam+0F4h]
mov [SPCSave_ports], eax
xor eax, eax
mov [SPCSave_buffer], eax
%endif
ret
.spcfname times 128 db 0
SECTION .bss
.spcfname resb 128
SECTION .data
;.SPC File Format
;Offset 00000h - File Header : SNES-SPC700 Sound File Data v0.10
@@ -1016,6 +1079,8 @@ NEWSYM ssdatst
; SPCRAM (offset 256), 64k
; DSPRAM (offset 256+65536), 256 bytes
SECTION .text
NEWSYM dumpsound
mov cx,0
mov edx,.filename
@@ -1058,6 +1123,7 @@ NEWSYM dumpsound
xor esi,esi
jmp .return
SECTION .data
.filename db 'SOUNDDMP.RAW',0
NEWSYM pcxheader
@@ -1069,7 +1135,11 @@ NEWSYM pcxheader
.bpline dw 256
times 128-68 db 0
NEWSYM picnum, dw 0
SECTION .bss
NEWSYM picnum, resw 1
SECTION .data
NEWSYM savepcx
%ifndef NO_PNG
@@ -1370,12 +1440,15 @@ NEWSYM savepcx
call restore16b
ret
SECTION .data
.pcxsaved db 'SNAPSHOT SAVED TO '
.filename db 'image.pcx',0,0,0,0
.rawsaved db 'SNAPSHOT SAVED TO '
.filename2 db 'image.bmp',0,0,0,0
.rowsleft db 0
.curdptr dd 0
SECTION .bss
.rowsleft resb 1
.curdptr resd 1
SECTION .text
NEWSYM save16b2
call prepare16b
@@ -1517,10 +1590,13 @@ NEWSYM save16b2
call restore16b
ret
SECTION .data
.rawsaved db 'SNAPSHOT SAVED TO '
.filename2 db 'image.bmp',0,0,0,0
.rowsleft dd 0
.curdptr dd 0
SECTION .bss
.rowsleft resd 1
.curdptr resd 1
SECTION .text
prepare16b:
cmp byte[vesa2red10],1

View File

@@ -1 +1 @@
/Fezsnesw.exe chips\dsp1proc.obj dos\sw.obj dos\gppro.obj dos\vesa12.obj dos\zsipx.obj dos\modemrtn.obj dos\joy.obj dos\debug.obj dos\vesa2.obj dos\initvid.obj cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj video\procvid.obj win\copyvwin.obj win\winintrf.obj win\winlink.obj win\zloaderw.obj win\ztcp.obj win\zfilew.obj win\zipxw.obj video\makev16b.obj video\makev16t.obj video\makevid.obj video\mode716.obj video\mode716b.obj video\mode716d.obj video\mode716e.obj video\mode716t.obj video\mode7.obj video\mode7ext.obj video\mv16tms.obj video\newg162.obj video\newgfx16.obj video\newgfx2.obj video\newgfx.obj video\m716text.obj video\2xsaiw.obj video\sw_draw.obj gui\gui.obj gui\menu.obj cpu\addrni.obj cpu\dma.obj cpu\dsp.obj cpu\dspproc.obj cpu\execute.obj cpu\irq.obj cpu\memory.obj cpu\spc700.obj cpu\stable.obj cpu\table.obj cpu\tableb.obj cpu\tablec.obj chips\dsp1emu.obj chips\fxemu2.obj chips\fxemu2b.obj chips\fxemu2c.obj chips\fxtable.obj chips\sa1proc.obj chips\sa1regs.obj chips\sfxproc.obj zip\unzip.obj zip\zzip.obj zip\zpng.obj zlib.lib libpng.lib wsock32.lib user32.lib gdi32.lib shell32.lib winmm.lib ddraw.lib dsound.lib dinput8.lib d3dx.lib /link /section:.text,erw
/Fezsnesw.exe chips\dsp1proc.obj dos\sw.obj dos\gppro.obj dos\vesa12.obj dos\zsipx.obj dos\modemrtn.obj dos\joy.obj dos\debug.obj dos\vesa2.obj dos\initvid.obj cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj burn.obj video\procvid.obj win\copyvwin.obj win\winintrf.obj win\winlink.obj win\zloaderw.obj win\ztcp.obj win\zfilew.obj win\zipxw.obj video\makev16b.obj video\makev16t.obj video\makevid.obj video\mode716.obj video\mode716b.obj video\mode716d.obj video\mode716e.obj video\mode716t.obj video\mode7.obj video\mode7ext.obj video\mv16tms.obj video\newg162.obj video\newgfx16.obj video\newgfx2.obj video\newgfx.obj video\m716text.obj video\2xsaiw.obj video\sw_draw.obj gui\gui.obj gui\menu.obj cpu\addrni.obj cpu\dma.obj cpu\dsp.obj cpu\dspproc.obj cpu\execute.obj cpu\irq.obj cpu\memory.obj cpu\spc700.obj cpu\stable.obj cpu\table.obj cpu\tableb.obj cpu\tablec.obj chips\dsp1emu.obj chips\fxemu2.obj chips\fxemu2b.obj chips\fxemu2c.obj chips\fxtable.obj chips\sa1proc.obj chips\sa1regs.obj chips\sfxproc.obj zip\unzip.obj zip\zzip.obj zip\zpng.obj zlib.lib libpng.lib wsock32.lib user32.lib gdi32.lib shell32.lib winmm.lib ddraw.lib dsound.lib dinput8.lib d3dx.lib /link /section:.text,erw

View File

@@ -44,8 +44,9 @@ VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\
DOSOBJ= ${DOSDIR}/dosintrf.o ${DOSDIR}/gppro.o ${DOSDIR}/debug.o\
${DOSDIR}/initvid.o ${DOSDIR}/modemrtn.o ${DOSDIR}/sw32.o\
${DOSDIR}/joy.o ${DOSDIR}/sw.o ${DOSDIR}/vesa12.o ${DOSDIR}/vesa2.o\
${DOSDIR}/zloader.o ${DOSDIR}/zsipx.o ${DOSDIR}/zfile.o
${DOSDIR}/joy.o ${DOSDIR}/sound.o ${DOSDIR}/sw.o ${DOSDIR}/vesa12.o\
${DOSDIR}/vesa2.o ${DOSDIR}/zloader.o ${DOSDIR}/zsipx.o\
${DOSDIR}/zfile.o
WINOBJ=${WINDIR}/copywin.o ${WINDIR}/winintrf.o ${WINDIR}/winlink.o\
${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o
@@ -60,7 +61,7 @@ MAINOBJ=cfgload.o endmem.o fixsin.o init.o ui.o vcache.o water.o smoke.o
OBJS=${CHIPSOBJ} ${CPUOBJ} ${DOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${PREOBJ} ${MAINOBJ} ${ZIPOBJ}
LIBS=-lz -lm -lpng
#CFLAGS=-O2 -Wall -Wno-unused -D__MSDOS__
CFLAGS=-O3 -march=i486 -fno-rtti -fno-exceptions -ffast-math\
CFLAGS=-O3 -march=i586 -fno-rtti -fno-exceptions -ffast-math\
-fomit-frame-pointer -fno-unroll-loops -Wall -Wno-unused -D__MSDOS__
ASM=nasm
ASMFLAGS=-f coff -D__MSDOS__

View File

@@ -63,7 +63,7 @@ PREOBJ=
ZIPOBJ=${ZIPDIR}/zzip.obj ${ZIPDIR}/unzip.obj ${ZIPDIR}/zpng.obj
MAINOBJ=cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj
MAINOBJ=cfgload.obj endmem.obj fixsin.obj init.obj ui.obj vcache.obj water.obj smoke.obj burn.obj
OBJS=${CHIPSOBJ} ${CPUOBJ} ${WINOBJ} ${GUIOBJ} ${VIDEOBJ} ${ZIPOBJ} ${MAINOBJ} ${WINDOSOBJ}
LIBS=
@@ -112,6 +112,7 @@ ${DOSDIR}/vesa12.o: ${DOSDIR}/vesa12.asm macros.mac
fixsin.obj: fixsin.c
water.obj: water.c
smoke.obj: smoke.c
burn.obj: burn.c
${VIDEODIR}/2xsaiw.obj: ${VIDEODIR}/2xsaiw.asm macros.mac
${VIDEODIR}/procvid.obj: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xSaImmx.inc
${CHIPDIR}/sa1regs.obj: ${CHIPDIR}/sa1regs.asm macros.mac\

View File

@@ -1,12 +1,8 @@
#ifdef __LINUX__
# include "gblhdr.h"
#else
# include <stdlib.h>
# include <string.h>
# include <time.h>
#endif
/*

View File

@@ -23,7 +23,6 @@ EXTSYM StartUp,PrintStr,WaitForKey,PrintChar,ZFileSystemInit
EXTSYM SPCDisable,SystemInit,allocmem
EXTSYM FPSOn,FPSAtStart,cfgsoundon
EXTSYM xa
EXTSYM SBPort,SBInt,SBIrq,SBDMA,SBDMAPage,SBHDMAPage,getenv,vibracard
EXTSYM ram7fa,wramdataa
EXTSYM malloc,free
EXTSYM StateBackup
@@ -42,6 +41,10 @@ EXTSYM LinuxExit
EXTSYM GetFilename
%endif
%ifdef OPENSPC
EXTSYM OSPC_Init
%endif
NEWSYM UIAsmStart
@@ -69,8 +72,12 @@ NEWSYM zstart
cld ;clear direction flag
%ifdef OPENSPC
call OSPC_Init
%else
call setnoise
call InitSPC
%endif
call allocmem ;allocate memory
cmp byte[soundon],0
@@ -131,12 +138,6 @@ SECTION .data
NEWSYM mydebug, db '',13,10,0
NEWSYM outofmem, db 'You don',39,'t have enough memory to run this program!',13,10,0
; Line added by Peter Santing
NEWSYM vibradetect
db 'Creative ViBRA16X PnP card detected (support coded by Peter Santing)', 13, 10
db 'High-DMA is below dma #4', 13, 10
db 13,10, 'you have now full 16-bit stereo sound with the surround option!', 13, 10, 0
NEWSYM welcome
@@ -243,7 +244,6 @@ NEWSYM SecondPort, db 0 ; Secondary Joystick Port Enabled (209h)
; New Variables
NEWSYM ForcePal, db 0 ; 1 = NTSC, 2 = PAL
NEWSYM Force8b, db 0 ; Force 8-bit sound on
NEWSYM dssel, dw 0
NEWSYM Doublevbuf, db 1 ; Double video buffer
NEWSYM V8Mode, db 0 ; Vegetable mode! =)
NEWSYM fastmemptr, db 0
@@ -323,11 +323,23 @@ NEWSYM AllocMem
; Get Command Line Locates SET CMDLINE environment
;*******************************************************
%ifdef __WIN32__
EXTSYM _imp__GetModuleFileNameA@12
EXTSYM memcpy
%elifdef __MSDOS__
EXTSYM argv
%endif
NEWSYM getcmdline
%ifdef __MSDOS__
%if 0
mov edx,.string2s
push edx
call getenv
pop edx
%else
mov eax,[argv]
%endif
cmp eax,0
je near .nfound
mov esi,eax
@@ -344,6 +356,7 @@ NEWSYM getcmdline
.nocap
mov [edi],dl
mov [edi+256],dl
mov [edi+512],dl
inc esi
inc edi
cmp dl,32
@@ -351,8 +364,31 @@ NEWSYM getcmdline
cmp dl,0
jne .a
.b
%elifdef __WIN32__
push dword 256
push dword CMDLineStr
push byte +0
call [_imp__GetModuleFileNameA@12]
push eax
push eax
push dword CMDLineStr
push dword GUIFName
call memcpy
add esp,+12
mov eax,[esp]
push eax
push dword CMDLineStr
push dword GUICName
call memcpy
add esp,+12
pop edi
add edi,CMDLineStr
%else
mov esi,CMDLineStr
mov eax,CMDLineStr
ret ; *sigh*
%endif
mov esi,CMDLineStr
mov eax,esi
.next2
cmp eax,edi
je .nomore
@@ -402,7 +438,7 @@ NEWSYM getcmdline
mov byte[esi+5+512],'c'
mov byte[esi+6+512],'m'
mov byte[esi+7+512],'b'
mov byte[esI+8+512],0
mov byte[esi+8+512],0
ret
.nfound
mov edx,.stringnf
@@ -439,7 +475,7 @@ NEWSYM getcmdline
mov byte[esi+5+512],'c'
mov byte[esi+6+512],'m'
mov byte[esi+7+512],'b'
mov byte[esI+8+512],0
mov byte[esi+8+512],0
ret
SECTION .data
@@ -452,249 +488,6 @@ NEWSYM GUIFName, resb 256
NEWSYM GUICName, resb 256
NEWSYM FilenameStart, resd 1
SECTION .text
;*******************************************************
; Get Blaster Locates SET BLASTER environment
;*******************************************************
NEWSYM getblaster
%ifndef __LINUX__
mov edx,.string2s
push edx
call getenv
pop edx
cmp eax,0
je near .nfound
mov esi,eax
mov byte[.cursetting],0
.a
mov dl,[esi]
cmp dl,'a'
jb .nocap
cmp dl,'z'
ja .nocap
sub dl,'a'-'A'
.nocap
inc esi
mov byte[.blfound],1
cmp dl,'A'
jne .afound
mov byte[.cursetting],1
mov word[SBPort],0
jmp .src
.afound
cmp dl,'I'
jne .ifound
mov byte[.cursetting],2
mov byte[SBIrq],0
jmp .src
.ifound
cmp dl,'D'
jne .dfound
mov byte[.cursetting],3
mov byte[SBDMA],0
jmp .src
.dfound
cmp dl,'H'
jne .hfound
mov byte[.cursetting],4
mov byte[SBHDMA],0
jmp .src
.hfound
cmp dl,' '
je .src2
cmp dl,0
je .src2
jmp .src3
.src2
mov byte[.cursetting],0
jmp .src
.src3
cmp byte[.cursetting],1
jne .nproca
shl word[SBPort],4
sub dl,48
add byte[SBPort],dl
add dl,48
.nproca
cmp byte[.cursetting],2
jne .nproci
cmp byte[SBIrq],1
jne .no1
mov byte[SBIrq],10
.no1
sub dl,48
add [SBIrq],dl
add dl,48
.nproci
cmp byte[.cursetting],3
jne .nprocd
sub dl,48
mov [SBDMA],dl
add dl,48
.nprocd
cmp byte[.cursetting],4
jne .nproch
sub dl,48
mov [SBHDMA],dl
add dl,48
.nproch
.src
cmp dl,0
jne near .a
cmp byte[.blfound],0
je near .nfound
cmp byte[SBIrq],2
jne .noirq9
mov byte[SBIrq],9
.noirq9
mov al,[SBIrq]
add al,08h
cmp byte[SBIrq],7
jbe .nohighirq
add al,60h
add byte[PICRotateP],80h
add byte[PICMaskP],80h
.nohighirq
mov [SBInt],al
cmp byte[SBDMA],0
jne .dma0
mov byte[SBDMAPage],87h
.dma0
cmp byte[SBDMA],1
jne .dma1
mov byte[SBDMAPage],83h
.dma1
cmp byte[SBDMA],2
jne .dma2
mov byte[SBDMAPage],81h
.dma2
cmp byte[SBDMA],3
jne .dma3
mov byte[SBDMAPage],82h
.dma3
; ******************************************************
; **** this piece of code is added by Peter Santing ****
; **** it will enable ZSNES to use the full STEREO ****
; **** capability of the ViBRA16X line of creative ****
; **** instead of playing 8-bit MONOURAL sound ****
; ******************************************************
; cmp byte [SBHDMA], 0
; jne .vibradma0
; mov byte [SBDMAPage], 87h
; mov byte [vibracard], 1 ; set ViBRA16X mode
.vibradma0
cmp byte [SBHDMA], 1
jne .vibradma1
mov byte [SBDMAPage], 83h
mov byte [vibracard], 1 ; set ViBRA16X mode
.vibradma1
cmp byte [SBHDMA], 2
jne .vibradma2
mov byte [SBDMAPage], 81h
mov byte [vibracard], 1 ; set ViBRA16X mode
.vibradma2
cmp byte [SBHDMA], 3
jne .vibradma3
mov byte [SBDMAPage], 82h
mov byte [vibracard], 1 ; set ViBRA16X mode
.vibradma3
cmp byte [vibracard], 1
jne .vibrafix
push ax
mov al, [SBHDMA]
mov [SBDMA], al
pop ax
.vibrafix
cmp byte [SBHDMA],4
jae .hdma
; vibra implementation (make sure that zSNES doesn't go back
; to eight-bit-mode mono)
mov byte [SBHDMA],0
cmp byte[vibracard], 1
jne .hdma
push edx
mov edx, vibradetect
call PrintStr
;call WaitForKey
pop edx
; ********** END OF ViBRA16X implementation code **********
.hdma
cmp byte[SBHDMA],4
jne .hdma4
mov byte[SBHDMAPage],8Fh
.hdma4
cmp byte[SBHDMA],5
jne .hdma5
mov byte[SBHDMAPage],8Bh
.hdma5
cmp byte[SBHDMA],6
jne .hdma6
mov byte[SBHDMAPage],89h
.hdma6
cmp byte[SBHDMA],7
jne .hdma7
mov byte[SBHDMAPage],8Ah
.hdma7
cmp byte[DisplayS],1
je .displaysoundstuff
ret
.nfound
cmp byte[soundon],0
je .nosound
mov byte[soundon],0
mov edx, .blasterstr
call PrintStr
call WaitForKey
.nosound
ret
.displaysoundstuff
mov edx,.blasterinfo
call PrintStr
xor eax,eax
mov ax,[SBPort]
call printhex
mov edx,.blinfob
call PrintStr
xor eax,eax
mov al,[SBIrq]
call printnum
mov edx,.blinfoc
call PrintStr
xor eax,eax
mov al,[SBDMA]
call printnum
mov edx,.blinfod
call PrintStr
xor eax,eax
mov al,[SBHDMA]
call printnum
mov edx,.blasterstr2b
call PrintStr
call WaitForKey
%endif
ret
SECTION .bss
.blfound resb 1
.cursetting resb 1
SECTION .data
.string2s db 'BLASTER',0
.blasterstr db 'ERROR : SET BLASTER environment NOT found!',10,13
.blasterstr2 db 'Unable to enable sound.'
.blasterstr2b db 10,13,10,13
.blasterstr3 db 'Press any key to continue.',0
.blasterinfo db 'Sound Blaster Detection Values : ',10,13,10,13
.blinfoa db 'PORT : ',0
.blinfob db 13,10,'IRQ : ',0
.blinfoc db 13,10,'DMA : ',0
.blinfod db 13,10,'HDMA : ',0
NEWSYM PICRotateP, db 20h
NEWSYM PICMaskP, db 21h
;SECTION .text
;*******************************************************
; Variable section

View File

@@ -22,7 +22,7 @@ EXTSYM ccud,cfield,cgfxmod,cgram,coladdb,coladdg,coladdr,cpalval,curblank
EXTSYM curfps,cvidmode,delay,draw16bnng,extlatch,fnamest,fulladdtab,En2xSaI
EXTSYM gammalevel,hirestiledat,ignor512,latchx,latchy,maxbr,ForceNewGfxOff
EXTSYM newengen,nextframe,objptr,pressed,prevpal,res512switch,res640
EXTSYM resolutn,romispal,sbpmofs,sbselec,scaddtype,scadtng,scanlines
EXTSYM resolutn,romispal,scaddtype,scadtng,scanlines
EXTSYM scbcong,selcA000,snesmouse,t1cc,vcache4b,vesa2_bpos,spritetablea
EXTSYM vesa2_clbit,vesa2_gpos,vesa2_rpos,vesa2red10,vesa2selec,vidbuffer
EXTSYM vidbufferm,vram,vsyncon,vbufdptr,KeyStateSelct,forceblnk,soundon
@@ -64,11 +64,17 @@ EXTSYM vidbufferofsb
;EXTSYM Super2xSaI
EXTSYM HalfTransB,HalfTransC
%ifdef __MSDOS__
EXTSYM SB_blank
%endif
NEWSYM ProcVidAsmStart
NEWSYM ScreenScale, db 0 ; If horizontal is scaled or not
NEWSYM TempDebugV, dw 0 ; Temporary Debugging variable
SECTION .bss
NEWSYM ScreenScale, resb 1 ; If horizontal is scaled or not
NEWSYM TempDebugV, resw 1 ; Temporary Debugging variable
SECTION .text
%macro MMXStuff 0
@@ -98,6 +104,9 @@ NEWSYM TempDebugV, dw 0 ; Temporary Debugging variable
SECTION .text
NEWSYM FPUZero
%if 0
; omg this is lame ;P
mov [.Zero],eax
mov [.Zero+4],eax
mov [.Zero2],eax
@@ -111,10 +120,25 @@ NEWSYM FPUZero
ADD EDI,16
DEC ECX
JNZ .TopOfLoop
%else
fld1
fsub st0,st0
.TopOfLoop
fst qword [edi]
fst qword [edi+8]
add edi,16
dec ecx
jnz .TopOfLoop
fstp st0
%endif
ret
.Zero dd 0,0
.Zero2 dd 0,0
%if 0
SECTION .bss
.Zero resd 2
.Zero2 resd 2
SECTION .text
%endif
;*******************************************************
; ShowVideo Processes & displays video
@@ -240,20 +264,25 @@ NEWSYM processmouse
pop esi
ret
SECTION .data
.ssautoen db 'AUTOFIRE ENABLED.',0
.ssautodi db 'AUTOFIRE DISABLED.',0
NEWSYM ssautosw, db 20h
NEWSYM ssautoswb, db 0
NEWSYM mousebuttons, dw 0
NEWSYM mousexpos, dw 0
NEWSYM mousexdir, db 0
NEWSYM mouseypos, dw 0
NEWSYM mouseydir, db 0
NEWSYM mousechan, db 0
NEWSYM mousexloc, dw 128
NEWSYM mouseyloc, dw 112
SECTION .bss
NEWSYM ssautoswb, resb 1
NEWSYM mousebuttons, resw 1
NEWSYM mousexpos, resw 1
NEWSYM mousexdir, resb 1
NEWSYM mouseypos, resw 1
NEWSYM mouseydir, resb 1
NEWSYM mousechan, resb 1
SECTION .text
;*******************************************************
; Output Hex Outputs the hex in al @ esi
;*******************************************************
@@ -464,6 +493,7 @@ NEWSYM outputhex16
pop edi
ret
SECTION .data
NEWSYM ASCII2Font
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,30h,00h,00h,00h,00h,00h,00h
@@ -595,6 +625,8 @@ NEWSYM FontData
; +, 38 `, 41 .5,4A
; ,, 39 ^, 42
SECTION .text
;*******************************************************
; Output Char Outputs char in al @ esi
;*******************************************************
@@ -657,8 +689,10 @@ NEWSYM outputchar16b
pop edi
ret
SECTION .data
NEWSYM textcolor, db 128
NEWSYM textcolor16b, dw 0FFFFh
SECTION .text
NEWSYM outputchar5x5
push edi
@@ -1155,13 +1189,15 @@ NEWSYM OutputGraphicString16bb
;*******************************************************
; For Save State
NEWSYM csounddisable, db 0
NEWSYM statefileloc, dd 0
newestfileloc db 0
newestfiledate dd 0
f3menuen db 0
PrevPictureVal db 0
CurPictureVal db 0
SECTION .bss
NEWSYM csounddisable, resb 1
NEWSYM statefileloc, resd 1
newestfileloc resb 1
newestfiledate resd 1
f3menuen resb 1
PrevPictureVal resb 1
CurPictureVal resb 1
SECTION .text
NEWSYM drawhline
.loop
@@ -1591,16 +1627,7 @@ NEWSYM saveselect
;cmp byte[OSPort],1
;ja .nosound
%ifdef __MSDOS__
push es
mov es,[sbselec]
mov edi,[sbpmofs]
mov ecx,320
.loopa
mov dword[es:edi],0
add edi,4
dec ecx
jnz .loopa
pop es
call SB_blank
%endif
.nosound
cmp byte[cbitmode],1
@@ -1805,11 +1832,13 @@ NEWSYM saveselect
mov byte[ForceNonTransp],0
ret
.allred dw 0
.allgrn dw 0
.allgrnb dw 0
.blue dw 0
.stepb dw 0
SECTION .bss ;ALIGN=32
.allred resw 1
.allgrn resw 1
.allgrnb resw 1
.blue resw 1
.stepb resw 1
SECTION .text
; Start 16-bit stuff here
.16b
@@ -2110,13 +2139,17 @@ NEWSYM saveselect
call Clear2xSaIBuffer
ret
SECTION .data
.stringa db 'PLEASE SELECT',0
.stringb db 'SAVE STATE SLOT',0
.stringc db 'USE CURSOR KEYS',0
.stringd db 'TO MOVE AND',0
.stringe db 'ENTER TO SELECT',0
NEWSYM ForceNonTransp, db 0
SECTION .bss
NEWSYM ForceNonTransp, resb 1
SECTION .text
NEWSYM testpressed8b
test byte[pressed+2],1
@@ -2214,7 +2247,10 @@ NEWSYM testpressed8b
; MakePal Changes the entire palette
;*******************************************************
; set the brightness with [maxbr]
NEWSYM cgramback, times 256 dw 0
SECTION .bss ;ALIGN=32
NEWSYM cgramback, resw 256
SECTION .text
NEWSYM doveg
pushad
; backup cgram
@@ -2285,7 +2321,9 @@ NEWSYM dovegrest
popad
ret
blahblahblah dw 0
SECTION .bss ;ALIGN=32
blahblahblah resw 1
SECTION .text
NEWSYM dosmakepal
cmp byte[V8Mode],1
@@ -2422,7 +2460,9 @@ NEWSYM makepalb
call dovegrest
.noveg2
ret
NEWSYM tempco0, dw 0
SECTION .bss ;ALIGN=32
NEWSYM tempco0, resw 1
SECTION .text
;*******************************************************
; ChangePal Sets up the palette
@@ -2563,7 +2603,9 @@ NEWSYM doschangepal
.noveg2
ret
NEWSYM prevbright, db 0 ; previous brightness
SECTION .bss
NEWSYM prevbright, resb 1 ; previous brightness
SECTION .text
;*******************************************************
; CopyVid Copies buffer into video
@@ -2686,10 +2728,12 @@ NEWSYM showfps
call outputhex
ret
NEWSYM spcdebugaddr, dd 0
NEWSYM tempoffset, dw 0
SECTION .bss ;ALIGN=32
NEWSYM spcdebugaddr, resd 1
NEWSYM tempoffset, resw 1
NEWSYM Testval, dd 0
NEWSYM Testval, resd 1
SECTION .text
NEWSYM ClockOutput
@@ -2989,13 +3033,16 @@ NEWSYM ClockOutputB
popad
ret
SECTION .data
hextestfilen db 'DSP1DUMP.DAT',0
NEWSYM SoundTest, db 0
SECTION .bss
NEWSYM SoundTest, resb 1
blahrnr dw 0
blahrnr resw 1
SECTION .text
NEWSYM hextestoutput
@@ -3106,15 +3153,17 @@ NEWSYM hextestoutput
call outputhex
ret
NEWSYM SoundPlayed0, db 0
NEWSYM SoundPlayed1, db 0
NEWSYM SoundPlayed2, db 0
NEWSYM SoundPlayed3, db 0
NEWSYM SoundPlayed4, db 0
NEWSYM SoundPlayed5, db 0
NEWSYM SoundPlayed6, db 0
NEWSYM SoundPlayed7, db 0
NEWSYM ngfont, db 0
SECTION .bss
NEWSYM SoundPlayed0, resb 1
NEWSYM SoundPlayed1, resb 1
NEWSYM SoundPlayed2, resb 1
NEWSYM SoundPlayed3, resb 1
NEWSYM SoundPlayed4, resb 1
NEWSYM SoundPlayed5, resb 1
NEWSYM SoundPlayed6, resb 1
NEWSYM SoundPlayed7, resb 1
NEWSYM ngfont, resb 1
SECTION .text
NEWSYM ShowSound
add esi,[vidbuffer]
@@ -3207,21 +3256,26 @@ NEWSYM waitvsync
jz .loop2 ;updating the screen
ret
SECTION .data
NEWSYM prevengval, db 10
NEWSYM chaton, db 0
NEWSYM chatstrL, times 140 db 0
NEWSYM chatLpos, dd 0
NEWSYM chatstrR, times 140 db 0
NEWSYM chatstrR2, times 140 db 0
NEWSYM chatstrR3, times 140 db 0
NEWSYM chatstrR4, times 140 db 0
NEWSYM chatstrR5, times 140 db 0
NEWSYM chatRTL, dd 0
NEWSYM chatRTL2, dd 0
NEWSYM chatRTL3, dd 0
NEWSYM chatRTL4, dd 0
NEWSYM chatRTL5, dd 0
NEWSYM chatTL, dd 0
SECTION .bss
NEWSYM chaton, resb 1
NEWSYM chatstrL, resb 140
NEWSYM chatLpos, resd 1
NEWSYM chatstrR, resb 140
NEWSYM chatstrR2, resb 140
NEWSYM chatstrR3, resb 140
NEWSYM chatstrR4, resb 140
NEWSYM chatstrR5, resb 140
NEWSYM chatRTL, resd 1
NEWSYM chatRTL2, resd 1
NEWSYM chatRTL3, resd 1
NEWSYM chatRTL4, resd 1
NEWSYM chatRTL5, resd 1
NEWSYM chatTL, resd 1
SECTION .data
NEWSYM chatreqtable
db 0 ,2 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,0
db 'Q','W','E','R','T','Y','U','I','O','P','[',']',13 ,0 ,'A','S'
@@ -3233,6 +3287,7 @@ NEWSYM chatreqtable
db 'D','F','G','H','J','K','L',':','"','~',1 ,'|','Z','X','C','V'
db 'B','N','M','<','>','?',1 ,0 ,0 ,' ',0 ,0 ,0 ,0 ,0 ,0
SECTION .text
; Letters transferred & string cleared when chatstrL[0]!=0 and chaton=0
; Disable all transfers when chaton=1 (except joysticks and upper keyboard
@@ -3542,7 +3597,9 @@ NEWSYM copyvid
dec dword[MessageOn]
.nomsg
jmp vidpaste
.sdrawptr dd 0
SECTION .bss ;ALIGN=32
.sdrawptr resd 1
SECTION .text
NEWSYM vidpaste
cmp byte[vsyncon],0
@@ -3664,7 +3721,9 @@ NEWSYM vidpaste
jnz .ssloopb
jmp .returnfromdraw
.SSRedCo dw 0
SECTION .bss ;ALIGN=32
.SSRedCo resw 1
SECTION .text
NEWSYM Clear2xSaIBuffer
@@ -3678,14 +3737,18 @@ NEWSYM Clear2xSaIBuffer
jnz .nextb
ret
NEWSYM lastfps, db 0 ; stores the last fps encountered
NEWSYM lastfps2, db 0 ; stores the last fps encountered
NEWSYM curfps2, db 0 ; current video refresh fps
NEWSYM Msgptr, dd 0 ; Pointer to message
NEWSYM MessageOn, dd 0 ; Message On Countdown
SECTION .data
NEWSYM MsgCount, dd 120 ; How long message will stay (PAL = 100)
NEWSYM FPSOn, db 0
SECTION .bss
NEWSYM lastfps, resb 1 ; stores the last fps encountered
NEWSYM lastfps2, resb 1 ; stores the last fps encountered
NEWSYM curfps2, resb 1 ; current video refresh fps
NEWSYM Msgptr, resd 1 ; Pointer to message
NEWSYM MessageOn, resd 1 ; Message On Countdown
NEWSYM FPSOn, resb 1
SECTION .data
prevresolutn dd 224
NEWSYM SScopeCursor
@@ -3710,4 +3773,6 @@ db 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
SECTION .text
NEWSYM ProcVidAsmEnd

View File

@@ -346,7 +346,7 @@ void SineBlob(int x, int y, int radius, int height, int page)
int left,top,right,bottom;
int square, dist;
int radsquare = radius * radius;
float length = (1024.0/(float)radius)*(1024.0/(float)radius);
float length = (1024.0f/(float)radius)*(1024.0f/(float)radius);
if(x<0) x = 1+radius+ rand()%(SCRW-2*radius-1);
if(y<0) y = 1+radius+ rand()%(SCRH-2*radius-1);

View File

@@ -17,9 +17,9 @@
%include "macros.mac"
EXTSYM dssel,selcA000,selcB800,selc0040,previdmode,DosExit,ZFileSystemInit
EXTSYM previdmode,DosExit,ZFileSystemInit
EXTSYM getcmdline,GUIRestoreVars,getcfg,obtaindir,ConvertJoyMap,tparms
EXTSYM preparedir,getblaster,Force8b,SBHDMA
EXTSYM preparedir,SBHDMA
EXTSYM ccmdline
EXTSYM FilenameStart
EXTSYM spcon
@@ -51,9 +51,8 @@ EXTSYM ZFileMKDir,ZFileCHDir,ZFileRMDir,CHPath,MKPath,RMPath
EXTSYM ZFileGetDir,DriveNumber,DirName
EXTSYM _getdrive
EXTSYM DTALoc,DTALocPos,ZFileFindATTRIB,ZFileFindFirst,ZFileFindNext,ZFileFindPATH
EXTSYM oldhand9s,oldhand9o,interror,oldhand8s,oldhand8o,oldhandSBs,oldhandSBo
EXTSYM NoSoundReinit,soundon,DSPDisable,SBInt,NoSoundReinit,PICMaskP,SBIrq
EXTSYM SBHandler,InitSB,handler8h,handler9h,init60hz,Interror,init18_2hz,DeInitSPC
EXTSYM NoSoundReinit,soundon,DSPDisable,NoSoundReinit
EXTSYM init60hz,init18_2hz
EXTSYM Start60HZ
EXTSYM pressed
EXTSYM RaisePitch,AdjustFrequency
@@ -104,7 +103,7 @@ EXTSYM SetMouseX,SetMouseY
EXTSYM T36HZEnabled
EXTSYM MouseButton
EXTSYM GUIinit36_4hz,GUIoldhand9s,GUIoldhand9o,GUIoldhand8s,GUIoldhand8o
EXTSYM GUIhandler9h,GUIhandler8h,GUIinit18_2hz
EXTSYM GUIinit18_2hz
EXTSYM Start36HZ
EXTSYM Stop36HZ
EXTSYM BufferSizeW,BufferSizeB,ProcessSoundBuffer
@@ -134,6 +133,7 @@ EXTSYM V8Mode,GrayscaleMode
EXTSYM PrevWinMode,PrevFSMode
EXTSYM _imp__GetLocalTime@4
;EXTSYM FrameSemaphore
%ifdef __MINGW__
NEWSYM WinIntRFAsmStart
@@ -269,7 +269,9 @@ NEWSYM PrintStr ; Print ASCIIZ string
ret
NEWSYM wfkey, db 0
SECTION .bss
NEWSYM wfkey, resb 1
SECTION .text
NEWSYM WaitForKey ; Wait for a key to be pressed
pushad
@@ -288,7 +290,9 @@ NEWSYM OSExit
call exit
jmp DosExit
NEWSYM TempHandle, dd 0
SECTION .bss
NEWSYM TempHandle, resd 1
SECTION .text
NEWSYM Open_File
pushad
@@ -310,10 +314,10 @@ NEWSYM Open_File
popad
stc
ret
mov ax,3D00h
int 21h
; mov ax,3D00h
; int 21h
; return bx = file handle, carry = error
ret
; ret
NEWSYM Open_File_Write
pushad
@@ -335,10 +339,10 @@ NEWSYM Open_File_Write
popad
stc
ret
mov ax,3D01h
int 21h
; mov ax,3D01h
; int 21h
; return bx = file handle, carry = error
ret
; ret
NEWSYM Create_File
pushad
@@ -356,11 +360,11 @@ NEWSYM Create_File
popad
stc
ret
mov ah,3Ch
mov cx,0
int 21h
; mov ah,3Ch
; mov cx,0
; int 21h
; return bx = file handle
ret
; ret
NEWSYM Write_File
mov dword[ZFileWriteHandle],0
@@ -380,9 +384,9 @@ NEWSYM Write_File
mov eax,0
stc
ret
mov ah,40h
int 21h
ret
; mov ah,40h
; int 21h
; ret
NEWSYM Read_File
mov dword[ZFileReadHandle],0
@@ -396,9 +400,9 @@ NEWSYM Read_File
mov eax,[TempVarSeek]
clc
ret
mov ah,3Fh
int 21h
ret
; mov ah,3Fh
; int 21h
; ret
NEWSYM Delete_File
mov [ZFileDelFName],edx
@@ -406,9 +410,9 @@ NEWSYM Delete_File
call ZFileDelete
popad
ret
mov ah,41h
int 21h
ret
; mov ah,41h
; int 21h
; ret
NEWSYM Close_File
mov dword[ZCloseFileHandle],0
@@ -418,9 +422,9 @@ NEWSYM Close_File
popad
clc
ret
mov ah,3Eh
int 21h
ret
; mov ah,3Eh
; int 21h
; ret
NEWSYM File_Seek
mov word[ZFileSeekPos+2],cx
@@ -435,9 +439,9 @@ NEWSYM File_Seek
mov dx,cx
ret
; seek to cx:dx from 0 position, return carry as error
mov ax,4200h
int 21h
ret
; mov ax,4200h
; int 21h
; ret
NEWSYM File_Seek_End
mov word[ZFileSeekPos+2],cx
@@ -456,9 +460,9 @@ NEWSYM File_Seek_End
mov dx,[TempVarSeek+2]
ret
; seek to cx:dx from end position, and return file location in dx:ax
mov ax,4202h
int 21h
ret
; mov ax,4202h
; int 21h
; ret
NEWSYM Get_Time
pushad
@@ -493,10 +497,10 @@ NEWSYM Get_File_Date
mov ecx,[ZFTime]
ret
; return packed date in dx:cx
mov ah,57h
mov al,00h
int 21h
ret
; mov ah,57h
; mov al,00h
; int 21h
; ret
RefreshKeybBuffer:
@@ -542,7 +546,7 @@ RefreshKeybBuffer:
mov ebx,[HoldKey]
cmp ebx,0A8h
jb .skipdecval
sub ebx,80h
add ebx,-80h
.skipdecval
cmp ebx,58h
jae .none
@@ -567,15 +571,18 @@ RefreshKeybBuffer:
mov [Keybtail],al
.none
ret
Keybhead db 0
Keybtail db 0
HoldKey dd 0
HoldKeyBuf times 16 db 0
PKeyBuf times 100h db 0
NEWSYM CurKeyPos, dd 0
NEWSYM CurKeyReadPos, dd 0
NEWSYM KeyBuffer, times 16 dd 0
SECTION .bss
Keybhead resb 1
Keybtail resb 1
HoldKey resd 1
HoldKeyBuf resb 16
PKeyBuf resb 100h
NEWSYM CurKeyPos, resd 1
NEWSYM CurKeyReadPos, resd 1
NEWSYM KeyBuffer, resd 16
SECTION .text
NEWSYM Check_Key
mov al,[CurKeyPos]
@@ -618,7 +625,7 @@ NEWSYM Get_Key
and dword[CurKeyReadPos],0Fh
ret
.upper
sub word[KeyBuffer+eax*4],100h
add word[KeyBuffer+eax*4],-100h
xor al,al
ret
@@ -633,7 +640,7 @@ NEWSYM Get_Key
test bl,80h
jz .notupperkey
xor bl,bl
sub byte[HoldKeyBuf+eax],80h
add byte[HoldKeyBuf+eax],-80h
jmp .yesupperkey
.notupperkey
inc al
@@ -649,6 +656,7 @@ NEWSYM Get_Key
; return key in al
ret
SECTION .data
KeyConvTable
db 255,27 ,'1','2','3','4','5','6' ; 00h
db '7','8','9','0','-','=',8 ,9
@@ -673,6 +681,7 @@ KeyConvTableS
db 255,255,255,255,255,255,255,255 ; 40h
db 200,201,202,203,204,205,206,207
db 208,209,210,211,255,255,255,255 ; 50h
SECTION .text
; mov dl,[SRAMDrive]
; mov ebx,SRAMDir
@@ -703,9 +712,9 @@ NEWSYM Change_Single_Dir
stc
ret
; Dir in edx, return error in carry flag
mov ah,3Bh
int 21h
ret
; mov ah,3Bh
; int 21h
; ret
NEWSYM Create_Dir
; change to dir in edx
@@ -721,9 +730,9 @@ NEWSYM Create_Dir
popad
stc
ret
mov ah,39h
int 21h
ret
; mov ah,39h
; int 21h
; ret
NEWSYM Remove_Dir
; remove dir in edx
@@ -739,9 +748,9 @@ NEWSYM Remove_Dir
popad
stc
ret
mov ah,3Ah
int 21h
ret
; mov ah,3Ah
; int 21h
; ret
; mov dl,[LoadDrive]
; mov ebx,LoadDir
@@ -780,20 +789,20 @@ NEWSYM Change_Dir
ret
; dl = drive, ebx = dir
push ebx
mov ah,0Eh
int 21h
mov ah,3Bh
mov edx,gotoroot
int 21h
pop ebx
mov edx,ebx
cmp byte[edx],0
je .nodir
mov ah,3Bh
int 21h
.nodir
ret
; push ebx
; mov ah,0Eh
; int 21h
; mov ah,3Bh
; mov edx,gotoroot
; int 21h
; pop ebx
; mov edx,ebx
; cmp byte[edx],0
; je .nodir
; mov ah,3Bh
; int 21h
;.nodir
; ret
; mov ebx,LoadDir
; mov edx,LoadDrive
@@ -820,21 +829,21 @@ NEWSYM Get_Dir
call _getdrive
; mov ah,19h
; int 21h
sub al,1
add al,-1
pop edx
mov [edx],al
ret
push edx
mov ah,47h
mov dl,0
mov esi,ebx
int 21h
mov ah,19h
int 21h
pop edx
mov [edx],al
ret
; push edx
; mov ah,47h
; mov dl,0
; mov esi,ebx
; int 21h
; mov ah,19h
; int 21h
; pop edx
; mov [edx],al
; ret
NEWSYM Get_First_Entry
; cx = attributes, edx = pointer to wildcard
@@ -855,10 +864,10 @@ NEWSYM Get_First_Entry
popad
stc
ret
mov ah,4Eh
mov al,0
int 21h
ret
; mov ah,4Eh
; mov al,0
; int 21h
; ret
NEWSYM Get_Next_Entry
mov dword[DTALocPos],DTALoc
@@ -873,9 +882,9 @@ NEWSYM Get_Next_Entry
popad
stc
ret
mov ah,04Fh
int 21h
ret
; mov ah,04Fh
; int 21h
; ret
NEWSYM Set_DTA_Address
; Only needed for dos stuff
@@ -980,91 +989,93 @@ NEWSYM changepal ; 8-bit palette set (changes only)
NEWSYM displayfpspal
ret
mov al,128
mov dx,03C8h
out dx,al
inc dx
mov al,63
out dx,al
out dx,al
out dx,al
mov al,128+64
mov dx,03C8h
out dx,al
inc dx
mov al,0
out dx,al
out dx,al
out dx,al
ret
; mov al,128
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,63
; out dx,al
; out dx,al
; out dx,al
; mov al,128+64
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,0
; out dx,al
; out dx,al
; out dx,al
; ret
NEWSYM superscopepal
ret
mov al,128+16
mov dx,03C8h
out dx,al
inc dx
mov al,63
out dx,al
xor al,al
out dx,al
out dx,al
ret
; mov al,128+16
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,63
; out dx,al
; xor al,al
; out dx,al
; out dx,al
; ret
NEWSYM saveselectpal
ret
; set palette of colors 128,144, and 160 to white, blue, and red
mov al,128
mov dx,03C8h
out dx,al
inc dx
mov al,63
out dx,al
out dx,al
out dx,al
mov al,144
mov dx,03C8h
out dx,al
inc dx
xor al,al
out dx,al
out dx,al
mov al,50
out dx,al
mov al,160
mov dx,03C8h
out dx,al
inc dx
mov al,45
out dx,al
xor al,al
out dx,al
out dx,al
mov al,176
mov dx,03C8h
out dx,al
inc dx
mov al,47
out dx,al
xor al,al
out dx,al
out dx,al
mov al,208
mov dx,03C8h
out dx,al
inc dx
mov al,50
out dx,al
mov al,25
out dx,al
xor al,al
out dx,al
ret
; mov al,128
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,63
; out dx,al
; out dx,al
; out dx,al
; mov al,144
; mov dx,03C8h
; out dx,al
; inc dx
; xor al,al
; out dx,al
; out dx,al
; mov al,50
; out dx,al
; mov al,160
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,45
; out dx,al
; xor al,al
; out dx,al
; out dx,al
; mov al,176
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,47
; out dx,al
; xor al,al
; out dx,al
; out dx,al
; mov al,208
; mov dx,03C8h
; out dx,al
; inc dx
; mov al,50
; out dx,al
; mov al,25
; out dx,al
; xor al,al
; out dx,al
; ret
; ** init video mode functions **
SECTION .data
NEWSYM firstvideo, dd 1
SECTION .text
NEWSYM initvideo ; Returns 1 in videotroub if trouble occurs
@@ -1131,7 +1142,10 @@ NEWSYM deinitvideo
ret
; ** copy video mode functions **
NEWSYM converta, dd 0
SECTION .bss
NEWSYM converta, resd 1
SECTION .text
NEWSYM DrawScreen ; In-game screen render w/ triple buffer check
cmp dword [converta],1
jne near .skipconv
@@ -1171,7 +1185,7 @@ NEWSYM vidpastecopyscr ; GUI screen render
mov eax,[vidbuffer]
mov ecx,224*288
mov edx,ecx
sub ecx,288
add ecx,-288
dec edx
.loop
xor ebx,ebx
@@ -1257,7 +1271,6 @@ NEWSYM GUIBIFIL, db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
NEWSYM GUITBWVID, db 0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1 ; Triple Buffering (Win)
NEWSYM GUISMODE, db 0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0
NEWSYM GUIDSMODE, db 0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1
NEWSYM GUIMBVID, db 1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0
SECTION .text
@@ -1391,12 +1404,11 @@ NEWSYM ScanCodeListing
db 'P2B','P2Y','P2S','P2T','P2U','P2D','P2L','P2R'
db 'P2A','P2X','P2L','P2R',' ',' ',' ',' '
SECTION .text
SECTION .data
NEWSYM ZSNESBase, dd 0
TempVarSeek dd 0
gotoroot db '\',0
SECTION .bss
NEWSYM ZSNESBase, resd 1
TempVarSeek resd 1
SECTION .text
; ****************************
@@ -1408,13 +1420,14 @@ NEWSYM Init_Mouse
mov eax,01h
ret
NEWSYM WMouseX, dd 0
NEWSYM WMouseY, dd 0
NEWSYM WMouseMoveX, dd 0
NEWSYM WMouseMoveY, dd 0
NEWSYM WMouseButton, dd 0
SECTION .bss
NEWSYM WMouseX, resd 1
NEWSYM WMouseY, resd 1
NEWSYM WMouseMoveX, resd 1
NEWSYM WMouseMoveY, resd 1
NEWSYM WMouseButton, resd 1
SECTION .text
NEWSYM Get_MouseData ; Returns both pressed and coordinates
@@ -1543,15 +1556,18 @@ NEWSYM Check60hz
; Call the timer update function here
pushad
call CheckTimers
; call FrameSemaphore
popad
ret
SECTION .data
BitPosR db 11
BitPosG db 5
BitPosB db 0
BitSizeR db 5
BitSizeG db 6
BitSizeB db 5
SECTION .text
InitializeGfxStuff:
@@ -1714,19 +1730,22 @@ NEWSYM SetInputDevice
mov dword[eax+44],46
ret
SECTION .bss
; ****************************
; TCP/IP Stuff
; ****************************
; TCPIPPortNum
NEWSYM TCPIPStatus, db 0
NEWSYM PacketSendSize, dd 0
NEWSYM PacketRecvSize, dd 0
NEWSYM PacketRecvPtr, dd 0
NEWSYM PacketSendArray, times 2048+256 db 0
NEWSYM PacketRecvArray, times 2048+256 db 0
NEWSYM IPAddrStr, times 20 db 0
NEWSYM RemoteDisconnect, db 0
NEWSYM TCPIPStatus, resb 1
NEWSYM PacketSendSize, resd 1
NEWSYM PacketRecvSize, resd 1
NEWSYM PacketRecvPtr, resd 1
NEWSYM PacketSendArray, resb 2048+256
NEWSYM PacketRecvArray, resb 2048+256
NEWSYM IPAddrStr, resb 20
NEWSYM RemoteDisconnect, resb 1
SECTION .text
NEWSYM TCPIPStartServer
mov byte[RemoteDisconnect],0
@@ -1772,7 +1791,9 @@ NEWSYM TCPIPWaitForConnection
popad
mov eax,-1
ret
.temp dd 0
SECTION .bss
.temp resd 1
SECTION .text
NEWSYM TCPIPInitConnectToServer
pushad
@@ -1825,7 +1846,9 @@ NEWSYM TCPIPConnectToServer
popad
mov eax,[.temp]
ret
.temp dd 0
SECTION .bss
.temp resd 1
SECTION .text
NEWSYM TCPIPConnectToServerW
; int ConnectServer(char *servername, unsigned short port)
@@ -1843,7 +1866,9 @@ NEWSYM TCPIPConnectToServerW
popad
mov eax,[.temp]
ret
.temp dd 0
SECTION .bss
.temp resd 0
SECTION .text
NEWSYM TCPIPStoreByte
; Store al into the array
@@ -2025,17 +2050,93 @@ NEWSYM GetTimeInSeconds
add eax,ebx
ret
SECTION .bss
SystemTime:
.wYear dw 0
.wMonth dw 0
.wDayOfWeek dw 0
.wDay dw 0
.wHour dw 0
.wMinute dw 0
.wSecond dw 0
.wMilliseconds dw 0
.wYear resw 1
.wMonth resw 1
.wDayOfWeek resw 1
.wDay resw 1
.wHour resw 1
.wMinute resw 1
.wSecond resw 1
.wMilliseconds resw 1
SECTION .text
%ifdef __MINGW__
NEWSYM WinIntRFAsmEnd
%endif
%if 0
; here's some code to blur a 512x448 region inside a 640x wide buffer
; code "borrowed" from KEGA 0.04b
%macro blurcrap 0
mov eax,ebx
mov ebx,ecx
mov ecx,dword [edi+4]
shr ecx,1
and ecx,ebp
mov edx,ecx
add edx,eax
shr edx,1
and edx,ebp
add edx,ebx
mov word [edi+2],dx
push edx
shr edx,1
shr esi,1
and edx,ebp
and esi,ebp
add edx,esi
mov word [edi],dx
pop esi
add edi,4
%endmacro
NEWSYM fastblur
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebp, 0111101111101111b
cmp dword [converta], 1
jne .565
mov ebp, 0011110111101111b
.565
mov edi, [esp+1Ch]
mov ecx, 448
.loop
push ecx
xor ebx, ebx
mov ecx, dword [edi]
xor esi, esi
shr ecx, 1
and ecx, ebp
%rep 256
blurcrap
%endrep
pop ecx
add edi, 256
dec ecx
jne .loop
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret
%endif

View File

@@ -241,6 +241,16 @@ extern "C"
void drawscreenwin(void);
DWORD LastUsedPos=0;
DWORD CurMode=-1;
int InitDirectDraw();
int ReInitSound();
void initDirectDraw()
{
InitDirectDraw();
}
void reInitSound()
{
ReInitSound();
}
}
void DDrawError(){