ZXText2P v1.0

What is ZXText2P?
It's an open-source command line utility that takes a text file containing a ZX81 BASIC program, and turns it into a ".P" file suitable for loading into your favourite ZX81 or TS1000 emulator.

Download
zxtext2p.zip - This zip file contains the C source code, a readme file, and versions of zxtext2p for Windows and Linux, as well as full documentation in HTML format.
zxt2dos.zip - Contains a 16 bit DOS binary for use with a 286 or better processor running MS-DOS. Use this version only if you have an operating system OLDER than Windows 95 (e.g. Windows 3 or MS-DOS 5).

How do I use it?
From a command prompt, type "zxtext2p mytextfile.txt". Assuming the text file contains a valid ZX81 program, you will get a file named "out.p" that you can use with an emulator (or transfer to tape and use with a real ZX81, using the appropriate tools).

There are a number of options that you can specify on the command line. They are as follows:-

Option Meaning
-h Show usage help.
-o output-file Write the output to the named file (default="out.p").
-l Use labels mode (see the section on labels, below).
-s line In labels mode, sets the starting line number (default=10).
-i In labels mode, set the line number increment (default=2).

For example, zxtext2p -l -s 100 -i 5 -o mygame.p gamesrc.txt will read the file gamesrc.txt, which must contain labelled code rather than code with line numbers, and will produce a .P file called mygame.p The first line will be numbered 100, the next 105, and so on.

Labelled Code
Using the "-l" command line option allows you to write labelled code. zxtext2p will produce the appropriate line-numbered output. Program labels must always start with an @ character, and must terminated with a colon (':'). Here is an example of labelled ZX81 code:-

       CLS
       PRINT "HELLO WORLD."
    @loop1:
       PRINT "THIS IS A LOOP"
       GOTO @loop1	 

Escape codes, Graphics, and Formatting
Formatting
The text in the input file can be in any combination of upper or lower case. For example, this is perfectly valid input:-

    10 scroll
    20 PRINT "What is your name?"
    30 Input n$
    40 pRiNt "hEllo ";N$
    50 StoP

Source Comments and Blank Lines
Any blank lines in the input file will be ignored by zxtext2p, as will any lines beginning with a '#' character. This means that you can include source-code comments in the input file and not have them take up any space in the resultant .P file. Any leading or trailing spaces on a line will also be ignored. For example:-

# MyGame - version 0.01
# 
# By Fred Bloggs
   
   10 REM This is the first line that will appear in the output
   20 CLS
   30 PRINT "Welcome to My Game."

You can also split long lines by placing a single backslash ("\") character at the end of the line you wish to wrap:-

   1120 IF lives>3 AND score>20000 THEN \
        GOSUB 4200

Inverse Video
Inverse video (white on black) text can be included in your program by using the percent symbol ('%') as a character prefix. For example:-

   10 PRINT "%I%n%v%e%r%s%e% %V%i%d%e%o Normal Video"

Escape Codes and Block Graphics
In BASIC, the quote symbol (") is used to delimit strings of text. If you want a quote symbol to appear in the middle of a string, you must therefore prefix it with a backslash ("\") escape character. For example:-

   10 PRINT "He said, \"Hello.\""

The full range of ZX81 block graphics characters can easiliy be inserted into a program by using the backslash ("\") escape character followed by a 2 character "ASCII-art" style rendition of the desired graphics character. For example:-

   10 PRINT "\:' \':"

The availble graphics characters, and their escape codes, are shown below. Notice how the pattern suggested by the dots/commas/apostrophes is used to form the appropriate graphics symbol.

Author: Chris Cowley
ZXText2P uses portions of code from zmakebas by Russell Marks