unit module dispelpotion; class Disassembler { has %.nesopcodesmap; method BUILD() { my $nesopcodes = NESopcodes.new(); %.nesopcodesmap = $nesopcodes.nesopcodes; } method disasm(@bytebuffer) { loop (my $i = 0; $i < length @bytebuffer; ) { my $opcode = %.nesopcodesmap[@bytebuffer[$i]*16+@bytebuffer[$i+1]]; if ($opcode) { say $opcode + "\n"; if (not %.nesopcodesmap[@bytebuffer[$i+2]*16+@bytebuffer[$i+3]]) { $i+=2; } if (not %.nesopcodesmap[@bytebuffer[$i+4]*16+@bytebuffer[$i+5]]) { $i+=2; } if (not %.nesopcodesmap[@bytebuffer[$i+6]*16+@bytebuffer[$i+7]]) { $i+=2; } $i += 2; } } } }