Cursor abschalten ATMAS II / MAC65


Cursor abschalten ATMAS II / MAC65

von skriegel » Di 28. Jul 2009, 23:04
Hallo.

Ich versuche gerade mit Hilfe von WUDSN (mobil auf dem Laptop, ATMAS II) und MAC65 (Modul im 800XL mit SpartaDos 3.3 - Danke nochmals, Erhard) Assembler zu lernen.

Meine erste Experimente drehen sich um die Speicherstellen 710 und 712, da müsste man doch flotten Farbwechsel hinbekommen. Also folgendes eingetippt:

Code: Alles auswählen
      *=$2000      ;Startadresse setzen
      ldy #0      ;Y-Register mit "0" laden
      ldx #127   ;X-Register mit "127" laden
loop   sty 710      ;Marke "loop" setzen
               ;Wert aus Y-Register in 710 (COLOR2) schreiben
      stx 712      ;Wert aus X-Register in 712 (COLOR4) schreiben
      inx         ;X-Register um 1 erhöhen
      iny         ;Y-Register um 1 erhöhen
      jmp loop   ;zur Marke "loop" springen


Das läuft dann sowohl im Atari800MacX als auch mit MAC65 auf dem echten 800 XL wunderbar. Farbenflash halt.

Nun dachte ich mir: Weg mit dem Cursor! Das ist laut Literatur Register 752: Jeder Wert ungleich 0 heißt "Cursor sichtbar", 0 heißt "Cursor unsichtbar". Also zwei Zeilen wie folgt ergänzt:
Code: Alles auswählen
      *=$2000      ;Startadresse setzen
      lda #1      ;"1" in den Akku
      sta 752      ;Akku ("1") in Register 752 (CRSINH) schreiben
      ldy #0      ;Y-Register mit "0" laden
      ldx #127   ;X-Register mit "127" laden
loop   sty 710      ;Marke "loop" setzen
               ;Wert aus Y-Register in 710 (COLOR2) schreiben
      stx 712      ;Wert aus X-Register in 712 (COLOR4) schreiben
      inx         ;X-Register um 1 erhöhen
      iny         ;Y-Register um 1 erhöhen
      jmp loop   ;zur Marke "loop" springen


Der Farbenflash läuft zwar nach wie vor, aber auch der Cursor ist immer noch zu sehen. Wo ist mein Denkfehler? Wie lasse ich den Cursor verschwinden?

von Dietrich » Di 28. Jul 2009, 23:59
Der Cursor verschwindet erst bei der nächsten Ausgabe auf dem Editor, z.B. in BASIC:
Code: Alles auswählen
10 poke 752,1
20 ?
30 goto 30

Wenn Du Zeile 20 weglässt, geht es nicht.
In Assembler geht das so (vorausgesetzt, der Editor ist auf Kanal #0 geöffnet, was beim Gr.0 Bildschirm der Fall ist):
Code: Alles auswählen
ldx #0         Kanal #0 benutzen
lda #11        put character
sta $342,x
lda #0
sta $348,x     Länge ist 0, d.h. Akku ausgeben
sta $349,x
lda #32        Leerzeichen
jsr ciov       CIO aufrufen (=$e456)

Oder einfacher direkt in den Bildschirm poken:
Code: Alles auswählen
lda #0        Leerzeichen im Atari-Bildschirmcode
ldy #2        Der Cursor sitzt 2 Byte hinter dem Bildschirmanfang
sta (88),y    In den Bildschirm speichern

Gruß Dietrich

von skriegel » Mi 29. Jul 2009, 00:10
Dietrich hat geschrieben:Der Cursor verschwindet erst bei der nächsten Ausgabe auf dem Editor, z.B. in BASIC:
Code: Alles auswählen
10 poke 752,1
20 ?
30 goto 30

Wenn Du Zeile 20 weglässt, geht es nicht.


Ah, das hatte ich nicht bemerkt, weil ich im BASIC einfach direkt den Poke eingegeben habe und dann war der Cursor weg.


In Assembler geht das so (vorausgesetzt, der Editor ist auf Kanal #0 geöffnet, was beim Gr.0 Bildschirm der Fall ist):
Code: Alles auswählen
ldx #0         Kanal #0 benutzen
lda #11        put character
sta $342,x
lda #0
sta $348,x     Länge ist 0, d.h. Akku ausgeben
sta $349,x
lda #32        Leerzeichen
jsr ciov       CIO aufrufen (=$e456)



Das verstehe ich noch nicht, da sind mir noch zu viele Unbekannte drin.

Oder einfacher direkt in den Bildschirm poken:
Code: Alles auswählen
lda #0        Leerzeichen im Atari-Bildschirmcode
ldy #2        Der Cursor sitzt 2 Byte hinter dem Bildschirmanfang
sta (88),y    In den Bildschirm speichern


Das ist einfacher, das verstehe ich (fast). Und es funktioniert prima. Vielen Dank.

von Dietrich » Mi 29. Jul 2009, 00:26
Also, über das CIO (Central Input/Output) aus dem ersten Beispiel gibt's z.B. hier Infos (über Google mit "atari ciov" gefunden).

Das zweite Beispiel ist äquivalent zu POKE DPEEK( 88 ) + 2, 0
In 88/89 steht die Anfangsadresse des Bildschirmspeichers, die vom Editor (Gerät E: ) bzw. Bildschirm (Gerät S: ) benutzt wird.