651

(23 odpowiedzi, napisanych Programowanie - 8 bit)

poprawiłem wartość wolnych cykli jaką zyskuje się dla IRQ, jest to przeszło 2000 cykli CPU

jak są liczone wolne cykle, program wykonuje pętle

loop jsr delay      ; 12 cykli
       inw time     ; 8 lub 12 cykli gdy zwiekszany jest starszy bajt
       jmp loop     ; 3 cykle
delay rts

na przerwaniu VBL przepisywany jest na inną stronę pamięci licznik TIME, następnie zerowany, co ramkę otrzymujemy informację ile razy udało się powtórzyć pętlę, która trwa najmniej 23 cykle, a dla przypadku w którym trzeba zwiększyć starszy bajt TIME 27 cykle

w sumie dla obrazka DLI mamy do dyspozycji 11573 wolnych cykli CPU, dla najszybszego IRQ 14084 cykli, ponad 2000 cykli zysku na korzyść IRQ

p.s.
Vidol biorąc pod uwagę komentarze dla obrazka BIASED_DECISION (Raven/Nuance) gdzie potworne błędy zmiany rastra zostały uznane jako zamierzony efekt wygładzenia 8) to jakiekolwiek przekłamania kolorów dla IRQ są przecudowne

652

(23 odpowiedzi, napisanych Programowanie - 8 bit)

z przerwaniem programu DLISTy (DLI) pewnie każdy się spotkał, pozwala zmieniać rejestry w kolejnych liniach obrazu, dodatkowo zawsze wcześniej należy użyć WSYNC ($D40A) aby zmiana zaszła od początku linii, czyli jeśli mamy obrazek o wysokości 200 linii, to 200x WSYNC oznacza że na wysokości 200 linii zmieniamy tylko rejestry i nic poza tym, nie mamy czasu CPU na nic innego

ostatnio na AtariAge natknąłem się na kilka wątków dotyczących wykorzystania IRQ zamiast tradycyjnych przerwań DLI

taki ProjectM (256 kolorowy potencjalny Wolfenstein korzysta z takiego sposobu zmian rejestrów GTIA co linię)

potencjalnym zakresem zastosowań są tryby interlace lub wszystko inne co zmienia kolory co ileś linii z jakimś ustalonym schematem, czyli APAC, XLPaint MAX itp.

zaletą IRQ jest możliwość określenia co ile linii ma zostać wywołane przerwanie (co 1 linię, dwie, trzy, osiem itd.)

wadą ograniczenie możliwości dźwiękowych POKEY-a, muzyka musi zostać napisana uwzględniając korzystanie z TIMERa

jeśli ktoś chciałby popełnić jakiś efekt w większej liczbie kolorów IRQ pozwoli odzyskać część straconych cykli CPU

jak dużo? przeszło 2000 cykli dla obrazka o wysokości 200 linii

w załączniku przykład wyświetlenia obrazka Vidola 'Monster', tryb XLPaint Max (albo MCP - McPainter)

z eksperymentów wyszło że najbardziej opłaca się wywoływać IRQ co 2 linie (AUDF=1), dla wywołań co 1 linię wychodzi czasowo podobnie jak poprzez DLI, chyba że dokona się optymalizacji przerwań IRQ i wtedy zaczyna się odzyskiwać cykle CPU

jednak najbardziej efektywne jest wywołanie co 2 linie

ku potomności, IRQ nie takie straszne, chcecie zawalczyć o wolne cykle CPU, pomyślcie o IRQ jako alternatywie


zarys działania programu

program startuje IRQ z poziomu przerwania DLI, czas trwania przerwania kontroluje zmienna LINE, zmniejszana z każdym wywołaniem IRQ

inicjowanie IRQ

 mva #100 LINE          ; zmienna zliczająca linie

 mva #1 AUDCTL        ; 0=POKEY 64KHz, 1=15KHz

 mva #0 AUDC4        ; test - no polycounters + volume only
 mva #1 AUDF4        ; co 2 linie

krótki program DLI, który wystartuje IRQ

 pha

 lda #4
 sta stimer             ; niby startuje liczniki TIMER-a
 sta irqen              ; to najważniejsze uruchamia IRQ


 pla
 rti

