[PDF] Simulátor procesoru 6502 (bakalá?ská práce)





Previous PDF Next PDF



MOS Technology 6502 CPU Emulation

1 mai 2020 It is also worth mentioning that there are numerous sources online which detail all the 6502 CPU instructions. The one that's been primarily ...



Nintendo Entertainment System Hardware Emulation

used the online Easy6502 emulator which is cycle accurate and reads out the values of each of the registers and several memory locations.



Visualizing CPU Microarchitecture

version of Visual6502 simulator [7] was running at approximately 25 Hz. Thanks to recent years advancements on JavaScript runtime in web browsers 



Simulátor procesoru 6502 (bakalá?ská práce)

Processor 6502 simulator. Thesis type: bachelor thesis. Department: Department of Computer Science Faculty of Science



Nintendo Entertainment System Hardware Emulation

The 6502 uses memory mapping to communicate with external devices including the PPU APU



Using Python 3 to Build a Cloud Computing Service for my

(plus some ØMQ and Redis). (and some 6502 assembler) For this some resources online. • http://osiweb.org ... Py65 : A 6502 Emulator Written in Python.



Dynamically Recompiling Emulator

optimizations from the LLVM project



Acorn emulators

12 févr. 2002 em6502 is a 6502 emulator capable of running BBC BASIC ... formats used for Beeb files online authentic though CPU-hungry.



User Manual ADAM-6000 Series

Visit the Advantech web site at www.advantech.com/support where you can find the latest information about the product. 2. Contact your distributor sales 



A Nintendo Entertainment System simulator coded in pure VHDL

The NES itself consists of three main parts: a customized 6502 We used all resources available to us including online.

BAKALÁŘSKÁ PRÁCE

Simulátor procesoru 65022017 Pavel Kryl

Vedoucí práce: RNDr. Arnošt Ve-

čerkaStudijní obor: Aplikovaná informatika, prezenční forma

Bibliografické údaje

Autor: Pavel Kryl

Název práce: Simulátor procesoru 6502

Typ práce: bakalářská práce

Pracoviště: Katedra informatiky, Přírodovědecká fakulta, Univerzita

Palackého v Olomouci

Rok obhajoby: 2017

Studijní obor: Aplikovaná informatika, prezenční forma

Vedoucí práce: RNDr. Arnošt Večerka

Počet stran: 52

Přílohy: 1 CD

Jazyk práce: českÞ

Bibliograhic info

Author: Pavel Kryl

Title: Processor 6502 simulator

Thesis type: bachelor thesis

Department: Department of Computer Science, Faculty of Science, Pa- lackÞ University Olomouc

Year of defense: 2017

Study field: Applied Computer Science, full-time form

Supervisor: RNDr. Arnošt Večerka

Page count: 52

Supplements: 1 CD

Thesis language: Czech

Anotace

Práce se zabÞvá tvorbou simulátoru procesoru 6502 s podporou připojení jednodu-

chÞch periferií. V práci je zahrnut krátkÞ popis procesoru a jeho struktury. Část

textu je věnována adresním módům a instrukční sadě. Dále je popsána struktura

aplikace a způsob, jakÞm probíhá překlad a vykonávání zdrojového kódu.

Synopsis

Thesis deals with creating processor 6502 simulator with support for simple pe- ripherals. Thesis also includes short description of processor and its structure. Part of the text describes addressing modes and instruction set. Next there is a description of application structure and the way it compiles and emulates source code. Klíčová slova:simulátor; procesor 6502; překladač

Keywords:simulator; processor 6502; compiler

Děkuji RNDr. Arnoštovi Večerkovi a všem lidem, kteří mi pomohli s dokončením této práce.

MístopříseŽně prohlašuji, Že jsem celou práci včetně příloh vypracoval/a samo-

statně a za pouŽití pouze zdrojů citovanÞch v textu práce a uvedenÞch v seznamu literatury. datum odevzdání práce podpis autora Obsah

1 Procesor 6502

8

1.1 Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

1.1.1 Obecné registry . . . . . . . . . . . . . . . . . . . . . . . .

9

1.1.1.1 Akumulátor . . . . . . . . . . . . . . . . . . . . .

9

1.1.1.2 Index registry . . . . . . . . . . . . . . . . . . . .

10

1.1.2 Registr příznaků procesoru . . . . . . . . . . . . . . . . . .

10

1.1.3 Ukazatel na vrchol zásobníku . . . . . . . . . . . . . . . .

11

1.1.4 ProgramovÞ čítač . . . . . . . . . . . . . . . . . . . . . . .

