1,376

(7 odpowiedzi, napisanych Sprzęt - 16/32bit)

Oś dysku powinna być dostępna od spodu - możesz na nią kapnąć odrobinę oleju maszynowego, podobnie na oś silnika krokowego pozycjonującego głowice. Dyski MFM miewają też problemy z kondensatorami.

Współczesnych zamienników/emulatorów dysków MFM nie znam, ale przy odrobinie szczęści, wciąż za ok 200zł można kupić działający 40-60MB dysk zgodny z ST-506.

1,377

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Jeśli chcesz zasilać DS'a z pinu 17 (A3) to w funkcji setup trzeba na początku dodać:

pinMode(17, OUTPUT);
digitalWrite(17, HIGH);

No i jak pisałem, z oryginalnym złączem, które jest w płytkach "DS3231 for PI" w tym miejscu się nie zmieści (chyba, że ktoś nie ma blach ekranujących). Poza tym, większych przeróbek nie było. Dla wygody przeniosłem Rx i Tx programowego seriala (Ctrl) na piny 5 i 6, bo tak było wygodniej podłączyć, czyli:

SoftwareSerial Ctrl(5, 6);

zamiast

SoftwareSerial Ctrl(10, 11);

1,378

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Od prototypu:
https://obrazki.elektroda.pl/3922836500_1536065032_thumb.jpg

Do gotowego modułu:
https://obrazki.elektroda.pl/8165213200_1536065036_thumb.jpg https://obrazki.elektroda.pl/2757590500_1536065030_thumb.jpg

... zainstalowanego w komputerze (w tym miejscu się nie mieści, bo trafia pod procesor klawiatury, musi być bliżej złącza klawiatury na płycie, trzeba zawinąć kable):
https://obrazki.elektroda.pl/7399977500_1536065051_thumb.jpg

Ostatecznie użyłem modułu Nano V3, zamiast Mini Pro ze względu na łatwiejszy update firmware. Moduł DS3231 zasilam z pinu A3 (17), kolejny pin (A4) to SDA i A5 to SCL, tak więc prawie udało się dopasować DS3231 for PI do Nano V3, niestety pin A7 nie może pełnić funkcji masy i trzeba było dolutować kabelek. Przewody przeciąłem w złym miejscu, bo na środku, a teraz widzę, że część idąca do płyty powinna być krótsza, a do klawiatury dłuższa. To na szczęście nie jest wielki problem - na styk, bo na styk ale mieści się na ekranie pod klawiaturą. Pierwotnie chciałem go włożyć pod ekran albo pod stację dyskietek, ale okazało się, że nie ma takiej potrzeby. Niestety żeby sie zmieścił musiałem usunąć oryginalne gniazdo goldpin z modułu DS3231 for PI i zastąpić go goldpinami. Także jest to polutowane na stałe. Całość jest zabezpieczona przezroczystą termokurczką.

1,379

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Przeanalizowałem kod Arduino i doszedłem do wniosku, że ten SerialEvent nie jest taki zły, różnica w czasie przejścia pętli programu względem wersji z while() i z prawidłowo użytym SerialEvent() wynosi 3 us... zatem kod "po Arduinowemu":

/******************************************************************
 Created with PROGRAMINO IDE for Arduino - 06.08.2018 15:23:03
 Project     : Atari ST IKBD clock injector with DS3231 RTC
 Libraries   : SoftwareSerial, Wire
 Author      : TzOk
 Description : ARD_RX0 from KB_5, ARD_TX1 to ST_5, ARD_D10 from/to KB/ST_6
******************************************************************/

#include <SoftwareSerial.h>
#include <Wire.h>

#define DS3231_ADDRESS (0x68)
#define DS3231_REG_TIME (0x00)

SoftwareSerial Ctrl(10, 11);

byte cmd;
byte inj = 255;
byte dsDate[7];
byte stDate[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC};
//                ss,   mm,   hh,   DD,   MM,   YY

void setup()
{
  Serial.begin(7812);
  Ctrl.begin(7812);
  Ctrl.listen();
  Wire.begin();
}

