83Plus:BCALLs:50EC
From WikiTI
Synopsis
Unofficial Name: RunAppLib
BCALL Address: 50EC
Minimum OS Version: 2.21
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.
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