Commodore 64 a

Page 1

Page 2

Page 3

HANDBOEK VOOR DE COMMODORE 64

Uitgegeven door Commodore Business Machines Inc.

Vertaling: Commodore Nederland

Page 4

Copyright © 1982 Commodore Business Machines, Inc. Alle rechten voorbehouden.

Alle rechten op dit handboek en op de inhoud ervan, berusten bij Commodore Business Machines, Inc., en het mag niet, geheel of gedeeltelijk worden overgenomen, worden opgenomen in een bestand, noch overgedragen worden op enige wijze, electronisch, mechanisch, per fotokopie, via bandopnamen of film, zonder de uitdrukkelijke voorafgaande toestemming van Commodore Business Machines Inc/Commodore Nederland.

tweede druk : 840264-C1

Page 5

WAARSCHUWING

Dit toestel wekt HF straling op die bij onjuiste verbinding met de TV ontvanger storing kan veroorzaken in andere radio- en TV-toestellen. Volg nauwkeurig de aanwijzingen op welke zijn vermeld op pagina 3 en 4 om dit risico zoveel mogelijk te vermijden. In het geval dat er toch storing optreedt bij TV- of radio-ontvangst, test dan eerst of die storing afkomstig is van uw Commodore 64. (Zet uw computer even aan en weer uit).

Indien ja, probeer dan het volgende:

  • draai aan de antenne;
  • zet de computer verder van het ontvangtoestel af;
  • is het ontvangtoestel correct verbonden met de antenne of CAI systeem?

In het geval dat bovenstaande raadgevingen geen verbetering geven, kunt u de CBM servicedienst van uw dealer bellen.

Page 6

Inhoudsopgave

Voorwoord ...

HOOFDSTUK 1

Installatie 3
Uitpakken van uw Commodore 64 4
Aansluiten op de Televisie en het lichtnet 5
Aansluiten op de Commodore Monitor 7
Aansluiten op andere Monitoren en versterkers 12
Check-List 13
Het aansluiten van de 1530 cassetterecorder 14
Instellen van de kleuren 16
Accessoires 18

HOOFDSTUK 2

Het grote begin 21
Toetsenbord 22
Het laden en saven van programma's 24
PRINT en rekenen 28
Rekenkundige bewerkingen 29
Meerdere berekeningen op een regel 30
Rekenvolgorde 31
Het afdrukken van tekst en getallen 32

HOOFDSTUK 3

Programmeren in Basic: Het grote begin 33
De volgende stap 34
GOTO en regelnummers 35
Het LIST commando 35
Tips voor het maken van veranderingen 35
Variabelen 36
IFTHEN 38
FORNEXT loops 39
Page 7

HOOFDSTUK 4

Basic voor gevorderden 41
Inleiding 42
Bewegende beelden 43
Loops of lussen 44
INPUT 45
GET 46
Functie toetsen 47
Random getallen en andere functies 48
Een raadseltje 50
Werpt U maar 51
Random graphics 52
CHR$ en ASC functies 52

HOOFDSTUK 5

Kleur en graphics voor gevorderden 53
Kleur en graphics 54
Het afdrukken van kleuren 54
CHR$ codes behorende bij de kleuren 56
PEEK en POKE 57
Tekenen op het scherm 59
De geheugenplaatsen van het scherm 59
De geheugenplaatsen voor de kleur informatie 60
Nog meer stuiterende ballen 61

HOOFDSTUK 6

Sprite graphics 63
Van bits en bytes naar sprites 64
Het tweetallig rekenstelsel 64
Het maken van sprites 67
Meer over sprites, kleur en beweging 73

HOOFDSTUK 7

Het maken van geluid 75
U bent geen programmeur, en toch wilt u geluid 76
De opbouw van een toon 76
Volume 77
Golfvorm - 77
Frequentie 79
Omhullende generator (ADSR) 80
Page 8
Attack/Decay 80
Sustain/Release 82
Voorbeeld programma's 83
Een melodie spelen met uw Commodore 64 8
Geluidseffecten 86
Het proberen waard 8

HOOFDSTUK 8

Data manipulatie voor gevorderden
READ en DATA
Middelen van getallen
Geïndiceerde variabelen
Het begrip dimensie
Dobbelstenen met arrav's
Twee-dimensionale array's
Enquete

APPENDICES

Vo orwoord 102
Α Beschikbare software 103
В gebruiksaanwijzing voor uw 1530 datasette 109
С Commodore 64 BASIC 120
D Afkortingen van BASIC woorden 134
Е Scherm codes 136
F ASCII en CHR$ codes 139
G Memory map van het scherm- en kleurgeheugen 142
Н Afgeleide wiskundige functies 144
Ł Aansluitgegevens 145
J Het proberen waard 148
Κ Het omzetten van programma's naar Commodore BASIC 151
L fout boodschappen 152
Μ Muzieknoten 154
Ν Literatuur opgave 158
0 Sprite registers 161
Ρ Muziek registers 164

..... 168

Page 9
Voorwoord

Van harte gelukgewenst met de aankoop van een van de beste computers ter wereld! U bent de trotse bezitter van een Commodore 64. De Commodore 64 staat bekend als de vriendelijke computer en een deel van die vriendelijkheid vindt u terug in ons streven om te komen tot handboeken die gemakkelijk te lezen zijn, eenvoudig in het gebruik en: begrijpelijk. Dit handboek in het bijzonder is geschreven om u alle informatie te verschaffen voor het in bedrijfstellen van uw Commodore 64, en u op vlotte wijze op dreef te brengen bij het zelf maken van programma's.

Als u behoort tot de grote groep gebruikers die niet zelf willen programmeren: alle informatie om Commodore programma's op cassette of in cartridges te kunnen gebruiken, vindt u vooraan in het handboek. U hoeft dus niet alles door te bladeren om te kunnen beginnen!

Er zitten nogal wat buitengewone mogelijkheden in uw Commodore 64. In de eerste plaats bezit u wat grafische mogelijkheden aangaat, de meest geavanceerde 'plaatiesmaker' uit de hele microcomputer industrie. We noemen het "sprite graphics", en u bent in staat afbeeldingen te maken in 4 kleuren, precies zoals u dat ziet in de mooiste video speelautomaten. Bovendien kunt u 8 verschillende afbeeldingen tegelijkertijd over het scherm laten bewegen. U kunt voorwerpen over elkaar, achter elkaar langs laten gaan. De computer geeft aan of ze in botsing komen zodat u kunt bepalen wat er zal gaan gebeuren als uw creaties elkaar raken. De Commodore 64 heeft als tweede belangrijke eigenschap de ingebouwde muziek synthesizer die niet onderdoet voor vele reeds bekende merken. U kunt 3-stemmig muziek maken over een bereik van 9 octaven, 4 verschillende golfvormen: zaagtand, driehceksspanning, blokgolf generator en ruis. Aanzwel- en afvaltijd de duur en het nagalmvolume van het geluid is te programmeren Standaard is ook de omhullende generator en de programmeerbare eindfiltering (bandpass, low- en high pass!) voor de drie stemmen samen. Natuurlijk volume instelling en zwevings modulator. De Commodore 64 kan aangesloten worden aan elke hi-fi installatie zodat uw muziekstukken professionele kwaliteit krijgen.

Page 10

Randapparatuur

Nu we het toch hebben over het aansluiten van de Commodore 64 aan andere apparatuur: vergeet niet dat de computer uitgebreid kan worden met accessoires (randapparaten genoemd) wanneer u daar de behoefte toe voelt. Een voorbeeld daarvan is een cassetterecorder (de Datasette©) of een tot vier floppy 1541 disk drives om de door u zelf gemaakte programma's op vast te leggen.

De vele Commodore printers, matrix-printers zoals de MPS-801 en MPS-802, een kleuren printer MCS-801, een margrietwiel printer de DPS-1101 en de printer plotter 1520 kunnen zo aangesloten worden. U kunt dan programma's afdrukken, fakturen drukken, of brieven schrijven. Een 1701 kleuren monitor voor een perfecte beeldkwaliteit. Zelfs spraak is mogelijk, wanneer u uw 64 met de 'speech-module' uitrust. Indien u een van de enthousiaste CP/M gebruikers bent: de Z-80 CP/M cartridge verandert uw Commodore 64 in een CP/M machine en geeft u toegang tot de grote verscheidenheid aan CP/M software.

Hardware alleen is niet het enige dat belangrijk is. Dit handboek zal u helpen computers te leren begrijpen. Er staat niet alles over in, maar waar nodig wordt er verwezen naar dieper gaande informatie over het behandelde onderwerp.

Wij van Commodore hopen echt dat u veel plezier zult beleven aan uw nieuwe aanschaf. Programmeren is echter iets dat men niet in een dag kan leren, en om een goede basis te verkrijgen, dient u in het begin langzaam en geduldig het handboek door te werken. U zult hier later veel steun aan hebben. Vul voor u begint de garantiekaart in en zend deze op naar Commodore. U ontvangt dan regelmatig aanvullende informatie over het gebruik van uw computer. Veel genoegen!

-

Noot:

Tijdens het ter perse gaan van dit handboek waren er nog veel programma's voor de Commodore 64 in ontwikkeling. Raadpleeg uw wederverkoper voor de laatste stand van zaken of abonneer u op een van de tijdschriften van Commodore gebruikers:

  • VCGN
  • VIC nieuws
  • Printout
  • Commodore 64
Page 11

HOOFDSTUK 1 INSTALLATIE

  • Uitpakken van uw Commodore 64
  • Het aansluiten aan de TV
  • Het aansluiten van uw Commodore 1701/2 monitor
  • Aansluiten op andere monitoren of versterkers
  • Het aansluiten van de 1530 cassette recorder
  • Aanzetten
  • Instellen van de kleuren
  • De Commodore 64 en haar accessoires

Uitpakken en aansluiten

Wanneer u de hiernavolgende aanwijzingen nauwkeurig opvolgt, kunt u er zeker van zijn dat alle verbindingen naar de TV, de hi-fi installatie of naar een eventuele monitor in orde zijn en dat alles goed zal werken. Controleer om te beginnen de inhoud van de polystyreen doos. Daar behoort in te zitten:

  • 1. 1 Commodore 64 computer
  • 2. 1 voeding (een dik beige blok met twee snoeren eraan)
  • 3. 1 coaxiale kabel voor het aansluiten van de TV
  • 4. 1 manual (Nederlands)
  • 5. 1 garantiekaart (Nederlands)

Indien een van de bovengenoemde punten ontbreekt, dient u direkt kontakt op te nemen met uw wederverkoper.

Laten we eerst eens bekijken wat er zoal aan schakelaars en aansluitpunten aanwezig zijn op uw computer.

Rechterzijkant

  • 1. Aansluiting voor de voedingsspanning. Dit is het punt waar u het voedingsblok aan moet sluiten. De ronde plug aan een van de snoeren past hier precies in.
  • 2. Netschakelaar. Hiermee schakelt u de computer aan en weer uit.
  • 3. Aansluitingen voor joysticks of paddles voor spelen. Hier kan ook een lichtpen op worden aangesloten.

Achterzijde

4. Cartridge aansluiting. Deze rechthoekige connector is bestemd voor het insteken van cartridges met programma's of spelletjes.

Page 12

HOOFDSTUK 1 INSTALLATIE

Page 13

  • 5. Hoogfrequent uitgang. Via deze bus komt het signaal voor uw TV naar buiten (beeld en geluid).
  • Audio en video uitgang. Deze DIN-connector levert een hi-fi audio signaal voor aansluiting aan een geluidsinstallatie, alsmede een PAL- composiet video signaal bestemd voor een (kleuren) monitor.
  • Aansluiting voor randapparatuur, de z.g. seriële poort. Printers of disk drives worden alle aan deze poort aangesloten.
  • 8. Aansluiting voor cassetterecorder. Hier kan de speciale Datasette recorder worden aangesloten voor het opslaan van informatie
  • De z.g. userport. Deze in- en uitgang is bestemd voor speciale doeleinden zoals MODEM aansluiting of RS 232 communicatie.
  • NB: RANDAPPARATUUR EN CARTRIDGES NOOIT AANSLUITEN OF VERWIJDEREN MET AANGESCHAKELDE COMPUTER!!!!

Aansluiten op de tv

  • 1. Steek de smalle connector van de coaxiale kabel in connector 5. Goed aandrukken, het kan maar op één manier.
  • 2. Steek het andere einde in de coaxiale antenne-ingang van uw TV.
  • Steek de ronde aansluitbus van het voedingsblok in connector 1, en steek de stekker in het stopcontact (220V, 50Hz). De 220 V van het lichtnet wordt omgevormd tot een lage spanning van 5V en 9V. De ronde aansluitbus kan maar op een manier aan de Commodore 64 worden aangesloten. Alle noodzakelijke verbindingen zijn gemaakt.
Page 14

  • Schakel de computer in met de schakelaar aan de rechterzijde. Het lampje op de computer zal nu oplichten. Als dit niet gebeurt kijk dan in de 'checklist' verderop.
  • 5. De TV moet ingesteld worden op kanaal 36 in de UHF band. Kijk in de gebruiksaanwijzing van uw TV toestel hoe u dit moet doen. Stel de TV zodanig af dat u een beeld krijgt als volgt:

Page 15

De Commodore 1701/2 kleurenmonitor

Als u een Commodore 1701/2 monitor heeft aangeschaft om een beter beeld te verkrijgen, dan vervalt de uitleg over het aansluiten op de TV en is het navolgende stukje uitleg van belang.

Benaming van de bedieningsknoppen

Deze klep kan opengeklapt worden door deze naar u toe te trekken.

Page 16

ACHTERZIJDE

Om de monitor op uw Commodore 64 computer aan te sluiten maakt u gebruik van de bij de monitor geleverde aansluitkabel. Let er op dat u de beide apparaten uitgeschakeld heeft voor u ze met elkaar verbindt.

1. Steek de ronde 5-polige DIN-steker achter in uw Commodore 64 computer, in de aansluiting gemerkt VIDEO-UIT (Dit is de linker aansluiting, bij achteraanzicht van uw Commodore 64).

Aan het uiteinde van de verbindingskabel zitten drie zg. RCA pluggen, deze moeten op de volgende wijze, aan de achterzijde van de monitor, gestoken worden : de audio-uit plug WIT naar AUDIO, luminantie-uit GEEL naar LUMA en de chroma-uit ROOD naar CHROMA. De schakelaar SIGNAL-SELECT moet in de stand 'REAR' (achter) geplaatst worden.

Page 17

ACHTERZIJDE MONITOR

  • Het is mogelijk een VIDEO-RECORDER of TV-TUNER op uw 1701/2 monitor aan te sluiten, u moet dan gebruik maken van de aansluitingen aan de voorzijde van de monitor. De schakelaar 'SIGNAL SELECT' dient dan in de stand 'FRONT' te staan. Voor gedetailleerde informatie verwijzen wij u naar de bij de monitor geleverde handleiding.
    • 2. Controleer of de ingestelde netspanning inderdaad 220 V is. Dit kunt u zien op de netspannings selector aan de achterzijde van de monitor. Stel deze indien nodig, met een kleine schroevendraaier in op 220 V.

Page 18

3. Schakel de monitor AAN door op de schakelaar aan de voorzijde te drukken. De groene netspannings indicator zal oplichten.

