Indeks English versionEnglish version

Elektronika MK-90 - programowanie w asemblerze

Początkowe 512 bajtów modułu pamięci zewnętrznej zawiera program rozruchowy, który można załadować i wykonać wybierając z menu startowego opcję SMP0 lub SMP1. Kod jest ładowany do pamięci RAM pod adres 0x0000-0x01FF a następnie uruchamiany z adresu 0x0000. Wskaźnik stosu (SP) jest inicjowany na 0x0200. Pierwszą instrukcją (pod adresem 0x0000) musi być NOP (kod 0x00A0).

Domyślny program wpisywany przy formatowaniu przez komendę INIT wyświetla tylko komunikat o treści "moduł bez loadera" a następnie blokuje system. Przy użyciu programatora można go zastąpić własnym kodem. Obecnie jest to jedyna znana metoda uruchamiania programów maszynowych w systemie z BASIC 1.0 (BASIC 2.0 ma w tym celu komendę PATCH).

Przykładowe programy

Automatyczne uruchamianie programów BASIC

Program przy starcie systemu automatycznie wykonuje dowolną wstępnie zdefiniowaną sekwencję instrukcji języka BASIC. W szczególności umożliwia wciśnięciem tylko dwóch klawiszy załadowanie i uruchomienie wybranego programu w języku BASIC.
Przykładowy kod wykonuje instrukcję LOAD"SMx:AUTO",R. Każde wystąpienie małej litery x w wierszu instrukcji jest zastępowane cyfrą 0 lub 1, zależnie od gniazda modułu pamięci.
Uwaga: BASIC 2.0 wydaje się ignorować opcję R instrukcji LOAD, przynajmniej na emulatorze.

plikwersja dla BASIC 1.0
plikwersja dla BASIC 2.0

Pominięcie menu startowego

Program trwale blokuje menu startowe i po włączeniu lub po resecie od razu przechodzi do interpretera BASICa. Odbywa się to przez modyfikację wektora reset w pamięci RAM podtrzymywanej baterią (część układu zegara czasu rzeczywistego) tak, że zamiast zwykłego "ekranu powitalnego" wskazuje on procedurę "zimnego startu" interpretera BASICa.
Prawdopodobnie pamięć ROM nie zawiera innych adresów startowych, a więc są to jedyne możliwe opcje.
W celu przywrócenia poprzedniego stanu należy na chwilę wyjąć baterie.
Uwaga: Emulator MK-90 (w przeciwieństwie do rzeczywistego komputerka) celowo nie zachowuje zawartości nieulotnej pamięci RAM między sesjami!

plikwersja dla BASIC 1.0
plikwersja dla BASIC 2.0

Wykorzystanie przerwania EVNT

Program rysuje poziomą linię na środku ekranu. Co 31.25ms procedura obsługi przerwania dodaje jeden piksel, zatem czas potrzebny do narysowania całej linii wynosi 120*31.25ms=3.75s.
Jeżeli program zostanie zakończony klawiszem Reset, mikrokomputer wyświetli "ekran powitalny", ale będzie w dalszym ciągu wyświetlał linię. Dzieje się tak, ponieważ oprogramowanie systemowe nie inicjuje poprawnie zegara czasu rzeczywistego (RTC). Wybranie języka BASIC w tym stanie zawiesza system. Żeby przywrócić działanie komputerka trzeba na chwilę wyjąć baterie.

plikWykorzystanie przerwania EVNT

Proste procedury graficzne

Zestaw podprogramów realizujących podstawowe operacje graficzne:

plikProcedury graficzne

Gra w życie

Jest to przykładowy program maszynowy realizujący Grę w życie Johna Conwaya. Ponieważ rozmiar programu przekracza 512 bajtów, musiał zostać umieszczony w obszarze danych modułu pamięci. Aby zapobiec przepisaniu tego obszaru przez system, została zmieniona wartość pod adresem 0x0412 (w obszarze katalogu) z 0x10 na 0x0D. W ten sposób trzy ostatnie sektory modułu pamięci zostały zarezerwowane dla programów maszynowych o rozmiarze do 1.5 kB, pozostawiając resztę obszaru danych (6.5 kB) do dyspozycji systemu. Oryginalny program rozruchowy został zastąpiony innym, który ładuje kod z trzech ostatnich sektorów do pamięci RAM mikrokomputera, a następnie uruchamia go.

Program powinien działać z dowolną wersją BASICa, ponieważ nie odwołuje się do pamięci ROM.
Program można zakończyć tylko klawiszem reset lub wyłącznikiem.

zrzut ekranu programu Gra w życie na mikrokomputerze Elektronika MK-90

plikGra w życie

Dekompresor INFLATE

Program wczytuje do pamięci MK-90 oraz uruchamia kod maszynowy skompresowany algorytmem DEFLATE. Umożliwił na przykład zapis gry "Boks" o rozmiarze 12066 bajtów na module SMP-10 o pojemności 10kB.
Jest to moja adaptacja procedury INFLATE, którą napisał Piotr Fusik w języku asemblera 6502.
Do oryginalnej wersji dla procesora 6502 jest dołączony pasujący kompresor plików.

plikDekompresor INFLATE