Pascal

From Ninerpedia
Revision as of 12:35, 19 October 2014 by Stephen Shaw (talk | contribs) (→‎Sample Turbo Pasc '99 code: add example of writing to disk with Turbo Pasc '99)
Jump to navigation Jump to search

UCSD Pascal System

P-Code welcome screen, booted with Editor/Filer disk

File doesn't exist

PASCAL NOTE: Guy Stefan-Romano, 99ers Users Group. Sept 1984:

'FILE DOESN'T EXIST" after adding a UNIT to SYSTEM.LIBRARY:

In most USCD Pascals. the system is not provided with a SYSTEM.LIBRARY. TI placed parts of Pascal that would normally reside on disk/ram into chips on the card, to allow our tiny machine to run Pascal. TI also provided a SYSTEM.LIBRARY to allow use of sound, graphics. speech etc.

Because installation of a new UNIT into a SYSTEM.LIBRARY requires that a file be open while data is manipulated, the existing SYSTEM.LIBRARY data is quite vulnerable. TI added protection.

You need to call a temporary File -say USER.LIB. transfer all UNITS in SYSTEM.LIBRARY to USER.LIB, then add your new UNITS to USER.LIB and IF all goes well, rename the USER.LIB file SYSTEM.LIBRARY


What is P-Code?

P-Code can be thought of as a universal assembly type language. P-Code was developed to be transportable to different platforms for execution. The TI-99/4A supports P-Code with the use of the P-Code card. Some other platforms that support P-Code are: Z80, Motorola 6800/68000, Intel 8086/8088 and many others.

A sample of USCD Pascal coding

This program will backup any disk using sector I/O; both 1 and multiple drives and single/double sided. Written in UCSD Pascal for the TI 99/4A.

{$L PRINTER: } 
program fastback; 
buffer:array[1..5120] of integer; 
inunit,outunit:integer; 
blkbase,blklimit:integer; 
ch:string[9]; 
procedure getfrom; 
begin 
inunit:=0; 
while (inunit,.4) and (inunit,.<>5) 
and (inunit<>9) do 
begin 
write('Enter Source Drive # (4,5,9) '?');
readln(inunit) 
end; 
blkbase:=0; 
while (blkbase<>180) and 
(blkbase <> 360) do 
begin 
write('# blocks to copy (180/360) ?') 
readln(blkbase) 
end; 
blklimit:=(blkbase div 10) - 1; 
end; 
procedure getto; 
begin 
outunit:=0; 
while (outunit<>4) and 
(outunit<>5) and (outunit<>9) do 
begin 
write('Enter Copy Drive # (4,5,9) ?'); 
readln(outunit) 
end
end; 
beqin 
writeln('FASTBACK [V1,0]'); 
qetfrom; 
getto; 
writeln('insert disks-- to start'); 
readln(ch); 
for blkbase:=0 to blklimit do 
begin 
if inunit=outunit then 
beqin 
write( ' Insert MASTER disk--press 
  when ready'); 
readln(ch) 
end;
unitread(inunit,buffer,5120,blkbase*10); 
if inunit=outunit then 
begin 
write('Insert COPY disk--Press 
  when ready'); 
readln(ch) 
end;
unitwrite(outunit,buffer,5120,blkbase*10) 
end; 
write1('Copy Complete.') 
end.


Turbo Pasc'99

Turbo Pasc '99 originated in Germany and initial release to the English world was a German version.

The specific origin is murky and anyone with knowledge is asked to edit this article please.

This language is not to be confused with that other Turbo Pascal from Borland. This is closer to ISO Pascal.

Comparison with ISO Pascal

ISO Pasca1 items NOT supported are:

file, in, packed, record, set, type, with, char, ord, pred, round, sqr, succ, trunc,odd, reset, rewrite, dispose, new, pack, unpack.

Items included but not in ISO PASCAL (some replacing items above):

Block, Module, Relative, Stream, String, Open, Seek, Append, Close, Asc, Cursor, Key, Screen, minint, pi, graphics, text, putln, cls, cir, cis, cri, crs, csi, csr, len, int, rnd, seg, tan, randomize.

Variations on ISO Pascal are:

Strings are within double quotes "string" instead of 'string'

REAL must be specified as 4, 6 or 8 bytes- if you select 8 you have normal Ex Bas, precision.

Samples Turbo Pasc '99 code

Integer Math loop

PROGRAM intmath; 
   VAR t, 
   i,x,y : INTEGER; 
     BEGIN 
     writeln("........."); 
     t  :=  0;
       FOR  t   :=  1 TO 100 DO 
       BEGIN 
       x  :=  0;
       y  :=  9;
       writeln("start"); 
           FOR i  := 1 TO  1000 DO 
           BEGIN 
           x  :=  x  +  (y * y - y)  DIV  y; 
           END; 
       END;
     writeln("---",x);
     END. 

Writing to disk

PROGRAM store; 
VAR   i   :  INTEGER; 
      f   :  STREAM[80];
BEGIN 
   writeln("START"); 
   open(f,"DSK2.TEXT",output); 
       FOR i  :=  1  TO  1000 
       putln(f,"1234567890qwertyuiop"); 
       close(f); 
       writeln("*****");
END.