12

1.2 Adresní módy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

1.2.1 Neindexované adresování . . . . . . . . . . . . . . . . . . .

12

1.2.1.1 Implicitní adresa (Implied) . . . . . . . . . . . .

12

1.2.1.2 Bezprostřední hodnota (Immediate) . . . . . . .

12

1.2.1.3 Absolutní adresa (Absolute) . . . . . . . . . . . .

13

1.2.1.4 Nultá stránka (Zero Page) . . . . . . . . . . . . .

13

1.2.1.5 Relativní adresa (Relative) . . . . . . . . . . . .

13

1.2.2 Indexové adresování . . . . . . . . . . . . . . . . . . . . . .

14

1.2.2.1 Absolutní indexovaná adresa (Absolute indexed)

14

1.2.2.2 Indexované nultou stránkou (Zero Page indexed)

14

1.2.3 Nepřímé adresování . . . . . . . . . . . . . . . . . . . . . .

15

1.2.3.1 Indexované nepřímé adresování (Indexed Indirect)

15

1.2.3.2 Nepřímé indexované adresování (Indirect indexed)

15

1.2.3.3 Nepřímé absolutní adresování (Indirect absolute)

16

1.3 Instrukční sada . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 6

1.3.1 Formát instrukcí . . . . . . . . . . . . . . . . . . . . . . .

17

1.3.2 Přehled instrukcí . . . . . . . . . . . . . . . . . . . . . . .

18

1.3.2.1 Načítání a ukládání dat . . . . . . . . . . . . . .

18

1.3.2.2 Aritmetické operace . . . . . . . . . . . . . . . .

19

1.3.2.3 Logické operace . . . . . . . . . . . . . . . . . . .

23

1.3.2.4 Testování, větvení a instrukce skoku . . . . . . .

23

1.3.2.5 BitovÞ posun a rotace . . . . . . . . . . . . . . .

25

1.3.2.6 Instrukce pro přesun hodnot mezi registry . . . .

26

1.3.2.7 Zásobníkové operace . . . . . . . . . . . . . . . .

26

1.3.2.8 Subrutiny . . . . . . . . . . . . . . . . . . . . . .

28

1.3.2.9 "žádná" operace . . . . . . . . . . . . . . . . . .

28

2 Emulátor 6502

28
2 8

2.2 Struktura procesoru . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2.3 Překlad programu . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2.3.1 UloŽení instrukcí . . . . . . . . . . . . . . . . . . . . . . .

3 0

2.3.2 Překlad . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

2.3.3 One-pass assembler . . . . . . . . . . . . . . . . . . . . . .

32

2.3.4 Vykonávání programu . . . . . . . . . . . . . . . . . . . . .

34
5

2.3.5 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34

2.3.5.1 Knihovna Qt . . . . . . . . . . . . . . . . . . . .

34

2.3.5.2 Hlavní okno aplikace . . . . . . . . . . . . . . . .

36

2.3.5.3 VÞpis paměti . . . . . . . . . . . . . . . . . . . .

37

2.3.5.4 Periferie . . . . . . . . . . . . . . . . . . . . . . .

38

3 Instalace

39

3.1 Instalace emulátoru . . . . . . . . . . . . . . . . . . . . . . . . . .

39

3.2 Instalace knihovny Qt . . . . . . . . . . . . . . . . . . . . . . . .

39

Závěr

41

Conclusions

42

A Obsah přiloŽeného CD

43

B Abecední přehled instrukcí procesoru

44

Literatura

52

Bibliografie

52
6

Seznam obrázků

1 Diagram registrů procesoru . . . . . . . . . . . . . . . . . . . . .

10

2 Uspořádání registru příznaků . . . . . . . . . . . . . . . . . . . .

11

3 VÞpočet adresy indexovaného nepřímého adresování . . . . . . . .

15

4 VÞpočet adresy nepřímého indexovaného adresování . . . . . . . .

16

5 VÞpočet adresy nepřímého absolutního adresování . . . . . . . . .

17

6 Znázornění bitového posunu a rotace . . . . . . . . . . . . . . . .

25

7 Hlavní okno aplikace . . . . . . . . . . . . . . . . . . . . . . . . .

37

8 Okno s vÞpisem paměti . . . . . . . . . . . . . . . . . . . . . . . .

38

9 LED displej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

10 SedmisegmentovÞ displej . . . . . . . . . . . . . . . . . . . . . . .

39

Seznam tabulek

