SetupROM port and some cleanup.

This commit is contained in:
grinvader
2005-04-07 16:53:45 +00:00
parent 2da78e1866
commit c2af9fb265
12 changed files with 380 additions and 392 deletions

View File

@@ -295,8 +295,7 @@ mrwp sfxbankd = { sfxaccessbankr8d, sfxaccessbankw8d, sfxaccessbankr16d, sfxacce
void SetAddressingModes()
{
// Banks
{ // Banks
map_mem(0x00, &regbank, 0x40); // 00 - 3F
map_mem(0x40, &membank, 0x30); // 49 - 6F
map_mem(0x70, &srambank, 0x08); // 70 - 77
@@ -309,7 +308,6 @@ void SetAddressingModes()
void SetAddressingModesSA1()
{
// Banks
map_mem(0x00, &sa1regbank, 0x40); // 00 - 3F
map_mem(0x40, &sa1rambank, 0x30); // 49 - 6F
map_mem(0x70, &sa1rambankb, 0x08); // 70 - 77

View File

@@ -67,19 +67,19 @@
%include "macros.mac"
EXTSYM curblank, vidpastecopyscr, frameskip, newengen, vsyncon
EXTSYM cvidmode, antienab, smallscreenon, smallscreence,NetQuit
EXTSYM soundon, StereoSound, SoundQuality, MusicRelVol
EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal
EXTSYM t1cc, LoadDir, LoadDrive, SRAMDir, SRAMChdir, SRAMDirCurDir, initsnes, romloadskip
EXTSYM fname, makeextension, sram, loadfileGUI, GUIloadfailed
EXTSYM SetupROM, romdata, ForcePal, ramsize, ramsizeand, curromsize
EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop
EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ
EXTSYM Voice0Status, Voice1Status, Voice2Status, Voice3Status, Voice4Status
EXTSYM Voice5Status, Voice6Status, Voice7Status, romtype, SetIRQVectors
EXTSYM ClearScreen, statesaver, loadstate2, vidbuffer, ASCII2Font, hirestiledat
EXTSYM showallext, ROMTypeNOTFound, scanlines,statefileloc,pl1selk,pl2selk
EXTSYM curblank,vidpastecopyscr,frameskip,newengen,vsyncon
EXTSYM cvidmode,antienab, smallscreenon, smallscreence,NetQuit
EXTSYM soundon,StereoSound,SoundQuality,MusicRelVol
EXTSYM endprog,continueprog,spcBuffera,spcRamcmp,cbitmode,makepal
EXTSYM t1cc,LoadDir,LoadDrive,SRAMDir,SRAMChdir,SRAMDirCurDir,initsnes
EXTSYM fname,makeextension,sram,loadfileGUI,GUIloadfailed,romloadskip
EXTSYM SetupROM,romdata,ForcePal,ramsize,ramsizeand,curromsize
EXTSYM romispal,totlines,cfgloadsdir,init65816,procexecloop
EXTSYM spcRam,spcPCRam,spcS,spcRamDP,spcA,spcX,spcY,spcP,spcNZ
EXTSYM Voice0Status,Voice1Status,Voice2Status,Voice3Status,Voice4Status
EXTSYM Voice5Status,Voice6Status,Voice7Status,romtype
EXTSYM ClearScreen,statesaver,loadstate2,vidbuffer,ASCII2Font,hirestiledat
EXTSYM showallext,ROMTypeNOTFound,scanlines,statefileloc,pl1selk,pl2selk
EXTSYM fnamest,sprlefttot,spritetablea,fnames,CHIPBATT,sfxramdata,setaramdata,SETAEnable,cgram,srama
EXTSYM tempco0,prevbright,maxbr,prevpal,coladdr,coladdg,coladdb
EXTSYM scaddtype,ScreenScale,vesa2red10,initvideo2,initvideo,pressed,UpdateDevices
@@ -3940,7 +3940,9 @@ InitGUI:
call GetScreen
.nong16b
call ClearScreen
pushad
call Clear2xSaIBuffer
popad
call GUISetPal
call GUIBufferData
ret

View File

@@ -1071,12 +1071,16 @@ GUIGUIOptnsKeys:
cmp byte[En2xSaI],1
jnae .guioptn15
call ClearScreen
pushad
call Clear2xSaIBuffer
popad
.guioptn15
cmp byte[hqFilter],0
je .guioptn16
call ClearScreen
pushad
call Clear2xSaIBuffer
popad
.guioptn16
ret
@@ -1177,7 +1181,9 @@ GUIVideoKeys:
mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0
je near .no2xsai
pushad
call Clear2xSaIBuffer
popad
GUIkeystoggleoptn byte[En2xSaI],1
.no2xsai
cmp dh,'E'
@@ -1186,7 +1192,9 @@ GUIVideoKeys:
mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0
je near .nosupereagle
pushad
call Clear2xSaIBuffer
popad
GUIkeystoggleoptn byte[En2xSaI],2
.nosupereagle
cmp dh,'S'
@@ -1195,7 +1203,9 @@ GUIVideoKeys:
mov bl,[cvidmode]
cmp byte[GUI2xVID+ebx],0
je near .nosuper2xsai
pushad
call Clear2xSaIBuffer
popad
GUIkeystoggleoptn byte[En2xSaI],3
.nosuper2xsai
cmp dh,'I'

View File

@@ -293,8 +293,8 @@ GUIloadfilename:
mov byte[CheatWinMode],0
mov byte[CheatSearchStatus],0
call SetupROM
pushad
call SetupROM
call showinfogui
popad
call initsnes

View File

@@ -361,7 +361,9 @@ SetDevice:
NEWSYM GUIDoReset
call ClearScreen
pushad
call Clear2xSaIBuffer
popad
; mov byte[NetPlayNoMore],1
mov byte[RestoreValues],0

View File

@@ -1411,7 +1411,9 @@ GUIWinClicked:
cmp edx,%2+8
jg %%noclick
xor %3,1
pushad
call Clear2xSaIBuffer
popad
%%noclick
%endmacro

View File

@@ -484,7 +484,9 @@ NEWSYM showmenu
call StartSound
mov byte[ForceNonTransp],0
mov byte[GUIOn],0
pushad
call Clear2xSaIBuffer
popad
cmp byte[MenuNoExit],1
je .noexitmenu
jmp continueprognokeys

View File

@@ -96,25 +96,12 @@ EXTSYM sfxaccessbankw8d,sfxramdata
EXTSYM sramaccessbankr16,sramaccessbankr16s,sramaccessbankr8,sramaccessbankr8s
EXTSYM sramaccessbankw16,sramaccessbankw16s,sramaccessbankw8,sramaccessbankw8s
EXTSYM ScrDispl,wramreadptr,wramwriteptr
EXTSYM loadstate2,headerhack
EXTSYM loadstate2,CMovieExt,MoviePlay
;initc.c
EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,loadZipFile,ZOpenFileName
EXTSYM loadROM,CalcChecksum,BankCheck,MirrorROM,SplittedROM,addOnStart,addOnSize
EXTSYM SPC7PackIndexLoad,SPC7110IndexSize,DumpROMLoadInfo,SetupSramSize,IntlEHi
EXTSYM CHIPBATT,SETAEnable,C4Enable,SPC7110Enable,RTCEnable,SA1Enable,SDD1Enable
EXTSYM OBCEnable,SFXEnable,ST18Enable,SGBEnable,DSP1Enable,DSP2Enable,DSP3Enable
EXTSYM DSP4Enable,BSEnable,clearvidsound
EXTSYM calculate_state_sizes,InitRewindVars
EXTSYM SetaCmdEnable,setaramdata
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
EXTSYM setaaccessbankr16,setaaccessbankw16,setaaccessbankr16a,setaaccessbankw16a
EXTSYM DSP2Read8b,DSP2Read16b,DSP2Write8b,DSP2Write16b,InitDSP2
EXTSYM DSP4Read8b,DSP4Read16b,DSP4Write8b,DSP4Write16b,InitDSP4
EXTSYM SetupROMc,CMovieExt,MoviePlay
EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,ZOpenFileName,loadROM,SPC7110IndexSize
EXTSYM SPC7PackIndexLoad,IntlEHi,C4Enable,SPC7110Enable,RTCEnable,SA1Enable
EXTSYM SDD1Enable,OBCEnable,SFXEnable,BSEnable,clearvidsound,headerhack,SetupROM
%ifdef __LINUX__
EXTSYM LoadDir,popdir,pushdir
@@ -218,8 +205,8 @@ NEWSYM init
.found
mov byte[romloadskip],0
call loadfile
call SetupROM
pushad
call SetupROM
call showinfogui
popad
.noloadfile
@@ -2616,63 +2603,6 @@ NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0
SECTION .bss
NEWSYM DSP1Type, resb 1
NEWSYM intldone, resb 1
SECTION .text
EXTSYM ClearScreen, cbitmode, makepal
NEWSYM SetupROM
pushad
call SetupROMc
popad
; call CheckROMType
call SetIRQVectors
call ClearScreen
cmp byte[cbitmode],0
jne .nomakepal
call makepal
.nomakepal
; get ROM and SRAM size
mov esi,[romdata]
add esi,[infoloc]
add esi,18h
mov cl,[esi-1]
mov [curromsize],cl
pushad
call SetupSramSize
call calculate_state_sizes
call InitRewindVars
popad
; get pal/ntsc
inc esi
mov al,[ForceROMTiming]
mov byte[ForcePal],al
xor al,al
mov al,[esi]
cmp byte[ForcePal],1
jne .nontsc
mov al,0
.nontsc
cmp byte[ForcePal],2
jne .nopal2
mov al,2
.nopal2
mov byte[romispal],0
mov word[totlines],263
mov dword[MsgCount],120
cmp byte[BSEnable],1
je .nopal
cmp al,1
jbe .nopal
cmp al,0Dh
jae .nopal
mov byte[romispal],1
mov word[totlines],314
mov dword[MsgCount],100
.nopal
ret
SECTION .bss
NEWSYM C4RamR, resd 1
NEWSYM C4RamW, resd 1
NEWSYM C4Ram, resd 1
@@ -2680,64 +2610,6 @@ NEWSYM ROMTypeNOTFound, resb 1
NEWSYM Interleaved, resb 1
SECTION .text
NEWSYM SetIRQVectors
; Get Vectors (NMI & Reset)
mov esi,[romdata]
add esi,[infoloc]
add esi,21
mov al,[esi]
test al,0F0h
jnz .yesfastrom
mov al,[opexec268]
mov [opexec358],al
mov al,[opexec268cph]
mov [opexec358cph],al
mov al,[cycpb268]
mov [cycpb358],al
.yesfastrom
add esi,0Fh
cmp word[esi+24],0FFFFh
jne .notreseterror
mov word[esi+6],0FF9Ch
mov word[esi+24],0FF80h
.notreseterror
lodsw
mov [copv],ax
lodsw
mov [brkv],ax
lodsw
mov [abortv],ax
lodsw
mov [nmiv],ax
mov [nmiv2],ax
add esi,2
lodsw
mov [irqv],ax
mov [irqv2],ax
add esi,4
; 8-bit and reset
lodsw
mov [copv8],ax
inc esi
inc esi
lodsw
mov [abortv8],ax
lodsw
mov [nmiv8],ax
lodsw
mov [resetv],ax
lodsw
mov [brkv8],ax
mov [irqv8],ax
cmp byte[yesoutofmemory],0
je .notfailed
mov word[resetv],8000h
mov esi,[romdata]
mov word[esi],0FE80h
mov word[esi+8000h],0FE80h
.notfailed
ret
NEWSYM outofmemfix
mov esi,[romdata]
cmp byte[romtype],2

View File

@@ -1854,7 +1854,6 @@ extern unsigned int spcnumread, spchalted;
extern unsigned char NextLineCache, sramsavedis, sndrot, regsbackup[3019];
extern unsigned char yesoutofmemory, fnames[512];
void SetupROM();
void initsnes();
void outofmemfix();
void GUIDoReset();
@@ -1876,34 +1875,6 @@ bool loadSRAM(char *sramname)
else { return(false); }
}
void powercycle(bool sramload)
{
memset(sram, 0xFF, 32768);
clearSPCRAM();
nmiprevaddrl = 0;
nmiprevaddrh = 0;
nmirept = 0;
nmiprevline = 224;
nmistatus = 0;
spcnumread = 0;
spchalted = ~0;
NextLineCache = 0;
curexecstate = 1;
if (sramload) { loadSRAM(fnames+1); }
asm_call(SetupROM);
asm_call(initsnes);
sramsavedis = 0;
memcpy(&sndrot, regsbackup, 3019);
if (yesoutofmemory == 1) { asm_call(outofmemfix); }
asm_call(GUIDoReset);
}
extern unsigned int Voice0Freq, Voice1Freq, Voice2Freq, Voice3Freq;
extern unsigned int Voice4Freq, Voice5Freq, Voice6Freq, Voice7Freq;
extern unsigned int dspPAdj;
@@ -1932,13 +1903,16 @@ void initpitch()
extern unsigned int SfxR1, SfxR2, SetaCmdEnable, SfxSFR, SfxSCMR;
extern unsigned char lorommapmode2, disablespcclr, *sfxramdata, SramExists;
extern unsigned char *setaramdata, *wramdata, *SA1RAMArea;
extern unsigned char *setaramdata, *wramdata, *SA1RAMArea, cbitmode, curromsize;
extern unsigned char ForcePal, ForceROMTiming, romispal;
extern unsigned short totlines;
void SetAddressingModes(), GenerateBank0Table();
void SetAddressingModesSA1(), GenerateBank0TableSA1();
void calculate_state_sizes(), InitRewindVars();
void InitDSP(), InitDSP2(), InitDSP4(), InitFxTables(), initregr(), initregw();
void SPC7110Load();
void SPC7110Load(), DOSClearScreen(), dosmakepal();
void CheckROMTypeC()
void CheckROMType()
{
unsigned char *ROM = (unsigned char *)romdata;
@@ -1968,7 +1942,11 @@ void CheckROMTypeC()
if (DSP1Enable || DSP2Enable || DSP3Enable)
{
if (DSP2Enable) { asm_call(InitDSP2); }
if (DSP2Enable)
{
asm_call(InitDSP2);
}
InitDSP();
DSP1Type = (romtype == 2) ? 2 : 1;
@@ -2071,7 +2049,124 @@ void CheckROMTypeC()
asm_call(SPC7110Load);
}
void SetupROMc()
{
CheckROMTypeC();
extern unsigned short copv, brkv, abortv, nmiv, nmiv2, irqv, irqv2, resetv;
extern unsigned short copv8, brkv8, abortv8, nmiv8, irqv8;
void SetIRQVectors()
{ // get vectors (NMI & reset)
unsigned char *ROM = (unsigned char *)romdata;
if (!(ROM[infoloc+21] & 0xF0)) // if not fastrom
{
opexec358 = opexec268;
opexec358cph = opexec268cph;
cycpb358 = cycpb268;
}
if (!memcmp(ROM+infoloc+36+24, "\0xFF\0xFF", 2)) // if reset error
{
memcpy(ROM+infoloc+36+6, "\0x9C\0xFF", 2);
memcpy(ROM+infoloc+36+24, "\0x80\0xFF", 2);
}
memcpy(&copv, ROM+infoloc+0x24, 2);
memcpy(&brkv, ROM+infoloc+0x26, 2);
memcpy(&abortv, ROM+infoloc+0x28, 2);
memcpy(&nmiv, ROM+infoloc+0x2A, 2);
memcpy(&nmiv2, ROM+infoloc+0x2A, 2);
memcpy(&irqv, ROM+infoloc+0x2E, 2);
memcpy(&irqv2, ROM+infoloc+0x2E, 2);
// 8-bit and reset
memcpy(&copv8, ROM+infoloc+0x34, 2);
memcpy(&abortv8, ROM+infoloc+0x38, 2);
memcpy(&nmiv8, ROM+infoloc+0x3A, 2);
memcpy(&resetv, ROM+infoloc+0x3C, 2);
memcpy(&brkv8, ROM+infoloc+0x3E, 2);
memcpy(&irqv8, ROM+infoloc+0x3E, 2);
if (yesoutofmemory) // failed ?
{
resetv = 0x8000;
memcpy(ROM+0x0000, "\0x80\0xFE", 2);
memcpy(ROM+0x8000, "\0x80\0xFE", 2);
}
}
void SetupROM()
{
unsigned char *ROM = (unsigned char *)romdata;
CheckROMType();
SetIRQVectors();
#ifdef __MSDOS__
asm_call(DOSClearScreen);
if (!cbitmode) // 8-bit mode uses a palette
{
asm_call(dosmakepal);
}
#endif
// get ROM and SRAM sizes
curromsize = ROM[infoloc+0x17];
SetupSramSize();
calculate_state_sizes();
InitRewindVars();
// get timing (pal/ntsc)
ForcePal = ForceROMTiming;
switch (ForcePal)
{
case 1:
romispal = 0;
break;
case 2:
romispal = (!BSEnable);
break;
default:
romispal = ((!BSEnable) && (ROM[infoloc+0x19] > 1) && (ROM[infoloc+0x19] < 0xD));
}
if (romispal)
{
totlines = 314;
MsgCount = 100;
}
else
{
totlines = 263;
MsgCount = 120;
}
}
void powercycle(bool sramload)
{
memset(sram, 0xFF, 32768);
clearSPCRAM();
nmiprevaddrl = 0;
nmiprevaddrh = 0;
nmirept = 0;
nmiprevline = 224;
nmistatus = 0;
spcnumread = 0;
spchalted = ~0;
NextLineCache = 0;
curexecstate = 1;
if (sramload) { loadSRAM(fnames+1); }
SetupROM();
asm_call(initsnes);
sramsavedis = 0;
memcpy(&sndrot, regsbackup, 3019);
if (yesoutofmemory == 1) { asm_call(outofmemfix); }
asm_call(GUIDoReset);
}

View File

@@ -63,7 +63,7 @@ EXTSYM GUICPC, newgfx16b
EXTSYM vesa2_clbitng,vesa2_clbitng2,vesa2_clbitng3
EXTSYM granadd,CSStatus,CSStatus2,CSStatus3
EXTSYM SpecialLine
EXTSYM vidbufferofsb
EXTSYM Clear2xSaIBuffer
;EXTSYM Super2xSaI
EXTSYM HalfTransB,HalfTransC
@@ -2081,7 +2081,9 @@ SECTION .text
mov byte[f3menuen],0
mov byte[ForceNonTransp],0
mov byte[GUIOn],0
pushad
call Clear2xSaIBuffer
popad
cmp byte[MovieProcessing],0
jz .nomovie3
pushad
@@ -3711,19 +3713,6 @@ NEWSYM vidpaste
SECTION .bss
.SSRedCo resw 1
SECTION .text
NEWSYM Clear2xSaIBuffer
mov ebx,[vidbufferofsb]
add ebx,288*2
mov ecx,144*239
.nextb
mov dword[ebx],0FFFFFFFFh
add ebx,4
dec ecx
jnz .nextb
ret
SECTION .data
NEWSYM MsgCount, dd 120 ; How long message will stay (PAL = 100)

View File

@@ -22,8 +22,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#ifdef __LINUX__
#include "gblhdr.h"
#define DIR_SLASH "/"
#else
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <sys/stat.h>
#define DIR_SLASH "\\"
#endif
extern unsigned int newengen, nggposng[2];
extern unsigned short PrevPicture[64*56], *vidbuffer;
extern unsigned short PrevPicture[64*56], *vidbuffer, *vidbufferofsb;
void CapturePicture()
{
@@ -61,3 +73,8 @@ void CapturePicture()
} // 0111 1111 1110 0000 and 0000 0000 0001 1111
}
}
void Clear2xSaIBuffer()
{
memset(vidbufferofsb+576, 0xFF, 576*239);
}

View File

@@ -2098,7 +2098,7 @@ void initwinvideo(void)
if (Force60hz) Refresh = 60;
InitDirectDraw();
clearwin();
asm_call(Clear2xSaIBuffer);
Clear2xSaIBuffer();
clear_display();
return;
}
@@ -2110,11 +2110,10 @@ void initwinvideo(void)
ReleaseDirectDraw();
InitDirectDraw();
clearwin();
asm_call(Clear2xSaIBuffer);
Clear2xSaIBuffer();
clear_display();
return;
}
}
extern unsigned int vidbuffer;