Macintosh Programmer's Workshop (mpw) compatibility layer
Go to file
Kelvin Sherlock 83ccc8270c add license
2013-08-02 22:15:45 -04:00
bin New environment code 2013-08-02 22:13:04 -04:00
cpu disassembler - calculate pc relative addresses 2013-07-02 18:49:21 -04:00
macos traps 2013-07-01 22:40:55 -04:00
mplite mpllite functions for maxmem/freemem compatibility 2013-03-30 18:44:39 -04:00
mpw add license 2013-08-02 22:15:45 -04:00
toolbox add license 2013-07-30 01:06:19 -04:00
.gitignore update gitignore 2013-02-05 23:41:17 -05:00
CMakeLists.txt move debugger code into bin, clean up dispatch 2013-07-07 23:42:27 -04:00
Environment Set up environment from $MPW:Environment 2013-05-18 17:24:25 -04:00
README.text lemon also useful for building 2013-07-16 22:43:48 -04:00
TODO.txt set LMTime global at start 2013-07-14 16:45:06 -04:00

MPW Emulator
------------

by Kelvin W Sherlock.

0. System compatibility:

Currently, only OS X 10.8 with case-insensitive HFS+ is supported.

1. License.

The 680x0 CPU code is from WinFellow (http://fellow.sourceforge.net) and is 
licensed under GPL v2 or later.  Consequently, the rest of the code is licensed 
under the GPL v2 as well.

The memory allocator (NewHandle/NewPointer) code is from mempoolite, which
is a fork of the SQLite zero-alloc allocator by Jefty Negapatan 
<jeftyneg@gmail.com>.  It, as is SQLite, is in the public domain.

2. Building

Compiling requires cmake, ragel, lemon, and a recent version of clang++ with 
c++11 support.  It has only been built and tested with OS X 10.8.

mkdir build
cd build
cmake ..
make

This will generate bin/mpw and bin/disasm.

3. Installation

Certain configuration and execution files are generally useful.  They are
stored in an mpw directory, which may be located:

$MPW (shell variable)
~/mpw/ (your home directory)
/usr/local/share/mpw/
/usr/share/mpw/

The layout is reminiscent of actual MPW installations.

mpw/Environment.text
mpw/Tools/...
mpw/Interfaces/...
mpw/Libraries/...
mpw/Help/...

4. Environment file

The Environment.text file is new; it contains MPW environment variables (many
of them set the library and include file locations).  The format is fairly 
simple.

# this is a comment

#this sets a variable
name = value

# this sets a variable if it is undefined.
name ?= value

# values may refer to other variables
Libraries=$MPW:Libraries:Libraries:
Libraries=${MPW}:Libraries:Libraries:

eventually, mpw will support a -Dname=value flag, so you can do something like:

# use 3.2 headers/libraries unless overridden on the command line
MPWVersion ?= 3.2
Libraries=$MPW:Libraries:Libraries-$MPWVersion:


5. Usage

mpw [mpw flags] command-name [command arguments]

you may also create shell aliases:

alias AsmIIgs='mpw AsmIIgs'

or create a shell script (in /usr/local/bin, etc)

/usr/local/bin/AsmIIgs:

#!/usr/bin/sh

exec mpw AsmIIgs $@

mpw looks in the current directory and then in the $MPW:Tools: directory
for the command to run.  The MPW $Commands variable is not yet supported.