Piotr "Różyk" Różycki opowiada:
Pod wpływem newsa o sterowaniu za pomocą Atari, i moich wynurzeń na
temat rozkodowywania radia, otworzyła mi się w głowie klapka i z
niepamięci wypłynęło kilka projekcików, które uruchomiłem na moim
sprzęcie dwadzieścia lat temu: termostat do akwarium,
podsłuchiwacz, miernik rezystorów, rozpoznawacz nagrań muzycznych,
tester cyfrowych układów scalonych.
1. Termostat do akwarium
Wykorzystałem wejście wiosełek (A/C) do podłączenia termistora
zanurzonego w akwarium. Reszta to przekaźnik podłączony przez
transoptor izolujący galwanicznie sieć od komputera i prosty
program w Basicu.
2. Podsłuchiwacz
W celu ułatwienia pracy na komputerze i pozbycia się delikatnego
szumu z telewizora, podczas pisania programu do testowania
kursantów na prawo jazdy (pisałem dwa miesiące wakacji dzień w
dzień po kilka godzin), dorobiłem wzmacniacz stawiany na Atari
podłączany przez DIN z tyłu komputera. Wzmacniacz był z małego
rosyjskiego radyjka o nazwie Maximka (Максимка). Atari tak
przerobione mogło pracować też bez telewizora i dalej miałem
dźwięk. Wykorzystałem to w śmieszny sposób. Do wejścia analogowego
podłączyłem mikrofon z przedwzmacniaczem, a na komputerze
zapuściłem program wykorzystujący syntezator SAM. Przez kilka dni w
domu było cicho „jak makiem zasiał” ponieważ po każdym głośniejszym
dźwięku Atari odzywało się głośno protestując. Pamiętam nawet tekst
– „Proszę o ciszę, boli mnie głowa!”
3. Miernik rezystorów
Wejście wiosełek dawało skromną, ale jednak, możliwość pomiaru
rezystancji. W czasach kiedy jeszcze nie miałem miernika
uniwersalnego, używałem czasem Atari do selekcji rezystorów z
wytartymi oznaczeniami.
4. Rozpoznawacz utwórów muzycznych
Przez to samo wejście wprowadziłem sygnał analogowy z magnetofonu.
Program w Basicu próbkował ten sygnał przez pewien czas (chyba to
było 10-15 sekund) i zapisywał charakterystykę utworu w bazie wraz
z jego nazwą podawaną z klawiatury. Po nauczeniu kilkunastu nagrań
robiłem próby z rozpoznawaniem przez Atari puszczanego kawałka.
Powiem, że byłem zaskoczony, ponieważ system DZIAŁAŁ! Fajnie było
pokazać kolegom jak Atari „słucha” przez chwilę przeboju, a potem
wyskakuje jego nazwa. Co ciekawe, czytałem w tym roku o podobnym
patencie na telefony komórkowe. Po nagraniu kawałka utworu i
przesłaniu gdzieś tam otrzymujesz zwrotnie jego nazwę. Miło
wiedzieć, że byłem szybszy o jakieś 20 lat :).
5. Rozkodowywanie radia samochodowego
Sam kiedyś rozbudowałem moje 800XL o dodatkowe we/wy i rozkodowałem
radio samochodowe kolegi (legalne) takim wynalazkiem. Trwało to dwa
dni, prądem czasem migali, więc system zapisywał co jakiś czas
postępy prac na magnetofonie. Co do schematu, to był dość prosty,
do odtworzenia pewnie. Były to jakieś transoptorki podłączone do
portów joysticka plus mojego dodatkowego portu joysticka
(wykorzystałem nieużywane nogi PB2-PB6 z PIA). Ogólnie metoda
rozkodowywania była prymitywna, ale co ciekawe skuteczna. Ponieważ
radio nie blokowało się na stałe po wpisaniu błędnego kodu (chyba
na kilkanaście sekund, nie pamiętam) można było zastosować metodę
brute force. Podłączyłem się pod klawisze do wpisywania kodu (chyba
4 cyfry) i Atari wstukiwało pracowicie kolejne kombinacje.
Wiedziałem od kolegi, że po włączeniu radia zaświecało się
wszystko, łącznie z podświetleniem wyświetlacza. Zablokowane radio
nie podświetlało. Co do genezy potrzeby rozkodowywania: kolega
chyba po prostu nie zapisał sobie kodu i zapomniał, bo nie wyjmował
radia z kieszeni. Dopiero po "padzie" akumulatora sprawa wyszła.
Kontynuując... : Do jednej z żaróweczek podpiąłem się i Atari
"polowało" na kod, który da "iluminację". Jak widać proste aż do
bólu. Mimo tego byłem strasznie dumny z sukcesu. To w końcu moje
Atari plus inwencja pokonały zabezpieczenie. A kolega jakiego
respektu nabrał :-).
10 P=PEEK(54018):POKE 54018,P-4
20 POKE 54016,247
30 POKE 54018,P
40 TYS=1:SET=1:DZI=1:JED=1
50 GOSUB 1000:FOR T=1 TO 400:NEXT T
60 REM
70 FOR C=1 TO TYS:GOSUB 1010:NEXT C
80 GOSUB 1020
90 REM
100 FOR C=1 TO SET:GOSUB 1010:NEXT C
110 GOSUB 1020
120 REM
130 FOR C=1 TO DZI:GOSUB 1010:NEXT C
140 GOSUB 1020
150 REM
155 REM
160 FOR C=1 TO JED:GOSUB 1010:NEXT C
170 GOSUB 1020
180 REM
190 IF PEEK(54016)=0 THEN CZEK=CZEK+1:GOTO 200
195 CZEK=0:FOR T=1 TO 300:NEXT T:GOTO 210
200 IF CZEK>50000 THEN GOTO 10000
205 GOTO 190
210 JED=JED+1
220 IF JED=11 THEN JED=1:DZI=DZI+1
230 IF DZI=11 THEN DZI=1:SET=SET+1:POKE 764,8:OPEN #1,8,0,"C:":PUT
#1,TYS:PUT #1,SET:PUT #1,DZI:PUT #1,JED:CLOSE #1
240 IF SET=11 THEN SET=1:TYS=TYS+1
250 IF TYS=11 THEN STOP
260 ? TYS;" ";SET;" ";DZI;" ";JED;" ** ";:GOTO 50
1000 POKE 54016,1:FOR T=1 TO 50:NEXT T:POKE 54016,0:RETURN
1010 POKE 54016,4:FOR T=1 TO 50:NEXT T:POKE 54016,0:FOR T=1 TO
50:NEXT T:RETURN
1020 POKE 54016,2:FOR T=1 TO 50:NEXT T:POKE 54016,0:FOR T=1 TO
150:NEXT T:RETURN
10000 ? "HURRA MAM TEN CHOLERNY KOD!!!"
10010 ? "TEN KOD TO
-->";TYS;"......";SET;"......";DZI;"......";JED
10020 FOR T=1 TO 4:POKE 764,8:OPEN #1,8,0,"C:":PUT #1,TYS:PUT
#1,SET:PUT #1,DZI:PUT #1,JED:CLOSE #1:NEXT T
6. Tester układów scalonych
Zgrywając program do odkodowywania radia natrafiłem na kasecie na
inny mój programik w Basicu. Okazuje się, że kasety są trwalsze od
dyskietek (niepowodzenie z wczytywaniem programu do testowania
kierowców!), trzeba tylko sporo pokręcić głowicą w magnetofonie. Po
wczytaniu i obejrzeniu zrozumiałem, do czego potrzebne mi było małe
ustrojstwo, które prezentuję na fotografii poniżej. To był tester
cyfrowych układów scalonych! Zupełnie zapomniałem, że coś takiego
zrobiłem… Tester był używany do siedmiu typów scalaka, ale mógł z
powodzeniem testować inne, wystarczyło dopisać w liniach DATA
tablice prawdy. Oczywiście zasilanie musiało być na tych samych
nóżkach, ale większość TTL’i wtedy tak miała. Tester używał
dodatkowego portu, używającego niewykorzystane nóżki PIA,
wspominałem o tym przy nowince o tokarkach.

