File:  [UNIX Amiga Emulator] / uae / src / xdebug.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:39:05 2018 UTC (8 years, 3 months ago) by root
Branches: MAIN, BSchmidt
CVS tags: uae068, HEAD
uae-0.6.8

 /* 
  * UAE - The Un*x Amiga Emulator
  * 
  * XGUI and XDebugger 
  *
  * Copyright 1996 Christian Schmitt <[email protected]>
  */

#include "sysconfig.h"
#include "sysdeps.h"

#include <ctype.h>
#include <signal.h>

#if FORMS_H_VARIANT == 0
#include <forms.h>
#else
#include <X11/forms.h>
#endif

#include "config.h"
#include "options.h"
#include "memory.h"
#include "custom.h"
#include "readcpu.h"
#include "machdep/m68k.h"
#include "newcpu.h"
#include "debug.h"
#include "cia.h"
#include "disk.h"
#include "xwin.h"
#include "gui.h"

/* First the Forms stuff */

FL_FORM *Control;

FL_OBJECT
        *udf0,
        *I_df3,
        *DF0,
        *Reset,
        *Debug,
        *Exit,
        *Power,
        *Text_1,
        *Text_2,
        *E_df0,
        *I_df0,
        *E_df1,
        *I_df1,
        *E_df2,
        *I_df2,
        *E_df3,
        *Led_0,
        *DF1,
        *DF2,
        *DF3,
        *l_power,
        *l_df0,
        *l_df1,
        *l_df2,
        *l_df3;

FL_FORM *Debugger;

FL_OBJECT
        *a0,
        *a1,
        *a2,
        *a3,
        *a4,
        *a5,
        *a6,
        *a7,
        *d0,
        *d1,
        *d2,
        *d3,
        *d4,
        *d5,
        *d6,
        *d7,
        *usp,
        *isp,
        *msp,
        *vbr,
        *pc,
        *adress,
        *imask,
        *Output,
        *f_s,
        *f_m,
        *f_x,
        *f_n,
        *f_z,
        *f_v,
        *f_c,
        *f_t;

FL_FORM *Custom;

FL_OBJECT
        *a_cra,
        *a_crb,
        *a_imask,
        *a_tod,
        *a_ta,
        *a_tb,
        *b_cra,
        *b_crb,
        *b_imask,
        *b_tod,
        *b_ta,
        *b_tb,
        *uae_dmacon,
        *uae_intena,
        *uae_intreq,
        *uae_vpos,
        *uae_hpos,
        *uae_frames;

FL_FORM *FPU;

FL_OBJECT
        *fpu0,
        *fpu1,
        *fpu2,
        *fpu3,
        *fpu4,
        *fpu5,
        *fpu6,
        *fpu7,
        *fpu_n,
        *fpu_z,
        *fpu_i,
        *fpu_nan;

FL_FORM *Memory;

FL_OBJECT
        *uaectrl_down,
        *memory_field,
        *uaectrl_up,
        *memory_start;

FL_FORM *Disasm;

FL_OBJECT
        *disasm_field,
        *disasm_start,
        *disasm_down,
        *disasm_up;


static CPTR nextpc;

static char* ccnames[] =
{ "T ","F ","HI","LS","CC","CS","NE","EQ",
  "VC","VS","PL","MI","GE","LT","GT","LE" };


static void uaectrl_disasm(CPTR addr, CPTR *nextpc, int cnt,char *buffer)
{
    CPTR pc = m68k_getpc();
    CPTR newpc = 0;
    int i,j,oldcnt=cnt;
    char dummy[120];
    char buf[120];
    m68k_setpc(addr);
    for (;cnt--;){
        char instrname[20],*ccpt;
        int opwords;
        ULONG opcode;
        struct mnemolookup *lookup;
        struct instr *dp;
	
        sprintf(buf,"%08lx: ", (unsigned long int)m68k_getpc());
	if (oldcnt == 1) {
	    for(opwords = 0; opwords < 5; opwords++) {
		sprintf(dummy, "%04x ", (unsigned int)(get_word(m68k_getpc()+opwords*2)));
		strcat(buf, dummy);
	    }
        }

        opcode = nextiword();
        if (cpufunctbl[opcode] == op_illg) {
            opcode = 0x4AFC;
        }
        dp = table68k + opcode;
        for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++)
            ;
        strcpy(instrname,lookup->name);
        ccpt = strstr(instrname,"cc");
        if (ccpt != 0) {
            strncpy(ccpt,ccnames[dp->cc], 2);
        }
	strcat(buf, instrname);

        switch(dp->size){
         case sz_byte: strcat(buf,".B "); break;
         case sz_word: strcat(buf,".W "); break;
         case sz_long: strcat(buf,".L "); break;
         default: strcat(buf,"   ");break;
        }

        if (dp->suse) {
            newpc = m68k_getpc() + ShowEA(dp->sreg, dp->smode, dp->size, buf);
        }
        if (dp->suse && dp->duse)
            strcat(buf,",");
        if (dp->duse) {
            newpc = m68k_getpc() + ShowEA(dp->dreg, dp->dmode, dp->size, buf);
        }
        if (ccpt != 0) {
            if (cctrue(dp->cc))
                sprintf(dummy, " == %08lx (TRUE)", (unsigned long int)newpc);
            else
                sprintf(dummy, " == %08lx (FALSE)", (unsigned long int)newpc);
	    strcat(buf, dummy);
        } else if ((opcode & 0xff00) == 0x6100) { /* BSR */
            sprintf(dummy, " == %08lx", (unsigned long int)newpc);
	    strcat(buf, dummy);
	}
        strcat(buffer,buf);
        if(oldcnt > 1) { 
	    strcat(buffer, "\n");
	}
    }
    if (nextpc)
	*nextpc = m68k_getpc();
    m68k_setpc(pc);
}

