76

(34 odpowiedzi, napisanych Sprzęt - 8bit)

Witam serdecznie.

A nie mielibyście ochoty "lekko" zmodyfikować płytkę, wtedy będzie można zrobić JEDa co powinien z każdym GALem zadziałać. Kłopot jest w tym, że coraz trudniej o części a i zamienniki są jakie się trafią.

Tam w tym projekcie i tak połowa pinów nie jest potrzebna.
WE i OE pamięci na stałe dać.

PHI2 z ATARI wpuścić np na GAL_PIN-2
GAL_PIN-19 do GAL_PIN-1

Na wszelki wypadek GAL_PIN-11 do GND

a reszta pinów GALa jak wygodniej na płycie. Byleby INy i OUTy domyślnie szły bo szalony WinCUPL czasem dostaje czkawki jak mu IN/OUT w IN się zamienia.

Wtedy dla 74HC574 zbocze poleci z logiką i PINem gdzie wpadło PHI2
A RD45 będzie zatrzaskiwane wewnątrz GALa w przerzutniku do tego stworzonym. Który według dokumentacji wstaje na H.

A jakby tak od razu rozdzielić RD4 i RD5 oraz przepuścić OE dla 74HC574 i przyszłościowo wpuścić do GALa D6 i D5 to kto wie czy tą samą płytką nie obskoczyło by się Atarimax 128 KB Flash lub SIC! 512 w trybie ReadOnly. Możnaby wreszcie na czymś porządnym posadzić SpartaDOSa bo teraz tak słabo z tą dostępnością do innych cartów. Oczywiście byłby inny wsad do GALa ale to już banał.

... i byłoby OpenSource bez jakiś blokad.

Przykład S-XEGS v.2:

Name     SXEGSV2 ;
PartNo   00 ;
Date     2022-06-16 ;
Revision 01 ;
Designer GienekP ;
Company   ;
Assembly None ;
Location  ;
Device   g16v8ms;

/* *************** INPUT PINS *********************/
PIN 1  = nCLK;
PIN 2  = PHI2;
PIN 3  = RW;
PIN 4  = nCCTL;
PIN 5  = nS4;
PIN 6  = nS5;
PIN 7  = D7;
PIN 8  = D6;
PIN 9  = D5;
PIN 11 = En;


/* *************** OUTPUT PINS *********************/
PIN 12 = T1;
PIN 13 = T2;
PIN 14 = RD4;
PIN 15 = RD5;
PIN 16 = nCE;
PIN 17 = nOE;
PIN 18 = LATCH;
PIN 19 = nPHI2;

/* ****************** LOGIC ************************/
T1     = 'b'0;
T2     = 'b'0;

nPHI2  = ( !PHI2 );
nRW    = ( !RW );
CCTL   = ( !nCCTL );
nD7    = ( !D7 );

nOE    = nS4;
nCE    = ( nS4 & nS5 );

trig   = ( CCTL  & nRW  );
ntrig  = !trig;

LATCH  = !( trig & nPHI2 ) ;

RD4.D = ( ( trig & nD7 ) # ( ntrig & RD4 ) );
RD5.D = ( ( trig & nD7 ) # ( ntrig & RD5 ) );

77

(9 odpowiedzi, napisanych Programowanie - 8 bit)

Dzięki za wszystkie sugestie (XEX & COM też ;) ), muszę przestudiować jeszcze procedurę inicjalizacji. Swoją drogą trzeba strasznie uważać jak się pisze dla 8-bitowca i dobrze się zastanowić nad typem liczby w operacjach, łądowanie tu i tam typu INT znacznie spowalnia liczenie. Z drugiej strony kompilatorek całkiem fajnie układa ten kod.
Mam jeszcze takie pytanko, jak zapisuje się funkcję przerwania (chyba kończyć się musi RTI)?  Podejrzewam, że można by zrobić trik ze wstawką w asm i wywołaniem funkcji przez wskaźnik, ale chciałbym tak jakoś "elegancko"

78

(9 odpowiedzi, napisanych Programowanie - 8 bit)

A na RAM-Carcie da się zrobić tak, że po włączeniu ATARI od razu ruszy mój program?
Bo w zasadzie to interesuje mnie taki bajer, że pisze sobie programik w C ładuje na cardridge i po włączeniu komputera rusza mój program. Nie chce bawić się w ASM 6502 bo odwykłem od niego. Co prawda jeszcze potrafię czytać ASM 6502 ale do pisania to już straciłem wyczucie (chyba wymarły neurony w tej części mózgu ;) ).
Dzięki za wszystkie sugestie

79

