1 Ostatnio edytowany przez pr0be (2007-03-24 23:39:05)

Hi!

mam problem, z ktorym nie moge sobie poradzic od jakis 4 godzin...
otoz chce wyswietlic rysunek w g2f w czasie ladowania danych, pod emulcem wszystko dziala
natomiast na real atari wczasie wczytywania danych rysunek zaczyna starsznie migac tak jak by byl interlance oraz transfer odczytu danych spada gdzies do paru bajtow/sekunde (tzn jeden "odglos stacji" na sekunde) po czym po jakis 5sekundach sie zawiesza...

mam cos takiego:

    org $9c00
    ins "effects/gfx2o.obx"
    ini $b800

od $b800 lezy cos takiego:

 mva >pmg $d407        ;missiles and players data address
 mva #3 $d01d        ;enable players and missiles
 mwa #ant $230 ; $d402        ;ANTIC address program
 mva #scr32 $22f ; $d400    ;set new screen's width
;--- first line of screen initialization
 lda >fnt
 sta $2f4 ; chbase
c0 lda #$00
 sta 712 ; colbak
 sta 708 ; color0
 sta 709 ; color1
 sta 710 ; color2
 sta 711 ; color3
 lda #$04
 sta $26f ; gtictl
 lda #$03
 sta sizep3
 lda #$C0
 sta sizem
 lda #$79
 sta hposp3
 lda #$98
 sta hposm3
c1 lda #$34
 sta colpm3
 lda #$00
 sta sizep2
 lda #$8E
 sta hposp2
 lda #$42
 sta hposm1
 lda #$96
 sta hposm2
c2 lda #$D4
 sta colpm1
c3 lda #$36
 sta colpm2
 lda #$00
 sta sizep0
 lda #$B3
 sta hposp0
c4 lda #$D4
 sta colpm0
 lda #$00
 sta sizep1
 lda #$53
 sta hposp1
 lda #$AF
 sta hposm0

 lda:cmp:req 20        ;wait 1 frame
 lda #<dli_start
 sta $200
 lda #>dli_start
 sta $201
 lda #$c0
 sta $d40e
 rts

a teraz cos dziwnego:
jak dam cos takiego:

    org $0600
    jmp *

    ...

    org $9c00
    ins "effects/gfx2o.obx"
    ini $b800
    ini $0600

to wszystko dziala ok nawet na real atari, tzn rysunek wyswietla sie prawidlowo.

wogole mozna korzystac z przerywan DLI podczas ladowania danych?
jesli tak to czy w czasie przerwania DLI podczas odczytu danych jest mniej cykli na wykonanie przerwania?

EDIT:
dodam ,ze jak laduje plik z QMEG'a to plik laduje sie, wyswietla rysunek (blednie - tzn jest interlance, jakies smieci itp) po czym slychac ,ze laduje przez 2-3sekundy dane baaaardzo wolno (przez te 3 sekundy bylo sluchac ~trzy pykniecia, ktore sie slyszy podczas ladowania danych) po czym nastepuje blad transmisji (prawdopodbnie TIMEOUT) oraz powort do QMEG'a, no i wlasnie chwile po bledzie transmisji a przed powrotem do qmeg'a rysunek magicznie zaczyna sie wyswietlac dobrze przez jakies ulamek sekundy (pewnie by sie wyswietlal dobrze dluzej, tyle ze nastepuje odrazu powrot do menu QMEG'a)

2 Ostatnio edytowany przez drac030 (2007-03-24 23:43:57)

Nie powiem, żebym się orientował, ale:

1) odczyt ze stacji jest na przerwaniach IRQ (1 bajt = 1 przerwanie). Jeśli przeciążysz NMI, to zabraknie czasu na przerwania szeregowe i transmisja będzie się wykładać.

