; Copyright 1996 Acorn Computers Ltd ; ; 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. ; ; > GetAll GET Hdr:ListOpts GET Hdr:Macros GET Hdr:System GET Hdr:Machine. GET Hdr:ImageSize. $GetCPU $GetIO $GetMEMC $GetMEMM $GetVIDC ;whether compiling to run on (Risc PC) emulator GBLL RunningOnEmul RunningOnEmul SETL {FALSE} ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; now the conditional flags for the version we want ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; TMD 29-Apr-93: Fix1 conditioning removed for simplicity of code - always true [ {TRUE} ! 0, "Fix1: interrupts re-enabled in ChangeDynamicArea" ] GBLL Fix2 Fix2 SETL {TRUE} [ Fix2 ! 0, "Fix2: TMD optimisations of heap manager" ] GBLL Fix3 Fix3 SETL {TRUE} [ Fix3 ! 0, "Fix3: ExtendHeap stack balanced" ] GBLL Fix4 Fix4 SETL {TRUE} [ Fix4 ! 0, "Fix4: ExtendBlock IRQ latency improved" ] GBLL Fix5 Fix5 SETL {TRUE} [ Fix5 ! 0, "Fix5: SpriteOp made re-entrant" ] GBLL Fix6 Fix6 SETL {TRUE} [ Fix6 ! 0, "Fix6: OS_Byte &87 restores caller's IRQ state" ] GBLL Fix7 Fix7 SETL {TRUE} [ Fix7 ! 0, "Fix7: OS_Word &0E,0 enables IRQs" ] GBLL Fix8 Fix8 SETL {TRUE} [ Fix8 ! 0, "Fix8: OS_Word &15,0 enables IRQs" ] GBLL Fix9 Fix9 SETL {TRUE} [ Fix9 ! 0, "Fix9: Incarnation names not terminated by 1st character" ] GBLL Fix10 Fix10 SETL {TRUE} [ Fix10 ! 0, "Fix10: *Unplug terminated by address bug fixed" ] GBLL Fix11 Fix11 SETL {TRUE} [ Fix11 ! 0, "Fix11: Podule IRQ despatcher doesn't corrupt R0" ] GBLL Fix12 Fix12 SETL {TRUE} [ Fix12 ! 0, "Fix12: Rename incarnation fixed" ] ; TMD 04-Sep-89: Fix bug in prefer incarnation - corrupted error pointer if ; module or incarnation didn't exist GBLL Fix13 Fix13 SETL {TRUE} [ Fix13 ! 0, "Fix13: Prefer incarnation fixed" ] ; TMD 06-Sep-89: Fix bug in CallAfter/Every - the error pointer was corrupted ; (errors caused by supplying non-positive time interval, or by being unable to ; claim a node from the system heap) GBLL Fix14 Fix14 SETL {TRUE} [ Fix14 ! 0, "Fix14: CallAfter/Every error pointer not corrupted" ] ; TMD 11-Sep-89: Fix bug in AddCallBack - freed wrong heap node when chaining ; down the vector GBLL Fix15 Fix15 SETL {TRUE} [ Fix15 ! 0, "Fix15: AddCallBack frees correct heap node" ] ; TMD 25-Sep-89: Fix bug in GSRead quoted termination - started skipping spaces ; from the wrong character, and didn't adjust for post increment after loading ; first non-space. GBLL Fix16 Fix16 SETL {TRUE} [ Fix16 ! 0, "Fix16: GSRead quoted termination fixed" ] ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; essential global variables ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GET Version GBLS VersionNo VersionNo SETS "$VString ($Date)" GBLS SystemName SystemName SETS "RISC OS" ; ", p.k.a. Arthur a.k.a. Richard III" 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 GBLL ExceptionsAreErrors ExceptionsAreErrors SETL 1=1 AssemblingArthur SETL {TRUE} ; defined in hdr.system to allow conditionals in macros GBLL DoingVdu DoingVdu SETL {FALSE} ; so can get KeyWS! GBLL Module Module SETL {FALSE} GBLL IncludeTestSrc ; whether test code is included [ MorrisSupport IncludeTestSrc SETL {TRUE} | IncludeTestSrc SETL :LNOT: (MEMM_Type = "MEMC2") ; not on internal test versions ] [ RunningOnEmul IncludeTestSrc SETL {FALSE} ] ;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 {TRUE} [ :LNOT: RO371Timings GBLL NormalSpeedROMS NormalSpeedROMS SETL {FALSE} ;use FALSE for slow EPROMS GBLL AutoSpeedROMS AutoSpeedROMS SETL {TRUE} ;WARNING: may not be reliable if true 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 ] GBLL Select16BitSound Select16BitSound SETL {TRUE} GBLL Simulator ; running on simulator? Simulator SETL {FALSE} GBLL ChopOffTheGoolies ChopOffTheGoolies SETL {FALSE} GBLL ChecksumCMOS ChecksumCMOS SETL {TRUE} GBLL ResetIndirected ; new flag to say if instruction at start of ROM does LDR PC, [PC, #x] ResetIndirected SETL {TRUE} GBLL SqueezeMods ; whether squeezed modules are allowed SqueezeMods SETL {TRUE} GBLL DriversInKernel ; whether serial/parallel drivers are in the kernel DriversInKernel SETL {FALSE} GBLL International ; whether text and error messages come from messaeges file. International SETL {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 MEMM_Type = "ARM600" ; (Space only allocated on ARM600 versions) GBLL GammaCorrection GammaCorrection SETL (VIDC_Type = "VIDC20") :LAND: {TRUE} GBLL LCDInvert LCDInvert SETL (VIDC_Type = "VIDC20") :LAND: {TRUE} GBLL VIDCListType3 VIDCListType3 SETL (VIDC_Type = "VIDC20") :LAND: {TRUE} GBLL ExpandedCamMap ; two words per entry instead of one ExpandedCamMap SETL MEMM_Type = "ARM600" ; NB ARM600 code assumes expanded map GBLL UseFreePool ; whether OS_ChangeDynamicArea puts and gets memory to and from free pool UseFreePool SETL MEMM_Type = "ARM600" :LAND: {TRUE} GBLL NewCDA ; new change dynamic area code NewCDA SETL MEMM_Type = "ARM600" :LAND: {TRUE} ; let's give it a try! GBLL ModeSelectors ; whether mode selectors are understood ModeSelectors SETL (VIDC_Type = "VIDC20") :LAND: {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 LateAborts ; if true, use late abort mode on ARM600 (compulsory on ARM700) LateAborts SETL MEMM_Type = "ARM600" :LAND: {TRUE} GBLL StrongARM GBLL SAWBbroken ;whether StrongARM Write Buffer is broken (pass 1 silicon only) 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 ARM810support ;StrongARM must also be true for this to be useful GBLL ARM810bpbroken ;whether branch predict is broken GBLL ARM810cleanflushbroken ;whether single MCR for IDC clean+flush broken (a la StrongARM!) GBLL ARM810fastclock ;whether to attempt to use fast clock (false means bus clock) GBLL ARM810usePLL ;whether to use PLL for fast clock (else RefClk pin) GBLL ARM810_POST ;whether to run POST for ARM810 (StrongARM_POST must also be true) StrongARM SETL {TRUE} SAWBbroken SETL {FALSE} :LAND: StrongARM SAcleanflushbroken SETL {TRUE} :LAND: StrongARM SASTMhatbroken SETL {TRUE} :LAND: StrongARM StrongARM_POST SETL {TRUE} :LAND: StrongARM ARM810support SETL {FALSE} :LAND: StrongARM ARM810bpbroken SETL {TRUE} :LAND: ARM810support ARM810cleanflushbroken SETL {TRUE} :LAND: ARM810support ARM810fastclock SETL {FALSE} :LAND: ARM810support ARM810usePLL SETL {TRUE} :LAND: ARM810fastclock ARM810_POST SETL {FALSE} :LAND: ARM810support GBLL VCOstartfix ;code in early kernel to fix VCO start problem on A7000 (esp. 7500FE) VCOstartfix SETL {TRUE} GBLL MorrisIDString ;whether printed CPU string includes 7500/7500FE recognition MorrisIDString SETL {TRUE} :LAND: StrongARM ;printed CPU type only implemented if StrongARM true GBLL CheckProtectionLink ; if true, disallow CMOS RAM changes if link in protected position CheckProtectionLink SETL (IO_Type = "IOMD") :LAND: {TRUE} ; NB affects Delete/Copy/R/T and 0-9/. GBLL RMTidyDoesNowt ; if true, RMTidy does nothing RMTidyDoesNowt SETL (MEMC_Type = "IOMD") :LAND: {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 DAF_SpecifyBit ; enable use of dynamic area flag which says an area may need specific pages DAF_SpecifyBit SETL {TRUE} GBLL DebugROMInit DebugROMInit SETL (MEMC_Type = "IOMD") :LAND: {FALSE} GBLL DebugROMErrors DebugROMErrors SETL (MEMC_Type = "IOMD") :LAND: {FALSE} GBLL DebugHeaps ; initialise claimed and freed blocks DebugHeaps SETL {FALSE} ; (may slow things down unacceptably) ; ChangeDynamicArea and related options GBLL DebugCDA DebugCDA SETL {FALSE} GBLL DebugCDA2 DebugCDA2 SETL {FALSE} GBLL NewCDA2 ; whether all the new CDA code is in there NewCDA2 SETL NewCDA :LAND: {TRUE} GBLL NewStyle_RMA ; whether RMA is a new style area NewStyle_RMA SETL NewCDA :LAND: {TRUE} GBLL NewStyle_SpriteArea ; whether sprite area is a new style area NewStyle_SpriteArea SETL NewCDA :LAND: {TRUE} GBLL NewStyle_RAMDisc ; whether RAM disc is a new style area NewStyle_RAMDisc SETL NewCDA :LAND: {TRUE} GBLL NewStyle_FontArea ; whether font cache is a new style area NewStyle_FontArea SETL NewCDA :LAND: {TRUE} GBLL NewStyle_SysHeap ; whether system heap is a new style area (node faked up) NewStyle_SysHeap SETL NewCDA :LAND: {TRUE} GBLL NewStyle_Screen ; whether screen is a new style area NewStyle_Screen SETL NewCDA :LAND: {TRUE} GBLL NewStyle_All ; whether all old-style areas have been converted to new-style NewStyle_All SETL NewStyle_RMA :LAND: NewStyle_SpriteArea :LAND: NewStyle_RAMDisc :LAND: NewStyle_FontArea :LAND: NewStyle_SysHeap :LAND: NewStyle_Screen GBLL StorkPowerSave ;True => power saving for Stork AND A4 StorkPowerSave SETL MorrisSupport ;False=> older A4 code only GBLL LCDSupport ;Whether LCD Support is assembled in or not LCDSupport SETL {TRUE} ;(First intro'd for Stork) GBLL FixR9CorruptionInExtensionSWI ; whether R9 corruption by ExtensionSWI handler is fixed FixR9CorruptionInExtensionSWI SETL {FALSE} ; currently FALSE as CC's !SpellMod (possibly others) rely on it being broken [ DebugHeaps ! 0, "*** WARNING *** Heap debugging assembled in" ] GBLS GetMessages [ International GetMessages SETS "GET s.MsgCode" | GetMessages SETS "" ] GBLL DebugForcedReset ; debug forced hard resets DebugForcedReset SETL {FALSE} GBLA ConfiguredLang ConfiguredLang SETA 10 ; 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 ] ; Flags for RISC OS Blue changes ; GBLL AssembleA1KeyHandler AssembleA1KeyHandler SETL {FALSE} 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. GBLS GetUnsqueeze [ SqueezeMods GetUnsqueeze SETS "GET s.Unsqueeze" | GetUnsqueeze SETS "" ] GBLS GetPublicWS GBLS GetWorkspace GBLS GetKernelMEMC GBLS GetPalette GBLS GetMemInfo [ MEMM_Type = "ARM600" GetPublicWS SETS "GET Hdr:PublicWS" GetWorkspace SETS "GET Hdr:KernelWS" GetKernelMEMC SETS "GET s.ARM600" GetMemInfo SETS "GET s.MemInfo" | GetPublicWS SETS "" GetWorkspace SETS "GET Hdr:Old.NewSpace" [ MEMM_Type = "MEMC2" GetKernelMEMC SETS "GET s.MEMC2" | GetKernelMEMC SETS "GET s.MEMC1" ] GetMemInfo SETS "" ] [ VIDC_Type = "VIDC20" GetPalette SETS "GET s.Vdu.VduPal20" | GetPalette SETS "GET s.Vdu.VduPal10" ] GBLS GetRS423 [ DriversInKernel GetRS423 SETS "GET s.PMF.rs423" | GetRS423 SETS "" ] GBLS GetKbdDrA1 [ Keyboard_Type = "A1A500" GetKbdDrA1 SETS "GET s.PMF.KbdDrA1" | GetKbdDrA1 SETS "" ] GBLS GetKbdRes [ Keyboard_Type = "PC" GetKbdRes SETS "GET s.KbdResPC" | GetKbdRes SETS "GET s.KbdResA1" ] GBLS GetKey2 [ AssembleA1KeyHandler GetKey2 SETS "GET s.PMF.Key2" | GetKey2 SETS "" ] ; 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. ; _debug Store the queue start, end and 'amount to change the rma dynamic ; area by' in the first three words of OldIRQ1VSpace GBLL med_00001_userma GBLL med_00001_twowords GBLL med_00001_debug med_00001_userma SETL {TRUE} med_00001_twowords SETL {TRUE} ;med_00001_debug SETL {TRUE} ;med_00001_userma SETL {FALSE} ;med_00001_twowords SETL {FALSE} med_00001_debug SETL {FALSE} [ 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 ] [ med_00001_debug ! 0,"" ! 0,",-----------------------------------------------------------------," ! 0,"| **** WARNING **** |" ! 0,"| |" ! 0,"| Audit trail debugging for MED-00001 is enabled. This reuses the |" ! 0,"| first three words of OldIRQ1Vspace. This should be turned off |" ! 0,"| once MED-00001 has been tested and marked 'fixed'. |" ! 0,"| |" ! 0,"| Usage: |" ! 0,"| +0 start of area used by flood fill |" ! 0,"| +4 end+1 of area used by flood fill |" ! 0,"| +8 amount the rma was grown by |" ! 0,"'-----------------------------------------------------------------'" ! 0,"" ] ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; now get the headers ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GET Hdr:CMOS GET Hdr:Heap $GetPublicWS $GetWorkspace GET Hdr:Services GET Hdr:FSNumbers GET Hdr:HighFSI GET Hdr:NewErrors GET Hdr:Proc GET Hdr:Sprite GET Hdr:KeyWS GET Hdr:RS423 GET Hdr:ModHand GET Hdr:Variables GET Hdr:EnvNumbers GET Hdr:UpCall GET Hdr:Sound GET Hdr:Pointer GET Hdr:Podule GET Hdr:VduExt ; GET Hdr:Fox GET Hdr:Buffer GET Hdr:Font GET Hdr:DevNos ; GET Hdr:IOEB GET Hdr:Territory GET Hdr:Portable GET Hdr:MsgTrans GET Hdr:PaletteV GET Hdr:Wimp GET Hdr:ColourTran GET Hdr:Debug GET s.PMF.DEF ; Common with 6502 code in the keyboard Protocol ; now the main parts of the MOS GET s.Copro15ops ; some macros GET s.Kernel GET s.NewIRQs GET s.Oscli GET s.SysComms GET s.HeapMan GET s.ModHand $GetUnsqueeze GET s.ArthurSWIs GET s.ChangeDyn GET s.Arthur2 GET s.Utility GET s.MoreComms GET s.Convrsions GET s.MoreSWIs GET s.ExtraSWIs GET s.HeapSort GET s.Arthur3 GET s.SWINaming GET s.TickEvents $GetKbdRes GET s.NewReset $GetMessages GET s.Middle GET s.Super1 $GetKernelMEMC $GetMemInfo ! 0, "Main kernel size = &" :CC: :STR: (.-ROM) StartOfVduDriver GET s.vdu.VduDriver GET s.vdu.VduSWIs GET s.vdu.VduPalette $GetPalette GET s.vdu.VduPlot GET s.vdu.VduGrafA GET s.vdu.VduGrafB GET s.vdu.VduGrafC GET s.vdu.VduGrafD GET s.vdu.VduGrafE GET s.vdu.VduGrafF GET s.vdu.VduGrafG GET s.vdu.VduGrafH GET s.vdu.VduGrafI GET s.vdu.VduGrafJ GET s.vdu.VduGrafK GET s.vdu.VduGrafL GET s.vdu.VduWrch GET s.vdu.Vdu23 GET s.vdu.VduPointer GET s.vdu.Vdu5 GET s.vdu.VduCurSoft GET s.vdu.VduTTX GBLS GiveMeBfontAnyDay [ BleedinDaveBell GiveMeBfontAnyDay SETS "GET s.vdu.VduFontL1" | GiveMeBfontAnyDay SETS "GET s.vdu.VduFont" ] $GiveMeBfontAnyDay ! 0, "Vdu drivers size = &" :CC: :STR: (.-StartOfVduDriver) StartOfPMF GET s.PMF.osinit GET s.PMF.oseven GET s.PMF.osbyte GET s.PMF.osword GET s.PMF.realtime GET s.PMF.convdate $GetRS423 GET s.PMF.i2cutils GET s.PMF.oswrch GET s.PMF.buffer $GetKbdDrA1 GET s.PMF.key $GetKey2 GET s.PMF.mouse ALIGN StartOfAMB_beforealign ALIGN 4096 ;align to 4k page boundary, for easy ROMpatch StartOfAMB GET s.AMBControl.AMB DCB "GROT" ;spare words marker ALIGN 4096 ;align to 4k page boundary, for easy ROMpatch EndOfKernel & 0 ; for patching by BigSplit et al ! 0, "PMF section size = &" :CC: :STR: (StartOfAMB_beforealign - StartOfPMF) ! 0, "AMB section (4k aligned) starts at ":CC::STR:(StartOfAMB) ! 0, "AMB section size (4k aligned) = &" :CC: :STR: (EndOfKernel - StartOfAMB) [ med_00001_debug ! 0,"" ! 0,",-----------------------------------------------------------------," ! 0,"| **** WARNING **** |" ! 0,"| |" ! 0,"| Audit trail debugging for MED-00001 is enabled. This reuses the |" ! 0,"| first three words of OldIRQ1Vspace. This should be turned off |" ! 0,"| once MED-00001 has been tested and marked 'fixed'. |" ! 0,"| |" ! 0,"| Usage: |" ! 0,"| +0 start of area used by flood fill |" ! 0,"| +4 end+1 of area used by flood fill |" ! 0,"| +8 amount the rma was grown by |" ! 0,"'-----------------------------------------------------------------'" ! 0,"" ] END