Add diagrams and pictures
[clump.git] / sendrecieve.pl
CommitLineData
acf21e18
MG
1#!/usr/bin/perl
2use v5.14;
3use warnings;
4
5use Device::SerialPort;
6use IPC::Open3;
7use Term::ReadLine;
8use File::Slurp::Tiny qw/read_file/;
9
10my $term;
11
12if (-t) {
13 $term = Term::ReadLine->new('YULE REPL');
14 say "YULE REPL\n";
15}
16
17my $port = Device::SerialPort->new($ARGV[0] // '/dev/ttyUSB1') or die "$!";
18$port->baudrate(300);
19#$port->baudrate(4000000);
20$port->parity('none');
21$port->databits(8);
22$port->stopbits(1);
23$port->handshake('none');
24$port->read_const_time(5000);
25
26$port->write_settings or die "$!";
27
28my $asm = read_file 'cells.clump';
29
30$port->write($asm);
31my ($count_in, $string_in) = $port->read(5000);
32my @memory = unpack 'v*', $string_in;
33for (@memory) {
34 printf "%X ", $_
35}
36
37__END__
38
39while () {
40 my $sexp;
41 if (-t) {
42 $sexp = $term->readline('* ');
43 } else {
44 $sexp = <>;
45 exit unless defined $sexp;
46 chomp $sexp;
47 next unless $sexp;
48 say "* $sexp";
49 }
50 exit unless defined $sexp;
51 next unless $sexp;
52 my $compiler = App::Scheme79asm::Compiler->new;
53 my $compiler_out = $compiler->compile_string($sexp);
54
55# say 'Compiler says: ', dump_sexp($compiler_out);
56
57 my $asm = App::Scheme79asm->new(addr_bits => 13);
58 my $asm_output;
59 open my $asm_fh, '>', \$asm_output;
60 $asm->process($compiler_out);
61 $asm->finish;
62 $asm->print_binary16($asm_fh);
63 close $asm_fh;
64
65# say "Writing: ", join ' ', uc join ' ', unpack '(H2)*', $asm_output;
66 my $bytes_written = $port->write($asm_output);
67 my $bytes_to_write = length $asm_output;
68 die "Only wrote $bytes_written instead of $bytes_to_write" unless $bytes_written == $bytes_to_write;
69
70 my ($count_in, $string_in) = $port->read(5000);
71 my @memory = unpack 'n*', $string_in;
72# say 'Received: ', uc join ' ', unpack '(H2)*', $string_in;
73 unshift @memory, 0, 0, (1<<13), (1<<13);
74 princ $compiler, \@memory, 6;
75 say '';
76}
This page took 0.014566 seconds and 4 git commands to generate.