Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
software_library:compatibility [2020/02/15 03:46]
muaddib
software_library:compatibility [2020/09/01 07:39] (current)
muaddib [Discussion]
Line 13: Line 13:
   - The instruction cache in newer 68k CPUs does not reflect runtime code modifications in RAM.  If a program is running self-modifying code, it fails on newer CPUs.   - The instruction cache in newer 68k CPUs does not reflect runtime code modifications in RAM.  If a program is running self-modifying code, it fails on newer CPUs.
     * ✅ The Apollo 68080'​s smart instruction cache snoops code modifications in RAM, and updates itself accordingly.     * ✅ The Apollo 68080'​s smart instruction cache snoops code modifications in RAM, and updates itself accordingly.
-  - The data cache in newer 68k CPUs does not reflect DMA-based data writes done by the Amiga chipset (in chip RAM).  If a program is relying on chipset DMA, it encounters stale data in the cache and fails on newer CPUs. +  - The data cache in newer 68k CPUs does not reflect DMA-based data writes done by the Amiga chipset (in Chip RAM).  If a program is relying on chipset DMA, it encounters stale data in the cache and fails on newer CPUs. 
-    * ✅ If you have Core version < GOLD3: The Apollo 68080'​s data caching is disabled for the chip RAM region. [(similarity>​This is similar to how other Amiga models and accelerators solve the issue.)] +    * ✅ If you have Core version < GOLD3: The Apollo 68080'​s data caching is disabled for the Chip RAM region. [(similarity>​This is similar to how other Amiga models and accelerators solve the issue.)] 
-    * ✅ If you have Core version >= GOLD3 (as in the Vampire Standalone):​ The Apollo 68080'​s smart data cache snoops data writes done by the chipset (in chip RAM), and updates itself accordingly. +    * ✅ If you have Core version >= GOLD3 (as in the Vampire Standalone):​ The Apollo 68080'​s smart data cache snoops data writes done by the chipset (in Chip RAM), and updates itself accordingly. 
-  - In Amigas with no fast RAM and having an older 68k CPU without an instruction cache, ​a blitter operation consumes all memory cycles of the chip RAM, so the CPU can'​t ​execute instructions ​while a blitter ​operation is running.  ​Therefore, the subsequent ​blitter ​operation is guaranteed to be blocked ​until (at least) ​the current ​blitter ​operation has completed.  ​With the available memory cycles on fast RAM, or due to the instruction cache in newer 68k CPUs, this limitation ​is removed.  If a program is relying on the CPU being blocked while blitter ​operation ​is running, it fails on Amigas with fast RAM or newer CPUs, if the unblocked ​CPU re-programs the blitter ​mid-operation,​ for example. +  - A Blitter operation consumes most memory cycles of the Chip RAM.  So, in Amigas with no Fast RAM and having an older 68k CPU without an instruction cache, the CPU can'​t ​make much progress ​while a Blitter ​operation is running.  ​As a result, the subsequent ​Blitter ​operation is almost ​guaranteed to be delayed ​until the current ​Blitter ​operation has completed.  ​But with the available memory cycles on Fast RAM, and due to the instruction cache and higher speed of newer 68k CPUs, the CPU can make much more progress while a Blitter operation ​is running.  If a program is relying on the CPU being delayed during ​Blitter ​operation, it fails on Amigas with Fast RAM and having a newer CPU, if the unimpeded ​CPU reaches the subsequent Blitter operation and re-programs the Blitter ​mid-operation,​ for example. 
-    * ✅ If you have Core version < GOLD3: Most programs that rely on the legacy CPU behavior store their code in chip RAM.  If the Apollo 68080 starts executing program code from chip RAM, then it puts itself into "​turtle mode" automatically. ​ (You can also trigger turtle mode manually.) ​ In turtle mode, the CPU does not run too fast with respect to the blitter. [(This is not a perfectly-reliable fix.)] +    * ✅ If the Apollo 68080 tries to re-program the Blitter, the Vampire checks if a Blitter ​operation is already running. ​ If so, then the 68080 is delayed until the current ​Blitter ​operation is complete.
-    * ✅ If you have Core version >= GOLD3 (as in the Vampire Standalone): ​If the Apollo 68080 tries to re-program the blitter, the Vampire checks if a blitter ​operation is already running. ​ If so, then the 68080 is delayed until the current ​blitter ​operation is complete.+
   - Newer 68k CPUs simply run "too fast"​. ​ If a program is relying on the exact timing of CPU instructions,​ it fails on newer CPUs.   - Newer 68k CPUs simply run "too fast"​. ​ If a program is relying on the exact timing of CPU instructions,​ it fails on newer CPUs.
