A PASCAL Cross Compiler for the PF56


 

 

Another serious side-track/branch-line of mine has been a project to create a cross-compiler targeting the ICL PF56 machine.

OK, I hear you asking several questions, among which may be: -

  1. What is a cross-compiler?
  2. What is or was the PF56?
  3. Why?

The quick answers: -

  1. A cross-compiler is a compiler for a language in this case Pascal, which runs on one machine (Windows or Linux) and generates code that can be executed on another, here the ICL PF56.
  2. The PF56 was a 16-bit machine developed by ICL initially as an intelligent disc controller (the 2812/x for ED30/ED60/ED200) and also used as the engine for the 7903 communications processor. Bit of a mixed bag as a Pascal machine, a good number of registers, but lacks multiply and divide instructions. - However there is evidence the ICL considered using the PF56 as a low-end user computer and had costed the provision of multiplication and division orders.
  3. I was taught Pascal and how Pascal was compiled at university, I have always liked it and thought it would help another related project along its way (Enhancement of the 1900 Pascal compiler to emit 1900 semi-compiled)

Current Status

The current version is as follows:

Component Alias Function Status
Listing Generator LST Generates compiler listing and error reporting. Working
Lexical Analyser LEXA Reads input text, handles file inclusion, tokenises the source. Working
Syntax Analyser SYNA Parses according to rules of the language, calls Lexical Analyser to fetch next token Working  
Semantic Analyser SEMA Invoked by Syntax Analysis to determine types of identifiers etc. Working
Code Generation Interface CGI An API interface used to the Syntax and Semantic Analysers to request that code be generated according to items on a stack. Largely Working
Code Generator CG The 'back-end' called by the CGI and emits short sequences of code to perform the program's operations. In this case the code generated is PF56 assembly code, which will, in turn, be assembled by the PF56 assembler #SPAA. Partially Working

We intend as the project nears completion to release the compiler, written using FreePascal under Lazarus, so it should work under both Windows® and Linux.

Last updated: 22-Feb-2026