home *** CD-ROM | disk | FTP | other *** search
/ Pokey's Magazine 11 & 12 / Pokeys_Magazine_11__12_1991_08___nl_Side_B.atr / abra.txt next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. ABRACADABRA!¢¢In de eerste jaargang van Pokey magazine gaf Jack de Bruijn een machinetaal cursus voor de geintreseerden. Het leek ons nu wel een goed idee de machinetaal cursus op te splitsen in twee delen. Een deel zal door Jack worden verzorgt en het andere deel door mij. Jack zal zijn cursus van het vorige jaar op dezelfde manier vervolgen terwijl ik wat dieper in zal gaan op verschillende onderwerpen zoals muziek, het OS, DOS, graphics enz.¢¢Voordat ik begin met het echte werk, wil ik dit nog even kwijt: Deze serie wordt geschreven voor jullie, en daarom lijkt het mij redelijk dat jullie ook mee beslissen over de inhoud. Ik verwacht daarom veel reacties van mensen die wel eens wat meer willen weten over een bepaald onderwerp. Als er dus bijv. iemand rondloopt die zich nu al tijden afvraagd hoe hij zijn eigen device kan ontwerpen (als je nu je hersens breekt over wat een device is, laat het mij weten!) dan is dit zijn kans. Machinetaal is natuurlijk niet verplicht, maar in de meeste gevallen werkt dat gewoon het prettigst; in Basic krijg je al gauw te maken met stapels Pokes.¢¢In ieder geval, iedereen weet nu wat meer over de bedoeling van deze serie en kan ik dus starten met de eerste aflevering. Nogmaals, mocht je iets niet begrijpen, laat het me weten! Veel plezier!¢¢--------------------------------¢¢Aflevering 1: DE SCHERM ROLLER¢¢Daar kruipt hij behoedzaam over de pixels, iedereen volgt het vol bewondering, want het is...... weer zo'n scherm roller. Je zou er haast ziek van worden, zo vaak worden die dingen gebruikt voor het vertellen van de onmogelijkste onzin. En toch kunnen we er blijkbaar maar geen genoeg van krijgen. Daarom gaat deze aflevering over dat afschuwelijke schepsel van een gestoorde programmeur.¢¢Hij zat op een avond achter zijn XL te denken over een nieuw type van informatieoverdracht aan de gebruiker, eentje die niet veel ruimte op het scherm moest innemen. Al snel had hij in de gaten dat als hij de tekst van rechts naar links liet bewegen, hij in feite maar 1 regel nodig zou hebben. Dus hij aan de slag. Het eerste programmaatje wat hij maakte was in Basic. Het deed niets anders dan de 2e tot en met de 40e letter kopieren naar de 1e tot en met de 39e, en dan de nieuwe letter op de 40e kolom.¢¢In theorie was er niets op aan te merken, maar helaas, Basic was er te langzaam voor en hij ontdekte meteen waarom. Voor het soepel laten verlopen van de roller zou hij ten eerste de tekst op een goede snelheid moeten laten verlopen, ongeveer 8 letters per seconde zou redelijk zijn. Dus hij aan de slag. Eerst zocht hij de informatie op die nodig was voor het maken van de scherm roller.¢¢Waar in het geheugen staat de tekst die op het scherm staat? De programmeur grijpt wanhopig naar Mapping the Atari. Daar vindt hij het onderwerp Screen. Memory use lijkt hem wel wat, dus hij kijkt bij het daarbijhorende adres. (88)  Aha, 88 en 89 geven 'The lowest address of the screen memory, corresponding to the upper left corner of the screen, where the value of this address will be displayed.'¢¢Als je meer informatie over het schermgeheugen wil hebben, raad ik je aan Mapping the Atari te bestellen, waar nog 4 bladzijden meer informatie wordt gegeven. Dit 270 bladzijden tellende naslagwerk is onmisbaar voor elke mc programmeur en te bestellen bij Page 6. ¢¢In ieder geval, de programmeur vindt vanuit Turbo Basic in (88) het adres $BC40. <? HEX$(DPEEK(88))> In de monitor van Atmas-II vindt hij hetzelfde getal, dus gaat ie aan de slag:¢¢(dit programmaatje staat wel ergens als D:SCROL1.SRC op de pokey disk)¢¢SCREEN    EQU $BC40¢SETVBV    EQU $E45C¢SYSVBV    EQU $E45F¢RTCLOK    EQU $14¢TEXTADR   EQU $CB¢¢          ORG $A800¢¢* BEGIN VAN TEXT IN (TEXTADR)¢¢          LDA #TEXT:L¢          STA TEXTADR¢          LDA #TEXT:H¢          STA TEXTADR+1¢¢* VERTICAL BLANK INTERRUPT INIT¢¢          LDA #6¢          LDY #VBI:L¢          LDX #VBI:H¢          JSR SETVBV¢¢* TERUG NAAR ATMAS¢¢          RTS¢¢* VERTICAL BLANK INTERRUPT:¢* COPIEER 40 BYTES VAN (TEXTADR)¢* TOT (TEXTADR)+40 NAAR $BC40¢* EN VERHOOG (TEXTADR)¢* OM DE TEXT NIET TE SNEL TE LATEN¢* GAAN (DEZE INTERRUPT WORDT 50¢* KEER PER SECONDE AANGEROEPEN)¢* WORDT ER MAAR TIJDENS 1 VAN DE 4¢* INTERRUPTS DAADWERKELIJK IETS¢* OP HET SCHERM GEKOPIEERD.¢¢VBI       LDA RTCLOK¢          AND #%00000011¢          BNE EXIT¢          ¢* COPY TEXT NAAR SCREEN¢¢          LDY #39¢COPTXT    LDA (TEXTADR),Y¢          STA SCREEN,Y¢          DEY¢          BPL COPTXT¢¢          INC TEXTADR¢          BNE EXIT¢          INC TEXTADR+1¢¢EXIT      JMP SYSVBV¢¢* EN DE TEKST NATUURLIJK!¢* DEZE MOET NATUURLIJK NIET IN ASCII¢* MAAR IN INTERNE CODE GEASSEMBLEERD¢* WORDEN!¢¢TEXT      ASC %[40 SPATIES]%¢          ASC %EN ZIEDAAR, DE PROG%¢          ASC %RAMMEUR HAD DE EERSTE%¢          ASC % VAN VELE SCHERM %¢          ASC %ROLLERS GEMAAKT! %¢          ASC %HET SPREEKT VOOR ZICH%¢          ASC % DAT HIJ ER HEEL %¢          ASC %TROTS OP WAS EN %¢          ASC %BLA BLA BLA....  %¢¢Ja, wat was hij er trots op! MAAR! De eerste roller was nog wel iets aan de schokkerige kant. Ai! Weer sloeg de schrik de programmeur om het hart. Huppekee, Mapping er maar weer bij. Weer bij Screen. He? Scrolling leek hem wel wat, en bij 54276 ($D404) had ie beet. Het werd wel wat moeilijker, want de programmeur kwam wat termen tegen waar hij nog niet het fijne van af wist, maar met een goede portie moed ging hij verder. Wat bleek, om hardware matige soepele scrolling te genereren moest hij eerst 16 bij de display list instructie van de eerste regel optellen. Ik weet het, dit klinkt als een geheime code om een kruisraket te lanceren, maar het is waar. In Turbo basic zou het hierop neerkomen:¢¢HAHA=DPEEK($230)+3¢POKE HAHA,PEEK(HAHA)+16¢¢Korte uitleg: DPEEK($230) geeft aan waar in het geheugen de display list staat. (In Turbo Basic en Atmas is dat $BC40) Waarom plus 3? Er komen namelijk eerst 3 andere instructies voor de instructie van de eerste schermregel, nl. 3 lege regel instructies! Probeer maar eens dit:¢¢DPOKE $230,DPEEK($230)+3¢¢Wat doe je nu: je zet de display list drie bytes hoger in het geheugen, zodat hij de lege regels overslaat. Hij begint meteen met de schermregel, wat je duidelijk kunt merken!¢¢Om dus de eerste scherm geschikt te maken voor hardwarematige horizontale scrolling moet 16 bij de inhoud van DPEEK($230)+3 worden opgeteld. In Atmas komt dat hierop neer:¢(dl staat voor display list)¢¢ZP        EQU $CB¢DLST      EQU $230¢¢          LDA DLST     ;lo byte dl¢          STA ZP¢          LDA DLST+1   ;hi byte dl¢          STA ZP+1¢          LDY #3¢          LDA (ZP),Y¢          ORA #%00010000¢          STA (ZP),Y¢¢Hee, een ORA? Waarom niet gewoon +16, dus:      CLC¢          ADC #16¢Nou, je ziet het zelf al denk ik..¢¢Ok, nu hebben we de eerste schermregel geschikt gemaakt voor hardwarematige horizontale scrolling, nu rest ons nog iets: Hoe vertellen we onze Antic hoeveel de regel moet worden gescrolld? Heel eenvoudig: We zetten een getal van 0-15 in HSCROL ($D404) en de rest gebeurd vanzelf. Een gr. 0 karakter komt overeen met 4 color clocks, dus we hebben maar 4 van de 16 horizontale verschuivingen nodig. Ik weet het, dit is vast geen correct lopende zin, maar het is tenslotte ook geen cursus nederlands! Als in $D404 0 wordt gestopt, is er geen verschuiving. Stoppen we er vervolgens 1, 2 en 3 in, dan vindt er een beweging naar rechts plaats. Dus als de VBI de regel naar links heeft gekopieerd, moet er 3 in $D404 worden gestopt. In de volgende VBI 2, daarna 1, daarna nul, en daarna moet de boel weer worden gekopieerd en moet er weer 3 in $D404. Hoe dit KAN worden gedaan (en dat geldt voor de meeste dinges) kun je bekijken in D:SCROL2.SRC¢¢O ja, schrik niet van het vreemde scherm dat je krijgt als je het runt. Een horiz. scrol-regel neemt namelijk 48 bytes schermgeheugen ipv. 40. Stom he?¢¢Tot afsluiting van dit eerste artikel staat er ook nog een nummertje drie op de schijf waar nog heel wat mee te prutsen valt. Veel plezier! En niet vergeten: Als je nog ergens vragen over hebt (hoeft absoluut niet over dit artikel te zijn!) schrijf of bel! ¢Yeb¢Aalscholverstraat 36¢1444 VS in Purmerend¢¢tel. 02990-20638