Skip to content

Instantly share code, notes, and snippets.

@joaquinferrero
Last active September 17, 2020 16:51
Show Gist options
  • Save joaquinferrero/4bf0c58dd38cc43e839220bc0c7af6fb to your computer and use it in GitHub Desktop.
Save joaquinferrero/4bf0c58dd38cc43e839220bc0c7af6fb to your computer and use it in GitHub Desktop.
Show names and stats from .map file after asz80 assembling
#!/usr/bin/perl -s
#
# Saca estadísticas a partir de un archivo .map
# generado por el asz80
#
# Joaaquín Ferrero, 20200917
#
use strict;
# argumentos
@ARGV or die "Uso $0 [-dec] <archivo .map>\n";
our $dec; # parámetro: indica que se muestre en decimal
# constantes
my $WIDTH_FUNC = 32;
my $WIDTH_STAT = 20;
my $FORMATO = "%5s %5s %-${WIDTH_STAT}s %-${WIDTH_FUNC}s %s\n",
# variables
my ($inicio, $total);
my @entradas;
# proceso
while (<>) { # para todas las líneas
if (/^_CODE/../^Files/) { # si estamos entre las interesantes...
if (/^_CODE\s+\w/) { # si es la de información de área
($inicio, $total) = map {hex} (split)[1,2]; # extraemos información
}
next # saltamos
if not # si no es verdaderamente interesante
/^\s+([0-9A-F]{8})\s+(\w+)\s+(\w+)?/; # y extraemos información
push @entradas, [ hex($1), $2, $3 ]; # y la almacenamos para después
}
}
push @entradas, [ $inicio+$total-1, 'end' ]; # última dirección
# salida
printf $FORMATO, 'Value', 'Size', 'Graph', 'Global', 'Module';
foreach my $i (0 .. @entradas-2) {
my $size = $entradas[$i+1][0]-$entradas[$i][0];
printf $FORMATO,
pinta_formateado($entradas[$i][0]),
pinta_formateado($size),
'*' x int( $WIDTH_STAT * $size / $total),
$entradas[$i][1],
$entradas[$i][2]
;
}
printf $FORMATO, pinta_formateado($entradas[-1][0]), pinta_formateado($total), '', $entradas[-1][1], '';
# subrutinas
sub pinta_formateado {
($dec ? $_[0] : sprintf "%X", $_[0]),
}
# end
@joaquinferrero
Copy link
Author

Esta versión muestra las direcciones y tamaños en la misma base: o hexadecimal o decimal, según la presencia de -dec

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment