801

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

802

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

803

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

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

804

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

805

(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ł?

806

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

807

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

808

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

809

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

810

(364 odpowiedzi, napisanych Fabryka - 8bit)

Nie ma za co. Jak pisałem, przeprowadzałem testy z SIO2PC+SIO2BSD oraz ze stacją LDW, a one w przypadku problemów z transmisją potrafią przestawić się na prędkość standardową - zakładałem więc, że SIO2SD jako emulator FDD zachowa się tak samo :). Człowiek uczy się całe życie.

811

(364 odpowiedzi, napisanych Fabryka - 8bit)

Pinokio na moją prośbę przeprowadził testy z SIO2SD i z SIDE2. Wnioski są następujące:
1. SIO2SD trzyma prędkość US taką, jak ustawi się magicznymi klawiszami K1..K4 i nie pozwoli się przestawić z poziomu OS na prędkość niższą. To powoduje przycinanie odgrywania. Należy więc eksperymentalnie zejść z prędkością na SIO2SD do akceptowalnego poziomu. Jak już pisałem kiedy HS Index jest niższy niż 8 wtedy SDX wyłącza przerwania podczas komunikacji i player się zatrzyma (do tego poziomu próbuje grać, do momentu kiedy skończą się mu dane w buforze), ale po zakończeniu ładowania powinien kontynuować odtwarzanie. W zasadzie dla użytkownika więc nie ma znaczenia czy NMI są blokowane czy nie - trzeba na SIO2SD zejść z prędkością do poziomu kiedy odtwarzanie będzie już płynne. Ustawienie prędkości 19200 (czyli NORMAL) na pewno nie będzie blokować odtwarzania, ale to przypadek skrajny.
2. SIDE2 działa płynnie z załadowanym sterownikiem SIDE2.SYS (obsługa SIDE2 w Ultimate1M jest wyłączona) - nie ma żadnych przestojów. Chwilowo nie testowano obsługi SIDE2 w Ultimate1M (co uwalnia od konieczności ładowania sterownika SYDE2.SYS), więc na razie nie umiem powiedzieć jak to zadziała w takiej konfiguracji.
Dzięki Pinokio za testy!
Tak czy inaczej w następnej wersji przywrócę ładowanie dumpa do XRAM-u jeśli ten jest dostępny żeby uniezależnić się trochę od konfiguracji sprzętu i prędkości urządzenia.

Edit: Szczególnie interesuje mnie informacja czy program w jakiejś konfiguracji się ZAWIESZA? Bo to nie powinno się nigdy wydarzyć. Odtwarzanie można przerwać klawiszami ESC i BREAK, choć czasem trzeba zaczekać na zakończenie operacji I/O.

812

(18 odpowiedzi, napisanych Kolekcjonowanie)

Sikor napisał/a:

a potrzebujesz na stałe?

Tak. Dziękuję za propozycję, ale wolę mieć swoje na wypadek gdyby się miało zepsuć :)

813

(18 odpowiedzi, napisanych Kolekcjonowanie)

Czyli:

1. Kod produktu,
2. Uruchomienie SI2.EXE (o ile człowiek wyrazi chęć),
3. Zdjęcie płyty głównej (o ile człowiek wyrazi chęć) żeby zidentyfikować kwarc

powinno zdać egzamin. Wielkie dzięki za pomoc.

814

(364 odpowiedzi, napisanych Fabryka - 8bit)

A którą masz wersję SDX?
Testowałem player z LDW2000 (albo CA2001), SIO2PC (sio2bsd), IDE+ i ramdyskiem. Z SIO2SD nie powinno być raczej takich problemów.

Edit: Czy player się zawiesza czy zatrzymuje na czas odczytania bloku danych a potem kontynuuje odgrywanie?

815

(364 odpowiedzi, napisanych Fabryka - 8bit)

sun napisał/a:

Pytanko mam, ponieważ odpalając psgplayh z sio2sd odtwarzanie "staje" na czas doczytania danych.
Konfig to U1MB i sio2sd. Prędkość SIO $07. Zobaczę czy zabuja na $0A i czy to coś pomoże. Docelowo będzie z SIDE2 ale gniazda w "w doręczeniu" :)

Program powinien sam przełączyć prędkość z turbo na normal. Ale sterownik SIO w SDX ma taki ficzer, że dla HSINDEX <= 8 OIDP wyłącza przerwania NMI. To może być powodem stawania playera (bo gram na VBLKI). Można to przestawić tak, jak napisał x_angel, albo próbować przesunąć próg dla NMI też przez SIOSET, ale chwilowo nie mam jak sprawdzić jak to zrobić - na pewno jest to opisane w manualu (MAN SIOSET).

816

(18 odpowiedzi, napisanych Kolekcjonowanie)

