Słowo kluczowe: cp/m


3 stycznia 2019 (czwartek), 00:11:11

Jak z ZX-Spectrum zrobić komputer - skan artykułu z gazety

Kolega z Muzeum Historii Komputerów i Informatyki znalazł starą gazetę i zeskanował mi mój artykuł z 1985? roku, a więc z przed 33 lat. Fajnie.

jak-z-zx-spectrum-skan.pdf

Pierwsza notka o tej mojej działalności jest tu: Jak z ZX-Spectrum zrobić komputer


Kategorie: informatyka, _blog


Słowa kluczowe: zx-spectrum, cp/m, klub eniac, ds ondraszek, politechnika śląska


Pliki


Komentarze: (0)

Skomentuj notkę
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.


Kategorie: programowanie, informatyka, osobiste, _blog


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


Pliki


Komentarze: (0)

Skomentuj notkę
3 listopada 2009 (wtorek), 09:05:05

Jak z ZX-Spectrum zrobić komputer

Ta notka to jakiś ślad wydarzeń z 1985 roku. Po prostu gdzieś w necie znalazłem angielskie streszczenie mojego artykułu, wydanego jako ksero w 200 egz. a potem przedrukowanego przez jedną z pierwszych gazet komputerowych w tym kraju.

Streszczenie to znalazłem tu:
http://8bit.yarek.pl/upgrade/zx.eniac/index.html a wygląda ono tak (bo cytuję w całości). (dopisek z 2019 - w plikach jest załącznik z PDF, a jest też druga notka na ten temat, zawierająca skan mojego artykułu z Bajtka -> Jak z ZX-Spectrum zrobić komputer - skan artykułu z gazety)

ENIAC'owe Spectrum

Upgrade described in Informik III/1987, in article "Jak z ZX SPECTRUM zrobić komputer. Zmieniamy architekturę komputera." ("How to make a computer from ZX SPECTRUM. We change architecture of computer.") by Wojciech Apel.

The upgrade is very interesting. Especially because it was designed in year 1985, the same time when ZX Spectrum 128K.

