Tutorial 1

Używanie symulacji Wizjer 6502 nie jest takie trudne, jeśli przeczytasz ten tutorial i będziesz podążał za krokami, które są wyznaczone. Zobaczysz, programowanie w asemblerze 6502 potrafi dać naprawdę ciekawe rezultaty! W tym tutorialu napiszemy pewien napis. Polecamy najpierw rozpocząć od tego tutoriala, ponieważ dzięki niemu możesz opanować podstawowe funkcje Wizjera 6502.

step1

1. Na początek, kliknij na białe pole tekstowe po lewej stronie Wizjera i wprowadź kod taki, jak na zdjęciu obok. Następnie naciśnij przycisk "Załaduj" oraz kartę "Śledzenie".

step2

2. Komórki pamięci, które zostały wyróżnione na czerwono to komórki, które wcześniej miały inną wartość, a w ich miejsce znalazł się kod programu. Kod w postaci ciągu liczb zapisanych w pamięci RAM nazywamy kodem maszynowym. Adres komórki odczytuje się poprzez dodanie liczby z pierwszych komórek kolumny i wiersza w tabeli np. komórka z wierszem zaczynającym się od $0010 i kolumnie rozpoczynającej od $0002 ma adres $0012 i na zdjęciu przechowuje wartość $AB.

Wciśnij przycisk "Start", aby uruchomić program i wykonywać go automatycznie, lub "Krok", aby program był uruchomiony, ale po wykonaniu cyklu zatrzymuje się (jest w trybie krokowym). Na początek polecamy drugą opcję.

step3

3. W czasie wykonania pierwszego cyklu na czerwono zostały wyróżnione: dekoder instrukcji, rejestr instrukcji, wewnętrzna szyna danych, licznik programu, rejestr zatrzaskowy IDL i szyna adresowa. Są to komponenty procesora, które brały udział w tym cyklu. Na szarym polu jest kod wykonywanego rozkazu w języku asemblera. Licznik programu zmienił swoją wartość z $0000 na $0001. Ten 16-bitowy rejestr wskazuje teraz na drugą liczbę w pamięci RAM, która jest argumentem rozkazu LDA, który jest teraz wykonywany. W komórce oznaczoną bladozielonym kolorem znajduje się opkod, czyli liczba, która pobrana w pierwszym cyklu każdego rozkazu jest traktowana jak informacja, jaką operację wykonać i w jakim trybie adresowania. Opkod ma wartość $A9 i oznacza rozkaz LDA w trybie natychmiastowym. Znak dolara przed liczbą oznacza, że liczba jest w zapisie szesnastkowym.

Jeśli wybrałeś/aś wykonywanie krokowe, wciśnij przycisk "Krok".

step4

4. W drugim cyklu akumulator (rejestr oznaczony literą A) przyjął wartość $36. To jest taka sama wartość, jaką ma argument rozkazu LDA, którego teraz wykonuje. Tryb adresowania, w którym argument zostaje od razu wykorzystany do operacji nazywamy natychmiastowym. Operacja w drugim cyklu wpłynęła także na: licznik programu, flagi N i Z rejestru stanu, IDL, szynę adresową i dekoder instrukcji. W asemblerze tryb natychmiastowy wybieramy wpisując znak '#' na początek liczby szesnastkowej. Jest to ostatni cykl rozkazu LDA #$36, można więc dojść do wniosku, że ta instrukcja oznacza "załaduj liczbę $36 do akumulatora".

Jeśli wybrałeś/aś wykonywanie krokowe, wciśnij przycisk "Krok".

step5

5. W cyklu pierwszym rozkazu "STA $0600" są wyróżnione dokładnie te same komponenty, jak w cyklu pierwszym poprzedniego rozkazu. Następne cykle pierwsze każdego rozkazu są pominięte w dalszej części tutoriala, jak i całym tutorialu nr 2. Tylko dlaczego opkod bieżącego rozkazu znajduje się w $0002, a nie w $0001? Dlatego, że w komórce $0001 znajdował się argument poprzedniego rozkazu. Procesor pracowałby dość niewydajnie, gdyby wszystkie argumenty były przechowywane poza kodem programu.

Najedź na pola obok "Adres pierwszej komórki" i zmień wartości tak, jak na zdjęciu. Naciśnij przycisk "Odśwież". Jeśli wybrałeś/aś wykonywanie krokowe, wciśnij trzy razy przycisk "Krok".

step6

6. Po naciśnięciu przycisku "Odśwież" pokazały się komórki od $0600 do $0630. Nie interesuje nas kod programu znajdujący się w pierwszych komórkach pamięci, dlatego przełączyliśmy się na te komórki. Nie wybraliśmy ich przypadkowo - Są to specjalne komórki podłączone do wirtualnego terminala, który jest pod widokiem pamięci RAM. Parzyste komórki przechowują znak w komórce terminala, a nieparzyste informacje o kolorze tła i tekstu komórki. Komórka $0600 wyróżniła się na czerwono i przyjęła wartość dokładnie taką samą, jaką ma akumulator. Argument rozkazu STA jest taki sam, jak adres komórki, do którego zapisano wartość z akumulatora. To oznacza, że rozkaz STA wykonuję operację "Przechowaj wartość z akumulatora w komórce o adresie $0600". Rozkaz był w trybie bezwzględnym, gdzie argument stanowił dokładny adres, do którego miał się odwołać, bez żadnych udziwnień. Argument w takim trybie zajmuje aż dwa bajty, dlatego tak prosta operacja, jak zapis do komórki trwał aż cztery cykle zegara. Poprzednia operacja trwała tylko dwa. Na konsoli wyświetliła się cyfra "6", gdyż w komórce, która odpowiada za ten znak w danej pozycji znajduje się liczba $36, który jest kodem ASCII/Unicode cyfry "6".

Jeśli wybrałeś/aś wykonywanie krokowe, wciskaj przycisk "Krok" dopóty, dopóki rozkaz "STA $0601" nie zostanie wyróżniony na ciemnoczerwono, a numer cyklu nie będzie czwarty.

step7

7. Przez ten czas wczytałeś/aś do akumulatora wartość $1F i zapisałeś/aś go do komórki o adresie $0601. Tym razem zmienił się kolor tła i tekstu komórki, na którym jest cyfra "6". Najstarszy półbajt liczby $1F wskazuje tło, a najmłodszy kolor. To oznacza, że wartość $1 oznacza "granatowy", a $F "biały". Jeden półbajt może przechować szesnaście wartości, czyli szesnaście różnych kolorów.

Wciśnij przycisk "Reset", aby zatrzymać program. Najedź na komórkę $0602 i kliknij ją dwa razy z rzędu. W komórce utworzy się pole tekstowe, w którą należy wpisać wartość. Wpisz wartość $35. Kliknij dowolny obszar poza polem tekstowym.

step8

8. Komórka $0602 przyjęła wartość $35. Nastąpiła też aktualizacja w terminalu - obok cyfry "6" pojawiła się cyfra "5".

W podobny sposób wprowadź ciąg liczb: $1F, $30, $1F, $32, $1F rozpoczynając od komórki $0603. Zobacz, co Ci się wyświetli na terminalu.

Skopiowano