726

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Tak wygląda moment przed wejściem do rozpakowanego programu użytkownika:

601C: A9 FF     LDA #$FF
601E: 8D 01 D3  STA $D301   ;PORTB
6021: A9 40     LDA #$40
6023: 8D 0E D4  STA $D40E   ;NMIEN
6026: 58        CLI
6027: 4C CA 86  JMP $86CA

To $86CA to jest mój program już po dekompresji. Tak więc w chwili wejścia do Twojego programu masz włączony OS ROM i wyłączony BASIC.

Ograniczenia exomizera są niestety :/ Obszar na którym operuje exomizer to teoretycznie $0000..$CFFF. $D800..$FFFF nie jest brany pod uwagę.
Ja wszystkie moje dotychczasowe programiki, które kompresowałem sfx'em umieszczałem między $2000..$BFFF i w razie potrzeby sam przepisywałem rozpakowany kod pod ROM albo poniżej $2000.

727

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Tam już jest $FE, bo użyliśmy profilu Atari XL/XE (-t 168):

2000: A0 24     LDY #$24
2002: 78        SEI
2003: A9 00     LDA #$00
2005: 8D 0E D4  STA $D40E   ;NMIEN

2008: A9 00     LDA #$00
200A: 8D 2F 02  STA $022F   ;SDMCTL
200D: 8D 00 D4  STA $D400   ;DMACTL

2010: A9 FE     LDA #$FE
2012: 8D 01 D3  STA $D301   ;PORTB

więc nic nie trzeba robić.

Świetne są te kawałki z NES-a. I z klawiszami też dają radę. Cenkju.

729

(13 odpowiedzi, napisanych Miejsca w sieci)

Będziesz Panie Pinokio zaskoczony :)

Miodzio, miodzio, miodzio, miodzio. Już słuchamy.

731

(6 odpowiedzi, napisanych Programowanie - 8 bit)

Pamiętacie taki efekt z Vicky'ego z przenikającymi się cyklicznie napisami?
Nic odkrywczego, ale oto efekt zabawy :)

732

(9,967 odpowiedzi, napisanych Bałagan)

Entomologia Motylkowska.

733

(157 odpowiedzi, napisanych Zloty)

Tak.

734

(157 odpowiedzi, napisanych Zloty)

Świetna inwitka! Koala zakodził?

Błąd w procedurach OS-a jest opisany przez Krótkiego tu: http://www.atari.org.pl/forum/viewtopic.php?id=9188

736

(364 odpowiedzi, napisanych Fabryka - 8bit)

.PSG to jest dump rejestrów AY: https://documentation.help/AY-3-8910.12 … _e9zqf.htm - raczej dostaniesz to albo z jakichś playerów pecetowych, albo z emulatora ZX Spectrum (ja używam do tego FUSE). Planuję player rozszerzyć jeszcze o inne formaty dumpów typu YM, VTX czy EPSG.
Formaty źródłowe to np. STC, PT3, PT2 i to są pliki zapisywane przez konkretne trackery na ZX Spectrum.

737

(364 odpowiedzi, napisanych Fabryka - 8bit)

No ale do czego innego chcesz używać SONari jak nie do grania? :>

.RAD to jest format programu Reality ADLib Tracker dla muzyki granej przez ADLib-a (OPL) a nie dla PSG (AY/YM). I do niego jak wiesz jest gotowy player - pozostało mi dodanie obsługi pamięci XRAM. Muzykę można sobie komponować np. tym: https://www.3eality.com/productions/rea … ib-tracker (mój player obsługuje formaty 1.0 i 2.1 plików - czyli starego i nowego trackera).

Playery dla SONari (AY/YM) to PSGPLAY oraz STCPLAY. Ten ostatni gra pliki .STC czyli skompilowane muzyczki z SoundTrackera (spectrumowego) nie miał jeszcze releasu, ale może już niebawem będzie.
Format dla dwóch AY to jest ProTracker 3 (dla ZX Spectrum) i mam kilka utworów Yerza w tym formacie a nawet parę innych od Draco. Player, jak już kiedyś powiedziałem się pisze, ale na razie jeszcze nic nie ma.

