# HG changeset patch # User Robert McIntyre # Date 1331947913 18000 # Node ID d6f2a06cb1280e663f470c8f0ee9131714068502 # Parent 6cbea8ab65b69bf7c27cec3efe078e6492f5d8cf finished Mode 1 of bootstrapping program diff -r 6cbea8ab65b6 -r d6f2a06cb128 clojure/com/aurellem/assembly.clj --- a/clojure/com/aurellem/assembly.clj Fri Mar 16 20:18:54 2012 -0500 +++ b/clojure/com/aurellem/assembly.clj Fri Mar 16 20:31:53 2012 -0500 @@ -609,31 +609,29 @@ ;; banch on current mode - ;; mode 0 -- input-mode mode - ;; means that we are waiting for a mode, so set the mode to - ;; whatever is currently in input number. If nothing is - ;; entered, then the program stays in input-mode mode - 0xFA ;D387 ; load current-mode (0xD382) 0x82 ;D388 ; into A 0xD3 ;D389 - 0x00 ;D38A + + ;; GOTO Mode 0 (input-mode) if current-mode is 0 0xFE ;D38B 0x00 ;D38C ; compare A with 0x00 - ;; TODO make this jump non-absolute - - 0xCA ;D38D ; GOTO Mode 0 if current-mode is 0 + 0xCA ;D38D ; goto Mode 0 if A == 0 0xA8 ;D38E 0xD3 ;D38F - 0x00 ;D390 - 0x00 ;D391 - 0x00 ;D392 - 0x00 ;D393 - 0x00 ;D394 + + ;; GOTO Mode 1 (set-bytes) if current-mode is 1 + 0xFE ;D390 + 0x01 ;D391 ; compare A with 0x01 + + 0xCA ;D392 + 0xB1 ;D393 + 0xD3 ;D394 ; goto Mode 1 if A == 1 + 0x00 ;D395 0x00 ;D396 0x00 ;D397 @@ -654,7 +652,13 @@ 0xC3 ;D3A5 0x1D ;D3A6 0xD3 ;D3A7 - ;; Mode 0 + + + ;; Mode 0 -- input-mode mode + ;; means that we are waiting for a mode, so set the mode to + ;; whatever is currently in input-number. If nothing is + ;; entered, then the program stays in input-mode mode + ;; set current-mode to input-number 0xFA ;D3A8 ; load input-number (0xD352) 0x52 ;D3A9 ; into A @@ -667,21 +671,37 @@ 0xC3 ;D3AE ; go back to beginning 0x1D ;D3AF 0xD3 ;D3B0 + ;; End Mode 0 - 0x00 ;D3B1 - 0x00 ;D3B2 - 0x00 ;D3B3 - 0x00 ;D3B4 - 0x00 ;D3B5 - 0x00 ;D3B6 - 0x00 ;D3B7 - 0x00 ;D3B8 - 0x00 ;D3B9 - 0x00 ;D3BA - 0x00 ;D3BB - 0x00 ;D3BC - 0x00 ;D3BD - 0x00 ;D3BE + + ;; Mode 1 -- input bytes mode + ;; This is the header for writing things to memory + ;; specifies the number of bytes to write. + ;; Mode is auto advanced to Mode 2 after this mode + ;; completes. + + ;; set bytes left to write to input-number, + ;; set current-mode to 0x02. + 0xFA ;D3B1 ; load input-number (0xD352) + 0x52 ;D3B2 ; into A + 0xD3 ;D3B3 + + 0xEA ;D3B4 ; load A into bytes-left-to-write + 0x83 ;D3B5 ; (0xD383) + 0xD3 ;D3B6 + + 0x3E ;D3B7 ; load 0x02 to A + 0x02 ;D3B8 + + 0xEA ;D3B9 ; load A to current-mode + 0x82 ;D3BA ; advancing from Mode 1 to + 0xD3 ;D3BB ; Mode 2 + + 0xC3 ;D3BC ; go back to beginning + 0x1D ;D3BD + 0xD3 ;D3BE + ;; End Mode 1 + 0x00 ;D3BF 0x00 ;D3C0 0x00 ;D3C1