ATMAS II - Frage


ATMAS II - Frage

von Cash » Sa 10. Mai 2008, 09:44
Hi,
bin neu hier im Forum und hab auch gleich mal ne Frage. Ich habe mir ein Atari komplett packet gekauft. Bei den Programmen war Atmas II dabei. Ich habe mal ein kleines Programm geschrieben und hatte leider eine Fehlermeldung "same Label twice" und er ist auf meinen ORG $4000 befehl gesprungen. Kann mir jemand sagen was dieser befehl bedeutet? Auch wenn ich ein besipiel Programm aus der Anleitung abtippe kommt der gleiche fehler. Die Programme enthalten eine Schleife kann das evtl. damit zusammen hängen? :roll:

Hier mal der code:

ORG $4000 ;ASSEMBLE CODE AT $4000
X EQU $4100 ;X IS STORED AT $4100
LDA #$30
STA X
LOOP DEC X ;X=X-l
LDA X
CMP #$00 ;DONE?
BNE LOOP
RTS

von pps » Sa 10. Mai 2008, 10:40
ORG sagt dem Assembler ab welcher Speicheradresse der folgende Code stehen soll.

Im Beispiel soll das Programm also ab $4000 im Speicher liegen.

Mit EQU reserviert man eine bestimmte Speicherstelle für eine Variable (im Bsp. also X an $4100 -> LDA X ist das selbe, als wenn man LDA $4100 benutzt)

Der Fehler sagt, daß ein Label doppelt benutzt wurde.

Hast Du eventuell mehrere solcher Schleifen mit LOOP bezeichnet?
Benenne einfach die nächste Schleife um, z.B in LOOP2, beim BNE (oder auch BEQ, BPL, BMI, je nachdem, wie dort "gesprungen" wird) muß dann auch LOOP2 kommen, sonnst springt das Programm zur falschen Schleife zurück, oder es kommt ein anderer Fehler.

Solche schleifen müssen nämlich im Bereich von 256 Bytes liegen. Wenn zu viel Code dazwischen liegt, muß man das anders lösen (z.B. indem man die Befehle in einer Subroutine ausführt, die man per JSR aufrufen kann).

z.B.
Code: Alles auswählen
...
LOOP
 JSR MEINCODE
 LDA X
 CMP #00
 BNE LOOP
...
LOOP2
 JSR MEINCODE2
 LDA Y
 CMP #$FF
 BMI LOOP2
...
Nach Programmende
...
MEINCODE
 ...
 Deine Befehle
 ...
 DEC X
 RTS

MEINCODE2
 ...
 Deine Befehle
 ...
 INC Y
 RTS

Re: ATMAS II - Frage

von HiassofT » Sa 10. Mai 2008, 19:49
Cash hat geschrieben:Ich habe mal ein kleines Programm geschrieben und hatte leider eine Fehlermeldung "same Label twice" und er ist auf meinen ORG $4000 befehl gesprungen.

Achtung, es könnte sein, daß Du mit dem ORG $4000 einen vom Atmas (bzw Source-Code) belegten Speicher überschrieben hast.

Per Default ist der Bereich von $A800-$BCxx für Maschinencode frei (wenn ich mich nicht irre). Entweder auf der Atmas-Disk oder auf der Atmas-Toolbox-Disk war ein kleines Programm dabei mit dem man die verwendeten Speicherbereiche (in gewissen Grenzen) verschieben konnte.

so long,

Hias

von atarixle » So 11. Mai 2008, 13:58
Der Fehler tritt auch auf, wenn man in einem Makro ein Label benutzt und dieses Makro mehr als einmal aufgerufen wird.
Um Labels in Makros benutzen zu können, hängt man daher an das Label ein "@".

von Cash » So 11. Mai 2008, 22:37
Fehler gefunden! Es lag daran, das ich vor dem "ORG" befehl die TAB taste nicht gedrückt hatte. Auf sowas muss man erstmal kommen. :roll:
Trotzdem danke für eure hilfe! :P

von Cash » Sa 24. Mai 2008, 10:16
Hi, ich habe noch ne Frage.

Wie kann ich in Atmas meine eigenen Programme die ich im Textfeld geschrieben habe auf Diskette sichern?