(Het een tweede maal indrukken van de schakelaar schakelt de monitor weer

Schakel vervolgens uw Commodore 64 AAN. Als alles goed is zal de monitor met het volgende beeld opkomen.

TINT INSTELLING Naar links draaien geeft meer rood, naar rechts geeft meer groen. Probeer een zo natuurlijk mogelijke kleur-verbouding in te stellen. De normale stand van deze knop is het midden (klik- positie).

BOOD ( GROEN KLEUR

INSTELLING

HEI DERHEID INSTELLING

Draai naar links voor fletse (zwart/wit) kleuren en naar rechts voor volle warme kleuren. De normale stand van deze knop is het midden (klik- positie)

Naar rechts draaien voor een helder beeld. De normale stand van deze knop is het midden (klik- positie).

CONTRAST

INSTELLING

Naar rechts draaien voor een contrastrijk beeld. De normale stand van deze knop is het midden (klik-positie).

Draai de knop naar rechts, om het midden van het beeld naar rechts te verolaatsen, en naar links m het scherm naar links te verplaatsen. De normale stand van deze knop is het midden (klik-positie).

Page 19
V.VANG BEREIK

Verdraai deze knop naar links of naar rechts om het verticale rollen van het beeld tegen te gaan.

Draai deze knop naar rechts om het geluids volume te versterken, en naar links om het te verminderen.

BELANGRIJKE TIPS

  • Zorg voor voldoende ventilatie van de monitor.
  • Bedek de bovenste ventilatie sleuven van de monitor nooit met papier, of een doek.
  • Plaats de monitor nooit op een bed, sofa, of wollig tapijt, waardoor de onderste ventilatie sleuven geblokkeerd kunnen worden.
  • Plaats de monitor nooit in een kast, als er niet voldoende ventilatie is.
  • Gebruik geen water in de directe omgeving van de monitor.
  • Overtuig u ervan dat kinderen geen metalen voorwerpen door de ventilatie openingen naar binnen steken.
Page 20

Aansluiten op andere monitoren of versterkers

U kunt het geluid van de Commodore 64 weer laten geven via een hi-fi versterker installatie. Bovendien is er voorzien in een PAL-composiet video signaal, zodat weergave van beeld en geluid via een andere dan de Commodore 1701/2 monitor ook tot de mogelijkheden behoort.

Verbindingen naar die apparatuur dienen te lopen via de audio-video uitgang 6 aan de achterzijde. Om het u gemakkelijk te maken zijn er in de radiohandel kabels te koop met aan een zijde een 5-pens DIN audio aansluiting, en aan de andere een rode en een zwarte coaxiale plug. Goedkoper is zelf maken: de aansluitgegevens vindt u in appendix I.

De zwarte plug van de DIN kabel is de audio uitgang. Indien u toevallig een apparaat bezit met een audio ingang voor die plug, kunt u hem zo aansluiten. Gebruik de ingang gemerkt AUX voor dit doel.

De witte (of de rode) connector is de video uitgang welke naar de monitor gaat. (De 5-polige 180 gr plug past in de 8-polige aansluiting van de Commodore 64).

In appendix I staat aangegeven hoe de verbindingen horen te zijn in het geval u ondanks alle moeite nog geen beeld of geluid krijgt. De bezitters van een 1541 disk drive of een van de vele Commodore seriële printers, dienen hun toestel aan te sluiten volgens in de bijbehorende handboeken aangegeven instructies.

Resume

  • 1. Zet de TV aan op UHF band
  • 2. Zet de computer aan (netschakelaar 2 aan zijkant)
  • 3. Na even wachten ziet u het volgende beeld:
  • 4. Stel de fijnregeling van de kanaalkiezer zo in dat u een scherp beeld krijgt.
  • Instellen van kleur heeft nu nog niet veel zin. Het beeld is donkerblauw met lichtblauwe rand en letters.
Page 21

Checklist

Volg onderstaande checklist indien u geen juist beeld heeft.

Symptoom Oorzaak Remedie
Lampje (power)
niet aan.
Computer uit Kijk of schakelaar
wel "on" staat.
Voedingskabel niet
in connector 1
Voedingskabel goed
aandrukken in con-
nector.
Voeding niet aan-
gesloten
Steek stekker in stopcontact
Zekering in computer doorgeslagen. Ga naar de dealer voor
vervanging en controle
Geen beeld, wel
sneeuw
TV niet op juiste
kanaal
Probeer UHF kanaal 36
Computer niet aan TV aangesloten. Aansluiten!
Slecht beeld niet van toepassing Draai aan kanaalkiezer
Onzin op beeld bij
gebruik van een
cartridge.
Cartridge verkeerd
ingestoken.
Computer uitzetten,
cartridge goed
insteken,
computer aanschakelen.
Beeld zonder kleur Slechte afstemming Goed afstemmen.
Slechte kleuren Kleurafstelling TV onjuist Contrast en kleurver-
zadiging instellen.
Goed beeld, sissend Volume regelaar TV geluid. te ver open. TV zachter zetten.
Beeld OK, geen
geluid.
TV geluid te zacht.
Aux input fout
verbonden of niet
geselecteerd
TV harder zetten.
Raadpleeg instructies
van uw versterker.

TIP:

ledereen kan werken met een Commodore 64 computer. Wij kunnen ons echter voorstellen dat er zich wel eens problemen voordoen. Commodore geeft tijdschriften en literatuur uit om veel van de vragen te beantwoorden en een schat aan voorbeelden te geven.

Page 22
Het aansluiten van de 1530 cassetterecorder op uw Commodore 64 Voorlopige controle

Voordat u uw 1530 gaat gebruiken om programma's in te lezen of op te slaan moet u eerst de werking controleren aan de hand van de volgende stappen:

1. Schakel de computer UIT, sluit de 1530 Cassette Recorder aan (zie figuur).

MAAK NOOIT EEN VERBINDING MET UW COMPUTER ALS DEZE IS AANGESCHAKELD

  • 2. Verzeker u ervan dat de 1530 motor uit is door na te gaan of alle functietoetsen omhoog staan. Is dit niet het geval, dan drukt u op de STOP-toets.
  • 3. Schakel de computer AAN.
  • Druk de PLAY-toets op de 1530 in. Kijk of, wanneer de toets wordt ingedrukt, de READ/WRITE-kop naar de spoelen toe beweegt en of de capstan-as in contact komt met de aandrukrol (zie figuur). De oprolspoel moet gelijkmatig tegen de klok indraaien.
  • 5. Druk nu op de STOP-toets. De koppen moeten nu teruggaan en de spoel moet stoppen.
  • 6. Druk de REWIND-toets in. De hoofden moeten in de rustpositie blijven en de aanvoerspoel moet snel met de wijzers van de klok meedraaien.
  • 7. Druk nogmaals op STOP en vervolgens op F.FWD. De schrijfkoppen blijven nog steeds in de rustpositie en de oprolspoel moet nu snel tegen de wijzers van de klok indraaien.
  • B. Druk nogmaals op STOP en probeer dan VOORZICHTIG de RECORD-toets in te drukken. U moet hier een sterke mechanische weerstand gewaar worden. NIET doordrukken. Dit is een beveiliging.
  • 9. Wanneer alles naar behoren heeft gewerkt, kunt u verder gaan met de controle van uw computer systeem. In hoofstuk 2 zult u leren hoe u programma's kunt inlezen en wegschrijven. Wanneer u echter op problemen bent gestuit bij deze voorlopige controle, wilt u dan de laatste pagina van de cassette-recorder handleiding opslaan. Hier staan een aantal tips beschreven, waarmee u uw problemen kunt oplossen
CASSETTE RECORDER AANSLUITING

Page 23

Controle op de werking

Om de werking van uw nieuwe 1530 te testen moet u een kort programma schrijven, en dit weg schrijven op cassette (SAVEn) om het hierna weer in te lezen (LOADen) in de computer. Zie hoofdstuk 2 en de cassette recorder handleiding.

De 1530 gebruikt normale audiocassettes. Druk altijd op REWIND om ervoor te zorgen dat u aan het begin van het bandje bent.

Noot: Gebruik bandjes met een speeltijd van 0 tot 30 minuten, en GEEN bandjes met een langere speelduur, deze belasten de 1530 te veel. Nadat we alles aangesloten hebben, kunnen we verder met de computer zelf.

Page 24

De cursor

Het knipperende vierkantje direct naast het woordje READY wordt de cursor genoemd. De aanwezigheid ervan wil zeggen dat alles wat ingetikt gaat worden daar op het scherm verschijnt. Bij elke toetsdruk schuift de cursor een positie op. Op de voorgaande positie staat het ingetikte karakter weergegeven. Tikt u maar iets in. Kijk hoe hetgeen u intikt op het scherm verschijnt.

Instellen van kleuren

Niets is minder eenvoudig dan het maken van een serie kleuren op het scherm. Daarmee is het instellen van de TV dan mogelijk. Zelfs wanneer u nog totaal niet vertrouwd bent met de computer, hoeft u geen angst te hebben. Volg de aanwijzingen: Aan de linker bovenzijde van het toetsenbord vindt u de toets gemerkt <CTRL>. <CTRL> is de afkorting van ConTRoL. Samen ingedrukt met een andere toets krijgt de computer de opdracht om een bepaalde taak uit te voeren.

Probeer maar eens de <CTRL> toets samen met de toets 9 in te drukken (altijd eerst <CTRL>, dan de andere toets). Gebeurt er iets? Niets, zult u zeggen. Druk nu op een of andere letter. Het teken komt nu in z.g. reverse (omgekeerd) op het scherm in plaats van op de normale manier. Hou nu uw vinger op de spatiebalk. Als u het bovenstaande juist heeft uitgevoerd, verschijnt er een lichtblauwe balk op het scherm die langer wordt en zich voort zal zetten op verdere regels, net zolang als u uw vinger op de balk houdt.

Page 25

Druk nogmaals op <CTRL> maar nu tegelijkertijd op een van de andere toetsen 1 t/m 8. Vooraan op die toetsen ziet u in het Engels de kleuren staan:

BLK = zwart, RED = rood, PUR = paars,

BLU = blauw, WHT = wit, CYN = cyaan,

GRN = groen, YEL = geel.

Vanaf nu is alles dat op het scherm komt in die kleur. <CTRL> en 8, gevolgd door drukken op de spatiebalk geeft een gele balk! U begrijpt dat op deze wijze elk van de 8 kleuren in balkvorm gemaakt kan worden.

Maak een "testbeeld" en stel dan de TV af door draaien aan de contrastregelaars en de regelaar voor de kleurverzadiging. Onderstaande afbeelding is wat er nu op het scherm zou kunnen staan.

Met behulp van het voorgaande kunt u de instellingen optimaliseren. De nu volgende hoofdstukken zullen u inwijden in de geheimen van de BASIC programmeertaal. Nu uw computer en TV goed zijn ingesteld kunt u echter ook direct gebruik maken van game cartridges, of programma's op tape. Bij elk van de cartridges of programma tapes vindt u een bijsluiter waarop aangegeven staat hoe u te werk dient te gaan. U hoeft eigenlijk niets van programmeren af te weten! Toch raden wij u aan de moeite te nemen de eerste paar hoofdstukken door te lezen. Het verhoogt de kennis van de werking van uw aanwinst.

Page 26

De Commodore 64 en haar accessoires

De Commodore 64 kent een groot aantal randapparaten die de mogelijkheden van uw computer sterk vergroten. Deze randapparaten omvatten :

  • opslag apparatuur
  • printers en plotters
  • monitoren
  • modems voor telecommunicatie
  • spel modules
  • spraak en grafische modules
OPSLAG APPARATUUR
CASSETTE RECORDER

Het eenvoudigste apparaat waarmee u gegevens opslag kunt realiseren is de 1530 cassette recorder, hiermee kunt u programma's wegschrijven en inlezen van cassette's. Ook is het mogelijk om met behulp van de 1530 eenvoudige sequentiële bestanden op te bouwen.

DISK-DRIVES

De Commodore disk-drives stellen u instaat grote hoeveelheden informatie op een 5.25 inch diskette op te slaan. Diskette opslag biedt u het voordeel van snelle gegevens opslag en opvragen. Alle bestanden en programma's die u op de diskette geschreven heeft worden automatisch in een 'directory' of inhoudsopgave zichtbaar gemaakt. Welke u op scherm of op uw printer af kunt laten drukken.

Op uw Commodore 64 kunt u maximaal 4-1541 disk-drives aansluiten door ze te 'daisy-chainen' dit is het zg. doorlussen.

Ook kunt u gebruikmaken van de disk-drives van de professionele Commodore systemen zoals de SFD-100I en 8250 disk-drives, deze kunt u aansluiten met behulp van een zg. IEEE-interface.

Page 27
PRINTERS EN PLOTTERS
PRINTERS

Op uw Commodore 64 kunt u de Commodore matrix-printers MPS-801 (een grafische 80 koloms printer) en de MPS-802 (een 80 koloms karakterprinter) aansluiten. Verder kennen we de DPS-1101 margrietwiel printer en de MCP- 801 kleuren printer.

Ook kunt u gebruikmaken van de printers van de professionele Commodore systemen zoals de Commodore 6400 letter kwaliteit printer of de snelle 8023 printer. Deze printers kunt u aansluiten met behulp van de zg. IEEE- interface cartridge.

DE 1701/2 MONITOR

De Commodore 14" (35 cm) geeft u een perfecte kleuren weergave, met een hoog oplossend vermogen, van uw Commodore 64 beeld. De monitor wordt op de Commodore 64 met behulp van een bijgeleverde kabel aangesloten.

MODEMS VOOR TELECOMMUNICATIE

Voor de Commodore 64 zijn VIDITEL interfaces beschikbaar, waarmee u van uw Commodore 64 de goedkoopste VIDITEL-terminal maakt die op de markt verkrijgbaar is.

Met behulp van een 300/300 baud modem kunt u met uw Commodore 64 verbindingen maken naar andere computers of zelfs gebruikmaken van computer data-banken.

DE Z-80 MICROPROCESSOR EN HET CP/M ® OPERATING SYSTEEM.

Het plaatsen van de Z-80 microprocessor, maakt uw Commodore 64 tot een dual-microprocessor personalcomputer. Het gebruiken van de Z-80 betekent de toegang tot het populaire CP/M operating systeem waarvoor een grote hoeveelheid software toepassingen, zoals tekstverwerking, veel gebruikte zakelijke en technische programma's, programmeertalen zoals COBOL, FORTRAN etc. en andere nuttige programma's binnen uw bereik komen.

UITBREIDINGEN VOOR SPEL EN ANDER GEBRUIK

Commodore heeft joysticks (stuurknuppels), en paddles (draaiknoppen) die het spelen op uw computer verrijken. Deze uitbreidingen worden niet alleen gebruikt in spelen, maar ook bv. in de programma serie MAGIC-DESK, waarin met behulp van de joystick de computer opdracht wordt gegeven om ingewikkelde handelingen uit te voeren, zoals het afdrukken van een tekst, of het openen van een bureau-lade.

DE COMMODORE SPRAAK MODULE

De Commodore spraak module laat uw Commodore 64 spreken. De module heeft een ingebouwde (Engelse) woordenschat van 235 woorden. Door de module softwarematig te beinvloeden, kan de klank en uitspraak veranderd worden. Het is erg eenvoudig de module vanuit BASIC te programmeren. De module wordt ook door programma's zoals MAGIC-DESK, GORF en WIZARD OF WOR aangestuurd.

Page 28

PRINTER/PLOTTER

De Commodore 1520 printer/plotter maakt grafieken in 4-kleuren (rood- groenzwart-blauw). Met de 1520 kunt u staaf diagrammen, cirkel diagrammen en andere complexe x-y grafieken produceren.

COMMODORE GRAFISCHE UITBREIDINGEN

Commodore heeft een variëteit aan grafische programmeer hulpmiddelen, waaronder de Super-Expander cartridge, welke eenvoudige gemakkelijk te leren plot-instructies aan uw Commodore 64 toevoegt, tot de SIMONS BASIC cartridge, welke 118 verschillende BASIC instructies (van grafische instructies tot programmeer hulpmiddelen) kent. En natuurlijk programma's zoals PILOT en LOGO met TURTLE graphics.

Page 29

HOOFDSTUK 2 HET GROTE BEGIN

Page 30

HOOFDSTUK 2 HET GROTE BEGIN

  • Toetsenbord
  • Terug naar normaal schrift
  • Laden en saven van programma's
  • Print en rekenen
  • Rekenvolgorde
  • Samenstellen van teksten

Toetsenbord

Het meeste verkeer tussen u en de computer zal via het toetsenbord gaan lopen. Het is dus zinvol om even op ons gemak te kijken wat er allemaal mee te doen is. Het toetsenbord ziet er zo ongeveer uit als dat van een schrijfmachine. U komt echter nog een paar extra toetsen tegen waarmee speciale functies kunnen worden opgeroepen. We zullen nu volstaan met het in het kort aangeven van de belangrijkste ervan. Uitgebreidere beschrijvingen vindt u verderop in dit boek.

Het indrukken van de <RETURN> toets is het teken voor de computer dat de laatst ingetikte informatie gelezen moet worden. Eventueel wordt de informatie in het geheugen opgeslagen.

Ook op een schrijfmachine komen we de <SHIFT> of wagenwissel toets tegen. Veel van de aanwezige toetsen kunnen meerdere tekens laten verschijnen. Zo zal de SHIFT toets samen met een lettertoets ingedrukt, een grafisch teken geven. De lettertoets alleen geeft een (hoofd)letter. De Commodore 64 kan ook grote- en kleine letters weergeven, naast de karakterset van grote letters en grafische tekens. Dat omschakelen gebeurt door indrukken van <SHIFT> en de toets gemerkt G tegelijkertijd (zie pag. 23). Los van het normale toetsenbord ziet u nog 4 functietoetsen.

Los van het normale toetsenbord ziet u nog 4 functietoetsen. Via die 4 toetsen zijn 8 (4 zonder SHIFT, 4 met gelijktijdig indrukken van SHIFT) bereikbaar. Later meer over die functies.

HET VERBETEREN VAN VERGISSINGEN

Vergissen is menselijk en de Commodore 64 houdt daar rekening mee. Op het toetsenbord bevinden zich een aantal toetsen waarmee correcties aangebracht kunnen worden in reeds getikte tekst.

Rechts onderaan vindt u 2 toetsen waarop het woordje <CRSR> (CuRSoR) voorkomt. Weet u nog wat dat was? (pag. 10). De ene toets is voorzien van pijlen naar boven en naar beneden en de andere van naar links en rechts wijzende pijlen. U begrijpt al wat daarmee gedaan kan worden. Zonder <SHIFT> gaat de cursor naar beneden of naar rechts, bij

Page 31

indrukken van de toets met <SHIFT>, naar boven of naar links. Zolang de toets blijft ingedrukt, blijft de cursor doorlopen. We noemen dit verschijnsel met een goed Nederlands woord key-repeat.

INST/DEL

Rechts bovenaan zit een toets gemerkt INST/DEL (INSerT/ DELete). Het indrukken van die toets heeft tot resultaat dat het teken juist links van de cursor wordt "opgegeten". Wanneer de cursor midden in een regel of een stuk tekst staat, wordt alles wat rechts van de cursor staat een positie naar links opgeschoven. Omgekeerd <SHIFT> en <INST/DEL> voegt een spatie tussen de cursorpositie en de eventuele volgende tekst. Als u tijdens het intikken bemerkt dat u aan het begin van de regel een teken vergeten bent, dan wandelt u er maar naar toe <SHIFT> <CRSR>, u drukt op <SHIFT> en <INST/ DEL> om een spatie tussen te voegen en u tikt het ontbrekende karakter in.

  • CLR/HOME<CLR/HOME> rechtsboven ingedrukt verplaatst de cursor<br/>naar de z.g. home positie, dat is helemaal links bovenaan in het<br/>scherm. <SHIFT> en <CLR/HOME> veegt het hele scherm<br/>schoon en zet de cursor in de home positie.RESTORE<RESTORE> is de toets welke u nodig heeft om alle door u
    • <RESTORE> is de toets welke u nodig heeft om alle door u aangebrachte veranderingen aan scherm, geluid, kleuren, weer ongedaan te maken. Meer over die toets vindt u verderop in het boek.

TSEN Los van de overige toetsen bevinden zich 4 functie toetsen met in totaal 8 aanroepbare functies (<SHIFT>, weet u wel). U bepaalt zelf welke functies deze toetsen zullen krijgen.

Bijzondere functies

  • CTRL (ConTRoL) Het kiezen van de kleuren en nog een aantal andere speciale functies worden verricht door het indrukken van de <CTRL> toets (eerst!) gevolgd door een tweede toets. Eerder al gebruikten we de <CTRL> toets en de toetsen 1 ... 8 voor het kiezen van de kleuren van ons "testbeeld".
  • RUN/STOP Lopende programma's worden normaliter onderbroken bij indrukken van de RUN/STOP toets. De computer krijgt het bevel STOP! Samen met <SHIFT> geeft de functie <RUN>: het automatisch laden van tape van een programma, gevolgd door het starten ervan.
  • COMMODORE TOETS Een van de functies van de G toets is het omschakelen tussen de beide karaktersets. Bij het inschakelen van de computer worden er op het scherm hoofdletters of grafische tekens weergegeven (al of niet SHIFT ingedrukt). Een druk op een lettertoets geeft op het scherm een hoofdletter. Bij het indrukken van zo'n toets samen met <SHIFT> verschijnt het grafische teken dat rechts op de voorzijde van de toets staat
Page 32

afgebeeld. Het omschakelen naar de karakterset grote/kleine letters, gebeurt door het indrukken van G en <SHIFT> tegelijkertijd. Een toets geeft u een kleine of grote <SHIFT> letter, of samen met G ingedrukt, het grafische teken links voorop de toets.

U komt terug naar grote letters en grafische tekens door hernieuwd indrukken van <SHIFT> en C.

Een andere functie is het toegankelijk maken van nog eens 8 kleuren. Samen met een van de toetsen 1 ... 8 geeft de kleur zoals vermeld in het lijstje in hoofdstuk 5.

TERUG NAAR NORMAAL SCHRIFT

Voor het ogenblik hebben we voldoende geoefend met het toetsenbord. Het is nu tijd om te beginnen aan het verkennen van de vele mogelijkheden van de Commodore 64.

De balken die we gemaakt hebben, verwijderen we door het indrukken van <SHIFT> en <CLR/HOME>. Zoals we hierboven zagen komt de cursor terug in HOME positie. De kleur van de letters wordt weer licht blauw als de toetsen XX en 7 worden ingedrukt. Een ding niet vergeten: CTRL en 0 (een streep erdoor om aan te geven dat het om een nul gaat, en niet om de letter O) is nodig om de tekst weer normaal te laten verschijnen. We hadden immers <CTRL> 9 gebruikt om de tekst in reverse te laten verschijnen! Probeert u nog maar eens welk effect het geeft met het afdrukken van spaties na intoetsen van <CTRL> 9 en <CTRL> 0.

TIP

De bovenstaande manier was de moeilijke methode. Het is eenvoudiger om <RUN/STOP> en <RESTORE> tegelijkertijd in te drukken. U zult zien dat de kleuren weer veranderen in licht- en donkerblauw. Het scherm is leeg op het woordje READY na. Programma's worden niet aangetast. Vooral voor hen die veel programmeren is deze methode sneller en handiger. De Commodore 64 kan ook terug ingesteld worden in de oorspronkelijke stand door het intikken van SYS 64759 gevolgd door <RETURN>. Pas op! Alle in de computer aanwezige programmatuur is na gebruik van dit commando uitgewist.

Laden en saven van programma's

Natuurlijk biedt de Commodore 64 de mogelijkheid om programma's vanaf tape of disk te laden of weer weg te schrijven (het z.g. saven spreek uit: seven). U kunt dus programma's vastleggen op tape voor later gebruik. Zo kunt u ook programma's inladen die aangeleverd worden op tape of op disk. Verbind uw 'Datasette' recorder of de diskdrive zoals voorgeschreven (zie pag. 14).

Het laden van programmatuur uit de handel

Kant en klare programmatuur kan aangeleverd worden

  • 1. in z.g. cartridges
  • 2. op cassettetape
  • 3. op diskette.
Page 33

Na laden zegt de computer READY. De cursor is weer terug, dus de computer wacht op een bevel: tik in

RUN <RETURN>

Het programma start.

Het laden van cassette van door u geschreven programma's

Het laden van uw eigen programma's is net zo eenvoudig als het laden van programmatuur uit de handel. Wind de tape terug naar het begin. Tik in:

LOAD"PROGRAMMA NAAM"

en druk op <RETURN> Het is geen ramp als u zich niet meer herinnert hoe de naam ook weer was. U kunt volstaan met LOAD <RETURN>. De computer laadt in dat geval het eerste het beste programma dat op de band staat.

PRESS PLAY ON TAPE

betekent dat u nu de toets gemerkt PLAY moet indrukken. Na indrukken van die toets wordt het scherm leeg. Het scherm blijft leeg totdat er een programma is gevonden.

FOUND PROGRAMMA NAAM

de computer wacht nu op een verder teken van u om door te gaan met het eigenlijke laden. Druk op de 💽 toets. Weer wordt het scherm leeg totdat het laden is voltooid. De computer zegt dan READY en wacht op verdere commando's. Indien het gevonden programma niet het juiste is (op een band kunnen meerdere programma's worden opgenomen) of u wilt toch niet laden, druk dan op <RUN/STOP>.

Het laden van disk van door u geschreven programma's

Het laden van programma's op disk gaat op zowat dezelfde manier:

LOAD"PROGRAMMA NAAM",8 <RETURN>

De ,8 achter de naam dient om aan te geven dat het laden dient te gebeuren van randapparaat nummer 8, de diskdrive. Na het indrukken van de <RETURN> toets begint de disk te draaien. Het scherm ziet er zo uit:

SEARCHING FOR PROGRAMMA NAAM LOADING READY.

Page 34
1. CARTRIDGES

Er zijn al heel wat programma cartridges verkrijgbaar, zowel op zakelijk terrein als spellen. De spelletjes :Zjn echte video spelen met kleur en geluid, zoals u ze ook in speelautomaten tegenkomt. Voor het laden van dergelijke programmatuur moet u eerst uw computer uitschakelen en het cartridge achter in de computer steken. PAS OP! ook het verwijderen van cartridges mag niet gebeuren met ingeschakelde computer, tenzij u uw cartridge of computer wilt beschadigen. Schakel TV en computer weer aan en druk op de start toets. (Meestal een van de F-toetsen, raadpleeg de gebruiksaanwijzing van het cartridge).

2. CASSETTE TAPES

Sluit de Datasette recorder aan met UIT-geschakelde computer. Schakel de computer weer aan, plaats cassette en wind de tape helemaal terug tot het begin van kant 1. Tik in:

LOAD

Druk daarna op <RETURN> om aan te geven dat de computer het commando LOAD moet lezen en uit moet voeren. De computer antwoordt met:

PRESS PLAY ON TAPE

hetgeen betekent dat u de knop gemerkt PLAY op de recorder in moet drukken. Het scherm zal nu leeg worden totdat er een programma is gevonden op de band. De computer zegt dan FOUND gevolgd door de naam van het programma. Druk nu op de C toets. Het scherm wordt leeg en het laden begint. Men kan onderbreken door het indrukken van RUN/STOP.

3. DISKETTES

Haal de diskette uit het envelopje. PAS OP! Raak het oppervlak van de schijf niet aan. Steek de schijf in de disk unit met het etiket bovenop. De ovale uitsparing in het oppervlak verdwijnt het eerst in de gleuf. Aan een van de zijden van de diskette zit een uitsparing, soms met een stukje plakband er overheen. Die uitsparing hoort links van u te zitten. Sluit het deurtje voorzichtig. Tik in:

LOAD ",",8 <RETURN>

De disk-drive gaat lopen, en op het scherm verschijnt:

SEARCHING FOR PROGRAMMA NAAM
LOADING
READY.
Page 35

N.B.: Na het inladen van een programma van tape of disk is eventueel nog aanwezige programmatuur in de computer verdwenen en overschreven. Let daar goed op voor u begint! Na laden van een BASIC programma kunt u het laten lopen (RUN-commando) of bekijken (LIST-commando). U kunt elke gewenste verandering aanbrengen en het dan weer SAVEN.

Het wegschrijven van programma's naar tape

Het bewaren van programma's op tape gaat als volgt:

SAVE"PROGRAMMA NAAM" <RETURN>

Het woordje programmanaam kan elke tekst zijn van maximaal 16 karakters. Na <RETURN> antwoordt de computer:

SAVING PROGRAMMA NAAM OK READY.

Vergeet niet na het intikken van het commando op <RETURN> te drukken om aan te geven dat het SAVE commando uitgevoerd moet worden.

PRESS PLAY AND RECORD ON TAPE

Dit betekent dat u tegelijkertijd de RECORD en PLAY knop in moet drukken om het wegschrijven te starten. NIET FORCEREN als u de RECORD knop niet ingedrukt krijgt. Controleer of het niet om een beschermde tape gaat (dan is het beschermnokje achterop de tape eruit gebroken). Het scherm wordt weer leeg, en als het schrijven is afgelopen, verschijnt het beeld weer en de tekst READY met cursor. U kunt nu doorgaan met een ander programma of even pauzeren.

Het wegschrijven van programma's naar disk

Het wegschrijven naar een bestaande schijf is nog eenvoudiger. Tik:

SAVE"PROGRAMMA NAAM",8

De ,8 is de code om aan te geven dat we werken met de diskdrive. De taperecorder heeft ook wel een nummer (,1) maar dit hoeft u er niet bij te zetten (het mag wel). Na het indrukken van <RETURN> loopt de diskdrive en ziet u op het scherm:

SAVING"PROGRAMMA NAAM" OK READY.

Page 36

Print en rekenen

De taaie kost over LOAD en SAVE die we u voorschotelden, was nodig om u te leren hoe interessante progamma's bewaard kunnen worden op tape of disk. We gaan nu een paar programma's samenstellen waarmee u dat wegschrijven (juist, met het SAVE commando) kunt oefenen.

PRINT "COMMODORE 64"tik deze regel in en druk opCOMMODORE 64RETURNREADY.Dit heeft de computer geschreven

Tikfouten tijdens het intikken van de eerste regel kunt u herstellen door gebruik te maken van <INST/DEL> toets, of van hetgeen u geleerd had op pag. 23. Wat is er nu gebeurd?

Om te beginnen heeft u op regel 1 aangeduid om af te drukken (PRINT) wat u tussen de aanhalingstekens had gezet. Het indrukken van <RETURN> had tot gevolg dat de computer de tekst ging lezen, en het commando uit ging voeren. De computer heeft de tekst COMMODORE 64 afgedrukt op het scherm. Na het uitvoeren van de laatste opdracht zegt de computer bovendien altijd READY. Het commando PRINT heeft als resultaat dat alles tussen de aanhaaltekens wordt afgedrukt, wat er ook staat. Als de computer antwoordt met:

? SYNTAX ERROR

kijk dan nog eens goed of u geen tikfout heeft gemaakt of aanhaaltekens hebt vergeten. De computer is heel precies en verwacht van u dat alle instructies op een nauwkeurig omschreven manier worden gegeven. Wanneer u precies de voorbeelden volgt, kan er eigenlijk niets misgaan. Al doende leert men het best. De computer kan echt niet defect raken door tikfouten.

Het PRINT commando is misschien wel het nuttigste en meest gebruikte commando van de BASIC taal. Door middel van dit commando kunt u een scherm vullen met tekst, plaatjes, kleuren of resultaten van berekeningen. Het volgende voorbeeld maakt dat duidelijk. Maak het scherm leeg (SHIFT en CLR/HOME) en tik in:

PRINT 12 + 12 tik deze regel in, en druk op RETURN
24 de computer drukt het antwoord af
READY. komt omdat er niet meer opdrachten zijn.

De computer kan rekenen! Het resultaat van de optelsom 12 + 12 is door de computer uitgerekend en afgedrukt. Op precies dezelfde manier kunt u aftrekken, vermenigvuldigen, delen... Ook de meer gecompliceerde functies als worteltrekken en machtsverheffen kunnen verricht worden.

Bovendien bent u niet beperkt tot een enkele regel rekenwerk. Het is nu nog even te vroeg om daarop in te gaan. Verderop komen we erop terug.

Het verschil met het bovenste voorbeeld zit hem in de afwezigheid van de

Page 37

aanhalingstekens, waardoor de computer berekende wat er volgde op het PRINT commando. Wanneer er PRINT "12 + 12" gestaan had, zou de computer ook 12 + 12 hebben afgedrukt in plaats van het resultaat 24. (Probeer maar!)

Rekenkundige bewerkingen
OPTELLEN

Het + teken gaf aan dat we willen optellen. We gaven de intructie: 12 en 12 optellen. De overige rekenkundige bewerkingen worden op gelijkaardige manier aangegeven.

Vergeet niet op <RETURN> te tikken om de bewerkingen uit te laten voeren.

PRINT 45 + 11 + 3 tik deze regel in, en druk op RETURN
59 de computer drukt het antwoord af
READY. komt omdat er niet meer opdrachten zijn.
AFTREKKEN

Het alom bekende - teken wordt gebruikt voor de bewerking aftrekken:

PRINT 12 - 9 3

vergeet niet op RETURN te drukken.

VERMENIGVULDIGEN

Het sterretje * duidt de vermenigvuldigingen aan. 12 x 12 wordt dus:

PRINT 12 * 12 vergeet niet op RETURN te drukken.
144 C ,
DELEN

lets afwijkend van wat u op school leerde. De computer gebruikt de schuine streep /. Het getal 144 gedeeld door 12 wordt dus:

PRINT 144 / 12 12

MACHTSVERHEFFEN

Om aan te geven dat het om een macht gaat wordt het teken ↑ gebruikt. Het getal 12 tot de 5e macht (125) is:

PRINT 12↑5 248832

Dit is eigenlijk hetzelfde als het getal 12 vijf keer met zichzelf vermenigvuldigd:

Page 38

PRINT 12 * 12

TIP:

In BASIC kunnen veel commando's worden afgekort. PRINT mag vervangen worden door ? bijvoorbeeld. U zult steeds meer commando's bijleren. In appendix D staan alle commando's afgekort, en wat er dan op het scherm verschijnt.

Meerdere berekeningen op een regel

Het laatste voorbeeld laat ook zien dat er meer bewerkingen op een regel voor kunnen komen. Bewerkingen kunnen natuurlijk ook gemengd door elkaar voorkomen.

? 3 + 5 - 7 + 2het vraagteken vervangt3het woordje PRINT

Tot nu toe hebben we steeds gewerkt met kleine getallen, en de voorbeelden waren eenvoudig. De Commodore 64 kan daarentegen ook complexe berekeningen met gemak aan. Probeert u eens een aantal grote getallen bij elkaar op te tellen. LET OP! De computer accepteert alleen punten waar wij gewend zijn komma's te schrijven. 12,5 moet in de computer ingegeven worden als 12.5

? 123.45 + 345.78 + 7895.687 8364.917

Dat klopt wel ongeveer, niet? Probeer nu het volgende:

? 12123123.45 + 345.78 + 7895.687 12131364.9

Als u nu de moeite neemt om het bovenstaande voorbeeld met de hand uit te rekenen zult u merken dat het resultaat van de Commodore 64 afwijkt.

Hoe kan dat nu? De verklaring is dat de computer wel een groot reken-vermogen heeft, maar beperkt is in het aantal cijfers dat in een keer verwerkt kan worden. De Commodore 64 kan getallen tot 10 cijfers manipuleren. Bij het uitprinten echter wordt een maximum van 9 cijfers weergegeven.

Het eindresultaat van ons laafste voorbeeld was afgerond tot 9 cijfers totaal. De Commodore rondt naar boven af als het laatste cijfer 5 of hoger is, en anders naar beneden.

Alle waarden tussen 0.01 en 999 worden op normale wijze afgedrukt. Buiten dit gebied worden getallen afgedrukt in exponentiele notatie. Exponentiele notatie is het weergeven van zeer grote of zeer kleine getallen als een macht van 10.

Tik in:

?123000000000000000 (15 nullen) RETURN 1.23 E + 17

Page 39

1.23 * 10 ↑ 17 is het resultaat. 1.23 E + 17 maakt het getal begrijpelijker. Zelfs in exponentiele notatie is er een boven- en onderlimiet aan de getalgrootte. Het grootste getal dat de computer kan verwerken is +/- 1.70141183 E+38 en het kleinste is +/- 2.93873588 E-39 (lees +/- als positief of negatief)

Rekenvolgorde

U heeft tijdens het uitproberen misschien niet steeds de eindresultaten gekregen welke u verwachtte. Dat komt omdat de computer berekeningen doet in een bepaalde volgorde. De uitkomst van de berekening:

?20 + 8 / 2

staat voor u niet vast. Is het 24 of is het 14? U moet hier weten in welke volgorde het rekenen plaatsvindt. 20 optellen bij 8/2 (oftewel 4) geeft 24. Indien u echter eerst 8 bij 20 optelt, en dan het resultaat door 2 deelt, is de einduitkomst 14. Tik het voorbeeld in en kijk.

De reden dat u 24 kreeg is omdat Commodore de rekenregel hanteert die op school wordt onderwezen.

1) - Het minteken voor negatieve getallen eerst

  • 2) ↑ Machtsverheffen, van links naar rechts
  • 3) * / Vermenigvuldigen en delen, van links naar rechts
  • 4) + optellen en aftrekken, van links naar rechts

