Schlagwort-Archive: Assembler

Ein Assembler in 6502 Maschinensprache…..

….das alles und noch viel mehr bietet 6502.org.

Die Seite erreicht man über diesen Artikel hier im Blog oder direkt:

6502.org

Wer eine Sortierroutine, Zahlenkonverter oder fertige Programme im 6502 Assembler Source sucht, der findet da was er braucht. Ich schau‘ ab und an mal vorbei und bin immer wieder überrascht. Sehr viele interessante Sachen die Lust auf’s selber machen, ……machen 🙂

Mein Heutiger Favorit: Der kommentierte Source für einen 6502 Assembler. Das PDF Dokument findet sich auf der o.g. Seite unter:

http://6502.org/source/ (dort nach „Monitors, Assemblers, and Interpreters“ suchen und dem Link 2KSA folgen)

Weitere Highlight’s? Ja, aber bitte. Gebt doch einfach einmal „Schach“ als Suchbegriff hier im Blog ein. Es lohnt sich……

Viel Spass.


Atari Macro Assembler, erste Schritte….

Im folgenden eine kleine Zusammenfassung meiner Erfahrungen mit dem Programmpaket. Eine sehr gute Beschreibung findet sich unter http://www.mixinc.net/atari/amac.htm. weitere Informationen zu gängigen Assemblern für die guten alten Atari 8-Bit gibt es hier im Blog. Wer den Suchtext „Assembler“ eingibt, der findet sicher mehr.

Los geht’s

Editor

Atari Macro Assembler Editor
Start Bildschirm

Herausragendes Merkmal – vermutlich einzigartig in der „Atari Welt“ – ist  das der Editor größere Datenmengen verkraftet als das RAM eigentlich zulassen würde! Mehr dazu, wenn ich es getestet habe.

läßt sich wie jeder andere bildschirmorientierte Editor – z.B. der ATMASII Editor – bedienen.

Befehle erteilt man über Kommandos im Klartext im Kommandozeilen Modus (START Taste drücken).

Source- Text zeichnet sich dadurch aus, dass er vor dem jew. Mnemonic/ Label oder der Direktive jew. immer ein Lehrzeichen enthält.

Komandozeile:

Kommando im Klartext eingeben und die START- Taste zum ausführen drücken.

Wichtige Kommandos sind:

EXIT
speichert den aktuellen Textbuffer und verlässt den Editor.

SB /Suchtext/
„Suchtext“ suchen.

Assembler

Atari Macro Assembler

Filename eingeben und der Assembler startet. Gibt’s Fehler, dann zurück in’s DOS, Editor aufrufen und Fehler suchen.

Nach dem Filenamen lassen sich zahlreiche Optionen angeben. Die wichtigsten sind:

Assembler Optionen:

S=SYSTEXT
Bespiel:   D1:TEST.SRC S=D2:SYSTEXT S=D2:MYEQU
Assembliert TEST.SRC und benutzt die „EQUATES“ in der auf D2 gespeicherten SYSTEXT Datei. Es können mehrere SYSTEXT Files mit beliebigen Namen verwendet werden (max. 40 Stück). Vorteil: Klar, wenn die Equates in einer eigenen Datei liegen,dann können die auch für mehr als ein Projekte verwendet werden.

O=$A800
Legt die Startadresse des durch den AMAC generierten Objekt- Files fest. Damit wird erreicht, dass das File von DOS aus mit dem „L“ Befehl (Menü gesteuerte DOS’es) geladen werden kann (Start i.d.R. automatisch).

Syntax

Etwas unkonventionell. Wer den „Assembler Editor“ bzw. „den Mac/ 65 kennt“, der wird umdenken müssen! Einstiegshilfe:

High und Low Byte:
LDA #BILD:L

lädt normalerweise BILD/256 in den Accu. Im AMAC schaut das so aus:
LDA #LOW BILD
LDA #HIGH BILD

Operatoren fügt man so ein:
LDA #LOW [BILD+30]
LDA #HIGH [BILD+30]

 

 

 

 


