(loader '((title |puzzle.lo|))) (loader'((fentry check-puzzle subr0) (entry check-puzzle subr0) (mov 't a2) (mov '(test-puzzle 1) a1) (jmp check-value) )) (loader'((fentry meter-puzzle subr0) (entry meter-puzzle subr0) (mov 'puzzle a2) (mov '(puzzle-start) a1) (jmp perform-meter) )) (loader'((fentry test-puzzle subr1) (entry test-puzzle subr1) (cabne a1 '1 104) (bra puzzle-start) 103 (push a1) (call puzzle-start) (pop a1) 104 (sobgez a1 103) (mov 't a1) (return) )) (defvar puzzle-size 511) (defvar puzzle-classmax 3) (defvar puzzle-typemax 12) (defvar iii 0) (defvar kount 0) (defvar puzzle-d 8) (defvar piececount (makearray (add1 puzzle-classmax) 0)) (defvar puzzle-class (makearray (add1 puzzle-typemax) 0)) (defvar piecemax (makearray (add1 puzzle-typemax) 0)) (defvar puzzle (makearray (add1 puzzle-size) 0)) (defvar puzzle-p (makearray (add1 puzzle-typemax) (add1 puzzle-size) 0)) (loader'((entry fit subr2) (push a2) (push a1) (hpxmov (cvalq piecemax) a1 a4) (push a4) (push '0) 101 (cnbgt (& 0) (& 1) 102) (hpxmov (cvalq puzzle-p) (& 2) a4) (hpxmov a4 (& 0) a4) (btnil a4 103) (mov (& 3) a4) (plus (& 0) a4) (hpxmov (cvalq puzzle) a4 a4) (bfnil a4 102) 103 (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (cnble (& 0) (& 1) 104) (mov 't a1) (adjstk '4) (return) 104 (mov nil a1) (adjstk '4) (return) )) (loader'((entry place subr2) (push a2) (push a1) (hpxmov (cvalq piecemax) a1 a4) (push a4) (push '0) 101 (cnbgt (& 0) (& 1) 102) (hpxmov (cvalq puzzle-p) (& 2) a4) (hpxmov a4 (& 0) a4) (btnil a4 104) (push (cvalq puzzle)) (mov (& 4) a4) (plus (& 1) a4) (push 't) (hpmovx (& 0) (& 1) a4) (adjstk '2) 104 (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (adjstk '1) (push (cvalq piececount)) (hpxmov (cvalq puzzle-class) (& 2) a4) (hpxmov (cvalq puzzle-class) (& 2) a3) (hpxmov (cvalq piececount) a3 a3) (diff '1 a3) (hpmovx a3 (& 0) a4) (adjstk '1) (push (& 2)) 105 (cnbgt (& 0) (cvalq puzzle-size) 106) (hpxmov (cvalq puzzle) (& 0) a4) (btnil a4 106) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 105) 106 (cnble (& 0) (cvalq puzzle-size) 107) (mov '0 a1) (adjstk '4) (return) 107 (mov (& 0) a1) (adjstk '4) (return) )) (loader'((entry puzzle-remove subr2) (push a2) (push a1) (hpxmov (cvalq piecemax) a1 a4) (push a4) (push '0) 101 (cnbgt (& 0) (& 1) 102) (hpxmov (cvalq puzzle-p) (& 2) a4) (hpxmov a4 (& 0) a4) (btnil a4 104) (push (cvalq puzzle)) (mov (& 4) a4) (plus (& 1) a4) (push nil) (hpmovx (& 0) (& 1) a4) (adjstk '2) 104 (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (adjstk '1) (push (cvalq piececount)) (hpxmov (cvalq puzzle-class) (& 2) a4) (hpxmov (cvalq puzzle-class) (& 2) a3) (hpxmov (cvalq piececount) a3 a3) (plus '1 a3) (hpmovx a3 (& 0) a4) (mov a3 a1) (adjstk '4) (return) )) (loader'((entry trial subr1) (push a1) (push '0) (push '0) 101 (cnbgt (& 0) (cvalq puzzle-typemax) 102) (hpxmov (cvalq puzzle-class) (& 0) a4) (hpxmov (cvalq piececount) a4 a4) (cabeq a4 '0 103) (mov (& 2) a2) (mov (& 0) a1) (call fit) (btnil a1 105) (mov (& 2) a2) (mov (& 0) a1) (call place) (mov a1 (& 1)) (call trial) (bfnil a1 109) (cabne (& 1) '0 107) 109 (mov (cvalq kount) a4) (plus '1 a4) (mov a4 (cvalq kount)) (mov 't a4) (bra 104) 107 (mov (& 2) a2) (mov (& 0) a1) (call puzzle-remove) (mov nil a4) (bra 104) 105 (mov nil a4) (bra 104) 103 (mov nil a4) 104 (bfnil a4 102) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (cnble (& 0) (cvalq puzzle-typemax) 110) (mov (cvalq kount) a4) (plus '1 a4) (mov a4 (cvalq kount)) (mov nil a1) (adjstk '3) (return) 110 (mov 't a1) (adjstk '3) (return) )) (loader'((entry definepiece nsubr) (push '0) (push '0) 101 (cnbgt (& 0) (& 4) 102) (push '0) 103 (cnbgt (& 0) (& 4) 104) (push '0) 105 (cnbgt (& 0) (& 4) 106) (mov (cvalq puzzle-d) a4) (times (& 0) a4) (mov (& 1) a3) (plus a4 a3) (mov (cvalq puzzle-d) a4) (times a3 a4) (mov (& 2) a3) (plus a4 a3) (mov a3 (& 3)) (hpxmov (cvalq puzzle-p) (cvalq iii) a4) (push 't) (hpmovx (& 0) a4 a3) (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 105) 106 (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 103) 104 (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (adjstk '1) (push (cvalq puzzle-class)) (push (cvalq iii)) (push (& 6)) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (push (cvalq piecemax)) (push (cvalq iii)) (push (& 2)) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (cabeq (cvalq iii) (cvalq puzzle-typemax) 107) (mov (cvalq iii) a4) (plus '1 a4) (mov a4 (cvalq iii)) (mov a4 a1) (adjstk '5) (return) 107 (mov nil a1) (adjstk '5) (return) )) (loader'((entry puzzle-start subr0) (push '0) 101 (cnbgt (& 0) (cvalq puzzle-size) 102) (push (cvalq puzzle)) (push (& 1)) (push 't) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 101) 102 (adjstk '1) (push '1) 103 (cnbgt (& 0) '5 104) (push '1) 105 (cnbgt (& 0) '5 106) (push '1) 107 (cnbgt (& 0) '5 108) (push (cvalq puzzle)) (mov (cvalq puzzle-d) a4) (times (& 1) a4) (mov (& 2) a3) (plus a4 a3) (mov (cvalq puzzle-d) a4) (times a3 a4) (mov (& 3) a3) (plus a4 a3) (push nil) (hpmovx (& 0) (& 1) a3) (adjstk '2) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 107) 108 (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 105) 106 (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 103) 104 (adjstk '1) (push '0) 109 (cnbgt (& 0) (cvalq puzzle-typemax) 110) (push '0) 111 (cnbgt (& 0) (cvalq puzzle-size) 112) (hpxmov (cvalq puzzle-p) (& 1) a4) (push (& 0)) (push nil) (hpmovx (& 0) a4 (& 1)) (adjstk '2) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 111) 112 (adjstk '1) (mov (& 0) a4) (plus '1 a4) (mov a4 (& 0)) (bra 109) 110 (adjstk '1) (mov '0 (cvalq iii)) (push (@ 113)) (push '0) (push '3) (push '1) (push '0) (mov '4 a4) (bra definepiece) 113 (eval ()) (push (@ 114)) (push '0) (push '1) (push '0) (push '3) (mov '4 a4) (bra definepiece) 114 (eval ()) (push (@ 115)) (push '0) (push '0) (push '3) (push '1) (mov '4 a4) (bra definepiece) 115 (eval ()) (push (@ 116)) (push '0) (push '1) (push '3) (push '0) (mov '4 a4) (bra definepiece) 116 (eval ()) (push (@ 117)) (push '0) (push '3) (push '0) (push '1) (mov '4 a4) (bra definepiece) 117 (eval ()) (push (@ 118)) (push '0) (push '0) (push '1) (push '3) (mov '4 a4) (bra definepiece) 118 (eval ()) (push (@ 119)) (push '1) (push '2) (push '0) (push '0) (mov '4 a4) (bra definepiece) 119 (eval ()) (push (@ 120)) (push '1) (push '0) (push '2) (push '0) (mov '4 a4) (bra definepiece) 120 (eval ()) (push (@ 121)) (push '1) (push '0) (push '0) (push '2) (mov '4 a4) (bra definepiece) 121 (eval ()) (push (@ 122)) (push '2) (push '1) (push '1) (push '0) (mov '4 a4) (bra definepiece) 122 (eval ()) (push (@ 123)) (push '2) (push '1) (push '0) (push '1) (mov '4 a4) (bra definepiece) 123 (eval ()) (push (@ 124)) (push '2) (push '0) (push '1) (push '1) (mov '4 a4) (bra definepiece) 124 (eval ()) (push (@ 125)) (push '3) (push '1) (push '1) (push '1) (mov '4 a4) (bra definepiece) 125 (eval ()) (push (cvalq piececount)) (push '0) (push '13) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (push (cvalq piececount)) (push '1) (push '3) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (push (cvalq piececount)) (push '2) (push '1) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (push (cvalq piececount)) (push '3) (push '1) (hpmovx (& 0) (& 2) (& 1)) (adjstk '3) (mov (cvalq puzzle-d) a4) (plus '1 a4) (mov (cvalq puzzle-d) a3) (times a4 a3) (plus '1 a3) (push '0) (push '0) (push a3) (push (cvalq kount)) (mov (& 2) (cvalq kount)) (push '1) (push '(kount)) (push 'lambda) (push llink) (push dlink) (push cbindn) (stack dlink) (mov a3 a2) (mov '0 a1) (call fit) (btnil a1 126) (mov (& 7) a2) (mov '0 a1) (call place) (mov a1 (& 9)) (bra 127) 126 (push (@ 128)) (push 't) (push '"~%Error.") (mov '2 a4) (jmp format) 128 (eval ()) 127 (mov (& 9) a1) (call trial) (btnil a1 129) (push (@ 131)) (push 't) (push '"~%Success in ~4D trials.") (push (cvalq kount)) (mov '3 a4) (jmp format) 131 (eval ()) (bra 130) 129 (push (@ 132)) (push 't) (push '"~%Failure.") (mov '2 a4) (jmp format) 132 (eval ()) 130 (mov (& 1) dlink) (mov (& 6) (cvalq kount)) (adjstk '10) (return) )) (loader '((end)))