Ich glaube das hier funktioniert….
Schlagwort-Archive: Zahlenspiele
Zahlenspielereien die Vierte
Die gute alte Highscore. Was täten wir nur ohne Sie. Die Highscore macht das Spiel erst zum Wettbewerb. Wie aber sage ich es meinem Computer in 6502 Assembler.
Ja, wie kann ich in 6502 Maschinensprache zwei beliebig große Zahlen miteinander vergleichen?
So geht’s:
Zahlenspiele (in 6502 Assembler). Es geht weiter…
..der im Folgenden verlinkte Artikel aus der Compute! Ausgabe 34 vom März 1983, zeigt wie die Eingabe von Zahlen programmiert werden könnte:
Die bisherigen „Zahlenspiele“ und wie man das in 6502 Assembler machen könnte finden sich hier im Blog, einfach dem Link folgen:
Unter dem Schlagwort „Zahlenspiele“ finden sich Artikel mit Beispielen die zeigen, wie in Assembler 8/ 16 Bit Integer auf dem Bildschirm ausgegeben werden können. Die Artikel entstanden bei meiner Arbeit an „Diamonds“ (Projekt Rock).
Es galt zu ergründen, wie ich die aktuelle Punktezahl, Level, Leben usw. auf dem Bildschirm ausgeben könne. Es gelang!
Viel Spass!
Millionäre, oder: Zahlenspiele die Dritte
Es ist schon erstaunlich, wie einfach es ist, nahezu beliebig große Zahlen auf einem 8-Bit Maschinchen auf den Bildschirm zu bringen.
Es wurde bereits eine Methode gefunden, mit der 8- Bit Integer <=255 in Assembler, aus dem Speicher, in ATASCII umgewandelt werden konnten. Vergleiche hier im Blog.
Unter http://www.atarimagazines.com/analog/issue62/boot_camp.php findet sich eine Erweiterung des vorgenannten zur Umwandlung von 16- Bit Integern. Damit können dann Zahlen bis 65535 dargestellt werden.
Last but not least, noch ein Stück Source zur Umwandlung von 8- Bit Integern nach Hex, hier im Blog: „Die Basis 16“
Aber kann ich auch 1 Million? Natürlich:
1. Ziffer (n)=9?
Ja=> Ziffer (n)=0, gehe zu 2
Nein=>Ziffer (n)=Ziffer(n)+1,
2. Alle Ziffern?
Nein, n=n-1, gehe zu 1
ja, Ende!
Startbedingung: n=6
In Deutsche übersetzt funktioniert der oben geschriebene Pseudo- Code so:
- Wir habe eine Zahl, die besteht aus 6 Ziffern. Wir beginnen mit der letzten Ziffer.
- Ist diese Ziffer schon „9“?
- Ja, dann setzte diese auf „0“ wenn nicht, erhöhe diese um eins.
- Weiter zur nächsten Ziffer, und beginne das Spiel von vorne, bis alle sechs Ziffern abgearbeitet sind.
Zahlenspiele die Zweite: Basis 16
…Idee wurde Algorythmus, Algorythmus zu Mnemonic und Mnemonic zum Programm…….
Passiert oft während einer langweiligen Zugfahrt oder in Wartezimmern von Ärzten, nicht nur spektakuläres, sonder auch oft ganz grundlegendes.
Die Umwandlung eines 8-Bit Integers nach ASCII zur Ausgabe auf den Bildschirm in 6502 Assembler zum Beispiel, schau einfach mal hier nach: https://retrozock.wordpress.com/2012/04/07/zahlenspiele/
Gleiches Prinzip, die Umwandlung eines 8-Bit Integres nach Hex. Dezimale Zahlen gründen sich auf der Basis 10 und werden mittels der Ziffern 0 bis 9 dargestellt.
Hexadezimale Zahlen gründen sich auf der Basis 16 und werden mittels der Ziffern 0 bis F dargestellt. Für die Umwandlung eines 8-Bit Integres benötigen wir im hexadezimalen Zahlensystem 2 Ziffern. Stelle 1 ergibt die Potenz 16^1=16 und die zweite Stelle 16^0=1 (vgl. dezimal: 10^2=100, 10^1=10, 10^0=1).
Wir fragen uns nun , wie oft kann ich von meiner Zahl, sagen wir der 169, die 16 abziehen? 10 mal, Rest 9!
Damit ist die erste Ziffer unserer gesuchten Zahl (hex) die 10, also A.
Weiter mit dem Rest. Wie oft kann ich von der Neun die 1 abziehen? Neun mal, Rest 0!
Damit ist die zweite Ziffer unserer gesuchten Zahl (hex) die 9 => 169 (dez.)=A9 (hex).
Das nachstehende Progrämmchen macht’s vor:
* INTHEX.SRC * * WANDELT DEN IN "ZAHL" ENTHALTENEN * INTEGER IN BILDSCHRIMZEICHEN UM UND * GIBT DIESE AUF DEM BILDSCHIRM * ALS HEX- ZAHL AUS * * ZAHL KLEINER ODER GLEICH 255! * * B.FRITZ 5.6.2012 ************************************* BILD EQU 88 ADRESSE BILDSPEICHER BILDH EQU 89 ORG $A800 * ANZAHL DER STELLEN UNSERER ZAHL * UND ZEIGER AUF UNSERE TABELLE DER * POTENZEN VON 16 LDY #0 * ANZAHL DER SUBTRAKTIONEN BIS DAS * ERGEBNIS >0 WAR LDX #0 * LOS GEHTS LDA ZAHL ZAHL VORHER RETTEN STA ZAHLB L1 SEC LDX #0 L2 LDA ZAHLB SBC POW,Y STA ZAHLB
BCC NULL ERGEBNIS<0
INX ERGEBNIS>0 D.H. BCS L2 WEITER NULL LDA ZIFF,X EREBNIS<0 STA (BILD),Y ZIFFER AUSG. LDA ZAHLB ZAHL>0 MACHEN ADC POW,Y STA ZAHLB INY NAECHST NIEDR. CPY #2 16ER, ALLE STELLEN BNE L1 DURCH?
BRK JA!
* * EINIGE DATEN * * UNSERE ZIFFERN- ZEICHEN ZIFF ASC %0123456789ABCDEF% * 16ER
POW DFB 16,1
* DIESE ZAHL SOLL AUSGEGEBEN WERDEN ZAHL DFB 169 * ZWISCHENSPEICHER ZUM RECHNEN ZAHLB DFB 0
Zahlenspiele
Wie realisiert man die Ausgabe von Integer- Zahlen in 6502 Assembler? Eigentlich ganz einfach. Die Lösung:
Man stelle sich die Frage, wie oft kann ich von, sagen wir 1934, 1000 abziehen. Einmal, ganz klar. Man wiederholt das ganze für die 100-er die 10-er und die Einer und erhält so die Ziffern der Zahl. Ich habe das ganze für Integer kleiner gleich 255 realisiert. Zur Erklährung sollten die Kommentare im Source reichen.
Für 16 Bit Integer habe ich noch keine eigene Lösung. Einen fertigen Source dafür findet man bei: http://www.atarimagazines.com/analog/issue62/boot_camp.php (ausführliche Beschreibung und weitere Tricks inklusive).
Anmerkung: Das nachstehende Programm enthält die Ziffern zur Ausgabe auf dem Bildschirm im Atari Bildschirmcode. Möchte man auf dem Atari Aschii- Zeichen direkt in in Bildschirmspeicher zur Ausgabe schreiben,so erhält man das richtige Ergebnis, indem man vom internen des Atari 32 abzieht!
* INTASC.SRC * * WANDELT DEN IN "ZAHL" ENTHALTENEN * INTEGER IN BILDSCHRIMZEICHEN UM UND * GIBT DIESE AUF DEM BILDSCHIRM AUS * * ZAHL KLEINER ODER GLEICH 255! * * B.FRITZ 6.4.2012 *************************************
BILD EQU 88 ADRESSE BILDSPEICHER BILDH EQU 89 ORG $A800 * * ANZAHL DER STELLEN UNSERER ZAHL * UND ZEIGER AUF UNSERE TABELLE DER * VIELFACHEN VON 10 LDY #0 * * ANZAHL DER SUBTRAKTIONEN BIS DAS * ERGEBNIS >0 WAR * LDX #0 * * LOS GEHTS * LDA ZAHL ZAHL VORHER RETTEN STA ZAHLB L1 SEC LDX #0 L2 LDA ZAHLB SBC POW,Y STA ZAHLB
* CARRY SETZEN! * ANZAHL VERSUCHE=0
BCC NULL ERGEBNIS<0 INX ERGEBNIS>0 D.H. BCS L2 WEITER NULL LDA ZIFF,X EREBNIS<0 STA (BILD),Y ZIFFER AUSG. LDA ZAHLB ZAHL>0 MACHEN ADC POW,Y STA ZAHLB INY NAECHST NIEDR. CPY #3 10ER, ALLE STELLEN BNE L1 DURCH? BRK JA! * * EINIGE DATEN * * UNSERE ZIFFERN- ZEICHEN
ZIFF ASC %0123456789%
ZIFF ASC %0123456789% * 10ER POW DFB 100,10,1 * DIESE ZAHL SOLL AUSGEGEBEN WERDEN ZAHL DFB 134 * ZWISCHENSPEICHER ZUM RECHNEN ZAHLB DFB 0