Więcej trackerów dla AY/YM może polecić Pan Yerzmyey.

Edit: Natomiast plik .PSG można sobie wygenerować za pomocą emulatora FUSE.

738

(293 odpowiedzi, napisanych Fabryka - 8bit)

Raid over Moscow.

739

(18 odpowiedzi, napisanych Kolekcjonowanie)

Cześć. Aktualne. Odezwę się w przeciągu kilku dni.

740

(364 odpowiedzi, napisanych Fabryka - 8bit)

Mq napisał/a:

Dotarły mi w końcu również Yamahy z dalekiego wschodu.

Jedwabnym Szlakiem :)

Mq napisał/a:

Zrobiłem trochę testów. Urządzenie śmiga elegancko, ale jest coś nie tak w kwestii 1xYM vs YM+YM.
Otóż przede wszystkim mam pytanie, czy na dyskietce atr tej 5MB któraś z muzyczek wykorzystuje dwa układy, czy wszystkie są pod jeden układ?
Najwięcej testuję muzyczkę GIANNA.

Nie. Wszystkie są dla jednego układu.

Mq napisał/a:

U mnie jest tak, że jak wsadzę jeden układ YM, obojętnie w którą podstawkę (mam podstawki w SONari), to wszystko ładnie gra. To sugeruje mi, że player puszcza na oba układy równolegle to samo. Natomiast jak wsadzę do SONari dwa układy YM, to zaczyna się jakiś bajzel robić. Brzmienia jakieś dziwne się robią i coś nie tak z tą muzyczką. Efekt jest taki, jakby grały oba układy jednocześnie, a fale generowane przez nie jednocześnie nakładały się na siebie robiąc różne interferencje itp. efekty, co powoduje że niektóre dźwięki zanikają, niektóre mają dziwne brzmienie, ale wrażenie mam takie, że gra wszystko poprawnie, tylko że niepotrzebnie na obu układach.
Wnioskuję to wszystko na podstawie tego, że kiedyś zrobiłem stereo na dwóch pokeyach i połączyłem wyjścia ich obu, wówczas też nakładały mi się te dźwięki powodując podobne efekty.

Jeżeli problem jest mniej-więcej taki jak mi się wydaje, to moim zdaniem powinno być tak, że player powinien rozpoznawać czy dana muzyczka jest przygotowana pod jeden YM czy pod dwa i wówczas odtwarzać się tylko na jednym układzie a nie na dwóch. Z resztą wszystko powinno być rozdzielone, żeby nigdy nie szła komunikacja równolegle do obu układów naraz.

Poprawię.

Mq napisał/a:

Edit: po dłuższych testach wydaje się, że jak włączę odtwarzanie na YM+YM, to już po włączeniu odtwarzania jak wcisnę reset na SONari, to opisany przeze mnie bajzel się naprawia i dalej gra wszystko dobrze. Słyszę wtedy delikatny jakby reverb/chorus w sensie, że słyszę, że grają oba YM i oba grają prawidłowo to samo, nie występują żadne efekty nakładania nieprawidłowego się fal, o których pisałem wcześniej, że mi się tak wydawało. Natomiast za każdym razem jak od nowa włączę odtwarzanie, to znowu mam bajzel i znowu pomaga reset na SONari. Teraz mam wrażenie, że może coś nie tak jest z inicjacją dwóch YM, może gdzieś tam na początku trzeba by tą inicjację poprawić? Czy ktoś zanotował takie same lub podobne efekty jakie u mnie występują?

Inicjalizacja polega na wyciszeniu generatorów. Ale to chyba za mało - ustawię tam jeszcze częstotliwości na 0.

sun napisał/a:

Mq: co do 2xYM to np. yerzmyey robi niektóre kawałki na zx81 i karcie turbosound. Tylko czy sa gdzieś w psg to nie wiem.

Tak jest. Dla TurboSound są osobne moduły i player do nich jest w planach.

741

(9,967 odpowiedzi, napisanych Bałagan)

dely napisał/a:

A u nas dalej jak w lesie.

To chyba po linii i na bazie w zielonym świecie... ?

742

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

