mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-27 14:50:23 +00:00
193 lines
5.2 KiB
Markdown
193 lines
5.2 KiB
Markdown
Retro68
|
|
=======
|
|
|
|
A GCC-based cross-compilation environment for 68K Macs.
|
|
Why? Because there is no decent C++11 Compiler targetting Apple's System 6.
|
|
If that's not a sufficient reason for you, I'm sure you will find
|
|
someting more useful elsewhere.
|
|
|
|
If you are crazy enough to try it out, please say hello at
|
|
wolfgang.thaller@gmx.net.
|
|
|
|
Prerequisites
|
|
-------------
|
|
|
|
- Linux or Mac OS X
|
|
- boost, if using gcc 4.8 or earlier to compile on Linux
|
|
- CMake 2.8
|
|
- Glasgow Haskell Compiler (GHC)
|
|
- GCC dependencies: GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
|
|
- Apple Universal Interfaces (tested with version 3.1 - see below)
|
|
- An ancient Mac and/or an emulator.
|
|
|
|
For Ubuntu Linux, the following should help a bit:
|
|
|
|
sudo apt-get install cmake ghc libgmp-dev libmpfr-dev libmpc-dev \
|
|
libghc-system-filepath-dev libghc-parsec3-dev \
|
|
libghc-mtl-dev
|
|
|
|
On a Mac, get the homebrew package manager and:
|
|
|
|
brew install cmake gmp mpfr libmpc
|
|
|
|
TODO: document package names for ghc and ghc libraries on Mac
|
|
|
|
Apple Universal Interfaces
|
|
--------------------------
|
|
|
|
The Universal Interfaces used to be a free download from Apple. However,
|
|
they have taken the site offline and the license agreement prohibits
|
|
redistribution, so this might be a bit hard to find nowadays.
|
|
|
|
You do need a version that still supports 68K Mac development.
|
|
|
|
The package might be somewhere in this huge snapshot of Apple's FTP site made
|
|
by the Internet Archive:
|
|
https://archive.org/details/ftpsites_developer.apple.com
|
|
|
|
If you have a Mac or some other way to read DiskCopy images, grab the MPW 3.5
|
|
image from:
|
|
|
|
http://macintoshgarden.org/apps/macintosh-programmer%E2%80%99s-workshop
|
|
|
|
and use the CIncludes directory from there.
|
|
|
|
Put the C header files into a directory called "CIncludes" at the top
|
|
level of the Retro68 directory.
|
|
|
|
Building
|
|
--------
|
|
|
|
Once you have all the prerequisites, execute these commands from the top level
|
|
of the Retro68 directory:
|
|
|
|
cd ..
|
|
mkdir Retro68-build
|
|
cd Retro68-build
|
|
sh ../Retro68/build-toolchain.sh
|
|
|
|
The toolchain will be installed in the "toolchain" directory inside
|
|
the build directory.
|
|
|
|
Sample programs
|
|
---------------
|
|
|
|
Sample programs are built as MacBinary files (*.bin) and also
|
|
automatically wrapped into raw disk images (*.dsk).
|
|
Look under Retro68-build/build-target/ for the compiled binaries.
|
|
|
|
Overview
|
|
--------
|
|
|
|
Retro68 is an aggegation of various existing free software
|
|
projects with a few small key components added.
|
|
|
|
|
|
Third Party Components:
|
|
- binutils 2.20.1
|
|
- gcc 4.9.1 with some Retro68-specific hacks
|
|
- newlib 2.10.1 (inside the gcc directory)
|
|
- elf2flt (from the ucLinux project's CVS)
|
|
- hfsutils 3.2.6 (just for convenience)
|
|
|
|
Retro68-Specific Components:
|
|
- ASFilter
|
|
- PrepareHeaders.hs
|
|
- MakeAPPL
|
|
- libretro
|
|
- Sample Program: Raytracer
|
|
- Sample Program: App2
|
|
|
|
### binutils
|
|
|
|
Currently unmodified from the original. Configured for m68k-unknown-elf.
|
|
|
|
### gcc
|
|
|
|
Various patches and hacks, most importantly:
|
|
- Changed register usage.
|
|
- Change the way 1-byte and 2-byte parameters are passed.
|
|
- added a Microsoft-style 'stdcall' calling convention.
|
|
What we really want is a 'pascal' calling convention, but that's harder
|
|
to implement, and the MS one is close enough.
|
|
|
|
### newlib
|
|
|
|
Standard C library. Currently unmodified. The missing platform-dependent
|
|
bits haven't been added, instead they are found in 'libretro'.
|
|
|
|
### elf2flt
|
|
|
|
Converts from ELF to a much simpler binary format.
|
|
Minor patch: provide symbols around .init and .fini sections
|
|
|
|
### hfsutils:
|
|
|
|
Included for convenience. No changes.
|
|
|
|
### ASFilter:
|
|
|
|
The most evil hack. Installs a replacement for m68k-unknown-elf-as that
|
|
replaces all instructions of the form
|
|
|
|
jsr __magic_inline_1234_5678_9ABC
|
|
|
|
by
|
|
|
|
dc.w 0x1234
|
|
dc.w 0x5678
|
|
dc.w 0x9abc
|
|
|
|
### PrepareHeaders.hs
|
|
|
|
A small Haskell program that parses header files (specifically, Apple's
|
|
Universal Headers), understands inline declarations and translates
|
|
them to a form that gcc already understands.
|
|
|
|
For OS Traps (parameters in registers), static inline functions
|
|
with inline assembly are generated.
|
|
|
|
For Toolbox Traps (pascal calling convention), the stdcall calling
|
|
convention and the __magic_inline hack described above are used.
|
|
|
|
|
|
### MakeAPPL
|
|
|
|
Reads a FLAT executable as output by elf2flt and converts it to
|
|
a MacBinary file containing a classic Macintosh application.
|
|
|
|
### libretro
|
|
|
|
Contains startup code (handles relocations) and implementations
|
|
for some standard library functions.
|
|
|
|
### Sample Program: App2
|
|
|
|
Simple test program, includes an implementation of a simple text
|
|
console window.
|
|
|
|
The binary is at Retro68-build/build-target/App2/Test.bin
|
|
in MacBinary format and also on a disk image named Test.dsk.
|
|
|
|
### Sample Program: Raytracer
|
|
|
|
Calculates a nice 3D image, pixel by pixel.
|
|
There are two versions: raytracer.c is a straightforward
|
|
plain C implementation using floating point arithmetic.
|
|
|
|
Raytracer2 makes use of C++ features; it also uses
|
|
fixed point arithmetic instead of floating point
|
|
(operator overloading FTW).
|
|
|
|
The binaries are in Retro68-build/build-target/Raytracer.
|
|
Both MacBinary (.bin) and disk image (.dsk) formats are built.
|
|
|
|
License
|
|
-------
|
|
|
|
The original parts of Retro68 are licensed under GPL3+, as are
|
|
most other parts. Some parts are licensed GPL2+ or with more
|
|
liberal licenses. Check the copyright notices in the individual
|
|
files.
|
|
|