1 <!doctype linuxdoc system>
5 <title>PC-Engine (TurboGrafx) System specific information for cc65
6 <author><url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">,<newline>
7 <url url="mailto:greg.king5@verizon.net" name="Greg King">
11 An overview over the PCE runtime system as it is implemented for the
15 <!-- Table of contents -->
18 <!-- Begin the document -->
22 This file contains an overview of the PCE runtime system as it comes
23 with the cc65 C compiler. It describes the memory layout, PCE specific header
24 files, available drivers, and any pitfalls specific to that platform.
26 Please note that PCE specific functions are just mentioned here, they are
27 described in detail in the separate <url url="funcref.html" name="function
28 reference">. Even functions marked as "platform dependent" may be available on
29 more than one platform. Please see the function reference for more
34 <sect>Binary format<p>
36 The binary output file generated by the linker, for the PCE target, is an
37 image, with no header, that has 8K bytes in the wrong place. That file must be
38 post-processed; the 8K at the end must be moved to the front of the image.
40 On POSIX systems, the <tt/dd/ command and the shell give a convenient way to do
41 it. Here is an example of their use:
43 dd if=conio.bin bs=8K skip=3 > conio.pce
44 dd if=conio.bin bs=8K count=3 >> conio.pce
46 The first command grabs the last 8K of a 32K file, and writes it as the first
47 part of a new file. The second command reads all but the last part of the old
48 file, and appends it to the new file.
50 +--------+--------+--------+--------+
51 | Bank 1 | Bank 2 | Bank 3 | Bank 0 | <-- "conio.bin"
52 +--------+--------+--------+--------+
54 +--------+--------+--------+--------+
55 | Bank 0 | Bank 1 | Bank 2 | Bank 3 | <-- "conio.pce"
56 +--------+--------+--------+--------+
58 <em/Note/: That <tt/.pce/ file shows the format of the ROM cartridge that is
59 plugged into a PC-Engine. But, that <tt/.bin/ file shows what programs
60 actually see when they execute the code in that cartridge.
64 <sect>Memory layout<p>
66 cc65 generated programs with the default setup run with the I/O area and a
67 CHR bank enabled, which gives a usable memory range of $8000 - $FFF3.
68 All boot ROM entry points may be called directly without additional code.
73 <tag/Text screen and Font/
74 The text screen is located at VRAM $0000,
75 the Font is located at VRAM $2000.
78 The C runtime stack is located in system RAM at $3FFF and growing downwards.
81 The Data (initialized variables) and BSS (uninitialized variables) sections are
82 placed one after the other into system RAM at $2200.
85 The C heap is located after the end of the BSS section; and, grows towards the C
89 In an 8K ROM cartridge, code and read-only data are located between
90 $E000 and $FFF5 in the System bank.
92 In a 16K cartridge, code and read-only data are located between $C000
95 In a 32K cartridge, code and read-only data are located between $8000
101 <sect>Platform specific header files<p>
103 Programs containing PCE specific code may use the <tt/pce.h/ header file.
106 <sect1>PCE specific functions<p>
109 <item>waitvsync</item>
110 <item>get_tv (since all PCE systems are NTSC, this always returns TV_NTSC)</item>
115 <sect1>Hardware access<p>
117 The following pseudo variables declared in the <tt/pce.inc/ include file do
118 allow access to hardware located in the address space.
123 The <tt/PSG/ defines allow access to the PSG chip (Programmable Sound Generator).
126 The <tt/VCE/ defines allow access to the VCE chip (Video Color Encoder).
129 The <tt/VDC/ defines allow access to the VDC chip (Video Display Controller).
135 <sect>Loadable drivers<p>
137 All drivers must be statically linked because no file I/O is available.
138 The names in the parentheses denote the symbols to be used for static linking of the drivers.
141 <sect1>Graphics drivers<p>
143 No TGI graphics drivers are currently available for the PCE.
146 <sect1>Extended memory drivers<p>
148 No extended memory drivers are currently available for the PCE.
151 <sect1>Joystick drivers<p>
155 <tag><tt/pce-stdjoy.joy (pce_stdjoy)/</tag>
156 A joystick driver for the standard two buttons joypad is available.
158 Note that the japanese 6-button pad is currently not supported.
163 <sect1>Mouse drivers<p>
165 No mouse drivers are currently available for the PCE.
168 <sect1>RS232 device drivers<p>
170 No serial drivers are currently available for the PCE.
177 <item>interruptor support in crt0 (and cfg) is missing
182 The existing library for the PCE doesn't implement C file
183 I/O. There are no hacks for the <tt/read()/ and <tt/write()/ routines.
185 To be more concrete, this limitation means that you cannot use any of the
186 following functions (and a few others):
203 <item><url url="https://mednafen.github.io/" name= "Mednafen"> is a good
204 emulator to use for the PC-Engine.
207 some useful resources on PCE coding:
210 <item><url url="http://blog.blockos.org/?tag=pc-engine">
211 <item><url url="http://pcedev.blockos.org/viewforum.php?f=5">
212 <item><url url="http://www.romhacking.net/?page=documents&platform=4">
213 <item><url url="http://archaicpixels.com/Main_Page">
215 <item><url url="http://www.magicengine.com/mkit/doc.html">
217 <item><url url="https://github.com/uli/huc">
218 <item><url url="http://www.zeograd.com/parse.php?src=hucf">
223 This software is provided 'as-is', without any expressed or implied
224 warranty. In no event will the authors be held liable for any damages
225 arising from the use of this software.
227 Permission is granted to anyone to use this software for any purpose,
228 including commercial applications, and to alter it and redistribute it
229 freely, subject to the following restrictions:
232 <item> The origin of this software must not be misrepresented; you must not
233 claim that you wrote the original software. If you use this software
234 in a product, an acknowledgment in the product documentation would be
235 appreciated but is not required.
236 <item> Altered source versions must be plainly marked as such, and must not
237 be misrepresented as being the original software.
238 <item> This notice may not be removed or altered from any source