From 3126dce30747e9e444654928b6751295897da65f Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Sun, 10 Nov 2019 14:35:57 -0800 Subject: [PATCH] Dup. ANd portray_clause to stablize output logical variable names. --- thun/asm-dump.txt | 210 +++++++++++++++++++--------------------- thun/compiler.markII.pl | 16 ++- thun/joy_asmii.bin | Bin 344 -> 360 bytes thun/markII.rst | 16 +++ 4 files changed, 129 insertions(+), 113 deletions(-) diff --git a/thun/asm-dump.txt b/thun/asm-dump.txt index d0ea581..384256b 100644 --- a/thun/asm-dump.txt +++ b/thun/asm-dump.txt @@ -1,111 +1,103 @@ [word(0), -do_offset(_2170), -allocate(_2180,20), -label(_2170), -mov_imm(0,0), -store_word(0,0,0), -mov_imm(0,4096), -mov_imm(1,_2242), -mov_imm(2,0), -mov_imm(3,0), -store_word(2,0,0), -labelv_imm(3,0), -store_word(2,0,0), -label(_2290), -sub_imm(1,1,0), -eq_offset(_2302), -load_word(4,1,0), -lsl_imm(5,4,2), -asr_imm(5,5,17), -eq_offset(_24346,4,17), -asr_imm(6,6,17), -eq_offset(), -add(5,5,1), -label(_2434), -lsl_imm(6,4,17), -asr_imm(6,6,17), -eq_offset(_2502), -add(6,6,1), -label(_2502), -load_word(3,5,0), -mov(1,6), -asr_imm(6,3,t(6,16383), -ior_imm(6,6,65535), -and(30), -and_imm(6,6,2), -sub_imm(6,6,2), -ne_offset(_2564), -mov_imm_with_shift(6,16383), -ior_imm(6,6,65535), -and(6,6,3), +do_offset(A), +allocate(_, 20), +label(A), +mov_imm(0, 0), +store_word(0, 0, 0), +mov_imm(0, 4096), +mov_imm(1, R), +mov_imm(2, 0), +mov_imm(3, 0), +store_word(2, 0, 0), +label(F), +sub_imm(1, 1, 0), +eq_offset(G), +load_word(4, 1, 0), +lsl_imm(5, 4, 2), +asr_imm(5, 5, 17), +eq_offset(B), +add(5, 5, 1), +label(B), +lsl_imm(6, 4, 17), +asr_imm(6, 6, 17), +eq_offset(C), +add(6, 6, 1), +label(C), +load_word(3, 5, 0), +mov(1, +6), +asr_imm(6, 3, 30), +and_imm(6, 6, 2), +sub_imm(6, 6, 2), +ne_offset(D), +mov_imm_with_shift(6, 16383), +ior_imm(6, 6, 65535), +and(6, 6, 3), do(6), -label(_2564), -sub_imm(0(_2810), -store_word(2,0,0), -do_offse,0,4), -sub(2,5,0), -hi_offset(_2748), -and_imm(2,2,32767), -label(_2748), -lsl_imm(2,2,15), -ior_imm(2,2,4), -label(_2810), -store_word(2,0,0), -do_offset,lsl_imm(2,2,17), -asr_imm(2,2,17), -e(_2290), -label(_2302), -do_offset(_2302), -label(_2864), -symbol(_2864), -lsl_imm(6,2,2), -asr_imm(6,6,17), -eq_offset(_3064), -add(6,6,0), -label(_3064), -9,7,17), -asr_imm(9,9,17), -eq_offset(lsl_imm(2,2,17), -asr_imm(2,2,17), -eq_offset(_3132), -add(2,2,0), -label(_3132), -load_word(7,2,0), -lsl_imm(8,7,2), -asr_imm(8,8,17), -eq_offset(_3214)q_offset(_3394), -sub(6,6,0), -and_imm,add(8,8,2), -label(_3214), -lsl_imm(9,7,17), -asr_imm(9,9,17), -eq_offset(_3282), -add(9,9,2), -label(_3282), -sub_imm(0,0,4), -sub_imm(8,8,0), -eq_offset,9,32767), -label(_3518), -mov_imm_wit(_3326), -sub(8,8,0), -and_imm(8,8,32767), -label(_3326), -sub_imm(6,6,0), -eq_offset(_3394), -sub(6,6,0), -and_imm(6,6,32767), -label(_3394), -lsl_imm(8,8,15), -ior(8,8,6), -store_word(8,0,0), -sub_imm(0,0,4), -sub_imm(9,9,0), -eq_offset(_3518), -sub(9,9,0), -and_imm(9,9,32767), -label(_3518), -mov_imm_with_shift(2,2), -ior(2,2,9), -do_offset(_2810), -label(_2242), -expr_cell(_2864,0)] \ No newline at end of file +label(D), +sub_imm(0, 0, 4), +sub(2, 5, 0), +hi_offset(E), +and_imm(2, 2, 32767), +label(E), +lsl_imm(2, 2, 15), +ior_imm(2, 2, 4), +label(P), +store_word(2, 0, 0), +do_offset(F), +label(G), +do_offset(G), +label(H), +symbol(H), +lsl_imm(6, 2, 2), +asr_imm(6, 6, 17), +eq_offset(I), +add(6, 6, 0), +label(I), +lsl_imm(2, 2, 17), +asr_imm(2, 2, 17), +eq_offset(J), +add(2, 2, 0), +label(J), +load_word(7, 2, 0), +lsl_imm(8, 7, 2), +asr_imm(8, 8, 17), +eq_offset(K), +add(8, 8, 2), +label(K), +lsl_imm(9, 7, 17), +asr_imm(9, 9, 17), +eq_offset(L), +add(9, 9, 2), +label(L), +sub_imm(0, 0, 4), +sub_imm(8, 8, 0), +eq_offset(M), +sub(8, 8, 0), +and_imm(8, 8, 32767), +label(M), +sub_imm(6, 6, 0), +eq_offset(N), +sub(6, 6, 0), +and_imm(6, 6, 32767), +label(N), +lsl_imm(8, 8, 15), +ior(8, 8, 6), +store_word(8, 0, 0), +sub_imm(0, 0, 4), +sub_imm(9, 9, 0), +eq_offset(O), +sub(9, 9, 0), +and_imm(9, 9, 32767), +label(O), +mov_imm_with_shift(2, 2), +ior(2, 2, 9), +do_offset(P), +label(Q), +symbol(Q), +lsl_imm(5, 2, +2), +asr_imm(5, 5, 17), +do_offset(D), +label(R), +expr_cell(Q, 0)]. \ No newline at end of file diff --git a/thun/compiler.markII.pl b/thun/compiler.markII.pl index af80bbf..8b070c0 100644 --- a/thun/compiler.markII.pl +++ b/thun/compiler.markII.pl @@ -79,7 +79,7 @@ Mark II store_word(TOS, SP, 0), % RAM[SP] := TOS do_offset(Main) - ],⟐([ +],⟐([ halt(HALT), % ====================================== @@ -102,10 +102,18 @@ Mark II incr(SP), sub_base_from_offset(TEMP3, SP), chain_link(TOS, TEMP3), - jump(Done) % Rely on mainloop::Done to write TOS to RAM. + jump(Done), % Rely on mainloop::Done to write TOS to RAM. + + definition(Dup) +]),[ + % TermAddr := TOS << 2 >> 17 + lsl_imm(TermAddr, TOS, 2), + asr_imm(TermAddr, TermAddr, 17) +],⟐([ + jump(PUSH) ]),[ label(Expression), - expr_cell(Cons, 0) + expr_cell(Dup, 0) ]. @@ -182,7 +190,7 @@ do :- compile_program(Binary) :- phrase(⟐(program), ASM), - writeln(ASM), + portray_clause(ASM), phrase(linker(ASM), EnumeratedASM), phrase(asm(EnumeratedASM), Binary). diff --git a/thun/joy_asmii.bin b/thun/joy_asmii.bin index ca464de0721f4acf3fbb4c3d357b8f9ce7f3d6fd..e4e6a5bf10d0f2cfdf8cce2a8ffb6448a5de87ab 100644 GIT binary patch delta 40 ucmcb?^n!^oW+J0LW5h;7c}58zMur9^21Qpvh9K9o|NlQ{VEFN$0SEx+z6;y{ delta 24 ecmaFCbc2b}XCk9MqsK-=c}5NfhAsaYfB*nh%>~&2 diff --git a/thun/markII.rst b/thun/markII.rst index 5ab89a0..c54aaaa 100644 --- a/thun/markII.rst +++ b/thun/markII.rst @@ -312,6 +312,22 @@ Maybe I can dispense with symbol records by modifying the is-this-a-symbol code to just check if the address is below the end of the library code. +------------------------------------ + + + [ザ,シ],ヮ(dup), + + ザ swap_halves(TOS) + シ push(TOS, TOS, SP) + + + + + + + + + PC == 0