A latch was added as a port at 62 (#3E) address (ULA is disabled for A7=0 and A6=0). Ouputs of this latch are called S0, S1, S2, S3, S4 (in tables shown also as binary values range %00000..%11111). Also there are two extra switches to select confuguration. First of them is called TRYB and selects between ZX and CP/M modes. Second switch is called BANK and selects 32kB bank. As a result there are several possible configurations...

Memory map after upgrade

Table 1. Switch TRYB set to ZX.
Section Memory bank
D
(#C000..#FFFF)
  URAM3
S4=1 & BANK=1
URAM1
S4=0 | BANK=0
C
(#8000..#BFFF)
URAM2
S4=1 & BANK=1
URAM0
S4=0 | BANK=0
B
(#4000..#7FFF)
VRAM  
A
(#0000..#3FFF)
EPROM
S0=0
ROM
S0=1

Table 2. Switch TRYB set to CP/M.
Section Memory bank
D
(#C000..#FFFF)
  URAM3  
C
(#8000..#BFFF)
URAM2
B
(#4000..#7FFF)
VRAM
S2=0
%xx0xx
URAM1
S2=1
%xx1xx
A
(#0000..#3FFF)
EPROM
S0=0
%xxxx0
ROM
S0=1 & S1=0
%xxx01
URAM0
S0=1 & S1=1 & S3=0
%x0x11
URAM0*
S0=1 & S1=1 & S3=1
%x1x11

URAM0, URAM1, URAM2, URAM3 - 4 × 16kB "upper" RAM banks
VRAM - 16kB "lower" RAM with screen
ROM - original ROM
EPROM - 4kB or 8kB boot EPROM
URAM0* - with write protection

Similar upgrade

Please have a look for a link to alternative ROMs balow and the 80-LEC.ROM there. It has support for 32kB bank in lower half of memory, switched by bit 0 of #FD port. Data can be copied with MOVE command and strange syntax.

Missed idea

It is incredible, how easy could the ZX Spectrum 48K be upgraded to get 64kB RAM all RAM mode! (The ROM and video RAM are in separate bank.) It was enough to replace 32kB RAM with 64kB chips and connect A15 to multiplexer input (in place of jumper). But A15 line must be separated with 680ohm resistor - the ULA A15 input and the top memory logic circuit must be behind it.

Then we add 74LS74, of which we need only one latch is needed. The /R input should be connected to /RESET line, D input to one of lines D5..D7 and /CLK to /WR ORed /IORQGE ORed (with 680ohm resistor and diode). So the latch (1bit register) expands the 254 port used by ULA. When 0 is written, the normal 16kB ROM + 48kB RAM architecture is used. But when 1 is written to latch, its non-inverted output forces (with diode) high state on the part of A15 line sepated by resistor. So there's no access to ROM and VRAM, while "upper" memoy decoder activates RAM for all 64kB of address space.

Needed parts: eigth 4164 chips, one 74LS74, two 680ohm resistors, two 1N4148 diodes and some wires. Perhaps a switch to lock this feature for better compatibility with some strange written software, that uses IN A,(#FE): OUT (#FE),A...


I niedawno pojawiło się to jeszcze raz, tyle że po polsku:

ENIAC'owe Spectrum

Przeróbka opisana w Informiku III/1987, w artykule "Jak z ZX SPECTRUM zrobić komputer. Zmieniamy architekturę komputera." Wojciecha Apela.

Przeróbka jest bardzo interesująca. Szczególnie dlatego, że powstała w 1985 roku, czyli w tym samym czasie co ZX Spectrum 128K.

Został dodany zatrzask jako port pod adresem 62 (#3E - ULA jest wyłączana dla A7=0 i A6=0). Wyjścia tego zatrzasku zostały nazwane S0, S1, S2, S3, S4 (w tabelach pokazane również jako wartości binarne w zakresie %00000..%11111). Są również dwa dodatkowe przełączniki do wybierania konfiguracji. Pierwszy z nich nazwany został TRYB i wybiera pomiędzy trybami pracy ZX a CP/M. Drugi - BANK wybiera sprzętowo jeden z 2 banków 32kB RAM. W rezultacie możlwie jest kilka możliwych konfiguracji...

Mapa pamięci po przeróbce

Tabela 1. Przełącznik TRYB ustawiony na ZX.
Sekcja Bank pamięci
D
(#C000..#FFFF)
  URAM3
S4=1 & BANK=1
URAM1
S4=0 | BANK=0
C
(#8000..#BFFF)
URAM2
S4=1 & BANK=1
URAM0
S4=0 | BANK=0
B
(#4000..#7FFF)
VRAM  
A
(#0000..#3FFF)
EPROM
S0=0
ROM
S0=1

 

Tabela 2. Przełącznik TRYB ustawiony na CP/M.
Sekcja Bank pamięci
D
(#C000..#FFFF)
 
URAM3
 
 
C
(#8000..#BFFF)

URAM2
 
B
(#4000..#7FFF)
VRAM
S2=0
%xx0xx
URAM1
S2=1
%xx1xx
A
(#0000..#3FFF)
EPROM
S0=0
%xxxx0
ROM
S0=1 & S1=0
%xxx01
URAM0
S0=1 & S1=1 & S3=0
%x0x11
URAM0*
S0=1 & S1=1 & S3=1
%x1x11


URAM0, URAM1, URAM2, URAM3 - 4 × 16kB "górne" banki RAM
VRAM - 16kB "dolny" RAM z ekranem
ROM - oryginalny ROM
EPROM - 4kB albo 8kB EPROM startowy
URAM0* - z zabezpieczeniem zapisu

Podobna przeróbka

Zobacz alternatywne ROMy w linkach poniżej, a tam 80-LEC.ROM. Obsługuje on bank 32kB w dolnej połowie pamięci, przełączany przez bit 0 portu #FD. Dane mogą być skopiowane instrukcją MOVE z nieco pogmatwaną składnią.

Stracony pomysł

Jest to niesamowite, jak prosto było przerobić ZX Spectrum 48K na 64kB RAM w całej przestrzeni adresowej! (Co oznacza ROM oraz pamięć ekranu w oddzielnym banku.) Wystarczyło zastąpić 32kB RAM układami 64kB i podłączyć A15 do wejścia multipleksera (zamiast zworki). Nimniej linia A15 musiałaby być rozdzielona rezystorem 680om - wejście A15 ULA oraz logika górnej pamięci musiały by być za rezystorem.

Następnie dodajemy 74LS74, z którego potrzebny jest jeden zatrzask. Wejście /R powinno być podłączone do linii /RESET, wejście D do jednej z linii D5..D7, a /CLK do /WR sumowanego z /IORQGE (bramką OR z rezystora i diody). Tak więc zatrzask (rejest jednobitowy) rozszerzał by port 254 używany przez ULA. Jeśli zapisane zostaje 0, używana jest normalna architektura 16kB ROM + 48kB RAM. Ale gdy do zatrzasku zostanie zapisane jest 1, jego niezanegowane wyjście wymusza (diodą) stan wysoki na tej części linii A15, która oddzielona jest rezystorem. Nie ma więc dostępu do ROM ani pamięci ekranu, a dekoder "górnej" pamięci włącza RAM dla calej przestrzeni 64kB.

Potrzebne części: osiem układów 4164, jeden 74LS74, dwa rezystory 680ohm, dwie diody 1N4148 i nieco drutu. Być może wyłącznik blokujący nową właściwość dla większej zgodności z niektórymi dziwnie napisanymi programami, które wykonują IN A,(#FE): OUT (#FE),A...


Kategorie: informatyka, _blog


Słowa kluczowe: zx-spectrum, cp/m, klub eniac, ds ondraszek, politechnika śląska


Pliki


Komentarze: (2)

Henryk, December 30, 2009 13:54 Skomentuj komentarz





...Wzbudza zainteresowanie.Proszę o kontakt.

jamjest, January 8, 2012 10:31 Skomentuj komentarz


Witam!
Dziś 8-01-2011 trafiłem w necie na Twoją stronę . Bardzo ciekawa!
Jednocześnie chcę osobiście podziękować za mnóstwo frajdy z eniacowego Spectrum ,które przerobiłem po artykule z informika ;-)
Było kilka błędów w schemacie , jak zwykle w przedrukach, ale poprawiłem i ten egzemplarz spektrusia mam działajacy do dziś ,choć stacja Timex padła...
Dzięki za ideę. Praca z takim spektrusiem to full radocha. Każdy loader hakerski i program został prze ze mnie dzieki sztuczkom pamięci "odbezpieczony" i przerobiony :-)
Szczęścia !
Mariusz
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ć.