Trying to make sense of it
all, IRA the disassembler has been really help full to gives some clues;
by providing EQU constants for hardware registers, and some other
stuff I don't know what is.
It is worth to point out that any access to
hardware registers are illegal under AmigaOS4.1, unless your running
on old hardware, so we need to replace it whit system friendly code, so we need to look for
any references to this constants, that I have marked, and replace the
code.
Next thing that is a issue
is to understand what the code does, there are some clues, see the
lines that starts whit JSR, JSR is short for Jump To Sub Routine. In
front of A6 (address register 6), you have a negative value, this is
a offset value we call LVO, A6 is loaded whit library base address,
we just need to find what library and compare the LVO values to that
library offsets, LVO number are not unique to one library they can be
the same for number of libraries, so we can't just auto replace the
values whit constants.
Another thing that will
help making it possible to understand some thing is to look at bottom
of the code, this where you find data, like strings.
DC and DS is defines data
space, DC is for values you enter, while DS just reserves chunk of
space, it is the DC that we are most interested, in front of DC there
is label it represent a reference to the data, the label has been
generated by IRA disassembler and not human understandable, we need
to replace the label name whit some thing we understand, so we replace
LAB_0F71 whit LAB_STERO_LEVEL, and LAB_0F6B whit LAB_VOLUME_BOOST, we
do that for all readable strings, we most be careful to replace every
reference of LAB_0F6B and LAB_0F71.
Interesting read!
ReplyDeleteWell hopefully by writing some word here, I might inspire some one. Nobody need a classic Amiga to write code in 680x0 Assembly language, and it is possible to write system fremdly code in 680x0 Assembly language, so there is no excuse not doing so,
ReplyDelete