Programmeren in Simon's BASIC Martin Eppink
• TT
ADDISON-WESLEY
Colofon:
Omslagontwerp: BSE, Al phen aan den Rijn Redact ie: TextCase, G ro n i ngen Prod u ktie: TextCase, G roningen Zetwerk: ReproForm, G roni ngen Druk: Kri ps, Meppel
't
"
, " "
, ,
l , " ..
, '
,
'
1 �� . \
,
,
l
,
.. ......��'..
Eppink, Martin
Program meren i n Simon's BASIC/Mart i n Eppink Amsterdam: Add ison-Wesley Europe b.v. I S B N 90.6789.057.X SISO 365.3 U DC 681 .3.06:800.92 Trefw.: Si mon's BAS I C (prog ram meertaal) © 1 986 Add i son-Wesley Europe b.v.
N iets u i t deze u itgave mag worden vermen igvuldigd of openbaar gemaakt door middel van d ru k, fotokopie, of o p welke andere wijze ook, zonder voor afgaande schriftel ijke toestem m i ng van de uitgever. Ondanks alle aan de samenstel l i n g van dit boek bestede zorg kan noch de redactie, noch de u itgever aansprakel ij kheid aanvaarden voor eventuele schade d ie zou kunnen voortvloeien u i t enige fout die in deze u itgave zou kun nen voorkomen. I S B N 90.6789.057.X
INLEIDING
De Com modore 64 besc h i kt i n zijn standaardconfiguratie over een BAS IC versie: BASIC V2. Deze i s ondergebracht i n de BASIC- i nterpreter-ROM, die de geheugen locaties 40960-491 51 ($AOOO- BFFF) i n beslag neemt. H et Commodore-BASIC kent 71 versc h i l lende i nstructies, toereikend voor een g root aantal toepassingen. Dit bl ijkt u it de hoeveelheid voor de Commodore 64 gepubl iceerde BASI C-prog ramma's. Een kritischer b l i k op deze program ma's leert ons echter dat eenvoud ige bewerki ngen vaak door i ngewi kkelde subrout i nes u itgevoerd worden omdat het Com modore-BASI C daartoe geen voorzien i ngen heeft. Bovendien komen we i n de program ma's nogal eens POKE-instructies tegen, met name daar waar gebru i k wordt gemaakt van geluid, sprites of g rafische funct ies met hoogoplossend vermogen . De ze i n structies vergen een behoorl ijke ken n i s van de diverse van belang zijn de geheugenplaatsen . Om dit al les te ondervangen heeft Com modore het programma Simon's BASIC op de markt gebracht. H et programma i s u itgevoerd als insteekmod ule (ROM-pack). H et Commodore-BASIC wordt door S i mon's BASIC u itgebreid met 1 1 7 i nstruc ti es, waarmee het totaal op 1 88 komt ! Analoog aan het spreekwoord ' Geen rozen zonder doornen' moet voor deze uitbreid i ng op twee zaken worden i n geleverd. I n de eerste plaats neemt het programma een deel van de BASI C geheugenru i mte i n beslag, waardoor de rui mte voor BASIC-prog ramma's gered uceerd wordt tot 307 1 9 bytes. Dit is echter voor de meeste program ma's ru i m voldoende. Op de tweede pl aats neemt de snelheid van de pro g ramma's af, omdat het i nterpreteren van de instructies meer tijd i n besl ag neemt. M aar be ide wegen nadelen n iet op tegen de kracht van Si mon's BASIC, het geen door het volgende voorbee ld wordt geïl l ustreerd. I n de 'Programmer's reference g u ide' staat een programma om een sin us-c urve te tekenen (blz. 93). Dit prog ramma neemt 252 bytes geheugen in besl ag en wordt uit gevoerd i n 1 minuut en 46 sec. H et S i mon's BASIC equ ivalent van dit pro g ramma neemt 1 03 bytes i n besl ag en wordt i n 32 seconden u itgevoerd. Nog g rotere versch i l len treden op bij verge l ij king van programma's die bij voorbeeld c i rkel s tekenen. Bij het schrijven van dit boek is ervan u itgegaan dat de gebru i ker enige ken nis bezit ten aanzien van het prog rammeren i n BASIC en vertrouwd is met de i nstallatie van de Simon's BASIC cart ridge. De i n structies zijn onderver deeld i n acht categorieën, en elke categorie wordt i n een apart hoofdstu k onder d e loep genomen. Aan het beg i n van e l k hoofdstuk treft u algemene i nformatie aan, die van belang is voor een goed gebru i k van de inst ructies. Na deze i n leiding wordt elke i nst ructie besch reven , gevolgd door een voor beeld. Dit zijn altijd op zi chzelf staande voorbeelden, tenzij i n de i n leiding anders wordt vermeld. Aan het e i nd van het boek zijn twee appendices op genomen: één met de foutmeldi ngen van Simon's BASIC en één met een aantal prog ramma's die de werki ng van de diverse i n structies nog eens ex tra ondersteunen. Moge dit boekwerk een nuttig h u l pm iddel en nasl agwerk zij n voor zowel de beg innende als de gevorderde gebru i ker van Simon's BASIC. 3
I N H O U DSOPGAVE
blz. 1 . G RAFISC H E I N STRUCTIES M ET H OOGO PLOSS E N D VERMOGEN 2. SCH ERM- EN STR I N G M AN I PU LATI ES 3. SPRITES 4. G E L U I D 5 . G ESTRUCTU REERD PROGRAM M E REN 6. PROGRAM M EERH U LPEN 7. REKEN KU N DI G E I N STRUCT I ES 8. IlO-I N STRUCT I ES 9. APPENDIX A - FOUTM ELD I N G EN 1 0. APPEN DIX B - VOORB EELDPROG RAM MA'S
7 23 33 43 51 61 77 83 91 93
Op de volgende bladzijde is een alfabet isch overzicht gegeven van alle Si mon's BASIC i nstructies met een pag i naverwijzi ng.
5
ALFABETISCH OVERZICHT S I M ON'S BASIC I N STRUCTI ES in struct ie $ % @ ANGL ARC AT AUTO BCKG N DS BFLASH B LOCK CA LL CENTRE CGOTO CHAR CH ECK CI RCLE CMOB CO LD CO LO U R COPY CSET D E LAY D ES I G N D ETECT DIR DISABLE DISAPA DISPLAY DISK DIV DOWN B DOWNW D RAW DUMP DUP E N D PROC ENV ELOPE ERRLN ERRN
6
blz. 80 80 37 41 16 17 63 64 25 29 13 56 64 65 20 39 15 38 65 26 86 26 65 36 41 39 86 71 66 69 87 79 30 30 18 67 31 56 47 58 58
i nstructie EXEC EXOR FC H R FCO L FETCH F I LL FIND FLASH FRAC G LOBAL G RAPHICS H l COL H I RES H R DCPY I F . .T H EN .. ELSE I N KEY I N SERT I N ST I NV JOY KEY LEFTB LE FTW Ll N Ll N E LOCAL LOOP .. EXIT I F ... EN D LOOP LOW CO L M EM M ERGE M MO B MOB OFF M O B S ET MOD MOV E M U LTI M USIC N O ERROR NRM
blz. 56 81 26 27 67 27 68 29 80 57 85 12 11 87 53 68 31 32 28 88 68 30 30 70 12 57 55 11 41 70 38 39 37 79 28 11 48 59 20
instructie OFF OLD ON ERROR ON KEY OPTI ON OUT PAG E PAI NT PAUSE PENX PENY PLACE PLAY PLOT POT PROC RCO M P REC RENUMBER REPEAT . . U NTI L RESET R ESU M E R ETRACE R I G HTB RIG HTW R LOCMOB ROT SCRLD SCRSV SECU R E SOU N D TEST TEXT TRACE UPB U PW USE VOL WAVE
blz. 29 70 59 70 71 60 72 14 72 88 88 32 49 12 88 55 54 13 72 54 73 71 74 30 30 38 19 89 89 66 85 18 20 74 30 30 74 46 47
1. GRAFISCHE INSTRUCTIES MET HOOGOPLOSSEN 0 VERMOG EN
Eén van de sterkste pu nten van Simon's BASIC i s dat het de gebru i ker i n structies biedt voor het tekenen op een hoogoplossend beeldscherm (gra fisch scherm). H iermee bedoelen we dat we elk punt afzonderl ijk op het scherm kunnen zetten. Voordat we met de bespreki ng van deze i nstructies beg i nnen, zul len we eerst enige algemene informat ie geven, gevo lgd door informatie over de parameters die bij deze in struct ies van belang zij n. Wan neer we de Commodore 64 aanzetten bevinden we ons in de zogenaam de tekstmodus. H et beeldscherm bestaat u it 25 regels die elk 40 tekens kun nen bevatten. Ieder teken is opgebouwd volgens een 8x8-pu ntenmatrix. I n onderstaande figuur i s deze matrix weergegeven voor d e letter 'A'. - - * *- - - * * * *- * *- - * * - * * * * * ** ** *- * *- - * ** ** *- - -
-
Een simpel rekensom metje leert dat het beeldscherm bestaat uit 320 pun ten horizontaal en 200 pu nten verticaal. In de tekstmodus zijn we n iet in staat om deze pu nten afzonderlijk op het scherm te tekenen. H iertoe moe ten we overschakelen naar het g rafische scherm. De i nformatie van dit scherm is opgesl agen in een vooraf gedefi n ieerd geheugengebied , dat 8 Kbyte i n bes lag neemt. Het tekenen van een figuur houdt i n dat we bepaalde waarden i n dit geheugengebied zetten. In het BASIC waarover de Commo dore 64 besch i kt is dit net zo l asti g als het kl inkt. Simon's BASI C biedt, zoals zal b l ijken, tal van i nstructies d ie het tekenen op het beeldscherm net zo eenvoud ig maken als het tekenen op papier. H et geheugengebied waarin de i nformat ie voor het g rafische scherm staat, is i n Simon's BASIC gelocaliseerd i n het 8K RAM-gebied onder de KERNAL ROM (57344-65535, hex. $EOOO-$ FFFF). We onderscheiden twee modi bij het tekenen op een g rafisch scherm.Aller eerst is dat de standaard modus, waarin we met slechts één kleur op het scherm kunnen tekenen. We besch i kken dan over een oplossend vermogen van 320 bij 200 punten. Daarnaast is er de multi color"-modus, waarin we, " met meer kleuren kunnen werken. Dit gaat ten koste van het oplossend ver mogen. Dit besl aat n u 1 60 bij 200 pu nten, zodat elk punt twee keer zo breed i s als i n de standaard mod us. Opgemerkt d ient te worden dat op het beeld scherm het aantal punten per centi meter i n horizontale richt ing verschilt met dat in verticale richting. In de standaard modus moet voor het tekenen van een vierkant de horizontale afstand (in beeldscherm punten) gel ijk zij n aan de verticale afstand vermenigvu ldigd met de factor 1 .3. I n de m u lti color-modus bedraagt deze factor 0.65.
9
Tot zover de algemene i n format ie. We beëindigen deze i n leiding met de be schrijving van een aantal parameters die veel i n de diverse i nstructies voor komen. KLEUREN
De parameters die betrekking hebben op een kleur (b.v. achterg rondkleur, tekenkleur) bestaan uit een geheel getal tussen 0 en 1 5. Deze getal len staan voor de volgende kleuren: o zwart
8 oranje 91ichtoranje 1 0 l ichtrood 1 1 grijs 1 1 2 g rijs 2 1 3 l ichtgroen 1 4 l ichtblauw 1 5 grijs 3
1 wit 2 rood 3 cyaan 4 paars 5 g roen 6 blauw 7 geel
B E EL DSCH ERMCOÖR DINATEN
De coörd i naten van de pu nten op het g rafische scherm zijn als volgt gedefi n ieerd : Standaard modus (320x200 punten) : coörd inaten l i n ker boven hoek (0,0) coördi naten rechter benedenhoek (319,1 99) M u lt i color-modus (1 60x200 pu nten) : coörd i naten l i nker bovenhoek (0,0) coörd inaten rechter benedenhoek (159,1 99) TEKENCODE
De tekencode (afgekort TC) geeft aan hoe de pu nten op het scherm gezet moeten worden. We maken wederom onderscheid tussen de standaard- en de m u lti color-modus. Standaardmodus : TC = 0 : de pu nt(en) worden gewist TC = 1 : de pu nt(en) worden getekend TC 2 : de punten worden geïnverteerd =
H et i nverteren houdt i n dat een punt getekend wordt i nd ien het n iet aanwe zig is, en dat het gewist wordt als het wel getekend is. M u lti color-modus : TC = 0 : TC 1 : TC 2 : TC = 3 : TC 4 : =
=
=
10
de de de de de
pu nt(en) worden pu nt(en) worden punt(en) worden punt(en) worden punt(en) worden
gewist getekend in kleur 1 getekend in kleur 2 getekend in kleur 3 geïnverteerd
Het i nverteren van een punt houdt h i er i n dat kleur 1 wordt veranderd kleur 2 wordt veranderd kleur 3 wordt veranderd kleur 0 wordt veranderd
in in in in
kleur 2 kleur 1 kleur 0 (achterg rondkleur) kleur 3
H I R ES
M et de i nstructie H I R ES i n itial iseren we de standaard modus en stellen we de teken- en achtergrond kleur i n . Een i n het geheugen aanwezige afbeelding o p het hoogoplossend scherm kan n iet van u it de tekstmodus via deze i nstruct ie zichtbaar worden ge maakt, omdat de instructie het beeldscherm wist. Dit is wel mogelijk m . b.v. de CSET-inst ructie. Syntax : H I RES a, b a - tekenkleur Parameters b - achtergrondkleur Voorbeeld : 1 0 H I R ES 1 ,0 : REM ZWARTE ACHTERG RON D EN WITTE TE KEN KLEUR 20 PAUSE 3 : N RM
M U LTI
M U LTI i n itialiseert de multi color-modus en definieert de drie teken kleuren. De M U LTI-i nstruct ie moet zijn voorafgegaan door de H I RES- i nstructie.
•
Syntax : Parameters :
M U LTI a,b,c a - tekenkleur 1 b - tekenkleur 2 c - tekenkleur 3
Voorbeeld : 1 0 H I RES 1 ,0 : M U LTI 2,5,6 : REM KLEUREN ROOD/G ROEN/BLAUW 20 PAUSE 3 : N RM LOW COL
M et LOW COL kunnen we andere tekenkleuren dan de kleuren die we met de M U LTI-inst ructie hebben ingestel d , kiezen. Syntax : Parameters :
LOW COL a,b,c a - teken kleur 1 b - teken kleur 2 c - teken kleur 3
11
Voorbeeld : 1 0 H I RES 1 ,0 : M U LTI 2,5,6 : REM KLEUREN ROO D/G ROEN/BLAUW . 90 LOW COL 3,4,7 : REM KLEUREN CYAAN/PAARS/GEEL H I COL
Met deze i nstructie worden de teken kleuren i n de m u lti color- modus i n gesteld zoals deze i n eerste i nstant ie m.b.v. de M U LTI- i nstruct ie gedefi n i eerd zij n (de kleuren kunnen namel ij k met LOW COL veranderd zij n). Syntax : Parameters :
H l CO L geen
PLOT
De PLOT-i nstructie tekent een punt waarvan we de coörd i naten opgeven, op het beeldscherm. ,
PLOT x,y,tc x,y - coörd i n aten van het punt tc - tekencode
Syntax : Parameters : Voorbeeld :
1 0 H I RES 1 ,0 20 FOR X = O T0 31 9 30 Y = 1 00 - 25 * SI N(X/1 0) 40 PLOT X,Y, 1 50 NEXT X 60 PAUSE 3 : N RM
. . '
.�.
JO
"
:
.
'
.
.. : .
,/""\.,
•
"
.
"
.
0.
..
...
.
.
.
'-'"
: : : .
..
•
... .. .
.. :
.r-,
•
"
... .
"
•
•
: : ...
:
......./
..
•
"", .
,. .
.
"
.
.
.. . .
"
:
...
•
.'
"
.. "
..
"
0
.
.
: '
.
. JO
'--./
.: .
.. r"......
"
.
.
.. .
" '
•
''-.,/
: : ..
.
•
•
•
.-
..
"
. • . .
"
.. ..
"
•
. ..
•
',-,,'
LlNE
M et de Ll NE-i nstructie kunnen we een l ij n tekenen tussen twee punten. . LI N E x1 ,y1 , x2,y2,tc Syntax Parameters : x1 ,y1 - coörd i n aten beginpunt x2,y2 - coörd i n aten eindpunt - tekencode tc Voorbeeld : 1 0 H I RES 1 ,0 20 FOR X = 0 Ta 31 9 STEP 2 12
"
:
.:
30 LlN E X, 1 99 * SI N(X * 7r/3 1 9),31 9-X, 1 99-199 * S I N (X/1 00), 1 40 NEXT X 50 PAUSE 3 : N RM R EC
De i nstructie REC verschaft ons de mogelij kheid om rechthoeken op het beel dscherm te tekenen. Syntax : REC x,y,a,b,tc Parameters : x,y - coörd i naten van punt l i n ker boven hoek a - breedte van de rechthoek b - hoogte van de rechthoek tc - tekencode Voorbeeld : 1 0 H I RES 1 ,0 : M U LTI 4,5,6 20 FOR X = 1 0 TO 76 STEP 4 30 A = A + 1 : I F A = 4 TH EN A = 1 40 FOR IX = 0 TO 3 50 REX X + IX,X + IX, 1 60-2 * (X + IX),200-2 * (X + IX),A 60 N EXT IX 70 NEXT X 80 C1 = 4 : C2 = 5 : C3 = 6 90 FOR 1 = 1 TO 50 1 00 D = C1 : C1 = C2 : C2 = C3 : C3 = D 1 1 0 M U LTI C1 ,C2,C3 1 20 FOR J= 0 TO 50 : N EXT J 1 30 NEXT I 1 40 PAUSE 3 : N RM BLOCK
M et B LOCK, de naam zegt het al, kunnen we een blok (ingekleurde rech thoek) tekenen. Syntax Parameters
B LOCK x1 ,y1 ,x2,y2,tc x1 ,y1 - coörd inaten l i n ker bovenhoek x2,y2 -'coörd inaten rechter beneden hoek tc - tekencode
Voorbeeld : 1 0 D I M OM(1 2) 20 FOR I = 1 TO 1 2 30 READ OM(I) 40 N EXT I 50 DATA 2.9,4.3,6. 1 , 1 0. 1 , 1 1 .9,8.8 60 DATA 7.4, 1 2.7,1 3.9,8.9,7.0,5.4 70 H I RES 2,1 80 LlNE 20, 1 0,20, 1 95,1 90 LlNE 1 0, 1 70,31 0, 1 70,1 1 00 FOR I = 1 T0 1 5 1 1 0 PLOT 1 9, 1 70-1 0 * 1 , 1 : PL0T1 8, 1 70-1 0 * 1 , 1 1 20 NEXT I 1 30 TEXT 20, 1 72,CH R$(1) + " J F M A M JJA S 0 N D", 1 , 1 ,8 13
1 40 TEXT 20, 1 80,CH R$(1) + " A E R P E U U U E K O E", 1 , 1 ,8 1 50 TEXT 20, 1 88,CH R$(1) + " N B T R I N L G P T V C", 1 , 1 ,8 1 60 TEXT 8,1 1 7,CH R$(1) + "5", 1 , 1 ,8 1 70 TEXT 0,67,CH R$(1) + " 1 0", 1 , 1 ,8 1 80 TEXT 0, 1 7,CH R$(1) + " 1 5", 1 , 1 ,8 1 90 FOR 1 = 1 TO 1 2 200 UY = 1 70-1 0 * OM(I) 2 1 0 UX = 22 + 24 * (I-1) 220 DY = 1 68:DX = UX + 20 230 B LOCK UX,UY, DX, DY, 1 240 N EXT I 250 TEXT 30, 1 0,CH R$(1) + "OMZET PRODUKT X I N " , 1 , 1 ,8 260 TEXT 60,20,CH R$(1) + "1 000 KFL.", 1 , 1 ,8 270 PAUSE 3 : N RM OMZET PRODUKT 1.000 KFL.
1.5
X
IN
1.0
5
8
PAI NT
De PAl N T-instructie heeft tot doel een omsloten geb ied in te kleuren. I n d ien het gebied n iet door beeldscherm punten is begrensd, wordt de scherm rand als begrenzing genomen. Syntax Parameters
PAI N T x,y,tc x,y - coörd i naten van punt i n beoogd gebied tc - tekencode
Voorbeeld : 1 0 H I R ES 1 ,0 20 X1 = 1 0 : Y1 = 20 30 X2 = 90 : Y2 = 80 40 X3 = 270 : Y3 = 60 50 Ll N E X1 ,Y1 ,X2,Y2,1 60 L l N E X2,Y2,X3,Y3,1 14
70 Ll N E X3,Y3,X1 ,Y1 , 1 80 PAI NT 1 00,70,1 90 PAUSE 3 : N RM CIRCLE
Met CI RCLE kunnen we een ci rkel (of el l i ps) op het beeldscherm tekenen. Syntax CI RCLE x,y,rx,ry,tc Parameters : x,y - coörd i naten middelpunt rx - straal i n x-richting ry - straal i n y-richting tc - tekencode Let wel , indien we op het scherm een " echte" cirkel wi llen tekenen, moeten we voor rx een waarde nemen gel ijk aan 1 .3 x ry. Voorbeeld : 1 0 H I R ES 1 ,0 20 R = 3 : DEF FN F(X) = X * (X- 1 ) * (X-2.5) 30 FOR 1 = 0 TO 1 44 STEP 4 40 AR = 1 * 3/200 50 A = 200 * FN F(AR)/3 : 8 = 1 60-A : C = 1 60 + A 60 CI RCLE 8, 1 , 1 .3 * R,R, 1 : CI RCLE C,I, 1 .3 * R, R, 1 70 R = R + 1 80 N EXT I 90 PAI NT 0,0,1 1 00 PAUSE 3 : N R M
15
ANGL
M et de A N G l-instructie kunnen we de straal van een cirkel tekenen, zonder d at we eerst de c i rkel hoeven te tekenen. A N G l x,y, h,rx,ry,tc Syntax Parameters : x,y - coörd i naten middelpunt h - hoek, i n g raden (zie h ieronder) rx - straal i n x-richting ry - straal i n y-richt ing tc - teken code De hoek h i s de hoek die de straal maakt met de verticale symmetrie-as van de c i rkel . Ter verd u ide l ij king h iervan de onderstaande figuur:
hoek h
ry
Voorbeeld : 10 H I R ES 0,1 : M U lTI 1,5,6 20 Cl RClE 80,1 00,50,80,1 30 A N G l 80,100,0,50,80,1 40 A N G l 80, 1 00,27,50,80,1 50 A N G l 80, 1 00,1 00,50,80,1 60 A N G l 80, 1 00,1 95,50,80,1 70 A N G l 80, 1 00,255,50,80,1 80 A N G l 80, 1 00,31 0,50,80,1 90 PAI NT 81 ,79,3 : PAI NT 81 ,99,2 100 PAI NT 81,101 ,3: PAI NT 79,101,2 1 10 PAI NT 70,100,3 : PAI NT 79,90,2 120 PAUSE 3 : N R M
16
ARC
Met de ARC-instructie tekenen we een c i rkel boog. Syntax ARC x,y,bh,eh,s,rx,ry,tc Parameters : x,y - coörd i nate n middelpunt bh - beg in hoek van de boog eh - eind hoek s - stapgrootte (zie hieronder) rx - straal i n x-richt ing ry - straal i n y-richting tc - teken code De ARC-i nstructie berekent tussen d e begin- en eindhoek een aantal pun ten van de cirkel , d ie met el kaar verbonden de c i rkelboog vormen . De stap grootte s is de afstand tussen deze p unten i n graden. Een g rotere waarde van s leidt dus tot een slechtere c irkelbenadering. Indien we een 'echte' c i r kel boog willen tekenen, nemen we voor s de waarde 1 . Door deze variabele stapg rootte kun nen met de ARC-instructie ook regel matige veelhoeken worden getekend, onder de voorwaarde dat het aantal hoeken een gehele deler is van 360 (zie h iervoor het tweede voorbeeld). Voorbeeld 1 : 1 0 H I R ES 7,0 20 ARC 1 60, 1 00, 1 80,360,1 ,60,50,1 30 ARC 1 60, 1 00,180,360,1 ,30,50,1 40 PAI NT 1 05, 1 00,1 50 CI RCLE 1 22,87,4,3,0 60 PAI N T 1 22,87,0 70 CI RCLE 1 22,87,2, 1 , 1 80 ARC 1 60,96,21 0,240,1 ,55,25,0 90 PAUSE 3: N R M
Voorbeeld 2 : 1 0 PRINT " REG ELMATIG E V EELHOEK :" 20 PRINT "AANTAL HOEKEN :"; : I N PUTH 30 D H = 360/H 40 IF D H < > I NT(DH) T H E N PRINT "TEKE N I N G N I ET M ET 'ARC' MOG E LI J K" : E N D 17
50 H I R ES 1 ,0 60 ARC 1 60,1 00,0,360, D H , 1 20, 1 00,1 70 FOR I = 0 TO 360 STEP D H 80 A N G L 1 60, 1 00, 1 , 1 20, 1 00,1 90 N EXT I 1 00 PAUSE 3 : N RM TEST
Deze i nstructie kent aan een variabele de waarde 0, 1 , 2, 3 of 4 toe, afhanke l ij k van de tekencode waarmee het punt op het scherm i s gezet. Syntax : < variabele > = TEST (x,y) Parameters : x,y - coörd i naten van te testen punt Aan < variabele > wordt de waarde van de tekencode van het betreffende punt toegekend. Voorbeeld : 1 0 H I R ES 1 ,0 20 L l N E 300,1 0,300, 1 90,1 30 XO = 1 0 : YO = 1 0 40 LOOP 50 X1 = XO + 1 : Y1 = YO + 0.5 60 A = TEST(X1 ,Y1 ) 70 EXIT I F A = 1 80 LlN EXO,YO,X1 ,Y1 , 1 90 XO = X1 : YO = Y1 1 00 E N D LOOP 1 1 0 PAUSE 3: N RM DRAW
De D RAW-i nstructie heeft tot doel om een wil lekeu rige figuur (Eng. sha " pe") op het scherm te tekenen. Syntax DRAW < stri ng > ,x,y,tc Parameters : x,y - coörd i naten beg i npunt tc - tekencode De variabele < string > bevat de informat ie voor het tekenen van de figuur. De h iervoor gereserveerde tekens zijn weergegeven i n de onderstaande ta bel: teken
functie
o
ga een punt naar rechts ga een punt naar boven ga een punt naar beneden ga een punt naar l i n ks ga een punt naar rechts en teken het punt ga een punt naar boven en teken het punt ga een punt naar beneden en teken het punt ga een punt naar l i n ks en teken het punt einde van de figuur
1 2 3 5 6 7 8 9 18
De DRAW-instruct ie moet i n com bi natie met de ROT-inst ructie gebru i kt worden. ROT
Met ROT kunnen we een met DRAW ontworpen figuur tonen, roteren of ver g roten . Syntax : ROT n,g Parameters : n - rotatiegetal (zie onder) g - verg roti ngsfactor Met het rotatiegetal wordt de hoek gespec ificeerd waarover de figuur wordt geroteerd, met als centrum het beg i n punt (x en y i n D RAW). n
rotatiehoek (graden)
o
0 45 90 1 35 1 80 225 270 315
1 2 3 4 5 6 7 Voorbeeld :
1 0 PRINT "VOORBEELD 'DRAW' EN 'ROT'" 20 PRINT 30 PRINT " L = D RAAI LI N KS " 40 PRI NT " R = DRAAI R ECHTS " 50 PRI NT " + = V ERG ROTEN " 60 PRINT " - = V ER KLEI N E N " 70 PRINT " E = E I N DE " 80 PAUS E 2 90 H I R ES 1 ,0 1 00 P$ = " 57869" 1 1 0 X = 1 60: Y = 1 00 : N = 0 : G = 1 1 20 LOOP 1 30 REPEAT : G ET A$ : U NTI L A$ < > "" 1 40 EXIT I F A$ = " E " 1 50 ROT N ,G : DRAW P$,X,Y,O 1 60 I F A$ = " + " A N D G < 256 THEN G = G + 1 1 70 I F A$ = " -" A N D G > 1 THEN G = G-1 1 80 I F A$ = " R " THEN N = N + 1 : I F N = 8 THEN N = 0 1 90 I F A$ = " L" THEN N = N - 1 : I F N = - 1 THEN N = 7 200 ROT N,G : DRAW P$,X,Y,1 2 1 0 E N D LOOP 220 PAUSE 3 : N RM Let wel , voorde i n regel 1 00 gedefi n ieerde figuur (P$) kan een wil lekeurige fi guur gesubstitueerd worden.
19
CHAR
M et CHAR kunnen we tekens op een g rafisch scherm zetten. Syntax CHAR x,y,pc,tc, h Parameters : x,y - coörd inaten van het punt waar het teken wordt geplaatst pc - poke-code " van het teken " tc - tekencode h - hoogte van het teken (standaard g = 1 ) T EXT
De i n structie TEXT maakt het mogelijk om tekst o p een g rafisch scherm te zetten. Syntax : TEXT x,y, < string > ,tc,h,b x,y - coörd inaten van het punt waar de tekst Parameters wordt geplaatst tc - teken code h - hoogte van de letters b - afstand tussen de letters (normaal b = 8) De variabele < stri n g > bevat de tekst, voorafgegaan door CTR L-A (CH R$(1)) of CTRL-B (CH R$(2)) voor g rote (uppercase) respectievelijk kleine (Iowercase) letters. De werkel ijke hoogte van een letter i s de parameter h, vermen igvu ldigd met 8. De werkel ijke afstand tussen de letters is de parameter b, vermi nderd met 8. Voorbeeld : 1 0 H I R ES 1 ,0 20 A$ = C H R$(1) + "TEKST O P H ET GRAFISC H E SCH E R M " 30 B$ = C H R$(1) + "G ROOT" 40 C$ = C H R$(2) + " KLEI N " 50 TEXT 1 0 , 1 O,A$, 1 ,3, 1 0 60 TEXT 1 0,50, B$, 1 ,5, 1 6 70 TEXT 200, 78,C$, 1 , 1 ,8 80 A$ = " G E M E N G D " 90 FOR I = 1 Ta 7 1 00 CHAR 1 0 * 1 + 1 00, 1 20,ASC( M I D$(A$ , I , 1 )) - 64, 1 , 1 1 1 0 N EXT I 1 20 PAUSE 3 : N RM N RM
M et N RM schakelen we van het g rafische scherm over op het tekstscherm. : N RM Syntax Parameters : geen H et tegenovergestelde van deze actie wordt bewerkstell igd door 'CSET 2'.
20
Voorbeeld: 1 0 H I RES 1 ,0 20 R EC 1 0, 1 0, 1 60, 1 5;1 30 TEXT 1 4, 1 4,CHR$(1 ) + " DRU K EEN TOETS 40 REPEAT: G ET A$ : UNTI L A$ < > "" 50 N RM
. . .
", 1 , 1 ,8
21
2. SCHERM- EN STRINGMANIPULATIES
I n dit hoofdstuk behandelen we alle i n structies die de i n houd van het beeld scherm (tekstmodus) of een st ri ngvariabele op de een of andere wijze beïn vloeden . De i nstructies u it de l aatste categorie beslaan d rie gebieden: - keuze van kleuren en tekenset - man ipu latie van beeldscherm i n houd en kleuren - scrolling Bij de bespreki ng van de inst ructies zal deze onderverdeling worden aange houden. We vervolgen nu met de beschrijving van de algemene parameters. KLEU REN
Voor de kleuren geldt wat als in hoofdstuk 1 al i s verteld: elke kleur wordt aangegeven met een geheel getal tussen 0 en 15. POSITIE OP H ET B EELDSC H ER M
H et beeldscherm i n de tekstmodu s bestaat u it 25 regels van elk 40 tekens. We kennen de plaats van een teken op het scherm i nd ien we weten i n wel ke rij (regel) en kolom het teken staat. De kolom i s de plaats van het teken i n een bepaalde rij. H iertoe defi niëren we d e parameters kolomnu mmer en rij nummer: kol omnu mmer (k) l igt tussen 0 en 39 rij n u m mer (r) l igt tussen 0 en 24 Voor de tekens i n de l i n ker boven- respectieve l ij k l i nker beneden hoek geldt dan: l i nker bovenhoek : kolom
=
0 , rij
rechter benedenhoek : kolom
=
=
0
39 , rij
=
24
KEUZE VAN KLEUREN EN TEKENSET BCKG N DS
Met de i nstructie BCKG N DS ste l l en we de achtergrondkleuren i n . Syntax BCKG N DS a,b,c,d Parameters : a - normale achtergrondkleur b - achterg rondkleur bij sh ift c - achterg rondkleur bij i nverse video (RVS) d - achterg rondkleur bij sh ift en i nverse video
25
M et 'sh ift' wordt bedoeld dat de tekens i n de PRI NT-instruct ie moeten wor den i ngetypt terwijl de SHI FT-toets i s i nged rukt. Voorbeeld : 10 20 30 40 50 60 70 80
PRINT CHR$(1 47) RV$ = CH R$(1 8) : RO$ CH R$(1 46) BCKG N DS 5,6,7,8 PRI NT " BCKG N DS STELT DE ACHTERGRON D KLEU REN IN" PRINT : PRINT " KLEUR A - N O RMAAL" PRINT : PRINT " KLEUR B - SHI FT" : REM SHIFT PRINT : PRINT RV$;"KLEUR C - RVS"; RO$ : REM RVS PRINT : PRINT RV$;" KLEU R D - RVS/SHIFT"; RO$:REM RVS/SHI FT =
COLO U R
M et deze in structie defin iëren we de kleur van de scherm rand en de achter g rond. Syntax Parameters
COLO U R a,b a - achtergrondkleur b - schermrandkleur
Voorbeeld : 1 0 COLOU R 7,6 : REM GEEL KA DER EN BLAUWE RAN D CSET
Met CSET is het moge l ij k om van tekenset te veranderen of om het l aatste g rafische scherm te tonen. I ndien we naar een grafisch scherm w i l len over schakelen dat is opgezet i n de m u lti color-modus, moet de CSET-instruct ie gevolgd worden door de M U LTI-i nstructie. Syntax Parameters
CSET n n = 0 - g rote letters (uppercase) 1 - kleine letters (Iowercase) 2 - omschake len naar g rafisch scherm
MANI P U LATI E VAN B EELDSC H E R M I N H O U D EN KLEU R EN FC H R
De FCHR-i nstruct ie bewerkstell igt dat een rechthoekig deel van het beeld scherm met een bepaald teken wordt gevu ld. Syntax Parameters
26
FCHR r, k,b, h,pc r - rij nummer k - kol omnum mer b - breedte van het schermdee l h - hoogte van het schermdeel pc - poke-code van het teken
Het rij- en kolomnummer hebben betrekki ng op het teken i n de l i nkerboven hoek van het schermdeel . Voorbeeld : 1 0 PRINT CH R$(1 47) 20 FCH R 1 0, 1 0,20,6, 1 71 30 FCH R 4, 1 7,6, 1 8, 1 71 40 COLO UR 2,2 Oe truc" in regel 40 is nod i g om de tekens zichtbaar te maken. Het com " mando vult name l ij k al leen het schermgeheugen en n iet het kleurgeheu gen. H et vul len van dit kleurgeheugen gesch iedt met het volgende com îlando. FCOL
FCOL is een soortgel ijke instruct ie als FCH R. N u wordt een deel van het beeldscherm met een bepaalde kleur gevuld, d .w.z. dat de tekens die i n dit deel staan, de gespecificeerde kleur krijgen. Syntax FCOL r,k,b, h,c Parameters : r - rij n u mmer k - kolomnu mmer b - breedte van het schermdeel h - hoogte van het schermdeel c - kleur Voorbeeld : 10 20 30 40 50
PRINT CH R$(1 47) FC H R 1 0, 1 0,20,6, 1 71 FC H R 4,1 7,6, 1 8, 1 71 FCOL 1 0, 1 0,20,6,2 FCOL 4,1 7,6, 1 8,2
FILL
FILL is een com bi natie van de beide voorgaande inst ructies, FC H R en FCOL. Oe fu nctie van de FI LL-i nstruct ie is om een deel van het bee ldscherm met een bepaald teken en een bepaalde kleur te vullen. FI LL r,k,b,h ,pc,c Syntax Parameters : r - rijnummer k - kolom n u mmer b - breedte schermdeel h - hoogte schermdeel pc - poke-code van het teken c - kleur Voorbeeld : 10 PRINT CH R$(1 47) 20 FOR I = 1 TO 250 30 R = I NT(RN 0(0) * 22) : K
=
I NT(RN 0(0) * 37) 27
40 C = I NT(RN D(O) * 1 6) 50 F I LL R, K,4,4 , 1 60,C 60 N EXT I 70 PAUS E 3 80 PRINT CH R$(1 47) INV
M et deze i nstructie kunnen we een deel van het beeldscherm i nverteren. Dit houdt i n dat alle tekens i n dit deel die normaal zij n weergegeven, worden omgezet i n i nverse video en omgekeerd. Syntax I N V r,k,b,h Parameters : r - rij n u mmer k - kolomnummer b - breedte schermdeel h - hoogte schermdeel Voorbeeld : 1 0 P R I NT CH R$(1 47) 20 A$ =" ON DERDEEL # " 30 PRINT "TOEPASS I N G ' I NV' VOOR SELECTI E UIT M EN U " : PRINT 40 FOR I = 1 TO 9 50 PRINT I ;A$; I 60 N EXT I 70 PROC I NVOER 80 PRI NT: I N PUT "GEEF UW KEUZE " ;A 90 I F A < 1 O R A > 9 THEN CALL I N VOER 1 00 I N V A + 2,5, 1 7,1 -
M OV E
De M OV E-i nstruct ie kopieert een deel van het beeldscherm naar een andere plaats op het scherm. Zowel de tekens als de kleur worden gekop ieerd . : r,k,b,h,r',k' Syntax Parameters : r - rij n u mmer k - kol omnummer b - breedte schermdeel h - hoogte schermdeel r' - rij n u mmer van deel waari n gekopieerd wordt k' - kolomnum mer, idem Voorbeeld : 1 0 PRINT CH R$(1 47); 20 A$ = " * * * * * * * * * * * * * * * " 30 P R I N T A$ 40 PRINT " * S I M O N 'S BASIC * " 50 PRINT A$ 60 PAUSE 1 70 MOVE 1 ,0,1 5, 3, 1 1 , 1 2 28
BFLASH
Met deze i nstruct ie kunnen we de kleur van de scherm rand met een bepaal de snel heid laten wisselen tussen twee opgegeven kleuren. Syntax BFLASH i,a,b Parameters : i - knipperinterval a - kleur 1 b - kleur 2 Elke eenheid van de parameter s komt bij benaderi ng overeen met 1 /60 se conde. Het knippereffect is i nterru pt-gestu u rd en kan alleen u itgeschakel d worden met: BFLASH 0 Voorbeeld : 1 0 PRINT C H R$(1 47) 20 FOR I = O TO 1 9 30 F I L L 1 2 , 1 , 1 , 1 ,62,0 40 F I LL 1 2,39 - 1 , 1 , 1 ,60,0 50 FOR J = 0 TO 1 50 -1 .3AI : N EXT J 60 N EXT I 70 BFLASH 1 0,2,4 80 PAUS E 4 90 BFLASH 0 FLASH
De FLAS H-i nstruct ie laat a l le tekens op het beeldscherm kni pperen die de gespecificeerde kleur bezitten. Syntax FLASH a,t of FLASH a,b Parameters : a - kleur 1 b - kleur 2 t - knipperinterval De eerste u itdrukking van de i nstruct ie zorgt e rvoor dat alle tekens i n de kleur a met een t ijdsi nterval t (1 /60 s per eenheid) kni pperen. De tweede laat alle tekens met de kleur a kni pperen tussen de kleuren a en b. De FLAS H-i nstructie wordt u itgeschakeld met de volgende i nstruct ie. OFF
Met OFF schakelen we de FLASH-instructie u it. Syntax OFF Parameters : geen
29
Voorbeeld : 1 0 PRINT CHR$(1 47) 20 PRI NT AT(5,5) CHR$(28);"DRU K R ETURN VOOR HOOFDM ENU" 30 F LASH 2,20 40 REPEAT : G ET A$ : UNTI L A$ = CHR$(1 3) 50 0FF SCROLLI N G
O nder scro l l i n g " verstaan we het verschuiven van (een deel van) het beeld scherm" in een bepaalde richt ing. Een voorbeeld van scro l l ing komen we te gen bij het l i sten van een programma op het scherm. Als het p rogramma zo lang is dat het n iet op het beeldscherm past, scrollt het i n opwaartse rich ting door het beeld. S i mon's Basic heeft 8 scroll-i nstructies die i n twee g roepen zijn te verdelen . We onderscheiden: - scro l l i ng met wrap-around" " wrap-around" - scrol l i ng zonder " De term wrap-around" betekend zoiets als doorrol len. We zul len dit du ide " aan de hand van een voorbeeld. We stel len ons een scrol l-gebied l ij k maken (ook wel wi ndow genoemd) voor van 5 tekens breed en 1 teken hoog en plaatsen daarin het woord 'hallo'. I n onderstaande tabel is nu de i n houd van dit scrol lgebied weergegeven na 0 tot 5 keer een scro l l naar rechts te heb ben u itgevoerd en wel met respectievel ij k zonder wrap- arou nd". " aantal scrol Is
met wrap" "
zonder wrap" "
o
HALLO OHALL LOHAL LLOHA ALLOH HALLO
HALLO HALL HAL HA H
1 2 3 4 5 De scroll-instructies zij n: U PW R I G HTW DOWNW LE FTW
UPB RIGHTB DOW N B LEFTB
(naar boven) (naar rechts) (naar beneden) (naar l i n ks)
De inst ructies l i n ks hebben wrap-around", de andere n iet (de ' B' i n het commando i s afkomstig van "blanking"). Alle scrol l-i nstructies hebben de zel fde syntax en parameters." Syntax U PW br,bk,ek,er Parameters : br - nummer beg i n rij bk - nummer beg i n kolom ek - n u m mer eindkolom er - nummer eind rij 30
Het scrol l-gebied l igt tu ssen de rijen br en er, en de kolommen bk en ek. Voorbeeld : 1 0 COLO U R 1 5, 1 5 20 A$ = " > > > > > M ET D E SCRO LL-CO M M A N DO'S I S H ET E RG EENVOUDIG O M BIJVOORBEE LD" 30 A$ = A$ + " EEN LICHTKRANT NA TE BOOTSEN « « <" 40 PRINT CHR$(1 47): 50 PROC START 60 TE = 1 70 LOOP 80 LEFTB 0,0,40,1 : TE = TE + 1 90 PRINT AT(39,0) M I D$(A$,TE , 1 ) 1 00 FOR J = 1 TO 75: N EXT J 1 1 0 EXIT I F TE = 1 05 1 20 E N D LOOP 1 30 CALL START
••
Dit programma i s ei ndeloos, het kan al leen worden beëindigd door op de RU N/STOP-toets te dru kken. STRI N G M A N I P U LATIES DUP
Met de i nstructie DUP dupliceren we een string. Syntax : < string 1 > = D U P( < string 2 > ,n) Parameters : n - aantal keren dat gedupl iceerd wordt De n ieuwe stri ng « string 1 » ontstaat door de string < string 2 > n keer achter el kaar te plaatsen. Voorbeeld : 1 0 A$ = " * " 20 B$ = OU P(A$,40) 30 PRINT B$ I NSERT
De I N SERT-in struct ie voegt een string in een andere string. : < string 1 > = I NSERT( < stri ng 2 > , < string 3 > , p) Syntax Parameters : p - positie in hoofdstring In dit geval wordt < string 2 > ingevoegd i n < stri ng 3 > . H et resu ltaat wordt opgeborgen i n < string 1 > . De parameter p geeft aan waar de i nvoeg ing moet plaatsvi nden.
31
Voorbeeld : 1 0 A$ = "DE MAN STEEKT OVER" 20 B$ = "DE STRAAT " 30 C$ = I N S ERT (B$,A$, 1 4) 40 PRINT A$ : PRINT B$ : PRI NT C$ I N ST
M et deze i nstructie wordt een n ieuwe string gevormd door de u itgangs string (gedeelte l ij k) met een andere string te oversch rijven. : < string 1 > = I NST« stri ng 2 > , < string 3 > , p) Syntax Parameters : p - positie i n hoofdstring Analoog aan de I N S ERT-inst ructie wordt < string 2 > i ngevoegd i n < string 3 > , dit resu lteert i n < string 1 > . p geeft d e plaats van de i nvoeg ing aan. Voorbeeld : 1 0 A$ = " H ET ANTWOORD I S GOED" 20 X = I NT(1 0 * RN D(O) + 1 ) : Y = I NT(1 0 * RN D(O) + 1 ) 30 Z = X * Y 40 PRI NT , , , MAAL ".y 50 PRINT " HOEVEEL IS "X" 60 I N PUT A 70 I F A = ZT H E N A$= I N ST("GOED",A$, 1 6) : PRINT A$ : RUN 80 A$ = I N ST(" FOUT" ,A$, 1 6) : PRINT A$ 90 PRINT "GOEDE ANTWOOR D : ";Z : RUN PLACE
M et P LACE kunnen we de positie van een deelstring in de hoofdstring bepa len. : < variabele > = PLACE« Syntax Parameters : geen
stri ng 1 > , < string 2»
I n de syntax staat < string 1 > voor de deelstring en < stri ng 2 > voor de hoofdstring. Aan < variabele > wordt de positie toegekend. Voorbeeld : 1 0 A$ = "1 23456789" 20 PRI NT A$ : PRINT 30 PRI NT"DE '5' STAAT OP POSITI E";PLACE("5",A$)
32
3. SPRITES
De Com modore 64 bezit mogel ij kheden voor het gebru i k van sprites. Een sprite is een door de gebru i ker gedefin ieerde figuur met leg io mogelij khe den, doch hierover straks meer. We g aan eerst eens kijken hoe een sp rite i s opgebouwd. Net als bij d e hoogoplossende g rafiek maken we ook h ier on derscheid tussen normale sprites en m u l t i-color sprites. Een normale sp rite is opgebouwd u it 24 pu nten horizontaal en 21 punten verticaa l . We kunnen bij het tekenen van een normale sp rite slechts één kleur gebru i ken. Een mu lti-color sprite bestaat u it 1 2 punten horizontaal en 21 p unten verticaa l , terwij l we nu drie kleuren mogen gebru i ken. Er kunnen 8 versc h i l lende sprites tegelij kertijd en onafhankelijk van el kaar op het scherm gezet worden. De vo lgende mogel ij kheden zij n bij het gebru i k van sprites voorhanden: - aan- en u itzetten; - veranderen van de kleur; - bewegen over het scherm; - vergroten in x- en/of y-richting met een factor 2; - detectie van botsingen tu ssen sprites onderling en tussen een sp rite en de achtergrond; - keuze van de prioriteit van sprites onderl i ng en tussen een sprite en de achtergrond. H et beg rip prioriteit duidt aan of een sp rite al dan n i et zichtbaar is, i nd ien deze op een positie staat waar reeds een andere sp rite staat of waar iets an ders op het beel dscherm staat. Voor de controle over de spri tes worden 35 registers u i t de video-c h i p ge bruikt. Daar de Commodore 64 zel f geen basic- commando's heeft voor de spri te-programmeri ng, zijn we aangewezen op het vul len respectieve l ij k u it l ezen van deze registers om sprites te gebruiken. Gelukkig neemt S i mon's BASIC deze wel l icht l astige taak van onze schouders door de introductie van 9 sprite- i nstructies, die in alle mogelijkheden voorzien. I n Simon's BA SIC wordt een sprite bet itelt als M O B " , de afkorting van "Movable Object " Block". We geven nu eerst een overzicht van de belangrijke parameters. KLEUREN
De kleur van een sprite wordt aangegeven door een getal tussen 0 en 15 (zie de tabel i n hoofd stuk 1). POSITIE VAN EEN SPRITE OP H ET S C H E R M
De pos itie van een sp rite l igt vast door een x- en een y- coörd i naat. In de on derstaande tabel zijn die x- en y-coörd inaten gegeven, waarvoor geldt dat de omtrek van de sprite nog juist zichtbaar i s op het scherm. Er is onderscheid 35
gemaakt tussen sprites i n normale g rootte, en sprites die i n X-, y- en i n x- en y-richting zij n vergroot.
l i n ksboven rechtsboven l i n ksonder rechtsonder
normale g rootte
verg root in x-richt.
vergroot i n y-richt.
verg root i n x/y-richt.
( 24, 50) (320, 50) ( 24,229) (320,229)
( 24, 50) (296, 50) ( 24,229) (296,229)
( 24, 50) (320, 50) ( 24,208) (320,208)
( 24, 50) (296, 50) ( 24,208) (296,208)
Voor een sprite die i n x-ri chting is vergroot, gelden voorde coörd i naten i n de rechter bovenhoek de waarden: x = 296 en y = 50 SPRITE·DATA
De sprite-data zij n de gegevens d i e de i nformatie over de vorm van een spri te bevatten. We onderscheiden hier twee parameters die nauw met el kaar verband houden . Allereerst is dit het startadres van het geheugengebied waar al deze i nformatie is opgeslagen. Daarnaast definiëren we het blok n u m mer, dat gegeven wordt door de volgende relatie: blokn ummer
=
startadres / 64
De volgende geheugengeb ieden mogen i n Simon's BASIC gebru i kt worden voor sprite-data: adresberei k
blokn u m mers
832- 1 023 2048- 4095 81 92-1 6383
1 3- 1 5 32- 63 1 28-255
We moeten echter oppassen bij d e definitie van een sprite-blok. De eerstge noemde blokken (1 3-1 5) l i ggen i n het gebied dat de cassettebuffer wordt genoemd. Het Operat ing System gebru i kt dit geheugendee l bij l ees- en sch rijfoperaties van en naar de cassette-recorder. I nd ien tijdens de u itvoe ring van het prog ramma één van beide operaties wordt u itgevoerd, wordt (een deel van) d it geheugengebied overschreven. De voorbeelden van de diverse i nstruct ies zij n samengebracht i n een pro g ramma. Aan het ei nde van dit hoofdstu k worden de i nstructies besproken die be t rekking hebben op een aanverwant onderwerp: het defin iëren van de vorm van een teken ( programmable characters"). " D ESIG N
Met de DESI GN-instructie defin iëren we een sprite-datablok, m.a.w. we ver tellen de computer waar de sp rite-gegevens i n het geheugen staan.
36
Syntax Parameters
D ESI G N p,a p - soort sprite (0 of 1 ) P = 0 normale sprite p = 1 m u lti color-sprite a - startadres d atablok -
-
I nd ien we een sprite op een g rafisch scherm wil len gebru i ken, moeten we bij het startadres a een waarde van 491 52 ($COOO) optellen. @ De @-i nstructie gebru i ken we om de vorm van een sorite aan Syntax Parameters
te neven.
@ ........................ (normale sprite) @ ............ (multi color-sprite) geen
We maken dus wederom onderscheid tussen een normale sp rite en een mu It i-color-sprite. Normale sprite
H et ' @ ' -teken moet worden gevolgd door 24 tekens, waarbij we de keuze hebben uit: . - geen sprite-punt zetten B - sprite-punt zetten
Multi color-sprite
H et ' @ '-teken wordt gevolgd door 1 2 tekens: . BCD-
geen sprite-pu nt zetten sprite-punt zetten i n kleu r 1 (zie CMOB) sprite-punt zetten i n kleur 3 (zie M O B S ET) sprite-punt zetten i n kleur 2 (zie CMOB)
De def i n itie van de vorm van de sp rite door middel van deze in struct ie moet d i rect volgen op de D ESIG N-i nstructie. Omdat de sp rite 21 punten hoog is, resulteert dit in 21 prog rammaregels met een ' @ '-instructie. MOB SET
De M O B S ET-i nstruct ie heeft als functie de d iverse sprite- parameters toe te kennen aan een sprite. MOB SET n,b,k,p,s Syntax Parameters : n - sprite-nummer (0-7) b - sprite-blokn u mmer k - kleur van de s p rite (kleu r 3 bij m .c.) p - prioriteit (0 of 1 ) p = 0 - sprite i s zichtbaar o p achtergrond p = 1 - n iet zichtbaar s - soort sprite (0 of 1 ) s = 0 - normale s p rite s = 1 - m u lti color-sprite 37
De prioriteit van de sprites onderl i n� l i gt vast door het sprite-n ummer. Een hoger sprite-nummer resulteert i n een l agere prioriteit. CMOB
Voor het gebruik van m u lti color-sprites moeten naast de met MOB SET gedef i n ieerde kleur, nog twee andere kleuren worden gedefinieerd. Dit gesch iedt met de CMO B-instructie. CMOB a,b Syntax Parameters : a - kleur 1 b - kleur 2 M MO B
I nd ien we alle parameters hebben vastgelegd, kun nen we met M MO B d e sp rite o p het beeldscherm zetten en bewegen. Syntax M MOB n,x1 ,y1 ,x2,y2,e,v - sprite-nu mmer Parameters : n x1 ,y1 - coörd i naten beg i n punt x2,y2 - coörd inaten eindpunt - vergroti ngsfactor (zie tabel) e v - snelheid van bewegen (1 -255) I n de onderstaande tabel zij n de waarden van de verg rot i ngsfactor evenals het effect weergegeven: e
effect
o
geen, sprite op normale g rootte verg rot i ng i n x-richting (factor 2) verg rot ing i n y-richting (factor 2) vergroting i n x- en y-richting (beide factor 2)
1 2 3
Een hogere waarde van de parameter v (snel heid) resulteert i n een lagere be weg i ngssnel heid van de sprite. RLOCMOB
I nd ien een sprite op het scherm staat, kun nen we deze van uit de momenta ne positie naar een andere positie bewegen via de R LOCMOB- i nstructie. Syntax R LOCMOB n ,x,y,e,v Parameters : n - sprite-nummer x,y - coörd i naten eindpunt e - vergroti ngsfactor v - snelheid
38
M O B O FF
Een sp rite wordt van het beeldscherm verwijderd d.m.v. de M O B OFF i nstructie. Syntax Parameters
M O B OFF n,x,y,e,v n - sprite-nummer
DETECT
In de videochip zijn registers aanwezig waarmee nagegaan kan worden of sprites met elkaar of met de achtergrond botsen. I n Simon's BASIC zijn h ier voor twee i nstructies besch i kbaar. M et de DETECT-instructie geven we aan op welke soort bots i ng we w i l len testen. Syntax Parameters
DETECT n n = 0 detecteer botsing sprite-sprite n = 1 detecteer botsing sprite-achtergrond
We moeten de D ETECT-instructie twee keer gebru iken voor we een botsing kunnen detecteren. De eerste keer dat we de i nstructie geven wissen we het z.g. botsingsreg ister, de tweede keer i n itialiseren we de feitel ijke detect ie. C H EC K
Als we met DETECT het voorbereidende werk hebben verricht kan met de CH ECK-inst ructie gecontroleerd worden of er inderdaad een bots ing is op getreden. We maken wederom onderscheid tussen de soort botsing. Sprite/achterg rond: Syntax Parameters
< variabele > CH ECK (n) n - spriten umme r =
Sprite/sprite: Syntax
< variabele > = CH ECK (n1 , n2) n1 - nummer eerste sprite n2 - nummer tweede sprite
Voor beide gevallen geldt dat < variabele > de waarde 0 krijgt, i ndien er een botsing heeft plaatsgevonden. Het vo lgende prog ram ma bevat een aantal sprite-inst ructies.
39
1 0 COLOUR 6,0 20 PRINT CH R$(147) 30 D ESI G N 0,832 40 @ . . . . . . . . . . . B B . . . . . . . . . . . 50 @ . . . . . . . . . B B B B . . . . . . . . . . 60 @ . . . . . . . . . B B . . B B . . . . . . . . . 70 @ . . . . . . . . B B . . . . B B . . . . . . . . 80 @ . . . . . . . B B . . B B . . B B . . . . . . . 90 @ . . . . . . B B . . . B B . . . B B . . . . . . 1 00 @ . . . . . B B . . . B B B B . . . B B . . . . . 1 1 0 @ . . . . BB . . . BBBBBB . . . BB . . . . 1 20 @ . . . B B . . . B B B B B B B B . . . B B . . . 1 30 @ . . B B . . B B B B B . . B B B B B . . B B . . 1 40 @ . B B . . B B B B B . . . . B B B B B . . B B . 1 50 @ . . B B . . B B B B B . . B B B B B . . B B . . 1 60 @ . . . B B . . . B B B B B B B B . . . B B . . . 1 70 @ . . . . B B . . . B B B B B B . . . B B . . . . 1 80 @ . . . . . B B . . . B B B B . . . B B . . . . . 1 90 @ . . . . . . B B . . . B B . . . B B . . . . . . 200 @ . . . . . . . B B . . B B . . BB . . . . . . . 210 @ . . . . . . . . BB . . . . B B . . . . . . . . 220 @ . . . . . . . . . B B . . B B . . . . . . . . . 230 @ . . . . . . . . . . B B B B . . . . . . . . . . 240 @ . . . . . . . . . . . B B . . . . . . . . . . . 250 M O B S ET 0, 1 3,6,0,0 260 M M O B 0,24,50,24,50,0, 1 270 FOR I = 1 00 TO 1 STEP - 1 0 280 R LOCMOB 0,320,50,0,1 290 R LOCMO B 0,320,229,0,1 300 R LOCMO B 0,24,229,0,1 3 1 0 R LOCMO B 0,24,50,0,1 320 N EXT I 330 FOR I = ° TO 3 340 R LOCMOB 0, 1 48, 1 1 0, 1 , 1 350 PAUSE 2 360 N EXT I 370 FOR I = 1 TO 50 380 FOR J = ° TO 1 390 FOR K = 1 TO 1 5 : N EXT K 400 M O B S ET 0,1 3,6,0,0 4 1 0 M M O B 0, 1 48-J * 1 2, 1 1 O-J * 1 0, 1 48-J * 1 2, 1 1 O-J * 1 0,3 * J , 1 420 FOR K = 1 TO 1 5 : N EXT K 430 N EXT J 440 N EXT I 450 PAUSE 1 460 M O B O F F O 470 COLOU R 6, 1 5 .
We zul len dit hoofdstuk besl u iten met de bespreking van de i nstructies waarmee we zelf tekens kunnen defi n iëren.
40
M EM
Tenzij we de computer anders vertellen haalt h ij de i nformatie voor de te kens (de vorm van de pu nten matrix, zie hoofdstu k 1 ) u it het ROM-geheugen. Dit ROM-geheugen kunnen we zel f niet beïnvloeden. Als we dus zelf tekens wil len definiëren, zul len we de computer moeten vertel len dat de i nformatie uit RAM gehaald moet worden . Tevens moeten we de gegevens u it ROM naar RAM kop iëren. Dit l aatste geschiedt met de M EM -i nstructie. : M EM Syntax Parameters : geen Let wel , als we deze i nstructie gebru i ken, wordt een deel van het RAM geheugen gebru i kt. Voor de sprites heeft dit als conseq uentie dat slechts de blokken 1 92 tlm 255 besch ikbaar zij n voor de opslag van sp rite-data. DESI G N
De defin itie van een teken gaat op exact dezelfde wijze i n zij n werk als de de finitie van een sprite. Met DESIGN geven we aan welk teken we w i l len veran deren. Syntax Parameters
DES I G N c,$EOOO + P * 8 c = 2 - normaal teken c = 3 - m u lti color-teken p - poke-code van het teken
@ Met de @-i nstructie bepalen we de vorm van het teken, op dezel fde wijze als bij sprites gebeurd is. Syntax
: @ ........ (normaal teken) @ .... (multi color-teken) Parameters geen
Let wel, een teken dat we op deze wijze gedefi n ieerd hebben, kunnen we niet op een g rafisch scherm zichtbaar m aken . Voorbeeld : 10 20 30 40 50 60 70 80 90 1 00 110
M EM DESIGN 2,$EOOO + 42 * 8 : R EM * -TEKEN @. . . . . . . . @ . . BB . . . . @ . B . . BB . . @B. . . B. . . @B. . . . . . . @B . . . B . . . @ . B . . BB . . @ . . BB . . . . D ESI G N 2,$EOOO + 30 * 8 : R E M '-TEKEN
41
1 20 1 30 1 40 1 50 1 60 1 70 1 80 1 90
@ . . BBBB . . @. B. . . . B. @B. B. . B. B @B . . . . . . B @B. B. . B. B @ B . . BB . . B @ . B. . . . B. @ . . BBBB . .
M et het bovenstaande prog ramma hebben we de tekens ' * ' en
42
'A'
gewijzigd.
4. GELUID
De Commodore 64 bezit een zeer geavanceerde gelu ids-c h i p i n vergelijking met andere home-computers. Er zijn d rie onafhanke l ijke stem men met een bereik van 8 octaven besch i kbaar. We zu l len i n het kort een aantal algeme ne zaken omtrent de generat ie van geluid op de Commodore 64 bespreken. Golfvorm
Geluid is, zoals we l l icht bekend, een t ri l l i ng svorm: Eén van de g rootheden die bij zo' n tri l l ing een rol spelen, is de wijze waarop een t ri l l i ng zich in de tijd voortbeweegt. Deze beweg i ngswijze noemen we de go lfvorm. I n het al ge meen gaat het h ier om een zeer comp lexe vorm, i n de praktijk altijd terug te brengen die tot de sommatie van een aantal eenvoudige golfvormen. De gel u ids-c h i p kent vier van deze golfvormen, te weten: - b lokvorm - zaagtand - t riangel - ruis E l ke golfvorm heeft zijn eigen specifieke klank. In de voorbeeldprogram ma's in Append ix B zul len de versc h i l len duidelijk worden. Geluidsenvelope
H et opwekken van een toon gesch iedt i n 4 fasen. Om te beg i n nen wordt het vol u me van 0 op het maximale gel u idsniveau gebracht (aanzwel len van een toon). Dit is de attack-fase. Daarna zakt het gel u idsniveau tot een bepaalde waarde. Deze fase heet de decay-fase en het bij behorende n iveau is het sustain-n iveau. Dit niveau wordt ged u rende een bepaalde tijd gehand haafd (sustain-fase), waarna tenslotte het geluidsniveau weer daalt tot O. De l aatste fase is de release-fase. Als we n u het gel u i dsn iveau u i tzetten i n de tijd, on tstaat er een f ig u u r die i n zijn algemene vorm de volgende gedaante bezit. Deze figuur wordt de gel u idsenvelope genoemd. De parameters die de vorm van deze f i g u u r bepalen , zij n : - maxi maal g e l u idsn iveau - attack-t ijd - decay-t ijd - sustai n-niveau - release-tijd Versch illende waarden van deze parameters resulteren i n versch i llende to nen. Zo zijn we i n staat om versc h i l lende muzieki nstru menten na te boot sen.
45
:::> « w > z (J) o :::> ...J w Cl
\--
----..
______
-
- - - sustain·niveau
I I
I I I
I I
TIJD ATTACK
DECAY
SUSTAlN
RELEASE
H et zou i n de context van dit boek te ver voeren om alle gel u idsmogelijkhe· den van de Com modore 64 te bespreken. We wil len dan ook verwijzen naar o.m. de "Commodore 64 Prog ram mer's Reference Gu ide" en h ier vervolgen met een i n leiding i n de Simon's BASIC instructies. Zoals ook geldt voor de hoogopl ossende grafische mogel ij kheden, b iedt het standaard-BASIC geen speciale i nstruct ies voor het programmeren van geluid. Wederom zijn we aangewezen op ellen lange rijen POKE-instructies. Simon's BASIC kent een vijftal i n structies om het gebru i k van gel u iden i n p rogram ma's te vergemakkel ij ken. Afgezien van het gebruik van fi lters bes· l aan deze instructies de mogelijkheden van de gelu ids-c hip vol ledig. I n dit hoofd stuk vormen de voorbeelden bij de i n struct ies samen een voor beeldprogramma. VOL
We gebru iken de VOL-inst ructie om het gel u idsn iveau in te stel len. Het gaat hier om het maximale geluidsn iveau. Dit is te vergel ij ken met het in stel len van de vol u merege laar van een versterker. Syntax VOL n Parameters : n · gelu idsn iveau (0-1 5) M et n.:;: 1 5 wordt het hoogste n iveau i ngesteld, een waarde van n:;: 0 scha· ke lt het gel uid af. Voorbeeld : 1 0 VOL 1 5
46
WAVE
Met de WAVE-inst ructie definiëren we voor e l ke stem drie d i ngen. De be lang rij kste van deze d rie is de golfvorm. Daarnaast kan , i nd ien gewenst, ge kozen worden voor de toepassing van synchronisat ie en ringmodu l atie. Voor de verklari ng van deze beg rippen wordt wederom verwezen naar de Commodore 64 Programmer's Reference Gu ide". " Syntax : WAVE n, < binai r getal > Parameters : n - nu mmer van de stem (1 -3) H et binaire getal bestaat u it 8 c ijfers (n u l len en enen). H et meest l i n kse cijfer in dit getal is bit 7, het meest rechtse is bit O. I n het onderstaande overzicht is voor elk bit het resu ltaat gegeven als d i t wordt gezet, d .w.z. dat het bit de waarde 1 krijgt. Bij al les wat niet gewenst is, moet het betreffende bit 0 zij n. bit nr.
effect
7 6 5 4 3 2 1
i nstellen van golfvorm ru i s i nstel len van gOl fvorm blokgolf i nstellen van golfvorm zaagtand i nstellen van golfvorm triangel zetten van testbit (moet altijd 0 zij n !) i nstel len ringmod u l atie i nstel len sync h ronisat ie zetten van poortbit (niet van belang)
o
Bij ringmod u l atie en synchronisat ie zijn er 2 stem men aan el kaar gekop peld, een stem met een variabele freq uentie en een stem met een constante freq uentie. De stem waarbij gekozen wordt voor één van deze twee moge l ij kheden is de stem met de variabele freq uent ie. Daardoor l igt de tweede stem vast volgens onderstaande tabel. variabele freq .
constante freq.
stem 1 stem 2 stem 3
stem 3 stem 1 stem 2
Let wel, bij gebru i k van ringmodu latie moet voor de betreffende stem een triangel-golfvorm worden gekozen. Voorbeeld : 20 WAVE 1 ,0001 0000 ENVELOPE
De ENVELOPE-instructie gebruiken we om de geluidsenvelope te definiëren. Syntax ENVELOPE n,a,d,s,r Parameters : n - numme r van de stem a - attack-tijd (0- 1 5) d - decay-tijd (0-1 5) s - sustain-n iveau (0-1 5) r - release-tijd (0-1 5) "
47
I n de onderstaande tabel zij n de diverse waarden van a, d en r gegeven, teza men met de bijbehorende tijden.
° 1 2 3 4 5 6 7 -�8 10 11 12 13 14 15
r
d
a
waarde
2 ms 6 ms 6 ms 8 ms 24 ms 24 ms 1 6 ms 48 ms 48 ms 72 ms 1 72 ms 24 ms 1 1 4 ms 1 1 4 ms 38 ms 56 ms 1 68 ms 1 68 ms 68 ms 204 ms 204 ms 80 ms 240 ms 240 ms 1 00 ms. 300 ms 300 ms -7 ������-- ���� ----750 m 2 50 m s 50 mS500 ms 1 .5 s 1 .5 s 800 ms 2.4 s 2.4 s 1 s 3s 3s 3s 9s 9s 15 s 15 s 5s 8s 24 s 24 s
Voorbeeld: 30 ENVELO PE 1 ,0,9,0,9 M U Sle
De M USIC-inst ructie i s bedoeld om een noot of een opeenvolging van noten (muziek) te definiëren. : M USIC n, < string > Syntax Parameters : n - tempo van de muziek (1 -255) M et de parameter n leggen we de tijdsduur van de maat vast. I n de variabe le < string > zijn a l le gegevens opgeslagen van de noot of noten die worden geproduceerd . Deze variabele bevat een aantal controletekens en een be paalde code voor elke noot . I n de onderstaande tabel i s een overzicht gegeven van de controletekens en h u n betekenis.
48
teken
ASCII-code
betekenis
CLR/HOM E
CH R$(1 47)
F1 F3 F5 F7 F2 F4 F6 F8
CH R$(1 33) CH R$(1 34) CH R$(1 35) CH R$(1 36) C H R$(1 37) CH R$(1 38) CH R$(1 39) CH R$(1 40)
<st ri ng> moet h iermee beg i n nen en worden gevolgd door het nummer van de betrelfende stem speel de noot i n 1 / 1 6 maat dem, 1 /8 maat dem, 1 /4 maat dem, 1 /2 maat dem, 1 maat dem, 2 maten dem, 4 maten idem, gedurende 8 maten
E l ke noot wordt voorgesteld door de betreffende letter gevolgd door het oc taafnummer (1 -8). Bijvoorbeeld, een 'C' i n het zesde octaaf wordt voor gesteld door C6. C6 noemen we de nootcode. I n d ien we een kruisnoot (halve noot hoger, zwarte toetsen op piano) wil len spelen, houden we tijdens het i ntoetsen van de nootcode de S H I FT-toets i n . H et octaafnummer wordt gevolgd door één van de bovenvermelde controle teken s (F1 tlm F8). Voorbeeld : I nd ien we een pauze wil len i n l assen, zetten we de l etter Z op de betreffende pl aats i n de stri ng (Z vervangt dus de nootcode). De stri n g moet beëindiad worden met het CLR/HOM E-teken (CH R$(1 47)), gevolgd door de letter G. 40 F$ = CH R$(1 37) 50 M$ = CH R$(1 47) + " 1 " + F$ + "C2" + F$ + " 02" + F$ + " E2" + F$ + " F2" 60 M$ = M$ + F$ + "G2" + F$ + " A2" + F$ + " B2" + F$ + CH R$(147) + "G" 70 M USIC 7,M$ Opmerki ng: Om de leesbaarheid te bevorderen is i n het voorbeel d gebru i k gemaakt van C H R$-codes. De string kan ook opgebouwd worden door de controle tekens i n de string tussen q uootjes (") te zetten. PLAY
De PLAY-i nstructie maakt het mogelijk om de met de voorgaande i nstructie gedefin ieerde muziek" ten gehore te brengen. " Syntax P LAY n Parameters : n = 0 - muziek wordt gestopt n = 1 - muziek wordt gespeeld en programma loopt n iet verder n = 2 - m uziek wordt gespeeld en prog ram ma loopt verder Voorbeeld : 80 PLAY 1 Ons programma i s n u compleet en kan worden gestart.
49
5. GESTRUCTUREERD PROGRAMMEREN
Een gestructu reerd p rogram ma biedt bepaalde voordelen. N aast een bete re leesbaarheid en een effectievere programmeri ng, heeft de structuur vaak een grotere snelheid van het programma tot gevolg. De prog rammeertaal PASCAL is een voorbeeld van een zeer gestructureerde taa l . Het standaard-BASIC van d e Commodore 64 biedt i n beg insel geen moge I ij kheden voor het gestructureerd programmeren. M et Simon's BASIC is er waarschij n l ij k voor velen onder ons een wereld opengegaan t .o.v. program mastructuren . De instructies die ons worden aangerei kt, bieden veel moge l ij kheden: zel fs de GOTO- en de GOS U B-instruct ie zij n overbod ig geworden. De n ieuwe i n struct ies zijn onderverdeeld i n 4 categorieën, namel ijk: - testen op een voorwaarde en prog ram mal ussen - procedures - variabelen - foutdetectie (Eng. " error trapp i ng") We zul len deze verdel i n g aanhouden bij de bespreking van de versc h i l lende i nstructies. TESTEN OP EEN VOORWAARDE EN P ROG RAM MALUSSEN I F . . . TH EN . . . ELSE . . .
Deze i nstructie is een u itbreiding van de uit het standaard-BASIC bekende I F . . . TH EN-instructie. Syntax Parameters
I F < testvoorwaarde > TH EN < expr.1 > : E LSE: < expr.2 > geen
I ndien aan de testvoorwaarde is vol daan, wordt u itgevoerd wat tussen T H E N en ELSE staat « expr. 1 » . I s d i t n iet het geval, wordt hetgeen dat volgt op ELS E u itgevoerd « expr.2 » . De expressies < expr1 . > en < expr.2 > kunnen expressies zijn i n de zin van het woord, doch kunnen ook prog ram masprongen zij n . Let wel , tussen ELSE e n de eropvolgende du bbele punt mag geen spatie staan ! Voorbeeld : I nd ien op een bepaald moment de gebru i ker van een programma ge vraagd moet worden of het prog ramma beëi ndigd of opnieuw gestart moet worden, kan dit met de vol gende routine:
53
10 20 30 40 50
P R I N T CH R$(1 47) PRINT "DRUK 'J' VOOR EEN N I EUWE R U N " PRINT " E LKE AN DERE TOETS VOOR E I N DE" REPEAT : G ET A$ : U NTI L A$ < > " " I F A$ = "J " THEN P R I N T "OK" : PAUSE 1 : RUN : ELSE: E N D
RCO M P
Met RCO M P ku n nen we de testvoorwaarde u i t de laatst u itgevoerde I F . . . T H E N . . . ELSE-instructie nog eens herhalen. Syntax : RCOM P : < expr.1 > : ELSE : < expr.2 > Parameters : geen De eerste expressie wordt u itgevoerd ind ien het resultaat van de test waar is, de tweede ind ien het resultaat n iet waar is. Voorbeeld : 1 0 PRINT CH R$(147) 20 PRINT "WI LT U L1 N KS- O F R ECHTSA F S LAAN (UR)" 30 REPEAT : G ET A$ : U NTI L A$ = " L" O R A$ = " R" 40 I F A$ = " L" T H E N B$ = " LI N KS" : ELSE : B$ = "RECHTS" 50 RCO M P : C$ = "WALSTRAAT" : E LS E : C$ = "ACHTERWEG" 60 PRINT "U S LAAT " ; B$;"AF, DE ";C$;" I N ." R E P EAT . . . U NTI L . . .
Deze i nstruct ie verschaft ons de mogel ijkheid om één of meer i nstructies zolang te herhalen, tot aan een bepaalde voorwaarde voldaan is. Syntax : REPEAT : < expressie > : U NTI L < testvoorwaarde > Parameters : geen De expressie mag oestaan u it een aantal prog rammaregels, zoals u it het voorbeeld zal b l ij ken. Voorbeeld : H et onderstaande programma berekent het gemiddelde van een i n te voeren hoeveelheid getallen. 10 PR I NT CH R$(1 47) 20 I N PUT "AANTAL G ETALLEN ";N 30 P R I N T 40 R E PEAT 50 PRI NT "G ETAL # " ; 1 + 1 ; : I N PUT X 60 SOMX = SOMX + X : I = I + 1 70 U NTI L I = N 80 PRI NT 90 PRINT " G E M I DDELD E VA N D E G ETALLEN :";SOMx/N
54
LOOP . . . EXIT I F . . . EN D LOOP
Net als bij de voorgaande constructie gaat het h ier om een programmalus die wordt verlaten i nd ien aan een bepaalde voorwaarde i s voldaan. We kun nen h ier echter op meer voorwaarden testen door EXIT I F i n de programma l u s een aantal malen te herhalen. De l u s wordt begrensd door LOO P en EN D LOOP. Syntax Parameters
LOOP < expressie > : EXIT I F < voorwaarde > : E N D LOOP geen
Voorbeeld : H et onderstaande programma berekent de facu lteit van een geheel positief getal , tussen 1 en 33. 1 0 PRINT CH R$(1 47) 20 I N PUT "G ETAL ";X% : X = X % 30 I F X < 1 O R X > 33 THEN PRI N T " G ETA L N I ET I N RAN G E" : E N D 40 FAC = 1 50 LOOP 60 EXIT I F X = 1 70 FAC = FAC * X : X = X-1 80 E N D LOOP 90 PRINT X% ; " ! = " ; FAC PROC E D U R ES
De GOTO- en de GOSU B-i nstructie zij n met Simon's BASIC overbod ig ge worden. We hebben namelijk de mogel ijkheid om een naam te geven aan program madelen die we l ater met deze naam aan kunnen roepen. We noe men deze program madelen proced u res. We onderscheiden 2 soorten proced u res, namelijk de begrensde en de on begrensde procedure. I ndien we een begrensde procedure aan roepen, wordt na u itvoer van de procedure teruggesprongen naar de plaats van waaruit de proced u re is aangeroepen. Dit komt dus overeen met de GOS U B i n struct ie. De aanroep van een on beg rensde proced u re heeft dezelfde fu nc tie als de GOTO-i nstructie. Voor het gebru i k van proced ures staan ons 4 i nstructies ter besc h i kking. Voor we deze gaan bespreken 0even we eerst een t i p voor een efficiënt ge bru i k van begrensde proced u res. H et i s raadzaam om deze proced u res aan het beg i n van een prog ram ma te p:aatsen. I ndien een procedure wordt aan geroepen, wordt vanaf het beg i n van het prog ramma naar deze proced u re gezocht. De procedure wordt sneller gevonden indien deze aan het beg i n van het prog ram ma staat. Het program ma wordt dus snel ler. PROC
De PROC-i nst ructie kent een naam aan een programmadeel toe. We defi n iëren h iermee d us een procedure. PROC < proced u renaam > Syntax Parameters : geen 55
Voorbeeld : 1 0 PROG B EG I N E N D PROC
M et deze i nstructie kunnen we een proced u re begrenzen. Syntax EN D PROG Parameters : geen Voorbeeld : 1 0 PROG WIS SGH ERM 20 PRINT GH R$(1 47) 30 E N D PROG CALL
De GA LL-i nstructie gebru i ken we i ndien we een onbegrensde proced u re aan w i l len roepen. Syntax Parameters
GALL < proced u renaam > geen
Voorbeeld : 1 0 GA LL BEG I N
1 00 PROG B EG I N EXEC
De EXEG-inst ructie is de tegen hanger van de GALL-i nstruct ie. H iermee roe pen we een beg rensde proced u re aan. Syntax EX EG < procedu renaam > Parameters : geen Voorbeeld : 1 0 GALL B EG I N 20 PROG WISSGH ERM 30 PRI NT GH R$(1 47) 40 EN D PROG 1 00 PROG B EG I N 1 1 0 EX EG WISSG H E R M
56
VARIABELEN
We onderscheiden bij de Commodore 64 3 soorten variabelen,: - i ntegers (gehele getal len) , b.v. A % , B % , - reële getallen, b.v. CH, K, - stri ngs, b.v. TI$, NAAM$, Een variabele is dus een soort code waaraan een bepaalde waarde is toege kend. Ter i l l ustrat ie: A % -3, B% 1 00, CH NAAM$ = " PETER" =
=
=
3.4, K
=
-5E-7, TI$
=
" 1 20000",
In het standaard-BAS IC moet elke g rootheid of parameter door een u n ieke variabele worden voorgesteld, d .w.z. d at voor versc h i l lende g rootheden ver sch i l lende letter(s) gebru i kt moeten worden. I n Simon's BASIC hebben we de mogelij kheid om een variabelenaam meer dan eens te gebru iken, zonder dat de eerste waarde verloren gaat . We spre ken hier van g lobale en locale variabelen. De g lobale variabele i s i n principe het soort variabele dat we reeds kennen u it het standaard-BAS IC. De locale variabelen kunnen beschouwd worden als h u l pvariabelen die we bijvoor beel d i n een procedure gebru i ken. H iervoor kunnen we dan i n Simon's BA SIC een naam gebru i ken van een reeds bestaande variabele. Door de be sc h i kbare commando's worden deze waarden dan n iet door el kaar gehaald; na de proced u re krijgt de variabele weer de oude waarde. We zul len nu de instructies bespreken. LOC AL
Met deze i nstructie geven we de computer te kennen dat we i n een program madeel variabelen gaan gebru i ken die reeds eerder gebru i kt zij n . De waar den van deze variabelen worden dan o p een bepaalde plaats i n het geheu gen gezet, en we kunnen de variabelen vrij gebru i ken in dit programmadee l. Syntax : LOCAL < var. 1 > , < var.2 > , ... , < var.n > Parameters : geen De LOCAL-instructie wordt dus gevolgd door alle variabe len, die we op n ieuw wil len gebru i ken. G LOBAL
I nd ien we de variabelen die we met LOCAL hebben omgeschakeld, n iet meer nod i g hebben omdat b.v. teruggesprongen wordt naar het hoofd pro g ramma, gebru i ken we deze instructie. H iermee worden namelijk aan deze variabelen h u n oude waarden weer toegekend, zoals deze waren voordat LOCA L-in structie gegeven werd. Syntax G LOBAL Parameters : geen
57
Voorbeeld : 1 0 A % = 1 23 : B = 4.567 : C$ = " H A LLO" 20 PRINT " B EG I NWAARDEN :" 30 PRINT A % , B,C$ : PRINT 40 LOCA L A % , B,C$ 50 A % = 876 : B = 3. 1 45 : C$ = "TOT ZI ENS" 60 PRINT "' LOCALE' WAAR DEN :" 70 PRINT A % , B,C$ : PRINT 80 G LOBAL 90 P R I N T "WAARDEN NA O MSCHAKELI N G NAAR ' G LOBAL'" 1 00 PRINT A % , B,C$ FOUTDETECT I E
Bij het schrijven van een prog ramma zal het iedereen wel eens overkomen dat er fouten i n het prog ramma voorkomen. Een deel van deze fouten wor den veroorzaakt doordat n iet volgens de regels" is gewerkt. H et Operating " BASI C-prog ramma af i nd ien er Systeem van de Commodore 64 b reekt het een fout wordt gesig naleerd . We krijgen dan een meld i ng op ons scherm: ?SYNTAX ERROR I N 60 Deze voorziening werkt prett ig bij de ontwikke l i n g van een programma. M aar het kan ook gebeuren dat het prog ramma afgebroken wordt ind ien de gebru i ker een ongeoorloofde handeling verricht. Als de computer informa tie naar de pri nter wil sturen en deze n iet i ngeschakeld is, wordt het pro g ramma afgebroken met de me l d i n g : ?DEVICE N OT PRESENT ER ROR Dit is erg vervelend, met name als we al veel gegevens hebben ingevoerd of als de computer reeds een lange t ijd heeft zitten rekenen. I n S i mon's BASIC is h iervoor een o plossing beschi kbaar. We kunnen name l ij k de foutdetectie van de computer u itschake len en een eigen foutroutine in ons programma opnemen. Let we l , dit is slechts zi nvol voor programma's die goed werken en beschermd moeten worden tegen afbreken. I nd ien we de foutdetectie overnemen van de Commodore 64, wordt aan twee gereserveerde variabelen een waarde toegekend ind ien er een fout op treedt. De eerste variabele, ERRLN , bevat het regel nummer waarin de fout is opgetreden. De tweede variabele, ERRN, bevat het nummer van de fout. De onderstaande tabel bevat de fouten die met Simon's BASIC gedetec teerd kunnen worden, samen met de bij behorende foutnu mmers.
58
ERRN
FOUT
1 2 3 4 5 10 11 12 13 14 15 16 17
TOO MANY FI LES FILE OPEN F I LE NOT OPEN F I LE NOT FOU N D DEVICE NOT PRESENT N EXT WITHOUT FOR SYNTAX RETU RN WITHOUT GOS U B OUT O F DATA I LLEGAL QUANTITY OV ERFLOW OUT O F M EMORY U N DEFI N ED STATEMENT BAD SUBSCR I PT RE-DI M EN S I O N E D ARRAY DIVISION BY ZERO I LLEGAL DI R ECT TYPE M I SMATCH STR I N G TOO LO N G
18
19 20 21 22 23
De betreffende i nstructies zijn de volgende. O N ERROR . . .
Met deze i nstructie kunnen we de foutdetect ie van de Commodore 64 over nemen. : ON ERROR: < programmasprong > Syntax Parameters : geen I ndien er een fout optreedt i n het program ma, wordt < programmasprong > ui tgevoerd. NO ERROR
De NO ERROR-instructie maakt de laatst gebru i kte ON ERROR- i n struct ie ongedaan . Syntax Parameters
N O ERROR geen
Voorbeeld : 1 0 ON ERROR: CA LL FOUT 20 : 30 PRI NT " EEN FOUT WORDT G E FORCEERD" : PRINT 40 PAUSE 1 50 A 0 : B = 1 /A 60 : 70 PROC FOUT 80 P R I NT "ER I S G E DEELD DOO R '0'" : PRINT 90 PRI NT " R EG ELN U M M E R : "; ERRLN 1 00 PRINT " FOUTN U M M ER : ";ERRN 1 1 0 NO ERROR =
59
OUT
Deze instructie bewerkstel l i gt het tegengestelde van de eerste i nstructie. De foutdetectie wordt weer teruggegeven aan de computer. Deze instructie moet altijd worden voorafgegaan door NO ERROR. : OUT Syntax Parameters : geen A l s het voorgaande voorbeeldprogramma beëind igd is, toetsen we i n : OUT (gevolgd door R ETURN)
60
6. PROGRAMME ERHULPEN
I n dit hoofdstuk zijn alle instructies opgenomen, d ie op grond van h u n fu nc tie n iet i n een van de andere hoofdstu kken passen. Het zijn i nstruct ies d ie op een of andere wijze het programmeren vergemakkel ijken. Ze staan i n de volgende tabel samen met een korte omschrijving. AT AUTO CENTRE CGOTO COLD DELAY DISAPAI S ECU R E DUMP F ETCH FI N D I N KEY KEYI DISPLAY Ll N M ERGE OLD O N KEYI D I SAB LEI R ESU M E OPTION PAG E PAUSE R E N U M BER RESET TRACEl R ETRACE USE
Posit ioneri ng van de cursor Automat ische regeln ummering Centreren van tekst op het scherm GOTO met variabel regel n u mmer Reset van de computer Vertragen van de l ist-snel heid Onzichtbaar maken van programma-regels Uitgave van alle variabelen en hun waarden Gecontroleerde wijze van I N PUT Zoeken naar bepaalde code Controle op functietoetsen Programmeren van de functietoetsen Momentane rege l van cursor Samenvoegen van programma's Tegenovergestelde van N EW Gecontroleerde w ijze van I N PUT Alle S i mon's BASIC i nstructies in i nverse video Pag i neri ng van een program ma-l isting Pauze i n een programma Hernummeren van een programma Een pointer zetten naar een regel met DATA H et volgen van het programmaverloop Geformateerde getal lenu itvoer
I n deze volgorde worden de instruct ies besproken. AT
M et de AT-instructie kunnen we de plaats op het beeldscherm i nstel len, waar i nformatie moet worden neergezet of worden opgevraagd . De AT- i n structie moet i n combi natie met de P R I NT-i nstructie gebru i kt worden. Syntax PRI NT AT(x, y) < tekst > Parameters : x - kolomn u mmer y - rij nummer De tekst wordt op het beel dscherm geprint op de gespec ificeerde plaats. Voor de def i n itie van het kolom- en rij n u mmer verwijzen we naar hoofdstu k 2. 63
Voorbeeld : 10 20 30 40 50 60 70
P R I N T C H R$(1 47) PRINT AT(5,22) " NAAM ";: I N PUT N M$ PRI N T AT(1 0,5) N M$ : FCH R 22,5,34,1 ,32 PRINT AT(5,22) "ADRES ";: I N PUT AD$ PRI NT AT(1 0,7) A D$ : FCH R 22,5,34,1 ,32 PRINT AT(5,22) "WOON PLAATS ";: I N PUT WP$ PRINT AT(1 0,9) WP$ : FCH R 22,5,34,1 ,32
AUTO
De AUTO-inst ructie gebru i ken we n iet i n een prog ram ma, maar voordat we een programma intoetsen. De prog rammaregels worden dan automatisch genummerd. Na het geven van de AUTO- i nstructie verschijnt het eerste re gelnummer. We typen dan de eerste regel i n en s l u iten deze (uiteraard) af met een R ETU R N . Daarna versch ijnt het volgende regel n u mmer. Als het programma helemaal is i ngetypt, geven we na het verschenen regeln um mer slechts een R ETU R N . De automatische regeln ummering wordt dan u it geschakeld. Syntax Parameters
AUTO s,i s - eerste rege l n u mmer i - het n umerieke versch i l tussen opeenvo lgende re gelnumme rs
Voorbeeld : Alle programma's i n dit boek hebben 1 0 als eerste regel n u mmer en de regel n u m mers gaan telkens met 1 0 omhoog. We geven dan dus in: AUTO 1 0, 1 0
(gevolgd door RETU RN)
CENTRE
Deze i nstruct ie heeft de functie om een stri ngvariabele i n het m idden van de betreffende regel op het beeldscherm te zetten. Het is een bijzondere vorm van de PRI NT-i n st ructie. Syntax : CENTRE < string > Parameters : geen De variabele < string > wordt gecentreerd op het beeldscherm gezet. Let wel , tekst na een CENTRE-i nstruct ie wordt n iet op een nieuwe regel ge pl aatst. Voorbeeld : 1 0 PRINT CH R$(1 47) 20 CENTRE " DIT IS G EPRI N T" : PRINT 30 CENTRE " M ET D E I NSTRUCTI E" : PRINT 40 CENTRE "CENTRE" : PRINT
64
CGOTO
De CGOTO-instructie is een bijzondere vorm van de GOTO- i n structie. Daar waa r de GOTO-inst ructie moet worden gevolgd door een bepaald regelnum mer, mag CGOTO worden gevolgd door een willekeu rige n u merieke expres sie. Syntax : CGOTO < express ie > Parameters : geen De uitkomst van (expressie) levert d u s het regelnu mmer waar naar toe wordt gesprongen. Voorbeeld : 1 0 PRINT C H R$(1 47) 20 I N PUT " G EE F EEN G ETAL TUSSEN 30 I F A % < 1 O R A% > 3 THEN R U N 40 CGOTO 40 + 1 0 * A % 50 PRINT "SPRONG NAAR R EG E L 50" 60 PRINT "SPRONG NAAR REG E L 60" 70 PRINT "SPRONG NAAR REG E L 70"
1 EN 3";A% : END : EN D : EN D
CO LD
M et CO LD kunnen we de computer resetten", d.w.z. dat de computer i n de zel fde u itgangspositie komt als na "het aanzetten. Syntax COLD Parameters : geen Voorbeeld : Laten we het volgende eens i nvoeren: COLD
(gevolgd door R ETURN)
De com puter meldt zich n u met de boodschap: * * * EXPAN DED CBM V2 BASI C * * * 307 1 9 BYTES FREE DELAY
De DELAY-i nstructie geeft ons de mogelijkheid om de snelheid waarmee een prog ramma op het beeldscherm gel ist wordt, te veranderen. Tijdens het l i sten moeten we een van de S H I FT-toetsen b l ijven vasthouden (of de S H I FT-LOCK toets indru kken). : DELAY n Syntax Parameters : n - maat voor de l i stsnelheid (1 -255) De snel heid is groter naarmate de waarde van n kleiner is. Voorbeeld : D E LAY 25
(gevolgd door R ETURN) 65
DISAPA
M et de DISAPA kunnen we regels i n ons prog ramma onzichtbaar maken, door deze regels te laten beg i n nen met deze i nstruotie. H et aantal tekens i n een regel dat op deze wijze onzichtbaar kan worden gemaakt, bedraagt maximaal 30. Syntax : DISAPA Parameters : geen Als we de betreffende regels hebben voorzien van deze inst ructie, kunnen ze onzichtbaar worden gemaakt met de volgende i nstructie.
S EC U R E
Deze i nstructie heeft tot doel a l l e met DI SAPA beg i n nende regels onzicht baar te maken. Syntax Parameters
SECU R E n n=0
Voorbeeld : 10 20 30 40 50 60
PRINT CH R$(1 47) I N PUT " G E E F TOEGAN GSCODE " ;A$ DISAPA:I FA$ = " HA LLO"T H E N R = 60: ELSE: R = 50 DI SAPA:CGOTO R DISAPA: PRI NT"GEEN TOEGAN G " : PAUS E 1 : E N D P R I NT "WELKO M "
I n d ien we d i t programma n u listen, zien we het volgende: 10 20 30 40 50 60
P R I NT CH R$(1 47) I N PUT "GEEF TOEGAN GSCODE " ;X$ DISAPA: : : : I FA$ = " H A LLO"T H E N R = 60: ELSE:R = 50 DISAPA::::CGOTO R DISAPA:: : : P R I N T"G EEN TOEGAN G " : PAUS E 1 : E N D P R I N T "WELKO M "
Achter DISAPA staan n u 4 d ubbele punten i n plaats van 1 . Dit i s normaal. We geven n u de i n struct ie: SECU R E 0
(gevo lgd door RETURN)
Als we het prog ramma nog eens l i sten, zien we dat de regels 30, 40 en 50 sch ij nbaar geen programma-code bevatten. 1 0 PRINT CH R$(1 47) 20 I N PUT "GEEF TOEGA N GSCODE " ;X$ 30 40 50 60 PRINT "WELKO M "
66
DUMP
De D U M P-inst ructie geeft een l ijst van alle variabelen (geen array variabelen) en h u n actuele waarden, d ie i n een BASI C-programma gebru i kt zij n. Dit is een zeer bru i kbaar h u l pm iddel bij het zoeken van fouten i n een programma. Syntax DU M P Parameters : geen Voorbeeld : H et vol gende prog ram ma typen we i n en runnen we een keer (het programma heeft geen functie). 1 0 A % = 23 : B % = 1 : C % = -345 20 A = 1 .2345 : B = -1 .2E23 : C = 0. 1 23 30 A$ = "TEST" : B$ = " DU M P" Vervo lgens voeren we i n DUMP
(gevolgd door R ETURN)
Op het scherm verschijnt n u een l ijst van de variabelen u it het prog ram ma en de waarden die we eraan hebben gegeven. FETCH
De FETCH-instruct ie is een variant o p de I N PUT-i nst ruct ie. We hebben n u d e mogel ij kheid o m d e l engte e n soort van de i nvoer t e spec ificeren. E l ke andere i nvoer wordt n iet geaccepteerd. Syntax : FETCH CH R$(n), I , < string > Parameters : n - specificat ie van de soort i nvoer I - maximale l engte van de i nvoer De ingevoerde i nformatie wordt opgeslagen i n de variabele < string > . I n de onderstaande tabel i s een overzicht gegeven van de versc h i l l ende waarden van n . n
soort i nvoer
17 19 29
numerieke teke ns g rote letters (uppercase) g rote en kleine letters (upper en lowercase)
Let wel, tekst na de FETCH-instructie wordt n iet op een n ieuwe regel ge plaatst. Voorbeeld : 10 20 30 40 50 60 70
PRINT C H R$(1 47) PRINT " N = 1 7" FETCH CH R$(1 7),1 0,A$ : P R I N T PRINT " N = 1 9" FETCH CH R$(1 9),1 0,A$ : P R I N T PRINT " N = 29" FETCH CH R$(29), 1 O,A$ : PRI NT 67
FI N D
Met F I N D kun nen we i n een BAS IC-programma zoeken naar een bepaalde code. I nd ien deze wordt gevonden, versch ijnen de betreffende regel n u m mers op het bee ldscherm. Syntax : FI N D < code > Parameters : geen Let wel, tussen FI N D en hetgeen waarop gezocht moet worden, mag geen spatie staan, omdat dan ook op deze spatie wordt gezocht. Voorbeeld : Typen we de volgende prog rammaregels eens i n . 1 0 A$ = " H A LLO" 20 B$ = " H A R RY" 30 C$ = "TOT ZIENS" Geef vervo l gens in : FI N D" H A
(gevolgd door R ETURN)
Op het scherm versch ijnen nu de regelnummers 1 0 en 20. De code " H A komt namel ijk i n deze beide regels voor. I N K EY
Deze i n struct ie geeft ons de mogel ijkheid om te testen of er een funct ie toets is i nged rukt en zo ja, wel ke. Dit is erg brui kbaar i n zogenaamde menu gest u u rde programma's. We ku n nen dan selecteren m.b.v. de fu nct ietoet sen. Syntax : < variabele > Parameters : geen
=
I N KEY
Aan < variabele > wordt de waarde van de i ngedrukte funct ietoets toege kend: de waarde 0 voor geen toets, de waarde 1 voor functietoets 1 , etc. Voorbeeld : 10 20 30 40 50
P R I N T CH R$(147) PRINT " D R U K EEN FUNCT I ETO ETS I N " REPEAT : A = I N KEY : U NTI L A < > 0 PRINT PRINT " U H E E FT FUNCTI ETOETS ";A;" I N G EDRUKT"
K EY
I n S i mon's BASI C is het mogel ij k om aan de functietoetsen een bepaalde functie toe te kennen. E l ke keer als we die toets i ndrukken, wordt deze fu nc tie u itgevoerd. De functie wordt door m iddel van een string toegekend aan een functietoets en deze functie versch ij nt op het scherm als we de toets i n d ru kken .
68
Syntax Parameters
KEY n, < string > n - n u m mer van de functietoets
Voorbeelden : KEY 1 ," LOAD" + CH R$(34)
(gevolgd door R ETU RN)
Elke keer als we nu op F1 d rukken, versch ij nt LOAD" op het scherm (CH R$(34) i s de code voor "). KEY 3,"RU N " + CH R$(13)
(gevolgd door R ETURN)
I n toetsen van F3 zorgt er nu voor dat het programma i n het geheugen wordt gerund (CH R$(1 3) is de code voor een R ETURN). Enige andere voorbeelden: KEY 5," LlST" + CH R$(1 3) ; l i sten van het programma met F5 KEY 7,"DIR" + CH R$(34) + "$" + C H R$(34) + CH R$(1 3) ; d i rectory DISPLAY
We kunnen de fu ncties onder de functietoetsen die we met KEY hebben i n gevoerd, op het beeldscherm zichtbaar maken met de DIS PLAY-i nst ructie. Syntax DISPLAY Parameters : geen Voorbeeld : De i n de vorige voorbeelden geprogrammeerde funct ietoetsen kun nen we tonen door in te toetsen: DISPLAY (gevolgd door R ETURN) Op het scherm verschijnt dan een overzicht van de functietoetsen en h u n functie. We zien tevens dat e r 1 6 functietoetsen gedef i n i eerd kunnen wor den. Dit zij n: Functietoets 1 = F1 Functietoets 2 = SH I FT + F1 Functietoets 3 = F3 Functietoets 4 = S H I FT + F3 Functietoets 5 = F5 Funct ietoets 6 = SH I FT + F5 Functietoets 7 = F7 Fu nct etoets 8 = SH I FT + F7 Fu nct etoets 9 = C = + F1 Funct etoets 1 0 = SH I FT + C = Funct etoets 1 1 = C = + F3 Funct etoets 1 2 = S H I FT + C = Funct etoets 1 3 = C = + F5 Funct etoets 1 4 = S H I FT + C = FunctIetoets 1 5 = C = + F7 Functietoets 1 6 = S H I FT + C =
+ F1 + F3 + F5 + F7
69
LlN
M et Ll N kun nen we controleren o p welke regel de cu rsor zich bevindt, of be ter gezegd de regel waar de volg ende i n- of uitvoer wordt opgevraagd respectievelijk neergezet. Syntax : < variabele > = Ll N Parameters : geen Aan < variabele > wordt het rij nu mmer (zie voor betekenis hoofdstuk 2) toe gekend. Voorbeeld : 1 0 PRI NT C H R$(1 47) 20 A = I NT(RN D(O) * 20 + 1 ) 30 FOR 1 = 1 TO A : PRINT : N EXT I 40 PRI N T " DIT IS R EG EL N R. " ; L l N M ERGE
De M ERGE-i n st ructie is bedoeld om 2 prog ram ma's samen te voegen . H et eerste programma bevindt zich i n het geheugen van de computer. H et twee de programma staat op cassette of d i skette en wordt i ngelezen en aan het eerste programma "gep lakt". Syntax : M ERGE < program manaam > ,a Parameters : a - apparaatn ummer (1 = cassette, 8 = d isk) let wel , het is noodzakelijk dat het hoogste regel n ummer i n het eerste pro g ramma lager is dan het laagste regel nummer van het tweede programma. Voorbeeld : M ERGE " Fl lE 2" ,8
(gevolgd door R ETURN)
H et programma F i lE 2 wordt i ngelezen van diskette en gekoppeld aan het i n het geheugen staande programma. OlO
Deze inst ructie i s het tegenovergestelde van de i n struct ie N EW. I ndien een programma wordt gewist door N EW of door een reset m iddels COlD, kan dit ongedaan worden gemaakt met de OlD-i nstructie. Syntax O lD Parameters : geen ON K EY
De ON KEY-inst ructie stelt ons i n staat om te testen of een bepaalde toets wordt i ngedrukt. Dit is te vergel ijken met de I N KEY-instructie voor de fu nc tietoetsen . We spec ificeren bij dit com mando de toetsen waarop moet wor den getest. 70
Syntax Parameters
: ON KEY : geen
< stri ng > , : < programmasprong >
De variabie < stri n g > bevat de tekens (toetsen) waarop moet worden getest. Als een van de gespecificeerde toetsen is i nged rukt, wordt < p rogrammasprong > u itgevoerd en krijgt de status-variabele ST de (ASCI I)-waarde van deze toets. I ndien de ON KEY-instructie is gebru i kt moet worden afgesloten met de D I SAB LE- i n structie.
DISABLE Deze i n structie beë i n d i gt de ON KEY- i n structie. Deze moet worden gebru i kt omdat de computer zelfs nadat een gewenste toets i s i n g edrukt, nog steeds het toetsenbord u itleest (i nterru pt). Syntax Parameters
D ISAB LE : geen
R ESUM E De RESUM E-i n structie activeert de laatst gebru i kte O N KEY- i n structie, na dat deze is beëind igd met D I SABLE. Syntax Parameters
RESU M E : geen
Voorbeeld : 1 0 CALL B EG I N 20 PROC I N IT 30 PRI NT CH R$(1 47) 40 PRI NT "(0)1 RECTORY VAN SCH IJ F" 50 PRINT "(E) I N DE" 60 E N D PROC 70 PROC BEG I N 80 EXEC I N IT 90 A$ = " D E" 1 00 PROC KEUZE 1 1 0 O N KEY A$,:CALL EXIT 1 20 CA LL KEUZE 1 30 PROC EXIT 1 40 D ISABLE 1 50 I F CH R$(ST) = "E" T H E N EN D 1 60 DI R"$ 1 70 P R I N T : P R I N T 1 80 PAUSE " DR U K RETU RN ",255 1 90 EXEC I N IT 200 R ESU M E
OPTION Met OPTION kunnen we de Simon's BASI C i n structies d i e in een program ma voorkomen i n i nverse video laten versc h i j nen t ijdens het l i sten . 71
Syntax : O PTION n Parameters : n = 1 0 Deze functie wordt uitgeschake ld met OPTION O. PAG E
M et PAG E kunnen we een prog ramm a-l isting verdelen i n pag i na's van gel ij ke g rootte. Na het geven van LIST verschijnt dan de l i st i ng pagina voor pag i na op het bee ldscherm. Syntax : PAG E n Parameters : n - lengte van elke pag i na i n schermregels I n d ien een pag i na van de l isting op het scherm staat, d ru kken we op de R ETU RN-toets om de volgende pag i na te krijgen. H et pagi neren wordt u itgeschakel d met PAG E O. PAUSE
Deze i nstructie gebru i ken we om op een bepaalde plaats in een prog ram ma een pauze i n te lassen. We kunnen dezelfde i nstructie gebru i ken om een bood schap op het scherm te zetten. Syntax : PAUSE < stri n g > ,n Parameters : n - lengte van de pauze (i n seconden) De variabele < stri ng > bevat de boodschap die op het scherm wordt gezet. Deze bood schap mag worden weg gelaten. De pauze in het programma kan worden afgebroken door op de R ETU RN toets te drukken. Voorbeeld : 1 0 FOR I = 0 TO 9 20 PRI NT CH R$(1 47) 30 PRINT " N " " N * N " " N * N * N " 40 PRINT 50 FO R J = 1 T0 1 0 60 N = 1 0 * I + J 70 PRINT N , N * N , N * N * N 80 N EXT J 90 PAUSE 3 1 00 N EXT I ,
,
R E N U M BER
Met de R EN U M B ER-instructie kunnen we de regels in een BASIC programma hern ummeren. Syntax R E N U M BER s,i Parameters : s - eerste rege l nummer i - afstand tussen regel num mers 72
Let wel, deze i nstructie past de regelnummers i n b.v. GOTO- en GOSU B i nstructies n iet aan, zodat enige voorzichtigheid is geboden. Voorbeeld : We typen eerst het volgende prog ramma eens i n . 30 1 00 1 50 999
PRINT "TEST" PRI NT "VAN DE" PRI NT " R EN U M B ER-" PRINT " I N STRUCTI E"
We hernum meren dit prog rammma door in te voeren: R E N U M BER 1 0, 1 0
(gevolgd door R ETURN)
I ndien we n u het program ma l isten, zien we het volgende op het beeld scherm verschijnen: 1 0 PRI NT "TEST" 20 PRI NT "VAN DE" 30 PRI NT " R E N U M BER-" 40 PRINT " I N STRUCTI E" R ESET
Deze i nstructie gebru i ken we om de poi nters naar de DATA- statements te wijzigen. Dit is hand ig als we slechts een deel van de DATA-statements no d i g hebben: we hoeven dan n iet a l le voorgaande DATA-statements eerst i n te lezen. Tevens kunnen we dezelfde DATA vaker i n lezen. Syntax : R ES ET < regel n u m mer > Parameters : geen De DATA-pointer wijst naar de gespec ificeerde prog rammaregel. Voorbeeld : 1 0 PRINT CH R$(1 47) 20 PRINT "ADRES� N-B ESTA N D" 30 PRINT : PRINT "GEG EVENS AANWEZIG VAN " 40 PRINT 50 DATA J A N , P I ET, KLAAS 60 FOR I = 1 TO 3 70 R EAD A$ : PRI NT I;SPC(3);A$ 80 N EXT I 90 PROC I NVOER 1 00 P R I N T : I N PUT "WELKE G EG EVENS (1 -3)";A % 1 1 0 I F A % < 1 O R A % > 3 T H E N CALL I NVOER 1 20 I F A% = 1 T H E N R ES ET 1 90 1 30 I F A % = 2 T H E N R ESET 200 1 40 I F A % = 3 T H E N R ESET 2 1 0 1 50 P R I N T " NAAM ";: R EA D A$ : P R I NT A$ 1 60 PRINT "ADRES";: R EA D A$ : P R I N T A$ 1 70 PRINT "WOON PLAATS";: R EA D A$ : PRINT A$ 1 80 E N D 1 90 DATA J A N V ISSER,STATI O N SP LEI N 23,AM ERS FOORT 200 DATA P I ET VOS,MOZARTLAAN 1 2,AR N H EM 21 0 DATA KLAAS D E BO ER,ESWEG 1 , DEN H E LDER
73
TRACE
De TRAG E-instructie is een h u l pmiddel bij het zoeken van fouten in een pro g ramma. We kunnen n u een programma t racen, d.w.z. dat we het program maverloop kunnen volgen. I n de rechterbovenhoek van het beel dscherm is een venster zichtbaar waarin het regelnummer is aangegeven van de regel d i e op dat moment wordt u itgevoe rd . Syntax TRAGE n Parameters : n = 1 0 - i nschakelen TRAGE n = 0 - uitschakelen TRAGE Om een prog ram ma te t racen moeten we eerst de TRAGE-i nstructie geven en daarna het prog ram ma starten. R ETRACE
M et R ETRAGE kunnen we de TRAGE-modus weer i nschakelen nadat we het programma hebben onderbroken met de RUN/STOP-toets om b.v. correc t ies aan te brengen i n een prog ram ma. Syntax R ETRAGE Parameters : geen USE
De USE-inst ructie geeft ons de mogelijkheid om getal len geformateerd op het beeldscherm te zetten. Dit is gemakkelijk bij het uitpri nten van reële ge tallen, we kunnen dan b.v. opgeven hoeveel cijfers we achter de komma w i l len hebben. : USE < formateerstring > , < stri ng > Syntax Parameters : geen De formateerstring heeft de volgende gedaante: "# # # # . # # # #" H et aantal # -tekens l i n ks en rechts van de dec i male punt, geeft aan hoeveel posities voor en achter de punt worden getoond. De variabele < string > is de stri ngvoorstel l ing van de te tonen n umerieke variabele. N u merieke varia belen kunnen in een stri ng worden omgezet met de STR$-i nstructie. H et is ook mogelijk om tekst tussen te voegen, we krijgen dan bijvoorbeeld de vol gende syntax: USE " # # < tekst > . < tekst > # # # # " , < string > Let wel , tekst na de USE-i nstruct ie wordt n iet automatisch op een nieuwe regel geplaatst. Voorbeeld : 1 0 PRI NT GH R$(1 47) 20 A = 23 . 1 6548 : A$ = STR$(A) 30 USE " # # # # # . # # ",A$ : PRINT :PRI NT 40 A$ = "23 . 56" 74
50 USE " # # # # G U LDEN . # # CENT" ,A$ 60 PRI NT : PRINT 70 FOR I = 1 TO 1 0 80 A$ = STR$(1 0000 * R N 0(0)) : B$ = STR$(1 0000 * R N 0(0)) 90 USE " # # # # # # . # # # # # # " ,A$ : USE " # # # # # # . # # # # # # " , B$ : PRINT 1 00 N EXT I
75
7. REKENKUNDIGE INSTRUCTIES
We kennen van het standaard-BASIC van de Commodore 64 reeds een aan tal rekenkundige instructies, zoals de A N D-, de I N T- en de SGN-instructie. l n d it verband zullen we onder een rekenkundige i n structie al d ie inst ructies verstaan, die een bewerking op of tussen getal len voorstellen. In Simon's BASIC zijn er 6 extra rekenkund ige instructies besch i kbaar, on der te verdelen naar de soort bewerking: - deling van positieve gehele getal len (DIV en M O D) - breukdeel reëel getal (FRAC) - conversie van getallen naar een ander talstelsel (% en $) - Booleaanse operator (EXOR) Deze 6 inst ructies worden i n de bovenvermelde volgorde besproken. DIV
De DIV-instructie levert het gehele resultaat van de deling tussen twee posi tieve gehele getal len. : DIV(x,y) Syntax Parameters : x - deeltal y - deler x en y geheel en positief MOD
M et deze instructie kunnen we de rest van een deling tussen twee positieve gehele geta l len berekenen. Syntax MOD(x,y) Parameters : x - deeltal y - deler x en y geheel en positief Voorbeeld : 10 20 30 40 50
PRINT C H R$(1 47) I N PUT "DEELTAL ";X% : PRINT I N PUT " DELER ";Y% : PRINT PRINT " R ESU LTAAT : " ; DIV(X % ,Y%) PRINT " R EST : " ; M O D(X % ,Y % )
79
FRAC
De FRAC-i n st ructie is de tegen hanger van de I N T-i nstructie. Daar waar I N T het gehele getaldeel van een reëel getal oplevert, resulteert FRAC i n het breu kdeel van d at getal. Syntax FRAC(x) Parameters : x - getal Voorbeeld : 1 0 PRINT C H R$(1 47) 20 PI = 3. 1 41 5927 30 PRINT " G ETA L = ";PI : PRINT 40 PRINT " G E H EEL G ETA LDEEL = ; INT(PI) 50 PRINT " BREUKDEEL = " ; FRAC(PI) "
Met deze i nstructie kunnen we binaire getal len omzetten i n getallen u it het tiental l i g stelse l . H et binaire getal moet bestaan uit 8 cij fers (nul len en enen). Syntax Parameters
% < binair getal > geen
Voorbeeld : Om het deci male equ ivalent van het binaire getal 1 01 001 1 0 te bere kenen, toetsen we i n : PRINT % 1 01 001 1 0
(gevolgd door R ETURN)
Resultaat : 1 66
$
Ook met deze instructie kunnen geta l len worden geconverteerd. Het betreft h ier de omzetting van een hexadec imaal getal i n een deci maal getal . H et hexadeci male getal moet bestaan u i t vier tekens (cij fers 0-9 en letters A-F). Syntax $ < hexadec i maal getal > Parameters : geen Voorbeeld : I nd ien we de deci male waarde van het hexadeci male getal AOB7 wil len berekenen, toetsen we i n : PRINT $AOB7 Resultaat : 41 1 43
80
(gevolgd door R ETURN)
EXOR
De EXOR-i nst ructie is een zogenaamde Booleaanse bewerking. We kennen reeds u it het standaard-BASIC de Booleaanse bewerkingen A N D, OR en N OT. Deze instructie verschaft ons de mogel ijkheid om tussen twee getal len (0-255) de excl usive or" uit te voeren. Dit werkt als volgt. Beide getallen " worden eerst omgezet in binaire vorm (8-bits). Vervolgens worden de cor responderende bits met e l kaar vergeleken. Alleen als beide bits verschil lend zij n, wordt het betreffende bit i n het resu lterende getal gezet (1 ge maakt). Tenslotte wordt het resultaat (binair) weer omgezet i n een deci maal getal . Syntax : EXOR(x,y) Parameters x,y - getal len x en y geheel en tussen 0 en 255 Voorbeeld : Wat is het resu ltaat van een Exc l usieve O R tussen de getallen 76 en 69: 76 = 0 1 001 1 00 69 = 0 1 0001 01 -----
0000 1 001
=
EXOR
9
Dit controleren we even met de computer door in te toetsen: PRINT EXOR(76,69)
(gevolgd door R ETURN)
Resu ltaat: 9
81
8. IlO-INSTRUCTIES
S i mon's BAS IC bezit een aantal i nstructies die de comm u n i catie tu ssen de computer en de diverse in- en uitvoerapparaten (Eng . I n putiOutput-devices) vergemakkel ijken. H et i nvoerapparaat is het apparaat van waaru it i nformat ie naar de compu ter wordt gest u u rd . Normal iter is dit het toetsenbord , maar we kunnen ook denken aan het laden van prog ram ma's van de cassetterecorder of van de d iskdrive. I n dit geval is dus de cassetterecorder resp. de d i skdrive het in voerapparaat. Het u itvoerapparaat is het apparaat waarnaar de computer zijn informat ie st u u rt . Voorbeelden zij n het beeldscherm, de printer en de d i skd rive. We geven een overzicht van de com m u n icatiemogelijkheden waarvoor Si mon's BASIC i nstructies biedt. Invoerapparaten: -
d i skdrive
het i n lezen van de d i rectory van een d iskette.
- cassettel d i skd rive
het i n lezen van een beeldscherm i nhoud (tekst).
- l ichtpen
het i n lezen van de positie van de pen op het beeld scherm.
- joystick
•
- paddies
het i n lezen van de joyst ick-waarden (richting en vuu rknop). het inlezen van de paddle-waarden (positie en vuur knop) . .
Uitvoerapparaten:
- diskd rive
het sturen van d iskinstructies.
- cassettel d iskd rive
het opslaan van een beeldscherm i n houd (tekst).
- pri nter
het afdrukken van de i n houd van een tekstscherm c.q. een grafisch scherm.
De h ardware van de Commodore 64 bevat een aantal com ponenten d i e een zekere IlO-functie bezitten. H iertoe behoren o.a. de video- en de gel u ids chip. De startadressen van deze beide c h i ps zijn i n Si mon's BASIC gedefi n ieerd als constanten: G RAPH ICS
= 53248 (startadres videoc h i p)
SOU N D
= 54272 (startadres gelu ids-c h i p)
85
COpy
Deze i n structie stu u rt de inhoud van het beeldscherm (afbeelding op hoog oplossend scherm) naar de pri nter, Syntax : COPY Parameters : geen Let wel, de 'COPY'-inst ructie werkt n iet op alle printers, Voorbeeld : 1 0 H I RES 1 ,0 , 20 FOR 1 = 0 TO 1 00 STEP 5 30 Ll N E I + 60, 1 00, 1 60, 1 00 - 1 , 1 40 Ll N E 260-1 , 1 00 , 1 60, 1 00 - 1 , 1 50 Ll N E 1 + 60, 1 00, 1 60 , 1 00 + 1 , 1 60 Ll N E 260-1 . 1 00. 1 60, 1 00 + 1 , 1 70 N EXT I 80 COPY
11
" 11' ,I I.
,� I I �'
," 1 - - 1 �;' � � - -� � . � ' �� - ... - �.\�' . ..' . . .., I../.� .. ·. ·'� � . II " ,, � . ,, �I. .. .� �� ,j. ol .. .'1, �� �. . ... • •� _: . ... .... . . .;.., .,; , , :r:_'�: �... . .. .. ... . .." ..,,:... . .... ...-...... . .. .... .:...,.. . . _. .. . . . . -...-........ .. ..w _ ... .. _ • • • • - _ ':'; -' _ . .. ...... '-:';' . -.
'
'
... ,,:.. . . .-:''' Ii.
_ .
• •
.. .. ...... _ ..... .. .. -_ _ _ _ Mr.. _ _ • • • • • • • • _ _ .,... _ -••••••••-.. ... ...=_:� _-� .. "f&.. -::_- ;-:. - .- -... ... .. ... . - .;-: -. . . . . ..... ... pr. ....- _"'!... ... ..... .... ... ... ..... . . .. ......r'!"__.. . _ � .. .. �.. . � . . ... ...-
�
.
o
_ ...
_ _ _ _
·
.
..
. ,.. ,;" . ... ..... .. . . �:. .o; . • 1'" .r" -' .••• .-...• ... ..lil "'�J r r .�•�� . ....IL.. . . . ., ,� �. .' ',� � I . .. .. , 1 1 �,' '. . ·.,,�" ".... ... ' ,I, . ,: . � __�� � . .� � _ _ � t. · •
•
.
',1__1,' � " �II " .I I· "", 11 .
DIR
M et deze i n st ructie wordt de d i rectory van een diskette op het beeldscherm weergegeven zonder dat het i n het geheugen staande BASI C-prog ramma oversch reven wordt.
86
Syntax : DI R "$" Parameters : geen I n de syntax mag '$' desgewenst gevolgd worden door een " wi ldcard constructie" (zie h iertoe uw d iskdrive-hand leidi ng). De wi ldcard" moet van " het '$'-teken worden gescheiden door een d u bbele punt. Voorbeeld : Om de d i rectory van d iskette in te lezen, voeren we i n : DI R"$"
(gevolgd door R ETURN)
DISK
M et ' DISK' kunnen we op korte en eenvoudige wijze instructies naar de d i sk d rive sturen. Syntax : DISK < string > Parameters : geen De variabele < stri ng > bevat het d iskcommando. De vergelijking tussen het formateren van een d iskette i n Simon's BASI C (eerste programma) e n i n het Commodore V2 Basic (tweede programma) l aat zien: 1 0 DISK " N O:TEST,64" 1 0 OPEN 1 5,8, 1 5 20 PRINT # 1 5, " N O:TEST,64" 30 C LOSE 1 5 H et 'DISK'-commando zorgt e r dus voor dat het d i skcommando-kanaal wordt geopend, het d iskc0mmando n aar de d rive wordt gestuurd en het d iskcommando-kanaal we.ar wordt gesloten. H R DCPY
M et de H R DCPY-instructie kan de beeldsc herm i nhoud (tekstmodus) naar de p ri nter worden gestu u rd . Syntax : H RDCPY Parameters : geen I n tegenste l l i ng tot de COPY-i nstruct ie werkt deze i nstructie wel op alle pri nters. Voorbeeld : 10 20 30 40
PRINT CH R$(1 47) FI LL 5,5,30,1 5,46,0 PRI NT AT(1 2, 1 0) "SIMON'S BASIC" H R DCPY
87
JOY
Aan de variabele ' J OY' is de status van de joystick in controlepoort 2 toege kend. Syntax : < variabele > Parameters : geen
=
J OY
I n de onderstaande tabel is voor e l ke joystick-status de waarde van 'JOY' gegeven. De waarden tussen haakjes zijn de waarden van ' JOY' bij de be t reffende actie ind ien tevens de vuurknop i s i nged rukt. status
waarde van JOY
geen act ie omhoog omhoog en rechts rechts omlaag en rechts omlaag om laag en l i n ks l i n ks om hoog en l i nks
0 (1 28) 1 (1 29) 2 (1 30) 3 (131) 4 (1 32) 5 (1 33) 6 (1 34) 7 (1 35) 8 (1 36)
PENX
De variabele PENX bevat de x-coord inaat van de l ichtpen op het beeld scherm. Syntax : < variabele > Parameters : geen
=
PENX
De waarde van PENX l igt tussen 0 en 31 9. PENY
De variabele PENY bevat de y-coord i naat van de l ichtpen op het beeld scherm. Syntax : < variabele > Parameters : geen
=
PENY
De waarde van PENY l igt tussen 0 en 1 99. POT
M et POT kunnen we de stand van de paddies (aangesloten op controle poort 2) u it lezen . Syntax Parameters
< variabele > = POT (n) n - n u m mer van de padd ie (1 of 2) De POT-functie kent aan < variabele > een waarde tussen 0 en 255 toe.
88
SCR L D
Door deze i nstructie wordt een beeldschermi n houd (tekst) van d i skette of cassette ingelezen. SCRLD f,d,k, < stri n g > Syntax Parameters : f - filenummer d - apparaatnummer (1 = cassette, 8 = d i skd rive) k - kanaal n u mmer De variabel e < string > bevat de fi lenaam. Voorbeeld : 1 0 SCRLD 1 , 1 , 1 ," NAAM" : REM I N LEZEN VAN CASSETTE 1 0 SCRLD 2,8,2,"NAAM " : REM I N LEZEN VAN DISKETTE SCRSV
M et SCRSV sch rijven we een beeldscherminhoud (tekst) naar d i skette of cassette. Syntax Parameters
SCRSV f,d, k,(string) f - fi lenummer d - apparaatnum mer (1 k - kanaal n u m mer
=
cassette, 8
=
d i skd rive)
De variabele < string > bevat de fi lenaam. Voorbeeld : 1 0 SCRSV 1 , 1 , 1 ," NAAM" : REM OPSLAAN O P CASSETTE 1 0 SCRSV 2,8,2," NAAM " : REM OPSLAAN O P DISKETTE
89
APPENDIX A FOUTM ELDI N G E N
N aast een hoeveelheid n ieuwe i nstructies kent Simon's BAS IC een aantal specifieke foutmeldingen. I n het volgende overzicht zijn deze foutmeldin gen in al fabet ische volgorde op een rij gezet, samen met de oorzaak ervan. De foutme lding is analoog aan die u it d e standaard-BASIC, namelijk: ? < fout > i n < regelnu mmer > BAD C HAR FOR A M O B
Deze foutmelding geeft aan dat i n het programmadee l , waari n een sprite defin ieerd wordt, bij de instruct ies DES I G N of @ , een fout is opgetreden. Dit wordt dan veroorzaakt doordat er parameters(s) n iet of verkeerd zijn opge geven. H et regelnummer i n de foutboodschap heeft altijd betrekking op de regel, waari n de D ESI G N -i nstructie staat; de fout hoeft echter n iet i n deze regel te zitten. BAD M O D E
De fout wordt veroorzaakt, doordat er te veel of te wei n ig parameters zij n op gegeven bij een instructie, of doordat de opgegeven parameters n iet geldig zIJn. .
.
EN D LOOP WITH OUT LOOP
Deze meld i ng spreekt voor zich: de com puter kwam i n een programma EN D LOOP " tegen zonder dat deze l u s geopend was met LOOP". " " E N D P ROC WITHOUT EXEC
Voor deze foutmeld ing geldt een soortgelijk verhaal. De computer komt de EN D PROC-i nstructie tegen zonder dat deze is voorafgegaan door de EXEC i nstructie. I NSERT TOO LARG E
Deze meld i ng heeft betrekking op de parameter, die de positie aangeeft van de i n te voegen stri ng bij de I NSERT- en d e I NST- instructie. Deze kan name l ijk nooit groter zijn dan de lengte van d e stri ng waarin wordt ingevoegd . NOT B I N ARY CHARACTER
Deze fout treedt op als i n een i nstructie een bi nair getal wordt verwacht en n iets is opgegeven. Dit kan voorkomen bij de i nstructies % en WAVE. 91
TOO FEW Ll N ES
Letterl ijk betekent d it: te wei n i g regels. Het komt erop neer dat er te we i n i g @-instructies volgen op d e DES I G N -instructie, want elke @-inst ructie moet i n een aparte regel staan. NOT H EX CHARACTER
De fout ontstaat als er i n pl aats van een hexadec i maal getal (4-stel l i g) iets anders wordt opgegeven . Deze melding is van toepassing op de $-i n structie. PROC NOT FOU N D
We krijgen deze foutmeld i ng i nd ien we een procedure aanroepen die n iet i n het programma gedefi n ieerd is. STAC K TOO LARG E
I n de stack wordt o.a. bijgehouden naar wel ke plaats i n een programma moet worden teruggesprongen als we een procedure aanroepen. I n d ien er teveel procedures (meer dan 5) open staan, raakt de stack vol en wordt deze fout melding gegeven. STR I N G TOO LAR G E
Als we een n ieuwe stri ng creëren met bijvoorbeeld de I N ST- i nstructie, kan het voorkomen dat de lengte van deze string g roter wordt dan de maxi male lengte (255). H et programma breekt dan af met deze foutmel d i n g . UNTIL WITHOUT REPEAT
Dit treedt op als de computer U NTI L" tegenkomt zonder dat dit is voorafge " gaan door R EPEAT" . "
92
Appendix B
VOOR B E E LDPROG RAM MA'S
I n deze appendix zijn acht voorbeeld programma's opgenomen om de mo gelijkheden van Simon's BASIC nog eens te benadrukken. Kaleidoscoop
H et eerste programma is een variant op de kaleidoscoop, een kij ker waari n wisselende, kleurige sym metrische figuren te zien zij n . I n de hoeken van het beeldscherm worden tel kens vier sym metrische figuren getekend. Telkens als het programma wordt gestart, zal een andere figuur verschijnen; het pro g ramma maakt gebruik van de random-generator van de computer. Voor meer of m inder complexe figuren kan in regel 260 het getal 1 0 door een andere waarde worden vervangen . 10
CALL
BEG I N
20
:
30
PROC
40
X l = I NT ( 6 4 *R ND ( 0 ) + 1 )
50
Y l = I NT ( 9 9 * RND ( 0 ) + 1 )
60
E ND
70
:
80
PROC
L I NE
90
L I NE
8 0 + X 0 , 1 00 - Y0 , 8 0 + X l , 1 0 0 - Y l , 1
C ALC
PROC
1 00
L I NE
8 0 - X 0 , 1 00 - Y0 , 8 0 - X l , 1 0 0 - Y l , 1
1 10
L l NE
8 0 - X 0 , 1 00 + Y0 , 8 0 - X l , 1 0 0 + Y l , 1
1 20
L l NE
80 + X 0 , 1 00 +Y0 , 80 +X l , 1 00 + Y l , 1
1 30
E ND
1 40
:
1 50
PROC
SWAP
1 60
A = X0
:
X0 = 0 . 6 5 *Y0
:
Y0 = A /0 . 65
1 70
A=X l
:
X l = 0 . 65 *Y l
:
Y l = A /0 . 65
1 80
END
1 90
:
PROC
PROC
200
PROC
BEG I N
2 10
H I RES
220
COLOUR
230
MUL T I
240
EXEC
250
X0 =X l
260
FOR
270
EXEC
CALC
280
EXEC
L I NE
290
EXEC
S�P
300
E XE C
L I NE
1 ,0 0 ,0 6 ,6 ,6 CALC :
1=1
Y0 = Y l TO
10
93
3 10
EXEC
320
X0=X l
330
NE X T
340
P A I NT
0 ,0 ,3
350
BLOCK
o , 0 , 1 59 , 1 99 , 4
360
PAUSE
4
370
I'R M
380
COLOUR
READY .
94
SWAP • •
Y0 = Y l
I
6 , 15
Spiralen
I n het platte vlak kunnen we een spiraal maken door l ijnstukken te tekenen die voldoen aan de vo lgende voorwaarden: het beg inpunt van het l ijnstuk is het eindpunt van het voorgaande l ij nstuk, de lengte van een l ij nstuk is de lengte van het voorgaande l ij nstuk ver meerderd met een constante waarde, de hoeken tussen opeenvolgende l ij n stu kken zijn constant. H et prog ramma is gebaseerd op dit const ructievoorsch rift. We hebben de vrij heid zel f de hoek en de lengtevermeerdering in te voeren.
C HR $ ( 1 4 7 )
10
P R I NT
20
D IM
30
X ( 1 ) = 1 60
:
Y ( 1 ) = 1 00
40
X ( 2 ) = 1 60
:
Y ( 2 ) = 96
50
L=4
60
P R I NT
AT ( 5 , 5 )
70
I NP U T
H
80
P R I NT
AT ( 5 , 8 )
90
I NP U T
LV
X (3 ) ,Y(3 )
" R O TA T I E - H O E K
( GR ADE N ) " ;
" L ENGTE V E R ME E R D E R I NG " ;
LV = l /L V
:
1 00
H = H * ,, / 1 8 0
1 10
C = COS ( H )
1 20
H I R ES
1 30
L I NE
1 40
:
1 50
LOOP
1 60
XC = ( X ( I ) - X ( 2 »
*C + ( Y ( I ) - Y ( 2 »
*S+X ( 2 )
1 70
YC = ( Y ( I ) - Y ( 2 »
*C - ( X ( 1 ) - X ( 2 »
*S +Y ( 2 )
1 80
X(3)=«
L + l ) /L ) * ( XC - X ( 2 »
+X ( 2 )
1 90
Y(3 ) = «
L + l ) /L ) * ( YC - Y ( 2 »
+Y ( 2 )
200
EX I T
IF
Y ( 2 ) *Y ( 3 ) ( 0
2 10
EX I T
IF
Y(2 »
220
L I NE
X ( 2 ) ,Y(2 ) ,X ( 3 ) ,Y(3 ) , 1
230
L =L +LV
240
X ( 1 ) =X ( 2 )
:
Y ( 1 ) =Y ( 2 )
250
X ( 2 ) =X ( 3 )
:
Y ( 2 ) =Y ( 3 )
260
END
270
:
280
PAUSE
2 90
C OLOUR
S =S IN ( H )
:
COLOUR
:
0 , 15
15 , 15
X ( I ) ,Y ( I ) ,X ( 2 ) ,Y( 2 ) , 1
1 99
OR
Y(3»
1 99
LOOP
3
:
NR M
6 , 15
READY .
95
U itbreiding USE naar exponentiële notatie
De USE-i n structie geeft ons de mogel ij kheid om getallen geformateerd af te d ru kken . Dit werkt echter n iet i ndien getal len i n exponentiële notatie ge bru i kt worden. Het vol gende program ma bevat een su brouti ne die dit wel mogelijk maakt. De n otatie wijkt wat af van de wijze waarop de Commodore 64 deze getal len normaal pleegt af te d ru kken. De versc h i l len zij n: e r i s een spatie tussen de mantisse en de exponent geplaatst,
-
i ndien de exponent posit ief is wordt deze voorafgegaan door een pl us teken ( + ), -
de exponent bestaat altijd u i t twee cijfers (een exponent van 3 wordt weergegeven door + 03),
-
er staat altijd een c ijfer (ongel ij k aan n u l) voor de deci male punt.
H et programma bevat een demon stratie van de subrouti ne.
I
S IN ( I )
------------
-
TAN ( I )
COS ( I ) ----
-
----
--------
-
-
--------
1
8.41
E -0 1
5 . 40
E -0 1
1 . 55
E + 00
2
9 . 09
E -0 1
-4 . 1 6
E -0 1
-2 . 1 8
E +0 0
3
1 .4 1
E -0 1
- 9 . 89
E -0 1
- 1 . 42
E -0 1
4
- 7 . 56
E -0 1
- 6 . 53
E -0 1
1 . 15
E + 00
5
- 9 . 58
E -0 1
2 . 83
E -0 1
-3 . 38
E + 00
6
- 2 . 79
E -0 1
9 . 60
E -0 1
-2 . 9 1
E -0 1
7
6 . 56
E -0 1
7 . 53
E -0 1
8.71
E -0 1
8
9 . 89
E -0 1
- 1 . 45
E -0 1
-6 . 79
E + 00
9
4 . 12
E -0 1
-9 . 1 1
E -0 1
- 4 . 52
E -0 1
10
- 5 . 44
E -0 1
- 8 . 39
E -0 1
6 . 48
E -0 1
1 1
- 9 . 99
E -0 1
4 . 42
E -03
- 2 . 25
E +0 2
12
- 5 . 36
E -0 1
8 . 43
E -0 1
- 6 . 35
E -0 1
13
4 . 20
E -0 1
9 . 07
E -0 1
4 . 63
E -0 1
14
9 . 90
E -0 1
1 . 36
E -0 1
7 . 24
E + 00
15
6 . 50
E -0 1
- 7 . 59
E -0 1
-8 . 55
E -0 1
16
- 2 . 87
E -0 1
-9 . 57
E -0 1
3 . 00
E -0 1
17
-9 . 6 1
E -0 1
- 2 . 75
E -0 1
3 . 49
E + 00
18
- 7 . 50
E -0 1
6 . 60
E -0 1
- 1 . 13
E + 00
19
1 . 49
E -0 1
9 . 88
E -0 1
1 .51
E -0 1
20
9. 12
E -0 1
4 . 08
E -0 1
2 . 23
E +0 0
10
CALL
20
• •
30
• •
40 50 60 70
96
PROC
BEG I N
E XP /USE
• •
LOCAL • •
E P , EP $ , TE $ , X X $
80
IF
X X =0
THEN
E P =0 = E L S E = E P = I NT ( LO G ( A BS ( X X »
/
LOG ( 1 0 ) ) 90
X X =XX/ 1 0 fEP
1 00
X X $ = STR$ ( X X )
:
1 10
IF
EP > =0
1 20
IF
EP > = - 9
1 30
IF
EP > = 0
AND
1 40
IF
EP > =0
TH E N E P $ = "
THEN AND
E P $ = S TR $ ( E P ) E P $ = R I GH T$ ( E P$ , LE N ( E P $ ) - I ) EP ( 0
THE N E P $ = I NS E RT ( " 0 " , E P $
, 1 ) EP = ( 9
THEN
EP$= " 0 " +EP$
E + " + E P $ : E LSE : E P $ = "
EU+
EP$ 1 50
:
1 60
USE
1 70
:
1 80
GLOBAL
1 90
:
200
E ND
2 10
:
220
:
230
PROC
240
:
250
REM
H I ER
260
REM
S U B R O U T I NE
270
REM
EXEC
280
REM
USER$
290
REM
V A R I ABELE
300
:
310
REM
US$ , XX$
:
P R I NT
EP$
,
PROC
BEG I N
BEG I NT
UW
P R O G R A MMA
AANR O E P E N MET
E XP/USE D E F I N I ER E N IN
IN
US$
XX
DEMO
320
:
330
P R I NTCHR $ ( 1 4 7 )
340
PR I NT "
I " , SP C ( 4 ) ; " S I N ( I ) " , SP C ( 6 ) ; " C O S ( I ) " ;
SP C ( 6 ) ; " TAN ( I ) " 350
A $ = D UP ( " - " , 4 0 )
:
P R I NT
A$;
360
US$= " M MMM . MM "
370
:
380
REPEAT
390
1=1+1
4 00
USE
4 10
X X =S I N ( I )
:
EXEC
E X P /U S E
4 20
X X =CO S ( I )
:
EXEC
E X P /U S E
430
X X = TAN ( I )
:
EXEC
E X P /U S E
440
P R I NT
450
UNT I L
1 =2 0
460
PAUSE
3
" M M M " , S TR $ ( I )
R EADY .
97
Algemene statistische analyse
M et dit programma kunnen we een stat istische analyse uitvoeren op een verzamel ing waarnemi ngen. H et programma bev� de volgende mogelijk heden: -
bereken ing van gem iddelde en standaarddeviat ie,
-
verdel i ng van waarnemi ngen i n kl assen,
-
tekenen van het h i stog ram van de verdeling,
-
tekenen van de normale verdelingscurve.
Aan het beg i n van het prog ramma wordt gevraagd naar het aantal waarne m i ngen i n de verzameling en i n hoeveel klassen deze moeten worden ver deeld. Daarna worden de waarden opgevraagd . Als alle waarnemingen zijn i ngevoerd start de computer de berekening en worden achtereenvolgers de resu ltaten op het tekst- en het g rafische schen I I Jt .vund . Voorbeeld: Door 30 schol ieren zijn bij een p roefwerk gesch iedenis de volgende cijfers behaald : 7.2 8.6 6.6 8.5 6.6
7.5 6.5 7.3 7.3 8.0
7.6 7.6 8.7 1 0.0 8.6
8.0 7.5 5.8 7.2 6.8
5.8 7.2 7.6 5.0 7.9
8.0 6.0 7.4 8.0 7.3
We gebru i ken het programma om de volgende gegevens te analyseren. We voeren dus het getal 30 i n voor het aantal waarden, voor het aantal kl assen kiezen we 1 0. N a i nvoer van bovenstaande getal len levert het programma het volgende resultaat: KLASSE
OND E R G R E NS
F R E QUENT I E
1
5.
1
3 . 33
%
2
5.5
2
6 . 66
%
3
6.
1
3 . 33
%
4
6.5
4
1 3 . 33
%
5
7.
7
23 . 33
%
6
7.5
6
20 .
%
7
8 .
4
1 3 . 33
%
8
8.5
4
1 3 . 33
%
9
9.
0
0.
%
9.5
1
3 . 33
%
10
GEM I DDELDE
STANDAARD D E V I A T I E
98
AANTAL
-
-
7 . 40333334
1 . 0 1 38 6 3 6 7
;:: .�
23
�
r
// 1. 1.
;::
.�
�,
"
/ /
.-/r
"
'
/
�r--...
�
.,
10
CALL
BEG I N
20
:
30
PROC
40
:
50
P R I NT
CHR$ ( 1 47 )
60
P R I NT
AT ( 5 , 5 )
" A ANTAL
WAARDEN
70
PR I NT
AT ( 5 , 7 )
" AANTAL
K LASSEN
80
IF
90
P R I NT
I NV O E R
NK ) 1 5 :
TH E N
..
. .
,
.
I NP U T
N
n • ,
• .
I NP U T
NK
NK = 1 5
P R I NT
1 00
D IM
X (N)
1 10
REPEAT
1 20
TE = TE + l
1 30
P R I NT
:
MA X = 0
:
M I N= l E 37
S P C ( 6 ) ; " WAARDE
" ; TE ; : I NP U T
NR .
X ( TE )
1 40
IF
X ( TE »
MAX
THE N
MAX = X ( TE )
1 50
IF
X ( TE ) ( M I N
THEN
M I N = X ( TE )
1 60
S X = S X + X ( TE )
1 70
SK = S K + X ( TE ) t 2
180
PR I NT
1 90
UNT I L
TE = N
200
P R I NT
:
2 10
U l = I NT ( L OG ( MAX ) /LOG ( 1 0 »
220
H U $ = S TR $ ( X ( l »
230
HU = P L A C E ( " . " , H U $ )
240
IF
HU=0
THEN
U2 =0
250
IF
U 1 =0
THEN
U 1 $= " "
: E L S E : U l $ =DUP ( " tt " , U 1 )
260
IF
U2=0
THEN
U2$= " "
: E LSE : U 2 $ = D UP ( " tt " , U2 )
270
U S $ = U l $ + " . " + U 2 $ + " tt "
280
:
290
E ND
300
:
3 10
PROC
320
:
330
G M = S X /N
340
SD =SQR «
PR I NT
" A LLE
WA A R D E N
Z I JN
I NG E V O E R D "
+1
: ELSE : U2 =LEN ( HU $ ) -HU
PROC
GEM/SD
SK -SX * S X /N ) / ( N - l »
99
350 360
: END
PROC
370
:
380
PROC
390
:
400
D IM
4 10
K B = ( MAX - M I N ) /NK
420
FOR
430
K G ( I ) = M I N + ( I - l ) *K B
440
NE X T
450
FOR
460
J = I NT «
4 70
AK ( J ) = AK ( J ) + 1
480
NE X T
490
AK ( NK ) = AK ( NK ) + AK ( NK + l )
500
FOR
5 10
IF
520
NE X T
530
:
540
E ND
550
:
560
PROC
570
K LASSE
K G ( NK + l )
1=1
TO
:
D IM
AK ( NK + l )
NK + l
I 1=1
TO
N
X ( I ) -K G ( I »
/K B ) + 1
I
1=1
TO
AK ( I »
NK
MK
THEN
MK =A K ( I )
I
PROC
GRAF
:
580
H I R ES
0 , 15
590
L I NE
50 , 1 7 5 , 2 9 0 , 1 7 5 , 1
600
L I NE
50 , 1 7 5 , 50 , 65 , 1
6 10
L I NE
48 , 75 , 52 , 75 , 1
620
L I NE
48 , 1 2 5 , 5 2 , 1 2 5 , 1
630
FOR
640
CH = 1 00 * MK / ( N * I )
650
IF
660
C H $ = C H R $ ( I ) +L E F T$ ( C H$ , 3 ) + "
670
TEXT
7 , 7 5 + ( I - l ) * 50 , C H $ , 1 , 1 , 8
680
NE X T
I
690
B = I NT ( . 5 +2 0 0 /NK )
700
FOR
7 10
D Y = I NT ( 0 . 5 + 1 0 0 *AK ( I ) /....lK )
720
REC
730
O P = O P +B * D Y
740
NE X T
750
OP = O P / 1 0000
760
P l = 0 . 3 1 9 38
:
P2 = -0 . 35656
:
770
P4 = - 1 . 8 2 1 3
:
P5 = 1 . 3 303
P6 = 0 . 2 3 1 6 4
780
OEF
1=1
TO
CH< 1 0
1=1
2
THEN
:
C H $ = S TR $ ( C H )
CH$= "
" + CH$
%"
TO
, ....
...1 1 Lr -, ''; '!";,. "
NK
<
.-
:P <
c::
. -� ,
80 +B * < I - l ) , 1 7 5 - D Y , B , DY , 1
I
FN
:
P3= 1 . 78 1 5
NO ( X ) = I - ( E XP ( - . 5 *X t 2 ) * < P l * T + P 2 * T t 2 + P
3 * T t 3 + P 4 * T t 4 + P 5 * T t 5 ) /S Q R ( 2 * ;r » 790
X = ( K G ( 1 ) - Gtrl ) /SD
:
T= l / ( l +P * X )
:
A l = l - FN
NO (
X) 800 (X)
1 00
,
.'
X = ( K G ( NK + l ) - G M ) /SD
:
T = l / ( l + P *X )
:
A2 =FN
NO
-
.
-
,
8 10
D A = A 2 -A l
820
OEF
FN
F C X ) = C l / ( SD *SQR C 2 * � »
) *EXP C - . 5 * C C X -G
M ) /S D ) t 2 ) 830
X X = C MAX - M I N ) /2 0 0
840
FOR
850
X = M I N+ C I -80 ) *XX
860
Y = 1 7 5 - 2 5 0 * O P * D A * SD * C F N
870
PLOT
I ,Y , 1
880
NE X T
I
890
:
900
END
9 10
:
920
PROC
930
:
940
P R I NT
CHR $ ( 1 4 7 )
950
P R I NT
AT ( 4 , 5 )
1 =80
TO
280
F (X »
PROC
BEG I N
" A L G E ME NE
STAT I S T I S CHE
ANA L Y
SE " 960
A $ = D U P ( C HR $ C 1 6 3 ) , 2 9 )
970
P R I NT A T ( 4 , 6 )
980
PR I NT
AT ( 1 0 , 9 )
990
P R I NT
AT ( 1 0 , 1 1 )
A$ " GE M I D D E L D E " " STAND A A R D D E V I A T I E "
1 0 00
P R I NT
AT C 1 0 , 1 3 )
" H I STOGR AM "
10 10
P R I NT
AT( 1 0 , 1 5 )
" NO R MA L E
1 020
PAUSE
5
1 0 30 1 040 1 05 0 1 0 60 1 0 70 1 0 80 1 0 90
• •
EXEC
I NVOER
• •
EXEC
GEM/SD
• •
EXEC
K L ASSE
• •
1 1 00
PR I NT
1 1 10
A $ = DUP C C H R $ ( 1 9 2 ) , 4 0 )
t '
�
P R I NT
AT ( 0 , 0 )
A$
-' �
P R I NT
AT C 0 , 1 )
"
L
f-
V E R D E L I NG "
CHR $ ( 1 4 7 )
' '"': NT I E
K LASSE
OND E R G R E NS
AANTA
"
AT C 0 , . )
f. :.
1 1 40
P R I NT
1 1 50
FOR
1 1 60
P R I NT
A T C 0 , I +2 )
1 1 70
P R I NT
A T C 1 0 , I +2 )
"
" ; :
USE
U S $ , S TR$ C K G < I
P R I NT
AT C 20 , I +2 )
"
11 • ,
•
.
USE
" .. .. .. .. " , S TR $ ( A
P R I NT
AT ( 2 9 , 1 + 2 )
"
11
• .
USE
" .. ..
1=1
TO
NK "
"; :
USE
" tUUUt " , S TR $ C I )
) ) 1 1 80 K < I » 1 1 90
• ,
•
....
Y. " , S TR
$ ( 1 0 0 * A K ( I ) /1'1 ) 1 2 00
NEXT
I
1 2 10
B$=DUP C A$ , 2 )
1 2 20
P R I NT
AT ( 0 , 1 +3 )
1 2 30
PR I NT
SPC ( 8 )
•
B$
" GE M I D D E L D E
=
";
GM
1 01
1 2 40
P R I NT
1 250
P R I NT
1 260
P AUSE
1 270 1 2 80 1 2 90 1 300
"
STAND A A R D DE V I AT I E
=
IJ ,
SD
5
• •
EXEC
GRAF
• •
PAUSE
5
• •
NRM
READY .
.
..
�
.)
.j
1 02
J
Woord raden
I n een boek als dit mag een spe l l etje zeker n iet ontbreken: Simon's BASI C leent zich name l ij k u itstekend voor het programmeren van spel letjes. H et volgende prog ramma is een variant op het alom bekende spel galgje" en wordt gespeeld door twee spelers. De bedoel ing van het spel is "woorden te raden die door de tegenspeler zijn opgegeven. Na het starten van het prog ramma wordt gevraagd u it hoeveel woorden de partij bestaat. H et maxi male aantal woorden bed raagt tien. Als dit is i nge voerd wordt elke speler verzocht de woorden i n te voeren d ie de tegenspeler moet proberen te raden. H et is wel aan te bevelen dat de tegenspeler bij de i nvoer van woorden even zij n blik afwendt. N u beg int het eige n l ij ke spe l . Om beu rten proberen beide spelers een woord te raden. Bovenaan het beeldscherm staat vermeld welke speler aan de beu rt is. H et te raden woord komt i n het kader m idden op het scherm te staan. Elk streepje i n dit kader stelt een letter voor. Het raden van het woord komt neer op het tel kens intoetsen van een letter. Komt de ingetoetste letter i n het woord voor dan wordt dit op het scherm getoond. Onderaan het scherm is zichtbaar welke letters nog n i et zijn geprobeerd. I n de ci rkel l i n ks boven wordt het aantal foutieve g i ssingen bijgehouden; bij elke foute letter Wf' .it een deel van het g roene vlak rood. Is het vlak helemaal rood, dan zij n ) foute g i ssingen i ngevoerd en i s de beurt voorbij . core wordt als volgt bepaald. Per woord i s er een basi s-score van 1 00 f-Iunten. Per foutieve gissing worden hiervan 1 0 punten afgetrokken. Als het woord wordt geraden wordt een bon u s van 25 punten gegeven. De maxi mum score per woord is dus 1 25 punten. Als de partij i s afgelopen wordt een totaaloverzicht van de behaalde scores gegeven. I e..
CALL
BEG I N
•
•
2 3 ..,
PROC
40
:
50
MUS I C
�A
TE X T
FOUT
2 , S2$
:
PLAY
1
6 , 1 02 , C H R$ ( 1 ) +W$ , 3 , 2 , 1 0
F O =F O + l
:
SC ( I , J ) = SC ( I , J ) - 1 0
80
A NG L
2 5 , 60 , S H , 2 0 , 30 , 1
90
ANGL
25 , 6 0 , E H , 2 0 , 3 0 , 1
1 00
H = ( S H + 1 8 ) * � / 1 80
CO S ( H )
:
PA I NT
1 10
SH = S H + 3 6
1 20
:
1 30
E ND
1 40
:
1 50
PROC
1 60
:
1 70
MUS I C
1 80
TE XT
1 90
:
200
E ND
210
:
:
:
X = 25 + 1 0 *S I N ( H )
:
Y = 60 - 1 5 *
X ,Y , l EH =EH +36
PROC
GOED
1 ,S l$
:
PLAY
1
6 , 1 02 , C H R $ ( 1 ) + W$ , 3 , 2 , 1 0
PROC
1 03
220
PROC
WOO R DO K
230
TE X T
5 5 , 5 7 , CH R $ C l ) + " G E R A D E N •
240
MUS I C
250
S C C I , J ) = SC C I , J ) + 2 5
260
:
270
E ND
:
1 , S4$
PLAY
•
•
•
" ,3,2 , 10
" , 3 ,2 , 10
1
PROC
280
:
290
PROC
300
:
3 10
TE X T
320
MUS I C
330
TE X T
6 , 1 0 2 , CH R $ C l ) + W$ , 0 , 2 , 1 0
340
TE X T
6 , 1 02 , C H R $ C l ) + WO $ C I , J ) , 3 , 2 , 1 0
350
:
360
E ND
370
:
380
PROC
390
:
400
P R I NT
CHR$ ( 1 4 7 )
4 10
P R I NT
AT C 2 , 2 )
420
F E TC H
CHR $ ( 1 7 ) , 2 , N$
430
N = V A L ( N$ )
440
IF
450
PU$=DUP ( " . " , 1 5 )
460
:
470
FOR
480
E I ND E B R T
5 5 , 5 7 , C H R $ C l ) + " H ELAAS 8 , S3$
:
C N< l
OR
1=1
TO
2
J= l
TO
N
THEN
WOO R D E N
CALL
C l -10)
:
" ;
I NV O E R
• •
WO$ ( I , J ) = P U $
510
NE X T
J
• •
I
NE X T • •
550
FOR
560
P R I NT
. •
" A ANTAL
N>10 )
500
540
1
I NV O E R
FOR
530
•
PROC
490
520
PLAY
•
TO
1=1
2 " S P E L E R " ; I ; " GE E F
AT ( 2 , 5 )
WOO R D E N
IN
"
570
:
580
FOR
590
P R I NT
A T ( 3 , J +7 )
600
P R I NT
AT C 1 6 , J + 7 )
" :
6 10
P R I NT
ATC 1 8 , J +7 )
" " I
620
F E TC H
C H R $ ( 1 9 ) , 1 5 , WO$ ( 3 - I , J )
630
I'IE X T
640
:
650
P R I NT
660
REPEAT
J=l
TO
N " WO O R D
NR . " ; J
" ; WO$ ( 3 - I , J )
J
A T ( 1 5 , 20 ) :
GET
A$
" OK :
C J /N ) "
UNT I L
C A$ = " J "
OR
A$= " N "
) 670
F I LL
680
IF
1 04
20 , 1 5 , 8 , 1 , 32 , 1 5
A$= " N "
TH E N
I = I - l : E LSE : F I L L
8 , 1 8 , 1 5 , 1'1 ,
32 , 1 5 690
I'E X T
700
:
7 10
E ND
720
:
730
P R OC
740
:
750
BLOCK
760
:
770
FOR
780
L l NE
1 5 , 1 50 + 1 9 *K , 1 45 , 1 50 + 1 9 *K , 1
790
NE X T
K
800
:
8 10
FOR
820
L I NE
K , 1 50 , K , 1 8 8 , 1
830
NE X T
K
840
:
850
IF
860
BLOCK
64 , 8 , 72 , 23 , 0
870
BLOCK
1 4 4 , 8 , 1 52 , 2 3 , 0
880
TE X T
56 -WX , 8 , CH R $ ( 1 ) +STR$ ( J ) , 2 , 2 , 8
890
TE X T
1 36 , 8 , CH R $ ( 1 ) + S TR $ ( I ) , 2 , 2 , 8
900
A $ = " ABCDEFGH I J K L MNOP Q R S TUVWXYZ "
910
TE X T
1 6 , 1 53 , CHR$ ( 1 ) + L E F T$ ( A$ , 1 3 ) , 3 , 2 , 1 0
920
TE X T
1 6 , 1 7 2 , CH R$ ( 1 ) +R I GH T$ ( A$ , 1 3 ) , 3 , 2 , 1 0
930
C I RCLE
940
P A I NT
950
REC
960
W$= DUP ( CH R $ ( 1 64 ) , LE N ( WO$ ( I , J »
970
TE X T
980 990
I
PROC
SCHERM
0 , 3 1 , 1 5 9 , 1 89 , 0
K =0
TO
K=15
J= 10
2
TO
1 45
STEP
THEN WX = 8
2 5 , 60 , 2 0 , 30 , 2 2 5 , 60 , 2
4 , 1 00 , LE N ( WO $ ( I , J »
* 10+ 1 , 19 , 1 )
6 , 1 0 2 , CH R $ ( 1 ) + W$ , 3 , 2 , 1 0
: E ND
PROC
:
1 00 0 1 0 10
PROC
I NP U TOK
1 02 0
:
1 030
D I SABLE
1 04 0
I N$ = C H R $ ( ST )
1 050
BLOCK
1 06 0
PL = P L A C E ( I N$ , K$ )
1 070
K $ = I NST ( LG $ , K $ , P L - l )
1 080
IF
1 0 90
X W = 6 + 1 0 *P L
1 1 00
IF
1 1 10
BLOCK
1 1 20
CC=0
1 1 30
:
1 1 40
FOR
1 1 50
IF
G+ l
10
:
5 5 , 5 7 , 1 5 9 , 65 , 0
PL ) 1 3
PL ) 1 3
TH E N
THEN
YW= 1 7 0 : ELSE : YW = 1 5 1
XW=XW- 1 0 * 1 3
X W , YW , X W + 8 , YW + 1 7 , 4
K= l
TO
L E N ( WO$ ( I , J »
I N$= M I D$ ( WO$ ( I , J ) , K , l )
THEN
CC= l
:
AG = A
W$ = I NS T ( I NS , W$ , K - l )
1 05
1 1 60
CHAR
6 + 1 0 * ( K - l ) , 1 02 , 1 00 , 0 , 2
1 1 70
NE X T
K
1 1 80
:
1 1 90
IF
EC
A G = L E N ( WO $ ( I , J »
THEN
CC= - 1
:
FL = 1
:
EX
WO O R D O K
1 200
IF
CC=0
THEN
EXEC
FOUT
12 10
IF
CC = 1
THE N
EXEC
GOED
1 22 0
BLOCK
X W , YW , X W + 8 , YW + 1 7 , 1
1 2 30
IF
FO = 1 0
THEN E X E C
E I ND E B R T
1 2 40
:
1 25 0
END
1 2 60
:
1 2 70
PROC
1 2 80
:
1 2 90
H I RES
1 30 0
TE X T
1310
S I $ = C H R $ ( 1 4 7 ) + " I " + C H R $ ( 1 3 6 ) + " D 5 " +C H R $ ( 1 36 )
PROC
BEG I N
6,0
:
MULT I
6 ,6 ,6
30 , 92 , CH R$ ( I ) + " WO O R D R A DE N " , 1 , 3 , 8
+CHR$ ( 1 47 ) + " G " 1 320
S2$=CH R $ ( 1 4 7 ) + " 2 " +CHR$ ( 1 40 ) + " F2 " +CHR$ ( 1 40 ) �
+ C H R$ ( 1 4 7 ) + " G " 1 3 30
S 3 $ = C H R $ ( 1 4 7 ) + " 3 " + C H R$ ( 1 3 6 ) + H C 8 " + C H R $ ( 1 36 �
+ " C7 " 1 3 40
S 3 $ = S 3 $ + C H R $ ( 1 3 6 ) + " C 6 " + CHR $ ( 1 36 ) + " C 5 " + C H R $
( 1 36 ) 1 3 50
S 3 $ = S 3 $ + " C 4 " + C H R$ ( 1 36 ) + " C 3 " + CH R $ ( 1 36 ) + " C 2 "
1 360
S 3 $ = S 3 $ + C H R $ ( 1 3 6 ) + " C l " + C H R$ ( 1 36 )
1 37 0
S3$=S3$+CHR$ ( 1 47 ) + " G "
1 38 0
S 4 $ = C H R$ ( 1 3 3 ) + " D 5 " +C H R $ ( 1 33 ) + " F 5 " + C H R$ ( 1 3 3
) + " A5 " 1 39 0
S 4 $ = S 4 $ + C H R$ ( 1 3 3 ) + " D 6 " + C H R$ ( 1 3 3 ) + " F 6 " + C H R $
( 1 3 3 ) + " A6 " 1 4 00
S 4 $ = DUP ( S 4$ , 1 3 )
1410
S 4 $ = C H R $ ( 1 4 7 ) + " I " + S 4 $ +C H R $ ( 1 3 3 ) + CHR $ ( 1 4 7 ) +
"G" 1 420
VOL
1 4 30
WAVE
1 , 0 0 0 1 00 0 0
1 4 40
WAVE
2 , 00 1 00000
1 4 50
WAVE
3 , 1 0000000
1 4 60
E NV E L O P E
1 ,0 ,0 , 15 ,0
1 4 70
E NV E L O P E
2 , 2 , 13 , 1 0 ,8
1 4 80
E NV E L O P E
3 ,0 ,0 , 15 ,0
1 49 0
PAUSE
1 50 0
NRM
1 5 10
:
1 520
EXEC
1 5 30
:
1 5 40
P R I NT
CHR$ ( 1 4 7 )
1 55 0
P R I NT
AT ( 2 , 2 )
" AANTAL
1 5 60
P R I NT
AT ( 2 , 4 )
" MA X I MALE
1 06
15
2
I NV O E R
WOO R D E N SCORE
. ",N •
•
: " ; N* 1 25
1 57 0
A $ = D U P ( C H R $ ( 1 92 ) , 3 1 )
1 5 80
P R I NT
AT(4 , 8 )
A$
1 59 0
P R I NT
AT(4 ,9 )
" WOORD
LER
NR .
SPELER
1
SPE
2"
1 60 0
P R I NT
AT ( 4 , 1 0 )
1610
:
1 6 20
FOR
1 6 30
P R I NT
1 640
USE
1 6 50
P R I NT
1 6 60
NE XT
1 670
:
1 6 80
P R I NT
SPC ( 4 )
A$
1 6 90
PR I NT
SPC ( 6 )
" TOTAAL "
1 700
P R I NT
SP C ( 4 )
A$
17 10
:
1 720
H I RE S
1 7 30
L l NE
4 , 5 , 1 55 , 5 , 1
1 7 40
L l NE
4 , 2 4 , 1 55 , 2 4 , 1
1 75 �
L I NE
4 , 5 , 4 , 24 , 1
l ?rq
L I NE
1 55 , 5 , 1 5 5 , 2 4 , 1
1 ",
I
L I NE
7 7 , 5 , 7 7 , 24 , 1
1 780
L I NE
82 , 5 , 82 , 2 4 , 1
1 790
BLOCK
1 8 00
TE XT
18 10
:
1 82 0
FOR
1 8 30
:
1 840
FOR
1 85 0
:
1 8 60
EXEC
1 87 0
:
1 88 0
AG=0
K= l
TO
A$
N
SP C ( 8 ) ;
" M M " , S TR $ ( K )
R$ ( 255 )
K
1 ,0
:
MULT I
2 , 5 ,6
78 , 5 , 8 1 , 24 , 0 8 , 8 , CH R $ ( 1 ) + " WO O R D
J= l
TO
N
1=1
TO
2
SPELER " , 3 , 2 , 8
SCHERM
:
:
FO = 0
:
SH=0
:
EH =36
:
FL=0
:
LG$=CH
S C ( I , J ) = 1 00
1 89 0
K $ = " ABCDE F G H I J K LMNO P Q R S TU V WXYZ "
1 900
LOOP
1910
TE X T
1 9 20
ON
1 9 30
D I SABLE
1 940
EX I T
1 95 0
E ND
1 9 60
NE X T
1 97 0
:
1 980
NEXT
1 99 0
:
2000
NR M
20 1 0
P R I NT
2020
:
2030
FOR
55 , 57 , CH R $ ( 2 ) + " WE L K E
KEY
K$ , :
IF
EXEC
( FO = 1 0
L E TTE R
7 " ,3, 1 ,7
I NPUTOK
OR
FL= l )
LOOP I
J
AT(0 , 1 1 )
1=1
TO
11
11
•
,
N
1 07
2040
P R I NT
SP C ( 1 8 ) ; :
2050
P R I NT
SPC ( 7 ) ; :
2060
P R I NT
2070
T ( 1 ) = T ( 1 ) + SC ( 1 , I )
2080
T ( 2 ) = T ( 2 ) +S C ( 2 , I )
2090
I\IE X T
2 1 00
:
2 1 10
P R I NT
2 1 20
P R I NT
SPC ( 1 8 ) ; :
2 1 30
P R I NT
SPC ( 7 ) ; :
2 1 40
P R I NT
:
2 1 50
PAUSE
10
READY .
1 08
USE USE
I tt tt tt tt " , STR$ ( S C ( 1 , I » I tt tt tt tt " , S TR$ ( S C ( 2 , I »
I
P R I NT
USE USE
I tttt tt tt " , STR $ ( T ( l » I tt tt tt tt " , STR $ ( T ( 2 »
H l R ES-voorbeelden
H et volgende prog ram ma bestaat u it 7 afzonderl ijke programma's die tot één geheel zijn samengevoegd. H et betreft hier programma's die elk een fi g u u r tekenen op het g rafisch scherm. H et is verwonderl ijk dat met i n het al gemeen eenvoud i ge algoritmen toch zeer fraaie tekeni ngen kunnen worden gemaakt.
1 09
110
10
H I R ES
20
N= 1 8
30
O = 2 * 1f /N
40
D IM
50
C I R CLE
60
FOR
70
T=T+O
80
X ( I ) = R * COS ( T )
90
I'IE X T
1 ,0 :
R = 1 00
X (N) ,Y(N) 1 60 , 99 , 1 30 , 1 0 0 , 1
1 = 1
TO
N
:
Y ( I ) = R *S I N ( T )
1
1 00
S =N - l
1 10
FOR
1 20
2=1+1
1 30
FOR
1 40
L I NE
1=1
TO
S
J = Z · TO
N
1 . 3 * X ( I ) + 1 60 , Y ( I ) + 1 0 0 , 1 . 3 *X ( J ) + 1 6 0 , Y ( J
) + 1 00 , 1 1 50
NE XT
J
1 60
NEXT
1
1 70
P A USE
1 80
10
• •
1 90
H I R ES
200
F O R 1 =0T03 1 9
2 10
L I NE
1 ,0 1 , 1 00 +99 *COS ( I / ( 3 * 1f »
, 1 + 2 5 , 1 99 - 1 9 9 * 1 /3
19 , 1 220
NE X T
230
PAUSE
240
:
250
H I R ES
260
FOR
270
H = I * 1f / 1 8 0
280
X l = 1 6 0 + 1 30 *C O S ( H )
290
Y l = 1 00 + 1 00 * S I N ( H )
300
X 2 = 1 6 0 + 1 30 *COS ( H + 5 * 1f /6 )
3 10
Y2 = 1 0 0 + 1 00 * S I N ( H + 5 * 1f /6 )
320
L I NE X 1 , Y l , X 2 , Y2 , 1
330
NEXT
340
PAUSE
3 50
:
360
H I RES
370
OEF
FN
F X ( I ) = 1 60 + 1 30 *S I N ( I * 1 2 1 * 1f / 1 80 )
380
OEF
FN
FY ( I ) = 1 00 + 1 00 *S I N ( I * 1 1 9 * 1f / 1 80 )
390
X0=FN
400
FOR
4 10
X 1 =FN
420
L I NE
430
X0 = X 1
440
NE XT
450
PAUSE
10
1 ,0
1=1
TO
:
470
H I R ES
S TE P
6
10
1 ,0
FX ( 0 )
1=1
460
360
TO
FX ( I )
:
Y0 = F N
FY ( 0 )
Y l =FN
FY( I )
360 :
X0 , Y0 , X 1 , Y 1 , 1 :
Y0 = Y 1
I 10
1 ,0
111
48e
OEF
FN
F X ( I ) = 1 6 e + 1 3e * S I N ( I * 1 2 1 * � / 1 8e )
4ge
OEF
FN
F Y ( I ) = l ee + l e e *C OS ( I *6 1 * � / 1 8e )
5ee
Xe = F N
5 1e
FOR
52e
X l =FN
53e
L I NE
54e
Xe=X l
55e
NE XT
56e
PAUSE
57e
:
58e
H I R ES
5ge
FOR
6ee
X M = 1 6 e + 6 5 *COS ( I * � / 1 8 e )
6 1e
YM= l ee + 5 e * S I N ( I * 4 / 1 8e )
62e
C I RCLE
63e
NE XT
64e
PAUSE
65e
:
66e
H I RES
67e
FOR
68e
L I NE
6ge
NE X T
7ee
FOR
7 1e
L I NE
72e
NE X T
73e
PAUSE
READY .
112
FX < e )
1=1
TO
:
ye = F N
Fy( e )
Y l =FN
FY( I )
36e
FX ( I )
:
Xe , ye , X l , Y l , 1 :
ye = Y l
1 Ie
l ,e
1=1
TO
36e
STEP
12
XM , YM , 6 5 , 5e , 1
1 Ie
l ,e
I =e
TO
3 19
STE P
2
l , e , 3 1 9 - 1 , 1 99 , 2
1 = 1 98
TO
1
STEP
e , I , 3 1 9 , 1 99 - 1 , 2
Ie
-2
Curve-fitting Cu rve-fi tt i n g is het bepalen van de vergel ij k i n g van een kromme d i e (het best) past bij een aantal p u nten . De methode d i e i n d i t programma gebru i kt wordt heet de methode der kleinste kwadraten. Deze methode zal h ier n iet verder worden toegelicht. Het programma bepaalt voor 6 versc h i l lende krommen de functieparame ters en de correlatiecoëffic iënt op basis van de i ngevoerde dataparen (x,y). Het gebru i k van d i t programma wijst zich vanzelf.
Opmerking: I n de regels 1 320 en 1 360 is voor de pri ntercommando's een REM-statement toegevoegd om te voorkomen dat het programma afbreekt als geen printer is aangesloten . I nd ien wel gebru i k wordt gemaakt van een printer moeten deze REM-statements verwijderd worden u i t het programma. Voorbeel d : Tijdens een onderzoek is nagegaan wat het verband is t u ssen twee g rootheden, voor het gemak x en y genoemd. Uit de resu ltaten van de experimenten is de volgende tabel samengesteld
__
x
y
1 2 3 4 5 6 7 8 9 10
20 40 58 73 85 95 1 02 1 07 110 111
,
Het cu rve-fitt i n g programma is gebru i kt om deze gegevens te testen. De on derstaande i l l ustraties laten het res u ltaat van d ie bereke n i ng zien. O V E R Z I CH T BESCH I KB A R E
F UNCT I E S
:
1 .
Y = B + A *X
4 .
Y=B*XfA
2 .
Y = B *EXP ( A *X )
5.
Y=B +A *LOG ( X )
3.
Y =B * E X P ( A/X )
6.
Y =B + A /X
F U NC T I E
5
C O R R . CO E F .
PARAME TE R S
A=
4 3 . 025054 1
B=
1 5 . 1 1 3 1 832
. 98 8
X I
=
1
X2
=
10
Yl
=
1 5 . 1 1 3 1 8 32
Y2
=
1 1 4 . 1 82 0 3 1
1 13
•
F' �
Y .1
• I
L
••
I
)( .1
10
CALL
20
:
30
PROC
40
:
50
P R I NT
60
I NP U T
70
IF
N<3
:
E ND
EN" 80
TE = 0
I
I
I
I
I
I
I
I
I
I
BEG I N
I NV O E R
CHR$ ( 1 47 ) " AANTAL
:
DATAP A R E N " ; N
THEN P R I NT
H l =0
:
:
P R I NT
L l = l E37
:
" TE
WE I N I G
H2 = H l
:
D A TAPAR
L2 =L l
:
DIM
X ( N ) , Y ( N ) , TX ( N ) , TY ( N ) 90
REPEAT
1 00
TE = TE + l
1 10
P R I NT
1 20
P R I NT
TE , " X
=
1 30
P R I NT
, "Y
" ; :
1 40
IF
X ( TE »
1 50
IF
X ( TE ) < L l
THEN
L l = X ( TE )
1 60
IF
Y ( TE »
THEN
H 2 = Y ( TE )
1 70
IF
Y ( TE ) < L 2
1 80
UNT I L
1 90
FL= ( L l = < 0
200
IF
"; :
I NP U T
X ( TE )
:
TX ( TE ) = X ( TE
)
FL
=
H l
I NP U T
Y ( TE )
:
TY ( TE ) = Y ( TE )
THE N H l = X ( TE )
H2
THEN L 2 = Y ( TE )
TE = N OR
L2 = ( 0 )
THEN P R I NT
:
D A TAP A R E N
! ! ! "
2 10
P R I NT
:
P R I NT
" ALLE
220
P R I NT
:
P R I NT
" EEN
230
E ND
:
P R I NT
" AL L E E N
POS I T I E V E
E ND D ATAPAREN Z I J N
0"
114
PROC
OGENBL I K
A.U.B. "
I NG E V O E R
1
)( 2
246
:
256
PROC
260
:
270
SX=0
286
FOR
290
S X = SX + X ( I )
300
X X = X X + X < I ) t2
310
XY=XY+X ( I ) *Y ( I )
326
NEXT
336
Z I = X X - S X t 2 /N
340
Z 3 = Z 2/Z 1
350
Z 5 = ( Z 2 t 2 / ( YY - S Y t 2/N »
366
E I'D
376
:
386
PROC
3: 0
:
400
EXEC
4 10
A ( I ) =Z 3
426
E ND
436
:
446
PROC
450
:
460
FOR
470
EXEC
486
A ( 2 ) =Z 3
490
E ND
506
:
5 16
PROC
520
:
CALCPAR
:
SY=6
1=1
TO
:
XX=0
:
YY=0
XY=6
:
N :
SY=SY+Y ( I ) :
YY = YY + Y ( I ) t2
1
:
:
Z 2 = X Y - S X *SY/N
Z 4 = ( SY - Z 3 *S X ) /N /Z I
PROC
CURVE
1
CALCPAR :
B ( I ) =Z 4
:
C ( I ) =Z 5
PROC
CURVE
1=1
TO
2
N
:
Y ( I ) =LOG ( Y ( I »
:
NE X T
1
CALCPAR :
B ( 2 ) = E XP ( Z 4 )
:
C ( 2 ) =Z 5
PROC
CURVE
1=1
530
FOR
546
EXEC
556
A ( 3 ) =Z 3
560
E ND
576
:
580
PROC
596
:
600
FOR
6 10
EXEC
626
A ( 4 ) =Z 3
636
E ND
646
:
656
PROC
660
:
676
FOR
680
EXEC
6 90
A ( 5 ) =Z 3
700
END
7 10
:
720
PROC
TO
3
N
:
X ( I ) = I /X ( I )
:
NEXT
1
CALCPAR :
B ( 3 ) = E XP ( Z 4 )
:
C ( 3 ) =Z 5
PROC
CURVE
1=1
TO
4
N
:
X ( I ) = L OG ( TX ( I »
:
NE X T
1
CALCPAR :
B ( 4 ) =EXP ( Z 4 )
:
C ( 4 ) =Z 5
PROC
CURVE
1=1
TO
5
N
:
Y ( I ) = TY ( I )
:
NE X T
1
CALCPAR :
B ( 5 ) =Z 4
:
C ( 5 ) =Z 5
PROC
CURVE
6
1 15
730
:
740
FOR
750
EXEC
760
A ( 6 ) =Z 3
770
E ND
780
:
790
P R OC
800
:
8 10
H I RES
820
L I NE
4 5 , 4 , 4 5 , 1 64 , 1
830
L I NE
4 5 , 1 66 , 4 5 , 1 6 7 , 1
840
L I NE
45 , 1 69 , 4 5 , 1 7 1 , 1
850
L I NE
46 , 1 7 1 , 47 , 1 7 1 , 1
860
L I NE
50 , 1 7 1 , 5 1 , 1 7 1 , 1
870
L I NE
5 4 , 1 7 1 , 2 94 , 1 7 1 , 1
880
FOR
890
L I NE
900
NE X T
9 10
FOR
920
L l NE
I , 1 7 2 , I , 1 74 , 1
930
NE X T
I
940
CHAR
50 , 1 7 6 , 2 4 , 1 , 1
950
CHAR
290 , 1 7 6 , 24 , 1 , 1
960
CHAR
26 , 1 60 , 25 , 1 , 1
:
970
CHAR
26 , 0 , 25 , 1 , 1
CHAR
980
:
990
S H $ = " 56 8 8 7 5 7 8 5 5 9 "
1=1
TO
N
:
X < I ) = 1 /TX < I )
:
I
CALCPAR :
B ( 6 ) =Z 4
:
C ( 6 ) =Z 5
PROC
GRAF I EK
1 ,0
1 =4
TO
1 64
STEP
20
42 , 1 , 44 , 1 , 1
1 =54
TO
294
STEP
:
20
CHAR
: :
CHAR C HA R
58 , 1 7 9 , 4 9 , 1 , 1 2 98 , 1 79 , 50 , 1 , 1 34 , 1 6 3 , 4 9 , 1 , 1
34 , 3 , 50 , 1 , 1
1 000
ROT
1010
:
1 020
FOR
1 030
X = I NT < FX * < TX < I ) -P X ) +5 4 . 5 )
1 0 40
Y = I NT < 1 6 4 . 5 - F Y * < TY < I ) - P Y »
1 05 0
DRAW
S H$ , X , Y , 1
1 060
NE X T
I
1 07 0
:
1 080
BX =54
1 0 90
FOR
1 1 00
E X = I NT < F X * < I - P X ) + 5 4 . 5 )
1 1 10
E Y = I NT < 1 6 4 . 5 - F Y * < F N F < I ) - P Y »
1 1 20
L I NE
1 1 30
BX =EX
1 1 40
NE X T
1 1 50
:
1 1 60
E ND
1 1 70
:
1 1 80
P R OC
1 1 90
:
1 200
NRM
12 10
P R I NT
116
NE X T
0 , 1
1=1
:
I =X 0
TO
N
B Y = I NT < 1 6 4 . 5 -F Y * < Y0 - P Y » TO
X N STEP
1 /F X
BX , B Y , E H , E Y , 1 :
BY=EY
I
PROC
SCHERM
A T ( 5 , 24 )
" DR U K
R E TURN
VOOR
G R AF I E KS
CH E R M " ; 1 220
PAUSE
1 2 30
F I LL
2 4 , 5 , 3 0 , 1 , 32 , 0
1 240
CSET
2
1 250
R E S UME
1 2 60
:
1 2 70
PROC
1 28 0
:
1 2 90 1 30 0
25
PR I NTER
NRM :
1 3 10
PAUSE
1 320
R E M HRDCPY
1 3 30
BLOCK
1 34 0
CSET
1 3 50
P AUSE
1 36 0
R E M COPY
1 370
CALL
1 380
:
1 3 90
PROC
1 400
:
1410
P R I NT
1 4 20
F I LL
1 4 30
P R I NT
AT ( 1 3 , 1 1 )
1 4 40
PAUSE
3
1 4 50 1 4 60 1 47 0 1 4 80 1 490 1 5 00 1 5 10 1 5 20 1 5 30 1 54 0 1 55 0 1 5 60 1 57 0 1 58 0 1 5 90 1 6 00 16 10
5
0 , 1 89 , 3 1 9 , 1 9 9 , 0 2 5
KEUZ E
BEG I N
1 0 , 1 2 , 1 5 , 3 , 42 , 0 " CURVE
F I TT I NG "
• •
EXEC
I NVOER
• •
EXEC
CURVE
1
CURVE
2
CURVE
3
CURVE
4
CURVE
5
CURVE
6
• •
EXEC • •
EXEC • •
EXEC • •
EXEC • •
EXEC • •
PROC
U I TV O E R
• •
1 620
NRM
1 6 30
P R I NT
1 64 0
F I LL
1 6 50
P R I NT
ES
CHR$ ( 1 4 7 )
CHR $ ( 1 4 7 ) 0 , 0 , 4 0 , 25 , 3 2 , 0 SP C ( 2 )
" OV E R Z I CH T
BESCH I K BARE
F U NCT I
: "
1 660
P R I NT
1 67 0
P R I NT
SPC ( 2 )
" I .
Y=B + A *X " , " 4 .
1 68 0
P R I NT
SPC ( 2 )
"2 .
Y=B *EXP ( A *X ) " , " 5 .
Y = B *X tA " Y = B +A *L
OG ( X ) "
117
1 6 90
PR I NT
SPC ( 2 )
"3.
P R I NT
AT ( 2 , 7 )
Y = 8 * E X P ( A /X ) " , " 6 .
Y = 8 + A /X
"
1 70 0
LEVERT
" R E G R E S S I E -ANALYSE
V IA
KKW
: "
1 7 10
A $ = O U P ( CH R$ ( 9 6 ) , 3 6 )
1 72 0
P R I NT
AT ( 2 , 9 )
1 7 30
P R I NT
AT ( 2 , 1 0 )
A$ " F U NC T I E
P A R A METERS
CORR . COEF . " 1 7 40
P R I NT
AT( 2 , 1 1 )
A$
1 75 0
MC = 0
1 7 60
FOR
1 77 0
IF
1 7 80
P R I NT
AT ( 4 , 1 0 +2 * I )
1 790
P R I NT
AT ( 1 1 , 1 0 + 2 * I )
"A= " , A ( I )
1 8 00
P R I NT
AT ( 1 1 , 1 1 +2 * I )
"8= " ' 8 ( 1 )
18 10
P R I NT
A T ( 29 , 1 0 + 2 * I )
"
1=1
TO
6
C( I »
MC
THEN
MC = C ( I )
:
CM= I
I
" I :
USE
" � . � � � " , ST
R$(C ( I » 1 82 0
I'E X T
I
1 8 30
P R I NT
1 84 0
I NV
1 850
PAUSE
1 86 0
:
1 87 0
PROC
1 88 0
AT ( 2 , 24 )
A$;
1 0 + 2 *CM , 2 , 36 , 2 1
SELECT
:
1 89 0
F I LL
1 90 0
P R I NT
AT ( 2 , 7 )
1910
F E TC H
CHR$ ( 1 7 ) , 1 , 8$
1 92 0
A = V A L ( 8$ )
1 9 30
IF
1 94 0
• •
1 950
IF
A= 1
THEN
1 96 0
IF
A -2
THEN O E F
F N F ( X ) = 8 ( 2 ) *E XP ( A ( 2 ) *X )
1 97 0
IF
A=3
THEN
OEF
FN
F ( X ) = 8 ( 3 ) *E X P ( A ( 3 ) /X )
1 980
IF
A=4
THEN
OEF
FN
F ( X ) =8 ( 4 , * X f A ( 4 )
1 990
IF
A=5
TH E N
OEF
FN
F ( X ) = 8 ( 5 ) + A ( 5 ) *L O G ( X )
2000
IF
A =6
THE N O E F
FN
F ( X ) =8 ( 6 ) + A ( S ) /X
20 1 0
• •
2020
I NV
2030
MOVE
1 0 + 2 *A , 2 , 3 6 , 3 , 1 2 , 2
2040
F I LL
1 4 , 2 , 36 , 1 1 , 32 , 0
2050
P R I NT
AT ( 2 , 1 4 )
2060
X0 =L l
:
2070
Y0 = F N
F < X0 )
2080
F l = ( Y0 ) YN )
2090
IF
( F I ANO F 2 )
THE N
Y0 = H 2
2 1 00
IF
( F I ANDF 3 )
THEN
YN= L 2
2 1 10
IF
NOT
F l
THEN
IF
Y0 ) L 2
THEN
Y0 = L 2
2 1 20
IF
NOT
F l
THE N
IF
YN < H2
THEN
YN = H 2
EN
1 18
7 , 2 , 3 6 , 1 , 32 , 0 " WE L K E
F UNCT I E
W I LT
U
TEK E N
" I
A< 1
OR
A )6
THEN
C A LL
SELECT
.
OEF
FN
F ( X ) = 8 ( 1 ) +A ( I ) *X
1 0 + 2 *C M , 2 , 36 , 2
A$
XN=H l : :
YN= F N
F ( XN )
F 2 = ( H2 >Y0 )
:
F 3 = ( L 2 < YN )
2 1 30
IF
2 1 40
PX =X0
2 1 50
F X = 2 4 1 / ( XN - X 0 )
2 1 60
F Y = 1 6 1 /ABS ( YN - Y0 )
2 1 70
:
2 1 80
EXEC
2 1 90
:
2200
P R I NT
AT(2 , 1 7 )
22 1 0
P R I NT
AT ( 2 1 , 1 7 )
2220
P R I NT
AT ( 2 , 1 9 )
2230
P R I NT
AT ( 2 1 , 1 9 )
2240
:
2250
PROC
2260
:
2270
L I NE
2280
A $ = C H R$ ( 2 ) + H ( P ) R I NTER
TS C H E R M
F l
THEN P Y = YN
: E LSE : P Y = Y0
GRAF I E K
"X 1 " X2 "Yl
" ; Y0 =
" ; YN
0 , 1 8 9 , 3 1 9 , 1 89 , 1 ( N ) I E UWE
PLOT
( T ) EKS
( E ) I NDE " 0 , 1 92 , A$ , I , I , 7
2300
F I LL
7 , 2 , 37 , 1 , 32 , 0
23 1 0
1 $ = " P TNE
2320
LOOP
2330
ON
2340
END
2370
=
" ; XN
KEUZ E
TE X T
2 36 0
" ; X0 =
" Y2
2290
23 50
=
KEY
11
1$, :
CALL
EX I T
LOOP
• •
PROC
EX I T
• •
2380
D I SABLE
2390
I N$ = C H R $ ( S T )
2400
IF
I N$ = " P H
THEN
C A LL
P R I NTE R
24 1 0
IF
I N$ = " T "
THEN
CALL
SCHERM
2420
IF
THEN
C A LL
U I TV O E R
2 4 30
IF
I N$ = " N " 11 I N$ = " E
THEN
NRM
.
•
•
END
READY .
119
Kogelbaansimulatie
Sprites hebben meer toepassi ngsmogel ijkheden dan a l leen het gebru i k i n spel l etjes. H et onderstaande programma simu leert de baan van een kogel die onder een bepaalde hoek wordt afgeschoten. Deze hoek, en de snelheid waarmee de kogel wordt afgevuurd, worden door het program ma gevraagd. De bereken i ngen i n het program ma zijn gebaseerd op wetmatigheden u it de beweg i ngsleer.
10
eALL
20
:
30
:
40
PRoe
BEG I N
D E F S P R I TE
:
50 60
DES I GN
7 0.
� .. .. .. . . . . . . . . . . . . . . . . . . . .
8 0.
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
90
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
1 0. 0
(2
•
•
•
•
•
•
•
"
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
1 10
(!;!
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
1 2 01
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
"
•
•
•
•
•
1 30
�
.
.
•
.
.
.
.
•
•
•
.
.
.
•
•
.
"
•
.
•
•
•
•
.
1 4 0.
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
1 50
�
.
.
•
.
.
.
.
.
.
•
.
•
.
•
•
.
.
•
1 60
�
•
.
•
•
•
.
•
•
BBBBBBBB
•
•
•
•
.
•
•
.
1 70
�
.
.
.
•
•
.
.
•
B B B B B BBB
.
•
.
•
•
•
.
.
1 80
�
.
.
•
.
.
•
.
.
BBBBBBBB
.
•
•
.
.
•
.
•
1 90
�
.
.
.
.
.
•
•
•
•
•
•
•
•
•
•
•
•
•
2 0 0.
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
2 10
C2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
2 2 0.
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
230
(2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
2 4 0.
(2 .. .. .. .. .. .. .. .. . . . . .. . . . . .. .. . .. .. .. ..
250
@! .. .. . . . . .. . . . .. .. . . . .. .. .. .. . .. .. .. ..
260
12 .. . .. .. . . . . . .. .. .. .. .. .. .. .. .. .. . .. .. .. ..
270
&: . . . .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. . .. .. .. ..
280
•
290
FOR
1 =0
TO
300
MOB
SET
1 , 1 3 , 0 , 0 ,0
310
NE X T
320
E ND
330
:
340
PRoe
350
:
360
D IM
370
I N= l
380
FOR
390
XX ( I N ) =20 +FN
Y
I N= I N + l
:
1 20
0 , 832
8888
BBBBBB
BBBBBB
888.8
.
7
I PRoe
B E R E K E N I NG
X X ( 2 0 1 ) , YY ( 20 1 )
T=0
TO
TE
S TE P
TE/200
X ( T ) /S X
:
YY ( I N ) = 2 32 - F N Y ( T ) /S
4 13 13
NEXT
4 1 13
YY C 2 e e ) = 2 3 2
4 2 13
E ND
4 3 13 4 4 13 4513
T
PROC
• •
PROC
SCHERM
• •
4 6 13
PR I NT
CHR$ ( 1 4 7 )
4 7 13
A$=DUP C C H R $ ( 1 68 ) , 3 3 )
4 8 13
P R I NT
4 9 13
US$= " M MMMMMMM . M M "
5 13 13
P R I NT
A$;
AT ( e , 24 )
AT< 1 8 ,e )
•
•
" S NE L HE 1 0
11 • ,
• .
USE
" MMMMM .
M/S " , S TR$ C V )
MM 5 1 13
P R I NT
A T ( 22 , l )
" HOEK
: "; :
USE
" MMMMM . MM
G
R O " , S TR$ ( HO ) 5 2 13
PR I NT
A T ( 2e , 2 )
" X ( MA X )
• ·
11
• ,
• .
USE
" MM M M M . MM
" Y ( MA X )
• ·
u
• ,
• .
USE
" MMMMM . M M
!YI " , S TR$ C X M ) 5 3 13
P R I NT
AT ( 2e , 3 )
M " , S TR $ C Y!YO 5 4 13 5 5 13 5613 5 7 13
E ND
PROC
: PROC
S I MULAT I E
: FOR
590
N "' I NT C 0 . 5 + < 1 9 9 /6 H I - ( 1 9 3/6 »
1'1
1=1
TO
7
5 8 13
IF
1'1= 2 13 1
THE
1'1 = 2 1313
6 13 13
R L O C MOB
I , X X ( N ) , YY ( N ) , e , l
6 1 13
MOB
1 , 1 3 , 1 , 13 , 13
6 2 13
NE XT
6 3 13
,.,10 B
SET
13 , 1 3 , 1 , 13 , 13
6 4 13
FOR
1=1
TO
6 5 13
R L O CMOB
6 6 13
NE X T
6 7 13
E ND
6 8 13
:
6913
PROC
7 13 13
:
7 1 13
PR I NT
7213
COLOUR
7 3 13
PR I NT
7 4 13
A $ = D U P C C HR $ ( 1 6 3 ) , 1 9 )
7513
P R I NT
AT C 5 , 9 )
7613
PR I NT
AT( 1 1 , 1 1 )
7 7 13
IF
OEK
N I ET
7 8 13
P R I NT
7913
:
81313
H = HO * � / 1 8e
810
V X = V *COS C H )
T
:
SET I
2 13 13
e , X X ( I ) , YY ( I ) , e , 1
I
PROC
BEG I N
CH R $ ( 1 4 7 ) ; C H R $ ( 5 ) 13 , 13 A T C 1 13 , 5 )
" K OG E L B A A N - S I MU L A T I E " :
PR I NT
AT( 10 ,6 )
A$
" B EG I NSNELHE I D
( ,.,1/S ) " ; :
I NPU
V
Ho = ( e IN
OR
" HO E K
HO ) =
RANGE "
:
AT C 1 13 , 2 3 )
:
913
( G R A DEN ) " ; :
T H E N P R I NT
I NP U T
HO
AT(5 , 15 )
"H
END " E EN
OGENBL I K
A.U.B. "
G=9 . 8 1 :
VY=V *S I N C H )
1 21
820
TE = 2 * V Y/G
830
X M = V X *TE
:
840
IF
THE N
850
S X = 1 . 0 5 * SC / l . 3
860
:
870
OEF
FN
X C T ) =VX*T
880
OEF
FN
Y C T ) = ( VY *T ) - ( 0 . 5 *G *T*T )
890 900
X M > YM
:
TH = TE /2 YM= ( V Y * TH ) - ( 0 . 5 *G * TH * TH ) S C = XM/2 0 0 :
: E LSE : SC = YM/200
SY= 1 . 05 *SC
: EXEC
9 10
:
920
EXEC
930
:
940
EXEC
950
:
960
PROC
970
:
980
EXEC
990
:
B E R E K E N I NG
D E F S P R I TE
SCHERM
B E G I N2
S I MU L A T I E
1 0 00
PR I NT
AT ( 20 , 5 )
10 10
REPEAT
1 020
F I LL
1 0 30
IF
:
GET
" NO G
A$
:
E E NS
U NT I L
( J /N ) " ; A$= " J "
A$= " N "
1 0 40
FOR
1 =0
TO
1 0 50
MOB
OFF
I
1 0 60
NE XT
1 0 70
COLOUR
1 080
E ND
1 22
A$= " N "
5 , 20 , 1 4 , 1 , 32 , 0 THEN P R I NT
CH R $ ( 1 4 7 )
B E G I N2
READY .
OR
7
I 6 , 15
•
•
P R I NT
CHR $ ( 1 4 4 )
: E L S E : CALL