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{|}~ | | | | | | | | @@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| +----------------------------------------+