Mercurial > hg > Members > kono > os9 > sbc09
comparison v09.c @ 16:807141dc5ee8
sysgo fork
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 08 Jul 2018 09:34:34 +0900 |
parents | 111e5defb8ab |
children | e3b08716aa53 |
comparison
equal
deleted
inserted
replaced
15:bb6a2a9f59f1 | 16:807141dc5ee8 |
---|---|
40 | 40 |
41 extern FILE *disk[]; | 41 extern FILE *disk[]; |
42 extern FILE *fp; // for disasm | 42 extern FILE *fp; // for disasm |
43 extern char *prog; // for disasm | 43 extern char *prog; // for disasm |
44 extern void disasm(int,int); | 44 extern void disasm(int,int); |
45 extern void do_mmu(Word,Byte); | |
45 | 46 |
46 void do_trace(FILE *tracefile) | 47 void do_trace(FILE *tracefile) |
47 { | 48 { |
48 Word pc=pcreg; | 49 Word pc=pcreg; |
49 Byte ir; | 50 Byte ir; |
52 // fprintf(tracefile,"i=%02x ",ir); if((ir&0xfe)==0x10) fprintf(tracefile,"%02x ",mem[pc]);else | 53 // fprintf(tracefile,"i=%02x ",ir); if((ir&0xfe)==0x10) fprintf(tracefile,"%02x ",mem[pc]);else |
53 // fprintf(tracefile," "); | 54 // fprintf(tracefile," "); |
54 fprintf(tracefile,"x=%04x y=%04x u=%04x s=%04x a=%02x b=%02x cc=%02x pc=", | 55 fprintf(tracefile,"x=%04x y=%04x u=%04x s=%04x a=%02x b=%02x cc=%02x pc=", |
55 xreg,yreg,ureg,sreg,*areg,*breg,ccreg); | 56 xreg,yreg,ureg,sreg,*areg,*breg,ccreg); |
56 fp = tracefile; | 57 fp = tracefile; |
57 prog = (char*)mem; | |
58 disasm(pc,pc); | 58 disasm(pc,pc); |
59 } | 59 } |
60 | 60 |
61 char *romfile = "v09.rom"; | 61 char *romfile = "v09.rom"; |
62 long romstart = 0x8000; | 62 long romstart = 0x8000; |
79 if((image=fopen("..\\v09.rom","rb"))==NULL) { | 79 if((image=fopen("..\\v09.rom","rb"))==NULL) { |
80 perror("v09, image file"); | 80 perror("v09, image file"); |
81 exit(2); | 81 exit(2); |
82 } | 82 } |
83 long len = filesize(image); | 83 long len = filesize(image); |
84 #ifdef USE_MMU | |
85 phymem = malloc(memsize + len - 0x2000); | |
86 rommemsize = memsize + len - 0x2000; | |
87 mem = phymem + memsize - 0x10000 ; | |
88 prog = (char*)mem; | |
84 if (romstart==0x8000) { | 89 if (romstart==0x8000) { |
85 #ifdef USE_MMU | |
86 phymem = malloc(memsize + len - 0x2000); | |
87 mem = phymem + memsize - 0x10000 ; | |
88 mmu = mem + 0xffa0; | |
89 romstart = memsize - 0x2000; | 90 romstart = memsize - 0x2000; |
90 memsize = memsize + len - 0x2000; | 91 } |
91 #else | 92 #else |
93 if (romstart==0x8000) { | |
92 romstart = 0x10000 - len; | 94 romstart = 0x10000 - len; |
95 } | |
93 #endif | 96 #endif |
94 } | |
95 fread(mem+(romstart&0xffff),len,1,image); | 97 fread(mem+(romstart&0xffff),len,1,image); |
96 fclose(image); | 98 fclose(image); |
99 #ifdef USE_MMU | |
100 do_mmu(0x91,0); // set mmu | |
101 do_mmu(0xa7,0x3f); // initial mmu value | |
102 #endif | |
97 } | 103 } |
98 | 104 |
99 void usage(void) | 105 void usage(void) |
100 { | 106 { |
101 fprintf(stderr,"Usage: v09 [-rom rom-image] [-l romstart] [-t tracefile [-tl addr] [-nt]" | 107 fprintf(stderr,"Usage: v09 [-rom rom-image] [-l romstart] [-t tracefile [-tl addr] [-nt]" |
162 } | 168 } |
163 #endif | 169 #endif |
164 read_image(); | 170 read_image(); |
165 if (setterm) set_term(escchar); | 171 if (setterm) set_term(escchar); |
166 pcreg=(mem[0xfffe]<<8)+mem[0xffff]; | 172 pcreg=(mem[0xfffe]<<8)+mem[0xffff]; |
173 prog = (char*)mem; // for disasm | |
167 interpr(); | 174 interpr(); |
168 return 0; | 175 return 0; |
169 } | 176 } |
170 | 177 |