Commit graph

222 commits

Author SHA1 Message Date
David Given 60b7d8de6e
Merge pull request #96 from kernigh/kernigh-emu-1
Fixes to build emulators, ass, int on OpenBSD
2018-06-20 22:30:01 +02:00
David Given 698613cd7d Turns out that the compiler needs access to the libpc headers too; refactor
into a separate target to avoid build loops and make it work.
2018-06-18 22:17:38 +02:00
David Given 11854f4dfe Ansify and warning fix. 2018-06-17 22:30:27 +02:00
David Given 13e195d19f Warning fixes. 2018-06-17 15:42:26 +02:00
David Given ddca7276c0
Merge pull request #102 from davidgiven/dtrg-powerpc
Add a PowerPC simulator for running the tests.
2018-06-17 11:45:26 +02:00
David Given 89e8956bb2 Fix edge case in rlwnm when the mask is 32 bits wide. All tests now pass. 2018-06-17 11:00:01 +02:00
David Given 7ec9f54679 Turns out that andi and andis only have . forms. Fixed; another test passes. 2018-06-17 10:43:39 +02:00
David Given 78eaf836be Turns out I was returning values from syscalls in the wrong register; fixed.
More tests pass.
2018-06-17 10:22:20 +02:00
David Given ab660a44e9 Lots of floating point, bugfixes, and system calls. Most of the tests pass now. 2018-06-17 09:24:01 +02:00
David Given 67efbb5f7f Do a bit of floating point stuff; added brk(); fixed a horrible bug where
stores with 16-bit displacements were storing the register number and not the
contents of the register.
2018-06-16 22:55:23 +02:00
David Given 5d7cdd2c67 Fix a setcr0 bug which was trashing the condition register; some system
calls are now implemented. A few tests more-or-less pass (but crash on
exit).
2018-06-16 08:35:36 +02:00
David Given 39a49265ce
Merge pull request #100 from kernigh/kernigh-pdp
Two fixes for ack -mpdpv7
2018-06-15 15:40:24 +09:00
George Koehler 5db312a1c0 Prevent crash in isatty()
The existing code allocated 2 bytes (char*), but gtty() needs 6 bytes
(struct sgttyb), so isatty() smashed the stack and corrupted its
return address, probably causing SIGBUS or SIGSEGV.

Fix by switching to TIOCGETD, which needs 2 bytes.  TIOCGETD isn't in
the manual for tty(4), but does appear in
https://minnie.tuhs.org//cgi-bin/utree.pl?file=V7/usr/sys/dev/tty.c

This fixes hilo_c.pdpv7 and hilo_mod.pdpv7 in simh-pdp11.
2018-06-15 00:48:29 -04:00
George Koehler 5de5611c24 Use 2-byte alignment in pdpv7 to prevent SIGBUS.
Change the alignment in C structs (wa, pa, sa, and so on) from 1 to 2
bytes.  This prevents the SIGBUS when PDP-11 Unix V7 catches the
misalignment.  This fixes hilo_p.pdpv7 in simh-pdp11.

Change ALIGN to document that sections have 2-byte alignment.  This
change should have no effect, because the sections only contain 2-byte
values.
2018-06-15 00:17:12 -04:00
David Given 5111556d14 Got the emulator to the point where we're hitting the first major emulation bug
(the calloc test hangs).
2018-06-14 05:53:39 -07:00
David Given 853af4c4dd Some code runs (up to needing setcr0). 2018-06-14 04:41:21 -07:00
David Given b71145f79d Implement a non-functional skeleton of the PowerPC emulator (with, hopefully,
most of the instruction decode done).
2018-06-14 03:07:36 -07:00
David Given 31c2ba3f94 File cleanup. 2018-06-13 21:47:08 +09:00
David Given 7eaa235fd1 Bodge the ancient em monitor library into building as a libsys for the em22
plat. It's completely untested, but it builds and makes e.out executables.
2018-06-13 21:44:25 +09:00
David Given 15161ebb35 Remember to always link the libsys and libend. 2018-06-13 20:57:31 +09:00
David Given 6ae38887a7 It appears that the parameter to lol technically has to be word aligned; having
a non-word aligned parameter is illegal (but most of the toolchain accepts it).
So, word align data structures for em22.
2018-06-12 20:54:15 +09:00
George Koehler 6f9e418f94 Remove extra #include <stdio.h> to fix uint
From my request at https://github.com/kstenerud/Musashi/pull/31