@Krótki: Robię tak:
Ustawiam breakpointa w 1416:

    1416: A9 C0             LDA #$C0
    1418: 8D 0E D4          STA NMIEN
    141B: 20 7D 15          JSR $157D
    141E: A9 04             LDA #$04
    1420: 85 D3             STA $D3
    1422: A9 22             LDA #$22
    1424: 8D 2F 02          STA SDMCTL
    1427: A9 96             LDA #$96
    1429: 85 D5             STA $D5
    142B: 20 7D 15          JSR $157D

Przed wykonaniem tego jesteśmy zawsze w linii 287 (już po wykonaniu VBLK) i mamy:

Altirra> .antic
DMACTL = 00  : none 2-line
CHACTL = 02  : invert
DLIST  = 401b
HSCROL = 00
VSCROL = 00
PMBASE = 00
CHBASE = e0
NMIEN  = 40  : vbi
NMIST  = 1f  :
PENH/V = 00 ff

w SDMCTL i DLPTRS mamy:

022F: 00 57 11

a w 401b czyli w miejscu gdzie była dlista dla winietki podczas ładowania (Loading: Rockman, (c) Mirage itd.) mamy:

401B: 00 E8 00 DB 00 CF 00 C3 00 B8 00 AC 00 A2 00 9A
402B: 00 90 00 88 00 7F 00 78 00 70 00 6A 00 64 00 5E
403B: 00 57 00 52 00 32 00 0A 00 80 A0 20 40 00 01 35

W 1157 czyli tam gdzie ma być nowa dlista dla ekranu Rockmana wg cieni (ale w DLPTR jeszcze jej nie ma) jest:

1157: 70 70 80 10 42 EC 34 02 82 02 02 44 E6 35 04 04
1167: 04 04 04 04 04 04 04 80 50 11 82 11 80 42 A5 1F 
1177: 60 52 51 21 10 52 51 21 41 57 11

Więc teraz krok po kroku wykonuję kod:

(30210:287,106) A=18 X=09 Y=18 S=F5 P=31 (     C)  1416: A9 C0             LDA #$C0
(30210:287,108) A=C0 X=09 Y=18 S=F5 P=B1 (N    C)  1418: 8D 0E D4          STA NMIEN    [$D40E]
(30210:287,112) A=C0 X=09 Y=18 S=F5 P=B1 (N    C)  141B: 20 7D 15          JSR $157D    [$157D] = $A5
(30210:288,  4) A=C0 X=09 Y=18 S=F3 P=B1 (N    C)  157D: A5 14     L157D   LDA RTCLOK+2 [$14] = $D7
(30210:288,  7) A=D7 X=09 Y=18 S=F3 P=B1 (N    C)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
(30210:288, 10) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
(30210:288, 13) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
(30210:288, 16) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
...

aż do rozpoczęcia nowego ekranu:

(30211:  8,  1) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
Altirra> .antic
DMACTL = 00  : none 2-line
CHACTL = 02  : invert
DLIST  = 401b
HSCROL = 00
VSCROL = 00
PMBASE = 00
CHBASE = e0
NMIEN  = c0  : dli vbi
NMIST  = 1f  :
PENH/V = 00 ff

i lecimy dalej... aż do:

(30211: 22,109) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
(30211: 22,112) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
(30211: 23,  1) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
(30211: 23,  4) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
(30211: 23,  7) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
(30211: 23, 10) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  157F: C5 14     L157F   CMP RTCLOK+2 [$14] = $D7
(30211: 23, 13) A=D7 X=09 Y=18 S=F3 P=33 (    ZC)  1581: F0 FC             BEQ $157F
(30211: 23, 20) A=D7 X=09 Y=18 S=F0 P=37 (   IZC)  C018: 2C 0F D4  LC018   BIT NMIST    [$D40F] = $9F
(30211: 23, 24) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  C01B: 10 03             BPL $C020
(30211: 23, 27) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  C01D: 6C 00 02          JMP (VDSLST) [$180B] = $85
(30211: 23, 34) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  180B: 85 D0             STA $D0      [$D0]
(30211: 23, 38) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  180D: 86 D1             STX $D1      [$D1]
(30211: 23, 42) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  180F: 84 D2             STY $D2      [$D2]
(30211: 23, 46) A=D7 X=09 Y=18 S=F0 P=B5 (N  I C)  1811: A9 23             LDA #$23
(30211: 23, 48) A=23 X=09 Y=18 S=F0 P=35 (   I C)  1813: 8D 00 D4          STA DMACTL   [$D400]

