User Tools

Site Tools


technical_details

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

technical_details [2017/07/03 20:52] (current)
z00m created
Line 1: Line 1:
 +====== SDCC framework - technical details ======
 +
 +===== Framework content =====
 +
 +
 +==== C start up code ====
 +(c_programs/​c_support/​crt)\\
 +Coded in as-z80 assembler.\\
 +
 +  * save FLOS stack ptr
 +  * save ptr to command line args
 +  * set own stack
 +  * call gsinit (init global C vars)
 +  * call main()
 +  * restore original FLOS stack ptr
 +  * exit to FLOS, with exit code returned by main()
 +
 +
 +==== OS interface - asm proxy ====
 +(c_programs/​c_support/​os_proxy)\\
 +Coded in pasmo assembler.\\
 +
 +Have a “data exchange” area (between C and asm code) at offset 0. (area len is $20 bytes)\\
 +Actual code start at offset $20.\\
 +
 +For each FLOS procedure:​\\
 +
 +  * push all regs
 +  * get args from “data exchange” area to z80 regs
 +  * call FLOS
 +  * store returned values from z80 regs to “data exchange” area
 +  * pop all regs
 +
 +Compilation process:\\
 +
 +  * proxy source code flos.asm compiled to flos.asm.bin
 +  * flos.asm.bin (binary) converted to flos_proxy_code.c (C source code)
 +  * flos_proxy_code.c compiled and linked to user program, at address $5080.
 +
 +//Note:// To link to absolute address, SDCC want a separate C file, with separate segment. That's why we need to generate separate source file flos_proxy_code.c\\
 +(For conversion from binary to C source file, xd.exe utility used.)\\
 +
 +==== OS interface for C ====
 +(c_programs/​c_support/​os_interface_for_c)\\
 +This is a C file, which contain FLOS C functions.\\
 +
 +Each function do the following:​\\
 +
 +  * copy function arguments to “data exchange” area
 +  * call “asm proxy”
 +  * copy returned results from “data exchange” area to C vars
 +
 +//Note:// For now, not all FLOS calls have equivalent C functions, but I plan to add missing functions.\\
 +
 +The call chain is:\\
 +
 +  * user program call C function in “OS interface for C”
 +  * “OS interface for C” call “asm proxy”
 +  * “asm proxy” call FLOS code
 +
 +==== Current status ====
 +
 +  * number of C FLOS function implemented:​ about 30 (see inc\os_interface_for_c\i_flos.h for complete list)
 +  * asm proxy compiled size: about 1,8 KB
 +
 +The content of “obj” folders is auto generated by SDCC compiler and linker.\\
 +
 +==== Executable file map ====
 +
 +Start address 5000.\\
 +^Offsets in file^Description|
 +|0000|C start up code|
 +|0080|asm proxy|
 +|0080|asm proxy - “data exchange” area|
 +|00a0|asm proxy - actual code|
 +|CODE|start of code|
 +|DATA|start of data|
 +
 +(you set CODE and DATA values and also STACK value, in your project Makefile)\\
  
technical_details.txt · Last modified: 2017/07/03 20:52 by z00m