1

Niedawno poskładałem swojego klona XF551 z flopem 3,5" na płytce od x_angela i w starej obudowie od SF354 (opis i zdjęcia tutaj: http://www.atari.org.pl/forum/viewtopic … 2#p250752).
Jestem zachwycony tym jak działa ta stacja, ale standardowo nie ma żadnych kontrolek, przycisków, wyświetlaczy itp., więc drażniło mnie, że jest jakaś nieobecna, nie ma w niej życia, nie eksponuje się ładnie na biurku. Postanowiłem więc ożywić trochę stację i dodać jej bajerów, żeby uprzyjemniała zachwyt nad nią dodatkowo elementami miłymi dla oka:-)
Drugi powód dodawania bajerów jest taki, że obudowa, którą wykorzystałem do swojej stacji jest podziurawiona przez poprzedniego właściciela, więc chcę też zagospodarować te otwory, żeby naprawić wygląd frontu stacji.
W dawnych czasach nie miałem stacji dyskietek, ale sentymentem darzę CA2001, bo taką miał kolega, pożyczał mi ją nawet czasem. Stąd pomysł na bajery trochę był zainspirowany tym co mamy w CA2001. Postanowiłem przede wszystkim jako rzecz najważniejszą dodać wyświetlacz pokazujący numer aktualnej ścieżki.
Na zdjęciu pokazałem wyświetlacze, które zostaną umieszczone w miejscu okrągłej dziury po lewej stronie stacji. Znalazłem też szare podłużne przyciski od starego sprzętu rtv, które elegancko wpasują się w szczelinę powyżej flopa. Funkcje tych przycisków jeszcze są w fazie koncepcji, bo jest ich mnóstwo i co chwilę zmieniam zdanie:-)

Do rzeczy, bo wpis dotyczyć ma wyświetlacza tracków. Na drugim załączonym zdjęciu pokazałem działający prototyp. W prototypie jest większy wyświetlacz - wygodniejszy do prototypowania, docelowo zostanie zastąpiony tymi małymi.
Sercem układu jest mikrokontroler Attiny2313. Zastosowałem wyświetlacze ze wspólną anodą, które są programowo multipleksowane przez attiny. Anody sterowane są tranzystorami pnp.
Ponieważ stacja dyskietek nie ma żadnej informacji o tym nad jaką ścieżką aktualnie znajduje się głowica, to zasada działania urządzenia musi polegać na tym, że trzeba te ścieżki sobie po prostu samemu liczyć. Do dyspozycji mamy i wykorzystałem sygnały pobierane bezpośrednio ze złącza sygnałowego flopka. Interesujące nas sygnały, to Track0, który przechodzi w stan niski w momencie kiedy głowica znajduje się nad ścieżką zerową. Kolejny sygnał to Step, którego zbocze opadające jest impulsem dla przesunięcia głowicy o jeden track zgodnie z kierunkiem określonym przez kolejny sygnał - Direction (stan niski i wysoki na tej linii określają kierunek ruchu w momencie wystąpienia zbocza sygnału Step).
W attiny zaimplementowałem programowy licznik, który zwiększa się i zmniejsza na podstawie sygnałów Step i Dir. Początkowo zakładałem, że sygnał Track0 będzie inicjował działanie licznika - czyli że poczekamy aż głowica znajdzie się nad trackiem 0 i wówczas zaczniemy dopiero działanie układu. Okazało się jednak w trakcie eksperymentów, że sygnał ten nie jest potrzebny. W momencie włączenia stacji dyskietek nie wiemy nad którą ścieżką jest głowica. Ale stacja żeby mogła cokolwiek zrobić, to zawsze po włączeniu sama zjeżdża na track 0. Wobec tego wystarczyło dodać warunek do licznika, żeby przy zliczaniu w dół porównywał licznik z zerem i jeśli jest zero, to nie zmniejsza licznika. Dzięki temu stacja zjeżdżając w dół do zerowej ścieżki zeruje nam licznik, który już od tego momentu poprawnie pokazuje numery ścieżek. Na starcie programu w attiny licznik jest od razu ustawiony na zero, a więc pokazuje zero do momentu ustawienia głowicy na ścieżce zerowej. Takie rozwiązanie mocno upraszcza program - a działa wszystko bez zarzutu:-)