No i jakim cudem wskakuje tu DLI? Dopiero ono ustawia DMACTL na $23.

Stan ANTIC-a:

DMACTL = 23  : wide 2-line dlist
CHACTL = 02  : invert
DLIST  = 401b
HSCROL = 00
VSCROL = 00
PMBASE = 00
CHBASE = e0
NMIEN  = c0  : dli vbi
NMIST  = 9f  : dli
PENH/V = 00 ff

Oczywiście zaufałem Altirrze, że poprawnie emuluje zachowanie ANTIC-a, ale bazując na tym zaufaniu zrobiłem patcha:

03c0: 41 c0 03
d402: c0 03

który ustawia pustą dlistę jeszcze przed uruchomieniem programu dekompresującego i wszystko działa, bo żadne przerwanie DLI nie jest wtedy uruchamiane.

I o co tutaj chodzi?

Edit: Dla porządku jeszcze dlista winiety:

401B: 70 70 70 70 70 70 70 70 42 2C 40 00 00 02 41 1B
402B: 40

Rozumiem, że ANTIC ma w buforze śmieci, ale dlaczego w takim razie DLI pojawia się w 23 linii skanningowej a nie w 8? Najpierw mamy pustą linię a potem linię 8 ze skrolami i DLI - VSCRL jest 0, więc nawet jeśli ANTIC ma drugi rozkaz zbuforowany to DLI powinno się pojawić w linii 16.

Edit 2: Hmmm $E8 to %11101000 czyli VSCROLL+ LMS + DLI.

Edit 3: Właściwie to zakładając, że Altirra kłamie co do stanu ANTIC-a, można założyć że w buforze jest linia trybu 5 albo 7 z ustawionym DLI - to by tłumaczyło przerwanie w linii 23. Dzięki @Krótki!

Edit 4: I rzeczywiście:

Altirra> .dlhistory
Ycoord DLIP PFAD H V DMACTL MODE
--------------------------------
    8: 401b f03c 0 0   00   c5
   24: 401b f03c 0 0   00   c5
   40: 401b f03c 0 0   00   c5
   56: 401b f03c 0 0   00   c5
   72: 401b f03c 0 0   00   c5
   88: 401b f03c 0 0   00   c5
  104: 401b f03c 0 0   00   c5
  120: 401b f03c 0 0   00   c5
  136: 401b f03c 0 0   00   c5
  152: 401b f03c 0 0   00   c5
  168: 401b f03c 0 0   00   c5
  184: 401b f03c 0 0   00   c5
  200: 401b f03c 0 0   00   c5
  216: 401b f03c 0 0   00   c5
  232: 401b f03c 0 0   00   c5

Niezłe - w ten sposób mając wyłączone DMA i zgaszony ekran można generować przerwania DLI co 16 linii skanningowych. A używając trybu graficznego i VSCROL co 1..16 linii.

743

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

@Krótki: Tak właśnie robiłem, prócz tego debug krok po kroku. Kilka razy, bo nie dowierzałem swoim oczom. Ale muszę to jeszcze raz zweryfikować, bo to był długi wieczór(tm) a pacz zrobiłem w późnych godzinach nocnych.

744

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

Dzięki Krótki. Muszę to w takim razie jeszcze raz zweryfikować.

745

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

Dzięki. Oryginalna działa ładnie.

Edit: Ale jest zupełnie inna niż ta od Duddiego. Na początku przed załadowaniem winiety jest dodany migający skrol, na końcu ładuje jeszcze dodatkowo blok danych przy zgaszonym ekranie.

746

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

Może pierwsze partie poszły z błędem, który potem poprawiono?

Edit: Stryjek - zgrałbyś swoją wersję i udostępnił?

747

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

Nie ma za co. Ale faktycznie zachowanie ANTIC-a jest dla mnie zaskakujące. Może ktoś wie, jaka jest tego przyczyna?
Trochę spróbuję uściślić powyższy opis.

