; 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.
;

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; essential global variables
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                GET   Version
                GBLS  VersionNo
VersionNo       SETS  "$VString ($Date)"

MosVer          *       6               ; As returned by OS_Byte 0

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; now the conditional flags for the version we want
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                GBLL  AddTubeBashers
AddTubeBashers  SETL  {FALSE}

Tube_Normal     *       1
Tube_Simulator  *       2

                GBLA    TubeType
TubeType        SETA    Tube_Simulator

AssemblingArthur SETL  {TRUE}
; defined in hdr.system to allow conditionals in macros

                GBLL    CanLiveOnROMCard
CanLiveOnROMCard SETL   ROMCardSupport

                GBLL    CacheOff
CacheOff        SETL    {FALSE}

                GBLL    ShowWS
ShowWS          SETL    {TRUE}          ; Make KernelWS be verbose

                GBLL    Module
Module          SETL    {FALSE}

                GBLL    VCOstartfix              ;code in early kernel to fix VCO start problem on A7000 (esp. 7500FE)
VCOstartfix     SETL    {TRUE}

;whether we support running on the (Risc PC) emulator
                GBLL    EmulatorSupport
EmulatorSupport SETL    {FALSE} ; Disabled; QEMU doesn't like it

                GBLL    DoInitialiseMode
DoInitialiseMode 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    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    ProtectStationID        ; Disallow writes to NetStnCMOS (via OS_Byte & OS_NVMemory)
ProtectStationID        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    ChecksumCMOS            ; Inspect the CMOS checksum byte, and act like a CMOS reset if it's
ChecksumCMOS    SETL    {TRUE}                  ; invalid. Also, calculate CMOS checksum and write it when needed.

                GBLL    LCDInvert
LCDInvert       SETL    {TRUE}

                GBLL    LCDSupport              ; Whether LCD Support is assembled in or not
LCDSupport      SETL    {TRUE}

                GBLL    ModeSelectors           ; whether mode selectors are understood
ModeSelectors   SETL    {TRUE}

                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    {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    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}
  [ 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
                GBLL    DebugHALTX

              [ FreezeDevRel
DebugROMInit    SETL    {FALSE}
DebugHALTX      SETL    {FALSE}
              |
DebugROMInit    SETL    (Version :AND: 1) = 1   ; Yes for odd numbered development
DebugHALTX      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    DebugTerminal           ; default WRCH and RDCH through HAL
DebugTerminal   SETL    {FALSE}

                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: DebugCDA2
                ! 0, "*** WARNING *** Debugging assembled in"
              ]

                GBLL    StorkPowerSave  ;True => power saving for Stork AND A4
StorkPowerSave  SETL    MorrisSupport   ;False=> older A4 code only

                GBLL    FixCallBacks            ; see Docs.CallbackChange
FixCallBacks    SETL    {TRUE}                  ; also addresses some atomicity problems

  [ :LNOT: :DEF: HiProcVecs
                GBLL    HiProcVecs              ; Relocate processor vectors and first 16K of workspace to &FFFF0000
HiProcVecs      SETL    "$Machine"="Tungsten" :LOR: :LNOT: NoARMv6
  ]

                GBLL    DebugForcedReset        ; debug forced hard resets
DebugForcedReset SETL   {FALSE}

                GBLA    FirstUnpluggableModule
FirstUnpluggableModule  SETA 8                  ; Podule, FileSwitch, ResourceFS, Messages, MessageTrans,
                                                ; TerritoryManager, UK. Moot now the keyboard and mouse aren't
                                                ; in the kernel - unplug those and you're stuffed.

                GBLL  PMPDebug
PMPDebug        SETL  {FALSE}                   ; Physical memory pool debugging

                GBLL  PMPParanoid
PMPParanoid     SETL  {FALSE}                   ; Validate PMPs after most ops

                GBLL  PMPRAMFS
PMPRAMFS        SETL  {TRUE}                    ; Whether RAMFS DA is a PMP (requires compatible RAMFS module)

 [ PMPRAMFS
PMPRAMFS_Size   * 256                           ; Number of logical pages (physical size is unlimited)
 |
                GBLA    MaxRAMFS_Size
MaxRAMFS_Size   SETA    128                     ; Max size available for RAM Disc
 ]

 [ 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  ProcessorVectors
ProcessorVectors    SETL  {TRUE}          ; Processor vectors indirected through 0 page.

                    GBLL  UseNewFX0Error
UseNewFX0Error      SETL  ((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  GetKernelMEMC
                    GBLS  GetPalette
                    GBLS  GetMemInfo
GetKernelMEMC       SETS  "GET s." :CC: MEMM_Type
GetMemInfo          SETS  "GET s.MemInfo"

GetPalette          SETS  "GET s.vdu.vdupalxx"

; 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.

USR2632 * USR32_mode
SVC2632 * SVC32_mode

        END