Page 1 of 1

ADFFS 2.55 beta

Posted: Sun May 01, 2016 9:29 pm
by JonAbbott
Around 130 games are now working on the Iyonix and Pi, which are detailed below. The JIT now supports CPU pipelining and unaligned memory access and the SWP instruction are emulated on ARMv7. ARMv7 support is work in progress, some titles may not run correctly on the Pi2. For forward compatibility the JIT no longer performs cache operations itself, but instead uses the RISC OS ARMOp's exposed in RISC OS 5.23.

Page Zero access now supports writeback and no longer emulates load instructions on RISC OS 5, but instead relies on Vector relocation. For this reason you must be running a High Vector build of RISC OS 5 on Iyonix and any modern machine. See the requirements section below for the minimum build of RISC OS 5 required.

IOC/IOMD hardware cursors are implemented on GPU based machines and specific versions of RISC OS can now be emulated. When emulating earlier versions of RISC OS, SWI differences are implemented and sound hardware is emulated appropriately. 16bit linear sample handlers are now supported when emulating RISC OS 3.5 or newer, although sample rate conversion to correct the pitch has yet to be implemented.

The STREX instruction is now implemented, to support SharedCLib 2.29 and newer, and additional CLib functions are now hypervised. The Abort handler now supports lazy page mapping and countless bugs have been fixed.

SoundTrackers are now ARMv7 compatible and additional Page Zero access bugs have been fixed in various games. A bug fixed in Paradroid 2000 for example, now corrects the sound effects.

When emulating VIDC1 on a RiscPC, MODE's now default to 75Hz using EGA on VGA (640x350) if MonitorType is configured to 3, 4 or Auto. This may result in a blank screen on some LCD, a more VGA compliant version will follow in a later release.


A305/A301/A410/A440/A540 requirements:
  • 4MB RAM minimum, 12MB RAM maximum
  • SparkFS must be loaded if "Boot Floppy" is going to be used
RiscPC requirements:
  • 32MB RAM minimum
  • SparkFS must be loaded
Iyonix requirements
  • RISC OS 5.23 April 6th 2016 build or newer
  • SparkFS must be loaded
  • To get legacy TV MODEs working (0 to 15), you can try this Monitor file for 75Hz EGA on VGA
    EGAonVGAMonitor.zip
    (698 Bytes) Downloaded 31 times
Pi requirements:
  • RISC OS 5.23 April 6th 2016 build or newer
  • SparkFS must be loaded
  • AnyMode must be installed in !Boot.Choices.Boot.PreDesk or the monitor set to Auto in Configure
  • Ensure fake_vsync_isr=1 is uncommented in !Boot.Loader.CONFIG/TXT
  • (optional) For the proper retro gaming look, you can turn off the default GPU filtered upscaling by editing !Boot.Loader.CONFIG/TXT and add the following lines:

    Code: Select all

    #set GPU upscaling to nearest neighbour
    scaling_kernel=8
  • (optional) If your display supports 50Hz, you can force the Pi to use 50Hz by editing !Boot.Loader.CONFIG/TXT and adding the following lines. Uncomment one of the hdmi_mode values:

    Code: Select all

    hdmi_ignore_edid=0xa5000080
    #
    hdmi_group=1
    #576p @ 50Hz
    #hdmi_mode=17
    #
    #720p @ 50Hz
    #hdmi_mode=19
    #
    #1080p @ 50Hz
    hdmi_mode=31
    At other monitor frequencies, games will still run at the correct rate but micro stutter may be noticeable where extra frames are added to make up the difference

Known issues
  • Doesn't support the protection used by Chequered Flag (non-RO3 version), Fine Racer and KerBang! (they talk directly to the FDC via IOC)
  • Shelling out of the desktop (Ctrl-Shift-F12 twice) hangs if an HD floppy is mounted on RO3.5+ ARM710 under RedSquirrel
  • Although Caverns runs fine under VIDC translation on the A7000, on a RPC the scrolling isn't quite correct
  • Does not work on a RISC OS 3.1x machine with more than 12mb of RAM
  • Some games don't display on Kinetic (eg Zarch)
  • Requires 30mb of free memory to work on a StrongARM machine, if the game isn't natively StrongARM compatible
  • OMAP3/4 and Pi3 untested and may not work
  • Sometimes reports "Broken directory" after loading (exiting and reloading is a temporary fix)
  • Can't change discs in Apocalypse on RO4
  • ADFFS may not reset itself after the JIT is shutdown when a game quits (quit and reload ADFFS before trying to Boot another game)
  • Thundermonk fire sometimes doesn't appear on the Pi if the video refresh rate is >50Hz
  • Some games detailed below are currently not working on StrongARM - due to a bug in the ARMv3/v4 JIT on IOMD
  • Some games may result in a blank screen on a RiscPC