2) miganie to może objaw błędu w 6502, tego co to że kiedy dwa przerwania (NMI i IRQ) występują na raz, jedno jest obsługiwane, a drugie ignorowane. Tego nie ma na emulatorze, i na 65C816, tak samo było z IK+ (program działa na emulcu i na komputerach z '816, na zwykłych Atari nie).

KMK
? HEX$(6670358)

3

calkiem mozliwe ,ze jakims cudem DLI tak obciaza procka ,ze pozostaje mu niewiele czasu na ladowanie danych (to by tlumaczylo, czemu predkosc transmisji spada do paru bajtow/sekunde), no ale z drugiej strony, rysunek ma ~132 linie, wiedz watpliwe jest ,ze obicaza procka tak bardzo ,ze juz nie nadaza z ladowaniem danych

tutaj leza zrodla http://manta.univ.gda.pl/~pwisnie/gfx-test.zip - to da lepszy wglad co sie dzieje podczas wyswietlania rysunku i ladowania danych...

4 Ostatnio edytowany przez tebe (2007-03-25 00:28:35)

jeśli masz tych przerwań DLI więcej niż jedno, to podczas transmisji mogą (i najczęściej tak się dzieje) zmienić kolejność wywołań, któreś z nich zostanie pominięte w zależności od obciążenia

rozwiązaniem może być IRQ-SIO loadera z Energy zina grupy Taquart, wtedy możesz i sample odtwarzać podczas transmisji

ogólnie korzystając z DLI kod musi być najkrótszy-rozpętlony, najlepiej pozbyć się też "STA WSYNC"

nie bez powodu grafiki podczas transmisji są mało kolorowe

obsługa przerwania NMI, DLI powinno być Twoje, bo niewątpliwie będzie szybsze od wersji Atari OS, podczas transmisji tylko IRQ jest potrzebne

p.s.
Muppet Movie Show korzysta podczas transmisji z przerwan DLI, jednak nie jest to tak ambitne jak w załączonym przez Probe loaderze

p.s. #2
"STA $D40A" winne jest wszystkiemu, w tych miejscach CPU jest blokowane, to jest HALT

p.s. #3
obrazek podczas transmisji = 1 zestaw znaków, 0 zmian na przerwaniu DLI, zmiany globalne tylko na VBL-u
albo SIO-IRQ loader, ale wtedy transmisja tylko normal

p.s. #4
więcej czasu zyskasz jeśli obrazek będzie bitmapą, wtedy z przerwaniem DLI wstrzelisz się w zadaną linie i użyjesz tylko 1x "STA WSYNC" na początku zmiany, zawsze to zysk i większa szansa na powodzenie

ogólnie pewnie będziesz musiał ręcznie wyedytować w ten sposób jak najkrótsze przerwanie DLI, a Powrooz będzie musiał zrezygnować z 5-ego koloru i przerobić logosa na bitmapę

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

5

Odbiór jednego bajtu trwa ~1000 cykli, przerwanie odbioru szeregowego występuje z grubsza co tyle czasu.

Patrzę sobie na procedurę dli3 u ciebie, ile tam jest rozkazów STA WSYNC? O ile dobrze liczę, dziewiętnaście? Kazdy haltuje procesor na całą linię skaningową, czyli 114 cykli. 114*19 = okres 2166 cykli, kiedy procesor jest albo zatrzymany, i nie może odpowiedzieć na IRQ z Pokeya, albo obsługuje DLI, i tez nie może odpowiedzieć na IRQ z Pokeya. Transmisja szeregowa nie ma szans po prostu :)

KMK
? HEX$(6670358)

6

heh, kiedys jak bylem mlody i piekny, to tez wyswietlac chcialem DLI podczas ladowania, i tez mialem podobny problem.
Wtedy nie wiedzialem dlaczego skrocenie procki DLI (a scislej chyba logosa zmniejszylem o kilka linii) rozwiazalo problem :)

7

szkoda troche, mimo ,ze to tylko grafika na loading...

zrobie moze dwie wersje jedna pod emulca z grafika podczas ladowania, druga pod realatari bez grafiki podczas wczytywania danych :>

8 Ostatnio edytowany przez tebe (2007-03-25 00:52:49)

a bedzie trzecia wersja pod wciśnięty klawisz F7 :D

zapoznaj się z postem #4 - p.s. #4  to da Ci szanse na sukces

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

9

pamiętajmy jednak o tym, że SIO-LOADER eliminuje możliwość odpalenia czegoś z HDD :P

10