Projekt planuję udostępnić zainteresowanym osobom, wrzucę tutaj w wątku schematy, oraz opiszę kod programu na attiny, ale na razie jeszcze sporo zmieniam i eksperymentuję, więc na ten moment tylko taka zajawka, temat jest rozwojowy:-)

Aha, gotowy wyświetlacz tracków będzie się nadawał tak na prawdę do dowolnej stacji dyskietek, jak również stacji współpracujących z dowolnym komputerem. Wydaje mi się, że rozwiązanie będzie bardzo uniwersalne.

Post's attachments

Mq_trackDisplay_prototyp.jpg 203.93 kb, liczba pobrań: 2 (od 2019-05-21) 

wyswietlacz_przyciski.jpg 135.69 kb, liczba pobrań: 2 (od 2019-05-21) 

Tylko zalogowani mogą pobierać załączniki.

2 Ostatnio edytowany przez lopez (2019-05-21 10:21:16)

Super, czekam z niecierpliwością na to by zamontowywać u siebie, chociaż ja jeszcze szukam odpowiedniej obudowy do XFki :)

3

Lopez, spoko, to najpierw obudowa, bo do niej sobie później dopasujesz najfajniejsze wyświetlacze w odpowiednim rozmiarze tam gdzie będziesz chciał. Ja kupiłem takie maleństwa, bo na froncie SF354 zostało niewiele miejsca, a wyświetlacze podpasowywałem, żeby zlikwidować tą dziurę po lewej. W jej miejscu wytnę precyzyjnie na ile się da prostokąt pod wymiar tych wyświetlaczy.

Sporą część mojego frontu SF354 zajmuje sam flop. To jest NEC FD1036A, kupiłem go razem z tą obudową po SF354. To jest flop DD 720kB. On jest wysoki, wyższy niż typowe flopy 1,44MB od pecetów, takie wysokie flopy występowały w dawnych czasach, wczesne flopy 3,5" miały takie rozmiary. Flop ten jest bardzo fajny, jest z epoki, ma też szary front, więc pasuje fajnie. Poprawiłem trochę kształty wycięć, żeby lepiej się to wszystko spasowało i ładniej wyglądało. Co do samego flopa, to robił trochę problemy, ale po rozebraniu, gruntownym wyczyszczeniu i przesmarowaniu chodzi teraz jak marzenie, jest cichutki, precyzyjny, czyta/zapisuje/formatuje wszystko super. Tu opisywałem trochę szczegółów i wrzucałem zdjęcia dot. samego flopa: http://www.atari.org.pl/forum/viewtopic.php?id=15794

4

Do oryginalnej XF-ki też to będzie można zamontować?
Od zawsze właśnie mam z nią to samo wrażenie że "jest jakaś nieobecna,[...] " :)

<-- Kontakt przez "E-mail" gdyż albowiem moja skrzynka "PW" jest pełna i zaprawdę nie mam czego usunąć.

--== Kup Pan/i dyskietkę http://www.atari.org.pl/forum/viewtopic.php?id=18887 ==--

5

Dla "ożywienia" stacji (zarówno 1050 jak i XF551) używam SIO2SD. W większości przypadków ładnie pokazuje ścieżki. Tylko jak się odpali turbo to przestaje.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

6

uicr0Bee, tak, klon to wierna kopia XF551. Wyświetlacz będzie działać z każdą stacją, bo podłączamy się bezpośrednio pod sygnały flopa - prościej mówiąc "podglądam" sygnały na złączu 34-pin flopa i liczę ilość kroków wykonywanych przez głowicę.

7 Ostatnio edytowany przez Mq (2019-07-26 20:35:35)

Ok. Wersja podstawowa wyświetlacza tracków jest gotowa. To jest układ uniwersalny, powinien zadziałać bez problemu z każdą stacją dyskietek bez względu na używany komputer. Publikuję kompletną dokumentację potrzebną do budowy takiego wyświetlacza. Od tego momentu każdy może sobie coś takiego zbudować w domowym zaciszu i cieszyć się fajnym gadżetem:-)

Załączam:
- schemat (trackDisplayA.png)
- skompilowany wsad do Attiny2313 (trackDisplayProg.hex)
(fusebity: L:64 H:DF)

