]> git.sur5r.net Git - cc65/commitdiff
Added scrcode macro for the Apple II.
authorOliver Schmidt <ol.sc@web.de>
Sun, 27 Mar 2016 16:26:46 +0000 (18:26 +0200)
committerOliver Schmidt <ol.sc@web.de>
Sun, 27 Mar 2016 16:26:46 +0000 (18:26 +0200)
Although the Apple II generally works with plain ASCII (i.e. in the ProDOS 8 MLI) the actual screen codes differ. This fixes #260.

asminc/apple2.mac [new file with mode: 0644]
doc/ca65.sgml

diff --git a/asminc/apple2.mac b/asminc/apple2.mac
new file mode 100644 (file)
index 0000000..b9860c0
--- /dev/null
@@ -0,0 +1,48 @@
+; Convert characters to screen codes
+
+; Helper macro that converts and outputs one character
+.macro _scrcode char
+        .if (char < 256)
+                .byte   (char + 128)
+        .else
+                .error  "scrcode: Character constant out of range"
+        .endif
+.endmacro
+
+.macro  scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
+
+        ; Bail out if next argument is empty
+        .if     .blank (arg1)
+                .exitmacro
+        .endif
+
+        ; Check for a string
+        .if     .match ({arg1}, "")
+
+                ; Walk over all string chars
+                .repeat .strlen (arg1), i
+                        _scrcode        {.strat (arg1, i)}
+                .endrepeat
+
+        ; Check for a number
+        .elseif .match (.left (1, {arg1}), 0)
+
+                ; Just output the number
+                _scrcode        arg1
+
+        ; Check for a character
+        .elseif .match (.left (1, {arg1}), 'a')
+
+                ; Just output the character
+                _scrcode        arg1
+
+        ; Anything else is an error
+        .else
+
+                .error  "scrcode: invalid argument type"
+
+        .endif
+
+        ; Call the macro recursively with the remaining args
+        scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
+.endmacro
index 14fe8714f4eb7a578c618f6207a2b7b14bdb96e3..6ea17d3355076b44d90e22d7b4302027ad247d6a 100644 (file)
@@ -4450,6 +4450,12 @@ The package defines the following macros:
 
 
 
+<sect1><tt>.MACPACK apple2</tt><p>
+
+This macro package defines a macro named <tt/scrcode/. It takes a string
+as argument and places this string into memory translated into screen codes.
+
+
 <sect1><tt>.MACPACK atari</tt><p>
 
 This macro package defines a macro named <tt/scrcode/. It takes a string