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