Emulator kalkulatora PB-1000
Program emuluje mikroprocesor HD61700 oraz używa obrazu odczytanej zawartości pamięci ROM kalkulatora
Wymaga komputera PC z systemem Windows.
Program powstał w celu weryfikacji poprawności odczytanej wewnętrznej pamięci ROM procesora oraz jako narzędzie pomocne przy analizie firmowego oprogramowania zawartego w pamięci ROM.
Wersja programu 48, ostatnie uaktualnienie 2021/04/28
pb1000es.zip - teksty źródłowe programu w Delphi
pb1000em.zip - skompilowana wersja programu
Sposób użycia: rozpakować pliki do pustego katalogu a następnie uruchomić program pb1000.exe
pb1000ej.zip - wersja japońska
Sposób użycia: Zastąpić pliki rom1.bin
oraz face.bmp
w katalogu w którym został zainstalowany program.
pb1000c.zip - wersja PB-1000C z CASL
Sposób użycia: Zastąpić pliki rom1.bin
oraz face.bmp
w katalogu w którym został zainstalowany program.
- Następujące pliki zawierają obrazy pamięci i są załadowywane przy starcie programu:
rom0.bin - wewnętrznaa pamięć procesora ROM 6kB
rom1.bin - zewnętrzna pamięć ROM 32kB
charset.bin - wewnętrzna pamięć ROM sterownika LCD o rozmiarze 1.5kB
ram0.bin - wbudowana pamięć RAM 8kB
ram1.bin - moduł rozszerzenia pamięci RAM 32kB
register.bin - wewnętrzne rejestry procesora
- Po zakończeniu programu są zapisywane na dysk zaktualizowane wersje plików
ram0.bin
, ram1.bin
i register.bin
.
Brakujące pliki są odtwarzane, ale muszą wtedy zostać zainicjowane przyciskiem New All.
- Emulator może być obsługiwany myszą lub z klawiatury.
Specjalne funkcje klawiszy:
Ctrl: [F]
Page Up: SHIFT
Page Down: CAPS
Esc: BRK
Insert: INS
Delete: DEL
Backspace: BS
Enter: EXE
F3: wstrzymuje wykonywanie programu i wywołuje okno debugera
Funkcjonują również klawisze sterujące kursorem.
Gdy potrzebne jest równoczesne wciśnięcie dwóch klawiszy trzeba użyć zarówno klawiatury komputera PC jak i myszy.
Na przykład, w celu wpisania słowa kluczowego ANGLE należy kliknąć na klawisz [F] na ekranie i wcisnąć L na klawiaturze komputera PC, lub trzymając wciśnięty klawisz Ctrl na klawiaturze komputera PC kliknąć myszą na klawisz L na ekranie.
- Kliknięcie myszą na obszar wyświetlacza LCD symuluje funkcję ekranu dotykowego.
- Program można zakończyć klikając na zatrzask pokrywy w prawym górnym rogu.
Panel deasemblera
- Przy wywołaniu okna debugera początkowy adres deasemblacji jest zgodny z zawartością rejestru Program Counter.
Można go zmienić klikając na adres w pierwszym wierszu i wpisując nową wartość, która musi być potwierdzona klawiszem Enter.
- Po kliknięciu na zdeasemblowaną instrukcję można wpisać nową.
Podobnie jak w przypadku adresu, konieczne jest wciśnięcie klawisza Enter żeby zmiany zostały przyjęte.
Po zakończeniu programu zapamiętywane są tylko modyfikacje zawartości pamięci RAM, natomiast wszelkie zmiany dokonane w obszarze ROM są utracone.
Uwagi:
- nie można używać etykiet ani wyrażeń arytmetycznych
- akceptowane są liczby szesnastkowe (poprzedzone prefiksem &H) oraz dziesiętne
- argumentem skoków względnych może być tylko adres absolutny, nie przesunięcie
Panel edytora binarnego
- Edytor binarny pozwala na przeglądanie/edycję zawartości pamięci RAM.
- Można zmienić adres początkowy oraz zawartość pamięci klikając na nie i wpisując nową wartość.
Zmiany muszą być potwierdzone klawiszem Enter.
Panel rejestrów
- Kliknięcie na zawartość rejestru umożliwia wpisanie nowej wartości.
Zmiany muszą być potwierdzone klawiszem Enter.
- Pierwszy wiersz pokazuje stan czterech najbardziej znaczących bitów rejestru Flag.
Ich stan można również modyfikować.
Panel rejestrów głównych (main register file)
- Kliknięcie na zawartość rejestru umożliwia wpisanie nowej wartości.
Zmiany muszą być potwierdzone klawiszem Enter.
Sterowanie programem
- Zamknięcie okna debugera wznawia wykonywanie programu bez żadnego śledzenia.
- Wciśnięcie klawisza [Run] w grupie Single step powoduje wykonanie jednego rozkazu maszynowego.
W tym trybie ignorowane są zgłoszenia przerwań.
- W celu wykonania określonej ilości rozkazów maszynowych należy wpisać żądaną wartość (dziesiętnie) do pola Number of steps a następnie wcisnąć przyporządkowany klawisz [Run].
- Panel Breakpoint umożliwia zdefiniowanie pułapki, tzn. wartości licznika programu, której osiągnięcie powoduje wstrzymanie wykonywania programu i ponowne wywołanie okna debugera.
Niektóre parametry emulatora można dostosować do indywidualnych potrzeb modyfikując plik pb1000.ini za pomocą dowolnego edytora tekstowego.
Opis zawartości tego pliku:
OscFreq = 910
- Ta wartość definiuje częstotliwość zegara emulowanego procesora.
OptionCode=255
- Ta wartość definiuje Option Code podłaczonego urządzenia peryferyjengo.
Powinna być równa 255 (dla samodzielnej pracy kalkulatora, bez urządzeń peryferyjnych) lub 85 (do wspólpracy z emulatorem stacji dysków MD-100).
Address=127.0.0.1
- Ta wartość definiuje adres IP hosta serwera udostępniającego emulowaną stację dysków (FDD).
Zwykle jest to lokalny komputer.
Port=7420
- Ta wartość definiuje port serwera FDD z którego kalkulator ma korzystać.
W celu usunięcia emulatora wystarczy skasować podkatalog w którym został zainstalowany.
Program nie dokonuje w systemie żadnych zmian poza swoim podkatalogiem.
- W programie użyty został darmowy komponent ThreadedTimer, którego autorem jest Carlos Barbosa.
- Dźwięk nie jest jeszcze obsługiwany.
- Nie jest obsługiwana funkcja przewijania komendy $8 sterownika LCD.
- Mogą być błędy w wyniku niedokładności rekonstrukcji zawartości wewnętrznej pamięci ROM.
pb1000et.zip - teksty źródłowe i kody wykonywalne, DOS lub Windows (w okienku DOS)
Program przesyłający pliki pomiędzy komputerem PC i obszarem ramdysku w obrazie pamięci RAM używanym przez emulator.
Sposób użycia:
ramtrans.exe [-n] <komenda> <opcje> <parametry>
- Program musi być umieszczony w tym samym katalogu co pliki obrazu pamięci RAM
ram0.bin
oraz ram1.bin
- Nazwy plików w ramdysku mają 8 znaków + 3 znaki rozszerzenia.
Duże i małe litery w nazwach plików są rozróżniane, ponadto mogą występować znaki niedozwolone w komputerze PC.
- Wzorce nazwy plików w ramdysku zawierające wieloznaczniki powinny być umieszczone w cudzysłowie żeby zapobiec ich interpretacji przez powłokę.
Lista komend
- dir <opcje> <wzorzec_nazwy_pliku>
-
- Wyświetlenie zawartości katalogu ramdysku.
W przypadku podania wzorca nazwy wyświetlane są tylko pliki pasujące do wzorca.
Przykłady:
- wszystkie pliki: ramtrans dir
- tylko wybrane pliki: ramtrans dir "*.BAS"
- type <opcje> <nazwa_pliku>
-
- Wyświetlenie zawartości pliku w postaci szesnastkowej lub jako tekst, zależnie od typu pliku (binarny lub ASCII).
Programy BASIC są dekodowane z wewnętrznego formatu do zwykłej, tekstowej postaci.
Przykłady:
- stokenizowany program BASIC TEST.BAS jako tekst:
ramtrans type -a TEST.BAS
- szesnastkowy wydruk wszystkich plików o rozszerzeniu .BIN:
ramtrans type -b "*.BIN"
- get <opcje> <nazwa_pliku_na_ramdysku> [<nazwa_pliku_na_PC>]
-
- Transfer pojedynczego pliku z ramdysku do komputera PC.
Gdy nie jest podana nazwa pliku na komputerze PC, kopiowany plik zachowuje oryginalną nazwę.
Przykłady:
- pojedynczy plik PI.BAS: ramtrans get -i pi.bas
- stokenizowany program BASIC PI.BAS jako tekst:
ramtrans get -a -i pi.bas pi.txt
- mget <opcje> <wzorzec_nazwy_pliku>
-
- Transfer wielu plików z ramdysku do komputera PC.
Przykłady:
- kopiowanie do lokalnego katalogu:
ramtrans mget "P*.BAS"
- kopiowanie do innego katalogu (nazwa podana po opcji -d):
ramtrans.exe mget -d c:\windows\temp\ "*.BIN"
- put <opcje> <nazwa_pliku_na_PC>
[<nazwa_pliku_na_ramdysku>]
-
- Transfer pojedynczego pliku z komputera PC do ramdysku.
Gdy nie jest podana nazwa pliku na ramdysku, kopiowany plik zachowuje oryginalną nazwę.
Należy określić typ kopiowanego pliku za pomocą opcji -t, w przeciwnym razie program wybierze go na podstawie rozszerzenia nazwy.
Przykład:
- opcja -u zamienia małe litery w nazwie na duże:
ramtrans put -u pi.asc
- mput <opcje> <nazwy_plików>
-
- Funkcja podobna do put, ale kopiuje wiele plików.
- del <opcje> <wzorzec_nazwy_pliku>
-
- Usunięcie pliku o podanej nazwie z ramdysku.
- ren <opcje> <poprzednia_nazwa> <nowa_nazwa>
-
- Zmiana nazwy pliku na ramdysku.
Lista opcji
- -i
- Ignoruje wielkość liter w nazwach plików na ramdysku.
- -l
- Zamienia duże litery w nazwach plików na małe.
- -u
- Zamienia małe litery w nazwach plików na duże.
Ta opcja jest zalecana przy kopiowaniu plików na ramdysk, wygodniej się wtedy z nich korzysta.
- -tX
- Ustawienie typu pliku na X (B, M, S lub liczba szesnastkowa).
Pliki w komputerze PB-1000 mają dodatkowy atrybut (typ pliku), który pozwala na zastosowanie właściwej akcji po wybraniu pliku z menu:
- S - pliki tekstowe, czyli rekordy MEMO, skrypty źródłowe programów w asemblerze, pliki przesyłane przez RS-232C oraz programy BASIC zapisane za pomocą SAVE,A.
Poszczególne wiersze tekstu oddzielone są parą kodów CR+LF, zakończone kodem Ctrl-Z.
- M - Programy maszynowe (np. wygenerowne przez wbudowany asembler) oraz pliki binarne (np. zapisane za pomocą BSAVE).
- B - programy BASIC w wewnętrznym formacie.
Użycie tej opcji jest konieczne przy kopiowaniu plików do ramdysku.
- -b
- Ustanowienie binarnego trybu transmisji.
Ta opcja powinna być wybrana przy transmisji stokenizowanych programów BASIC oraz innych plików binarnych.
Uwaga: program ramtrans nie zachowuje informacji o adresie ładowania oraz startu programów maszynowych.
Do tego celu należy używać odpowiednich formatów plików (np. PBF) razem z właściwym programem ładującym (np. PBFTOBIN dołączonym do asemblera HD61).
- -a
- Ustanowienie tekstowego trybu transmisji.
Ta opcja powinna być wybrana przy transmisji plików tekstowych z komputera PC, ponieważ wstawia właściwe sekwencje końca wierszy (CR+LF) i końca pliku (Ctrl-Z).
Nadaje się również dla programów maszynowych w formacie PBF.
- -n
- Zmiany nie są zapisywane do obrazu pamięci RAM, przydatne dla testów.
Podziękowania
- Przedstawiony program jest adaptacją programu md100, którego autorem jest Marcus von Cube (podobna funkcja, ale działa z dyskietkami zapisanymi przez stację dysków MD-100 lub ich obrazami).