samo przerwanie IRQ

 pha

 lda #x0 reg0
 lda #y0 reg1
 lda #z0 reg2

 mva #0 irqen           ; zatrzymanie przerwania
 mva #4 irqen           ; kontynuacja

 N pustych cykli aby dostać się do drugiej linii

 dec LINE
 beq IRQ_STOP

 lda #x1 reg0
 lda #y1 reg1
 lda #z1 reg2

 pla
 rti

IRQ_STOP

 mva #0 IRQEN           ; zatrzymanie przerwania IRQ

 pla
 rti

w załączniku 3 pliki, DLI_MCP tradycyjna zmiana poprzez DLI, IRQ_MCP najszybsza zmiana poprzez IRQ co 2 linie, IRQ_MCP_2 wersja z IRQ co 1 linię, najmniej opłacalna

programy sprawdzane na prawdziwym sprzęcie, tylko DLI_MCP działa na wszystkich emulatorach, wersje IRQ tylko z ALTIRRą wyświetlane są prawidłowo

p.s.
próbowałem też "ożenić" IRQ z zaprezentowaną przez FOX-a metodą VSCROLL-a, tryb 9++, nie udało się, WSYNC ma niewątpliwą zaletę w tym względzie

653

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

na Spectrum nie ruszy

654

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

a znacie ten BASIC https://sites.google.com/site/pauldunn/

655

(27 odpowiedzi, napisanych Programowanie - 8 bit)

temat Marii był już poruszany, w archiwach tego forum można znaleźć wątki, Maria nie jest zgodna z XE/XL przede wszystkim ze względu na mapę pamięci, możliwości graficzne nie są oszałamiające

na początku Electron tworząc mapę kolorów VBXE wzorował się Marią, to była porażka, obrazków z C64 z taką mapą nie dało się wyświetlać

656

(24 odpowiedzi, napisanych Emulacja - 8bit)

znów ktoś obraził Atarowca, jak możecie być tak nieczuli, Atarowiec to delikatne stworzenie, wymaga czułości :D

657

(140 odpowiedzi, napisanych Programowanie - 8 bit)

ciekawe sposoby optymalizacji operacji mnożenia poprzez sumowanie tablic logarytmów, oraz inne sposoby optymalizacji obliczeń dla 6502

http://realtimecollisiondetection.net/blog/?p=21

a tutaj jak można błądzić http://everything2.com/title/Fast+6502+multiplication

w sumie to w paczce z mads-em jest fast_mul bodaj od Fox-a, który załatwia temat, ale skąd co się wzięło warto wiedzieć


a tutaj na temat rotacji bitmapy:

http://www.drdobbs.com/architecture-and … /184416337

658

(4 odpowiedzi, napisanych Fabryka - 8bit)

czyż nie zaczyna się zawsze od okładki

i dlatego nikt nie zapozna się z artkiem Fox-a

660

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

u Pin-ka śmiga na 20Mhz :)

:rolleyes:

662

(31 odpowiedzi, napisanych Programowanie - 8 bit)

eee, na pewno ten efekt już jest u mnie w szufladzie ;)

mono G2F -> Special -> Mode -> GED+ -> disable bad lines

teraz dla GED+ dostajesz tryb znakowy z programem rastra z wyłączonymi bad lines, DL dla Antica to jeden wiersz obrazu, wszystkie pozostałe wiersze zawierają tą samą informację, zmiana treści obrazu tylko poprzez przełączanie zestawów znakowych, dla 30 wierszy oznacza to 30 kB danych, możesz zmieniać zestawy znaków w środku linii, 5-y kolor dyskusyjny bo jego użycie oznacza że będzie użyty na całej wysokości ekranu

ad.2 można zdefiniować znak, który ma dwie połówki 4 bajty górne, 4 dolne, aby je przełączać użyć trzeba  rejestru ANTIC-a CHRCTL, który obraca znak do góry nogami

jeśli w kolejnych liniach wiersza będziemy włączać jakiś zestaw znaków to zawsze zostanie wyświetlona linia znaku odpowiadająca aktualnej pozycji pionowej w takim wierszu (0..7)

jak zmusić ANTIC do wyświetlenia konkretnej linii znaku w konkretnej linii wiersza?

rozpisać teksturę na zestawy znaków, jedna linia tekstury = 1 zestaw znaków

używając rejestru CHRCTL zaoszczędzimy połowę pamięci, na 32 zestawach będzie można zapisać 64 linie tekstury