(9 odpowiedzi, napisanych Programowanie - 8 bit)

Mam pytanko techniczne.
Napisałem sobie prosty program w C skompilowałem do XEX i ruszył mi bez problemu na emulatorku. I teraz pytanie jak z XEX zrobić coś co by było obrazem cartridgea ROM, BIN albo CAR. Czy to trzeba jakieś parametry kompilacji? Albo gdzie znajdę opis formatu cartridgea (dla zrobienia ewentualnego konwertera).

Powiem, że mnie trochę wzieło to C dla ATARI. Ten kompilatorek całkiem fajnie to robi.
Żeby nie było że zaśmiecam to przykładzik:

Program w BASIC?u:
10 POKE 712,PEEK(20):GOTO 10

zapisałem sobie w C (leci bez bibliotek):

#define PEEK(_addr) (*((unsigned char *)(_addr)))
#define POKE(_addr,_val) (*((unsigned char *)(_addr))=_val)
int main (void)
{
while (1) {POKE(712,PEEK(20));};
return 0;
}

no i kompilator zroibł z tego:
; ---------------------------------------------------------------
; int __near__ main (void)
; ---------------------------------------------------------------
.segment    "CODE"
.proc    _main: near
.segment    "CODE"
L0003:    lda     $0014
    sta     $02C8
    jmp     L0003
.endproc

czyli tak jak chciałem.
A teraz chce wyprodukować CAR :)

Aha, do kompilacji użyłem takiego pliku BAT (żeby nie grzebać się w zmiennych środowiskowych na XP):

echo off
SET FileName="nazwapliku"
SET CC65_Path=c:\cc65
PATH=%CC65_Path%\BIN
SET CC65_INC=%CC65_Path%\INCLUDE
SET CC65_LIB=%CC65_Path%\LIB
SET LD65_CFG=%CC65_Path%\DOC
IF EXIST %FileName%.xex del %FileName%.xex
cl65 -O -t atari %FileName%.c -o %FileName%.xex
IF NOT EXIST %FileName%.xex pause
IF EXIST %FileName%.o del %FileName%.o

80

(21 odpowiedzi, napisanych Emulacja - 8bit)

niedługo będzie cas2hex i hex2cas z obsługa zmiany prędkości
pytanko:
ma ktoś jakie programy albo jakieś info albo cokolwiek na temat turbo rom
- ja mam taki magnetofon ale nic poza tym (oprócz paru kaset cholernie zaszumionych)

zrobiło by się taki konwerterek z xex na turbo rom

81

(45 odpowiedzi, napisanych Software, Gry - 8bit)

Cześć
A może by tak podwiesić FPGA programowalnego. Przed ruszeniem głównego softu najpierw poszły by dane co ma aktualnie FPGA robić, a potem wymiatałby wszystko w jednym cyklu. Takie coś też jest możliwie.

82

(8 odpowiedzi, napisanych Emulacja - 8bit)

