Werken met Amos 141 """"""""""""""""""" CALL (Roep een machine-code programm aop) """"""""""""""""""""""""""""""""""""""""" CALL address[,params] CALL bank[,params] Voert een assembly taal programma uit die in het Amiga geheugen staat. Address kan zowel een absolute plaats van je code zijn, alswel het nummer van een AMOS geheugen bank die eerder met het PLOAD kommando aangemaakt is. Bij het binnenkomen van je programma, worden de registers D0 tot D7 en A0 tot A2 geladen vanaf de waardes bewaard in de DREG en AREG bereiken. Je assemble programma kan nu elke 68000 registers wijzigen die je wenst. Aan het begin van de routine wijst register A3 naar de eventuele parameter opgave en A5 bevat het adres van het hoofd AMOS data gebied. Als je programma's beeindigd zijn, kun je eenvoudig terug keren naar Basic met de RTS instruktie. Params staat voor een reeks parameters die in de A3 stack geduwd worden door het CALL kommando. Deze parameters moeten weer in omgekeerde volgorde verwijderd worden. Dus de laatste waarde die je in deze instruktie invoerde wordt de eerste op de stack. Afhankelijk van het soort van de parameters, worden de waarden bij A3 in een van de volgende drie formaten weergegeven. Integer: Bevat een longword met een normale AMOS integer. Floating point: Bevat een decimale komma in het IEEE enkele preciesie formaat. String: Bewaart het adres van de string. Alle strings beginnen met een enkel woord die hun lengte bevat. WAARSCHUWING! Poke nooit direkt in een string! Wanneer een string geinitialiseerd is naar een konstante, wijst het string adres naar de oorspronkelijke toewijzing binnenin je huidige programma listing! Dus als je die waarde wijzigt, kom je ook aan je originele bron code. Dat is natuurlijk erg onverstandig en moet vermeden worden. =AREG= (Variabele gebruikt om informatie aan de 68000 adres registers door te geven) a=AREG(r) AREG(r)=a AREG heeft een bereik van zes PSEUDE variabelen die gebruikt worden om een kopie van de eerste zes van de 68000 adres registers te bevatten. R kan varieren van 0 tot 6 en betekent het nummer van het adres register die bepaald werd. Wanneer het CALL kommando ook uitgevoerd wordt, wordt de inhoud van dit bereik automatisch in de registers A0 tot A2 geladen. Aan het einde van de funktie worden ze teruggesaved met alle nieuwe informatie die in de bijbehorende registers geplaatst werd. =DREG= (Variabele gebruikt om informatie naar de 68000 data registers te zetten) d=DREG(r) DREG(r)=d Dit is een bereik van 8 inters die een kopie bevatten van de inhoud van de 68000 data registers. r verwijst naar het register nummer en kan respektievelijk varieren van 0 tot 7 voor D1 tot D7. De toegang tot de systeem libraries """""""""""""""""""""""""""""""""""" Met AMOS BAsic kun je ook de interne libraries van de Amiga direkt vanuit het ROM oproepen. Die zijn eigenlijk niet echt nuttig, omdat alle oproepen al in AMOS ingebouwd zijn. Gebruik deze routines dus niet, tenzij je precies weet wat je doet. De Amiga is opmerkelijk moeilijk te programmeren en het systeem is makkelijk te crashen en de GURU fouten komen snel. =DOSCALL (Dos library) """""""""""""""""""""" r=DOSCALL(function) Voert een funktie uit direkt vanuit de DOS library. function is de buitenmaat van de bijbehorende funktie. Zie de Amiga ROM Kernel Handboeken voor meer bijzonderheden. Voor dat je deze funktie gebruikt is het nodig dat je de kontrole registers in D0 to D7 en A0 tot A2 zet met behulp van de AREG en DREG funkties. Wanneer de routine teruggaat naar Basic, worden de inhouden van D0 opgegeven in r. Let op! De waarden worden niet in DREG en AREG geladen. =EXECALL (EXEC library) """"""""""""""""""""""" r=EXECALL(funktion) Voert een oproep uit naar de Amiga's EXEC library. Bij het binnengaan worden D0 tot D& en A) tot A2 geladen met de kontrole zettingen vanuit de DREG en AREG bereiken. r wordt opgegeven met de inhoud van D0. =GFXCALL (Graphics library) """"""""""""""""""""""""""" r=GFXCALL(function) Roept een routine op van de graphics library met gebruikmaking van de waarden die bewaard worden in de DREG en AREG bereiken. function is de buitenkant van de bijbehorende funktie. r is het resultaat van de teruggegeven operatie in D0.