my $BC = CPU::Emulator::Z80::Register16->new( get => sub { return 256 * $self->register('B')->get() + $self->register('C')->get() }, set => sub { my $value = shift; $self->register('B')->set($value >>8); $self->register('C')->set($value & 0xFF); } ); #### $AF = _derive_register16($self, qw(A F)); $BC = _derive_register16($self, qw(B C)); $DE = _derive_register16($self, qw(D E)); ... sub _derive_register16 { my($self, $high, $low) = @_; return CPU::Emulator::Z80::Register16->new( get => sub { return 256 * $self->register($high)->get() + $self->register($low)->get() }, set => sub { my $value = shift; $self->register($high)->set($value >>8); $self->register($low)->set($value & 0xFF); }, ); }