Wanneer u het voorbeeld naloopt aan de hand van de rekenregels, constateert u dat eerst de deling wordt uitgevoerd, en vervolgens de optelling. Oefen met wat eigen voorbeelden, en probeert u eerst zelf te voorspellen wat het resultaat zal worden.

Net als op papier zijn ook bij de computer haakjes de manier om een bepaalde rekenvolgorde van te voren op te geven.

U wilt uitrekenen 35 gedeeld door 5 plus 2, en u tikt in

Dan zit u er mooi naast. De computer deelt 35 door 5, en telt 2 bij het resultaat op! Wat u wilde was het volgende:

Nietwaar? De computer heeft eerst de uitdrukking tussen haakjes uitgerekend en vervolgens de deling verricht. Meer uitdrukkingen tussen haakjes op dezelfde regel worden van links naar rechts berekend:

?(12+9)*(6+1) 147

Hier in dit voorbeeld wordt 21 vermenigvuldigd met 7, resultaat 147.

Page 40
Het afdrukken van teksten en getallen.

U vindt misschien wel dat we te lang bezig blijven met zaken die op het eerste gezicht onbelangrijk lijken. Wanneer u gaat beginnen met het echte programmeerwerk, zult u begrijpen waarvoor dit alles dient, en wat voor grote waarde het heeft. We hebben geleerd hoe we getallen op het scherm kunnen zetten, en ook hoe teksten afgedrukt moeten worden. Gesteld dat u een tekst met een getal moet combineren, wat is dan de methode? Het afdrukken van tekst gebeurt door een print commando te laten volgen door tekst tussen aanhalingstekens (pag. 28), getallen door print, gevolgd door het getal of een berekening. Het combineren van tekst en getallen gaat als volgt:

PRINT "5 * 9 = "; 5 * 9 de ; geeft aan dat er geen spatie
5 * 9 = 45 tussenkomt.

Het enige dat we eigenlijk gedaan hebben is het samenvoegen van beide vormen van het PRINT commando. Het eerste stuk zorgde ervoor dat "5 * 9 = " precies werd afgedrukt zoals het er stond en het tweede deel achter de ; deed de berekening en drukte het resultaat af. De ; was de scheiding tussen het tekstgedeelte en de berekening.

De afzonderlijke delen van een combinatie PRINT commando moeten altijd gescheiden worden door een separator: de bovengenoemde ; of een komma. Tikt u maar eens een komma in in plaats van de ; en kijk wat er gebeurt.

Voor de nieuwsgierigen onder u willen we verklappen dat er een ; gezet moet worden als er geen extra spaties tussen de delen moeten komen. De komma echter geeft extra spaties. Probeer:

? 2,3 ,4,5,6 RETURN
2
6
3 4 5

De getallen staan verdeeld over de gehele schermbreedte, en op de volgende regel.

Het scherm van de Commodore 64 is opgedeeld in 4 gebieden van 10 karakters. Het gebruik van de komma zet als het ware het volgende deel van het PRINT commando in het volgende "gebied". Het is een soort tabulator functie. Omdat we in het voorbeeld 5 getallen op een regel probeerden te krijgen, ging het 5e getal naar de volgende regel (er zijn immers maar 4 gebieden per regel).

Het verschil in resultaat bij gebruik van ; of , is nuttig voor het samenstellen van complexe schermafbeeldingen, zonder dat het veel moeite kost.

Page 41

HOOFDSTUK 3 PROGRAMMEREN IN BASIC HET GROTE BEGIN.

Page 42

HOOFDSTUK 3 PROGRAMMEREN IN BASIC HET GROTE BEGIN.

  • De volgende stap
  • GOTO
  • Tips voor het verbeteren van fouten
  • Variabelen
  • IF...THEN
  • FOR...NEXT lussen

De volgende stap

Een enkele regel instructies was tot nu toe het maximum dat we haden ingegeven. Direct na het indrukken van de RETURN toets werd de ingetikte instructie uitgevoerd. Dit is de (directe uitvoering) van commando's. Men komt in de literatuur daarvoor ook wel de Engelse term Immediate mode of Calculator mode tegen. Als wij een wat zwaardere opdracht willen volbrengen, dan moeten we de computer toch wel meer dan een regeltje aan instructie kunnen geven! Zo'n verzameling opdrachten of instructies noemen we een programma. Een programma geeft u pas de mogelijkheid de volle kracht van de Commodore 64 te gebruiken.

Het schrijven van een eerste programma is doodsimpel:

  • 1. maak het scherm leeg (SHIFT en CLR/HOME)
  • 2. type NEW gevolgd door RETURN. Dit is nodig om getallen die overgebleven zijn van het oefenen te kunnen verwijderen.
  • 3. Tik nauwkeurig het onderstaande over. Vergeet niet op RETURN te drukken na het laatste karakter.
10 ? "Commodore 64"
20 GOTO 10

Geef nu in: RUN en druk op RETURN. Kijk goed naar het scherm: Er wordt constant de tekst "Commodore 64" op geschreven! Als u er genoeg van heeft kunt u op RUN/STOP drukken om het programma weer te stoppen.

Regelnummers

In het programma komen direct een paar belangrijke principes aan de orde. Ten eerste ziet u dat we een getal voor elk commando hebben geplaatst. Dit z.g. regelnummer vertelt aan de computer in welke volgorde de instructies uitgevoerd moeten worden. De regelnummers zijn ook de punten waar een programma naar

Page 43

toe kan springen. Regelnummers kunnen willekeurig gekozen worden in het gebied 0.....63999.

10 PRINT "COMMODORE 64"

RUN COMMODORE 64 BREAK IN 10 READY.

De computer voert het programma normaliter uit in de volgorde van de regelnummers. Het is een goede gewoonte om de regels te nummeren in veelvouden van 10. Handig als er later instructies tussengevoegd moeten worden. Naast PRINT hebben we ook de instructie GOTO gebruikt. Dit commando stuurt de computer rechstreeks naar het achter GOTO genoemde regelnummer. Het programma gaat verder vanaf dat punt.

→10 PRINT "COMMODORE 64" * 20 GOTO 10

Ons voorbeeld drukt de tekst "COMMODORE 64" af en gaat vervolgens door naar regel 20. Daar staat echter dat de computer terug moet gaan naar regel 10. Het afdrukken van de tekst gebeurt een tweede keer en .... u begrijpt het al, er komt geen einde meer aan. Gelukkig dat we kunnen ingrijpen met de RUN/STOP toets.

Het list commando

De instructie LIST <RETURN> heeft als resultaat dat het door u ingetikte programma op het scherm verschijnt. Ziet u dat de computer het ? heeft veranderd in het woordje PRINT. Er kunnen desgewenst veranderingen in het programma worden aangebracht. Ook kunt u het programma wegschrijven, (SAVE) of nog eens laten lopen (RUN).

Een van de belangrijkste verschillen tussen een programma en het geven van directe instructies is dat programma's na uitvoeren ervan niet verloren raken. Steeds als u LIST geeft, ziet u uw programma terug.

Tips voor het maken van veranderingen

Er zijn een aantal methoden om fouten tijdens het ingeven van programmaregels te verbeteren of om veranderingen aan te brengen.

Page 44

  • 1. De hele regel kan opnieuw ingegeven worden. De computer vervangt de foute regel door de (goede) nieuwe.
  • Ongewenste regels worden verwijderd door het regelnummer in te tikken direct gevolgd door RETURN.
  • Het is mogelijk verbeteringen aan te brengen met gebruikmaking van de cursortoetsen en de INST/DEL toets.

Als voorbeeld maken we een tikfout in regel 10 van ons voorbeeld.

Type LIST <RETURN>. Ga met gebruikmaking van de toetsen SHIFT en CURSOR naar regel 10. Vervolgens loopt u met de CURSOR toets naar het punt waar de fout zich bevindt. Tik hier de juiste letter in, gevolgd <RETURN>. De regel is nu vervangen door de gecorrigeerde regel.

Indien er letters tussengevoegd dienen te worden, dan kunt u dit doen door op de gewenste plaats de toetsen SHIFT en INST/DEL te gebruiken. Overbodige karakters verwijdert men door DEL.

Wanneer u na het aanbrengen van de correcties wederom LIST <RETURN> intikt, zult u constateren dat de correcties zijn aangebracht. Bovendien hoeven correcties niet in volgorde te worden uitgevoerd. De computer verzorgt dat voor u.

Verander nu het programma door achter regel 10 een punt komma te plaatsen. RUN daarna weer het programma.

Variabelen

De variabelen vormen een van de meest essentiele en meest gebruikte onderdelen van elke programmeertaal. De variabelen bevatten de informatie in de computer. We zullen trachten duidelijk te maken hoe het een en ander werkt. Die kennis stelt ons in staat gecompliceerde resultaten te verkrijgen, welke onmogelijk op andere wijze verkregen zouden kunnen worden.Stelt u zich in het inwendige van de computer een aantal dozen voor. In elk van die dozen kan een getal zitten, of een stukje tekst. ledere doos is voorzien van een etiketje met een door ons zelf uit te kiezen naam. Die naam noemen we de variabele. De variabele stelt de inhoud van de doos voor.

Als we bijvoorbeeld zeggen:

10 X% = 15 20 X = 23.5 30 X$ = "DE SOM VAN X% + X ="

Page 45

dan kent de computer de variabelen

X% 15 X 23.5 X$ DE SOM VAN X% + X

De naam van de variabele stelt de doos, of de plaats in het computergeheugen voor waar de momentele waarde van de variabele ligt opgeslagen. Er zijn drie soorten variabelen:

  • 1) integere variabelen, gekenmerkt door het teken % na de naam. Een integer getal is een heel getal met waarde tussen -32767 en + 32767.
  • 2) Z.g. floating point variabelen, of variabelen met vlottende komma
  • 3) Z.g. tekst variabelen, of strings. Deze variabelen bevatten geen getal, maar een tekst of een aaneenschakeling van karakters. Dit type variabele is te herkennen aan de $ na de variabele naam.

Niet alle variabele namen zijn geldig.

  • Een variabele naam kan uit een of twee tekens bestaan. Het eerste teken is altijd een letter, het (facultatieve) tweede teken is of een letter of een van cijfers 0...9.
  • U mag variabele namen gebruiken die uit meer dan 2 karakters bestaan, maar alleen de eerste twee karakters worden door de computer herkend. PAPA en PA zijn voor de computer dus equivalent.
  • Geldige integer namen zijn dus b.v. A%, X%, A1% of NM%; het floating point equivalent zou zijn A, X, A1 en NM. Geldige string namen zijn b.v. A$, (Spreek uit A-String) of NM$.
  • Variabele namen mogen geen BASIC commando's bevatten, zoals b.v. GOTO, RUN. Achterin het boek (Appendix C) vindt u een complete lijst van alle BASIC woorden.

Om een idee te krijgen hoe de variabelen gebruikt worden, hebben we het volgende voorbeeld:

