i've been playing with
bootBASIC. i've somehow broken variable assignment despite not changing anything at all to do with variable assignment or parsing. I've made `run` identical to `goto` to save 3 bytes, and removed `system` (exit) because i don't intend to run the dos version. it wasn't until i added and tried to test a statement to call machine code routines that i realised variable assignment is totally broken where it was fine in the original. there's nothing to see in a screenshot, it just goes into an infinite loop without displaying the prompt, but i created a monstrosity of a diff and thought i'd screenshot that. i was looking for places the binary code differed, but only discovered that everything is relative and there's (at least) 2 ways to assemble `add ax,0x14`. without a dos version of the program to debug with dos tools, i shall have to learn how to use gdb with qemu.
the script which produced this diff is itself a bit of a monstrosity. i hate making things like this 1 line, but terminals are too clever to accept multi-line pastes these days.
t1=/tmp/bb0; t2=/tmp/bbe; gawk '{sub(/^.{16}/, ""); print $0}' ../bootBASIC-master/basic.lst | egrep '^[^ \t]' > $t1; gawk '{sub(/^.{16}/, ""); print $0}' basic.lst | egrep '^[^ \t]' > $t2; cdiff -bu $t1 $t2; rm $t1 $t2
edit: found it almost by accident when taking one last look at the diff. turns out i'd mistaken a terminator for a version number. not many lists are 1-terminated. i should have known because all the name lengths are 1 more than you'd expect; i.e. `db 3,"if"`. smøl cöd issüz