about summary refs log tree commit diff stats
path: root/chessboard.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2014-12-31 00:58:31 -0800
committerKartik K. Agaram <vc@akkartik.com>2014-12-31 00:58:31 -0800
commita83d8656063a908ef48a0852126888163ead5673 (patch)
tree8cf84a93b4e4edf3141e23034209f782d18930fa /chessboard.mu
parent6195c0ad656f20e62a4924970b90ce4b345512eb (diff)
downloadmu-a83d8656063a908ef48a0852126888163ead5673.tar.gz
473 - print chessboard
Once we started printing we uncovered that we were storing positions by
rank rather than by file as we'd planned.

Amazing how slow it is. Might be interesting to try to compile it down
to straightforward assembler and see how fast it gets.
Diffstat (limited to 'chessboard.mu')
-rw-r--r--chessboard.mu41
1 files changed, 32 insertions, 9 deletions
diff --git a/chessboard.mu b/chessboard.mu
index efbec20c..e0a79656 100644
--- a/chessboard.mu
+++ b/chessboard.mu
@@ -1,13 +1,13 @@
 (function read-board [
   (default-scope:scope-address <- new scope:literal 30:literal)
-  (initial-position:list-address <- init-list R:literal N:literal B:literal Q:literal K:literal B:literal N:literal R:literal
-                                              P:literal P:literal P:literal P:literal P:literal P:literal P:literal P:literal
-                                              _:literal _:literal _:literal _:literal _:literal _:literal _:literal _:literal
-                                              _:literal _:literal _:literal _:literal _:literal _:literal _:literal _:literal
-                                              _:literal _:literal _:literal _:literal _:literal _:literal _:literal _:literal
-                                              _:literal _:literal _:literal _:literal _:literal _:literal _:literal _:literal
-                                              p:literal p:literal p:literal p:literal p:literal p:literal p:literal p:literal
-                                              r:literal n:literal b:literal q:literal k:literal b:literal n:literal r:literal)
+  (initial-position:list-address <- init-list R:literal P:literal _:literal _:literal _:literal _:literal p:literal r:literal
+                                              N:literal P:literal _:literal _:literal _:literal _:literal p:literal n:literal
+                                              B:literal P:literal _:literal _:literal _:literal _:literal p:literal b:literal
+                                              Q:literal P:literal _:literal _:literal _:literal _:literal p:literal q:literal
+                                              K:literal P:literal _:literal _:literal _:literal _:literal p:literal k:literal
+                                              B:literal P:literal _:literal _:literal _:literal _:literal p:literal b:literal
+                                              N:literal P:literal _:literal _:literal _:literal _:literal p:literal n:literal
+                                              R:literal P:literal _:literal _:literal _:literal _:literal p:literal r:literal)
   ; assert(length(initial-position) == 64)
 ;?   (print-primitive (("list-length\n" literal)))
   (len:integer <- list-length initial-position:list-address)
@@ -51,10 +51,33 @@
 ])
 
 (function print-board [
-  (reply)
+  (default-scope:scope-address <- new scope:literal 30:literal)
+  (b:board-address <- next-input)
+  (row:integer <- copy 7:literal)
+  ; print each row
+  { begin
+    (done?:boolean <- less-than row:integer 0:literal)
+    (break-if done?:boolean)
+    ; print each square in the row
+    (col:integer <- copy 0:literal)
+    { begin
+      (done?:boolean <- equal col:integer 8:literal)
+      (break-if done?:boolean)
+      (f:file-address <- index b:board-address/deref col:integer)
+      (s:square <- index f:file-address/deref row:integer)
+      (print-primitive s:square)
+      (print-primitive ((" " literal)))
+      (col:integer <- add col:integer 1:literal)
+      (loop)
+    }
+    (print-primitive (("\n" literal)))
+    (row:integer <- subtract row:integer 1:literal)
+    (loop)
+  }
 ])
 
 (function main [
+;?   (print-primitive (("\u2654 \u265a" literal)))
   (b:board-address <- read-board)
   (print-board b:board-address)
 ])