Port of showinfogui to C, now really easy to maintain.

This commit is contained in:
grinvader
2005-02-28 22:16:25 +00:00
parent c0f0e799f7
commit 101f6bd6b7
3 changed files with 95 additions and 218 deletions

View File

@@ -294,7 +294,9 @@ GUIloadfilename:
mov byte[CheatSearchStatus],0
call SetupROM
pushad
call showinfogui
popad
call initsnes
;mov byte[snesmouse],0
mov byte[sramsavedis],0

View File

@@ -22,7 +22,7 @@
EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol
EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0
EXTSYM MovieProcessing
EXTSYM MovieProcessing,showinfogui
EXTSYM filefound,inittable,SA1inittable
EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer
EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime
@@ -244,7 +244,9 @@ NEWSYM init
mov byte[romloadskip],0
call loadfile
call SetupROM
pushad
call showinfogui
popad
.noloadfile
call UpdateDevices
call init65816
@@ -2609,10 +2611,10 @@ NEWSYM convertsram
SECTION .data
NEWSYM CSStatus, db ' TYPE: ',0
NEWSYM CSStatus2, db 'INTERLEAVED:No BANK:Lo CHKSUM:OK ',0
NEWSYM CSStatus2, db 'INTERLEAVED: BANK: CHKSUM: ',0
NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0
crc32_table:
NEWSYM crc32_table,
dd 000000000h, 077073096h, 0ee0e612ch, 0990951bah, 0076dc419h, 0706af48fh
dd 0e963a535h, 09e6495a3h, 00edb8832h, 079dcb8a4h, 0e0d5e91eh, 097d2d988h
dd 009b64c2bh, 07eb17cbdh, 0e7b82d07h, 090bf1d91h, 01db71064h, 06ab020f2h
@@ -2657,217 +2659,6 @@ dd 0bdbdf21ch, 0cabac28ah, 053b39330h, 024b4a3a6h, 0bad03605h, 0cdd70693h
dd 054de5729h, 023d967bfh, 0b3667a2eh, 0c4614ab8h, 05d681b02h, 02a6f2b94h
dd 0b40bbe37h, 0c30c8ea1h, 05a05df1bh, 02d02ef8dh
SECTION .text
NEWSYM showinfogui
mov esi,[romdata]
add esi,[infoloc]
cmp dword[infoloc],40FFC0h
jne .notEHi1
mov dword[CSStatus2+23], 'EHi '
jmp .nohiromrn
.notEHi1
mov dword[CSStatus2+23], 'Lo '
cmp byte[romtype],2
jne .nohiromrn
mov dword[CSStatus2+23], 'Hi '
.nohiromrn
mov edi,CSStatus
mov ecx,20
.looprn
mov al,[esi]
or al,al
jnz .okaysp
mov al,32
.okaysp
mov [edi],al
inc esi
inc edi
dec ecx
jnz .looprn
mov dword[CSStatus3+6], 'PAL '
add esi,5
cmp byte[esi],2
jae .notntsc1
mov dword[CSStatus3+6], 'NTSC'
.notntsc1
cmp byte[esi],13
jb .notntsc2
mov dword[CSStatus3+6], 'NTSC'
.notntsc2
mov dword[CSStatus3+16], ' '
cmp byte[IPSPatched],1
jne .notpatched
mov dword[CSStatus3+16], 'IPS '
.notpatched
mov dword[CSStatus+29],'NORM'
mov dword[CSStatus+33],'AL '
cmp byte[SA1Enable],0
je .nosa1
mov dword[CSStatus+29],'SA-1'
mov dword[CSStatus+33],' '
.nosa1
cmp byte[RTCEnable],0
je .nortc
mov dword[CSStatus+29],'RTC '
mov dword[CSStatus+33],' '
.nortc
cmp byte[SPC7110Enable],0
je .nospc7110
mov dword[CSStatus+29],'SPC7'
mov dword[CSStatus+33],'110 '
.nospc7110
cmp byte[SFXEnable],0
je .nosfx
mov dword[CSStatus+29],'SUPE'
mov dword[CSStatus+33],'R FX'
.nosfx
cmp byte[C4Enable],0
je .noc4
mov dword[CSStatus+29],'C4 '
mov dword[CSStatus+33],' '
.noc4
cmp byte[DSP1Enable],0
je .nodsp1
mov dword[CSStatus+29],'DSP-'
mov dword[CSStatus+33],'1 '
.nodsp1
cmp byte[DSP2Enable],0
je .nodsp2
mov dword[CSStatus+29],'DSP-'
mov dword[CSStatus+33],'2 '
.nodsp2
cmp byte[DSP3Enable],0
je .nodsp3
mov dword[CSStatus+29],'DSP-'
mov dword[CSStatus+33],'3 '
.nodsp3
cmp byte[DSP4Enable],0
je .nodsp4
mov dword[CSStatus+29],'DSP-'
mov dword[CSStatus+33],'4 '
.nodsp4
cmp byte[SDD1Enable],0
je .nosdd1
mov dword[CSStatus+29],'S-DD'
mov dword[CSStatus+33],'1 '
.nosdd1
cmp byte[OBCEnable],0
je .noobc
mov dword[CSStatus+29],'OBC1'
mov dword[CSStatus+33],' '
.noobc
cmp byte[SETAEnable],0
je .noseta
mov dword[CSStatus+29],'SETA'
mov dword[CSStatus+33],' DSP'
.noseta
cmp byte[ST18Enable],0
je .nost18
mov dword[CSStatus+29],'ST01'
mov dword[CSStatus+33],'8 '
.nost18
cmp byte[SGBEnable],0
je .nosgb
mov dword[CSStatus+29],'SGB '
mov dword[CSStatus+33],' '
.nosgb
cmp byte[BSEnable],0
je .nobs
mov dword[CSStatus+29],'BROA'
mov dword[CSStatus+33],'DCST'
;dummy out date so CRC32 matches
sub esi,3
mov word[esi],042h ;42 is the answer, and the uCONSRT standard
.nobs
mov dword[CSStatus2+12],'No '
cmp byte[Interleaved],0
je .nointlv
mov dword[CSStatus2+12],'Yes '
.nointlv
; calculate CRC32
xor edx,edx
mov eax,0FFFFFFFFh
mov ecx,dword[NumofBytes]
mov esi,[romdata]
;Only calculate Add on ROM?
cmp byte[SplittedROM],1
jne .calcloop
mov ecx,dword[addOnSize]
add esi,dword[addOnStart]
.calcloop
mov dl,byte[esi]
mov ebx,eax ;ebx = CRC32
xor ebx,edx ;ebx ^= edx
movzx ebx,bl ;ebx &= 0xFF
mov ebx,[ebx*4 + crc32_table] ;ebx = crc32_table[bl]
shr eax,8 ;CRC32 >>= 8
xor eax,ebx ;CRC32 ^= ebx
inc esi
dec ecx
jnz .calcloop
xor eax,0FFFFFFFFh
mov [CRC32],eax
;Place CRC32 on line
mov ecx,8
mov esi,CSStatus3
add esi,32
mov ebx,0F0000000h
.crcprintloop
mov eax,[CRC32]
and eax,ebx
dec ecx
shl ecx,2
shr eax,cl
add eax,48
cmp eax,58
jb .noadd
add eax,7
.noadd
mov [esi],al
inc esi
shr ebx,4
shr ecx,2
jnz .crcprintloop
pushad
call CalcChecksum
popad
mov esi,[romdata]
add esi,[infoloc]
add esi,1Eh
mov ax,[Checksumvalue]
;On add on ROMs we check the add on
cmp byte[SplittedROM],1
jne .check
add esi,dword[addOnStart]
.check
cmp ax,[esi]
jne .failed
.passed2
mov dword[CSStatus2+36],'OK '
jmp .passed
.failed
mov dword[CSStatus2+36],'FAIL'
.passed
pushad
call DumpROMLoadInfo
popad
mov dword[MessageOn],300
mov dword[Msgptr],CSStatus
mov eax,[MsgCount]
ret
;*******************************************************
; Show Information
;*******************************************************