void loop()
{
  if (Ctrl.available())
  {
    cmd = Ctrl.read();
    if (cmd == 0x1C) // Read RTC
    {
      Wire.beginTransmission(DS3231_ADDRESS);
      Wire.write(DS3231_REG_TIME);
      Wire.endTransmission();
      Wire.requestFrom(DS3231_ADDRESS, 7);
      while(!Wire.available()) {};
      for (byte i = 6; i < 255; i--)
      {
        dsDate[i] = Wire.read();
      }
      stDate[5] = (dsDate[1] & 0x80) ? dsDate[0] + 0xA0 : dsDate[0]; // YY : if CENTURY bit is SET => stDate = dsDate + 100
      stDate[4] = dsDate[1] & 0x1F; // MM
      stDate[3] = dsDate[2]; // DD
      stDate[2] = dsDate[4] & 0x3F; // hh
      stDate[1] = dsDate[5]; // mm
      stDate[0] = dsDate[6]; // ss
      inj = 6;
    }
    else if (cmd == 0x1B) // Set RTC
    {
      for (byte i = 5; i < 255; i--)
      {
        while(!Ctrl.available()) {};
        stDate[i] = Ctrl.read();
      }
      dsDate[0] = (stDate[5] < 0xA0) ? stDate[5] : stDate[5] - 0xA0; // YY : if stDate > 99 => dsDate = stDate - 100
      dsDate[1] = (stDate[5] < 0xA0) ? stDate[4] : stDate[4] + 0x80; // MM : if stDate > 99 => set CENTURY bit
      dsDate[2] = stDate[3]; // DD
      dsDate[3] = 0x01; // Day of Week : don't care, any valid value 1-7 will be ok`
      dsDate[4] = stDate[2]; // hh
      dsDate[5] = stDate[1]; // mm
      dsDate[6] = stDate[0]; // ss
      Wire.beginTransmission(DS3231_ADDRESS);
      Wire.write(DS3231_REG_TIME);
      for (byte i = 6; i < 255; i--)
      {
        Wire.write(dsDate[i]);
      }
      Wire.endTransmission();
    }
  }
}

void serialEvent() {
  if (inj == 255)
    Serial.write(Serial.read());
  else
  {
    Serial.read();
    Serial.write(stDate[inj--]);
  }
}

Był jeszcze kod bez buforowania, ale nie trzyma timingów i traci synchronizację (nie wspominając o tym, że podczas komunikacji z DS przerywa transmisję IKBD -> ST). Jego zaletą było opóźnienie na poziomie 0,2ms w trakcie normalnej pracy (kiedy nie ma komunikacji na linii ST -> IKBD). Może kiedyś do niego wrócę, ale ten wydaje mi się być wystarczająco dobry.

Pinów niestety ustawić się specjalnie nie da, bo komunikacja z DS idzie po hardware'owym i2c, a ten ma przypisane konkretne piny. Przy poborze prądu na poziomie 300uA spokojnie można by zasilać cały moduł RTC z pinów GPIO, ale niestety piny A4/A5 (SDA/SCL są tak umiejscowione w Pro Mini, że nie obejdzie się bez kabelków).

Na razie czekam na przesyłkę małych płytek z DS3231 (niby dedykowanych do RPI1). Pierwsze 2 z PL, kolejna partia z ChRL.

Niestety w związku z tym, że STE_FIX działa tylko na STe, z TOSów 1.x działa to tylko z 1.06 i 1.62.

1,380

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Dziś odkryłem, że tym co odczytuje zegar na TOSie 1.x to nie jest CONTROL.ACC, tylko... STE_FIX.PRG i robi to pomimo tego, że mam TOS 1.62, do którego ten patch nie jest potrzebny, co komunikuje stosownym błędem.

Odświeżanie ekranu trwa 20ms, więc nie sądzę aby ktokolwiek był w stanie zauważyć te 1,5ms. Daje radę z myszką optyczną 600DPI, więc to też raczej nie jest problemem.

Prototyp jest na płytce stykowej i module Nano v3.

Docelowe Arduino Pro Mini powinno się spokojnie zmieścić w obudowie ST, ale jeśli chcesz zaprojektować płytkę to będę bardzo wdzięczny. ATMega 328P dużym scalakiem nie jest, jest mniejsza niż ATTiny85 w obudowie DIL8. Na upartego można to przenieść na Tiny88 albo Tiny2313, ale nie wiem czy miałoby to sens.

Tak wygląda działający prototyp:
https://obrazki.elektroda.pl/7355969600_1535919935_thumb.jpg

...a tak ostateczna wersja kodu:

