From a28bf2e5c63e025d92f31128fb2d687177555967 Mon Sep 17 00:00:00 2001 From: twilen Date: Mon, 15 Aug 2011 17:15:03 +0000 Subject: [PATCH] Calculate AttnFlags bits early. FPU type reporting works again. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@40738 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/m68k-amiga/boot/start.c | 59 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/arch/m68k-amiga/boot/start.c b/arch/m68k-amiga/boot/start.c index 0e109acc74..5e7c43e8b4 100644 --- a/arch/m68k-amiga/boot/start.c +++ b/arch/m68k-amiga/boot/start.c @@ -384,7 +384,7 @@ void exec_boot(ULONG *membanks, ULONG *cpupcr) struct MemHeader *mh; LONG oldLastAlert[4]; ULONG oldmem; - ULONG cpuinfo, pcrinfo; + UWORD attnflags; APTR ColdCapture = NULL, CoolCapture = NULL, WarmCapture = NULL; APTR KickMemPtr = NULL, KickTagPtr = NULL, KickCheckSum = NULL; /* We can't use the global 'SysBase' symbol, since @@ -411,43 +411,55 @@ void exec_boot(ULONG *membanks, ULONG *cpupcr) RomInfo(0xe00000); RomInfo(0xf00000); - cpuinfo = cpupcr[0]; - pcrinfo = cpupcr[1]; + /* Convert CPU/FPU flags to AttnFlags */ + attnflags = cpupcr[0] & 0xffff; + if (attnflags & (AFF_68030 | AFF_68040 | AFF_68060)) + attnflags |= AFF_ADDR32; + if (cpupcr[0] & 0xffff0000) { + attnflags |= AFF_FPU; + if (attnflags & (AFF_68040 | AFF_68060)) + attnflags |= AFF_FPU40; + // AFF_68881 | AFF_68882 set only if 040/060 math emulation running + else if (((cpupcr[0] >> 16) & 0xff) <= 0x1f) + attnflags |= AFF_68881; + else + attnflags |= AFF_68881 | AFF_68882; + } #ifdef AROS_SERIAL_DEBUG DEBUGPUTS(("CPU: ")); - if (cpuinfo & AFF_68060) + if (attnflags & AFF_68060) DEBUGPUTS(("68060")); - else if (cpuinfo & AFF_68040) + else if (attnflags & AFF_68040) DEBUGPUTS(("68040")); - else if (cpuinfo & AFF_68030) + else if (attnflags & AFF_68030) DEBUGPUTS(("68030")); - else if (cpuinfo & AFF_68020) { - if (cpuinfo & AFF_ADDR32) + else if (attnflags & AFF_68020) { + if (attnflags & AFF_ADDR32) DEBUGPUTS(("68020")); else DEBUGPUTS(("68EC020")); - } else if (cpuinfo & AFF_68010) + } else if (attnflags & AFF_68010) DEBUGPUTS(("68010")); else DEBUGPUTS(("68000")); DEBUGPUTS((" FPU: ")); - if (cpuinfo & AFF_FPU40) { - if (cpuinfo & AFF_68060) + if (attnflags & AFF_FPU40) { + if (attnflags & AFF_68060) DEBUGPUTS(("68060")); - else if (cpuinfo & AFF_68040) + else if (attnflags & AFF_68040) DEBUGPUTS(("68040")); else DEBUGPUTS(("-")); - } else if (cpuinfo & AFF_68882) + } else if (attnflags & AFF_68882) DEBUGPUTS(("68882")); - else if (cpuinfo & AFF_68881) + else if (attnflags & AFF_68881) DEBUGPUTS(("68881")); else DEBUGPUTS(("-")); DEBUGPUTS(("\n")); - if (pcrinfo) - DEBUGPUTHEX(("PCR", pcrinfo)); + if (cpupcr[1]) + DEBUGPUTHEX(("PCR", cpupcr[1])); #endif @@ -567,20 +579,7 @@ void exec_boot(ULONG *membanks, ULONG *cpupcr) for (i = 0; i < 4; i++) SysBase->LastAlert[i] = oldLastAlert[i]; - /* Convert CPU/FPU flags to AttnFlags */ - SysBase->AttnFlags = cpuinfo & 0xffff; - if (SysBase->AttnFlags & (AFF_68030 | AFF_68040 | AFF_68060)) - SysBase->AttnFlags |= AFF_ADDR32; - if (cpuinfo & 0xffff0000) { - SysBase->AttnFlags |= AFF_FPU; - if (SysBase->AttnFlags & (AFF_68040 | AFF_68060)) - SysBase->AttnFlags |= AFF_FPU40; - // AFF_68881 | AFF_68882 set only if 040/060 math emulation running - else if (((cpuinfo >> 16) & 0xff) <= 0x1f) - SysBase->AttnFlags |= AFF_68881; - else - SysBase->AttnFlags |= AFF_68881 | AFF_68882; - } + SysBase->AttnFlags = attnflags; /* Inject code for GetCC, depending on CPU model */ if (SysBase->AttnFlags & AFF_68010) { -- 2.11.4.GIT