od dzisiaj robimy dema w trzech wersjach:
- na emu
- na hd
- dla kolekcjonerow (atari 65 nierozszerzone, zwykla stacja itp)

:) :) :)

11

nie doczytalem o #4, jutro powalcze z tym, bo teraz juz jestem za bardzo zmeczony...

teraz tylko pytanie czy zabawa z tym bedzie warta swieczki... bo cos mi sie zdaje ,ze bedzie z tym duuuzo roboty

12

bez zubozenia grafiki sie nie obedzie wiec rownie dobrze moze to byc jakas miniaturka (mniej wsyncow bedzie) albo zupelnie cos bez DLI, oddajace 'ducha' dema.... kreatywnosc panowie kreatywnosc ;)

13

mozna policzyć ile WSYNC-ów wypadnie, ok. 23 wpisów "sta $d40a" będzie niepotrzebnych

do tego dojdzie inicjalizacja adres-u przerwania ($200), dodatkowo napiszesz swoją szybszą obsługe przerwania NMI, DLI

w niektórych przypadkach pewnie uda się całkowicie zrezygnować z "STA $D40A", usuniesz taki wpis i sprawdzisz czy z obrazem jest wszystko OK

ogólnie zysk lekko licząc 40%, wspomne jeszcze że bitmapa jest szybsza niż tryb znakowy

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

14 Ostatnio edytowany przez miker (2007-03-25 07:10:12)

No, ja też bym sie na te DLI podczas odczytu nie rzucał. Lepiej już w samej produkcji "nasiać" ile wlezie a rysunek podczas odczytu zostawić choćby czarno-biały.

Edited: ALBO po prostu czekać na wciśnięcie klawisza a potem po prostu zgasić ekran/wyświetlić jakiś teskt (już bez tych przerwań) i kontynuować wczytywanie.

dobra, koniec mądrowania... ;)

I Ty zostaniesz big endianem...

15

Hej!

Powiem tak... z mojego doświadczenia wynika iż jakiekolwiek STA $D40A w trakcie transmisji SIO jest niedopuszczalne.

Zawsze może się ono trafić w nieodpowiednim momencie, takim w którym trzeba odebrać bajt z POKEY-a i wtedy kupa... mamy zapewniony over-run error na 100%. W prawdopodobieństwa niby wynika iż zdarzyć się to może niezwykle rzadko jednak w praktyce zdarza się dość często :( efekt jest taki iż cała transmisja przez SIO się przywiesza i musi zostać rozpoczęta od nowa, przez co tak naprawdę więcej jest ponowień transmisji niż poprawnych danych. także proponuje odpuścić sobie jakiekolwiek $d40a podczas wczytywania... DLI trzeba wykorzystać z bardzo dużą rozwagą, do tego DLI może zostać opóźnione przez IRQ które się aktualnie wykonuje. Także jeżeli się wykonuje jakiś DLI to nie można liczyć iż wykona się ona w tym miejscu w którym jest. Jedynym sensownym zastosowaniem DLI podczas transmisji jest zmiana kolorów i to trzeba to robić tak aby zostawić trochę pustych linii po wystąpieniu DLI, bo może ono zostać opóźnione tak jak mówiłem wcześniej przez aktualnie wykonywane IRQ. Do tego dochodzi różne zachowania różnych stacji w przypadku błędnych transmisji. Jakiekolwiek dopalenie szybkości SIO w przypadku DLI nie ma szans na powodzenie, zostaje tylko 19200bps. Co to napisałem wynika moich doświadczeń przy pisaniu loaderów do Bitter Reality i Overmind. Mam nadzieję iż nic nie pokręciłem, bo od tamtych dni już spoooooro czasu minęło :)

pozdrawiam
Seban

16

dzieki wszystkim za tak szybkie i dokladne info ;)

PS: poszedlem na latwizne, i w czasie ladowania jest black screen, a dopiero po zaladowaniu danych w czasie obliczen/rozpakowywania danych jest grafika z loading ;)

17

Podobny problem wystąpił podczas party-version dema Life to Back. Z okazji użycia kolorowego napisu loading demo wgrywało się tylko za pomocą dysku podłączonego przez IDE KMK/JŻ :P

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.