Printing Levels Utility

A multi-tone screen dump for Epsons. A clever machine code utility which reproduces the VDU.

Volume 1

Number 11

January 1984

Printing pixels

ALAN PLUME'S multitone screen dump for Epson printers

THIS article presents a machine code graphics dump that will represent the colours on your screen by dot patterns on the printer. An attempt is made to preserve the aspect ratio, so that if you dump a circle it doesn't look too elliptical on your paper.

It is designed to work in modes 1,2,4 and 5 although because of the above constraint modes 1 and 4 look a bit chunky.

The dump is fast, a mode 2 screen being dumped in less than 2 minutes 30 seconds on a FX 80.

It is also a negative image — white on the screen is black on the paper and vice-versa, although this can be changed easily.

The colours are represented by dot patterns built up on the eight dot wires in the Epson's print head.

In modes 2 and 5 an individual pixel is made up by a 6 by 2 matrix of dots. In modes 1 and 4 just half of this matrix is used.

The data for these patterns is between lines 1530 and 1630 in the program and can be altered by the user. The colours appear in order starting at colour 0 (black - all zeroes) to colour 7 (white -all threes).

In the Basic I amendments the colour data appears at line 1870.

Figure I shows the dot patterns used. Note that this pattern data in the program is in reverse order.


Figure I: The dot patterns for each colour

The code occupies 357 bytes and can be located wherever you want to put it. For users with a DFS a good place to assemble the code is at &900 and for CFS users &C00.

Note that the code uses Basic II's 6502 pseudo-ops EQUD and EQUW. It also uses the user zero page locations.

A dump can be started either by using CALL &address after having assembled the code at &address or by using *RUN Dumper, if the machine code has been saved on to your choice of backup media by using:

*SAVE Bumper <start address> <end address> <execution address>

For people with Basic 1 the code becomes a little messier, but the details are as follows:

Omit lines 1520 to 1630.

Change lines 190, 210, 250 and 270 to:

190 LDA #(S%+346) MOD 256
210 LDA #(S%+346) DIV 256
250 LDA #(S%+292) MOD 256
270 LDA #(S%+292) DIV 256

Then add line 85

85 wrkspce = S%+292

The data can now be added to the bottom of the program.

1800 data=P%
1810 FOR I%=1TO 6 :?data=0 :data=data+1:NEXT
1820 FOR I%=0TO 7:READ Colour$ 1830 FOR B%=1TO 6:?data=VAL (MID$(Colour$,B%,1))
1840 data=data+l:NEXT 1850 FOR I%=lTO ll(READ B%:?data=B% 1860 data=data+l:NEXT
1870 DATA 000000,021021,013023,010020,313323,232131,212121,333333
1880 DATA 27,65,8,27,76,192,3,27 ,127,27,7