There was a conflict between Musahi's uint and OpenBSD's uint:

    $ cc -o m68kmake m68kmake.c
    $ ./m68kmake
    $ cc -DM68K_COMPILE_FOR_MAME=0 -c m68kcpu.c
    In file included from m68kcpu.c:565:
    In file included from /usr/include/stdio.h:46:
    /usr/include/sys/types.h:58:22: error: cannot combine with previous 'int'
          declaration specifier
    typedef unsigned int    uint;           /* Sys V compatibility */
                            ^
    ./m68kcpu.h:75:25: note: expanded from macro 'uint'
    #define uint   unsigned int
                            ^
    1 error generated.
2018-06-10 16:24:35 -04:00
George Koehler 5404dace3a Stop using <X11/Xfuncproto.h> from x86emu.
The code included <X11/Xfuncproto.h> only for _X_ATTRIBUTE_PRINTF,
which tells some compilers to check the printf format string.  Remove
so ACK doesn't need any X11 headers.

Some machines don't have the X11 headers, or they need a flag like
-I/usr/X11R[67]/include to find them.
2018-06-10 16:00:23 -04:00
David Given d623440c77 Add the core of a simple em22 platform. Unfortunately it doesn't work; the old
em libmon vanished decades ago (or never existed), and also ass appears to have
a different idea of what the em opcodes are to everything else and gets
confused.
2018-06-10 20:25:48 +09:00
David Given 19cd42124f Rearrange the tests into sets; allow plats to skip sets; pc86 and linux68k now
skip the tests which use floating point instructions (as their emulators don't
support them).
2018-06-08 15:59:04 +09:00
David Given 1d4ddb939d Merge from trunk. 2018-06-08 00:05:50 +09:00
David Given b9c0e1d964 Dummied out some more system calls --- more tests pass. 2018-06-07 13:12:15 +09:00
David Given 2682c125e0 More real ELF loading and brk handling; more tests pass. 2018-06-07 13:03:36 +09:00
David Given 396795105f Beat the 68k simulator into enough shape that at least *some* of the tests pass. 2018-06-06 22:39:43 +09:00
David Given 4b26f75d23 Hang on, the 68k is big-endian --- I'm extracting words (and bytes) from longs
incorrectly.
2018-06-06 12:49:21 +09:00
David Given 2cf39be752 Get the emulator to the point where it'll start to run code; it then fails,
because the version of Musashi I imported doesn't support floating point...
2018-06-05 23:17:22 +09:00
David Given 5034ed1c39 Crudely beat the standard Masushi simulator into working in the ACK framework. 2018-06-05 17:45:00 +09:00
David Given c6b9446722 Check in the x86emu-based emulator. Sadly, just like the 8086tiny-based
emulator, FPU instructions aren't supported.
2018-06-04 16:19:45 +09:00
David Given 0eb89d5d95 Add a clean copy of the Musashi emulator. 2018-06-05 17:04:47 +09:00
David Given 9132641100 Add the pc86emu skeleton. 2018-06-03 08:24:21 -07:00
David Given eb96ea5d28 Add a clean copy of the x86emu library. 2018-06-03 08:06:23 -07:00
George Koehler 019c7f9da7 Update cpm/README for console changes, ack -fp. 2018-05-07 16:08:44 -04:00
George Koehler 154509038d Enable the line editor in read() for CP/M.
This changes the BDOS call from CPM_BDOS_CONSOLE_INPUT to
CPN_BDOS_READ_CONSOLE_BUFFER.  This allows commands like ^H to delete
characters and ^C to exit to CCP.  This is more like how Unix read(2)
uses canonical mode of termios to read a line.

This change has a disadvantage: the user buffer to read(2) must now be
large enough for an entire line.  This is because CP/M, unlike Unix,
lacks a kernel buffer to hold the rest of the line.  If you use a
buffered input library like stdio to call read(2), then it works; but
if you try to read part of a line or a single character, then it
doesn't work.
2018-05-04 18:21:01 -04:00
George Koehler 4a3b7be795 Use ack -mcpm -fp for mandelbrot.c, startrek.c
Add a variable %{ackldflags} so I can pass `-fp`.  This change seems
to cause the build to relink every ackprogram, because the link now
needs to use %{ackldflags} even if the flags are empty.

