CoBra BASIC


For the purpose of this section I will not do a description of the original BASIC version for ZX Spectrum. Instead, I will write a little comment on the BASIC version described in the CoBra BASIC manual.
This version differs a little from the original Spectrum versions by two instructions, described in the CoBra BASIC manual:

A first version of CoBra BASIC - ZX.COM


On the UTILS2 disk in the 3.5" CP/M disk archive, in USER 0, there is a CP/M executable named ZX.COM. It launches a BASIC version which seems to be the very first version modified for CoBra by the team in Brașov. It is dated 1987, quite a while before the widespread home-manufacturing of CoBra computers in the campuses in Bucharest. This version implements the COPY and MON commands according to the description above.

The start screen of this BASIC version looks like this:

BASIC modified for CoBra by ITCI Brasov (ZX.COM)

(Binary image) (CP/M executable)



Next, a very short demo of the COPY command for this BASIC version. I'm not sure, but I suspect the implementation of the COPY command in this BASIC version was designed to use some Romanian-made printer, because in the demo below a very low baud rate can be seen for the data sent to the printer (and the printing time is also quite long).

The COPY command in CoBra BASIC (ZX.COM) - a short demo

1:

The start screen of this version.

2:

I typed the COPY command.

3:

After an ENTER the command starts executing (takes about 11 minutes !)...

4:

...then the execution stops with the normal termination message.


Another two versions of CoBra BASIC - COBRA.SCP and COBRA.ROB


On the UTILS3 disk in the 3.5" CP/M archive, in USER 3, there is a loader program for Spectrum operating systems (COSYS.COM) having 4 available systems: As a comment, this system loader will not work unless the 4 files containing the operating systems are saved on disk in USER 0.
When executed, this loader shows a menu looking like this:


Of these options, BASIC with SCAMP printer (COBRA.SCP) and BASIC with ROBOTRON printer (COBRA.ROB) seem to be another variations of the BASIC version described in the CoBra BASIC manual. I will reproduce below a snapshot of the start screen of each of these variations as well as download links for the binary image (programmable in a ROM) and for the CP/M executable:

BASIC with SCAMP printer support (COBRA.SCP)

(Binary image) (CP/M executable)

BASIC with ROBOTRON printer support (COBRA.ROB)

(Binary image) (CP/M Executable)



So it looks like the variation with ROBOTRON routine would be newer than the one with SCAMP routine. Both have also the monitor command implemented, using which, according to Vasile Prodan, the CP/M BDOS was loaded for the first time when the CoBra version of CP/M was written.

Next, a very short demo of the COPY command for the BASIC version in the COBRA.SCP file. I suspect the implementation of COPY for this version was designed for SCAMP printers of foreign origin, because in the demo below a higher baud rate can be seen for the data sent to the printer - compared to the BASIC version in the ZX.COM file (and the printing time is also much shorter).

The COPY command in CoBra BASIC (COBRA.SCP) - a short demo

1:

The start screen of this version.

2:

I typed the COPY command.

3:

After an ENTER the command starts executing (takes about 3 minutes !)...

4:

...then the execution stops with the normal termination message.


Next, a final demo of the COPY command, for the BASIC version in the COBRA.ROB file. The printer for which the printing routine in this version was designed has a much greater speed than the previous two versions (and the printing time is much shorter).

The COPY command in CoBra BASIC (COBRA.ROB) - a short demo

1:

The start screen of this version.

2:

I typed the COPY command.

3:

After an ENTER the command starts executing, and is very fast (takes about 20 seconds !)...

4:

...then the execution stops with the normal termination message.


Next, I will show a little illustrated demo of the MON command in BASIC CoBra (the behaviour is identical in all 3 BASIC versions described above - ZX.COM, COBRA.SCP, COBRA.ROB), :

The MON command in CoBra BASIC - a short demo

1:

For start I will get rid of the white background (white screens annoy me). I enter BORDER 1 to get a blue border..

2:

After an ENTER, the BORDER becomes blue.

3:

Next I enter PAPER 0 for a black SCREEN.

4:

After an ENTER, the command is successfully executed....