NEW 10 X% = 15 20 X = 23.5 30 X$ = "De som van X% en X =" 40 PRINT "X% ="; X%, "X ="; X 50 PRINT X$: X% + X

RUN <RETURN> geeft het volgende resultaat

X% = 15 X = 23.5 DE SOM VAN X% + X = 38.5

Alle tot nu toe bekende regels hebben we in dit voorbeeld toegepast. U ziet hoe we een beeld kunnen opbouwen rond de som van twee variabelen. In de regels 10 en

Page 46

20 werd er een integere waarde toegekend aan variabele X% en een floating point waarde aan X. Het getal behorende bij de variabele werd hier als het ware in de doos gestopt. In regel 30 werd een stuk tekst toegekend aan variabele X$. In regel 40 worden de 2 typen PRINT commando's gebruikt om een boodschap af te drukken gevolgd door de actuele waarden van X% en X. In regel 50 tenslotte wordt X$ afgedrukt en de som van X% en X.

De 2 suffixen % en $ zorgen ervoor dat de variabelen hoewel de naam X hetzelfde is, toch uniek worden. (Suffix = achtervoegsel).

X, X% en X$ zijn 3 verschillende variabelen.

Variabelen hebben echter nog veel meer mogelijkheden. Door het veranderen van de waarden, zal de nieuwe waarde de oude waarde in de doos vervangen:

X = X + 1

In de normale algebra zou het bovenstaande onzin zijn. Bij het programmeren is het een van de meest gebruikte formules. Het betekent dat X gelijk wordt aan de oude waarde die X had, vermeerderd met 1.

If ..... then

Gewapend met onze kennis over het veranderen en aanpassen van variabelen kunnen we het volgende programma uitproberen:

NEW 10 CT = 0 20 ? "COMMODORE 64" 30 CT = CT + 1 40 IF CT < 5 THEN 20 50 END RUN CCMMODORE 64 COMMODORE 64 READY.

Het woordje NEW bent u al op pag. 40 tegengkomen. Door dit commando wordt elk in de computer aanwezig BASIC programma gewist.

In dit voorbeeld komen er 2 nieuwe BASIC commando's om de hoek kijken, die een beetje controle geven over het eindeloos doorlopende programmaatje waarmee we dit hoofdstuk begonnen.

IF .... THEN voegt wat logica aan het programma toe. Het wil zoveel zeggen dat ALS (IF) aan een bepaalde voorwaarde wordt voldaan DAN (THEN) moet er iets worden gedaan. Als NIET aan de voorwaarde wordt voldaan, dan moet direct de volgende BASIC regel worden uitgevoerd. De volgende voorwaarden kunnen worden gebruikt:

Page 47
Symbool Betekenis
< Kleiner dan
> Groter dan
= Gelijk aan
<> Niet gelijk aan
>= Groter dan of gelijk aan
<= Kleiner dan of gelijk aan.

Het gebruik is eenvoudig. De kracht van deze condities is verrassend groot:

10 CT = 0

20 ? "COMMODORE 64"

30 CT = CT + 1

40 IF CT < 5 THEN 20

50 END

In ons voorbeeld hebben we een lus (LOOP) ingebouwd welke wordt doorlopen onder bepaalde voorwaarden.

In regel 10 wordt de teller op nul gezet. In regel 20 wordt onze boodschap: "COMMODORE 64" afgedrukt. Op regel 30 wordt de variabele CT opgehoogd met 1. Deze regel telt hoe vaak we de lus doorlopen hebben. Elke keer dat we de lus doorlopen geeft het ophogen van de variabele CT met 1. Regel 40 is de stuurregel. Als CT kleiner is dan 5, wat betekent dat we de lus minder dan 5 x doorlopen hebben, dan gaat het programma door naar regel 50, het einde van het programma. Probeer het programma uit. Door het veranderen van de grenswaarde in regel 40 kunt u een willekeurig aantal regels laten afdrukken. Er zijn nog veel meer gebruiksmogelijkheden voor IF ... THEN. Verderop in het boek komt u ze tegen.

For ..... next lussen

Er bestaat een simpeler en populairdere methode om tot hetzelfde eindresultaat te komen. Dit bereiken we met de FOR ... NEXT lus. Bekijk het volgende voorbeeld.

NEW
10 FOR CT = 1 TO 5
20 PRINT "COMMODORE 64"
30 NEXT CT
RUN
COMMODORE 64
READY.

Zoals u kunt zien is het programma een stuk kleiner, en veel directer. CT begint bij 1 (regel 10). Op regel 20 wordt er iets geprint. Op regel 30 wordt CT met een

Page 48

opgehoogd. NEXT stuurt het programma automatisch terug naar regel 10, naar het FOR gedeelte van het FOR ... NEXT commando. Dit proces gaat door totdat CT de ingegeven bovenste grenswaarde bereikt. De gebruikte variabele kan eventueel in kleinere stapjes worden veranderd. Probeer dit maar eens:

NFW
10 FOR NB = 1 TO 10 STEP .5
20 PRINT NR
30 NEXT NB
RUN
  1.5
         2 2.5
3 35
         4 45
5
   5.5
         6 6.5
   7.5
        8 85
à
   9.5
         10

Op het scherm ziet u de getallen 1 tot 10 in stapjes van 0.5. Het enige dat we hier doen is het afdrukken van de successievelijke waarden van variabele NB. STEP specificeert de stapgrootte. Het is zelfs mogelijk een negatieve stapgrootte aan te geven:

10 FOR NB = 10 TO 1 STEP -0.5

Hier gebeurt op het scherm net het tegenovergestelde. NB loopt van 10 tot 1, steeds 0.5 minder.

Page 49

HOOFDSTUK 4 BASIC VOOR GEVORDERDEN

Page 50

HOOFDSTUK 4 BASIC VOOR GEVORDERDEN

  • Inleiding
  • Bewegende beelden
  • Input
  • Get
  • De funktietoetsen
  • Random getallen en andere functies
  • Raadsel
  • Uw beurt om te werpen
  • Random graphics de CHR$ en ASC functie

Inleiding

De volgende hoofdstukken zijn hoofdzakelijk bedoeld voor hen die al min of meer vertrouwd zijn met BASIC, en de basisprincipes kennen welke nodig zijn om meer ingewikkelde programma's te kunnen schrijven. Indien u net begint met leren programmeren kan het zijn dat u zo hier en daar struikelt over de moeilijke woorden. Maar verlies de moed niet! Speciaal voor u hebben we 2 hoofdstukken, vol plezier, geschreven over sprites en geluid, vol eenvoudige voorbeelden voor de nieuwe generatie programmeurs. Die voorbeelden zullen u een goede indruk geven over het hoe en wat van de geluids- en grafische mogelijkheden van uw Commodore 64.

Mocht u besloten hebben een expert te worden in het programmeren in BASIC, dan vindt u in appendix N een literatuuropgave.

Zij die al vertrouwd zijn met BASIC zullen in de volgende hoofdstukken diepergaande voorbeelden aantreffen. Het "Commodore 64 Programmers Reference Manual" bevat volledige informatie over alle aspecten van de Commodore 64. Dit boek is te betrekken via uw dealer.

Page 51

Bewegende beelden

We zullen nu gaan oefenen met de grafische mogelijkheden van de Commodore 64. Daartoe maken we gebruik van hetgeen we tot nu toe hebben geleerd, aangevuld met wat nieuwe dingen. Type onderstaand programma in en laat het RUNnen. U zult vast opmerken dat wij in een PRINT opdracht ook cursor bewegingen en schermcommando's kunnen meeprogrammeren. Wanneer we in de tekst CRSR LINKS zeggen, bedoelen we dat op die plaats de SHIFT en CRSR toetsen worden ingedrukt. Op het scherm ziet u dan het codeteken voor die toetsdruk verschijnen. (2 verticale streepjes in reverse). Op dezelfde manier zal SHIFT en CLR/HOME op het beeld verschijnen als een hartje in reverse. Om vergissingen in het begin te voorkomen zijn de cursor besturingstoetsen aangeduid met [CLR], [LINKS], [RECHTS], [HOOG] en [LAAG]. Later zullen wij, in de programmalistings, de tekens laten zien zoals u ze op het beeldscherm ziet.

TIP:

Alle woorden in bovenstaande tekst staan in hun geheel op dezelfde regel. Zolang u nog niet op de RETURN toets gedrukt heeft, echter, gaat de cursor na karakter 40 naar de volgende regel. Dit kan midden in een woord gebeuren! De Commodore 64 leest echter het hele woord.

Na RUN ziet u een bal tussen de linker- en rechter schermrand heen en weer stuiteren. Wanneer we het programma goed lezen, kunnen we zien hoe we dit voor elkaar hebben gekregen. REM in regel 10 is alleen maar een opmerking (REMARK) die ons vertelt wat het programma doet. Een REM heeft geen invloed op het programma, maar dient alleen ter verduidelijking.

Page 52

In regel 20 wordt het scherm schoongemaakt en wordt de cursor op HOME (links bovenin het scherm) gezet. Regel 25 zet de cursor 10 regels naar onderen. De bal komt zodoende in het midden van het scherm te staan. Het weglaten van regel 25 zou tot gevolg hebben dat de bal bovenin het beeld zou bewegen. Regel 30 zet een loop op (naar 70) om de bal over de 40 posities van links naar rechts te bewegen. In regel 40 wordt veel gedaan. Eerst wordt er een spatie afgedrukt (=niets) over de voorgaande balpositie, vervolgens de bal en tenslotte een stapje met de cursor naar links om alles al klaar te zetten voor het uitwissen van de nieuwe bal. De loop in de regels 50 en 60 dient om de afloop van het programma (en de bal!) te vertragen. Zonder deze vertraging (we noemen zoiets een wachtlus) zou de bal te snel over het scherm bewegen. Regel 70 maakt de lus af die we in regel 30 waren begonnen. Bij elke keer dat de lus wordt doorlopen, schuift de bal een positie naar

rechts op. Binnen de lus 30-70 vinden we een tweede lus, de wachtlus 50-60: dit mogen we doen. We moeten er alleen goed op letten dat de lussen elkaar niet kruisen. het is een goede gewoonte om lussen in te tekenen zoals wij dat deden in het voorbeeld. Draai de commando's in de regels 60 en 70 maar eens om. De computer raakt in de war!

De regels 80 t/m 120 draaien het proces 30-70 precies om. In die regels gaat de bal van rechts naar links. Regel 90 wijkt af van regel 40 omdat we eerst de bal (rechts) moeten uitwissen, en vervolgens naar links moeten lopen.

Als alles eenmaal doorlopen is, gaat het programma terug naar regel 20 en begint alles weer van voren af aan. Keurig! U kunt het programma onderbreken door tegelijkertijd op <RESTORE> en <RUN/STOP> te drukken. Een variatie op het programma is het volgende:

40 PRINT "Q"; om de bal te maken moet u op SHIFT en Q drukken.

RUN en kijk. Omdat we de cursorbeweging weglieten blijft elke bal op het scherm staan totdat hij weggeveegd wordt door de bal in het 2e gedeelte van het programma.

Page 53

Input

Tot nu toe waren alle variabelen voor starten van een programma ingesteld. Als het programma eenmaal liep, kon er niets meer aan worden veranderd. Met input kunnen we nieuwe informatie aan het programma toevoegen, tijdens het lopen ervan, waarna met die nieuwe informatie verder gewerkt kan worden. Het werken met INPUT wordt duidelijk aan de hand van het volgende voorbeeld. Type eerst NEW <BETURN> om een vorig programma uit te wissen.

10 INPLIT AS 20 PRINT "U TIKTE IN' "'A$" 30 PRINT υ τγρτε 40 GOTO 10 RUN 2 COMMODORE 64 -U TIKTE IN: COMMODORE 64

De werking is simpel. Er verschijnt een vraagteken met een knipperende cursor. Dit geeft aan dat de computer wacht tot u iets heeft ingetikt. Tik nu iets in, en druk op RETURN. De computer antwoordt dan met: U zei: gevolgd door hetgeen u intikte. Het lijkt allemaal eenvoudig, maar bedenk eens wat u de computer niet kan laten doen met uw informatie! Via INPUT kunt u getal- alsmede stringvariabelen invoeren. Zelfs kunt u via INPUT tekst op het scherm zetten:

INPUT "TEKST"; variabele (TEKST mag maximaal 38 karakters lang zijn)

is de complete, juiste vorm van een INPUT. Ook kan:

Input variabele

In het geval u geen tekst voor het vraagteken wilt zetten. Ook dit programma kan onderbroken worden door het indrukken van RUN/STOP en RESTORE tegelijkertijd. Het volgende programma is niet alleen nuttig, maar geeft ook een beeld van wat we tot nu toe geleerd hebben, inclusief het nieuwe INPUT commando: 1 REM TEMPERATUUR CONVERSIE 5 PRINT "[CLR]" : REM "[CLR]" IS CLR/HOME 10 PRINT "VAN FAHRENHEIT OF VAN CELSIUS (F/C)":: INPUT A$ 20 IFA$ = "" THEN 10 30 IFA$ = "F" THEN 100 GEEN SPATIE 40 JEAS = "C" THEN 50 50 INPUT"GEEE AANTAL GRADEN CELSIUS:":C 60 F = (C*9)/5 + 32 70 PRINT C." GR CELSIUS ="'E" GR FAHRENHEIT" 80 PRINT 90 GOTO 10 100 INPUT"AANTAL GRADEN FAHRENHEIT:":F 110 C = (F-32)*5/9

Page 54

120 PRINT F;"GR. FAHRENHEIT =":C;" GR. CELSIUS" 130 PRINT 140 GOTO 10

Als u dit programma laat runnen, ziet u - INPUT - aktie! In regel 10 wordt het INPUT commando niet alleen gebruikt om informatie naar binnen te halen, maar ook om de tekst van de vraag af te drukken. U ziet (regel 10, regel 50) ook dat we zowel string- als getalsvariabelen kunnen binnenhalen! In de regel 20, 30 en 40 wordt er gecontroleerd wat we hebben ingevoerd. Als we niets hebben ingevoerd (we hebben alleen op <RETURN> gedrukt), zorgt regel 20 ervoor dat het programma weer opnieuw begint op regel 10. Als er F ingetikt wordt (gevolgd door <RETURN>) weten we dat de gebruiker graden Fahrenheit naar Celsius wil converteren, dus het programma springt naar regel 100 waar die conversie wordt uitgevoerd. Regel 40 doet nog een extra controle. Er zijn immers maar 2 geldige antwoorden: F en C. Als het antwoord gelijk is aan C, dan beginnen we opnieuw in regel 10. Zo'n controle lijkt flauw en overbodig, maar het is toch een goede gewoonte bij het programmeren. Gebruikers die een programma niet kennen, raken in de war wanneer er iets vreemds gebeurt, omdat fouten tijdens het intikken van informatie niet worden herkend.

Wanneer we aan het programma hebben opgegeven welke conversies er uitgevoerd moeten worden, vraagt de computer om het aantal graden en berekent het equivalent. Tenslotte wordt de ingegeven waarde afgedrukt, gevolgd door het equivalent in de andere gradensoort. Het rekengedeelte is recht- toe recht-aan algebra. Na afloop van het rekenen en afdrukken springt het programma terug naar regel 10 voor de volgende gang. Het scherm ziet er als volgt uit bv:

VAN FAHRENHEIT OF VAN CELSIUS (F/C) ?F GEEF AANTAL GRADEN FAHRENHEIT: ?32 32 GR. FAHRENHEIT = 0 GR. CELSIUS

VAN FAHRENHEIT OF VAN CELSIUS (F/C) ?

Get

Met GET kunt u een enkel karakter binnenhalen, zonder op de <RETURN> toets te hoeven drukken. Het is een manier om de snelheid van invoer te vergroten. De variabele achter GET neemt de bijbehorende waarde aan van om het even welke toets die ingedrukt wordt.

Bij runnen van het programma wordt het scherm leeg. Via regel 20 wordt elke toetsdruk op het scherm afgedrukt en wordt vervolgens een nieuw karakter binnen ge-GET. Karakters welke via GET binnenkomen, worden normaal niet afgedrukt, tenzij we zoals hier een PRINT opdracht geven!

De structuur van regel 10 is ook zeer belangrijk. GET werkt constant, zelfs als er geen toets wordt ingedrukt. (Input wacht op een antwoord!) Het tweede deel van

Page 55

regel 10 zorgt ervoor dat we op regel 190 blijven als er niets ("", een z.g. lege string, niets) ingedrukt was. Verwijder dit gedeelte maar eens en zie wat er gebeurt. RESTORE en RUN/STOP samen stoppen het programma. Het eerste gedeelte van het conversieprogramma van pagina 43 kan als volgt herschreven worden voor gebruik met GET:

10 PRINT "VAN FAHRENHEIT OF VAN CELSIUS (F/C)" 20 GET A$ :IF A$ = "" THEN 20 30 IF A$ <> "C" THEN 20

Een soepeler programmaverloop is het gevolg: Er gebeurt niets tenzij de gebruiker een juist antwoord (F of C) ingeeft. U kunt natuurlijk deze nieuwe versie ook weer SAVEN en bewaren voor later gebruik!

Functie toetsen

Zoals u zich kunt herinneren uit het vorige hoofdstuk, hebben we verteld dat de toetsen aan de rechter zijde van de computer (F1 t/m F8) 'geprogrammeerd' kunnen worden om een speciale functie te verrichten.

In het navolgende stukje zullen we laten zien hoe dit eenvoudig te realiseren is.

  • 1. We maken gebruik van de GET instruktie om het toetsenbord uit te lezen.
  • 2. We maken gebruik van het IF statement om te vergelijken of de ingedrukte toets overeenkomt met de CHR$ kode van de functietoets die we willen gebruiken. Ieder teken op het toetsenbord heeft een eigen unieke CHR$ waarde (0-255). De CHR$ kode voor F1 is bijvoorbeeld 133. In appendix F is een lijst opgenomen van alle toetsen en hun overeenkomstige CHR$ waarden.
  • 3. Gebruik het THEN statement om de computer te vertellen wat de functie toets BINNEN het BASIC programma moet doen.

Wanneer het BASIC programma geRUN'd wordt, zal dus het gedeelte achter THEN bepalen wat de functie van de toets werkelijk geworden is.

Bijvoorbeeld :

10 GETA$:IFA$=""THEN 10

20 IFA$=CHR$(137)THEN A$=CHR$(14)

30 IFA$=CHR$(134)THEN A$="DE HEER"+CHR$(13)

40 IFA$=CHR$(140)THEN STOP

50 IFA$=CHR$(139)THEN 2500

60 PRINTA$

70 GOTO 10

2500 REM VERVOLG PROGRAMMA

2510 ...
Page 56

In regel 10 kijken we of er een toets ingedrukt wordt. Als er geen toets wordt ingedrukt is A$ 'leeg' en kijken we opniew met de GET of er een toets is ingedrukt. Pas als er een toets is ingedrukt gaan we naar regel 20.

Regel 20 verteld het programma dat de CHR$ waarde 14 aan A$ toegekend moet worden als F2 ingedrukt wordt. CHR$ 14 is de 'schakelaar' die het beeldscherm van kleine/hoofdletters omschakeld naar hoofdletters/grafische tekens.

In regel 30 wordt functie toets 3, CHR$(134), gebruikt om A$ te vullen met de tekst "DE HEER" en CHR$(13). CHR$(13) is de kode voor de RETURN toets. Wordt F8 ingedrukt dan zal het programma stoppen, en als F7 ingedrukt wordt, zal het programma verder gaan met het uitvoeren van programma regel 2500.

De CHR$ code's voor de 8 functietoetsen zijn :

F1 = CHR$(133) F2 = CHR$(137) F3 = CHR$(134) F4 = CHR$(138) F5 = CHR$(135) F6 = CHR$(139) F7 = CHR$(136) F8 = CHR$(140)

De Commodore 64 Programmers Reference Guide geeft u meer informatie over hoe U de functie toetsen kunt programmeren. Deze handleiding kunt u bij uw Commodore dealer verkrijgen.

In somige programma's wordt veelvuldig gebruikgemaakt van de functie toetsen. De uiteindelijke werking van deze toetsen is vaak verschillend en geheel bepaald door het programma dat op dat moment in de computer actief is.

Met de BASIC uitbreidings cartridge SIMONS BASIC (C64108), is het mogelijk om de functie toetsen zodanig te programmeren dat de toetsen ook in direct-mode te gebruiken zijn. Zodat aan een bepaalde toets een BASIC statement gekoppeld kan worden. (bv. LIST, RUN, PRINT etc.).

Random getallen en andere functies

De Commodore 64 bevat een aantal functies voor het verrichten van bijzondere taken. U kunt zich zo'n functie voorstellen als een soort ingebouwd BASIC programma. In plaats van het intypen van (soms vele) commando's voor het verrichten van een speciale berekening kunt u volstaan met het aanroepen van de functie door middel van een speciaal commando. De computer doet de rest voor u. Het zal vaak gebeuren, vooral bij het ontwerpen van spellen of educatieve programma's, dat u een of ander willekeurig getal nodig hebt. Dit kan zijn voor simulatie van het werpen van een dobbelsteen bijvoorbeeld. Natuurlijk kunt u een programma schrijven dat dergelijke getallen genereert maar het is eenvoudiger om de RANDOM (RND) functie aan te roepen voor het maken van zo'n willekeurig (RANDOM) getal. Het volgende programma illustreert dit:

