blob: 652c181776186184837e3b5b8dd9c3d35d8a5b50 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/*
* interpreter.c WILL BE a tool which can be used to interpret 6502 machine code inline.
* Machine code is expected as hexadecimal of length 2 or 6, depending on the instruction.
* There are a few special characters which print debug information
Q - Quit
P - Processor status dump
M - Dump a page of memory
*/
#include"include.h"
#include"debug.h"
int main(){
char c;
unsigned char a, b;
while(1){
c = fgetc(stdin);
// Exit condition
if ( (c == 'Q') || (c == 'q') || (c == EOF) ) break;
if (dCharToNum(c) == -1){
// Debug print conditions
switch(c){
// Print debug information
case 'P': case 'p':
dStatusDump();
break;
// Dump memory page
case 'M': case 'm':
byte m;
m += dCharToNum(fgetc(stdin)) << 4;
m += dCharToNum(fgetc(stdin));
dPageDump(m);
break;
case ' ':
break;
}
}else{ // RUN INSTRUCTION
// Pass in Instruction
byte inst = dCharToNum(c) << 4;
inst += dCharToNum(fgetc(stdin));
// Pass in Value
address pass = 0x0000;
int range = fAddressGetLength(getITAddressing(inst));
range = ((2*range)-2);
c = fgetc(stdin);
for(int i = 0; i < range; i++){
if (c != ' ' && c != EOF){
pass <<= 4;
pass += c;
c = fgetc(stdin);
}else{
break;
}
}
current_instruction = getITFunction(inst);
callIT(current_instruction, pass);
}
}
return 0;
}
|