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

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