Hi,
ich benötige einen Rat im Umgang mit dem Mega65 Emulator.
Meine Umgebung ist:
- Xemu 20230201214849
- ROM 920377.
Folgendes Programm lasse ich laufen:
- 10 REM TEST UPPER 32K
- 20 DATA A9, 0C :REM LDA #$0C
- 25 DATA 8D, F0, BF :REM STA $BFF0
- 27 DATA AD, F0, BF :REM LDA $BF00
- 30 DATA 8D, F0, 7F :REM STA $7FF0
- 35 DATA 60 :REM RTS
- 37 DATA -1
- 40 AD=5632
- 50 READ A$:IF A$="-1" THEN 100
- 60 POKE AD,DEC(A$):AD=AD+1
- 70 GOTO 50
- 100 BANK 0
- 110 PRINT "VORHER :";PEEK(DEC("7FF0")),PEEK(DEC("BFF0"))
- 120 SYS 5632
- 130 PRINT "MIT MCODE:";PEEK(DEC("7FF0")),PEEK(DEC("BFF0"))
- 140 POKE DEC("BFF0"),12
- 150 POKE DEC("7FF0"),PEEK(DEC("BFF0"))
- 160 PRINT "MIT BASIC:";PEEK(DEC("7FF0")),PEEK(DEC("BFF0"))
- 200 END
- READY.
Das Programm schreibt eine Konstante an eine Adresse im oberen 32K Bereich, liest sie aus und schreibt diesen Wert an eine Adresse im unternen 32K Bereich.
Der Vorgang läuft zweimal. Einmal als Assembler Routine, einmal in Basic. Das Ergebnis wird jeweils angezeigt.
RUN
Die Ausgangswerte sind beliebig. Hier jetzt
"Mit Mcode" zeigt das Ergebnis des Assemblerprogramms. 191 ist der Wert aus Bank 2 Adresse $BFF0 und nicht Bank 0.
"Mit Basic" zeigt das erwartete Verhalten.
Nun kenne ich die Routinen für PEEK und POKE und weiß, daß mit _lda_far und _sta_far Routinen im Rom gearbeitet wird, aber ich hatte gehofft, daß ich bei Adressen kleiner als $C000 noch sicher bin.
Ja, und "BANK 0" setzt nur eine Speicherzelle.
Ist dieses Programm-Verhalten normal, oder mache ich einen Fehler?
Leider habe ich keinen Mega65, um zu prüfen, ob es zwischen Emulator und Gerät einen Unterschied gibt.
Danke für Eure Zeit