Poniżej publikuję kod źródłowy (język c) ze szczegółowym komentarzem, gdyby ktoś miał ochotę doedukować się w programowaniu takich rzeczy, lub też chciałby sobie coś tam dorobić po swojemu.

-----
Edit: zaktualizowałem schemat, wsad do attiny i kod źródłowy - dodana obsługa sygnału Track00

Edit: usunąłem tą wersję kodu źródłowego i wsadu. Aktualna i ostateczna wersja jest załączona w dalszej części wątku w poście nr 47.

Post's attachments

trackDisplayA.png 36.26 kb, liczba pobrań: 3 (od 2019-05-23) 

Tylko zalogowani mogą pobierać załączniki.

8

a skąd mcu wie na której jest ścieżce? step i dir to za mało

przechodze na tumiwisizm

9 Ostatnio edytowany przez Mq (2019-05-22 16:25:12)

Candle nieprawda:-)
Opisałem to we wcześniejszych postach.
Ale jeszcze raz: ustawiam sobie zmienną TrkNr=0. Step i dir określają mi ruch głowicy i zwiększanie lub zmniejszanie zmiennej TrkNr, ale jest tam dodatkowy warunek, że jeżeli aktualnie TrkNr=0, to nie zmniejszamy zmiennej, tylko pozostaje zero.
Stacja dysków, żeby mogła cokolwiek wykonać, to zawsze zjeżdża najpierw na track zero, po to właśnie, żeby wiedzieć na jakiej ścieżce się znajduje i dlatego potrzebuje sygnału, który masz na myśli: Track0. Ja natomiast go nie potrzebuję, ponieważ jak głowica jedzie w dół, to mam cały czas zero, więc licznik nic nie liczy do momentu aż zrówna się nam rzeczywisty track zerowy z naszym zerem zapisanym w zmiennej. Po włączeniu stacji dyskietek zawsze bowiem jest tak, że nie wiadomo nad jaką ścieżką jest głowica, więc stacja musi rozpocząć swoją pracę od zjazdu do zera. Tak że zjeżdża nam do zera nie zmniejszając naszego licznika i w tym momencie już jesteśmy "zsynchronizowani".
Generalnie różnica w myśleniu jest taka, że my tylko wyświetlamy numerki tracków, nie zajmujemy się pozycjonowaniem głowicy, bo to robi już stacja, czy tam komputer. Tak że sygnał Track0 jest potrzebny do pozycjonowania głowicy, żeby nie wyjechała nam na zewnątrz ze stacji:-), ale nie jest nam on w ogóle potrzebny do wyświetlania numeru tracku.

Edit: aha, kluczowe jest też to, że nasz attiny jest zasilany z tego samego źródła co stacja, więc włącza się z zerem jako numer tracku razem ze startem stacji, a stacja oczywiście stojąc na dowolnej ścieżce rozpocznie swoją pracę od zjazdu do zera.

10

włóż sobie dwie dyskietki pod rząd o tej samej gęstości i z tym samym przeplotem i sprawdź czy twój sposób będzie zawsze działał - ja rozumiem, że chcemy być sprytni bo nam zabrakło pinów, ale tutaj - nie rozumiem

przechodze na tumiwisizm

11 Ostatnio edytowany przez Mq (2019-05-22 17:02:51)

Candle, pinów nie zabrakło, jest jeszcze pół scalaka wolnych pinów, a początkowo miałem podpięty Track0 i z niego korzystałem:-) Następnie zacząłem sobie upraszczać procedury, optymalizować i porządkować co niepotrzebne, aż doszedłem do faktu, że da się to zrobić łatwiej.

Trochę nie wiem czego nie rozumiesz. Pojedźmy na przykładach.
1. Ktoś wyłączył stację dysków zatrzymaną na tracku 23.
2. Włączam sobie stację, mój nr początkowy w zmiennej to 00 i tak wyświetlam.
3. Stacja inicjalizuje się, więc zjeżdża do track0 żeby ustalić położenie głowicy. W tym czasie ja cały czas mam 00, bo głowica zjeżdża w dół, a ponieważ mam 00, to nie dekrementuję (mój warunek).
4. Stacja jedzie od tracku 0 w górę na dowolny inny track, więc zwiększa numer i u mnie też się zwiększa numer, jest zawsze ok, a jak się zmniejsza, to u mnie też się zmniejsza i jest ok.