5 POKE 54019,PEEK(54019)-4:POKE 54017,255:POKE
54019,PEEK(54019)+4:POKE 54017,129
10 DIM A$(8),B$(8),WYA$(8),WYB$(8),TA$(8),TB$(8)
20 GRAPHICS 0
30 ? "Wybierz typ scalaka :"
40 ? :? "1 - 7400,2 - 7401"
50 ? :? :INPUT NR:IF NR<1 OR NR>2 THEN 50
55 RESTORE 1000+NR*10
60 READ TA$,TB$:TA=0:TB=0
70 FOR TP=1 TO 8
80 IF TA$(TP,TP)="X" THEN 100
90 TA=TA+VAL(TA$(TP,TP))*2^(TP-1)
100 IF TB$(TP,TP)="X" THEN 120
110 TB=TB+VAL(TB$(TP,TP))*2^(TP-1)
120 NEXT TP
200 P=PEEK(54018)
210 POKE 54018,P-4
220 POKE 54016,TA
230 POKE 54018,P
240 P=PEEK(54019)
250 POKE 54019,P-4
260 POKE 54017,TB
270 POKE 54019,P
280 POKE 54017,193:REM WLACZ ZASILANIE
300 READ LT
310 FOR TEST=1 TO LT
320 READ A$,B$,WYA$,WYB$
500 A=0:B=0:WYA=0:WYB=0
510 FOR T=1 TO 8
520 IF A$(T,T)="X" THEN 540
530 A=A+VAL(A$(T,T))*2^(T-1)
540 IF B$(T,T)="X" THEN 560
550 B=B+VAL(B$(T,T))*2^(T-1)
560 IF WYA$(T,T)="X" THEN 580
570 WYA=WYA+VAL(WYA$(T,T))*2^(T-1)
580 IF WYB$(T,T)="X" THEN 600
590 WYB=WYB+VAL(WYB$(T,T))*2^(T-1)
600 NEXT T
700 POKE 54016,A
710 POKE 54017,B
720 IF WYA=PEEK(54016) AND WYB=PEEK(54017) THEN 800
730 POKE 54016,0:POKE 54017,129
740 ? :? "SCALAK JEST BAD!!!"
750 FOR OP=1 TO 2000:NEXT OP
760 RUN
800 NEXT TEST
900 POKE 54016,0:POKE 54017,129
910 ? :? "SCALAK JEST CACY!!!!"
920 FOR OP=1 TO 2000:NEXT OP
930 RUN
1010 REM ******** 7400 ********
1011 DATA 11011001,11101111,4
1012 DATA 00X00XX0,100X0011
1013 DATA 00100110,10010011
1014 DATA 01X01XX0,101X0111
1015 DATA 01101110,10110111
1016 DATA 10X10XX1,100X1011
1017 DATA 10110111,10011011
1018 DATA 11X11XX1,101X1111
1019 DATA 11011001,10101111

