============================================================================
== MorphOS/AROS/AmigaOS4.x System Information Collector 0.02 ==
== to fix 'VirusZ' and 'xvs.library' for such systems ==
============================================================================
== Copyright © 2021 by Georg Wittmann (formerly Hörmann) ==
============================================================================
After 15 years of doing absolutely nothing on my Amiga, and many people
asking me again and again if I would like to release the sourcecodes of
VirusZ and xvs.library, I now have decided to do so...
But before that, I finally want to fix VirusZ and xvs.library for MorphOS,
AROS and AmigaOS 4.x systems, and therefore I need some help as I actually
don't have any of these systems (only AROS inside WinUAE as m68k version).
So this is why I've written this small tool here. MAA4SIC just collects
information about your system and dumps that to your Shell window. Just
redirect the output to a file and send it to schorsch.wittmann gmx.de if you
are running on MorphOS, AROS or AmigaOS 4.x.
----------------------------------------------------------------------------
For advanced users/coders/developers who want to help me out: Here's what I
know and don't know about the systems after studying the SDKs and the
assumptions that are currently made by MAA4SIC...
MorphOS
-------
This is the best supported Amiga-like system by VirusZ and xvs.library as
Harry Sintonen helped me a lot with that stuff back in 2004. But as I don't
know if my old stuff is still up-to-date, MorphOS will be scanned for some
information too.
First of all, we are looking for a romtag called "MorphOS" with
FindResident(), inside which we find the version and revision (if
RTB_EXTENDED is set) of the MorphOS system.
Then we are scanning the ResModules from ExecBase and look for locations
$f80000-$1000000 (Kickstart), $10100000-$10800000 and $10800000-$11000000
(A-Box modules). Additionally we use NewGetSystemAttrsA() with
SYSTEMINFOTYPE_MODULE_START and SYSTEMINFOTYPE_MODULE_SIZE to confirm the
location of the A-Box modules (if available).
What I still don't know about MorphOS:
- Are there MorphOS systems that run on real Amigas? I currently assume we
are on a Pegasos if MaxLocMem in ExecBase is 0, but on which other systems
this is the same? And are there any systems with MaxLocMem not 0? Maybe
anyone can tell me...
- If a Kickstart is present, is this a normal Amiga Kickstart (size = 512kB)
or any other MorphOS-specific collection of romtags?
- What is inside the A-Box modules and are there any fixed things like
version numbers, sizes etc.? On Amiga ROMs, we have the size at $ffffec
(-$14 from the end of the ROM) and the version/revision at $c/$e from the
beginning.
- Is a Kickstart m68k code and the A-Box native code of the machine we run
on or is everything native and only emulated for m68k programs inside their
bubble?
- MorphOS uses bit 31 to link ResModules, so they are fixed inside the first
2 GB of address space?
AROS
----
First we are looking for 'aros.library' v41+, then we call ArosInquireA() to
get some system info:
AI_ArosVersion seems to deliver the version of aros.library, not of the ROM
itself
AI_ArosReleaseMajor is 1 on my system
AI_ArosReleaseMinor is 12 on my system, so we have AROS 1.12
AI_ArosReleaseDate, AI_ArosBuildDate, AI_ArosVariant and AI_ArosArchitecture
are not really important
AI_KickstartBase, AI_KickstartSize, AI_KickstartVersion and
AI_KickstartRevision unfortunately deliver 0 on my system
After that, we scan the MemList from ExecBase for entries called 'Kickstart
ROM', here we find 2 entries on my system, $f80000-$1000000 and
$e00000-$e80000 that hold the two parts of the AROS kickstart.
What I don't know about AROS:
- Are the addresses of the ROMs fixed at $f80000 and $e00000 or can there be
different values on other machines than Amigas?
- At $c/$e from the beginning of my ROM, we have version 46.12. Is that
value really used by AROS or just there to be Amiga-compatible as all AROS
ROMs I've found have this same value?
- Although I have chip.memory in WinUAE from $0-$200000, and AROS creates a
MemList entry for this, MaxLocMem in ExecBase is 0. Is that a normal
behaviour? Is MaxLocMem always 0 inside AROS? Or does that indicate
something?
- AROS links ResModules using bit 0 instead of bit 31 on m68k-machines, too?
Or only on other machines?
- Is the assumption that MemList entries called 'Kickstart ROM' are what
they are called correct? Are there other similar definitions on other
machines? Are there other parts of the system in other locations?
AmigaOS 4.x
-----------
We are looking for exec.library v50+ and assume AmigaOS 4.x if no MorphOS or
AROS has been detected before (v50-v52 is AmigaOS 4.0, v53 is AmigaOs 4.1).
Then we look for 'biosversion.resource' and read the following values to
find out about the version we are really running on: bvr_Version,
bvr_DecodedMajor, bvr_DecodedMinor and bvr_DecodedPLevel
As 'biosversion.resource' doesn't seem to be present on all systems, we
additionally look for 'version.library' which is present on all AmigaOS
versions. But this indicates the Workbench version only, I guess? Are
there any more (un)documented definitions or functions inside
'version.library' on OS 4.x?
Other information I got so far from different people (thanks a lot!):
Which Kickstart modules are loaded at boot-time is determined inside
'Kicklayout' file and the .kmod-files in Kickstart drawer. So the
ResModules from ExecBase originate from those .kmod-files, but they not
necessarily have the same names (eg. 'kernel' creates exec.library).
How can I find out in a running system where all the Kickstart modules are
really located (other method than scanning ResModules which doesn't tell me
real start and end addresses)? Are the modules in one big memory block or
just allocated one by one while being loaded by the main kernel? Thus could
there be other parts of the system or 3rd-party programs between Kickstart
modules?
From different log-files I already got from MAA4SIC 0.01 I saw that most
ResModules are located one after the other in a common memory area, but
others like device drivers are located in another memory region.
Can the Kickstart modules be recognized via Exec's MemList (like 'Kickstart
ROM' in AROS)?
Is there any public information about 'kernel' RomTag? And could this be
used to determine Kickstart version?
Thanks in advance for any help...
----------------------------------------------------------------------------
Version 0.02:
- fixed bug in OS 4.x code, biosversion.resource information wasn't printed
in 0.01 :-(
- increased the number of max. ResModules in Exec output, 100 seems to be
reached easily with the newer OS versions...
- added a short dump of begin and end of A-Box modules on MorphOS systems
- added search for version.library to OS 4.x code
- improved output of ResModules, added more information
- added output for Exec-> MemList entries
============================================================================
|