mandelbrot_c_cpm runs in YAZE-AG; startrek_c_cpm doesn't run because
it doesn't fit in the 16-bit address space.
2018-04-28 13:18:27 -04:00
George Koehler 93e01eb5d1 Teach i80 ncg to use libfp. Enable ack -mcpm -fp.
Old .o files stop working if they use floating point.  One must
recompile those files.  Old files don't call libfp in the correct way,
and may use symbols that I removed from libem.  I don't keep old
symbols in libem/flp.s, because a program that pulls both libfp and
flp.s would get "multiply defined" errors in the linker.

I teach mach/i80/ncg/table to use libfp by copying or adapting the
patterns from mach/i86/ncg/table.  I did not test all the patterns,
but I did use `ack -mcpm -fp -O4` to compile examples/mandelbrot.c,
then I ran it in the emulator YAZE-AG.  It worked, but it was slow.
2018-04-25 16:09:56 -04:00
George Koehler b9b3428e01 Build (but don't use) libfp for cpm.
This library is for software floating point.  The i80 back end has
never implemented floating point, and might not be ready for libfp.
This commit only builds libfp without using it.

I edit first/build.lua and plat/build.lua to allow `ack -c.s`, then
use FP.script to edit the assembly code.  I edit FP.script so it
writes the edited assembly code to stdout, not to the input file.
2018-04-25 00:34:10 -04:00
David Given aabf0bdd69
Merge pull request #73 from kernigh/kernigh-pr
better code from PowerPC ncg and mcg
2018-03-13 13:57:28 +01:00
David Given 09e7d8f3d0 I figured out how to get top working. 2018-02-23 22:42:38 +01:00
David Given 4b5a7fee14 Made the cgg and the cg code generator work; use this to beat the PDP/11
backend into shape. It now generates binaries --- no idea whether they work or
not.
2018-02-23 22:31:46 +01:00
George Koehler b3c0a767a5 Sync qemuppc with linuxppc.
- Don't reverse bitfields; do use ego (41f3bf7).
 - Use MACHOPT_F=-m2 (3dae9e4).
 - Remove old trap.s (26de4c1).

At this commit, one can build qemuppc with mcg by editing the root
build.lua to uncomment "qemuppc" in "vars.plats".  If one also
uncomments "qemuppc" from "vars.plats_with_tests", then mcg fails to
build the tests.  If one uses ncg (by editing plat/qemuppc/descr to
change "mcg" to "ncg"), then the tests pass.
2018-01-27 21:41:13 -05:00
George Koehler cdde55535e For osxppc, change size 8 to alignment 4.
You may need to delete and recompile some .o files!  This changes the
alignment of 8-byte values in C structs to match what Apple's gcc
does.  See Apple's "32-bit PowerPC Function Calling Conventions" at

    https://developer.apple.com
      /library/content/documentation/DeveloperTools/Conceptual/LowLevelABI
      /100-32-bit_PowerPC_Function_Calling_Conventions/32bitPowerPC.html
2018-01-27 16:35:48 -05:00
George Koehler 3dae9e49cc Use subfic (val - reg) and mulli (reg * val).
In the instruction list, put /* kills xer */ for sraw, srawi, subfic;
and correct the (now unused) "addi." and "lfdu".

Change MACHOPT_F from -m3 to -m2.  This changes the code for 15 * i
from

    slwi r3,r4,4
    subfic r5,r4,0
    add r3,r3,r5

to

    mulli r3,r4,15

If the sequence "slwi subfic addi" takes 3 cycles and 12 bytes, and
mulli takes 3 cycles and 4 bytes, then mulli is better.
2018-01-27 15:53:05 -05:00
George Koehler c6ceaac1af Make osx386 and osxppc use _hol0.s like the other platforms.
Because I'm lazy, I didn't make another copy of _hol0.s; I am building
plat/linux/libsys/_hol0.s for OS X.
2018-01-23 13:55:39 -05:00
George Koehler f1304e1a3c Use extended mnemonics and ha16/lo16.
Remove wrong comment: that's a right shift, not a left shift.
2018-01-11 20:04:27 -05:00
George Koehler 103d44c27c Rewrite sigaction() to prevent another race.
A signal handler might call sigaction().  We must block all signals,
not only our signal, to prevent a race between us and the next signal
handler.

Use /* comments */ because cpp might expand macros in ! comments
though such expansion is probably harmless.

The bridge is now shorter by 2 instructions.
2018-01-11 17:59:02 -05:00