1,326

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

Idąc na pocztę gdzieś mi się straciła kartka na której miałem zapisane który # komu wysłać, a jak na złość nie mogłem sobie na poczcie przypomnieć hasła na forum :/ Z tego co widzę, pozostali dostali zgodnie z listą, tylko 2 z 5 zamieniłem, no i dragmar się nie odzywa więc póki co poprawiony #007 siedzi w moim testowym 1040STf.

1,327

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

Literka M jest tylko na układzie scalonym, którego nie widać bez rozbierania modułu, jest po przeciwnej stronie płytki, co widoczna bateria.

1,328

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

perinoid napisał/a:

No to ja dostałem. Moje szczęście

Sprawdziłeś, czy spieszy? Daj mu szansę, nich pochodzi trochę w ST bez zmiany pozycji i wstrząsów. Zamówiłem DS3231 do wymiany w #007 i oba przyszły M, ale jak na razie od 2 dni chodzą dobrze. Nie wiem skąd chińczyki je biorą i jakim cudem sprzedają je w takich cenach.

1,329

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

Jeśli masz przejściówkę do Atari z portem USB, to musisz trafić na myszkę USB/PS-2. Ja używam A4TECH X6-60D.

1,330

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

FIXem na złe DMA wydaje się być wymiana kości TOSu na wersję CMOS EPROM (27C010) lub kości Flash oraz procesora na wersję CMOS (MC68HC000F16). Karta SD powinna być... kartą SD (nie SDHC).
O wiele mniej problematyczne są przejściówki IDE<->CompactFlash, gdyż te karty natywnie posiadają tryb IDE (przejściówka jest pasywna).

1,331

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