/******************************************************************
 Created with PROGRAMINO IDE for Arduino - 06.08.2018 15:23:03
 Project     : Atari ST IKBD clock injector with DS3231 RTC
 Libraries   : SoftwareSerial, Wire
 Author      : TzOk
 Description : ARD_RX0 from KB_5, ARD_TX1 to ST_5, ARD_D10 from/to KB/ST_6
******************************************************************/

#include <SoftwareSerial.h>
#include <Wire.h>

#define DS3231_ADDRESS (0x68)
#define DS3231_REG_TIME (0x00)

SoftwareSerial Ctrl(10, 11);

byte cmd;
byte inj = 255;
byte dsDate[7];
byte stDate[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC};
//                ss,   mm,   hh,   DD,   MM,   YY

void setup()
{
    Serial.begin(7812);
    Ctrl.begin(7812);
    Ctrl.listen();
    Wire.begin();
}

void loop()
{
  while(true)
  {
    if (Ctrl.available())
    {
      cmd = Ctrl.read();
      if (cmd == 0x1C)
      {
        Wire.beginTransmission(DS3231_ADDRESS);
        Wire.write(DS3231_REG_TIME);
        Wire.endTransmission();
        Wire.requestFrom(DS3231_ADDRESS, 7);
        while(!Wire.available()) {};
        for (byte i = 6; i < 255; i--)
        {
          dsDate[i] = Wire.read();
        }
        stDate[5] = (dsDate[0] < 0x80)? dsDate[0] + 0xA0 : dsDate[0]; // YY
        stDate[4] = dsDate[1] & 0x1F; // MM
        stDate[3] = dsDate[2]; // DD
        stDate[2] = dsDate[4] & 0x3F; // hh
        stDate[1] = dsDate[5]; // mm
        stDate[0] = dsDate[6]; // ss
        inj = 6;
      }
      else if (cmd == 0x1B)
      {
        for (byte i = 5; i < 255; i--)
        {
          while(!Ctrl.available()) {};
          stDate[i] = Ctrl.read();
        }
        dsDate[0] = (stDate[5] < 0xA0 ) ? stDate[5] : stDate[5] - 0xA0; // YY
        dsDate[1] = stDate[4]; // MM
        dsDate[2] = stDate[3]; // DD
        dsDate[4] = stDate[2]; // hh
        dsDate[5] = stDate[1]; // mm
        dsDate[6] = stDate[0]; // ss
        Wire.beginTransmission(DS3231_ADDRESS);
        Wire.write(DS3231_REG_TIME);
        for (byte i = 6; i < 255; i--)
        {
          Wire.write(dsDate[i]);
        }
        Wire.endTransmission();
      }
    }
    if (Serial.available())
    {
      if (inj == 255)
        Serial.write(Serial.read());
      else
      {
        Serial.read();
        Serial.write(stDate[inj--]);
      }
    }
  }
}

Trik z pętlą while(true) wewnątrz arduinowego loop() eliminuje znakomitą część kodu "dorzucaną" przez Arduino po każdym przejściu pętli głównej programu. Kod ten (SerialEvent) jest odpowiedzialny za obsługę zdarzeń portu szeregowego, z których nie korzystam. Oczywiście ideałem byłoby to przepisać na "czyste" avr-gcc.

1,381

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Raczej przewiduję to jako projekt DIY, dlatego oparłem go o Arduino. Być może zrobię kilka sztuk ale na pewno będą to "składaki" z płytki Arduino Pro Mini i modułu RTC z DS3231 i baterią -  powinny się mieścić między blaszanym ekranem, a klawiaturą. Koszt samych części to ok 35-40zł, więc żeby mi się chciało (polutować, zaprogramować, przetestować, zapakować, zanieść na pocztę) to gotowy moduł musiałby kosztować ok 80zł, a zdaję sobie sprawę, że to sporo.

1,382

(78 odpowiedzi, napisanych Fabryka - 16/32bit)

Załączam działający kod:

/******************************************************************
 Created with PROGRAMINO IDE for Arduino - 06.08.2018 15:23:03
 Project     : Atari ST IKBD clock injector with DS3231 RTC
 Libraries   : SoftwareSerial, Wire
 Author      : tzok
 Description : ARD_RX0 from KB_5, ARD_TX1 to ST_5, ARD_D10 from/to KB/ST_6
******************************************************************/

#include <SoftwareSerial.h>
#include <Wire.h>

