¢¢¢¢¢¢Welkom bij de april aflevering van...¢.............CODERUNNER..............¢¢Deze keer een aantal nieuwe instrukties.¢ BEQ¢ BNE¢ INC¢ DEC¢ INY¢ DEY¢ INX¢ DEX¢ CPX¢ CPY¢ CMP¢¢Eerst INC en DEC.¢Met deze instructies kun je de inhoud van adressen vBEQ¢ BNE¢ INC¢ DEC¢ INY¢ DEY¢ INX¢ DEX¢ CPX¢ CPY¢ CMP¢¢Eerst INC en DEC.¢Met deze instructies kun je de inhoud van adressen verhogen en verlagen.¢Voorbeeld:¢INC $0600 - Dit verhoogt de inhoud van adres $0600 met 1.¢DEC $0600 - Dit verlaagt de inhoud erhogen en verlagen.¢Voorbeeld:¢INC $0600 - Dit verhoogt de inhoud van adres $0600 met 1.¢DEC $0600 - Dit verlaagt de inhoud erhogen en verlagen.¢Voorbeeld:¢INC $0600 - Dit verhoogt de inhoud van adres $0600 met 1.¢DEC $0600 - Dit verlaagt de inhoud erhogen en verlagen.¢Voorbeeld:¢INC $0600 - Dit verhoogt de inhoud van adres $0600 met 1.¢DEC $0600 - Dit verlaagt de inhoud van adres $0600 met 1.¢¢10 * = $0600¢20 LDA #10¢30 STA $3000¢35 ; In lokatie $3000 staat nu het decimale gevan adres $0600 met 1.¢¢10 * = $0600¢20 LDA #10¢30 STA $3000¢35 ; In lokatie $3000 staat nu het decimale gevan adres $0600 met 1.¢¢10 * = $0600¢20 LDA #10¢30 STA $3000¢35 ; In lokatie $3000 staat nu het decimale gevan adres $0600 met 1.¢¢10 * = $0600¢20 LDA #10¢30 STA $3000¢35 ; In lokatie $3000 staat nu het decimale gevan adres $0600 met 1.¢¢10 * = $0600¢20 LDA #10¢30 STA $3000¢35 ; In lokatie $3000 staat nu het decimale getal 10.¢40 INC $3000¢45 ; In lokatie $3000 staat nu het decimale getal 11.¢50 DEC $3000¢55 ; Nu weer 10.¢60 DEC $3000¢65 ; Nu 9 etc.¢¢Verhogen en verlagen kan ook met registers.¢Dit geldt voor de registers X en Y. Voorbeeld:¢INX = verhoog de inhoud van het X-register met 1.¢DEX = verlaag de inhoud van het X-register met 1.¢¢De instrukties BEQ (Branch on Equal)en BNE (Branch on Not Equal) hebben betrekking op het zgn 'voorwaardelijk' springen in een programma.¢Zo kan het zijn dat je naar een ander stukje van je programma wilt springen als een bepaald adres of register een bepaald getal bevat.¢Dat is makkelijk te zien in een eenvoudig voorbeeldprogramma......:¢¢10 * = $ 0600¢15 TERUG¢20 LDA #0¢25 ; Is het een 0 ?¢26 ; Ja, dus spring naar verder.¢30 BEQ VERDER¢40 .SBYTE "Stukje tekst"¢50 VERDER¢60 LDA #1¢65 ; Is het een 0 ?¢66 ; Nee, dus spring naar terug.¢70 BNE TERUG¢¢Of :¢ LDA ADRES¢ staat er een 0 in lokatie 'ADRES'?¢ BEQ ERGENS¢ zoja spring naar 'ERGENS'¢Het zelfde:¢ LDA $3000¢ BEQ $0600¢¢Of:¢ LDA $3000¢ BNE $0600¢ Spring als er geen 0 in $3000 staat naar $0600¢¢Zo kun je ook kijken of na het verhogen of verlagen van een adres een nul wordt bereikt.¢¢ LDA #40¢ STA $3000¢ Berg 40 op in lokatie $3000¢LUS ( label )¢ DEC $3000¢ Verlaag de inhoud van lokatie $3000¢ BNE LUS¢ Blijf terug springen naar 'LUS' tot een 0 wordt bereikt.¢¢Of:¢ LDA #0¢ STA $3000¢LUS¢ INC $3000¢ BNE LUS¢ Ga 255 keer rond.¢¢Met de opdracht CMP (CoMPare) kun je de accumulator vergelijken met een bepaald getal.¢Bijvoorbeeld:¢ LDA $3000¢ CMP #34¢ Vergelijk de inhoud van lokatie $3000 met het getal 34.¢ BEQ VERDER¢ Spring als de getallen gelijk zijn naar lokatie 'VERDER'¢ In feite worden de getallen bij de opdracht CMP van elkaar afgetrokken. Zijn ze gelijk dan onstaat als resultaat een 0.¢ Als de aftreksom niet op 0 uitkomt wordt hier dus niet gesprongen.¢ Dat is omgekeerd met de opdracht BNE.¢ CMP #34¢ BNE VERDER¢ Spring steeds als lokatie $3000 niet het getal 34 bevat.¢¢Het X en Y register zijn op een dergelijke manier te testen.¢Dit gaat via de opdrachten : CPX en CPY¢¢ CPX #12¢ BEQ ERGENS¢ Spring als in X het getal 12 staat naar ergens.¢ CPY #33¢ BNE ERGENS¢ Spring niet naar ERGENS als in Y het getal 33 staat.¢¢Zo kun je met deze registers eenvoudig tellers produceren.¢De registers X en Y kun je ook eenvoudig verhogen en verlagen.¢¢ INY¢ Verhoogt Y met 1.¢ DEY¢ Verlaagt Y met 1.¢ INX¢ Verhoogt X met 1.¢ DEX¢ Verlaagt X met 1.¢¢Bijvoorbeeld :¢ *=$0600¢LUS¢ INY¢ Verhoog Y met 1¢ CPY #100¢ Vergelijk Y met 100¢ BNE LUS¢ Spring terug naar lus en ga dus door met het verhogen van Y tot 100 is bereikt.¢¢Of:¢ *=$0600¢ LDX #100¢ DEX¢ Verlaag X.¢ BNE $0600¢ Spring terug naar $0600 tot X een 0 bevat.¢¢Op deze manier wordt vaak een vertragingslus in een programma gezet. Bijvoorbeeld om het programma ergens trager te laten lopen. Dat is bij machinetaal meer dan eens nodig.¢¢PAUZE¢ LDX #40¢LUS1¢ LDY #255¢LUS2¢ DEY¢ BNE LUS2¢ Spring 255 maal naar 'LUS2' tot Y een 0 bevat.¢ DEX¢ Verlaag dan X met 1.¢ BNE LUS1¢ Doe de lus met het Y register opnieuw tot X een 0 bevat.¢Zo hebben we dus 40 keer het register Y van 255 tot 0 laten tellen.¢¢Dit kan ook met lokaties, maar dat is trager. Voor een vertraging is dat niet zo erg.¢¢PAUZE¢ LDA #40¢ STA $03000¢LUS1¢ LDA #255¢ STA $03001¢LUS2¢ DEC $03001¢ BNE LUS2¢ DEC $03000¢ BNE LUS1¢¢Verhoog de kleur van het beeldscherm alle kleuren langs.¢KLEUR¢ LDY #0¢LUS¢ STY 710¢ INY¢ BNE LUS¢Daar zie je niks van.¢Zo wel :¢KLEUR¢ LDA #0¢ STA 710¢LUS¢ LDX #255¢LUS1¢ LDY #255¢LUS2¢ DEY¢ BNE LUS2¢ DEX¢ BNE LUS1¢ INC 710¢ BNE LUS¢Vooral in machinetaal is de 'timing' van een programma belangrijk.¢Vaak kun je met een net iets andere manier van programmeren een andere timing bereiken.¢Het voorbeeldprogramma laat weer het een en ander over het scherm rollen. Met bovenstaande uitleg moet het te volgen zijn.¢Laat zelf eens wat over het scherm lopen in verschillende snelheden.¢¢Tot de volgende keer.¢Jack de Bruijn.¢¢¢¢¢¢¢¢¢¢¢¢¢¢ə