You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -486,7 +486,7 @@ int main(int argc, char* argv[]) {
486
486
//Our machine jumps to +1 address when called , jumped or returned, so for instructions we need to have a gap(1 word), and we jump to the next address.
Copy file name to clipboardExpand all lines: Docs.txt
+13-23Lines changed: 13 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -126,7 +126,8 @@ INSTRUCTIONS
126
126
=> 6 X X X | E X X X -> LDI -> LOAD IMM -> LOAD IMMEDIATE VALUE INTO THE AC, (THE HIGHEST 4 BITS WILL BE FILLED WITH 0). -> 0f, 27 ---
127
127
=> 7 X X X | F X X X -> SWP -> SWAP -> SWAPS THE VALUES OF AC AND THE OPERAND. -> 12, 2a
128
128
129
-
(--- means the rom is not written for these instructions, because the assembling program cannot actually produce the machine code for these, can be implemented by th user if intrested.)
129
+
(--- means the rom is not written for these instructions, because the assembling program cannot actually produce the machine code for these,
130
+
can be implemented by the user if intrested.)
130
131
131
132
-OPERAND IS NOT REQUIRED : INSTRUCTION FORMAT 0-X-X-X OR 8-X-X-X
132
133
@@ -147,7 +148,7 @@ INSTRUCTIONS
147
148
=> 0 2 X X -> ADD(34) -> ADD(DR + AC) -> ADD THE VALUE OF DR AND AC AND STORE IT IN AC.
148
149
=> 0 3 X X -> MUL(4A) -> MULTIPLY(DR * AC) -> MULTIPLY THE VALUE OF DR WITH AC.
149
150
=> 0 4 X X -> SUB(36) -> SUBTRACT(AC <- DR + (~AC + 1)) -> SUBTRACT AC FROM DR.
150
-
=> 0 5 X X -> DIV(_-) -> DIVIDE(AC <- REMAINDER OF AC/DR, QR <- AC/DR) -> DIVIDE AC WITH DR.
151
+
=> 0 5 X X -> DIV(9a) -> DIVIDE(AC <- REMAINDER OF AC/DR, QR <- AC/DR) -> DIVIDE AC WITH DR.
151
152
=> 0 6 X X -> CMP(46) -> COMPARE THE VALUES OF DR AND AC -> WILL SET THREE BITS BASED ON THE COMPARISION(SMALLER, EQUAL, GREATER).
152
153
=> 0 7 X X -> AND(3c) -> BITWISE AND(AC <- AC && DR) -> BITWISE AND WITH AC.
153
154
=> 0 8 X X -> BOR(38) -> BITWISE OR(AC <- AC || DR) -> BITWISE OR WITH AC.
@@ -172,7 +173,7 @@ INSTRUCTIONS
172
173
=> 8 C X X -> INP(91) -> LOAD THE VALUE FROM INPUT REGISTER INTO THE DATA REGISTER.
173
174
=> 8 D X X -> OUT(94) -> PLACE THE VALUE OF AC IN THE OUPUT REGISTER.
174
175
=> 8 E X X -> IEN(96) -> SET THE INTERRUPT ENABLE ON.
175
-
=> 8 F X X -> IEF -> SET THE INTERRUPT ENABLE OF.
176
+
=> 8 F X X -> IEF(98) -> SET THE INTERRUPT ENABLE OF.
176
177
177
178
178
179
* CAN HAVE WAY MORE INSTRUCTIONS THAN THIS, BUT IT WILL OVERCOMPLICATE THE SYSTEM.
@@ -186,7 +187,7 @@ MAIN COMPUTER LOOP
186
187
187
188
BOOTSTRAP -> LOAD -> THE STARTING POINT OG THE PROGRAM IS GOING TO BE THE ADDRESS AT WHICH THE INSTRUCTIONS ARE GOING TO START(.instructions)
188
189
we are going to jump to the starting point of the instructions indirectly from the end of the bootstrap, which will put the computer in the user written instruction loop.
189
-
The instructions are going to be performed sequentially till they encounter "jmp", "cll" or "hlt" (or some other interrupt)
190
+
The instructions are going to be performed sequentially till they encounter "jmp", "cal" or "hlt" (or some other interrupt)
190
191
This is going to be repeated, thats it.
191
192
192
193
+++++++++++++++++++++++++++++
@@ -231,8 +232,14 @@ ROM OUTPUTS AND THE SIGNIFICANCE OF EACH BIT(STORED IN CONTROL DATA REGISTER, SH
231
232
4 => ENABLE THE ALU MULTIPLEXER(USED WHEN THE MIROINSTRUCTION TAKES MORE THAN ONE-CLOCK CYCLE)
232
233
5 => SHIFT THE AC REGISTER TO THE LEFT
233
234
6 => FIRST BIT IS TO LOAD THE INPUT INTO mAC PARALLELY, AND THE SECOND BIT IS FOR LEFT SHIFTING mAC.
234
-
7 => SETTING THE CONDITIONAL BIT(FIRST 2 BITS, CHOOSE FROM 'CARRY', 'LESS THAN', 'EQUALS', 'GREATER THAN'), THIS WILL BE ONLY CONSIDERED
235
-
WHEN THE 3RD BIT IS 0, ELSE THE CONDITION STATUS WILL BE SET DIRECTLY TO ONE, WITHOUT DEPENDING ON ANY OTHER THINGS.
235
+
7 => SETTING THE CONDITION STATUS BIT, THIS WILL CONTROL IF THE NEXT "JMP" SHOULD OCCUR OR NOT, THIS IS BASICALLY AN OCTAL NUMBER,
236
+
*GENERALLY THIS IS DONE AFTER A "CMP",IT IS LIKE A PART OF THE COMPARE OPERATION.
237
+
0, 6, 7 WILL SET THE NUMBERS TO VALUE TO ZERO.
238
+
1 WILL SET IT TO ONE NO MATTER THE OTHER CONDITIONS(USE THIS WHEN YOU ARE JUMPING UNCONDITIONALLY AS WE DO NOT HAVE AN INSTRUCTION FOR IT).
239
+
2 WILL SET THE VALUE TO CARRY FLIP-FLOP VALUE.
240
+
3 WILL SET IT TO THE RESULT FROM THE LESSER FLIP-FLOP FROM THE COMPARISION RESULT.
241
+
4 WILL SET IT TO EQUAL FLIP-FLOP FROM THE EQUALS TO FLIP-FLOP FROM THE COMPARISION RESULT.
242
+
5 WILL SET TO THE GREATER THAN FLIP-FLOP FROM THE COMPARISION RESULT.
236
243
8 => RESET dAC && mAC
237
244
9 => LOAD Q PARALLELY
238
245
A => FIRST BIT : STACK POINTER COUNT GO UP OR DOWN(IF 1 CYCLES WILL MATTER), SECOND BIT : IF 1 COUNT WILL GO UP, ELSE COUNT WILL GO DOWN(FOR PUSH AND POP RESPECTIVELY)
@@ -268,20 +275,3 @@ THE STARTING MICRO-OPERATION OF EVERY INSTRUCTION WILL BE THE EXACT SAME THAT IS
268
275
+ BUT IN THE CASE OF JUMP(AS OUR JUMP IS ALWAYS CONDITIONAL) IF THE CONDITION IS "1" THE ADDRESS TO WHICH + 1 IS LOADED, BUT IF IT NOT, THEN WE LOAD THE ADDRESS "PC + 1",
0 commit comments