Coder Social home page Coder Social logo

tomekjaworski / 8051emu Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 0.0 3.43 MB

Emulator mikroprocesorów AT89Cx051

License: MIT License

Pascal 92.89% C++ 4.20% PHP 0.01% Assembly 1.06% Batchfile 0.01% Makefile 0.08% Roff 0.92% C 0.84%
8051-architecture emulation borland-pascal turbo-pascal at89c2051 8051

8051emu's Introduction

8051emu

Repozytorium zwiera środowisko symulatora mikroprocesorów o architekturze 8051 wraz z asemblerem. Oprogramowane zostały trzy wersje kości:

about_mini

Opis

Projekt powstał w 1999-2001, gdy uczęszczałem do szkoły średniej (Technikum Elektroniczne w Kutnie). Miał on zastąpić środowisko DSM51 firmy MicroMade, używane na zajęciach z programowania mikroprocesorów.

Środowisko składa się z dwuprzebiegowego asemblera - kompilatora języka asembler w postaci pełnej listy rozkazów '51 oraz z debuggera. Całość napisałem w języku Borland Pascal 7.0, a pracuje ona poprawnie w trybie chronionym 16 bitowym, pod kontrolą systemu DOS. Do wykonania interfejsu okienkowego wykorzystałem popularny wówczas pakiet Turbo Vision.

Repozytorium GIT nie zawiera ostatecznej wersji środowiska, a jedynie najaktualniejszą wersję źródeł, jaką znalazłem. Nie znałem wtedy koncepcji repozytorium kodu źródłowego, a GIT miał powstać dopiero za kilka lat ;-). Jeżeli kiedyś natrafię na ostatnią wersję - z pewnością ją tutaj opublikuję.

Kompilacja/uruchomienie

Do kompilacji konieczne jest DOSowe środowisko Borland Pascal 7.0 (profesjonalny odpowiedni Turbo Pascala) oraz DOSBox. Pakiety te można pobrać tutaj:

Konfiguracja DOSBox:

Poniżej znajduje się lista zmian, które można wprowadzić do pliku dosbox.conf:

[sdl]
windowresolution=1280x800
output=overlay
hwscale=2.00

autolock=false
sensitivity=100

[cpu]
core=auto
cputype=auto
cycles=fixed 30000
cycleup=10
cycledown=20

[autoexec]
mount c: C
imgmount a: A\floppy.img -t floppy
z:\config -set dos keyboardlayout pl
c:
cd \
call c:\autoexec.bat

Zmiany te obejmują:

  • Powiększenie okna symulacji 2x (zoom)
  • Poprawienie współpracy ze sterownikiem myszy w przypadku korzystania z Remote Desktop
  • Przyspieszenie symulacji
  • Uruchomienie polskich czcionek oraz strony kodowej 852.

Powyższe zmiany jedynie uprzyjemniają pracę z całym systemem i nie są konieczne do jego kompilacji i uruchomienia.

Kompilacja

W pierwszej kolejności należy zainstalować pakiet Borland Pascal w wersji pełnej. Po zainstalowaniu należy uruchomić środowisko BP poleceniami:

cd C:\BP\BIN
BP

A następnie skompilować i uruchomić:

W wyniku kompilacji wygenerowane zostaną pliki debug.exe oraz kompil51.exe - właściwe pliki wykonywalne.

Debugger - moduł uruchomieniowy

Po uruchomieniu skompilowanego debuggera, bezpośrednio z poziomu IDE Pascala lub plikiem debug.exe, środowisko przywita się następującym widokiem: start

Cechy debuggera:

  • Emulacja architektury 8051 na poziomie sprzętowym wraz z liczeniem cykli. Pozwala to dokładnie określić czas działania kodu, co jest krytyczne w przypadku budowania systemów czasu rzeczywistego.

  • Możliwość wczytywania plików wykonywalnych w formacie Intel HEX oraz w formacie RAW (binarne zrzuty pamięci).

  • Możliwość zapisywania plików wykonywalnych w formatach BIN/HEX.

  • Możliwość wczytywania symboli z plików generowanych przez kompilator kompil51 (pliki .SYM); wczytane symbole można w pełni edytować i ponownie zapisywać na dysk.

  • Możliwość pracy debuggera krok po kroku wraz z animacją procesu wykonywania.

  • Możliwość edycji zawartości pamięci RAM (danych) oraz ROM (kodu programu).

  • Pełna interaktywność środowiska - na zmiany zawartości rejestrów RAM/pamięci ROM natychmiast reagowały pozostałe elementy interfejsu, np. poprzez aktualizację zawartości okna śledzenia stanu CPU.

  • Okno śledzenia stanu CPU wyświetla nazwy symboli w miejscach adresów, co znacząco ułatwia proces debugowania.