int debugger_active = 0;
static CPTR skipaddr;
static int do_skip;
int debugging = 0;
static char exit_debug;

static char custom=0,fpu=0,memory=0,disasm=0;
static LONG xgui_debug_adress,xgui_memory_adress,xgui_disasm_adress;


/* callbacks for form Control */
static void ctrl_insert(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    const char *buf;
    char buffer[256],path[512];
    int i=0,j,len;
    getwd(path);
    buf=fl_show_fselector("Disk-Image",path,"*.adf*","");
    if(buf!=0) {
        len=strlen(buf);
        if(len!=0){
            for(i=len;(i>0)&&(buf[i]!='/');i--);
            for(j=0;j<=i;j++) path[j]=buf[j];
            path[j]=0;
            chdir(path);
            for(i=0,j=0;buf[i]!=0;i++) if(buf[i]=='/') j=i;
            j++;
            for(i=j;buf[i]!=0;i++) buffer[i-j]=buf[i];
            buffer[i-j]=0;
        } else {
            buffer[0]=0;
        }


	if(ob==I_df0) {
	    fl_set_object_label(DF0,buffer);
	    fl_redraw_object(DF0);
	    if (disk_empty(0)) disk_insert(0,buf);
	}
        if(ob==I_df1) {
	    fl_set_object_label(DF1,buffer);
	    fl_redraw_object(DF1);
	    if (disk_empty(1)) disk_insert(1,buf); 
        }
        if(ob==I_df2) {
	    fl_set_object_label(DF2,buffer);
	    fl_redraw_object(DF2);
	    if (disk_empty(2)) disk_insert(2,buf);
        }
        if(ob==I_df3) {
	    fl_set_object_label(DF3,buffer);
	    fl_redraw_object(DF3);
	    if (disk_empty(3)) disk_insert(3,buf); 
        }
    }
}

static void ctrl_reset(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    m68k_reset();
}

static void ctrl_debug(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    fl_hide_form(Control);
    fl_show_form(Debugger,FL_PLACE_CENTER,FL_FULLBORDER,"UAE - Debuger");
    fl_deactivate_object(f_s);
    fl_deactivate_object(f_m);
    fl_deactivate_object(f_x);
    fl_deactivate_object(f_n);
    fl_deactivate_object(f_z);
    fl_deactivate_object(f_v);
    fl_deactivate_object(f_c);
    fl_deactivate_object(f_t);
    fpu = 0;
    custom = 0;
    activate_debugger();
}

static void ctrl_exit(FL_OBJECT *ob, long data)
{
    if (fl_show_question("Do you really want to quit ??","","")!=0) 
	exit(1);
}

static void ctrl_eject(FL_OBJECT *ob, long data)
{
    if(ob==E_df0) {
	fl_set_object_label(DF0,"");
	fl_redraw_object(DF0);
     	disk_eject(0);
    }
    if(ob==E_df1) {
	fl_set_object_label(DF1,"");
        fl_redraw_object(DF1);
        disk_eject(1);
    }
    if(ob==E_df2) {
	fl_set_object_label(DF2,"");
        fl_redraw_object(DF2);
        disk_eject(2);
    }
    if(ob==E_df3) {
	fl_set_object_label(DF3,"");
        fl_redraw_object(DF3);
        disk_eject(3);
    }
}



/* callbacks for form Debugger */
static void ctrl_custom(FL_OBJECT *ob, long data)
{  
    if (custom == 1){
        fl_hide_form(Custom);
        custom=0;
    } else {
        fl_show_form(Custom,FL_PLACE_CENTER,FL_FULLBORDER,"Custom");
        custom=1;
    }
}

static void ctrl_fpu(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    if(fpu==1){
        fl_hide_form(FPU);
        fpu=0;
    } else {
        fl_show_form(FPU,FL_PLACE_CENTER,FL_FULLBORDER,"FPU");
	fl_deactivate_object(fpu_n);
        fl_deactivate_object(fpu_z);
        fl_deactivate_object(fpu_i);
        fl_deactivate_object(fpu_nan);
        fpu=1;
    }
}


static void x_step(void)
{
    skipaddr = nextpc;
    do_skip = 1;
    regs.spcflags |= SPCFLAG_BRK;
}

static void xgui_go(void)
{
    m68k_setpc (xgui_debug_adress);
    debugger_active = 0;
    debugging = 0;
    fl_activate_object(f_x);
    fl_trigger_object(f_x);
    fl_deactivate_object(f_x);
    exit_debug=1;
} 

static void xgui_forward(void)
{
    skipaddr = xgui_debug_adress;
    do_skip = 1;
    regs.spcflags |= SPCFLAG_BRK;
    fl_activate_object(f_x);
    fl_trigger_object(f_x);
    fl_deactivate_object(f_x);
    exit_debug=1;
} 

