WERKEN MET AMOS deel 27 """"""""""""""""""""""" Local (plaatselijke DATA routines) Elke data routine in een van je procedures bepaald worden volledig apart gehouden van je hoofd programma. Dat betekent dat elke procedure zijn eigen individuele data gebieden kan hebben. Voorbeeld: Read A$:Print A$, VOORBEELD Read B$:Print B$, Procedure VOORBEELD Read X$,Y$ Print X$,Y$ Data "Basic","is" End Proc Data "AMOS","geweldig!" Hints en tips """""""""""""" Hier weer een paar richtlijnen die je helpen om zoveel mogelijk uit de procedures te halen als je maar kan: *Het is toegestaan om een procedure vanuit zichzelf op te roepen, maar dat die handeling is beperkt door het aantal ruimte die nodig is om de local variabelen te bewaren. Wanneer je programma (out of memory) zonder geheugen komt te zitten, krijg je de bijbehorende foutmelding. *Alle local (plaatselijke) variabelen worden automatisch verwijderd nadat de procedure zijn uitvoer beeindigd heeft. Procedure ADD A=A+1:Print A End Proc Hoe vaak je dit programma ook oproept, het zal altijd de zelfde waarde printen (1). * AMOS procedures zijn vergelijkbaar met de subroutines die in Amiga Basic gebruikt worden met de SUB kommando's. Het enige belangrijke verschil zit hem er in dat je geen bereiken (arrays) als parameters kan voeren. Vind je het nodig om een array toegankelijk te maken vanuit je procedure, dan kun je die inplaats van shared bepalen. Geheugen banken """"""""""""""" AMOS Basic heeft een aantal krachtige mogelijk heden toegevoegd om sprites, bobs en muziek te hanteren. De data die met deze funkties nodig zijn, moeten samen het het basic programma bewaard worden. AMOS Basic gebruikt een speciale set van 15 gedeeltes van het geheugen die in dit geval banks genoemd worden. Elke bank heeft zijn eigen individuele nummer van 1 tot en met 15. Veel van deze banken kunnen voor alle soorten data's gebruikt worden, maar sommige zijn op een enkel soort gericht zoals de sprite definities. Alle sprite plaatjes worden in bank 1 bewaard. Zij kunnen in het geheugen geladen worden met de volgende regel: Load"AMOS_DATA:Sprite/Octopus.abk" Er zijn twee verschillende soorten geheugen banken: Altijd aanwezige of tijdelijke. Altijd aanwezige (permanente) banken hoef je maar een keer te definieren (bepalen) en worden automatisch op volgorde naast je programma meegesaved. Tijdelijke banken zijn vluchtig en worden steeds opnieuw bepaald elke keer als je je programma runt. Verder kunnen tijdelijke banken in tegenstelling tot de permanente uit het geheugen gewist worden door het CLEAR kommando. Soorten van geheugen banken """"""""""""""""""""""""""" AMOS Basic ondersteunt de volgende soorten van geheugen banken: Class Stores Beperkingen Soort ---------------------------------------------------------------------------- Sprites Sprite of bob definitie Alleen bank 1 Permanent Icons Bevat icon informaties Alleen bank 2 Permanent Muziek Bevat muziekspoor data's Alleen bank 3 Permanent Amal Gebruikt voor Amal data Alleen bank 4 Permanent Samples De geluiden data's Banken 1-15 Permanent Menu Bevat menu definities Banken 1-15 Permanent Chip arbeid Tijdelijke werkruimte Banken 1-15 Tijdelijk Chip data Permanente werkruimte Banken 1-15 Permanent Snel arbeid Tijdelijke werkruimte Banken 1-15 Tijdelijk Snel data Permanente werkruimte Banken 1-15 Permanent RESERVE (Reserveert een bank) RESERVE AS soort, bank, lengte De banken De banken die door sprites en bobs worden gebruikt, worden automatisch toegewezen door AMOS. Het RESERVE kommado staat je toe om elke andere bank te maken die je maar wilt. Elke soort bank heeft zijn eigen individuele versie van de RESERVE instruktie. RESERVE AS WORK banknr, lengte Reserveert het aantal bytes die je in de tijdelijke werkruimte nodig hebt. Zo mogelijk wordt dit gebied aan het snelle geheugen toegewezen, zodat het niet nodig is om de Amiga blitter chip te belasten. RESERVE AS CHIP WORK banknr, lengte Voegt een werkruimte toe van de lengte maat voor gebruik met de Chip Ram. Je kunt zien of er genoeg ruimte is met het CHIP FREE kommando. RESERVE AS DATA banknr, lengte Reserveert een geheugen bank van een lengte bytes lang. Dit data gebied wordt aan het snelle ram toegewezen als die er is. RESERVE AS CHIP DATA banknr, lengte Reserveert length bytes van het geheugen vanuit de chip ram. Deze bank wordt automatisch met je programma meegesaved. Bank mag elk nummer hebben van 1 - 15. Omdat de banken 1 tot en met 5 normaal door het systeem worden gebruikt is het verstandig deze niet te gebruiken. Merk op dat alleen de lengte van een bank bepaald wordt door de hoeveelheid vrije geheugen. LISTBANK (Laat de banken zien die in gebruik zijn) LISTBANK laat het aantal banken zien die door het programma gereserveerd zijn, samen met hun plaats en grootte. De listing wordt als volgt getoond: Nummer Soort Begin Lengte 1 - Sprites S:$040F60 L:$00002F 2 - Work S:$05F7A0 L:$014000 S: = Het begin adres van de bank hedeximaal. L: = De lengte van de bank hedeximaal. Normaal wordt de lengte van een bank teruggegeven in bytes, maar in het geval van sprites en icons vertegenwoordigt de waarde het totale aantal plaatjes. De reden hiervoor is dat het bewaren van elk plaatje overal in het Amiga geheugen kan zijn, de bank is dus geen doorlopend blok geheugen. Dus je mag een sprite bank niet BSAVEven, maar moet je gewoon het kommando SAVE "filenaam.ABK" gebruiken.