;
-; PCE definitions. By Groepaz/Hitmem.
+; PCE definitions. By Groepaz/Hitmen.
;
-; FIXME: screen dimensions my change according to selected video mode
+; FIXME: Screen dimensions can change according to the selected video mode.
screenrows = (224/8)
charsperline = 61
CH_HLINE = 1
CH_VLINE = 2
-; HuC6270 - Video Display Controller (VDC)
+; HuC6270 -- Video Display Controller (VDC)
VDC_MAWR = 0 ; Memory Address Write Register
VDC_MARR = 1 ; Memory Address Read Register
VDC_MWR = 9 ; Memory-access Width Register
VDC_HSR = 10 ; Horizontal Sync Register
VDC_HDR = 11 ; Horizontal Display Register
-VDC_VPR = 12 ; Vertical synchronous register
-VDC_VDW = 13 ; Vertical display register
+VDC_VSR = 12 ; Vertical sync Register
+VDC_VDR = 13 ; Vertical Display register
VDC_VCR = 14 ; Vertical display END position register
VDC_DCR = 15 ; (DMA) Control Register
VDC_SOUR = 16 ; (DMA) Source Register
VDC_DATA_LO := $0202
VDC_DATA_HI := $0203
-; HuC6260 - Video Color Encoder (vce)
+; HuC6260 -- Video Color Encoder (VCE)
; The DAC has a palette of 512 colours.
; The bitmap of the palette data is this: 0000000gggrrrbbb.
; You can read and write the DAC registers.
-VCE = $0400 ; base
+VCE := $0400 ; base
-VCE_CTRL = $0400 ; write $00 to reset
-VCE_ADDR_LO = $0402 ; LSB of byte offset into palette
-VCE_ADDR_HI = $0403 ; MSB of byte offset into palette
-VCE_DATA_LO = $0404 ; LSB of 16-bit palette data
-VCE_DATA_HI = $0405 ; MSB of 16-bit palette data
+VCE_CTRL := $0400 ; write $00 to reset
+VCE_ADDR_LO := $0402 ; LSB of byte offset into palette
+VCE_ADDR_HI := $0403 ; MSB of byte offset into palette
+VCE_DATA_LO := $0404 ; LSB of 16-bit palette data
+VCE_DATA_HI := $0405 ; MSB of 16-bit palette data
; Programmable Sound Generator (PSG)
-PSG = $0800 ; base
+PSG := $0800 ; base
-PSG_CHAN_SELECT = $0800
-PSG_GLOBAL_PAN = $0801
-PSG_FREQ_LO = $0802
-PSG_FREQ_HI = $0803
-PSG_CHAN_CTRL = $0804
-PSG_CHAN_PAN = $0805
-PSG_CHAN_DATA = $0806
-PSG_NOISE = $0807
-PSG_LFO_FREQ = $0808
-PSG_LFO_CTRL = $0809
+PSG_CHAN_SELECT := $0800
+PSG_GLOBAL_PAN := $0801
+PSG_FREQ_LO := $0802
+PSG_FREQ_HI := $0803
+PSG_CHAN_CTRL := $0804
+PSG_CHAN_PAN := $0805
+PSG_CHAN_DATA := $0806
+PSG_NOISE := $0807
+PSG_LFO_FREQ := $0808
+PSG_LFO_CTRL := $0809
; Timer
-TIMER = $0C00 ; base
+TIMER := $0C00 ; base
-TIMER_COUNT = $0C00
-TIMER_CTRL = $0C01
+TIMER_COUNT := $0C00
+TIMER_CTRL := $0C01
-JOY_CTRL = $1000
+JOY_CTRL := $1000
-IRQ_MASK = $1402
-IRQ_STATUS = $1403
+IRQ_MASK := $1402
+IRQ_STATUS := $1403
-CDR_MEM_DISABLE = $1803
-CDR_MEM_ENABLE = $1807
+CDR_MEM_DISABLE := $1803
+CDR_MEM_ENABLE := $1807
; Write VDC register
.macro VREG arg1,arg2
Topics specific to the Ohio Scientific machines.
<tag><htmlurl url="pce.html" name="pce.html"></tag>
- Topics specific to NEC PC-Engine (TurboGrafx) Console.
+ Topics specific to the NEC PC-Engine (TurboGrafx-16) Console.
<tag><htmlurl url="pet.html" name="pet.html"></tag>
Topics specific to the Commodore PET machines.
<sect>Memory layout<p>
-cc65-generated programs with the default setup run with the I/O area and a
-CHR bank enabled, which gives a usable memory range of $8000 - $FFF3.
-All boot ROM entry points may be called directly without additional code.
+cc65-generated programs with the default setup run with the memory map that was
+used by many PC-Engine games:
+<itemize>
+<item>The first 8K bytes is the I/O area.
+<item>The second 8K bytes is RAM, which holds
+<itemize>
+<item>the redirected zero-page and the redirected hardware stack page,
+<item>and 7680 bytes of general memory ($2200 - $3FFF).
+</itemize>
+<item>The last 8K bytes in the usual 64K-byte range is the ROM that holds the
+program.
+</itemize>
Special locations:
<descrip>
<tag/Text screen and Font/
- The text screen is located at VRAM $0000;
- the Font is located at VRAM $2000.
+ The text screen is located at Video RAM (VRAM) address $0000;
+ the Font is located at VRAM address $2000.
<tag/Stack/
- The C runtime stack is located in system RAM at $3FFF; and, grows downwards.
+ The C run-time stack is located in system RAM at $3FFF;
+ and, grows downwards.
<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 BSS section; and, grows towards the C
- runtime stack.
+ The C heap is located after the end of the BSS section;
+ and, extends up to the C run-time stack.
<tag/Code/
In an 8K ROM cartridge, code and read-only data are located between
In a 32K cartridge, code and read-only data are located between $8000
and $FFF5.
-</descrip><p>
+</descrip>
<sect1>Hardware access<p>
-The following pseudo variables, declared in the <tt/pce.inc/ include file, do
+The following constants, defined in the <tt/pce.inc/ include file, do
allow access to hardware that is located in the address space.
<descrip>
<tag><tt/PSG/</tag>
- The <tt/PSG/ defines allow access to the PSG chip (Programmable Sound Generator).
+ The <tt/PSG/ defines allow access to the PSG (Programmable Sound Generator).
<tag><tt/VCE/</tag>
The <tt/VCE/ defines allow access to the VCE chip (Video Color Encoder).
<tag><tt/VDC/</tag>
- The <tt/VDC/ defines allow access to the VDC chip (Video Display Controller).
+ The <tt/VDC/ defines allow access to the VDC chip (Video Display Controller).<newline>
+ 32K of 16-bit words of Video RAM can be accessed only through this chip.
-</descrip><p>
+</descrip>
Note that the Japanese 6-button pad currently is not supported.
-</descrip><p>
+</descrip>
<sect1>Mouse drivers<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
I/O. There are no hacks for the <tt/read()/ and <tt/write()/ routines.
-To be more concrete, this limitation means that you cannot use any of the
+To be more concrete, that limitation means that you cannot use any of the
following functions (and a few others):
<itemize>
; of functions. Doing it by a table means some overhead in space, but it
; has major advantages:
;
-; * It is fast. If it were'nt for the slow parameter passing of cc65, one
+; * It is fast. If it weren't for the slow parameter passing of cc65, one
; could even define macros for the isxxx functions (this is usually
; done on other platforms).
;
.include "extzp.inc"
ticktock:
- bbr5 vdc_flags,@s1 ; not vertical-blank interrupt
+ bbr5 vdc_flags,@s1 ; skip if not vertical-blank interrupt
; Increment the system tick counter.
inc tickcount