The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
#!perl

# $Id$

use warnings;
use strict;
use CPU::Z80::Assembler;
$CPU::Z80::Assembler::verbose = 1 if $ENV{DEBUG};

use Test::More tests => 3;

ok my $bin1 = z80asm('
        MACRO MUL8x8 target, r1, r2 {   ; takes three reg parms, multiplies r1
          PUSH HL                       ; and r2 with result into target
          PUSH AF
          PUSH BC
          PUSH DE
          LD B, r1
          LD E, r2
          LD HL, 0
          LD D, 0
        mulloop
          ADD HL, DE
          DJNZ mulloop
          LD (mulstore), HL
          JR mulexit
        mulstore
          DEFW 0
        mulexit
          POP DE
          POP BC
          POP AF
          POP HL
          LD target, (mulstore)
        }
        MUL8x8 HL, C, E
    '),
    "macro";

ok my $bin2 = z80asm('
          PUSH HL
          PUSH AF
          PUSH BC
          PUSH DE
          LD B, C
          LD E, E
          LD HL, 0
          LD D, 0
        mulloop
          ADD HL, DE
          DJNZ mulloop
          LD (mulstore), HL
          JR mulexit
        mulstore
          DEFW 0
        mulexit
          POP DE
          POP BC
          POP AF
          POP HL
          LD HL, (mulstore)
    '),
    "expanded macro";

is $bin1, $bin2, "macro expansion OK";