my-server
← Wiki

ASIC programming language

ASIC is a compiler and integrated development environment for a subset of the BASIC programming language. It was released for MS-DOS and compatible systems as shareware. Written by Dave Visti of 80/20 Software, it was one of the few BASIC compilers legally available for download from BBSes. ASIC allows compiling to an EXE or COM file. A COM file for the Hello world program is 360 bytes.

ASIC has little or no support for logical operators, control structures, and floating-point arithmetic. These shortcomings resulted in the tongue-in-cheek motto, "ASIC: It's almost BASIC!"

Features

ASIC is strongly impoverished in comparison with its contemporary BASICs. The features of ASIC are selected to make a program be easily and directly compiled into machine language. Thus, many language constructs of ASIC are equivalent to constructs of assembly language.

Program elements

Neither identifiers nor keywords are case-sensitive.

Any <code>DIM</code> statements, if specified, must precede all other statements except <code>REM</code> statements or blank lines.

All <code>DATA</code> statements must be placed at the beginning of the program, before all other statement types, except <code>DIM</code>, <code>REM</code> statements, or blank lines.

Expressions

ASIC does not have the exponentiation operator <code>^</code>.

ASIC does not have boolean operators (<code>AND</code>, <code>OR</code>, <code>NOT</code> etc.).

Arrays

The size of array specified in the <code>DIM</code> statement must be a literal constant. A single <code>DIM</code> allows declaring only one array.

Input and output

<code>PRINT</code>'s arguments must be a literal or variable. <code>PRINT</code> does not allow combined expressions as its arguments, nor strings concatenated with <code>;</code> or <code>+</code>.

If a <code>PRINT</code> command ends with <code>;</code> or <code>,</code>, then the next <code>PRINT</code> command will resume in the position where this one left off, just as though its argument were appended to the argument of the current <code>PRINT</code> command.

The <code>PRINT</code> statement prints integer values six characters wide. They are aligned to the right (no trailing spaces).

<code>LOCATE row, column </code> : Moves the text cursor to the position (<code>column</code>, <code>row</code>), where 0 ≤ <code>column</code> and 0 ≤ <code>row</code>. The position (0, 0) is the upper left corner.

Graphics

<code>PSET (row,column),color</code> : Turns on the pixel of the color <code>color</code> at position (<code>column</code>, <code>row</code>), where 0 ≤<code>column</code> and 0 ≤ <code>row</code>. The position (0, 0) is the upper left corner.

Control Structures

A boolean condition may be only a comparison of numbers or strings, but not a comparison of combined expressions. A literal cannot be the left operand of comparison (e.g. can be <code>X = 2</code>, not <code>2 = X</code>).

Decisions

After <code>THEN</code>, there may be a sequence of statements delimited by <code>ELSE</code> or <code>ENDIF</code>. An example:

Contrary to other BASICs, statements cannot be put between <code>THEN</code> and the end of the line.

An if-statement can realize the conditional jump. In this case, after <code>THEN</code> there may be a label.

Looping

In <code>FOR</code>, after <code>TO</code> there may be only a number - literal or variable - but not a combined expression. The <code>STEP</code> clause does not exist in ASIC.

Branching

In a <code>GOTO</code> statement, the label must be followed by a colon.

Subroutines

In a <code>GOSUB</code> statement, the label must be followed by a colon.

BAS2ASI

This utility, serving to convert GW-BASIC programs to ASIC syntax, in the version 5.0 does not support some GW-BASIC features. Examples:

<code>STEP</code> in the for loop is not converted. The program

is converted into

The exponentiation operator <code>^</code> is not converted. The program

is converted into

References

External links