/* WinCPU.c ** ** SCRAMmer V37.3 - 27th Aug 1992 ** ------------------------------ ** ** Copyright (c) Giuliano C. Peritore ** Via Amaseno, 6 ** 04100 Latina ** ITALY ** ** Phone: (+39) 773 491692 Voice Only ** EMAIL mc6040@mclink.it */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "SCRAMmer.h" ULONG ReadVBR(VOID); ULONG SetVBR(VOID); VOID PassVBR(ULONG); VOID ShadowText(UWORD ,UWORD, struct RastPort *,char *msg); VOID NormalText(UWORD ,UWORD, struct RastPort *,char *msg); LONG request_user(struct Window *,char *, char *, char *); VOID CloseWindowSafely(struct Window *); IMPORT struct Library *GadToolsBase; IMPORT struct IntuitionBase *IntuitionBase; IMPORT struct GfxBase *GfxBase; IMPORT struct Window *main_window; IMPORT struct Screen *def_pub_scr; IMPORT struct MsgPort *userport; IMPORT struct TextFont *tf; IMPORT struct TextAttr ta; IMPORT UWORD xfnt,yfnt,bfnt; IMPORT APTR vi; struct Window *cpu_win=0; static struct RastPort *rport; static struct Gadget *cpuglist=0, *gaddc,*gaddb,*gaddf,*gadic,*gadib,*gadif, *gadwa,*gadcb,*gadvf; /*------------------------------------------------------------------*/ VOID VBRToChip(VOID) { ULONG temp; temp=Supervisor(ReadVBR); if(!(TypeOfMem((VOID *)temp)&MEMF_CHIP)) { Disable(); CopyMem((APTR)temp,(APTR)CHIPVECT,VECTSIZE); PassVBR(CHIPVECT); Supervisor(SetVBR); Enable(); FreeMem((APTR)temp,VECTSIZE); } } /*------------------------------------------------------------------*/ VOID VBRToFast(VOID) { ULONG temp,new; temp=Supervisor(ReadVBR); if(!(TypeOfMem((VOID *)temp)&MEMF_FAST)) { if(new=(ULONG)AllocMem(VECTSIZE,MEMF_CLEAR|MEMF_PUBLIC|MEMF_FAST)) { Disable(); CopyMem((APTR)temp,(APTR)new,VECTSIZE); PassVBR(new); Supervisor(SetVBR); Enable(); } } } /*------------------------------------------------------------------*/ VOID refresh_cpu(VOID) { GT_SetGadgetAttrs(gaddc,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_EnableD)==CACRF_EnableD,TAG_END); GT_SetGadgetAttrs(gaddb,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_DBE )==CACRF_DBE ,TAG_END); GT_SetGadgetAttrs(gaddf,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_FreezeD)==CACRF_FreezeD,TAG_END); GT_SetGadgetAttrs(gadic,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_EnableI)==CACRF_EnableI,TAG_END); GT_SetGadgetAttrs(gadib,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_IBE )==CACRF_IBE ,TAG_END); GT_SetGadgetAttrs(gadif,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_FreezeI)==CACRF_FreezeI,TAG_END); GT_SetGadgetAttrs(gadwa,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_WriteAllocate)==CACRF_WriteAllocate,TAG_END); GT_SetGadgetAttrs(gadcb,cpu_win,0,GTCB_Checked,(CacheControl(0L,0L)&CACRF_CopyBack)==CACRF_CopyBack,TAG_END); if(TypeOfMem((APTR)Supervisor(ReadVBR))&MEMF_FAST) GT_SetGadgetAttrs(gadvf,cpu_win,0,GTCB_Checked,1,TAG_END); else GT_SetGadgetAttrs(gadvf,cpu_win,0,GTCB_Checked,0,TAG_END); RefreshGList(cpuglist,cpu_win,NULL,-1); } VOID process_cpu(struct Gadget *g) { switch(g->GadgetID) { case 1: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_EnableD,CACRF_EnableD); else CacheControl( 0,CACRF_EnableD); break; case 2: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_DBE ,CACRF_DBE ); else CacheControl( 0,CACRF_DBE ); break; case 3: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_FreezeD,CACRF_FreezeD); else CacheControl( 0,CACRF_FreezeD); break; case 4: CacheControl(CACRF_ClearD ,CACRF_ClearD ); CacheControl( 0,CACRF_ClearD ); break; case 5: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_EnableI,CACRF_EnableI); else CacheControl( 0,CACRF_EnableI); break; case 6: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_IBE ,CACRF_IBE ); else CacheControl( 0,CACRF_IBE ); break; case 7: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_FreezeI,CACRF_FreezeI); else CacheControl( 0,CACRF_FreezeI); break; case 8: CacheControl(CACRF_ClearI ,CACRF_ClearI ); CacheControl( 0,CACRF_ClearI ); break; case 9: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_WriteAllocate,CACRF_WriteAllocate); else CacheControl( 0,CACRF_WriteAllocate); break; case 10: if(g->Flags&GFLG_SELECTED) CacheControl(CACRF_CopyBack,CACRF_CopyBack); else CacheControl( 0,CACRF_CopyBack); refresh_cpu(); break; case 11: if(g->Flags&GFLG_SELECTED) VBRToFast(); else VBRToChip(); break; } } VOID open_cpu(VOID) { struct NewGadget ng; struct Gadget *gad; UWORD w,h; gad=CreateContext(&cpuglist); ng.ng_TextAttr= &ta; ng.ng_VisualInfo= vi; ng.ng_Flags= PLACETEXT_RIGHT; ng.ng_Width= xfnt*18; ng.ng_Height= yfnt; ng.ng_LeftEdge= X_SEP; ng.ng_TopEdge=Y_SEP; ng.ng_GadgetText="Data Cache"; ng.ng_GadgetID=1; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gaddc=gad; ng.ng_TopEdge=Y_SEP+yfnt*1; ng.ng_GadgetText="Data Burst"; ng.ng_GadgetID=2; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gaddb=gad; ng.ng_TopEdge=Y_SEP+yfnt*2; ng.ng_GadgetText="Data Freeze"; ng.ng_GadgetID=3; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gaddf=gad; ng.ng_Flags= PLACETEXT_IN; ng.ng_TopEdge=Y_SEP+yfnt*3; ng.ng_GadgetText="Clear Data Cache";ng.ng_GadgetID=4; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= X_SEP*2+xfnt*18; ng.ng_Flags= PLACETEXT_RIGHT; ng.ng_TopEdge=Y_SEP; ng.ng_GadgetText="Inst Cache"; ng.ng_GadgetID=5; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadic=gad; ng.ng_TopEdge=Y_SEP+yfnt*1; ng.ng_GadgetText="Inst Burst"; ng.ng_GadgetID=6; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadib=gad; ng.ng_TopEdge=Y_SEP+yfnt*2; ng.ng_GadgetText="Inst Freeze"; ng.ng_GadgetID=7; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadif=gad; ng.ng_Flags= PLACETEXT_IN; ng.ng_TopEdge=Y_SEP+yfnt*3; ng.ng_GadgetText="Clear Inst Cache";ng.ng_GadgetID=8; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= X_SEP; ng.ng_Flags= PLACETEXT_RIGHT; ng.ng_TopEdge=Y_SEP+yfnt*4; ng.ng_GadgetText="Write Allocate"; ng.ng_GadgetID=9; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadwa=gad; ng.ng_TopEdge=Y_SEP+yfnt*5; ng.ng_GadgetText="Copyback"; ng.ng_GadgetID=10; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadcb=gad; ng.ng_LeftEdge= X_SEP*2+xfnt*18; ng.ng_TopEdge=Y_SEP+yfnt*4; ng.ng_GadgetText="VBR Fast"; ng.ng_GadgetID=11; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadvf=gad; if(gad) { w=(X_SEP*3) + 36*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); h=(Y_SEP*2) + 6*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if(cpu_win=OpenWindowTags(NULL, WA_Left, 3*((def_pub_scr->Width-w)>>2), WA_Top, 3*((def_pub_scr->Height-h)>>2), WA_Width, w, WA_Height, h, WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_GIMMEZEROZERO|WFLG_SIMPLE_REFRESH, WA_AutoAdjust, FALSE, WA_IDCMP, NULL, WA_Title, GetString(MSG_CPUWIN), WA_PubScreen, def_pub_scr,TAG_END)) { SetFont(cpu_win->RPort,tf); cpu_win->UserPort=userport; AddGList(cpu_win,cpuglist,-1,-1,NULL); RefreshGList(cpuglist,cpu_win,NULL,-1); GT_RefreshWindow(cpu_win,NULL); ModifyIDCMP(cpu_win,CHECKBOXIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW); refresh_cpu(); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOWINDOW),GetString(MSG_CANCEL)); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOGADGETS),GetString(MSG_CANCEL)); } VOID close_cpu(VOID) { if(cpu_win) { CloseWindowSafely(cpu_win); cpu_win=0; } FreeGadgets(cpuglist); cpuglist=0; }