]> git.sur5r.net Git - cc65/commitdiff
Made CBM scrcode assembly-macro properly handle all 256 codes. 2/head
authorGreg King <gregdk@users.sf.net>
Thu, 25 Apr 2013 16:32:49 +0000 (12:32 -0400)
committerGreg King <gregdk@users.sf.net>
Thu, 25 Apr 2013 18:28:01 +0000 (14:28 -0400)
And, made it smaller.

asminc/cbm.mac

index a6ec9f8dbacd18dfa13ae1627a0bfb45904a6bea..b2bfe5992420fc422b65c268cbbdef3a67e333ab 100644 (file)
@@ -2,20 +2,8 @@
 
 ; Helper macro that converts and outputs one character
 .macro _scrcode char
-        .if (char >= '@' .and char <= 'z')
-                .byte   (char - '@')
-        .elseif (char >= 'A' .and char <= 'Z')
-                .byte   (char - 'A' + 65)
-        .elseif (char = '[')
-                .byte   27
-        .elseif (char = ']')
-                .byte   29
-        .elseif (char = '^')
-                .byte   30
-        .elseif (char = '_')
-                .byte   31
-        .elseif (char < 256)
-                .byte   char
+        .if (char < 256)
+                .byte   <(.strat ("h@dbdlhh", char >> 5) << 4) ^ char
         .else
                 .error  "scrcode: Character constant out of range"
         .endif
@@ -24,7 +12,7 @@
 .macro  scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
 
         ; Bail out if next argument is empty
-        .if     .blank (arg1)
+        .if     .blank ({arg1})
                 .exitmacro
         .endif