home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
Games
/
WHDLoad
/
Src
/
gci
/
WHDLoadGCI.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-08-10
|
11KB
|
353 lines
/*****************************************************************************
; :Module. WHDLoadGCI.c
; :Author. Bert Jahn
; :EMail. jah@fh-zwickau.de
; :Address. Franz-Liszt-Straße 16, Rudolstadt, 07404, Germany
; :Version. $Id: WHDLoadGCI.c 0.9 2000/06/04 20:55:21 jah Exp $
; :History. 18.07.98 started
; 13.12.98 immediate terminate if dump loading fails
; 02.03.00 expmem stuff added
; multiple memory windows
; :Copyright. All Rights Reserved
; :Language. C
; :Translator. GCC 2.90.27
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exec/memory.h>
#include <libraries/mui.h>
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/muimaster_protos.h>
#include <proto/muimaster.h>
#include "whddump.h"
#include "WHDLoadGCI.h"
/****************************************************************************/
/****************************************************************************/
/* defines */
/****************************************************************************/
/****************************************************************************/
/* extern functions */
/****************************************************************************/
void make_win_info (void);
void make_win_cpu (void);
void make_win_cust (void);
void wmem_make (int);
void * wmem_init (void);
void wmem_finit (void);
void wmem_goto (int);
void freedump (void);
BOOL loaddump (STRPTR name);
/****************************************************************************/
/* static variables */
/****************************************************************************/
extern struct Library *SysBase,*DOSBase;
struct Library *IntuitionBase;
struct Library *MUIMasterBase;
struct Library *UtilityBase;
APTR app = NULL; /* application */
APTR win; /* main window */
struct whddump_header * header = NULL;
char * term = NULL;
struct whddump_cpu * cpu = NULL;
struct whddump_custom * custom = NULL;
struct whddump_cia * ciaa = NULL;
struct whddump_cia * ciab = NULL;
APTR * slave = NULL;
APTR * mem = NULL;
APTR * emem = NULL;
const char* StringHexAccept = "$0123456789abcdefABCDEF";
/****************************************************************************/
/* function declarations */
/****************************************************************************/
void main2 (void);
/****************************************************************************/
struct NewMenu MenuData[] =
{
MENUBASE
{ NM_END,NULL,0,0,0,(APTR)0 },
};
/****************************************************************************/
#ifdef _DCC
int brkfunc(void) { return(0); }
int wbmain(struct WBStartup *wb_startup) {
extern int main(int argc, char *argv[]);
return (main(0, (char **)wb_startup));
}
#endif
#ifdef __SASC
int CXBRK(void) { return(0); }
int _CXBRK(void) { return(0); }
void chkabort(void) {}
#endif
/****************************************************************************/
#define btst(i,n) ((i >> n) & 1)
char * dmacon_h (void) {
static char s[252];
int v = custom->wdcu_regs[0x002/2];
sprintf(s,MUIX_C MUIX_B "dmacon" MUIX_N MUIX_R "\nBlitter Busy = %d\n"
"Blitter Zero = %d\nBlitter Priority = %d\nDMA Enable = %d\n"
"Bitplane Enable = %d\nCopper Enable = %d\nBlitter Enable = %d\n"
"Sprite Enable = %d\nDisk Enable = %d\nAudio 3 Enable = %d\n"
"Audio 2 Enable = %d\nAudio 1 Enable = %d\nAudio 0 Enable = %d",
btst(v,14),btst(v,13),btst(v,10),btst(v,9),btst(v,8),btst(v,7),btst(v,6),
btst(v,5),btst(v,4),btst(v,3),btst(v,2),btst(v,1),btst(v,0) );
/*printf("%ld\n",strlen(s));*/
return s;
}
char * int_h (int v, char *s, const char *name) {
sprintf(s,MUIX_C MUIX_B "int%s" MUIX_N MUIX_R "\nInterrupt Enable = %d\n"
"CIA-B, Expansion = %d\nDisk = %d\nSerial full = %d\n"
"Audio 3 = %d\nAudio 2 = %d\nAudio 1 = %d\nAudio 0 = %d\nBlitter = %d\n"
"Vertical Blank = %d\nCopper = %d\nCIA-A, Expansion = %d\nSoft = %d\n"
"Disk = %d\nSerial empty = %d",
name,btst(v,14),btst(v,13),btst(v,12),btst(v,11),btst(v,10),btst(v,9),
btst(v,8),btst(v,7),btst(v,6),btst(v,5),btst(v,4),btst(v,3),btst(v,2),
btst(v,1),btst(v,0) );
/*printf("%ld\n",strlen(s));*/
return s;
}
char * intena_h (void) {
static char s[228];
return int_h(custom->wdcu_regs[0x01c/2],s,"ena");
}
char * intreq_h (void) {
static char s[228];
return int_h(custom->wdcu_regs[0x01e/2],s,"req");
}
char * sr_h (void) {
static char s[56];
int v = cpu->wdc_sr;
sprintf(s,"Status Register\nT=%d S=%d M=%d I=%d X=%d N=%d Z=%d V=%d C=%d",
(v>>14)&3,btst(v,13),btst(v,12),(v>>8)&7,btst(v,4),
btst(v,3),btst(v,2),btst(v,1),btst(v,0) );
/*printf("%ld\n",strlen(s));*/
return s;
}
/****************************************************************************/
int main(int argc,char *argv[]) {
IntuitionBase = OpenLibrary("intuition.library",39);
UtilityBase = OpenLibrary("utility.library",39);
MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN);
if ( IntuitionBase && UtilityBase && MUIMasterBase ) {
if (argc == 2) loaddump(argv[1]); else loaddump(NULL);
if (header) {
if (wmem_init()) {
main2();
wmem_finit();
}
freedump();
}
}
CloseLibrary(MUIMasterBase);
exit(0);
}
/****************************************************************************/
void main2() {
APTR win1;
APTR
regd0,regd1,regd2,regd3,regd4,regd5,regd6,regd7,
rega0,rega1,rega2,rega3,rega4,rega5,rega6,
regsr,regssp,regusp,regpc,morecpu,
cudmacon,cuintena,cuintreq,morecust,
morecias,moremem,moreemem,moreslave,moreinfo,
a_quit,a_restart,a_cont;
ULONG signals;
BOOL running = TRUE;
app = ApplicationObject,
MUIA_Application_Title, "WHDLoad GCI",
MUIA_Application_Version, "$VER: WHDLoad GCI 1.1 (" __DATE__ ")",
MUIA_Application_Copyright, "©1998-2000 by Wepl",
MUIA_Application_Author, "Wepl",
MUIA_Application_Description, "WHDload Visualisation and Debugging.",
MUIA_Application_Base, "WHDLoadGCI",
MUIA_Application_Menustrip, MUI_MakeObject(MUIO_MenustripNM,MenuData,0),
MUIA_Application_Window, win1 = WindowObject,
MUIA_Window_Title, "WHDLoad GCI",
MUIA_Window_ID , MAKE_ID('M','A','I','N'),
WindowContents, VGroup,
Child, HGroup,
Child, HGroup, GroupFrameT("CPU"), MUIA_Group_Columns, 4, MUIA_Weight, 20,
RegisterC(regd0,"D0:",NULL,cpu->wdc_regs[0],8),
RegisterC(rega0,"A0:",NULL,cpu->wdc_regs[8],8),
RegisterC(regd1,"D1:",NULL,cpu->wdc_regs[1],8),
RegisterC(rega1,"A1:",NULL,cpu->wdc_regs[9],8),
RegisterC(regd2,"D2:",NULL,cpu->wdc_regs[2],8),
RegisterC(rega2,"A2:",NULL,cpu->wdc_regs[10],8),
RegisterC(regd3,"D3:",NULL,cpu->wdc_regs[3],8),
RegisterC(rega3,"A3:",NULL,cpu->wdc_regs[11],8),
RegisterC(regd4,"D4:",NULL,cpu->wdc_regs[4],8),
RegisterC(rega4,"A4:",NULL,cpu->wdc_regs[12],8),
RegisterC(regd5,"D5:",NULL,cpu->wdc_regs[5],8),
RegisterC(rega5,"A5:",NULL,cpu->wdc_regs[13],8),
RegisterC(regd6,"D6:",NULL,cpu->wdc_regs[6],8),
RegisterC(rega6,"A6:",NULL,cpu->wdc_regs[14],8),
RegisterC(regd7,"D7:",NULL,cpu->wdc_regs[7],8),
RegisterC(regusp,"USP:","User Stack Pointer",cpu->wdc_usp,8),
RegisterC(regsr,"SR:",sr_h(),cpu->wdc_sr,4),
RegisterC(regssp,"SSP:","Supervisor Stack Pointer",cpu->wdc_ssp,8),
RegisterC(regpc,"PC:","Program Counter",cpu->wdc_pc,8),
Child, Label2(""), Child, morecpu = SimpleButton("More"),
End,
Child, VGroup, MUIA_Weight, 10,
Child, VGroup, GroupFrameT("Custom"),
Child, HGroup, MUIA_Group_Columns, 2,
RegisterC(cudmacon,"dmacon:",dmacon_h(),custom->wdcu_regs[0x002/2],4),
RegisterC(cuintena,"intena:",intena_h(),custom->wdcu_regs[0x01c/2],4),
RegisterC(cuintreq,"intreq:",intreq_h(),custom->wdcu_regs[0x01e/2],4),
End,
Child, morecust = SimpleButton("More"),
End,
Child, VGroup, GroupFrameT("Misc"),
Child, morecias = SimpleButton("Cia's"),
Child, moremem = SimpleButton("BaseMem"),
ChildIf(emem), moreemem = SimpleButtonIf(emem,"ExpMem"),
Child, moreslave = SimpleButton("Slave"),
Child, moreinfo = SimpleButton("Info"),
End,
End,
End,
ChildIf(term), term ? TextObject, TextFrame,
MUIA_Background, MUII_TextBack,
MUIA_Text_Contents, term,
End : NULL,
Child, HGroup, GroupFrameT("Actions"), MUIA_Group_SameWidth, TRUE,
Child, a_quit = SimpleButton("Quit"),
Child, a_restart = SimpleButton("Restart"),
Child, a_cont = SimpleButton("Continue"),
End,
End,
End,
End;
if (app) {
win = win1;
DoMethod(win1,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
DoMethod(morecpu,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MORECPU);
DoMethod(morecust,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MORECUST);
DoMethod(moremem,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MOREMEM);
DoMethod(moreemem,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MOREEMEM);
DoMethod(moreslave,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MORESLAVE);
DoMethod(moreinfo,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MAIN_MOREINFO);
DoMethod(a_quit,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
set(win1,MUIA_Window_Open,TRUE);
/*
** Input loop...
*/
while (running)
{
ULONG id = DoMethod(app,MUIM_Application_Input,&signals);
switch (id)
{
case MEN_QUIT:
case MUIV_Application_ReturnID_Quit:
running = FALSE;
break;
case MEN_ABOUT:
MUI_Request(app,win1,0,NULL,"OK","\33cWHDLoad Graphical Coders Interface\n"
"©1998-2000 Wepl\nAll Rights Reserved.");
break;
case MEN_ABOUTMUI:
DoMethod(app,MUIM_Application_AboutMUI,win);
break;
case MEN_GOTO0:
case MEN_GOTO1:
case MEN_GOTO2:
case MEN_GOTO3:
case MEN_GOTO4:
case MEN_GOTO5:
case MEN_GOTO6:
case MEN_GOTO7:
case MEN_GOTO8:
case MEN_GOTO9:
wmem_goto( id - MEN_GOTO0 );
break;
case MAIN_MORECPU:
make_win_cpu();
break;
case MAIN_MORECUST:
make_win_cust();
break;
case MAIN_MOREMEM:
wmem_make(0);
break;
case MAIN_MOREEMEM:
if (emem) {
wmem_make(header->wdh_ExpMemLog);
}
break;
case MAIN_MORESLAVE:
wmem_make(header->wdh_SlaveLog);
break;
case MAIN_MOREINFO:
make_win_info();
break;
}
if (running && signals) Wait(signals);
}
set(win1,MUIA_Window_Open,FALSE);
/*
** Shut down...
*/
MUI_DisposeObject(app);
}
}