home *** CD-ROM | disk | FTP | other *** search
/ Pokey's Magazine 5 / Pokeys_Magazine_05_1991_02___nl_Side_B.atr / lescr.txt < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. lWelkom bij de Februari-aflevering van CodeRunner.¢¢Deze keer gaat wederom over het bespelen van het beeldscherm. Daarbij maken we gebruik van enkele nieuwe machinetaal instrukties. De vorige keren werd de 'displaylist' behandeld. Dat is een soort boodschappenlijstje voor de computer. Het beeldscherm wordt ingedeeld (binnen de mogelijkheden) aan de hand van deze lijst. Een displaylist kan er ongeveer zo uitzien in een assembler :¢¢100 DPL   .byte $70 ; lege beeldlijnen¢110       .byte $42 ; tekst¢120       .word tekst ; inhoud van de tekst ¢130       .byte $41 ; sprong terug naar¢140       .word dpl ; het begin van de lijst¢150 tekst .sbyte " Dit wordt afgedrukt"¢¢Wanneer we dit assembleren vanaf bijvoorbeeld adres $0600 ofwel 1536 onstaat het volgende :¢¢adres :     Waarde:¢$0600       $70¢$0601       $42¢$0602       $07¢$0603       $06¢$0604       $41¢$0605       $00¢$0606       $06¢$0607 tot de lengte van de tekst, de waarde van de letters.¢¢Op adres $0602 en $0603 staat het adres vermeld waar de computer de tekst kan vinden. Dit is op adres $0607. De computer leest 16 bits getallen omgekeerd. Dus eerst het lage deel van het getal en dan het hoge deel. $0607 staat dan ook in het geheugen als $07,$06. De assembler regelt dit voor je als je met labels werkt, zoals het label 'tekst'.¢Het zelfde geldt voor het adres van het begin van de displaylist aan het einde van de lijst. Op $0605 een $00 en op $0606 het getal $06. Draai je dat om dan zie je $0600.¢Het lage deel van een 16-bits getal noemen we een 'low-byte' het hoge deel een 'high-byte'.¢¢Een byte bestaat zoals bekend uit 8 bits. Deze bits zijn een soort schakelaartjes die of aan of uit kunnen staan. Om dit zichtbaar te maken is een rekenkundig-stelsel handig met twee mogelijkheden die de stand 'aan' en 'uit' kunnen weergeven.¢Dat stelsel is het 'binaire' stelsel. Het woord zegt het al bijna, het bestaat slechts uit twee getallen nl. de 0 en de 1.¢¢Wanneer we de 0 met de uit stand vergelijken en de 1 met de andere situatie is de inhoud van een byte bijvoorbeeld zo voor te stellen :¢¢01001011 of 11111111 of 00000000¢¢D.m.v. een eenvoudige formule is het mogelijk om deze getallen te koppelen aan voor ons begrijpelijke waarden.¢¢Van links naar recht hebben zij de volgende waarden:¢¢128 64 32 16 8 4 2 1 ¢¢Het getal 1 is binair : 00000001¢Het getal 2 is binair : 00000010¢Het getal 3 is binair : 00000011¢( 1 en 2 optellen )¢Het getal 4 is binair : 00000100¢Het getal 5 is binair : 00000101¢( 1 en 4 optellen )¢Het grootste getal wat in een byte kan worden opgeborgen is dan ook :¢128+64+32+16+8+4+2+1 ofwel 11111111.¢En dat is : 255¢¢Van recht naar links zijn deze getallen als volgt gevormd: 2 tot de macht 0 = 1 2 tot de macht 1 = 2 etc.¢Dus:¢2^0 = 1, 2^1 = 2, 2^2 = 4, 2^3 = 8, 2^4 = 16, 2^5 = 32 2^6 = 64 2^7 = 128¢¢Hierna een vergelijking van decimale, hexadecimale en binaire getallen :¢¢Decimaal:       Hex:         Binair:¢0                   0            0000¢1                   1            0001¢2                   2            0010¢3                   3            0011¢4                   4            0100¢5                   5            0101¢6                   6            0110¢7                   7            0111¢8                   8            1000¢9                   9            1001¢10                  A            1010¢11                  B            1011¢12                  C            1100¢13                  D            1101¢14                  E            1110¢15                  F            1111¢¢Voor de getallen 0 tm 15 zijn dus 4 bits genoeg. Dit noemt men een 'nible.'¢¢Nu wat nieuwe machinetaal opdrachten.¢Tot nu toe hadden we LDA en STA.¢Ook de andere registers kun je gebruiken om getallen over te brengen. Bijvoorbeeld met de opdrachten LDX en STX en LDY an STY.¢Het is ook mogelijk registers en adressen in het geheugen met 1 te vehogen en met 1 te verlagen.¢Dat gebeurt met de opdrachten:¢INC (INCrement) en DEC (DECrement).¢In het X register staat bijvoorbeeld het getal 10. Nu geven we de opdracht : INX ofwel INcrementX. Daarna staat in X het getal 11. Verlagen gebeurt met DEX.¢Dit kan ook met het register Y : INY en DEY. Maar ook direct met adressen in het geheugen. Als we m.b.t. de bovenstaande displaylist de opdracht geven INC $0602 wordt de inhoud van dit adres met 1 verhoogd.¢Zo kan verlagen met de opdracht DEC $0602.¢Ook is het mogelijk een adres en de accumulator direct met twee te vermenigvuldigen of te delen.¢Andere vermenigvuldigingen zijn zonder verder programma niet direct mogelijk. Onze CPU kent hiertoe geen opdrachten.  Vermenigvuldigen en delen met twee kan d.m.v. het verschuiven van bits.¢In adres $0602 staat bijvoorbeeld het getal 7. Binair is dat : 00000111. We kunnen nu de opdracht geven: ASL $0602 (Arithmetic Shift Left).¢De bits op adres $0602 schuiven dan 1 keer naar links. Na de uitvoering van de opdracht staat er op het betreffende adres : 00001110. Geven we hierna de opdracht: LSR (Logical Shift Right) $0602 dan staat er weer 00000111.¢Het voorgaande wordt goed duidelik in het volgende programma'tje:¢In $0602 staat het getal 7 :¢        Binair 00000111    Decimaal¢ASL $0602      00001110    14¢ASL $0602      00011100    28¢ASL $0602      00111000    56¢ASL $0602      01110000   112¢ASL $0602      11100000   224¢ASL $0602      11000000¢ASL $0602      10000000¢ASL $0602      00000000¢¢Het zelfde kan met de accumulator. De opdracht wordt dan in een assembler : LSR A en ASL A.¢¢Bij de opdrachten ROL en ROR schuiven de bits er aan de ene kant uit en komen aan de andere kant weer terug :¢¢              00010000      16¢ROL $0602     00100000      32¢  etc.        01000000      64¢              10000000     128¢              00000001       1¢              00000010       2¢              00000100       4¢              00001000       8¢              00010000      16¢¢¢¢¢Het is dan ook begrijpelijk dat met deze opdrachten de displaylist makkelijk kan worden veranderd terwijl je die op het scherm ziet.¢Dit kan o.a. door het manipuleren van het aantal lege lijnen op het scherm.¢De codes hiervoor zijn :¢¢Aantal lege beeldlijnen:      Code:¢¢                        1          0¢                        2         16¢                        3         32¢                        4         48¢                        5         64¢                        6         80¢                        7         96¢                        8        112¢¢Maak nu de volgende diplaylist :¢10             *=$0600¢15             JMP START¢16 ;¢20 DPL         .BYTE 16  ; 2 lege lijnen.¢30             .BYTE $46¢40             .WORD TEXT¢50             .BYTE $41¢60             .WORD DPL¢65 ;¢70 TEXT        .SBYTE "Deze tekst gaat op en neer"¢73 ;¢75 START       ROL DPL¢               JMP START¢¢Het aantal lege beeldlijnen bovenaan de diplaylist wordt nu steeds verhoogd en verlaagd via de getallen 16,32,64,128.¢De tekstregel er onder wordt tijdens dit proces naar beneden en naar boven geforceerd. Hierdoor ontstaat een springende tekstregel.¢Er zijn natuurlijk allerlei manieren om een regel te laten springen maar deze bewijst de werking van de bit-schuif opdrachten.   ¢¢In het voorbeeldprogramma zie je een en ander aan het werk. De opdracht van CodeRunner is iedere week het zelfde:¢Pruts zoveel als je kunt in de voorbeeldprogramma's, verander er in en probeer het effect. Het is nooit erg als je computer vastloopt of als je erge rare dingen op je beeldscherm ziet. Er gaat echt niets van kapot. Bewaar je programma wel voor het proberen op diskette, anders ben je het kwijt als het vast loopt.¢Ook de opdrachten INC en DEC zijn interessant om de DPL te manipuleren.¢Laat altijd de VB sprong ($41) en het adres er na in tact. Veel plezier met de maffe effecten show.¢¢¢Tot de volgende keer.¢¢¢¢¢¢¢¢¢