Games that are made StrongARM/Pi compatible:
F10001 2067 BC (1993) (Oregan Developments)
F10010 Alerion (1988) (DABS Press)
F10015 Alone In the Dark (1995) (Krisalis Software)
F10017 Apocalypse (1990) (The Fourth Dimension)
F10493 Arc/A3000 Christmas Box, The: Brixx! (1990) (RTFM Software)
F10493 Arc/A3000 Christmas Box, The: PON! in Winterland (1990) (RTFM Software)
F10493 Arc/A3000 Christmas Box, The: Zap the red wierdos from Mars (1990) (RTFM Software)
F10018 Arcade 3 (1988) (Clares Micro Supplies)
F10020 Arcendium (1988) (Alien Images)
F10034 Axis (1993) (TBA Software)
F10036 Ballarena (1990) (Sisteme)
F10038 Battle Chess (1993) (Krisalis Software)
F10039 Battle Tank (1990) (Minerva)
F10041 Big Bang (1996) (Psycore)
F10049 BlowPipe (1990) (Eclipse)
F10053 Boogie Buggy (1991) (The Fourth Dimension)
F10452 Bouncer (1991) (RTFM Software)
F10057 Bubble Fair (1991) (Eterna)
F10060 Bug Hunter in Space (1990) (Minerva)
F10065 Cannon Fodder (1994) (Krisalis Software)
F10067 Carnage Inc. (1993) (The Fourth Dimension)
F10355 Cascade (1992) (Milo Shaffer and Richard Norman)
F10068 Casino (1989) (Minerva)
F10071 Cataclysm (1991) (The Fourth Dimension)
F10072 Caverns (1991) (Minerva)
F10490 Champions: Jahangir Khan World Championship Squash (1991) (Krisalis Software)
F10081 Chuck Rock (1991) (Krisalis Software)
F10144 Chuck Rock [BUZZ version] (1994) (Krisalis Software)
F10090 Conqueror (1988) (Superior Software)
F10104 DarkWood (1995) (Eclipse)
F10115 Diggers (1994) (Millennium Interactive)
F10118 Dominate (1991) (RTFM Software)
F10125 Drifter (1997) (The Fourth Dimension)
F10127 Drop Ship (1990) (The Fourth Dimension)
F10128 Dune II - Battle for Arrakis (1995) (Eclipse) (v1.23F only)
F10535 Dune II - Battle for Arrakis (1997) (Eclipse) [CD version] (v1.32 only)
F10129 Dungeon, The (1993) (The Fourth Dimension)
F10307 Ego: Repton 4 (1992) (Superior Software)
F10140 E-Type (1989) (The Fourth Dimension)
F10153 Fine Racer (1991) (Eterna)
F10154 Fire & Ice (1995) (Warner Interactive Entertainment)
F10157 Fireball II (1990) (Cambridge International Software)
F10158 Fish! (1988) (Rainbird)
F10159 Flashback (1994) (U.S. Gold)
F10167 Freddy's Folly (1988) (Minerva)
F10170 Galactic Dan (1992) (The Fourth Dimension)
F10592 Games Minipack Five: Fireball II (1990) (Cambridge International Software)
F10592 Games Minipack Five: PON! (1990) (Cambridge International Software)
F10172 Gods (1992) (Krisalis Software)
F10179 Gribbly's Day Out (1992) (Coin-Age)
F10178 Grievous Bodily 'ARM (1991) (The Fourth Dimension)
F10188 Heimdall (1993) (Krisalis Software)
F10192 Hero Quest (1991) (Krisalis Software)
F10199 Holed Out!! (1989) (The Fourth Dimension)
F10202 HoverBod (1988) (Minerva)
F10204 Ibix the Viking (1989) (Minerva)
F10408 Inferno (1996) (Paradise Games)
F10210 Jahangir Khan World Championship Squash (1991) (Krisalis Software)
F10211 James Pond (1990) (Krisalis Software)
F10590 James Pond [BUZZ version] (1990) (Krisalis Software)
F10212 James Pond II Robocod (1993) (Eclipse)
F10525 James Pond II+ Robocod (1995) (Eclipse)
F10213 Jet Fighter (1988) (Minerva)
F10484 Krisalis Collection, The: Mad Professor Mariarti [BUZZ version] (1991) (Krisalis Software)
F10484 Krisalis Collection, The: Pipe Mania (1993) (Krisalis Software)
F10484 Krisalis Collection, The: Revelation! [BUZZ version] (1993) (Krisalis Software)
F10484 Krisalis Collection, The: Terramex (1993) (Krisalis Software)
F10223 Last Ninja, The (1992) (Superior Software)
F10225 Legend of the Lost Temple, The (1992) (Eterna)
F10277 Lemmings (1991) (Krisalis Software)
F10469 Lemmings [Learning Curve version] (1991) (Krisalis Software)
F10228 Lemmings 2: The Tribes (1994) (Krisalis Software)
F10232 Lotus Turbo Challenge 2 (1992) (Krisalis Software)
F10235 Maddingly Hall (1989) (Minerva)
F10233 Mad Professor Mariarti (1990) (Krisalis Software)
F10593 Mad Professor Mariarti [BUZZ version] (1991) (Krisalis Software)
F10236 Magic Pockets (1993) (Renegade)
F10241 Man at Arms (1990) (The Fourth Dimension)
F10242 Manchester United (1990) (Krisalis Software)
F10491 Manchester United Europe (1991) (Krisalis Software)
F10250 MiG-29 Fulcrum (1991) (Domark)
F10251 Minotaur (1987) (Minerva)
F10253 Missile Control (1988) (Minerva)
F10258 Mr Doo (1994) (Archimedes World)
F10260 Nebulus (1992) (Krisalis Software)
F10261 Nevryon (1990) (The Fourth Dimension)
F10263 No Excuses (1991) (Arcana Software)
F10267 Oh, No! More Lemmings (1992) (Krisalis Software)
F10270 Orion (1988) (Minerva)
F10271 Overload (1989) (Clares Micro Supplies)
F10507 Pac-mania (1989) (Grandslam Entertainments)
F10447 Pac-mania [Learning Curve version] (1991) (Domark)
F10274 Pandora's Box (1991) (The Fourth Dimension)
F10278 Pesky Muskrats (1992) (Coin-Age)
F10281 Pipe Mania (1989) (Krisalis Software)
F10485 Play It Again Sam 1: Conqueror (1992) (Superior Software)
F10485 Play It Again Sam 1: Hostages (1992) (Superior Software)
F10282 Poizone (1991) (Eterna)
F10385 Populous (1992) (Krisalis Software)
F10290 Pysanki (1990) (The Fourth Dimension)
F10298 Quest For Gold
F10480 Quest For Gold [Learning Curve version] (1992) (Krisalis Software)
F10303 RedShift (1990) (Minerva)
F10306 Repton 3 (1988) (Superior Software)
F10308 Revelation! (1992) (Krisalis Software)
F10595 Revelation! [BUZZ version] (1993) (Krisalis Software)
F10309 Revolver () (Psycore)
F10312 Rise in Crime (1988) (Robico Software)
F10315 Rockfall (1991) (Eterna)
F10316 Rotor (1989) (Arcana Software)
F10326 Sensible Soccer (1993) (Renegade)
F10327 Serpents (1993) (Cambridge International Software)
F10456 Slappit (1990) (RTFM Software)
F10338 SpeedBall 2 (1994) (Krisalis Software)
F10339 Spheres of Chaos (1992) (Matt Black)
F10343 Sporting Triangles (1990) (CDS Software) (needs slowing down)
F10348 StarTrader (1989) (Gem Electronics)
F10350 Stranded! (1989) (Robico Software)
F10359 S.W.I.V. (1992) (Krisalis Software)
F10566 S.W.I.V. [BUZZ version] (1993) (Krisalis Software)
F10361 Tactic (1996) (Uffenkamp Computer Systeme)
F10362 Talisman (1989) (Minerva)
F10366 Terramex (1988) (Grandslam Entertainments)
F10367 Thundermonk (1989) (Minerva)
F10371 Tower of Babel (1991) (Cygnus Software)
F10378 Warlocks (1993) (Network 23)
F10381 White Magic (1989) (The Fourth Dimension)
F10388 Wolfenstein 3D (1994) (Powerslave Software)
F10393 World Class Leaderboard (1988) (Krisalis Software) (needs slowing down)
F10396 Xenon 2: Megablast (1993) (Eclipse)
F10402 Zarch (1987) (Superior Software)
F10403 Zelanites - The Onslaught (1991) (MicroPower)