#define DS3231_ADDRESS (0x68)
#define DS3231_REG_TIME (0x00)

SoftwareSerial Control(10, 11);

byte cmd;
int inject = -1;
byte date[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC};
//                ss,   mm,   hh,   DD,   MM,   YY
byte ds3231[7];

void setup()
{
    Serial.begin(7812);
    Control.begin(7812);
    Control.listen();
    Wire.begin();
}

void loop()
{
  if (Control.available())
  {
    cmd = Control.read();
    if (cmd == 0x1C)
    {
      Wire.beginTransmission(DS3231_ADDRESS);
      Wire.write(DS3231_REG_TIME);
      Wire.endTransmission();
      Wire.requestFrom(DS3231_ADDRESS, 7);
      while(!Wire.available()) {};
      for (int i = 6; i >= 0; i--)
      {
        ds3231[i] = Wire.read();
      }
      date[5] = ds3231[0] + 0xA0; // YY
      date[4] = ds3231[1] & 0x1F; // MM
      date[3] = ds3231[2]; // DD
      date[2] = ds3231[4] & 0x1F; // hh
      date[1] = ds3231[5]; // mm
      date[0] = ds3231[6]; // ss
      inject = 6;
    }
    else if (cmd == 0x1B)
    {
      for (int i = 5; i >=0; i--)
      {
        while(!Control.available()) {};
        date[i] = Control.read();
      }
      ds3231[0] = date[5] - 0xA0; // YY
      ds3231[1] = date[4]; // MM
      ds3231[2] = date[3]; // DD
      ds3231[4] = date[2]; // hh
      ds3231[5] = date[1]; // mm
      ds3231[6] = date[0]; // ss
      Wire.beginTransmission(DS3231_ADDRESS);
      Wire.write(DS3231_REG_TIME);
      for (int i = 6; i >= 0; i--)
      {
        Wire.write(ds3231[i]);
      }
      Wire.write(DS3231_REG_TIME);
      Wire.endTransmission();
    }
  }
  if (Serial.available())
  {
    if (inject == -1)
      Serial.write(Serial.read());
    else
    {
      Serial.read();
      Serial.write(date[inject--]);
    }
  }
}

Kod działa i umożliwia zarówno "podstawianie" daty z dodatkowego, podtrzymywanego bateryjnie RTC, jak i jego ustawianie przy pomocy standardowego oprogramowania, np. CONTROL.ACC. Mankamentem rozwiązania jest wprowadzenie opóźnienie ok 1,5ms (czas transmisji 1 bajtu z prędkością 7812bps) oraz brak jakiejkolwiek obsługi błędów. Czas opóźnienia można skrócić do czasu transmisji 1 bitu, czyli ok 0,2ms. Opóźnienie dotyczy niestety nie tylko klawiatury ale również myszy i joysticków.

TOS przechowuje rok na 7 bitach, jako liczba lat po roku 1980. Zatem maksymalny rok jaki można obsłużyć to 2107. Zarówno DS3231 jak i IKBD używają formatu BCD, ale szczęśliwie TOS ma bardzo prostą formułę konwersji BCD do BIN, dzięki czemu akceptuje i poprawnie interpretuje wartości większe niż 0x99. Dla przykładu miesiąc grudzień powinien być zapisany jako 0x12, ale równie dobrze można wysłać 0x0C i też zadziała ;) Dzięki temu można przesłać np. rok 115-ty czyli 0xB5 co zostanie prawidłowo przeliczone jako rok 2015 (roku 2018 już tak nie zapiszemy, bo F to najwyższa wartość półbajtu). Na upartego ten sam rok można też zapisać jako 0xAF i też powinno zadziałać (ale nie sprawdzałem). Od tej wartości jest odejmowane 0x50 (80) i jest to przechowywane jako bajt roku w TOSie. Jak widać obliczenia nadal działają 115 - 80 = 35. Żeby odczytać rok TOS dodaje do wartości z rejestru datę początkową, tj 1980, mamy zatem 1980 + 35 = 2015.

Co jeszcze ciekawsze CONTROL.ACC domyślnie wysyła wartość 0xB8 po wpisaniu roku 18 (mimo, że oryginalny IKBD nie byłby w stanie tego obsłużyć).

Jakiś czas temu wpadłem na pomysł stworzenia zegara czasu rzeczywistego dla mojego STe.

