Difference between revisions of "83Plus:BCALLs:50EC"
From WikiTI
m (error handler stuff is wrong) |
|||
Line 5: | Line 5: | ||
'''BCALL Address:''' 50EC | '''BCALL Address:''' 50EC | ||
− | '''Minimum OS Version:''' 2. | + | '''Minimum OS Version:''' 2.21 |
Calls a function directly, by offset, or by name within a compatible Flash application. | Calls a function directly, by offset, or by name within a compatible Flash application. |
Latest revision as of 02:12, 3 May 2007
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