static void xgui_memupdate(void)
{
    int lines=17;
    char buffer[2048];
    char buf[10],ascii[9];
    LONG addr=xgui_memory_adress;
    buffer[0]=0;
    for (;lines--;){
	int i;
	sprintf(buf,"%08lx: ", addr);
	strcat(buffer,buf);
	for(i=0; i< 8; i++) {
            UBYTE j=get_byte(addr);
            if(isprint(j)) ascii[i]=j; else ascii[i]='.';
	    sprintf(buf,"%02x ",j);
	    strcat(buffer,buf);
	    addr += 1;
	}
        ascii[8]=0;
        strcat(buffer,ascii);
	sprintf(buf,"\n");
	strcat(buffer,buf);
    }  
    fl_set_object_label(memory_field,buffer);
    sprintf(buf,"0x%08lx",xgui_memory_adress);
    fl_set_input(memory_start,buf);
}

static void xgui_disasmupdate(void)
{
    char buffer[4048];
    char buf[100];
    int lines=17;
    LONG dummy=xgui_disasm_adress;
    buffer[0]=0;
    uaectrl_disasm(dummy,NULL,17,buffer);
    fl_set_object_label(disasm_field,buffer);
    sprintf(buf,"0x%08lx",xgui_disasm_adress);
    fl_set_input(disasm_start,buf);
#if 0
    for(;;)
	;
#endif
}


static void ctrl_mem(FL_OBJECT *ob, long data)
{
    if(memory==0) {
	fl_show_form(Memory,FL_PLACE_CENTER,FL_FULLBORDER,"Memory Browser");
	memory=1;
	xgui_memory_adress=xgui_debug_adress;
	xgui_memupdate();
    } else {
	fl_hide_form(Memory);
	memory=0;
    }
}

static void ctrl_disasm(FL_OBJECT *ob, long data)
{

  /* the xgui_disasmupdate() function segfaults; therefor this function
     is disabled */
#if 1
    if(disasm==0) {
	fl_show_form(Disasm,FL_PLACE_CENTER,FL_FULLBORDER,"Disassembler");
	disasm=1;
	xgui_disasm_adress=xgui_debug_adress;
	xgui_disasmupdate();
    } else {
	fl_hide_form(Disasm);
	disasm=0;
    }
#else
    fl_show_alert("Sorry","This function isn't available yet",NULL,0);
#endif
}

static void ctrl_debug_exit(FL_OBJECT *ob, long data)
{
  fl_hide_form(Debugger);
  if(fpu==1) fl_hide_form(FPU);
  if(custom==1) fl_hide_form(Custom);
  if(memory==1) fl_hide_form(Memory);
  if(disasm==1) fl_hide_form(Disasm);
  fpu=0;custom=0;memory=0;disasm=0;
  fl_show_form(Control,FL_PLACE_CENTER,FL_FULLBORDER,"UAE - Control");
  fl_activate_object(f_x);
  fl_trigger_object(f_x);
  fl_deactivate_object(f_x);
  debugger_active = 0;
  debugging = 0;
  exit_debug=1;
}

static void ctrl_step(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    regs.spcflags |= SPCFLAG_BRK;
    debugging=1;
    exit_debug=0;
    fl_activate_object(f_s);
    fl_trigger_object(f_s);
    fl_deactivate_object(f_s);
}

static void ctrl_next(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    x_step();
    debugging=1;
    exit_debug=0;
    fl_activate_object(f_s);
    fl_trigger_object(f_s);
    fl_deactivate_object(f_s);
}

static void ctrl_go(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    xgui_go();
    ctrl_debug_exit(NULL,0);
}

static void ctrl_forward(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    xgui_forward();
}

static void ctrl_address(FL_OBJECT *ob, long data)
{
    /* fill-in code for callback */
    xgui_debug_adress=strtol(fl_get_input(adress),NULL,0);
}


/* callbacks for form Memory */
static void change_memory_start(FL_OBJECT *ob, long data)
{
    if(ob==uaectrl_up) xgui_memory_adress-=8;
    else if(ob==uaectrl_down) xgui_memory_adress+=8;
    else xgui_memory_adress=strtol(fl_get_input(ob),NULL,16);
    xgui_memupdate();
}



/* callbacks for form Disasm */
static void change_disasm_start(FL_OBJECT *ob, long data)
{
    if(ob==disasm_up) xgui_disasm_adress-=2;
    else if(ob==disasm_down) xgui_disasm_adress+=2;
    else xgui_disasm_adress=strtol(fl_get_input(ob),NULL,0);
    xgui_disasmupdate();
}



void activate_debugger(void)
{
    do_skip = 0;
    if (debugger_active)
	return;
    debugger_active = 1;
    regs.spcflags |= SPCFLAG_BRK;
    debugging = 1;
    use_debugger = 1;
}

static int firsthist = 0;
static int lasthist = 0;
#ifdef NEED_TO_DEBUG_BADLY

static struct regstruct history[MAX_HIST];
static union flagu historyf[MAX_HIST];
#else
static CPTR history[MAX_HIST];
#endif

static void uaectrl_update(void);

extern void x_dumpcia(void);
extern void x_dumpcustom(void);
extern LONG xgui_debug_adress,xgui_memory_adress,xgui_disasm_adress;


/* external variables/functions from custom.c */

extern UWORD intena,intreq;
extern int vpos;
extern unsigned long frametime,timeframes; 
extern UWORD DMACONR(void);
extern int current_hpos(void);


/* external variables/functions from cia.c */


