Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Assemblereinbindung in GFA Basic

0 views
Skip to first unread message

Patrick Eickhoff

unread,
Aug 31, 1998, 3:00:00 AM8/31/98
to
Ich habe folgendes Problem: meine Assemblerroutine stürtzt nach einigen
hundert Aufrufen aus GFA-Basic ab, ansonsten funktioniert sie aber. Es
handelt sich dabei
um eine Zoomroutine. Ich vermute, daß der Stack überläuft, die Register
rette ich aber. Wer kann mir helfen?
die Routine:
move.l 4(sp),a0
move.l 8(sp),a1
move.l 12(sp),d0
move.l 16(sp),d1
loop1:move.l d1,d2
move.l a1,a2
loop2:move.w (a0),(a1)+
move.w (a0)+,(a1)+
dbf d2,loop2
move.l d1,d2
loop3:move.l (a2)+,(a1)+
dbf d2,loop3
dbf d0,loop1
rts

Ciao Patrick


Carl-Michael Ewert

unread,
Sep 1, 1998, 3:00:00 AM9/1/98
to
Hallo Patrick,

wichtig ist, daß man in die Schleifenzählregister die Anzahl der Durchläufe
minus eins einträgt.

Ansonsten gibt es für solche Probleme die Gruppe Atari.Programmieren.

Grüße CME

Olaf Piesche

unread,
Sep 1, 1998, 3:00:00 AM9/1/98
to
Soweit ich das sehe, in Ordnung. Bist Du sicher, daß die Register korrekt
gerettet und wieder restauriert werden? Wo eigentlich, vom Basic aus?

Bedenkst Du, daß "dbf Dn,<ea>" erst bei Dn=-1 abbricht? Ein Fehler den ich
häufig mache, daher frage ich...

Ciao,
Olaf

Thorsten Neuhoff

unread,
Sep 1, 1998, 3:00:00 AM9/1/98
to
Hi !

>Ich habe folgendes Problem: meine Assemblerroutine stürtzt nach einigen
>hundert Aufrufen aus GFA-Basic ab, ansonsten funktioniert sie aber. Es

Ohne dir jetzt konkret helfen zu können, aber als ich mich noch mit
GFA-Basic beschäftigte (schon ca. 6 Jahre her) hatte ich ähnliche Probleme
beim Einbinden von Grafiken. Um z.B. eine Grafik vertikal scrollen zu lassen,
mußte ich bestimmte Basic-Routinen in einer DO-LOOP Schleife aufrufen.
Für kurze Zeit ging alles gut, dann wurde der Speicher systematisch
überschrieben. Erst ging die Grafik Zeile für Zeile kaputt, wenn man's
lange genug laufen ließ schließlich auch der Code ---> Absturz !
Ich bin damals auch letztlich zum Schluß gekommen, daß es ein Fehler
seitens GFA-Basic ist. (egal welche GFA-Version und Hardware)

Da du etwas von "mehreren hundert Aufrufen" sagst, bin ich natürlich
hellhörig geworden. Vielleicht ist es bei dir ja was ähnliches.


Ciao, Thorsten

André Lehmann

unread,
Sep 2, 1998, 3:00:00 AM9/2/98
to

Hallo Olaf,
da Patrick wohl heute offline zu sein scheint antworte ich einfach mal:

Erst mal schönen Dank für Deine Antwort, auch wenn dies hier offtopic ist,
aber unser Newsserver postet dummerweise die NG atari.programmieren nicht
(nur von z-netz, aber dort kommt man sich halt immer so einsam vor).

So wie ich Patrick verstanden habe, beachtet er die Abbruchbedingung Dn=-1,
allerdings ist er der Meinung, daß GFA-Basic die Register automatisch retten
sollte (?), was aber wohl nicht ganz funktioniert, daher sollte er dies wohl
besser im Assemblercode integrieren.

Daher Meine Frage an Dich (Euch):
Wie macht man dies beim 680x0???
Ich kenne mich dummerweise nur mit 808x Programmierung aus und dort gibt es
die Befehle PUSH und POP, Beispiel (Register B und H auf Stack retten):
UNTRPRG: PUSH B
PUSH H
...(Code)
POP H
POP B
RET
Geht dies beim 680x0 ähnlich oder ganz anders? Ein kleines Beispiel wäre
hilfreich.

Ciao, André


Bernd Mädicke

unread,
Sep 3, 1998, 3:00:00 AM9/3/98
to
Huhu,

L>aber unser Newsserver postet dummerweise die NG atari.programmieren
L>nicht

Wie sieht es denn mit Fido.GFABASIC.GER aus?

Tschüß,Bernd
---
*Email: Bernd_M...@L2.maus.de* (Please no Mails > 16 kB!)
*Email: Re...@top.east.de* (for PRG and Mail > 16 kB)


Olaf Piesche

unread,
Sep 3, 1998, 3:00:00 AM9/3/98
to
Hi Andre!

Einfachste Methode ist folgendes:

movem.l d0-d7/a0-a6, -(sp)

zum Retten und

movem.l (sp)+, d0-d7/a0-a6

zum restaurieren.

Statt d0-d7/a0-a6 müssen natürlich nur die zu rettenden Register eingetragen
werden. Je nach Assembler können das auch Konstellationen wie z.B.
d0/d2/d4/a0-a3 sein.

Wichtig ist natürlich, daß die Register bei beiden Aufrufen die gleichen sind.

Ciao,
Olaf

Björn Spruck

unread,
Sep 3, 1998, 3:00:00 AM9/3/98
to
movem.l D0-D7/A0-A6, -(SP)
(code)
movem.l (SP)+, D0-D7/A0-A6

rettet alle sinnvollen Register.
Normalerweise reichen die Register D0-D2/A0-A1, aber das hängt vom Compiler ab.
Auf keinen Fall das .l vergessen, sonst werden nur die untersten 16 bit
gesichert =)))


Tschau,

Björn

André Lehmann

unread,
Sep 4, 1998, 3:00:00 AM9/4/98
to

Bernd Mädicke <Bernd_M...@L2.maus.de> schrieb in Nachricht
199809030...@l2.maus.de...

>Huhu,
>
>L>aber unser Newsserver postet dummerweise die NG atari.programmieren
>L>nicht
>
>Wie sieht es denn mit Fido.GFABASIC.GER aus?
>
>Tschüß,Bernd
>---
Nö, nix mit GFA-BASIC (sonst würde ich hier wohl auch nicht schreiben).

Ciao, André

Björn Spruck

unread,
Sep 4, 1998, 3:00:00 AM9/4/98
to
BS>Normalerweise reichen die Register D0-D2/A0-A1

Was schreib ich nur für einen Bullshit, gemeint war es gerade andersrum.

Tschau,

Björn

Franz Zoell

unread,
Sep 11, 1998, 3:00:00 AM9/11/98
to
Hallo Patrick,

CE> Ansonsten gibt es für solche Probleme die Gruppe Atari.Programmieren.

und natürlich die Gruppe FIDO.GFABASIC.GER

Gruß Franz

0 new messages