Teraz robię to co zaproponowałeś.
5. Załóżmy, że jesteśmy głowicą na tracku 35 i wyciągamy dyskietkę.
6. Wkładam inną dyskietkę, ale głowica się nie ruszyła i jest nadal na tracku 35.
7. Cokolwiek chcemy zrobić z nową dyskietką, to głowica musi zjechać do tracku 0, ale u nas jest to cały czas zsynchronizowane przecież, więc każdy ruch głowicy powoduje zmianę numeru na wyświetlaczu.

Co innego może się wydarzyć? Możesz podać przykład?

12

gdyby można było łatwo podać przykład, to można by było łatwo dopisać linijkę kodu, który go załatwi, natomiast zakładanie że coś się nie wydarzy, bo nie potrafimy podać przykładu w którym by mogło to kręcenie na siebie bata

przechodze na tumiwisizm

13

Candle napisał/a:

gdyby można było łatwo podać przykład, to można by było łatwo dopisać linijkę kodu, który go załatwi, natomiast zakładanie że coś się nie wydarzy, bo nie potrafimy podać przykładu w którym by mogło to kręcenie na siebie bata

Candle, sorry, ale to co napisałeś jest głupie, pozbawione argumentów i w zasadzie nie na temat, a elektronika i programowanie związane są z naukami ścisłymi, a nie z filozofią, przypadkiem, losem czy też przeznaczeniem:-)

Myślałem, że skoro piszesz w temacie, że "step i dir to za mało", to masz na myśli jakieś konkretne przyczyny dlaczego "step i dir to za mało", a nie że tak Ci się tylko wydaje, więc se napisałeś. Dziwię się tylko, że człowiek, który jest projektantem pisze coś tak niedorzecznego, niepopartego argumentem. Nie rozumiem też dlaczego jak Ci wyjaśniłem na czym polega moja metoda pominięcia sygnału Track0, to nie odpowiedziałeś rzeczowo, że przyznajesz rację mojej logice lub jeżeli nie, to konkretnie dlaczego nie? Myślałem, że może dodasz do tematu coś mądrzejszego niż powyżej zacytowane pierdoły.

14

ok ;]

przechodze na tumiwisizm

15

Jako przykład podam Atari 810.

Działa to po japońsku, czyli jako tako ...

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

16 Ostatnio edytowany przez Mq (2019-05-23 07:42:12)

Kurde, no jak ok? Nie jest wcale ok, bo mi dałeś do myślenia, więc teraz rozważam różne przypadki, i próbuję wymyślić taki, w którym może coś pójść nie tak. Dlatego mam prostą prośbę, żebyś ewentualnie też się nad tematem teoretycznie pochylił w głowie i napisał czy po przemyśleniu moja metoda będzie dobra, czy nie, albo wskazał coś co mogę przetestować bo budzi niepewność.

Przez Twoje wątpliwości od przeszło godziny robię różne testy, ale niestety urządzenie działa cały czas poprawnie.

Jedyne co mi przyszło do głowy, to gdyby sformatować dyskietkę na inną ilość ścieżek i wymienić ją na inną... Wszystkie dyskietki mam z ilością 80 ścieżek, ale sformatowałem przed chwilą jedną dyskietkę na 40 ścieżek. Byłem ciekaw czy jak głowica stanie na ścieżce powiedzmy 67 a ja zmienię dyskietkę na taką, która ma 40 ścieżek, to teoretycznie cofanie do zera powinno cofnąć mój licznik do 27 zamiast do 0. Jednak tak się nie dzieje, a to dlatego, że głowica na dyskietce 40 ścieżek robi po prostu podwójne kroki i również cofa się do zera. Z drugiej strony zastanawiające jest to, że jak dyskietka formatuje się na 40 tracków, to mój licznik nie pokazuje podwójnie tych ścieżek, tylko liczy je od 0 do 39 i też żadnych błędów nie robi. Wniosek mi się nasuwa taki, że może stacja dla 40 ścieżek nie robi po dwa kroki, tylko impuls Step trwa dłużej i silnik przesuwa się jakby jednym ruchem o dwa kroki. Po zmianie dyskietki natomiast stacja porusza głowicą z powrotem o swoją maksymalną ilość pojedynczych kroków aż do wykrycia dyskietki o innej ilości ścieżek. Jakoś tak to musi działać "na oko" (nie oglądałem tego przyrządami, tylko widzę jak pracuje stacja, stąd nieprecyzyjne wnioski).
Tak czy owak wszystko działa poprawnie jak należy, przynajmniej z moją stacją, z tym że to jest XF551 z flopem 3,5" DD, jest teoretycznie możliwość (nie wykluczam), że na innej stacji zachowanie mogło by być inne.