Changes since 2.54:
  • premodechange wasn't resetting VIDC20 registers (bug introduced in
    2.52k) (fixes James Pond and any use of Mode Extensions on IOMD)
  • blitter VSync moved to occur after the screen geometry has been
    calculated (fixes James Pond 2)
  • Page Zero Abort handler for High Vectors was corrupting Rd with
    writeback (bug introduced in 2.54q)
  • SetVars now sets ADFFS$HighVectors and ADFFS$ARMv7
  • Modified !Run / !Loader to check for High Vectors on RO5 and load
    ADFFS550 if unaligned loads aren't supported
  • IOC_trigger_vsync now checks if T0/T1 have triggered on flyback
  • Channel Handler was being claimed before the Sound Buffer had been
    initialized
  • JIT was using the wrong CPUOp to flush the TLB pre StrongARM
  • JIT IOC IRQ stack wasn't being claimed on ADFFS400 build
  • JIT skips cache flush ops pre StrongARM
  • No longer attempts to swap to a disc if the file doesn't exist
    when CTRL-SHIFT-F1..F9 pressed
  • map/unmap_screen_memory were issuing OS_MMUControl to flush the TLB
    below RO3.7
  • JIT codelet recycling wasn't working for BL when self-modified
  • JIT TEQP PC,.. wasn't using Rx instead of PC when reencoded
  • ADFPause now exits early if a key is pressed
  • calc_VMOD_RMOD wasn't attempting (v/r*CLK)/CK
  • Wasn't removing the IOC IRQ stack on IOMD
  • *FORMAT was being passed ADFS's private pointer instead of ADFFS's
  • JIT wasn't executing up to the instruction when OS_Exit encountered
  • JIT OS_Exit was shutting down the JIT
  • Wimp_SlotSize wasn't setting pre_JIT_wimp_slot_size
  • Wimp_GetEnv wasn't returning pre_JIT_wimp_slot_size (fixes Dune II)
  • JIT Sound_Mode and Sound_LinearHandler now hypervised (fixes
    Dune II v1.32)
  • Wimp_SlotSize current and free pool are now capped to the JIT appspace
    limit (fixes Wolfenstein 3D)
