annotate src/v09.c @ 158:a4aa3ec95b75

fix addCurrent
author kono
date Mon, 21 Jan 2019 10:39:50 +0900
parents ef5959682d03
children ef64e3f4e229
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* 6809 Simulator V09.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Copyright 1994, L.C. Benschop, Eidnhoven The Netherlands.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 This version of the program is distributed under the terms and conditions
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 of the GNU General Public License version 2. See the file COPYING.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 THERE IS NO WARRANTY ON THIS PROGRAM!!!
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 This program simulates a 6809 processor.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 System dependencies: short must be 16 bits.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 char must be 8 bits.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 long must be more than 16 bits.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 arrays up to 65536 bytes must be supported.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 machine must be twos complement.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 Most Unix machines will work. For MSODS you need long pointers
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 and you may have to malloc() the mem array of 65536 bytes.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 Define BIG_ENDIAN if you have a big-endian machine (680x0 etc)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 Special instructions:
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 SWI2 writes char to stdout from register B.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 SWI3 reads char from stdout to register B, sets carry at EOF.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 (or when no key available when using term control).
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 SWI retains its normal function.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 CWAI and SYNC stop simulator.
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 */
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 #include <stdio.h>
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 #include <stdlib.h>
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 #include <strings.h>
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #include <sys/stat.h>
151
ef5959682d03 fix for linux
kono
parents: 85
diff changeset
34 #include <string.h>
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 #define engine extern
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 #include "v09.h"
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 FILE *tracefile;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
2
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
42 extern FILE *disk[];
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
43 extern FILE *fp; // for disasm
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
44 extern char *prog; // for disasm
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 extern void disasm(int,int);
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
46 extern void do_mmu(Word,Byte);
20
49fac9474858 separate trace file
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
47 extern void init_term(void) ;
64
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
48 #ifdef USE_VDISK
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
49 extern int setVdisk(int drv,char *name) ;
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
50 #endif
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
51
20
49fac9474858 separate trace file
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
52
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 void do_trace(FILE *tracefile)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 Word pc=pcreg;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 Byte ir;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 // fprintf(tracefile,"pc=%04x ",pc);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 // ir=mem[pc++];
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 // fprintf(tracefile,"i=%02x ",ir); if((ir&0xfe)==0x10) fprintf(tracefile,"%02x ",mem[pc]);else
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 // fprintf(tracefile," ");
85
4652761a60f9 mmeu fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
62 fprintf(tracefile,"x=%04x y=%04x u=%04x s=%04x a=%02x b=%02x cc=%02x dp=%02x pc=",
4652761a60f9 mmeu fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
63 xreg,yreg,ureg,sreg,*areg,*breg,ccreg,dpreg);
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 fp = tracefile;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 disasm(pc,pc);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 char *romfile = "v09.rom";
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
69 long romstart = 0x8000;
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 long
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 filesize(FILE *image)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 struct stat buf;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 fstat(fileno(image),&buf);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 return buf.st_size;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 void
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 read_image()
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 FILE *image;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 if((image=fopen(romfile,"rb"))==NULL)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 if((image=fopen("../v09.rom","rb"))==NULL)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 if((image=fopen("..\\v09.rom","rb"))==NULL) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 perror("v09, image file");
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 exit(2);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 long len = filesize(image);
52
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
91 /*
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
92 *
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
93 * 0x0000-0xdfff normal mem
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
94 * 0xxxxx-0xdfff rom
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
95 * 0xe000-0xe100 i/o
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
96 * 0xe000-0xffff rom
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
97 *
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
98 * discless boot
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
99 * rom image will be copyied from 0xed00-0x1xxxx
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
100 * boot copies 0x10000-0x1xxxx to os9's boot memory
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
101 */
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
102 #ifdef USE_MMU
52
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
103 /*
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
104 * In case of Coco, there is no ROM (switched out after boot )
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
105 * 0x00000-0x0fdff normal mem
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
106 * 0x0fe00-0x0ffff ram fixed address ram including io
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
107 * 0x10000-0x1fffff ram (2MB memory )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
108 * >0x200000 lapround
52
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
109 *
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
110 * discless boot
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
111 * rom image will be copyied from 0x7eed00-0x7fxxxx (all ram)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
112 * boot copies 0x800000-0x8xxxx to os9's boot memory (ususally done by rel.asm )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
113 * (original system copies it from fd or hd)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
114 * after that 0x800000-0x8xxxx will be all free
52
51b437557f42 boot without disk image
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
115 */
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
116 phymem = malloc(memsize );
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
117 rommemsize = memsize ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
118 mem = phymem + 0x38*0x2000;
24
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
119 mmu = &mem[0xffa0];
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
120 prog = (char*)mem;
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
121 if (romstart==0x8000) {
33
7c5379eb406e nitors9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
122 romstart = memsize ; // full 512kb mem
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
123 }
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
124 fread(mem+ 0xe000,len,1,image);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
125 mem[0xff90] = 0;
33
7c5379eb406e nitors9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
126 mem[0xffa7] = 0x3f;
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
127 #else
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
128 if (romstart==0x8000) {
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
129 romstart = 0x10000 - len;
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
130 }
29
3c14d647bb51 assembler and emulator fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
131 fread(mem+(romstart&0xffff),len,1,image);
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
132 #endif
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 fclose(image);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 void usage(void)
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 {
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
138 fprintf(stderr,"Usage: v09 [-rom rom-image] [-l romstart] [-t tracefile [-tl addr] [-nt]"
64
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
139 "[-[01] disk-image ] "
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
140 #ifdef USE_VDISK
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
141 "[v vdisk-base-dir ] "
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
142 #endif
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 "[-th addr] ]\n[-e escchar] \n");
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 exit(1);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 #define CHECKARG if(i==argc)usage();else i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 int
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 main(int argc,char *argv[])
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 char *imagename=0;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 int i;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 int setterm = 1;
55
8d151f303bee FIRQ does not worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
156 timerirq = 2; // use FIRQ default
158
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
157 #ifdef USE_MMU
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
158 memsize = 512*1024*4; // full 2 mbute
158
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
159 #else
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
160 memsize = 1024*64; // 64k
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
161 #endif
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 escchar='\x1d';
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 tracelo=0;tracehi=0xffff;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 for(i=1;i<argc;i++) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 if (strcmp(argv[i],"-t")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 if((tracefile=fopen(argv[i],"w"))==NULL) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 perror("v09, tracefile");
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 exit(2);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 tracing=1;attention=1;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 } else if (strcmp(argv[i],"-rom")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 i++;
61
80f4ec9a3420 fix writeln
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
174 timer = 3; // non standard rom image, don't start timer, and timder start call enabled
55
8d151f303bee FIRQ does not worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
175 timerirq = 1 ; // os9 cannot handle FIRQ
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 romfile = argv[i];
9
cb7aa75418b8 mmu and io
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
177
2
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
178 } else if (strcmp(argv[i],"-0")==0) {
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
179 i++;
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
180 disk[0] = fopen(argv[i],"r+");
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
181 } else if (strcmp(argv[i],"-1")==0) {
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
182 i++;
31d96e2b364e add virtual hd option to v09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
183 disk[1] = fopen(argv[i],"r+");
64
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
184 #ifdef USE_VDISK
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
185 } else if (strcmp(argv[i],"-v")==0) {
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
186 i++;
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
187 setVdisk(0,argv[i]);
41f14f365b34 add trace command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
188 #endif
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 } else if (strcmp(argv[i],"-tl")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 tracelo=strtol(argv[i],(char**)0,0);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 } else if (strcmp(argv[i],"-th")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 tracehi=strtol(argv[i],(char**)0,0);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 } else if (strcmp(argv[i],"-e")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 escchar=strtol(argv[i],(char**)0,0);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 } else if (strcmp(argv[i],"-l")==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 i++;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 romstart=strtol(argv[i],(char**)0,0);
1
3c736a81b886 add disk
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
201 } else if (strcmp(argv[i],"-nt")==0) { // start debugger at the start
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 attention = escape = 1;
61
80f4ec9a3420 fix writeln
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
203 timer = 1; // desable default timer interrupt and don't start timer on timer start IO
4
6159cc57d44e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
204 } else if (strcmp(argv[i],"-m")==0) {
6159cc57d44e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
205 i++;
6159cc57d44e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
206 memsize=strtol(argv[i],(char**)0,0) & ~0xffff;
158
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
207 #ifdef USE_MMU
4
6159cc57d44e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
208 if (memsize < 512*1024) memsize = 512*1024;
158
a4aa3ec95b75 fix addCurrent
kono
parents: 151
diff changeset
209 #endif
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 } else usage();
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 #ifdef MSDOS
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 if((mem=farmalloc(65535))==0) {
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 fprintf(stderr,"Not enough memory\n");
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 exit(2);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 #endif
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 read_image();
20
49fac9474858 separate trace file
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
219 init_term();
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 if (setterm) set_term(escchar);
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 pcreg=(mem[0xfffe]<<8)+mem[0xffff];
16
807141dc5ee8 sysgo fork
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
222 prog = (char*)mem; // for disasm
0
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 interpr();
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 return 0;
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 }
9a224bd9b45f os9 emulation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226