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 mov byte[CheatSearchStatus],0
call SetupROM call SetupROM
pushad
call showinfogui call showinfogui
popad
call initsnes call initsnes
;mov byte[snesmouse],0 ;mov byte[snesmouse],0
mov byte[sramsavedis],0 mov byte[sramsavedis],0

View File

@@ -22,7 +22,7 @@
EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol
EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0 EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0
EXTSYM MovieProcessing EXTSYM MovieProcessing,showinfogui
EXTSYM filefound,inittable,SA1inittable EXTSYM filefound,inittable,SA1inittable
EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer
EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime
@@ -244,7 +244,9 @@ NEWSYM init
mov byte[romloadskip],0 mov byte[romloadskip],0
call loadfile call loadfile
call SetupROM call SetupROM
pushad
call showinfogui call showinfogui
popad
.noloadfile .noloadfile
call UpdateDevices call UpdateDevices
call init65816 call init65816
@@ -2608,11 +2610,11 @@ NEWSYM convertsram
ret ret
SECTION .data SECTION .data
NEWSYM CSStatus, db ' TYPE: ',0 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 NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0
crc32_table: NEWSYM crc32_table,
dd 000000000h, 077073096h, 0ee0e612ch, 0990951bah, 0076dc419h, 0706af48fh dd 000000000h, 077073096h, 0ee0e612ch, 0990951bah, 0076dc419h, 0706af48fh
dd 0e963a535h, 09e6495a3h, 00edb8832h, 079dcb8a4h, 0e0d5e91eh, 097d2d988h dd 0e963a535h, 09e6495a3h, 00edb8832h, 079dcb8a4h, 0e0d5e91eh, 097d2d988h
dd 009b64c2bh, 07eb17cbdh, 0e7b82d07h, 090bf1d91h, 01db71064h, 06ab020f2h 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 054de5729h, 023d967bfh, 0b3667a2eh, 0c4614ab8h, 05d681b02h, 02a6f2b94h
dd 0b40bbe37h, 0c30c8ea1h, 05a05df1bh, 02d02ef8dh 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 ; Show Information
;******************************************************* ;*******************************************************

View File

@@ -668,9 +668,9 @@ extern char *ZOpenFileName;
bool Header512; bool Header512;
extern char CSStatus[41]; extern char CSStatus[40];
extern char CSStatus2[41]; extern char CSStatus2[40];
extern char CSStatus3[41]; extern char CSStatus3[40];
extern bool RomInfo; extern bool RomInfo;
char *lastROMFileName; char *lastROMFileName;
void DumpROMLoadInfo() 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);
}