Changed the PC-Engine's configuration file, so that the command line can build 8K, 16K, and 32K carts.

Adjusted the PCE's document, the start-up code, and the PCE library test makefile.  That makefile shows how to post-process the linker's output file.
This commit is contained in:
Greg King
2018-02-23 16:06:49 -05:00
parent 83890e56eb
commit 3a0506ccb3
5 changed files with 115 additions and 84 deletions

View File

@@ -3,9 +3,9 @@
<article>
<title>PC-Engine (TurboGrafx) System specific information for cc65
<author>
<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">
<date>2016-09-29
<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
@@ -30,11 +30,36 @@ more than one platform. Please see the function reference for more
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 | &lt;-- "conio.bin"
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| Bank 0 | Bank 1 | Bank 2 | Bank 3 | &lt;-- "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>
@@ -52,19 +77,23 @@ Special locations:
<tag/Stack/
The C runtime stack is located in system RAM at &dollar;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 &dollar;2000.
<tag/Data and BSS/
The Data (initialized variables) and BSS (uninitialized variables) sections are
placed one after the other into system RAM at &dollar;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 &dollar;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
&dollar;E000 and &dollar;FFF5 in the System bank.
In a 16K cartridge, code and read-only data are located between &dollar;C000
and &dollar;FFF5.
In a 32K cartridge, code and read-only data are located between &dollar;8000
and &dollar;FFF5.
</descrip><p>
@@ -171,7 +200,8 @@ following functions (and a few others):
<sect>Other hints<p>
<itemize>
<item>a good emulator to use for PC-Engine is "mednafen" (<url url="http://mednafen.fobby.net/">)
<item><url url="https://mednafen.github.io/" name= "Mednafen"> is a good
emulator to use for the PC-Engine.
</itemize>
some useful resources on PCE coding:
@@ -210,6 +240,3 @@ freely, subject to the following restrictions:
</enum>
</article>