››››››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.››››››››››››››