83Plus:BCALLs:50EC
From WikiTI
Synopsis
Official Name: RunAppLib
BCALL Address: 50EC
Minimum OS Version: 2.30
Calls a function directly, by offset, or by name within a compatible Flash application.
Inputs
- A = 0: call routine directly
- B: Flash page of routine
- DE: address of routine
- A = 1: call routine by offset
- B: Flash page of table pointer
- HL: address of table pointer (this is the output from FindSpecialAppHeader)
- DE: zero-based function to call (0000h, 0001h, 0002h, etc.)
- A = 2: call routine by name
- B: Flash page of table pointer
- HL: address of table pointer (this is the output from (FindSpecialAppHeader)
- OP1: zero-terminated name of function to call. This can be the same as the application or all uppercase.
Outputs
- None
Destroys
- All
Comments
You must search for a Flash application using FindSpecialAppHeader with DE = 1 before BCALLing this. When an application is found, HL will be the input to this routine. B must be the base page of the application.
When A = 1, push the address of an error handler before BCALLing this routine. If there are problems, the BCALL will return to your error handler.
The format of the table data for the Flash application is below.
DW wNumberOfEntryPoints DB "Call1",0,0,0 ;make sure this fills 8 bytes DW wCall1Address DB "Call2",0,0,0 ;make sure this fills 8 bytes DW wCall2Address ... DB "LastCall" ;make sure this fills 8 bytes DW wLastCallAddress
OS 2.41, at least, has inactive code which uses this and searches for "IsDevice".
Example
Call routine "IsDevice" from Flash application "MyApp":
ld hl,sMyApp rst 20h ld de,1 B_CALL FindSpecialAppHeader ret nz push hl push bc ld hl,sIsDevice rst 20h pop bc pop hl ld a,2 B_CALL RunAppLib ret sMyApp: DB AppObj,"MyApp",0 sIsDevice: DB "IsDevice",0