Ewentualna modyfikacja całości tak, żeby używać sygnału Track0 dla większej pewności niedowiarków, to bardzo prosta przeróbka. Na schemacie wystarczy dołożyć jeden pin wejściowy i podpiąć do niego sygnał Track0 (np. do PD0 - tak miałem ją początkowo podpiętą). Konfiguracja pinu w programie na attiny musi być identyczna jak pinów Step i Dir, czyli ustawione jako wejście i podciągnięte wewnętrznie pull-up. Linia ta w stacji jest normalnie w stanie wysokim, a kiedy głowica znajdzie się na zerowej ścieżce, to linia przechodzi w stan niski. Wystarczy zatem w głównej pętli programu (obecnie pętla jest pusta, bo wszystko robione jest na przerwaniach), (edit: lub np. wewnątrz procedury obsługi przerwania timera multipleksującego wyświetlacze/edit) zrobić warunek if, który sprawdzi stan pinu PD0 i jeśli stan jest niski, to wyzeruje naszą zmienną licznika ścieżek. Jedna linijka kodu - jak wcześniej zauważył Candle. Tak sobie myślę po tym wszystkim co tu napisałem, że szybciej bym to chyba zaaplikował i przetestował niż to wszystko napisałem:-)

17 Ostatnio edytowany przez Candle (2019-05-22 19:02:23)

ale masz jedno urządzenie
jeśli masz zamiar zrobić coś uniwersalnego daj sobie po prostu taką możliwość
ja bym pewnie zaraz popłyną i podłączył jeszcze command i data in i zmienił wyświetlacz na oleda 128x32, a mcu na attiny24, bo obsluga i2c na attiny2313 jest słaba..
acha.. jeszcze są kontrolery które wysyłają 2x step na ścieżkę - ale może takiego akurat nie spotkasz - stacji 80 ścieżkowych jest mało, więc i szanse maleją

jeszcze jedno - potrafisz pisać jednocześnie o naukach ścisłych w kontekście programowania i elektroniki a później używasz słów "jakby" albo "czuje" (w innym temacie - 74f08) - to albo szkiełkiem i okiem albo sercem, ok?
step możesz sobie obsługiwać palcem i dalej nie pojedzie dalej niż o ścieżkę, sam napęd przełącza się na podwójny krok, ale to nie zawsze tak działa

nie wiesz - oscyloskop w dłoń i macaj, ale nie zgaduj

przechodze na tumiwisizm

18

Po zastanowieniu postanowiłem dodać do programu obsługę sygnału Track00. Bez tego i tak wszystko by działało bez problemu, ale na wszelki wypadek nie zaszkodzi, a może w jakichś szczególnych przypadkach pomoże.

Zaktualizowałem wcześniej zamieszczony kod, schemat i gotowy wsad w poście nr 7 powyżej.

Schemat różni się tylko tym, że oprócz sygnałów Step i Dir doprowadzony został jeszcze Track00. Natomiast program ma zaimplementowany warunek, że jeśli występuje stan niski na Track00, to wyzerowujemy licznik traków. Funkcjonalność tą umieściłem wewnątrz procedury obsługi przerwania wyświetlaczy, która jest wystarczająco często uruchamiana do zarejestrowania tego sygnału.

Nową implementację przetestowałem znowu solidnie ze swoją XF551 i wszystko działa prawidłowo.

19

