The SDK and the manual to go with it were produced at the same
time - inevitably some inconsistences cropped up, for which we
apologise. These are the ones we've spotted so far, and corrections.
Page |
Correction |
4 |
after 'To start an Amiga session, run this command'
insert 'intent_shell'
and delete the next four lines up to but not including 'This command loads...'
So now it reads:
To start an Amiga session, run this command:
intent_shell
from any directory other than the root.
This command loads...
|
26
|
The term TRACF, second word in the penultimate paragraph of the 'High Level Macros' section, should be 'TRACEF'
|
28
|
The first code example has the wrong type of bracket at the end:
qcall lib/abs,{d0 : d1]
should be
qcall lib/abs,{d0 : d1}
Tao feel the following text could usefully be elucidated:
"The VP translator automatically keeps a copy or re-uses the register, depending on the format of the call, not that of the tool."
In other words, register names are just symbols, and registers are renumbered on both the call and the return. The caller's d0 or d1 (depending on the example) will be overwritten by the return value from lib/abs, which is called d0 inside lib/abs but could correspond to any register outside the call, depending on the format of the call, rather than the code within the tool.
The first example qcall is thus equivalent to writing d1:=abs(d0); in Ada, Algol, C, Modula or Pascal, D1=ABS(D0) in BASIC or Fortran.
The second is more like FABS FP0 in 68K assembler. The PPC equivalent instruction 'fabs' always puts the result in a different register, but the 68881/882/040/060 allows one or two operands, with the single-operand version by far the most commonly encountered.
|
31
|
VP Quick Reference Guide
The instructions 'go' and 'gos' can take a pointer or expression as a parameter as well as a label, so the types should be 'tp' not just 't', to confirm the implication of the discussion on page 27:
gos tag tp goto, unconditional jump
gos tag tp gosub, subroutine call
For example:
gos p0
gos [table+(i0*4)]
|
49 |
Incomplete sentence '...before and can , Multithreading ...' Delete 'and can ,' (whoops) and insert a '.' in its place. |
71 |
In penultimate paragraph, delete all text from 'Optimisation of C++' to '...optimisation is specified.'
|
124
|
The examples on pages 127 as well as 124 can be simplified.
In the example for "hello world", you no longer need to qcall
lib/exit if you don't need to return an exit status to the shell. The final 'ret' returns to the caller which calls lib/exit for you.
|
127
|
Elucidation about the call to argcargv at the top of the page.
qcall lib/argcargv,(-:p0 i0)
This call no longer has to be "directly after the ent directive and before any application specific code". It is an ordinary tool and can be used at any time.
"an integer to hold the number or arguments (argc)." would be better described as "an integer (argc) which is the number of parameters in the argv block."
param0 param1 param2
argc = 3 ^ ^ ^
argv ----> argv[0] -----| | |
argv[1] ------------| |
argv[2] -------------------|
NULL
The reference to Qcall before the heading 'Non-primary tools' should not start with a capital - it should be
qcall lib/exit(0:-)
- but note the comments regarding page 124 - this call may not be necessary at all.
On the last line of that page,
tool 'demo/example/hello2',VP,template
"VP,template" is optional. If missing, these are the defaults. Thus when defining normal tools in VP, you can write:
tool 'demo/example/hello2'
|
132
|
There is a fourth type of QCall - if the target tool is marked as embeddable the translator may embed the target tool directly in the calling tool's code. This typically increases the size of the calling tool but eliminates the overhead of the transfer of control to and from the target tool.
|
133
|
At the end of the paragraph headed 'They may be virtual' the word 'otherwise' has been mistyped as 'othewwise'.
|
277 |
'pnmtoilbm' should be 'ppmtoilbm' - it's a bitmap not an anymap |
|
address-suppressed, address-suppressed |