daten vom compy-ram sichtbar machen im bereich $4000-$7fff

1, 2

von Bernd » Mi 29. Aug 2007, 22:51
robbifan hat geschrieben:ich brauche in der zeropape freien speicher für eine asm-scheife.

wo ist da noch speicher frei beim atari800xl?

mfg


Hallöchen,

ich habe des öfteren das Ende des Stack´s benutzt. Ab $100 bis $17F gab es bei mir bislang keine Probleme. Falls jemand einen Omnimon verwendet - der greift auf die ersten 16 Bytes ab $100 zu.

Bernd




Bernd

von cas » Do 30. Aug 2007, 08:40
Bernd hat geschrieben:
robbifan hat geschrieben:ich brauche in der zeropape freien speicher für eine asm-scheife.

wo ist da noch speicher frei beim atari800xl?

mfg


Hallöchen,

ich habe des öfteren das Ende des Stack´s benutzt. Ab $100 bis $17F gab es bei mir bislang keine Probleme. Falls jemand einen Omnimon verwendet - der greift auf die ersten 16 Bytes ab $100 zu.

Bernd


Welche Speicherstellen in der Zeropage benutzbar sind, hängt stark davon ab ob man BASIC benutzt oder nicht. Wenn Basic und Floating point nicht benutzt werden, dann sind die FLoating-Point Register am ende der Page 0 frei.

Wenn Basic benutzt wird, dann am besten das Profibuch oder "Mapping the Atari nehmen", vor der ASM Routine die Page 0 Werte wegspeichern, eigene ASM Routine laufen lassen und die Page 0 werte wieder restaurieren.

Carsten

von robbifan » Do 30. Aug 2007, 13:47
ich möchte einen speicher vollschreiben ab $4000 mit 7680 bytes.
dieses kriege ich nur mit der zeropageadresse hin :

......sta (screenmem),y.........

oder weiss einer eine andere lösung um diesen befehl durchzuführen ?

Code: Alles auswählen
START   = $0600
screenmem = ???zeropga???
bloecke = 30

   .BANK
        * = START
   
   lda #0
   sta screenmem
   lda #$40
   sta screenmem+1

   ldx #bloecke
   ldy #0

schleife
   lda #0
   sta (screenmem),y
   iny
   bne schleife
   inc screenmem+1
   dex
   bne schleife
     
        PLA ; back to BASIC
   rts

von Bernd » Do 30. Aug 2007, 14:15
Sicher deine ???zeropage??? Adressen auf den Stack mit PHA und schreibe die Werte mit PLA zum Schluß zurück.
Eine Speicherbelegungsübersicht der Zeropage findest du hier:
http://www.strotmann.de/twiki/bin/view/Infothek/WebHome

Bernd

von cas » Do 30. Aug 2007, 14:26
Bernd hat geschrieben:Sicher deine ???zeropage??? Adressen auf den Stack mit PHA und schreibe die Werte mit PLA zum Schluß zurück.
Eine Speicherbelegungsübersicht der Zeropage findest du hier:
http://www.strotmann.de/twiki/bin/view/Infothek/WebHome

Bernd


Die alte WIkiseite gibt es nicht mehr, die neue (bessere) Speicherübersicht entsteht gerade hier

http://atariwiki.strotmann.de/xwiki/bin/view/MemoryMap/

Achtung: ist noch "BETA"

Carsten

von robbifan » Do 30. Aug 2007, 17:51
hallo, habe mir jetzt diese löschroutine geschrieben für den antic-bereich ab $4000 :

die zero von 61-64 ist für das tape, also ist diese für mich frei.

Code: Alles auswählen
START   = $0600
screenmem = 61
bloecke = 30

   .BANK
        * = START
   
   lda #0
   sta screenmem
   lda #$40
   sta screenmem+1

   ldx #bloecke
   ldy #0

        lda #0
schleife
   sta (screenmem),y
   iny
   bne schleife
   inc screenmem+1
   dex
   bne schleife
     
        PLA ; back to BASIC
   rts




mit "a=usr($600)" wird die routine aufgerufen.

mfg peter

von cas » Do 30. Aug 2007, 18:56
so geht es auch ohne Zeropage und ohne Y-Register, aber nur wenn der Code im RAM liegt (nicht im ROM)

Code: Alles auswählen
START   = $0600
bloecke = 30

   .BANK
        * = START
   
   ldx #bloecke
   lda #$40
   sta screenmem+2
   lda #0
   sta screenmem+1

screenmem
   sta $FFFF,y
   inc screenmem+1
   bne screenmem
   inc screenmem+2
   dex
   bne screenmem
     
   PLA ; back to BASIC
   rts

von Bernd » Do 30. Aug 2007, 20:42
cas hat geschrieben:so geht es auch ohne Zeropage und ohne Y-Register, aber nur wenn der Code im RAM liegt (nicht im ROM)

Code: Alles auswählen
START   = $0600
bloecke = 30

   .BANK
        * = START
   
   ldx #bloecke
   lda #$40
   sta screenmem+2
   lda #0
   sta screenmem+1

screenmem
   sta $FFFF    (korrigiert, war sta $FFFF,y)
   inc screenmem+1
   bne screenmem
   inc screenmem+2
   dex
   bne screenmem
     
   PLA ; back to BASIC
   rts


Sehr guter und vor allem schneller Quellcode. Ich verwende
diese Art der Programmierung auch sehr gerne. Die Indizierung
braucht weniger Taktzyklen. Ein kleiner Fehler hat sich da aber eingeschlichen:
sta $FFFF,y sollte besser zu sta $FFFF werden.

Bernd

von robbifan » Do 30. Aug 2007, 20:52
eine kurze angelegenheit:

screenmem
sta $FFFF
.....
.....


sta ist dann die adresse screenmem+0, $ffff ist dann screenmem+1(lo) und screenmem +2(hi) , ist das richtig?

würde aber bei längeren programmen die übersichtliche zero-variante vorziehen.

mfg

von Bernd » Do 30. Aug 2007, 21:13
robbifan hat geschrieben:eine kurze angelegenheit:

sta $FFFF


sta ist dann die adresse screenmem+0, $ffff ist dann screenmem+1(lo) und screenmem +2(hi) , ist das richtig?

mfg


Genau, du überschreibst den Quelltext $FFFF mit deinem eigenen Wert "screenmem".
Diese Art des Quelltextes gehört zur "fortgeschrittenen" Programmierung und
bedarf einer gewissen Vorsicht. Schnell kann auch das erste Byte, der Assemblercode selbst,
ausversehen mal mit verändert werden. Dann gibt es Datensalat.

Bernd

von PacMan » Sa 20. Sep 2008, 10:44
Hallo Peter,

Hier der gesuchte Eintrag.

Gruß,
Steffen

von robbifan » Sa 20. Sep 2008, 11:06
Jup, danke. Das wars.

mfg
peter
1, 2