ooo, tego nie próbowałem, zmiana banku pamięci w środku tworzenia linii obrazu :)

pamięć obrazu dla ANTIC-a ustawić np. na $4000 i przełączać banki w programie rastra

zmiana LMS w linii się nie uda, ale tak jak napisałem są wersje alternatywne, trzeba tylko przestać myśleć po bitmapowemu a bardziej po znakowemu

666

(31 odpowiedzi, napisanych Programowanie - 8 bit)

tak, zamiast 30 wierszy mamy 60, czyli np. 60*40 = 2400 bajtow na pamięć obrazu, 2x gęściejszy inwers znaków (5-y kolor), CDrug plasma wykorzystuje ten tryb razem z adresowaniem ćwiartki znaku (nie połowy, tylko 1/4 znaku), mamy wtedy 11 kombinacji ćwiartki

ten tryb wspiera G2F (Special -> Mode -> DLI+), zapisz ASM i będziesz miał czarno na białym

667

(105 odpowiedzi, napisanych Fabryka - 8bit)

nie powinniście publicznie tego roztrząsać, bo po przeczytaniu tego ktoś może sobie wyobrazić już teraz 100% zajętości CPU 6502, dodatkowe banki pamięci na moduł (Avery/Altirra już odpadł w przedbiegach)

? pierwsze słyszę aby scroll i LMS coś zmieniały w środku linii

JAC udowodnił że można, bodaj w Silly Things (dwa obrazki rozdzielone ruchomą grubą obracającą się linią), czekał jakieś 20 lat aby zrealizować ten efekt, bo nie znał metody na wyeliminowanie 'bad lines'. Fox/Tqa udostępnił tą metodę od czasów Numena, wyjaśnił ją w gazetce "Atarynka" wydawanej przez Sikora, ten tryb to 9++.

tutaj link do 'przedruku' artykułu http://madteam.atari8.info/index.php?atarynka=tryb9pp

ten artykuł wyjaśnia jak z udziałem DLI wyeliminować 'bad lines', jak zmieniać zestawy znaków w linii?

program rastra, można go zbudować w G2F, np. napisać zmiany rejestru COLBAK, a potem w edytorze tekstowym podmienić COLBAK na CHBASE (taki myk na wprowadzenie rejestru którego nie ma na liście G2F)

podejrzewam jednak GORGH że można to zrealizować znacznie prościej, po prostu zbuduj obraz ze znaków, każdy wiersz będzie np. zawierał ten sam układ znaków, co wiersz zmieniasz zestaw znaków na nowy

ABCDEF GHIJKL .....
ABCDEF GHIJKL .....
ABCDEF GHIJKL .....
ABCDEF GHIJKL .....

teraz twoja procka rysująca będzie musiała rysować po znakach jak po bitmapie, znaki ABCDEF to twój pierwszy 'rastr', znaki GHIJKL drugi 'rastr' itd.

p.s.
DLI (Display List Interrupt) , DL (Display List), podobne w nazwie, ale inne w oprogramowaniu

669

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

a czy jest możliwe 100% zabezpieczenie się przed piractwem, cokolwiek nie wymyślisz druga strona wymyśli "szczepionkę" na Twoje zarazki ;)

670

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

plik z załącznika źle zostanie wyświetlony na Atari800Win, dobrze na Altirze, ale źle jeśli w Altirze ustawić VBXE

671

(452 odpowiedzi, napisanych Zloty)

ene due rabe, bocian pożarł żabę

672

(105 odpowiedzi, napisanych Fabryka - 8bit)

od strony programisty można będzie wykryć gdzie ta YAMari leży?

gry Avalonu korzystają z trybu znakowego (GRAPHICS 12), konkretniej to tryb 4+ (JGP) który wspiera Graph2Font (JGP - Jet Graphics Planner)

http://tajemnice.atari8.info/5_93/5_93_jgp.html

674

(318 odpowiedzi, napisanych Fabryka - 8bit)

zauważyłeś Pin że im starszy jesteś tym bardziej marudny, taki mniej elastyczny

675

(318 odpowiedzi, napisanych Fabryka - 8bit)

Pin znowu robisz za cenzora, odbierasz możliwość podejmowania decyzji autorom takich produkcji, więcej dobrego zrobisz jak podszkolisz  swoje znajomości ASM i zaczniesz poprawiać programy wg swojego uznania zamiast ciągle strofować innych