Ktoś jeszcze dostał z DS3231M, niestety nie zanotowałem sobie kto :( także jakby komuś wybitnie źle ten zegarek chodził, to będziemy "walczyć". Niby sprawdzałem i jakoś bardzo się pozostałe sztuki nie rozjeżdżały.

1,332

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

#002, #003, #005 i #006 wysłane.
#004 czeka na wpłatę, a #007 poczeka jeszcze trochę, bo okazało się, że tym razem RTC co prawda działa ale spieszy po kilkanaście minut na dobę :/ czyli kolejny DS3231 w plecy :(

1,333

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

Tym programikiem od HxC można konwertować nie tylko na HFE ale też na inne obsługiwane formaty, np. ST.

Co do gier spatchowanych przez Petera Putnika to są one bardzo wybredne i np. nie tolerują załadowanych akcesoriów czy programów w Autostarcie. Wersje Klaza nie mają tych problemów ale zrobił ich nieporównywalnie mniej.

Do firmware HxC jest program HxC Mount, który umożliwia zamontowanie obrazu IMG o pojemności max 32MB jako twardego dysku. Działa to dość wolno i blokuje dostęp do stacji dyskietek (nie do twardego dysku ACSI), ale działać - działa. Uruchomiłem go też na FlashFloppy, ale tam jest tragicznie z prędkością. Bezproblemowo działają natomiast obrazy dyskietek o pojemności 2,5MB.

1,334

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

Moduły gotowe do wysyłki, zainteresowani dostaną/dostali szczegóły na PW:
https://obrazki.elektroda.pl/7483350400_1538065759_thumb.jpg

1,335

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

"Zegarki" już przyszły (i nawet działają), teraz czekam na Arduina. Zegarki niestety są w różnych wersjach - DS3121SN oraz DS3231M. Rozdzielę losowo. SN jest dokładniejszy (2ppm) ale bardziej delikatny, gdyż oparty o rezonator kwarcowy TXCO, natomiast M jest mniej dokładny (5ppm) ale bardziej odporny mechanicznie, gdyż jest oparty o oscylator MEMS.

1,336

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

Ja tam mam chiński konwerter/upscaler SCART-RGB->HDMI i też daje radę. Może wprowadza pewne opóźnienie, może nie najlepiej sobie radzie z przeplotem (ale ten na ST występuje tylko w niektórych demach), ale działa i kosztuje 1/5 tego co OSSC, nie wspominając o Framemaisterze.

1,337

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

Wtyczkę od flopa owszem można kupić, ale kosztuje majątek... ja chyba kupiłem dwa (w zasadzie półtora) ostatnie kable, jakie były w Polsce na sprzedaż, za kwotę zbliżoną do jednej nowej wtyczki w UK.

Mod na klawiaturze to tylko podtrzymanie zasilania IKBD, on sam w sobie zawsze miał zegar czasu rzeczywistego, jednak ze względu na błędy w TOSie 1.xx nie był odczytywany (w ST/f odczytywał go i synchronizował panel sterowania, w STe programik STE_FIX, dopiero w TOS 2.06 poprawiono błąd i zegar systemowy synchronizował się samoczynnie z zegarem IKBD podczas startu systemu). Niestety zegar w IKBD obsługuje lata tylko do 1999.

Karta AT-Speed C 16 to karta z procesorem i286 16MHz z opcją instalacji koprocesora 80287, jest tam też ROM z BIOSem IBM'a oraz chyba 1MB RAMu, czyli sprzętowy emulator IBM/AT.

https://www.maedicke.de/atari/galerie/d … eedc16.htm

Tutaj jest soft do obsługi tej karty: http://www.atarimania.com/utility-atari … 27254.html

1,338

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

Falcon na stację HD (Epson SMD-340), więc i zwykłą PeCetową dyskietkę "1.44MB" odczyta.

1,339

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

Tak, oczywiście. Arduino wgrywa "normalnego bina" przez bootloader (który emuluje programator STK-500). Arduino to tylko środowisko programistyczne, biblioteki i bootloader. Używany jest standardowy kompilator avr-gcc. Sprzęt nie ma niczego specyficznego, moduły Pro Mini to ATMega 328P z kwarcem 16MHz, stabilizatorem napięcia i kilkoma niezbędnymi kondensatorami na płytce. Zarówno można wgrać program skompilowany w Arduino IDE do uK bez bootloadera, jak i można wgrać program skompilowany np. w Atmel Studio do ATmegi 328P z bootloaderem.

Lista zamówień:
[#SN - OSOBA]
#002/18 - micromax
#003/18 - Adam Klobukowski
#004/18 - Cyprian
#005/18 - Jesionen
#006/18 - perinoid
#007/18 - dragmar

1,340

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

Mq napisał/a:

Wiem, że odbiegnę trochę od tematu, ale nigdy nie bawiłem się arduino, a jeszcze nie mam, więc zapytam, czy w arduino można taki program już gotowy i skompilowany wrzucić do procesora zwykłym programatorem bez tego bootloadera i będzie działał, czy arduino zmusza jakoś do posiadania bootloadera? Oczywiście wiem, że od tego momentu arduino już nie będzie działać jako arduino, ale czy taki program da się tak skompilować, żeby działał bez tego bootloadera?

Tak, można programować Atmegę 328P, będącą "na pokładzie" Arduino normalnym programatorem, np. USBasp (jest taka możliwość nawet z poziomu samego Arduino IDE). Bootloader nie jest potrzebny do działania programu.

1,341

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

Przełączanie stacji jak najbardziej jest wykonalne (bo w zasadzie można to zrobić w dowolnym momencie), choć nie bez dodatkowej elektroniki. Przełączanie TOSu to trudniejsza sprawa. Zapewne trzeba by generować dodatkowy reset, bo Arduino ma bootloader, który sprawia, że kod programu nie uruchamia się od razu, a na pewno opóźnienie jest znacznie większe od czasu rozpoczęcia ładowania TOSu. Osoby które zamówią u mnie moduły dostaną moduły z Optibootem. On startuje program dużo szybciej, niż bootloader ładowany przez Chińczyków. Pierwsza partia będzie eksperymentalna, stąd na pewno będą to moduły NANO V3 z portem USB do aktualizacji firmware.

Co do przełączania TOSu i stacji bez dziurawienia obudowy - ja to zrobiłem tak: http://www.atari.org.pl/forum/viewtopic.php?id=15042

1,342

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

Mq napisał/a:

Mam pytanie o ten STE_FIX.PRG. Poczytałem trochę w necie i z tego co wyczytałem jest to fix bugów związanych z rozdzielczościami w TOS 1.06, natomiast fix ten jest już zaaplikowany ponoć w TOS-ie 1.62. A pytanie jest przede wszystkim o to, czy oprócz tych opisanych wszędzie poprawek związanych z rozdzielczościami, robi ten fix coś jeszcze, że ma związek z zegarem, bo nigdzie nie znalazłem takich informacji?

Też nigdzie nie znalazłem tej informacji, ale doświadczalnie sprawdziłem, że na TOS 1.62 mimo wyświetlenia błędu mówiącego, że dla tej wersji TOS jest niepotrzebny powoduje on zsynchronizowanie zegara TOS z zegarem IKBD.

Jeszcze tylko potwierdzenie opóźnienia wprowadzanego przez układ (oczywiście w czasie odczytu z DS3231 opóźnienie będzie większe):
https://obrazki.elektroda.pl/2987837900_1536845832_thumb.jpg

Osoby chętne do zakupu gotowego modułu proszę o kontakt na PW z informacją czy czekają na dostawę części z Chin czy chcą szybciej ale drożej.

1,343

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

Jak pisałem projekt był przewidziany jako DIY. Mam bardzo ograniczone możliwości czasowe. Cena jaką proponuję za zmontowany moduł to 80zł + przesyłka, ale ze względu na ograniczone możliwości "produkcyjne" tylko 1 szt. na osobę. Na razie idą części z Chin na 5 sztuk. Za ok 1 m-ca powinienem je mieć u siebie. Jeśli komuś bardzo zależy na czasie to mogę zrobić na częściach z polskiej dystrybucji ale wtedy cena będzie 100zł + przesyłka i czas realizacji ok 2 tygodnie.

Petari (Peter Putnik) wkrótce powinien mieć spatchowany TOS 1.06 i 1.62 z obsługą zegara IKBD. W/g tego co mi napisał, obsługa tego zegara jest w tych TOSach ale z powodu błędu, nigdy go nie odczytują. Z jego poprawionym TOSem mój zegar powinien działać bez żadnego oprogramowania, podobnie jak na TOSie 2.06.

1,344

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

Kolejny update:

Zegar działa w każdym STf(m) i STe, niezależnie od wersji TOSu:
* dla STf(m) z TOS 1.00 - 1.04 potrzebny jest ST Control Panel (CONTROL.ACC), Panel jest używany zarówno do synchronizacji Zegara ST z Zegarem IKBD podczas restartu oraz do regulacji zegara,
* dla STe z TOS 1.06/1.62 potrzebny jest STE_FIX.PRG oraz STE Control Panel (CONTROL.ACC), STE_FIX jest używany do synchronizacji Zegara ST z Zegarem IKBD podczas restartu, natomiast Panel jest używany do regulacji zegara,
* dla STe z TOS 2.06 potrzebny jest XControl (XCONTROL.ACC), synchronizacja Zegara ST z Zegarem IKBD podczas restartu jest wykonywana przez sam TOS, Panel jest używany tylko do regulacji zegara.

Są jacyś chętni?

1,345

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

Na pytanie Mq chyba odpowiedziałem - tak to ostateczny kod, z ew. zmianami opisanymi powyżej.
Potrzebujesz: Arduino Nano V3, DS3231 For PI, 8-żyłową taśmę z końcówkami goldpin - z jednej strony wtyki (M), z drugiej gniazda (F) i kawałek termokurczki lub taśmy izolacyjnej.

1,346

(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,347

(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,348

(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,349

(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,350

(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.