extern UBYTE ciaaimask,ciabimask;
extern UBYTE ciaacra,ciaacrb,ciabcra,ciabcrb;
extern ULONG ciaata,ciaatb,ciabta,ciabtb;
extern ULONG ciaatod,ciabtod;
extern int ciaatlatch,ciabtlatch;

 

void x_dumpcustom(void)
{
    char buf[20];
    sprintf(buf,"%x",(unsigned int)DMACONR());
    fl_set_object_label(uae_dmacon,buf);
    sprintf(buf,"%x",(unsigned int)intena);
    fl_set_object_label(uae_intena,buf);
    sprintf(buf,"%x",(unsigned int)intreq);
    fl_set_object_label(uae_intreq,buf);
    sprintf(buf,"%x",(unsigned int)vpos);
    fl_set_object_label(uae_vpos,buf);
    sprintf(buf,"%x",(unsigned int)current_hpos());
    fl_set_object_label(uae_hpos,buf);
    if(timeframes) 
	sprintf(buf,"%d",frametime/timeframes);
    else
	buf[0]=0;
    fl_set_object_label(uae_frames,buf);
}

void x_dumpcia(void)
{
    char buf[20];
    sprintf(buf,"%02x",(unsigned int)ciaacra);
    fl_set_object_label(a_cra,buf);
    sprintf(buf,"%02x",(unsigned int)ciaacrb);
    fl_set_object_label(a_crb,buf);
    sprintf(buf,"%02x",(unsigned int)ciaaimask);
    fl_set_object_label(a_imask,buf);
    sprintf(buf,"%08lx %7s",(unsigned int)ciaatod,ciaatlatch ? " latched" : "");
    fl_set_object_label(a_tod,buf);
    sprintf(buf,"%04lx",(unsigned long int)ciaata);
    fl_set_object_label(a_ta,buf);
    sprintf(buf,"%04lx",(unsigned long int)ciaatb);
    fl_set_object_label(a_tb,buf);
    sprintf(buf,"%02x",(unsigned int)ciabcra);
    fl_set_object_label(b_cra,buf);
    sprintf(buf,"%02x",(unsigned int)ciabcrb);
    fl_set_object_label(b_crb,buf);
    sprintf(buf,"%02x",(unsigned int)ciabimask);
    fl_set_object_label(b_imask,buf);
    sprintf(buf,"%08lx %s",(unsigned long int)ciabtod,ciabtlatch ? " latched" : "");
    fl_set_object_label(b_tod,buf);
    sprintf(buf,"%04x",(unsigned int)ciabta);
    fl_set_object_label(b_ta,buf);
    sprintf(buf,"%04x",(unsigned int)ciabtb);
    fl_set_object_label(b_tb,buf);
 
}     

void uaectrl_update(void)
{
    char buf[120];
    fl_freeze_form(Debugger);
    xgui_debug_adress=m68k_getpc();
    sprintf(buf,"0x%08lx", (unsigned long int)xgui_debug_adress);
    fl_set_input(adress,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,0));
    fl_set_object_label(a0,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,1));
    fl_set_object_label(a1,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,2));
    fl_set_object_label(a2,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,3));
    fl_set_object_label(a3,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,4));
    fl_set_object_label(a4,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,5));
    fl_set_object_label(a5,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,6));
    fl_set_object_label(a6,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,7));
    fl_set_object_label(a7,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,0));
    fl_set_object_label(d0,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,1));
    fl_set_object_label(d1,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,2));
    fl_set_object_label(d2,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,3));
    fl_set_object_label(d3,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,4));
    fl_set_object_label(d4,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,5));
    fl_set_object_label(d5,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,6));
    fl_set_object_label(d6,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,7));
    fl_set_object_label(d7,buf);
    
    if (regs.s == 0) regs.usp = m68k_areg(regs,7);
    if (regs.s && regs.m) regs.msp = m68k_areg(regs,7);
    if (regs.s && regs.m == 0) regs.isp = m68k_areg(regs,7);
    
    sprintf(buf,"%08lx",regs.usp);
    fl_set_object_label(usp,buf);
    sprintf(buf,"%08lx",regs.msp);
    fl_set_object_label(msp,buf);
    sprintf(buf,"%08lx",regs.isp);
    fl_set_object_label(isp,buf);
    sprintf(buf,"%08lx",regs.vbr);
    fl_set_object_label(vbr,buf);
    sprintf(buf,"%d",regs.intmask);
    fl_set_object_label(imask,buf);
    sprintf(buf,"%08lx", (unsigned long int)m68k_getpc());
    fl_set_object_label(pc,buf);
    fl_set_button(f_t,regs.t0);
    fl_set_button(f_s,regs.s);
    fl_set_button(f_m,regs.m);
    fl_set_button(f_x,XFLG);
    fl_set_button(f_n,NFLG);
    fl_set_button(f_z,ZFLG);
    fl_set_button(f_v,VFLG);
    fl_set_button(f_c,CFLG);
    sprintf(buf,"%g",regs.fp[0]);
    fl_set_object_label(fpu0,buf);
    sprintf(buf,"%g",regs.fp[1]);
    fl_set_object_label(fpu1,buf);
    sprintf(buf,"%g",regs.fp[2]);
    fl_set_object_label(fpu2,buf);
    sprintf(buf,"%g",regs.fp[3]);
    fl_set_object_label(fpu3,buf);
    sprintf(buf,"%g",regs.fp[4]);
    fl_set_object_label(fpu4,buf);
    sprintf(buf,"%g",regs.fp[5]);
    fl_set_object_label(fpu5,buf);
    sprintf(buf,"%g",regs.fp[6]);
    fl_set_object_label(fpu6,buf);
    sprintf(buf,"%g",regs.fp[7]);
    fl_set_object_label(fpu7,buf);
    fl_set_button(fpu_n,(regs.fpsr & 0x8000000) != 0);
    fl_set_button(fpu_z,(regs.fpsr & 0x4000000) != 0);
    fl_set_button(fpu_i,(regs.fpsr & 0x2000000) != 0);
    fl_set_button(fpu_nan,(regs.fpsr & 0x1000000) != 0);

    uaectrl_disasm(m68k_getpc(),&nextpc,1,buf);

    fl_set_object_label(Output,buf);
    fl_unfreeze_form(Debugger);
    fl_freeze_form(Custom);
    x_dumpcia();
    x_dumpcustom();
    fl_unfreeze_form(Custom);
}

