1 #include <u.h>
2 #include <libc.h>
3
4 #include "/386/include/ureg.h"
5
6 static uchar buf[0xFF01];
7
8 void
main(int argc,char * argv[])9 main(int argc, char *argv[])
10 {
11 struct Ureg u;
12 int fd, rreg, rmem, len;
13
14 ARGBEGIN {
15 } ARGEND;
16
17 if(argc == 0){
18 fprint(2, "usage:\t%s file.com\n", argv0);
19 exits("usage");
20 }
21 if((fd = open(*argv, OREAD)) < 0)
22 sysfatal("open: %r");
23
24 if((rreg = open("/dev/realmode", OWRITE)) < 0)
25 sysfatal("open realmode: %r");
26 if((rmem = open("/dev/realmodemem", OWRITE)) < 0)
27 sysfatal("open realmodemem: %r");
28 if((len = readn(fd, buf, sizeof buf)) < 2)
29 sysfatal("file too small");
30
31 memset(&u, 0, sizeof u);
32 u.cs = u.ds = u.es = u.fs = u.gs = 0x1000;
33 u.ss = 0x0000;
34 u.sp = 0xfffe;
35 u.pc = 0x0100;
36
37 seek(rmem, (u.cs<<4) + u.pc, 0);
38 if(write(rmem, buf, len) != len)
39 sysfatal("write mem: %r");
40
41 if(write(rreg, &u, sizeof u) != sizeof u)
42 sysfatal("write reg: %r");
43 }
44