David Given
9f34262f95
Implement enough libb to make 'Hello, world!' work.
2016-11-27 22:05:15 +01:00
David Given
4485d89b23
Hook the B compiler up to the compiler driver.
2016-11-27 20:48:07 +01:00
David Given
5bce5fc4da
Change the extension used by Basic files for .b to .bas, to avoid conflicts
...
with B.
2016-11-27 20:38:33 +01:00
David Given
a9a0b37b14
Plats which use aelflod need to depend on it.
2016-11-26 12:07:08 +01:00
David Given
98c761d5c0
Enable tests for linux386 via qemu-i386.
2016-11-26 11:58:02 +01:00
David Given
cf33bd6cc4
Enable tests for linuxppc via qemu-ppc.
2016-11-26 11:56:17 +01:00
David Given
8a58614aef
Rework the tests to run on pc86; lots of test fixes for the brk() test, which
...
was nearly useless; lots of fixes to qemuppc and pc86 sbrk(), which was broken;
change the pc86 console to echo output to the serial port (needed for running
tests on qemu).
2016-11-26 11:23:25 +01:00
David Given
5f66f06dc6
Refactored the tests to make the generic across different plats.
2016-11-25 21:02:51 +01:00
David Given
bfa8e501a3
Make pc86 echo console output to the serial port, so qemu can pipe it to
...
stdout.
2016-11-25 20:28:41 +01:00
David Given
c084f9f224
Remove the Mark() and Release() procedures from the Pascal compiler and
...
standard library, because they never worked and come from an achingly old
version of the Pascal specification. Fix the implementations of New() and
Dispose() to use the standard C memory allocator rather than rolling their own
(also in C). Write test!
2016-11-24 20:35:26 +01:00
David Given
899f1ea4f3
Forgot to check in the change to qemuppc's brk() to set errno on memory
...
allocation failure.
2016-11-24 19:47:11 +01:00
David Given
991f47098c
Add a test for brk() and sbrk().
2016-11-23 22:28:21 +01:00
David Given
6cd2a9ba81
Add a test for calloc().
2016-11-23 22:22:04 +01:00
David Given
36ab90385f
Change sbrk() to take an int rather than an intptr_t (following the OpenBSD way
...
rather than the Linux way; various non-C bits of the ACK assume it takes an
int, so it's cleaner).
2016-11-23 22:06:24 +01:00
David Given
0aac9aafd3
Combine brk() with sbrk(); modify brk() to update the sbrk(0) value.
2016-11-23 22:04:21 +01:00
George Koehler
b6b707d9df
Make working gettimeofday() for Mac OS X.
...
The system call puts the time in a pair of registers, not in the
timeval structure. Add code to move the time to the structure, so
programs see the correct time, not garbage. This fixes our example
programs that use the time as a random seed.
2016-11-23 13:25:55 -05:00
George Koehler
98f2273d97
Teach cvmach to emit the symbol table.
...
This preserves the name and value of every symbol. The type and other
info of a symbol might be lost. In gdb, one can now "disas main" or
"disas '.ret'" to disassemble functions by name.
Most symbols are in sections, so I also teach cvmach to emit the Mach
section headers. The entry point in plat/osx*/descr moves down to
make room for the section headers and LC_SYMTAB.
I fix some bugs in calculations of cvmach. They were wrong if ROM had
a greater alignment than TEXT, or if DATA did not start on a page
boundary. I introduce machseg[] to simplify the mess of variables in
main(). I declare most functions as static. Also, cvmach becomes the
first program to #include <object.h>.
2016-11-22 17:16:30 -05:00
David Given
6e9c2d5c0d
Also call .trp .trap, for ncg compatibility.
2016-11-20 19:39:28 +01:00
David Given
2d0bc7ef0d
Finally fix the build system issue where ackprogram would try to explicitly
...
link all the language libraries.
2016-11-20 18:57:44 +01:00
David Given
953c08839f
inn works now; add a helper for it.
2016-11-20 12:53:44 +01:00
David Given
196fa914b3
lxa now works, I hope; traps are better (and stubbed out on qemuppc).
2016-11-20 11:57:21 +01:00
David Given
d5328492d7
Better handling of float conversions; more tests; converting to unsigned ints
...
works now.
2016-11-20 11:27:40 +01:00
David Given
132baac78a
Add some more tests.
2016-11-20 10:46:53 +01:00
George Koehler
6e31d46d6f
Fix my typo to put symbol "begrom" in correct section.
2016-11-19 19:23:42 -05:00
David Given
454a7494bb
cif8 and cuf8 work now. More tests.
2016-11-19 11:42:30 +01:00
David Given
db3564f35a
Use .hol0 as an additional name for hol0; mcg requires it.
2016-11-19 11:09:07 +01:00
David Given
d31bc6a3f9
Made csa and csb work with mcg; adjust the libem functions and the
...
corresponding invocation in the ncg table so the same helpers can be used for
both mcg and ncg. Add a new IR opcode, FARJUMP, which jumps to a helper
function but saves volatile registers.
2016-11-19 10:55:41 +01:00
David Given
a4616b7124
Betterer timeout handling.
2016-11-17 22:04:50 +01:00
David Given
c25ad82a89
Tests can now specify (via a hacky filename suffix) which runtime they want.
2016-11-16 21:08:03 +01:00
David Given
71e6ca26d5
Add another test.
2016-11-16 20:56:45 +01:00
David Given
edfee33576
Cleanup; the test driver is now way more robust.
2016-11-16 20:50:14 +01:00
David Given
cc686ded62
Get subtractions the right way round.
2016-11-15 20:25:11 +01:00
David Given
5e8babf098
Add a basic integer shift test.
2016-11-14 22:12:13 +01:00
David Given
c6bce0aaee
Add basic integer comparison test.
2016-11-14 22:01:25 +01:00
David Given
6a4f465f53
Add a rather bodged test framework for the qemuppc plat, which only runs if the
...
qemu-system-ppc emulator is installed.
2016-11-13 13:37:22 +01:00
David Given
f52cb45e49
Add just enough Open Firmware support for an output console.
2016-11-12 22:09:54 +01:00
David Given
48e74f46fc
Add the very experimental qemuppc plat, intended to generate minimal images
...
which can be emulated using qemu (for, hopefully, a test suite). Currently it
generates images which won't run because there's no RAM.
2016-11-12 19:20:58 +01:00
George Koehler
0d0495e818
Install only 1 copy, not 2 copies, of osx headers.
...
Before this commit, the headers in plat/osx/include got installed
twice into PLATIND/osx386/include and PLATIND/osxppc/include. This
commit installs them once into PLATIND/osx/include and changes both
descr files to find them.
Several rules in lang/ depend on plat/osx386/include+headers or
plat/osxppc/include+headers. They each become a simplerule that
depends on plat/osx/include+headers.
2016-11-08 17:13:51 -05:00
George Koehler
ed7fb69f79
Add the missing return in plat/osx/libsys/creat.c
...
Before now, it might have worked by accident if the return value from
open() stayed in the function return area.
2016-11-08 15:35:02 -05:00
George Koehler
7f94e971fd
Remove trailing whitespace in plat/osx*
...
Also fix a comment.
2016-11-08 15:22:09 -05:00
David Given
8c3670483f
Get top working with the PowerPC; use it to eliminate useless branches and
...
moves.
2016-10-29 23:37:11 +02:00
David Given
a8c4dac67c
Merge from default (merging in George Koehler's PowerPC changes).
2016-10-29 22:40:40 +02:00
David Given
5f0164db62
Bolt mcg into the PowerPC backend. It doesn't build yet, but it is generating
...
*some* code.
2016-10-17 00:06:06 +02:00
David Given
d539389e81
Merge in the unfinished PowerPC branch.
2016-10-16 22:38:27 +02:00
George Koehler
02fb480217
Commit a preview of osx386 and osxppc as new platforms.
...
These produce Mach-o executables for Mac OS X on Intel or PowerPC
processors. Our code generator for PowerPC (mach/powerpc) still has
bugs. Some examples seem to run, but startrek crashes. Our code
generator for Intel (mach/i386) is better.
There is a problem with job control. If you run paranoia or startrek,
then suspend the job (^Z) and resume it ('fg' in bash), then read(2)
might fail with EINTR.
The larger files in this commit are
- plat/osx/cvmach/cvmach.c
- plat/osx/libsys/brk.c
- plat/osx386/libsys/sigaction.s
- plat/osxppc/libsys/sigaction.s
2016-10-02 14:58:05 -04:00
George Koehler
9017ba9dea
Merge branch 'default' into kernigh-linuxppc
2016-09-30 13:55:06 -04:00
George Koehler
ce5faba919
Remove .linenumber and .filename; use hol0 and hol0+4.
...
We need this because some .e files in lang/ are using 'loe 0' and 'lae
4' to load the line number from hol0 and filename from hol0+4.
2016-09-30 13:40:36 -04:00
George Koehler
b427d33f9f
Define the begdata, begrom, begbss symbols for linuxppc.
...
I copied the definitions from linux386 and linux68k.
This change also moves _errno and the other common symbols in boot.s
from .text to .bss. Common symbols belong in .bss, but the assembler
seems dumb enough to put them in any section.
2016-09-30 13:21:42 -04:00
George Koehler
865ef629dd
Multiple tweaks to plat/linuxppc/descr
...
Don't define __POWERPC. I don't know any other compiler that defines
__POWERPC and don't want to invent a new macro. Apple's gcc 4.0.1
from Xcode 2.5 defines __ppc__, _ARCH_PPC, __POWERPC__. Debian's gcc
4.9.2-10 defines _ARCH_PPC, __PPC__, __powerpc__, __PPC, __powerpc,
PPC, powerpc.
Move the base vm address from 0x80000000 down to 0x10000000, as this
is where Debian loads /bin/true. This is still higher than the base
addresses for linux386 and linux68k.
Sync led's arguments with linux386.
2016-09-21 16:26:30 -04:00
George Koehler
f6dc6f6875
Implement isatty() for Linux.
...
If it understands TIOCGETD, then it is a tty, else it isn't one. This
seems to help Basic's input statement so I can see the prompt before
I enter my input.
2016-09-20 21:28:37 -04:00
George Koehler
5b69777647
Rename our pseudo-opcode 'la' to 'li32'.
...
GNU as has "la %r4,8(%r3)" as an alias for "addi %r4,%r3,8", meaning
to load the address of the thing at 8(%r3). Our 'la', now 'li32',
makes an addis/ori pair to load an immediate 32-bit value. For
example, "li32 r4,23456789" loads a big number.
2016-09-18 17:03:23 -04:00
David Given
80cb6ba927
Eliminate the RELOH2 relocation, as it never worked --- the address would be
...
calculated incorrectly because of overflow errors.
Replace it with an extended RELOPPC relocation which understands addis/ori
pairs; add an la pseudoop to the assembler which generates these and the
appropriate relocation. Make good.
--HG--
branch : dtrg-experimental-powerpc-branch
2016-09-17 12:43:15 +02:00
David Given
45a950571d
Mostly add support for the experimental and largely broken linuxppc platform.
...
(Doesn't quite build.)
--HG--
branch : dtrg-experimental-powerpc-branch
2016-09-15 23:12:03 +02:00
David Given
8c94b1316c
Add unlink system call.
2016-09-04 19:23:02 +02:00
David Given
f67c98e239
Distributions are a pain --- let's not bother any more. Instead, we just tag
...
the repository and download a complete snapshot, old and ancient stuff and all.
2016-09-02 23:00:38 +02:00
David Given
612e38f1c6
Remove the old make-based build system, plus some big chunks of horribly
...
obsolete protomake build system.
2016-09-02 22:17:51 +02:00
David Given
5bae29a00c
ego now builds and is used.
...
This needed lots of refactoring to ego --- not all platforms have ego descr
files, and ego will just crash if you invoke it without one. I think originally
it was never intended that these platforms would be used at -O2 or above.
Plats now only specify the ego descr file if they have one.
2016-08-21 22:01:19 +02:00
David Given
1a7b4f8729
Build the examples when doing a normal build; this exercises the compiler as a
...
whole and is one step further towards a proper test suite.
2016-08-20 14:05:24 +02:00
David Given
edee22510b
liblinux is no more; its files are now in libsys.
2016-08-20 14:03:49 +02:00
David Given
52eaf753b6
rpi has a time() function; don't try to call gettimeofday().
2016-08-20 14:03:19 +02:00
David Given
204f932ed2
Raspberry Pi backend now builds.
2016-08-20 12:40:13 +02:00
David Given
420c47c386
Fix dependency error (only shows up with make, not ninja. Odd).
2016-08-15 00:46:43 +02:00
David Given
38fa6941d5
linux68k builds now.
2016-08-14 11:34:18 +02:00
David Given
3df4906d52
Turns out I wasn't building the syscall libraries. Do so.
2016-08-14 11:23:57 +02:00
David Given
b549980af2
Wasn't exporting the plat headers; refactor to make this a little cleaner.
2016-08-14 11:01:36 +02:00
David Given
f253b6a169
linux386 builds. Also, forgot to turn back on the language runtimes.
2016-08-14 10:37:55 +02:00
David Given
262c5fedcf
Biggish refactor to break cycles; my build rules were full of them. cpm builds,
...
which requires top and topgen.
2016-08-14 01:39:40 +02:00
David Given
e0b8bd221d
Pascal runtime library now builds.
2016-08-13 13:07:19 +02:00
David Given
e770d09dc8
Pascal compiler builds.
2016-08-13 13:03:06 +02:00
David Given
00c67fcc0e
Modula-2 runtime library now builds.
2016-08-13 12:43:44 +02:00
David Given
08b7c4aaae
The Basic runtime builds now.
2016-08-12 00:24:40 +02:00
David Given
7c60c27302
The Basic compiler works now.
2016-08-12 00:19:51 +02:00
David Given
3ce4e53aa9
Most of libc builds now (missing malloc).
2016-08-08 23:55:47 +02:00
David Given
0d77cb8279
We can build our first C file.
2016-08-07 21:56:53 +02:00
David Given
5e84be70fd
Massive ackbuilder refactor --- cleaner and more expressive. Lists
...
are automatically flattened (leading to better build files), and the
list and filename functions are vastly more orthogonal.
2016-08-04 23:51:19 +02:00
David Given
b2bb4ce3b2
Builds libend (the simplest library). Becoming obvious I need to rework the way
...
ackbuilder deals with lists.
2016-07-30 00:39:22 +02:00
David Given
363d13cc2f
C preprocessor; tabgen; now the pc86 boot.s builds using the ack
...
toolchain.
2016-07-29 00:22:49 +02:00
David Given
a8a9d1bbfa
yacc, ncgg; platform ncg builds now.
2016-07-26 23:35:30 +02:00
David Given
bff5c4019c
Baby steps towards building a platform --- make the assembler work.
...
Add ackbuilder support for C preprocessor files and yacc.
2016-07-24 00:50:02 +02:00
David Given
88bd7ce126
Remove defunct pmfiles.
...
--HG--
branch : default-branch
2016-06-03 13:56:50 +02:00
David Given
4b3c1a2d07
Add missing (but probably non-working) rpi file.
...
--HG--
branch : default-branch
2016-06-02 12:21:13 +02:00
David Given
ff0c78cc78
Merge from default.
...
--HG--
branch : dtrg-videocore-branch-branch
2016-03-13 21:13:09 +01:00
David Given
9f23fbbe6a
Allow machines to use cg if they wish.
...
--HG--
rename : mach/proto/ncg/build.mk => mach/proto/cg/build.mk
rename : util/ncgg/build.mk => util/cgg/build.mk
2015-03-23 00:08:51 +01:00
David Given
c72eaef8ee
Add routine to set the Raspberry Pi clock to 250MHz (loads faster than the default 19.2MHz).
...
--HG--
branch : dtrg-videocore
rename : plat/rpi/libsys/pi_user_to_phys.s => plat/rpi/libsys/pi_fast_mode.s
2013-06-24 23:57:27 +01:00
David Given
d94c1c8150
Updated distr files.
...
--HG--
branch : dtrg-videocore
rename : mach/i80/.distr => mach/vc4/.distr
rename : plat/cpm/.distr => plat/rpi/.distr
2013-06-21 23:38:21 +01:00
David Given
2be811bac2
Updated VC4 docs.
...
--HG--
branch : dtrg-videocore
2013-06-21 23:21:08 +01:00
David Given
052dd9bfc0
Actually remember to set the stack pointer on startup. Reduce to stack from 16kB to a much more reasonable 1kB.
...
--HG--
branch : dtrg-videocore
2013-06-20 00:14:55 +01:00
David Given
eaf4339cd6
Implement a very crude busy-wait based select() mechanism for consol input.
...
--HG--
branch : dtrg-videocore
rename : plat/rpi/include/ack/config.h => plat/rpi/include/sys/select.h
rename : plat/rpi/libsys/time.c => plat/rpi/libsys/select.c
2013-06-09 22:16:30 +01:00
David Given
ed6c4a85d1
Change the size of the SRAM area to 128kB (to reflect reality).
...
--HG--
branch : dtrg-videocore
2013-06-06 00:05:48 +01:00
David Given
aacabba165
Apply fix contributed by George Koehler:
...
- don't crash if BSS overlaps BDOS
- fix stack initialisation bug
- fix command line argification
2013-06-02 22:02:15 +01:00
David Given
d5a112dbfd
Some more termios compatibility options.
...
--HG--
branch : dtrg-videocore
2013-05-30 23:25:22 +01:00
David Given
2054618e75
Add basic termios to the rpi platform to allow echoing/newline translation to be controlled.
...
--HG--
branch : dtrg-videocore
rename : plat/rpi/include/unistd.h => plat/rpi/include/termios.h
rename : plat/rpi/libsys/write.c => plat/rpi/libsys/tcgetattr.c
rename : plat/rpi/libsys/write.c => plat/rpi/libsys/tcsetattr.c
2013-05-30 23:19:55 +01:00
David Given
d3e3e72860
Update from trunk.
...
--HG--
branch : dtrg-videocore
2013-05-29 15:03:48 +01:00
David Given
ae993b1eb2
Add a crude README.
...
--HG--
branch : dtrg-videocore
2013-05-26 19:54:22 +01:00
David Given
38e4726f5c
Boot code now works properly in both kernel and bare-metal mode.
...
--HG--
branch : dtrg-videocore
2013-05-26 19:41:37 +01:00
David Given
e01f00e320
Allow reading from the mini UART. Add a check to not touch the UART unless it's been initialised (in case of accidents when running in kernel mode).
...
--HG--
branch : dtrg-videocore
2013-05-26 18:58:54 +01:00
David Given
bd9497be77
Renamed the pi-specific functions to be a bit cleaner.
...
--HG--
branch : dtrg-videocore
rename : plat/rpi/libsys/phys_to_user.s => plat/rpi/libsys/pi_phys_to_user.s
rename : plat/rpi/libsys/uart.s => plat/rpi/libsys/pi_uart.s
rename : plat/rpi/libsys/user_to_phys.s => plat/rpi/libsys/pi_user_to_phys.s
2013-05-26 00:22:39 +01:00
David Given
e299cc3bcf
stdio (output only) now works.
...
--HG--
branch : dtrg-videocore
2013-05-25 23:59:31 +01:00
David Given
6a672d5e96
Heap allocations now works.
...
--HG--
branch : dtrg-videocore
2013-05-25 23:28:47 +01:00
David Given
ec25fec145
Build binaries that will run bare metal. Add enough syscall library to init the uart and write text.
...
--HG--
branch : dtrg-videocore
rename : plat/rpi/libsys/libsys.h => plat/rpi/libsys/libsysasm.h
rename : plat/rpi/libsys/_sys_rawread.s => plat/rpi/libsys/phys_to_user.s
rename : plat/rpi/libsys/_sys_rawread.s => plat/rpi/libsys/uart.s
rename : plat/rpi/libsys/_sys_rawread.s => plat/rpi/libsys/user_to_phys.s
2013-05-25 00:35:29 +01:00