More About Mscript

MSCRIPT uses the true 64 column mode of TS-2068, and therefore, the border does not change color during loading and saving. It would be better if a message is printed after “Start tape & press ENTER” to indicate the acceptance of the keystroke. Also, MSCRIPT does not confirm the Restart option, so hours of work may disappear in a fraction of a second.

Fortunately, MSCRIPT does not use the memory from 32000 to about 36000, and we can put our own routines in that range. The following additions will print saving and loading messages and put a layer of protection for Restart function.

8300  CALL A449      ; clear buffer
8303 LD DE,8356 ; address of "Restart" message
8306 LD HL,1700 ; line 17h, column 00h
8309 LD C,1C ; length=1Ch characters
830B CALL A464 ; print the message
830E CALL A3A8 ; wait for a key
8311 OR 20 ; "lower case lock"
8313 CP 79 ; check if "y" is pressed
8315 JP Z,902B ; if "y" then jump to restart
8318 JP 9768 ; return to Command level

831B CALL 990E ; output "Start tape ..."
831E CALL A449 ; clear buffer
8321 LD DE,833F ; address of "Saving" message
8324 LD HL,1700 ; line 17h, column 00h
8327 LD C,0C ; length=0Ch characters
8329 CALL A464 ; print the message
832C RET ; return to Saving routine

832D CALL 990E ; output "Start tape ..."
8330 CALL A449 ; clear buffer
8333 LD DE,8349 ; address of "Loading" message
8336 LD HL,1700 ; line 17h, column 00h
8339 LD C,0D ; length=0Dh characters
833B CALL A464 ; print the message
833E RET ; return to Loading routine

833F - 834A ** SAVING **
8349 - 8355 ** LOADING **
8356 - 8371 Press "Y" to restart Mscript

The above routines will be added just after the normal “MSCRIPT”CODE from tape so that both the original program and the modification can be loaded at the same time. Then, these routines will be moved to their appropriate locations before running the program.

AEFB  LD HL,AF09     ; origin
AEFE LD DE,8300 ; destination
AF01 LD BC,0072 ; length
AF04 LDIR ; move
AF06 JP 9000 ; jump to MSCRIPT
AF09 - AF7A ; routines

These routines may be poked into the memory with a simple BASIC program, or the mnemonics may be entered with HOT-Z, AROS or version 1.82 (short, high memory). First enter, load or plug in appropriate software, and then load the MSCRIPT code by LOAD “”CODE. Be sure the MSCRIPT has been customized for your printer interface.

10 FOR X=44795 TO 44922
20 PRINT X;" ";
30 INPUT A
40 PRINT A
50 POKE X,A
60 NEXT X

Decimal Pokes for use with the Basic Loader program shown above

44795  33         44859  164
44796  9          44860  17
44797  175        44861  73
44798  17         44862  131
44799  0          44863  33
44800  131        44864  0
44801  1          44865  23
44802  114        44866  14
44803  0          44867  13
44804  237        44868  205
44805  176        44869  100
44806  195        44870  164
44807  0          44871  201
44808  144        44872  42
44809  205        44873  42
44810  73         44874  32
44811  164        44875  83
44812  17         44876  65
44813  86         44877  86
44814  131        44878  73
44815  33         44879  78
44816  0          44880  71
44817  23         44881  32
44818  14         44882  42
44819  28         44883  42
44820  205        44884  32
44821  100        44885  76
44822  164        44886  79
44823  205        44887  65
44824  168        44888  68
44825  163        44889  73
44826  246        44890  78
44827  32         44891  71
44828  254        44892  32
44829  121        44893  42
44830  202        44894  42
44831  43         44895  80
44832  144        44896  114
44833  195        44897  101
44834  104        44898  115
44835  151        44899  115
44836  205        44900  32
44837  14         44901  34
44838  153        44902  89
44839  205        44903  34
44840  73         44904  32
44841  164        44905  116
44842  17         44906  111
44843  63         44907  32
44844  131        44908  114
44845  33         44909  101
44846  0          44910  115
44847  23         44911  116
44848  14         44912  97
44849  12         44913  114
44850  205        44914  116
44851  100        44915  32
44852  164        44916  77
44853  201        44917  115
44854  205        44918  99
44855  14         44919  114
44856  153        44920  105
44857  205        44921  112
44858  73         44922  116```

A few pokes are also needed to route the program to our modifications:

```code
POKE 38812,0        ; direct restart routine to
POKE 38813,131      ; routine at 8300h
POKE 39016,45       ; intercept loading routine
POKE 39017,131      ; to routine at 832Dh
POKE 39156,27       ; intercept saving routine
POKE 39157,131      ; to routine at 831Bh

The parameters for variables such as window size and page length are initialized when you start or restart the MSCRIPT. To change the initial values, poke the address in the “POKE” column with a desired number.

VARIABLE        POKE     DEFAULT
------------    -----    -------
Window size     36952      64
Page length     36956      60
Page spacing    36960       6
Left margin     36964       0
Line length     36968      60
Line spacing    36972       1

The printer driver supplied for Aerco IF is set for printers which automatically add a line feed after a carriage return, and it’s just the opposite for the Tasman IF driver. Although most printers have dip switches for either mode, sometimes it’s more convenient to set it by software.

For Aerco IF:

POKE 42859,219
POKE 42860,127
POKE 42861,24
POKE 42862,225

For both IFs:

POKE 42837,0 if printer adds linefeed
POKE 42837,10 if printer doesn't

The keyboard decoding method used by MSCRIPT was explained by Mark Fisher in SWN 2/5. However, there are other characters in the ROM which are not accessible in Timex BASIC, but can be printed using MSCRIPT. Those characters are: CODE 123, CODE 124, CODE 125 and CODE 126. On the Spectrum, these characters are symbol-shifted on F, S, G and A keys, respectively. Please read Fisher’s article for more details.

If you have finished the necessary modifications, save the MSCRIPT code a few times by:

SAVE "MSCRIPT"CODE 36864,8059

Jack Dohaney‘s FAT MSCRIPT loader (SWN 2/4) greatly enhances the clarity of the characters, but a few changes have to be made. Clear any BASIC program you may have in the computer by typing NEW and ENTER. Type or MERGE in the FAT MSCRIPT program. Change the following lines:

 5 DATA 017,000,128,213,001, ...
15 ... : SAVE "MSCRIPT"CODE 36864,8059: ...
21 CLEAR 65535: CLS: RANDOMIZE USR 44795

The change in line 5 from “253” to “128” will generate the new character set in the “free” memory (32768 – 33535) so that it will not take up our precious text space.

I would also like to note that the HI (Hanging Indent) command must be followed by a number. The “Y” and “N” option is not available on TS-2068. The “/” function in the user defined print code is also not recognized by MSCRIPT. Each print code is treated as an unprintable character, so this can be a problem when you want to use right justification.

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.