-    * ✅ Most programs that rely on the legacy CPU behavior store their code in chip RAM.  If the Apollo 68080 starts executing program code from chip RAM, then it puts itself into "​turtle mode" automatically. ​ (You can also trigger turtle mode manually.) ​ In turtle mode, the CPU does not run too fast.+    * ✅ Most programs that rely on the legacy CPU behavior store their code in Chip RAM.  If the Apollo 68080 starts executing program code from Chip RAM, then it puts itself into "​turtle mode" automatically. ​ (You can also trigger turtle mode manually.) ​ In turtle mode, the CPU does not run too fast. 
 +  - Amiga models other than the CD32 do not have the Akiko chip.  If a program is using Akiko C2P routines, it fails on Amigas other than the CD32. 
 +    * ✅ The Vampire 1200 V2 and the Vampire Standalone support all Akiko C2P routines. ​ (Akiko C2P is only useful for AGA-compatible Amigas.)
   - Newer AmigaOS versions have different internal (undocumented) behavior than older AmigaOS versions. ​ If a program is relying on the exact internal behavior of a particular OS version, it fails on newer OS versions.   - Newer AmigaOS versions have different internal (undocumented) behavior than older AmigaOS versions. ​ If a program is relying on the exact internal behavior of a particular OS version, it fails on newer OS versions.
     * ✅ The Vampire is compatible with all AmigaOS versions, and provides a variety of convenient ways to use older Kickstart versions.     * ✅ The Vampire is compatible with all AmigaOS versions, and provides a variety of convenient ways to use older Kickstart versions.
