<article>
<title>PC-Engine (TurboGrafx) System specific information for cc65
-<author>
-<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">
-<date>2015-07-14
+<author><url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">,<newline>
+<url url="mailto:greg.king5@verizon.net" name="Greg King">
+<date>2018-02-12
<abstract>
An overview over the PCE runtime system as it is implemented for the
information.
+
<sect>Binary format<p>
-The standard binary output format generated by the linker for the PCE target
-is a cartridge image with no header. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
+The binary output file generated by the linker, for the PCE target, is an
+image, with no header, that has 8K bytes in the wrong place. That file must be
+post-processed; the 8K at the end must be moved to the front of the image.
+
+On POSIX systems, the <tt/dd/ command and the shell give a convenient way to do
+it. Here is an example of their use:
+<tscreen><verb>
+dd if=conio.bin bs=8K skip=3 > conio.pce
+dd if=conio.bin bs=8K count=3 >> conio.pce
+</verb></tscreen>
+The first command grabs the last 8K of a 32K file, and writes it as the first
+part of a new file. The second command reads all but the last part of the old
+file, and appends it to the new file.
+<tscreen><verb>
++--------+--------+--------+--------+
+| Bank 1 | Bank 2 | Bank 3 | Bank 0 | <-- "conio.bin"
++--------+--------+--------+--------+
+
++--------+--------+--------+--------+
+| Bank 0 | Bank 1 | Bank 2 | Bank 3 | <-- "conio.pce"
++--------+--------+--------+--------+
+</verb></tscreen>
+<em/Note/: That <tt/.pce/ file shows the format of the ROM cartridge that is
+plugged into a PC-Engine. But, that <tt/.bin/ file shows what programs
+actually see when they execute the code in that cartridge.
+
+
<sect>Memory layout<p>
<tag/Stack/
The C runtime stack is located in system RAM at $3FFF and growing downwards.
- <tag/BSS and Data/
-
- The BSS (uninitialized variables) and Data (initialized variables) sections are
- placed one after the other into system RAM at $2000.
+ <tag/Data and BSS/
+ The Data (initialized variables) and BSS (uninitialized variables) sections are
+ placed one after the other into system RAM at $2200.
<tag/Heap/
- The C heap is located after the end of the Data section and grows towards the C
+ The C heap is located after the end of the BSS section; and, grows towards the C
runtime stack.
<tag/Code/
- The startup code is located at $E000 in the System/Hardware bank. Further
- code can be placed in other ROM banks, this must be done manually however.
+ In an 8K ROM cartridge, code and read-only data are located between
+ $E000 and $FFF5 in the System bank.
+
+ In a 16K cartridge, code and read-only data are located between $C000
+ and $FFF5.
+ In a 32K cartridge, code and read-only data are located between $8000
+ and $FFF5.
</descrip><p>
<sect1>PCE specific functions<p>
<itemize>
-<item>waitvblank</item>
-<item>get_tv</item> (since all PCE systems are NTSC, this always returns TV_NTSC)
+<item>waitvsync</item>
+<item>get_tv (since all PCE systems are NTSC, this always returns TV_NTSC)</item>
</itemize>
<sect1>Graphics drivers<p>
-<descrip>
-
No TGI graphics drivers are currently available for the PCE.
-</descrip><p>
-
<sect1>Extended memory drivers<p>
<tag><tt/pce-stdjoy.joy (pce_stdjoy)/</tag>
A joystick driver for the standard two buttons joypad is available.
+ Note that the japanese 6-button pad is currently not supported.
+
</descrip><p>
<sect>Limitations<p>
+<itemize>
+<item>interruptor support in crt0 (and cfg) is missing
+</itemize>
+
<sect1>Disk I/O<p>
The existing library for the PCE doesn't implement C file
following functions (and a few others):
<itemize>
+<item>printf
<item>fclose
<item>fopen
<item>fread
<item>...
</itemize>
+<sect>Other hints<p>
+<itemize>
+<item><url url="https://mednafen.github.io/" name= "Mednafen"> is a good
+emulator to use for the PC-Engine.
+</itemize>
-<sect>Other hints<p>
+some useful resources on PCE coding:
+<itemize>
+<item><url url="http://blog.blockos.org/?tag=pc-engine">
+<item><url url="http://pcedev.blockos.org/viewforum.php?f=5">
+<item><url url="http://www.romhacking.net/?page=documents&platform=4">
+<item><url url="http://archaicpixels.com/Main_Page">
+<item><url url="http://www.magicengine.com/mkit/doc.html">
+
+<item><url url="https://github.com/uli/huc">
+<item><url url="http://www.zeograd.com/parse.php?src=hucf">
+</itemize>
<sect>License<p>
</enum>
</article>
-
-
-