From 0480456f7dcecdee15429b8c479e1323f89723bb Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Sun, 16 Mar 2003 23:40:07 +0000 Subject: [PATCH] A lot of updates --- zsnes/src/Makefile.in | 3 +- zsnes/src/burn.c | 302 +++ zsnes/src/cpu/dsp.asm | 39 +- zsnes/src/cpu/dspproc.asm | 3576 ++++++++++++----------------------- zsnes/src/cpu/execute.asm | 325 ++-- zsnes/src/cpu/spc700.asm | 178 +- zsnes/src/dos/modemrtn.asm | 49 +- zsnes/src/gui/gui.asm | 406 ++-- zsnes/src/gui/guicheat.inc | 14 +- zsnes/src/gui/guikeys.inc | 96 +- zsnes/src/gui/guiload.inc | 62 +- zsnes/src/gui/guimisc.inc | 32 +- zsnes/src/gui/guimouse.inc | 123 +- zsnes/src/gui/guinetpl.inc | 68 +- zsnes/src/gui/guiwindp.inc | 262 ++- zsnes/src/gui/menu.asm | 184 +- zsnes/src/link.win32 | 2 +- zsnes/src/makefile.dos | 7 +- zsnes/src/makefile.win | 3 +- zsnes/src/smoke.c | 4 - zsnes/src/ui.asm | 301 +-- zsnes/src/video/procvid.asm | 219 ++- zsnes/src/water.c | 2 +- zsnes/src/win/winintrf.asm | 497 +++-- zsnes/src/win/winlink.cpp | 10 + 25 files changed, 3225 insertions(+), 3539 deletions(-) create mode 100644 zsnes/src/burn.c diff --git a/zsnes/src/Makefile.in b/zsnes/src/Makefile.in index b89a78c2..f11d5faf 100644 --- a/zsnes/src/Makefile.in +++ b/zsnes/src/Makefile.in @@ -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\ diff --git a/zsnes/src/burn.c b/zsnes/src/burn.c new file mode 100644 index 00000000..c440729f --- /dev/null +++ b/zsnes/src/burn.c @@ -0,0 +1,302 @@ +#include +#include +#include +#include + +#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=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 (x10) 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; + } +} + diff --git a/zsnes/src/cpu/dsp.asm b/zsnes/src/cpu/dsp.asm index a3c5e540..2c58a63c 100644 --- a/zsnes/src/cpu/dsp.asm +++ b/zsnes/src/cpu/dsp.asm @@ -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 diff --git a/zsnes/src/cpu/dspproc.asm b/zsnes/src/cpu/dspproc.asm index 1e3eaae1..3b9affd8 100644 --- a/zsnes/src/cpu/dspproc.asm +++ b/zsnes/src/cpu/dspproc.asm @@ -126,19 +126,26 @@ EXTSYM delay EXTSYM spcBuffera EXTSYM DSPMem EXTSYM SoundInterpType -EXTSYM NoiseData,SoundCompD,Voice0Disable,csounddisable,dssel,spcRamcmp +EXTSYM NoiseData,SoundCompD,Voice0Disable,csounddisable,spcRamcmp EXTSYM cfgecho,Surround,SoundBufEn EXTSYM echobuf,ENVDisable EXTSYM LowPassFilterType EXTSYM NoiseDisTemp +%ifdef __MSDOS__ +EXTSYM SB_alloc_dma,SB_quality_limiter,vibracard +%endif + NEWSYM DspProcAsmStart - - SECTION .data +NEWSYM SBHDMA, db 0 ; stupid legacy code ... + + +SECTION .bss + ; MixEcho ; modpitch @@ -171,7 +178,7 @@ SECTION .data ; Jump to Address [0000] DSPInterP: - times 1024 dw 0 + resw 1024 section .data @@ -383,10 +390,10 @@ CubicSpline: %include "cpu/fir_tables.inc" -SECTION .data ;ALIGN=32 +SECTION .bss ;ALIGN=32 -NEWSYM spcWptr, times 16 dd 0 ; SPC Write pointers (point to their own functions) -NEWSYM spcRptr, times 16 dd 0 ; SPC Read pointers (point to their own functions) +NEWSYM spcWptr, resd 16 ; SPC Write pointers (point to their own functions) +NEWSYM spcRptr, resd 16 ; SPC Read pointers (point to their own functions) ;dspWptr times 256 dd 0 ; DSP Write pointers (point to their own functions) ;dspRptr times 256 dd 0 ; DSP Read pointers (point to their own functions) @@ -395,13 +402,10 @@ SECTION .data ;ALIGN=32 NEWSYM SoundQuality, dd 2 NEWSYM StereoSound, db 0 NEWSYM SBToSPC, dd 22050 +NEWSYM dspPAdj, dd 0 NEWSYM NumBRRconv, dd 0 NEWSYM BufferSizeB, dd 320 NEWSYM BufferSizeW, dd 640 -NEWSYM SBBufferLoc, dd 0 -NEWSYM SBBufferMov, dd 0 -NEWSYM SBBufferInc, dd 0 -NEWSYM SoundInterrupt, dd 0 ;TIME_CONSTANT = 256 - 1000000 / frequency @@ -409,8 +413,12 @@ NEWSYM BufferSize, dw 320, 320, 320, 500, 320, 400, 400 NEWSYM BufferSizes, dw 320, 320, 500, 900, 400, 750, 750 NEWSYM SoundSpeeds, db 131, 165, 211, 233, 193, 225, 235 ; 8khz,11khz,22khz,44khz NEWSYM SoundSpeedt, db 193, 210, 233 ; 8khz,11khz,22khz +%ifdef __MSDOS__ NEWSYM SBToSPCSpeeds, dd 8000,10989,22222,43478,15874,32258,48000 NEWSYM SBToSPCSpeeds2, dd 8192,11289,22579,45158,16384,32768,48000 +%else +NEWSYM SBToSPCSpeeds, dd 8000,11025,22050,44100,16000,32000,48000 +%endif NEWSYM NumofSPCBlock, dd 626,456,228,114,314,156,104 NEWSYM SPCBlockNum, dd 0 NEWSYM NoiseSpeeds @@ -420,7 +428,7 @@ NEWSYM NoiseSpeeds section .text - +%if 0 NEWSYM conv2speedb .next mov eax,[esi] @@ -439,19 +447,14 @@ NEWSYM conv2speedb dec ecx jnz .next ret +%endif %macro initpitchm 1 mov ax,[DSPMem+02h+%1*10h] mov word[Voice0Pitch+%1*2],ax - xor ebx,ebx - xor edx,edx - and eax,03FFFh - shl eax,2 - mov dl,ah - shl eax,24 - mov ebx,[SBToSPC] - div ebx - shl eax,1 + And EAX, 03FFFh + Mul dword [dspPAdj] + ShRD EAX,EDX,8 mov [Voice0Freq+%1*4],eax ; modpitch %endmacro @@ -467,6 +470,7 @@ NEWSYM initpitch initpitchm 7 ret +%if 0 %macro fixdspm 1 mov esi,%1 mov ecx,8 @@ -476,7 +480,7 @@ NEWSYM initpitch NEWSYM fixdsp ; mov dword[SBRateb],22050 cmp dword[SBRateb],0 - je near .nofix + je .nofix fixdspm Voice0Freq fixdspm Voice0Time fixdspm Voice0Attack @@ -492,15 +496,14 @@ NEWSYM fixdsp mov [SBRateb],ebx .nofix ret +%endif NEWSYM conv2speed .next mov eax,[edi] mov ebx,[SBToSPC] - shr ebx,4 mul ebx mov ebx,11025 - shr ebx,4 div ebx mov [esi],eax add esi,4 @@ -509,15 +512,26 @@ NEWSYM conv2speed jnz .next ret +EXTSYM MMXSupport NEWSYM AdjustFrequency mov al,[SoundInterpType] + mov ah,[MMXSupport] + cmp ah,0 + jne .mmx + cmp al,3 + jne .mmx + mov al,1 + mov [SoundInterpType],al +.mmx or al,al - je .notgaussian + je near .notgaussian cmp al,2 - je .cubicspline - ja .notgaussian + je near .cubicspline + ja near .fir_mmx ; Copy from Gaussian to DSPInterP + test ah,ah + jne .gaussian_mmx mov ebx,DSPInterP+1024 mov edx,DSPInterP+1022 mov esi,Gaussian @@ -532,9 +546,33 @@ NEWSYM AdjustFrequency add esi,2 dec ecx jnz .intrploop + mov ebx, DSPInterpolate_4 + jmp .notgaussian +.gaussian_mmx + mov ebx,Gaussian + mov edx,Gaussian+510 + mov esi,DSPInterP + mov ecx,256 +.intrploopm + mov ax,[ebx+512] + mov [esi],ax + mov ax,[ebx] + mov [esi+2],ax + mov ax,[edx] + mov [esi+4],ax + mov ax,[edx+512] + mov [esi+6],ax + add ebx,2 + sub edx,2 + add esi,8 + dec ecx + jnz .intrploopm + mov ebx, DSPInterpolate_4_mmx jmp .notgaussian .cubicspline ; Copy from CubicSpline to DSPInterP + test ah,ah + jne .cubic_mmx mov ebx,CubicSpline mov edx,DSPInterP mov ecx,1024 @@ -551,26 +589,50 @@ NEWSYM AdjustFrequency add edx,2 dec ecx jnz .intrploopb + mov ebx, DSPInterpolate_4 + jmp .notgaussian +.cubic_mmx + mov ebx,CubicSpline + mov esi,DSPInterP + mov ecx,256 +.intrploopmb + mov ax,[ebx+256*6] + mov dx,ax + sar dx,3 + sub ax,dx + mov [esi],ax + mov ax,[ebx+256*4] + mov dx,ax + sar dx,3 + sub ax,dx + mov [esi+2],ax + mov ax,[ebx+256*2] + mov dx,ax + sar dx,3 + sub ax,dx + mov [esi+4],ax + mov ax,[ebx] + mov dx,ax + sar dx,3 + sub ax,dx + mov [esi+6],ax + add ebx,2 + add esi,8 + dec ecx + jnz .intrploopmb + mov ebx, DSPInterpolate_4_mmx + jmp .notgaussian + +.fir_mmx + mov ebx, DSPInterpolate_8 + .notgaussian + mov [DSPInterpolate],ebx +%ifdef __MSDOS__ + call SB_quality_limiter +%endif - cmp byte[StereoSound],1 - jne .nostereo8b - cmp byte[SBHDMA],0 - jne .nostereo8b - - ; ***************************************** - ; *** ViBRA16X support by Peter Santing *** - ; ***************************************** - ; before REALLY switching back to 8-bit sucky mono mode - ; check that we're dealing with a ViBRA16X Creative Labs Card - cmp byte[vibracard], 1 - je .nostereo8b - - cmp dword[SoundQuality],2 - jbe .nostereo8b - mov dword[SoundQuality],2 -.nostereo8b mov eax,[SoundQuality] mov ebx,[NumofSPCBlock+eax*4] @@ -584,28 +646,38 @@ NEWSYM AdjustFrequency mov ecx,[SoundQuality] mov eax,dword [SBToSPCSpeeds+ecx*4] +%ifdef __MSDOS__ ; code for supporting vibra cards (coded by Peter Santing) cmp byte [vibracard], 1 je .vibrafix cmp byte [SBHDMA],0 je .not16bit - mov eax,dword [SBToSPCSpeeds2+ecx*4] +; mov eax,dword [SBToSPCSpeeds2+ecx*4] ; redundant .vibrafix mov eax,dword [SBToSPCSpeeds2+ecx*4] .not16bit - cmp byte[RaisePitch],0 - jne .nopitchmodify - ; *1000/1024 - mov ebx,1024 - mul ebx - xor edx,edx - mov ebx,1000 - div ebx -.nopitchmodify +%endif +; cmp byte[RaisePitch],0 +; jne .nopitchmodify +; ; *1000/1024 +; mov ebx,1024 +; mul ebx +; xor edx,edx +; mov ebx,1000 +; div ebx +;.nopitchmodify mov [SBToSPC],eax mov [SBRateb],eax + XOr EDX, EDX + Mov EBX, EAX + Mov EAX, 32000 + ShLD EDX, EAX, 20 + ShL EAX, 20 + Div EBX + Mov [dspPAdj], EAX + ; Init all rates mov esi,EchoRate mov edi,EchoRateO @@ -1497,45 +1569,11 @@ NEWSYM InitSPC mov dword [opcjmptab+03F8h],OpFE mov dword [opcjmptab+03FCh],OpFF ; cmp byte[soundon],0 -; je near .nosound +; je .nosound ; cmp byte[OSPort],2 -; jae near .nosound +; jae .nosound %ifdef __MSDOS__ - mov ax,0100h ; Allocate DOS memory - mov bx,16384/16 ; Allocate 16384 bytes - int 31h - ; To delocate this, use ax=0101h, dx=selector of block/int 31h - jc near .error - ; Check which 8192 byte boundary doesn't cross a page - mov word[memoryloc+2],0 - mov dword[memoryloc],0 - mov [memoryloc],ax - mov [sbselec],dx - shl dword[memoryloc],4 - mov edx,[memoryloc] - shr edx,16 - mov al,dl - mov edx,[memoryloc] - add edx,8192 - shr edx,16 - mov dword[sbpmofs],0 - cmp al,dl - je .nonextarea - mov dword[sbpmofs],8192 - add dword[memoryloc],8192 -.nonextarea - mov edi,[sbpmofs] - mov [SBBufferLoc],edi - mov dword[SBBufferMov],1 - mov dword[SBBufferInc],4 - ; clear dos memory - push es - mov es,[sbselec] - mov edi,[sbpmofs] - mov ecx,2048 - mov eax,0 - rep stosd - pop es + call SB_alloc_dma %endif .nosound pop edx @@ -1543,175 +1581,17 @@ NEWSYM InitSPC pop ebx pop eax ret -%ifdef __MSDOS__ -.error - mov edx,.nohand ;use extended - mov ah,9 ;DOS- API - int 21h ;to print a string - call DosExit -SECTION .data -.nohand db 'Unable to allocate conventional memory!',13,10,'$' -SECTION .text -%endif +SECTION .bss -NEWSYM InitSB -%ifdef __MSDOS__ - call initSB -%endif - ret +PSampleBuf resd 24*8 -NEWSYM DeInitSPC - cmp byte[SBDeinitType],0 - je .nodoublereset - call ResetSBDSP - call ResetSBDSP -.nodoublereset - ; Turn off speakers - mov al,0d3h - call WriteDSP +NEWSYM LPFsample1, resd 1 +NEWSYM LPFsample2, resd 1 -; k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker) - mov al,0d0h - call WriteDSP -; l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh) - cmp byte[SBHDMA],0 - je .8b - mov al,0d9h - call WriteDSP - jmp .16b -.8b - mov al,0dAh - call WriteDSP -.16b -; m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker) - mov al,0d0h - call WriteDSP - ; Disable DMA - mov al,4 - add al,[SBDMA] - mov dx,0ah - out dx,al - ret +NEWSYM BRRreadahead, resw 4 +NEWSYM DLPFsamples, resd 8*24 -section .data - -;SoundBlaster DSP Ports -NEWSYM SBPort, dw 220 -NEWSYM SBInt, db 5+8 -NEWSYM SBIrq, db 5 -NEWSYM SBDMA, db 1 -NEWSYM SBDMAPage, db 83 -NEWSYM SBHDMA, db 0 -NEWSYM SBHDMAPage, db 0 -NEWSYM vibracard, db 0 - -; ViBRA16X fixes! -EXTSYM MsgCount ; points to counter -EXTSYM MessageOn ; points to "message" delay counter -EXTSYM Msgptr ; points to the message to be displayed -NEWSYM vibmsg, db 'VIBRA16X MODE ENABLED', 0 - -section .text - -NEWSYM ResetSBDSP - mov dx,[SBPort] - add dl,06h - mov al,01h - out dx,al - in al,dx - in al,dx - in al,dx - in al,dx - mov al,00h - out dx,al - - mov si,200 - mov dx,[SBPort] - add dl,0Eh -.readloop - - ; wait until port[SBDSPRdStat] AND 80h = 80h - mov cx,20000 -.tryagain - in al,dx - dec cx - jz .cardfailed - or al,al - jns .tryagain - sub dx,4 - in al,dx - cmp al,0AAh - jne .tryagain2 - ret -.tryagain2 - add dx,4 - dec si - jnz .readloop -.cardfailed - mov ax,0003h - int 10h - mov edx,initfailed ;use extended - mov ah,9 ;DOS- API - int 21h ;to print a string - jmp DosExit - -section .data -NEWSYM initfailed, db 'Sound card failed to initialize!',13,10,'$' -section .text - -; Write AL into DSP port -NEWSYM WriteDSP - mov dx,[SBPort] - add dl,0Ch - mov bl,al -.tryagain - in al,dx - test al,80h - jnz .tryagain - mov al,bl - out dx,al - ret -; Read DSP port into AL -NEWSYM ReadDSP - mov dx,[SBPort] - add dl,0Eh - mov bl,al -.tryagain - in al,dx - test al,80h - jz .tryagain - mov dx,[SBPort] - add dl,0Ah - mov al,bl - in al,dx - ret - -;**************************************************** -; Sound Blaster Interrupt Stuff -;**************************************************** - -NEWSYM Interror - sti - mov edx,.nohand ;use extended - mov ah,9 ;DOS- API - int 21h ;to print a string - call DosExit - -section .data -.nohand db 'Cannot process interrupt handler!',13,10,'$' - -SECTION .data -NEWSYM oldhandSBs, dw 0 -NEWSYM oldhandSBo, dd 0 -NEWSYM SBswitch, db 0 ; which block to process next - -PSampleBuf times 26*8 dd 0 - -NEWSYM LPFsample1, dd 0 -NEWSYM LPFsample2, dd 0 - -NEWSYM DLPFsamples, times 8*26 dd 0 section .text %macro ProcessA 0 @@ -1804,39 +1684,35 @@ section .text %macro ProcessDynamicLowPass 0 mov ecx,[curvoice] mov edx, [Voice0Freq+ecx*4] - cmp edx, dword 1000000h + cmp edx, dword 800000h ja %%DLPF ret %%DLPF lea ebx,[ecx*4] lea ebx,[ebx*4] - lea ecx,[ecx*4+ecx] + lea ecx,[ecx*4] lea ebx,[ecx*2+ebx] lea ebx,[DLPFsamples+ebx*4] cmp byte[LowPassFilterType],3 je near %%DLPF_fir ;dynamic - mov eax,[ebx+21*4] + mov eax,[ebx+16*4] mov [ebx],eax - mov eax,[ebx+22*4] + mov eax,[ebx+17*4] mov [ebx+1*4],eax - mov eax,[ebx+23*4] + mov eax,[ebx+18*4] mov [ebx+2*4],eax - mov eax,[ebx+24*4] + mov eax,[ebx+19*4] mov [ebx+3*4],eax - mov eax,[ebx+25*4] - mov [ebx+4*4],eax sub edi,32 - movsx eax,word[edi+22] - mov [ebx+21*4],eax movsx eax,word[edi+24] - mov [ebx+22*4],eax + mov [ebx+16*4],eax movsx eax,word[edi+26] - mov [ebx+23*4],eax + mov [ebx+17*4],eax movsx eax,word[edi+28] - mov [ebx+24*4],eax + mov [ebx+18*4],eax movsx eax,word[edi+30] - mov [ebx+25*4],eax + mov [ebx+19*4],eax mov ecx,16 shr edx,24 cmp dl,2 @@ -1844,12 +1720,12 @@ section .text cmp dl,3 jle %%dlpf_by_3 cmp dl,4 - jle %%dlpf_by_4 + jle near %%dlpf_by_4 jmp %%dlpf_by_5 %%dlpf_by_2 mov eax,[ebx+4*4] - jmp Short %%dlpf_by_2_loop + jmp %%dlpf_by_2_loop ALIGN16 %%dlpf_by_2_loop @@ -1866,7 +1742,7 @@ ALIGN16 %%dlpf_by_3 mov eax,[ebx+3*4] mov ebp,[ebx+4*4] - jmp Short %%dlpf_by_3_loop + jmp %%dlpf_by_3_loop ALIGN16 %%dlpf_by_3_loop @@ -1887,7 +1763,7 @@ ALIGN16 mov eax,[ebx+2*4] mov edx,[ebx+3*4] mov ebp,[ebx+4*4] - jmp Short %%dlpf_by_4_loop + jmp %%dlpf_by_4_loop ALIGN16 %%dlpf_by_4_loop @@ -1911,7 +1787,7 @@ ALIGN16 mov esi,[ebx+2*4] mov ebp,[ebx+3*4] mov ecx,[ebx+4*4] - jmp Short %%dlpf_by_5_loop + jmp %%dlpf_by_5_loop ALIGN16 %%dlpf_by_5_loop @@ -1934,119 +1810,105 @@ ALIGN16 ret %%DLPF_fir - mov eax,[ebx+21*4] + sub edi,byte 32 + sub edx,0780000h ;ac - address calculation (see below) + mov eax,[ebx+16*4] + mov ecx,[ebx+17*4] mov [ebx],eax - mov eax,[ebx+22*4] - mov [ebx+4],eax - mov eax,[ebx+23*4] + mov [ebx+1*4],ecx + shr edx,18 ;ac + mov eax,[ebx+18*4] + and edx,3FF0h ;ac + mov ecx,[ebx+19*4] mov [ebx+2*4],eax - mov eax,[ebx+24*4] - mov [ebx+3*4],eax - mov eax,[ebx+25*4] - mov [ebx+4*4],eax - sub edi,32 - movsx eax,word[edi] - mov [ebx+5*4],eax - movsx eax,word[edi+2] - mov [ebx+6*4],eax - movsx eax,word[edi+4] - mov [ebx+7*4],eax - movsx eax,word[edi+6] - mov [ebx+8*4],eax - movsx eax,word[edi+8] - mov [ebx+9*4],eax - movsx eax,word[edi+10] - mov [ebx+10*4],eax - movsx eax,word[edi+12] - mov [ebx+11*4],eax - movsx eax,word[edi+14] - mov [ebx+12*4],eax - movsx eax,word[edi+16] - mov [ebx+13*4],eax - movsx eax,word[edi+18] - mov [ebx+14*4],eax - movsx eax,word[edi+20] - mov [ebx+15*4],eax - movsx eax,word[edi+22] - mov [ebx+16*4],eax - mov [ebx+21*4],eax - movsx eax,word[edi+24] - mov [ebx+17*4],eax - mov [ebx+22*4],eax - movsx eax,word[edi+26] - mov [ebx+18*4],eax - mov [ebx+23*4],eax - movsx eax,word[edi+28] - mov [ebx+19*4],eax - mov [ebx+24*4],eax - movsx eax,word[edi+30] - mov [ebx+20*4],eax - mov [ebx+25*4],eax + mov [ebx+3*4],ecx + + movq mm1,[edi] ;u1 (U-pipe marker) + movq mm3,[edi+8] ;u2 + punpcklwd mm0,mm1 + movq mm5,[edi+16] ;u3 + psrad mm0, 16 + movq mm7,[edi+24] ;u4 + punpckhwd mm1,mm1 + movq [ebx+4*4],mm0 ;u5 + psrad mm1, 16 + movq mm4,[BRRreadahead] ;u6 + punpcklwd mm0,mm3 + movq [ebx+6*4],mm1 ;u7 + psrad mm0, 16 + punpckhwd mm3,mm3 ;u8 + movq [ebx+8*4],mm0 ;u9 + psrad mm3, 16 + punpcklwd mm0,mm5 ;u10 + movq [ebx+10*4],mm3 ;u11 + psrad mm0, 16 + punpckhwd mm5,mm5 ;u12 + movq [ebx+12*4],mm0 ;u13 + psrad mm5, 16 + punpcklwd mm0,mm7 ;u14 + movq [ebx+14*4],mm5 ;u15 + psrad mm0, 16 + punpckhwd mm7,mm7 ;u16 + movq mm2,[fir_lut_co+edx] ;u17 + psrad mm7, 16 + punpcklwd mm6,mm4 ;u18 + movq [ebx+16*4],mm0 ;u19 + psrad mm6, 16 + movq [ebx+18*4],mm7 ;u20 + punpckhwd mm4,mm4 + movq mm3,[fir_lut_co+edx+8] ;u21 + psrad mm4, 16 + movq [ebx+20*4],mm6 ;u22 + movq [ebx+22*4],mm4 ;u23 mov ecx,16 - sub edx,0F80000h - shr edx,15 - and edx,7FFF0h - add edx,fir_lut_co - movq mm2,[edx] - movq mm3,[edx+8] + jmp %%DLPF_fir_loop + ALIGN16 + +; output 2 samples per iteration %%DLPF_fir_loop movq mm0,[ebx] packssdw mm0,[ebx+8] - movq mm1,[ebx+16] - packssdw mm1,[ebx+24] + movq mm4,[ebx+4] pmaddwd mm0,mm2 + packssdw mm4,[ebx+12] + movq mm1,[ebx+16] + pmaddwd mm4,mm2 + packssdw mm1,[ebx+24] + movq mm5,[ebx+20] pmaddwd mm1,mm3 + packssdw mm5,[ebx+28] + pmaddwd mm5,mm3 paddd mm0,mm1 - movd edx,mm0 + add ebx,byte 8 + paddd mm4,mm5 + movq mm1,mm0 + movq mm5,mm4 psrlq mm0,32 - movd eax,mm0 - add edx,eax - sar edx,14 - cmp edx,32767 - jle %%DLPF_fir_clip - mov edx,32767 -%%DLPF_fir_clip - cmp edx,-32768 - jge %%DLPF_fir_clip2 - mov edx,-32768 -%%DLPF_fir_clip2 - mov [edi],dx - add edi,2 - add ebx,4 - dec ecx + psrlq mm4,32 + paddd mm0,mm1 + paddd mm4,mm5 + punpckldq mm0,mm4 + psrad mm0,14 + packssdw mm0,mm0 + sub ecx,byte 2 + movd [edi],mm0 + lea edi,[edi+4] jnz %%DLPF_fir_loop emms ret %endmacro -section .data -NEWSYM lastblockbrr, times 8 dd 0 -NEWSYM curvoice, dd 0 +section .bss +NEWSYM lastblockbrr, resd 8 +NEWSYM curvoice, resd 1 section .text BRRDecode: mov [curvoice],ecx mov byte[lastbl],0 mov byte[loopbl],0 - cmp dword[esi],21FECD8Ah - jne .notophack - mov byte[VoiceNoiseEn+ecx],0 -.notophack push ecx - mov al,[esi] - and al,0Ch - cmp al,04h - je .yesfilterb - test al,0Ch - jnz .skipfilter - cmp byte[esi+9],88h - jne .yesfilterb - mov byte[VoiceNoiseEn+ecx],101 - jmp .skipfilter -.yesfilterb - mov byte[VoiceNoiseEn+ecx],100 -.skipfilter xor eax,eax mov al,[esi] @@ -2063,21 +1925,22 @@ BRRDecode: mov ebx,[Filter+eax*2] shr cl,4 mov [filter0],ebx - mov ebx,[Filter+eax*2+4] push eax + mov ebx,[Filter+eax*2+4] cmp cl,12 jbe .noprevblock mov eax,[curvoice] mov cl,[lastblockbrr+eax] .noprevblock mov [bshift],cl + mov [filter1],ebx mov eax,[curvoice] mov [lastblockbrr+eax],cl pop eax mov [bshift],cl - mov [filter1],ebx mov byte[sampleleft],8 - mov byte[filteron],0 + jmp .nextsample + ALIGN16 .nextsample ProcessSample ProcessA @@ -2087,66 +1950,83 @@ BRRDecode: add edi,4 inc esi dec byte[sampleleft] - jnz near .nextsample + jnz .nextsample - pop ecx - cmp byte[VoiceNoiseEn+ecx],10 - je near .yesfilter - cmp byte[VoiceNoiseEn+ecx],0 - je .nofilter2 - cmp byte[VoiceNoiseEn+ecx],10 - jae .nofilter2 - mov al,[esi-9] + cmp byte[SoundInterpType],1 + jae .BRR_decode_ahead + + cmp byte[LowPassFilterType],2 + jle near .no_dlpf + + mov eax,[curvoice] + mov eax,[Voice0Freq+eax*4] + cmp eax,800000h + jb near .no_dlpf + +.BRR_decode_ahead + + push esi + + cmp byte[lastbl],1 + jne .dlpf_fill + + cmp byte[loopbl],1 + jne near .dlpf_clear + + mov eax,[curvoice] + mov esi,[Voice0LoopPtr+eax*4] + add esi,spcRam + +.dlpf_fill + push dword[prev0] + push dword[prev1] + + xor eax,eax + mov al,[esi] + mov cl,al and al,0Ch - cmp byte[esi-9],08h - jb .nofilter2 - inc byte[VoiceNoiseEn+ecx] -.nofilter2 - cmp byte[filteron],1 - jne near .nofilter - cmp byte[NoiseDisTemp+ecx],0 - jne near .nofilter - cmp byte[VoiceNoiseEn+ecx],100 - je .strfilter - cmp byte[VoiceNoiseEn+ecx],101 - je .nofilter - mov byte[VoiceNoiseEn+ecx],8 - test byte[esi],01h - jnz .nofilter - mov byte[VoiceNoiseEn+ecx],9 - test byte[esi+9],01h - jnz .nofilter - mov byte[VoiceNoiseEn+ecx],10 -;.nofilter -; ret - jmp .nofilter -.strfilter - mov byte[VoiceNoiseEn+ecx],8 - jmp .nofilter -; ret + inc esi + mov ebx,[Filter+eax*2] + shr cl,4 + mov [filter0],ebx + push eax + mov ebx,[Filter+eax*2+4] + cmp cl,12 + jbe .noprevblock2 + mov eax,[curvoice] + mov cl,[lastblockbrr+eax] +.noprevblock2 + mov [bshift],cl + mov [filter1],ebx +; mov eax,[curvoice] +; mov [lastblockbrr+eax],cl + pop eax + + ProcessSample ProcessA + mov [BRRreadahead],dx + ProcessSample ProcessB + mov [BRRreadahead+2],dx + inc esi + ProcessSample ProcessA + mov [BRRreadahead+4],dx + ProcessSample ProcessB + mov [BRRreadahead+6],dx + + pop dword[prev1] + pop dword[prev0] + pop esi + jmp .no_dlpf + +.dlpf_clear + xor eax,eax + mov [BRRreadahead],eax + mov [BRRreadahead+4],eax + pop esi + +.no_dlpf -.yesfilter - cmp byte[SoundNoiseDis],1 - je .nofilter - push ecx - sub edi,32 - mov ecx,8 - mov ebx,[NoisePtr] -.nloop - mov ax,[NoiseData+ebx*2] - inc ebx - and ebx,1FFFh - sar ax,1 - mov word[edi],ax - mov word[edi+2],ax - add edi,4 - dec ecx - jnz .nloop - mov [NoisePtr],ebx pop ecx - ret -.nofilter cmp byte[LowPassFilterType],1 ja .dlpf ret @@ -2195,26 +2075,25 @@ NEWSYM DecreaseRateExpO dd 13230,9702,8158,6504,4851,4079,3197,2425 dd 1984,1653,1212,1014,815,606,407,198 -SECTION .data -filteron dd 0 -NoisePtr dd 0 +SECTION .bss +NoisePtr resd 1 ; used only in dspproc.asm SECTION .data Filter dd 0,0,240,0,488,-240,460,-208 -SECTION .data -prev0 dd 0 ; previous value 1 -prev1 dd 0 ; previous value 2 -nextsamp dd 0 ; next sample -filter0 dd 0 ; filter 0 -filter1 dd 0 ; filter 1 -bshift dd 0 -sampleleft dd 0 ; 8 bytes/sample +SECTION .bss +prev0 resd 1 ; previous value 1 +prev1 resd 1 ; previous value 2 +nextsamp resd 1 ; next sample +filter0 resd 1 ; filter 0 +filter1 resd 1 ; filter 1 +bshift resd 1 +sampleleft resd 1 ; 8 bytes/sample -lastbl dd 0 ; Last block if = 1 -loopbl dd 0 ; Loop if = 1 -usenoisedata dd 0 +lastbl resd 1 ; Last block if = 1 +loopbl resd 1 ; Loop if = 1 +usenoisedata resd 1 SECTION .data @@ -2318,28 +2197,28 @@ NEWSYM VolumeTableb ; db 1,1,1,1,1,1,1,1,1,1 ; db 1,1,1,1,1,1,1,1 -SECTION .data ;ALIGN=32 -NEWSYM DSPBuffer, times 320*4 dd 0; The play buffer... -NEWSYM EchoBuffer, times 320*4 dd 0; The play buffer... -NEWSYM PModBuffer, times 320*4 dd 0; The play buffer... -NEWSYM BRRBuffer, times 32 db 0 ; The BRR Decode Buffer +SECTION .bss ;ALIGN=32 +NEWSYM DSPBuffer, resd 320*4 ; The play buffer... +NEWSYM EchoBuffer, resd 320*4 ; The play buffer... +NEWSYM PModBuffer, resd 320*4 ; The play buffer... +NEWSYM BRRBuffer, resb 32 ; The BRR Decode Buffer -NEWSYM BRRPlace0, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp0, dd 0 ; Keep this 0 -NEWSYM BRRPlace1, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp1, dd 0 ; Keep this 0 -NEWSYM BRRPlace2, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp2, dd 0 ; Keep this 0 -NEWSYM BRRPlace3, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp3, dd 0 ; Keep this 0 -NEWSYM BRRPlace4, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp4, dd 0 ; Keep this 0 -NEWSYM BRRPlace5, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp5, dd 0 ; Keep this 0 -NEWSYM BRRPlace6, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp6, dd 0 ; Keep this 0 -NEWSYM BRRPlace7, dd 0 ; Place in the BRRBuffer for Voice 0 -NEWSYM BRRTemp7, dd 0 ; Keep this 0 +NEWSYM BRRPlace0, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp0, resd 1 ; Keep this 0 +NEWSYM BRRPlace1, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp1, resd 1 ; Keep this 0 +NEWSYM BRRPlace2, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp2, resd 1 ; Keep this 0 +NEWSYM BRRPlace3, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp3, resd 1 ; Keep this 0 +NEWSYM BRRPlace4, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp4, resd 1 ; Keep this 0 +NEWSYM BRRPlace5, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp5, resd 1 ; Keep this 0 +NEWSYM BRRPlace6, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp6, resd 1 ; Keep this 0 +NEWSYM BRRPlace7, resd 1 ; Place in the BRRBuffer for Voice 0 +NEWSYM BRRTemp7, resd 1 ; Keep this 0 ;NEWSYM Voice0Freq, dd 1 ; Frequency of Voice 0 (Delta Freq) ;NEWSYM Voice1Freq, dd 1 ; Frequency of Voice 1 (Delta Freq) @@ -2350,14 +2229,14 @@ NEWSYM BRRTemp7, dd 0 ; Keep this 0 ;NEWSYM Voice6Freq, dd 1 ; Frequency of Voice 6 (Delta Freq) ;NEWSYM Voice7Freq, dd 1 ; Frequency of Voice 7 (Delta Freq) -NEWSYM Voice0Freq, dd 0 ; Frequency of Voice 0 (Delta Freq) -NEWSYM Voice1Freq, dd 0 ; Frequency of Voice 1 (Delta Freq) -NEWSYM Voice2Freq, dd 0 ; Frequency of Voice 2 (Delta Freq) -NEWSYM Voice3Freq, dd 0 ; Frequency of Voice 3 (Delta Freq) -NEWSYM Voice4Freq, dd 0 ; Frequency of Voice 4 (Delta Freq) -NEWSYM Voice5Freq, dd 0 ; Frequency of Voice 5 (Delta Freq) -NEWSYM Voice6Freq, dd 0 ; Frequency of Voice 6 (Delta Freq) -NEWSYM Voice7Freq, dd 0 ; Frequency of Voice 7 (Delta Freq) +NEWSYM Voice0Freq, resd 1 ; Frequency of Voice 0 (Delta Freq) +NEWSYM Voice1Freq, resd 1 ; Frequency of Voice 1 (Delta Freq) +NEWSYM Voice2Freq, resd 1 ; Frequency of Voice 2 (Delta Freq) +NEWSYM Voice3Freq, resd 1 ; Frequency of Voice 3 (Delta Freq) +NEWSYM Voice4Freq, resd 1 ; Frequency of Voice 4 (Delta Freq) +NEWSYM Voice5Freq, resd 1 ; Frequency of Voice 5 (Delta Freq) +NEWSYM Voice6Freq, resd 1 ; Frequency of Voice 6 (Delta Freq) +NEWSYM Voice7Freq, resd 1 ; Frequency of Voice 7 (Delta Freq) ; appears to only be used in dspproc.asm ;Voice0Pitch dw 1 ; Previous Pitch for Voice 0 @@ -2369,86 +2248,86 @@ NEWSYM Voice7Freq, dd 0 ; Frequency of Voice 7 (Delta Freq) ;Voice6Pitch dw 1 ; Previous Pitch for Voice 6 ;Voice7Pitch dw 1 ; Previous Pitch for Voice 7 -Voice0Pitch dw 0 ; Previous Pitch for Voice 0 -Voice1Pitch dw 0 ; Previous Pitch for Voice 1 -Voice2Pitch dw 0 ; Previous Pitch for Voice 2 -Voice3Pitch dw 0 ; Previous Pitch for Voice 3 -Voice4Pitch dw 0 ; Previous Pitch for Voice 4 -Voice5Pitch dw 0 ; Previous Pitch for Voice 5 -Voice6Pitch dw 0 ; Previous Pitch for Voice 6 -Voice7Pitch dw 0 ; Previous Pitch for Voice 7 +NEWSYM Voice0Pitch, resw 1 ; Previous Pitch for Voice 0 +Voice1Pitch resw 1 ; Previous Pitch for Voice 1 +Voice2Pitch resw 1 ; Previous Pitch for Voice 2 +Voice3Pitch resw 1 ; Previous Pitch for Voice 3 +Voice4Pitch resw 1 ; Previous Pitch for Voice 4 +Voice5Pitch resw 1 ; Previous Pitch for Voice 5 +Voice6Pitch resw 1 ; Previous Pitch for Voice 6 +Voice7Pitch resw 1 ; Previous Pitch for Voice 7 -NEWSYM Voice0Status, db 0 ; 0=Not Playing 1=Playing -NEWSYM Voice1Status, db 0 -NEWSYM Voice2Status, db 0 -NEWSYM Voice3Status, db 0 -NEWSYM Voice4Status, db 0 -NEWSYM Voice5Status, db 0 -NEWSYM Voice6Status, db 0 -NEWSYM Voice7Status, db 0 +NEWSYM Voice0Status, resb 1 ; 0=Not Playing 1=Playing +NEWSYM Voice1Status, resb 1 +NEWSYM Voice2Status, resb 1 +NEWSYM Voice3Status, resb 1 +NEWSYM Voice4Status, resb 1 +NEWSYM Voice5Status, resb 1 +NEWSYM Voice6Status, resb 1 +NEWSYM Voice7Status, resb 1 -NEWSYM Voice0Ptr, dd 0 ; Ptr to Next BRR Block to be played -NEWSYM Voice1Ptr, dd 0 -NEWSYM Voice2Ptr, dd 0 -NEWSYM Voice3Ptr, dd 0 -NEWSYM Voice4Ptr, dd 0 -NEWSYM Voice5Ptr, dd 0 -NEWSYM Voice6Ptr, dd 0 -NEWSYM Voice7Ptr, dd 0 -NEWSYM Voice0LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice1LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice2LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice3LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice4LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice5LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice6LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice7LoopPtr, dd 0 ; Ptr to Loop BRR Block to be played +NEWSYM Voice0Ptr, resd 1 ; Ptr to Next BRR Block to be played +NEWSYM Voice1Ptr, resd 1 +NEWSYM Voice2Ptr, resd 1 +NEWSYM Voice3Ptr, resd 1 +NEWSYM Voice4Ptr, resd 1 +NEWSYM Voice5Ptr, resd 1 +NEWSYM Voice6Ptr, resd 1 +NEWSYM Voice7Ptr, resd 1 +NEWSYM Voice0LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice1LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice2LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice3LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice4LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice5LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice6LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice7LoopPtr, resd 1 ; Ptr to Loop BRR Block to be played -NEWSYM Voice0BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice1BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice2BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice3BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice4BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice5BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice6BufPtr, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice7BufPtr, dd 0 ; Ptr to Buffer Block to be played +NEWSYM Voice0BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice1BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice2BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice3BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice4BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice5BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice6BufPtr, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice7BufPtr, resd 1 ; Ptr to Buffer Block to be played -NEWSYM SoundCounter, dd 0 ; Counter used for sound generation -NEWSYM SoundCounter2, dd 0 ; Counter used for sound generation -NEWSYM Voice0Prev0, dd 0 -NEWSYM Voice1Prev0, dd 0 -NEWSYM Voice2Prev0, dd 0 -NEWSYM Voice3Prev0, dd 0 -NEWSYM Voice4Prev0, dd 0 -NEWSYM Voice5Prev0, dd 0 -NEWSYM Voice6Prev0, dd 0 -NEWSYM Voice7Prev0, dd 0 -NEWSYM Voice0Prev1, dd 0 -NEWSYM Voice1Prev1, dd 0 -NEWSYM Voice2Prev1, dd 0 -NEWSYM Voice3Prev1, dd 0 -NEWSYM Voice4Prev1, dd 0 -NEWSYM Voice5Prev1, dd 0 -NEWSYM Voice6Prev1, dd 0 -NEWSYM Voice7Prev1, dd 0 +NEWSYM SoundCounter, resd 1 ; Counter used for sound generation +NEWSYM SoundCounter2, resd 1 ; Counter used for sound generation +NEWSYM Voice0Prev0, resd 1 +NEWSYM Voice1Prev0, resd 1 +NEWSYM Voice2Prev0, resd 1 +NEWSYM Voice3Prev0, resd 1 +NEWSYM Voice4Prev0, resd 1 +NEWSYM Voice5Prev0, resd 1 +NEWSYM Voice6Prev0, resd 1 +NEWSYM Voice7Prev0, resd 1 +NEWSYM Voice0Prev1, resd 1 +NEWSYM Voice1Prev1, resd 1 +NEWSYM Voice2Prev1, resd 1 +NEWSYM Voice3Prev1, resd 1 +NEWSYM Voice4Prev1, resd 1 +NEWSYM Voice5Prev1, resd 1 +NEWSYM Voice6Prev1, resd 1 +NEWSYM Voice7Prev1, resd 1 -NEWSYM Voice0Loop, db 0 -NEWSYM Voice1Loop, db 0 -NEWSYM Voice2Loop, db 0 -NEWSYM Voice3Loop, db 0 -NEWSYM Voice4Loop, db 0 -NEWSYM Voice5Loop, db 0 -NEWSYM Voice6Loop, db 0 -NEWSYM Voice7Loop, db 0 +NEWSYM Voice0Loop, resb 1 +NEWSYM Voice1Loop, resb 1 +NEWSYM Voice2Loop, resb 1 +NEWSYM Voice3Loop, resb 1 +NEWSYM Voice4Loop, resb 1 +NEWSYM Voice5Loop, resb 1 +NEWSYM Voice6Loop, resb 1 +NEWSYM Voice7Loop, resb 1 -NEWSYM Voice0End, db 0 -NEWSYM Voice1End, db 0 -NEWSYM Voice2End, db 0 -NEWSYM Voice3End, db 0 -NEWSYM Voice4End, db 0 -NEWSYM Voice5End, db 0 -NEWSYM Voice6End, db 0 -NEWSYM Voice7End, db 0 +NEWSYM Voice0End, resb 1 +NEWSYM Voice1End, resb 1 +NEWSYM Voice2End, resb 1 +NEWSYM Voice3End, resb 1 +NEWSYM Voice4End, resb 1 +NEWSYM Voice5End, resb 1 +NEWSYM Voice6End, resb 1 +NEWSYM Voice7End, resb 1 ;NEWSYM Voice0Noise, db 1 ;NEWSYM Voice1Noise, db 1 @@ -2459,41 +2338,41 @@ NEWSYM Voice7End, db 0 ;NEWSYM Voice6Noise, db 1 ;NEWSYM Voice7Noise, db 1 -NEWSYM Voice0Noise, db 0 -NEWSYM Voice1Noise, db 0 -NEWSYM Voice2Noise, db 0 -NEWSYM Voice3Noise, db 0 -NEWSYM Voice4Noise, db 0 -NEWSYM Voice5Noise, db 0 -NEWSYM Voice6Noise, db 0 -NEWSYM Voice7Noise, db 0 +NEWSYM Voice0Noise, resb 1 +NEWSYM Voice1Noise, resb 1 +NEWSYM Voice2Noise, resb 1 +NEWSYM Voice3Noise, resb 1 +NEWSYM Voice4Noise, resb 1 +NEWSYM Voice5Noise, resb 1 +NEWSYM Voice6Noise, resb 1 +NEWSYM Voice7Noise, resb 1 -NEWSYM Voice0Volume, db 0 -NEWSYM Voice1Volume, db 0 -NEWSYM Voice2Volume, db 0 -NEWSYM Voice3Volume, db 0 -NEWSYM Voice4Volume, db 0 -NEWSYM Voice5Volume, db 0 -NEWSYM Voice6Volume, db 0 -NEWSYM Voice7Volume, db 0 +NEWSYM Voice0Volume, resb 1 +NEWSYM Voice1Volume, resb 1 +NEWSYM Voice2Volume, resb 1 +NEWSYM Voice3Volume, resb 1 +NEWSYM Voice4Volume, resb 1 +NEWSYM Voice5Volume, resb 1 +NEWSYM Voice6Volume, resb 1 +NEWSYM Voice7Volume, resb 1 -NEWSYM Voice0VolumeR, db 0 -NEWSYM Voice1VolumeR, db 0 -NEWSYM Voice2VolumeR, db 0 -NEWSYM Voice3VolumeR, db 0 -NEWSYM Voice4VolumeR, db 0 -NEWSYM Voice5VolumeR, db 0 -NEWSYM Voice6VolumeR, db 0 -NEWSYM Voice7VolumeR, db 0 +NEWSYM Voice0VolumeR, resb 1 +NEWSYM Voice1VolumeR, resb 1 +NEWSYM Voice2VolumeR, resb 1 +NEWSYM Voice3VolumeR, resb 1 +NEWSYM Voice4VolumeR, resb 1 +NEWSYM Voice5VolumeR, resb 1 +NEWSYM Voice6VolumeR, resb 1 +NEWSYM Voice7VolumeR, resb 1 -NEWSYM Voice0VolumeL, db 0 -NEWSYM Voice1VolumeL, db 0 -NEWSYM Voice2VolumeL, db 0 -NEWSYM Voice3VolumeL, db 0 -NEWSYM Voice4VolumeL, db 0 -NEWSYM Voice5VolumeL, db 0 -NEWSYM Voice6VolumeL, db 0 -NEWSYM Voice7VolumeL, db 0 +NEWSYM Voice0VolumeL, resb 1 +NEWSYM Voice1VolumeL, resb 1 +NEWSYM Voice2VolumeL, resb 1 +NEWSYM Voice3VolumeL, resb 1 +NEWSYM Voice4VolumeL, resb 1 +NEWSYM Voice5VolumeL, resb 1 +NEWSYM Voice6VolumeL, resb 1 +NEWSYM Voice7VolumeL, resb 1 ;NEWSYM Voice0Env, db 1 ;NEWSYM Voice1Env, db 1 @@ -2504,318 +2383,327 @@ NEWSYM Voice7VolumeL, db 0 ;NEWSYM Voice6Env, db 1 ;NEWSYM Voice7Env, db 1 -NEWSYM Voice0Env, db 0 -NEWSYM Voice1Env, db 0 -NEWSYM Voice2Env, db 0 -NEWSYM Voice3Env, db 0 -NEWSYM Voice4Env, db 0 -NEWSYM Voice5Env, db 0 -NEWSYM Voice6Env, db 0 -NEWSYM Voice7Env, db 0 +NEWSYM Voice0Env, resb 1 +NEWSYM Voice1Env, resb 1 +NEWSYM Voice2Env, resb 1 +NEWSYM Voice3Env, resb 1 +NEWSYM Voice4Env, resb 1 +NEWSYM Voice5Env, resb 1 +NEWSYM Voice6Env, resb 1 +NEWSYM Voice7Env, resb 1 -NEWSYM Voice0Out, db 0 -NEWSYM Voice1Out, db 0 -NEWSYM Voice2Out, db 0 -NEWSYM Voice3Out, db 0 -NEWSYM Voice4Out, db 0 -NEWSYM Voice5Out, db 0 -NEWSYM Voice6Out, db 0 -NEWSYM Voice7Out, db 0 +NEWSYM Voice0Out, resb 1 +NEWSYM Voice1Out, resb 1 +NEWSYM Voice2Out, resb 1 +NEWSYM Voice3Out, resb 1 +NEWSYM Voice4Out, resb 1 +NEWSYM Voice5Out, resb 1 +NEWSYM Voice6Out, resb 1 +NEWSYM Voice7Out, resb 1 ; 1 Attack, 2 Decrease,3 Sustain, 0 Gain -NEWSYM Voice0State, db 0 -NEWSYM Voice1State, db 0 -NEWSYM Voice2State, db 0 -NEWSYM Voice3State, db 0 -NEWSYM Voice4State, db 0 -NEWSYM Voice5State, db 0 -NEWSYM Voice6State, db 0 -NEWSYM Voice7State, db 0 +NEWSYM Voice0State, resb 1 +NEWSYM Voice1State, resb 1 +NEWSYM Voice2State, resb 1 +NEWSYM Voice3State, resb 1 +NEWSYM Voice4State, resb 1 +NEWSYM Voice5State, resb 1 +NEWSYM Voice6State, resb 1 +NEWSYM Voice7State, resb 1 ; WAS all dd 1 before, down to next applicable comment -NEWSYM Voice0Time, dd 0 -NEWSYM Voice1Time, dd 0 -NEWSYM Voice2Time, dd 0 -NEWSYM Voice3Time, dd 0 -NEWSYM Voice4Time, dd 0 -NEWSYM Voice5Time, dd 0 -NEWSYM Voice6Time, dd 0 -NEWSYM Voice7Time, dd 0 +NEWSYM Voice0Time, resd 1 +NEWSYM Voice1Time, resd 1 +NEWSYM Voice2Time, resd 1 +NEWSYM Voice3Time, resd 1 +NEWSYM Voice4Time, resd 1 +NEWSYM Voice5Time, resd 1 +NEWSYM Voice6Time, resd 1 +NEWSYM Voice7Time, resd 1 -NEWSYM Voice0Attack, dd 0 -NEWSYM Voice1Attack, dd 0 -NEWSYM Voice2Attack, dd 0 -NEWSYM Voice3Attack, dd 0 -NEWSYM Voice4Attack, dd 0 -NEWSYM Voice5Attack, dd 0 -NEWSYM Voice6Attack, dd 0 -NEWSYM Voice7Attack, dd 0 +NEWSYM Voice0Attack, resd 1 +NEWSYM Voice1Attack, resd 1 +NEWSYM Voice2Attack, resd 1 +NEWSYM Voice3Attack, resd 1 +NEWSYM Voice4Attack, resd 1 +NEWSYM Voice5Attack, resd 1 +NEWSYM Voice6Attack, resd 1 +NEWSYM Voice7Attack, resd 1 -NEWSYM Voice0Decay, dd 0 -NEWSYM Voice1Decay, dd 0 -NEWSYM Voice2Decay, dd 0 -NEWSYM Voice3Decay, dd 0 -NEWSYM Voice4Decay, dd 0 -NEWSYM Voice5Decay, dd 0 -NEWSYM Voice6Decay, dd 0 -NEWSYM Voice7Decay, dd 0 +NEWSYM Voice0Decay, resd 1 +NEWSYM Voice1Decay, resd 1 +NEWSYM Voice2Decay, resd 1 +NEWSYM Voice3Decay, resd 1 +NEWSYM Voice4Decay, resd 1 +NEWSYM Voice5Decay, resd 1 +NEWSYM Voice6Decay, resd 1 +NEWSYM Voice7Decay, resd 1 -NEWSYM Voice0SustainL, db 0 -NEWSYM Voice1SustainL, db 0 -NEWSYM Voice2SustainL, db 0 -NEWSYM Voice3SustainL, db 0 -NEWSYM Voice4SustainL, db 0 -NEWSYM Voice5SustainL, db 0 -NEWSYM Voice6SustainL, db 0 -NEWSYM Voice7SustainL, db 0 +NEWSYM Voice0SustainL, resb 1 +NEWSYM Voice1SustainL, resb 1 +NEWSYM Voice2SustainL, resb 1 +NEWSYM Voice3SustainL, resb 1 +NEWSYM Voice4SustainL, resb 1 +NEWSYM Voice5SustainL, resb 1 +NEWSYM Voice6SustainL, resb 1 +NEWSYM Voice7SustainL, resb 1 -NEWSYM Voice0SustainL2, db 0 -NEWSYM Voice1SustainL2, db 0 -NEWSYM Voice2SustainL2, db 0 -NEWSYM Voice3SustainL2, db 0 -NEWSYM Voice4SustainL2, db 0 -NEWSYM Voice5SustainL2, db 0 -NEWSYM Voice6SustainL2, db 0 -NEWSYM Voice7SustainL2, db 0 +NEWSYM Voice0SustainL2, resb 1 +NEWSYM Voice1SustainL2, resb 1 +NEWSYM Voice2SustainL2, resb 1 +NEWSYM Voice3SustainL2, resb 1 +NEWSYM Voice4SustainL2, resb 1 +NEWSYM Voice5SustainL2, resb 1 +NEWSYM Voice6SustainL2, resb 1 +NEWSYM Voice7SustainL2, resb 1 -NEWSYM Voice0SustainR, dd 0 -NEWSYM Voice1SustainR, dd 0 -NEWSYM Voice2SustainR, dd 0 -NEWSYM Voice3SustainR, dd 0 -NEWSYM Voice4SustainR, dd 0 -NEWSYM Voice5SustainR, dd 0 -NEWSYM Voice6SustainR, dd 0 -NEWSYM Voice7SustainR, dd 0 +NEWSYM Voice0SustainR, resd 1 +NEWSYM Voice1SustainR, resd 1 +NEWSYM Voice2SustainR, resd 1 +NEWSYM Voice3SustainR, resd 1 +NEWSYM Voice4SustainR, resd 1 +NEWSYM Voice5SustainR, resd 1 +NEWSYM Voice6SustainR, resd 1 +NEWSYM Voice7SustainR, resd 1 -NEWSYM Voice0SustainR2, dd 0 -NEWSYM Voice1SustainR2, dd 0 -NEWSYM Voice2SustainR2, dd 0 -NEWSYM Voice3SustainR2, dd 0 -NEWSYM Voice4SustainR2, dd 0 -NEWSYM Voice5SustainR2, dd 0 -NEWSYM Voice6SustainR2, dd 0 -NEWSYM Voice7SustainR2, dd 0 +NEWSYM Voice0SustainR2, resd 1 +NEWSYM Voice1SustainR2, resd 1 +NEWSYM Voice2SustainR2, resd 1 +NEWSYM Voice3SustainR2, resd 1 +NEWSYM Voice4SustainR2, resd 1 +NEWSYM Voice5SustainR2, resd 1 +NEWSYM Voice6SustainR2, resd 1 +NEWSYM Voice7SustainR2, resd 1 -NEWSYM Voice0IncNumber, dd 0 -NEWSYM Voice1IncNumber, dd 0 -NEWSYM Voice2IncNumber, dd 0 -NEWSYM Voice3IncNumber, dd 0 -NEWSYM Voice4IncNumber, dd 0 -NEWSYM Voice5IncNumber, dd 0 -NEWSYM Voice6IncNumber, dd 0 -NEWSYM Voice7IncNumber, dd 0 +NEWSYM Voice0IncNumber, resd 1 +NEWSYM Voice1IncNumber, resd 1 +NEWSYM Voice2IncNumber, resd 1 +NEWSYM Voice3IncNumber, resd 1 +NEWSYM Voice4IncNumber, resd 1 +NEWSYM Voice5IncNumber, resd 1 +NEWSYM Voice6IncNumber, resd 1 +NEWSYM Voice7IncNumber, resd 1 ; END formerly initialized to 1 junk -NEWSYM Voice0SLenNumber, dd 0 -NEWSYM Voice1SLenNumber, dd 0 -NEWSYM Voice2SLenNumber, dd 0 -NEWSYM Voice3SLenNumber, dd 0 -NEWSYM Voice4SLenNumber, dd 0 -NEWSYM Voice5SLenNumber, dd 0 -NEWSYM Voice6SLenNumber, dd 0 -NEWSYM Voice7SLenNumber, dd 0 +NEWSYM Voice0SLenNumber, resd 1 +NEWSYM Voice1SLenNumber, resd 1 +NEWSYM Voice2SLenNumber, resd 1 +NEWSYM Voice3SLenNumber, resd 1 +NEWSYM Voice4SLenNumber, resd 1 +NEWSYM Voice5SLenNumber, resd 1 +NEWSYM Voice6SLenNumber, resd 1 +NEWSYM Voice7SLenNumber, resd 1 -NEWSYM Voice0SEndNumber, dd 0 -NEWSYM Voice1SEndNumber, dd 0 -NEWSYM Voice2SEndNumber, dd 0 -NEWSYM Voice3SEndNumber, dd 0 -NEWSYM Voice4SEndNumber, dd 0 -NEWSYM Voice5SEndNumber, dd 0 -NEWSYM Voice6SEndNumber, dd 0 -NEWSYM Voice7SEndNumber, dd 0 +NEWSYM Voice0SEndNumber, resd 1 +NEWSYM Voice1SEndNumber, resd 1 +NEWSYM Voice2SEndNumber, resd 1 +NEWSYM Voice3SEndNumber, resd 1 +NEWSYM Voice4SEndNumber, resd 1 +NEWSYM Voice5SEndNumber, resd 1 +NEWSYM Voice6SEndNumber, resd 1 +NEWSYM Voice7SEndNumber, resd 1 -NEWSYM Voice0SEndLNumber, dd 0 -NEWSYM Voice1SEndLNumber, dd 0 -NEWSYM Voice2SEndLNumber, dd 0 -NEWSYM Voice3SEndLNumber, dd 0 -NEWSYM Voice4SEndLNumber, dd 0 -NEWSYM Voice5SEndLNumber, dd 0 -NEWSYM Voice6SEndLNumber, dd 0 -NEWSYM Voice7SEndLNumber, dd 0 +NEWSYM Voice0SEndLNumber, resd 1 +NEWSYM Voice1SEndLNumber, resd 1 +NEWSYM Voice2SEndLNumber, resd 1 +NEWSYM Voice3SEndLNumber, resd 1 +NEWSYM Voice4SEndLNumber, resd 1 +NEWSYM Voice5SEndLNumber, resd 1 +NEWSYM Voice6SEndLNumber, resd 1 +NEWSYM Voice7SEndLNumber, resd 1 ; MORE junk that was initialized to 1 -NEWSYM Voice0DecreaseNumber, dd 0 -NEWSYM Voice1DecreaseNumber, dd 0 -NEWSYM Voice2DecreaseNumber, dd 0 -NEWSYM Voice3DecreaseNumber, dd 0 -NEWSYM Voice4DecreaseNumber, dd 0 -NEWSYM Voice5DecreaseNumber, dd 0 -NEWSYM Voice6DecreaseNumber, dd 0 -NEWSYM Voice7DecreaseNumber, dd 0 +NEWSYM Voice0DecreaseNumber, resd 1 +NEWSYM Voice1DecreaseNumber, resd 1 +NEWSYM Voice2DecreaseNumber, resd 1 +NEWSYM Voice3DecreaseNumber, resd 1 +NEWSYM Voice4DecreaseNumber, resd 1 +NEWSYM Voice5DecreaseNumber, resd 1 +NEWSYM Voice6DecreaseNumber, resd 1 +NEWSYM Voice7DecreaseNumber, resd 1 -NEWSYM Voice0EnvInc, dd 0 -NEWSYM Voice1EnvInc, dd 0 -NEWSYM Voice2EnvInc, dd 0 -NEWSYM Voice3EnvInc, dd 0 -NEWSYM Voice4EnvInc, dd 0 -NEWSYM Voice5EnvInc, dd 0 -NEWSYM Voice6EnvInc, dd 0 -NEWSYM Voice7EnvInc, dd 0 +NEWSYM Voice0EnvInc, resd 1 +NEWSYM Voice1EnvInc, resd 1 +NEWSYM Voice2EnvInc, resd 1 +NEWSYM Voice3EnvInc, resd 1 +NEWSYM Voice4EnvInc, resd 1 +NEWSYM Voice5EnvInc, resd 1 +NEWSYM Voice6EnvInc, resd 1 +NEWSYM Voice7EnvInc, resd 1 ; END initialized to 1 junk ; 0 = Direct, 1 = Increase, 2 = Increase2, 3 = Decrease, 4 = Decrease2 -NEWSYM Voice0GainType, db 0 -NEWSYM Voice1GainType, db 0 -NEWSYM Voice2GainType, db 0 -NEWSYM Voice3GainType, db 0 -NEWSYM Voice4GainType, db 0 -NEWSYM Voice5GainType, db 0 -NEWSYM Voice6GainType, db 0 -NEWSYM Voice7GainType, db 0 +NEWSYM Voice0GainType, resb 1 +NEWSYM Voice1GainType, resb 1 +NEWSYM Voice2GainType, resb 1 +NEWSYM Voice3GainType, resb 1 +NEWSYM Voice4GainType, resb 1 +NEWSYM Voice5GainType, resb 1 +NEWSYM Voice6GainType, resb 1 +NEWSYM Voice7GainType, resb 1 ; YET ANOTHER block that was initialized to 1 -NEWSYM Voice0GainTime, dd 0 -NEWSYM Voice1GainTime, dd 0 -NEWSYM Voice2GainTime, dd 0 -NEWSYM Voice3GainTime, dd 0 -NEWSYM Voice4GainTime, dd 0 -NEWSYM Voice5GainTime, dd 0 -NEWSYM Voice6GainTime, dd 0 -NEWSYM Voice7GainTime, dd 0 +NEWSYM Voice0GainTime, resd 1 +NEWSYM Voice1GainTime, resd 1 +NEWSYM Voice2GainTime, resd 1 +NEWSYM Voice3GainTime, resd 1 +NEWSYM Voice4GainTime, resd 1 +NEWSYM Voice5GainTime, resd 1 +NEWSYM Voice6GainTime, resd 1 +NEWSYM Voice7GainTime, resd 1 ; END that block -NEWSYM Voice0Starting, db 0 -NEWSYM Voice1Starting, db 0 -NEWSYM Voice2Starting, db 0 -NEWSYM Voice3Starting, db 0 -NEWSYM Voice4Starting, db 0 -NEWSYM Voice5Starting, db 0 -NEWSYM Voice6Starting, db 0 -NEWSYM Voice7Starting, db 0 +NEWSYM Voice0Starting, resb 1 +NEWSYM Voice1Starting, resb 1 +NEWSYM Voice2Starting, resb 1 +NEWSYM Voice3Starting, resb 1 +NEWSYM Voice4Starting, resb 1 +NEWSYM Voice5Starting, resb 1 +NEWSYM Voice6Starting, resb 1 +NEWSYM Voice7Starting, resb 1 -NEWSYM Freqdisp, dd 0 -NEWSYM SBRateb, dd 0 +NEWSYM Freqdisp, resd 1 +NEWSYM SBRateb, resd 1 -NEWSYM Voice0Looped, db 0 -NEWSYM Voice1Looped, db 0 -NEWSYM Voice2Looped, db 0 -NEWSYM Voice3Looped, db 0 -NEWSYM Voice4Looped, db 0 -NEWSYM Voice5Looped, db 0 -NEWSYM Voice6Looped, db 0 -NEWSYM Voice7Looped, db 0 +NEWSYM Voice0Looped, resb 1 +NEWSYM Voice1Looped, resb 1 +NEWSYM Voice2Looped, resb 1 +NEWSYM Voice3Looped, resb 1 +NEWSYM Voice4Looped, resb 1 +NEWSYM Voice5Looped, resb 1 +NEWSYM Voice6Looped, resb 1 +NEWSYM Voice7Looped, resb 1 -VoiceNoiseEn times 8 db 0 -NEWSYM GainDecBendDataPos, times 8 db 0 -NEWSYM GainDecBendDataTime, times 8 dd 0 -NEWSYM GainDecBendDataDat, times 8 db 0 +VoiceNoiseEn resb 8 +NEWSYM GainDecBendDataPos, resb 8 +NEWSYM GainDecBendDataTime, resd 8 +NEWSYM GainDecBendDataDat, resb 8 -NEWSYM AdsrBlocksLeft, times 8 db 0 -NEWSYM AdsrNextTimeDepth, times 8 dd 0 +NEWSYM AdsrBlocksLeft, resb 8 +NEWSYM AdsrNextTimeDepth, resd 8 -TimeTemp times 8 dd 0 ; 104 bytes -IncNTemp times 8 dd 0 -EnvITemp times 8 dd 0 -StatTemp times 2 dd 0 +TimeTemp resd 8 ; 104 bytes +IncNTemp resd 8 +EnvITemp resd 8 +StatTemp resd 2 -NEWSYM FutureExpand, times 44 db 0 +NEWSYM FutureExpand, resb 44 ; pharos equ hack *sigh* marksave: -NEWSYM echoon0, db 0 -NEWSYM echoon1, db 0 -NEWSYM echoon2, db 0 -NEWSYM echoon3, db 0 -NEWSYM echoon4, db 0 -NEWSYM echoon5, db 0 -NEWSYM echoon6, db 0 -NEWSYM echoon7, db 0 +NEWSYM echoon0, resb 1 +NEWSYM echoon1, resb 1 +NEWSYM echoon2, resb 1 +NEWSYM echoon3, resb 1 +NEWSYM echoon4, resb 1 +NEWSYM echoon5, resb 1 +NEWSYM echoon6, resb 1 +NEWSYM echoon7, resb 1 -NEWSYM GlobalVL, dd 0 -NEWSYM GlobalVR, dd 0 -NEWSYM EchoVL, dd 0 -NEWSYM EchoVR, dd 0 -NEWSYM EchoT, dd 0 +NEWSYM GlobalVL, resd 1 +NEWSYM GlobalVR, resd 1 +NEWSYM EchoVL, resd 1 +NEWSYM EchoVR, resd 1 +NEWSYM EchoT, resd 1 -NEWSYM Voice0Volumee, db 0 -NEWSYM Voice1Volumee, db 0 -NEWSYM Voice2Volumee, db 0 -NEWSYM Voice3Volumee, db 0 -NEWSYM Voice4Volumee, db 0 -NEWSYM Voice5Volumee, db 0 -NEWSYM Voice6Volumee, db 0 -NEWSYM Voice7Volumee, db 0 +NEWSYM Voice0Volumee, resb 1 +NEWSYM Voice1Volumee, resb 1 +NEWSYM Voice2Volumee, resb 1 +NEWSYM Voice3Volumee, resb 1 +NEWSYM Voice4Volumee, resb 1 +NEWSYM Voice5Volumee, resb 1 +NEWSYM Voice6Volumee, resb 1 +NEWSYM Voice7Volumee, resb 1 -NEWSYM Voice0VolumeRe, db 0 -NEWSYM Voice1VolumeRe, db 0 -NEWSYM Voice2VolumeRe, db 0 -NEWSYM Voice3VolumeRe, db 0 -NEWSYM Voice4VolumeRe, db 0 -NEWSYM Voice5VolumeRe, db 0 -NEWSYM Voice6VolumeRe, db 0 -NEWSYM Voice7VolumeRe, db 0 +NEWSYM Voice0VolumeRe, resb 1 +NEWSYM Voice1VolumeRe, resb 1 +NEWSYM Voice2VolumeRe, resb 1 +NEWSYM Voice3VolumeRe, resb 1 +NEWSYM Voice4VolumeRe, resb 1 +NEWSYM Voice5VolumeRe, resb 1 +NEWSYM Voice6VolumeRe, resb 1 +NEWSYM Voice7VolumeRe, resb 1 -NEWSYM Voice0VolumeLe, db 0 -NEWSYM Voice1VolumeLe, db 0 -NEWSYM Voice2VolumeLe, db 0 -NEWSYM Voice3VolumeLe, db 0 -NEWSYM Voice4VolumeLe, db 0 -NEWSYM Voice5VolumeLe, db 0 -NEWSYM Voice6VolumeLe, db 0 -NEWSYM Voice7VolumeLe, db 0 +NEWSYM Voice0VolumeLe, resb 1 +NEWSYM Voice1VolumeLe, resb 1 +NEWSYM Voice2VolumeLe, resb 1 +NEWSYM Voice3VolumeLe, resb 1 +NEWSYM Voice4VolumeLe, resb 1 +NEWSYM Voice5VolumeLe, resb 1 +NEWSYM Voice6VolumeLe, resb 1 +NEWSYM Voice7VolumeLe, resb 1 -NEWSYM FIRTAPVal0, dd 0 -NEWSYM FIRTAPVal1, dd 0 -NEWSYM FIRTAPVal2, dd 0 -NEWSYM FIRTAPVal3, dd 0 -NEWSYM FIRTAPVal4, dd 0 -NEWSYM FIRTAPVal5, dd 0 -NEWSYM FIRTAPVal6, dd 0 -NEWSYM FIRTAPVal7, dd 0 +NEWSYM FIRTAPVal0, resd 1 +NEWSYM FIRTAPVal1, resd 1 +NEWSYM FIRTAPVal2, resd 1 +NEWSYM FIRTAPVal3, resd 1 +NEWSYM FIRTAPVal4, resd 1 +NEWSYM FIRTAPVal5, resd 1 +NEWSYM FIRTAPVal6, resd 1 +NEWSYM FIRTAPVal7, resd 1 SECTION .data NEWSYM MaxEcho, dd 172 -SECTION .data -NEWSYM CEchoPtr, dd 0 -NEWSYM EchoFB, dd 0 +SECTION .bss +NEWSYM CEchoPtr, resd 1 +NEWSYM EchoFB, resd 1 -NEWSYM Voice0Ptre, dd 0 ; Ptr to Next BRR Block to be played -NEWSYM Voice1Ptre, dd 0 -NEWSYM Voice2Ptre, dd 0 -NEWSYM Voice3Ptre, dd 0 -NEWSYM Voice4Ptre, dd 0 -NEWSYM Voice5Ptre, dd 0 -NEWSYM Voice6Ptre, dd 0 -NEWSYM Voice7Ptre, dd 0 -NEWSYM Voice0LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice1LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice2LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice3LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice4LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice5LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice6LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played -NEWSYM Voice7LoopPtre, dd 0 ; Ptr to Loop BRR Block to be played +NEWSYM Voice0Ptre, resd 1 ; Ptr to Next BRR Block to be played +NEWSYM Voice1Ptre, resd 1 +NEWSYM Voice2Ptre, resd 1 +NEWSYM Voice3Ptre, resd 1 +NEWSYM Voice4Ptre, resd 1 +NEWSYM Voice5Ptre, resd 1 +NEWSYM Voice6Ptre, resd 1 +NEWSYM Voice7Ptre, resd 1 +NEWSYM Voice0LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice1LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice2LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice3LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice4LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice5LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice6LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played +NEWSYM Voice7LoopPtre, resd 1 ; Ptr to Loop BRR Block to be played -NEWSYM Voice0BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice1BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice2BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice3BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice4BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice5BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice6BufPtre, dd 0 ; Ptr to Buffer Block to be played -NEWSYM Voice7BufPtre, dd 0 ; Ptr to Buffer Block to be played +NEWSYM Voice0BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice1BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice2BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice3BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice4BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice5BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice6BufPtre, resd 1 ; Ptr to Buffer Block to be played +NEWSYM Voice7BufPtre, resd 1 ; Ptr to Buffer Block to be played -NEWSYM CurFiltPtr, dd 0 -NEWSYM FiltLoop, times 16 dd 0 -NEWSYM FiltLoopR, times 16 dd 0 +NEWSYM CurFiltPtr, resd 1 +NEWSYM FiltLoop, resd 16 +NEWSYM FiltLoopR, resd 16 -NEWSYM SoundLooped0, db 0 -NEWSYM SoundLooped1, db 0 -NEWSYM SoundLooped2, db 0 -NEWSYM SoundLooped3, db 0 -NEWSYM SoundLooped4, db 0 -NEWSYM SoundLooped5, db 0 -NEWSYM SoundLooped6, db 0 -NEWSYM SoundLooped7, db 0 +NEWSYM SoundLooped0, resb 1 +NEWSYM SoundLooped1, resb 1 +NEWSYM SoundLooped2, resb 1 +NEWSYM SoundLooped3, resb 1 +NEWSYM SoundLooped4, resb 1 +NEWSYM SoundLooped5, resb 1 +NEWSYM SoundLooped6, resb 1 +NEWSYM SoundLooped7, resb 1 -NEWSYM UniqueSoundv, dd 0 +NEWSYM UniqueSoundv, resd 1 + +NEWSYM Voice0FirstBlock, resb 1 +NEWSYM Voice1FirstBlock, resb 1 +NEWSYM Voice2FirstBlock, resb 1 +NEWSYM Voice3FirstBlock, resb 1 +NEWSYM Voice4FirstBlock, resb 1 +NEWSYM Voice5FirstBlock, resb 1 +NEWSYM Voice6FirstBlock, resb 1 +NEWSYM Voice7FirstBlock, resb 1 SECTION .data @@ -2905,7 +2793,6 @@ NEWSYM PHdspconvb, dd dspconvb section .text - NEWSYM PrepareSaveState push edi mov edi,[Voice0BufPtr] @@ -2961,11 +2848,12 @@ NEWSYM ResetState ;VolumeConvTable times 32768 db 0 -SECTION .data ;ALIGN=32 -spc700temp times 2 dd 0 +SECTION .bss ;ALIGN=32 +spc700temp resd 2 SECTION .text %macro VoiceStart 2 + mov byte[Voice0FirstBlock+%1],1 mov dword[spc700temp+4],0 cmp byte[Voice0Status+%1],0 je .moveon @@ -3103,7 +2991,7 @@ SECTION .text 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 @@ -3208,15 +3096,9 @@ SECTION .text cmp word[Voice0Pitch+%1*2],ax je .nopitchc mov word[Voice0Pitch+%1*2],ax - xor ebx,ebx - xor edx,edx - and eax,03FFFh - shl eax,2 - mov dl,ah - shl eax,24 - mov ebx,[SBToSPC] - div ebx - shl eax,1 + And EAX, 03FFFh + Mul dword [dspPAdj] + ShRD EAX,EDX,8 mov [Voice0Freq+%1*4],eax ; modpitch .nopitchc @@ -3225,13 +3107,9 @@ SECTION .text mov dword [Voice0Prev1+%1*4],0 mov byte [Voice0End+%1],0 mov byte [Voice0Loop+%1],0 - mov byte[VoiceNoiseEn+%1],0 - mov dword[WaveIndex+%1*4],0 - mov dword[PSampleBuf+%1*26*4+21*4],0 - mov dword[PSampleBuf+%1*26*4+22*4],0 - mov dword[PSampleBuf+%1*26*4+23*4],0 - mov dword[PSampleBuf+%1*26*4+24*4],0 - mov dword[PSampleBuf+%1*26*4+25*4],0 + mov dword[PSampleBuf+%1*24*4+16*4],0 + mov dword[PSampleBuf+%1*24*4+17*4],0 + mov dword[PSampleBuf+%1*24*4+18*4],0 mov byte[SoundLooped0+%1],0 mov byte[echoon0+%1],0 test byte[DSPMem+4Dh],%2 @@ -3328,15 +3206,9 @@ NEWSYM Voice7Start cmp word[Voice0Pitch+%1*2],ax je %%nopitchc mov word[Voice0Pitch+%1*2],ax - xor ebx,ebx - xor edx,edx - and eax,03FFFh - shl eax,2 - mov dl,ah - shl eax,24 - mov ebx,[SBToSPC] - div ebx - shl eax,1 + And EAX, 03FFFh + Mul dword [dspPAdj] + ShRD EAX,EDX,8 mov [Voice0Freq+%1*4],eax ; modpitch %%nopitchc @@ -3345,13 +3217,9 @@ NEWSYM Voice7Start mov dword [Voice0Prev1+%1*4],0 mov byte [Voice0End+%1],0 mov byte [Voice0Loop+%1],0 - mov byte[VoiceNoiseEn+%1],0 - mov dword[WaveIndex+%1*4],0 - mov dword[PSampleBuf+%1*26*4+21*4],0 - mov dword[PSampleBuf+%1*26*4+22*4],0 - mov dword[PSampleBuf+%1*26*4+23*4],0 - mov dword[PSampleBuf+%1*26*4+24*4],0 - mov dword[PSampleBuf+%1*26*4+25*4],0 + mov dword[PSampleBuf+%1*24*4+16*4],0 + mov dword[PSampleBuf+%1*24*4+17*4],0 + mov dword[PSampleBuf+%1*24*4+18*4],0 pop edx ret %%nope @@ -3368,10 +3236,10 @@ NEWSYM VoiceStarter VoiceStarterM 7 ret -section .data ;ALIGN=32 -NEWSYM NoiseInc, dd 0 -NEWSYM NoisePointer, dd 0 -NEWSYM LastNoise, dd 0 +section .bss ;ALIGN=32 +NEWSYM NoiseInc, resd 1 +NEWSYM NoisePointer, resd 1 +NEWSYM LastNoise, resd 1 section .text %macro CalculatePMod 1 @@ -3402,64 +3270,83 @@ section .text pop ecx %endmacro -%macro NonEchoMonoPM 4 +section .bss +powhack resd 1 +paramhack resd 4 +section .text + +%macro powshithack 0;intel sucks +%if 0 + push ecx + mov eax,1 + mov ecx,ebp + shl eax,cl + pop ecx +%else + mov al,byte[powhack] +%endif +%endmacro + +ALIGN16 +NEWSYM NonEchoMonoPM xor eax,eax - mov al,[Voice0Volume+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0Volume+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 mov ax,[edi+edx*2] -%%AfterNoise1 +.AfterNoise1 imul cx shr ax,7 add dl,dl or ah,dl movsx eax,ax - mov [WaveIndex+%1*4], eax add [DSPBuffer+esi*2],eax add esi,2 - CalculatePMod %1 - add [BRRPlace0+%1*8],ebx -%endmacro + CalculatePMod ebp + add [BRRPlace0+ebp*8],ebx + ret -%macro NonEchoStereoPM 4 +ALIGN16 +NEWSYM NonEchoStereoPM xor eax,eax - mov al,[Voice0VolumeR+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0VolumeR+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b mov ax,[edi+edx*2] -%%AfterNoise1b +.AfterNoise1b movsx eax,ax - mov [WaveIndex+%1*4], eax push eax imul cx shr ax,7 @@ -3468,8 +3355,8 @@ section .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] add esi,2 mov cx,[VolumeConvTable+eax*2] pop eax @@ -3479,34 +3366,35 @@ section .text or ah,dl movsx eax,ax add dword [DSPBuffer+esi*4-4],eax - CalculatePMod %1 - add [BRRPlace0+%1*8],ebx -%endmacro + CalculatePMod ebp + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoMonoPM 4 +ALIGN16 +NEWSYM EchoMonoPM xor eax,eax - mov al,[Voice0Volume+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0Volume+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 mov ax,[edi+edx*2] -%%AfterNoise1 +.AfterNoise1 movsx eax,ax - mov [WaveIndex+%1*4], eax push eax imul cx shr ax,7 @@ -3516,8 +3404,8 @@ section .text add [DSPBuffer+esi*2],eax xor eax,eax - mov al,[Voice0Volumee+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0Volumee+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] pop eax @@ -3529,34 +3417,35 @@ section .text add [EchoBuffer+esi*2],eax add esi,2 - CalculatePMod %1 - add [BRRPlace0+%1*8],ebx -%endmacro + CalculatePMod ebp + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoStereoPM 4 +ALIGN16 +NEWSYM EchoStereoPM xor eax,eax - mov al,[Voice0VolumeR+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0VolumeR+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b mov ax,[edi+edx*2] -%%AfterNoise1b +.AfterNoise1b movsx eax,ax - mov [WaveIndex+%1*4], eax mov ebx,eax imul cx shr ax,7 @@ -3565,8 +3454,8 @@ section .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeRe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeRe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx imul cx @@ -3577,8 +3466,8 @@ section .text add [EchoBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -3589,8 +3478,8 @@ section .text movsx eax,ax add dword [DSPBuffer+esi*4+4],eax xor eax,eax - mov al,[Voice0VolumeLe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeLe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -3599,75 +3488,60 @@ section .text add dl,dl or ah,dl movsx eax,ax - mov ebx,[Voice0Freq+%1*4] + mov ebx,[Voice0Freq+ebp*4] add [EchoBuffer+esi*4+4],eax add esi,2 - CalculatePMod %1 - add [BRRPlace0+%1*8],ebx -%endmacro + CalculatePMod ebp + add [BRRPlace0+ebp*8],ebx + ret ; interpolation is only done when the rate < mixRate, so ebx always contains ; less than 100000h. -%macro GenerateNextSample 1 - mov edx, [BRRPlace0+%1*8+2] ; edx should now contain a 24 bit fractional - and edx, 0FFh - sub eax, [WaveIndex+%1*4] ; eax = the difference between sample - oldSample - imul eax, edx ; scale by the fractional - sar eax, 8 - add eax, [WaveIndex+%1*4] ; add the oldSample to the scaling. -%endmacro - -SECTION .data ;ALIGN=32 -SaveSample times 8 dd 0 -WaveIndex times 8 dd 0 -SECTION .text - ;DSPInterP -; cmp ebx,01000000h ; -; jb %%DontFilter1 ; -; mov edx,eax ; -; mov eax,[WaveIndex+%1*4] ; low-pass filter applied to higher pitched -; sar eax,1 ; samples -; sar edx,1 ; -; add eax,edx ; -;%%DontFilter1 ; +SECTION .data +ALIGN16 +NEWSYM DSPInterpolate, dd 0 -%macro DSPInterpolate 1 +SECTION .text - cmp byte[SoundInterpType],3 - je near %%fir_interpolate +ALIGN16 +DSPInterpolate_4 + push edi + lea edi,[ebp*2+ebp] + shl edi,5 xor ebx,ebx - mov bl,[BRRPlace0+%1*8+2] - mov ax,[PSampleBuf+edx*4+8+%1*26*4] + mov bl,[BRRPlace0+ebp*8+2] + + mov ax,[PSampleBuf+edx*4+8+edi] mov dx,[DSPInterP+ebx*2+256*6] imul dx shl edx,16 mov dx,ax - mov eax,[BRRPlace0+%1*8+3] + mov eax,[BRRPlace0+ebp*8+3] mov ecx,edx - mov ax,[PSampleBuf+eax*4+12+%1*26*4] + mov ax,[PSampleBuf+eax*4+12+edi] mov dx,[DSPInterP+ebx*2+256*4] imul dx shl edx,16 mov dx,ax - mov eax,[BRRPlace0+%1*8+3] + mov eax,[BRRPlace0+ebp*8+3] add ecx,edx - mov ax,[PSampleBuf+eax*4+16+%1*26*4] + mov ax,[PSampleBuf+eax*4+16+edi] mov dx,[DSPInterP+ebx*2+256*2] imul dx shl edx,16 mov dx,ax - mov eax,[BRRPlace0+%1*8+3] + mov eax,[BRRPlace0+ebp*8+3] add ecx,edx - mov ax,[PSampleBuf+eax*4+20+%1*26*4] + mov ax,[PSampleBuf+eax*4+20+edi] mov dx,[DSPInterP+ebx*2] imul dx shl edx,16 @@ -3676,77 +3550,103 @@ SECTION .text sar ecx,11 mov ax,cx - jmp %%end + pop edi + ret + +ALIGN16 +DSPInterpolate_8: + + push edi + lea edi,[ebp*2+ebp] + shl edi,5 -%%fir_interpolate %if 1 xor eax,eax - mov ebx,[BRRPlace0+%1*8] - mov al,[BRRPlace0+%1*8+3] + mov ebx,[BRRPlace0+ebp*8] + mov al,[BRRPlace0+ebp*8+3] shl eax,2 and ebx,0FFFFFFh add ebx,1000h shr ebx,9 and ebx,0FFF0h add ebx,fir_lut - movq mm0,[eax+PSampleBuf+(%1*26*4)] - packssdw mm0,[eax+PSampleBuf+(%1*26*4)+8] - movq mm1,[eax+PSampleBuf+(%1*26*4)+16] - packssdw mm1,[eax+PSampleBuf+(%1*26*4)+24] + movq mm0,[eax+PSampleBuf+edi] + packssdw mm0,[eax+PSampleBuf+edi+8] + movq mm1,[eax+PSampleBuf+edi+16] + packssdw mm1,[eax+PSampleBuf+edi+24] movq mm2,[ebx] movq mm3,[ebx+8] pmaddwd mm0,mm2 pmaddwd mm1,mm3 paddd mm0,mm1 - movd eax,mm0 - psrlq mm0,32 - movd ebx,mm0 - emms - add eax,ebx - sar eax,14 + movq mm1,mm0 + psrlq mm0, 32 + paddd mm0, mm1 + psrad mm0, 14 + packssdw mm0, mm0 + movd eax, mm0 + movsx eax, ax %else - push dword PSampleBuf+(%1*26*4) + push dword PSampleBuf+(%1*24*4) push dword [BRRPlace0+%1*8] call fir_interpolate add esp,+8 %endif - cmp eax,32767 - jle %%clip1 - mov eax,32767 -%%clip1 - cmp eax,-32768 - jge %%clip2 - mov eax,-32768 -%%clip2 -%%end -%endmacro +.end + pop edi + ret -%macro NonEchoMonoInterpolated 4 - mov edx,[BRRPlace0+%1*8+3] +ALIGN16 +DSPInterpolate_4_mmx: + + push edi + lea edi,[ebp*2+ebp] + shl edi,5 + + xor eax,eax + mov al,[BRRPlace0+ebp*8+2] + movq mm0,[edx*4+PSampleBuf+edi+8] + packssdw mm0,[edx*4+PSampleBuf+edi+16] + movq mm1,[DSPInterP+eax*8] + pmaddwd mm0,mm1 + movd eax, mm0 + psrlq mm0, 32 + movd ebx, mm0 + emms + add eax,ebx + sar eax,11 + + pop edi + ret + +ALIGN16 +NEWSYM NonEchoMonoInterpolated + mov edx,[BRRPlace0+ebp*8+3] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 - DSPInterpolate %1 -; mov edx,[BRRPlace0+%1*8+3] + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 + call [DSPInterpolate] ;ebp +; mov edx,[BRRPlace0+ebp*8+3] ; mov ax,[edi+edx*2] ; DSPInterP (Samp*i+Samp2*i2+Samp3*i3+Samp4*i3)>>11 -%%AfterNoise1 +.AfterNoise1 xor edx,edx - mov dl,[Voice0Volume+%1] - mov dh,[Voice0EnvInc+%1*4+2] - mov ebx,[Voice0Freq+%1*4] + mov dl,[Voice0Volume+ebp] + mov dh,[Voice0EnvInc+ebp*4+2] + mov ebx,[Voice0Freq+ebp*4] mov cx,[VolumeConvTable+edx*2] imul cx shr ax,7 @@ -3755,36 +3655,38 @@ SECTION .text movsx eax,ax add [DSPBuffer+esi*2],eax add esi,2 - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoMonoInterpolated 4 - mov edx,[BRRPlace0+%1*8+3] +ALIGN16 +NEWSYM EchoMonoInterpolated + mov edx,[BRRPlace0+ebp*8+3] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 - DSPInterpolate %1 -; mov edx,[BRRPlace0+%1*8+3] + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 + call [DSPInterpolate] ;ebp +; mov edx,[BRRPlace0+ebp*8+3] ; mov ax,[edi+edx*2] -%%AfterNoise1 +.AfterNoise1 xor edx,edx - mov dl,[Voice0Volume+%1] - mov dh,[Voice0EnvInc+%1*4+2] - mov ebx,[Voice0Freq+%1*4] + mov dl,[Voice0Volume+ebp] + mov dh,[Voice0EnvInc+ebp*4+2] + mov ebx,[Voice0Freq+ebp*4] mov cx,[VolumeConvTable+edx*2] - add [BRRPlace0+%1*8],ebx ; *** + add [BRRPlace0+ebp*8],ebx ; *** add esi,2 ; *** mov ebx,eax @@ -3796,8 +3698,8 @@ SECTION .text add [DSPBuffer+esi*2-4],eax xor eax,eax - mov al,[Voice0Volumee+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0Volumee+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -3808,34 +3710,35 @@ SECTION .text or ah,dl movsx eax,ax add [EchoBuffer+esi*2-4],eax -%endmacro + ret -%macro NonEchoStereoInterpolated 4 - mov edx,[BRRPlace0+%1*8+3] +ALIGN16 +NEWSYM NonEchoStereoInterpolated + mov edx,[BRRPlace0+ebp*8+3] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b - DSPInterpolate %1 -%%AfterNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b + call [DSPInterpolate]; %1 +.AfterNoise1b xor edx,edx - mov dl,[Voice0VolumeR+%1] - mov dh,[Voice0EnvInc+%1*4+2] - mov ebx,[Voice0Freq+%1*4] + mov dl,[Voice0VolumeR+ebp] + mov dh,[Voice0EnvInc+ebp*4+2] + mov ebx,[Voice0Freq+ebp*4] mov cx,[VolumeConvTable+edx*2] movsx eax,ax - mov [WaveIndex+%1*4], eax push eax imul cx shr ax,7 @@ -3844,8 +3747,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] add esi,2 mov cx,[VolumeConvTable+eax*2] pop eax @@ -3855,35 +3758,36 @@ SECTION .text or ah,dl movsx eax,ax add dword [DSPBuffer+esi*4-4],eax - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoStereoInterpolated 4 - mov edx,[BRRPlace0+%1*8+3] +ALIGN16 +NEWSYM EchoStereoInterpolated + mov edx,[BRRPlace0+ebp*8+3] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b ; mov ax,[edi+edx*2] - DSPInterpolate %1 -%%AfterNoise1b + call [DSPInterpolate] ;%1 +.AfterNoise1b xor edx,edx - mov dl,[Voice0VolumeR+%1] - mov dh,[Voice0EnvInc+%1*4+2] + mov dl,[Voice0VolumeR+ebp] + mov dh,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+edx*2] movsx eax,ax - mov [WaveIndex+%1*4], eax mov ebx,eax imul cx shr ax,7 @@ -3892,8 +3796,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeRe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeRe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx imul cx @@ -3904,8 +3808,8 @@ SECTION .text add [EchoBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -3916,8 +3820,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4+4],eax xor eax,eax - mov al,[Voice0VolumeLe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeLe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -3926,70 +3830,72 @@ SECTION .text add dl,dl or ah,dl movsx eax,ax - mov ebx,[Voice0Freq+%1*4] + mov ebx,[Voice0Freq+ebp*4] add [EchoBuffer+esi*4+4],eax add esi,2 - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro NonEchoMono 4 +ALIGN16 +NEWSYM NonEchoMono xor eax,eax - mov al,[Voice0Volume+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0Volume+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 mov ax,[edi+edx*2] -%%AfterNoise1 +.AfterNoise1 imul cx shr ax,7 add dl,dl or ah,dl movsx eax,ax - mov [WaveIndex+%1*4], eax add [DSPBuffer+esi*2],eax add esi,2 - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro NonEchoStereo 4 +ALIGN16 +NEWSYM NonEchoStereo xor eax,eax - mov al,[Voice0VolumeR+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0VolumeR+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b mov ax,[edi+edx*2] -%%AfterNoise1b +.AfterNoise1b movsx eax,ax - mov [WaveIndex+%1*4], eax push eax imul cx shr ax,7 @@ -3998,8 +3904,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] add esi,2 mov cx,[VolumeConvTable+eax*2] pop eax @@ -4009,33 +3915,34 @@ SECTION .text or ah,dl movsx eax,ax add dword [DSPBuffer+esi*4-4],eax - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoMono 4 +ALIGN16 +NEWSYM EchoMono xor eax,eax - mov al,[Voice0Volume+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0Volume+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1 - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1 + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1 -%%PMod - ProcessPMod %1 -%%NotNoise1 + jmp .AfterNoise1 +.PMod + ProcessPMod ebp +.NotNoise1 mov ax,[edi+edx*2] -%%AfterNoise1 +.AfterNoise1 movsx eax,ax - mov [WaveIndex+%1*4], eax push eax imul cx shr ax,7 @@ -4045,8 +3952,8 @@ SECTION .text add [DSPBuffer+esi*2],eax xor eax,eax - mov al,[Voice0Volumee+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0Volumee+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] pop eax @@ -4058,33 +3965,34 @@ SECTION .text add [EchoBuffer+esi*2],eax add esi,2 - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro EchoStereo 4 +ALIGN16 +NEWSYM EchoStereo xor eax,eax - mov al,[Voice0VolumeR+%1] - mov ah,[Voice0EnvInc+%1*4+2] - mov edx,[BRRPlace0+%1*8+3] + mov al,[Voice0VolumeR+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] + mov edx,[BRRPlace0+ebp*8+3] mov cx,[VolumeConvTable+eax*2] cmp byte[UniqueSoundv],0 - je %%NotNoise1b - test byte [DSPMem+3Dh],1 << %1 - jz %%PMod + je .NotNoise1b + powshithack + test byte [DSPMem+3Dh],al + jz .PMod mov eax, dword [NoiseInc] add dword [NoisePointer],eax mov eax,[NoisePointer] shr eax,18 ; maybe will need a change mov ax,[NoiseData+eax*2] mov word [LastNoise],ax - jmp %%AfterNoise1b -%%PMod - ProcessPMod %1 -%%NotNoise1b + jmp .AfterNoise1b +.PMod + ProcessPMod ebp +.NotNoise1b mov ax,[edi+edx*2] -%%AfterNoise1b +.AfterNoise1b movsx eax,ax - mov [WaveIndex+%1*4], eax mov ebx,eax imul cx shr ax,7 @@ -4093,8 +4001,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeRe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeRe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx imul cx @@ -4105,8 +4013,8 @@ SECTION .text add [EchoBuffer+esi*4],eax xor eax,eax - mov al,[Voice0VolumeL+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeL+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -4117,8 +4025,8 @@ SECTION .text movsx eax,ax add dword [DSPBuffer+esi*4+4],eax xor eax,eax - mov al,[Voice0VolumeLe+%1] - mov ah,[Voice0EnvInc+%1*4+2] + mov al,[Voice0VolumeLe+ebp] + mov ah,[Voice0EnvInc+ebp*4+2] mov cx,[VolumeConvTable+eax*2] mov eax,ebx @@ -4127,27 +4035,21 @@ SECTION .text add dl,dl or ah,dl movsx eax,ax - mov ebx,[Voice0Freq+%1*4] + mov ebx,[Voice0Freq+ebp*4] add [EchoBuffer+esi*4+4],eax add esi,2 - add [BRRPlace0+%1*8],ebx -%endmacro + add [BRRPlace0+ebp*8],ebx + ret -%macro ProcessVoiceStuff 8 +%macro ProcessVoiceStuff 4 mov ax,[DSPMem+02h+%1*10h] cmp word[Voice0Pitch+%1*2],ax je %%nopitchc mov word[Voice0Pitch+%1*2],ax - xor ebx,ebx - xor edx,edx - and eax,03FFFh - shl eax,2 - mov dl,ah - shl eax,24 - mov ebx,[SBToSPC] - div ebx - shl eax,1 + And EAX, 03FFFh + Mul dword [dspPAdj] + ShRD EAX,EDX,8 ; modpitch mov [Voice0Freq+%1*4],eax %%nopitchc @@ -4206,7 +4108,7 @@ SECTION .text and al,1Fh mov ebx,[SustainRate+eax*4] cmp edx,ebx - jae near %%decayover + jae %%decayover ; ebx = total sustain time xor eax,eax mov al,[DSPMem+06h+%1*10h] @@ -4236,8 +4138,7 @@ SECTION .text mov dword[Voice0EnvInc+%1*4],007FFFFFh mov ebx,[Voice0Time+%1*4] xor edx,edx - mov eax,127*65536 - sub eax,122*65536 + mov eax,127*65536-122*65536 mov byte[GainDecBendDataPos+%1],0 mov byte[GainDecBendDataDat+%1],127 div ebx @@ -4265,8 +4166,7 @@ SECTION .text mov dword[Voice0Time+%1*4],ebx mov [GainDecBendDataTime+%1*4],ebx xor edx,edx - mov eax,127*65536 - sub eax,118*65536 + mov eax,127*65536-118*65536 mov byte[GainDecBendDataPos+%1],0 mov byte[GainDecBendDataDat+%1],127 div ebx @@ -4423,8 +4323,6 @@ SECTION .text pop edx pop ebx mov ebx,[Voice0Freq+%1*4] -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound cmp byte [SoundInterpType],0 je %%notinterpsound cmp byte [StereoSound],1 @@ -4466,8 +4364,6 @@ SECTION .text pop edx pop ebx mov ebx,[Voice0Freq+%1*4] -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound2 cmp byte [SoundInterpType],0 je %%notinterpsound2 cmp byte [StereoSound],1 @@ -4483,8 +4379,6 @@ SECTION .text mov dword[Voice0Time+%1*4],0FFFFFFFFh %%ContinueGain mov ebx,[Voice0Freq+%1*4] -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound3 cmp byte [SoundInterpType],0 je %%notinterpsound3 cmp byte [StereoSound],1 @@ -4495,20 +4389,17 @@ SECTION .text je near %%EndofProcessNEnvs jmp %%EndofProcessNEnv %%EndofSamp - mov dword[DLPFsamples+%1*26+21*4],0 - mov dword[DLPFsamples+%1*26+22*4],0 - mov dword[DLPFsamples+%1*26+23*4],0 - mov dword[DLPFsamples+%1*26+24*4],0 - mov dword[DLPFsamples+%1*26+25*4],0 + mov dword[DLPFsamples+%1*24*4+16*4],0 + mov dword[DLPFsamples+%1*24*4+17*4],0 + mov dword[DLPFsamples+%1*24*4+18*4],0 + mov dword[DLPFsamples+%1*24*4+19*4],0 mov dword[Voice0EnvInc+%1*4],0 mov dword[Voice0IncNumber+%1*4],0 mov byte [Voice0Status+%1],0 mov byte [Voice0State+%1],0 - cmp byte[ENVDisable],1 - je %%noSkipStuff - cmp byte[CNetType],20 - je %%SkipStuff -%%noSkipStuff +; cmp byte[ENVDisable],1 +; je %%noSkipStuff +;%%noSkipStuff mov byte [DSPMem+08h+%1*10h],0 mov byte [DSPMem+09h+%1*10h],0 or byte [DSPMem+7Ch],%3 @@ -4520,8 +4411,6 @@ SECTION .text mov byte [Voice0State+%1],0 cmp byte[ENVDisable],1 je %%noSkipStuff2 - cmp byte[CNetType],20 - je %%SkipStuff2 %%noSkipStuff2 mov byte [DSPMem+08h+%1*10h],0 mov byte [DSPMem+09h+%1*10h],0 @@ -4621,12 +4510,10 @@ SECTION .text mov byte [UniqueSoundv],1 %%NotUnique -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound4 cmp byte [SoundInterpType],0 je %%notinterpsound4 cmp byte [StereoSound],1 - je near %%NextSampleSi + je %%NextSampleSi jmp %%NextSamplei %%notinterpsound4 cmp byte [StereoSound],1 @@ -4637,97 +4524,81 @@ SECTION .text mov eax,[Voice0IncNumber+%1*4] add [Voice0EnvInc+%1*4],eax dec dword[Voice0Time+%1*4] - jz near %%ProcessNextEnvelope + jz %%ProcessNextEnvelope %%EndofProcessNEnv - %5 %1, %2, %3, %4 + ;%5 %1, %2, %3, %4 + call dword[paramhack];%5 cmp esi,[BufferSizeW] - jne near %%NextSample + jne %%NextSample ; mov [DSPMem+09h+%1*10h],ah mov al,[Voice0EnvInc+%1*4+2] mov [DSPMem+08h+%1*10h],al cmp byte[ENVDisable],1 - je %%clearenv - cmp byte[CNetType],20 - je %%clearenv - cmp byte[MovieProcessing],0 - je %%skipenvclear -%%clearenv + jne %%skipenvclear mov byte[DSPMem+08h+%1*10h],0 %%skipenvclear - jmp %%ProcessVoice1 + jmp %2 %%NextSampleSi cmp dword[BRRPlace0+%1*8],10000000h jae near %%ProcessBRR mov eax,[Voice0IncNumber+%1*4] add [Voice0EnvInc+%1*4],eax dec dword[Voice0Time+%1*4] - jz near %%ProcessNextEnvelope + jz %%ProcessNextEnvelope %%EndofProcessNEnvsi - %8 %1, %2, %3, %4 + ;%8 %1, %2, %3, %4 + call dword[paramhack+12];%8 cmp esi,[BufferSizeB] - jne near %%NextSampleSi + jne %%NextSampleSi ; mov [DSPMem+09h+%1*10h],ah mov al,[Voice0EnvInc+%1*4+2] mov [DSPMem+08h+%1*10h],al cmp byte[ENVDisable],1 - je %%clearenvsi - cmp byte[CNetType],20 - je %%clearenvsi - cmp byte[MovieProcessing],0 - je %%skipenvclearsi -%%clearenvsi + jne %%skipenvclearsi mov byte[DSPMem+08h+%1*10h],0 %%skipenvclearsi - jmp %%ProcessVoice1 + jmp %2 %%NextSamplei cmp dword[BRRPlace0+%1*8],10000000h jae near %%ProcessBRR mov eax,[Voice0IncNumber+%1*4] add [Voice0EnvInc+%1*4],eax dec dword[Voice0Time+%1*4] - jz near %%ProcessNextEnvelope + jz %%ProcessNextEnvelope %%EndofProcessNEnvi - %7 %1, %2, %3, %4 + ;%7 %1, %2, %3, %4 + call dword[paramhack+8];%7 cmp esi,[BufferSizeW] - jne near %%NextSamplei + jne %%NextSamplei ; mov [DSPMem+09h+%1*10h],ah mov al,[Voice0EnvInc+%1*4+2] mov [DSPMem+08h+%1*10h],al cmp byte[ENVDisable],1 - je %%clearenvi - cmp byte[CNetType],20 - je %%clearenvi - cmp byte[MovieProcessing],0 - je %%skipenvcleari -%%clearenvi + jne %%skipenvcleari mov byte[DSPMem+08h+%1*10h],0 %%skipenvcleari - jmp %%ProcessVoice1 + jmp %2 %%NextSampleS cmp dword[BRRPlace0+%1*8],10000000h - jae near %%ProcessBRR + jae %%ProcessBRR mov eax,[Voice0IncNumber+%1*4] add [Voice0EnvInc+%1*4],eax dec dword[Voice0Time+%1*4] - jz near %%ProcessNextEnvelope + jz %%ProcessNextEnvelope %%EndofProcessNEnvs - %6 %1, %2, %3, %4 + ;%6 %1, %2, %3, %4 + call dword[paramhack+4];%6 cmp esi,[BufferSizeB] - jne near %%NextSampleS + jne %%NextSampleS ; mov [DSPMem+09h+%1*10h],ah mov al,[Voice0EnvInc+%1*4+2] mov [DSPMem+08h+%1*10h],al cmp byte[ENVDisable],1 - je %%clearenv2 - cmp byte[CNetType],20 - je %%clearenv2 - cmp byte[MovieProcessing],0 je %%skipenvclear2 -%%clearenv2 mov byte[DSPMem+08h+%1*10h],0 %%skipenvclear2 %%noclearenv - jmp %%ProcessVoice1 + jmp %2 %%ProcessBRR cmp byte [Voice0End+%1],1 je near %%noDecode1Block @@ -4738,109 +4609,13 @@ SECTION .text ; cmp byte[Voice0Looped+%1],0 ; je %%nobrrcheck - mov eax,[PSampleBuf+21*4+%1*26*4] - mov [PSampleBuf+0*4+%1*26*4],eax - mov eax,[PSampleBuf+22*4+%1*26*4] - mov [PSampleBuf+1*4+%1*26*4],eax - mov eax,[PSampleBuf+23*4+%1*26*4] - mov [PSampleBuf+2*4+%1*26*4],eax - mov eax,[PSampleBuf+24*4+%1*26*4] - mov [PSampleBuf+3*4+%1*26*4],eax - mov eax,[PSampleBuf+25*4+%1*26*4] - mov [PSampleBuf+4*4+%1*26*4],eax + mov eax,[PSampleBuf+16*4+%1*24*4] + mov [PSampleBuf+0*4+%1*24*4],eax + mov eax,[PSampleBuf+17*4+%1*24*4] + mov [PSampleBuf+1*4+%1*24*4],eax + mov eax,[PSampleBuf+18*4+%1*24*4] + mov [PSampleBuf+2*4+%1*24*4],eax - cmp byte[SoundBufEn],0 - je near %%convertBRR2 - jmp %%convertBRR2 - ; Check if looped -%%nobrrcheck - mov eax,[spcRam+esi] - mov ebx,[spcRam+esi+4] - cmp eax,[spcRamcmp+esi] - jne near %%convertBRR - cmp ebx,[spcRamcmp+esi+4] - jne near %%convertBRR - mov al,[spcRam+esi+8] - cmp al,[spcRamcmp+esi+8] - jne near %%convertBRR - mov byte[Voice0End+%1],0 - mov byte[Voice0Loop+%1],0 - test byte[spcRam+esi],01h - jz %%nolast - mov byte[Voice0End+%1],1 - test byte[spcRam+esi],02h - jnz %%looped - jmp %%last -%%looped - mov byte[Voice0Loop+%1],1 -%%nolast -%%last - mov edi,esi - inc edi - add dword [Voice0Ptr+%1*4],9 - shl edi,2 - pop esi - add edi,[spcBuffera] - mov ebx,[Voice0Freq+%1*4] - mov [Voice0BufPtr+%1*4],edi - - movsx eax,word [edi] - mov [PSampleBuf+5*4+%1*26*4],eax - movsx eax,word [edi+2*1] - mov [PSampleBuf+6*4+%1*26*4],eax - movsx eax,word [edi+2*2] - mov [PSampleBuf+7*4+%1*26*4],eax - movsx eax,word [edi+2*3] - mov [PSampleBuf+8*4+%1*26*4],eax - movsx eax,word[edi+2*4] - mov [PSampleBuf+9*4+%1*26*4],eax - movsx eax,word [edi+2*5] - mov [PSampleBuf+10*4+%1*26*4],eax - movsx eax,word [edi+2*6] - mov [PSampleBuf+11*4+%1*26*4],eax - movsx eax,word [edi+2*7] - mov [PSampleBuf+12*4+%1*26*4],eax - movsx eax,word [edi+2*8] - mov [PSampleBuf+13*4+%1*26*4],eax - movsx eax,word [edi+2*9] - mov [PSampleBuf+14*4+%1*26*4],eax - movsx eax,word [edi+2*10] - mov [PSampleBuf+15*4+%1*26*4],eax - movsx eax,word [edi+2*11] - mov [PSampleBuf+16*4+%1*26*4],eax - mov [PSampleBuf+21*4+%1*26*4],eax - movsx eax,word [edi+2*12] - mov [PSampleBuf+17*4+%1*26*4],eax - mov [PSampleBuf+22*4+%1*26*4],eax - movsx eax,word [edi+2*13] - mov [PSampleBuf+18*4+%1*26*4],eax - mov [PSampleBuf+23*4+%1*26*4],eax - movsx eax,word [edi+2*14] - mov [PSampleBuf+19*4+%1*26*4],eax - mov [PSampleBuf+24*4+%1*26*4],eax - movsx eax,word [edi+2*15] - mov [PSampleBuf+20*4+%1*26*4],eax - mov [PSampleBuf+25*4+%1*26*4],eax - -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound5 - cmp byte [SoundInterpType],0 - je %%notinterpsound5 - cmp byte [StereoSound],1 - je near %%NextSampleSi - jmp %%NextSamplei -%%notinterpsound5 - cmp byte [StereoSound],1 - je near %%NextSampleS - jmp %%NextSample -%%convertBRR - mov eax,[spcRam+esi] - mov ebx,[spcRam+esi+4] - mov [spcRamcmp+esi],eax - mov [spcRamcmp+esi+4],ebx - mov al,[spcRam+esi+8] - mov [spcRamcmp+esi+8],al -%%convertBRR2 mov edi,esi inc edi shl edi,2 @@ -4852,47 +4627,53 @@ SECTION .text mov eax,[Voice0Prev1+%1*4] mov dword [prev1],eax mov ecx,%1 + push ebp call BRRDecode + pop ebp pop esi mov edi,[Voice0BufPtr+%1*4] movsx eax,word [edi] - mov [PSampleBuf+5*4+%1*26*4],eax + mov [PSampleBuf+3*4+%1*24*4],eax movsx eax,word [edi+2*1] - mov [PSampleBuf+6*4+%1*26*4],eax + mov [PSampleBuf+4*4+%1*24*4],eax movsx eax,word [edi+2*2] - mov [PSampleBuf+7*4+%1*26*4],eax + mov [PSampleBuf+5*4+%1*24*4],eax movsx eax,word [edi+2*3] - mov [PSampleBuf+8*4+%1*26*4],eax + mov [PSampleBuf+6*4+%1*24*4],eax movsx eax,word[edi+2*4] - mov [PSampleBuf+9*4+%1*26*4],eax + mov [PSampleBuf+7*4+%1*24*4],eax movsx eax,word [edi+2*5] - mov [PSampleBuf+10*4+%1*26*4],eax + mov [PSampleBuf+8*4+%1*24*4],eax movsx eax,word [edi+2*6] - mov [PSampleBuf+11*4+%1*26*4],eax + mov [PSampleBuf+9*4+%1*24*4],eax movsx eax,word [edi+2*7] - mov [PSampleBuf+12*4+%1*26*4],eax + mov [PSampleBuf+10*4+%1*24*4],eax movsx eax,word [edi+2*8] - mov [PSampleBuf+13*4+%1*26*4],eax + mov [PSampleBuf+11*4+%1*24*4],eax movsx eax,word [edi+2*9] - mov [PSampleBuf+14*4+%1*26*4],eax + mov [PSampleBuf+12*4+%1*24*4],eax movsx eax,word [edi+2*10] - mov [PSampleBuf+15*4+%1*26*4],eax + mov [PSampleBuf+13*4+%1*24*4],eax movsx eax,word [edi+2*11] - mov [PSampleBuf+16*4+%1*26*4],eax - mov [PSampleBuf+21*4+%1*26*4],eax + mov [PSampleBuf+14*4+%1*24*4],eax movsx eax,word [edi+2*12] - mov [PSampleBuf+17*4+%1*26*4],eax - mov [PSampleBuf+22*4+%1*26*4],eax + mov [PSampleBuf+15*4+%1*24*4],eax movsx eax,word [edi+2*13] - mov [PSampleBuf+18*4+%1*26*4],eax - mov [PSampleBuf+23*4+%1*26*4],eax + mov [PSampleBuf+16*4+%1*24*4],eax movsx eax,word [edi+2*14] - mov [PSampleBuf+19*4+%1*26*4],eax - mov [PSampleBuf+24*4+%1*26*4],eax + mov [PSampleBuf+17*4+%1*24*4],eax movsx eax,word [edi+2*15] - mov [PSampleBuf+20*4+%1*26*4],eax - mov [PSampleBuf+25*4+%1*26*4],eax + mov [PSampleBuf+18*4+%1*24*4],eax + + movsx eax,word [BRRreadahead] + mov [PSampleBuf+19*4+%1*24*4],eax + movsx eax,word [BRRreadahead+2] + mov [PSampleBuf+20*4+%1*24*4],eax + movsx eax,word [BRRreadahead+4] + mov [PSampleBuf+21*4+%1*24*4],eax + movsx eax,word [BRRreadahead+6] + mov [PSampleBuf+22*4+%1*24*4],eax mov eax,dword [prev0] mov [Voice0Prev0+%1*4],eax @@ -4904,8 +4685,6 @@ SECTION .text mov [Voice0End+%1],al mov ebx,[Voice0Freq+%1*4] add dword [Voice0Ptr+%1*4],9 -; cmp byte[VoiceNoiseEn+%1],10 -; je %%notinterpsound6 cmp byte [SoundInterpType],0 je %%notinterpsound6 cmp byte [StereoSound],1 @@ -4913,18 +4692,16 @@ SECTION .text jmp %%NextSamplei %%notinterpsound6 cmp byte [StereoSound],1 - je near %%NextSampleS + je %%NextSampleS jmp %%NextSample %%noDecode1Block ; and byte [DSPMem+5Ch],%4 ; and byte [DSPMem+4Ch],%4 ; mov byte[Voice0Looped+%1],0 cmp byte [Voice0Loop+%1],1 - jne near %%EndSample + jne %%EndSample ; mov byte[Voice0Looped+%1],1 mov byte[SoundLooped0+%1],1 - cmp byte[CNetType],20 - je %%SkipStuff3 or byte [DSPMem+7Ch],%3 %%SkipStuff3 ; mov dword[Voice0Prev0+%1*4],0 @@ -4955,27 +4732,24 @@ SECTION .text ; mov [Voice0Prev1+%1*4],eax jmp %%Decode1Block %%EndSample - cmp byte[ENVDisable],1 - je %%noSkipStuff4 - cmp byte[CNetType],20 - je %%SkipStuff4 +; cmp byte[ENVDisable],1 +; je %%noSkipStuff4 %%noSkipStuff4 or byte [DSPMem+7Ch],%3 mov byte [DSPMem+08h+%1*10h],0 %%SkipStuff4 - mov dword[DLPFsamples+%1*26+21*4],0 - mov dword[DLPFsamples+%1*26+22*4],0 - mov dword[DLPFsamples+%1*26+23*4],0 - mov dword[DLPFsamples+%1*26+24*4],0 - mov dword[DLPFsamples+%1*26+25*4],0 + mov dword[DLPFsamples+%1*24*4+16*4],0 + mov dword[DLPFsamples+%1*24*4+17*4],0 + mov dword[DLPFsamples+%1*24*4+18*4],0 + mov dword[DLPFsamples+%1*24*4+19*4],0 ; and byte [DSPMem+5Ch],%4 mov dword[Voice0EnvInc+%1*4],0 mov dword[Voice0IncNumber+%1*4],0 mov byte [Voice0Status+%1],0 ; mov byte [DSPMem+09h+%1*10h],0h - jmp %2 -%%ProcessVoice1 - jmp %2 +; jmp %2 +;%%ProcessVoice1 +; jmp %2 %endmacro %macro ProcessVoiceHandler16 4 @@ -4983,47 +4757,65 @@ SECTION .text jne near %2 cmp byte [Voice0Status+%1],1 jne near %2 - cmp byte[PitchModEn],0 -; je .nopitchmod + mov ebp,%1 + mov dword[powhack],1<<%1 + mov eax,%1 dec al cmp al,0FFh je .nopitchmod -; cmp byte[DSPMem+%1*10h-10h+8h],40h -; jae .noch6dis -; jmp .nopitchmod -; cmp al,6 -; je .nopitchmod -;.noch6dis + cmp byte [Voice0Disable+eax],1 jne .nopitchmod cmp byte [Voice0Status+eax],1 jne .nopitchmod test byte [DSPMem+2Dh],%3 - jnz near .pitchmod + jnz .pitchmod .nopitchmod test byte [DSPMem+3Dh],%3 jnz .NoEcho cmp byte[echoon0+%1],1 - je near .echostuff + je .echostuff .NoEcho - ProcessVoiceStuff %1, %2, %3, %4, NonEchoMono, NonEchoStereo, NonEchoMonoInterpolated, NonEchoStereoInterpolated + mov dword[paramhack],NonEchoMono + mov dword[paramhack+4],NonEchoStereo + mov dword[paramhack+8],NonEchoMonoInterpolated + mov dword[paramhack+12],NonEchoStereoInterpolated + jmp .pvs + ;ProcessVoiceStuff %1, %2, %3, %4, NonEchoMono, NonEchoStereo, NonEchoMonoInterpolated, NonEchoStereoInterpolated ; Process Echo .echostuff - ProcessVoiceStuff %1, %2, %3, %4, EchoMono, EchoStereo, EchoMonoInterpolated, EchoStereoInterpolated + mov dword[paramhack],EchoMono + mov dword[paramhack+4],EchoStereo + mov dword[paramhack+8],EchoMonoInterpolated + mov dword[paramhack+12],EchoStereoInterpolated + jmp .pvs + ;ProcessVoiceStuff %1, %2, %3, %4, EchoMono, EchoStereo, EchoMonoInterpolated, EchoStereoInterpolated .pitchmod mov al,[DSPMem+4+%1*10h] cmp al,[DSPMem+4+%1*10h-10h] - je near .nopitchmod + je .nopitchmod test byte [DSPMem+3Dh],%3 jnz .NoEchopm cmp byte[echoon0+%1],1 - je near .echopm + je .echopm .NoEchopm - ProcessVoiceStuff %1, %2, %3, %4, NonEchoMonoPM, NonEchoStereoPM, NonEchoMonoPM, NonEchoStereoPM + mov dword[paramhack],NonEchoMonoPM + mov dword[paramhack+4],NonEchoStereoPM + mov dword[paramhack+8],NonEchoMonoPM + mov dword[paramhack+12],NonEchoStereoPM + jmp .pvs + ;ProcessVoiceStuff %1, %2, %3, %4, NonEchoMonoPM, NonEchoStereoPM, NonEchoMonoPM, NonEchoStereoPM .echopm - ProcessVoiceStuff %1, %2, %3, %4, EchoMonoPM, EchoStereoPM, EchoMonoPM, EchoStereoPM + mov dword[paramhack],EchoMonoPM + mov dword[paramhack+4],EchoStereoPM + mov dword[paramhack+8],EchoMonoPM + mov dword[paramhack+12],EchoStereoPM + + ;ProcessVoiceStuff %1, %2, %3, %4, EchoMonoPM, EchoStereoPM, EchoMonoPM, EchoStereoPM +.pvs + ProcessVoiceStuff %1, %2, %3, %4 %endmacro %macro FiltTapProc 1 @@ -5101,7 +4893,7 @@ SECTION .text .nexte inc edi cmp edi,[BufferSizeB] - jne near .next + jne .next mov [CEchoPtr],esi jmp .Mono @@ -5182,14 +4974,14 @@ SECTION .text mov eax,[MaxEcho] inc esi - add eax,eax + shl eax,1 cmp esi,eax jb .nextes xor esi,esi .nextes inc edi cmp edi,[BufferSizeB] - jne near .nexts + jne .nexts mov [CEchoPtr],esi .Mono %endmacro @@ -5205,7 +4997,7 @@ SECTION .text ; Copy echobuf to DSPBuffer, EchoBuffer to echobuf cmp byte[StereoSound],1 - je near %%Stereo + je %%Stereo mov esi,[CEchoPtr] xor edi,edi %%next @@ -5277,13 +5069,13 @@ SECTION .text mov eax,[MaxEcho] inc esi - add eax,eax + shl eax,1 cmp esi,eax jae %%echowrap2 %%nextes inc edi cmp edi,[BufferSizeB] - jne near %%nexts + jne %%nexts mov [CEchoPtr],esi jmp %%Mono %%echowrap2 @@ -5292,341 +5084,10 @@ SECTION .text %%Mono %endmacro -NEWSYM SBHandler - cli - push ds - push eax - - -NEWSYM handlersbseg - mov ax,[cs:dssel] - mov ds,ax - - cmp byte[SBHDMA],0 - jne near SBHandler16 - - ; code added by peter santing - cmp byte[vibracard], 1 - je near SBHandler16 - - push ebx - push ecx - push edx - push edi - push esi - push es - - call GetCDMAPos - - cmp byte[csounddisable],1 - je near stopsbsound - test byte[DSPMem+6Ch],11000000b - jnz near stopsbsound - - ; Process the sound :I - - mov es,[sbselec] - cmp byte[SBswitch],0 - jne .2ndblock - mov edi,[sbpmofs] - jmp .startblockcopy -.2ndblock - ; copy to 2nd block - ; clear memory - mov edi,[sbpmofs] - add edi,[BufferSizeB] -.startblockcopy - - mov esi,DSPBuffer - mov ecx,[BufferSizeB] - cmp byte[Surround],0 - je .nosurround - cmp byte[StereoSound],0 - je .surroundmono -; jmp .surroundmono -.nosurround -.loopb - mov eax,[esi] - cmp eax,-32768 - jge .noneg3 - mov eax,-32768 -.noneg3 - cmp eax,32767 - jle .noneg4 - mov eax,32767 -.noneg4 - xor ah,80h - mov [es:edi],ah - add esi,4 - inc edi - dec ecx - jnz .loopb - jmp .sbend -.surroundmono - cmp byte[SBswitch],0 - je .1stblock - add edi,[BufferSizeB] -.1stblock -.loopbm - mov eax,[esi] - cmp eax,-32768 - jge .noneg3m - mov eax,-32768 -.noneg3m - cmp eax,32767 - jle .noneg4m - mov eax,32767 -.noneg4m - xor ah,80h - mov [es:edi],ah - xor ah,80h - neg ah - xor ah,80h - mov [es:edi+1],ah - add esi,4 - add edi,2 - dec ecx - jnz .loopbm -.sbend - xor byte [SBswitch],1 - - ; move the good data at spcRam+0f3h - xor eax,eax - mov al,[spcRam+0F2h] - mov bl,[DSPMem+eax] - mov [spcRam+0F3h],bl - ; acknowledge SB for IRQing - mov dx,[SBPort] - add dl,0Eh - in al,dx - mov al,20h - out 20h,al - cmp byte[SBIrq],7 - jbe .nohighirq - mov al,20h - out 0A0h,al -.nohighirq - sti - jmp Startprocsbdata - -section .data ;ALIGN=32 -echowrittento db 0 +section .bss ;ALIGN=32 +echowrittento resb 1 section .text -NEWSYM stopsbsound -; mov byte[Voice0Status],0 -; mov byte[Voice1Status],0 -; mov byte[Voice2Status],0 -; mov byte[Voice3Status],0 -; mov byte[Voice4Status],0 -; mov byte[Voice5Status],0 -; mov byte[Voice6Status],0 -; mov byte[Voice7Status],0 - - mov ax,ds - mov es,ax - mov edi,DSPBuffer - mov ecx,[BufferSizeB] - xor eax,eax - rep stosd - - cmp byte[SBswitch],0 - jne near .2ndblock - - ; clear block - mov es,[sbselec] - mov edi,[sbpmofs] - mov ecx,[BufferSizeB] - shr ecx,2 -.loopa - mov dword[es:edi],80808080h - add edi,4 - dec ecx - jnz .loopa - jmp .sbend -.2ndblock - ; copy to 2nd block - ; clear memory - mov es,[sbselec] - mov edi,[sbpmofs] - add edi,[BufferSizeB] - mov ecx,[BufferSizeB] - shr ecx,2 -.loopb - mov dword[es:edi],80808080h - add edi,4 - dec ecx - jnz .loopb -.sbend - xor byte [SBswitch],1 - - ; acknowledge SB for IRQing - mov dx,[SBPort] - add dl,0Eh - in al,dx - mov al,20h - out 20h,al - cmp byte[SBIrq],7 - jbe .nohighirq - mov al,20h - out 0A0h,al -.nohighirq - - pop es - pop esi - pop edi - pop edx - pop ecx - pop ebx - pop eax - pop ds - sti - iretd - -section .data ;ALIGN=32 -NEWSYM sbhandexec, dd 0 -section .text - -; Process 20 blocks * 8 voices (no pitch yet) -NEWSYM SBHandler16 - push ebx - push ecx - push edx - push edi - push esi - push es - inc dword[sbhandexec] - - cmp byte [vibracard], 1 - je .donotcallcmdapos - call GetCDMAPos -.donotcallcmdapos - - cmp byte[csounddisable],1 - je near stopsbsound16 - test byte[DSPMem+6Ch],11000000b - jnz near stopsbsound16 - - mov es,[sbselec] - - cmp byte[SBswitch],0 - jne near .2ndblock - mov edi,[sbpmofs] - jmp .doneblock -.2ndblock - ; copy to 2nd block - ; clear memory - mov edi,[sbpmofs] - add edi,[BufferSizeW] -.doneblock - mov esi,DSPBuffer - mov ecx,[BufferSizeB] - cmp byte[Surround],0 - je .nosurround - cmp byte[StereoSound],0 -; jne near .surroundstereo - je .surroundmono -; jmp .surroundmono -.nosurround -.loopb - mov eax,[esi] - cmp eax,-32768 - jge .noneg5 - mov eax,-32768 -.noneg5 - cmp eax,32767 - jle .noneg6 - mov eax,32767 -.noneg6 - mov [es:edi],ax - add esi,4 - add edi,2 - dec ecx - jnz .loopb - jmp .sbend -%ifdef _I_LIKE_SUCKY_FILTERS_ ;bwahaha -.surroundstereo - shr ecx,1 -.loopbs - mov eax,[esi] - cmp eax,-32768 - jge .noneg5s - mov eax,-32768 -.noneg5s - cmp eax,32767 - jle .noneg6s - mov eax,32767 -.noneg6s - mov [es:edi],ax - mov eax,[esi+4] - cmp eax,-32768 - jge .noneg5s2 - mov eax,-32768 -.noneg5s2 - cmp eax,32767 - jle .noneg6s2 - mov eax,32767 -.noneg6s2 - neg ax - mov [es:edi+2],ax - add esi,8 - add edi,4 - dec ecx - jnz .loopbs - jmp .sbend -%endif -.surroundmono - cmp byte[SBswitch],0 - je .1stblock - add edi,[BufferSizeW] -.1stblock -.loopbm - mov eax,[esi] - cmp eax,-32768 - jge .noneg5m - mov eax,-32768 -.noneg5m - cmp eax,32767 - jle .noneg6m - mov eax,32767 -.noneg6m - mov [es:edi],ax - neg ax - mov [es:edi+2],ax - add esi,4 - add edi,4 - dec ecx - jnz .loopbm -.sbend - xor byte [SBswitch],1 - - ; acknowledge SB for IRQing - mov dx,[SBPort] - add dl,0Fh - in al,dx - mov al,20h - out 20h,al - cmp byte[SBIrq],7 - jbe .nohighirq - mov al,20h - out 0A0h,al -.nohighirq - sti - - -Startprocsbdata: - call ProcessSoundBuffer - - pop es - pop esi - pop edi - pop edx - pop ecx - pop ebx - pop eax - pop ds - iretd - NEWSYM ProcessSoundBuffer ; Clear the DSP Buffer mov edi,DSPBuffer @@ -5647,7 +5108,7 @@ NEWSYM ProcessSoundBuffer .nowriteecho ; Process the sound :I - + ProcessVoiceHandler16 0,ProcessVoice116,1,254 NEWSYM ProcessVoice116 ProcessVoiceHandler16 1,ProcessVoice216,2,253 @@ -5705,13 +5166,6 @@ NEWSYM ProcessVoice816 rep stosd mov byte[echowrittento],0 .echowritten - cmp byte[CNetType],20 - je .clearendx - cmp byte[MovieProcessing],0 - je .skipendxclear -.clearendx - mov byte[DSPMem+7Ch],0 -.skipendxclear cmp byte[RevStereo],0 je .norevstereo @@ -5735,7 +5189,7 @@ NEWSYM ProcessVoice816 jne near LPFexit mov esi,DSPBuffer cmp byte[StereoSound],1 - jz near LPFstereo + jz LPFstereo mov ecx, [BufferSizeB] shr ecx,1 mov ebx,[LPFsample1] @@ -5751,7 +5205,7 @@ NEWSYM LPFmonoloop mov [esi],eax add esi,4 dec ecx - jnz near LPFmonoloop + jnz LPFmonoloop mov [LPFsample1],ebx jmp LPFexit @@ -5784,16 +5238,15 @@ NEWSYM LPFstereoloop add esi,8 pop ecx dec ecx - jnz near LPFstereoloop + jnz LPFstereoloop mov [LPFsample1],ebx mov [LPFsample2],edx NEWSYM LPFexit -; %ifndef __MSDOS__ ; wtf ... the other surround filter sucks anyway ;P cmp byte[Surround],1 - jnz near .nosurround + jnz .nosurround cmp byte[StereoSound],1 - jnz near .nosurround + jnz .nosurround mov esi,DSPBuffer mov ecx,[BufferSizeB] shr ecx,1 @@ -5827,657 +5280,8 @@ NEWSYM LPFexit add esi,8 dec ecx - jnz near .loop + jnz .loop .nosurround -;%endif ret -NEWSYM stopsbsound16 -; mov byte[Voice0Status],0 -; mov byte[Voice1Status],0 -; mov byte[Voice2Status],0 -; mov byte[Voice3Status],0 -; mov byte[Voice4Status],0 -; mov byte[Voice5Status],0 -; mov byte[Voice6Status],0 -; mov byte[Voice7Status],0 - - mov ax,ds - mov es,ax - mov edi,DSPBuffer - mov ecx,[BufferSizeB] - xor eax,eax - rep stosd - - cmp byte[SBswitch],0 - jne near .2ndblock - - ; clear block - mov es,[sbselec] - mov edi,[sbpmofs] - mov ecx,[BufferSizeB] - shr ecx,1 -.loopa - mov dword[es:edi],00000000h - add edi,4 - dec ecx - jnz .loopa - jmp .sbend -.2ndblock - ; copy to 2nd block - ; clear memory - mov es,[sbselec] - mov edi,[sbpmofs] - add edi,[BufferSizeW] - mov ecx,[BufferSizeB] - shr ecx,1 -.loopb - mov dword[es:edi],00000000h - add edi,4 - dec ecx - jnz .loopb -.sbend - xor byte [SBswitch],1 - - ; acknowledge SB for IRQing - mov dx,[SBPort] - add dl,0Fh - in al,dx - mov al,20h - out 20h,al - cmp byte[SBIrq],7 - jbe .nohighirq - mov al,20h - out 0A0h,al -.nohighirq - - pop es - pop esi - pop edi - pop edx - pop ecx - pop ebx - pop eax - pop ds - sti - iretd - -;**************************************************** -; Sound Blaster Initialization Stuff -;**************************************************** - -section .data ;ALIGN=32 -NEWSYM memoryloc, dd 0 ; Memory offset in conventional memory -NEWSYM memoryloc2, dd 0 ; Memory offset in conventional memory -NEWSYM sbselec, dw 0 ; Selector of Memory location -NEWSYM sbpmofs, dd 0 ; offset of Memory location -SBDeinitType db 0 -section .text - -NEWSYM initSB - mov eax,[SoundQuality] - cmp byte[StereoSound],1 - jne .nostereobuf - mov ax,[BufferSizes+eax*2] - jmp .skipstereobuf -.nostereobuf - mov ax,[BufferSize+eax*2] -.skipstereobuf - - mov [BufferSizeB],ax - add ax,ax - mov [BufferSizeW],ax - - mov byte [SBswitch],0 - ; Allocate pointer - ; Set up SB - call ResetSBDSP - - ; code added by peter santing - cmp byte [vibracard], 1 - je near .vibrafix2 - - cmp byte [SBHDMA],0 - je .no16bit - cmp byte [SBHDMA],4 - jb near .init16bitlowhdma - jmp .init16bit -.no16bit - - ; Determine Version # - mov al,0E1h - call WriteDSP - call ReadDSP - mov [.Versionnum],al - call ReadDSP - mov [.Versionnum+1],al - - ; Turn on speakers - mov al,0D1h - call WriteDSP - - ; Set Time-Constant Data ( = 256 - (1000000/sampling rate) ) - ; 8000=131, 22050=210, 44100=233, 11025=165 - mov al,40h - call WriteDSP - -; cmp byte[Surround],0 -; jne .surround8b - cmp byte[StereoSound],1 - jne .nostereo8b -.surround8b - mov eax,[SoundQuality] - cmp eax,2 - jbe .okay - mov eax,2 -.okay - mov al,byte [SoundSpeedt+eax] - call WriteDSP - ; Set Stereo - mov dx, [SBPort] - add dx, 04h - mov al,0Eh - out dx,al - inc dx - in al,dx - or al,022h - out dx,al - jmp .donestereo -.nostereo8b - mov eax,[SoundQuality] - mov al,byte [SoundSpeeds+eax] - call WriteDSP -.donestereo - - cmp byte[StereoSound],1 - je .highmode - mov eax,[SoundQuality] - cmp byte [SoundSpeeds+eax],211 - ja .highmode - mov byte[.Versionnum],1 -.highmode - ; Setup DMA - ; Select DMA channel - mov al,[SBDMA] - add al,4 - mov dx,000Ah - out dx,al - ; Clear DMA - mov al,00h - mov dx,000Ch - out dx,al - ; Set autoinit/write (set as DAC) - mov al,58h - add al,[SBDMA] - mov dx,000Bh - out dx,al - ; Send Offset Address - mov al,[memoryloc] - mov dl,[SBDMA] - shl dl,1 - out dx,al - mov al,[memoryloc+1] - out dx,al - ; Send length of entire block - mov ax,[BufferSizeW] - dec ax - inc dx - out dx,al - mov al,ah - out dx,al - ; Send page # (address/65536) - mov al,[memoryloc+2] - mov dl,[SBDMAPage] - out dx,al - ; turn on DMA - mov al,[SBDMA] - mov dx,000Ah - out dx,al - - ; Prepare SB for the first block - ; 8-bit auto-init, mono, unsigned - mov al,048h ; Sb 2.0 version... - call WriteDSP - - ; Send Length-1 to DSP port - mov ax,[BufferSizeB] - dec ax - call WriteDSP - mov al,ah - call WriteDSP - mov byte[SBDeinitType],1 - mov al,090h ; Sb 2.0 version... - cmp byte[.Versionnum],2 - jne .noversion2 - cmp byte[.Versionnum+1],0 - je .slowspeed -.noversion2 - cmp byte[.Versionnum],1 - ja .notversion1 -.slowspeed - mov byte[SBDeinitType],0 - mov al,1Ch -.notversion1 - call WriteDSP - jmp .fixsurround - -SECTION .data ;ALIGN=32 -.Versionnum dw 0 -SECTION .text - -; ***************************************** -; **** alternate ViBRA16X SB init code **** by Peter Santing -; ***************************************** copied portions of original code -; and modified it. - -.vibrafix2 - ; notify user that we're in ViBRA16x mode.. - push eax - mov dword [Msgptr], vibmsg - mov eax, [MsgCount] - mov [MessageOn], eax - pop eax - - ; Set Time-Constant Data ( = 256 - (1000000/sampling rate) ) - ; 8000=131, 22050=210, 44100=233, 11025=165 - - ; Setup DMA - ; Select DMA channel - mov al,[SBDMA] - add al,4 - mov dx,000Ah - out dx,al - ; Clear DMA - mov al,00h - mov dx,000Ch - out dx,al - ; Set autoinit/write (set as DAC) - mov al,58h - add al,[SBDMA] - mov dx,000Bh - out dx,al - ; Send Offset Address - mov al,[memoryloc] - mov dl,[SBDMA] - shl dl,1 - out dx,al - mov al,[memoryloc+1] - out dx,al - ; Send length of entire block - mov ax,[BufferSizeW] - shl ax, 1 - dec ax - inc dx - out dx,al - mov al,ah - out dx,al - ; Send page # (address/65536) - mov al,[memoryloc+2] - mov dh, 0 - mov dl,[SBDMAPage] - out dx,al - ; turn on DMA - mov al,[SBDMA] - mov dx,000Ah - out dx,al - - mov al,41h - call WriteDSP - push ecx - mov ecx,[SoundQuality] - mov al,byte [SBToSPCSpeeds2+ecx*4+1] - pop ecx - call WriteDSP - push ecx - mov ecx,[SoundQuality] - mov al,byte [SBToSPCSpeeds2+ecx*4] - pop ecx - call WriteDSP - - ; Prepare SB for the first block - ; 16-bit auto-init, mono, unsigned - mov al,0B6h ; Sb 16 version (DSP 4) - call WriteDSP - cmp byte[StereoSound],1 - jne ._Mono -._surround - mov al,30h ; stereo/signed - call WriteDSP - jmp ._AfterStereo -._Mono - mov al,10h ; mono/signed - call WriteDSP -._AfterStereo - - ; Send Length-1 to DSP port - mov ax,[BufferSizeB] - dec ax - call WriteDSP - mov al,ah - call WriteDSP - - ; Turn on speakers - mov al,0D1h - call WriteDSP - - jmp .fixsurround - -; ******* end of alternate SB init code for ViBRA ******** - -.init16bitlowhdma - ; Set Time-Constant Data ( = 256 - (1000000/sampling rate) ) - ; 8000=131, 22050=210, 44100=233, 11025=165 - mov al,40h - call WriteDSP - - push ecx - mov ecx,[SoundQuality] - mov al,byte [SoundSpeeds+ecx] - pop ecx - call WriteDSP - - mov edx,[memoryloc] - shr edx,1 - mov [memoryloc2],edx - - ; Setup DMA - - ; turn off DMA -; mov al,[SBHDMA] -; and al,03h -; or al,04h -; mov dx,00D4h -; out dx,al - - ; Setup DMA - ; Select DMA channel - mov al,[SBHDMA] - and al,03h - or al,04h - mov dx,000Ah - out dx,al - - ; clear flip-flop - mov dx,00D8h - xor al,al - out dx,al - - ; Set autoinit/write (set as DAC) - mov al,[SBHDMA] - and al,3 - add al,58h - mov dx,00D6h - out dx,al - - ; Send Offset Address -; mov al,[memoryloc2] -; mov dl,[SBHDMA] -; and dl,3 -; shl dl,2 -; add dl,0C0h -; out dx,al -; mov al,[memoryloc2+1] -; out dx,al - - ; Send Offset Address - mov al,[memoryloc] - mov dl,[SBDMA] - shl dl,1 - out dx,al - mov al,[memoryloc+1] - out dx,al - - ; Send length of entire block - mov ax,[BufferSizeW] - dec ax - add dx,2 - out dx,al - mov al,ah - out dx,al - - ; Send page # (address/65536) - mov al,[memoryloc+2] - mov dl,[SBHDMAPage] - out dx,al - - ; Prepare SB for the first block - ; 16-bit auto-init, mono, unsigned - mov al,0B6h ; Sb 16 version (DSP 4) - call WriteDSP -; cmp byte[Surround],0 -; jne .surroundl - cmp byte[StereoSound],1 - jne .Monol -.surroundl - mov al,30h ; stereo/signed - call WriteDSP - jmp .AfterStereol -.Monol - mov al,10h ; mono/signed - call WriteDSP -.AfterStereol - - ; Send Length-1 to DSP port - mov ax,[BufferSizeB] - dec ax - call WriteDSP - mov al,ah - call WriteDSP - - ; turn on DMA -; mov al,[SBHDMA] -; and al,03h -; mov dx,00D4h -; out dx,al - - ; Setup DMA - ; Select DMA channel - mov al,[SBHDMA] - and al,03h - mov dx,000Ah - out dx,al - - ; Turn on speakers - mov al,0D1h - call WriteDSP - jmp .fixsurround - -.init16bit - ; Set Time-Constant Data ( = 256 - (1000000/sampling rate) ) - ; 8000=131, 22050=210, 44100=233, 11025=165 - mov al,41h - call WriteDSP - push ecx - mov ecx,[SoundQuality] - mov al,byte [SBToSPCSpeeds2+ecx*4+1] - pop ecx - call WriteDSP - push ecx - mov ecx,[SoundQuality] - mov al,byte [SBToSPCSpeeds2+ecx*4] - pop ecx - call WriteDSP - - mov edx,[memoryloc] - shr edx,1 - mov [memoryloc2],edx - - ; Setup DMA - - ; turn off DMA - mov al,[SBHDMA] - and al,03h - or al,04h - mov dx,00D4h - out dx,al - - ; clear flip-flop - mov dx,00D8h - xor al,al - out dx,al - - ; Set autoinit/write (set as DAC) - mov al,[SBHDMA] - and al,3 - add al,58h - mov dx,00D6h - out dx,al - - ; Send Offset Address - mov al,[memoryloc2] - mov dl,[SBHDMA] - and dl,3 - shl dl,2 - add dl,0C0h - out dx,al - mov al,[memoryloc2+1] - out dx,al - - ; Send length of entire block - mov ax,[BufferSizeW] - dec ax - add dx,2 - out dx,al - mov al,ah - out dx,al - - ; Send page # (address/65536) - mov al,[memoryloc+2] - mov dl,[SBHDMAPage] - and al,0FEh - out dx,al - - ; Prepare SB for the first block - ; 16-bit auto-init, mono, unsigned - mov al,0B6h ; Sb 16 version (DSP 4) - call WriteDSP -; cmp byte[Surround],0 -; jne .surround - cmp byte[StereoSound],1 - jne .Mono -.surround - mov al,30h ; stereo/signed - call WriteDSP - jmp .AfterStereo -.Mono - mov al,10h ; mono/signed - call WriteDSP -.AfterStereo - - ; Send Length-1 to DSP port - mov ax,[BufferSizeB] - dec ax - call WriteDSP - mov al,ah - call WriteDSP - - ; Turn on speakers - mov al,0D1h - call WriteDSP - - ; turn on DMA - mov al,[SBHDMA] - and al,03h - mov dx,00D4h - out dx,al - -.fixsurround - - ; Adjust byte lengths for mono surround sound - cmp byte[Surround],0 - je .nosurroundadj - cmp byte[StereoSound],0 - jne .nosurroundadj -; shr word[BufferSizeB],1 -; shr word[BufferSizeW],1 -.nosurroundadj - ret - - -GetCDMAPos: - ; clear flipflop - xor ebx,ebx - mov bl,[SBDMA] - cmp byte[SBHDMA],4 - jb .nohdma - mov bl,[SBHDMA] - mov dx,0Ch -.nohdma - mov dx,0D8h - xor al,al - out dx,al - nop - nop - nop - nop - mov dx,[.wordcountport+ebx*2] - - in al,dx - nop - nop - mov bl,al - in al,dx - nop - nop - nop - nop - mov bh,al - cmp byte[SBHDMA],4 - jb .ldma2 - add bx,bx -.ldma2 - ; value returned = bx, # of bytes left for transfer - mov cx,[BufferSizeB] - mov dx,cx - add cx,cx - cmp byte[SBHDMA],4 - jb .ldmab - add cx,cx - add dx,dx -.ldmab - sub cx,bx - mov byte[SBswitch],1 - cmp cx,dx - jb .parta - mov byte[SBswitch],0 -.parta - ret -SECTION .data -.wordcountport dw 1,3,5,7,0C2h,0C6h,0CAh,0CEh -SECTION .text - -; old routines, doesn't work w/ sb live! - jmp .fin - -.loop - in al,dx - nop - nop - mov cl,al - in al,dx - nop - nop - nop - nop - mov ch,al - in al,dx - nop - nop - mov bl,al - in al,dx - mov bh,al - sub cx,bx - test cx,8000h - jz .notneg - neg cx -.notneg - cmp byte[SBHDMA],4 - jb .ldma - add cx,cx - add bx,bx -.ldma - cmp cx,4 - ja .loop - -.fin NEWSYM DspProcAsmEnd diff --git a/zsnes/src/cpu/execute.asm b/zsnes/src/cpu/execute.asm index 76fb2c8e..50fe7a74 100644 --- a/zsnes/src/cpu/execute.asm +++ b/zsnes/src/cpu/execute.asm @@ -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 diff --git a/zsnes/src/cpu/spc700.asm b/zsnes/src/cpu/spc700.asm index 2178b75e..1a00e470 100644 --- a/zsnes/src/cpu/spc700.asm +++ b/zsnes/src/cpu/spc700.asm @@ -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 diff --git a/zsnes/src/dos/modemrtn.asm b/zsnes/src/dos/modemrtn.asm index 995cb2f0..966024fc 100644 --- a/zsnes/src/dos/modemrtn.asm +++ b/zsnes/src/dos/modemrtn.asm @@ -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 diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index ab5e113c..a7db9bf1 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -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 diff --git a/zsnes/src/gui/guicheat.inc b/zsnes/src/gui/guicheat.inc index 74c013c7..d14a82b8 100644 --- a/zsnes/src/gui/guicheat.inc +++ b/zsnes/src/gui/guicheat.inc @@ -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 diff --git a/zsnes/src/gui/guikeys.inc b/zsnes/src/gui/guikeys.inc index 1570faa1..8711ac80 100644 --- a/zsnes/src/gui/guikeys.inc +++ b/zsnes/src/gui/guikeys.inc @@ -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__ diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index 0ad0e8fd..a868afe6 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -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 diff --git a/zsnes/src/gui/guimisc.inc b/zsnes/src/gui/guimisc.inc index f9ba7981..f414b2de 100644 --- a/zsnes/src/gui/guimisc.inc +++ b/zsnes/src/gui/guimisc.inc @@ -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: diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index bea38ce7..d48f6dac 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -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 diff --git a/zsnes/src/gui/guinetpl.inc b/zsnes/src/gui/guinetpl.inc index 88a5209e..33ca6a42 100644 --- a/zsnes/src/gui/guinetpl.inc +++ b/zsnes/src/gui/guinetpl.inc @@ -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 diff --git a/zsnes/src/gui/guiwindp.inc b/zsnes/src/gui/guiwindp.inc index 1c79c23b..e74401cb 100644 --- a/zsnes/src/gui/guiwindp.inc +++ b/zsnes/src/gui/guiwindp.inc @@ -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 diff --git a/zsnes/src/gui/menu.asm b/zsnes/src/gui/menu.asm index 4dabaefb..604463ba 100644 --- a/zsnes/src/gui/menu.asm +++ b/zsnes/src/gui/menu.asm @@ -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 diff --git a/zsnes/src/link.win32 b/zsnes/src/link.win32 index f760df00..bb1a35d4 100644 --- a/zsnes/src/link.win32 +++ b/zsnes/src/link.win32 @@ -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 diff --git a/zsnes/src/makefile.dos b/zsnes/src/makefile.dos index 177834f0..e1a0dd0e 100644 --- a/zsnes/src/makefile.dos +++ b/zsnes/src/makefile.dos @@ -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__ diff --git a/zsnes/src/makefile.win b/zsnes/src/makefile.win index c865a095..77c51efd 100644 --- a/zsnes/src/makefile.win +++ b/zsnes/src/makefile.win @@ -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\ diff --git a/zsnes/src/smoke.c b/zsnes/src/smoke.c index 53092fa9..0536b7cb 100644 --- a/zsnes/src/smoke.c +++ b/zsnes/src/smoke.c @@ -1,12 +1,8 @@ -#ifdef __LINUX__ -# include "gblhdr.h" -#else # include # include # include -#endif /* diff --git a/zsnes/src/ui.asm b/zsnes/src/ui.asm index ead206c4..0b5bda83 100644 --- a/zsnes/src/ui.asm +++ b/zsnes/src/ui.asm @@ -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 diff --git a/zsnes/src/video/procvid.asm b/zsnes/src/video/procvid.asm index d6ec0ff2..6f9ca591 100644 --- a/zsnes/src/video/procvid.asm +++ b/zsnes/src/video/procvid.asm @@ -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 diff --git a/zsnes/src/water.c b/zsnes/src/water.c index f8180b57..c03b6a93 100644 --- a/zsnes/src/water.c +++ b/zsnes/src/water.c @@ -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); diff --git a/zsnes/src/win/winintrf.asm b/zsnes/src/win/winintrf.asm index 7ad60339..52a0f7b1 100644 --- a/zsnes/src/win/winintrf.asm +++ b/zsnes/src/win/winintrf.asm @@ -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 \ No newline at end of file diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index 0e381418..55ae7e14 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -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(){