Changes since 2.53:
  • LDM / STM now check for R13 in reglist on ARMv7
  • LDM / STR abort handler now report aborts with PC in reglist
  • JIT SharedCLib SWI handler wasn't ARMv7 safe
  • JIT Abort handler wasn't handling unaligned STM outside of
    appspace correctly (fixes Bubble Fair, Orion and many more)
  • JIT Abort handler wasn't corrupting Rd in STM in the debug builds
    (fixes Bubble Fair)
  • Two Page Zero access bugs fixed in TrackerModule (now 5.04)
    (fixes Paradroid 2000 audio on RO3.5+)
  • Now silently fails Page Zero access from 32bit Modules and RISC OS
  • Hypervised OS_File wasn't returning errors correctly (bug introduced
    in 2.53g)
  • Abort/JIT Abort handlers weren't disabling FIQ whilst restoring
    registers prior to exit
  • JIT CMP/CMN/TEQ/TST PC,#<immed> was corrupting R0
  • JIT STM Abort Handler wasn't flushing the instruction cache correctly
    for STMDA/DB (fixes Battle Chess)
  • Sound_Configure was returning the VIDC1 period in R1 instead of R2
    on exit when emulating below RO3.5
  • On initializaton, the VIDC1 sample period wasn't preset to 48
  • Sound fill code wasn't moving to the next sample when performing
    an N:1 fill (fixes Talisman)
  • Unaligned LDM with writeback were corrupting Rd in debug mode
  • LDR/STR Abort handler was't checking if LDR/STR were in Late Abort Mode
  • Hypervised OS_GBPB would corrupt the stack if the OS generated an error
  • Hypervised OS_GBPB now allows re-entry via GPBPV
  • Debug mode now displays the state of IRQ/FIQ
  • JIT SharedCLib codelet was copying one too many words (bug intruduced
    in 2.54b) (fixes Battle Chess)
  • Now relies on High Vectors to trap Page Zero reads (2.54h)
  • Unaligned Abort handler wasn't handling unaligned outside of JIT space
    (fixes Speedball 2)
  • Added support for {LD/ST}REX{H/D} (reported), LDREX{B} (reported) and
    STREX{B} (proxied) to the JIT Abort handler (adds support for
    SharedCLib 2.29+) (2.54i)
  • Abort handler now handles re-entrant Unaligned access that triggers
    another Abort due to lazy page mapping
  • Page Zero Abort handler checks for Aborting address=0 with High Vectors
    which is a Branch Through Zero error caused by a PreFetch Abort
  • Page Zero Abort handler wasn't word aligning proxied writes
  • JIT modules._load_module wasn't ensuring the OS_Heap allocation was
    word aligned
  • OS_ServiceCall now Hypervised and calls 11, 12, 71 and claimed
    (fixes Boogie Buggy)
  • OS_Byte 19 now waits for 2cs if we're generating VSync, to prevent
    Hourglass_On from hanging the system and swap_disc no longer disables
    the fake VSync whilst swapping discs
  • IOC Abort handler was using words instead of bytes when reading
    register values
  • Abort handler was passing R14+4 instead of R14 when an unaligned
    Abort occurred outside of JIT space (fixes Wolfenstein 3D)
  • Blitter now enables IRQ/FIQ
  • IOC SSBC wasn't active in the IRQB mask (fixes Zelanites)
  • JIT OS_CLI no longer preserves flags (fixes BlowPipe, Hero Quest,
    Jahangir Khan Squash, Wolfenstein 3D keyboard response)
  • Page Zero abort handler rewritten to handle writeback and LDM with
    High Vectors (fixes Lemmings 2)
  • CLib qsearch and qsort are now hypervised (fixes AITD)
  • JIT STM Abort handler was flushing the cache, prior to checking if
    the CPU pipeline was about to be overwritten (fixes Drifter)
    (bug introduced in 2.54e)
  • JIT LDR/STR Rd,[PC],#<immed> and LDR/STR Rd,[PC, #<immed>]! weren't
    being checked
  • JIT LDR/STR wasn't switching Rd=Rn with writeback/post-indexing to
    pre-indexing
  • openmount wasn't loading the private word into R12
  • MiscOp 1 wasn't returning the correct result flag, causing disc
    change detection to fail (fixes Wolfenstein installer)
  • Writes now increase the disc sequence no.
  • 26bit module loader could load modules at unaligned addresses when
    inserting to RMA and wouldn't free the heap block if the initial
    allocation was unaligned
  • VIDC20 emulation wasn't checking if RO3.11 was being emulated and
    passing the write to the VIDC1->VIDC20 translator (fixes James Pond
    2+ when emulating RO3.11)
  • Wasn't storing VIDC1_CR on GPU builds for MODE extensions
