APTR AHIAllocVec( ULONG byteSize, ULONG requirements ) { #ifndef VERSION68K if( PPCLibBase != NULL ) { return PPCAllocVec( byteSize, requirements ); } else if( PowerPCBase != NULL ) { ULONG new_requirements; new_requirements = requirements & ~MEMF_PPCMASK; if( requirements & MEMF_WRITETHROUGHPPC ) new_requirements |= MEMF_WRITETHROUGH; if( requirements & MEMF_NOCACHEPPC ) new_requirements |= MEMF_CACHEOFF; if( requirements & MEMF_NOCACHESYNCPPC ) new_requirements |= ( MEMF_CACHEOFF | MEMF_GUARDED ); if( requirements & MEMF_NOCACHESYNCM68K ) new_requirements |= MEMF_CHIP; // Sucks! return AllocVec32( byteSize, new_requirements ); } else #endif { return AllocVec( byteSize, requirements & ~MEMF_PPCMASK ); } }
char *platform_get_amigaos3_runtime_os(void) { #ifdef IS_POWERUP struct Caos *MyCaos = NULL; #endif #ifdef IS_WARPOS struct PPCArgs *pa = NULL; #endif #if defined(IS_POWERUP) || defined(IS_WARPOS) ULONG wb_version = 0; ULONG ks_version = 0; ULONG ks_softver = 0; #endif #ifdef IS_POWERUP if (!wbretval) { if (MyCaos = (struct Caos*)PPCAllocVec(sizeof(struct Caos), MEMF_PUBLIC|MEMF_CLEAR)) { MyCaos->caos_Un.Function = (APTR)&M68kGetWB; MyCaos->M68kCacheMode = IF_CACHEFLUSHNO; MyCaos->PPCCacheMode = IF_CACHEFLUSHNO; PPCCallM68k(MyCaos); wb_version = (ULONG)MyCaos->d0; PPCFreeVec(MyCaos); MyCaos = NULL; } wbretval = number2workbench(wb_version >> 16, wb_version & 0xffff); } if (!ksretval) { if (MyCaos = (struct Caos*)PPCAllocVec(sizeof(struct Caos), MEMF_PUBLIC|MEMF_CLEAR)) { MyCaos->caos_Un.Function = (APTR)&M68kGetKS; MyCaos->M68kCacheMode = IF_CACHEFLUSHNO; MyCaos->PPCCacheMode = IF_CACHEFLUSHNO; PPCCallM68k(MyCaos); ks_version = (ULONG)MyCaos->d0; ks_softver = (ULONG)MyCaos->d1; PPCFreeVec(MyCaos); } ksretval = number2kickstart(ks_version >> 16, ks_version & 0xffff, ks_softver); } #else #ifdef IS_WARPOS if (!wbretval) { if (pa = (struct PPCArgs*)AllocVecPPC(sizeof(struct PPCArgs), MEMF_PUBLIC|MEMF_CLEAR, 0)) { pa->PP_Code = (APTR)&M68kGetWB; Run68K(pa); WaitFor68K(pa); wb_version = (ULONG)pa->PP_Regs[PPREG_D0]; FreeVecPPC(pa); pa = NULL; } wbretval = number2workbench(wb_version >> 16, wb_version & 0xffff); } if (!ksretval) { if (pa = (struct PPCArgs*)AllocVecPPC(sizeof(struct PPCArgs), MEMF_PUBLIC|MEMF_CLEAR, 0)) { pa->PP_Code = (APTR)&M68kGetKS; Run68K(pa); WaitFor68K(pa); ks_version = (ULONG)pa->PP_Regs[PPREG_D0]; ks_softver = (ULONG)pa->PP_Regs[PPREG_D1]; FreeVecPPC(pa); } ksretval = number2kickstart(ks_version >> 16, ks_version & 0xffff, ks_softver); } #else if (!wbretval) { /* arosc.library only opens if the aros kernel is used */ if (WorkbenchBase = OpenLibrary("arosc.library", 0)) { wbretval = "AROS"; } else { if (VersionBase = OpenLibrary("version.library", 0)) { wbretval = number2workbench(VersionBase->lib_Version, VersionBase->lib_Revision); if (!wbretval) { printf("WB major: %d, minor: %d\n", VersionBase->lib_Version, VersionBase->lib_Revision); } } else { wbretval = "1.0"; } } if (VersionBase) { CloseLibrary(VersionBase); } } if (!ksretval) { ksretval = number2kickstart(SysBase->LibNode.lib_Version, SysBase->LibNode.lib_Revision, SysBase->SoftVer); } #endif #endif if (wbretval && wbretval[0] == 'A') { sprintf(osretval, "AROS"); } else if (ksretval && ksretval[0] == 'A') { sprintf(osretval, "WorkBench %s (AROS KickStart ROM)", wbretval ? wbretval : "Unknown"); } else if (ksretval && ksretval[0] == 'O') { sprintf(osretval, "WorkBench %s (BlackBox/Petunia)", wbretval ? wbretval : "Unknown"); } else { sprintf(osretval, "WorkBench %s (KickStart %s)", wbretval ? wbretval : "Unknown", ksretval ? ksretval : "Unknown"); } return osretval; }
char *platform_get_amigaos3_runtime_cpu(void) { #ifdef IS_POWERUP struct Caos *MyCaos = NULL; #endif #ifdef IS_WARPOS struct PPCArgs *pa = NULL; struct TagItem ti_cputype[] = {{GETINFO_CPU, 0}, {TAG_END, 0}}; int cpu_type = 0; #endif UWORD attn = 0; char *ppc = NULL; char *m68k = NULL; if (!got_cpu) { #ifdef IS_POWERUP if (MyCaos = (struct Caos*)PPCAllocVec(sizeof(struct Caos), MEMF_PUBLIC|MEMF_CLEAR)) { MyCaos->caos_Un.Function = (APTR)&M68kGetAttn; MyCaos->M68kCacheMode = IF_CACHEFLUSHNO; MyCaos->PPCCacheMode = IF_CACHEFLUSHNO; PPCCallM68k(MyCaos); attn = (UWORD)MyCaos->d0; PPCFreeVec(MyCaos); } switch (PPCGetAttr(PPCINFOTAG_CPU)) { case CPU_603: ppc = "PPC603"; break; case CPU_604: ppc = "PPC604"; break; case CPU_602: ppc = "PPC602"; break; case CPU_603e: ppc = "PPC603e"; break; case CPU_603p: ppc = "PPC603p"; break; case CPU_604e: ppc = "PPC604e"; break; default: ppc = "PPC"; } #else #ifdef IS_WARPOS if (pa = (struct PPCArgs*)AllocVecPPC(sizeof(struct PPCArgs), MEMF_PUBLIC|MEMF_CLEAR, 0)) { pa->PP_Code = (APTR)&M68kGetAttn; Run68K(pa); WaitFor68K(pa); attn = (UWORD)pa->PP_Regs[PPREG_D0]; FreeVecPPC(pa); } GetInfo(ti_cputype); cpu_type = ti_cputype[0].ti_Data; switch (cpu_type) { case CPUF_620: ppc = "PPC620"; break; case CPUF_604E: ppc = "PPC604e"; break; case CPUF_604: ppc = "PPC604"; break; case CPUF_603E: ppc = "PPC603e"; break; case CPUF_603: ppc = "PPC603"; break; default: ppc = "PPC"; } #else attn = SysBase->AttnFlags; if (attn & AFF_4XX) { ppc = "PPC4xx"; } else if (attn & AFF_7400) { ppc = "PPC7400"; } else if (attn & AFF_750) { ppc = "PPC750"; } else if (attn & AFF_604) { ppc = "PPC604"; } else if (attn & AFF_603) { ppc = "PPC603"; } #endif #endif if (attn & AFF_68060) { m68k = "68060"; } else if (attn & AFF_68040) { m68k = "68040"; } else if (attn & AFF_68030) { m68k = "68030"; } else if (attn & AFF_68020) { m68k = "68020"; } else if (attn & AFF_68010) { m68k = "68010"; } else { m68k = "68000"; } if (ppc) { #if defined(IS_POWERUP) || defined(IS_WARPOS) sprintf(cpu_retval, "%s (m68k code on %s)", ppc, m68k); #else sprintf(cpu_retval, "%s (emulated on %s)", m68k, ppc); #endif } else { sprintf(cpu_retval, "%s", m68k); } got_cpu = 1; } return cpu_retval; }
void __nocommandline(void) { struct WBStartup *wbs=_WBenchMsg; if (wbs!=NULL) { if(__stdiowin[0]) { BPTR win; if((window=win=PPCOpen(__stdiowin,MODE_OLDFILE))==0l) exit(RETURN_FAIL); input = SelectInput(win); output = SelectOutput(win); } if(wbs->sm_ArgList!=NULL) /* cd to icon */ cd=CurrentDir(DupLock(wbs->sm_ArgList->wa_Lock)); __argc=0; __argv=(char **)wbs; } else { char **av,*a,*cl=__commandline; size_t i=__commandlen; int ac; if(!(cline=(char *)PPCAllocVec(i+1,MEMF_ANY))) /* get buffer */ exit(RETURN_FAIL); for(a=cline,ac=1;;) /* and parse commandline */ { while(i&&(*cl==' '||*cl=='\t'||*cl=='\n')) { cl++; i--; } if(!i) break; if(*cl=='\"') { cl++; i--; while(i) { if(*cl=='\"') { cl++; i--; break; } if(*cl=='*') { cl++; i--; if(!i) break; } *a++=*cl++; i--; } } else while(i&&(*cl!=' '&&*cl!='\t'&&*cl!='\n')) { *a++=*cl++; i--; } *a++='\0'; ac++; } /* NULL Terminated */ if(!(__argv=av=(char **)PPCAllocVec(((__argc=ac-1)+1)*sizeof(char *),MEMF_ANY|MEMF_CLEAR))) exit(RETURN_FAIL); for(a=cline,i=1;i<ac;i++) { av[i-1]=a; while(*a++) ; } } }