Device-AVR-UPDI

 view release on metacpan or  search on metacpan

bin/avr-updi  view on Meta::CPAN


   # Because this file format was invented for Intel x86 in the 16-bit era,
   # we have to account for its crazy 16bit offset + 16bit segment == 20bit
   # linear addressing madness.

   sub print_record {
      my $self = shift;
      my ( $addr, $type, $data ) = @_;
      my $clen = length $data;
      my $cksum = $clen + ( $addr & 0xFF ) + ( $addr >> 8 ) + $type;
      my $encdata = "";
      ( $encdata .= sprintf "%02X", ord $_), ( $cksum += ord $_ )
         for split //, $data;
      $self->printf( ":%02X%04X%02X%s%02X\n",
         $clen, $addr, $type, $encdata, ( -$cksum ) & 0xFF );
   }
   sub output_chunk {
      my $self = shift;
      my ( $addr, $bytes ) = @_;

      my $segaddr = 0;

      foreach my $data ( $bytes =~ m/(.{1,16})/gs ) {
         my $hiaddr = $addr & 0xFFFF0000;
         if( $segaddr << 4 != $hiaddr ) {



( run in 0.857 second using v1.01-cache-2.11-cpan-6aa56a78535 )