Commit 746fe14d7546e5486bbb125293eb9efcc2837512

Authored by Imanol-Mikel Barba Sabariego
1 parent eb337364

Now printing in HEX like god intended to. Also printing character in OUT instructions

... ... @@ -161,7 +161,7 @@ void translate_args(uint16_t a1, uint16_t a2, uint16_t a3, char *arg1, char *arg
161 161 }
162 162 else
163 163 {
164   - sprintf(arg1,"%d",a1);
  164 + sprintf(arg1,"%02X",a1);
165 165 }
166 166  
167 167 if(a2 > MAX_INT)
... ... @@ -170,7 +170,7 @@ void translate_args(uint16_t a1, uint16_t a2, uint16_t a3, char *arg1, char *arg
170 170 }
171 171 else
172 172 {
173   - sprintf(arg2,"%d",a2);
  173 + sprintf(arg2,"%02X",a2);
174 174 }
175 175  
176 176 if(a3 > MAX_INT)
... ... @@ -179,7 +179,7 @@ void translate_args(uint16_t a1, uint16_t a2, uint16_t a3, char *arg1, char *arg
179 179 }
180 180 else
181 181 {
182   - sprintf(arg3,"%d",a3);
  182 + sprintf(arg3,"%02X",a3);
183 183 }
184 184  
185 185 }
... ... @@ -193,64 +193,71 @@ void print_instruction(uint16_t opcode, uint16_t a1, uint16_t a2, uint16_t a3)
193 193 switch(opcode)
194 194 {
195 195 case HALT:
196   - fprintf(stderr,"HALT\n");
  196 + fprintf(stderr, "HALT\n");
197 197 break;
198 198 case MOV:
199   - fprintf(stderr,"MOV %s %s\n",arg1,arg2);
  199 + fprintf(stderr, "MOV %s %s\n", arg1, arg2);
200 200 break;
201 201 case PUSH:
202   - fprintf(stderr,"PUSH %s\n",arg1);
  202 + fprintf(stderr, "PUSH %s\n", arg1);
203 203 break;
204 204 case POP:
205   - fprintf(stderr,"POP %s\n",arg1);
  205 + fprintf(stderr, "POP %s\n", arg1);
206 206 break;
207 207 case TEQ:
208   - fprintf(stderr,"TEQ %s %s %s\n",arg1,arg2,arg3);
  208 + fprintf(stderr, "TEQ %s %s %s\n", arg1, arg2, arg3);
209 209 break;
210 210 case TGT:
211   - fprintf(stderr,"TGT %s %s %s\n",arg1,arg2,arg3);
  211 + fprintf(stderr, "TGT %s %s %s\n", arg1, arg2, arg3);
212 212 break;
213 213 case JMP:
214   - fprintf(stderr,"JMP %s\n",arg1);
  214 + fprintf(stderr, "JMP %s\n", arg1);
215 215 break;
216 216 case JNZ:
217   - fprintf(stderr,"JNZ %s %s\n",arg1,arg2);
  217 + fprintf(stderr, "JNZ %s %s\n", arg1, arg2);
218 218 break;
219 219 case JZ:
220   - fprintf(stderr,"JZ %s %s\n",arg1,arg2);
  220 + fprintf(stderr, "JZ %s %s\n", arg1, arg2);
221 221 break;
222 222 case ADD:
223   - fprintf(stderr,"ADD %s %s %s\n",arg1,arg2,arg3);
  223 + fprintf(stderr, "ADD %s %s %s\n", arg1, arg2, arg3);
224 224 break;
225 225 case MUL:
226   - fprintf(stderr,"MUL %s %s %s\n",arg1,arg2,arg3);
  226 + fprintf(stderr, "MUL %s %s %s\n", arg1, arg2, arg3);
227 227 break;
228 228 case MOD:
229   - fprintf(stderr,"MOD %s %s %s\n",arg1,arg2,arg3);
  229 + fprintf(stderr, "MOD %s %s %s\n", arg1, arg2, arg3);
230 230 break;
231 231 case AND:
232   - fprintf(stderr,"AND %s %s %s\n",arg1,arg2,arg3);
  232 + fprintf(stderr, "AND %s %s %s\n", arg1, arg2, arg3);
233 233 break;
234 234 case OR:
235   - fprintf(stderr,"OR %s %s %s\n",arg1,arg2,arg3);
  235 + fprintf(stderr, "OR %s %s %s\n", arg1, arg2, arg3);
236 236 break;
237 237 case NOT:
238   - fprintf(stderr,"NOT %s %s\n",arg1,arg2);
  238 + fprintf(stderr, "NOT %s %s\n", arg1, arg2);
239 239 break;
240 240 case LOAD:
241   - fprintf(stderr,"LOAD %s %s\n",arg1,arg2);
  241 + fprintf(stderr, "LOAD %s %s\n", arg1, arg2);
242 242 break;
243 243 case STOR:
244   - fprintf(stderr,"STOR %s %s\n",arg1,arg2);
  244 + fprintf(stderr, "STOR %s %s\n", arg1, arg2);
245 245 break;
246 246 case CALL:
247   - fprintf(stderr,"CALL %s\n",arg1);
  247 + fprintf(stderr, "CALL %s\n", arg1);
248 248 break;
249 249 case RET:
250   - fprintf(stderr,"RET\n");
  250 + fprintf(stderr, "RET\n");
251 251 break;
252 252 case OUT:
253   - fprintf(stderr,"OUT %s\n",arg1);
  253 + if (a1 <= MAX_INT)
  254 + {
  255 + fprintf(stderr, "OUT '%c'\n",a1);
  256 + }
  257 + else
  258 + {
  259 + fprintf(stderr, "OUT %s\n", arg1);
  260 + }
254 261 break;
255 262 case IN:
256 263 fprintf(stderr,"IN %s\n",arg1);
... ... @@ -259,7 +266,7 @@ void print_instruction(uint16_t opcode, uint16_t a1, uint16_t a2, uint16_t a3)
259 266 fprintf(stderr,"NOP\n");
260 267 break;
261 268 default:
262   - fprintf(stderr,"UNK %d\n", opcode);
  269 + fprintf(stderr,"UNK %02X\n", opcode);
263 270 break;
264 271 }
265 272 }
... ... @@ -273,10 +280,15 @@ void debug_program()
273 280 uint16_t arg3;
274 281 for(;;)
275 282 {
  283 + if(in_breakpoint(pc))
  284 + {
  285 + breakpoint = 1;
  286 + fprintf(stderr,"Breakpoint hit @ pc=%02X",pc);
  287 + }
276 288 if(in_breakpoint(pc) || breakpoint)
277 289 {
278 290 breakpoint = 1;
279   - fprintf(stderr, "%d: ", pc);
  291 + fprintf(stderr, "%02X: ", pc);
280 292 print_instruction(mem[pc], mem[pc+1], mem[pc+2], mem[pc+3]);
281 293 query();
282 294 }
... ...
disasm.c
... ... @@ -11,7 +11,7 @@ void disassemble_program(uint32_t length)
11 11 {
12 12 break;
13 13 }
14   - fprintf(stderr,"%d: ",pc);
  14 + fprintf(stderr,"%02X: ",pc);
15 15 uint16_t opcode = fetch();
16 16 decode_instruction(opcode,&arg1,&arg2,&arg3);
17 17 print_instruction(opcode,arg1,arg2,arg3);
... ...
registers.c
... ... @@ -11,15 +11,15 @@ uint16_t pc = 0;
11 11  
12 12 void print_regs()
13 13 {
14   - fprintf(stderr,"r0: %2x\n",regs[0]);
15   - fprintf(stderr,"r1: %2x\n",regs[1]);
16   - fprintf(stderr,"r2: %2x\n",regs[2]);
17   - fprintf(stderr,"r3: %2x\n",regs[3]);
18   - fprintf(stderr,"r4: %2x\n",regs[4]);
19   - fprintf(stderr,"r5: %2x\n",regs[5]);
20   - fprintf(stderr,"r6: %2x\n",regs[6]);
21   - fprintf(stderr,"r7: %2x\n",regs[7]);
22   - fprintf(stderr,"pc: %2x\n",pc);
  14 + fprintf(stderr,"r0: %02X\n",regs[0]);
  15 + fprintf(stderr,"r1: %02X\n",regs[1]);
  16 + fprintf(stderr,"r2: %02X\n",regs[2]);
  17 + fprintf(stderr,"r3: %02X\n",regs[3]);
  18 + fprintf(stderr,"r4: %02X\n",regs[4]);
  19 + fprintf(stderr,"r5: %02X\n",regs[5]);
  20 + fprintf(stderr,"r6: %02X\n",regs[6]);
  21 + fprintf(stderr,"r7: %02X\n",regs[7]);
  22 + fprintf(stderr,"pc: %02X\n",pc);
23 23 }
24 24  
25 25 void dump_regs(uint16_t *dump)
... ...