## Introduction ¶

In his book series The Art of Computer Programming (published by Addison Wesley), D. Knuth uses an imaginary computer, the MIX, and its associated machine-code and assembly languages to illustrate the concepts and algorithms as they are presented.

The MIX’s architecture is a simplified version of those found in real CISC CPUs, and the MIX assembly language (MIXAL) provides a set of primitives that will be very familiar to any person with a minimum experience in assembly programming. The MIX/MIXAL definition is powerful and complete enough to provide a virtual development platform for writing quite complex programs, and close enough to real computers to be worth using when learning programming techniques. At any rate, if you want to learn or improve your programming skills, a MIX development environment would come in handy.

The MDK package aims at providing such virtual development environment on a GNU box. Thus, MDK offers you a set of utilities to simulate the MIX computer and to write, compile, run and debug MIXAL programs. As of version 1.3.1, MDK includes the following programs:

`mixasm`

  MIXAL assembler. Assembler which translates MIXAL source files into programs that can be run (and debugged) by `mixvm`, `mixguile` or `gmixvm`.

`mixvm`

  MIX virtual machine. Emulation of the MIX computer with a CLI.

`gmixvm`

  A GTK+ GUI for the MIX virtual machine. Provides all of `mixvm` functionality accessible through a graphical interface.

`mixguile`

  A Guile shell, with an embedded MIX virtual machine and built-in commands to manipulate it using Scheme.

`mixal-mode.el`

  An Emacs major mode for MIXAL source files editing, providing syntax highlighting, documentation lookup and invocation of `mixvm` within Emacs.

`mixvm.el`

  This elisp program allows running `mixvm` inside an Emacs GUD buffer, providing concurrent edition and debugging of MIXAL programs.

`mixvm` and `gmixvm` implement a simulator of the MIX computer, giving you a virtual machine for executing and debugging MIX programs. These binary programs could be written by hand, but it is easier to produce them compiling MIXAL source files, using the MIXAL assembler `mixasm`. On the other hand, `mixguile` offers you the possibility of manipulating a MIX virtual machine through a set of Scheme functions, so that you can use this programming language to interact with the virtual machine. In addition, `mixvm` and `gmixvm` are also able to interpret Scheme scripts (using an embedded Guile interpreter), that is, you can use Scheme as an extension language to add new functionalities to these programs.

This manual gives you a tutorial of MIX and MIXAL, and a thorough description of the use of the MDK utilities.