Difference between revisions of "83:OS:ROMPage0C"
(Lots more documentation, mostly about indirect ROM calls.) |
m (Ugly spacing is ugly) |
||
Line 1: | Line 1: | ||
[[Category:83:OS Information|ROM Page 0C]] | [[Category:83:OS Information|ROM Page 0C]] | ||
− | |||
This ROM page is loaded as soon as an ASM program is launched. | This ROM page is loaded as soon as an ASM program is launched. | ||
Revision as of 03:17, 13 December 2015
This ROM page is loaded as soon as an ASM program is launched.
Contents
Structure
Direct Calls, 4000 to 4F0B
Here is the ROM Call jumptable, which looks like this :
call 0033 ret call 010F ret call 011B ret call 111F ret ...
... seldom having some jumps instead of calls.
Indirect ROM Calls, 4F0C to 51F2
At 4F0C, the ROM Calls start to look like this :
push af ld a,XX ld (80C8),a pop af jr 5188
Calling a routine that uses the above format in the jump table loads a table index in ASM_IND_CALL (80C8), then goes to one of two handlers. The jr address calls either PARSER_EXEC (for addresses between 4F0C and 50A9) or GRAPH_EXEC (between 510A and 51E6). PARSER_EXEC goes to page $09 and GRAPH_EXEC goes to page $04. After calling a routine in one of those two ranges, the OS calls a handler on the corresponding page that adds 2*(80C8) (memory addresses are two bytes) to the start address of the address table, puts that value on the stack, and rets to that address.
There is a region between 50B2 and 5109 that contain normal calls, like those around 4000. GRAPH_EXEC, PARSER_EXEC, and IO_EXEC are also normal calls.
51F3 to 52E8
This has code that has something to do with something, maybe parsing/handling/executing nostub assembly?
52E9 to 7FFF
This part only has FF FF FF FF FF ... until the end (7FFF).