Cross Assembler….

Habe leider noch keinen für meinen Mac gefunden. Ich wünsche mir einen für den 6502……

Eine vielversprechende Seite ist: http://www.npsnet.com/danf/cbm/cross-development.html#Assemblers

Speziell für die Atari Gemeinde gibt es den „MAD“ Assembler („MADS“), ein Produkt aus Polen: http://mads.atari8.info/
Ursprünglich wohl für PC geschrieben.

 


Locate wird schneller…

Determinismus in Assembler 🙂

„LOCATE“ nimmt eine Schlüsselstellung innerhalb des Source von Rock ein. Die Subroutine berechnet in Abhängigkeit von der vorgegebenen X und Y Bildschirmkoordinate die Adresse im Bildspeicher um von dort entweder zu lesen oder dorthin zu schreiben.

Die erste Version tat dies, indem eine Schleife durchlaufen wurde – von 0 bis Y – und dabei die Adresse um jew. die Spalzenzahl erhöht wurde. Am Schluss wurde noch X dazu addiert und fertig.

Ohne Schleife geht’s auch und das sogar viel schneller. Die Zeilenadressen werden einfach in einer Tabelle abgelegt, dann wird es möglich, ohne Schleife, die jew. Adresse direkt aus der Tabelle gelesen. fertig:

 

Das Spielchen läuft nun flüssiger!

 



Animation, Score und Farben…..

Äußerlich hat sich wenig am Spielchen getan. Der Hauptdarsteller ist nach wie vor aus 4 „Playern“ zusammengesetzt, zeigt jetzt aber sechs Farben und ist animiert. Der Score- Zähler funktioniert. Näheres dazu hier:

Farbige Player und

Zahlenspiele die Dritte…

Aussehen tut es jetzt so:

 


Apple II, Prince of Persia Source Code veröffentlicht……

Auf Jordan Mechner’s Homepage  findet sich hier ein sehr lesenswerter Artikel zu dem o.g, und, natürlich, der Link zum Source.

Viel Spass.


Projekt Rock, es schleppt sich so dahin….

…..Mühsam, mühsam. Die gröbsten Bug’s sind längst ausgemerzt. Die interessanten Programmteile längst in Code gehauen,  jetzt ist weiter Knochenarbeit angesagt. Aber, es wird:

Offen:

  • Die Punkteanzeige funktioniert noch nicht so richtig.
  • Todesroutine
  • Leveldesign
  • Sound fehlt
  • Titelscreen
  • Spieleranimation und ein gescheites Timing

 


Atari Macro Assembler, original Manual

…wurde hier im Blog bereits beschrieben. Wer auf dem original Atari größer Projekte in Assembler realisieren möchte, der kommt am AMAC nicht vorbei. Näheres dazu hier.

Das originale Manual, inklusive der Beschreibung des Editors, habe ich heute hier entdeckt.

Viel Spass!


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

Boot Sektoren……

…..speziell auf dem Atari sind so eine Sache. Gerade dann, wenn man sich mit so etwas das letzte Mal vor ca. 20 Jahren beschäftigt hat.

So funktionier’s: Man schreibe das nachstehende Programm auf Sektor #1 einer Diskette und führe einen Kaltstart aus. Was wird wohl passieren? Alles ganz einfach, nicht wahr?

*-------------------------------------
* BOOT SEKTOR
* DER NACHSTEHENDE CODE DEFFINIERT
* DAS O.G.

* ES WIRD 1 SEKTOR NACH $0600 IN'S
* RAM GELADEN UND AB $0600+6
* AUSGEFUEHRT.
        ORG $0600
BOOT    DFB 0      IMMER 0!
        DFB 1      SOVIELE SEKTOREN LESEN

        DFW BOOT   DAHIN INS RAM SCHREIBEN
        DFW ST     DORT AUSFUEHREN

ST      LDA #255
        STA 712
        JMP ST
* FUER'S PROGRAMM OHNE BELANG, ABER
* INFORMATIV
        ASC "MULTIBOOT 21.5.2012"