Not quite two dozen lines, but nonetheless... here's pgm2chunky.prg (
). It expects a 44x46 pixels *.pgm file as input, and emits a *.prg file.
A first some initialisations for all possible 2x2 groupings of chunky pixels in string form (G$) and screen code (G%()):
Prompts for source and target files. Normally you should use 'invert input', as the background on the VIC-20 is white and foreground is blue:
Open the *.pgm file and check that the header (i.e. type and size) is correct, then wait for a key press to proceed:
Read in the *.pgm file and display it on screen, then wait for a key press to proceed:
). The resulting code looks like this:
Code: Select all
10 PRINT"{CLR,BLU}";
11 PRINT"{RVS OFF,C=-D,C=-B,RVS ON,6 SPACE,C=-F,RVS OFF,8 SPACE,RVS ON} {C=-K,2 SPACE,RVS OFF,C=-K}";
12 PRINT" {RVS ON,C=-B,4 SPACE,C=-F} {RVS OFF,C=-K,5 SPACE,C=-D,2 SPACE,RVS ON} {RVS OFF,C=-V,RVS ON,2 SPACE,RVS OFF,C=-K}";
13 PRINT"{C=-C,RVS ON,C=-B,4 SPACE,C=-F} {RVS OFF,C=-I,C=-F,3 SPACE,RVS ON,C=-V,RVS OFF,C=-B,2 C=-I,RVS ON,C=-C,RVS OFF,C=-V,RVS ON,2 SPACE,C=-C}";
14 PRINT"{RVS OFF,C=-C,RVS ON,C=-B,6 SPACE,C=-F,2 SPACE,RVS OFF,2 SPACE,C=-D,RVS ON} {C=-D} {RVS OFF,2 C=-K,RVS ON,2 SPACE,C=-C}";
15 PRINT"{RVS OFF,C=-C,RVS ON,C=-B,4 SPACE,C=-F,4 SPACE,RVS OFF,C=-K} {RVS ON,C=-K,2 C=-C,2 C=-D,RVS OFF,C=-K,RVS ON,C=-V} {C=-C}";
16 PRINT"{RVS OFF} {RVS ON,C=-B,7 SPACE,RVS OFF,C=-K,RVS ON} {C=-C,RVS OFF,2 SPACE,RVS ON,C=-I,RVS OFF,C=-V} {RVS ON,C=-K,C=-F,C=-K} {C=-C}";
17 PRINT"{RVS OFF} {RVS ON,C=-V,7 SPACE,2 C=-F} {RVS OFF,5 SPACE,C=-D,RVS ON,C=-F,C=-K,2 SPACE}";
18 PRINT"{RVS OFF,C=-C,RVS ON,C=-V,6 SPACE,C=-D,RVS OFF,C=-B,RVS ON,C=-F} {RVS OFF,5 SPACE,C=-D,RVS ON} {C=-K,2 SPACE}";
19 PRINT"{RVS OFF} {RVS ON,C=-V,6 SPACE,RVS OFF,C=-C,C=-D,RVS ON,C=-F} {RVS OFF,6 SPACE,RVS ON} {C=-C,2 SPACE}";
20 PRINT"{RVS OFF} {RVS ON,C=-V,5 SPACE,C=-C,RVS OFF,C=-V,C=-D,RVS ON,2 SPACE,RVS OFF,5 SPACE,C=-C,RVS ON} {C=-C,2 SPACE}";
21 PRINT"{RVS OFF} {RVS ON,C=-V,6 SPACE,RVS OFF,2 C=-B,RVS ON} {C=-C,RVS OFF,5 SPACE,C=-C,RVS ON} {C=-C} {C=-D}";
22 PRINT"{RVS OFF} {RVS ON,C=-V,7 SPACE,C=-K,2 SPACE,RVS OFF,C=-F,4 SPACE,C=-C,RVS ON} {C=-C} {C=-D}";
23 PRINT"{RVS OFF} {RVS ON,C=-V,7 SPACE,RVS OFF,C=-B,RVS ON,2 SPACE,RVS OFF,C=-K,4 SPACE,C=-C,RVS ON,2 SPACE,C=-F,C=-D}";
24 PRINT"{RVS OFF} {RVS ON,C=-V,7 SPACE,RVS OFF,C=-B,RVS ON,C=-F} {RVS OFF,C=-V,4 SPACE,C=-C,RVS ON,4 SPACE}";
25 PRINT"{RVS OFF} {RVS ON,C=-F,8 SPACE,RVS OFF,C=-B,RVS ON} {RVS OFF,5 SPACE,C=-D,RVS ON,2 SPACE,C=-V,C=-C}";
26 PRINT"{RVS OFF} {RVS ON,12 SPACE,C=-K,C=-C,RVS OFF,2 SPACE,RVS ON,C=-K,3 SPACE,C=-C}";
27 PRINT"{RVS OFF} {RVS ON,C=-V,10 SPACE,2 C=-D,RVS OFF,3 SPACE,RVS ON,C=-V,3 SPACE,C=-C}";
28 PRINT"{RVS OFF} {RVS ON,11 SPACE,RVS OFF,C=-K,RVS ON,C=-B,RVS OFF,3 SPACE,RVS ON,4 SPACE,RVS OFF,C=-K}";
29 PRINT" {RVS ON,C=-V,10 SPACE,C=-I,RVS OFF,C=-V,2 SPACE,RVS ON,C=-K,4 SPACE,RVS OFF,C=-K}";
30 PRINT" {RVS ON,C=-V,10 SPACE,RVS OFF,C=-V,3 SPACE,RVS ON,5 SPACE,RVS OFF,C=-K}";
31 PRINT" {RVS ON,C=-V,10 SPACE,RVS OFF,C=-V,2 SPACE,C=-D,RVS ON,5 SPACE,RVS OFF,C=-K}";
32 PRINT" {RVS ON,C=-V,10 SPACE,C=-D,RVS OFF,C=-D} {C=-D,RVS ON,5 SPACE,RVS OFF,C=-K}";
33 PRINT" {RVS ON,C=-V,10 SPACE,C=-D,RVS OFF,2 SPACE,C=-D,RVS ON,5 SPACE}";
34 POKE8185,236:POKE38905,6
35 GETA$:IFA$=""THEN35