void debug(void)
{
    FL_OBJECT *obj;
    
    bogusframe = 1;
    
    if (do_skip && (m68k_getpc() != skipaddr/* || regs.a[0] != 0x1e558*/)) {
	regs.spcflags |= SPCFLAG_BRK;
	return;
    }
    do_skip = 0;

#ifdef NEED_TO_DEBUG_BADLY
    history[lasthist] = regs;
    historyf[lasthist] = regflags;
#else
    history[lasthist] = m68k_getpc();
#endif
    if (++lasthist == MAX_HIST) lasthist = 0;
    if (lasthist == firsthist) {
	if (++firsthist == MAX_HIST) firsthist = 0;
    }
    do{
	uaectrl_update();
	obj = fl_do_forms();
	if(exit_debug == 0) { debugging = 1; exit_debug = 2; return; }
	if(exit_debug == 1) { debugging = 0; exit_debug = 2; return; }
    } while(1);

}


int quit_program;
int speed_up_counter;

extern char df0[256],df1[256],df2[256],df3[256];

static void create_form_Control(void)
{
  FL_OBJECT *obj;

  if (Control)
     return;

  Control = fl_bgn_form(FL_NO_BOX,380,300);
  obj = fl_add_box(FL_UP_BOX,0,0,380,300,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,360,270,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,30,330,50,"");

  udf0 = fl_bgn_group();
  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,100,340,180,"");
  fl_end_group();

  obj = fl_add_frame(FL_DOWN_FRAME,30,240,280,30,"");
  I_df3 = obj = fl_add_button(FL_NORMAL_BUTTON,260,240,50,30,"Insert");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_insert,0);
  obj = fl_add_frame(FL_DOWN_FRAME,30,120,280,30,"");
  DF0 = obj = fl_add_text(FL_NORMAL_TEXT,70,120,140,30,"df0.adf");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  Reset = obj = fl_add_button(FL_NORMAL_BUTTON,30,40,70,30,"Reset");
    fl_set_button_shortcut(obj,"R",1);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_reset,0);
  Debug = obj = fl_add_button(FL_NORMAL_BUTTON,130,40,60,30,"Debug");
    fl_set_button_shortcut(obj,"D",1);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_debug,0);
  Exit = obj = fl_add_button(FL_NORMAL_BUTTON,220,40,60,30,"Exit");
    fl_set_button_shortcut(obj,"E",1);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_exit,0);
  Power = obj = fl_add_button(FL_NORMAL_BUTTON,380,60,40,20,"");
    fl_set_object_boxtype(obj,FL_NO_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_RED);
  Text_1 = obj = fl_add_text(FL_NORMAL_TEXT,140,10,100,20,"UAE - Control");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  Text_2 = obj = fl_add_text(FL_NORMAL_TEXT,140,90,110,20,"Floppy Drives");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_frame(FL_DOWN_FRAME,30,160,280,30,"");
  obj = fl_add_frame(FL_DOWN_FRAME,30,200,280,30,"");
  E_df0 = obj = fl_add_button(FL_NORMAL_BUTTON,210,120,50,30,"Eject");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_eject,0);
  I_df0 = obj = fl_add_button(FL_NORMAL_BUTTON,260,120,50,30,"Insert");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_insert,0);
  E_df1 = obj = fl_add_button(FL_NORMAL_BUTTON,210,160,50,30,"Eject");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_eject,0);
  I_df1 = obj = fl_add_button(FL_NORMAL_BUTTON,260,160,50,30,"Insert");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_insert,0);
  E_df2 = obj = fl_add_button(FL_NORMAL_BUTTON,210,200,50,30,"Eject");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_eject,0);
  I_df2 = obj = fl_add_button(FL_NORMAL_BUTTON,260,200,50,30,"Insert");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_insert,0);
  E_df3 = obj = fl_add_button(FL_NORMAL_BUTTON,210,240,50,30,"Eject");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_eject,0);
  Led_0 = obj = fl_add_button(FL_NORMAL_BUTTON,390,140,30,40,"");
    fl_set_object_boxtype(obj,FL_NO_BOX);
    fl_set_object_color(obj,FL_COL1,FL_GREEN);
  obj = fl_add_text(FL_NORMAL_TEXT,30,120,40,30,"DF0 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,160,40,30,"DF1 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,200,40,30,"DF2 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,240,40,30,"DF3 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  DF1 = obj = fl_add_text(FL_NORMAL_TEXT,70,160,140,30,"df1.adf");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  DF2 = obj = fl_add_text(FL_NORMAL_TEXT,70,200,140,30,"df2.adf");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  DF3 = obj = fl_add_text(FL_NORMAL_TEXT,70,240,140,30,"df3.adf");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  l_power = obj = fl_add_text(FL_NORMAL_TEXT,300,50,30,10,"");
    fl_set_object_boxtype(obj,FL_FRAME_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_MCOL);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  l_df0 = obj = fl_add_text(FL_NORMAL_TEXT,320,130,30,10,"");
    fl_set_object_boxtype(obj,FL_FRAME_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_GREEN);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  l_df1 = obj = fl_add_text(FL_NORMAL_TEXT,320,170,30,10,"");
    fl_set_object_boxtype(obj,FL_FRAME_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_GREEN);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  l_df2 = obj = fl_add_text(FL_NORMAL_TEXT,320,210,30,10,"");
    fl_set_object_boxtype(obj,FL_FRAME_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_GREEN);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  l_df3 = obj = fl_add_text(FL_NORMAL_TEXT,320,250,30,10,"");
    fl_set_object_boxtype(obj,FL_FRAME_BOX);
    fl_set_object_color(obj,FL_BLACK,FL_GREEN);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fl_end_form();

}
/*---------------------------------------*/