View File

@@ -668,9 +668,9 @@ extern char *ZOpenFileName;
bool Header512;
extern char CSStatus[41];
extern char CSStatus2[41];
extern char CSStatus3[41];
extern char CSStatus[40];
extern char CSStatus2[40];
extern char CSStatus3[40];
extern bool RomInfo;
char *lastROMFileName;
void DumpROMLoadInfo()
@@ -1711,8 +1711,92 @@ void SPC7_Convert_Lower()
}
}
extern unsigned int crc32_table[256];
unsigned int CalcCRC32 (unsigned char *start, unsigned int size)
{
unsigned int i, result=0xFFFFFFFF;
for (i=0 ; i<size ; i++)
{
result = (result >> 8) ^ (crc32_table[(result ^ (*(start+i))) & 0xFF]);
}
return (~result);
}
extern unsigned int MsgCount, MessageOn, CRC32;
extern unsigned char IPSPatched, *Msgptr;
unsigned int showinfogui()
{
unsigned int i;
unsigned char *ROM = (unsigned char *)romdata;
if (infoloc == 0x40FFC0) { memcpy (CSStatus2+23, "EHi ", 4); }
else
{
if (romtype == 2) { memcpy (CSStatus2+23, "Hi ", 4); }
else { memcpy (CSStatus2+23, "Lo ", 4); }
}
for (i=0 ; i<20 ; i++)
{
CSStatus[i] = (ROM[infoloc + i]) ? ROM[infoloc + i] : 32;
}
if ((ROM[infoloc + 25] < 2 ) || (ROM[infoloc + 25] > 12))
{
memcpy (CSStatus3+6, "NTSC", 4);
}
else { memcpy (CSStatus3+6, "PAL ", 4); }
if (IPSPatched) { memcpy (CSStatus3+16, "IPS ", 4); }
else { memcpy (CSStatus3+16, " ", 4); }
memcpy (CSStatus+29, "NORMAL ", 8);
if (SA1Enable) { memcpy (CSStatus+29, "SA-1 ", 8); }
if (RTCEnable) { memcpy (CSStatus+29, "RTC ", 8); }
if (SPC7110Enable) { memcpy (CSStatus+29, "SPC7110 ", 8); }
if (SFXEnable) { memcpy (CSStatus+29, "SUPER FX", 8); }
if (C4Enable) { memcpy (CSStatus+29, "C4 ", 8); }
if (DSP1Enable) { memcpy (CSStatus+29, "DSP-1 ", 8); }
if (DSP2Enable) { memcpy (CSStatus+29, "DSP-2 ", 8); }
if (DSP3Enable) { memcpy (CSStatus+29, "DSP-3 ", 8); }
if (DSP4Enable) { memcpy (CSStatus+29, "DSP-4 ", 8); }
if (SDD1Enable) { memcpy (CSStatus+29, "S-DD1 ", 8); }
if (OBCEnable) { memcpy (CSStatus+29, "OBC1 ", 8); }
if (SETAEnable) { memcpy (CSStatus+29, "SETA DSP", 8); }
if (ST18Enable) { memcpy (CSStatus+29, "ST018 ", 8); }
if (SGBEnable) { memcpy (CSStatus+29, "SGB ", 8); }
if (BSEnable) { memcpy (CSStatus+29, "BROADCST", 8);
// dummy out date so CRC32 matches
ROM[infoloc + 22] = 0x42;
ROM[infoloc + 23] = 0x00;
// 42 is the answer, and the uCONSRT standard
}
if (Interleaved) { memcpy (CSStatus2+12, "Yes ", 4); }
else { memcpy (CSStatus2+12, "No ", 4); }
// calculate CRC32 for the whole ROM, or Add-on ROM only
CRC32 = (SplittedROM) ? CalcCRC32(ROM+addOnStart, addOnSize) : CalcCRC32(ROM, NumofBytes);
// place CRC32 on line
sprintf (CSStatus3+32, "%08X", CRC32);
CalcChecksum();
i = (SplittedROM) ? infoloc + 0x1E + addOnStart: infoloc + 0x1E;
if ((ROM[i] == (Checksumvalue & 0xFF)) && (ROM[i+1] == (Checksumvalue >> 8)))
{ memcpy (CSStatus2+36, "OK ", 4); }
else { memcpy (CSStatus2+36, "FAIL", 4); }
DumpROMLoadInfo();
MessageOn = 300;
Msgptr = CSStatus;
return (MsgCount);
}