żeby wkurzyć cię bardziej - początkowo myślałem, że ten projekt ma dodać tą funkcjonalność do jakiejkolwiek bądź stacji nie wyposażonej w fabryczny wyświetlacz, ale tak nie jest - zakłada on milcząco, że są takie sygnały jak "step" i "dir" w danym modelu dostępne, jednak to jest prawdą tylko dla stacji xf, toms 710, czy concorde - generalnie tych, które używają standardowych napędów ze złączem ibm/shugart, tak więc być może przemkną byś się bez szwanku zlewając track00 i opierając na arytmetyce z saturacją
jednakowoż, rozważ proszę OLED i te dwa druty więcej o których pisałem - schemat Ci się uprości, płytka też, a soft - cóż, soft jest tani

przechodze na tumiwisizm

20 Ostatnio edytowany przez Mq (2019-05-23 07:59:31)

Eeee, spoko, nie wkurzam się:-) Przyznam, że początkowo mnie rozdrażniły Twoje komentarze, ale ostatecznie okazały się przydatne - w takim sensie, że natchnąłeś mnie do przeanalizowania tematu, zrobienia dodatkowych testów i wyciągnięcia wniosku, że dodatkowe uwzględnienie track0 to drobiazg, a może się przydać w jakimś szczególnym przypadku, więc warto to dołożyć. Zwłaszcza, że od samego początku obsługiwałem ten wyjątek w programie, tylko usunąłem go (być może niepotrzebnie) w czasie porządkowania kodu.

Co do OLEDa, to w tym projekcie nie ma o tym mowy. Projekt miał swoje założenia i to one są najważniejsze. Pisałem wyraźnie, że projekt jest celowany na klimat retro i na uzyskanie feelingu zabawy prawdziwym sprzętem retro z epoki, a wyświetlacz ma przywodzić na myśl wspomnienia z tamtych czasów i upodabniać wyglądem do klasycznego designu pamiętanego ze stacji CA2001, LDW2000, IndusGT, czy ewentualnie TOMS-ów.
Żeby wkurzyć Cię bardziej (w rewanżu:-)), stacja dysków z epoki z wyświetlaczem OLED wyglądała by trochę jak odpicowany Mustang z 67 roku z przyczepą kempingową. Dołóż mu ten hak i okablowanie - jak już wyrwiesz panienkę na wypasioną brykę, to zawsze możesz dodatkowo w przyczepie ugotować jej makaron na kolację:-)
Oczywiście jak ktoś lubi OLED, to może zrobić sobie fork projektu z takim wyświetlaczem - nie widzę żadnego problemu. Dla mnie jednak OLED pasuje do Goteka i innych emulatorów, a nie do prawdziwej stacji dyskietek z epoki.

21

ani ona z epoki, ani ładna, a taka przyczepa miala by wiecej zastosowan niz zasobnik na makaron

przechodze na tumiwisizm

22

Ale kto? Bo się zgubiłem... Mój flop 3,5" DD jest z 87 roku, a obudowa SF354 to sobie sprawdź sam kiedy były robione. Wyświetlacze siedmiosegmentowe LED były na potęgę ładowane w każdy sprzęt wymagający wyświetlacza w latach 70-80-tych, a przyciski, które odnalazłem pochodzą z jakiegoś telewizora również z lat 80-tych. Niestety nie mam nic w tym sprzęcie z czasów współczesnych, więc chyba rozumiesz że OLED produkowany dopiero w latach powyżej 2010 to jest trochę science-fiction dla osoby, która przeniosła się wspomnieniami do lat 80-tych. To w kwestii epoki. Co do ładna, to o gustach się nie dyskutuje, ale jeśli dla Ciebie nie jest ładna stacja 3,5" w obudowie SF354 w kolorystyce Atari, to chyba w temacie podobania się nie mamy o czym gadać.

23

obawiam się, że implementacja wyjdzie tak: http://atariage.com/forums/topic/251147 … -firmware/

przechodze na tumiwisizm

24

Tsss, nie obrażaj mnie, poczytaj trochę moje wątki na forum i pooglądaj moje zdjęcia sprzętów, które odrestaurowałem, bo znowu piszesz brednie. Dla mnie to koniec dyskusji nie na temat w tym wątku. Pomijając zaczepki niewiele Twoje wypowiedzi wnoszą, więc zakończmy. Dziękuję.

25

Mq: dodaj jeszcze informację o licencji bo jak na razie to nie ma żadnej a to potrafi blokować przed wykorzystaniem.

MIT wystarczy pewnie.