Pierwotny pomysł zakładał inicjowanie RTC wbudowanego w kontroler klawiatury (IKBD) po każdym resecie z dołożonego modułu RTC, niestety firmware tego kontrolera nie przyjmuje lat "starszych" niż 1999. Był to "ficzer" umożliwiający np. tylko ustawienie daty bez zmieniani godziny (bajty godzin, minut, sekund >=0xA0).

Powstała więc opcja numer 2, czyli przechwytywanie żądania odczytu czasu z IKBD, a następnie maskowanie oryginalnej odpowiedzi IKBD i "wstrzykiwanie" własnej. Niewiadomą było jak TOS zareaguje na rok "0xB8"... ale okazuje się, że reaguje poprawnie. Rozwiązanie działa na TOS 1.04 - 1.62 (ale wymaga załadowania CONTROL.ACC) oraz na TOS 2.06 (tu nie trzeba robić nic, zegar z IKBD jest odczytywany przy każdym resecie). Nie działa to natomiast na TOSie 1.00 - 1.02, innych nie sprawdzałem.

Linia RX z ST do IKBD (pin 5) musi zostać przerwana, pin 5 złącza klawiatury podłączony do pinu RX0 w Arduino, pin 5 złącza ST podłączony do pinu TX1 Arduino, nasłuchiwanie poleceń wysyłanych z ST odbywa się z pinu 6 (ten pozostaje połączony z klawiaturą). Arduino retransmituje każdy bajt otrzymany z klawiatury do ST (niestety z opóźnieniem 1 bajtu ~ 1,3ms), aż do momentu gdy ST wyśle do IKBD bajt 0x1C. Wtedy Arduino przechodzi do "wstrzyknięcia" swojej daty - zamiast odbieranych z IKBD bajtów, wysyła swoje, odczytane z podtrzymywanego bateryjnie RTC.

Ustawiania dokładanego RTC jeszcze nie próbowałem, ale nie powinno być z tym problemu, bo ST prawidłowo wysyła rok np. 2003 jako 0xA3, czy 2018 jako 0xB8. Data i czas są zapisane w kodzie BCD, przy czym rok może być >0x99.

Polecenie ustawienia zegara to 0x1B, RR, MM, DD, hh, mm, ss (nie można pominąć żadnego bajtu, musi być przesłane żądanie + 6 bajtów, jeśli nie chce się zmieniać jakieś wartości, bajt należy ustawić na cokolwiek większego niż 0x99, np. 0xFF). Nie sprawdzałem ale maksymalny rok jaki można ustawić to chyba 2028.

Polecenie odczytu zegara to "0x1C", odpowiedź jest w takim samym formacie jak ustawianie (RR, MM, DD, hh, mm, ss) z nagłówkiem 0xFC.

Przykładowy kod dla Arduino (data i czas "z palca"):

#include <SoftwareSerial.h>

// software serial : RX = digital pin 10, TX = digital pin 11
SoftwareSerial Control(10, 11);
int inject = -1;
byte date[7] = {0x13, 0x42, 0x12, 0x27, 0x08, 0xB8, 0xFC};

void setup()
{

    // write your setup code here, to run once
    pinMode(LED_BUILTIN, OUTPUT);
    Serial.begin(7812);
    Control.begin(7812);
    Control.listen();

}

void loop()
{

    // write your main code here, to run repeatedly
    
    if (Control.available()) {
      if (Control.read() == 0x1C) {
        inject = 6;
        digitalWrite(LED_BUILTIN, HIGH);
      }
    }
        
    if (Serial.available()) {
                if (inject == -1)
                  Serial.write(Serial.read());
                else {
                  Serial.read();
                  Serial.write(date[inject--]);
                  if (inject== -1) digitalWrite(LED_BUILTIN, LOW);
                }
    }
}

---

Aktualizacja:
Rozwiązanie powinno działać na TOS >= 1.04.

1,384

(21 odpowiedzi, napisanych Software, Gry - 16/32bit)

