30 grudnia 2012 (niedziela), 13:15:15
Dzień z CP/M 2.2
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.