diff --git a/0.jpg b/0.jpg
new file mode 100644
index 0000000..70ad1e5
Binary files /dev/null and b/0.jpg differ
diff --git a/1.jpg b/1.jpg
new file mode 100644
index 0000000..cb65576
Binary files /dev/null and b/1.jpg differ
diff --git a/2.jpg b/2.jpg
new file mode 100644
index 0000000..11971f0
Binary files /dev/null and b/2.jpg differ
diff --git a/3.jpg b/3.jpg
new file mode 100644
index 0000000..157bb02
Binary files /dev/null and b/3.jpg differ
diff --git a/4.jpg b/4.jpg
new file mode 100644
index 0000000..b537722
Binary files /dev/null and b/4.jpg differ
diff --git a/5.jpg b/5.jpg
new file mode 100644
index 0000000..e9b64c1
Binary files /dev/null and b/5.jpg differ
diff --git a/6.jpg b/6.jpg
new file mode 100644
index 0000000..46e7067
Binary files /dev/null and b/6.jpg differ
diff --git a/7.jpg b/7.jpg
new file mode 100644
index 0000000..146cbb2
Binary files /dev/null and b/7.jpg differ
diff --git a/8.jpg b/8.jpg
new file mode 100644
index 0000000..a7aee6e
Binary files /dev/null and b/8.jpg differ
diff --git a/monet_09.jpg b/9.jpg
similarity index 100%
rename from monet_09.jpg
rename to 9.jpg
diff --git a/GetUserChoice+StepUpdate+WinState.ipynb b/GetUserChoice+StepUpdate+WinState.ipynb
deleted file mode 100644
index 6fd2247..0000000
--- a/GetUserChoice+StepUpdate+WinState.ipynb
+++ /dev/null
@@ -1,339 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 49,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Assembled! Use %dis or %dump to examine; use %exe to run.\n"
- ]
- }
- ],
- "source": [
- ".ORIG x3000\n",
- ".SET MODE TERMINAL\n",
- " JSR GETCHOICE\n",
- " TRAP x22\n",
- " AND R0, #0\n",
- " ADD R0, R0, #15\n",
- " ADD R0, R0, #15\n",
- " ADD R0, R0, #15\n",
- " ADD R0, R0, #4\n",
- " ADD R5, R5, #1\n",
- " ;TRAP x23\n",
- " JSR GETSTEP\n",
- " HALT\n",
- " \n",
- "GETCHOICE: AND R0, #0\n",
- " LEA R0, ASKFORCHOICE\n",
- " RET\n",
- " \n",
- ";;R1 -- UPDATE THE RESULT\n",
- ";;R5 -- STEP LIMIT\n",
- ";;R6 -- ADDRESS IN R7(return address)\n",
- ";;R2 -- GOAL\n",
- "\n",
- "GETSTEP: ADD R0, R0, #-15\n",
- " ADD R0, R0, #-15\n",
- " ADD R0, R0, #-15\n",
- " ;;;;;;;;;;;;;;;;;;;;start stack\n",
- " LD R6, REG7_TOP\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;;;;Finish pushing R7 on stack\n",
- " ADD R0, R0, #-4\n",
- " BRz OPERATION1\n",
- " ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;;;;Finish poping \n",
- " ;ST R6, REG6\n",
- " ADD R0, R0, #-1\n",
- " BRz OPERATION2\n",
- " ADD R0, R0, #-1\n",
- " BRz OPERATION3\n",
- " RET\n",
- "\n",
- "OPERATION1: ;;;;;;;;;;;;;;;;; operations(need to change @Eileen)\n",
- " ADD R1, R1, #5\n",
- " ;;;;;;;;;;;;;;;;; start stack\n",
- " ADD R6, R6, #1\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;; Finish pushing R7 on stack\n",
- " JSR CHECKSTEP\n",
- " ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;; Finish poping \n",
- " RET\n",
- "\n",
- "OPERATION2: ADD R1,R1,#5\n",
- " ;JSR CHECKSTEP\n",
- " RET\n",
- "\n",
- "OPERATION3: ADD R1,R1,#8\n",
- " ;JSR CHECKSTEP\n",
- " RET\n",
- " \n",
- "CHECKSTEP: ;;;;;;;;;;;;;;;;;; update step\n",
- " ;;;;;;;;;;;;;;;;;; start stack\n",
- " ADD R6, R6, #1\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
- " ADD R5, R5, #-1\n",
- " BRz FINALSTATE\n",
- " ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
- " ;;BRp CHECK_NUM\n",
- " RET\n",
- "\n",
- "FINALSTATE:;;;;;;;;;;;;;;;;;; when step limit is consumed \n",
- " ;;;;;;;;;;;;;;;;; start stack\n",
- " ADD R6, R6, #1\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
- " LD R2, GOAL\n",
- " NOT R2, R2\n",
- " ADD R2, R2, #1\n",
- " ADD R1, R1, R2\n",
- " BRz WIN_STATE\n",
- " ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
- " ;;JSR LOSE_STATE\n",
- " RET\n",
- "\n",
- "LOSE_STATE: RET \n",
- "\n",
- "WIN_STATE: ;;;;;;;;;;;;;;;;; start stack\n",
- " ADD R6, R6, #1\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
- " JSR WIN_MES\n",
- " TRAP x22\n",
- " ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
- " ;;;;;;;;;;;;;;;;; start stack\n",
- " ADD R6, R6, #1\n",
- " STR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
- " AND R0, #0\n",
- " JSR WIN_PIC\n",
- " TRAP x22\n",
- " ;ADD R6, R6, #-1\n",
- " LDR R7, R6, #0\n",
- " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
- " HALT\n",
- " \n",
- "WIN_MES: AND R0, #0\n",
- " LEA R0, WIN_M\n",
- " RET\n",
- " \n",
- "WIN_PIC: AND R0, #0\n",
- " LEA R0, HEADER\n",
- " TERMINAL R0, 0\n",
- " RET\n",
- " \n",
- "REG7: .BLKW #10\n",
- "REG6: .FILL #0\n",
- "REG7_TOP: .FILL REG7\n",
- "TEMP: .FILL #0\n",
- "TEMP2: .FILL #0\n",
- "TEMP3: .FILL #0\n",
- "GOAL: .FILL #5\n",
- "ASKFORCHOICE: .STRINGZ \"Please enter your choice(1 or 2 or 3):\"\n",
- "GAMEOPS: .STRINGZ \"(1)A -= 1 (2)A /= 2 (if A%2 == 0) (3)A =/ 3(if A%3 == 0)\\n\"\n",
- "INITIAL: .STRINGZ \"12\"\n",
- "WIN_M: .STRINGZ \"\\nYOU WIN!\"\n",
- "HEADER: .STRINGZ \"
\" \n",
- ".END "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Please enter your choice(1 or 2 or 3):\n",
- "YOU WIN!"
- ]
- },
- {
- "data": {
- "text/html": [
- "
" - ], - "text/plain": [ - "
============================================================\n",
- "Computation completed\n",
- "============================================================\n",
- "Instructions: 2130\n",
- "Cycles: 17562 (0.008781 milliseconds)\n",
- "\n",
- "============================================================\n",
- "Registers:\n",
- "============================================================\n",
- "PC: x048E\n",
- "N: 0 Z: 0 P: 1 \n",
- "R0: x30D0 R1: x0000 R2: xFFFB R3: x0000 \n",
- "R4: x0000 R5: x0000 R6: x3050 R7: x3045 \n"
- ]
- }
- ],
- "source": [
- "%exe"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "============================================================\n",
- "Memory disassembled:\n",
- "============================================================\n",
- " x3000: x4809 JSR GETCHOICE [line: 2]\n",
- " x3001: xF022 PUTS [line: 3]\n",
- " x3002: x5020 AND R0, R0, #0 [line: 4]\n",
- " x3003: x102F ADD R0, R0, #15 [line: 5]\n",
- " x3004: x102F ADD R0, R0, #15 [line: 6]\n",
- " x3005: x102F ADD R0, R0, #15 [line: 7]\n",
- " x3006: x1024 ADD R0, R0, #4 [line: 8]\n",
- " x3007: x1B61 ADD R5, R5, #1 [line: 9]\n",
- " x3008: x4804 JSR GETSTEP [line: 11]\n",
- " x3009: xF025 HALT [line: 12]\n",
- "GETCHOICE: x300A: x5020 AND R0, R0, #0 [line: 16]\n",
- " x300B: xE03C LEA R0, ASKFORCHOICE [line: 17]\n",
- " x300C: xC1C0 RET [line: 18]\n",
- "GETSTEP: x300D: x1031 ADD R0, R0, #-15 [line: 25]\n",
- " x300E: x1031 ADD R0, R0, #-15 [line: 26]\n",
- " x300F: x1031 ADD R0, R0, #-15 [line: 27]\n",
- " x3010: x2C32 LD R6, REG7_TOP [line: 29]\n",
- " x3011: x7F80 STR R7, R6, 0 [line: 30]\n",
- " x3012: x103C ADD R0, R0, #-4 [line: 32]\n",
- " x3013: x0407 BRz OPERATION1 (or 7) [line: 33]\n",
- " x3014: x1DBF ADD R6, R6, #-1 [line: 34]\n",
- " x3015: x6F80 LDR R7, R6, 0 [line: 35]\n",
- " x3016: x103F ADD R0, R0, #-1 [line: 38]\n",
- " x3017: x040A BRz OPERATION2 (or 10) [line: 39]\n",
- " x3018: x103F ADD R0, R0, #-1 [line: 40]\n",
- " x3019: x040A BRz OPERATION3 (or 10) [line: 41]\n",
- " x301A: xC1C0 RET [line: 42]\n",
- "OPERATION1: x301B: x1269 ADD R1, R1, #9 [line: 45]\n",
- " x301C: x1DA1 ADD R6, R6, #1 [line: 47]\n",
- " x301D: x7F80 STR R7, R6, 0 [line: 48]\n",
- " x301E: x4807 JSR CHECKSTEP [line: 50]\n",
- " x301F: x1DBF ADD R6, R6, #-1 [line: 51]\n",
- " x3020: x6F80 LDR R7, R6, 0 [line: 52]\n",
- " x3021: xC1C0 RET [line: 54]\n",
- "OPERATION2: x3022: x1265 ADD R1, R1, #5 [line: 56]\n",
- " x3023: xC1C0 RET [line: 58]\n",
- "OPERATION3: x3024: x1268 ADD R1, R1, #8 [line: 60]\n",
- " x3025: xC1C0 RET [line: 62]\n",
- "CHECKSTEP: x3026: x1DA1 ADD R6, R6, #1 [line: 66]\n",
- " x3027: x7F80 STR R7, R6, 0 [line: 67]\n",
- " x3028: x1B7F ADD R5, R5, #-1 [line: 69]\n",
- " x3029: x0402 BRz FINALSTATE (or 2) [line: 70]\n",
- " x302A: x6F80 LDR R7, R6, 0 [line: 72]\n",
- " x302B: xC1C0 RET [line: 74]\n",
- "FINALSTATE: x302C: x241A LD R2, GOAL [line: 77]\n",
- " x302D: x94BF NOT R2, R2 [line: 78]\n",
- " x302E: x14BF ADD R2, R2, #-1 [line: 79]\n",
- " x302F: x1282 ADD R1, R2, R2 [line: 80]\n",
- " x3030: xC1C0 RET [line: 83]\n",
- "LOSE_STATE: x3031: xC1C0 RET [line: 85]\n",
- "WIN_STATE: x3032: x4804 JSR WIN_MES [line: 87]\n",
- " x3033: xF022 PUTS [line: 88]\n",
- " x3034: x5020 AND R0, R0, #0 [line: 89]\n",
- " x3035: x4804 JSR WIN_PIC [line: 90]\n",
- " x3036: xF025 HALT [line: 92]\n",
- "WIN_MES: x3037: x5020 AND R0, R0, #0 [line: 94]\n",
- " x3038: xE079 LEA R0, WIN_M [line: 95]\n",
- " x3039: xC1C0 RET [line: 96]\n",
- "WIN_PIC: x303A: x5020 AND R0, R0, #0 [line: 98]\n",
- " x303B: xE07F LEA R0, HEADER [line: 99]\n",
- " x303C: xC1C0 RET [line: 101]\n",
- "REG7: x303D: x3009 ST R0, GOAL [line: 103]\n",
- " x303E: x3009 - 12297 \n",
- " x303F: x301F - 12319 \n",
- " x3040: x301F - 12319 \n",
- " x3041: x3009 - 12297 \n",
- "REG6: x3042: x0000 NOOP - (no BR to REG7_TOP) (or 0) [line: 104]\n",
- "REG7_TOP: x3043: x303D ST R0, x3081 [line: 105]\n",
- "TEMP: x3044: x0000 NOOP - (no BR to TEMP2) (or 0) [line: 106]\n",
- "TEMP2: x3045: x0000 NOOP - (no BR to TEMP3) (or 0) [line: 107]\n",
- "TEMP3: x3046: x0000 NOOP - (no BR to GOAL) (or 0) [line: 108]\n",
- "GOAL: x3047: x0005 NOOP - (no BR to x304D) (or 5) [line: 109]\n",
- "ASKFORCHOICE: x3048: x0050 NOOP - (no BR to x3099) (or 80, 'P') [line: 110]\n",
- " x3049: x006C - 108 (or 108, 'l')\n",
- " x304A: x0065 - 101 (or 101, 'e')\n",
- " x304B: x0061 - 97 (or 97, 'a')\n",
- " x304C: x0073 - 115 (or 115, 's')\n",
- " x304D: x0065 - 101 (or 101, 'e')\n",
- " x304E: x0020 - 32 (or 32, ' ')\n",
- " x304F: x0065 - 101 (or 101, 'e')\n",
- " x3050: x006E - 110 (or 110, 'n')\n"
- ]
- }
- ],
- "source": [
- "%dis x3000 x3050"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "\u001b[0;31mKeyboard Interrupt!\n",
- "\u001b[0m"
- ]
- }
- ],
- "source": [
- "%exe"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Calysto LC3",
- "language": "asm",
- "name": "calysto_lc3"
- },
- "language_info": {
- "file_extension": ".asm",
- "mimetype": "text/x-gas",
- "name": "gas"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/GetUserChoice_StepUpdate_CheckWin_WinState.ipynb b/GetUserChoice_StepUpdate_CheckWin_WinState.ipynb
new file mode 100644
index 0000000..723e44b
--- /dev/null
+++ b/GetUserChoice_StepUpdate_CheckWin_WinState.ipynb
@@ -0,0 +1,562 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Assembled! Use %dis or %dump to examine; use %exe to run.\n"
+ ]
+ }
+ ],
+ "source": [
+ ".ORIG x3000\n",
+ " .SET MODE TERMINAL\n",
+ " ST R7, REG7\n",
+ " JSR PUSH \n",
+ " ADD R5, R5, #4 ; R5 stores the number of min steps\n",
+ " LD R1, INITIAL\n",
+ " AND R0, R0, #0\n",
+ " LEA R0, GAMEINTRO\n",
+ " TRAP x22\n",
+ "LOOP: LEA R0, FEEDBACK\n",
+ " TRAP x22\n",
+ " AND R0, R0, #0\n",
+ " AND R3, R3, #0\n",
+ " LD R3, NUM\n",
+ " JSR DISP\n",
+ " TRAP x24\n",
+ " AND R0, R0, #0\n",
+ " LEA R0, GOAL_MES\n",
+ " TRAP x22\n",
+ " AND R0, R0, #0\n",
+ " AND R3, R3, #0\n",
+ " LD R3, GOAL_NUM\n",
+ " JSR DISP\n",
+ " TRAP x24\n",
+ " JSR GETCHOICE\n",
+ " TRAP x22\n",
+ " AND R0, R0, #0\n",
+ " LEA R0, GAMEOPS\n",
+ " TRAP x22\n",
+ " JSR GETPROG\n",
+ " AND R0, R0, #0\n",
+ " LEA R0, PIC\n",
+ " TERMINAL R0, 0\n",
+ " AND R0, #0\n",
+ " TRAP x23\n",
+ " JSR GETSTEP\n",
+ " ST R1, NUM\n",
+ " ADD R5, R5, #0\n",
+ " BRp LOOP\n",
+ " JSR POP ;restore the value for all registers\n",
+ " LD R7, REG7\n",
+ " HALT\n",
+ "\n",
+ "INITIAL: .FILL #26 ;store the initial number\n",
+ "FEEDBACK: .STRINGZ \"Number(A) is: \"\n",
+ "GOAL_MES: .STRINGZ \"\\nReduce the number to: \"\n",
+ "ASKFORCHOICE: .STRINGZ \"\\nEnter your choice:\\n\"\n",
+ "GAMEOPS: .STRINGZ \"1) -1\\n2) /2 (A%2==0)\\n3) /3 (A%3==0)\\n\" \n",
+ "REG7_STACK: .BLKW #10\n",
+ "REG7_TOP: .FILL REG7_STACK\n",
+ "NUM: .FILL #26 ; store updated number\n",
+ "\n",
+ "PUSH: ST R6, REG6 ;; save R5, R6 to MEMORY\n",
+ " ST R5, REG5 ;; R7 has return address\n",
+ " ;; REG7 is in MEMORY already\n",
+ " ;; R6 and R5 are destroyed\n",
+ " LD R6, SREG ;; R6 is now TOP of stack\n",
+ " STR R0, R6, #0 ;; push R0 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " STR R1, R6, #0 ;; push R1 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " STR R2, R6, #0 ;; push R2 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " STR R3, R6, #0 ;; push R3 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " STR R4, R6, #0 ;; push R4 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " STR R5, R6, #0 ;; push R5 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " LD R5, REG6 ;; get R6 from MEMORY (destroys R5)\n",
+ " STR R5, R6, #0 ;; push R6 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " LD R5, REG7 ;; get R7 from MEMORY\n",
+ " STR R5, R6, #0 ;; push R7 on stack\n",
+ " ADD R6, R6, #1 ;; incr\n",
+ " ST R6, SREG ;; save incremented SREG\n",
+ " LD R6, REG6\n",
+ " LD R5, REG5 ;;\n",
+ " RET\n",
+ " \n",
+ "POP: LD R6, SREG ;; R6 is TOP of stack\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R1, R6, #0 ;; load R7\n",
+ " ST R1, REG7 ;; save to MEMORY\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R1, R6, #0 ;; load R6\n",
+ " ST R1, REG6 ;; save to MEMORY\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R5, R6, #0 ;; load R5\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R4, R6, #0 ;; load R4\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R3, R6, #0 ;; load R3\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R2, R6, #0 ;; load R2\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R1, R6, #0 ;; load R1\n",
+ " ADD R6, R6, #-1 ;; decr\n",
+ " LDR R0, R6, #0 ;; load R0\n",
+ " ST R6, SREG ;; save decremented TOP\n",
+ " LD R6, REG6, #0 ;; put R6 back the way it was\n",
+ " RET\n",
+ "\n",
+ "\n",
+ "REG: .BLKW #8\n",
+ "SREG: .FILL REG\n",
+ "REG5: .FILL #0\n",
+ "REG6: .FILL #0\n",
+ "REG7: .FILL #0\n",
+ "HALT \n",
+ " \n",
+ "GETCHOICE: AND R0, #0\n",
+ " LEA R0, ASKFORCHOICE\n",
+ " RET\n",
+ " \n",
+ ";;R1 -- UPDATE THE RESULT\n",
+ ";;R5 -- STEP LIMIT\n",
+ ";;R6 -- ADDRESS IN R7(return address)\n",
+ ";;R2 -- GOAL\n",
+ "\n",
+ "GETSTEP: ;;;;;;;;;;;;;;;;;;;;start pushing\n",
+ " LD R6, REG7_TOP\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;;;;Finish pushing R7 on stack\n",
+ " ADD R0, R0, #-15\n",
+ " ADD R0, R0, #-15\n",
+ " ADD R0, R0, #-15\n",
+ " ADD R0, R0, #-4\n",
+ " BRz OPERATION1\n",
+ " ADD R0, R0, #-1\n",
+ " BRz OPERATION2\n",
+ " ADD R0, R0, #-1\n",
+ " BRz OPERATION3\n",
+ " ;;;;;;;;;;;;;;;;;;;; start poping\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;;;;Finish poping\n",
+ " RET\n",
+ "\n",
+ "GETPROG:;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish pushing R7 on stack \n",
+ " LD R2, INITIAL\n",
+ " NOT R1, R1\n",
+ " ADD R1, R1, #1\n",
+ " ADD R3, R1, R2\n",
+ " ADD R1, R1, #-1\n",
+ " NOT R1, R1\n",
+ " JSR MULT\n",
+ " JSR DIV\n",
+ " ADD R0, R0, #15\n",
+ " ADD R0, R0, #15\n",
+ " ADD R0, R0, #15\n",
+ " ADD R0, R0, #3\n",
+ " LD R3, PICUPDATE\n",
+ " STR R0, R3, #0\n",
+ " ;;;;;;;;;;;;;;;;;;;; start poping\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;;;;Finish poping\n",
+ " RET\n",
+ " \n",
+ "GOAL_NUM: .FILL #3\n",
+ "GAMEINTRO: .STRINGZ \"Challenge: reduce A to B in min steps\\n\"\n",
+ "PIC: .STRINGZ \"
\" \n",
+ "PICUPDATE: .FILL x3177\n",
+ "\n",
+ "DISP: AND R0, R0, #0\n",
+ " LD R0, TEMP\n",
+ " ;LD R3, NUM\n",
+ " \n",
+ "TEN: ADD R3, R3, #-10\n",
+ " BRn ONE\n",
+ " ADD R0, R0, #1\n",
+ " ADD R3, R3, #0\n",
+ " BRp TEN\n",
+ " \n",
+ "ONE: ADD R3, R3, #10\n",
+ " BRp #0\n",
+ " \n",
+ "CALC: ADD R3, R3, #-1\n",
+ " BRn #3\n",
+ " LD R4, SEC\n",
+ " ADD R0, R0, R4\n",
+ " ADD R3, R3, #0\n",
+ " BRp CALC\n",
+ " ST R0, NUMUP\n",
+ " LEA R0, NUMUP\n",
+ " RET\n",
+ "\n",
+ "GOAL: .FILL GOAL_NUM\n",
+ "NUMUP: .FILL #0\n",
+ "TERMIN: .FILL x0000\n",
+ "TEMP: .FILL x3030\n",
+ "SEC: .FILL x0100\n",
+ "\n",
+ "\n",
+ "MULT: AND R0, R0, #0\n",
+ " ADD R0, R0, #9\n",
+ " ADD R4, R3, #0\n",
+ " ADD R3, R3, R4\n",
+ " ADD R0, R0, #-1\n",
+ " BRp #-3 \n",
+ " RET\n",
+ "\n",
+ "DIV: LDI R4, GOAL\n",
+ " NOT R4, R4\n",
+ " ADD R4, R4, #1\n",
+ " ADD R4, R2, R4\n",
+ " NOT R4, R4\n",
+ " ADD R4, R4, #1\n",
+ " AND R0, R0, #0\n",
+ " ADD R3, R3, R4\n",
+ " BRn #2\n",
+ " ADD R0, R0, #1\n",
+ " BRp #-4\n",
+ " RET\n",
+ "\n",
+ "OPERATION1: ;;;;;;;;;;;;;;;;; operations(need to change @Eileen)\n",
+ " ADD R1, R1, #-1\n",
+ " ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish pushing R7 on stack\n",
+ " JSR CHECKSTEP\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish poping \n",
+ " RET\n",
+ "\n",
+ "OPERATION2: ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish pushing R7 on stack\n",
+ " JSR DIVTWO\n",
+ " JSR CHECKSTEP\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish poping \n",
+ " RET\n",
+ "\n",
+ "DIVTWO: AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " ADD R2, R2, #-2 ; ALWAYS USE R2 TO STORE THE DENOMITOR\n",
+ " ADD R3, R3, R1 ; R3 to store the current R1\n",
+ " ADD R4, R4, #0 ; R4 to store the result of calculating\n",
+ " ADD R1, R1, R2 ; minus R1 by 2\n",
+ " BRn #4\n",
+ " BRz #9\n",
+ " ADD R4, R4, #1\n",
+ " ADD R1, R1, #0\n",
+ " BRp #-6\n",
+ " AND R1, R1, #0\n",
+ " ADD R1, R1, R3 ; restore the value of R1 if not dividable\n",
+ " AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " RET\n",
+ " ADD R1, R1, R4 ; otherwise udpate the value of R1\n",
+ " ADD R1, R1, #1\n",
+ " AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " RET\n",
+ "\n",
+ "OPERATION3: ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish pushing R7 on stack\n",
+ " JSR DIVTHREE\n",
+ " JSR CHECKSTEP\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;; Finish poping \n",
+ " RET\n",
+ "\n",
+ "\n",
+ "DIVTHREE: AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " ADD R2, R2, #-3 ; ALWAYS USE R2 TO STORE THE DENOMITOR\n",
+ " ADD R3, R3, R1 ; R3 to store the current R1\n",
+ " ADD R4, R4, #0 ; R4 to store the result of calculating\n",
+ " ADD R1, R1, R2 ; minus R1 by 2\n",
+ " BRn #4\n",
+ " BRz #9\n",
+ " ADD R4, R4, #1\n",
+ " ADD R1, R1, #0\n",
+ " BRp #-6\n",
+ " AND R1, R1, #0\n",
+ " ADD R1, R1, R3 ; restore the value of R1 if not dividable\n",
+ " AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " RET\n",
+ " ADD R1, R1, R4 ; otherwise udpate the value of R1\n",
+ " ADD R1, R1, #1\n",
+ " AND R2, R2, #0\n",
+ " AND R3, R3, #0\n",
+ " AND R4, R4, #0\n",
+ " RET\n",
+ " \n",
+ "CHECKSTEP: ;;;;;;;;;;;;;;;;;; update step\n",
+ " ADD R6, R6, #1\n",
+ " ADD R5, R5, #-1\n",
+ " BRp #5\n",
+ " ;;;;;;;;;;;;;;;;;; start stack\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
+ " ADD R5, R5, #0\n",
+ " BRz FINALSTATE\n",
+ " ;;;;;;;;;;;;;;;;;; start poping\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
+ " RET\n",
+ "\n",
+ "FINALSTATE:;;;;;;;;;;;;;;;;;; when step limit is consumed \n",
+ " ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
+ " LDI R2, GOAL\n",
+ " NOT R2, R2\n",
+ " ADD R2, R2, #1\n",
+ " ADD R3, R1, R2\n",
+ " BRz WIN_STATE\n",
+ " BRz #3 ; if not lose jump over the lose state\n",
+ " AND R0, #0 \n",
+ " LEA R0, LOSE_M ; lose state\n",
+ " TRAP x22\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
+ " RET\n",
+ "\n",
+ "WIN_STATE: ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
+ " JSR WIN_MES\n",
+ " TRAP x22\n",
+ " ADD R6, R6, #-1\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
+ " ;;;;;;;;;;;;;;;;; start stack\n",
+ " ADD R6, R6, #1\n",
+ " STR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; finish pushing R7\n",
+ " AND R0, #0\n",
+ " JSR WIN_PIC\n",
+ " LDR R7, R6, #0\n",
+ " ;;;;;;;;;;;;;;;;;; FINISH POPING\n",
+ " HALT\n",
+ " \n",
+ "WIN_MES: AND R0, #0\n",
+ " LEA R0, WIN_M\n",
+ " RET\n",
+ " \n",
+ "WIN_PIC: AND R0, #0\n",
+ " LEA R0, HEADER\n",
+ " TERMINAL R0, 0\n",
+ " RET\n",
+ " \n",
+ "\n",
+ "LOSE_M: .STRINGZ \"SORRY YOU LOSE!\\n\"\n",
+ "WIN_M: .STRINGZ \"\\nYOU WIN!\"\n",
+ "HEADER: .STRINGZ \"
\" \n",
+ ".END "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Challenge: reduce A to B in min steps\n",
+ "Number(A) is: 26\n",
+ "Reduce the number to: 03\n",
+ "Enter your choice:\n",
+ "1) -1\n",
+ "2) /2 (A%2==0)\n",
+ "3) /3 (A%3==0)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "" + ], + "text/plain": [ + "
" + ], + "text/plain": [ + "
" + ], + "text/plain": [ + "
" + ], + "text/plain": [ + "
" + ], + "text/plain": [ + "