Rev 129 | Blame | Compare with Previous | Last modification | View Log | Download
# file opened: macro_args.asm1 0000 ;; defines to require multi define-substitution2 0000 DEFINE _zzzzz _zzzz3 0000 DEFINE _zzzz _zzz4 0000 DEFINE _zzz _zz5 0000 DEFINE _zz _z6 0000 DEFINE _z hl7 00008 0000 MACRO ccc varX?, varY?, varZ?9 0000 ~ DUP (varX?) & 0x0310 0000 ~ ld a,varX?11 0000 ~ EDUP12 0000 ~ call .varY?_varZ?13 0000 ~ .varY?_varZ?:14 0000 ENDM15 000016 0000 MACRO xxx17 0000 ~ DUP 218 0000 ~ 1:19 0000 ~ ld _zzzzz,0x123420 0000 ~ jr 1B21 0000 ~ EDUP22 0000 ~ .labTest:23 0000 ~ ccc 2, yyy, _zzzzz24 0000 ENDM25 000026 0000 MACRO macDB a1?, a2?, a3?, a4?, a5?, a6?27 0000 ~ db a1?, a2?, a3?, a4?, a5?, a6?28 0000 ENDM29 000030 0000 xxx30 0000 > DUP 230 0000 >1:30 0000 21 34 12 > ld hl,0x123430 0003 18 FB > jr 1B30 0005 >1:30 0005 21 34 12 > ld hl,0x123430 0008 18 FB > jr 1B30 000A > EDUP30 000A >.labTest:30 000A > ccc 2, yyy, hl30 000A > DUP (2) & 0x0330 000A 3E 02 > ld a,230 000C 3E 02 > ld a,230 000E > EDUP30 000E CD 11 00 > call .yyy_hl30 0011 >.yyy_hl:31 001132 0011 DUP 233 0011 C9 > ret34 0012 21 AB 56 > ld hl,0x56AB35 0015 > xxx ; emit macro35 0015 > DUP 235 0015 >1:35 0015 21 34 12 > ld hl,0x123435 0018 18 FB > jr 1B35 001A >1:35 001A 21 34 12 > ld hl,0x123435 001D 18 FB > jr 1B35 001F > EDUP35 001F >.labTest:35 001F > ccc 2, yyy, hl35 001F > DUP (2) & 0x0335 001F 3E 02 > ld a,235 0021 3E 02 > ld a,235 0023 > EDUP35 0023 CD 26 00 > call .yyy_hl35 0026 >.yyy_hl:36 0026 > ccc 'd''d' | 0x2, first, second36 0026 > DUP ('d''d' | 0x2) & 0x03macro_args.asm(10): warning: value 0x642766 is truncated to 8bit value: 0x66macro_args.asm(36): ^ emitted from here36 0026 3E 66 > ld a,'d''d' | 0x2macro_args.asm(10): warning: value 0x642766 is truncated to 8bit value: 0x66macro_args.asm(36): ^ emitted from here36 0028 3E 66 > ld a,'d''d' | 0x236 002A > EDUP36 002A CD 2D 00 > call .first_second36 002D >.first_second:33 002D C9 > ret34 002E 21 AB 56 > ld hl,0x56AB35 0031 > xxx ; emit macro35 0031 > DUP 235 0031 >1:35 0031 21 34 12 > ld hl,0x123435 0034 18 FB > jr 1B35 0036 >1:35 0036 21 34 12 > ld hl,0x123435 0039 18 FB > jr 1B35 003B > EDUP35 003B >.labTest:35 003B > ccc 2, yyy, hl35 003B > DUP (2) & 0x0335 003B 3E 02 > ld a,235 003D 3E 02 > ld a,235 003F > EDUP35 003F CD 42 00 > call .yyy_hl35 0042 >.yyy_hl:36 0042 > ccc 'd''d' | 0x2, first, second36 0042 > DUP ('d''d' | 0x2) & 0x03macro_args.asm(10): warning: value 0x642766 is truncated to 8bit value: 0x66macro_args.asm(36): ^ emitted from here36 0042 3E 66 > ld a,'d''d' | 0x2macro_args.asm(10): warning: value 0x642766 is truncated to 8bit value: 0x66macro_args.asm(36): ^ emitted from here36 0044 3E 66 > ld a,'d''d' | 0x236 0046 > EDUP36 0046 CD 49 00 > call .first_second36 0049 >.first_second:37 0049 EDUP38 004939 0049 ; expected end result of following macDB usage40 0049 0F 61 07 22 db 1 + 14, "a\A\"", 'x''y', 4, 5, ">!!x", '''\', "\\"40 004D 78 27 79 0440 0051 05 3E 21 2140 0055 78 27 5C 5C41 0059 ; test:42 0059 macDB 1 + 14, "a\A\"", 'x''y', <4, 5, "!>!!!x">, '''\', "\\"42 0059 0F 61 07 22 > db 1 + 14, "a\A\"", 'x''y', 4, 5, ">!!x", '''\', "\\"42 005D 78 27 79 04 >42 0061 05 3E 21 21 >42 0065 78 27 5C 5C >43 006944 0069 // warning on empty argumentmacro_args.asm(45): warning: [Macro argument parser] empty value: , second45 0069 ccc 13, , second45 0069 > DUP (13) & 0x0345 0069 3E 0D > ld a,1345 006B > EDUP45 006B CD 6E 00 > call ._second45 006E >._second:46 006E // too few/many argument errorsmacro_args.asm(47): error: Not enough arguments for macro: ccc47 006E ccc 5, 6macro_args.asm(48): error: Too many arguments for macro: ccc48 006E ccc 7, 8, 9, 1049 006E50 006E // C++ numeric literal should not throw off the apostrophe-string heuristic parsing51 006E MACRO cpp_literals num1?, num2?52 006E ~ db num1?, num2?53 006E ENDM54 006E55 006E cpp_literals %0'110'1010, $F'E // fixed in v1.14.455 006E 6A FE > db %0'110'1010, $F'E56 0070 cpp_literals $9'A, $F'056 0070 9A F0 > db $9'A, $F'057 0072# file closed: macro_args.asmValue Label------ - -----------------------------------------------------------0x000A X 0>labTest0x0011 1.0>yyy_hl0x001F X 2>labTest0x0026 3.2>yyy_hl0x002D 4>first_second0x003B X 5>labTest0x0042 6.5>yyy_hl0x0049 7>first_second0x006E 9>_second