| Crates.io | kz80_microperl |
| lib.rs | kz80_microperl |
| version | 0.1.0 |
| created_at | 2025-12-27 21:27:05.78205+00 |
| updated_at | 2025-12-27 21:27:05.78205+00 |
| description | A minimal Perl interpreter and compiler for RetroShield Z80 |
| homepage | |
| repository | https://github.com/ajokela/kz80_microperl |
| max_upload_size | |
| id | 2007858 |
| size | 169,120 |
A subset Perl compiler targeting the Z80 processor. Compiles Perl-like source code to bytecode, then generates a native Z80 ROM image with an embedded bytecode interpreter.
my $x = 42;my $s = "hello";+, -, *, /, %, ++, --==, !=, <, >, <=, >=, eq, ne, lt, gt&&, ||, !if/elsif/else, while, forsub name($arg) { ... }$s =~ /pattern/, $s !~ /pattern/ with . wildcardprintcargo build --release
The compiler binary will be at target/release/microperl.
Generate a Z80 ROM image:
./target/release/microperl program.pl --rom output.rom
Debug options:
# Show tokenized output
./target/release/microperl program.pl --tokens
# Show parsed AST
./target/release/microperl program.pl --ast
# Show compiled bytecode
./target/release/microperl program.pl --bytecode
# FizzBuzz in MicroPerl
my $i = 1;
while ($i <= 30) {
if ($i % 15 == 0) {
print "FizzBuzz\n";
} elsif ($i % 3 == 0) {
print "Fizz\n";
} elsif ($i % 5 == 0) {
print "Buzz\n";
} else {
print $i, "\n";
}
$i++;
}
Source (.pl) -> Lexer -> Parser -> Compiler -> Bytecode -> Z80 Code Generator -> ROM
The generated ROM contains:
cargo test
BSD 3-Clause License. See LICENSE.