- 19 Dec, 2020 1 commit
-
-
Jeffrey Lee authored
In HandleServiceModeTranslation, make sure WsPtr is initialised correctly before trying to use it. Fixes system heap corruption when responding to Service_ModeTranslation (most likely overwriting part of ChocolateMABlocks, and causing a crash when loading future modules) Fixes issue reported on forums: https://www.riscosopen.org/forum/forums/11/topics/15973 Version 6.47. Tagged as 'Kernel-6_47'
-
- 24 Oct, 2020 3 commits
-
-
Timothy E Baldwin authored
Previously both `RdchInkey` and `PageTest` enabled interrupts after running callbacks before calling Portable_Idle with the result that callback could be delayed until the next interrupt. * Change `process_callback_chain` to leave interrupts disabled, and rename accordingly. * Remove redundant check of CallBack_Flag. * In `PageTest` move running calbacks into `CtrlShiftTest`, so that it is immediately before the test. * Re-enable interrupts at appropriate locations. Tested on StrongARM Risc PC. Version 6.44. Tagged as 'Kernel-6_44'
-
Timothy E Baldwin authored
-
Timothy E Baldwin authored
This was introduced on 2002-10-07 in Kernel-5_35-4_79_2_48 the removed on 2002-11-30 in Kernel-5_35-4_79_2_51 as it was "liable to crash".
-
- 12 Feb, 2020 1 commit
-
-
Jeffrey Lee authored
* Update OS_ScreenMode 11's handling of drivers which fail to initialise. If there was no previous driver, then instead of trying to restore that nonexistant driver, stick with the new one. This is mainly to help with the case where the kernel's built in modes aren't accepted by the driver, and valid modes only become available once an MDF is loaded (this can happen with early OMAP3 chip revisions, which have very tight sync & porch limits, causing 90% of the kernel's modes to be rejected). If the kernel was to revert to the "no driver" state, then loading the MDF would still leave you with no video output. * Since we can now end up in a state where a driver is selected but hasn't been programmed yet, update OS_Byte 19 to detect this (via the magic ScreenBlankDPMSState value of 255) and avoid waiting for VSync * Update RemovePages & InsertRemovePagesExit (screen DA handlers) to avoid infinite loops if the screen DA gets shrunk to zero size (was seen while attempting to complete the !Boot sequence while no driver was active) Version 6.33. Tagged as 'Kernel-6_33'
-
- 19 Nov, 2019 1 commit
-
-
Timothy E Baldwin authored
* MinAplWork isn't used. * SuperMode isn't used and is less well known than "SWI OS_EnterOS". * MEMCADR is now only a magic value returned by OS_UpdateMEMC, so it is clearer to include it literally with comment. Added a comment to explain the baffling combination of the MEMC1 control register's address with it's value. Version 6.27. Not tagged
-
- 29 Jun, 2019 1 commit
-
-
Robert Sprowson authored
ControlList_Interlaced is taken to have meant "output interlaced sync on H/V" and "configure DMA to show alternate lines in the framestore on alternate fields", therefore SyncPol flags mean: b43 00 = 'normal' progressive scan 01 = interlaced sync, but both fields show the same image 10 = (invalid) 11 = interlaced sync, fields use alternate lines from the image Version 6.21. Tagged as 'Kernel-6_21'
-
- 24 Feb, 2019 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdudriver - When mapping external framestores, only double-map them if the driver supports hardware scrolling. Avoids wasting IO address space, and reduces IO space fragmentation if the framestore address changes Admin: Tested on Raspberry Pi 3 Version 6.19. Tagged as 'Kernel-6_19'
-
- 20 Jan, 2019 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdupalxx: - Fix conditional code sequence in PV_BulkWrite which meant that the greyscale palette flag was being recalculated when the border or pointer colour was changed. - Change PV_1stFlashState / PV_2ndFlashState to act as NOPs in true colour modes, which helps to avoid regular redundant gamma table updates (due to the flashing colour logic in the VSync handler). Admin: Tested on Raspberry Pi 3 Version 6.18. Tagged as 'Kernel-6_18'
-
- 29 Nov, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/legacymodes - Make the Service_ModeExtension implementation automatically use ExtraBytes to request that the row length is a multiple of a word (since things fail with non-word aligned rows) hdr/VIDCList - Un-deprecate SyncPol bits 2 & 3 and improve the comments to indicate the difference between SyncPol interlace and control list interlace Admin: Tested on BB-xM Version 6.17. Tagged as 'Kernel-6_17'
-
- 19 Nov, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vduswis - Fix 18 year old register corruption bug in FindOKMode which would prevent it from falling back to Service_ModeTranslation if Service_ModeExtension returned a VIDC list but the VIDC list was rejected by the GraphicsV driver s/vdu/vdudriver - Also, change a couple of error cases in ModeChangeSub so that they use the "Screen mode not available" error instead of the incorrect "Not enough screen memory" error. Admin: Tested on Raspberry Pi 3 Fixes issue reported on forums where if AnyMode is loaded, numbered modes in unsupported colour depths weren't being replaced with substitutes (although note that there are still some AnyMode-related issues to resolve) https://www.riscosopen.org/forum/forums/4/topics/12773 Version 6.16. Tagged as 'Kernel-6_16'
-
- 07 Nov, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: Over the years the OS's substitute screen mode selection logic has grown to be a tangled mess, and the logic it does implement isn't always very useful. Additionally, the kernel is structured in such a way that it can be hard for modules to override it. This set of changes aims to fix the many of the problems, by doing the following: - Moving all substitute mode selection logic out of the core VDU driver code and into a Service_ModeTranslation handler. This means you now only have one place in the kernel to look instead of several, and modules can override the behaviour by claiming/blocking the service call as appropriate. - Moving handling of the built-in VIDC lists out of the core VDU driver code and into a Service_ModeExtension handler. This means programs can now inspect these VIDC lists by issuing the right service call (although you are essentially limited to lists which the GraphicsV driver is OK with) - Moving *TV interlace & offset adjustment logic into the Service_ModeExtension handler, since they're legacy things which can be handled more cleanly for MDF/EDID (and the old code was poking memory the kernel didn't own) - Adding a Service_EnumerateScreenModes implementation, so that if you end up in the desktop with ScreenModes non-functional, the display manager at least has something useful to show you - Enhancing the handling of the built-in numbered modes so that they are now available in any colour depth; the Service_ModeExtension handler (and related handlers) treat the builtin VIDC lists as a set of mode timings, not a discrete set of modes - Substitute mode selection logic is a complete re-write. Instead of trying a handful of numbered fallback modes, it now tries: - Same mode but at higher colour depths - Same mode but at lower colour depths - Alternate resolutions (half-width mode with no double-pixel if original request was for double-pixel, and default resolution for monitor type) - Combined with the logic to allow the builtin VIDC lists to be used at any colour depth, this means that the kernel should now be able to find substitute modes for machines which lack support for <=8bpp modes (e.g. OMAP5) - Additionally the mode substitution code will attempt to retain as many properties of the originally requested mode as possible (eigen values, gap mode type, etc.) Other improvements: - The kernel now actually vets the builtin VIDC lists instead of assuming that they'll work (which also means they'll have the correct ExtraBytes value, where applicable) - The kernel now uses GraphicsV 19 (VetMode2) to vet the mode during the mode switch process, using the result to detect where the framebuffer will be placed. This allows for GraphicsV drivers to switch between DA 2 and external framestores on a per-mode basis. - The kernel now supports mode selectors which specify LineLength values which are larger than necessary; this will get translated to a suitable ExtraBytes control list item (+ combined with whatever padding the driver indicates is necessary via the VetMode2 result) File changes: - hdr/KernelWS - Reserve space for a VIDC list, since the Service_ModeExtension implementation typically can't use the built-in list as-is - s/Arthur3 - Issue Service_ModeFileChanged when the configured monitor type is changed, so that DisplayManager + friends are aware that the set of available modes has changed - s/GetAll - Fiddle with GETs a bit - s/MemMap2 - Extra LTORG - s/NewIRQs - Small routine to install/uninstall false VSync routine (previously from PushModeInfo, which wasn't really the appropriate place for it) - s/Utility - Hook up the extra service call handlers - s/vdu/legacymodes - New file containing the new service call implementations, and some related code - s/vdu/vdudecl - Move mode workspace definition here, from vdumodes - s/vdu/vdudriver - Remove assorted bits of mode substitution code. Plug in new bits for calling GraphicsV 19 during mode set, and deal with ExtraBytes/LineLength during PushModeInfo - s/vdu/vdumodes - Move some workspace definitions to s/vdu/vdudecl. Tweak how the builtin VIDC lists are stored. - s/vdu/vduswis - Rip out more mode substitution code. Issue Service_ModeFileChanged when monitor type is changed by OS_ScreenMode. Admin: Tested on Raspberry Pi 3, Iyonix, IGEPv5 Version 6.14. Tagged as 'Kernel-6_14'
-
- 16 Sep, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdudriver - When using mode selector blocks, don't allow the system to switch into double-vertical, double-pixel, or BBC-gap modes which are in colour depths unsupported by the kernel Admin: Tested on BB-xM Version 6.13. Tagged as 'Kernel-6_13'
-
- 14 Jul, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: ECFIndex and PalIndex claim to be mode variables, but it's impossible for extension modes to specify their values. Since they're easy to calculate from the ModeFlags and Log2BPP values, drop them from the mode workspace (+ table of builtin modes) and calculate them on the fly instead. File changes: - hdr/KernelWS - Drop ECFIndex & PalIndex from workspace - s/vdu/vdumodes - Adjust workspace definition, drop ECFIndex & PalIndex values from VWSTAB - s/vdu/vdudriver - Remove now-redundant copy loop from ModeChangeSub. Remove code from GenerateModeSelectorVars that sets up the ECFIndex & PalIndex values on the stack - s/vdu/vdugrafl - Adjust copy loop in SwitchOutputToSprite/Mask - s/vdu/vdupalette, s/vdu/vdupalxx - Add GetPalIndex routine to generate PalIndex on the fly. Drop the obsolete 16bpp palette/gamma table and shuffle the other entries to simplify GetPalIndex a bit. - s/vdu/vduplot - Add GetECFIndex routine to generate ECFIndex on the fly. Also, fix things so that mode 0 isn't the only rectangular-pixel mode which uses the special rectangular-pixel ECF patterns (index 0 vs. index 4). Fiddle with ExportedHLine a bit to avoid an out-of-range ADR. - s/NewReset - Fix UAL warning for MOV R0, AppSpaceStart. Adjust memset to not assume 512KB is the correct amount Admin: Tested on Raspberry Pi 3 Version 6.11. Tagged as 'Kernel-6_11'
-
- 04 Feb, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdudriver - On startup, initialise all palettes to 0, not just Pal_Blank. Ensures that entries which might not always be explicitly initialised (e.g. pointer) are self-consistent. Also make sure InitialiseMode communicates the pointer palette to the new GV driver, since some components tend to program it in a lazy manner (e.g. Hourglass) s/vdu/vdupalxx - Fix UpdateAllPalette setting R4 to 0 on exit. Fix PV_BlankScreen R0 return value to be 0/1 as the comment suggests instead of always being 0 due to GraphicsV calls. Admin: Tested on wandboard Fixes incorrect hourglass colours after reset, due to software RAM clear not wiping the kernel's palette (kernel + Hourglass thought old colours were still in use, but IMXVideo hadn't been told any colours yet so was using defaults of 0) Version 5.96. Tagged as 'Kernel-5_96'
-
- 03 Feb, 2018 1 commit
-
-
Robert Sprowson authored
Newly born boards have all 0xFF's in their CMOS (EEPROM), but the new order of keyboard scan did Init -> Scan keyboard -> Check (or wipe) CMOS and would therefore leave 0xFF's in a select few kernel workspace areas and OS_Byte values. Defer the init which reads CMOS until after the check/wipe step. Only the screen area size is now done early, but MassageScreenSize clamps that properly anyway. Arthur3.s: Relocate stranded function SetupPrinterBuffer to osinit. PMF/key.s: Drop support for SoftReset. PMF/osinit.s: Stuff in hardcoded defaults at early init. Retrieve the proper ones later. Take ownership of SystemSprite/RamFS/Font Manager dynamic areas (deferrable). vdudriver.s: Use symbolic name. NewReset.s: Defer SystemSprite/RamFS/Font Manager area creation, MouseInit, Read(Hard)CMOSDefaults until later. hdr/Options: Delete unused IgnoreVRAM. Remove MaxRAMFS_Size now PMPs make it not useful. Shuffle ARM6Support/XScaleMiniCache/XScaleJTAGDebug to be adjacent to their definitions. Tested by filling first 256 bytes with 0xFF and powering up. Reset now completes, OS_Byte variables look sensible. Version 5.95. Tagged as 'Kernel-5_95'
-
- 26 Jan, 2018 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdugrafl - Disable hardware scrolling if we're in a teletext mode with a border. Quick fix in lieu of adding some code to make sure the relevant border areas are cleared when scrolling. s/vdu/vduttx - Ignore VDU 23,18,<n> sequences when outside of teletext. Fixes a crash when screen update suspend/resume sequences are used. Admin: Tested on RiscPC Version 5.94. Tagged as 'Kernel-5_94'
-
- 15 Jun, 2017 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdupointer - The software pointer code was calculating LineLength manually, due to previous kernel versions not storing a copy of the value that would be safe to use during screen redirection. Fix the code to use the new DisplayLineLength variable, so that the software pointer will be correct in modes which have row padding. Admin: Tested on Raspberry Pi 3 Version 5.84. Tagged as 'Kernel-5_84'
-
- 13 Jun, 2017 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vduswis - Don't use RMVForCurrentMode when R0 = ModeNo, only use it if R0 is -1. This ensures that results for explicitly-specified modes will always represent the base properties of the mode and won't be influenced by any unusual properties of the current mode, e.g. LineLength/ScreenSize alterations caused by driver-specific framebuffer padding. Admin: Tested on Raspberry Pi 3 Version 5.83. Tagged as 'Kernel-5_83'
-
- 07 Jun, 2017 1 commit
-
-
Jeffrey Lee authored
Detail: The ExtraBytes control list item can be used to add padding between framebuffer rows. When the kernel sees a VIDC list containing this item, it will now adjust the LineLength and ScreenSize mode variables accordingly, with the end result that the correct amount of memory will be allocated for the framebuffer and the OS will render into it correctly. Files changed: - hdr/KernelWS - Add DisplayLineLength variable to allow the correct LineLength value to be preserved when screen output is redirected to a sprite - s/vdu/vdudriver - Make ModeChangeSub initialise DisplayLineLength before calling SwitchOutputToSprite. Update PushModeInfo to take ExtraBytes into account when calculating LineLength and ScreenSize. - s/vdu/vdugrafl - Adjust SwitchOutputToSprite to use DisplayLineLength when restoring screen output - s/vdu/vduwrch - Fix full-screen CLS to not write to the padding bytes Admin: Tested on Raspberry Pi 3 Version 5.82. Tagged as 'Kernel-5_82'
-
- 17 Dec, 2016 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdugrafl, s/vdu/vduttx - Adjust initialisation & shutdown of TTX workspace to fix workspace being erroneously freed/reinitialised when redirecting output to a sprite s/vdu/vdugrafk - If ScreenLoad needs to load one row at a time (e.g. when graphics window width != sprite width), allocate a block from the RMA instead of assuming that ScrLoaBuffer is large enough hdr/KernelWS - Get rid of ScrLoaBuffer, and shrink LargeCommon to a suitable size. Frees about 2K of VDU workspace. s/GetAll - Move Hdr:Sprite earlier in list of GETs Admin: Tested on Raspberry Pi Version 5.75. Tagged as 'Kernel-5_75'
-
- 15 Dec, 2016 2 commits
-
-
Jeffrey Lee authored
Detail: s/vdu/vdudriver, s/vdu/vdumodes - Re-introduce TTX256 so that 8bpp teletext will be used if no MDF is loaded s/vdu/vdudriver - If the video driver didn't support the native mode 7 colour depth, ModePromoTable was swapping it for another mode number, preventing the AltTTX code in FindOKMode from operating. So, skip the ModePromoTable check for mode 7. s/vdu/vduswis - Minor correction to alternate teletext mode search; 1<<5 = 32bpp, so stop search at log2bpp of 6 Admin: Tested on Raspberry Pi Version 5.74. Retagged as 'Kernel-5_74'
-
Jeffrey Lee authored
Detail: This set of changes: * Adds support for the T, TX and TY mode string elements (as per RISCOS Ltd) * Adds support for entering arbitrary-resolution teletext modes by using mode selector blocks with the Teletext mode flag set * ScrRCol and ScrBRow mode variables can be provided in the mode selector in order to restrict the number of text rows/columns in teletext modes (as per RISCOS Ltd) * If the rows / columns are restricted in this manner then the text window will be centered on the screen, to try and avoid things looking too ugly (no variable text scaling implemented) * For HiResTTX, all colour depths >= 4bpp are now supported by teletext. This essentially makes the TTX256 switch obsolete. * If the "native" mode 7 is unavailable then the kernel will try a series of fallback resolutions & colour depths in an effort to find a combination that works Known bugs/issues: * Teletext column count has a max limit of 255 due to TTXDoubleCounts being a byte array * If there's a border around the text window, the border will not be refreshed when changing transparency modes using a VDU 23,18,0 sequence * ScreenLoad looks like it can overflow the LargeCommon buffer (no buffer size check) - needs fixing before LargeCommon can be safely shrunk below (Old)TTXMapSize File changes: - hdr/KernelWS - Make CharWidth non-conditional. Adjust handling of teletext workspace; it's now allocated from the system heap to allow it to cope with arbitrary screen sizes - s/vdu/vdu23 - Make CharWidth non-conditional - s/vdu/vducursoft - Make CursorTeletext cope with arbitrary colour depths, make CharWidth non-conditional, remove hard-coded teletext values - s/vdu/vdudriver - Deal with teletext workspace allocation during ModeChangeSub. Deal with selecting teletext modes (and validating colour depth) in GenerateModeSelectorVars. - s/vdu/vdugrafl - Make CharWidth non-conditional. Calculate offset required for text window centering. - s/vdu/vdumodes - Remove TTX256 - s/vdu/vduswis - Try other teletext modes if native mode 7 not available. Extend OS_ScreenMode reason codes to cope with teletext mode strings. - s/vdu/vduttx - Update to use dynamic workspace. Replace various hardcoded values with variable lookups. Update character plotting + colour/palette selection to work with true-colour modes if HiResTTX. - s/vdu/vduwrch - Move some useful code into a subroutine. Update FastCLS to cope with true-colour teletext. Update AddressR0R1 to cope with text window centering offset. Make CharWidth non-conditional. Admin: Tested on Raspberry Pi, BB-xM VDU 23,18,0 in 256-colour teletext now works correctly (previously 64-colour mode was in use, causing palette update to be ruined by VIDC1-mangling) Version 5.74. Tagged as 'Kernel-5_74'
-
- 30 Jun, 2016 3 commits
-
-
Jeffrey Lee authored
Detail: This change gets rid of the following switches from the source (picking appropriate code paths for a 32bit HAL build): * FixCallBacks * UseProcessTransfer * CanLiveOnROMCard * BleedinDaveBell * NewStyleEcfs * DoVdu23_0_12 * LCDPowerCtrl * HostVdu * Print * EmulatorSupport * TubeInfo * AddTubeBashers * TubeChar, TubeString, TubeDumpNoStack, TubeNewlNoStack macros * FIQDebug * VCOstartfix * AssemblingArthur (n.b. still defined for safety with anything in Hdr: which uses it, but not used explicitly by the kernel) * MouseBufferFix * LCDInvert * LCDSupport * DoInitialiseMode * Interruptible32bitModes * MouseBufferManager * StrongARM (new CacheCleanerHack and InterruptDelay switches added to hdr/Options to cover some functionality that StrongARM previously covered) * SAcleanflushbroken * StrongARM_POST * IrqsInClaimRelease * CheckProtectionLink * GSWorkspaceInKernelBuffers * EarlierReentrancyInDAShrink * LongCommandLines * ECC * NoSPSRcorruption * RMTidyDoesNowt * RogerEXEY * StorkPowerSave * DebugForcedReset * AssembleKEYV * AssemblePointerV * ProcessorVectors * Keyboard_Type Assorted old files have also been deleted. Admin: Identical binary to previous revision for IOMD & Raspberry Pi builds Version 5.51. Tagged as 'Kernel-5_51'
-
Jeffrey Lee authored
Detail: This change gets rid of the following switches from the source (picking appropriate code paths for a desktop build): * STB * RO371Timings * NormalSpeedROMS * AutoSpeedROMS * RISCPCBurstMode * InterlacedPointer * ParallelFlashUpgrade (and s/FlashROM file) * Embedded_UI Some of the deleted code might be worth revisiting in future: * OS_ReadSysInfo 4 support for storing the MAC in alternate CMOS locations (including 2nd copy for error checking) or fetching via Service_MachineAddress * Mouse handling changes, possibly aimed at hiding the mouse pointer if a mouse isn't connected * More strict CMOS validation in s/NewReset Admin: Identical binary to previous revision for IOMD & Raspberry Pi builds Version 5.50. Tagged as 'Kernel-5_50'
-
Jeffrey Lee authored
Detail: This change gets rid of the following switches from the source (picking appropriate code paths for a 32bit HAL build): * HAL * HAL26 * HAL32 * No26bitCode * No32bitCode * IncludeTestSrc * FixR9CorruptionInExtensionSWI Various old files have also been removed (POST code, Arc/STB keyboard drivers, etc.) Admin: Identical binary to previous revision for IOMD & Raspberry Pi builds Version 5.49. Tagged as 'Kernel-5_49'
-
- 01 Jun, 2016 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vduttx - References to VduDriverWorkSpace need to be ZeroPage-relative. Without relocation, it looks like most of these addresses were hitting the Debugger workspace page, avoiding an immediate crash but causing no text to appear on screen. Admin: Tested on Raspberry Pi 1 Version 5.35, 4.79.2.326. Tagged as 'Kernel-5_35-4_79_2_326'
-
- 22 May, 2016 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdugrafh - Rewrite MergeSpriteAreas so that memory movement is now O(N) instead of O(N^2). Checking for duplicate sprites is still slow (O(N^2) search), but this resolves the main performance bottleneck with the code. s/vdu/vdugrafg - Add a variant of SpriteCtrlBlk which skips the call to GetName; this helps MergeSpriteAreas for the common case of a dest area with lots of sprites and a source area with a handful of sprites (SpriteCtrlBlk is now called on the source area once per dest sprite, previously was called on the dest area once per source sprite). Admin: Tested on Raspberry Pi 1, merging Sovereign theme Sprites11 file with itself (2.2MB file, 358 sprites) Old code took 860cs, new code takes 18cs (15cs of which appears to be loading the second copy of the file, judging by *SLoad timings) Version 5.35, 4.79.2.321. Tagged as 'Kernel-5_35-4_79_2_321'
-
- 08 May, 2016 1 commit
-
-
Jeffrey Lee authored
Detail: s/HeapSort, s/vdu/vdugrafc, s/vdu/vduswis - Avoid unnecessary remainder calculations in DivRem macro s/PMF/i2cutils, s/PMF/osword - Make use of DivRem's ability to accept a constant as the divisor Admin: Tested on Cortex-A15 Version 5.35, 4.79.2.318. Tagged as 'Kernel-5_35-4_79_2_318'
-
- 06 Jan, 2016 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vduswis - Fix conversion of mode specifier to mode string so that the X eigen value is only reported in the mode string if it was included in the mode specifier; previously was erroneously basing the decision on whether the Y eigen was specified, resulting in e.g. "EX4294967295" if only the Y eigen was included - Fix a stack imbalance causing the conversion of mode string to mode specifier crashing (typically with branch through zero) if an invalid eigen value is specified in the string (e.g. EX-1 as above) Admin: Tested on Raspberry Pi Version 5.35, 4.79.2.302. Tagged as 'Kernel-5_35-4_79_2_302'
-
- 12 Oct, 2015 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdugrafj - Rewrite WritePaletteFromSprite to fix some issues with the logic which decides whether to change screen mode: - ModeNo was always being treated as if it was a mode selector block, causing bad pointer dereferences if it was actually a numbered mode. Prior to zero page protection the code would have eventually stumbled its way through to the mode change code. - For checking the pixel format, only the Log2BPP was being compared, resulting in code deciding that (e.g.) modes with differing RGB order were the same - However the eigen value checking was also broken (checking wrong part of generated mode selector block), causing the mode change logic to always be taken s/vdu/vdugrafdec - Increase size of SloadModeSel so it's actually large enough to hold the generated mode selector - old code would have run off the end a bit (thankfully, it was the last thing in that particular workspace block) Admin: Tested on BB-xM, *ScreenLoad'ing sprites from various modes Fixes issue reported on forums: https://www.riscosopen.org/forum/forums/4/topics/3649 Version 5.35, 4.79.2.294. Tagged as 'Kernel-5_35-4_79_2_294'
-
- 31 Aug, 2015 1 commit
-
-
Jeffrey Lee authored
Detail: This set of changes adds support for "physical memory pools" (aka PMPs), a new type of dynamic area which allow physical pages to be claimed/allocated without mapping them in to the logical address space. PMPs have full control over which physical pages they use (similar to DAs which request specific physical pages), and also have full control over the logical mapping of their pages (which pages go where, and per-page access/cacheability control). Currently the OS makes use of two PMPs: one for the free pool (which now has a logical size of zero - freeing up gigabytes of logical space), and one for the RAM disc (logical size of 1MB, allowing for a physical size limited only by the amount of free memory) Implementing these changes has required a number of other changes to be made: * The CAM has been expanded from 8 bytes per entry to 16 bytes per entry, in order to allow each RAM page to store information about its PMP association * The system heap has been expanded to 32MB in size (from just under 4MB), in order to allow it to be used to store PMP page lists (1 word needed per page, but PMP pages may not always have physical pages assigned to them - so to allow multiple large PMPs to exist we need more than just 1 word per RAM page) * The &FA000000-&FBFFFFFF area of fixed kernel workspace has been shuffled around to accomodate the larger CAM, and the system heap is now located just above the RMA. * SoftResets code stripped out (unlikely we'll ever want to fix and re-enable it) * A couple of FastCDA options are now permanently on * Internal page flags shuffled around a bit. PageFlags_Unavailable now publicly exposed so that PMP clients can lock/unlock pages at will. * When OS_ChangeDynamicArea is asked to grow or shrink the free pool, it now implicitly converts it into a shrink or grow of application space (which is what would happen anyway). This simplifies the implementation; during a grow, pages (or replacement pages) are always sourced from the free pool, and during a shrink pages are always sent to the free pool. File changes: - hdr/KernelWS - Extend DANode structure. Describe CAM format. Adjust kernel workspace. - hdr/OSRSI6, s/Middle - Add new item to expose the CAM format - hdr/Options - Remove SoftResets switch. Add some PMP switches. - s/ARM600, s/VMSAv6 - Updated for new CAM format. Note that although the CAM stores PMP information, BangCamUpdate currently doesn't deal with updating that data - it's the caller's responsibility to do so where appropriate. - s/ChangeDyn - Lots of changes to implement PMP support, and to cope with the new CAM format. - s/HAL - Updated to cope with new CAM format, and lack of logical mapping of free pool. - s/MemInfo - Updated to cope with new CAM format. OS_Memory 0 updated to cope with converting PPN to PA for pages which are mapped out. OS_Memory 24 updated to decode the access permissions on a per-page basis for PMPs, and fixed its HWM usage for sparse DAs. - s/NewReset - Soft reset code and unused AddCamEntries function removed. Updated to cope with new CAM format, PMP free pool, PMP RAMFS - s/AMBControl/allocate - Update comment (RMA hasn't been used for AMBControl nodes for a long time) - s/AMBControl/growp, s/AMBControl/memmap, s/AMBControl/shrinkp - Update for new CAM format + PMP free pool - s/vdu/vdudriver - Strip out soft reset code. Admin: Tested on Pandaboard This is just a first iteration of the PMP feature, with any luck future changes will improve functionality. This means APIs are subject to change as well. Version 5.35, 4.79.2.284. Tagged as 'Kernel-5_35-4_79_2_284'
-
- 14 Aug, 2015 1 commit
-
-
Jeffrey Lee authored
Detail: - Docs/HAL/ARMop_API - Updated with documentation for the new ARMops. - s/ARMops - Set up pointers for the new memory barrier ARMops. Add full implementations for ARMv6 & ARMv7; older architectures should be able to get by with a mix of null ops & write buffer drain ops. Update ARMopPtrTable to validate structure against the list in hdr/OSMisc - hdr/KernelWS - Reserve workspace for new ARMops. Free up a bit of space by limiting ourselves to 2 cache levels with ARMv7. Remove some unused definitions. - hdr/OSMisc - New header defining OS_PlatformFeatures & OS_MMUControl reason codes, OS_PlatformFeatures 0 flags, and OS_MMUControl 2 ARMop indices - Makefile - Add export rules for OSMisc header - hdr/ARMops, s/ARM600, s/VMSAv6 - Remove CPUFlag_* and MMUCReason_* definitions. Update OS_MMUControl write buffer drain to use DSB_ReadWrite ARMop (which is what most existing write buffer drain implementations have been renamed...
-
- 13 Jul, 2015 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdupointer - For any mode where the software pointer is usable, RestorePointer was restoring the software pointer regardless of whether it was in use at the time RemovePointer was called. This would cause both the software & hardware pointers to be briefly enabled at the same time, potentially causing flickering or other glitches. Fix the issue by making sure RestorePointer only restores if the software pointer was actually in use at the time RemovePointer was called. Also, attempt to deal with the situation where the pointer might have moved to a location where the software pointer is no longer required. s/Middle - Improve integration of HangWatch with the abort handler - avoid overwriting the top of the SVC stack so that it can be preserved for the HangWatch dump. Admin: Tested on Raspberry Pi Version 5.35, 4.79.2.270. Tagged as 'Kernel-5_35-4_79_2_270'
-
- 10 Jul, 2015 1 commit
-
-
Jeffrey Lee authored
Detail: This set of changes adds support for rendering software mouse pointers directly in the kernel, rather than requiring graphics drivers to render them themselves as was the case previously. If a driver returns from GraphicsV_Features with the 'hardware pointer' bit clear, and a call to GraphicsV_UpdatePointer is returned unclaimed, then the kernel will step in and render a software pointer. This allows selective control over which areas of the screen the software pointer is used (e.g. if hardware only supports its use in some areas) hdr/KernelWS - Shrink PointerXEigFactor to 1 byte to free up some space for tracking the display log2bpp. Use 8 words of space for tracking software pointer state. s/vdu/vducursoft - Adjust existing the existing calls to the software pointer RemovePointer/RestorePointer functions so that they're called with IRQs enabled s/vdu/vdudriver - Keep track of display log2bpp. Claim/release memory needed for restoring pixels under software pointer. s/vdu/vdugrafhal - Update HAL_VideoUpdatePointer handling so that 0 can be returned in a1 to indicate the GraphicsV call should be left unclaimed. s/vdu/vdupalxx - Trigger updates of the cached software pointer palette whenever it's likely to become invalidated. s/vdu/vdupointer - Add software pointer implementation. Relying on a SpriteExtend OS_SpriteOp would be nice, but we're in the background so have to do plotting & unplotting manually. ColourTrans is used to cache the pointer palette colours for the current mode, although we're limited to calling it from a callback. Admin: Tested on Raspberry Pi & BB-xM Pointer is very flickery under some circumstances (e.g. running !CloseUp) due to needing to plot/unplot around any VDU driver screen access (as per text cursor). So code may need revising in future once we can trap reads/writes from specific screen memory pages. Version 5.35, 4.79.2.269. Tagged as 'Kernel-5_35-4_79_2_269'
-
- 21 Dec, 2014 1 commit
-
-
Robert Sprowson authored
-
- 18 Sep, 2014 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdudecl - Add a couple more optimisations to LoadCoordPair - use SXTH where possible, and use LDRSH if data is halfword aligned (not currently the case, but may be in future) s/vdu/vdugrafj - Fix PreCreateHeader to allow <=256 colour RISC OS 5 sprites to have palettes Admin: Tested on Pandaboard Version 5.35, 4.79.2.238. Tagged as 'Kernel-5_35-4_79_2_238'
-
- 16 Sep, 2014 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdugrafk - When saving a new format sprite that would otherwise contain lefthand wastage, copy each screen row to a temporary buffer before saving it out in order to allow the wastage to be removed Admin: Tested on Pandaboard Fixes issue reported on forums: https://www.riscosopen.org/forum/forums/4/topics/2802 Version 5.35, 4.79.2.237. Tagged as 'Kernel-5_35-4_79_2_237'
-
- 18 Apr, 2014 1 commit
-
-
Jeffrey Lee authored
Detail: s/PMF/osinit, s/vdu/vdudriver - Move GraphicsV_StartupMode call from InitialiseMode to TranslateMonitorLeadType. This means (a) it'll only be used if the CMOS mode is set to 'auto' and (b) the returned mode can more easily be read by other modules via OS_ReadSysInfo 1. s/vdu/vduswis - Make OS_CheckModeValid act as if we have practically unlimited screen memory if using a GraphcisV driver with variable external framestore. In this case it's the driver should have already OK'd the memory requirements from within the VetMode call issued by FindOKMode - although the check won't be fully valid if we're checking for a shadow mode as the driver currently isn't told how many screen banks are required. Admin: Tested on Raspberry Pi OS_CheckModeValid fix ensures valid modes which require large amounts of VRAM are reported correctly when we're currently in a low-memory mode Version 5.35, 4.79.2.220. Tagged as 'Kernel-5_35-4_79_2_220'
-
- 16 Apr, 2014 1 commit
-
-
Jeffrey Lee authored
Detail: s/vdu/vdumodes - Redefine VgaX_7 to be VLM_7 if HiResTTX/TTX256 in use Admin: Tested on Raspberry Pi Fixes nasty crash when selecting mode 7 without an MDF loaded due to VIDC list being mismatched with code/VWSTAB Version 5.35, 4.79.2.219. Tagged as 'Kernel-5_35-4_79_2_219'
-