Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
software:upi_conventions [2016/06/14 10:12] ex_writer [User-Defined Subroutines] |
software:upi_conventions [2016/06/14 10:20] ex_writer [User-Defined Subroutines] |
||
---|---|---|---|
Line 125: | Line 125: | ||
From system BIOS: | From system BIOS: | ||
- | <code>If the call index provided is negative [or from $ff through $80] then the users dispatch table pointer (USERTB) is used [also UMARGT]. Note that the sign bit isn't zapped before being used as an index, this means that the users dispatch table pointer should point 128 bytes before the first entry.</code> | + | <code>The UPI has been extended to support user-supplied routines. If the call index provided is negative [or from $ff through $80] then the users dispatch table pointer (USERTB) is used [also UMARGT]. Note that the sign bit isn't zapped before being used as an index, this means that the users dispatch table pointer should point 128 bytes before the first entry.</code> |
- | === Example === | + | Also: |
- | <code z80> | + | |
- | LD HL,USERMT-64 ; WHERE USERMT POINTS AT | + | <code> |
- | LD (UMARGT),HL | + | THE UPI HAS BEEN EXTENDED TO PROVIDE USER PROVIDED |
+ | ; SYSTEM ROUTINES. IF A NEGATIVE CALL INDEX IS ENCOUNTERED | ||
+ | ; BY THE INTERPRETER, AND 'SUCK INLINE' IS OPTIONED, THE | ||
+ | ; USER MACRO ROUTINE ARGUMENT TABLE IS INDEXED FOR A | ||
+ | ; PARAMETER MASK. THE ADDRESS OF THIS TABLE IS ASSUMED | ||
+ | ; TO BE IN (UMARGT),(UMARGT+1). THIS POINTER SHOULD | ||
+ | ; POINT 64 BYTES BEFORE THE FIRST REAL ENTRY. | ||
+ | ; I.E. LD HL,USERMT-64 ; WHERE USERMT POINTS AT the USER's Macro Table | ||
+ | ; LD (UMARGT),HL | ||
</code> | </code> | ||
+ | |||
+ | ---- | ||
The user must set up the subroutine as follows: | The user must set up the subroutine as follows: | ||
^ Location ^ Function ^ | ^ Location ^ Function ^ | ||
- | | 4FFB/4FFC | (Base address of register load specifications) - 40H | | + | | 4FFB/4FFC (UMARGT) | (Base address of register load specifications) - 40H (64D) | |
- | | 4FFD/4FFE | (Base address of subroutine jump table) - 80H | | + | | 4FFD/4FFE (USERTB) | (Base address of subroutine jump table) - 80H (128D) | |
The user is responsible for storing the addresses of these tables into dedicated system RAM cells. | The user is responsible for storing the addresses of these tables into dedicated system RAM cells. |