Line 40: Line 41:
   * We strongly recommend you to use [[http://​www.whdload.de|WHDLoad]] to run legacy software. ​ On the Vampire, a lot of WHDLoad'​s degradation features are superfluous,​ but still, WHDLoad provides a convenient way to perform degradation and use older Kickstarts. ​ It also allows floppy-based programs to be installed on hard disk, and even applies the appropriate patches to programs whose incompatibility problems can't be solved at the hardware/​firmware level.   * We strongly recommend you to use [[http://​www.whdload.de|WHDLoad]] to run legacy software. ​ On the Vampire, a lot of WHDLoad'​s degradation features are superfluous,​ but still, WHDLoad provides a convenient way to perform degradation and use older Kickstarts. ​ It also allows floppy-based programs to be installed on hard disk, and even applies the appropriate patches to programs whose incompatibility problems can't be solved at the hardware/​firmware level.
   * Make sure you are aware of the [[http://​www.whdload.de/​docs/​en/​bugs.html|bugs in WHDLoad]]. ​ Most importantly,​ on AmigaOS, you should disable the TCP/IP and USB stacks before running WHDLoad. ​ This can be automated by configuring startup and cleanup scripts in WHDLoad'​s global configuration file.  Example files: ''​[[http://​whdload.de/​docs/​WHDLoad.prefs|S:​WHDLoad.prefs]]'',​ ''​[[http://​whdload.de/​docs/​WHDLoad-Startup|S:​WHDLoad-Startup]]'',​ ''​[[http://​whdload.de/​docs/​WHDLoad-Cleanup|S:​WHDLoad-Cleanup]]''​. ​ (Note: This problem does not exist on AROS.)   * Make sure you are aware of the [[http://​www.whdload.de/​docs/​en/​bugs.html|bugs in WHDLoad]]. ​ Most importantly,​ on AmigaOS, you should disable the TCP/IP and USB stacks before running WHDLoad. ​ This can be automated by configuring startup and cleanup scripts in WHDLoad'​s global configuration file.  Example files: ''​[[http://​whdload.de/​docs/​WHDLoad.prefs|S:​WHDLoad.prefs]]'',​ ''​[[http://​whdload.de/​docs/​WHDLoad-Startup|S:​WHDLoad-Startup]]'',​ ''​[[http://​whdload.de/​docs/​WHDLoad-Cleanup|S:​WHDLoad-Cleanup]]''​. ​ (Note: This problem does not exist on AROS.)
 +    * If you are using the demo version of Roadshow, you must manually disable it before starting WHDLoad, so that you get a chance to dismiss the demo version'​s shutdown message.
   * If WHDLoad exits with an "NMI Autovector"​ error, enable the ''​NoAutoVec''​ option in ''​S:​WHDLoad.prefs''​.   * If WHDLoad exits with an "NMI Autovector"​ error, enable the ''​NoAutoVec''​ option in ''​S:​WHDLoad.prefs''​.
-  * If a program is running too fast, or it simply fails, then it might get fixed by putting the 68080 into "​turtle mode", so that it runs slower, like an older Amiga. ​ Most legacy programs that exhibit this problem store their code in chip RAM.  If the 68080 starts executing program code from chip RAM, then it puts itself into turtle mode automatically. ​ But if the program keeps its code in fast RAM, then you would need to trigger turtle mode manually. ​ There are two ways to do this: +  ​* If WHDLoad suddenly exits, use the ''​ChkInts''​ tooltype. 
-    - **Disable CPU caches**: This can be done in the Amiga Early Startup Control, or in a degrader tool, or using ''​[[:​system_tools:​vcontrol|VControl TURTLE]]''​. ​ (If you are using WHDLoad, you can use the ''​NoCache'' ​tooltype.) ​ The 68080's caches are fully backward-compatible,​ so they never need to be actually disabled When the user sends the signal to disable caches, the Vampire will not actually disable them.  Instead, the 68080 will go into turtle mode.  Note that some programs (or WHDLoad slavesmight re-enable the caches and bring the 68080 back out of turtle mode, so it is not possible to enforce this request with complete confidence. +  ​* If a program is running too fast, or it simply fails, then it might get fixed by putting the 68080 into "​turtle mode", so that it runs slower, like an older Amiga. ​ Most legacy programs that exhibit this problem store their code in Chip RAM.  If the 68080 starts executing program code from Chip RAM, then it puts itself into turtle mode automatically. ​ But if the program keeps its code in Fast RAM, then you would need to trigger turtle mode manually. ​ There are two ways to do this: 
-    - **Force program code into chip RAM**: This can be done by turning off fast RAM completely. ​ Fast RAM can be disabled by running ''​SYS:​System/​NoFastMem'',​ or by using a degrader tool.  (If you are using WHDLoad, you don't have to turn off fast RAM, because you can use the ''​ExpChip''​ tooltype to force program code into chip RAM.)  Once the 68080 starts executing program code from chip RAM, it will put itself into turtle mode automatically,​ as expected.  ​A program (or a WHDLoad slave) ​can'​t ​simply re-enable ​the fast RAM and relocate ​the program ​code there, so you can enforce this request with complete confidence. +    - **Set the ''​TURTLE''​ bit in the Processor Configuration Register**: This bit can be toggled on and off using ''​[[:​system_tools:​vcontrol|VControl TURTLE]]''​, or by pressing <​key>​F12</​key>​.  (If you are using WHDLoad, you can use the ''​ExecuteStartup'' ​and ''​ExecuteCleanup''​ tooltypes ​to run ''​VControl TURTLE''​.) 
-  * If a WHDLoad program ​is running slower than expectedthen it might be due to the slave disabling CPU caches, causing the 68080 to go into turtle mode accidentally.  To prevent this situation, you must stop the WHDLoad slave from disabling CPU caches, by using the ''​Cache'' ​tooltype.  (This is a known issue in the WHDLoad slave for the game "​Frontier:​ Elite II".) +    - **Force program code into Chip RAM**: This can be done by turning off Fast RAM completely. ​ Fast RAM can be disabled by running ''​SYS:​System/​NoFastMem'',​ or by using a degrader tool.  (If you are using WHDLoad, you don't have to turn off Fast RAM, because you can use the ''​ExpChip''​ tooltype to force program code into Chip RAM.)  Once the 68080 starts executing program code from Chip RAM, it will put itself into turtle mode automatically,​ as expected. 
-  * If you have Core version >= GOLD3 (as in the Vampire Standalone), you can press <​key>​F11</​key>​ to toggle scanlinesin order to get a video experience that is similar to old CRT monitors.+  * The 68080 is superscalar,​ meaning that it has two pipelines and can execute more than 1 instruction in parallel. ​ If an instruction in one pipeline attempts to modify an instruction in RAM, but that instruction has already entered the second pipeline, then the CPU can'​t ​detect ​the modification. ​ The second pipeline continues with the old version of the instruction, ​and the program ​fails.  ​This rare form of self-modifying code is used in some demosand in the networking software Envoy.  To get such programs to run correctly, you can use ''​[[:​system_tools:​vcontrol|VControl SUPERSCALAR]]'' ​to turn off the superscalar features of the CPU.  (If you are using turtle mode, then you do not need to do this, because superscalar features are automatically turned off in turtle mode.) 
 +  * If you want to run a CD32 program that uses Akiko C2P routines, you should use a Kickstart that contains ​the CD32 extended ROMso that Akiko C2P routines get initialized by the OS automatically. ​ If you can't do thisthen you can still initialize these routines manually, using ''​[[:​system_tools:​vcontrol|VControl AKIKO]]''​.
   * If you have Core version >= GOLD3 (as in the Vampire Standalone),​ the default chipset configuration is PAL, not NTSC.  But you can easily switch to NTSC mode from the Amiga Early Startup Control, or from a degrader tool.  (If you are using WHDLoad, you can use the ''​NTSC''​ tooltype.)   * If you have Core version >= GOLD3 (as in the Vampire Standalone),​ the default chipset configuration is PAL, not NTSC.  But you can easily switch to NTSC mode from the Amiga Early Startup Control, or from a degrader tool.  (If you are using WHDLoad, you can use the ''​NTSC''​ tooltype.)
-  * The Vampire patches ''​exec.library''​ to keep the lower 8 KB of chip RAM reserved, which is required by Macintosh emulators. You should not use any other patches that do the same thing. ​ For example, you should not use the ''​PrepareEmul''​ program that comes with ShapeShifter. ​ To prepare ​your Vampire'​s memory for ShapeShifter, you simply need to move the VBR to fast RAM.  You can do this with ''​[[:​system_tools:​vcontrol|VControl VBRMOVE=1]]''​ or with a tool like [[http://​aminet.net/​package/​util/​sys/​vbrcontrol|VBRControl]].+  ​* If you have Core version >= GOLD3 (as in the Vampire Standalone),​ you can press <​key>​F11</​key>​ to toggle scanlines, in order to get a video experience that is similar to old CRT monitors. 
 +  ​* The Vampire patches ''​exec.library''​ to keep the lower 8 KB of Chip RAM reserved, which is required by Macintosh emulators. You should not use any other patches that do the same thing. ​ For example, you should not use the ''​PrepareEmul''​ program that comes with ShapeShifter. ​ To complete preparing ​your Vampire'​s memory for Macintosh emulators, you simply need to move the VBR to Fast RAM.  You can do this with ''​[[:​system_tools:​vcontrol|VControl VBRMOVE]]''​ or with a tool like [[http://​aminet.net/​package/​util/​sys/​vbrcontrol|VBRControl]].
   * If you have a Vampire accelerator board connected to a classic Amiga, see "​Precision"​ under [[:​apollo_core:​fpu|68080 FPU Core]] for some compatibility concerns regarding software requiring an FPU.   * If you have a Vampire accelerator board connected to a classic Amiga, see "​Precision"​ under [[:​apollo_core:​fpu|68080 FPU Core]] for some compatibility concerns regarding software requiring an FPU.
  
Last modified: le 2020/08/02 12:37