Lotus Esprit Turbo Challenge (i kolejne 2 części)
Turbo Cup
Major Motion (kilka różnych wersji - klon Spy Hunter'a)
Dogs of War
Midnight Resistance
Silk Worm
Golden Axe (choć wersja na Atari ST jest generalnie słaba na tle np. Amigowej)
International Karate+
Baby Jo
Carrier Command
Robinson's Requiem (raczej jako ciekawostka, bo na ST w zasadzie jest niegrywalna)
Starglider 2
FRED (STe)

1,385

(109 odpowiedzi, napisanych Sprzęt - 16/32bit)

O kolejności odpalania programów a AUTO decyduje kolejność wpisów w tablicy FAT. To że działa 1.tos, 2.tos, jest efektem kolejności zmiany nazwy tych plików, a nie ich nazw. Jakbyś pierwszemu zmienianemu plikowi dał nazwę 9.tos, drugiemu 8.tos i t.d. to i tak pierwszy uruchomiłby się ten, któremu pierwszemu zmieniłeś nazwę, tj. 9.tos.

1,386

(7 odpowiedzi, napisanych Sprzęt - 16/32bit)

Różne stacje od PC mają złącze w różnych miejscach, Gotek i stacje FDD, które miałem można było podłączyć bez żadnych kombinacji. Taśma w STe jest nieco dłuższa niż w STf.

1,387

(7 odpowiedzi, napisanych Sprzęt - 16/32bit)

Taśma w STe jest akurat wystarczająco długa i spokojnie wystarcza na podłączenie stacji z PC czy Goteka. Nie widzę powodu aby miała "paść". Niemniej gdyby tak się stało trzeba wlutować w jej miejsce złącze IDC-34 i po problemie.

1,388

(41 odpowiedzi, napisanych Sprzęt - 16/32bit)

Do STe TOS 1.62/2.06. Wersja językowa zgodna z posiadaną klawiaturą (choć da się patchować, ale ja nie umiem, a opisy nie są ogólnodostępne). Wersja US może sprawiać problemy (60Hz).

1.62 to fabrycznie spatchowany 1.06 i zarazem ostatni oficjalny z serii 1.xx. Choć akurat z tzw. med res bug, to bardziej podobało mi się zachowanie 1.06. Tam pulpit zapisany na monitorze mono powodował włączenie trybu średniej rozdzielczości po podłączeniu monitora kolorowego (błąd polegał na tym, że poza ręczną edycją pliku desktop.inf była to jedyna możliwość wymuszenia startu w średniej rozdzielczości). Po poprawce pulpit zapisany w wysokiej rozdzielczości, po przełączeniu na monitor kolorowy powoduje wybranie... niskiej rozdzielczości. Cała poprawka sprawdza się do tego, że zapisany w średniej rozdzielczości startuje w średniej. Tęgie głowy nie wpadły na to, by 0 odpowiadało niskiej rozdzielczości a 1 średniej lub wysokiej...

Obrazy dyskietek możesz rozpakowywać przez FloImg lub montując je w STeEMie i tam zapisując na twardy dysk (emulacja do folderu, nie obrazu). Gry w ten sposób raczej nie zadziałają, muszą być wersje pod HDD.

1,389

(41 odpowiedzi, napisanych Sprzęt - 16/32bit)

Wystarczą patyczki higieniczne i odrobina izopropanolu (IPA).

1,390

(253 odpowiedzi, napisanych Kolekcjonowanie)

Trochę odkopuję, bo robiłem/robię pewne próby. Z moich obserwacji wynika, że w przypadku utleniacza w kremie, folia jest ważna i bardzo przyspiesza wybielanie, niestety obudowa ST ma tendencje do nierównego wybielania, a do tego potrafi być mocno utleniona co objawia się białym nalotem po wyschnięciu. Tym co przywraca kolor/wybiela jest ozon, a przynajmniej proces ten w jego otoczeniu przebiega znacznie szybciej, dlatego warto go utrzymać przy powierzchni wybielanego elementu.

Nie wiem czemu drygol tu miał opory napisać czego używa, a na anglojęzycznym blogu, który sam tu zacytował już napisał. Do wybielania używał wodorotlenku sodu (NaOH) - UWAGA ŻRĄCE!!!, a do nadania połysku i przywrócenia koloru utlenionego plastiku - oparów wrzącego acetonu (C3H6O). Podobny efekt jak acetonem można uzyskać też opalarką, ale i jedną i drugą metodą łatwo "przedobrzyć" i doprowadzić do deformacji elementów.

1,391

(3 odpowiedzi, napisanych Sprzęt - 16/32bit)

Ustawiasz jak pod kości 1Mbit (27010), dodatkowa linie adresową izolujesz od od płyty i podłączasz przez przełącznik do 5V/masy by wybierać wersje TOSu.

1,392

(35 odpowiedzi, napisanych Sprzęt - 16/32bit)

Jeśli zależy Ci na ciszy to polecam SCSI2SD...

Układ połączenia rezystorów wygląda tak:
https://obrazki.elektroda.pl/1232463400_1532277957_thumb.jpeg
R1=220R
R2=330R

Oczekiwana rezystancja między 1 i (2 - 7): 157R, (2 - 7) i 8: 143R, 1 i 8: 69R.

1,393

(35 odpowiedzi, napisanych Sprzęt - 16/32bit)

PIN1 jest oznaczony paskiem lub kropką na obudowie i zwykle kwadratowym padem na PCB.

Czy ktoś mógłby wyjąć taki rezystor i go pomierzyć? Interesuje mnie rezystancja między pinem 1 a pinami 2-7, oraz między pinem 8 a pinami 2-7.

PIN 1 idzie do 5V, pin 8 do masy, piny 2-7 to linie sygnałowe. Najprawdopodobniej jest 220R do masy i 330R do Vcc, czyli np. Bourns 4308R-104-221/331.

1,394

(9 odpowiedzi, napisanych Software, Gry - 16/32bit)

Nagraj przez FLOIMG. Wersja D-Bug jest skopana.

1,395

(12 odpowiedzi, napisanych Sprzęt - 16/32bit)

Atari ma tylko jeden sygnał Motor ON. Na oryginalnych stacjach SF3x4 zachowanie jest takie samo - silniki w obu stacjach zawsze działają równocześnie. Też się nad tym zastanawiałem, bo w sumie wystarczyłoby aby stacja załączała silnik tylko kiedy aktywny jest sygnał Motor ON oraz stacja jest wybrana (DSx). Z jakiegoś powodu jednak tak nie zrobiono.

Ostatnio przez moje ręce przeszło kilka ST. Sprzęty mają po ~30 lat i sugerując się materiałami w internecie przymierzałem się do wymiany kondensatorów. Oto moje wnioski - znalazłem 1 uszkodzony kondensator, jego uszkodzenie polegało na korozji aluminiowego "kubka", parametry jeszcze trzymał. Kondensatory WANG'S CAP, po tych 30 latach, trzymają parametry wręcz wzorowo. Niestety jak już wylutowałem te kondensatory to lutowałem nowe, bo jednak każde lutowanie poważnie je nadwyręża i nie są pomyślane do "wielokrotnego montażu". Główny kondensator po stronie pierwotnej w zasilaczu (47uF/400V - ten z czerwoną naklejką ostrzegawczą) często wygląda na uszkodzony z racji wypukłej plastikowej osłonki... nie spotkałem aby był uszkodzony, choć jego warto wymienić, bo jest obciążony termicznie (tuż przy mocno rozgrzewającym się radiatorze).

Jakie są Wasze doświadczenia w tej kwestii - czy znaleźliście kiedykolwiek uszkodzony kondensator elektrolityczny na płycie ST?

1,397

(19 odpowiedzi, napisanych Sprzęt - 16/32bit)

JA1 by przestawić na D0, nie sprawdzałem ale rzekomo sygnał Write Protect zachowuje się tu odpowiednio by TOS mógł wykryć zmianę dysku (Atari nie używa sygnału Disk Change). Data produkcji: 1999.11.

1,398

(19 odpowiedzi, napisanych Sprzęt - 16/32bit)

Kupiłem NEC FD1231H i mój niestety czyta tylko 82 ścieżki. Mój jest Made in Philippines P/N 134-506791-305-3. Konieczne było przestawienie (przelutowanie) zworki JA1 w pozycję 1.

1,399

(12 odpowiedzi, napisanych Sprzęt - 16/32bit)

Mają albo zworki albo mostki, a Sony ma przełącznik suwakowy. PeCetowe również zazwyczaj mają zworki albo mostki.

1,400

(12 odpowiedzi, napisanych Sprzęt - 16/32bit)

Jak to flop nie ma zworek?!? Który? Przełącznik można zamontować przy złączu FDD - przełącznik krzyżowy, zamieniający sygnały DS0 i DS1 między pinami 10 i 12. Można też "podnieść" 2 piny YM'a odpowiedzialnego za generowanie sygnałów DSx i tam dać przełącznik.