Changes since 2.52:
  • GraphicsV 10/11 weren't passing palette changes through to RISCOS
  • GraphicsV 12 is no longer claimed and passed to RISCOS instead
  • Blitter switched to tripple buffering
  • GPU IO memory is now cacheable and bufferable
  • DA2 is now cacheable and bufferable
  • Unaligned LDR, LDM, STM, SWP now supported
  • SoundTrackers made ARMv7 compatible:
    DTT
    QTM
    TrackerMod
    TrkPly2QTM
    VoxLib
  • blit_update_VIDC was changing the GPU/IO memory when the screen width
    and height weren't changing
  • JIT Abort handler for SWP wasn't updating Rd correctly
  • CacheOp's now use OS_MMUControl 2 functions for cache cleaning on RO5.23
  • Cache line size is now acquired via OS_PlatformFeatures 33 on RO5.23
  • GOARM3JIT was crashing on RO3.71 (bug introduced in 2.52p)
  • Wasn't RMReIniting ADFS on RO3.11 (bug introduced in 2.52p)
  • ADFEject now issues *DISMOUNT to cure Ambiguous disc name issue
    (fixes Flashback)
  • Most * commands are now using relative variable addressing
  • OS_DynamicArea 2,2 now returns RO3.1 addresses if screen memory remapped
  • JITMEMORYA wasn't skipping spaces before the optional Module name
  • Managed Channel Handler wasn't setting the linear-to-log and log-scale
    tables
  • Page Zero values added to Page Zero Abort handler:
    CursorFudgeFactor
    VertAdjust
    HSWRSoftCopy
  • SWI handler wasn't detecting sound SWI's correctly (bug introduced in
    2.53g)
  • ADFFS SWI handler was corrupting R12
  • Service handler would corupt R7 on a MODE change on IOMD (bug
    introduced in 2.53h)
  • Entry_ADFBootFloppy wasn't setting R12 correctly if called via CallBack
  • map_screen_memory / unmap_screen_memory switched back to use
    OS_MMUControl to flush the TLB's as ARMop14/15 don't seem to always
    work
  • JIT Abort Handler wasn't cleaning the cache for STM correctly
  • Abort handler wasn't correcting R14 when passing unaligned memory
    accesses in screen memory to the JIT Abort handler
  • _fifty_hz_ticker now triggers a VSync with IRQ off (fixes SWIV)
  • data_abort now checks FSR for an alignment error before forwarding
    Aborts to JIT_abort_handler
  • OS_ReadVduVariables wasn't returning the correct address if called via
    a hypervised SWI (fixes Ballarena)
  • Abort handler wasn't checking bit 10 of FSR was 0 before handling the
    Aborted instruction (fixes Axis)
  • blit_update_VIDC was corrupting the stack if the screen width and height
    hadn't changed (bug intruduced in 2.53h)
