mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
Internal/screen character mapping: Supressed warnings for re-map and added documentation.
This commit is contained in:
parent
024f66a84f
commit
d65f587f69
@ -318,6 +318,58 @@ chip registers.
|
|||||||
</descrip><p>
|
</descrip><p>
|
||||||
|
|
||||||
|
|
||||||
|
<sect1>Character mapping<p>
|
||||||
|
|
||||||
|
The Atari has two representations for characters:
|
||||||
|
<enum>
|
||||||
|
<item> ATASCII is character mapping which is similar to ASCII and used
|
||||||
|
by the CIO system of the OS. This is the default mapping of cc65 when
|
||||||
|
producing code for the atari target.
|
||||||
|
<item> The internal/screen mapping represents the real value of the
|
||||||
|
screen ram when showing a character.
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
For direct memory access (simplicity and speed) enabling the internal
|
||||||
|
mapping can be useful. This can be achieved by including the
|
||||||
|
"<tt/atari_screen_charmap.h/" header.
|
||||||
|
|
||||||
|
A word of caution: Since the <tt/0x00/ character has to be mapped in an
|
||||||
|
incompatible way to the C-standard, the usage of string functions in
|
||||||
|
conjunction with internal character mapped strings delivers unexpected
|
||||||
|
results regarding the string length. The end of strings are detected where
|
||||||
|
you may not expect them (to early or (much) to late). Internal mapped
|
||||||
|
strings typically support the "<tt/mem...()/" functions.
|
||||||
|
|
||||||
|
<em>For assembler sources the macro "<tt/scrcode/" from the "<tt/atari.mac/"
|
||||||
|
package delivers the same feature.</em>
|
||||||
|
|
||||||
|
You can switch back to the ATASCII mapping by including
|
||||||
|
"<tt/atari_atascii_charmap.h/".
|
||||||
|
|
||||||
|
A final note: Since cc65 has currently some difficulties with string merging
|
||||||
|
under different mappings, defining remapped strings works only flawlessly
|
||||||
|
with static array initialization:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
#include <atari\_screen\_charmap.h>
|
||||||
|
char pcScreenMappingString[] = "Hello Atari!";
|
||||||
|
|
||||||
|
#include <atari_atascii_charmap.h>
|
||||||
|
char pcAtasciiMappingString[] = "Hello Atari!";
|
||||||
|
</verb>
|
||||||
|
|
||||||
|
delivers correct results, while
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
#include <atari_screen_charmap.h>
|
||||||
|
char* pcScreenMappingString = "Hello Atari!";
|
||||||
|
|
||||||
|
#include <atari_atascii_charmap.h>
|
||||||
|
char* pcAtasciiMappingString = "Hello Atari!";
|
||||||
|
</verb>
|
||||||
|
|
||||||
|
does not.
|
||||||
|
|
||||||
|
|
||||||
<sect>Loadable drivers<p>
|
<sect>Loadable drivers<p>
|
||||||
|
|
||||||
|
@ -30,7 +30,10 @@
|
|||||||
|
|
||||||
/* No include guard here! Multiple use in one file may be intentional. */
|
/* No include guard here! Multiple use in one file may be intentional. */
|
||||||
|
|
||||||
|
#pragma warn (remap-zero, push, off)
|
||||||
#pragma charmap (0x00, 0x40)
|
#pragma charmap (0x00, 0x40)
|
||||||
|
#pragma warn (remap-zero, pop)
|
||||||
|
|
||||||
#pragma charmap (0x01, 0x41)
|
#pragma charmap (0x01, 0x41)
|
||||||
#pragma charmap (0x02, 0x42)
|
#pragma charmap (0x02, 0x42)
|
||||||
#pragma charmap (0x03, 0x43)
|
#pragma charmap (0x03, 0x43)
|
||||||
@ -64,7 +67,10 @@
|
|||||||
#pragma charmap (0x1E, 0x5E)
|
#pragma charmap (0x1E, 0x5E)
|
||||||
#pragma charmap (0x1F, 0x5F)
|
#pragma charmap (0x1F, 0x5F)
|
||||||
|
|
||||||
|
#pragma warn (remap-zero, push, off)
|
||||||
#pragma charmap (0x20, 0x00)
|
#pragma charmap (0x20, 0x00)
|
||||||
|
#pragma warn (remap-zero, pop)
|
||||||
|
|
||||||
#pragma charmap (0x21, 0x01)
|
#pragma charmap (0x21, 0x01)
|
||||||
#pragma charmap (0x22, 0x02)
|
#pragma charmap (0x22, 0x02)
|
||||||
#pragma charmap (0x23, 0x03)
|
#pragma charmap (0x23, 0x03)
|
||||||
|
Loading…
Reference in New Issue
Block a user