Habe es mit "Escape"WD1:Name"2xEscape" versucht. Die Floppy arbeitet auch kurz, aber wenn ich das Programm dann mit "Escape" RD1:Name"2xEscape" laden möchte läft er es nicht mehr...
Das Demoprogramm auf der Atmas Diskette kann ich jedenfalls ohne Probleme so laden.
Vielleicht kennt sich ja jemand damit aus.
Achja nach dem speichern, zeigt er immer eine "#" hinter dem namen also unten in der Befehlszeile.

:roll:

von mp-one » Di 10. Jun 2008, 09:05
Hallo Cash,

ist mit der Disk alles oK? Die Befehlsfolge scheint richtig zu sein. Hier noch mal eine Kurzübersicht über Atmas-Befehle, die ich vor einiger Zeit mal hier ins Forum gestellt hatte:

Gruß,

Michael

>>>

RESET: zurück zum Editor

CTRL-Y: Aufruf des Makroassemblers
CTRL-P: Aufruf des Maschinensprache-Monitors

ESC: Wechsel in den Kommando-Modus/Kommandozeile ...
ESC ESC: Befehl ausführen/beenden

Im Kommandomodus:
R[D:FN]: Text ab Cursorposition von <FN> lesen
W[D:FN]: Text ab Cursorposition unter <FN> speichern
M: Rückkehr zum DOS
K: Löscht den Textbuffer
J: Wiederholt Kommandozeile
L[0,1,2]: Listing des Quelltextes ausgeben (1=Drucker)

Im Monitor:
E: Zurück zum Editor
G: Goto, Maschinenprogramm starten
M: Memory Dump
D: Disassemblieren
S: Binary Save
L: Binary Load
I: Inhaltsverz. Laufwerk 1 anzeigen

von mp-one » Di 10. Jun 2008, 09:08
Cash hat geschrieben:Hi, ich habe noch ne Frage.

Wie kann ich in Atmas meine eigenen Programme die ich im Textfeld geschrieben habe auf Diskette sichern?

Habe es mit "Escape"WD1:Name"2xEscape" versucht. Die Floppy arbeitet auch kurz, aber wenn ich das Programm dann mit "Escape" RD1:Name"2xEscape" laden möchte läft er es nicht mehr...
Das Demoprogramm auf der Atmas Diskette kann ich jedenfalls ohne Probleme so laden.
Vielleicht kennt sich ja jemand damit aus.
Achja nach dem speichern, zeigt er immer eine "#" hinter dem namen also unten in der Befehlszeile.

:roll:


Evtl. mal die Diskette testen. Schreibdichte muss mit dem DOS zusammenpassen, von dem Du Atmas gebootet hast. Außerdem sollte sie natürlich keine Fehler haben.

Gruß,

Michael

von Cash » Di 10. Jun 2008, 20:27
Danke für deine Hilfe, ich habe es nun aber selbst rausgefunden. Ich habe einfach ein neues DISKETTENIMAGE genommen. Wichtig ist auch das der Kursor am anfang des codes steht damit es komplett gespeichrt wird. Was soll ich sagen es funzt nun und ich kann mein code auch wieder laden. Ach ja eine frage noch für was genau macht man ein binär save ?

von mp-one » Mi 11. Jun 2008, 10:18
Cash hat geschrieben:Danke für deine Hilfe, ich habe es nun aber selbst rausgefunden. Ich habe einfach ein neues DISKETTENIMAGE genommen. Wichtig ist auch das der Kursor am anfang des codes steht damit es komplett gespeichrt wird. Was soll ich sagen es funzt nun und ich kann mein code auch wieder laden. Ach ja eine frage noch für was genau macht man ein binär save ?


Hi Cash,

mit bin-save und bin-load kannst Du ein vom Assembler erzeugtes Maschinenprogramm auf Disk speichern bzw. von dort laden. Du machst quasi einen Speicherabzug wobei noch Zusätze, wie die Ladeadresse, angegeben werden können. Mit ESC WD:... und ESC RD:... speicherst und lädtst Du dagegen die Quellcodes.

Gruß,

Michael