Template:Confused {{#invoke:Infobox|infobox}}Template:Template other{{#invoke:Check for unknown parameters | check | showblankpositional=1 | unknown = Template:Main other | preview = Page using Template:Infobox software with unknown parameter "_VALUE_"|ignoreblank=y | AsOf | author | background | bodystyle | caption | collapsetext | collapsible | developer | discontinued | engine | engines | genre | included with | language | language count | language footnote | latest preview date | latest preview version | latest release date | latest release version | latest_preview_date | latest_preview_version | latest_release_date | latest_release_version | licence | license | logo | logo alt | logo caption | logo upright | logo size | logo title | logo_alt | logo_caption | logo_upright | logo_size | logo_title | middleware | module | name | operating system | operating_system | other_names | platform | programming language | programming_language | released | replaced_by | replaces | repo | screenshot | screenshot alt | screenshot upright | screenshot size | screenshot title | screenshot_alt | screenshot_upright | screenshot_size | screenshot_title | service_name | size | standard | title | ver layout | website | qid }}Template:Main other 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 Hello world program is 360 bytes.<ref name=computereview126 />
ASIC has little or no support for logical operators, control structures,<ref>In ASIC 3.01 (1991), the manual lists FOR...NEXT, WHILE...WEND and IF...ENDIF, but no switch statements, and no functions or procedures with parameters or local variables, only GOSUB for subroutines. The example programs use Goto instead of WHILE.</ref> and floating-point arithmetic. These shortcomings resulted in the tongue-in-cheek motto, "ASIC: It's almost BASIC!"<ref>ASIC is the work of David Visti and his compiler takes code that is "almost BASIC" and compiles it down to a very small executable. Template:Webarchive, Programmer's Corner: TIPI: A Small Programming Language for Small Comp, By Kent Peterson</ref><ref name=computereview126>ASIC, Area code magic with AC Hunter (computer program) (On Disk) (evaluation), by George Campbell, COMPUTE! ISSUE 126 / FEBRUARY 1991 / PAGE 86</ref>
FeaturesEdit
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 elementsEdit
Neither indetifiers, nor keywords are case-sensitive.
Any DIM
statements, if specified, must precede all other statements except REM
statements or blank lines.
All DATA
statements must be placed at the beginning of the program, before all other statement types, except DIM
, REM
statements, or blank lines).
ExpressionsEdit
ASIC does not have the exponentiation operator ^
.
ASIC does not have boolean operators (AND
, OR
, NOT
etc.).
ArraysEdit
The size of array specified in the DIM
statement must be a literal constant. A single DIM
allows to declare only one array.
Input and outputEdit
PRINT
's arguments must be a literal or variable. PRINT
does not allow to use combined expressions as its arguments, nor does it allow to use strings concatenated with ;
or +
.
If a PRINT
command ends with ;
or ,
, then the next PRINT
command will resume in the position where this one left off, just as though its argument were appended to the argument of the current PRINT
command.
The PRINT
statement prints integer values six characters wide. They are aligned to the right (no trailing spaces).
LOCATE row, column
- Moves the text cursor to the position (
column
,row
), where 0 ≤column
and 0 ≤row
. The position (0, 0) is the upper left corner.
GraphicsEdit
PSET (row,column),color
- Turns on the pixel of the color
color
at position (column
,row
), where 0 ≤column
and 0 ≤row
. The position (0, 0) is the upper left corner.
Control StructuresEdit
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 X = 2
, not 2 = X
).
DecisionsEdit
After THEN
, there may be a sequence of statements delimited by ELSE
or ENDIF
. An example:
<syntaxhighlight lang="basic">
IF X < 0 THEN
PRINT "Negative"
ELSE
PRINT "Non-negative"
ENDIF
</syntaxhighlight>
Contrary to other BASICs, statements cannot be put between THEN
and the end of the line.
An if-statement can realize the conditional jump. In this case, after THEN
there may be a label.
LoopingEdit
In FOR
, after TO
there may be only a number - literal or variable - but not a combined expression. The STEP
clause does not exist in ASIC.
BranchingEdit
In a GOTO
statement, the label must be followed by a colon.
SubroutinesEdit
In a GOSUB
statement, the label must be followed by a colon.
BAS2ASIEdit
This utility, serving to convert GW-BASIC programs to ASIC syntax, in the version 5.0 does not support some GW-BASIC features. Examples:
STEP
in the for loop is not converted. The program
<syntaxhighlight lang="basic">
10 FOR i=10 TO 1 STEP -1
20 PRINT i
30 NEXT i
</syntaxhighlight>
is converted into
<syntaxhighlight lang="QBasic">
REM 10 FOR i=10 TO 1 STEP -1
FOR I@ = 10 TO 1
ASIC0@ = -1 -1
I@ = I@ + ASIC0@
REM 20 PRINT i PRINT I@
REM 30 NEXT i REM 30 NEXT i 3: Syntax error </syntaxhighlight>
The exponentiation operator ^
is not converted. The program
<syntaxhighlight lang="basic">
10 a=2
20 b=a^10
30 PRINT b
</syntaxhighlight>
is converted into
<syntaxhighlight lang="QBasic">
REM 10 a=2
L10:
A@ = 2
REM 20 b=a^10 2: Syntax error
REM 30 PRINT b REM 30 PRINT b 3: Syntax error </syntaxhighlight>
ReferencesEdit
External linksEdit
- ASIC 5.00 + Libraries + Linker
- Category:ASIC Tasks implemented in ASIC on rosettacode.org