CBASIC on 68k-mbc, V20-mbc and Z80-mbc2
by coopzone in Circuits > Computers
159 Views, 0 Favorites, 0 Comments
CBASIC on 68k-mbc, V20-mbc and Z80-mbc2
This instructable gives an outline of how-to compile a CBASIC program, in this case a simple DISKIO test program. On any of the mbc based SBC computers.
Details for the versions of CBASIC for the three SBC's are in the Supplies Section.
The Demo I will use is DISKIO.BAS. It creates a file TEST.DAT on each of the virtual disks A-P, fills the file with a message, then deletes the file and moves on to the next disk. It does this until any key is pressed on the terminal or a maximum of 200 times. The idea being to test the SD-Card you are using, since some SD cards can be unreliable. This normally highlights them with a disk io error. If all is well you will not get any errors. (200 times is a bit much I normally terminate it after 10-20 runs through or overnight)
Supplies
All of the versions of CBASIC for CP/M-80, CP/M-68 and CP/M-86 have been uploaded to GITHUB as either a zip file or individual files. You can find them here:
https://github.com/coopzone-dc/cbasic
If you prefer you can also find all the files around the WEB. The only file you need in addition (and you can just type it in if you like) is the DISKIO.BAS source file.
You will need a working cpmtools setup on either linux of windows, some people like to use cpmtools GUI. I assume you have a working setup of this if not see:
Cpmtools GUI version (from http://star.gmobb.jp/koji/cgi/wiki.cgi?page=Cpmtoo... ) use google translate the original is in Japanese - unless you are skilled enough to read it. I found that windows complained about the binary file not being signed and blocked it on the first run. You need to decide if you trust the author and the program before you use it! I did, but i'm only working on a VM. It did work ok, but these instructions are based on the non-gui version.
The non-gui version, if you prefer. (I have based the instructions on this version. From http://www.cpm8680.com/cpmtools/cpmtoolsWin32.zip
You will also need a copy of the diskdefs file for your system, from the cpmtools directory on the SD-Card.
Setup Cpmtools
Use the links in the "supplies" page to get a copy of cpmtools
You may want to read through https://www.instructables.com/Z80-mbc2-Virtual-Disks-Copying-Files/ to explain in more detail about the disk images and copying files to them.
Windows
I recommend using a directory in the root of your C: disk for example C:\cpmtools
Unzip your downloaded files to a temporary directory by right-clicking on the filename and choosing extract all. Choose a path for your extracted files.
Copy the following files to your working directory:
cpmcp.exe
cpmls.exe
Copy the diskdef file to the working directory, form the SD-CARD /cpmtools/ directory.
Linux
Install the cpmtools package for your version of linux (for debian/ubuntu versions it's 'apt-get install cpmtools')
Replace the diskdef file (normally in /etc/cpmtools) with the one from the SD-CARD /cpmtools/ directory.
Done
Copy the CBASIC Files to the SD-CARD
The SBC computers use virtual disk files to represent disk drives in CP/M. You can find a description of this works here https://www.instructables.com/Z80-mbc2-Virtual-Disks-Copying-Files/ I am only going to list the steps needed to copy the files from the CBASIC zip files on the github site (supplies section).
Note:
The v20-mbc already has a copy of CBASIC on the SD-CARD, in the image DS1N04.DSK this loads as disk E under cpm.
The 68k-mbc already has a copy of CBASIC on the SD-CARD, in the image DS0N01.DSK this loads as disk B under cpm.
If you used these copy's of CBASIC you only need to copy the DISKIO.BAS file (or cut/past it into a file on the respective disk above).
Steps to copy to Drive G:
1, Download and unzip to a temporary directory the version of CBASIC for your MBC board.(see Github)
cb80.zip - z80-mbc2
cb86.zip - v20-mbc
cb68.zip - 68k-mbc
2, Put your SD-CARD into your computer, note where it is mounted (linux and windows will auto mount it, windows gives it a drive letter linux gives it a path)
3, Copy to the correct disk image (assuming you are in the directory you just unzipped the files to, the path of drive letter are the ones given by windows/linux when you inserted your SD-CARD)
for 68k-mbc
cpmcp -f 68kMBC-D0-15 [path or drive letter]/DS0N06.DSK *.* 0:
for v20-mbc
cpmcp -f V20MBC-D1-15 [path or drive letter]/DS1N06.DSK *.* 0:
for z80-mbc2 (assuming cp/m 3)
cpmcp -f z80mbc2-cpm3 [path or drive letter]/DS2N06.DSK *.* 0:
When done, eject or umount the SD-CARD , use it to boot your MBC and check the content of drive G.
The Test Program
This is the test program, if all went well it should be on your drive G (or if B or D if you choose to use the already installed versions of CBASIC). It's pretty simple. The only thing that is unusual really is the lack of line numbers on each line. When yo remember back to BASIC programs most people recall each line started with a line number. In CBASIC you only need line numbers if yo intend to refer to it from a goto or gosub etc.
for l%=1 to 200 print "LOOP:"; L% for D%=0 to 15 F$=CHR$(65+D%)+":TEST.DAT" print "FILE: "; f$ create F$ as 1 for f%=1 to 4096 print #1; "This is a large file for testing purposes - delete it 01234561234" if CONSTAT% <> 0 then goto 999 print using "###### !"; f%,chr$(13); next f% delete 1 next D% next L% 999 rem l%=CONCHAR% print "Exit program" delete 1 end
The program consists of 3 loops using variables f%, D% and I%. The exit condition is detected by the special variable CONSTAT% and the code from line 999 onwards cleans up and exits the program. I have also included copied of the CBASIC manuals on the github site. They are all slightly different versions but the core of CBASIC is the same on all MBC's.
Compile the Program
The process of compiling is very simple, unless you intend to write a major project in CBASIC it's possible to compile the code into an object file using the command:
for z80-mbc2
cb80 diskio.bas
for v20-mbc
cb86 diskio.bas
for 68k-mbc
cb68 diskio.bas
When you run your compiler command it will output the following (or similar), any error should be corrected if you manually entered the code it's most likely going to be syntax related.
Sample output from z80 version:
G>cb80 diskio.bas ------------------------------------------------- CBASIC Compiler CB-80 21 May 83 Version 2.0 Serial No. ACB-0000-000072 All rights reserved Copyright (c) 1982, 1983 Digital Research, Inc. ------------------------------------------------- end of pass 1 end of pass 2 1: 008bh for l%=1 to 200 2: 0094h print "LOOP:"; L% 3: 00a0h for D%=0 to 15 4: 00a9h F$=CHR$(65+D%)+":TEST.DAT" 5: 00c0h print "FILE: "; f$ 6: 00cch create F$ as 1 7: 00e0h for f%=1 to 4096 8: 00e9h print #1; "This is a large file for testing purposes - delete >it 01234561234" 9: 00f5h if CONSTAT% <> 0 then goto 999 10: 0100h print using "###### !"; f%,chr$(13); 11: 0118h next f% 12: 0126h delete 1 13: 012ch next D% 14: 013ah next L% 15: 0148h 16: 0148h 999 rem 17: 0148h l%=CONCHAR% 18: 014eh print "Exit program" 19: 0154h delete 1 20: 0160h end end of compilation no errors detected code area size: 352 0160h data area size: 8 0008h common area size: 0 0000h symbol table space remaining: 30685
Linking the Program
There are some differences in the linker usage for the different systems. I think this is because over the years people have added/substituted the original versions with later ones. So on some systems the linker has been copied from other packages and does not have the defaults set for CBASIC. On others there are at least two linkers in the directory, but only one works!. So look closely at the command that matches your system.
To link your object file and produce an executable you need to run the following command:
For z80-mbc2
lk80 diskio=diskio,cb80.irl -------------------------------------------------- LK80 Linker 15 Apr 1983 Version 2.0 Serial No. ACB-0000-000072 All rights reserved Copyright (c) 1982,1983 Digital Research, Inc. -------------------------------------------------- code size: 2680 (0100-277F) common size: 0000 data size: 024F (2780-29CE) symbol table space remaining: B116<br>
Note: for the z80 you don't need to specify the .com extension for the linker.
For 68k-mbc
link68 diskio.68k=diskio,cb68.l68 -------------------------------------------------- LINK68 Overlay Linker Release 0.f Serial No. XXXX-0000 All Rights Reserved Copyright (c) 1983 Digital Research, Inc. -------------------------------------------------- diskio.68k=diskio,cb68.l68 <br>
Note: on the 68k version, you don't get as much information as the others.
For v20-mbc
link86 diskio -------------------------------------------------- LINK-86 Linkage Editor Version 1.2 Serial No. 3152-0598-000051 All Rights Reserved Copyright (C) 1982,1983 Digital Research, Inc. -------------------------------------------------- CODE 026C8 DATA 00423 USE FACTOR: 07%
Note: with the v20 version you don't specify the library to link.
Running the Program
This is the easy bit!
To run your compiled program, just type it's name:
E>diskio LOOP: 1 FILE: A:TEST.DAT Exit program<br>
And away you go. Exit with any key.
Have fun!