5 POKE 54019,PEEK(54019)-4:POKE 54017,255:POKE
54019,PEEK(54019)+4:POKE 54017,129
10 DIM A$(8),B$(8),WYA$(8),WYB$(8),TA$(8),TB$(8)
20 GRAPHICS 0
30 ? "Wybierz typ scalaka :"
40 ? :? " 1 - 7400, 7403, 7437, 7438 "
41 ? " 2 - 7401 "
42 ? " 3 - 7402 "
52 ? "12 - 7472 "
58 ? :? :INPUT NR:IF NR<1 OR NR>12 THEN 58
59 RESTORE 1000+NR*10
60 READ TA,TB
200 P=PEEK(54018)
210 POKE 54018,P-4
220 POKE 54016,TA
230 POKE 54018,P
240 P=PEEK(54019)
250 POKE 54019,P-4
260 POKE 54017,TB
270 POKE 54019,P
280 POKE 54017,193:REM WLACZ ZASILANIE
290 REM FOR OP=1 TO 50:NEXT OP
300 READ LT
310 FOR TEST=1 TO LT
315 ? "TEST nr ";TEST;" - ";
320 READ A,B,WYA,WYB
700 POKE 54016,A
710 POKE 54017,B
720 IF WYA=PEEK(54016) AND WYB=PEEK(54017) THEN 800
730 POKE 54016,0:POKE 54017,129
740 ? :? "SCALAK JEST BAD!!!"
750 FOR OP=1 TO 2000:NEXT OP
760 RUN
800 ? "OK"
810 NEXT TEST
900 POKE 54016,0:POKE 54017,129
910 ? :? "SCALAK JEST CACY!!!!"
920 FOR OP=1 TO 2000:NEXT OP
930 RUN
1010 REM ******** 7400 ********
1011 DATA 155,247,4
1012 DATA 0,193,100,201
1013 DATA 18,229,118,237
1014 DATA 137,209,237,217
1015 DATA 155,245,155,245
1020 REM ******** 7401 ********
1021 DATA 246,219,4
1022 DATA 0,193,9,229
1023 DATA 164,209,173,245
1024 DATA 82,201,91,237
1025 DATA 246,217,246,253
1030 REM ******** 7402 ********
1031 DATA 246,219,4
1032 DATA 0,193,9,229
1033 DATA 164,209,164,209
1034 DATA 82,201,82,201
1035 DATA 246,217,246,217
1120 REM ******** 7472 ********
1121 DATA 159,255,11
1122 DATA 0,225,32,225,2,193,66,193
1123 DATA 138,237,202,237,138,253,202,253
1124 DATA 138,237,170,237,158,233,190,233
1125 DATA 158,249,190,249,158,233,222,233
1126 DATA 158,237,222,237,158,253,222,253
1127 DATA 158,237,190,237
Załączam wszystkie posiadane
źródełka dla zaspokojenia
ewentualnej ciekawości. Chodzą w najzwyklejszym Atari Basic:
- RADIO.BAS – rozkodowywanie radia
- TTL1.BAS – tester scalaków wersja 1
- TTL2.BAS – tester scalaków wersja 2
To tyle na teraz, jak jeszcze coś sobię przypomnę dam znać.
Pamiętam, że sporo kombinowałem, coś jeszcze pewnie do mnie wróci z
pamięci...