OSDN Git Service

Dup.
authorSimon Forman <sforman@hushmail.com>
Sun, 10 Nov 2019 22:35:57 +0000 (14:35 -0800)
committerSimon Forman <sforman@hushmail.com>
Sun, 10 Nov 2019 22:35:57 +0000 (14:35 -0800)
ANd portray_clause to stablize output logical variable names.

thun/asm-dump.txt
thun/compiler.markII.pl
thun/joy_asmii.bin
thun/markII.rst

index d0ea581..384256b 100644 (file)
 [word(0),\r
-do_offset(_2170),\r
-allocate(_2180,20),\r
-label(_2170),\r
-mov_imm(0,0),\r
-store_word(0,0,0),\r
-mov_imm(0,4096),\r
-mov_imm(1,_2242),\r
-mov_imm(2,0),\r
-mov_imm(3,0),\r
-store_word(2,0,0),\r
-labelv_imm(3,0),\r
-store_word(2,0,0),\r
-label(_2290),\r
-sub_imm(1,1,0),\r
-eq_offset(_2302),\r
-load_word(4,1,0),\r
-lsl_imm(5,4,2),\r
-asr_imm(5,5,17),\r
-eq_offset(_24346,4,17),\r
-asr_imm(6,6,17),\r
-eq_offset(),\r
-add(5,5,1),\r
-label(_2434),\r
-lsl_imm(6,4,17),\r
-asr_imm(6,6,17),\r
-eq_offset(_2502),\r
-add(6,6,1),\r
-label(_2502),\r
-load_word(3,5,0),\r
-mov(1,6),\r
-asr_imm(6,3,t(6,16383),\r
-ior_imm(6,6,65535),\r
-and(30),\r
-and_imm(6,6,2),\r
-sub_imm(6,6,2),\r
-ne_offset(_2564),\r
-mov_imm_with_shift(6,16383),\r
-ior_imm(6,6,65535),\r
-and(6,6,3),\r
+do_offset(A),\r
+allocate(_, 20),\r
+label(A),\r
+mov_imm(0, 0),\r
+store_word(0, 0, 0),\r
+mov_imm(0, 4096),\r
+mov_imm(1, R),\r
+mov_imm(2, 0),\r
+mov_imm(3, 0),\r
+store_word(2, 0, 0),\r
+label(F),\r
+sub_imm(1, 1, 0),\r
+eq_offset(G),\r
+load_word(4, 1, 0),\r
+lsl_imm(5, 4, 2),\r
+asr_imm(5, 5, 17),\r
+eq_offset(B),\r
+add(5, 5, 1),\r
+label(B),\r
+lsl_imm(6, 4, 17),\r
+asr_imm(6, 6, 17),\r
+eq_offset(C),\r
+add(6, 6, 1),\r
+label(C),\r
+load_word(3, 5, 0),\r
+mov(1,\r
+6),\r
+asr_imm(6, 3, 30),\r
+and_imm(6, 6, 2),\r
+sub_imm(6, 6, 2),\r
+ne_offset(D),\r
+mov_imm_with_shift(6, 16383),\r
+ior_imm(6, 6, 65535),\r
+and(6, 6, 3),\r
 do(6),\r
-label(_2564),\r
-sub_imm(0(_2810),\r
-store_word(2,0,0),\r
-do_offse,0,4),\r
-sub(2,5,0),\r
-hi_offset(_2748),\r
-and_imm(2,2,32767),\r
-label(_2748),\r
-lsl_imm(2,2,15),\r
-ior_imm(2,2,4),\r
-label(_2810),\r
-store_word(2,0,0),\r
-do_offset,lsl_imm(2,2,17),\r
-asr_imm(2,2,17),\r
-e(_2290),\r
-label(_2302),\r
-do_offset(_2302),\r
-label(_2864),\r
-symbol(_2864),\r
-lsl_imm(6,2,2),\r
-asr_imm(6,6,17),\r
-eq_offset(_3064),\r
-add(6,6,0),\r
-label(_3064),\r
-9,7,17),\r
-asr_imm(9,9,17),\r
-eq_offset(lsl_imm(2,2,17),\r
-asr_imm(2,2,17),\r
-eq_offset(_3132),\r
-add(2,2,0),\r
-label(_3132),\r
-load_word(7,2,0),\r
-lsl_imm(8,7,2),\r
-asr_imm(8,8,17),\r
-eq_offset(_3214)q_offset(_3394),\r
-sub(6,6,0),\r
-and_imm,add(8,8,2),\r
-label(_3214),\r
-lsl_imm(9,7,17),\r
-asr_imm(9,9,17),\r
-eq_offset(_3282),\r
-add(9,9,2),\r
-label(_3282),\r
-sub_imm(0,0,4),\r
-sub_imm(8,8,0),\r
-eq_offset,9,32767),\r
-label(_3518),\r
-mov_imm_wit(_3326),\r
-sub(8,8,0),\r
-and_imm(8,8,32767),\r
-label(_3326),\r
-sub_imm(6,6,0),\r
-eq_offset(_3394),\r
-sub(6,6,0),\r
-and_imm(6,6,32767),\r
-label(_3394),\r
-lsl_imm(8,8,15),\r
-ior(8,8,6),\r
-store_word(8,0,0),\r
-sub_imm(0,0,4),\r
-sub_imm(9,9,0),\r
-eq_offset(_3518),\r
-sub(9,9,0),\r
-and_imm(9,9,32767),\r
-label(_3518),\r
-mov_imm_with_shift(2,2),\r
-ior(2,2,9),\r
-do_offset(_2810),\r
-label(_2242),\r
-expr_cell(_2864,0)]
\ No newline at end of file
+label(D),\r
+sub_imm(0, 0, 4),\r
+sub(2, 5, 0),\r
+hi_offset(E),\r
+and_imm(2, 2, 32767),\r
+label(E),\r
+lsl_imm(2, 2, 15),\r
+ior_imm(2, 2, 4),\r
+label(P),\r
+store_word(2, 0, 0),\r
+do_offset(F),\r
+label(G),\r
+do_offset(G),\r
+label(H),\r
+symbol(H),\r
+lsl_imm(6, 2, 2),\r
+asr_imm(6, 6, 17),\r
+eq_offset(I),\r
+add(6, 6, 0),\r
+label(I),\r
+lsl_imm(2, 2, 17),\r
+asr_imm(2, 2, 17),\r
+eq_offset(J),\r
+add(2, 2, 0),\r
+label(J),\r
+load_word(7, 2, 0),\r
+lsl_imm(8, 7, 2),\r
+asr_imm(8, 8, 17),\r
+eq_offset(K),\r
+add(8, 8, 2),\r
+label(K),\r
+lsl_imm(9, 7, 17),\r
+asr_imm(9, 9, 17),\r
+eq_offset(L),\r
+add(9, 9, 2),\r
+label(L),\r
+sub_imm(0, 0, 4),\r
+sub_imm(8, 8, 0),\r
+eq_offset(M),\r
+sub(8, 8, 0),\r
+and_imm(8, 8, 32767),\r
+label(M),\r
+sub_imm(6, 6, 0),\r
+eq_offset(N),\r
+sub(6, 6, 0),\r
+and_imm(6, 6, 32767),\r
+label(N),\r
+lsl_imm(8, 8, 15),\r
+ior(8, 8, 6),\r
+store_word(8, 0, 0),\r
+sub_imm(0, 0, 4),\r
+sub_imm(9, 9, 0),\r
+eq_offset(O),\r
+sub(9, 9, 0),\r
+and_imm(9, 9, 32767),\r
+label(O),\r
+mov_imm_with_shift(2, 2),\r
+ior(2, 2, 9),\r
+do_offset(P),\r
+label(Q),\r
+symbol(Q),\r
+lsl_imm(5, 2,\r
+2),\r
+asr_imm(5, 5, 17),\r
+do_offset(D),\r
+label(R),\r
+expr_cell(Q, 0)].
\ No newline at end of file
index af80bbf..8b070c0 100644 (file)
@@ -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).
 
index ca464de..e4e6a5b 100644 (file)
Binary files a/thun/joy_asmii.bin and b/thun/joy_asmii.bin differ
index 5ab89a0..c54aaaa 100644 (file)
@@ -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\r
 the library code.\r
 \r
+------------------------------------\r
+\r
\r
+    [ザ,シ],ヮ(dup),\r
+\r
+    ザ swap_halves(TOS)\r
+    シ push(TOS, TOS, SP)\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
 \r
 \r
 PC == 0\r