Wygląda na to, że więcej z plików cas nie można wydusić. Trzeba by opracować inny format zapisu obrazu taśm. Pośredni pomiędzy wav a cas. Format ten musi jak najbardziej odwzorować zachowanie magnetofonu. Taki format dawałby możliwość maksymalnego uniknięcia błędów. Proszę zauważyć, że czasami plik, który na oryginalnym ATARI jeszcze się wczytuje po przeróbce na cas już nie. Nie wspominając już o niestandardowych plikach. Należało by zrobić emulator magnetofonu (może to śmieszne ale?). W magnetofonie dane z taśmy w postaci sygnału przesyłane są do filtrów pasmowo przepustowych. Rezultatem działania tej elektroniki jest ciąg zer i jedynek. Czyli tak naprawdę z wyjścia magnetofonu biegnie jeden kabel z sygnałem, w którym sygnał ma raz 0 a raz 1. Czas trwania zera lub jedynki zależy od transmisji i danych. Jeżeli włożymy kasetę np. z muzyką to także otrzymamy ciąg zer i jedynek. Po prostu, jeżeli pojawi się harmoniczna w zakresie działania filtrów to na wyjściu coś otrzymamy. A teraz proszę sobie wyobrazić inną sytuację (Stryker ty to wiesz), mamy oryginalną kasetę i ma ona zabezpieczenie w postaci zakłócenia. Loader sprawdza czy dane zakłócenie jest, ale może go zobaczyć tylko pod postacią 0 lub 1. Czyli zakłócenie musi być w zakresie działania filtrów. Jeżeli jest znaczy, że mamy oryginał, jeżeli nie fałszywka. Plik CAS w żaden sposób nie może tego odwzorować, a plik, który był by odzwierciedleniem strumienia tak. A co z nietypowymi blokami? Żaden problem, przecież mamy strumień, który to odwzorowuje. A co z wszystkimi rodzajami TURBO, które przesyłają dane przez ten sam kabel? Działają przecież w innym zakresie częstotliwości i gdyba tak te częstotliwości dołożyć to ? Domyślcie się sami.
Dodatkowo taki plik idealnie nadaje się do przekonwertowania go na poprawny plik cas. Dlaczego? Jeżeli plik wczytuje się na oryginalnym magnetofonie to znaczy, że mimo szumów i wielu zakłóceń w zakresie działania filtrów sygnał jest ok. Jeżeli plik co chwile staje w jednym miejscu ale raz na 10 razy się wczytuje to znaczy że dało by się ten fragment przesamplować kilka razy i puścić na kilka filtrów np. z rożnymi szerokościami i zobaczyć który daje najlepszy rezultat.
Ja to widzę tak:
Sygnał w postaci pliku wav (albo bezpośrednio próbkowany z linii) zostaje puszczony na filtry. Pod pojęciem filtru rozumiem równanie matematyczne, które pozwala wydobyć interesujące harmoniczne. W rezultacie otrzymuje ciąg zer i jedynek taki, jaki dałby mi magnetofon. Np. 0000000000111111000000111111000000 ? Takie coś zajmuje kupę miejsca, (ale mniej niż wav) więc zapisuję to w postaci np. 10,134 (czyli 128 +6),6,134,6,.. .
Teraz trochę mniej, ale trudno to jest plik pośredni między wav a cas. Oczywiście dla standartowych bloków mogę sobie przerobić to na cas  (metodą podobną do wav2cas). Poszukiwanie błędów w takim pliku jest dużo łatwiejsze. Zwłaszcza, że można wygenerować plik z innymi harmonicznymi żeby wyczaić np. czy jest jakieś załamanie na taśmie.
Wychodzi tutaj problem z emulacją. Przydałoby się żeby emulator przyjął taki plik. Tzn. żeby bezpośrednio kopiował te zera i jedynki na port SIO. System wtedy zacznie już kombinować, ustali prędkość i zacznie ładować program. Jeśli będą jakieś zabezpieczenia to nie ma problemu, bo mamy je odwzorowane.

Tak to widzę, wiem, że wiele osób ma stare taśmy a jakość ich z biegiem lat maleje. Format cas niestety nie spełnia wszystkich oczekiwań. Wiem też, że było wiele osób w Polsce, których nie było stać na stację dysków. Teraz można sobie emulować (i nie tylko) nawet twardziela. Tylko, że wspomnienia ?ja miałem magnetofon? są niezapomniane. To było jak siedzenie przed sonarem na łodzi podwodnej.

Pozdrawiam.

Gienek
plug@poczta.fm

P.S. jeśli było by wsparcie takiego formatu w emulatorze to ja oczywiście zrobię soft zamienijący wav na ten format, na cas i odwrotnie.

83

(8 odpowiedzi, napisanych Emulacja - 8bit)

Witam
Opracowałem nowy program przeznaczony do naprawiania plików CAS. Ponieważ jest to wersja testowa może działać różnie.
Program jest pewnym dopełnieniem wav2cas. Ci, co używali wiedzą, że konwersja plików wav na cas narażona jest na wiele błędów. Najczęściej są to pojedyncze błędy, które uniemożliwiają poprawny odczyt. Im plik dłuższy tym większe prawdopodobieństwo błędnego pliku jako całości. Większość z tych błędów można łatwo naprawić. Można się domyśleć, że jak zrobimy sobie np. trzy pliki cas tego samego programu to jest duża szansa, że z tych trzech da się skompletować jeden poprawny. Ręczna robota jest możliwa, ale bardzo żmudna. Więc dlaczego nie kazać robić tego automatycznie? No kazałem ?

Program uruchamiamy skryptem (może w przyszłości zrobię gui dla wszystkich programów z rodziny cas):

cas2cas plik1.cas plik2.cas plik3.cas plik_dobry.cas

Program przyjmuje też format hex jako wejście i wyjście (przyjęta zostanie domyślna transmisja 600 bodów)
Czyli np:

cas2cas plik1.hex plik2.hex plik3.hex plik_dobry.hex

Oczywiście można hex z cas mieszać. I na przykład podstawić dwa pliki cas i jeden hex lekko przerobiony przez nas,

Poprawny kod (według algorytmu) zostanie zapisany w plik_dobry

