# HG changeset patch # User Robert McIntyre # Date 1331948892 18000 # Node ID 744de3427c0597d6ddd00f7b72e7b9e86d377f41 # Parent d6f2a06cb1280e663f470c8f0ee9131714068502 finished Mode 2 of bootstrapping program diff -r d6f2a06cb128 -r 744de3427c05 clojure/com/aurellem/assembly.clj --- a/clojure/com/aurellem/assembly.clj Fri Mar 16 20:31:53 2012 -0500 +++ b/clojure/com/aurellem/assembly.clj Fri Mar 16 20:48:12 2012 -0500 @@ -603,7 +603,7 @@ 0x05 ;D381 ; 5 variables: 0x00 ;D382 ; current-mode 0x00 ;D383 ; bytes-left-to-write - 0x00 ;D384 ; unused + 0x00 ;D384 ; start-point 0x00 ;D385 ; unused 0x00 ;D386 ; unused @@ -623,8 +623,7 @@ 0xA8 ;D38E 0xD3 ;D38F - - ;; GOTO Mode 1 (set-bytes) if current-mode is 1 + ;; GOTO Mode 1 (set-length) if current-mode is 1 0xFE ;D390 0x01 ;D391 ; compare A with 0x01 @@ -632,11 +631,14 @@ 0xB1 ;D393 0xD3 ;D394 ; goto Mode 1 if A == 1 - 0x00 ;D395 - 0x00 ;D396 - 0x00 ;D397 - 0x00 ;D398 - 0x00 ;D399 + ;; GOTO Mode 2 (set-start-point) if current mode is 2 + 0xFE ;D395 + 0x02 ;D396 ; compare A with 0x02 + + 0xCA ;D397 + 0xBF ;D398 + 0xD3 ;D399 ; goto Mode 2 if A == 2 + 0x00 ;D39A 0x00 ;D39B 0x00 ;D39C @@ -674,13 +676,13 @@ ;; End Mode 0 - ;; Mode 1 -- input bytes mode - ;; This is the header for writing things to memory - ;; specifies the number of bytes to write. + ;; Mode 1 -- set-length mode + ;; This is the header for writing things to memory. + ;; User 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 bytes left to write to input-number; ;; set current-mode to 0x02. 0xFA ;D3B1 ; load input-number (0xD352) 0x52 ;D3B2 ; into A @@ -690,7 +692,7 @@ 0x83 ;D3B5 ; (0xD383) 0xD3 ;D3B6 - 0x3E ;D3B7 ; load 0x02 to A + 0x3E ;D3B7 ; load 0x02 into A. 0x02 ;D3B8 0xEA ;D3B9 ; load A to current-mode @@ -701,21 +703,36 @@ 0x1D ;D3BD 0xD3 ;D3BE ;; End Mode 1 + + + ;; Mode 2 -- set start-point mode + ;; Final part of the header for writing things to memory. + ;; User specifies the start location in RAM to which + ;; data will be written. + ;; Mode is auto advanced to Mode 3 after this mode completes. + + ;; Set start-point to input-number; + ;; set current mode to 0x03. + 0xFA ;D3BF ; load input-number (0xD352) + 0x52 ;D3C0 ; into A + 0xD3 ;D3C1 + + 0xEA ;D3C2 ; load A into start-point + 0x84 ;D3C3 ; (0xD384) + 0xD3 ;D3C4 + + 0x3E ;D3C5 ; load 0x03 into A. + 0x03 ;D3C6 + + 0xEA ;D3C7 ; load A to current-mode, + 0x82 ;D3C8 ; advancing from Mode 2 to + 0xD3 ;D3C9 ; Mode 3. - 0x00 ;D3BF - 0x00 ;D3C0 - 0x00 ;D3C1 - 0x00 ;D3C2 - 0x00 ;D3C3 - 0x00 ;D3C4 - 0x00 ;D3C5 - 0x00 ;D3C6 - 0x00 ;D3C7 - 0x00 ;D3C8 - 0x00 ;D3C9 - 0x00 ;D3CA - 0x00 ;D3CB - 0x00 ;D3CC + 0xC3 ;D3CA ; go back to beginning + 0x1D ;D3CB + 0xD3 ;D3CC + ;;End Mode 2 + 0x00 ;D3CD 0x00 ;D3CE 0x00 ;D3CF @@ -727,6 +744,11 @@ 0x00 ;D3D5 0x00 ;D3D6 + ;; Mode 3 -- write bytes mode + ;; This is where RAM manipulation happens. + ;; User supplies bytes every frame, which are written + ;; sequentially to +