WUDSN und Atari800MacX: Warum hier Absturz?


WUDSN und Atari800MacX: Warum hier Absturz?

von skriegel » Sa 1. Aug 2009, 23:34
Der Betreff klingt irgendwie doof, aber mir fällt gerade nix besseres ein. Also:

Ich habe folgendes kleines Beispielprogramm aus Peter Finzels Assemblerbuch (Danke, YellowMan):

Code: Alles auswählen
*
* Drei Farbregister laden
*
color1   = $2c5
color2   = $2c6
color4   = $2c8
*
      org $a800
      ldx #$0a      ; hellgrau
      ldy #$00      ; schwarz
      lda #$a8      ; hellgruen
      sta color4      ; Rahmen
      stx color1      ; Schrift
      sty color2      ; Hintergrund
      brk


Das habe ich in WUDSN wie folgt eingegeben:

Code: Alles auswählen
; Drei Farbregister laden
color1   = $2c5
color2   = $2c6
color4   = $2c8
      *=$a800
      ldx #$0a      ; hellgrau
      ldy #$00      ; schwarz
      lda #$a8      ; hellgruen
      sta color4      ; Rahmen
      stx color1      ; Schrift
      sty color2      ; Hintergrund
      brk


Wenn ich das nun kompiliere und ausführe (Shift+Cmd+0) dann öffnet sich Atari800MacX zwar, führt aber die Befehle nicht aus und bringt eine Fehlermeldung (Bild anklicken für volle Größe):

Bild

Ändere ich nun die Startadresse auf $1000 verhält es sich etwas anders: Das Programm wird ausgeführt, stürzt dann aber nach wenigen Sekunden genau so ab:

Bild

Wieso ist das so? Wieso Ausführung bei $1000, aber nicht bei $a800? Wieso überhaupt der Absturz?

Und nicht vergessen: Bin immer noch blutiger Assembler-Anfänger. ;-)

Edit: Es spielt übrigens keine Rolle, welchen Rechner (OS B 48k, 600XL, 800XL, 576XL etc.) ich im Atari800MacX einstelle, es ist immer das gleiche.

von Bernd » Sa 1. Aug 2009, 23:43
Hallo Sascha,

es könnte der BRK Befehl in der letzten Zeile sein.
Mach doch mal folgende Eingabe:

Loop Jmp Loop

Das Programm springt jetzt in eine Endlosschleife.
Wenn ein BRK im Atari800Win Emu auftritt wird automatisch das Terminal Programm zur Anlayse abgefragt und das Programm im Speicher unterbrochen.

Viele Grüße,
Bernd

PS: Denk bitte daran dass der Name "Loop" ein Label beim Mac65 ist und nur eine Leerzeile von der Satznummer haben darf.
Befehle müsse immer mit 2 Leerzeichen eingegeben werden.

von skriegel » So 2. Aug 2009, 00:05
Bernd hat geschrieben:es könnte der BRK Befehl in der letzten Zeile sein.
Mach doch mal folgende Eingabe:

Loop Jmp Loop

Das Programm springt jetzt in eine Endlosschleife.
Wenn ein BRK im Atari800Win Emu auftritt wird automatisch das Terminal Programm zur Anlayse abgefragt und das Programm im Speicher unterbrochen.


Danke Bernd, genau das ist es. :-)

PS: Denk bitte daran dass der Name "Loop" ein Label beim Mac65 ist und nur eine Leerzeile von der Satznummer haben darf.
Befehle müsse immer mit 2 Leerzeichen eingegeben werden.


Ja, da denke ich dran. Das habt ihr mir in Lengenfeld gut eingetrichtert. ;-)
Ich bin aber momentan nicht zu Hause und sitze daher eben am Schlepptop und mache das mit WUDSN. Und da muss man nicht auf so etwas achten.

von Dietrich » So 2. Aug 2009, 20:19
Hi skriegel,

der BRK-Befehl bewirkt, dass ein Interrupt im ATARI ausgelöst wird. Die Intterupt-Routine im Betriebssystem springt dann zur Adresse, die in VBREAK ($206/7) hinterlegt ist. Normalerweise steht da 0 drin, d.h. der 6502 springt zur Adresse 0, wo natürlich kein 6502-Code steht -> Crash.

Normalerweise tragen Assembler in VBREAK die Adresse ihres eingebauten 6502-Monitors ein, der dann die momentanen Registerinhalte zum Zeitpunkt des BRK anzeigt.

Gruß Dietrich