From 89169c29c85462b3436f01a6e206ab652e4ae9d7 Mon Sep 17 00:00:00 2001 From: teuf <> Date: Sat, 28 Apr 2001 17:17:17 +0000 Subject: [PATCH] Fixed command line loading of roms. --- zsnes/src/cfgload.asm | 7 ++++++- zsnes/src/cpu/execute.asm | 13 +++++++++++++ zsnes/src/init.asm | 10 ++++++++-- zsnes/src/linux/sdlintrf.asm | 12 ++++++++++-- zsnes/src/linux/zfilew.c | 36 ++++++++++++++++++++++++++++++++---- zsnes/src/ui.asm | 7 ++++++- 6 files changed, 75 insertions(+), 10 deletions(-) diff --git a/zsnes/src/cfgload.asm b/zsnes/src/cfgload.asm index e8775e17..193711d9 100644 --- a/zsnes/src/cfgload.asm +++ b/zsnes/src/cfgload.asm @@ -31,7 +31,7 @@ EXTSYM Create_File,Write_File,Close_File %ifdef __LINUX__ ; if TextFile==0, zlib functions aren't used ; useful to save the config file -EXTSYM TextFile +EXTSYM TextFile, InitDir, InitDrive, Change_Dir %endif NEWSYM CfgLoadAsmStart @@ -257,6 +257,11 @@ NEWSYM ConvertJoyMap2 NEWSYM DOScreatenewcfg ; make a new file ; copy .cfgfiledata to mode7tab, replacing each % +%ifdef __LINUX__ + mov dl,[SRAMDrive] + mov ebx,SRAMDir + call Change_Dir +%endif mov esi,.cfgfiledata mov edi,mode7tab xor ecx,ecx diff --git a/zsnes/src/cpu/execute.asm b/zsnes/src/cpu/execute.asm index f69122e1..baff292d 100644 --- a/zsnes/src/cpu/execute.asm +++ b/zsnes/src/cpu/execute.asm @@ -1454,6 +1454,8 @@ NEWSYM sramsave NEWSYM statesaver clim + + sub dword[Curtableaddr],tableA sub dword[spcPCRam],spcRam sub dword[spcRamDP],spcRam @@ -1462,6 +1464,11 @@ NEWSYM statesaver call initrevst ; jmp .skipsaves ; Save State +%ifdef __LINUX__ + mov dl,[SRAMDrive] + mov ebx,SRAMDir + call Change_Dir +%endif mov edx,fnamest+1 call Create_File jc near .nosavestuff @@ -1820,6 +1827,12 @@ NEWSYM loadstate mov byte[pressed+eax],2 mov byte[multchange],1 clim +%ifdef __LINUX__ + mov dl,[SRAMDrive] + mov ebx,SRAMDir + call Change_Dir +%endif + mov edx,fnamest+1 call Open_File jc near .nofile diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index ff7fc15d..32ddb198 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -3366,9 +3366,15 @@ NEWSYM loadfile mov byte[TextFile], 0 call GetCurDir mov byte[InGUI],0 +%ifdef __LINUX__ + mov dl,[InitDrive] + mov ebx,InitDir + call Change_Dir +%endif + jmp loadfileGUI.nogui - +%ifndef __LINUX__ mov dword[MessageOn],0 mov byte[loadedfromgui],0 mov byte[yesoutofmemory],0 @@ -3564,7 +3570,7 @@ NEWSYM loadfile mov ah,9 call Output_Text jmp DosExit - +%endif SECTION .data .multfound db 0 .first db 0 diff --git a/zsnes/src/linux/sdlintrf.asm b/zsnes/src/linux/sdlintrf.asm index b45c3933..2b73363c 100644 --- a/zsnes/src/linux/sdlintrf.asm +++ b/zsnes/src/linux/sdlintrf.asm @@ -39,7 +39,7 @@ EXTSYM pl1Bk EXTSYM pl1Rk EXTSYM cfgcvidmode EXTSYM pl1contrl,pl2contrl -EXTSYM InitDir,InitDrive +EXTSYM InitDir,InitDrive, SRAMDir, SRAMDrive EXTSYM DOScreatenewcfg,ExecGUISaveVars EXTSYM allocptr EXTSYM putchar @@ -252,14 +252,22 @@ NEWSYM SystemInit ; Get and set the initial directory %ifdef __LINUX__ call obtaindir + mov ebx,InitDir + mov edx,InitDrive + call Get_Dir + + mov dl,[SRAMDrive] + mov ebx,SRAMDir + call Change_Dir %else mov ebx,InitDir mov edx,InitDrive call Get_Dir -%endif + mov dl,[InitDrive] mov ebx,InitDir call Change_Dir +%endif call GUIRestoreVars ; Load GUI stuff diff --git a/zsnes/src/linux/zfilew.c b/zsnes/src/linux/zfilew.c index 6cd75fbc..f6f96656 100644 --- a/zsnes/src/linux/zfilew.c +++ b/zsnes/src/linux/zfilew.c @@ -256,6 +256,11 @@ DWORD ZFileMKDir() #endif } +extern char SRAMDir; +extern char InitDir; +extern char LoadDir; + + DWORD ZFileCHDir() { return(chdir(CHPath)); @@ -443,9 +448,6 @@ DWORD GetDate() #ifdef __LINUX__ -extern char SRAMDir; -extern char InitDir; -extern char LoadDir; void obtaindir() { @@ -467,7 +469,8 @@ void obtaindir() } else { closedir(tmp); } - strcpy(&InitDir, cfgdir); +// strcpy(&InitDir, cfgdir); +// getcwd(&InitDir, 128); if (SRAMDir == 0){ strcpy(&SRAMDir, cfgdir); } @@ -476,4 +479,29 @@ void obtaindir() getcwd(&LoadDir, 128); } } + +extern char fnamest, fnames; + +void GetFilename() +{ + char *tmp = &fnamest; + char size; + + *tmp = '/'; + while (*tmp!=0) tmp++; + while (*tmp!='/') tmp--; + size = (strlen(tmp)-1) & 0xFF; + strcpy(&fnamest, tmp); + fnamest = size; + + tmp = &fnames; + *tmp = '/'; + while (*tmp!=0) tmp++; + while (*tmp!='/') tmp--; + size = (strlen(tmp)-1) & 0xFF; + strcpy(&fnames, tmp); + fnames = size; +} + #endif + diff --git a/zsnes/src/ui.asm b/zsnes/src/ui.asm index 21e5f6a9..3b350b59 100644 --- a/zsnes/src/ui.asm +++ b/zsnes/src/ui.asm @@ -35,9 +35,9 @@ EXTSYM Open_File, Get_File_Date, Close_File, Change_Dir, Get_Dir EXTSYM romloadskip EXTSYM cfgloadgdir,cfgloadsdir EXTSYM init18_2hz - %ifdef __LINUX__ EXTSYM LinuxExit +EXTSYM GetFilename %endif NEWSYM UIAsmStart @@ -1204,6 +1204,11 @@ NEWSYM makeextension add ah,4 mov [fnames],ah mov [fnamest],ah +%ifdef __LINUX__ + pushad + call GetFilename + popad +%endif cmp byte[LatestSave],1 je .latestsave ret