diff options
Diffstat (limited to 'emulators/pcemu/files/bootstrap.shar')
-rw-r--r-- | emulators/pcemu/files/bootstrap.shar | 1086 |
1 files changed, 0 insertions, 1086 deletions
diff --git a/emulators/pcemu/files/bootstrap.shar b/emulators/pcemu/files/bootstrap.shar deleted file mode 100644 index 2119088132f7..000000000000 --- a/emulators/pcemu/files/bootstrap.shar +++ /dev/null @@ -1,1086 +0,0 @@ -# This is a shell archive. Save it in a file, remove anything before -# this line, and then unpack it by entering "sh file". Note, it may -# create directories; files and directories will be owned by you and -# have default permissions. -# -# This archive contains: -# -# bootstrap/Makefile -# bootstrap/crt0.S -# bootstrap/display.c -# bootstrap/help.txt -# bootstrap/lcrt0.S -# bootstrap/txt2asm.perl -# bootstrap/xcrt0.S -# -echo x - bootstrap/Makefile -sed 's/^X//' >bootstrap/Makefile << 'END-of-bootstrap/Makefile' -XAS = as86 -XLD = ld86 -XCC = bcc -XCFLAGS = -0 -XLDFLAGS = -0 ##-M -X -X -X.SUFFIXES: .S .o -X -X.S.o: -X $(AS) -o $@ $< -X -Xall: display.bin README.FreeBSD -X -X# The .com file is only to shortcut the development cycles when -X# modifying something, you won't have to reboot pcemu with the -X# new image over and over again. -X# -X#all: display.com -X -Xdisplay.com: display.o text.o crt0.o -X $(LD) $(LDFLAGS) -T 0x100 -o display.tmp crt0.o display.o text.o -X dd if=display.tmp of=$@ ibs=32 skip=1 -X rm -f display.tmp -X -Xdisplay.bin: display.o text.o lcrt0.o xcrt0.o -X $(LD) $(LDFLAGS) -T 0x7c00 -o display.tmp \ -X lcrt0.o display.o text.o xcrt0.o -X dd if=display.tmp of=$@ ibs=32 skip=1 obs=720k conv=osync -X rm -f display.tmp -X -X# o expand the tabs -X# o translate german ISO characters into IBM437 -X# o finally convert all this into assembler .ascii/.byte pseudoinstr's -X# -Xtext.S: help.txt txt2asm.perl -X expand < help.txt |\ -X tr '\344\366\374\304\326\334\337' '\204\224\201\216\231\232\341' |\ -X perl txt2asm.perl > $@ -X -X# maintain the README.FreeBSD from the help.txt -X# looks magic, 'eh? :^) -X# The readme consists of everything from section 1 up to before the -X# headline of section 3. The highlighting characters will be removed. -X# -X# If you've never been using Perl before, don't worry. Let the lines -X# below stand as they do. :-) -XREADME.FreeBSD: help.txt Makefile -X perl -e 'print "This is an excerpt of what you can see with";\ -X print " the standalone \"system\".\n -- J\366rg\n\n\n";\ -X while(<>) {last if /^[\001-\010\013-\037]1\./;}\ -X do {tr[\001-\010\013-\037]//d; print;}\ -X while(($$_=<>) && !m/^[\001-\010\013-\037]3\./);' \ -X < help.txt > $@ -X -Xreallyclean: clean -X rm -f display.bin README.FreeBSD -X -Xclean: -X rm -f *.tmp *~ *.core *.o *.s display.com text.S -X -Xpack: all clean -X rm -f ../../../files/bootstrapper.uu ../../../files/README.FreeBSD -X gzip --best --force display.bin -X uuencode display.bin.gz display.bin.gz > ../../../files/bootstrapper.uu -X cp -p README.FreeBSD ../../../files/README.FreeBSD -X rm -f display.bin.gz README.FreeBSD -X -X -Xunpack: -X rm -f display.bin README.FreeBSD -X uudecode ../../../files/bootstrapper.uu -X gunzip --force display.bin.gz -X cp -p ../../../files/README.FreeBSD README.FreeBSD -END-of-bootstrap/Makefile -echo x - bootstrap/crt0.S -sed 's/^X//' >bootstrap/crt0.S << 'END-of-bootstrap/crt0.S' -X ;; Hey Emacs, this is an -*- asm -*- file. -X ;; -X ;; crt0 -- prologue for simple DOS .com file -X ;; -X ;; also implements exit(), by calling the DOS exit service -X -X use16 -X -X entry _begin -X_begin: jmp .start -X -X extern _main -X -X public _exit -X_exit: -X_exit.code set 4 -X -X push bp -X mov bp, sp -X mov al, _exit.code[bp] -X mov ah, 0x4c ; dos service, exit w/ status -X int 0x21 -X -X_exit.1: ; not reached (hopefully) -X jmp _exit.1 -X -X -X.start: -X call _main -X call _exit -X -END-of-bootstrap/crt0.S -echo x - bootstrap/display.c -sed 's/^X//' >bootstrap/display.c << 'END-of-bootstrap/display.c' -X/* -X * display -- a simple program to display static text in a more(1)-like -X * manner. Designed to run with simple BIOS services on a i*86-PC. -X * -X * Purpose of the program: provide a simple method for pcemu to display -X * a text when there is no DOS boot image installed. This program will -X * run as the bootfile then. -X * -X * Author: Joerg Wunsch, 95/03/10 -X * Placed in the public domain. Neither kind of warranty applies. -X * -X * Thanks to Bruce Evans for his bcc compiler. Made my work much -X * easier. -X */ -X -X#define MAXROW 23 -X#define MAXCOL 79 -X#asm -Xmaxrow: set 23 -Xmaxcol: set 79 -Xnl: set 10 -X#endasm -X -X#define WHITE 7 -X#define BROWN 6 -X#define MAGENTA 5 -X#define RED 4 -X#define CYAN 3 -X#define GREEN 2 -X#define BLUE 1 -X#define BLACK 0 -X#define HIGH 8 -X/* convenience: */ -X#define YELLOW (BROWN|HIGH) /* foreground color */ -X#define GRAY WHITE /* background color */ -X -X#define NOCHANGE (-1) /* do not change color; for setattrib() */ -X -X/* -X * We use a special highlighting scheme: embedded control characters -X * in the text toggle the attribute selection. -X * -X * Define attributes used for highlighting. -X * NB: do not parenthise the macro expansions below, they are used as -X * complete parameter lists for setattrib()! -X */ -X -X#define REGULAR BLACK, GRAY /* ^R */ -X#define BOLD WHITE|HIGH, RED|HIGH /* ^B */ -X#define EMPHS BLUE, GRAY /* ^E */ -X#define DOUBLE YELLOW, BLACK /* ^D */ -X -X#define C_REGULAR ('R' & 0x1f) -X#define C_BOLD ('B' & 0x1f) -X#define C_EMPHS ('E' & 0x1f) -X#define C_DOUBLE ('D' & 0x1f) -X -X#define K_CUP ((0x48 << 8) + 0) /* extended ASCII, cursor up */ -X#define K_CDN ((0x50 << 8) + 0) /* extended ASCII, cursor down */ -X#define K_PREV ((0x49 << 8) + 0) /* extended ASCII, page up */ -X#define K_NEXT ((0x51 << 8) + 0) /* extended ASCII, page down */ -X -X/* -X * Glue to link to the BIOS services. -X */ -X -Xchar attrib; -Xchar row, col; -X -X -Xvoid scroll(nlines) -Xint nlines; /* if nlines == 0, clear entire region */ -X{ -X#asm -X push bp -X mov bp, sp -X -X xor bh, bh ; page 0 -X mov dx, *(maxcol + (maxrow << 8)); bottom/right corner -X xor cx, cx ; top/left corner -X mov al, 4[bp] ; nlines -X mov bh, _attrib -X mov ah, *6 ; video bios, scroll (clear) region -X test al, al ; scroll back? -X jns _scroll.1 ; positive value -> forward -X inc ah ; scroll backwards -X neg al -X_scroll.1: -X int 0x10 -X -X pop bp -X#endasm -X} -X -Xvoid gotoxy(x, y) -Xint x; -Xint y; -X{ -X#asm -X push bp -X mov bp, sp -X -X mov dl, 4[bp] ; x -X mov _col, dl -X mov dh, 6[bp] ; y -X mov _row, dh -X xor bh, bh ; page 0 -X mov ah, *2 ; video bios, set cursor -X int 0x10 -X -X pop bp -X#endasm -X} -X -Xvoid putchar(c) -Xint c; -X{ -X#asm -X push bp -X mov bp, sp -X -X mov al, 4[bp] ; c -X mov bl, _attrib -X xor bh, bh ; always page 0 -X mov cx, *1 ; just one char -X mov ah, *9 ; video bios, write char -X int 0x10 -X -X pop bp -X#endasm -X if(col < MAXCOL) -X gotoxy(col + 1, row); -X} -X -X -Xvoid cls() -X{ -X scroll(0); -X} -X -X -Xint getchar() -X{ -X#asm -X xor ah, ah ; kbd bios, get keystroke -X int 0x16 -X#endasm -X} -X -Xvoid setattrib(foreground, background) -Xint foreground; -Xint background; -X{ -X int i; -X if(foreground == -1) -X i = attrib & 0xf; -X else -X i = foreground & 0xf; -X if(background == -1) -X i |= (attrib & 0xf0); -X else -X i |= ((background & 0xf) << 4); -X attrib = i; -X} -X -X -X/* -X * Some auxiliary functions -X */ -X -X/* -X * print one line of text up to a newline or a null character -X */ -X -Xchar *printline(s) -Xchar *s; -X{ -X register char c; -X -X while((c = *s++) && c != '\n') -X switch(c) -X { -X case C_REGULAR: -X setattrib(REGULAR); -X break; -X -X case C_BOLD: -X setattrib(BOLD); -X break; -X -X case C_EMPHS: -X setattrib(EMPHS); -X break; -X -X case C_DOUBLE: -X setattrib(DOUBLE); -X break; -X -X default: -X putchar(c); -X } -X -X if(c == 0) s--; -X return s; -X} -X -X -X/* -X * display a message on the bottom line; if msg == 0, clear bottom line -X */ -X -Xvoid more(msg) -Xchar *msg; -X{ -X int i; -X -X gotoxy(0, MAXROW + 1); -X if(msg) { -X setattrib(YELLOW, BLUE); -X (void)printline(msg); -X setattrib(REGULAR); -X } else { -X setattrib(WHITE, BLACK); -X for(i = 0; i < MAXCOL; i++) putchar(' '); -X setattrib(REGULAR); -X } -X} -X -X -X/* -X * go back for numlines newline chars, starting at current, but not before -X * initial -X */ -X -Xchar *goback(initial, current, numlines) -Xchar *initial; -Xchar *current; -Xint numlines; -X{ -X current--; -X -X while(numlines && current > initial) -X if(*--current == '\n') -X numlines--; -X if(*current == '\n') -X current++; -X return current; -X} -X -X -X/* -X * the static text is maintained separately in an (automatically generated) -X * .S file -X */ -X -Xextern char textstr[]; /* do not declare this "char *" - bcc breaks */ -X -X -Xint main() -X{ -X char *cp, *cp1; -X int c; -X int lineno; -X -X lineno = 0; -X cp = textstr; -X setattrib(REGULAR); -X cls(); -X for(;;) { -X gotoxy(0, lineno); -X cp = printline(cp); -X if(*cp == 0) break; -X lineno++; -X if(lineno == MAXROW + 1) { -X for(;;) { -X more("--More--"); -X c = getchar(); -X more(0); -X -X if(c & 0xff) /* regular ASCII */ -X c &= 0xff; /* strip scancode */ -X -X switch(c) { -X case ' ': /* page forward */ -X case K_NEXT: -X lineno = 0; -X cls(); -X goto out; -X -X case 'd': /* half page forward */ -X scroll((MAXROW + 1) / 2); -X lineno -= (MAXROW + 1) / 2; -X goto out; -X -X case 'b': /* page backward */ -X case K_PREV: -X cp = goback(textstr, cp, 2 * (MAXROW + 1)); -X lineno = 0; -X cls(); -X goto out; -X -X case '\r': /* one more line */ -X case '\n': -X case K_CDN: -X lineno--; -X scroll(1); -X goto out; -X -X case K_CUP: /* one line less */ -X cp1 = goback(textstr, cp, 2); -X cp = goback(textstr, cp1, MAXROW); -X if(cp == textstr) /* start of text, redisplay all */ -X { -X lineno = 0; -X cls(); -X } -X else -X { -X scroll(-1); -X gotoxy(0, 0); -X (void)printline(cp); -X cp = cp1; -X lineno--; -X } -X goto out; -X -X case '?': -X case 'h': -X more( -X"space: next page, d: half page, b: back page, CR, DWN: nxt line, UP: prv line" -X ); -X (void)getchar(); -X more(0); -X break; -X -X case 'q': /* quit the game */ -X goto done; -X } -X } -X } -X out:; -X } -X done: -X more("Hit any key to quit."); -X (void)getchar(); -X more(0); -X -X return 0; -X} -X -END-of-bootstrap/display.c -echo x - bootstrap/help.txt -sed 's/^X//' >bootstrap/help.txt << 'END-of-bootstrap/help.txt' -XPC Emulator v1.01alpha (C) 1994 University of Bristol -XPlease report comments, bugs etc to hedley@cs.bris.ac.uk -X -X -XThis is David Hedley's PC Emulator. -X -X -X0. Table of contents -X -X 0. Table of contents -X 1. How to get pcemu really running -X 2. Information about this FreeBSD port -X 3. David's original README -X 4. Copyright notice -X -X -X -X1. This looks like PC, but where is DOS? How to get pcemu really running -X -XPcemu is an emulator that emulates an 8086 CPU as well as a bunch of -XPC BIOS services, so it basically provides the functionality like an -Xold PC/XT. Anyway, as with the XT too, the emulator requires something -Xlike an operating system to run with. Since we cannot ship MS-DOS or -Xone of its variants along with this distribution (for legal reasons), -Xyou're now actually looking at a (sort of) "standalone operating system", -Xjust to get pcemu booted and running. All this system does is showing -Xyou this introduction. -X -XYou will have to replace this mini-system by a physical image of a -XDOS boot floppy. The "system" currently running is booted from the -Xfile -X -X /usr/local/lib/pcemu/DriveA. -X -XIt pretends to be the image of a 720 KB diskette, which has been -Xchosen as the default bootfile size. -X -XIn order to obtain the image of a bootable DOS floppy, do the following: -X -X Prepare a 720 KB floppy with a DOS system as you'd like -X to run it later. Include all the good stuff you don't want -X to miss there. Don't forget to put a simple text editor -X there, so you can modify your configuration files later. -X -X Put a copy of the file -X -X /usr/local/lib/pcemu/C/emufs.sys -X -X onto this diskette, and include a line like -X -X device = a:\emufs.sys /usr/local/lib/pcemu/C -X -X into the config.sys file on this diskette. This will -X provide you with an interface to the BSD file system from -X within your DOS session. (It actually pretends to be a -X network drive.) According to David Hedley, you are also -X advised to include the line -X -X stacks = 9, 512 -X -X there to avoid stack overflow problems with the emulator. -X -X If you want to retain a copy of the standalone "system" you -X are currently looking at, move it away: -X -X # cd /usr/local/lib/pcemu; mv DriveA StandaloneA -X -X Now, make a copy of your disk by either: -X -X - under BSD, perform a -X -X # cp /dev/fd0.720 /usr/local/lib/pcemu/DriveA -X -X (the number after the fd may vary for drives other than -X the primary one), or -X -X - under DOS, copy the file -X -X /usr/local/lib/pcemu/C/dumpdisk.exe -X -X to your DOS system and execute it. This will dump the -X physical copy of either drive A or B to the file drivea -X in your current (DOS) working directory. You can then move -X this file to -X -X /usr/local/lib/pcemu/DriveA -X -X in your BSD system. -X -XSince pcemu needs to display the standard VGA font, you further need -Xto tell your X server about the location of the font file. It has -Xbeen put under -X -X /usr/local/lib/pcemu/font/ -X -Xalong with the necessary information for the X server. All you need -Xto do is to tell your X server about it. This can either be done -Xas a server default by including the directory into the FontPath -Xsection of your XF86Config file (this is for XFree86, refer to -Xthe documentation if you're using another X server). Alternatively, -Xyou can run the command -X -X $ xset fp+ /usr/local/lib/pcemu/font -X -Xwhen X11 is running to instruct your X server to append this directory -Xto the font path. Should you wish to run pcemu across the network, -Xremember that the fonts must be physically available at the server -Xside, or you need to provide an X11 font server (xfs). Refer to -Xthe X11 documentation on how to setup this. -X -X -XThat's all, now you should be able to run pcemu. Add required -Xdevice = a:\emufs.sys /... lines to your config.sys as you -Xneed them. It's not wise to make the whole BSD hierarchy available -Xsince DOS does not provide multiuser protection. -X -XShould you wish to override some of the emulator defaults like -Xsize and location of the bootfile, you can do this by settig up a -X$HOME/.pcemurc file. Refer to sections 2. and 3. below. -X -X -X -X2. Information about this FreeBSD port -X -X -XThis `port' of pcemu to FreeBSD has been prepared by Jörg Wunsch. -XIt is an only slightly modified version of David's code, a few -Xproblems have been fixed for the BSD compilation environment, and -Xthe location of the default boot file has been moved in order to -Xget you started with just what you are reading now. -X -XThe PostScript document David is mentioning under 3. below has -Xbeen compressed and stored under -X -X /usr/local/lib/pcemu/doc/report.ps.gz. -X -XIt is huge however, so if you don't care much for it you might wish -Xto remove it later. -X -XSince i'm living in Germany with a German keyboard, i found the -Xoriginal X11 KeySym to PC scancode translation unacceptable. Several -Xscancodes have been unreachable for me. Hence i decided to add another -Xsection to the .pcemurc file allowing to instruct pcemu of specific -Xkeyboard layout semantics. They consist of the keyword keymap, -Xfollowed by the desired PC scancode, an equal sign, and the character -Xthat is generated for this key under X11 without any shift keys. (Note -Xthat no space is allowed on either side of the equal sign.) This way -Xi won't get a German key mapping under DOS, but at least a valid keyboard -Xlayout where all the scan codes can actually be generated at all. -X -XThe appropriate section of my .pcemurc file looks like: -X -Xkeymap 12=ß -Xkeymap 13=' -Xkeymap 21=z -Xkeymap 26=] -Xkeymap 27=+ -Xkeymap 39=\ -Xkeymap 40=[ -Xkeymap 41=^ -Xkeymap 43=# -Xkeymap 44=y -Xkeymap 53=- -Xkeymap 86=< -X -X -XOnce :-) i will have filed all my modifications back to David, and -Xperhaps they will be included into the regular distribution as well. -X -XShould you wish to contact me regarding this FreeBSD port, you can -Xreach me as joerg_wunsch@uriah.heep.sax.de. -X -X -X -X -X3. Here's David's original README file: -X -X -X PC Emulator for Unix and X Windows -X -XAs the title suggests, this is a Unix/X windows program which is -Xdesigned to emulate a standard 8086 based PC. -X -XIn its current form it runs most text based programs. The programs I have -Xtried and found to work are as follows: -X -XMSDOS 5.0 MSDOS 6.2 -XWordPerfect 5.1 Borland C++ 2.0 -XTurbo Debugger 2.51 Turbo Assembler 2.51 -XBBCBasic 4.61 MSDOS QBasic -XMSDOS GWBASIC Virtually all program that came with MSDOS 5 -XHitchhiker's Guide to the Galaxy PC Magazine's ANSI.COM -XSemWare's QEdit 2.1 Norton Utils 4.50 Advanced Edition -XNorton Utils 6.0 Xtree Professional 1.1 -XPowerMeter Utils Autoroute (ancient version) -XMinitab 8.0 Microsoft Diagnostics -X -XThis is all the programs I could lay my hands on which were text based -Xand could run on an 8086 -X -XThe emulator runs at about 8-10MHz 80286 speed on a Sun SparcStation -X10/40 (without the -mviking flag) and at about 6MHz 8088 speed on a -X33MHz 80486 box running Linux. -X -XI have included a Postscript representation of my project report. It's -Xa bit out of date now, but it's the closest thing I've got to -Xdocumentation! I'll do some kind of latex thing for the next -Xrelease.... -X -XThe program rather hogs the cpu but unmapping the window (iconifying -Xit) will put it to sleep. -X -XThe most recent version of this program will always be in ftp.cs.bris.ac.uk -Xcurrently in the directory /users/hedley -X -XINSTALLING THE EMULATOR -X -XEdit the Makefile to change the OPTIONS, CFLAGS and XROOT to be -Xappropriate for your system (I am assuming you are using GNU GCC, -Xalthough any ANSI C compiler should work just as well). Ensure you are -Xusing the best (speed) optimisations possible (e.g. -O2 -fomit-frame-poiner) -X -XEdit the file mytypes.h and ensure that the types for INT8, UINT8, -XINT16, UINT16 etc are correct. Hopefully nothing need be changed in -Xthis file, but you never can tell... I have assumed that 'char's are 8 -Xbit bytes, 'short's are 16 bit words and 'long's are 32 bit words. If -Xyour compiler treats these differently to the above then you will have -Xto edit this header file. -X -XType 'make' and go away and have a cup of tea! Compiling 'cpu.c' takes -Xa while (and quite a bit of memory!). -X -XGet a floppy disk of the same size/type as you specified in the Makefile -X(i.e. if you chose -DBOOT720, then you'll need a 3.5" 720k disk). Install -XMSDOS on it. Copy the files 'config.sys', 'emufs.sys' and 'lredir.exe' from -Xthe 'programs' directory onto this floppy disk. Shove it in your Unix box -Xand type cp /dev/fd0 DriveA This should create a 720k (or whatever) file -Xwhich the emulator can boot from. If you do not have access to a Unix box -Xwith a floppy disk on it, then you can use the supplied 'dumpdisk' program -Xto create a disk image. All you need is access to a PC. Simply put in a -Xbootable MSDOS disk into the drive and type dumpdisk A (or dumpdisk B if in -Xdrive B). The program will copy the entire disk to a file called -X'drivea'. You must then transfer it to your Unix box... -X -XYou then need to convert the vga font (vga.bdf) into a font format -Xyour X server can understand (either SNF or PCF) using either -X'bdftosnf' or 'bdftopcf' and install the resulting font file somewhere -Xwhere your X server can find it. Then type 'mkfontdir' to rebuild the -Xfonts.dir file and then type 'xset fp rehash' to tell your X server -Xabout the new font. If you type 'xlsfonts' you should see 'vga' as one -Xof the fonts listed. If not, then something has gone wrong. I may or -Xmay not be able to help - it depends on your local setup. The emulator -Xwill run without the font as it uses the standard 8x16 X11 font - -Xalthough most programs which use the extended character set will look -Xpretty terrible. A warning will be displayed if the correct VGA font -Xcannot be found. If you are using openwindows, you will have to type -X'convertfont' and then 'bldfamily' -X -XYou should now be in a position to run the emulator -X -XBy default, the emulator requires the disk image called 'DriveA' to be in -Xthe current directory or else it will complain. If you don't like this, -Xthen you can change the file the emulator boots from by altering your -X.pcemurc file (see below) or by changing the default at compile time (by -Xmodifying the Makefile) -X -XOnce run, the emulator should come up with the usual MSDOS banner and -Xrequest the current date and time (which should already be -Xcorrect). You can now run PC programs, mount Unix directories as -Xdrives etc. You will already have one drive redirection - drive C: is -Xthe Unix root directory. To mount further directories as drives, you -Xmust use the program 'lredir'. Consult the file 'lredir.readme' for -Xinstructions... -X -X The .pcemurc file -X -XAt present this file allows a few things to be changed at run time. If this -Xfile is found (either in the current directory or in your home directory), -Xthen it is read and parsed and the values overwriting the equivalent -Xcompile time options. Currently the only options supported at present are: -X -Xbootfile diskfile -X -Xwhere diskfile is the disk image you want to boot from (no quotes or -Xanything are needed and the filename must not contain white spaces). -X -Xboottype type -X -Xwhere type is either 360, 720, 144 or 12. This tells the emulator the type -Xof disk the disk image file represents (360k, 720k, 1.44MB, 1.2MB -Xrespectively). -X -Xupdatespeed n -X -Xwhere n is an integer > 0 -XThis is the rate at which the screen memory gets checked for changes (and -Xhence the update speed at which the screen gets updated for non-BIOS -Xwrites). n is measured in internal interrupt ticks of which there are ~72.8 -Xper second (depends on the resolution of the system timer). -X -Xcursorspeed n -X -Xwhere n is an integer -XThis specifies how fast the cursor should flash. Flashing the cursor can -Xtake a fair amount of bandwidth and so on slow/heavily loaded networks it -Xmay be best to slow down the cursor flashing. Setting n to 0 or less will -Xdisable cursor flashing - the cursor will be permanently on. -X -XAn example .pcemurc file can be found in this directory. -X -XIf you have problems compiling or running the emulator, then please contact -Xme giving details of what went wrong (along with your computer type -Xetc). -X -XArchitectures tested: -X -XComputer OS Comments -X----------------------------------------------------------------------------- -XPC 486/33 Linux 0.99.14w Runs quite well. A bit pointless though :) -XSun 3/60 SunOS 4.1.x Takes an age to compile and not really worth -X the effort... -XSparcStation 10 SunOS 4.1.3 Runs well. Takes > 20MB RAM to compile though -XHP 755/99 HPUX Runs OK (>25MB RAM to compile...) -XSun 4 Solaris 2.3 Runs OK -XRS6000 ??? Had a few problems getting it to compile. -X Getting there slowly though. -XSGI Indigo IRIX 4.?.? Doesn't work if compiled with optimisation -X using the standard compiler. Haven't tried -X it using gcc yet... -X -XAs you can see this list is quite small. The main limiting factor is the range -Xof machines I have access to. If anyone else can get it running on other -Xarchitectures then please contact me! -X -XWarning: This program is not secure! Do not make is suid or sgid anything -Xunless you wish to compromise the security of your system! -X -XEMULATOR LIMITATIONS etc -X -XSome parts of the PC architecture are emulated better than others. The -XBIOS has been partly implemented - enough to get MSDOS to boot and to -Xallow most programs to run. Anyhow, most decent programs bypass the -XBIOS for screen access. BIOS Disk calls for drive A have been mostly -Xemulated, although formatting doesn't work. -X -XSome of the hardware has been emulated but not much. Timer interrupts -Xare generated by the system but there is now way (at present) to -Xreprogram the timer. The Programmable Interrupt Controller has been -Xemulated in part to respond to the End Of Interrupt command and reads -Xfrom and writes to the mask register should work OK. -X -XNone of the VGA hardware has been emulated at present (apart from -Xscreen updating) although this will change in the near future. Mode -Xchanges must therefore be done through the BIOS. -X -XThe keyboard has been mostly emulated. The program converts X11 -Xkeysyms to raw PC scan codes and then generates an interrupt 9 as per -Xusual. There is a BIOS routine which takes these scan codes and -Xgenerates the correct BIOS ASCII/scan code pair. The keysyms used can -Xbe found in the module 'xstuff.c'. In the future these keysyms will be -Xread in from a file at run time. -X -XTHANKS -X -XThanks go to the following: -X -XAndy Norman at HPLabs, Bristol (ange@hpl.hewlett-packard.co.uk) for the HP -Xport. -XDieter Becker (becker@med-in.uni-sb.de) for help with the Solaris port -XKlaas Esselink (esselin1@ksla.nl) for help with the RS6000 port -X -XPlease report bugs/comments etc to me (hedley@cs.bris.ac.uk) and I'll -Xdo my best to sort them out (no guarantees though). After June 25th I -Xwill be leaving University and will not be able to check email very -Xfrequently - please be patient if you want a response - I will reply -Xeventually. -X -XHave fun... -X -XDavid -X -X -X -X -X4. And finally, the Copyright notice: -X -X -XAll files, documentation etc with the exception of 'mfs.c', -X'emufs.sys', 'emufs.S', 'lredir.exe', 'lredir.c' and 'lredir.readme' -Xare Copyright (C) 1994 University of Bristol, England -X -XPermission is granted to use, copy, modify, and distribute this -Xsoftware and its documentation for any non-commercial purpose, -Xprovided that the above copyright notice appear in all copies and that -Xboth that copyright notice and this permission notice appear in the -Xsupporting documentation. -X -XBECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT -XWHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER -XPARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, -XEITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -XIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -XPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -XPROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME -XTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -X -XIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR -XDAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL -XDAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM -X(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -XINACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF -XTHE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER -XOR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -X -X--------------------------------------------------------------------- -X -X'mfs.c', 'emufs.sys' and 'emufs.S' are covered by the following -Xnotice: -X -X Mach Operating System -X Copyright (c) 1993,1992,1991,1990 Carnegie Mellon University -X Copyright (c) 1991 IBM Corporation -X All Rights Reserved. -X -X Permission to use, copy, modify and distribute this software and its -X documentation is hereby granted, provided that both the copyright -X notice and this permission notice appear in all copies of the -X software, derivative works or modified versions, and any portions -X thereof, and that both notices appear in supporting documentation, -X and that the nema IBM not be used in advertising or publicity -X pertaining to distribution of the software without specific, written -X prior permission. -X -X CARNEGIE MELLON AND IBM ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS IS" -X CONDITION. CARNEGIE MELLON AND IBM DISCLAIM ANY LIABILITY OF ANY KIND FOR -X ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. -X -X Carnegie Mellon requests users of this software to return to -X -X Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU -X School of Computer Science -X Carnegie Mellon University -X Pittsburgh PA 15213-3890 -X -X any improvements or extensions that they make and grant Carnegie Mellon -X the rights to redistribute these changes. -X -X-------------------------------------------------------------------- -X -X'lredir' was written by Tim Bird (Tim_R_Bird@Novell.COM) -X -END-of-bootstrap/help.txt -echo x - bootstrap/lcrt0.S -sed 's/^X//' >bootstrap/lcrt0.S << 'END-of-bootstrap/lcrt0.S' -X ;; Hey Emacs, this is an -*- asm -*- file -X ;; -X ;; lcrt0 -- C prologue for simple boot-loaded module -X ;; -X ;; Bootstraps a simple .com-style area 512 bytes off its -X ;; own start address, by loading it via the BIOS int 0x13 -X ;; interface. -X ;; Needs an epilogue counterpart to know about the end -X ;; address. -X -XSECSPERTRACK: set 9 ; bump this for boot disk size != 720 KB -X -X use16 -X -X .text -X extern _main -X -X .data -X extern .endfile -X -X .text -X -X entry .begin -X.begin: -X -X mov ax, .endfile -X mov bx, .startfile ; from epilogue -X sub ax, bx ; # bytes to load -X add ax, 511 ; round to full sectors -X mov cl, 9 -X shr ax, cl ; make # sectors -X -X push cs -X push cs -X pop es -X pop ds -X -X mov bx, .startfile ; load here -X -X mov si, ax ; sector count -X mov cx, 2 ; starting cylinder/sector -X mov dx, 0 ; starting head/drive A -X.begin.loop: -X mov ax, 1 + (2 << 8); read one sector -X int 0x13 ; just do it -X -X add bx, 512 -X dec si -X jz .begin.done -X inc cl -X cmp cl, SECSPERTRACK + 1 -X jne .begin.loop -X mov cl, 1 -X inc dh -X cmp dh, 1 + 1 -X jne .begin.loop -X mov dh, 0 -X inc ch -X jmp .begin.loop -X -X.begin.done: -X call _main -X int 0x19 ; reboot -> this will quit pcemu -X -X -X ;; .blkb (.begin - $ + 512) ; cannot be done in as86 -X ;; XXX IF ANYTHING IS BEING CHANGED IN THIS FILE, ADJUST THE -X ;; NUMBER BELOW! Link with -M and adjust the number so that, -X ;; when linked to address 0x7c00, the symbol .startfile will -X ;; be equal 0x7e00. -X .blkb 443 -X -X export .startfile -X.startfile: -X -END-of-bootstrap/lcrt0.S -echo x - bootstrap/txt2asm.perl -sed 's/^X//' >bootstrap/txt2asm.perl << 'END-of-bootstrap/txt2asm.perl' -X#!/usr/bin/perl -X# -X# Convert an input text into a sequence of .ascii or .byte assembler -X# instructions. Cares to express any non-printable ASCII character -X# as well as the double quote and backslashes as a hexadecimal .byte -X# instruction. -X# -X -X# print one line of input text -Xsub pline -X{ -X local($s) = @_; -X local($i, $k, $ele, $c); -X -X # delete any null char to avoid confusion (we use null as the string -X # delimiter) -X $s =~ tr/\000//d; -X -X $i = 0; -X # -X # split the string into substrings of printable characters (where -X # we can write a singe .ascii instruction for each of them) -X # -X foreach $ele (split(/[\001-\037\"\\\177-\377]/, $s)) { -X next if length($ele) == 0; # split returns a null string for -X # succeeding delimiters which dont wann see -X -X $k = index($s, $ele, $i); # see if there are any non-pritables -X # just before the current substring -X while($i < $k) { # if so, write a .byte for each -X $c = substr($s, $i++, 1); -X printf "\t.byte\t0x%02x\n", ord($c); -X } -X print "\t.ascii\t\"$ele\"\n"; # this substring -X $i += length($ele); -X } -X while($i < length($s)) { # are there any non-printables left at end? -X $c = substr($s, $i++, 1); -X printf "\t.byte\t0x%02x\n", ord($c); -X } -X print "\t.byte\tnl\n"; # dont forget the final newline -X} -X -X -X# -X# the asm file prologue: -X# -X# declare a synonym for newline, and define the entry symbol "_textstr" -X# -Xprint ".data\nnl:\tset\t0x0a\n.globl _textstr\n\n_textstr:\n"; -X -X# process all lines now -Xwhile($_ = <>) { -X chop; -X &pline($_); -X} -X -X# the epilogue: terminate with a null byte -Xprint "\t.byte\t0\n"; -END-of-bootstrap/txt2asm.perl -echo x - bootstrap/xcrt0.S -sed 's/^X//' >bootstrap/xcrt0.S << 'END-of-bootstrap/xcrt0.S' -X ;; Hey Emacs, this is -*- asm -*- code -X use16 -X .data ; ld86 places .data after .text -X export .endfile -X.endfile: -END-of-bootstrap/xcrt0.S -exit - |