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
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