1 Rozdělení paměti podle programátorského manuálu . . . . . . . .

8

2 Podrobnější rozdělení paměti . . . . . . . . . . . . . . . . . . . . .

9

3 Nastavení příznaků po srovnání . . . . . . . . . . . . . . . . . . .

24

4 Rozdělení paměti aplikace . . . . . . . . . . . . . . . . . . . . . .

29

Seznam zdrojovÞch kódů

1 Kombinace podmíného a nepodmíněného přeskoku . . . . . . . . .

1 4

2 Sčítání dvou 16bitovÞch čísel . . . . . . . . . . . . . . . . . . . . .

2 0

3 Odčítání dvou 16bitovÞch čísel . . . . . . . . . . . . . . . . . . . .

20

4 Nevalidní vÞsledky v decimálním módu . . . . . . . . . . . . . . .

21

5 Nevalidní příznaky v decimálním módu . . . . . . . . . . . . . . .

22

6 Posun vlevo tříbytového čísla . . . . . . . . . . . . . . . . . . . .

25

7 Posun vlevo čtyřbytového znaménkového čísla . . . . . . . . . . .

26

8 Posun vpravo čtyřbytového znaménkového čísla . . . . . . . . . .

2 7

9 PouŽití symbolů při práci s periferiemi . . . . . . . . . . . . . . .

29

10 Soubor state6502.h, ve kterém je definice struktury procesoru . .

30

11 Procedura pro rozdělení řádku . . . . . . . . . . . . . . . . . . . .

31

12 Funkce pro převedení argumentů na číselnou hodnotu . . . . . . .

33

13 Přepínač pro hledání instrukce podle adresního módu s příkladem

překladu instrukce . . . . . . . . . . . . . . . . . . . . . . . . . . 34

14 Přepínač určování instrukce k vykonání . . . . . . . . . . . . . . .

3 5

15 Procedura nastavující příznaky N a Z . . . . . . . . . . . . . . . .

35

16 Procedura k porovnávání hodnot . . . . . . . . . . . . . . . . . .

36

17 Procedura pro určení adresního módu . . . . . . . . . . . . . . . .

40
7

1 Procesor 6502

Procesor 6502 byl navrŽen v roce 1975 a v té době patřil k nejlevnějším plně vybavenÞm procesorům. Velkou mírou se podílel na rapidním sniŽování cen pro-

cesorů a stál u zrodu několika různÞch projektů, které podpořily vÞvoj domácích

počítačů. Jedná se o 8bitovÞ procesor s 16bitovou adresní sběrnicí. Nemá velké

mnoŽství registrů, kvůli technologiím, které byly tou dobou k dispozici. Bylo

mnohem jednodušší, a hlavně levnější, spoléhat více na RAM paměť neŽ NMOS

čipy pro registry.

Díky šířce adresní sběrnice dokázal procesor adresovat aŽ 64 KB paměti. Adresa se pak skládala z horního a dolního bytu. Toho se vyuŽívalo k rozdě-

lení paměti na tzv. stránky. KaŽdÞ horní byte označoval číslo stránky. Nultá

stránka, tedy paměť na adrese(0000)16aŽ(00FF)16, byla efektivně vyuŽívána

pro adresování. K této části paměti byl zaručen velmi rychlÞ přístup. Dalo se to

povaŽovat za náhradu malého mnoŽství registrů. V přeneseném slova smyslu měl

tedy procesor 256 8bitovÞch registrů.

K adresování paměti je moŽné vyuŽívat tzv. labelů. SlouŽí jako jakási záloŽka

pro přeskok v kódu. Je to vlastně obdoba záloŽky z vyšších programovacích

jazyků, ve kterÞch se pouŽívá s příkazem GO TO. ZáloŽek se hojně vyuŽívá pro

větvení programu a také pro zvÞšení čitelnosti kódu. Povolená délka labelu je

maximálně 6 znaků. Stránka jedna, s adresou(0100)16aŽ(01FF)16, se pak vyuŽívala k uloŽení zásobníku. O tom, jakÞm způsobem je zajištěn zásobník více v kapitole 1.1.3

6502 pouŽívá efektivně indexové registry a zásobník, čímŽ umoŽňuje rozsáhlé

moŽnosti adresování. Kromě jiŽ zmíněného adresování pomocí nulté stránky je

moŽné pouŽít absolutní nebo relativní adresu a také lze vyuŽít registry pro tzv.

offset neboli posunutí. Toho se vyuŽívá například při adresování sekvenčních

bloků dat. O adresování pojednává kapitola 1.2

