]>
iEval git - clump.git/blob - repl.pl
4d1f9ea2f281dcb95c1ebafd79a1d024205aaa39
5 use lib
'/home/marius/git/app-scheme79asm/lib/';
6 use lib
'/home/marius/git/data-dump-sexp/lib/';
7 use lib
'app-scheme79asm/lib/';
10 use App
::Scheme79asm
::Compiler
;
12 use Device
::SerialPort
;
16 my $addr_mask = ((1 << 13) - 1);
21 my ($compiler, $memref, $index) = @_;
24 } elsif ($index == 2) {
27 my $addr = $memref->[$index] & $addr_mask;
28 my $type = $memref->[$index] >> 13;
30 # say "mem[$index] is TYPE: $type, ADDR: $addr";
33 print $compiler->{symbols
}[$addr];
34 } elsif ($type == 3) {
36 } elsif ($type == 0 && $addr == 0) {
38 } elsif ($type == 0) {
40 my $cdr = $memref->[$addr];
43 princ
$compiler, $memref, $car;
44 if ($cdr >> 13) { # improper list
46 princ
$compiler, $memref, $addr;
50 $cdr = $memref->[$cdr];
51 print ' ' if $car > 1;
55 print '<TYPE ', $type, '>';
63 $term = Term
::ReadLine
->new('YULE REPL');
67 my $port = Device
::SerialPort
->new($ARGV[0] // '/dev/ttyUSB1') or die "$!";
68 #$port->baudrate(19200);
69 $port->baudrate(4000000);
70 $port->parity('none');
73 $port->handshake('none');
74 $port->read_const_time(50);
76 $port->write_settings or die "$!";
81 $sexp = $term->readline('* ');
84 exit unless defined $sexp;
89 exit unless defined $sexp;
91 my $compiler = App
::Scheme79asm
::Compiler
->new;
92 my $compiler_out = $compiler->compile_string($sexp);
94 # say 'Compiler says: ', dump_sexp($compiler_out);
96 my $asm = App
::Scheme79asm
->new(addr_bits
=> 13);
98 open my $asm_fh, '>', \
$asm_output;
99 $asm->process($compiler_out);
101 $asm->print_binary16($asm_fh);
104 # say "Writing: ", join ' ', uc join ' ', unpack '(H2)*', $asm_output;
105 my $bytes_written = $port->write($asm_output);
106 my $bytes_to_write = length $asm_output;
107 die "Only wrote $bytes_written instead of $bytes_to_write" unless $bytes_written == $bytes_to_write;
109 my ($count_in, $string_in) = $port->read(5000);
110 my @memory = unpack 'n*', $string_in;
111 # say 'Received: ', uc join ' ', unpack '(H2)*', $string_in;
112 unshift @memory, 0, 0, (1<<13), (1<<13);
113 princ
$compiler, \
@memory, 6;
This page took 0.058788 seconds and 5 git commands to generate.