static void create_form_Debugger(void)
{
  FL_OBJECT *obj;

  if (Debugger)
     return;

  Debugger = fl_bgn_form(FL_NO_BOX,460,540);
  obj = fl_add_box(FL_UP_BOX,0,0,460,540,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,40,330,380,30,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,440,520,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,40,420,370,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,420,420,50,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,470,420,50,"");
  obj = fl_add_text(FL_NORMAL_TEXT,150,0,130,30,"UAE - Debugger");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,140,30,160,30,"Prozessor Registers");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,70,40,30,"A0 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,100,40,30,"A1 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,130,40,30,"A2 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,160,40,30,"A3 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,190,40,30,"A4 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,220,40,30,"A5 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,250,40,30,"A6 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,30,280,40,30,"A7 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,70,40,30,"D0 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,100,40,30,"D1 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,130,40,30,"D2 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,160,40,30,"D3 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,190,40,30,"D4 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,220,40,30,"D5 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,250,40,30,"D6 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,160,280,40,30,"D7 :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  a0 = obj = fl_add_text(FL_NORMAL_TEXT,70,70,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a1 = obj = fl_add_text(FL_NORMAL_TEXT,70,100,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a2 = obj = fl_add_text(FL_NORMAL_TEXT,70,130,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a3 = obj = fl_add_text(FL_NORMAL_TEXT,70,160,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a4 = obj = fl_add_text(FL_NORMAL_TEXT,70,190,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a5 = obj = fl_add_text(FL_NORMAL_TEXT,70,220,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a6 = obj = fl_add_text(FL_NORMAL_TEXT,70,250,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a7 = obj = fl_add_text(FL_NORMAL_TEXT,70,280,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d0 = obj = fl_add_text(FL_NORMAL_TEXT,200,70,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d1 = obj = fl_add_text(FL_NORMAL_TEXT,200,100,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d2 = obj = fl_add_text(FL_NORMAL_TEXT,200,130,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d3 = obj = fl_add_text(FL_NORMAL_TEXT,200,160,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d4 = obj = fl_add_text(FL_NORMAL_TEXT,200,190,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d5 = obj = fl_add_text(FL_NORMAL_TEXT,200,220,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d6 = obj = fl_add_text(FL_NORMAL_TEXT,200,250,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  d7 = obj = fl_add_text(FL_NORMAL_TEXT,200,280,70,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,70,40,30,"USP");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  usp = obj = fl_add_text(FL_NORMAL_TEXT,330,70,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,100,40,30,"ISP");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,130,40,30,"MSP");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,160,40,30,"VBR");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  isp = obj = fl_add_text(FL_NORMAL_TEXT,330,100,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  msp = obj = fl_add_text(FL_NORMAL_TEXT,330,130,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  vbr = obj = fl_add_text(FL_NORMAL_TEXT,330,160,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  pc = obj = fl_add_text(FL_NORMAL_TEXT,330,220,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,220,40,30,"PC");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_button(FL_NORMAL_BUTTON,30,480,70,30,"Custom");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_custom,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,110,480,70,30,"FPU");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_fpu,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,190,480,70,30,"Memory");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_mem,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,270,480,90,30,"Disassembler");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_disasm,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,370,480,60,30,"Exit");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_debug_exit,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,30,430,70,30,"Step");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_step,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,110,430,70,30,"Next");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_next,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,190,430,70,30,"Go");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_go,0);
  obj = fl_add_button(FL_NORMAL_BUTTON,270,430,70,30,"Forward");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_forward,0);
  adress = obj = fl_add_input(FL_NORMAL_INPUT,350,430,80,30,"");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_callback(obj,ctrl_address,0);
  imask = obj = fl_add_text(FL_NORMAL_TEXT,330,250,80,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,280,250,40,30,"IMask");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  Output = obj = fl_add_text(FL_NORMAL_TEXT,30,370,400,30,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,40,330,40,30,"Flags");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  f_s = obj = fl_add_checkbutton(FL_PUSH_BUTTON,90,330,40,30,"S");
  f_m = obj = fl_add_checkbutton(FL_PUSH_BUTTON,130,330,40,30,"M");
  f_x = obj = fl_add_checkbutton(FL_PUSH_BUTTON,170,330,40,30,"X");
  f_n = obj = fl_add_checkbutton(FL_PUSH_BUTTON,210,330,40,30,"N");
  f_z = obj = fl_add_checkbutton(FL_PUSH_BUTTON,250,330,40,30,"Z");
  f_v = obj = fl_add_checkbutton(FL_PUSH_BUTTON,290,330,40,30,"V");
  f_c = obj = fl_add_checkbutton(FL_PUSH_BUTTON,330,330,40,30,"C");
  f_t = obj = fl_add_checkbutton(FL_PUSH_BUTTON,370,330,40,30,"T");
  fl_end_form();

}
/*---------------------------------------*/

static void create_form_Custom(void)
{
  FL_OBJECT *obj;

  if (Custom)
     return;

  Custom = fl_bgn_form(FL_NO_BOX,340,290);
  obj = fl_add_box(FL_UP_BOX,0,0,340,290,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,320,270,"");
  obj = fl_add_text(FL_NORMAL_TEXT,100,0,130,20,"Custom Chips");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,50,50,20,"CRA");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,70,50,20,"CRB");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,90,50,20,"IMask");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,110,50,20,"TOD");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,130,50,20,"TA");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,150,50,20,"TB");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_frame(FL_ENGRAVED_FRAME,70,30,110,160,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,190,30,110,160,"");
  obj = fl_add_text(FL_NORMAL_TEXT,110,20,30,20,"A");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,230,20,30,20,"B");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  a_cra = obj = fl_add_text(FL_NORMAL_TEXT,80,50,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a_crb = obj = fl_add_text(FL_NORMAL_TEXT,80,70,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a_imask = obj = fl_add_text(FL_NORMAL_TEXT,80,90,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a_tod = obj = fl_add_text(FL_NORMAL_TEXT,80,110,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a_ta = obj = fl_add_text(FL_NORMAL_TEXT,80,130,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  a_tb = obj = fl_add_text(FL_NORMAL_TEXT,80,150,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_cra = obj = fl_add_text(FL_NORMAL_TEXT,200,50,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_crb = obj = fl_add_text(FL_NORMAL_TEXT,200,70,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_imask = obj = fl_add_text(FL_NORMAL_TEXT,200,90,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_tod = obj = fl_add_text(FL_NORMAL_TEXT,200,110,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_ta = obj = fl_add_text(FL_NORMAL_TEXT,200,130,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  b_tb = obj = fl_add_text(FL_NORMAL_TEXT,200,150,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  uae_dmacon = obj = fl_add_text(FL_NORMAL_TEXT,90,210,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,210,70,20,"DMACON");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,230,70,20,"INTENA");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,250,70,20,"INTREQ");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  uae_intena = obj = fl_add_text(FL_NORMAL_TEXT,90,230,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  uae_intreq = obj = fl_add_text(FL_NORMAL_TEXT,90,250,90,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,190,210,50,20,"VPOS");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  uae_vpos = obj = fl_add_text(FL_NORMAL_TEXT,250,210,50,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,190,230,50,20,"HPOS");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  uae_hpos = obj = fl_add_text(FL_NORMAL_TEXT,250,230,50,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,190,250,60,20,"Frames");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  uae_frames = obj = fl_add_text(FL_NORMAL_TEXT,250,250,50,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fl_end_form();

}
/*---------------------------------------*/

static void create_form_FPU(void)
{
  FL_OBJECT *obj;

  if (FPU)
     return;

  FPU = fl_bgn_form(FL_NO_BOX,300,160);
  obj = fl_add_box(FL_UP_BOX,0,0,300,160,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,280,140,"");
  obj = fl_add_text(FL_NORMAL_TEXT,130,0,40,20,"FPU");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,30,50,20,"FP0");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,50,50,20,"FP1");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,70,50,20,"FP2");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,150,30,50,20,"FP4");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,150,50,50,20,"FP5");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,150,70,50,20,"FP6");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,20,90,50,20,"FP3");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,150,90,50,20,"FP7");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  fpu0 = obj = fl_add_text(FL_NORMAL_TEXT,60,30,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu1 = obj = fl_add_text(FL_NORMAL_TEXT,60,50,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu2 = obj = fl_add_text(FL_NORMAL_TEXT,60,70,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu3 = obj = fl_add_text(FL_NORMAL_TEXT,60,90,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu4 = obj = fl_add_text(FL_NORMAL_TEXT,190,30,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu5 = obj = fl_add_text(FL_NORMAL_TEXT,190,50,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu6 = obj = fl_add_text(FL_NORMAL_TEXT,190,70,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu7 = obj = fl_add_text(FL_NORMAL_TEXT,190,90,80,20,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_color(obj,FL_MCOL,FL_MCOL);
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  fpu_n = obj = fl_add_checkbutton(FL_PUSH_BUTTON,30,120,40,30,"N");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  fpu_z = obj = fl_add_checkbutton(FL_PUSH_BUTTON,90,120,40,30,"Z");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  fpu_i = obj = fl_add_checkbutton(FL_PUSH_BUTTON,150,120,40,30,"I");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  fpu_nan = obj = fl_add_checkbutton(FL_PUSH_BUTTON,210,120,60,30,"NAN");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  fl_end_form();

}
/*---------------------------------------*/

static void create_form_Memory(void)
{
  FL_OBJECT *obj;

  if (Memory)
     return;

  Memory = fl_bgn_form(FL_NO_BOX,440,380);
  obj = fl_add_box(FL_UP_BOX,0,0,440,380,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,420,360,"");
  uaectrl_down = obj = fl_add_button(FL_TOUCH_BUTTON,20,330,30,30,"@2");
    fl_set_object_callback(obj,change_memory_start,0);
  memory_field = obj = fl_add_text(FL_NORMAL_TEXT,20,30,400,290,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  obj = fl_add_text(FL_NORMAL_TEXT,140,0,140,20,"Memory Browser");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  uaectrl_up = obj = fl_add_button(FL_TOUCH_BUTTON,390,330,30,30,"@8");
    fl_set_object_callback(obj,change_memory_start,0);
  memory_start = obj = fl_add_input(FL_NORMAL_INPUT,150,330,180,30,"");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lstyle(obj,FL_FIXED_STYLE);
    fl_set_object_callback(obj,change_memory_start,0);
  obj = fl_add_text(FL_NORMAL_TEXT,90,330,50,30,"Start :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  fl_end_form();

}
/*---------------------------------------*/

static void create_form_Disasm(void)
{
  FL_OBJECT *obj;

  if (Disasm)
     return;

  Disasm = fl_bgn_form(FL_NO_BOX,530,370);
  obj = fl_add_box(FL_UP_BOX,0,0,530,370,"");
  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,510,350,"");
  obj = fl_add_text(FL_NORMAL_TEXT,160,0,120,20,"Disassembler");
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  disasm_field = obj = fl_add_text(FL_NORMAL_TEXT,20,20,490,290,"");
    fl_set_object_boxtype(obj,FL_DOWN_BOX);
    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  disasm_start = obj = fl_add_input(FL_NORMAL_INPUT,170,320,190,30,"");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lstyle(obj,FL_FIXED_STYLE);
    fl_set_object_callback(obj,change_disasm_start,0);
  obj = fl_add_text(FL_NORMAL_TEXT,110,320,50,30,"Start :");
    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  disasm_down = obj = fl_add_button(FL_NORMAL_BUTTON,20,320,30,30,"@2");
    fl_set_object_callback(obj,change_disasm_start,0);
  disasm_up = obj = fl_add_button(FL_NORMAL_BUTTON,470,320,30,30,"@8");
    fl_set_object_callback(obj,change_disasm_start,0);
  fl_end_form();

}
/*---------------------------------------*/

static void create_the_forms(void)
{
  create_form_Control();
  create_form_Debugger();
  create_form_Custom();
  create_form_FPU();
  create_form_Memory();
  create_form_Disasm();
}

/* end of forms stuff */



int gui_init(void)
{
    int argc=1;
    char *argv[]={"uae",""};
    quit_program = 0;
    speed_up_counter=10;
    fl_initialize(&argc, argv, 0, 0, 0);
    exit_debug=0;
    create_the_forms();

    /* fill-in form initialization code */

    /* show the first form */
    fl_show_form(Control,FL_PLACE_CENTER,FL_FULLBORDER,"Control");
    fl_set_object_label(DF0,df0);
    fl_set_object_label(DF1,df1);
    fl_set_object_label(DF2,df2);
    fl_set_object_label(DF3,df3);
    return 1;
}

int gui_update(void)
{
    fl_set_object_label(DF0,df0);
    fl_set_object_label(DF1,df1);
    fl_set_object_label(DF2,df2);
    fl_set_object_label(DF3,df3);
    fl_redraw_object(DF0);
    fl_redraw_object(DF1);
    fl_redraw_object(DF2);
    fl_redraw_object(DF3);
    return 0;
}

void gui_exit(void)
{
}

void gui_led(int led, int on)
{
    if(on!=0){
	switch(led){
	 case 0 : fl_set_object_color(l_power,FL_RED,FL_BLACK); break;
	 case 1 : fl_set_object_color(l_df0,FL_GREEN,FL_BLACK); break;
	 case 2 : fl_set_object_color(l_df1,FL_GREEN,FL_BLACK); break;
	 case 3 : fl_set_object_color(l_df2,FL_GREEN,FL_BLACK); break;
	 case 4 : fl_set_object_color(l_df3,FL_GREEN,FL_BLACK); break;
	 default: break;
	}
    } else {
        switch(led){
	 case 0: fl_set_object_color(l_power,FL_BLACK,FL_BLACK); break;
	 case 1: fl_set_object_color(l_df0,FL_BLACK,FL_BLACK); break;
	 case 2: fl_set_object_color(l_df1,FL_BLACK,FL_BLACK); break;
	 case 3: fl_set_object_color(l_df2,FL_BLACK,FL_BLACK); break;
	 case 4: fl_set_object_color(l_df3,FL_BLACK,FL_BLACK); break;
	 default: break;
        }
    }
}

void gui_filename(int num, const char *name)
{
    switch (num) {
     case 0: strcpy((char *)df0, name); break;
     case 1: strcpy((char *)df1, name); break;
     case 2: strcpy((char *)df2, name); break;
     case 3: strcpy((char *)df3, name); break;
    }

}

void gui_handle_events(void)
{
    if (--speed_up_counter == 0) {
	fl_check_forms();
	speed_up_counter = 20;
    }
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.