-
Notifications
You must be signed in to change notification settings - Fork 2
/
UZIX.C
114 lines (99 loc) · 2.57 KB
/
UZIX.C
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
* UZIX - UNIX Implementation for MSX
* (c) 1997-2001 Arcady Schekochikhin
* Adriano C. R. da Cunha
*
* UZIX is based on UZI (UNIX Zilog Implementation)
* UZI is a UNIX kernel clone written for Z-80 systems.
* All code is public domain, not being based on any AT&T code.
*
* The author, Douglas Braun, can be reached at:
* 7696 West Zayante Rd.
* Felton, CA 95018
* oliveb!intelca!mipos3!cadev4!dbraun
*
* This program is under GNU GPL, read COPYING for details
*
*/
/**********************************************************
Main procedure and UZIX data
**********************************************************/
#define __MAIN__COMPILATION
#define NEED__DISPATCH
#define NEED__SCALL
#define NEED__DEVFLOP
#define NEED__DEVIO
#include "uzix.h"
#ifdef SEPH
#include "signal.h"
#endif
#include "types.h"
#include "unix.h"
#undef NEED__MACHDEP
#undef NEED__FILESYS
#undef NEED__DEVSWAP
#undef NEED__PROCESS
#include "extern.h"
#define __DEVIO__COMPILATION
#include "config.h"
#include "dispatch.c"
char *UZIX="UZIX";
#ifdef ORI_UZIX
extern uint _getc(void);
extern uchar inint; /* inside interrupt */
int isdig(char cc) {
return ((cc>='0') && (cc<='9'));
}
#endif
/*
extern void clkint(void);
extern int getfsys(dev_t devno, void *buf);
*/
uint xbioscold, xbdoscold;
extern void setcalltrap(void);
extern short bdoshl(int, ...);
void main(argc, argv)
int argc;
char *argv[];
{
#ifdef ORI_UZIX
xbioscold=(*((uint *)0x0001))-3;
xbdoscold=(*((uint *)0x0006));
setcalltrap();
#endif
bufinit(); /* do all buffers free without flushing */
d_init();
#if ORI_DEBUG
ptab_t ptt;
inint=1;
__ei();
kprintf("\n p_swap-p_status=%d, sizeof(p_status)=%d, sizeof(ptab_t)=%d", (int)&ptt.p_swap-(int)&ptt.p_status, sizeof(ptt.p_status), sizeof(ptt));
kprintf("\nclkint=%x, rawrw=%x, getfsys=%x, rawrw2=%x\nTesting console I/O.\nHit any key. ESCAPE ends. CTRL+C for exit.\n\n",
(int)clkint, (int)rawrw, (int)getfsys, (int)rawrw2);
/* uchar a;
for (;;) {
while ((a = _getc()) == 0)
;
if (a == 27)
break;
if (a == 3)
exit(0);
_putc(a);
}
*/
#endif
inint=0;
#ifdef ORI_UZIX
#ifdef NO_RTC
tod.t_time = bdoshl(176+9); /* HHHHHmmm.mmmSSSSS */
tod.t_date = bdoshl(176+8); /* YYYYYYYm.mmmDDDDD */
#endif
if (argc < 2 || !isdig(argv[1][0]) || (argv[1][1] != ':')) {
kprintf("usage: uzix d:\n\n\td = root device (0..7)\n");
exit(1);
}
root_dev = argv[1][0] - '0';
#endif
kprintf("Welcome to %s %s.%s\n", UZIX, VERSION, RELEASE);
arch_init(); /* NORETURN */
}