Chciałbym zakupić Atari w wersji NTSC (najchętniej 130/65XE, ewentualnie 800XL) ale pewnie pozostaje mi tylko ebay stąd mam kilka pytań:
1. Czy każdy model 8-bit Atari XL/XE był wypuszczany w wersji NTSC?
2. Czy wersję NTSC można zidentyfikować po jakichś zewnętrznych cechach czy trzeba rozkręcać komputer?
3. Czy w NTSC nie występuje przełącznik kanałów TV?
Wiem, że 1200XL występował wyłącznie w wersji NTSC, ale jak to jest z pozostałymi modelami?

817

(14 odpowiedzi, napisanych Programowanie - 8 bit)

@gorgh: Przećwiczone i działające (bo akurat potrzebowałem).
Mój plik.dta zawiera w jednym bloku dane i program który docelowo jest w $A000. I to są dane RAW bez żadnych nagłówków (nie używam kompresji raw, bo musiałbym użyć dekompresora strumieniowego, a to mi akurat nie odpowiada tutaj). Dekompresję przeprowadzam z pamięci w miejsce docelowe i ja akurat używam dekompresji wprzód.
Robię:

$ exomizer mem -f -l none -o plik.exo plik.dta@0xa000

A w kodzie wołam procedurę decompress z adresem danych wejściowych w YX:

        ldx #<data
        ldy #>data

decompress:
        stx get_crunched_byte.?addr+1
        sty get_crunched_byte.?addr+2
        jmp decrunch

get_crunched_byte:
?addr   lda $FFFF
        inc ?addr+1
        sne
        inc ?addr+2
        rts

        icl "krilldecr.asx"

data    ins "data.exo"

Dane wylądują w $A000, bo ten adres znajduje się na początku bloku danych (już skompresowanych - wstawia go kompresor).
Uwaga co do krilldecr.asx - adresy na ZPG możesz ustalić jak Ci się podoba.
Exomizer v2.0.11.

818

(13 odpowiedzi, napisanych Różne)

@Mq: Obejrzałem dzisiaj dopiero - świetne! :)

819

(13 odpowiedzi, napisanych Różne)

Macie rację. Alzheimer.

Edit: Seban mistrz!
To teraz ja z moimi wtórnościami (oryginał Adam Gilmore) :) Dopisałem się do kodu Sikora.

9 GOTO 100
10 MC=MC+MD(MB):IF MC>255 THEN MC=MC-256
11 SOUND 1,MC,10,1:IF MA=0 THEN MB=MB+1:IF MB=13 THEN MB=0
12 MA=MA-1:IF MA<0 THEN MA=255
13 RETURN 

200 REM - part by Sikor & Mono
201 GRAPHICS 31:C=1:GOSUB 3010
202 FOR I=O TO 79 STEP 2:COLOR C:C=C+1:IF C>3 THEN C=1
203 GOSUB 10:PLOT 40+I,90+I:GOSUB 10:DRAWTO 80+I,90-I
204 GOSUB 10:PLOT 80-I,90-I:GOSUB 10:DRAWTO 40+I,90+I
205 FOR P=0 TO 20:GOSUB 10:NEXT P
206 NEXT I
207 GOTO 202

3000 REM - Mono's part data -
3010 DIM MD(13):RESTORE 3010:FOR MA=0 TO 12:READ MC:MD(MA)=MC:NEXT MA:MA=231:MB=11:MC=215:RETURN 
3020 DATA 84,170,187,204,238,52,102,153,100,206,235,221,68
3030 REM --- end of Mono's part data ----

820

(13 odpowiedzi, napisanych Różne)

x_angel napisał/a:

W pliku nie ma: IF C>3 THEN C=1

Nie potrzeba - brane są dwa najmłodsze bity.

821

(61 odpowiedzi, napisanych Fabryka - 8bit)

Zrobiłem wersję 1.11, w której rezerwuję nieco więcej pamięci na ekran, bo zdarzało się że na dole pojawiały się śmieci. Nic więcej nie psułem :)

822

(43 odpowiedzi, napisanych Kupię / Sprzedam / Zamienię Atari)

Chętnie zanabędę drogą kupna. Oferuję 200.

823

(24 odpowiedzi, napisanych Fabryka - 8bit)

pajero napisał/a:

Multitasking 8bit

Raczej symultana.

AS... napisał/a:

Było to w połowie lat 90tych pod mydosem(toms navigatorem!)...

Mógłbyś powiedzieć coś więcej? Jakiś link? .ATR-a, .COM-a? Chętnie bym to zobaczył. Znałem do tej pory tylko XL Frienda od Avalonu.

824

(25 odpowiedzi, napisanych Bałagan)

Konserwator zabytków.

825

(25 odpowiedzi, napisanych Bałagan)

Proponuję ustalić parytet dla miejsc na podium. Zgodnie z duchem czasów.