30 grudzień 2012 (niedziela), 13:15:15

Dzień z CP/M 2.2

Ta notka musi być napisana inną czcionką, czym starszą tym lepsza.



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


Grupy tematyczne: programowanie, informatyka, osobiste, _blog


Słowa kluczowe: cpm, cp/m, cp/m 2.2, turbopascal, dbase, altair, z-80, 8080


Komentarze: (0)

Skomentuj notkę

Disclaimers :-) bo w stopce coś wyglądającego mądrze można napisać. Wszystkie powyższe notatki są moim © wymysłem i jako takie związane są ze mną. Ale są też materiały obce, które tu przechowuję lub cytuje ze względu na ich dobrą jakość, na inspiracje, bądź ilustracje prezentowanego lub omawianego tematu. Jeżeli coś narusza czyjeś prawa - proszę o sygnał abym mógł czym prędzej naprawić błąd i naruszeń zaniechać.