ProtoŽe procesor je orientován na práci s pamětí, je zřejmé, Že paměť by měla

mít určitÞ řád. Jak jiŽ bylo zmíněno první dvě stránky paměti jsou rezervovány.

Co se zbytku paměti tÞče, je vlastně jen na vÞrobci procesoru, jak paměť rozdělí.

Doporučené rozdělení paměti podle programátorského manuálu je uvedeno v tabulce 1

Tabulka 1: Rozdělení paměti podle programátorského manuáluAdresa (HEX) vyuŽití

0000 - 3FFF paměť RAM

4000 - 7FFF I/O zařízení

8000 - FFFF paměť ROMV tomto rozdělení však chybí spousta důleŽitÞch informací. Není zde zmínka

například o zásobníku, případně o důleŽité nulté stránce, která je z hlediska ad-

resování velmi uŽitečná. KdyŽ se pak začneme zajímat jakÞm způsobem procesor

pracuje s I/O zařízeními zjistíme, Že z pohledu programátora není rozdíl mezi

8

pamětí RAM a I/O zařízením. To znamená, Že pro přístup k periferii se pouŽívá

stejnÞ způsob jako k přístupu k bloku paměti.Dále je pak zvykem posledních

několik bytů vymezit pro vektory a obsluhy přerušení. Podrobnější rozdělení pak

ukazuje tabulka 2 Tabulka 2: Podrobnější rozdělení pamětiAdresa (HEX) vyuŽití

0000 - 00FF nultá stránka

0100 - 01FF zásobník

0200 - 7FFF paměť RAM, I/O zařízení

8000 - FFF9 paměť ROM

FFFA - FFFF vektory přerušeníVektory přerušení slouŽí k uloŽení adresy kódu, kterÞ se má provést, pokud

dojde k přerušení. Instrukční sada procesoru zahrnuje 56 různÞch instrukcí. Díky různÞm adres-

ním módům celkovÞ počet instrukcí dosáhne čísla 151. O instrukcích bude řeč v

kapitole 1.3 Myslím, Že je vhodné zmínit i fakt, Že procesor 6502 nepodporuje "pipelining", tedy schopnost procesoru zpracovávat více instrukcí najednou. Tato moŽnost se objevila aŽ u pozdějších modelů.

1.1 Registry

Procesor 6502 disponuje 6 hlavními registry: 16bitovÞ programovÞ čítač (značen jako PC), 8bitovÞ akumulátor (A někdy taky AC), dva 8bitové indexové registry (X a Y), 8bitovÞ ukazatel na vrchol zásobníku (S nebo SP) a 8bitovÞ registr příznaků (P).

Na obrázku

1 je diagram registrů.

1.1.1 Obecné registry

1.1.1.1 Akumulátor

Akumulátor je 8bitovÞ registr, kterÞ slouŽí k ukládání dat, se kterÞmi se mají

provádět operace. Většina instrukcí se provádí přes akumulátor nebo přes jeden

z pomocnÞch indexovÞch registrů (X nebo Y).

Hlavním účelem toho registru je přenášení dat z paměti do akumulátoru nebo

obráceně. BěŽné pouŽití se tedy nejčastěji skládá z načtení hodnoty do registru, ať

uŽ z paměti nebo konstantní hodnotou, provedením nějaké operace jako například

AND/OR, testování vÞsledku této operace a případného následného uloŽení zpět

do paměti.

Další ze způsobů pouŽití akumulátoru je například pro sčítání. Jedna z hodnot

k sečtení je uloŽena v registru a druhá se k ní přičítá. VÞsledek operace je pak

znovu uloŽen do akumulátoru. 9

Obrázek 1: Diagram registrů procesoru

Akumulátor má tedy dvě hlavní funkce:

1. je to primární místo pro uloŽení dat 2. slouŽí pro ukládání mez ivÞsledkůop erací

1.1.1.2 Index registry

Registry X a Y se převáŽně pouŽívají pro uloŽení indexů k procházení nebo ma-

nipulaci se sekvenčními daty v paměti. Oba registry je moŽné inkrementovat a

dekrementovat, čímŽ se z nich stávají další uŽitečné registry pro ukládání uŽiva-

telskÞch dat.

1.1.2 Registr příznaků procesoru

Z uspořádání registru příznaků (P), které je zobrazeno na obrázku 2 je vidět,

Že má k dispozici 7 pouŽitelnÞch bitů. Na kaŽdÞ z nich je pak moŽné nahlíŽet