Changes since 2.51:
  • GraphicsV 5 now claimed and cursor changes copied to 1F03800
  • Blitter now blits the mouse cursor if its enabled via GraphicsV 5
  • GraphicsV now exits immediately if in "WIMP" mode or MODE unknown
  • MEMC Sound DMA is now copied as a 1:1 copy to the sound buffer
    (fixes Diggers - may break No Excuses, Rockfall and Rotor)
  • hv_ADFFS_BASICSys and the JIT SWI interpreter now forward Wimp_*
    SWI's on untouched (fixes KerBang)
  • Moved IOC IRQ stack to a DA
  • JIT OS_Memory 9 now returns &3500000 for VIDC20 instead of the actual
    address (fixes Lemmings 2 on RO5 emulating a RO3.71 machine)
  • JIT OS_CallSWI/R12 weren't passing the SWI# on after SWI flag
    preservation was added
  • OS_Byte 19 was corrupting the CPSR (bug introduced in 2.51l)
  • JIT vector Hypervisor code wasn't allowing vectors to be claimed
    (bug introduced in 2.51h)
  • Corrects OS_SpriteOp 52 R7=-1 to R7=0
  • GOARM3JIT <addr>;... now allows multiple parameters to be passed
  • _find_MODE was ignoring shadowed MODE's
  • Service_ModeExtension now translates VIDC Type 0/1 Lists to Type 3
  • OS_UpdateMEMC wasn't being handled if raised by JIT created code
    (bug introduced in 2.51)
  • Removed LCDGameModes for VIDC20 as it wasn't correcting the video
    parameters at the correct time. ADFFS now uses the default RO3.1
    VIDC1 parameters after a MODE change
  • JIT OS_ClaimProcessorVector now ignores vector 1 claims and reports
    all others for RO3.5+, below RO3.5 it returns the appropriate error
  • JIT CPUID now returns an ARM710 if emulating RO3.5 or above
  • swap_disc was restarting the VSync counter, instead of just
    registering the RTSupport triggered VSync
  • JIT various IOC references where using the wrong address on a GPU
  • JIT OS_ReadModeVariable was returning the wrong values
  • OS_Module was corrupting the stack when checking for essential
    Modules (bug introduced in 2.51c)
  • Replaced all MSR x_all, #<immediate> with appropriate code on ARM610/710
  • JIT OS_File was corrupting the stack (bug introduced in 2.51b)
  • GOARM3JIT was flagging the JIT as active before it was fully setup
  • GOARM3JIT was resetting memory before the CODELET pointers were setup
  • hv_reset_memory_block now actions its cache flush before exit
  • JIT OS_ReadModeVariable wasn't preserving C
  • Abort handler now passes Page Zero read/writes it can't handle to
    the OS for ZeroPain to report
  • Added power saving to OS_Byte 19 on non-IOMD
  • CTRL-SHIFT-Left/Down/Right arrows force audio left/stereo or right
  • Blitter now clips the mouse pointer at all screen edged
  • ADFRemapVideoMemory wasn't unmapping video memory on shutdown
  • map and unmap RO3.11 screen memory now flush the TLB correctly
  • JIT OS_Claim/ReleaseDeviceVector weren't allowing T0 to be claimed
  • Blitter now corrects the aspect ratio for non-square pixel modes
    eg. MODE 48 - 320 x 480 is stretched to 640 x 480
    MODE 15 - 640 x 256 is stretched to 640 x 512
  • Hardware mouse pointer is now turned off before the GraphicsV
    driver takes over
  • *POINTER 1 is issued after the GraphicsV driver takes over to reset
    the pointer palette
  • Blitter VIDC20 MODE parameters are now setup during Service_ModeChanging
  • Blitter now enables IRQ/FIQ whilst blitting
  • CLib atexit wasn't returning within 26bit address space
  • Create_Flopy_DynamicArea was hardcoded to 2048KB max, it now uses
    value from ADFFS$FileSizeLimit
  • Sound Scheduler was causing an Abort during initialization
  • Moved 26bit Module stack to a DA and unified all DA code into one place
  • Changed all LDR Rx,[Rx] to LDR Rx,[Rx,#0] for Cortex compatibility
  • JIT added compile flag to use RO5.23 ARMop's instead of direct CPU Op's
  • screen_memory_remapped wasn't being set after a MODE change correctly
  • L2PT_set_cache / L2PT_clear_cache would get stuck in an infinate loop
    of one of the L2PT entries doesn't exist
Changes since 2.50:
  • JIT EnvTime now handled by Page Zero handler
  • OS_SynchroniseCodeAreas now flushes JIT space as well
  • JIT Wimp_SlotSize now tracks and returns the size the app is expecting
  • JIT OS_CallASWI / OS_CallASWIR12 are now hypervised
  • JIT hv_OS_CallASWI was using R9 instead of R10 for the SWI#
  • JIT writes to EnvString in page zero are now proxied
  • writes to EnvString up HIGH are now proxied on RO5
  • JIT Added 26bit Module support
  • JIT OS_FSControl wasn't managing the return of Utilities
  • ExSound wasn't playing music
  • JIT OS_File was failing if R0 bit 31 was set (flush cache)
  • JIT CLib atexit support added (used by Inferno)
  • JIT CLib _kernel_swi and _kernel_swi_c were corrupting R12
  • JIT LFD / STF were restoring R0 from the wrong location
  • JIT added basic WIMP support
  • Now tracks the current task ID, recoded most SWI handlers to check it
  • Screen memory remapping is now turned off when switching to MODEs it
    doesn't support
  • ADFRemapScreenMemory can now start in WIMP mode where it wont change
    MODE or alter DA2's size
  • OS_FSControl was corrupting the environnment string if the file being
    run was compressed
  • JIT CLib _kernel_osfile wasn't returning to the correct address
  • Added an DA for the IRQ Stack when the JIT isn't running, it's used
    when generating sound device 9 IRQ's
  • Request VecPtrTab from the OS on RO5.23+
  • Abort handler was checking against jit_appspace_end instead of
    jit_slotsize when deciding to keep the Abort or pass to the OS
    (fixes lazy task swapping under RO5)
  • JIT Copro CP15 instructions are now handled
  • JIT call_device_claimant was passing the actual IOMD base address
    instead of the RO3.11 IOC base address
  • Prefetch Abort handler now checks for prefetches in appspace and
    passes them to the OS (allows lazy page swapping)
  • ADFPause - pause N centiseconds
  • ADFVoices - sets the number of sound voice channels
  • All checks for emulating a specific RISCOS version now also check
    the current task matches is one ADFFS is covering
  • OS_SpriteOp 3 turns the cursor off when emulating pre RO3.50
  • JIT SWI flag preservation
  • JIT added IOC T0 (Zelanites alters it)
  • Moved OS_CallASWI / OS_CallASWIR12 code out of the SWI handler
  • JIT added workaround for 80321 errata 7
  • Changed most uses of CPSR_c and CPSR_cf to CPSR_all to fix physical
    SA support
  • JIT OS_Release / OS_RemoveTickerEvent weren't clearing down the stack
    if a matching claim wasn't found
  • JIT OS_File now preserves SPSR to allow re-entrance via FileV (fixes
    The Dungeon)
  • JIT moved JITMEMORYA replacement table to an RMA claim
  • JITMEMORYA now allows Modules to be patched at runtime
  • GOARM3JIT wasn't releasing the temp heap allocation for BASIC correctly
  • dontexit_SWI_veneer was stacking R14 on the wrong stack on 26bit OS
  • Sound_InstallVoice / Sound_RemoveVoice moved from the Hypervisor SWI
    handler to the SWI Vector handler to capture uses in BASIC
    (fixes The Dungeon)
  • Added additional validation to FSControl_Run for non Absolute's
  • Added a domain ID check to the Data Abort handler for Wimp support
  • Vstart is now initialized on a MODE change
  • L format floppies now read correctly, bug introduced in 2.38b
  • JIT Modules are entered with flags cleared
  • IRQ Handler stack moved to DA
  • GOARM3JIT now clears down the stack prior to calling USER code and
    exits via OS_Exit
  • post_SWI_veneer now only sets V to preserve flags on 32bit
  • JIT OS_Byte 19 now forcibly clears C (bug in RO below 5.x)
    (fixes Cascade)
  • OS_SpriteOp 36 corrects R6=-1 to R6=0 if emulating up to RO3.8 behaviour
    (fixes The Last Ninja)
  • JIT Abort handler now preserves the next instruction if its been
    overwritten (fixes Drifter)
  • JIT BASIC SYS command now hypervised
  • JIT Vector claims no longer require a codelet and have been moved to
    an internal jump table
  • Service_ModeExtension was passing the wrong address for VIDC20 when
    translating type 0/1 Mode Extensions
  • JIT OS_Module 18 returns the 26bit Module address (fixes Hero Quest)
  • QTM updated to work if IRQ's are disabled (fixes Hero Quest)
  • swi_OS_FSControl wasn't restoring SVC C/SPSR on return from a Utility
    causing any Utility that runs a file to potentially fail
  • JIT OS_BreakCtrl, OS_Control and OS_ReadSysInfo now hypervised
  • VIDC20 palette register writes weren't updating the GPU palette correctly
  • JIT OS_ReadModeVariable 6/7 hypervised
  • Service_PreModeChange no longer changes the MODE # if a matching RO3.11
    MODE is found (fixes Alone in the Dark)
  • irq_handler was passing the actual IOC address, instead of the original
    Arc IOC address when running on RO5 SA (fixes James Pond II)
  • Slow sectors weren't checking IRQ's are enabled when waiting on
    OS_ReadMonotonicTime (fixes James Pond II+ on RO5)
  • Changed OS_Byte 19 to preserve IRQ status around its VSync delay
  • blitter now centres the image correctly on a GPU
  • OS_Word 21 0 - OS_Byte 19 now called after OS_Word 21 (fixes cursor
    in Manchester United / Europe)
  • VIDC1/20 cursor palette changes are now translated into GraphicsV 10
    on a GPU
adffs255b.zip
(770.21 KiB) Downloaded 105 times
NOTE: You must have !SparkFS loaded and use "Boot floppy" to run a game. If you don't, you could end up with a machine that isn't bootable, as some games try to alter the CMOS. Provided "Boot floppy" is used, ADFFS will prevent games from altering both the CMOS and unplugging modules.
DO NOT try to run a game by launching it's Icon - it will almost certainly damage your machine.

Re: ADFFS 2.55 beta

Posted: Sat May 21, 2016 11:15 pm
by richw
I have given this a quick blast on a Pi model B+, with a RISC OS image from about a month ago. Following the instructions above re. AnyMode and the CONFIG/TXT file resulted in it all 'just working'. I was convinced that I would need to select an MDF, but it seems OK without. I shall try and do some more comprehensive testing.

Re: ADFFS 2.55 beta

Posted: Tue May 31, 2016 6:03 pm
by andretim
I completely forgot to report about it, but after your announce on the ROOL site, I just gave it a quick test on my PI 3 with a few games.
Rockfall worked perfectly for the 4 or 5 levels I played.
Lemmings 2 is working too but I got stuck on the disc change until I reread the instructions carefully and removed the "/jfd" extensions from the disc files. I should be easy to modify ADFFS to take into account the possible presence of these extensions for the disk swap.

Re: ADFFS 2.55 beta

Posted: Tue May 31, 2016 6:19 pm
by JonAbbott
andretim wrote:I completely forgot to report about it, but after your announce on the ROOL site, I just gave it a quick test on my PI 3 with a few games.
Rockfall worked perfectly for the 4 or 5 levels I played.
Lemmings 2 is working too
Excellent news, thanks for reporting back. I don't believe Lemmings 2 works on the Pi 2, which definitely points to an errata as I suspected.
andretim wrote:modify ADFFS to take into account the possible presence of these extensions for the disk swap.
Funny, I was thinking exactly the same thing yesterday after renaming about the N thousandth JFD file :(

I'll look into it, I'm sure I've tried it previously and had to back it out - can't remember why though.

EDIT: Coded and working for the next release