5:

...but another ENTER is still needed for an actual color change of PAPER.

6:

Next I type the CAT command (New Mode, SS+9), resulting in the MON keyword being displayed in the command line.

7:

After an ENTER, the MON keyword scrolls up one row and then the program waits for the input of one of the commands recognized by the monitor. The commands are entered without spaces and without pressing ENTER.

8:

For start I type the substitution command S 5A00: I type "S5A00". Immediately, the screen scrolls up one row and the address $5A00 is displayed along with its contents, then the program waits for the input of a new value.

9:

I enter "1B" as a new value, and since $5A00 is the address of the first color attribute in the lower third of the screen, the outcome becomes visible after which the screen again scrolls up one row.

10:

The address of the next location is displayed ($5A01) along with its current value, then the program waits for the input of a new value for this location. Instead of this, in order to test the command syntax previously described, I press SPACE: the screen is again scrolled up and the previous location ($5A00) is displayed.

11:

In order to test the command syntax again, this time I press ENTER and the next location ($5A01) is displayed.

12:

I press Q in order to terminate the substitution command and the screen is crolled up one row, the MON prompter is displayed and the program waits for the input of a new command.

13:

Next, I test the memory block move command: I type "M03AC03CB5880" (no spaces), the command is displayed on screen WITH spaces and the outcome is the copying of the 32 bytes starting at $03AC to the 5th row of color attributes in the upper third of the screen. Then the command terminates and the screen is again scrolled up, the MON prompter is again displayed and the program waits for the input of a new command.

14:

Next, I test the memory fill command: I type "F580003000038", the command is displayed on screen WITH spaces and the (visible) outcome is the filling of the color attributes for the whole screen with a value corresponding to PAPER=7, INK=0. Then the command terminates and the screen is again scrolled up one row, the MON prompter is displayed and the program waits for the input of a new command.

15:

I test the same command again, using a value for PAPER=0, INK=7. I enter "F580003000007". The screen changes accordingly and then is again scrolled up one row.

16:

Next, I test the memory display command and I enter "D3300". Right after entering the last 0, the command is executed and 128 bytes are displayed starting from address $3300

17:

In order to test the command syntax, I press SPACE. This results in displaying the contents of the previous 128 memory locations ($3280-32FF).

18:

In order to test the command syntax again, this time I press ENTER and the next page is displayed ($3300-$337F).

19:

To terminate the command, I press Q and the screen is again scrolled up one row, the MON prompter is displayed and the program waits for the input of a new command.

20:

Next I test the CPU Register display command. I press R and the contents of the registers is displayed.

21:

Finally, I press B in order to exit from the monitor back in BASIC. A "B" is displayed on the screen...

22:

...then the screen is erased and we get back to the usual BASIC prompt.


Another BASIC version - BASIC with 64 text columns


Aside from these versions, on the UTILS2 disk in the 3 ½" archive there is also a CP/M executable named BASIC64.COM which, upon a closer look, turns out to be another BASIC "species", that is one with 64 text columns instead of the standard 32. I reproduce below the start message displayed by the CP/M executable (in some analphabetic Engrish...) as well as a download link for the binary image writable in a ROM memory

BASIC with 64 text columns - start message in CP/M (Binary image)



I did a little test run, in order to see the actual display features of this version. I loaded the first block in the Tasword 2+ utility, which is a program block, then I pressed SPACE in order to stop the loading and I displayed the first screen of program listing. The result can be seen below:

BASIC with 64 text columns - Test run

1:

The start screen of this BASIC version, bearing the PHOENSOFT signature.

2:

After an ENTER, the start message is erased and the K prompt shows up, but in this BASIC version it doesn't blink anymore, unlike the standard BASIC.

3:

I type the tape loading command.

4:

After an ENTER, loading starts and the information in the header of the first block is displayed: program "TASWORD 2+".

5:

After the program block is loaded, I press SPACE to stop the loading. The standard message for loading break is displayed.

6:

After an ENTER, the beginning of the program listing is displayed. With 64 text columns on screen, the amount of text displayed is about two times bigger...