It could be reasonable to assume that applications
parameters match the parameters sent to addins. This is from the default
C-file from the SDK explaining the parameters:
Calling the functions below with 1 in r4 ('isAppli') seems to start
them in a state similar or identical to what the main menu does.
Scans the storage memory for G1A-files and updates the
addin array.
Example: copy a file from SD-card to storage memory, register addins and start
the new addin with App_Start.
Returns the next free addin slot (position in the addin
array, see RAM).
The addin array index starts with 0.
addinno is the index of an registered addin.
The first addin has the index 0.
Returns 1 if the addin with the required index exists, else returns 0.
If the addin exists, result is set to the pointer to the addin-header
increased by offset.
F. i. with offset = 0x1D4, result would contain a pointer to
the application's name.
addinno is the index of the addin to query.
estripno is the index of the estrp to query (0..5).
returns 1 if estripno is in the range 0..5.
returns 0 if not.
Returns the number of built-in applications.
Jumps to a registered application.
index is the index of the application. Starts at zero. The maximum
number of built-in applications can be retrieved with 0x46B.
The user apps start with the next number.
If force!=0, a consecutive start of the same addin is allowed!
R4 and R5 have to be zero.
An addin started from MAIN MENU cannot be restarted immediately after is has
been finished, t. i. not staying in a while(1)...GetKey()...loop.
This allows an immediate restart:
short*APP_EnableRestart(){
short*pEnableRestartFlag;
switch
( OSVersionAsInt() ){
case 0x01020000:
case 0x01030000:
pEnableRestartFlag = (short*)0x88006970;
break;
case 0x01040000: case
0x01050000: case
0x01051000: pEnableRestartFlag =
(short*)0x88006974;
break;
case 0x01100000:
case 0x01110000:
pEnableRestartFlag = (short*)0x88006CC4;
break;
case 0x02000000:
pEnableRestartFlag = (short*)0x8800773C;
break;
default : pEnableRestartFlag = 0;
}
if (
pEnableRestartFlag ) *pEnableRestartFlag =
1;
return
pEnableRestartFlag;
}
Has to be called before returning from an addin.
Does not complain with R4=0 and R5=0. Further
investigation might be neccessary.
skips some normally displayed intermediate dialog
Does not complain with R4=0 and R5=0 and starts with "Simultaneous". Further
investigation might be neccessary.
This call is not rejected by the SDK emulator. Instead
it runs BASIC.
Does not complain with R4=0 and R5=0. Further
investigatione might be neccessary.
Displays "Condition error" with R4=0 and R5=0 but starts
anyhow.
Does not complain with R4=0 and R5=1 and enters GRAPH-app. Further
investigation might be neccessary.
Executes MEMORY's Optimization. If no SD-slot is present,
the optimization starts immediately. Otherwise, if the intermediate dialog
should be answered automatically, KBD_PutKey
has to push either '1' or '2' into the keybuffer beforehand.
The SD-slot can be detected with 0x468.
Example:
This piece cannot be called out of an storage-memory-addin without special
precautions; see SMEM_Optimitation for
details.
Does not complain with R4=0 and R5=0. Further
investigation might be neccessary.
Does not complain with R4=0 and R5=0. Further
investigation might be neccessary.
Displays "Dimension error" with R4=0 and R5=0 but starts
anyhow.
Does not complain with R4=0 and R5=1. Further investigation might be
neccessary.
(31.07.2012 06:04:15)