1 extern int sys_read(int,int);
2 extern int sys_request(int,int);
3 extern int sys_write(int,int);
4 extern int vocab_get(int);
5 extern int vocab_set(int,int);
8 extern void rpush(int);
10 extern void rinit(void);
11 static char memseg
[1024] =
12 { 0, 0, 0, 9, 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 0, 0, 0,
13 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 16, 0, 0, 0, 13, 0, 0, 0, 1
15 static int interpret(int,int);
17 /* int start, here, eax, ebx, esi, mode;
18 here = (int) memseg + 512;
20 *(int*) mode = 11; //executing
35 //initial definition of "interpret"
37 *(int*)here++ = 4; //WORD
38 *(int*)here++ = 2; //LIT
39 *(int*)here++ = mode; //addr of mode var
40 *(int*)here++ = 10; //FETCH
41 *(int*)here++ = 12; //EXECUTE
42 *(int*)here++ = 13; //NOOP
43 *(int*)here++ = 1; //RET
54 //initial definition of "quit"
56 *(int*)here++ = 3; //rinit
57 *(int*)here++ = ebx; //interpret
58 *(int*)here++ = 9; //JMP
59 *(int*)here++ = esi; //jmp addr 0 (interpret)
61 vocab_set(eax, esi); */
62 return interpret((int)memseg
, (int)memseg
);
64 static int interpret(int esi
, int here
) {
65 int eax
= 0, ebx
= 0, ecx
= 0, edi
= 0;
78 case 2: // pushnext (lit)
90 sys_read(pop(),pop());
92 case 6: // sys_request
93 sys_request(pop(),pop());
96 sys_write(pop(),pop());
107 *(int*)pop() = pop();
115 default: // eax is an addr, jump to it and push esi