From e59917412c01a619ca382e07957d4449a58ef5a2 Mon Sep 17 00:00:00 2001 From: n-a-c-h <> Date: Fri, 24 Mar 2006 00:47:31 +0000 Subject: [PATCH] Trashed snesmouse, now using devices. pagefault: please look over. --- zsnes/src/cfg.psr | 3 +- zsnes/src/cpu/execute.asm | 27 ++++++++---- zsnes/src/cpu/regs.inc | 4 +- zsnes/src/gui/gui.asm | 2 +- zsnes/src/gui/guimouse.inc | 2 +- zsnes/src/gui/guiwindp.inc | 2 +- zsnes/src/init.asm | 54 +++++++++--------------- zsnes/src/initc.c | 27 ++++++------ zsnes/src/uic.c | 55 ++++++++++++++---------- zsnes/src/vcache.asm | 84 ++++++++++++++++++++++--------------- zsnes/src/video/procvid.asm | 78 +++++++++++++++++++++++++++------- zsnes/src/win/winlink.cpp | 10 ++--- zsnes/src/zmovie.c | 8 ++-- 13 files changed, 217 insertions(+), 139 deletions(-) diff --git a/zsnes/src/cfg.psr b/zsnes/src/cfg.psr index fac98bc7..c6ffd2e7 100644 --- a/zsnes/src/cfg.psr +++ b/zsnes/src/cfg.psr @@ -33,7 +33,8 @@ NEWSYM KeyBGDisble2, dd 4 NEWSYM KeyBGDisble3, dd 5 NEWSYM KeySprDisble, dd 6 NEWSYM KeyResetAll, dd 7 -NEWSYM KeyExtraEnab, dd 8 +NEWSYM KeyExtraEnab1, dd 0 +NEWSYM KeyExtraEnab2, dd 0 NEWSYM KeyNewGfxSwt, dd 9 NEWSYM KeyWinDisble, dd 10 NEWSYM KeyOffsetMSw, dd 11 diff --git a/zsnes/src/cpu/execute.asm b/zsnes/src/cpu/execute.asm index 3ef11574..bbcb3915 100644 --- a/zsnes/src/cpu/execute.asm +++ b/zsnes/src/cpu/execute.asm @@ -37,7 +37,7 @@ EXTSYM cachesprites,opcjmptab,CheatOn EXTSYM INTEnab,JoyCRead,NMIEnab,NumCheats,CurrentExecSA1,ReadInputDevice EXTSYM StartDrawNewGfx,VIRQLoc,cachevideo,cfield,cheatdata,curblank,curnmi EXTSYM curypos,cycpl,doirqnext,drawline,exechdma,hdmadelay,intrset,newengen -EXTSYM oamaddr,oamaddrs,resolutn,showvideo,snesmouse,starthdma,switchtonmi +EXTSYM oamaddr,oamaddrs,resolutn,showvideo,starthdma,switchtonmi EXTSYM switchtovirq,totlines,updatetimer,SA1Swap,SA1DoIRQ,JoyAOrig,JoyANow EXTSYM JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow,JoyEOrig,JoyENow EXTSYM SA1Message,MultiTapStat,idledetectspc,SA1Control,SA1Enable,SA1IRQEnable @@ -54,6 +54,7 @@ EXTSYM MovieSeekBehind,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate EXTSYM KeyInsrtChap,KeyNextChap,KeyPrevChap,MovieInsertChapter,MovieSeekAhead EXTSYM ResetDuringMovie,EMUPauseKey,INCRFrameKey,MovieWaiting,NoInputRead EXTSYM AllocatedRewindStates,PauseFrameMode,RestorePauseFrame,BackupPauseFrame +EXTSYM device2 %ifdef __MSDOS__ EXTSYM dssel,Game60hzcall,NextLineStart,FlipWait,LastLineStart @@ -1365,11 +1366,18 @@ NEWSYM cpuover jmp DosExit .noprocmovie - cmp byte[snesmouse],5 - jne .nolethalen + cmp byte[device2],3 + jne .nolethalen1 mov eax,[LethEnData] mov [JoyBNow],eax -.nolethalen +.nolethalen1 + ;Todo, add second gun... + cmp byte[device2],4 + jne .nolethalen2 + mov eax,[LethEnData] + mov [JoyBNow],eax +.nolethalen2 + test byte[INTEnab],1 jz .noresetjoy @@ -2130,11 +2138,16 @@ NEWSYM execsingle mov byte[JoyCRead],0 .noresetjoy - cmp byte[snesmouse],4 - jne .nolethalen + cmp byte[device2],3 + jne .nolethalen1 mov eax,[LethEnData] mov [JoyBNow],eax -.nolethalen +.nolethalen1 + cmp byte[device2],4 + jne .nolethalen2 + mov eax,[LethEnData] + mov [JoyBNow],eax +.nolethalen2 mov byte[MultiTapStat],80h mov byte[NMIEnab],81h diff --git a/zsnes/src/cpu/regs.inc b/zsnes/src/cpu/regs.inc index 7c958fc6..5e1491bd 100644 --- a/zsnes/src/cpu/regs.inc +++ b/zsnes/src/cpu/regs.inc @@ -21,7 +21,7 @@ EXTSYM SFXEnable,regptr,initsfxregsr,initSA1regs,SA1Enable,initSDD1regs EXTSYM SPC7110Enable,initSPC7110regs,RTCEnable,RTCReset,curypos,cycpl EXTSYM debuggeron,pdh,vram,romispal,reg1read,spcnumread,spcon,reg2read,reg3read -EXTSYM reg4read,JoyEOrig,JoyENow,snesmouse,cycphb,joycontren,totlines,DosExit +EXTSYM reg4read,JoyEOrig,JoyENow,device2,cycphb,joycontren,totlines,DosExit EXTSYM invalid,numinst,previdmode,printhex,printnum SECTION .text @@ -908,7 +908,7 @@ SECTION .text ; Joystick Data for controller 2 and 4 reg4017r: - cmp byte[snesmouse],0 + cmp byte[device2],0 jne .nomultitap cmp byte[MultiTap],1 je .multitap diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index f5533327..9013c78e 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -118,7 +118,7 @@ EXTSYM RewindStates,RewindFrames,PauseRewind,PauseLoad,SRAMState,AutoState EXTSYM LatestSave,SRAMSave5Sec,AutoIncSaveSlot,pl3selk,pl4selk,pl5selk EXTSYM pl1Atk,pl2Atk,pl3Atk,pl4Atk,pl5Atk,pl3contrl,KeyUsePlayer1234 EXTSYM pl1Ltk,pl2Ltk,pl3Ltk,pl4Ltk,pl5Ltk,pl4contrl,KeyResetAll,CalibXmin -EXTSYM pl5contrl,KeyExtraEnab,CalibYmin +EXTSYM pl5contrl,KeyExtraEnab1,KeyExtraEnab2,CalibYmin EXTSYM pl1ULk,pl2ULk,pl3ULk,pl4ULk,pl5ULk,KeyVolDown,KeyVolUp,CalibXmax EXTSYM CalibYmax,CalibXmin209,CalibXmax209,CalibYmin209,CalibYmax209 EXTSYM KeyBGDisble0,KeyBGDisble1,KeyBGDisble2,KeyBGDisble3,KeySprDisble diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index 649a0b1b..46b9027a 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -2869,7 +2869,7 @@ DisplayGameOptnsClick: DGOptnsProcBox 78,100,[KeyUsePlayer1234] DGOptnsProcBox 78,110,[KeyResetAll] - DGOptnsProcBox 78,120,[KeyExtraEnab] + ;DGOptnsProcBox 78,120,[KeyExtraEnab] DGOptnsProcBox 78,130,[KeyDisplayFPS] DGOptnsProcBox 78,140,[KeyIncreaseGamma] DGOptnsProcBox 78,150,[KeyDecreaseGamma] diff --git a/zsnes/src/gui/guiwindp.inc b/zsnes/src/gui/guiwindp.inc index 8f2df5fa..241fa88f 100644 --- a/zsnes/src/gui/guiwindp.inc +++ b/zsnes/src/gui/guiwindp.inc @@ -2989,7 +2989,7 @@ DisplayGameOptns: ; Misc Key Window DDrawBox 9,77,99,[KeyUsePlayer1234] DDrawBox 9,77,109,[KeyResetAll] - DDrawBox 9,77,119,[KeyExtraEnab] + ;DDrawBox 9,77,119,[KeyExtraEnab] DDrawBox 9,77,129,[KeyDisplayFPS] DDrawBox 9,77,139,[KeyIncreaseGamma] DDrawBox 9,77,149,[KeyDecreaseGamma] diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index 0682f624..f1e0d1a3 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -31,8 +31,8 @@ EXTSYM pl3Lk,pl3Rk,pl3Xk,pl3Yk,pl3contrl,pl3downk,pl3leftk,pl3rightk,pl3selk EXTSYM pl3startk,pl3upk,pl4Ak,pl4Bk,pl4Lk,pl4Rk,pl4Xk,pl4Yk,pl4contrl,pl4downk EXTSYM pl4leftk,pl4rightk,pl4selk,pl4startk,pl4upk,mousebuttons,mousexdir,pl5Ak EXTSYM pl5Bk,pl5Lk,pl5Rk,pl5Xk,pl5Yk,pl5contrl,pl5downk,pl5leftk,pl5rightk -EXTSYM pl5selk,pl5startk,pl5upk,mouseydir,mousexpos,mouseypos,snesmouse,sram -EXTSYM processmouse,ssautosw,GUIDelayB,pl12s34,pl1Xtk,pl1Ytk,pl1Atk,pl1Btk +EXTSYM pl5selk,pl5startk,pl5upk,mouseydir,mousexpos,mouseypos,sram +EXTSYM ssautosw,GUIDelayB,pl12s34,pl1Xtk,pl1Ytk,pl1Atk,pl1Btk EXTSYM pl2Xtk,pl2Ytk,pl2Atk,pl2Btk,pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl4Xtk,pl4Ytk EXTSYM pl4Atk,pl4Btk,pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2ULk,pl2URk,pl2DLk,pl2DRk EXTSYM pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk,pl5ULk,pl5URk @@ -55,6 +55,7 @@ EXTSYM GetCurDir,SRAMChdir,cfgloadsdir,fnamest,statefileloc,InitDir,InitDrive EXTSYM curromspace,infoloc,patchfile,romispal,initregr,initregw,memtabler16 EXTSYM memtabler8,memtablew16,memtablew8,sfxramdata,wramreadptr EXTSYM wramwriteptr,loadstate2,CMovieExt,MoviePlay,MovieDumpRaw,AllowUDLR +EXTSYM device1,device2,processmouse1,processmouse2 ;initc.c EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,ZOpenFileName,loadROM,SPC7110IndexSize @@ -719,21 +720,10 @@ NEWSYM ReadInputDevice mov dword[JoyAOrig],0 mov dword[JoyBOrig],0 - cmp byte[snesmouse],3 - jne .nomultimouse - mov byte[MouseToRead],1 - call processmouse - ProcSNESMouse JoyAOrig - mov byte[MouseToRead],2 - call processmouse - ProcSNESMouse JoyBOrig - jmp .noinput2 -.nomultimouse - ; Get Player1 input device - cmp byte[snesmouse],1 + cmp byte[device1],1 jne .nomouse1 - call processmouse + call processmouse1 ProcSNESMouse JoyAOrig jmp .noinput1 .nomouse1 @@ -781,15 +771,16 @@ NEWSYM ReadInputDevice and dword[JoyAOrig],7FFFFFFFh .noinput1 mov dword[JoyBOrig],0 - cmp byte[snesmouse],2 + cmp byte[device2],1 jne .nomouse2 - call processmouse + mov byte[MouseToRead],1 + call processmouse2 ProcSNESMouse JoyBOrig jmp .noinput2 .nomouse2 - cmp byte[snesmouse],4 + cmp byte[device2],2 jne .nosuperscope - call processmouse + call processmouse2 mov byte[JoyBOrig+2],0FFh mov al,[ssautosw] test byte[mousebuttons],01h @@ -807,9 +798,9 @@ NEWSYM ReadInputDevice mov [JoyBOrig+3],al jmp .noinput2 .nosuperscope - cmp byte[snesmouse],5 + cmp byte[device2],3 jne .nolethalen - call processmouse + call processmouse2 mov eax,[romdata] cmp dword[eax+1000h],0AD20C203h jne .not @@ -982,24 +973,17 @@ NEWSYM ReadInputDevice or dword[JoyEOrig],00008000h ; Joystick Enable .noinput5 cmp byte[pl12s34],1 - je .pl1234 -.nopl1234 - ret -.pl1234 - cmp byte[snesmouse],5 - je .nopl1234 - cmp byte[snesmouse],1 - je .nopl13 + jne .nop24 + cmp byte[device1],0 + jne .nop13 mov eax,[JoyCOrig] or [JoyAOrig],eax -.nopl13 - cmp byte[snesmouse],2 - je .nopl24 - cmp byte[snesmouse],4 - je .nopl24 +.nop13 + cmp byte[device2],0 + jne .nop24 mov eax,[JoyDOrig] or [JoyBOrig],eax -.nopl24 +.nop24 ret ;******************************************************* diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index 3826c9d3..34ee533c 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -1099,8 +1099,8 @@ bool NSRTHead(unsigned char *ROM) extern bool EMUPause; extern bool Sup48mbit; extern bool Sup16mbit; -extern unsigned char snesmouse; -unsigned char snesinputdefault; +extern unsigned char device1, device2; +unsigned char snesinputdefault1, snesinputdefault2; bool input1gp; bool input1mouse; bool input2gp; @@ -1201,7 +1201,8 @@ void loadROM() } } - snesmouse = 0; + device1 = 0; + device2 = 0; input1gp = true; input1mouse = true; input2gp = true; @@ -1226,7 +1227,7 @@ void loadROM() break; case 0x01: //Mouse port 2 - snesmouse = 2; + device2 = 1; input2gp = false; input2scope = false; input2just = false; @@ -1234,7 +1235,7 @@ void loadROM() break; case 0x03: //Super Scope port 2 - snesmouse = 3; + device2 = 2; input2gp = false; input2mouse = false; input2just = false; @@ -1242,14 +1243,14 @@ void loadROM() break; case 0x04: //Super Scope or Gamepad port 2 - snesmouse = 3; + device2 = 2; input2mouse = false; input2just = false; input1mouse = false; break; case 0x05: //Justifier (Lethal Enforcer gun) port 2 - snesmouse = 4; + device2 = 3; input2mouse = false; input2scope = false; input1mouse = false; @@ -1264,14 +1265,14 @@ void loadROM() break; case 0x08: //Mouse or Multitap port 2 - snesmouse = 2; + device2 = 1; input2just = false; input2scope = false; input1mouse = false; break; case 0x10: //Mouse port 1 - snesmouse = 1; + device1 = 1; input2mouse = false; input2just = false; input2scope = false; @@ -1279,14 +1280,15 @@ void loadROM() break; case 0x20: //Mouse or Gamepad port 1 - snesmouse = 1; + device1 = 1; input2mouse = false; input2just = false; input2scope = false; break; case 0x22: //Mouse or Gamepad port 1 and port 2 - snesmouse = 1; + device1 = 1; + device2 = 1; input2just = false; input2scope = false; break; @@ -1303,7 +1305,8 @@ void loadROM() memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace); } - snesinputdefault = snesmouse; + snesinputdefault1 = device1; + snesinputdefault2 = device2; SplitSupport(); diff --git a/zsnes/src/uic.c b/zsnes/src/uic.c index b56130e9..245413c2 100644 --- a/zsnes/src/uic.c +++ b/zsnes/src/uic.c @@ -120,7 +120,6 @@ unsigned char Sup48mbit = 1; // Support 48mbit roms unsigned char Sup16mbit = 0; // Support 16mbit roms unsigned char dmadeddis = 0; // DMA deduction unsigned char antienab = 0; // Interpolation Enabled -unsigned char snesmouse = 0; // Mouse status (1 = enabled) unsigned char device1 = 0; // Device in port 1? 0 = Gamepad unsigned char device2 = 0; // Device in port 2? unsigned char OldStyle = 1; // Old style joystick on @@ -176,42 +175,56 @@ extern bool input2gp; extern bool input2mouse; extern bool input2scope; extern bool input2just; -extern unsigned char snesmouse; -void cycleinputdevice() +void cycleinputdevice1() { for (;;) { - snesmouse++; - if (snesmouse >= 6) + device1++; + if (device1 >= 2) { - snesmouse = 0; + device1 = 0; } - if (snesmouse == 0) + if (device1 == 0) { - if (input1gp && input2gp) { return; } - snesmouse++; + if (input1gp) { return; } + device1++; } - if (snesmouse == 1) + if (device1 == 1) { if (input1mouse) { return; } - snesmouse++; } - if (snesmouse == 2) + } +} +void cycleinputdevice2() +{ + for (;;) + { + device2++; + if (device2 >= 5) + { + device2 = 0; + } + if (device2 == 0) + { + if (input2gp) { return; } + device2++; + } + if (device2 == 1) { if (input2mouse) { return; } - snesmouse++; + device2++; } - if (snesmouse == 3) - { - if (input2mouse) { return; } - snesmouse++; - } - if (snesmouse == 4) + if (device2 == 2) { if (input2scope) { return; } - snesmouse++; + device2++; } - if (snesmouse == 5) + if (device2 == 3) + { + if (input2just) { return; } + device2++; + } + if (device2 == 4) { if (input2just) { return; } } diff --git a/zsnes/src/vcache.asm b/zsnes/src/vcache.asm index b16c0728..2959aede 100644 --- a/zsnes/src/vcache.asm +++ b/zsnes/src/vcache.asm @@ -27,7 +27,7 @@ EXTSYM Voice6Status,Voice7Disable,Voice7Status,bgcmsung,bgmode,cbackofsaddr EXTSYM cgmod,debuggeron,disableeffects,frameskip,frskipper EXTSYM maxbr,modeused,mousexloc,mouseyloc,newengen EXTSYM nextdrawallng,oamaddr,pal16b,pal16bxcl,pressed,prevbright,prevpal -EXTSYM scaddsngb,scaddtngb,scaddtngbx,scfbl,scrndis,snesmouse,sprprdrn,t1cc +EXTSYM scaddsngb,scaddtngb,scaddtngbx,scfbl,scrndis,sprprdrn,t1cc EXTSYM vidbright,vidbuffer,vidbufferm,vidbufferofsa,vidbufferofsb,vidmemch2 EXTSYM statefileloc,fnamest,GUIClick,MousePRClick,ngmsdraw,cvidmode EXTSYM KeyDisableSC0,KeyDisableSC1,KeyDisableSC2,KeyDisableSC3,KeyDisableSC4 @@ -46,9 +46,11 @@ EXTSYM FPSOn,pl12s34,bg1ptr,bg2ptr,bg3ptr,bg4ptr,cachebg1,resolutn,curypos EXTSYM oamram,objhipr,objptr,objptrn,objsize1,objsize2,spritetablea,sprleftpr EXTSYM sprlefttot,vcache4b,objadds1,objadds2,objmovs1,objmovs2,tltype4b EXTSYM vidmemch4,vram,bgptr,bgptrc,bgptrd,curtileptr,vcache2b,vcache8b,vidmemch8 -EXTSYM offsetmshl,NextLineCache,tltype2b,tltype8b,objwlrpos,snesinputdefault +EXTSYM offsetmshl,NextLineCache,tltype2b,tltype8b,objwlrpos EXTSYM cycleinputdevice,SRAMChdir,EmuSpeed,SDRatio,FFRatio,DisplayBatteryStatus EXTSYM KeyResetSpeed,KeyEmuSpeedUp,KeyEmuSpeedDown,KeyDisplayBatt,EMUPause +EXTSYM device1,device2,snesinputdefault1,snesinputdefault2 +EXTSYM KeyExtraEnab1,KeyExtraEnab2,cycleinputdevice1,cycleinputdevice2 ; Process stuff & Cache sprites @@ -408,7 +410,9 @@ NEWSYM cachevideo push edx cmp byte[GUIClick],0 je .noclick - cmp byte[snesmouse],0 + cmp byte[device1],0 + jne .noclick + cmp byte[device2],0 jne .noclick call Get_MouseData test bx,02h @@ -528,46 +532,60 @@ NEWSYM cachevideo mov byte[disableeffects],0 mov byte[osm2dis],0 mov byte[EmuSpeed],29 - mov al,[snesinputdefault] - mov [snesmouse],al + mov al,[snesinputdefault1] + mov [device1],al + mov al,[snesinputdefault2] + mov [device2],al mov dword[Msgptr],panickeyp mov eax,[MsgCount] mov [MessageOn],eax .nodis6 - mov eax,[KeyExtraEnab] + mov eax,[KeyExtraEnab1] test byte[pressed+eax],1 - je near .nodis7 + je near .nodisd1 mov byte[pressed+eax],2 pushad - call cycleinputdevice + call cycleinputdevice1 popad - mov dword[Msgptr],snesle - cmp byte[snesmouse],0 - jne .nom0 mov dword[Msgptr],snesmousep0 -.nom0 - cmp byte[snesmouse],1 - jne .nom1 + cmp byte[device1],1 + jne .nom11 mov dword[Msgptr],snesmousep1 -.nom1 - cmp byte[snesmouse],2 - jne .nom2 - mov dword[Msgptr],snesmousep2 -.nom2 - cmp byte[snesmouse],3 - jne .nom3 - mov dword[Msgptr],snesmouse12 -.nom3 - cmp byte[snesmouse],4 - jne .nom4 - mov dword[Msgptr],snesss - mov word[mousexloc],128 - mov word[mouseyloc],112 -.nom4 +.nom11 mov eax,[MsgCount] mov [MessageOn],eax call Get_MousePositionDisplacement -.nodis7 +.nodisd1 + mov eax,[KeyExtraEnab2] + test byte[pressed+eax],1 + je near .nodisd2 + mov byte[pressed+eax],2 + pushad + call cycleinputdevice2 + popad + mov dword[Msgptr],snesmousep0 + cmp byte[device2],1 + jne .nom21 + mov dword[Msgptr],snesmousep2 +.nom21 + cmp byte[device2],2 + jne .nom22 + mov dword[Msgptr],snesss + mov word[mousexloc],128 + mov word[mouseyloc],112 +.nom22 + cmp byte[device2],3 + jne .nom23 + mov dword[Msgptr],snesle1 +.nom23 + cmp byte[device2],4 + jne .nom24 + mov dword[Msgptr],snesle2 +.nom24 + mov eax,[MsgCount] + mov [MessageOn],eax + call Get_MousePositionDisplacement +.nodisd2 mov eax,[KeyNewGfxSwt] test byte[pressed+eax],1 je near .nodis8 @@ -955,12 +973,12 @@ NEWSYM curcolbg2, db 0 NEWSYM curcolbg3, db 0 NEWSYM curcolbg4, db 0 NEWSYM panickeyp, db 'ALL SWITCHES NORMAL',0 -NEWSYM snesmousep0, db 'MOUSE/SUPER SCOPE DISABLED',0 +NEWSYM snesmousep0, db 'EXTRA DEVICES DISABLED',0 NEWSYM snesmousep1, db 'MOUSE ENABLED IN PORT 1',0 NEWSYM snesmousep2, db 'MOUSE ENABLED IN PORT 2',0 -NEWSYM snesmouse12, db 'MOUSE ENABLED IN PORT 1 AND 2',0 NEWSYM snesss, db 'SUPER SCOPE ENABLED',0 -NEWSYM snesle, db 'LETHAL ENFORCER GUN ENABLED',0 +NEWSYM snesle1, db '1 JUSTIFIER ENABLED',0 +NEWSYM snesle2, db '2 JUSTIFIERS ENABLED',0 NEWSYM windissw, db 'WINDOWING DISABLED',0 NEWSYM winenasw, db 'WINDOWING ENABLED',0 NEWSYM ofsdissw, db 'OFFSET MODE DISABLED',0 diff --git a/zsnes/src/video/procvid.asm b/zsnes/src/video/procvid.asm index 67141810..1c847998 100644 --- a/zsnes/src/video/procvid.asm +++ b/zsnes/src/video/procvid.asm @@ -24,7 +24,7 @@ EXTSYM BGMA,V8Mode,antienab,cacheud,cbitmode,ccud,cfield,cgram,coladdb,coladdg EXTSYM coladdr,curblank,curfps,cvidmode,delay,extlatch,fnamest,En2xSaI EXTSYM gammalevel,hirestiledat,ignor512,latchx,latchy,maxbr,ForceNewGfxOff EXTSYM newengen,nextframe,objptr,pressed,prevpal,res512switch,resolutn -EXTSYM romispal,scaddtype,scanlines,selcA000,snesmouse,t1cc,vcache4b,vesa2_bpos +EXTSYM romispal,scaddtype,scanlines,selcA000,t1cc,vcache4b,vesa2_bpos EXTSYM spritetablea,vesa2_clbit,vesa2_gpos,vesa2_rpos,vesa2red10,vesa2selec EXTSYM vidbuffer,vram,KeyStateSelct,soundon,Open_File,Read_File EXTSYM Close_File,Create_File,Write_File,Get_File_Date,makepal @@ -39,6 +39,7 @@ EXTSYM CSStatus2,CSStatus3,SpecialLine,Clear2xSaIBuffer,vidbufferofsb,bg1scroly EXTSYM bg1objptr,DecompAPtr,HalfTransB,HalfTransC,cur_zst_size,old_zst_size EXTSYM MovieProcessing,mzt_chdir,UpChdir,MovieFrameStr,GetMovieFrameStr EXTSYM MovieDisplayFrame +EXTSYM MouseCount,device2 %ifdef __MSDOS__ EXTSYM SB_blank,vsyncon,Triplebufen,granadd @@ -147,14 +148,61 @@ NEWSYM showvideo EXTSYM multiMouseMode,Mouse1MoveX,Mouse1MoveY,Mouse2MoveX,Mouse2MoveY,MultiMouseProcess,MouseToRead %endif -NEWSYM processmouse +NEWSYM processmouse1 push esi push edi push edx push ebx call Get_MouseData mov [mousebuttons],bx - cmp byte[snesmouse],4 + cmp byte[MouseCount],1 + jle .nomultimouse + pushad + call MultiMouseProcess + popad + mov cx,[Mouse1MoveX] + mov dx,[Mouse1MoveY] + jmp .mousestuff +.nomultimouse + call Get_MousePositionDisplacement +.mousestuff + mov word[mousexpos],0 + cmp cx,0 + je .noxchange + mov byte[mousexdir],0 + cmp cx,0 + jge .noneg + mov byte[mousexdir],1 + neg cx +.noneg + mov [mousexpos],cx +.noxchange + mov word[mouseypos],0 + cmp dx,0 + je .noychange + mov byte[mouseydir],0 + cmp dx,0 + jge .noneg2 + mov byte[mouseydir],1 + neg dx +.noneg2 + mov [mouseypos],dx +.noychange + xor ecx,ecx + pop ebx + pop edx + pop edi + pop esi + ret + +NEWSYM processmouse2 + push esi + push edi + push edx + push ebx + call Get_MouseData + mov [mousebuttons],bx + cmp byte[device2],2 jne .ss cmp byte[pressed+13],0 je .noautosw @@ -173,26 +221,22 @@ NEWSYM processmouse .noautosw mov byte[ssautoswb],0 .ss - cmp byte[snesmouse],3 - jne .nomultimouse + cmp byte[MouseCount],1 + jle .nomultimouse pushad call MultiMouseProcess popad - cmp byte[MouseToRead],2 - je .getmouse2 - mov cx,[Mouse1MoveX] - mov dx,[Mouse1MoveY] - jmp .mousestuff -.getmouse2 mov cx,[Mouse2MoveX] mov dx,[Mouse2MoveY] jmp .mousestuff .nomultimouse call Get_MousePositionDisplacement .mousestuff - cmp byte[snesmouse],5 + cmp byte[device2],3 je .le - cmp byte[snesmouse],4 + cmp byte[device2],4 + je .le + cmp byte[device2],2 jne .ss2 .le add word[mousexloc],cx @@ -220,9 +264,11 @@ NEWSYM processmouse .noneg mov [mousexpos],cx .noxchange - cmp byte[snesmouse],5 + cmp byte[device2],3 je .le2 - cmp byte[snesmouse],4 + cmp byte[device2],4 + je .le2 + cmp byte[device2],2 jne .ss3 .le2 add word[mouseyloc],dx @@ -3325,7 +3371,7 @@ NEWSYM vidpaste je .noclock call ClockOutput .noclock - cmp byte[snesmouse],4 + cmp byte[device2],2 je near .drawss .returnfromdraw mov ax,[resolutn] diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index 44496374..7cbecad0 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -2904,7 +2904,7 @@ void WinUpdateDevices() } -extern BYTE snesmouse; +extern unsigned char device1, device2; int GetMouseX(void) { @@ -2923,7 +2923,7 @@ int GetMouseX(void) SetCursorPos(X + WindowWidth + 32, (int)(Y + (MouseY * WindowHeight / 224))); } } - else if (FullScreen == 0 && snesmouse == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) + else if (FullScreen == 0 && device1 == 0 && device2 == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) { MouseInput->Unacquire(); SetCursorPos(X + WindowWidth + 1, (int)(Y + (MouseY * WindowHeight / 224))); @@ -2942,7 +2942,7 @@ int GetMouseX(void) SetCursorPos(X - 32, (int)(Y + (MouseY * WindowHeight / 224))); } } - else if (FullScreen == 0 && snesmouse == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) + else if (FullScreen == 0 && device1 == 0 && device2 == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) { MouseInput->Unacquire(); SetCursorPos(X - 1, (int)(Y + (MouseY * WindowHeight / 224))); @@ -2967,7 +2967,7 @@ int GetMouseY(void) SetCursorPos((int)(X+(MouseX * WindowWidth / 256)), Y + WindowHeight + 32); } } - else if (FullScreen == 0 && snesmouse == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) + else if (FullScreen == 0 && device1 == 0 && device2 == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) { MouseInput->Unacquire(); SetCursorPos((int)(X+(MouseX * WindowWidth / 256)), Y + WindowHeight + 1); @@ -2986,7 +2986,7 @@ int GetMouseY(void) SetCursorPos((int)(X + (MouseX * WindowWidth / 256)), Y - 32); } } - else if (FullScreen == 0 && snesmouse == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) + else if (FullScreen == 0 && device1 == 0 && device2 == 0 && MouseButtonPressed == 0 && GUIOn2 == 1) { MouseInput->Unacquire(); SetCursorPos((int)(X + (MouseX * WindowWidth / 256)), Y - 1); diff --git a/zsnes/src/zmovie.c b/zsnes/src/zmovie.c index e38f81f6..540460d3 100644 --- a/zsnes/src/zmovie.c +++ b/zsnes/src/zmovie.c @@ -73,11 +73,11 @@ bool MovieWaiting = false; enum MovieStatus { MOVIE_OFF = 0, MOVIE_PLAYBACK, MOVIE_RECORD, MOVIE_OLD_PLAY }; #define SetMovieMode(mode) (MovieProcessing = (unsigned char)mode) -extern unsigned char snesmouse; +extern unsigned char device1, device2; extern unsigned short latchx, latchy; -#define IS_MOUSE_1() (snesmouse == 1) -#define IS_MOUSE_2() (snesmouse == 2) -#define IS_SCOPE() (snesmouse == 3) +#define IS_MOUSE_1() (device1 == 1) +#define IS_MOUSE_2() (device2 == 1) +#define IS_SCOPE() (device2 == 2) void GUIDoReset(); void powercycle(bool);