Program można użyć jako np. konwertera hex na cas i odwrotnie. Wystarczy podać jako plik wejściowy trzy razy tą samą nazwę:

cas2cas plik.hex plik.hex plik.hex plik_dobry.hex

Plik wyjściowy zostaje znormalizowany (prędkość, przerwy między blokami) oraz zostaje poprawiona suma kontrolna (dla standartowych bloków). Można, więc sobie pogrzebać w pliku cas (jakieś zabezpieczenia, nieśmiertelności) a następnie wygenerować plik z poprawnymi sumami kontrolnymi.

Teraz przedstawię jak program dokonuje korekcji, żeby zrozumieć jak go najlepiej używać. Jeśli ktoś ma jakieś ciekawe pomysły to bardzo proszę o podzielenie się ze mną. To jest wersja testowa, więc zrobiłem to, co wydawało mi się za najprzydatniejsze. Zależało mi żeby program możliwie maksymalnie był automatyczny.

Program wczytuje plik cas lub hex do pamięci w postaci recordów.
Analiza rozpoczyna się od nadania statusu w postaci liczby każdemu rekordowi.
1- Jeżeli rekord ma długość 132 i ma poprawną sumę kontrolną
2- Jeżeli rekord ma długość 132 i suma jest błędna
4- Jeżeli rekord ma inną długość i ma poprawną sumę
5- Jeżeli rekord ma inną długość i ma nie poprawną sumę.
Następnie program skanuje rekordy od początku i jeżeli trafi na rekord o statusie 5 to może mu zmienić status na 3 (Rekord, który powinien mieć długość 132) gdy znajduje się choć jeden rekord za nim o długości 132. Wyłapujemy w tym miejscu, które bloki są niepełne.
Teraz robimy sortowanie. Wybierany jest blok z trzech dostępnych plików według priorytetu.
Jeżeli chociaż jeden z trzech plików jest ?1? to go wybieram. Gdy wszystkie mają 2 analizuję bajt po bajcie wszystkich 3 i wybieram najbardziej możliwą wersję, a następnie korekcja sumy. Gdy trafiam na rekord o statusie 3 (a nie ma 1 w pozostałych) to szukam brakującego ciągu znaków. Gdy trafiam na rekord 4 to pozostawiam go bez zmian. Gdy trafiam na rekord 5 to już nic się nie da zrobić.
Przy wielu błędach "3", porgram może się powiesić gdyż nie może zaskoczyć gdzie jest następny blok. Czasami poprawienie na oko, chociaż jednego hexa może poprawić wynik.

Następnie przerwy w pliku wynikowym są normalizowane i poprawiane są sumy kontrolne. Na koniec plik jest zapisany.

Pozdrawiam

84

(4 odpowiedzi, napisanych Emulacja - 8bit)

Wygląda że metoda z Wav2CAS jest fajna bo prosta (zliczanie cykli) ale niestety bardzo wrażliwa.

Trzeba by zrobić tak jak robi to magnetofon - filtarmi!!!

Przychodzi mi do głowy tylko FFT (szybka transformata fouriera) - tylko te wavy takie wielkie

Albo samplowanie online z kasety (jeśli błąd to cofamy i fruuuu)

MM: Banned! Jak Ci sie kilka razy wcisnelo wyslij to jest przycisk do kasowania swoich postów.

85

(4 odpowiedzi, napisanych Sprzęt - 8bit)

Ok tylko co się dzieje z sygnałami na wyjściu z atari
Atari musi wysłać jakieś bajty i coś odebrać w odpowiedzi.
Czy dzieje się to ze standardową prędkością 19200?
Jaki komunikat wysyła ATARI że jest gotowy aby stacja przesyłała dane?

86

(4 odpowiedzi, napisanych Emulacja - 8bit)

Mam zamiar zrobić soft który będzie wczytywał błędne casy.
Jest problem z różnymi rodzjami błędów.

Niestety trzeba mieć trochę czasu żeby posamplować wiele próbek!

Jeśli ktoś ma jakąś gierke która mu się nie wczytuje to
niech przesampluje ją 3 razy, zrobi 3 różne casy i niech mi podeśle!

87

(4 odpowiedzi, napisanych Sprzęt - 8bit)

Potrzebuję opis botowania od strony sprzętowej ATARI.
Chodzi mi to to jakie sygnały wysyła ATARI i jakimi odpowiada stacja zaraz bo zimnym starcie. O magnetofonie już wiem w zasadzie wszystko (dane lecą w ciemno ).
Gdzie to można zdobyć?

88

(4 odpowiedzi, napisanych Sprzęt - 8bit)

Ja też popieram CAS !!!