/* WinMotherboard.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 "SCRAMmer.h" ULONG ReadRamsey(VOID); ULONG RamseyID(VOID); ULONG GaryID(VOID); /* Execute in Disable() */ ULONG AgnusID(VOID); ULONG DeniseID(VOID); 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 ExecBase *SysBase; 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 *mother_win=0; static struct RastPort *rport; VOID refresh_mother(VOID) { ULONG chipid; char buf[]="1234567890123456789012345678901234567890123"; ShadowText(X_SEP,Y_SEP+bfnt, rport,GetString(MSG_MOTH1)); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*2, rport,GetString(MSG_MOTH2)); NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt,rport,"VBlank"); NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*2,rport,"Power Supply"); NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*3,rport,"E-Clock"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*4, rport,GetString(MSG_MOTH3)); NormalText(X_SEP,Y_SEP+bfnt+yfnt*5, rport,GetString(MSG_MOTH4)); NormalText(X_SEP,Y_SEP+bfnt+yfnt*6, rport,GetString(MSG_MOTH5)); NormalText(X_SEP,Y_SEP+bfnt+yfnt*7, rport,GetString(MSG_MOTH6)); NormalText(X_SEP,Y_SEP+bfnt+yfnt*8, rport,GetString(MSG_MOTH7)); if(SysBase->AttnFlags & AFF_68040) NormalText(X_SEP,Y_SEP+bfnt+yfnt,rport,"68040"); else if(SysBase->AttnFlags & AFF_68030) NormalText(X_SEP,Y_SEP+bfnt+yfnt,rport,"68030"); else if(SysBase->AttnFlags & AFF_68020) NormalText(X_SEP,Y_SEP+bfnt+yfnt,rport,"68020"); else if(SysBase->AttnFlags & AFF_68010) NormalText(X_SEP,Y_SEP+bfnt+yfnt,rport,"68010"); else NormalText(X_SEP,Y_SEP+bfnt+yfnt,rport,"68000"); if((SysBase->AttnFlags & AFF_FPU40)&&(SysBase->AttnFlags & AFF_68040)) { if(SysBase->AttnFlags & AFF_68882) NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"Emu82"); else if(SysBase->AttnFlags & AFF_68881) NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"Emu81"); else NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"FPU40"); } else { if(SysBase->AttnFlags & AFF_68882) NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"68882"); else if(SysBase->AttnFlags & AFF_68881) NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"68881"); else NormalText(X_SEP,Y_SEP+bfnt+yfnt*3,rport,"NoFPU"); } sprintf(buf,"%2.2d Hz\0",SysBase->VBlankFrequency); NormalText(X_SEP+xfnt*20,Y_SEP+bfnt+yfnt,rport,buf); sprintf(buf,"%2.2d Hz\0",SysBase->PowerSupplyFrequency); NormalText(X_SEP+xfnt*20,Y_SEP+bfnt+yfnt*2,rport,buf); sprintf(buf,"%6.6d Hz\0",SysBase->ex_EClockFrequency); NormalText(X_SEP+xfnt*16,Y_SEP+bfnt+yfnt*3,rport,buf); switch(((ReadRamsey()&0x18)>>3)) { case 0: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt,rport,"1 Meg x 1 Bit"); break; case 1: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt,rport,GetString(MSG_MOTH_UNKNOWN)); break; case 2: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt,rport,"256 K x 4 Bit"); break; case 3: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt,rport,"1 Meg x 4 Bit"); break; } switch(((ReadRamsey()&0x60)>>5)) { case 0: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt*3,rport,"154 clocks"); break; case 1: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt*3,rport,"238 clocks"); break; case 2: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt*3,rport,"380 clocks"); break; case 3: NormalText(X_SEP+xfnt*27,Y_SEP+bfnt+yfnt*3,rport,GetString(MSG_MOTH_OFF)); break; } chipid=RamseyID(); switch(chipid) { case 0x0d: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*5, rport,GetString(MSG_MOTH_NORMAL)); break; case 0x0e: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*5, rport,GetString(MSG_MOTH_ENHANCED)); break; default: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*5, rport,GetString(MSG_MOTH_UNKNOWN)); break; } sprintf(buf,"$%02.2x\0",chipid); NormalText(X_SEP+xfnt*21,Y_SEP+bfnt+yfnt*5,rport,buf); Disable(); chipid=GaryID(); Enable(); switch(chipid) { case 0x00: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*6, rport,GetString(MSG_MOTH_NORMAL)); break; case 0x90: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*6, rport,GetString(MSG_MOTH_ENHANCED)); break; default: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*6, rport,GetString(MSG_MOTH_UNKNOWN)); break; } sprintf(buf,"$%02.2x\0",chipid); NormalText(X_SEP+xfnt*21,Y_SEP+bfnt+yfnt*6,rport,buf); chipid=AgnusID(); switch(chipid) { case 0x00: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,"PAL 8371"); break; case 0x10: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,"NTSC 8370"); break; case 0x20: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,"ECS PAL 8372"); break; case 0x23: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,"AA PAL ALICE"); break; case 0x30: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,"ECS NTSC 8372"); break; default: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*7, rport,GetString(MSG_MOTH_UNKNOWN)); break; } sprintf(buf,"$%02.2x\0",chipid); NormalText(X_SEP+xfnt*21,Y_SEP+bfnt+yfnt*7,rport,buf); chipid=DeniseID(); switch(chipid) { case 0xfc: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*8, rport,"ECS"); break; case 0xf8: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*8, rport,"AA LISA"); break; default: NormalText(X_SEP+xfnt*7,Y_SEP+bfnt+yfnt*8, rport,GetString(MSG_MOTH_NORMAL)); break; } sprintf(buf,"$%02.2x\0",chipid); NormalText(X_SEP+xfnt*21,Y_SEP+bfnt+yfnt*8,rport,buf); } VOID open_mother(VOID) { UWORD w,h; w=(X_SEP*2) + 41*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); h=(Y_SEP*2) + 9*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if(mother_win=OpenWindowTags(NULL, WA_Left, (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_MOTH_WIN), WA_PubScreen, def_pub_scr,TAG_END)) { rport=mother_win->RPort; SetFont(rport,tf); mother_win->UserPort=userport; ModifyIDCMP(mother_win,IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW); refresh_mother(); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOWINDOW),GetString(MSG_CANCEL)); } VOID close_mother(VOID) { if(mother_win) { CloseWindowSafely(mother_win); mother_win=0; } }