Widoki aplikacji

Okno debuggera - śledzenia stanu i pracy mikroproceosra po wczytaniu programu. debug_window

Możliwość dodawania wielu pułapek, na których następnie program się zatrzymywał. breakpoints

Możliwość generowania przerwań zewnętrznych jak i wewnętrznych. interrupt_generation

Edytor pamięci ROM (programu): memory_editor2

Edytor pamięci RAM (rejestry, pamięć ogólnego przeznaczenia): memory_editor

Wczytaną pamięć programu można w każdej chwili zmodyfikować tak, aby wprowadzić drobne zmiany bez konieczności ponownej kompilacji i restartu symulacji mikroprocesora. memory_editor_byte

W oknie stanu mikroprocesora można zmienić wartość każdego rejestru (tutaj P3), flag, numeru banku pamięci oraz stosu. register_editor

Do wczytanego programu można dodać/usuwać symbole. symbol_editor

Można je też edytować; symbole podzielone są na dwa zbiory - dla przestrzeni RAM oraz ROM, co jest naturalną konsekwencją harwardzkiej architektury 8051. symbol_editor2

Program można uruchomić w trybie pracy ciągłej - wykonuje się sam do jego przerwania lub natrafienia na pułapkę. trace_animation

Animacje

Animacja przedstawiająca proces wczytywania pliku wykonywalnego w formacie Intel HEX wraz z listą symboli. Po pomyślnym wczytaniu uruchamiana jest opcja animacji wykonywania kodu (Uruchom). video_debugging

Nie ma dobrego środowiska uruchomieniowego bez pułapek, prawda? Prawda! A skoro tak, to tutaj widać chwilę ustawienia pułapki oraz wstrzymywanie procesu wykonywania po natrafienia na nią. video_run_to_breakpoint

Zastosowanie środowiska Turbo Vision oraz mechamizmu wymiany komunikatów ułatwiło zachowanie interaktywności. Poniżej widać, jak zmiany stanu pamięci RAM procesora natychmiast wpływają na zawartość okna podglądu pamięci RAM jak i na zawartość okna śledzenia CPU. video_live_ram

Kompilator

Jest to typowy kompilator dwuprzebiegowy. W pierwszym przebiegu następuje kompilacja kodu, co pozwala na określenie adresów wszystkich symboli. W drugim natomiast następuje uzupełnienie informacji adresowych w generowanym kodzie oraz jego faktyczne wygenerowanie.

Ciekawe elementy:

  • wbudowany preprocesor - można rekurencyjnie dołączać pliki nagłówkowe (taki odpowiedni #include z C/C++)
  • możliwość wykorzystania wyrażeń całkowitych (np. 2 * (2 + 2)) jako wyrażeń liczbowych.

W wersji dostępnej w repozytorium kompilator zafiksowany jest na AT89C2051 oraz plik TEST.ASM.


Podczas pisania kodu można wybrać jeden z kilku predefiniowanych mikroprocesorów: chip_select.png

Do pisania kodu można wykorzystać wbudowany w Turbo Vision edytor. code_editor.png

Podczas kompilacji kompilator generuje następujące komunikaty podsumowujące. compiler_output.png

Tutaj wszystko poszło po myśli autora kodu :)

Cechy wersji ostatecznej

Poniżej znajduje się lista cech, które posiadała wersja ostateczna, a która gdzieś zaginęła.

  • Pełna integracja kompilatora z debuggerem (działająca funkcja Kompiluj)
  • Współpraca z modułem DSM51.
  • Symulacja peryferiów DSM51 (nie pamiętam już których).
  • Programator AT89Cx051 podłączany do portu LPT (to było programowanie High Voltage, chyba...)

Wnioski

Jeżeli szukasz przykładu jak budować symulatory, to ten kod nie jest najlepszym miejscem :) Choćby z tego powodu, że Pascala nikt już nie używa. Pamiętam również, że pod koniec miałem problem z modułowością oraz brakiem abstrakcji - kod ma wiele miejsc wyspecjalizowanych do podrodziny AT90C, brak zasady jedna klasa = jeden plik, itd... To była najważniejsza lekcja, jaką otrzymałem w tym projekcie :-)

Zarówno sam silnik wykonawczy debuggera jak i kompilator pisałem według własnych pomysłów - nigdy wcześniej tego nie robiłem. A o książce ze smokiem - Kompilatory. Reguły, metody i narzędzia, Aho Alfred V. i inni dowiedziałem się dopiero na studiach.

Jeżeli jednak chcesz skorzystać i tych źródeł - powodzenia! I napisz maila; może będę mógł jakoś pomóc. :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.