A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
A 6502 mikroprocesszor Czirkos Zolt´an BME EET
2013. febru´ar 13.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
A 6502 processzorr´ol
Z80-korabeli Chuck Peddle (rendszer) ´es Bill Mensch (layout) f˝otervez˝ok MOS Technology – de sok c´eg gy´artotta az´ ota Apple II sz´am´ıt´og´epben is, de a legh´ıresebb: a Commodore 64-ben
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
A 6502 tulajdons´agai
16 µm NMOS technol´ ogia, ≈3500 2 tranzisztor, 21 mm 8 bites adatbusz, 16 bites c´ımbusz Egy k¨ uls˝o ´orajel, bel¨ ul el˝ o´all´ıtott (´es kivezetett) f´azisjelek Kev´es regiszter (A, X, Y, P, S, PC)
P´ eldaprogramok
Irodalom
A processzorr´ ol
6502 layout
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
A processzor ´es a k¨ulvil´ag
I/O Nem voltak k¨ ul¨ on I/O utas´ıt´asok Csak mem´ oria ´ır´as/olvas´as → memory mapped I/O A perif´eri´akat a mem´ oria ter¨ ulet´ere kellett lek´epezni Pl. a C64-en a $D000-$DFFF ter¨ uleteken a vide´ok´artya”, ” hangk´artya” stb. ”
Megszak´ıt´asok
(RST – reset) NMI – non maskable interrupt IRQ, (BRK szoftveres megszak´ıt´ask´er´es)
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Regiszterek
A Akkumul´ator, 8 bites. Aritmetikai/logikai m˝ uveletek eredm´enyeihez. X, Y Index regiszterek, 8 bites. N¨ovel´es, cs¨ okkent´es, mem´ oria el´er´ese. P Flagek. Negative, oVerflow, Break, Decimal, Interrupt, Zero, Carry. PC Utas´ıt´assz´aml´al´ o, 16 bites. SP Veremmutat´ o, 8 bites. A verem a $0100-$01FF ter¨ uleten helyezkedik el.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Utas´ıt´asok
Bet¨olt´es LDA, LDX, LDY – load Accumulator, X, Y T´arol´as STA, STX, STY – store A, X, Y RMW Read-modify-write – ASL, LSR, ROL, ROR, INC, DEC Aritmetikai ADC, SBC – add with carry, subtract with carry ¨ Osszehas. CMP, CPX, CPY – compare A, X, Y Logikai AND (´es), ORA (vagy), EOR (xor), BIT (´es, t´arolatlanul) T¨obbi ugr´as/el´agaz´as, flag be´all´ıt´as, regiszter m´asol´as ´es verem.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
C´ımz´esi m´odok I. Az utas´ıt´asokhoz t¨obbf´ele c´ımz´esi m´ od tartozik. A gyakoriakhoz (pl. LDA) mindegyik, a ritk´abbakhoz (pl. BIT) hi´anyosan. LDA #$01 K¨ozvetlen (immediate). A k´odban megadott b´ajt konstans. LDA $7805 Abszol´ ut. Az adott 16 bites c´ımen a mem´ ori´aban. LDA $05 Null´as lap (zero page). A mem´oria $00xx hely´en. (Helyet ´es id˝ot sp´orol!) LDA $2000,X Abszol´ ut, X indexelt. Az adott c´ım + X regiszter helyen a mem´ori´aban. ´Igy lehet t¨ omb¨ oket el´erni. Van null´as lap v´altozata. LDA $2000,Y Abszol´ ut, Y indexelt. Mint fent.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalom
C´ımz´esi m´odok II. Indirekt c´ımz´esek: LDA ($80,X) Null´as lap X-indexelt indirekt. A $00xx+X ´es $00xx+X+1 hely´en t´arolt 16 bites c´ım ´altal meghat´arozott helyen a mem´ ori´aban. Pl. X=$02: a c´ım $0082 ´es $0083 helyen van. Ha $0082 = #$E2 ´es $0083 = #$FC, akkor a $FCE2 c´ımr˝ol fog olvasni. Pointereket tartalmaz´ o t¨ omb.” ” LDA ($80),Y Null´as lap indirekt Y-indexelt. Az adott helyen ($00xx) t´arolt c´ımet kiolvassa, hozz´aadja az Y regiszter ´ert´ek´et, ´es a kapott 16 bites c´ımmel dolgozik. T¨omb elej´ere mutat´ o pointer.” ”
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Regiszter transzfer ´es verem Mozgat´as: TAX, TXA Transfer Accumulator to X register. TAY, TYA Y regiszterrel. TSX, TXS Transfer Stack pointer to X register. PHA, PLA Push/pop Accumulator. PHP, PLP Push/pop processor status. (Flag-eket.) Ugr´as: JMP $FCE2 Jump absolute. JMP ($FFFC) Jump indirect. JSR, RTS Jump subroutine, return from subroutine.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Vez´erl´es´atad´as
Megszak´ıt´as: elmentik a flag regisztert (P) a verembe, elmentik a k¨ovetkez˝o utas´ıt´as c´ım´et (-1), ut´ana pedig JMP. IRQ, BRK JMP ($FFFE). NMI JMP ($FFFA). RESET JMP ($FFFC). Ez egyben azt jelenti, hogy ott ROM mem´oria kell legyen, ami a bekapcsol´as” ut´ani els˝o ” utas´ıt´as c´ım´et kell tartalmazza! Visszat´er´es: RTI Return from Interrupt utas´ıt´as. PLP+RTS.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Flag-ek ´es el´agaz´as Bet¨olt˝o (load) ´es logikai utas´ıt´asok az N ´es Z flaget, l´eptet˝ok a C flaget is m´odos´ıtj´ak; aritmetikai utas´ıt´asok az N, V, Z, ´es C flageket. Utas´ıt´asok D, I ´es C flagek szoftverb˝ ol ´all´ıthat´ oak (CLD/SED, CLI/SEI, CLC/SEC), a V flag csak t¨or¨olhet˝o (CLV). El´agaz´asok BPL/BMI: Negat´ıv flag, BVC/BVS: oVerflow flag, BNE/BEQ: Zero flag, BCC/BCS: Carry flag. (8 bites relat´ıv offszet az operandus.) CMP+branch Gyakran CMP el˝ ozi meg (CoMPare) az ugr´ast. Az egy kivon´as, de csak a flag-eket ´all´ıtja. CMP+BEQ (BNE): ugr´as, ha (nem) egyenl˝o. CMP+BCC: ugr´as, ha kisebb, CMP+BCS: ugr´as, ha egyenl˝ o vagy nagyobb.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
P´eldaprogram – ciklus A $0400-t´ol kezd˝od˝o ter¨ uletre be´ırja a sz´amokat 0-t´ol 127-ig. .2000 .2002 .2003 .2006 .2007 .2009 .200b
LDX TXA STA INX CPX BNE RTS
#$00 $0400,X #$80 $2002
; ; ; ; ; ; ;
X = 0 A = X mem[$0400+X] = A X = X+1 X == $80? ha nem, ugr´ as 2002-re v´ ege
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalom
P´eldaprogram – sztring m´asol´asa
Sztring m´asol´asa. C st´ılus´ u sztring – a v´eg´en lez´ar´o 0. A forr´as sztringre ($20) mutat, a c´el sztringre ($26). .2000 .2002 .2004 .2006
A0 B1 91 F0
00 20 22 03
.2008 .2009 .200b
C8 D0 F7 60
LDY LDA STA BEQ
#$00 ($20),Y ($26),Y $200B
INY BNE $2002 RTS
; ; ; ; ; ; ;
Y = 0 A = mem[mem[$20]+Y] mem[mem[$26]+Y] = A ugr´ as, ha 0 b. if equal = b. if zero! Y = Y+1 ugr´ as, ha nem 0
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalom
P´eldaprogram – sztring m´asol´asa gyorsan ¨ odos´ıt´o: a c´ımeket bem´asolja saj´at mag´aba (2016-os ´es Onm´ 2019-es sorba.) A direkt el´er´es˝ u c´ımz´es gyorsabb, mint az indirekt! .2000 .2002 .2005 .2007 .200a .200c .200f .2011 .2014 .2016 .2019 .201c .201e .201f .2021
A5 8D A5 8D A5 8D A5 8D A0 B9 99 F0 C8 D0 60
20 17 21 18 26 1A 27 1B 00 FF FF 03 F5
20 20 20 20 FF FF
LDA STA LDA STA LDA STA LDA STA LDY LDA STA BEQ INY BNE RTS
$20 $2017 $21 $2018 $26 $201A $27 $201B #$00 $FFFF,Y $FFFF,Y $2021 $2016
; $20,$21 → $2017,$2018
; $26,$27 → $2019,$201A
; folytat´ as: ahogy eddig
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
P´eldaprogram – bubor´ekrendez´es I. ($30)-t´ol: rendezend˝o t¨ omb. Elemsz´am: els˝o elem. $32: flag, hogy volt-e csere SORT8
NXTEL
LDY STY LDA TAX INY DEX LDA INY CMP BCC BEQ
#$00 $32 ($30),Y
($30),Y ($30),Y CHKEND CHKEND
; csere flag = HAMIS (0) ; ; ; ; ;
elemsz´ am olvas´ asa X-be teszi els¨ o elemre mutat elemsz´ am cs¨ okkent´ ese elem beolvas´ asa A-ba
; nagyobb, mint ami ut´ ana van?
; ...
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
P´eldaprogram – bubor´ekrendez´es II.
PHA LDA DEY STA PLA INY STA LDA STA CHKEND DEX BNE BIT BMI RTS
($30),Y ($30),Y
($30),Y #$FF $32 NXTEL $32 SORT8
; ; ; ; ; ; ; ; ;
... igen, csere. csere. az els¨ ot a verembe fogja a m´ asikat Y cs¨ okkent´ ese - el¨ oz¨ o elem ki´ ırja oda mentett elem a veremb¨ ol Y visszan¨ ovel´ ese mentett elem ki´ ır´ asa csere flag = IGAZ
; ; ; ; ;
lista v´ ege? nem, vissza az ellen¨ orz´ eshez igen. csere flag m´ eg HAMIS? nem. ´ ujra v´ egig a t¨ omb¨ on igen. a t¨ omb rendezett.
Irodalom
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalom
Hasznos linkek
Donald F. Hanson: 6502 Block Diagram http://www.witwright.com/DonPub/6502-Block-Diagram.pdf 6502 Instruction Set http://homepage.ntlworld.com/cyborgsystems/CS_Main/ 6502/6502.htm http://www.masswerk.at/6502/6502_instruction_set.html xa65: ny´ılt forr´ask´ od´ u 6502 cross assembler. http://www.floodgap.com/retrotech/xa/
A processzorr´ ol
A 6502 r´ eszletesen
P´ eldaprogramok
Irodalomjegyz´ek
Michael Steil: Reverse Engineering the MOS 6502 CPU http://www.youtube.com/watch?v=K5miMbqYB4E Michael Steil: The Ultimate Commodore 64 Talk http://www.pagetable.com/?p=53 The MOS 6502 and the Best Layout Guy in the World http://research.swtch.com/2011/01/ mos-6502-and-best-layout-guy-in-world.html 6502 Source Code Repository http://6502.org/source/
Irodalom