Ultimate-II Virtual Printer¶
By René Garcia Version: February 18th 2018 All rights reserved.
The virtual printer is an Ultimate-II feature since 3.0 firmware. With this functionality you can print from your Commodore 64/128 using a virtual IEC device #4 or #5.
This emulation simulates a Commodore MPS-1230 printer with all the commands that this printer can understand. Not all commands are executed as some of them are hardware related and cannot obviously be implemented. The results are printed to PNG image files, one file per page. You can also choose to bypass the printer emulation and to send the raw data from #4 or #5 IEC device to a file.
MPS-1230 was a mid-range black ink ribbon 9 needle matrix printer sold by Commodore in the late 80’s.
This printer is compatible with nearly all the usual programs that have been edited for C64/C128. It can interpret 4 printer instruction sets:
- Commodore MPS-801
- Epson FX-80
- IBM Graphics Printer
- IBM Proprinter
Virtual Printer is released under the GNU General Public License 3.0. A full copy of the license is included in the root of the Ultimate-II firmware sources.
Purpose of this document¶
This document describes how to use and configure the Ultimate-II embedded virtual printer.
You will also find all the commands and charsets supported by the printer. Then you can add printer facility to your own BASIC programs!
You will find all the configuration items for the printer in the IEC configuration menu.
Enable the printer¶
To enable the printer, you need to enable the software IEC feature in the Ultimate-II:
- Use the F2 Menu to enter Ultimate-II configuration and then select “Software IEC Settings”
- Then on item “IEC Drive and Printer” select “Enabled”
Printer configuration items¶
- Printer Bus ID: 4 or 5 (default is 4)This will assign device ID 4 or 5 to the printer.
- Printer output file: (default is /SD/printer on Ultimate II or /Usb0/printer on Ultimate II+)You can select file base name that the virtual printer will use to create the PNG files. If you choose to generate PNG files they will be named printer-001.png, printer-002.png, and so on. If you chose the bypass the emulation and write RAW binary data to disk the file will be named printer with no extension. When using ASCII filter output, extension .txt will be appended to file name.
- Printer output type: PNG, ASCII or RAW (default is PNG)PNG are images created by the printer emulator each time a page is ejected from the printer. Caution, if a file with the same name already exists, it will not be overwritten and the page is lost. RAW is the data directly sent by the C64/128 to the IEC port and recorded as binary to a file. ASCII will keep and convert printable characters to ISO8859-1 standard. This output only makes sense if you are printing text as you will only get garbage with bitmap. In both RAW and ASCII output mode, if the file already exists, the new data will be appended to it.
- Printer ink density: Low, Medium or High (default is Medium)You can consider this as “how strong is the pin impact on the paper”. Low will only print very small dots and High larger dots. As a consequence, this will change the resulting contrast. High gives the best result for DRAFT character mode. Medium may be well suited for NLQ character mode. Just test and see what match your needs. See table below for samples.
- Printer emulation: Commodore MPS, Epson FX-80, IBM Graphics Printer, IBM Proprinter (default is Commodore MPS)You can select which instruction set the emulator will recognize. Changing from one emulation to another will reset the printer attributes but the printer head stays at the same place and the page is not ejected.
- Printer Commodore charset: USA/UK, Denmark, France/Italy, Germany, Spain, Sweden, Switzerland (default is USA/UK)Select which charset to use when using Commodore MPS emulation. If you don’t know which one to choose, USA/UK is the one you want. See Commodore charset description on chapter 19.
- Printer Epson charset: Basic, USA, France, Germany, England, Denmark I, Sweden, Italy, Spain, Japan, Norway, Denmark II (default is Basic)Select which charset to use when using Epson FX-80 emulation. See Epson charset description on chapter 10.
- Printer IBM table 2: International 1, International 2, Israel, Greece, Portugal, Spain (default is International 1)Select which charset to use for Table2 when using IBM Graphics Printer or IBM Proprinter emulation. IBM printers can use 2 charsets: Table 1 and Table2. Table 1 cannot be modified and is the default charset. Table 2 is the one you chose with this parameter. See IBM charset description in chapter 11.
|Elementary Dot (x1)|
|Elementary Dot (x300)|
|Draft graphic chars|
|NLQ graphic chars|
Using the printer¶
Printing from the C64/C128¶
Just use your program and tell it that you have a connected printer compatible with MPS Commodore series (e.g.: MPS-801/MPS-803 are the most frequently supported commodore printers).
Flushing the printer spool¶
The printer has a very small buffer (256 bytes) and some data may still be in the buffer waiting to be printed when your print job is finished. The printer doesn’t know that your job is finished and waits for more data to print until the end of the page.
You need to tell the printer that you want all the buffered data to be printed and to eject the current page. This works as the Form Feed button on the real MPS-1230 to eject the page.
Go to F5 Menu and select “Flush Printer/Eject Page”. In PNG mode, this will make the current page to be written to a file. Next print job will start on a blank page. In RAW and ASCII mode this will write the buffered data to the file.
Resetting the printer¶
You may need to reset printer to go back to an initial state. Go to F5 Menu and select “Reset IEC and Printer”. Current data in printer buffer is lost. Current page that was being printed is also lost.
Composing a page full of text and creating the PNG file will need approximatively 15 seconds on the Ultimate-II (28 seconds using NLQ mode). You may think it’s slow but this is much faster than a real MPS-1230 printer (1 min in DRAFT mode, 4 min in NLQ mode) !
The Ultimate-II middle button becomes unresponsive while composing a page. The green LED on the right of the cartridge is lit when printer is working. Be patient and look at the activity LED to stop blinking.
RAW and ASCII modes are nearly immediate. There is no process time to wait.
At this time, with firmware 3.2, The virtual printer is slower on Ultimate II+ than on Ultimate II as it is using a slower CPU. In fact, no processor cache is implemented yet in Ultimate II+, this may change in a future firmware as CPU is implemented in FPGA using VHDL.
This table summarize the printer capabilities depending on which printer emulation is active:
|Commodore MPS||Epson FX-80||IBM Graphics Printer||IBM Proprinter|
|Italic (draft only)|
|Reverse page feed|
|7 dot BIM|
|8 dot BIM|
|9 dot BIM|
|60 dpi BIM||
|75 dpi BIM|
|80 dpi BIM|
|90 dpi BIM|
|120 dpi BIM|
|240 dpi BIM|
|Pica Compressed (20cpi)|
|Elite Compressed (24 cpi)|
|Micro Compressed (30 cpi)|
Commodore MPS commands¶
This chapter describes the commands the printer can understand when using the Commodore MPS emulation. You will find Commodore BASIC examples to explain you how to use them. This printer uses PETASCII.
This will print a first line with HELLO WORLD! on it and a second line with HELLO printed with double width characters.
20 PRINT#1,”HELLO WORLD!”
Only on Commodore MPS emulation, you can specify an optional secondary address on OPEN :
- 0 : Select PETASCII charset with uppercases and graphic chars
- 7 : Select PETASCII charset with lowercases and uppercases
If no secondary address is specified, 0 is the default.
For a detailed description of all commands, please refer to the PDF version of this document.
PETASCII character table¶
Table : USA/UK Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table USA/UK Charset in Lowercase/Uppercase Mode (Secondary address = 7)
Table : DENMARK Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table DENMARK Charset in Lowercase/Uppercase Mode (Secondary address = 7)
France / Italy¶
Table : FRANCE/ITALY Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table FRANCE/ITALY Charset in Lowercase/Uppercase Mode (Secondary address = 7)
Table : GERMANY Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table GERMANY Charset in Lowercase/Uppercase Mode (Secondary address = 7)
Table : SPAIN Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table SPAIN Charset in Lowercase/Uppercase Mode (Secondary address = 7)
Table : SWEDEN Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table SWEDEN Charset in Lowercase/Uppercase Mode (Secondary address = 7)
Table : SWITZERLAND Charset in Uppercase/Graphic Mode (Secondary address = 0)
Table SWITZERLAND Charset in Lowercase/Uppercase Mode (Secondary address = 7)
IBM character tables¶
Page size 1984 x 2580
Printable area size 1920 x 2160 (80 PICA characters and 60 lines at 1/6”)
Horizontal Resolution 240 dpi
Vertical Resolution 216 dpi
Physical ratio A4 (21cm x 29,7cm)
With Printer Ink Density set to Medium. Emulation is Commodore MPS.
|1.0.0||May 27, 2016||René Garcia||Initial release|
|1.0.1||May 30, 2016||René Garcia||Corrected capabilities table and options BIT IMG SUB corrected Ink Density samples|
|1.1||February 18, 2018||René Garcia||
Rename MPS Printer Emulation to Virtual Printer
New feature: ASCII output format