Page 57

Na RUN ziet u:

.712457814 .214578124
.478941234 3.67942478E-04
.147325542 .716714662
.447822234 .614877177
.237145542 .198745662

Wat? Heeft u andere getallen dan wij? Goed zo! Als dat namelijk niet het geval was, zou het er niet best uitzien. De getallen moeten namelijk volkomen willekeurig zijn. Laat het programma een paar maal runnen. U zult zien dat u steeds andere resultaten krijgt. Hoewel de getallen zelf willekeurig zijn, zullen u toch een paar dingen opvallen:

De getallen zijn altijd groter dan 0, maar nooit groter dan 1 dus 0 < getal < 1.</li> Het zijn derhalve altijd gebroken getallen.

Omdat het RND-getal altijd kleiner is dan 1 hebben we er in deze vorm niet veel aan om het werpen van een dobbelsteen te simuleren. Bovendien willen we vaak hele getallen simuleren en geen breuken.

Er zijn een paar eenvoudige manieren om RND getallen te laten genereren in het gewenste getalsgebied.

Vervang regel 20 door het onderstaande en RUN opnieuw.

RUN

3.15457814 2.42878124
5.14871234 4.67942481
1.29725542 5.24781662
2.35478542 4.26874562
0.25475542 1.24545442

Dit mag dan wel het probleem hebben opgelost van de begrenzing 0 < getal < 1, maar we zitten nog steeds met de afronding. We roepen nu nog een functie aan, de INTeger functie. Deze functie (INT) converteert gebroken getallen naar integere getallen. (De integere waarde van een getal is het hele getal kleiner dan of gelijk aan het getal; dus INT (1.7) = 1. INT (-1.7) =-2, INT (100) = 100.

dus INI (1.7) = 1, INI (-1.7) =-2, INI (100) = 100. Vervang regel 20 door het volgende en RUN weer:

20 PRINT INT(6*RND(1))

RUN

2 2 3 4 1 5 2 0 1 4

Page 58

Dat loste al veel op! We zijn al een stuk dichter bij de oplossing van ons probleem. Het genereren van een willekeurig getal tussen 1 en 6. U ziet echter dat de resultaten liggen tussen 0 en 5. Tel tenslotte 1 op bij de calculatie in regel 20, dus:

20 PRINT INT(6*RND (1) + 1

Dit is het resultaat dat we wilden bereiken.

Binnen de haakjes van de INT functie (het z.g. antwoord) kan een getal, een variabele of weer een functie voorkomen. De bovengrens van getalgeneratie d.m.v. RND wordt ingesteld door het RND-getal te vermenigvuldigen met die bovengrens. Als u bijvoorbeeld getallen tussen 1 en 25 wilt genereren, doet u:

20 PRINT INT (25*RND (1) +1)

De algemene formule voor het genereren van willekeurige getallen binnen bepaalde getalswaarden is

GETAL = INT (ONDERGRENS+(BOVENGRENS-ONDERGRENS+1)*RND(1))

Een raadseltje

Zullen we proberen onze kennis van RANDOM getallen in praktijk te brengen? Het volgende programma geeft niet alleen een goed beeld van het gebruik van RND, maar laat u ook kennis maken met wat theorie rond programmeren. Tijdens het lopen van het programma wordt een RANDOM getal NM gegenereerd.

2 PRINT "ICL BI" BEM "ICL BI" IS SHIFT CL B/HOME
5 INPUT "GEEF DE BOVENGRENS": LI
6 IF II > 1 THEN 5 BEM NIET VAI SSPELEN
10 NM = INT(LI*RND(1))+1
15 CN = 0
20 PRINT"IK DENK AAN EEN GETAL "
30 INPUT"WAT IS UW GOK". GU
35 CN = CN + 1
40 IF GU > NM THEN PRINT"LAGER ..... ": PRINT:GOTO30
50 IF GU < NM THEN PRINT"HOGER....":PRINT:GOTO30
60 IF GU = NM THEN PRINT"GOED GEBADEN!!!"
65 PRINT"IN": CN : "BEURTEN.":PRINT
70 PRINT"NOG EEN KEERT IE? (1/N)"
80 GET ANS IF ANS = "J" THEN 2
100 LF AN$ <> "N" THEN 80
110 END

De bovengrens van NM kan ingesteld worden. Daarna is het aan u om te raden welk getal de computer in gedachten heeft:

Page 59
GEEF DE BOVENGRENS? 25
IK DENK AAN EEN GETAL.
WAT IS UW GOK? 15
HOGER.....
WAT IS UW GOK? 20
LAGER.....
WAT IS UW GOK? 19
GOED GERADEN!!!
IN 3 BEURTEN.
NOG EEN KEERTJE? (J/N)

Een aantal IF/THEN instructies vergelijken uw getal met het door de computer gegenereerde getal. Afhankelijk van uw antwoord zal de computer vertellen of die waarde te hoog of te laag was. Probeert u zelf de formule in regel 10 zo te veranderen, eventueel met gebruikmaking van wat extra regels voor regel 10, dat er ook een ondergrens voor het getal ingegeven kan worden.

Bij elke poging wordt CN opgehoogd. Probeer door goede redenatie het aantal gissingen zo klein mogelijk te houden. Bij ingeven van het juiste getal print de computer een compliment, en het aantal pogingen dat u deed. U kunt dan weer een serie pogingen wagen. Bij elke keer genereert de computer een nieuw willekeurig getal.

Programmeer tips

In de regels 40 en 50 wordt een dubbele punt (:) gebruikt om meer instructies op een regel te scheiden. Dit spaart niet alleen tikwerk, maar ook geheugenruimte, vooral bij langere programma's. Op dezelfde regels lieten we de computer, na IF/THEN iets afdrukken in plaats van direct door te gaan.

Verder ziet u het nut van het nummeren van de regels in stapjes van 10. We kwamen later namelijk pas op de gedachte om het aantal pogingen bij te houden. We konden de daarvoor benodigde regels (15, 35 en 65) eenvoudig tussenvoegen!

Werpt u maar

Het volgende programma simuleert het werpen van 2 dobbelstenen. U kunt er zo mee spelen, of het inbouwen in grotere programma's:

5 PRINT "ZULLEN WE WERPEN?"

10 PRINT "RODE DOBBELSTEEN =";INT(6*RND(1))+1

20 PRINT "WITTE DOBBELSTEEN =";INT(6*RND(1))+1

30 PRINT "DRUK OP DE SPATIEBALK...":PRINT

40 GET A$ :IF A$ = "" THEN 40

50 IF A$ = CHR$(32) THEN 10

Wilt u het eens proberen? Tracht te begrijpen wat hier gebeurt!

Page 60

Random graphics

Als laatste oefening met de RND functie, en als inleiding op het maken van tekeningen, geven we u het volgende programmaatje:

10 PRINT "[CLR]" 20 PRINT CHR$(205.5+RND(1)); 40 GOTO 20

Zoals u misschien al zag is regel 20, de regel waar het gebeurt! Nog een functie, de CHR$ (character string) functie, geeft een karakter af bepaald door een standaard code in de reeks "0" ...... "255". Elk van de Commodore 64 karakters is op deze manier gecodeerd. (Zie appendix F) Om snel de code voor een willekeurige karakter te bepalen tikt u in

PRINT ASC ("X")

waarbij X het karakter voorstelt waarvan u de code wenst te bepalen. (Elk van de karakters, dus ook de grafische).

Het antwoord van de computer is de code voor het ingetikte karakter. U begreep natuurlijk al dat ASC weer een functie is: de functie die de standaard ASCII code geeft voor het ingetikte karakter.

Omgekeerd kunt u dat karakter weer afdrukken door het intikken van:

PRINT CHR$ (X) (X is het code getal)

Indien u intikt:

PRINT CHR$ (205); CHR$ (206)

dan ziet u naast elkaar de grafische karakters van de M en de N toets. Dit zijn de 2 karakters die de computer gebruikt voor de opbouw van het doolhof. Met de formule 205.5 + RND (1) genereert de computer een willekeurig getal tussen 205.5 en 206.5. De kans dat het getal boven of onder 206 ligt, is 50%. Omdat CHR$ niet naar breuken kijkt, zal in 50% van de gevallen CHR$ (205) worden afgedrukt, en in de andere 50% van de gevallen CHR$ (206). Als u zin heeft om met dit programma te experimenteren, moet u maar eens een paar tienden van 205.5 aftrekken of erbij optellen. Dit vergroot en verkleint de kans op generatie van CHR$ (205) of CHR$ (206) in evenredige mate!

Page 61

HOOFDSTUK 5 KLEUR EN GRAPHICS VOOR GEVORDERDEN

Page 62

HOOFDSTUK 5 KLEUR EN GRAPHICS VOOR GEVORDERDEN

  • Kleur en graphics
  • Print kleuren
  • CHR$ codes van de kleuren
  • Peek en Pokes
  • Tekenen op het scherm
  • Nog meer stuiterende ballen

Kleur en graphics

We hebben tot op dit moment eigenlijk alleen maar aandacht besteed aan de rekenkunst van de Commodore 64. We zijn nog voorbij gegaan aan een van zijn meest fascinerende eigenschappen: het produceren van kleuren en grafische voorstellingen. De stuiterende bal was een simpel voorbeeld, evenals het programma waarmee we een soort doolhof tekenden. Deze voorbeelden laten nog nauwelijks zien welke kracht u eigenlijk bezit. In dit hoofdstuk komen wederom een aantal nieuwe zaken aan de orde. Daarmee leert u het programmeren van kleuren en van grafische voorstellingen, zodat u zelf spelletjes en echte bewegende beelden kunt samenstellen. Omdat we ons tot nog toe beperkt hadden tot het bespreken van rekenvoorbeelden, was het scherm steeds van dezelfde kleur (lichtblauwe tekst op donkerblauwe achtergrond. De rand van het beeld was lichtblauw). In dit hoofdstuk zullen we leren hoe we kleur aan onze programma's kunnen toevoegen. Tevens leren we hoe we al die vreemde grafische tekentjes op de toetsen tot leven kunnen brengen.

Het afdrukken van kleuren

Bij het afregelen van de kleur (hoofdstuk 1) had u al gezien dat de kleuren veranderd konden worden door het indrukken van de <CONTROL> toets samen met een van de kleurtoetsen. Dat werkt prachtig als we direct werken (dus niet in een programma). Hoe krijgen we echter die kleurveranderingen geprogrammeerd? U zag in de listing (= het programma!) van het bal programma dat via PRINT commando's de toetsen voor het bewegen van de cursor geprogrammeerd konden worden. Kleurveranderingen, commando's kunnen gelijk zo in een programma worden ondergebracht. U beschikt over liefst 16 kleuren. Met de <CONTROL> toets, samen met een nummertoets, zijn de volgende kleuren beschikbaar:

1 2 3 4 5 6 7 8
Zwart Wit Rood Cyaan Paars Groen Blauw Geel
Page 63

En samen met de Commodore toets:

1 2 3 4 5 6 7 8
Oranje Bruin Licht-
rood
Grijs Grijs Licht-
groen
Licht-
blauw
grijs

Tik NEW in, en experimenteer een beetje met het volgende: Druk op de CTRL toets en druk op 1. Druk vervolgens op de K toets zonder op de CTRL toets te drukken. Druk daarna op <CTRL> en 2, laat ze los en druk tenslotte op de LE toets. Werk aldus alle cijfers af, en vorm het woord "kleurig".

10 PRINT "KLEURIG"

RUN KLEURIG

Net als cursor bewegingen verschijnen ook kleuren als grafische karakters binnen de aanhalingstekens van een PRINT commando. In het bovenstaande voorbeeld verscheen b.v. CTRL 3 als een 🗈 teken en CTRL 7 als een en teken. Zo heeft elke kleur zijn eigen teken. In de onderstaande tabel vindt u ze allemaal.

TOETSEN TOETSEN
BORD KLEUR SCHERM BORD KLEUR SCHERM
CTRL 1 ZWART ORANJE .
CTRL 2 WIT E ( = 2 BRUIN
CTRL 3 ROOD É ( = 3 LICHTROOD ×
CTRL 4 CYAAN (= 4 GRIJS 1 Ο
CTRL 5 PAARS C = 5 GRIJS 2 53
CTRL 6 GROEN C = 6 LICHTGROE
CTRL 7 BLAUW C= 7 LICHTBLAU N 🖸
CTRL 8 GEEL π C= 8 GRIJS 3

Hoewel de print instructie in het programma er nu een beetje vreemd uit zal zien, zal er tijdens het lopen van het programma enkel tekst op het scherm komen. De kleuren van de letters zullen wijzigen conform de door u ingegeven codes. Maak nu zelf wat voorbeelden. Probeer zoveel mogelijk kleur in uw teksten te brengen. Vergeet niet de 8 kleuren te proberen welke u kunt krijgen met de Commodore toets.

TIP:

Na runnen van een programma waarin kleurveranderingen voorkomen, zal het woordje READY en elke volgende tekst verschijnen in de laatst geprogrammeerde kleur. U kunt altijd terug naar de normale kleuren door het indrukken van RUN/STOP en RESTORE.

Page 64

Kleur CHR$ codes

Kijk even naar Appendix F en lees dan weer verder.

Zoals u zag in de codelijst heeft ook elke kleur, net zoals cursor bewegingen, zijn eigen unieke code. Wij kunnen deze codes gebruiken om hetzelfde resultaat te bereiken als <CTRL> gevolgd door de bijbehorende toets. Probeer het volgende:

NEW 10 PRINTCHR$(147):REM SHIFT CLR 20 PRINTCHR$(30);"CHR$(30) GEEFT KLEUR?" RUN CHR$(30) GEEFT KLEUR? BEADY

De tekst zou groen moeten zijn. Meestal is het eenvoudiger om de CHR$ functie te gebruiken, vooral wanneer u wilt experimenteren met kleuren. Het volgende programma is een andere manier om een kleurenwaaier te produceren. Omdat er nogal wat gelijke regels zijn, kan regel 40 steeds worden veranderd om de volgende regels te produceren! Dit scheelt nogal wat tikwerk. Na de listing vertellen we u nog eens hoe u dit kunt doen.

1 REM DE KLEURENBALKEN

5 PRINT CHR$(147)

10 PRINT CHR$(18); " ";:REM SPATIES

20 CL = INT(8*RND(1))+1

30 ON CL GOTO 40,50,60,70,80,90,100,110

40 PRINT CHR$(5);:GOTO 10

50 PRINT CHR$(28);:GOTO 10

50 PRINT CHR$(28);:GOTO 10

60 PRINT CHR$(30);:GOTO 10

70 PRINT CHR$(31);:GOTO 10

80 PRINT CHR$(154);:GOTO 10

90 PRINT CHR$(156);:GOTO 10

100 PRINT CHR$(158);:GOTO 10

110 PRINT CHR$(159);:GOTO 10

Maak regel 5 tot 40 op de gebruikelijke manier. Op het scherm ziet u:

1 REM DE KLEURENBALKEN 5 PRINT CHR$(147) 10 PRINT CHR$(18); " ";:REM SPATIES 20 CL = INT(8*RND(1))+1 30 ON CL GOTO 40,50,60,70,80,90,100,110 40 PRINT CHR$(5);:GOTO10

Veranderingen aanbrengen (scherm-editing)

Ga met de CRSR naar regel 40, en tik een 5 over de 4 van 40. Loop vervolgens (CURSOR) naar de 5 binnen de haakjes van CHR$. Tik op <SHIFT> en

Page 65

<INST/DEL> om een extra spatie tussen te voegen, en tik vervolgens 28 en <RETURN>. U ziet nu:

1 REM DE KLEURENBALKEN 5 PRINT CHR$(147) 10 PRINT CHR$(18); " ";:REM SPATIES 20 CL = INT(8*RND(1))+1 30 ON CL GOTO 40,50,60,70,80,90,100,110 50 PRINT CHR$(28);:GOTO 10

Geen angst! Regel 40 is er nog. LIST het programma en kijk. Verander nu steeds van de laatste regel het regelnummer en de CHR$ code totdat alle regels van pag. 58 erin zitten. We hadden u toch gezegd dat die verandertoetsen nog eens van pas zouden komen? LIST tenslotte het totale programma om er zeker van te zijn dat het programma compleet is. RUN

Het merendeel van het zojuist ingetikte programma zult u zonder meer begrijpen. In regel 30 daarentegen zit iets nieuws. Maar laten we eerst nagaan wat er precies gebeurt.

In regel 5 wordt de CHR$ code voor CLR/HOME ge"print".

In regel 10 wordt reverse aangezet, en worden er 5 spaties afgedrukt, wat resulteert in een balk, omdat ze immers wit op zwart staan. De eerste keer zal die balk lichtblauw worden, de normale tekstkleur.

Ons werkpaard, de RND functie, verschijnt in regel 20. We kiezen een willekeurige kleur tussen 1 en 8.

Regel 30 bevat een variatie van4 het IF...THEN commando: ON...GOTO. Een programma kan door middel van ON...GOTO kiezen uit een lijst van regelnummers waar naar toe gesprongen kan worden. Indien de varabele (hier: CL) een waarde van 1 heeft, springt het programma naar het 1e regelnummer uit de lijst (hier: 40). Indien CL=2 zal het 2e nummer gekozen worden, etc.

In de regels 40 ..... 110 vindt een conversie plaats van onze willekeurige getallen naar een bijbehorende CHR$ code. Tenslotte wordt in regel 10 een balkje afgedrukt in die kleur, en begint alles weer van voren af aan.

Probeer zelf uit te vissen hoe u kunt laten kiezen uit 16 willekeurige kleuren. Breid zelf ON...GOTO uit, en voeg regels toe met de overige CHR$ codes.

Peek en poke

Niet dat we direct de computer open willen breken, maar we zouden best eens in zijn geheugen willen kijken of er iets in weg willen stoppen.

Variabelen kunt u zich voorstellen als "doosjes" in de computer waar u uw informatie in heeft weggezet. U kunt zich dan ook voorstellen dat er een aantal bijzondere hokjes kunnen zijn met een voorgeprogrammeerde taak.

De Commodore 64 kijkt naar de inhoud van die hokjes (zogenaamde "geheugenplaatsen") om te zien wat de kleur van het scherm moet zijn, of de kleur van de rand. Ook gebruikt hij geheugenplaatsen om op te slaan welke karakters er op het scherm moeten komen, en nog tal van andere taken.

Door in die geheugenplaatsen andere waarden te plaatsen (POKE) kunnen we de schermkleur veranderen, of afbeeldingen, voorwerpen samenstellen en laten

Page 66

bewegen. Het is ook de manier waarop we muziek zullen gaan maken. Stelt u zich het volgende voor:

Nummer: 53280 53281 53282 53283

randkleur schermkleur

Op pagina 60 toonden we 4 geheugenplaatsen van de 65536 welke in uw Commodore 64 aanwezig zijn. Plaatsnummer 53280 controleert de kleur van de rand, en plaats 53281 de achtergrondkleur van het scherm. Proheer:

POKE 53281,7 <RETURN>

Dit zal als gevolg hebben dat de achtergrondkleur van het scherm in geel verandert. 7, de waarde voor geel, is geplaatst in lokatie 53281 welke de achtergrond kleur van het scherm bepaalt. POKE verschillende waarden in 53281 en kijk naar het resultaat. U mag elke waarde tussen de 0 en 255 in het geheugen plaatsen, hoewel alleen de waarden 0 .... 15 zullen werken. De samenhang tussen waarde en kleur is als volgt:

10 FOR SC = 0 TO 15 20 FOR RA = 0 TO 15 30 POKE 53280,SC 40 POKE 53281,RA 50 FOR X = 1 TO 2000: NEXT X 60 NEXT RA: NEXT SC

Kunt u zelf iets bedenken om de verschillende kleuren zichtbaar te maken? Het volgende voorbeeld is misschien nuttig: We maken gebruik van een tweetal loops cm de scherm- en randkleuren te veranderen. De wachtlus in regel 50 vertraagt de afloop. Probeer nu:

PRINT PEEK (53280) AND 15 (RETURN niet vergeten!)

U behoort de waarde 15 op uw scherm te krijgen, de laatste randwaarde welke was toegekend. U ziet in het lijstje van pagina 61 dat dit klopt omdat het scherm nu grijs is. Door het toevoegen van AND 15 elimineert u alle waarden behalve de waarden 0 ... 15. Dit komt door de manier waarop de computer de kleur waarden vasthoudt. Normaal gesproken vindt u met PEEK die waarde welke het laatst door middel van POKE in die lokatie was weggezet. In het algemeen geeft PEEK de waarde die zich op dat moment in de aangegeven geheugenplaats bevindt. Vult u nu zelf het laatste programma aan met PEEK zodat het programma afdrukt wat de waarden zijn van het scherm en de rand.

Oplossing:

25 PRINT CHR$(147);"RAND=";PEEK(53280)AND,15, "ACHTERGROND="; PEEK(53281)AND15

Page 67

Tekenen op het scherm

Tot nog toe werd alles achter elkaar op het scherm neergezet. Karakter voor karakter werd afgedrukt, al of niet afgewisseld met cursorbewegingen of sprongen naar een volgende tab positie (door middel van de komma) of een nieuwe regel. Om iets op een bepaalde plaats op het scherm te printen, moest u vanaf een bekende positie (meestal HOME) starten, waarna door middel van cursor bewegingen in een printinstructie naar de gewenste plaats gelopen kon worden. Dit neemt echter nogal wat tijd en programmastappen in beslag. Net zoals de schermkleuren bepaald worden door een tweetal lokaties, worden de schermposities en hun inhoud, bepaald door geheugenplaatsen. U kunt daarmee elke gewenste schermpositie "vullen".

De geheugenplaatsen van het scherm

Omdat er op het scherm plaats is voor 1000 karakters (40 posities per 25 regels) ligt het voor de hand dat er 1000 geheugenplaatsen gereserveerd zijn, voor elk van de schermposities een. U kunt zich het scherm voorstellen als 1000 vakjes. Elk vakje correspondeert met een geheugenplaats. In elk van die vakjes past een getal tussen 0 en 255. Er zijn dus 256 mogelijke waarden voor elke geheugenplaats. Deze waarden vindt u terug in appendix E. Door het POKEn van de waarde in de geheugenlokaties behorende bij het schermvakje verschijnt het karakter in die schermpositie.

٠ (0 L0 М
0 10 2 0 3 0 39
_ 1063
1024 П I. Ц ΓΙ ļ T. Γ П Ŧ Ŧ Ľ Г L [] IJ Ţ Ŧ Ŧ Ţ. L L H Ŧ Ţ T Ŧ T П 0
1064 н + ŧ.∔ Н H -+ 4 + - H + + + | + + H -+-i
1104 Н + ⊢∔ -+- ∔. Н H Ł + - ┝┼ 4 Ŧ Ŧ ÷. Ļ٠ łł + + ÷ 44 ⊢∔ + +- ÷i
1144 н ÷ H + • ⊢∔ -+- ł. ł ÷ ł ÷ . ţ. ļ -i + + + ÷., -+ + + ∔-+
1224 Н - | - +-+ -+ Ŧ H + +- ÷. ∔∔ - + -+ + + ÷ ÷- ÷- + + - + +. ÷- ÷.÷ + + ÷
1224 Н ÷ H ┝╌┝ + + ł- +-+ ++ - + +- ŧ Ł ┥┥ + + ÷ ł ł t ÷- +… ÷٠ ++ ÷ + 4 • • • • • + +- + +
1304 Н + ┿╌┥ ⊢∔ + +- +- +- H ÷ ÷٠ ┝┥ - + + 4 +- ÷ + - ÷ + + + + •+ + +- +-+
1344 łŧ ÷ + + 4 ÷ ŧ ł ۲ł ÷ + + - ÷١ łi ł ٠ŧ ÷ ÷ ÷. ŧ ł٠ ÷ + + ÷ + **** • • ł ÷ +
1384 н ŧ + ++ ٠t + ŧ. + - ++ + ÷ +- ÷ ŧ- ┝┤ ł ł ł ÷ ŧ. ÷- t ÷ ÷ ÷ + + ۰÷ •+ -+- ÷ i
1424 H + H H + ÷ + +-+ Н + + + + † 1 1 1 ÷ ł ł ŧ ٠ + t · + + -+- + •••• + -+ -+- -÷- + 10 ъ
1464 ++ ÷ ++ t t + -† t ! ! t t + +- t + ŧ -t t t t ÷ ٠ t ŧ٠ ŧŧ ٠ ÷ + + - Ť - 4 - + -• 10 C
1504 H + t 1 t t t †- 11 -+ t t t + t- t t ٠ 1 t t ŧ ٠ ť ÷ ٠ 1 ٠ + - + + + • + ŧ • •
1544 H + Ħ t t ÷ t t t- t t t t t ÷ t ÷ 1 t 1 t. t. ؛ ؛ + ÷ +- +- + ŧ : +- +- ***
1584 H + ++ H Ť +. † - t t 1.4 + + t - ţ † 1 • • + ÷ +- ÷ t 11 -+ + + + + ۰÷ ÷ + +-+ ÷
1624 Н 1 11 1 t 1 t 11 1 1 + t t t 1: • • t t t ŧ. t ť † † t + + - - + + +- ÷-•
1664 П 11 ГŤ T 1 1. 1 Ť t t 1 + - † 1 -; -+ +- 1 * - 1- † - t-• + + 1 ++ + + +-+
1704 Π T. 1.1 П Т T Ť 1 Т t 1- t- 11 + t ÷ +- t t t ! ! ** + + • + + + ٠ - -
1744 Π 1 11 LT I T Ť T t T t +- t 11 1 ٠ 1 Ť t t t -† t Ť ++ • + + ÷ ٠
1784 Т IJ П Т Т Г T Т Т T Ť Ť 11 1 ÷t Ť 1 t t 1 + ·· † + + 1 t t + t +-
1824 Т Π Π Т Г Π T Т T T T 1. -1 t t t Ť. t t +- 1 + + + + t t -+ + 20
1864 1 П LI Ι Т Γ. Π Ι Ι Т Π Т Ī T I I 1 t Ť Ť. t. 1- † - 11 - † T Ť + + + + •
1904 Ц 1 L . L 1 Ι. Π Ι Ι Ι Ι Ι Ι Π I T 1 t 1 1 1 11 Ť 1 1 : 1 11 1 t +• +-
1944 H 4. Ļ. L 1 1 1. L I. T I L Ε I I Ι Ι I I Γ 1 t t 1 t 1 11 11 1 +
1984 Ц 1 LI Ц 1 I . L 1 1. Ľ 1. 1 I I . I 1 Ĺ I Ι Γ Ι Ιİ 1 t 1. 11 Τİ .t Ť П 24
- +
2023

De geheugenplaatsen van het scherm van de Commodore 64 starten normaliter op nummer 1024 en eindigen dus op 2023. Lokatie 1024 is de linkerbovenhoek van het scherm en zo is 1025 de positie er net naast, etc.... 1063 is de meest rechtse positie van de eerste regel. De geheugenplaats volgend op de laatste positie van een regel is de 1e positie, een regel lager.

Page 68

Stel dat u nu weer een stuiterende bal wilt programmeren. De bal staat in het midden van het scherm, positie 20 regel van regel 12. Met wat eenvoudig rekenwerk bepalen we de geheugenplaats:

positie op regel

Plaats = 1024 + x + 40*(y) regelnummer (let op: regel 0 is eerste reg!)

De plaats van de bal wordt dus:

1024 + 20 + 480 = 1524

Maak het scherm schoon met SHIFT en CLR/HOME en tik in:

POKE 1524,81 karaktercode POKE 55796,1 kleur

geheugenplaats

De geheugenplaatsen voor de kleur informatie

U heeft nu een bal, precies in het midden van het scherm. Zonder gebruik te maken van PRINT heeft u direct in het "schermgeheugen" een bal "gePOKEd". De bal is wit. U kunt ook de kleur van de bal wijzigen middels een andere reeks geheugenplaatsen.

Type: _____lokatie POKE 55796,2

En de bal wordt rood. Elke positie op het scherm heeft zo 2 geheugenplaatsen. Een ervan bepaalt welk karakter er staat en de andere bepaalt de kleur. De geheugenplaatsen welke de kleuren bepalen, starten op hokje 55296 (links bovenaan) en de volgende 999 hokjes.

N 0 ٦L κ
39 30 0 21 ) 10 0
5 5533
0 ΓĎ Т Т Т Π Π Г Г Г Г Т Т Т Т Т П [] Г Т Т Т П Т Т П Π Г Т Ē
Ι Γ Γ Т Г Γ Т Τ Т Г Т Т Т П Г Π T Γ
L L Γ Γ Γ Ι Ι П Γ Т Π Ι П 1 Г
Ĺ L. 1 L L Ш i I
L L. L Ļ 1 L
_ i. L Ĺ. L 1 L L -+ i. L
Li L L L 1 L L
_ _ L Ĺ L Ļ. - + Ł L L-
L L L L - 1 i. + - 1 L L
_ L L L 1 Ļ. Ļ - + - _ Ļ. - _
10 Li L L., Ļ. Ļ - 4 ÷ ÷ 4 11 + ÷ - -+ 44 _
- - ļ 1-1 1 L Ļ. i_ Ł _ 1 ÷ +. -+ + į. - 11 ↓_ -
4 Ļ. ÷ Ļ. 4- + - 44 ÷- 4- 4 + -+ + -+ 11 - _
i. 1 i_ Ļ. Ļ. Ļ. L - ÷ 1 + + H + - ÷ 11 ÷ _
Ĺ ¦ - L., ! ÷ 1 + + + н +- + _+ ++ + ┝╺┾ Ļ. + + + + į
i 1 4 Ц _ 1 Ļ ÷ + + н + ⊢∔ + -+ ÷ + H i- +-+
Ĺ L L L L 1 ÷ + Н + i | + 4 +- 1 ÷-
L 4 L L Ļ Ļ. + + + н + H + + -+ ₽₽
i. L 1 1 + + H +- + - ⊢∔ -+- + ┝╶┥ Н
Г T L L L Ļ. 4 + H + H + - + - -+ H -
20 Т Ц Ļ L + + H + + H + - Н + + ┝╌┥ Н
L L- Ļ. ļ ÷ 4 н + ┢╌╽ + -+- + H Н
1. Ļ. 1 ŧ. + 4 + н + ┝╌╽ + + H + - H Н Н Н
Ι Ι - Ļ. Ļ. Ļ. + -+- н + ⊢∔ + -+- + + -+ Н Н Н
24 1 L L L L L L 1 _ 1_ _ 1 _ 1 _ ш
Page 69

We mogen hier dezelfde waarden (0....15) gebruiken als die we gebruikten voor de rand- en achtergrondkleur. Via deze geheugenplaatsen kunnen we rechtstreeks de kleuren bepalen. Onze formule voor het berekenen van de geheugenplaatsen kan eenvoudig aangepast worden voor de kleurlokaties.

Kleur = 55296 + (X) + 40*(Y)

Nog meer stuiterende ballen

Nu volgt een programma waarin we rechtstreeks in het scherm POKEN in plaats van PRINTEN. Met dit programma is het werken veel eenvoudiger. Het is een eerste stap naar het programmeren van ingewikkelder bewegende beelden.

10 PRINT "[CLR]"

20 POKE 53280,7 :POKE 53281,13

30 X = 1 :Y = 1

40 DX = 1 : DY = 1

50 POKE 1024+X+40*Y,81

60 FOR T = 1 TO 10 : NEXT

70 POKE 1024 + X + 40*Y,32

80 X = X + DX

90 IF X = 0 OR X = 39 THEN DX = -DX

100 Y = Y + DY

110 IF Y = 0 OR Y = 24 THEN DY = -DY

120 GOTO 50

Regel 10 zorgt voor het schoonmaken van het scherm en in regel 20 wordt de achtergrond kleur ingesteld op lichtgroen. De rand van het scherm wordt geel. De variabelen X en Y in regel 30 houden respectievelijk de positie op de regel, en het regelnummer bij. DX en DY in regel 40 bepalen de horizontale en verticale richting van beweging. Steeds als we 1 bij X optellen, gaat de bal naar rechts. Aftrekken van 1 laat de bal naar links bewegen. Evenzo geeft Y + 1 een beweging naar beneden en Y-1 een beweging naar boven.

In regel 50 wordt de bal op het scherm gezet op de positie bepaald door X, Y. De ons al bekende wachtlus in regel 60 zorgt ervoor dat de bal lang genoeg op die lokatie blijft om zichtbaar te zijn.

Regel 70 zet een spatie op de bal: hij verdwijnt weer.

In regel 80 wordt X vergroot of verkleind en regel 90 test of de bal een van beide zijden heeft bereikt. Als dat het geval is, wordt de richting omgekeerd.

Regel 100 en 110 doen hetzelfde voor de boven- en onderzijde. Regel 120 tenslotte stuurt het programma terug naar de weergave van een bal op de nieuwe positie, etc.

De code 81 in regel 50 kan natuurlijk veranderd worden in een andere karaktercode. Dit zal als resultaat hebben dat er in plaats van een bal iets anders over het scherm gaat. Het veranderen van DX of DY in 0 zal tot gevolg hebben dat de bal recht heen en weer gaat in plaats van diagonaal. Het is zelfs mogelijk om een beetje meer intelligentie in het programma in te bouwen. Tot nu toe testten we immers alleen X en Y om te zien of we van het scherm afvlogen. Voeg de volgende regels maar toe:

Page 70

21 FOR L = 1 TO 10 25 POKE 1024 + INT(RND(1)*1000, 166 27 NEXT L 115 IF PEEK(1024 + X + 40*Y) = 166 THEN DX = -DX:GOTO 80

De regels 21 tot 27 zorgen ervoor dat er 10 blokken (166 in de CHR$ code voor een blokje) op het scherm worden gezet, op willekeurige plaatsen. In regel 115 wordt getest of onze bal zo'n blok zal raken. Als dat het geval is, wordt de richting van de bal omgedraaid.

Page 71

HOOFDSTUK 6 SPRITES

Page 72

HOOFDSTUK 6 SPRITES

• Van Bits en Bytes naar Sprites

• Het opzetten van Sprites

• Meer over Sprites, kleur en beweging

In de voorgaande hoofdstukken zagen we al iets over grafische voorstellingen. De grafische tekens konden gebruikt worden in PRINT instructies. Zo konden we tekeningen maken of beweging in onze schermbeelden krijgen. Een andere methode was middels POKE intructies in de geheugenplaatsen behorende bij de schermposities. Op deze wijze konden we karakters in een keer op de juiste plaats zetten.

Het maken van animaties zou in beide gevallen neerkomen on erg veel werk omdat voorwerpen immers samengesteld zouden moeten worden uit aanwezige bestaande symbolen, en het bewegen ervan vergt veel programmastappen omdat we precies bij moeten houden waar het object zich bevindt. Door de beperking in het gebruik van uitsluitend grafische symbolen zou het gecreëerde voorwerp er ook niet zo uitzien als we graag zouden willen. Het gebruik van Sprites, elimineert veel van deze problemen. Een Sprite is niets anders dan een programmeerbaar tekeningetie dat we elke willekeurige vorm kunnen geven, via BASIC instructies. Het zo gemaakte tekeningetie kan over het hele scherm worden bewogen: het enige dat we daarvoor moeten doen is het opgeven van de positie op het scherm De computer doet de rest. Een Sprite kan echter nog veel en veel meer. De kleur kan worden aangepast. U kunt zeggen of de ene Sprite "botst" met de andere. Meerdere Sprites kunnen voor en achter elkaar langs bewegen. U kunt ze vergroten. De moeite die u zich moet getroosten om Sprites te kunnen gebruiken is minimaal. Voor een goed begrip van de werking van de Sprites moet u namelijk weten hoe een Commodore 64 werkt en hoe vooral getallen worden verwerkt in de computer. Het is niet al te moeilijk. Wanneer u de voorbeelden navolgt zult u weldra in staat zijn om uw eigen Sprites te maken die de wonderbaarlijke capriolen zullen uithalen

Van bits en bytes naar sprites

Het tweetallig rekenstelsel

Voor we met Sprites kunnen gaan werken moeten we iets meer weten van hoe de computer intern werkt. Het valt buiten het bestek van dit handboek om erg diep in te gaan op de manier waarop de computer omgaat met getallen. We zullen nochtans proberen u de grondbeginselen te leren welke nodig zijn voor een goed begrip van het werken met ingewikkelde animaties.

Page 73
BIT

De kleinste hoeveelheid informatie die een computer kan opslaan. Een BIT moet u zich voorstellen als een schakelaar die AAN of UIT staat. Als een BIT "AAN" is, is de waarde 1. Een "UIT" BIT heeft de waarde van 0.

BYTE

Een BYTE is een serie van 8 BITS. U kunt dus 256 verschillende combinaties (of schakelaarstanden, zo u wilt) hebben voor een enkele BYTE. Als U alle BITS "UIT" heeft, ziet het BYTE er zo uit.

128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0

de waarde hier is dus 0.

Als alle BITS aanstaan:

128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1

is de waarde 128+64+32+16+8+4+2+1=255

REGISTER

Een REGISTER is een aantal BYTES bij elkaar. In het geval van Sprites is een REGISTER 1 BYTE te lang. Een serie REGISTERS vormen een z.g. REGISTER MAP. Zo'n REGISTERMAP is b.v. het ruitjespatroon dat u gebruikte om een Sprite te tekenen. Elk REGISTER bestuurt een functie zoals b.v. het laten verschijnen van de Sprites (het z.g. ENABLE REGISTER) Het REGISTER dat de Sprite langer en breder maakt, is het X-EXPAND of het Y-EXPAND REGISTER. Onthoud dat een REGISTER een BYTE (een geheugenplaats) is met een specifieke taak.

Binair - decimaal conversie

128 64 32 16 8 4 2 1
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
Page 74

Door het combineren van alle 8 BITS kunnen we elke decimale waarde tussen 0 en 255 voorstellen. Begint u nu te begrijpen waarom de waarden welke we in de geheugenplaatsen POKEn altijd tussen de 0 en 255 liggen? Elke geheugenplaats kan een BYTE informatie bevatten. Elke mogelijke combinatie van 8 nullen en enen geeft een specifieke waarde in het gebied 0...255. Als alle BITS 1 zijn, is de waarde 255. Alles nul geeft de waarde 0. 00000011 is gelijk aan 3 enzovoorts. Dit is het grondbeginsel voor het samenstellen van de gegevens van de Sprites en voor het manipuleren ervan.

27 2 6 2 5 2⁴ 2 3 2 2 2 1 2 0
128 64 32 16 8 4 2 1
1 0 1 0 1 0 1 0

We geven nog een voorbeeld van zo'n BYTE:

en de waarde is 1*128+0*64+1*32+0*16+1*8+0*4+1*2+0*1=170

TIP:

Het volgende programma neemt de conversiezorgen van uw schouders af. We zullen vaak dergelijke omzettingen moeten uitvoeren. Voer het programma in en bewaar het voor later gebruik:

5 REM BINAIR NAAR DECIMAAL CONVERSIE 10 INPUT"GEEF BINAIR GETAL (8 BITS):";A$ 12 IF LEN(A$) <> 8 THEN PRINT"8 BITS S.V.P..":GOTO10 15 TL = 0: C= 0 20 FOR X=8 TO 1 STEP -1: C=C+1 30 TL = TL + VAL(MID$(A$C,1))*2↑(X-1) 40 NEXT X 50 PRINTA$;" BINAIR = ";TL;"DECIMAAL" 60 GOTO 10

Het programma neemt het binaire getal, dat u in regel 10 als string invoerde en kijkt naar elk karakter (van links naar rechts) d.m.v. de MID$ functie. De variabele C bepaalt met welk van de karakters wordt gewerkt. De VAL functie in regel 30 geeft de waarde van elk karakter. Omdat we nu eenmaal alleen met getallen werken, is de waarde gelijk aan het karakter. Als b.v. het eerste karakter van A$ een 1 is, dan wordt de waarde ook 1. Het laatste gedeelte van 30 vermenigvuldigt de waarde van elk van de karakters met de bijbehorende macht van 2. De eerste waarde (op positie 27) geeft aan TL de waarde 1 x 128 of 128. Als dat BIT nul is, wordt de bijbehorende waarde ook nul. Dit proces wordt herhaald voor alle karakters. TL bevat aan het eind de decimale waarde.

Page 75

Het maken van sprites

Sprites staan onder controle van de beeldbesturing van de Commodore 64. Dit beeld gedeelte bestuurt alles wat er op het scherm verschijnt. Al het moeilijke werk, zoals het weergeven van karakters en grafische tekens, het maken van de kleuren, het laten bewegen, het wordt allemaal door deze beeldbesturing gedaan.

Het stuurgedeelte bevat 46 afzonderlijke AAN/UIT lokaties welke te beschouwen zijn als geheugenplaatsen. Elk van deze lokaties bevat weer een serie van 8 puntjes. Elk puntje kan "AAN" of "UIT" staan. Door het POKEn van een geschikte waarde in zo'n geheugenplaats, kan een Sprite worden aangezet en kan hij worden bewogen. Buiten deze 46 genoemde plaatsen, gebruiken we ook nog een aantal plaatsen uit het grote geheugen van de Commodore 64 om de data op te slaan welke de vorm van de Sprites bepaalt. Tenslotte zijn er nog 8 geheugenplaatsen, direct achter de schermplaatsen, die aangeven waar in het geheugen de computer precies de vorm van de Sprite kan vinden.

Bij het doorwerken van de voorbeelden, zult u merken dat het programmeren rechttoe rechtaan werk is. U zult het snel onder de knie krijgen.

Als u het scherm goed bekijkt, ziet u dat de karakters zijn opgebouwd uit puntjes. Een schermpositie beslaat een blokje van 8 puntjes. Een Sprite nu is 24 van die puntjes lang en 21 puntjes hoog. Elk van de puntjes kan "AAN" zijn (licht) of "UIT" (donker). We kunnen maximaal 8 verschillende Sprites tegelijkertijd laten bewegen. Sprites kunnen bewegen over alle (40 tekens x 8) 320 horizontale puntjes en (25 regels x 8) 200 verticale puntjes van het scherm, onafhankelijk van de inhoud ervan.

Stel dat we een ballon willen maken die we over het scherm willen laten bewegen, dan gaan we als volgt te werk (kijk op pag. 70). De ballon kan getekend worden in de 24 x 21 puntjes welke beschikbaar zijn. De volgende stap bestaat uit het vertalen van die puntjes informatie naar numerieke informatie voor de computer. Dat doen we met ruitjespapier. Teken een rechthoek van 24 x 21 ruitjes en schrijf bij de bovenste horizontale rij resp. de waarden 128, 64, 32, 16, 8, 4, 2, 1. Herhaal dat 2 x zodat er waarden boven elk ruitje staan. Zet langs de linkerkant de waarden 1....21 van boven naar beneden. Schrijf het woordje DATA achter elke regel van 24 hokjes.

Teken nu het plaatje in het raster van 24 x 21 ruitjes. Het is het gemakkelijkst om eerst de contouren te trekken en dan de ruitjes zwart te maken of te kleuren. Stelt u zich nu voor dat elk van de zwart gemaakte ruitjes als puntje op het scherm moet verschijnen. Zo'n ruitje heeft de waarde "1" of is "AAN". Wat donker blijft op het scherm (niet zwart gemaakte ruitjes) is "0" of is "UIT".

Een regel moet nu omgerekend worden, zodat de computer weet wat er staat. We hadden een regel verdeeld in 3 secties van 8 ruitjes, genummerd 128....1. Zo'n sectie is een stuk gegeven dat we een BYTE van 8 hokjes of BITS noemen. De BITS hebben de waarden 127, 64, 32, 16, 8, 4, 2 of 1. De totale waarde voor 8 opeenvolgende blokjes of BITS, de waarde van een BYTE, wordt berekend door de waarde van elk BIT te vermenigvuldigen met "1" als er een puntje moet komen, en met 0 als er geen puntje staat, en de totalen van 8 BITS op te tellen. De eerste regel bevat 3 BYTES. Omdat de eerste 8 hokjes leeg zijn is de waarde van dat BYTE dus 0.

Page 76

Byte 2 is de middelste sectie van 8 BITS. Hier wordt het resultaat:

128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1
0 + 64 + 32 + 16 + 8 + 4 + 2 + 1 =

De laatste serie puntjes is wederom helemaal "UIT", dus de waarde is 0. Het gegeven (DATA) voor de eerste regel wordt:

DATA 0, 127, 0

S

De DATA voor de tweede regel w ordt:
0 0 1 ERIE 1 128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 1
Page 77
SERIE 2 128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
-
SERIE 3 128 64 32 16 8 4 2 1
1 1 0 0 0 0 0 0
128 + 64 = 192

DATA voor regel 2 wordt derhalve:

DATA 1, 255, 192

Als we zo consequent voortgaan, zullen we uiteindelijk 21 serietjes van 3 getallen hebben, welke de computer aangeven hoe ons object eruit ziet. Ga er even rustig voor zitten.

Hoe nu verder? Tik het nu volgende programma in en kijk wat er gebeurt.

1 REM DE GROTE LUCHTBALLON 5 PRINT "ICLRI 10 V = 53248 BEM START VAN VIDEO CHIP 11 POKE V+21.4:REM ZET Sprite 2 AAN 12 POKE 2042 13 BEM BLOK 13 IS Sprite 2 20 FOR N=0 TO 62:READ Q:POKE832+N.Q:NEXT 30 FOB X=0 TO 200 40 POKE V+4.X : REM VERANDER X COORDINAAT 50 POKE V+5.X :REM VERANDER Y COORDINAAT 60 NEXT X 70 GOTO 30 200 DATA 0 127 0 1 255 192 3 255 224 3 231 224 210 DATA 7.217.240.7.223.240.7.217.240.3.231.224 220 DATA 3 255 224 3 255 224 2 255 160 1 127 64 230 DATA 1.62.64.0.156.128.0.156.128.0.73.0.0.73.0 240 DATA 0.62 0.0 62 0.0 62 0.0 28 0

Als u alles netjes heeft overgetikt, zal de ballon zachtjes over het scherm zweven. Om te begrijpen wat er nu precies gebeurt, moeten wij u eerst vertellen welke 46 geheugenplaatsen van invloed zijn op de beweging en positie van de verschillende Sprites. Deze 46 geheugenplaatsen zijn de z.g. REGISTERs van de Sprite besturing.

Page 78
REGISTER NO FUNCTIE
0 X coordinaat van de positie van Sprite 0 (op de regel)
1 Y coordinaat van de positie van Sprite 0 (op de regel)
2 - 15 horen steeds 2 aan 2 bij elkaar, voor Sprites 17
16 is verdeeld in 8 BITS, hoort bij de X positie
21 is verdeeld in 8 BITS (een voor elke Sprite)
29 ook 8 BITS. Vergroot Sprite in x-richting
23 ook 8 BITS. Vergroot Sprite in y-richting
39 - 46 Kleur van de Sprites 0-7

Bovendien moet u nog weten waar in het geheugen de 64 plaatsen zitten die de vorm van de Sprite bepalen. (Een van die 64 wordt niet gebruikt) Die adressen staan in 8 plaatsen direct achter het schermgeheugen.

Sprite pointer 2040 2041 2042 2043 2044 2045 2046 2047
Sprite no 0 1 2 3 4 5 6 7

De juiste procedure voor het maken en laten bewegen van een Sprite is als volgt:

  • 1. POKE de vorm van de Sprite in het geheugen.
  • Vertel de computer waar in het geheugen de data voor de Sprites staat. Dit doen we door het POKEn van het adres (het nummer van de eerste geheugenplaats) in een van de lokaties 2040 - 2047. (Het adres eerst delen door 64, het adres kan alleen een veelvoud zijn van 64).
  • 3. Laat de Sprites verschijnen door het POKEn van de juiste waarde in REGISTER 21.
  • 4. Verander de X en Y coordinaten om de Sprite te laten bewegen.
  • Eventueel kunt u het voorwerp nog 2 x zo groot maken in X of Y richting (lok. 29 of 23) of u kunt de kleur wijzigen.
UITLEG

In regel 10 staat V = 53248. 53248 Is het eerste adres in het geheugen van de REGISTERs van de beeldbesturing. De juiste geheugenplaats vinden we door het REGISTERnummer op te tellen bij die waarde. Zo zullen 53248 en 53249 respectievelijk de X en de Y positie van de Sprite bevatten.

In regel 11: POKE V + 21,4. POKEn we de waarde 4 in REGISTER 21 (= geheugenplaats 53248 + 21 = 53269). Dit REGISTER bepaalt of een van de Sprites 0....7 aan of uit is (dus weergegeven wordt op het scherm of niet). Deze geheugenplaats of BYTE is weer verdeeld in 8 BITS:

128 64 32 16 8 4 2 1
21 0 0 0 0 0 1 0 0 = 4
Page 79

Als Sprite 2 aan moet zijn, dan zetten we het bijbehorende "bit" op de waarde 1 en komt er dus 1 x 4 als waarde van het BYTE in REGISTER 21. Als u hier dus bij Sprite 3 aan zou willen zetten, zou u de waarde 1 x 8 in 21 moeten zetten, en bijvoorbeeld 3 en 2 aan, zou de waarde 1 x 4 + 1 x 8 = 12 moeten gaan naar REGISTER 21.

In regel 12:

POKE 2042,13

vertelt de computer dat de gegevens voor Sprite nr. 2 (lokatie 2042) staan in het 13e blokje geheugen. Een blokje geheugen is 64 BYTES of geheugen- plaatsen lang. Een Sprite neemt zoals u zag 63 BYTES in beslag, 21 regels van 3 BYTES (die weer opgedeeld waren in 8 BITS)

20 FOR N = 0 to 62: READ Q: POKE 832+N,Q: NEXT

(13 x 64)

In deze regel wordt de eigenlijke Sprite gemaakt. De 63 BYTES data welke de vorm van de Sprite bepalen, worden ingelezen (READ) uit de DATA tabel, en vervolgens in het 13e blokje van 64 BYTES geheugen gePOKEd! Het startadres van die geheugenplaats is 13 x 64 = 832.

30 FOR X = 0 TO 200 40 POKE V+4,X : REM Sprite 2 X-COORDINAAT 50 POKE V+5,X : REM Sprite 2 Y-COORDINAAT

Op school heeft u geleerd dat de X coordinaat de positie bepaalt van een voorwerp langs de (horizontale) X-as en de Y-coordinaat die langs de (verticale) Y-as. Het veranderen van X in de regels 30....50 heeft dus als resultaat dat de Sprite naaar beneden en naar rechts zal bewegen. (De oorsprong of de 0,0 coordinaat bevindt zich links bovenin het scherm!) Elke coordinaat is een puntje van het scherm. Deze positieveranderingen zijn snel genoeg om een indruk te krijgen van vloeiende beweging over het scherm. U vindt meer details in de beschrijving van de REGISTERs in appendix O.

Het is niet mogelijk om via een enkele geheugenplaats de positie van meerdere bewegende voorwerpen te bepalen. Dat is de reden waarom elk van de 8 mogelijk Sprites zijn eigen set X- en Y-registers kent.

Regel 70 zorgt ervoor dat de cyclus weer opnieuw start. Wat er verder nog staat, zijn gegevens voor de tekening. Ziet hij eruit zoals u hem had getekend? Voeg de volgende regel toe (druk eventueel eerst op RESTORE en RUN/STOP)

25 POKE V+23,4: POKE V+29,4: REM VERGROTEN

en RUN het programma weer. De ballon is nu 2 x zo groot. Door het POKEn van 4 (waarde van het BIT dat Sprite 2 aangeeft) in de REGISTERs 23 en 29 werd ervoor gezorgd dat de Sprite in X en Y richting werd vergroot.

Page 80

De Sprite startcoordinaat is het punt meest links en boven dat niet dezelfde kleur heeft als de achtergrond. Bij het vergroten blijft die startcoordinaat gelijk. Nog meer opwinding? Verander het volgende:

11 POKE V+21,12 12 POKE 2042,13 : POKE 2043,13 30 FOR X = 1 TO 190 45 POKE V+6,X 55 POKE V+7,190-X

Nu is er een tweede Sprite welke is aangeschakeld door het POKEn van 12 in het REGISTER dat de Sprites doet verschijnen (nr. 21). De 12 zet zowel Sprite 3 als Sprite 2 aan.

De regels 45 en 55 welke we toevoegden aan het programma, zorgden ervoor dat Sprite 3 bewoog (registers 6 en 7 bepalen resp. X en Y coordinaat van Sprite 3). Nog meer actie in de lucht? Probeer dan:

11 POKE V+21,28 12 POKE 2042,13 : POKE 2043,13 : POKE 2044,13 25 POKE V+23,12 : POKE V+29,12 48 POKE V+8,X 58 POKE V+9,100

Dit keer hebben we ook nog Sprite 4 aangeschakeld (regel 11). In regel 12 staat dat alle Sprites beschreven worden in hetzelfde geheugenblokje (13) van 64 BYTES. In regel 25 worden de Sprites 2 en 3 groter gemaakt door 12 te POKEn (2 en 3 aan) in het X- en Y-vergrootregister (register nummers 23 en 29).

Regel 48 beweegt Sprite 3 langs de X-as. Regel 58 zet Sprite 3 halverwege het scherm, op positie 100. Omdat deze waarde niet meer verandert, beweegt Sprite 3 alleen horizontaal.

Page 81

Meer over sprites, kleur en beweging

Na uw eerste experimenten met de Sprites, heeft u recht op wat extra informatie. Om te beginnen kan de kleur van een Sprite ingesteld worden op elk van de 16 verschillende waarden (0...15). Deze waarden vindt u in hoofdstuk 5 of in appendix O.

Zo kan b.v. Sprite 1 licht-groen worden gemaakt door de waarde 13 in REGISTER 40 (dus geheugenplaats 53248+40 = 53288) te zetten:

POKE V+40,13 (waarbij V=53248)

U zult misschien hebben opgemerkt dat de ballon nooit helemaal naar de rechterzijde van het scherm ging. De reden daarvan is dat de totale X-as 320 puntjes lang is. Een X-register lengte of geheugenplaats kan echter maximaal maar de waarde 255 bevatten. Hoe kunnen we een voorwerp dan toch over het hele scherm laten bewegen? Dat doen we via REGISTER 16 dat tot nog toe niet gebruikt werd. De 8 BITS van dat REGISTER geven aan of de X- lokatie van de bijbehorende Sprite boven of onder de 255 ligt.

In moeilijke bewoordingen zeggen we dat REGISTER 16 de meest significante BITS (de MSB's) bevat van de X-posities van de Sprites. Wanneer een Sprite naar positie 255 is gebracht, wordt het BIT behorende bij die Sprite "1" gemaakt. Voor Sprite 2 zou dat b.v. betekenen:

POKE V+16, 4

Wanneer we dan naar 256 willen, zetten we 1 in het gebruikelijke X- register. Naar 300? Dan 45 in het gebruikelijke X-register. Omdat we maximaal naar positie 320 kunnen gaan, zal de X-waarde nu maar varieren tussen 0 en 63. Dit allemaal wordt misschien duidelijker aan de hand van de volgende versie van ons oorspronkelijke programma.

1 REM DE GROTE LUCHTBALLON

10 V = 53248: POKE V+21,4 :POKE 2042,13

20 FOR N=0 TO 62 : READ Q: POKE 832+N,Q :NEXT

30 FOR X=0 TO 255

40 POKE V+4,X

50 NEXT

60 POKE V+16,4

70 FOR X=0 TO 63

80 POKE V+4,X

90 NEXT

100 POKE V+16,0

110 GOTO 30

Regel 60 stelt het MSB in van Sprite 2. Regel 70 verandert de geheugenplaats welke de X-coordinaat bepaalt. Zo beweegt Sprite 2 over het hele scherm. Regel 100 is ook belangrijk. Het MSB van Sprite 2 wordt daar weer afgeschakeld zodat de Sprite weer helemaal links op het scherm komt te staan.

Page 82

De beste manier om met Sprites te leren werken, is expirimenteren. De Commodore Programmers Reference Guide bevat gedetailleerde informatie over Sprites en de andere Grafische mogelijkheden van uw Commodore 64.

Page 83

HOOFDSTUK 7 HET MAKEN VAN GELUID

Page 84

HOOFDSTUK 7 HET MAKEN VAN GELUID

  • U bent geen programmeur, toch wilt u geluid.
  • Opbouw van een toon volume
    • golfvorm
    • frequentie
    • omhullende (ADSR)
  • Voorbeeld programma's
  • Muziek met de Commodore 64
  • Een melodie spelen op de Commodore 64
  • Geluidseffecten
  • Het proberen waard

U bent geen programmeur, en toch wilt u geluid

Geluid, wordt door programmeurs op twee manieren toegepast: nl. voor het maken van muziek en voor het opwekken van geluidseffecten. Voor we de computer muziek kunnen laten spelen moeten we weten hoe een muzieknoot opgebouwd is.

De opbouw van een toon

Er zijn een aantal parameters waarmee een geluid op uw Commodore 64 gedefinieerd kan worden. Het is belangrijk dat u deze kent: volume, golfvorm, attack, decay, sustain, release en frequentie. Deze parameters worden meestal alleen aan het begin ingesteld, door het POKE'n van waarden in bepaalde registers van de Commodore SID geluid-chip. Bepaalde parameters zijn gecombineerd in een register zoals bijvoorbeeld: attack- decay en sustain-release.

De SID chip kent 3 stemmen, die onafhankelijk van elkaar aangestuurd kunnen worden. Dit betekent dat alle parameters voor golfvorm, attack, decay, sustain, release en frequentie driemaal voorkomen.

Voor we het eigenlijke voorbeeld programma bespreken gaan we eerst deze parameters eens nader bekijken.

Wanneer we een muzieknoot spelen dan zien we het volgende plaatje van het geluidsniveau tegen de tijd:

Page 85

Opmerking: Attack, Decay en Release zijn tijdeenheden. Sustain is een niveau.

Volume

Het volume kan op 16 verschillende niveaus ingesteld worden via adres 54296. Het grootste volume is 15, geen geluid is 0. Meestal zult u het maximum volume instellen: POKE 54296,15. U zet het geluid af door POKE 54296,0. Het volume register bepaalt het uitgangsniveau van alle drie de stemmen. Het instellen van het volume hoeft slechts eenmaal te gebeuren, en wel aan het begin van het progamma. Het veranderen van het volume tijdens het spelen van een toon, kan interessante effecten geven.

Golfvorm

Met het golfvorm/controle register kunnen we verschillende golfvormen selecteren en de toon starten en stoppen. Het veranderen van de golfvorm heeft tot resultaat dat de klankkleur verandert van bv. een soort xylofoon geluid naar clavecimbel. Elke stem kan zijn eigen golfvorm hebben. De beschikbare golfvormen zijn driehoek, zaagtand, blokgolf en ruis.

ZAAGŢAND

Page 86

BLOKGOLF

WITTE RUIS (meestal voor geluids efffecten)

GEHEUGEN LOCATIES GOLFVORM REGISTERS
STEM 1 STEM 2 STEM 3
54276 54283 54290

Met het instellen van de golfvorm kan ook de toon gestart worden. De onderstaande tabel laat zien welke waarden in een van de bovenstaande registers gePOKE'd moet worden.

TOON START/STOP WAARDEN

DRIEHOEK ZAAGTAND BLOK RUIS
AAN/UIT AAN/UIT AAN/UIT AAN/UIT
17/16 33/32 65/64 129/128

OPMERKING

Als de blokgolf geselecteerd wordt, moeten ook de pulsbreedte registers van de betreffende stem ingesteld worden.

De navolgende regel start een zaagtand golfvorm in stem 1, en stopt een driehoek-golfvorm in stem 2.

POKE 54276,33: POKE 54283,16

Page 87

Frequentie

De toonhoogte van een geluid wordt bepaald door de frequentie van de toon die u maakt. Deze frequentie wordt weergegeven door een getal tussen 0 en 65535. Het grootste getal dat we met een POKE instructie kunnen plaatsen is 255, daarom vereist elke noot die u wilt instellen, 2 POKE instructies, een voor de hoge frequentiewaarde (high-byte) en een voor de lage waarde (low-byte).

In appendix M vindt u de POKE waarden voor elke noot uit de 9 octaven die de Commodore 64 kan bestrijken.

ledere stem heeft haar eigen registerpaar, waarmee de frequentie ingesteld wordt.

STEM FREQUENTIE POKE ADRES
1 HOOG 54273
1 LAAG 54272
2 HOOG 54280
2 LAAG 54279
3 HOOG 54287
3 LAAG 54286

Elk van deze drie stemmen kan dus onafhankelijk van de 2 andere worden geprogrammeerd, zodat het programmeren van 3-stemmige muziek of exotische geluidseffecten tot de mogelijkheden behoort.

Om bijvoorbeeld een C (vijfde octaaf) in stem 1 te programmeren moeten de volgende twee POKE's uitgevoerd worden.

10 POKE 54273,33 hoge fr eq
15 POKE 54272,135 lage fre эq.

Voor stem 2 zou het als volgt zijn:

10 POKE 54280,33 : POKE 54279,135

Toets eerst het onderstaand programma in.

5 FOR L=54272 TO 54296: POKE L,0: NEXT maak SID schoon
10 V=54296: W=54276: A=54277 gebruik variabelen om
S=54278:H=54273:L=54272 type tijd uit te sparen
20 POKE V,15: POKE A,190: POKE S,89 POKE volume-attack-
decay-sustain-release
30 POKE H,15: POKE L,135 POKE hi-lo freq.
40 POKE W,33: FOR T=1 TO 200: NEXT start toon en wacht
50 POKE W,32 stop toon.
Page 88

Omhullende generator (ADSR)

Als een toon bij een muziekinstrument aangeslagen wordt, neemt de amplitude van 0 toe tot een maximum. De tijd waarin dit gebeurt heet ATTACK, of aanzweltijd. Daarna valt de amplitude terug tot een tussenniveau. De tijd waarin de amplitude van het maximum niveau tot het tussenniveau terugvalt heet DECAY. Het tussenniveau wordt vaak aangeduid met SUSTAIN. Wanneer de toon stopt neemt de amplitude af tot 0. De tijd waarin dit geschiedt heet RELEASE of uitsterftijd.

In het tekeningetje is dit duidelijk te zien.

Met het veranderen van attack, decay, sustain en release is de klankkleur van de toon te beïnvloeden.

Hierna zullen we refereren aan ATTACK/DECAY en het SUSTAIN/RELEASE register. De reden dat we deze parameters gegroepeerd aanduiden is dat deze vier parameters slechts 1/2 byte vragen.

Dit betekent dus dat ATTACK/DECAY net zoals SUSTAIN/RELEASE eerst samengesteld moeten worden en daarna in de overeenkomstige registers moeten worden gePOKE'd.

STEM TIJD/NIVEAU POKE ADRES
1 attack/decay
sustain/release
54277
54278
2 attack/decay 54284
2 sustain/release 54285
3 attack/decay 54291
3 sustain/release 54292

Attack/decay

De ATTACK maakt gebruik van bit 7-6-5-4, DECAY gebruikt bit 3-2-1-0.

Willen we bijvoorbeeld een hoge attack en een lage decay instellen, tel dan de waarde voor een hoge attack 128 op bij de waarde van de lage decay 2 en POKE het resultaat 130 in het daarvoor bestemde register.

Page 89

De onderstaande tabel geeft een idee van de mogelijke POKE waarden, die in het ATTACK/DECAY register gebruikt kunnen worden.

HOOG MIDDEL LAAG LAAGSTE HOOG MIDDEL LAAG LAAGSTE
ATTACK ATTACK ATTACK ATTACK DEC DEC DEC DEC
128 64 32 16 8 4 2 1
OPMERKING

De ATTACK tijd kan verhoogd worden door alle ATTACK waarden bij elkaar op te tellen. Bijv : 128 + 64 + 32 + 16 = 240. Op een soortgelijke wijze kan de maximale DECAY bepaald worden door alle DECAY waarden bij elkaar op te tellen. Bijv : 8 + 4 + 2 + 1 = 15. Als u alleen een ATTACK tijd wilt instellen en geen DECAY dan wordt automatisch de DECAY op nul gesteld. Het omgekeerde is ook waar. Wordt bijv. POKE 54277,64 gegeven, dan wordt stem 1 ingesteld op een MIDDEL ATTACK en GEEN DECAY.

Nog enkele voorbeelden.

STEM ATTACK DECAY
POKE 54277,66 1 MIDDEL (64) LAAG (2)
POKE 54284,100 2 MIDDEL (64) +
LAAG (1)
MIDDEL (2)
POKE 54291,15 3 GEEN MAX (8+4+2+1)
POKE 54291,15 3 MAX
(128 + 64 + 32
MAX
+ 16 + 8 + 4 + 2 + 1)

Probeer het volgende programma eens, het laat goed de mogelijkheden van ATTACK en DECAY zien.

10 FOR L=54272 TO 54296:POKE L,0:NEXT 20 POKE 54296,15 30 POKE 54277,64 40 POKE 54273,162:POKE 54272,37 50 PRINT"DRUK OP EEN TOETS" 60 GET K$: IF K$=""THEN 60 70 POKE 54276,17: FORT=1TO200:NEXT 80 POKE 54276,16: FORT=1TO50:NEXT 90 GOTO 50

maak SID chip schoon volume op maximum stel attack/decay in POKE een noot in stem 1 instructie op scherm lees toetsenbord start driehoek-golfvorm stop toon herhaal

Probeer nadat u het programma een aantal malen heeft laten werken, de ATTACK/DECAY instelling te veranderen door regel 30 aan te passen.

30 POKE 54277,190

Page 90

U hoort duidelijk het verschil van de toon. Probeert u zelf eens een aantal verschillende waarden te POKEn om een idee te krijgen van de mogelijkheden van ATTACK/DECAY.

Sustain/release

De SUSTAIN/RELEASE registers vertonen qua wijze van programmeren geen verschillen met ATTACK/DECAY. Let op dit betekent niet dat zij dezelfde functie hebben. SUSTAIN is immers een NIVEAU, terwijl attack, decay en release tijden zijn. Het SUSTAIN niveau is instelbaar van 0 tot 15 (het maximale volume), en kan over een onbepaalde tijd aangehouden worden.

HOOG MIDDEL LAAG LAAGSTE HOOG MIDDEL LAAG LAAGSTE
SUSTAIN SUSTAIN SUSTAIN SUSTAIN REL REL REL REL
128 64 32 16 8 4 2 1
OPMERKING

U kunt het SUSTAIN niveau verhogen door alle SUSTAIN waarden bij elkaar op te tellen 128 + 64 + 32 + 16 = 240, welke het MAXIMUM sustain niveau is. Een SUSTAIN niveau van 128 is 50 % van het maximum volume. De SUSTAIN en RELEASE instellingen kunnen op een soortgelijke wijze als ATTACK/DECAY gecombineerd worden, dwz. tel de twee waarden op en POKE het totaal in het register van de overeenkomstige STEM. Om het effect te horen van SUSTAIN voegen we aan het programma de volgende regel toe.

35 POKE 54278,128

RUN het programma, en beluister het verschil. Met regel 35 vertellen we de computer de toon op 50 % van het maximale volume aan te houden. Door het veranderen 70 kunt u de duur van de toon beïnvloeden. Onthoud dat SUSTAIN de toon aanhoudt op een deel van het maximale volume, als het volume van het maximum terugzakt; het is dus duidelijk geen tijd instelling.

Om het effect te zien van RELEASE veranderen we regel 35 in

35 POKE 54278,89 (sustain = 80, release = 9)

Probeer ook eens andere waarden.

Page 91

Voorbeeld programma's

Dit kleine voorbeeld programma laat u nog een keer stap voor stap zien hoe u met de Commodore 64 geluid kunt maken

  • 1. Kies de stem(men) die u wilt gebruiken, onthoud dat iedere stem haar eigen registers heeft, waarin u de waarden moet POKEn voor attack, decay, etc. U kunt stem 1, 2, 3 tegelijkertijd gebruiken. Het navolgende programma maakt echter alleen gebruik van stem 1.
  • 5 FORL=54272 TO 54296:POKE L.0:NEXT 2. Maak SID chip schoon
  • 3. Volume op maximum 10 POKE 54296 15
  • 4. De aanzweltijd, en de verval- 20 POKE 54277,190 tijd geven aan hoe snel het geluid zijn max volume bereikt en hoe snel dan het eindvolume bereikt wordt
  • 5. Het nagalmvolume en de uit- 30 POKE 54278.248 sterftiid instellen
  • 6. Zoek de frequentie op. of de 40 POKE 54273.17: POKE 54272.37 noot die 11 wilt weergeven Deze gegevens staan in de tabel in appendix M. Fr. moeten 2 waarden worden inqeqeven.
  • 7. Kies een golfvorm (4 mogelijk- 50 POKE 54276.17 heden, 17, 33, 64 of 129)
  • 8. Maak een wachtlus, net zo 60 FORT = 1 TO 250: NEXT lang als de te spelen noot. (Fen kwart noot is + 250 land Dit kan echter afwijken omdat lange programma's trager lopen).
  • 9. En zet de toon uit. door de 70 POKE 54276 16 aeselecteerde aolfvorm uit te schakelen
Page 92

Het volgende programma is wat langer, en laat wat meer horen van de muzikale mogelijkheden van uw computer.

5 REM TOONLADDER 7 FORL=54272TO54296:POKEL,0:NEXT 10 POKE 54296,15 20 POKE 54277,7:POKE54278,133 50 READ A 55 IF A=-1THEN END 60 READ B 80 POKE 54273,A:POKE 54272,B

85 POKE 54276,17 90 FOR T=1TO250:NEXT:POKE54276,16 95 FORT=1TO50:NEXT

100 GOTO 20 110 DATA 16,195,18,209,21,31,22,96 120 DATA 25,30,28,49,31,165,33,135 999 DATA -1

maak SID chip schoon stel volume in stel ADSR in READ eerste waarde in beëindia loop READ tweede waarde in POKE A als Hi-freq en B als Lo-freg waarde. start toon tiidlus daarna toon uit tijdlus tussen release en volgende noot volgende noot getallen uit app. M ieder getallennaar is een noot Einde programma (regel 55)

Om het timbre van een snaarinstrument te laten horen, verandert u de volgende regels.

85 POKE 54276,33 90 FORT=1TO250:NEXT:POKE54276,32

En run het programma opnieuw. We hebben de golfvorm veranderd van driehoeksspanning in zaagtand. Dit heeft nogal wat invloed op het timbre. Golfvorm is echter maar een van de verschillende instellingen welke u kunt veranderen om andere geluidseffecten te bekomen. Door het veranderen van de aanzweltijd en het verval is het bijvoorbeeld mogelijk om een geluid te produceren dat lijkt op dat van een banjo. Regel 20 wordt daartoe als volgt veranderd:

20 POKE 54277,3: POKE 54278,0

maakt een banjo effect door geen SUSTAIN te geven

Zoals u nu gemerkt heeft, is het mogelijk om de Commodore 64 een geluid te laten produceren dat aan verschillende instrumenten doet denken.

Page 93

Een melodie spelen met uw Commodore 64

Het volgende programma gebruiken we om een melodie te componeren en af te spelen op onze computer (een stem). Het programma leert ons 2 belangrijke dingen. Let u eens op wat we gedaan hebben met de grote getallen in regel 5. We gebruiken daar de variabele W in plaats van het getal 54276.

Op de tweede plaats is er de manier waarop we met DATA omgaan. Per toon lezen we namelijk steeds 3 waarden in. De hogere frequentie POKE, de lage en de tijdsduur van de noot. In deze melodie tellen we tot 125 voor 1/8 noot of tot 250 voor 1/4, 375 voor drie achtste noot. Tot 500 voor een halve en tot 1000 voor een hele noot. De waarden mogen groter of kleiner genomen worden om zich aan te passen aan het werkelijke tempo, of aan uw eigen smaak. In regel 100 wordt duidelijk hoe de melodie ingevoerd wordt. 34 En 75 zijn de instellingen om noot C te spelen, en het getal 250 is de waarde voor de kwart noot. De eerste toon van onze melodie is dus C, met een duur van 1/4. De tweede noot duurt ook een kwart, maar de toonhoogte is E. Dit gaat zo door tot het eind van de melodie. Op deze manier kunt u zowat elke melodie invoeren. U kunt het aantal DATA regelen, indien nodig uitbreiden. De laatste regel moet zijn DATA-1, -1, -1. Dit is de stop! regel. Door NEW vegen we een vorig programma uit. Tik het volgende programma in en laat de computer spelen.

GOSPELSONG

  • 2 FORL=54272TO54296:POKEL,0:NEXT 5 V=54296:W=54276:A=54277:HF=54273:LF=54272:S=54278: PH=54275:PL=54274 10 POKEV,15:POKEA,88:POKEPH,15:POKEPL,15:POKES,89 20 READH:IFH=-1THENEND 30 READL 40 READD 60 POKEHF,H:POKELF,L:POKEW,65 80 FORT=1TOD:NEXT:POKEW,65 80 FORT=1TOD:NEXT 90 GOTO10 100 DATA 34,75,250,43,52,250,51,97,375,43,52,125,51,97 105 DATA 250,57,172,250 110 DATA 51,97,500,0,0,125,43,52,250,51,97,250,57,172 115 DATA 1000,51,97,500
  • 120 DATA -1,-1,-1
Page 94

Geluidseffecten

Geluid maken is iets heel anders dan muziek maken. Geluid is verbonden aan bepaalde acties, zoals het gieren van de straaljager of het afschieten van raketten in een of ander ruimtespel. Geluid kan ook simpelweg een piepje zijn om de bediener van een programma te waarschuwen dat hij op het punt staat zijn disk te vernielen. U heeft nogal wat mogelijkheden tot uw beschikking voor het produceren van geluiden. Een tiental suggesties voor het genereren van geluid geeft u misschien ideëen:

  • 1. Het veranderen van de volume-instelling tijdens het spelen van een toon veroorzaakt een echo effect.
  • 2. Tremolo wordt gemaakt door snel de toonhoogte te varieren.
  • 3. Denk eens aan de golfvorm om de aard van het geluid te veranderen.
  • A/V wisseling verandert de snelheid waarmee het geluid op zijn volle volume komt.
  • 5. Nagalmvolume en uitsterftijd. Dit verandert het volume. Interessant wanneer er series van tonen worden geproduceerd.
  • Meerstemmig geluid. U kunt meer dan een enkel geluid tegelijkertijd maken. Elk van die 3 geluiden kan zijn eigen instelwaarde hebben, korter of langer zijn. Een stem kan als echo dienen voor de andere.
  • 7. Natuurlijk kunt u toonhoogten varieren.
  • 8. Met blokgolven met variabele pulsbreedte zijn interessante effecten te bereiken.
  • 9. Witte ruis is het hoofdbestanddeel van slaginstrumenten of geluiden als explosies, schoten of voetstappen. Veranderen van de frequentie instelling geeft een ander type ruis.
  • 10. Probeer snel achtereen de frequentie te varieren over meerdere octaven!
Page 95
HET PROBEREN WAARD

De volgende programma's kunnen aan bijna elk BASIC programma worden toegevoegd. Wij hopen dat u door deze voorbeelden op programma-ideeën komt. Let eens goed op de manier waarop we het programmeren hebben versneld: het tijdrovend en lastig invullen van de vele POKE adressen hebben we opgelost door de waarden toe te kennen aan variabelen welke gemakkelijk te onthouden zijn. In het voorbeeld hebben we b.v. V voor volume gebruikt. H voor hoge frequentie en L voor lage frequentie. Het programma wordt er begrijpelijker door.

5 FORL=54272 TO54296 POKEL 0 NEXT reset SID-chin 10 S=54272 20 POKES+24 15 30 POKES+4 65 40 POKES+5 15 50 POKES + 3 7 POKES + 2 128 60 FORX=150TO5STEP-2 tiidlus 70 POKES+1 40 POKES X NEXT 80 FORX=150TO5STEP-2 90 POKES+1.40:POKES.X:NEXT 100 POKES+4 64

zet volume aan selecteer blokgolf stem 1 aanzwel/verval pulsbreedte op 50% frequentie hoog/laag korte tiidlus frequentie hoog/laag blokgolf uit.

NOOT

De registers voor de pulsbreedte van stem 1 (54274 lo-puls en 54275 hi- puls) worden hier ingesteld op een pulsbreedte van 50 %. Als dit niet gedaan wordt, is de pulsbreedte 0% waardoor een niet boorbaar geluid geproduceerd wordt

SCHIETEN (We maken gebruik van stem 1, witte ruis en teruglopend volume)

10 V=54296·W=54276·A=54277·H=54273·I=54272

20 FORX=15TO0STEP-1:POKEV.X:POKEW.129:POKEA.15:POKEH.40: POKEL.200:NEXT 30 POKEW 0 POKEA 0

Page 96

HOOFDSTUK 8 DATA MANIPULATIE VOOR GEVOR-DERDEN

Page 97

HOOFDSTUK 8 DATA MANIPULATIE VOOR GEVORDERDEN

  • Read en data
  • Het middelen van getallen
  • Geïndiceerde variabelen
  • Een-dimensionale matrix
  • Nogmaals het gemiddelde
  • Het begrip dimensie
  • Dobbelsteen met array's
  • Twee-Dimensionale array's
  • Enquête
Read en data

U hebt kennis gemaakt met twee methoden om waarden toe te kennen aan variabelen. In de eerste plaats was er een directe methode door toewijzen (A = 2 of LET A = 2) en een toewijzen tijdens het lopen van het programma middels de INPUT instructie. Er zijn dikwijls situaties waar geen van beide methoden geschikt is. Met name in het geval dat de waarden dikwijls wijzigen ontstaan er problemen.

Probeert u het volgende programma eens:

10 READ X
20 PRINT "X IS NU:"; X
30 GOTO 10
40 DATA 1, 34, 10.5, 16, 234.5
RUN
X IS NU: 1
X IS NU: 1
X IS NU: 34
X IS NU: 10.5
X IS NU: 16
X IS NU: 234.56
?OUT OF DATA ERROR IN 10
READY.

In regel 10 leest (READ) de computer een waarde uit de lijst volgend op DATA. Deze waarde wordt toegewezen aan de variabele X. Elke keer dat de lus 10 – 30 – 10

Page 98

doorlopen wordt, neemt de computer de volgende waarde uit de lijst, kent hem toe aan X en drukt af. De computer onthoudt zeif op welk punt hij gebleven was met het lezen van data. Zo'n verwijzing naar een punt in het geheugen noemt men een pointer (wijzer) of vector.

40 DATA 1, 34, 10.5, 16, 234.56

Nadat al de waarden gelezen zijn en de computer nog een waarde probeert te vinden, stopt het programma op OUT OF DATA ERROR. Er was immers niets meer te lezen.

• DATA regels hebben een bepaalde vorm.

40 DATA 1, 34, 10.5, 16, 234.56

- waarden worden door een komma gescheiden.

- Achter de laatste waarde komt geen komma.

Achter DATA kunnen getallen staan (hele- of gebroken) of strings. Het is niet mogelijk andere variabelen of bewerkingen in DATA regels te hebben. Het volgende zou dus incorrect zijn:

40 DATA A, 23/56, 2*5

Strings (teksten) kunnen, zoals we al noemden, wel in een DATA regel voorkomen. Het volgende voorbeeld is goed mogelijk:

10 FOR X = 1 TO 3 15 READ A$ 20 PRINT "A$ IS NU:"; A$ 30 NEXT 40 DATA DIT, IS, REUZELEUK RUN A$ IS NU: DIT A$ IS NU: IS A$ IS NU: REUZELEUK READY.

U ziet dat READ voorkomt in een FOR...NEXT lus. De lus werd net zo vaak doorlopen als het aantal gegevens achter DATA. Deze methode is niet praktisch omdat het aantal gegevens meestal zal wijzigen tijdens het ontwikkelen. Het is zinvoller om als laatste gegeven een z.g. "vlag" neer te zetten: een gegeven met een bekende waarde waarop getest wordt. (Deze waarde moet natuurlijk niet gelijk zijn aan een van de andere gegevens uit de lijst). Zodra deze waarde gelezen wordt, springt het programma door naar het vervolg.

Page 99

Bijvoorbeeld :

10 READ A 15 IF A < 0 THEN END 20 DATA 13,35,29,-999 30 PRINT"GETAL =";A 30 GOTO 10

Dezelfde gegevens kunnen, later in het programma, nogmaals gebruikt worden. De instructie RESTORE zorgt ervoor dat de computer weer vooraan begint met het lezen van het eerste gegeven. We illustreren dit door aan het tweede programma van dit hoofdstuk regel 50 toe te voegen.

50 GOTO 10

U krijgt bij RUN wederom de OUT OF DATA ERROR omdat een hernieuwd uitlezen (na 3 x) niet mogelijk is.

45 RESTORE

Heft dit probleem op. Nu loopt het programma continu zonder fouten.

Middelen van getallen

Een praktische toepassing van READ en DATA vinden wij bij het inlezen van een aantal getallen en het berekenen van het gemiddelde daarvan:

5 T=0 : CT=0 10 READ X 20 IF X=-1 THEN 50 :REM HEBBEN WE ALLES 25 CT=CT+1 30 T=T+X: REM TOTAAL BIJWERKEN 40 GOTO 10 50 PRINT"ER WAREN";CT;"GETALLEN GELEZEN" 60 PRINT"HET TOTAAL WAS";T 70 PRINT"GEMIDDELDE IS"; T/CT 80 DATA 75,80,62,91,87,93,78,-1 RUN ER WAREN 7 GETALLEN GELEZEN HET TOTAAL WAS 566 GEMIDDELDE IS 80.8571429 BEADY

Regel 5 zorgt ervoor dat de variabelen CT (de teller) en T (totaal) gelijk worden aan 0. Regel 10 leest een waarde (READ) en kent die toe aan variabele X. In regel 20 wordt getest of X = -1, hetgeen inhoudt dat we alles hebben ingelezen. Indien dit

Page 100

nog niet het geval is en de ingelezen waarde deel uitmaakt van de te gebruiken waarden, wordt de teller opgehoogd en wordt X toegevoegd aan het totaal.

Bij het tegenkomen van de -1 vlag springt het programma naar regel 50 waar het aantal ingelezen waarden wordt afgedrukt. Vervolgens wordt in 60 het totaal afgedrukt en tenslotte wordt in regel 70 dit totaal gedeeld door het aantal waarden om tot een gemiddelde te komen.

Door het plaatsen van een DATA vlag, kunt u elk willekeurig aantal getallen achter DATA invullen. Let wel: indien een DATA regel niet voldoende is, kunt u er meerdere maken, al of niet direct op elkaar volgend. Een variatie op het bovenstaande kan het toekennen van waarden zijn aan meer dan een variabele. Achter DATA mogen ook verschillende typen data gemengd voorkomen. Kijk maar naar het volgende voorbeeld waar eerst een naam ingelezen wordt en vervolgens een score van bowlen. Die naam wordt dan afgedrukt samen met de scores en het gemiddelde.

10 READ N$,A,B,C 20 PRINT"DE SCORES VAN ";N$;" WAREN:";A;B;C 30 PRINT "ZIJN GEMIDDELDE IS:";(A+B+C)/3 40 PRINT: GOTO 10 50 DATA JAN,190,185,165,EDU,225,245,190 60 DATA LEO,155,185,205,ELS,160,179,187

RUN DE SCORES VAN JAN WAREN: 190 185 165 ZIJN GEMIDDELDE IS: 180 DE SCORES VAN EDU WAREN: 225 245 190 ZIJN GEMIDDELDE IS: 220

READY.

De DATA regels zijn zo samengesteld dat READ elke keer de juiste informatie in een variabele bracht: eerst een naam en vervolgens drie waarden. Anders gezegd: N$ krijgt de eerste keer de waarde "JAN", A wordt 190, B 185 en C gelijk aan 165. Daarna wordt dit proces herhaald met de rest van de informatie (EDU en zijn scores, en LEO en ELS met die van hen).

Loading...