Podczas ładowania programu pojawia się czołówka z informacjami o grze i wydawcy - wszystko w trybie 2 bez przerwań DLI.
Po zakończeniu ładowania gry wyłączane są przerwania NMI i do DMACTL i DMACTLS wpisywane jest 0 (przy synchronizacji z RTCLOK, a więc ANTIC jest poza ekranem i maluje pustą linię) - czyli blokowane jest DMA dla ANTIC-a na dlistę i sprajty, ekran jest zgaszony.
Następnie rozpakowywana jest gra i w miejscu gdzie znajdowała się dotąd dlista są bajty: $00 $E8 czyli pusta linia bez przerwań, oraz linia trybu 8 (3 BASIC) z włączonymi scrollami i DLI.
DMACTL ciągle zawiera 0, DLPTR wskazuje na wymienione bajty.
Następnie odblokowywane są przerwania NMI.

I po chwili mniej więcej w linii 23 następuje strzał czyli zgłaszane jest przerwanie DLI (!). Dlaczego?

748

(21 odpowiedzi, napisanych Emulacja - 8bit)

Ze sprzętem to ja mam zawsze problem przy zakupach, bo kompletnie się tym nie interesuję. Ma działać, ma mieć dużo RAM-u i ma mieć wystarczający dysk. I matowy wyświetlacz :) Więc tu nie pomogę bo modele i numerki pecetów nic mi nie mówią.
Od lat używam Ubuntu, bo nie zamierzam się zajmować ciągłymi updatami i konfiguracjami. No i on mi się całkiem dobrze sprawuje.
Na PC używam emulatorow atari800 i altirra, fuse, vice, fceux. Ale piszę na nim programy tylko dla Atari.
Z kwestiami dumpów na flopa czy konwersjami obrazów się nie stykami, bo do połączenia PC/Atari używam SIO2PC+sio2bsd. Czyli mapuję sobie .atr albo katalog jako urzadzenie SIO.
Tak więc jak widzisz słaby ze mnie retrofan :) i nie za wiele mogę pomóc.

749

(21 odpowiedzi, napisanych Emulacja - 8bit)

1. https://github.com/epi/xedisk
2. http://atari8.sourceforge.net/franny.html
3. http://mono.atari.pl/fuse/atari8fs-0.3.tar.gz

Pierwsze dwa to zwykłe narzędzia które pozwalają na zarządzanie plikami w .atr.
Ostatni to dwa programy - atrfs pozwoli zamontować plik atr jako ciągły plik w filesystemie, a ataridosfs pozwoli taki ciągły plik zamontować jako podstrukturę katalogów w podanym miejscu - więcej tutaj: http://www.atari.org.pl/forum/viewtopic.php?id=9378

Jest jeszcze plugin Pajero, ale nigdy go nie używałem z racji na to że jest dla Windowsa.

Edit: Oczywiście musisz sobie napisać skrypt w bashu, który z podanych atrów porobi katalogi i przekopiuje tam pliki. Z gotowym narzędziem, które to samo zrobi się nie spotkałem (ale też nie szukałem).

750

(364 odpowiedzi, napisanych Fabryka - 8bit)

Hmmm, zagadka. Zaopatrzę się w SIO2SD i spróbuję z tym powalczyć.
Po drodze Candle potestował zachowanie SIDE2 z włączonym PBI BIOS-em w Ultimate1M. Wnioski:
0. Player gra bez zacięć z SIDE.
1. Kiedy ustawione jest standardowe SIO player działa bez zacięć z SIO.
2. Kiedy ustawiony jest jakikolwiek patch HSIO lub BT player przycina się na czas komunikacji kiedy gra z SIO. Prawdopodobnie wyłączane są przerwania, ale bez sprawdzenia co tam jest w ROM-ie nie mogę tego na 100% potwierdzić.
Wyszedł jeszcze błąd skutkujący ponownym odtworzeniem zawartości bufora kiedy komunikacja definitywnie się nie powiodła (po kilku próbach).
No to jest co robić :)
Dziękuję za testy i raporty o błędach Panowie.