; Copyright 2000 Pace Micro Technology plc ; ; Licensed under the Apache License, Version 2.0 (the "License"); ; you may not use this file except in compliance with the License. ; You may obtain a copy of the License at ; ; http://www.apache.org/licenses/LICENSE-2.0 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; now the conditional flags for the version we want ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GBLL CacheOff CacheOff SETL {FALSE} ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; essential global variables ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GET Version GBLS VersionNo [ Module_MinorVersion = "" :LOR: :LNOT: STB VersionNo SETS "$VString ($Date)" | VersionNo SETS "$VString ($Date) $Module_MinorVersion" ] ; SystemName moved to Machine.* header files. GBLS MosTitle MosTitle SETS "$SystemName $VersionNo" GBLL AddTubeBashers AddTubeBashers SETL {FALSE} Tube_Normal * 1 Tube_Simulator * 2 GBLA TubeType TubeType SETA Tube_Simulator UserMemStart * &8000 AssemblingArthur SETL {TRUE} ; defined in hdr.system to allow conditionals in macros GBLL ShowWS ShowWS SETL {TRUE} ; Make KernelWS be verbose GBLL DoingVdu DoingVdu SETL {FALSE} ; so can get KeyWS! GBLL Module Module SETL {FALSE} GBLL IncludeTestSrc ; whether test code is included IncludeTestSrc SETL :LNOT: HAL ;RISC OS 3.71 onwards assumed bus timings - if true, then ROM speeds atc are assumed according to IOMD ID regs. as follows: ; if IOMD (Risc PC) ROM ticks 5-3 (assumed bus 32 MHz) ; if 7500 (A7000) ROM ticks 5-3 (assumed bus 32 MHz), all clocks divide-by-1 ; if 7500FE (A7000+) ROM ticks 5-3,half speed (asssumed bus 64 MHz), EDO memory, divide-by-2 I/O, divide-by-1 CPU and memory ; GBLL RO371Timings RO371Timings SETL :LNOT: STB GBLL VCOstartfix ;code in early kernel to fix VCO start problem on A7000 (esp. 7500FE) VCOstartfix SETL {TRUE} ; For development on Customer M hardware only GBLL ParallelFlashUpgrade ParallelFlashUpgrade SETL {FALSE} ;whether we support running on the (Risc PC) emulator GBLL EmulatorSupport EmulatorSupport SETL {FALSE} ; Disabled; QEMU doesn't like it [ :LNOT: RO371Timings GBLL NormalSpeedROMS [ STB NormalSpeedROMS SETL {TRUE} ;use FALSE for slow EPROMS | NormalSpeedROMS SETL {FALSE} ;use FALSE for slow EPROMS ] GBLL AutoSpeedROMS AutoSpeedROMS SETL {TRUE} :LAND: :LNOT: STB GBLL RISCPCBurstMode RISCPCBurstMode SETL {FALSE} ;>>>RCM says if the FRM approves the use of burst mode ROMS for ;>>>RISC PC (no reason why it shouldn't) all references to RISCPCBurstMode ;>>>could be replaced by NormalSpeedROMS ] ; :LNOT:RO371Timings GBLL DoInitialiseMode DoInitialiseMode SETL {TRUE} :LAND: Embedded_UI [ STB GBLL Select16BitSound ; STBs and pre-IOMD systems don't have this link Select16BitSound SETL {FALSE} | GBLL Select16BitSound Select16BitSound SETL {TRUE} ] GBLL Japanese16BitSound Japanese16BitSound SETL {TRUE} :LAND: STB GBLL ChecksumCMOS ChecksumCMOS SETL {TRUE} GBLL SqueezeMods ; whether squeezed modules are allowed SqueezeMods SETL {TRUE} GBLL International ; whether text and error messages come from messages file. International SETL {TRUE} GBLL CacheCommonErrors ; whether common internationalised errors are cached in sysheap CacheCommonErrors SETL International :LAND: {TRUE} GBLL MouseBufferManager ; Whether mouse uses buffer manager MouseBufferManager SETL {TRUE} GBLL IrqsInClaimRelease ; Whether OS_Claim/Release restore IRQ's before releasing heap node IrqsInClaimRelease SETL {TRUE} GBLL TickIrqReenter ; Whether TickEventChain processing re-enables IRQ's TickIrqReenter SETL {TRUE} GBLL SoftResets ; If false, always force a hard reset SoftResets SETL {FALSE} GBLL AlwaysClearRAM ; If true, clear RAM on every break/reset AlwaysClearRAM SETL {TRUE} GBLL CacheCMOSRAM ; Whether to keep a RAM copy of CMOS RAM for faster access CacheCMOSRAM SETL {TRUE} GBLL CheckProtectionLink ; if true, disallow CMOS RAM changes if link in protected position CheckProtectionLink SETL {TRUE} ; NB affects Delete/Copy/R/T and 0-9/. GBLL ValidateCMOS ; Apply special CMOS-corruption detection code, ValidateCMOS SETL {TRUE} ; and do minimal default settings. GBLL LCDInvert LCDInvert SETL {TRUE} :LAND: :LNOT: STB GBLL LCDSupport ; Whether LCD Support is assembled in or not LCDSupport SETL {TRUE} :LAND: :LNOT: STB GBLL ModeSelectors ; whether mode selectors are understood ModeSelectors SETL {TRUE} GBLL MakeModeSelectorsForModeNumbers MakeModeSelectorsForModeNumbers SETL ModeSelectors :LAND: {FALSE} ; not actually needed after all GBLL IgnoreVRAM ; if true, don't add VRAM to the RAM list (+ don't use for screen) IgnoreVRAM SETL {FALSE} GBLL UseGraphicsV ; if true, use GraphicsV, rather than going straight UseGraphicsV SETL {TRUE} ; to the hardware (or HAL) GBLL LateAborts ; if true, use late abort mode on ARM600 (compulsory on ARM700) LateAborts SETL {TRUE} GBLL ShrinkableDAs ; if true, support Shrinkable Dynamic Areas (eg. CacheFS) ShrinkableDAs SETL {TRUE} GBLL DA_Batman ; Holey dynamic areas Batman! DA_Batman SETL {TRUE} ; concept of sparsely mapped dynamic areas introduced for Ursula GBLL ShadowROM ; if true, the ROM is mirrored above ShadowROM SETL {FALSE} ; &FF800000 GBLL Interruptible32bitModes ; if true, limited 32-bit mode code support (interrupt handler does not assume Interruptible32bitModes SETL {TRUE} ; 26-bit foreground), also allows faster, 32-bit APCS version of FPEmulator GBLL GSWorkspaceInKernelBuffers ; Move gstrans workspace into the kernel buffers area to fix redirection GSWorkspaceInKernelBuffers SETL {TRUE} ; and everything else that suffers from the dodgy use of scratch space. GBLL EarlierReentrancyInDAShrink EarlierReentrancyInDAShrink SETL {TRUE} ; fix for RAMFS and new FileCore (causes reentrant DA shrink/remove) GBLL OnlyKernelCanAccessHardwareVectors OnlyKernelCanAccessHardwareVectors SETL {TRUE} ; if true, only the Kernel is permitted to write to the hardware vectors ; while in 26-bit mode. If false, the whole ROM can (including BASIC ; and the Shared C Library - eg any memcpy!) GBLL LongCommandLines ; first introduced for Ursula, merged into HAL kernel LongCommandLines SETL {TRUE} [ LongCommandLines LongCLISize * 1024 ; buffer size for long commands ] GBLL StrongARM GBLL SAcleanflushbroken ; whether StrongARM single MCR for DC clean+flush broken (is always for SA110) GBLL SASTMhatbroken ; whether ROM must support SA110's with broken STM^ (revision 3 should fix this) GBLL StrongARM_POST ; whether to run POST for StrongARM (and possibly ARM8) GBLL ARM6support GBLL XScaleMiniCache ; is the XScale mini data-cache used (at all) GBLL XScaleJTAGDebug GBLL ECC ; use ECC on XScale. May compromise other ARM compatibility StrongARM SETL {TRUE} SAcleanflushbroken SETL {TRUE} :LAND: StrongARM SASTMhatbroken SETL {TRUE} :LAND: StrongARM StrongARM_POST SETL {TRUE} :LAND: StrongARM ARM6support SETL (MEMM_Type = "ARM600") ; Needs updating for VMSAv6 compatability XScaleMiniCache SETL {FALSE} XScaleJTAGDebug SETL {TRUE} ECC SETL {FALSE} ;mjs ;Chocolate flavours implemented for Ursula, but they are generally useful performance enhancements ;(not all Ursula performance improvements are flagged with Chocolate - eg. simple changes such as slicker SWI ;despatch and wider SWI hashing) ; ;any ARM ; GBLL ChocolateSysHeap ;whether to save cost of SysHeap block claim/release for common cases (eg. callback blocks) ;also reduces SysHeap stress by using fewer blocks in total GBLL ChocolateOSMod ;whether to reduce SysHeap stress in module handling GBLL ChocolateSysVars ;whether to do performance improvements in system variable handling GBLL ChocolateOscli ;whether to do performance improvements in Oscli command stuff GBLL ChocolateService ;whether to implement fast module service call distribution (uses table introduced ;into module format by Ursula API) GBLL ChocolateAMB ;whether to compile support for Lazy task swapping ;possibly enabled at run time for some ARMs only ChocolateSysHeap SETL {TRUE} ChocolateOSMod SETL {TRUE} ChocolateSysVars SETL {TRUE} ChocolateOscli SETL {TRUE} ChocolateService SETL {TRUE} ChocolateAMB SETL {TRUE} :LAND: No26bitCode ; not implemented for 26bit kernel at present [ ChocolateSysHeap GBLA MaxChocolateCBBlocks ;max quick CallBack blocks available at any one time (else ordinary heap nodes used) GBLA MaxChocolateSVBlocks ;max quick Software Vector blocks available at any one time (else ordinary heap nodes used) GBLA MaxChocolateTKBlocks ;max quick Ticker blocks available at any one time (else ordinary heap nodes used) GBLA MaxChocolateMRBlocks ;max module ROM blocks before ordinary heap nodes are used (reduces total no. nodes in SysHeap) GBLA MaxChocolateMABlocks ;max module Active blocks before ordinary heap nodes are used GBLA MaxChocolateMSBlocks ;max module SWI Hash blocks before ordinary heap nodes are used MaxChocolateCBBlocks SETA 32 MaxChocolateSVBlocks SETA 128 MaxChocolateTKBlocks SETA 32 MaxChocolateMRBlocks SETA 150 MaxChocolateMABlocks SETA 150 MaxChocolateMSBlocks SETA 150 ] GBLL Oscli_QuickAliases GBLL Oscli_HashedCommands Oscli_QuickAliases SETL {TRUE} :LAND: ChocolateOscli ;try to do a better job of checking for aliases Oscli_HashedCommands SETL {TRUE} :LAND: ChocolateOscli ;try to do a better job of finding commands GBLL mjsServiceTrace ;for statistics gathering on service calls only mjsServiceTrace SETL {FALSE} GBLL mjsSysHeapNodesTrace ;for statistics gathering on some SysHeap nodes only mjsSysHeapNodesTrace SETL {FALSE} GBLL NoSPSRcorruption ;set to true if IRQ dispatcher NoSPSRcorruption SETL {FALSE} ;preserves SPSR_SVC GBLL RMTidyDoesNowt ; if true, RMTidy does nothing RMTidyDoesNowt SETL {TRUE} ; should really be "machine has FSLock in ROM" GBLL RogerEXEY ; if true, use Roger's new algorithm for XEigFactor, YEigFactor RogerEXEY SETL {FALSE} ; Marketing don't like it! GBLL DebugROMInit DebugROMInit SETL (Version :AND: 1) = 1 ; Yes for odd numbered development GBLL DebugROMPostInit ; Displays when the PostInit service call is sent to each ROM module (currently works on vanilla service call handling only) DebugROMPostInit SETL (:LNOT: ChocolateService) :LAND: {FALSE} GBLL DebugROMErrors DebugROMErrors SETL (Version :AND: 1) = 1 ; Yes for odd numbered development GBLL DebugTerminal ; default WRCH and RDCH through HAL DebugTerminal SETL {FALSE} GBLL DebugHALTX DebugHALTX SETL (Version :AND: 1) = 1 ; Yes for odd numbered development GBLL DebugHeaps ; initialise claimed and freed blocks DebugHeaps SETL {FALSE} ; (may slow things down unacceptably) GBLL DebugCDA2 ; ChangeDynamicArea and related options DebugCDA2 SETL {FALSE} [ DebugHeaps :LOR: DebugROMInit :LOR: DebugROMPostInit :LOR: DebugROMErrors :LOR: DebugCDA2 ! 0, "*** WARNING *** Debugging assembled in" ] GBLL StorkPowerSave ;True => power saving for Stork AND A4 StorkPowerSave SETL MorrisSupport ;False=> older A4 code only GBLL FixR9CorruptionInExtensionSWI ; whether R9 corruption by ExtensionSWI handler is fixed FixR9CorruptionInExtensionSWI SETL No26bitCode ; currently FALSE as CC's !SpellMod (possibly others) rely on it being broken GBLL FixCallBacks ; see Docs.CallbackChange FixCallBacks SETL {TRUE} ; also addresses some atomicity problems GBLL InterlacedPointer InterlacedPointer SETL {TRUE} :LAND: STB ; enable code to do proper interlaced pointer GBLL HiProcVecs ; Relocate processor vectors and first 16K of workspace to &FFFF0000 HiProcVecs SETL {FALSE} ; Leave off for now ; In an ideal world, we'd use something like this: ; HiProcVecs SETL M_Tungsten :LOR: :LNOT: NoARMv6 GBLL DebugForcedReset ; debug forced hard resets DebugForcedReset SETL {FALSE} GBLA ConfiguredLang ConfiguredLang SETA 11 ; default configured language GBLA FirstUnpluggableModule FirstUnpluggableModule SETA 8 ; Podule, FileSwitch, ResourceFS, Messages, MessageTrans, ; TerritoryManager, UKTerritory [ DebugForcedReset Reset_CannotResetFlag * 1 Reset_SysHeapCorrupt * 2 Reset_WrongCamMapAddress * 3 Reset_WrongNumberOfPages * 4 Reset_CamMapCorrupt * 5 Reset_VectorChainCorrupt * 6 Reset_TickNodesCorrupt * 7 Reset_DeviceVectorCorrupt * 8 Reset_PoduleOrCallBackCorrupt * 9 ] GBLL AssembleKEYV AssembleKEYV SETL {TRUE} ; Use KEYV. GBLL AssemblePointerV AssemblePointerV SETL {TRUE} ; Use PointerV. GBLL PollMouse PollMouse SETL {FALSE} ; Poll mouse. GBLL ProcessorVectors ProcessorVectors SETL {TRUE} ; Processor vectors indirected through 0 page. GBLL UseNewFX0Error UseNewFX0Error SETL (:LNOT: Embedded_UI) :LAND: ((Version :AND: 1) = 1) ; Whether *FX 0 should show the ROM link date instead of the UtilityModule date GBLS GetMessages [ International GetMessages SETS "GET s.MsgCode" | GetMessages SETS "" ] GBLS GetUnsqueeze [ SqueezeMods GetUnsqueeze SETS "GET s.Unsqueeze" | GetUnsqueeze SETS "" ] GBLS GetFlashROM [ ParallelFlashUpgrade GetFlashROM SETS "GET s.FlashROM" | GetFlashROM SETS "" ] GBLS GetKernelMEMC GBLS GetPalette GBLS GetMemInfo GBLS GetHAL GetKernelMEMC SETS "GET s." :CC: MEMM_Type GetMemInfo SETS "GET s.MemInfo" GetPalette SETS "GET s.vdu.vdupalxx" [ HAL GetHAL SETS "GET s.HAL" | GetHAL SETS "" ] GBLS GetKbdDrA1 [ Keyboard_Type = "A1A500" GetKbdDrA1 SETS "GET s.PMF.KbdDrA1" | GetKbdDrA1 SETS "" ] GBLS GetKbdRes [ :LNOT: HAL [ Keyboard_Type = "A1A500" GetKbdRes SETS "GET s.KbdResA1" | GetKbdRes SETS "GET s.KbdRes" :CC: Keyboard_Type ] ] ; control switches for med_00001 (the flood fill routines 1024 line limit). ; Switches have the following effects: ; ; _userma Will use rma if >48K is free, up to a maximum of 128K. It will ; try to acheive the latter by growing the rma if possible. ; _twowords Use two word entries in the queue. This overcomes the limitation ; of the original packed word format. GBLL med_00001_userma GBLL med_00001_twowords med_00001_userma SETL {TRUE} med_00001_twowords SETL {TRUE} [ med_00001_userma smallest_rma_size * (48*1024) ; define the low threshold for rma use largest_rma_size * (128*1024) ; and the ceiling for rma use ] ; Ickle macros. We want to be able to turn IRQs on and off fast in the ; code in various places. To do this easily, have a name for the ; SVC26/32 mode we run in. [ No26bitCode USR2632 * USR32_mode SVC2632 * SVC32_mode | USR2632 * USR26_mode SVC2632 * SVC26_mode ] END