C64Power Forum
Ogólne => Forum Ogólnodyskusyjne => Wątek zaczęty przez: zbyndek w 18 Maja 2010, 23:09
-
Jak w temacie.
Czy jest możliwe coś takiego?
Nie posiadam żadnego karta wspomagającego stację dysków, mam tylko black boxy i \'X\'. Kartów używam ze względu na przycisk reset. Jednak resetują one jedynie jednostkę centralną, a nie stację. Jak wiadomo, po obejrzeniu jakieś większego dema lub zagraniu w grę posiadającą własny fastloader i resecie stacja nie odpowiada na komendy.
Czytałem już o schemacie hardreset, jednak jego wykonanie w chwili obecnej byłoby szalenie kłopotliwe dla mnie. Zdobyć kartridż wspierający stację też nie łatwo.
Czy zatem jest możliwość wysłania sygnału reset do stacji za pomocą programu w basicu lub assemblerze, który to można by było wprowadzać do c64 np. za pomocą datassetta?
-
najszybciej jednak będzie wyłączyć i włączyć komputer, wtedy resetuje się również stacja.
-
Albo włączyć/wyłączyć samą stację :)
-
To ja wiem, że stacja się resetuje przy ponownym włączeniu komputera. Owszem rozwiązania najszybsze, ale mi właśnie zależy, aby ograniczyć wyłączanie i włączanie obu urządzeń.
A skoro mowa o wyłączeniu i włączeniu stacji. Jak to jest z tym \'niebezpieczeństwem\' włączania i wyłączania stacji dysków przy włączonym c64?
W wielu miejscach (m.in. w magazynie C&A wydawanym przez Bajtka) spotkałem się ze stwierdzeniem, że należy najpierw włączać stację, monitor/tv, ewentualnie inne peryferia, a na samym końcu jednostkę centralną. Włączanie c64 najpierw jest podobno niebezpieczne.
Sam zaobserwowałem następujące dziwne zjawiska:
Wyłączenie stacji przy włączonym c64 może wpłynąć niekorzystnie na aktualnie działający program.
Reset na kartridżu \'X\' działa lepiej (tj. rzadziej stacja jest zajęta po resecie) gdy stację włączy się po włączeniu c64.
Gubię się trochę w tych niuansach, a zależy mi na żywotności mojego sprzętu.
-
ogólnie wyłączyć poczekać włączyć. Wymień sobie kondensatory jak się obawiasz o żywotność sprzętu.
BTW. jestem ciekawy czy obecne kompy też są projektowane na 25 lat życia.
-
Sądząc po tym, jak szybko współczesne kompy się zmieniają, to wątpię. Nie ma takiej potrzeby.
-
@Grogzbeak, o jakich potrzebach ty piszesz
Z punktu widzenia producenta sprzęt ma wytrzymać słownie: jeden rok i na tym koniec, bo na tyle trzeba dać gwarancję!
-
... inaczej od razu musieli by pozamykać wszystkie fabryki!
-
O takich, że jaki jest sens projektowania współczesnego komputera, który przetrwa 25 lat? Przecież to bezsens....
Nie ma potrzeby, bo i tak ludzie stosunkowo szybko zmieniają sprzęt wraz ze zmieniającymi się standardami. Myślę, że bardziej dobitnie nie trzeba tego wyjaśniać.
-
Hehe, ja mam jeszcze kompa z 1998 roku z procesorem pentium 2 :)
Działa bez zarzutu, na drugim zasilaczu i drugim wiatraku na procku. Komputer był modernizowany oczywiście, ale procek i płyta główna pozostały niezmienione od zakupu. Do 2007 roku był używany na co dzień.
Teraz przynajmniej nie miałem problemów z pozyskaniem kompa z portem równoległym do przenoszenia danych na c64 :)
-
W technikum na zajęciach w pracowni mikroprocesorowej używaliśmy komputerów z procesorem Pentium 166 MHz. Znając życie stoją do tej pory, bo większa moc obliczeniowa nie jest potrzebna.
Nawiasem mówiąc sam miałem taki sprzęt i to jeszcze kilka lat temu.
W przypadku niektórych użytkowników komputerów (czytaj: graczy uznających wyłącznie najnowsze produkcje) sprzęt nie zdąży się zużyć, bo zostanie wymieniony na nowy.
-
No właśnie
-
Jeśli dobrze pamiętam to ciepły reset można osiągnąć procedurą:
sei
jsr $fda3
jsr $fd15
jsr $e518
cli
rts
Problem jest tylko taki, że jeśli nie masz żadnej karty takiej jak ActionReplay, jego klony czy Final III to możesz mieć problem z jej wykonaniem bo nie bardzo będzie jak przerwać działający kod żeby wykonać powyższą procedurę. Oczywiście reset stacji za pomocą przycisku ON/OFF jest najlepszy gdyż jest to już sprzęt leciwy i nigdy nie wiadomo w jaki stan stacja została wprowadzona. Chyba że działa z nią komunikacja tzn rozkazy typu M-E, M-R, M-W działają. Pod tymi rozkazami oczywiście kryje się procedura przesyłająca / obierająca bity do portu Serial. Można więc wszystkie stacje CBM i ich klony programować także w ten sposób. Tutaj mała uwaga: procedury resetu w ROMie różnią się pomiędzy stacjami 1541, 157x i 1581.
Stację można więc zresetować wysyłając do niej określony rozkaz. Dla 157x jest to U: lub UJ na przykład.
-
Pytanie ciekawe i warte rozpracowania, czasem, aż się prosiło, żeby loader usunął się z ramu stacji dysków i nie blokował jej.
-
No proszę, temat okazuje się i mnie \'dopadł\'.
Dla restowania 1541, znalazłem temat na csdb:
http://noname.c64.org/csdb/forums/?roomid=11&topicid=62872
tyle że przedtem jeszcze trzeba posłać dane do stacji.
Niestety mnie interesuje bardziej uniwersalne rozwiązanie, czyli programowe resetowanie każdego urządzenia na szynie IEC. Albo zmuszenie takiego urządzenia do wyswietlenia błędu 73 - który się pojawia jednokrotnie właśnie po resecie urządzenia.
Przerabiał to ktoś ?
-
No i sam znalazłem, okazuje się że rozwiązanie jest w intrukcji do 1541 (user guide):
HINT #4: To reset drive, type: OPEN 15,8,15,\'UJ\' Then wait until the drive activity
LED is off and motor goes off, then type: CLOSE 15. This also applies to sending a UI+ or UI-
-
@Skull, tak samo jest dla SD2IEC. SD2IEC ma dodatkowo możliwość wykonania programowego hard-resetu (restart procka AVR w SD2IEC):
OPEN15,8,18,\'U<shift-J>\':CLOSE15
shift-j - oznacza charakter code: 202
... sprawdzałem - działa dla SD2IEC
... czy w stacji jest taka możliwość, to nie wiem (bo nie mam stacji).
-
hehe wiem...
właśnie głównie o reset sd2iec mi chodziło ;-P
-
@Skull, dla JiffyDOSa ten ciąg poleceń dla hard-resetu SD2IEC, który podałem powyżej to tylko (w trybie bezpośrednich poleceń):
@U<shift-J>
... co za wygoda!
-
... tylko 3 klawisze trzeba pomacać, kiedy w starym kernalu aż 24 razy trza walnąć w klawichy!!
-
... tam oczywiście się machnąłem z pośpiechu. 15 powinno być a nie 18!
-
Dziękuję za nadesłane odpowiedzi. Jak tylko dorwę się do swojego C= (czyli gdzieś za parę dni) to sprawdzę komendy z OPEN i CLOSE. Dam też znać o efekcie ich działania ;)
Mam jeszcze pytanie do użytkownika 2sam: o co chodzi z \'przerwaniem działającego kodu, aby wprowadzić powyższą procedurę\'? Chodzi może o reset samego komputera?
I pytanie odnośnie kodu w assemblerze. Jako, że nigdy nie programowałem w assemblerze mogłoby zabrzmieć: jak użyć zamieszczonego w poście kodu?
A mianowicie: Czy wpisanie i kompilacja tej procedury wystarczy aby utworzyć plik wykonywalny, który wykonywałby reset?
-
@Zbyndek, polecam świetny cykl artykułów w C&A na temat programowania stacji, który napisał wegi. Cykl publikowany był od nr 8/94 do nr 5/95. Wegi gdzieś zamieszczał zebrane skany tego cyklu, ale chyba jego rapidshare obecnie nie działa. Ściągnij sobie całe roczniki C&A 94 i 95 z elysium/ Tutaj masz linki:
http://www.elysium.filety.net/magazines/polish/Commodore_and_Amiga/commodore_and_amiga_1994.rar
http://www.elysium.filety.net/magazines/polish/Commodore_and_Amiga/commodore_and_amiga_1995.rar
... i tam znajdziesz ten cykl artykułów (9 odcinków).
-
Rzeczywiście! Przypomniało mi się, że w C&A był taki kurs. BTW pobrałem z internetu wszystkie numery tego magazynu (tego wydawanego przez spółdzielnię Bajtek). Ich lektura była baaardzo przyjemna!
-
Jeszcze niedawno był aktywny twórca tego kursu WEGI, ale ostatnio coś zapracowany.
-
Chodzi o to, że część programów nie da się przerwać podczas wykonywania bez pomocy hardware`u takiego jak AR czy FCIII lub Expert. W takim przypadku potrzebny jest reset a to oznacza także reset stacji dysków bo wykona się procedura inicjalizująca I/O w ROM.
Drugim problemem jest fakt, że fast loadery nie są wdzięcznym kodem do przerywania / freezowania poza emulatorem (mam tutaj na myśli monitor Vice). Powodem jest fakt, że odbieranie i wysłanie danych odbywa się w ciasnych pętlach wyliczonych co do cyklu (przynajmniej w tych najszybszych loaderach). Dlatego też na początku loadera wyłącza się wszystko co się da z ekranem włącznie (choć są szybkie loadery w włączonym ekranem) i to może uniemożliwić przerwanie kodu. Oczywiście jeśli po załadowaniu mamy READY i Basic działa to powyższą procedurę możesz uruchomić nawet za pomocą serii POKE a potem SYS.
Co do Twojego drugiego pytania to jeśli użyjesz asemblera lub crossasemblera generującego pliki wynikowe to tak. Takim przykładem może być dreamass lub Turbo Assembler (polecam jego nowoczesną odmianę o nazwie Turbo Macro Pro - na stronie projektu znajdziesz całą dokumentację). Można także użyć jakiegoś monitora z emulatora lub karty. Wpisujesz wtedy procedurą pod jakiś bezpieczny adres np $c000 i zapisujesz na dysk. Potem SYS [adres] pod którym zapisałeś procedurę. Problem jest tylko taki, że aby wczytać procedurę musisz mieć zresetowaną stację dysków... ale oczywiście z magnetofonu nadal możesz taką procedurę wczytać. Jadnak najlepszym rozwiązaniem będzie karta typu AR. Resetujesz wtedy stację kiedy chcesz i jak chcesz - włącznie z ręcznym zapisem do pamięci stacji.
-
A więc:
Jak na razie dokonałem próby resetu zajętej stacji za pomocą komend OPEN ... CLOSE i... jedna z tych prób zakończyła się USZKODZENIEM (fizycznym!) napędu!
ale po kolei
Prób dokonywałem wpisując polecenia po resecie komputera (po wcześniejszym załadowaniu i uruchomieniu dema z własnym fastloaderem) za pomocą kartridża umieszczonego w expansion porcie.
Po wydaniu komendy OPEN(...) komputer się zawieszał. Bez znaczenia czy w komendzie było zawarte polecenie \'UJ\' czy \'U<Shift-J>\' (to drugie zapewne dotyczy tylko sd2iec). Co najwyżej można było wykonać ponowny reset z kartridża, ale stacja dalej wisiała. W większości przypadków... czasem się zdarzało, że po kliknięciu reset załączał się silniczek stacji i kręcił się bez końca, a stacja dalej nie odpowiadała.
Przy jednej z takich prób, po naciśnięciu resetu stacja dodatkowo zaczęła głośno terkotać głowicą aż... coś trzasnęło :(((
Efekt taki, że nie mogę już odczytać żadnej dyskietki, bo po wydaniu jakiejkolwiek komendy słyszę tylko ciche cykanie zamiast charakterystycznego dźwięku głowicy i komunikat \'?FILE NOT FOUND\' o ile komputer się nie zawiesi na etapie \'SEARCHING FOR...\'. Pytanie czy stację da się naprawić.... :(
Wracając do polecenia.
Mam pytanie do użytkownika Skull: z jakiej instrukcji pochodzi informacja z Twojego posta? Pobrałem dwie różne instrukcje, ale jakoś się jeszcze nie dopatrzyłem w nich podanej przez Ciebie informacji. Wg instrukcji polecenie \'UJ\' oznacza power-up vector, \'UI+\': set C64 speed i \'UI-\' set VIC20 speed, ale nie znalazłem, że \'UJ\' jest równoważne wydaniu komend \'UI+\' i \'UI-\'. Nie zaobserwowałem też, aby po wydaniu komendy OPEN 15,8,15,\'UJ\' stacja się miała załączyć na chwilę. W przypadku niezatej stacji otrzymuję od razu komunikat READY., w przeciwnym: zwis komputera. Dzieje się tak zarówno na prawdziwym sprzęcie, jak i na emulatorze VICE.
-
Komenda sprawdziła się jedynie w sytuacji, gdy stacja nie odpowiadała z powodu jakiegoś błędu (np. wspomnianego ?FILE NOT FOUND). W tym tylko przypadku wydanie polecenia OPEN 15,8,15,\'UJ\' dawało efekt: kontrolka przestawała mrugać, stacja zaczynała odpowiadać.
No cóż w obecnej chwili zostaje mi tylko poszukać nowej stacji i procedury w assemblerze.
-
spokojnie może jeszcze nie musisz kupowac nowej stacji - spróbuj komendy \'I\', albo sformatuj jakis dysk.
Manual jest stąd:
http://www.bombjack.org/commodore/commodore/1541-II_Users_Guide.pdf
Ale... muszę Cię zmartwić, odnośnie programowego resetu stacji- NIE MA TAKIEGO, który niezawodnie by resetował stcję jak przy przy resecie hardwaerowym.
To co Ci podałem - komenda UJ - to rzeczywiście programowy reset stacji, ale oczywiście będzie on działał, tylko wtedy gdy w STACJI będzie trwała standardowa pętla dos-u. Co to znaczy ?
(no a właśnie najtrudniej jest to wytłumaczyć komuś kto nie jest obeznany w temacie pisania loaderów)
Chodzi o to, że stacja to nie jest tylko urządzenie do wkładania dyskietek - to taki drugi c64 - tyle że bez klawiatury:)))
Transmisja (a więc wgrywanie, czy zgrywanie czegokolwiek) istnieje tylko wtedy, gdy te dwa komputery będą działać w ZNANYM DLA SIEBIE protokole(schemacie/języku/mowie/konwenc ji itd.)
W ROMIE c64 jest specjalny obszar do właśnie obsługi takiego protokołu w ROMIE c1541 jest taki obszar również.
I przy standardowych ustawieniach (np po włączeniu obu urządzeń) MOGĄ one się komunikować tak jak to opisywane jest w instrukcji.
Ale .... wszelkiego typu loadery - to właśnie substytuty tego orginalnego protokołu - dzielą się również na cześć która działa w c64 i część która działa w c1541.
Niestety jak zabierzy część z c64 (po resecie z cartrdige) część w stacji nadal istnieje - tyle że ona już nie reaguje na komendy typu OPEN, a tylko na komendy które sobie wymyślił programista piszący dany loader ( i to nie są tylko inne kombinacje komend).
A więc jedynym sposobem, żeby spowrotem nawiązać kontakt ze stacją jest skasowanie tej części loadera ze stacji. Niestety nie można zrobić tego programowo -bo - właśnie nie da się przesłać nawet jednego bajtu, bo całą kontrolę przejąła część loadera która reaguje tylko na swoje(nieznane) rozkazy.
-
...albo rozkręć stację i przesuń głowicę palcem.
Dla c64 normalnie \'dozwolonych\' jest tylko 35 ścieżek, podczas gdy na dyskietce mieści się ich 40 (gwarantowane przez producenta). Co więcej - Wegi napisał program który umożliwia sformatowanie ścieżek 36-42 (przy ścieżce 42 słychać jak głowica uderza w zderzak).
Czasami gdy głowica znajdzie się na tych \'górnych\' ścieżkach, to ma problem z powrotem i znalezieniem ścieżki 18 (na której normalnie umieszczony jest katalog dyskietki).
Pomaga szybki format z Actiona (@N) lub inny bez weryfikacji, lub odkręcenie 4 śrubek, zdjęcie pokrywy i przesunięcie głowicy palcem.
... albo posiadanie dyskietki która posiada 2 katalogi, jeden na ścieżce 18, a drugi na 36 i na tej wirtualnej drugiej \'dyskietce\' nagranego programu do przełączania się między ścieżkami 18-36. W dawnych czasach formatowałem tak dyskietki, gdy cenny był każdy blok :)
-
Dzięki za informacje z sugestiami sposobów naprawy, sprawdzę je!
Dzięki Skull za link do instrukcji. Miałem wersję dotyczącą starszej wersji napędu (1541) i dlatego nie mogłem znaleźć informacji o komendzie resetującej. Jestem też już świadomy wymienionych przez Ciebie szczegółów technicznych:) Wiem, że musi zachodzić zgodna komunikacja między stacją, a komputerem, aby odpowiadała na polecenia z komputera.
Z racji występowania różnych loaderów można nie wiedzieć, co się w danej chwili znajduje ramie stacji. Dlatego szukam sposobu na programowe wywołanie sygnału reset do portu szeregowego, a nie komendy resetującej wykonywanej przez stację. Przy okazji nauczyłem się, że komendę OPEN trzeba kierować do stacji, gdy nie jest zajęta :)
Co do resetu stacji w powyższy sposób to zaobserwowałem u siebie raz pewne dziwne zjawisko. Mam pewną grę, którą wczytuję za pomocą datasetta z obrazu t64. Przy kartridżu BlackBox w wersji 3 gry się nie da uruchomić, działa tylko cracktro, a po nim zwis. Naciśnięcie resetu na kartridżu w tej sytuacji powodowało reset stacji taki ja przy włączaniu komputera (???). Na upartego możnaby było stosować taką metodę, gdyby tylko nie ten kart, który zakłóca działanie części programów. Ciekawy jestem jaki udział w tym \'zbiegu okoliczności\' mają zawieszony program, wspomniany kart i fakt naciśnięcia restu na kartridżu.
-
Poza kwestiami softwarowym to mam w planach budowę m.in. układu hard reset, ale z racji, że sam nie podołam temu zadaniu i będzie to na razie nieco dalsza przyszłość szukam innych prostszych rozwiązań.
Poza programowym resetem szyny szeregowej szeregowej przyszedł mi jeszcze pomysł na reset stacji poprzez zwarcie linii reset w wolnym porcie szeregowym stacji. Z magazynu C&A dowiedziałem się pomyśle wtyku pasującego do portu szeregowego zakończonego
wyłącznikiem astabilnym. Nowszy model (C64C) jak wiadomo nie daje możliwości resetu przez serial port, jednak ciekawy jestem jakby się zachowały stacja dysków. Ciekawe czy blokada resetu z zewnątrz dotyczy też stacji dysków 1541-II.
-
Komenda OPEN 15,8,15,\'I\', a potem CLOSE 15 rozwiązała problem mojego \'zepsutego\' napędu, może za bardzo spanikowałem? ;)
-
Dzięki 2sam za przykładową procedurę. Wypróbowałem ją jak tylko zyskałem możliwość \'zamrożenia\' uruchomionego programu no i... udało mi się nie pozwolić jednemu demu zawiesić stacji.
Miałem porzucić ten temat, ale jednak jeszcze się nim zajmę przez jakiś czas.