Ta notka musi być napisana inną czcionką, czym starszą tym lepszą. Na koniec uwaga z lutego 2018 roku.
Zabawy systemem CP/M 2.2 na emulatorze Altaira 8800
===================================================
Dobra zabawa jest możliwa dzięki pracy Petera Schorn - jak to dobrze,
że naukowcy mają dużo czasu. A więc ten Peter zrobił symulator różnych
procesorów, potem dołożył do tego symulator środowisk, napisał to
w standardowym C, skompilował i dzięki temu mamy Intela 8080 (albo
Z-80 jak kto woli) włożonego w skrzynkę Altaira, z przypiętymi wszystkimi
peryferiami, między innymi napędami dyskietek emulowanymi przez pliki
z rozszerzenie .dsk
A więc odpalić symulator, przyłączyć dysk z CP/M, wystartować i cieszy się
tym, o czym się w latach 80-tych czytało, a co było z uwagi na komunizm
niedostępne.
Wszystko opisane jest tu:
http://www.schorn.ch/altair.html
Aby zacząć się bawić należy odpalić symulator altairz80 - ale uwaga, bo
na Maca są dwa i jeden z nich się uruchamia w innym katalogu.
W symulatorze wykonuje się komendy montowania sprzętu, w wypadku CP/M2.2 wystarczy
attach dsk cpm2.dsk
boot dsk
Są też inne ciekawe dyskietki, np. tą z aplikacjami można sobie zamontować
w drugim napędzie komendą
attach dsk1 app.dsk
po czym w systemie można śmiało zrobić:
B:
b>dir
Są też dyskietki z WordStarem, dBasem II, Multiplanem, TurboPascalem - nic tylko szaleć
poznając te kultowe dzieła. Podmontować na C:, D: i szaleć, a są przykłady plików!
Ważne, że z systemu do emulatora wchodzi się poprzez Ctrl-E (nie wiem jak przekazać
Ctrl-E do systemu i to jest problem w edytorach pełnoekranowych). Z emulatora do systemu
przechodzi się albo bootując system w określonego dysku, albo komendą G, która pewnie
znaczy Go wg. ustawionego w emulatorze PC.
Na dyskietce CP/M są dwa fajne programy: W.COM i R.COM do przenoszenia plików
pomiędzy systemem a systemem na którym stoi emulator.
Jeżeli to przerwanie poprzez Ctrl-E jest problemem (np. w używaniu WordStara) to
zmień to np. na Ctrl-] czyli 1d za pomocą komendy symulatora
d wru 1d
za pomocą komendy
e wru
możesz sprawdzić na jaki kod klawiatury reaguje symulator.
Komendy systemu CP/M
====================
DIR - wiadomo, coś jak dir jak w DOS i ld jak UNIX
TYPE - wypisuje plik na konsoli, bardzo to miłe, chyba to samo jest w DOSie
ERA plik - kasuje plik
REN plik-nowy=plik-stary - zmienia nazwę a to = może dziwić
PIP plik-nowy=plik-stary - kopiuje, przy czym pliki mogą być na rożnych dyskach,
np. PIP B:A.ASM=A.ASM skopiuje z domyślego napędu na napęd B:
ASM - asembler, niestety procka 8080 i nie chce się przełączyć na Z-80
M80 - doskonaly macroasembler Microsofta ale jak się go wywołuje?
MC.SUB - na szczęście jest macro (SUB) do kompilacji i łączenia pod M80
SUMBIT - program do uruchamiania makr (SUB) w systemie - coś jak BAT- file w DOS
ED - edytor liniowy plików tekstowych
MBASIC - BASIC Microsofta, wychodzi się poprzez komendę SYSTEM
ELIZA.BAS - fajny program w BASICu, zrób: load "ELIZA.BAS" i run, wyjście Ctrl-C
DDT - odpluskwiacz, czyli debuger programów. Odlot!
Na tej głównej dyskietce są jeszcze fajne programy:
WM - edytor pełnoekranowy
ZAP - edytor dyskietek, pierwowzór DOSowego xTree i Norton Comandera
WORM - kultowa gierka z wężem - chodzić cyferkami 2,4,6,7
OTELLO - czyli gra w reversi
Edytor ED.COM - minimum informacji
==================================
struktura komendy to nK - gdzie
n - jakaś liczba, najczęściej wierszy, czasem znaków
K - komenda jednoliterowa
Komendy, które opanowałem:
I - wchodzi w tryb dopisywania, a więc tym się tworzy. Koniec przez Ctrl-Z
nA - wczytuje z pliku do bufora edycji n-wierszy
nW - zapisuje z bufora na dysk, czyli do pliku n-wierszy
B - idzie na początek bufora
nT - wyświetla n wierszy od wiersza w którym się stoi
T - wyświetli wiersz na którym stoisz
nL - przesuwa się do przodu lub do tyłu o n-wierszy
n - jak L ale można to L pominąć
nC - przesuwa się o n-znaków w bieżącym wierszu (wiem! szok ale tak jest)
E - koniec z zapisem tego co się zmieniło
Q - inny koniec, porzuca bufor, może odtwarza plik z pliku BAK? nie wiem
DDT.COM - debuger programów, zobacz sobie w system!
===================================================
D - wyświetla w HEX
L - wyświetla w komendach asemblera i8080
komenda może mieć strukturę
D od jakiego adresu, do jakiego adresu - przy czym bez spacji i liczby w hex!
np d0,ff - wyświetla fajny kawałek systemu
A - można wstawiać do komórek komendy pisane w asemblerze 8080
S - można wypełniać komórki danymi, ale w HEX - powodzenia :-) kończy się .
G - można wskoczyć pod zadany adres - i pewnie to będzie koniec zabawy, chyba,
że się opanuje breakpointy
F - wypełnia się obszar danymi
M - przesuwa się obszar w obszar
R - można też załadować jakiś plik, program ale aby potem go zapisać to SAVE
w systemie opanować należy
X - wyświetla stan rejestrów procka jak się coś debaguje
XP - wyświetla i pozwala ustawić rejestr PC - inne rejestry podobnie
Ctrl-C - wyjście z DDT
Pełnoekranowy edytor WM
=======================
- po pierwsze jest plik z pomocą, więc zacznij od
type wm.hlp
- w edytorze ten plik jest dostępny pod Ctrl-J
- edytor to coś jak stary vi - ma tryb ekranowy ale też liniowy jak w ED
- do liniowego wchodzi się poprzez Esc
- do ekranowego wraca komendą V
- w liniowym działają ważne komendy: Q i E aby zakończyć
- w ekranowym
Ctrl-A, S, D, F - chodzi w poziomie jak w WordStar i Turbo-Pascalu :-)
Ctrl-X,E,Z,W,R,C - w pionie
uwaga na Ctrl-E - wchodzi w symulator więc nie używać,
a jak się wejdzie to w symulatorze G, lub zmienić jak napisałem na początku
Ctrl-G - kasuje znak na którym się stoi
Ctrl-O - włącza tryb Insert
- ale ten edytor to pikuś - polecam podmontować na C: WordStara i na nim pracować
Minimum wiedzy o programowaniu pod BDOS i jego usługach
=======================================================
#1. Programy ładują się pod adres 100H i tam są przez system uruchamiane. Pewnie
dlatego programy w asemblerze zaczyna się od dyrektywy
ORG 100H
#2. Asembler ASM kompiluje do pliku HEX, a potem program LOAD zamienia go na COM.
Dziś już nikt nie pojmie dlaczego tak, ale można sobie dla przyjemności zrobić
TYPE na pliku HEX i jest zabawnie.
Zamiast prostego ASM można używać Microsoftowego M80 - ale to wyższa szkoła jazdy,
bo wtedy pod ORG 100H musi być tajemnicze ASEG a linkowaniu przez L80 nie wspominając.
Co ciekawego, ten sam styl narzędzi przeszedł na DOSa, a z niego na Windows, z asemblera
na najważniejsze kompilatory.
#3. Funkcje DOS-a wywołuje się pod adresem 5 - dziwne ale tak to jest. Może dlatego, że
komendy RST w Z-80 gdzieś tam na początek wskazują. W rejestrze C podaje się numer
funkcji DOSa np. funkcja 9 służy do wypisania string-zero wskazywanego w rejestrach DE
na konsoli. O ile pamiętam to to wywołanie niszczy wszystkie rejestry,
więc lepiej sobie zachować.
#4. Program w asemblerze jaki sobie napisałem w pliku hello.mac:
****
;
; Program Hello.Word napisany pod DOS'a systemu CP/M 2.2
; w chwili radosci, przez Wojtka
;
.z80
aseg
bdos equ 5H
ce equ 13
lf equ 10
org 100H
jp start
; nie pamietam czy $ czy tez 0 konczy string
; wiec dam lepiej oba na wszelki wypadek
napis: db cr, lf, "napis Hello Word i juz", "$", 0
start:
; na poczatek nalezy sie przedstawic i cos napisac
; napisze to po DOSowemu, za pomoca String$
ld de, napis
ld c, 9
call bdos
; a teraz napisze cos po swojemu,
; za pomoca wlasne funkcji wypisujacej
ld hl, napis2
call pisznapis
; no i koniec programu - hop do DOSa n
jp 0
;
; procedura wypisywania String0
; argumenty:
; HL - wskaznik do String0
;
pisznapis:
push de
push bc
push af
piszn1: ld e, (hl)
xor a, a
add a, e
jp z, piszn2
ld c, 2
push hl
call bdos
pop hl
inc hl
jp piszn1
piszn2: pop af
pop bc
pop de
ret
napis2: db cr, lf, "To jest drugi napis", 0
end
****
#5. Jak to skompilować? Jest porządny macroasembler Microsofta M80
a do niego jakiś linker i pewnie też biblioteki. Samą kompilację i łączenie
można zrobić takim prostym makrem zapisanym w pliku mcl.sub
****
; compile an assembler program
a:m80 $1,$1=$1/M
A:L80 $1,$1/N/E
ERA $1.REL
type $1.prn
****
a wiec komenda
submit mcl hello
skompiluje, zlinkuje, skasuje śmieci i wyświetli listing kompilacji z raportem
w ostatnich liniach.
Zabawa w TurboPascala
======================
W symulatorze podmontować dysk tp3.dsk i po odpaleniu turbo.com
można wczytać (jako Main) plik hello
Warto przeczytać pllik READ.ME aby przekompilować program:
program hello;
begin
writeln('Hello World!')
end
Uwaga na edytor! Zgodny z WordStar ale wychodzi się przez Ctrl-K D
a więc inaczej niż w WS gdzie jest Ctrl-K Q lub X
Edytor jest śliczny, bo wykorzystuje wiele możliwości terminala VT-100.
Ja widzę pogrubienie, rozjaśnienie (bloki Ctrl-K B, K, C, M), działają
strałki w Macu (pewnie w Windows też).
**************************************************
Uff, już dość tej zabawy, bo mi się AirMac przegrzewa,
ale to była miła noc! Może sobie jeszcze do tego wrócę i jakieś
swoje stare programy w asemblerze skompiluje.
Moja przygoda z Z-80 wyglądała tak:
- na 18 urodziny przyjaciele kupili mi Intela 8080 wiec zacząłem
projektować i lutować komputer, coś jak Altair
- zaprojektowałem kartę VIDEO z TTLach. Miała wyświetlać 64 znaki w 32 wierszach
na telewizorze Junost. Nawet coś tam było widać ale jak to polutowałem to zobaczyłem
swój błąd - trudno się na tym pracowało.
- pamięć RAM, całe 2KB kupili mi znajomi z Niemczech za całą jedną pensję mojego ojca,
który jak na owe czasy zarabiał nieźle.
- pamięć ROM z generatorem znaków załatwiła jakoś koleżanka z Mery-Elzab. Znaki
nie były w ASCII tylko jakoś tak, nie było $ tylko znak rubla. No i litery - tylko duże!
- potem, już na studiach zobaczyłem ZX-81 i straciłem wiarę w moje dłubanie. Kumpel
na swoim kompie miał już uruchomiony "monitor Chroboka" - czyli program, którym można
było wpisywać w HEX w pamięć, a potem zrobić G czyli Go albo JMP. Probowaliśmy
wpisać w niego Basica przedrukowanego w czeskiej gazecie Radio.
- przepracowałem przy produkcji PF-126p w Tychach wakacje, mama dołożyła i kupiłem
sobie ZX-Spectrum. Szczytem programowania w asemblerze był własny Basic,
oraz przerobienie ZX-Basica na system dyskowy jak już miałem własne FDD.
- potem kupiłem do tego napęd FDD na 180KB i uruchomiem na nim
własnego CP/M 2.2 rozwiązując wcześniej problem mapowania pamięci pod 4000H w jakiś
bank. Zabawa w sprzętowanie 8-bitowców była fajna, podłączenie dysków to był wyczyn
a jeszcze oprogramowanie tego.
- na tym moim CP/M raz ujrzałem nawet dBase II i nawet zacząłem się go uczyć, bo chwilę
później znalazłem stałą robotę, w której programowałem w Clipperze na IBM PC/XT
- potem kupiłem sobie swojego PC/XT bo na czymś należało zrobić dyplom i Spectrum
oraz 8-bitowcy zniknęły z mojego życia. Na PC napisałem z rozpędu co najmniej 3 duże
programy w assemblerze, ale assembler 8086 bardzo mi nie pasił, bo Z-80 nauczył
mnie ortogonalnośći.
Gliwice, 29 grudnia 2012 roku,
Wojtek (w34)
wojtek@pp.org.pl
W załącznikach archiwum, a w nim są pliku emulatorów, oraz programów na CP/M, które można zassać i pobawić się tak jak ja się bawiłem. Emulatory dla DOC, Unix i OS, pliki z dyskietkami z różnymi wersjami systemu (CP/M 2.2, CP/M 3.0, CP/Net i inne), oraz kultowe programy dBase II, TurboPascal, WordStar, m80 i l80, oraz asm i debug zwany wtedy jeszcze ddt.