jako na přepínač. Pět z nich jsou příznaky, které podávají informace o naposledy

provedené instrukci. Další dva příznaky jsou kontrolní. Carry flag (C) - česky také příznak přenosu funguje jako 9. bit při vÞpočtu.

Je vyuŽíván třeba při bitovém posunu nebo sčítání. Tento příznak je také

moŽné manuálně nastavit instrukcí SEC na 1 nebo jej instrukcí CLC rese- tovat, tedy nastavit na 0. Zero flag (Z) - příznak vynulování podává informace, zda vÞsledek poslední vykonané instrukce byl nulovÞ. Příznak není moŽné manuálně nastavit nebo resetovat instrukcí. 10 Obrázek 2: Uspořádání registru příznaků

Interupt disable (I) - příznak povolení přerušení je k dispozici programátorovi,

kterÞ přepínáním tohoto příznaku můŽe procesoru říct, jak obsluhovat pře-

rušení. Decimal mode (D) - přepínač mezi decimálním a binárním módem procesoru. Instrukce SED nastavuje bit D, CLC jej pak resetuje. Break flag (B) - příznak přerušení je nastavován pouze procesorem, a to v

případě, Že přerušení bylo způsobeno instrukcí BRK. Další bit registru je

nevyuŽitÞ.

Overflow flag (V) - příznak přetečení se pouŽívá pouze u znaménkové aritme-

tiky. Pokud se uvaŽuje neznaménková aritmetika, je moŽné tento bit úplně

ignorovat. Tento bit značí, Že je potřeba provést nějaké úpravy vÞpočtu.

K nastavení dochází, pokud v případě sčítání čísel se stejnÞm znaménkem

nebo odčítání čísel s různÞmi znaménky je vÞsledek větší neŽ +127 nebo

menší neŽ -128. Negative flag (N) - znaménkovÞ bit podává informaci, zda vÞsledek poslední instrukce měl nastavenÞ nejvyšší tedy 8. bit.

1.1.3 Ukazatel na vrchol zásobníku

Zásobník dává moŽnost procesoru například pracovat se subrutinami. Při zavo-

lání subrutiny instrukcí JSR se na zásobník uloŽí adresa následující instrukce

a poté se změní hodnota programového čítače na adresu subrutiny. Po zavo- lání instrukce RTS pro návrat ze subrutiny, tedy obdoba příkazu return, se do programového čítače načte uloŽená hodnota ze zásobníku.

Ukazatel na zásobník je pouze 8bitovÞ, z toho zřejmě vyplÞvají určitá ome-

zení. Hodnota ukazatele udává niŽší byte adresy, vyšší byte se vŽdy bere jako 1.

To znamená, Že zásobník je v paměti uloŽen na stránce 1 adresního prostoru. 11

Zásobník je přístupnÞ i pro data programátora. Na zásobník je moŽné uloŽit

hodnotu akumulátoru nebo i celého registru příznaků, toho se vyuŽívá například

při obsluze přerušení.

1.1.4 ProgramovÞ čítač

Poslední z registrů je programovÞ čítač. Je to 16bitová adresa, která ukazuje na

místo s následující instrukcí, která má bÞt prováděna. Díky své velikosti umoŽňuje

adresovat celou paměť procesoru.

1.2 Adresní módy

Procesor 6502 pouŽívá 16bitové adresy coŽ umoŽňuje adresovat 65 536 lokací v

paměti. KaŽdá z nich se pak skládá z 8 bitů dat. Adresa paměti se dá povaŽovat

za 256 paměťovÞch stránek s 256 paměťovÞmi lokacemi (1 bytem) na stránku.

1.2.1 Neindexované adresování

1.2.1.1 Implicitní adresa (Implied)

Instrukce pouŽívající implicitní adresování jsou jednobytové. Tento byte zabírá

OP CODE instrukce.

Instrukce se uvádí bez argumentů, případně u některÞch instrukcí je moŽné

quotesdbs_dbs10.pdfusesText_16
[PDF] cours ccna module 1 pdf

[PDF] 6502 endianness

[PDF] 6502 flags

[PDF] 6502 inc

[PDF] 6502 indirect addressing

[PDF] 6502 instruction

[PDF] 6502 instruction length

[PDF] 6502 instruction reference

[PDF] 6502 instruction set masswerk

[PDF] 6502 instruction set timings

[PDF] 6502 jsr stack

[PDF] 6502 logic diagram

[PDF] 6502 machine and assembly language programming

[PDF] 6502 machine code

[PDF] 6502 map