Beispiele
---------
Als erstes Beispiel soll ein kleines Programm zur Addition der
16-Bit-Werte $0250 und $01c0 dienen:
!addr var1l = $5000
!addr var1h = $5001
!addr var2l = $5010
!addr var2h = $5011
!addr resl = $5020
!addr resh = $5021
*=$4000
lda #$50
sta var1l
lda #$02
sta var1h
lda #$c0
sta var2l
lda #$01
sta var2h
clc
lda var1l
adc var2l
sta resl
lda var1h
adc var2h
sta resh
brk
Der Quelltext wird mit
acme -f cbm -l example.lst -o example.prg example.a
uebersetzt. Die Option -l erstellt die Symboltabelle.
Der Emulator kann das Maschinenprogramm wieder in Assembler
umwandeln und beruecksichtigt dabei die Symboltabelle.
python cpu6502.py -d -s example.lst -f example.prg
Ausgabe:
4000 LDA #50
4002 STA 5000 ; var1l
4005 LDA #02
4007 STA 5001 ; var1h
400A LDA #C0
400C STA 5010 ; var2l
400F LDA #01
4011 STA 5011 ; var2h
4014 CLC
4015 LDA 5000 ; var1l
4018 ADC 5010 ; var2l
401B STA 5020 ; resl
401E LDA 5001 ; var1h
4021 ADC 5011 ; var2h
4024 STA 5021 ; resh
4027 BRK
------------------
Der Emulator kann das Maschinenprogramm auch ausfuehren.
Die Option -r zeigt die Register nach dem Programmlauf
an und die Option -m die angegebene Speicherseite
(dezimal 80 fuer $50):
python cpu6502.py -m 80 -r --run -f example.prg
Ausgabe:
PC AC XR YR SP NVZC
--------------------------
4028 03 00 00 FF 0000
Page 50:
--------
00: 50 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
10: C0 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 10 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
In der Adresse $0520/$0521 steht das Ergebnis: $0410.
Das zweite Beispiel gibt im Emulator fuer den C64 eine
Reihe von Zeichen direkt im Bildschirmspeicher aus:
!addr screen = $0400
*=$c000
jsr init
jsr out
brk
init
ldx #0
lda #$20
-
sta screen,x
inx
bne -
rts
out
ldx #0
-
txa
sta screen,x
inx
cpx #$5f
bcc -
rts
Der Quelltext wird wieder mit
acme -f cbm -l example.lst -o example.prg example.a
uebersetzt und mit dem nachfolgenden Befehl kann das
Maschinenprogramm wieder angezeigt werden:
python cpuC64.py -d -s example.lst -f example.prg
Ausgabe:
C000 JSR C007 ; init
C003 JSR C012 ; out
C006 BRK
------------------
init:
C007 LDX #00
C009 LDA #20
C00B STA 0400,X ; screen
C00E INX
C00F BNE C00B
C011 RTS
------------------
out:
C012 LDX #00
C014 TXA
C015 STA 0400,X ; screen
C018 INX
C019 CPX #5F
C01B BCC C014
C01D RTS
------------------
Die Ausfuehrung des Maschinenprogramms erfolgt analog,
wobei die Option --screen den Inhalt des Bildschirm-
speichers anzeigt (standardmaessig ist der gesamte
Speicher im Emulator mit Nullen gefuellt).
python cpuC64.py --screen -r --run -f example.prg
Ausgabe:
PC AC XR YR SP NVZC
--------------------------
C007 5E 5F 00 FF 0011
+----------------------------------------+
|@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ !"#$%&'|
|()*+,-./0123456789:;<=>?`abcdefghijklmno|
|pqrstuvwxyz{|}~ |
| |
| |
| |
| @@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
+----------------------------------------+