Changes

Jump to: navigation, search

Locomotive BASIC

5,910 bytes added, 20:58, 25 November 2022
/* CHR$ () */
==== <code>LOAD ‹file name›[,‹address›] </code>====
: [With this directive you may load any file in memory Basic files (extension .BAS) are loaded in Basic memory, you cannot choose loading address Binary files are loaded to the default address location stored in the AMSDOS header but you may force loading address (&C000 for a screen) TAPE convention: When loading tape files, the basic display a message every block which may cause trouble.Message output may be disabled by using prefix "!" before the filename.] It's also possible to load the next file disregarding his name using only "!" => <code>LOAD "!"</code>
==== <code>LOCATE[#‹stream expression›][,] x,y</code> ====
</pre>
:'''P:''' the period number can be a figure between 0 and 4095 (2^12-1... 12 means that we have 12 tones (inclusive half-tones) in nine octaves on the CPC in sum and their distance between is the twelves square root of two), where 8 octaves are available. E.g. Octave 0 starts on middle C with number 478.
: To calculate the period you can use following formula: '''period=1,000,000/(16*frequency)''' or in short '''period=(6562,000500/frequency)'''
: (e.g. the note "A" with the frequency 440 Hz has the period 142 on the CPC)
</pre>
==== <code>SPEED INK <n1,n2> </code> ====: ...in conjunction with the SPEED INK command SPEED defines the frequency of colour changes if a colour change was defined. The duration is calculated by n1=... or n2 =duration/50 seconds. ==== <code>SPEED KEY <start,repeat> </code> ====: SPEED KEY command defines the delay after which a key repeat (for keys that do repeat). The first parameter is the delay before the first repeat and the second parameter is the delay between further repeats. Delay is in 1/50th of seconds. :When using it with low values, it is common to associate a key to reset the default speed of 30,2.:For example to associate the key 0 from the numpad:<pre>KEY 0,"SPEED KEY 30,2"+CHR$(13)</pre> ==== <code>SPEED WRITE <n> </code> ====: SPEED WRITE defines the speed at which data is to be saved or written to a cassette unit. n=1 means 2000 baud, n=0 (default) means 1000 baud. When reading from the tape, the correct speed is automatically selected.
==== <code>SQ (channel)</code> ====
: Beware: it only works here with BIT/number conditions one figure smaller than 1, 3, 7, 15, 31, 63 and 127
==== <code>MOD</code> ====
: ['''MOD''' returns a (rounded) rest (Modulos) after dividen has been devided by the devisor...]::'''Example:'''<pre>32767 mod 256255</pre>: Note: only works with numbers in the range -32768 and 32767 (&8000 < 0 < &7FFF)
==== <code>NOT</code> ====
| 1 | &01 | SOH | 0-255 | PRINTS CHARACTER TO SCREEN |
| 2 | &02 | STX | NONE | TURNS TEXT CURSOR OFF |
| 3 | &03 | ETX | NONE | TURNS TEXT CURSOR ON IN IMMEDIATE || | | | | MODE |
| 4 | &04 | EOT | 0-2 | SET SCREEN MODE |
| 5 | &05 | ENQ | 0-255 | PRINT CHARACTER AT GRAPHICS CURS. |
| 17 | 145 (128+17) | File already exists. |
| 18 | 146 (128+18) | File does not exists. |
| 19 | 147 (128+19) | Direcotry Directory is full. |
| 20 | 148 (128+20) | Disc is full. |
| 21 | 149 (128+21) | Disc changed while file were open. |
3
</pre>
==== <code><big>STR$(n<numeric expression>)</big></code> ====: ''BASIC 1.0 & 1.1'': Returns '''FUNCTION''': Converts the string <numeric expression> to a decimal STRing representation of number n.
: Useful for converting a number to a string in case of string manipulation. E.g. after converting a figure to a string then the most left character holds the sign: a minus in case the figure is negative and a space in case the figure is positiv.
 : '''Associated keywords''': BIN$, DEC$, HEX$, VAL : '''1. Example''':
<pre>
10 FIGURE=-1599
30 PRINT FIGURE$
-1599
</pre>: '''2. Example''':<pre>
10 FIGURE=1769
20 FIGURE$=STR$(FIGURE)
1769
</pre>
: '''NOTE''': (there's a blank on the left-hand of the number "1769")
: If you want to add e.g. zero before the figure in case of a high score with fix digit-number then you're able to add zero(s) in front of a string instead of a figure.
: '''3. Example''':<pre>10 a=&FF:REM 255 hex20 b=&x1111:REM 15 binary30 c$="***"40 PRINT c$+SR$(a+b)+c$run*** 270***</pre>==== <code><big>STRING$(<length>,<character specifier>)</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Returns a string expression consisting of the <character specifier> repeated the number of time (in the range 0 to 255) specified in the <length>.
: Returns i copies of the string character specified by s.'''Associated keywords''': SPACE$
: '''1. Example''':<pre>PRINT STRING$(40,"*")****************************************</pre>: '''2. Example''':<pre>PRINT STRING(40,42)****************************************</pre>: '''NOTE''': the <character specifier> 42 refers to the ASCII value of the character '*' and is also equivalent to PRINT STRING$(40,CHR$(42))==== <code><big>TAN (<numeric expression>)</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Calculates the TANgent of the <numeric expression>, which must be in the range -200,000 to +200,000.: '''NOTE''': DEG and RAD can be used to force the result of the calculation to degrees or radians respectively.
: '''Associated keywords''': ATN, COS, DEG, RAD, SIN
 
: '''Example''':
<pre>
PRINT STRING$TAN(3,"*"45) - prints *** 1.61977519
</pre>
==== <code>TAN <big>TEST (n<x co-ordinate>,<y co-ordinate>)</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Moves the graphics cursor to the absolute position specified by the <x> and <y co-ordinate>s, and reports the value of the ink at the new location.
: Returns the tangent of n. The DEG and RAD commands can be used to force the result to either mode.'''Associated keywords''': MOVE, MOVER, TESTR, XPOS, YPOS
: '''Example''':<pre>10 CLS20 PRINT "Your are using pen number";30 PRINT TEST(10,386)40 PRINT "Try changing PENs and MODEs";50 PRINT "....then RUN again."run</pre>==== <code>TEST <big>TESTR (<xoffset>,<yoffset>)</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Moves the graphics cursor by the amount specified in the <x> and <y offset>s relative to its current position, and reports the value of the ink at the new location.
: Moves the graphics cursor by x and y and returns the value of the ink at that position.'''Associated keywords''': MOVE, MOVER, TEST, XPOS, YPOS
: '''Example''':<pre>10 MODE 0:FOR x=1 TO 15:LOCATE 1,x20 PEN x:PRINT STRING$(10,143);:NEXT30 MOVE 200,400:PEN 140 FOR n=1 TO 23:LOCATE 12,n50 PRINT "pen";TESTR(0,-16):NEXTrun</pre>==== <code>TESTR (x,y)<big>TIME</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Reports the elapsed time since the computer was last switched-on or reset, (excluding periods when reading or writing to disc).: Each second of real time is equal to the returned value = TIME/300.
: Moves the graphics cursor by x and y relative to its current position and returns the value of ink at that position.'''Associated keyword''': AFTER, EVERY, WEND, WHILE
: '''Example''':<pre>10 CLS:REM clock20 INPUT "hour";hour30 INPUT "minute";minute40 INPUT "second";second50 CLS:datum=INT(TIME/300)60 WHILE hour<1370 WHILE minute<6080 WHILE tick<6090 tick=(INT(TIME/300)-datum)+second100 LOCATE 1,1110 PRINT USING "## ";hour,minute,tick120 WEND130 tick=0:second=0:minute=minute+1140 GOTO 50150 WEND160 minute=0:hour=hour+1170 WEND180 hour=1190 GOTO 60run</pre>==== <code>TIME<big>UNT (<address expression>)</big></code> ====: Returns time elapsed since the computer was switched on or reset''BASIC 1.0 & 1.1'': One second = TIME/300'''FUNCTION''': Return an integer in the range -32768 to +32767 which is the twos-complement equivalent of the unsigned value of the <address expression>.
==== <code>UNT (add)</code> ====: '''Associated keywords''': CINT, FIX, INT, ROUND
: Returns an integer'''Example''':<pre>PRINT UNT(&FF66)-32768 to 32767154</pre>==== <code><big>UPPER$(<string expression>) </big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Returns a new string expression which is the two's complement a copy of addthe specified <string expression> but in which all alphabetic characters in the range A to Z are converted to upper case. The function is useful for processing input which may come in mixed upper / lower case.
: Example'''Associated keywords''':LOWER$
: '''Example''':
<pre>
10 CLS: a$="my, how you've grown!"20 PRINT UNTUPPER$(&FF66a$) - prints -154run
</pre>
==== <code><big>VAL(<string expression>)</big></code> ====
: ''BASIC 1.0 & 1.1''
: '''FUNCTION''': Returns the numeric VALue, (including any negative sign and decimal point) of the first character(s) in the specified <string expression>.
:If the first character is not a number, then 0 is returned. If the first character is a negative sign or decimal point followed by non-numeric characters, a 'Type mismatch' error (13) will be reported.
==== <code>UPPER: '''Associated keywords''': STR$(se)</code> ====
: Gives copy of '''1. Example''':<pre>PRINT VAL("-12.34x"),VAL("A-12") -12.34 0</pre>: '''Exception''': if <se > starts with all alphabetic characters "&amp;" + character (and it's between "A" and "F") the whole character will be handled like a hexadezimal numeric character (...often used in upper caseDATA Loaders). The returning numeric value is a &nbsp;signed&nbsp;integer (16-Bit Word). : '''2.Example''':<pre>PRINT VAL("&amp;A") 10
==== <code>PRINT VAL(se"&amp;7FFF")</code> ====32767
:Returns the numeric value (including signs) of first numeric character(s) in se. Returns 0 if se starts with a non-number. :Example:<pre>PRINT VAL("-12.34x&amp;8000"),VAL("A-12") - prints -12.34 032768
</pre>
:Exception'''3. Example''': if <sepre> starts with 10 CLS: PRINT "&amp;I know my times tables!" + character (and it's between "A20 PRINT:PRINT " and "F") the whole character will be handled like Press a hexadezimal numeric character key (...often used in DATA Loaders1 to 9). The returning numeric value is "30 a &nbsp;signed&nbsp;integer $=INKEY$:IF a$="" THEN 3040 n=VAL(16-Bit Worda$). :if n<pre1 or n>9 then 3050 FOR x=1 to 1260 PRINT&nbspn;VAL("&ampX";x;A"=";n*x70 NEXT:GOTO 20run</pre>==== <code><big>VPOS (#<stream expression>) - returns a 10</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Reports the current vertical POSition of the text cursor relative to the top of the text window. The <stream expression> MUST be specified, and does NOT default to #0.
PRINT&nbsp;VAL("&amp;7FFF") - returns a 32767: '''Associated keywords''': POS, WINDOW
: '''Example''':<pre>10 MODE 1:BORDER 0:LOCATE 8,220 PRINT&nbsp"use cursor up/down keys"30 WINDOW 39,39,1,25:CURSOR 1,140 LOCATE 1,350 IF INKEY(0)<>-1 THEN PRINT CHR$(11);VAL60 IF INKEY(2)<>-1 THEN PRINT CHR$(10);70 LOCATE #1,3,2480 PRINT #1,"text cursor "&amp;800090 PRINT #1,"vertical position =";100 PRINT #1,VPOS(#0) - returns a -32768:GOTO 50run</pre>==== <code><big>XPOS</big></code> ====: ''BASIC 1.0 & 1.1'': '''FUNCTION''': Reports the current horizontal (X)POSition of the graphics cursor.
==== <code>VPOS (#st)</code> ====: Reports the current row (line) position of the text cursor relative to the top of the text windows of the specified stream.'''Associated keywords''': MOVE, MOVER, ORIGIN, YPOS
: '''Example''':<pre>10 MODE 1:DRAW 320,20020 PRINT "graphics cursor X position = ";30 PRINT XPOS</pre>==== <code>XPOS<big>YPOS</big></code> ====: Returns ''BASIC 1.0 & 1.1'': '''FUNCTION''': Reports the current horizontal vertical (xY) position POSition of the graphics graphic cursor.
==== : '''Associated keywords''': MOVE, MOVER, ORIGIN, XPOS : '''Example''':<codepre>YPOS</code> ====10 MODE 1: Returns the current vertical (y) position of the DRAW 320,20020 PRINT "graphics cursor.Y position = ";30 PRINT YPOS</pre>
== Other Basic Dialects available for the CPC ==
907
edits