CPU-Z80-Assembler
view release on metacpan or search on metacpan
t/Program-jumps.t view on Meta::CPAN
use_ok 'CPU::Z80::Assembler::Program';
use_ok 'CPU::Z80::Assembler::JumpOpcode';
use_ok 'CPU::Z80::Assembler::Opcode';
use_ok 'CPU::Z80::Assembler::Expr';
use_ok 'Asm::Preproc::Line';
use_ok 'Asm::Preproc::Token';
my($program, $bytes, $code, %labels);
sub NEW () {
my $caller_line = (caller)[2];
ok $caller_line, "[line $caller_line]";
isa_ok $program = CPU::Z80::Assembler::Program->new(),
'CPU::Z80::Assembler::Program';
$bytes = "";
$code = "";
%labels = ();
}
sub LABEL ($) {
my($label) = @_;
my $caller_line = (caller)[2];
ok $caller_line, "[line $caller_line]";
my $text = "$label:\n";
isa_ok my $line = Asm::Preproc::Line->new($text, "f.asm", 1),
'Asm::Preproc::Line';
$program->add_label($label, $line);
$bytes .= "";
$code .= $text;
$labels{$label} = length($bytes);
}
sub NOPs ($) {
my($num) = @_;
my $caller_line = (caller)[2];
ok $caller_line, "[line $caller_line]";
my $text = " NOP :" x $num . "\n";
isa_ok my $line = Asm::Preproc::Line->new($text, "f.asm", 1),
'Asm::Preproc::Line';
isa_ok my $nops = CPU::Z80::Assembler::Opcode->new(
child => [(0) x $num],
line => $line),
'CPU::Z80::Assembler::Opcode';
$program->add_opcodes($nops);
$bytes .= "\0" x $num;
$code .= $text;
}
sub JUMP ($$$$) {
my($instr, $short_opcodes, $long_opcodes, $instr_bytes) = @_;
my $caller_line = (caller)[2];
ok $caller_line, "[line $caller_line]";
my $label = (split(' ', $instr))[-1];
my $text = " ".$instr."\n";
isa_ok my $line = Asm::Preproc::Line->new($text, "f.asm", 1),
'Asm::Preproc::Line';
isa_ok my $t_name = Asm::Preproc::Token->new(NAME => $label, $line),
'Asm::Preproc::Token';
t/Program-jumps.t view on Meta::CPAN
'CPU::Z80::Assembler::JumpOpcode';
$program->add_opcodes($jump);
for (@$instr_bytes) {
$bytes .= chr($_ & 0xFF);
}
$code .= $text;
}
sub TEST () {
my $caller_line = (caller)[2];
is $program->bytes, $bytes, "[line $caller_line] assembled OK";
is $program->bytes, $bytes, "[line $caller_line] second run also OK";
is z80asm($code), $bytes, "[line $caller_line] z80asm OK";
while (my($label, $value) = each %labels) {
is $program->symbols->{$label}->evaluate, $value,
"[line $caller_line] label $label = $value";
}
}
( run in 3.963 seconds using v1.01-cache-2.11-cpan-54e63673c56 )