1

(46 odpowiedzi, napisanych Zloty)

Również przyłączam się do podziękowań!

Śmiało można napisać, że od Silly Venture 2010, scena atari odżyła na nowo.
W tym roku również masa świetnych produkcji, bardzo dobre kompoty na malucha, zajebiste dema na ST oraz niesamowite demo KK/DMA na 2600...
Gdyby nie wkład Greya, nie powstało by tyle produkcji, nie mielibyśmy kompotów trwających ponad 8h i z pewnością nie mielibyśmy tak zajebistego party jakim było SV2013.
Dzięki Grey! Jesteś Wielki!

2

(27 odpowiedzi, napisanych Zloty)

Old School Intro - tak dobrego kawałka na malucha to dawno nie słyszałem... zaraz go sobie przekonwertuje na mp3

Yerzmyey'a kawałek z ST też zajebisty - oba ląduja u mnie w C:/MUSIC/Demoscene/Fav ;)

3

(99 odpowiedzi, napisanych Zloty)

Grey, dzięki wielkie za super party oraz za zmobilizowanie "małej" jak i "dużej" sceny atari, co zaowocowało jednym z lepszych kompotów w historii XL/XE i ST...

Pinowi też należą się duże brawa za wzorowe poprowadzenie kompotów - logo "Pin Ready" przejdzie pewnie też do historii i pojawi się jeszcze w niejednym demie ;)

a problem z prądem dodał tylko smaczku imprezie - myśle, że za pare lat, wszyscy będą to miło wspominać ;)

http://atari.fandal.cz/detail.php?files_id=316 - plasme w trybie znakowym - dodam, ze uzywa ona tylko 16znakow (16kolorow), przy 128znakach (128 ditherowanych "kolorach") nie widac wogole, ze to jest tryb znakowy.... wyglada jak ditherowana plasma w 160x192...

a co do pixeli parzystych i nieparzystych to duzej filozofi nie ma:

; zapis
lda color ; color zawiera kolor dla pixela nieparzystego
ora mul16tab,x ; x zawiera kolor dla pixela parzystego
sta screen,y
...

mul16tab dta $00,$10,$20,$30,$40,$50,$60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0

; odczyt
lda screen,y
tax
and #$0f
... ; tu cos robimy z pixelem nieparzystym

lda div16tab,x
... ; tu cos robimy z pixelem parzystym

ponizej przyklad pseudoplasmy z uzyciem podwojnego buforowania

gfx_mem        equ $8000 ; mlodszy bajt musi miec wartosc 00!
gfx_mem2    equ $a000 ; mlodszy bajt musi miec wartosc 00!
pos_x        equ $80
pos_y        equ $81
color        equ $82
sinval        equ $83
licznik        equ $84

;
    org $4000

;
; Start
;
Start
    ldx #<antic
    ldy #>antic
    stx 560
    sty 561

    lda #%01000000
    sta 623

    lda #%00100010
    sta 559      

;
; Init
;
Init
    lda #>GFX_MEM
    sta SCRBUF_PTR+1 ; ustawiamy bufor na GFX_MEM

;
; glowna petla efektu
;
Loop
    lda 20
    cmp 20
    beq *-2 ; czekamy ramke

    lda scrbuf_ptr
    sta gfx_ptr
    lda scrbuf_ptr+1
    sta gfx_ptr+1 ; ustawiamy bufor na ktorym chcemy rysowac

    lda scrbuf_ptr+1 ; podmieniamy bufor ekranu, 
    eor #>GFX_MEM ^ >GFX_MEM2 ; tak zeby bufor na ktorym
    sta scrbuf_ptr+1 ; chcemy rysowac nie byl wyswietlany

;
; tu zaczynamy rysowac nasz efekt
;
    inc licznik
    ldx licznik
    ldy 20
    clc
    lda sintab,x
    adc sintab,y
    sta sinval ; takie cos, co spowoduje, ze plasma bedzie sie ruszac

    ldy #0 ; Y bedzie zawierac pozycje Y

Loop_Y
    ldx #0 ; X bedzie zawierac pozycje X (podzielona przez 2)

Loop_X
    sty pos_y ; zapisujemy aktualna pozycje Y

; liczymy kolor dla parzystego pixela
    tya
    clc
    adc 20 ; dodajemy wartosc licznika aby uzyskac jakis ruch
    tay

    clc
    lda sintab,x
    adc sintab,y ; liczymy kolor uzywajac wsporzednych X i Y
    adc sinval
;    lsr @  ; sin(x)+sin(y)+sinval da w wyniku wartosc z 
;    lsr @  ; zakresu 0-255, musimy wiec podzielic przez 16
;    lsr @  ; aby miec wartosc z zakresu 0-15
;       lsr @
;    asl @
;    asl @
;    asl @
;    asl @ ; a teraz przesuwamy o 4 bity w lewo
    and #$f0 ; robi dokladnie to samo co ten ciag lsr i asl u gory ;)
    sta color ; zapisujemy chwilowo kolor

; nastepny pixel (pixel nieparzysty)
    inx 
    clc
    lda sintab,x
    adc sintab,y ; liczymy kolor uzywajac wsporzednych X i Y
    adc sinval
    lsr @  ; sin(x)+sin(y)+sinval da w wyniku wartosc z 
    lsr @  ; zakresu 0-255, musimy wiec podzielic przez 16
    lsr @  ; aby miec wartosc z zakresu 0-15
    lsr @
    ora color ; "dodajemy" pixel parzysty do nieparzystego
    sta color ; zapamietujemy kolor

    txa
    lsr @
    tay       ; dzielimy X przez 2 aby wskazywal na odpowiednie miejsce na ekranie

    lda color
gfx_ptr    equ *+1
    sta $ffff,y 

    ldy pos_y

    inx ; nastepny pixel
    cpx #64 ; 64 pixeli w poziomie
    bcc Loop_X

; nastepna linia
    clc
    lda gfx_ptr
    adc #40
    sta gfx_ptr ; dodajemy do wskaznika ekranu 40 aby przejsc do nowej lini
    bcc Skip
    inc gfx_ptr+1

Skip
    iny ; nastepna linia
    cpy #90 ; 90 linie w pionie
    bcc Loop_Y

    jmp Loop

;
antic
    dta b($70,$70,$70)
    dta b($00)
scrbuf_ptr equ *+1
    dta b($4f),a($9000)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)
    
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)    
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f) 
    dta b($f,$f,$f,$f,$f,$f,$f,$f,$f,$f)  
    dta b($41),a(antic) 

; tablica sinusa - zawiera wartosci od 0 do 63
sintab
costab    equ sintab+64
    dta sin(32, 31, 64, 0, 256+64)


;
    run Start

kod jest bardzo wolny, ale chcialem zeby byl dosc przejrzysty i latwy do zrozumienia

plasmy nie powinny migac nawet jesli nie uzywamy podwojnego buforowania - usun: eor #>GFX_MEM ^ >GFX_MEM2 z powyzszego przykladu zeby wylaczyc podwojne buforwania - widac co prawda jak sie ekran rysuje ale nie jest to miganie...

nie uzyskasz plynnej plasmy (50fps czy nawet 25fps) w tak wysokiej rozdzielczosci (80x192) - bez uzycia trickow z LMS (powtarzanie lini przez display liste) jest to technicznie niemozliwe - sam zapis wartosci koloru na ekran w 80x192 wymaga az 7680 sta! (40*192) - a to w najlepszym przypadku 30720cykli - czyli prawie cala ramka

jesli chodzi o optymalizacje to powinienes dazyc aby LoopX wygladal mniej wiecej tak:

Loop
       lda t1
       clc
       adc #2
       sta t1
       sta _sin1+1
       ...
       lda t2
       clc
       adc #3
       sta t2
       sta _sin2+1

LoopY
       ...
_sin2 lda sintab,x
       adc sintab,y
       sta _sin0+1
       ....

       ldx #39
LoopX
_sin0 lda #0
_sin1 adc sintab,x
         tay
         lda colortable,y
_scr   sta screen,x
         dex
         bpl LoopX

i zamaist bawic sie w pixele parzyste i nieparzyste zrobic sobie rozdzielczosc pozioma 40pixeli zamiast 80 (czyli kolor 15 ma wartosc $FF, kolor 3 wartosc $33 itp) - to bardzo przyspiesza obliczenia

ogolnie najlepiej do plasm uzywac trybu textowego ze specialnym zestawem znakow - szybki i prosty w uzyciu, a plasmy w tym trybie niedosc ze chodza szybciej (mozliwe zrobienie plasmy w 1 ramce bez uzycia trickow LMS) to w dodatku wygladaja lepiej...

6

(24 odpowiedzi, napisanych Programowanie - 8 bit)

mi wychodzi na sama rotacje 8bit->16.8->16bit (8bit input, wyliczenia 16.8 i 16bit output bez projekcji) dokladnie 353/365 cykli (best/worst case) na punkt
teoretycznie da sie to jeszcze przyspieszyc i miec 8bit->16.8->16bit w jakies 250-300cykli ale jeszcze nie mialem czasu aby zaimplementowac taka rotacje (w Controlu caly czas jest "stara" lekko podrasowana rotacja z The Shrine...)
dla 8bit->8.8->8bit powinno byc w obu przypadkach jeszcze szybsze o jakies 30-50cykli...

EDIT: aha jeszcze zapomnialem dodac, ze w tych 353/365 sa 3 dzielenia przez 128, jak by dac dzielenie przez 256 to bylo by o jakies ~51cykli szybsze...

7

(2 odpowiedzi, napisanych Programowanie - 8 bit)

bo zapisujesz do rejestru cienia ($02f4) zamiast do rejestru sprzetowego ($d409) - zmien $02f4 na $d409 - powinno dzialac...

8

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

Czy ktos dalby rade rozszyfrowac jak podlaczyc Turbo2000 lub Turbo2000F do magentofonu XC11?

http://img169.imageshack.us/img169/5610/t2000xc121.jpg
http://img215.imageshack.us/img215/6067/t2000xc122.jpg
http://img132.imageshack.us/img132/9233/t2000xc123.jpg
http://img515.imageshack.us/img515/9807/t2000f1.jpg
http://img695.imageshack.us/img695/9100/t2000f2.jpg
http://img177.imageshack.us/img177/2153/xc11.jpg

t2000_xc12_1.jpg - Turbo2000 podlaczone do XC12 (Rev B)
t2000_xc12_2.jpg - plytka Turbo2000
t2000_xc12_3.jpg - plytka Turbo2000 (widok z drugiej strony)
t2000f_1.jpg, t2000f_2.jpg - Turbo2000F
xc11.jpg - plyta od XC11

jak to podlaczyc?
w Turbo2000 mamy 4 kabelki - napewno jeden to odczyt, drugi zapis, trzeci pewnie zasilanie, czwarty to masa albo sterowanie silnikiem magnetofonu... - kabelek odczyt/zapis moge sobie znalesc poprzez metode prob i bledow, klopot z dwoma pozostalymi, gdzie je wlutowac? gdzie jest zasilanie w XC11?

turbo2000f wyglada bardzo prosto - nie wiem czy czegos przypadkiem nie brakuje - wylutowalem je przedchwilka z XC12 gdzie bez klopotu dzialalo... tutaj mamy 3 kabelki - zapis?, odczyt? a trzeci to zapewnie zasilanie?!?!? - klopot ten sam co z T2000 - ktory kabelek to odczyt, ktory to zapis a ktory to zasilanie... no i gdzie podpiac kabel zasilajacy do XC11...

9

(22 odpowiedzi, napisanych Software, Gry - 16/32bit)

jesli wgrasz dodatkowo pak1.pak, to zamiast Shareware bedziesz miec pelna wersje gry

10

(22 odpowiedzi, napisanych Software, Gry - 16/32bit)

prawdopodbnie nie masz pliku pak0.pak albo nie jest on wrzucony do katalogu ID1 - jak nie masz tego pliku, to mozesz go znalesc w Quake Shareware dla PC

11

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

przylaczam sie do pytania... rowniez szukam kogos, kto bedzie w stanie zamontowac w XC11 Turbo 2000/2000F na Glucholazach ;)

12

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

tak potwierdzam

13

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

o ile zasilacz do stacji dyskow jest orginalny to dam 350zl

14

(16 odpowiedzi, napisanych Scena - 8bit)

lol

Dely plz zamknij ten temat, Stryjkowi za bardzo sie chyba dzisiaj nudzilo...

15

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

dzieki za info

miganie sprajtow to normalna sprawa.. tak ma byc ;)

Marek Konopka napisał/a:

Czasami pokazują się jakieś drobne śmieci w ich górnej części, ale nie wiem czy to jest kwestia faz animacji, czy jakiegoś innego problemu

chodzi Tobie o moment kiedy program nie wyrabia w jednej ramce? jesli tak to czy te "smieci" zachowuja sie podobnie jak na emulaotrze?

Marek Konopka napisał/a:

Btw. Sprawdzasz, czy wyrabia sortowanie?

hmm.., bardziej chce miec pewnosc, ze przerwania DLI wyrabiaja sie w lini zanim zaczne cokolwiek dalej z tym multiplexerem robic...


pg napisał/a:

Looking forward to the progress of this project!

unfortunately this program is only test for PM multiplexer with vscroll+hscroll. I don't have intention to port Turrican...
I just wanted to see how this multiplexer handle games like Turrican... sorry...

no jeszcze czekam na werdykt Pinokia - jesli bedzie dzialac na jego sprzecie to bede czul sie pewniej ;)

16

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

Hej

moglby ktos sprawdzic jak sie to: http://manta.univ.gda.pl/~pwisnie/test.xex zachowuje na real atari?

czy w momecie scrollowania pionowego sa jakies artyfakty na sprajtach (jakies losowe pojedyncze linie)?

w momecie kiedy sa spowolnienia (program nie wyrabia sie w jednej ramce), pojawiaja sie male artyfakty w postaci skaszanionych "lini" w niektorych sprajtach, czy na real atari jest to samo? czy zjawisko to wyglada zupelnie inaczej?

17

(9 odpowiedzi, napisanych Programowanie - 8 bit)

a nie przypadkiem

asl @
rol @
rol @
and #3

;)?

18

(45 odpowiedzi, napisanych Bałagan)

seban napisał/a:

Zawsze mnie zastanawiało jak koderzy C64 robią efekty typowo display-listowe (np. powielenie tej samej linii w pionie).

jest pewien VIC Trick, ktory umozliwa powtarzanie ostatnio wygenerowanej lini, wiec pomimo braku display listy nie ma duzego problemu na C64 z powielaniem lini w pionie.

seban napisał/a:

No i bardzo mi się podobają ich szybkie zoomer-y... kila razy je wiedziałem ale nie wiem jak oni robią je w jednej ramce (rozciąganie w poziome, pewnie prefazowane i na fontach), ale jak to robią VICE-em w pionie :) nie wiem :) (mówie o tych zommerach co cały ekran zajmują i motyw grafiki jest powielony wiele razy - tak jakby był to ułożony jeden pełny zestaw znaków na którym jest to później rysowane)

pomimo, ze mamy displayliste i ~25% szybszy procesor, to taki zoomer na Atari jest o wiele trudniejszy do zrealizowania a to dlatego, ze nie mozemy go zrobic na znakach - na C64 trick z powielaniem lini w pionie dziala rowniez w trybie znakowym!
na Atari nie rozciagniesz "sprzetowo" w pionie textury uzywajac trybu znakowego, dlatego u nas trzeba by bylo taki zoomer robic w trybie graficznym a w tym trybie tracimy mozliwosc kopiowania textury w poziomie :(

ogolnie taki zoomer dzialajacy w jednej ramce na Atari to ciezka sprawa ale IMHO do zrealizowania...

oczywiscie mowie tutaj o zrealizowaniu takiego zoomera na Atari z 64k pamieci i uzywajacego powiedzmy 32k pamieci :D - uzywajac dodatkowej pamieci i bawiac sie displaylista taki zoomer w jednej ramce jest banalny do zrobienia na Atari...

na C64 istnieje tez metoda, ktora zwie sie FPP (Flexible Pixel Position), umozliwiajaca wyswietlenie dowolnej linie graficznej w dowolnej lini ekranu (cos jak u nas LMS w display liscie - tylko, ze na C64 mamy troche wieksze ograniczenia jesli chodzi o adres pobierania danych)


wracajac do tematu :)

Edge of Disgrace jest IMHO jednym z lepszych dem jakie ukazaly sie na C64... design jest poprostu rewelacyjny. Wiele dem na C64 jest malo dynamiczna natomiast w EoD tepo jest odpowiednie. Wiekszosc efektow typu plazmy i zoomery dla wielu osob (a w szczegolnosci Atarowcow przyzwyczajonych do 3D :] ) wygladaja na "proste" i oklepane, ale tak naprawde sa mega trudne do uzyskania w jednej ramce przy takiej wysokiej rozdzielczosci...

reszta dem z X 2008 chociaz nie zrobila juz na mnie takiego wrazenia jak EoD tez niezla - efekt Greetingsow w Natural Wonders 2 genialny!

19

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

Hej

wziolbym z 2-3 sztuki.

20

(4 odpowiedzi, napisanych Zloty)

eh.. to starsznie niedobrze, ze As nie jedzie...

no to jestem aktualnie w takiej samej sytuacji co macgyver...

narazie nie mam zbytnio czasu sprawdzic, ale adresy zrodlowe i docelowe w paramterach sa w odwrotnej kolejnosci niz chciales tzn najpierw MLODSZY a potem STARSZY bajt, wiec
X=USR(1536, 156, 64, 1, 156, 192, 1, 10, 0) - skopiuje obszar od adresu 16540 (a nie 40000) pod adres 49308 (a nie 40128)...

    opt h-
    org $600

dst    equ $cb
len    equ $cd

;
    pla

    pla
    pla
    sta _src+1
    pla
    pla
    sta _src+2
    pla
    pla
    sta _srcm+1

    pla
    pla
    sta dst
    pla
    pla
    sta dst+1
    pla
    pla
    sta _dstm+1

    pla
    pla
    sta len

    pla
    pla
    tax
    lda optab,x
    sta _op

    lda #dst
    cpx #4
    bne l3
    lda #$ff
l3
    sta _op+1

    clc
    ldx #0
    ldy #0 
copy
_src    lda $ffff,x
_op    ora (dst),y
    sta (dst),y

    txa
_srcm    adc #0
    tax
    bcc l1
    clc
    inc _src+2

l1    tya
_dstm    adc #0
    tay
    bcc l2
    clc
    inc dst+1

l2    dec len
    bne copy

    rts

;
optab    dta {bit 0},{and (0),y},{ora (0),y},{eor (0),y},{eor #}
10 DATA 104,104,104,141,59,6,104,104,141,60,6,104,104,141,67,6,104,104,133,203,104,104,133,204
20 DATA 104,104,141,77,6,104,104,133,205,104,104,170,189,89,6,141,61,6,169,203,224,4,208,2
30 DATA 169,255,141,62,6,24,162,0,160,0,189,255,255,17,203,145,203,138,105,0,170,144,4,24
40 DATA 238,60,6,152,105,0,168,144,3,24,230,204,198,205,208,226,96,36,49,17,81,73
50 FOR I=0 TO 93:READ A:POKE 1536+I,A:NEXT I

X=USR(1536, 0, 6, 1, 16, 128, 8, 128, 4) - "kopiuje" z operacja NOT 128 bajtow z adresu 1536 (0+256*6, skok o 1 bajt) do adresu 32784 (16+256*128, skok o 8 bajtow)

23

(22 odpowiedzi, napisanych Zloty)

jak bedziecie mieli jeszcze wolne miejsce to ja bym z checia pojechal...

24

(7 odpowiedzi, napisanych Zloty)

tez sie prawdopodobnie wybieram...

25

(37 odpowiedzi, napisanych Programowanie - 8 bit)

najprosciej jest przez zmienna tekstowa przez DIM ZMIENNA$(ROZMIAR), wtedy mamy wolny obszar od ADR(ZMIENNA$) do ADR(ZMIENNA$)+ROZMIAR

sposob miker'a tez zadziala, ale nie daje Ci gwarancji, ze dane nie zostana nadpisane...

o ile dobrze pamietam to rezerowalo sie obszar pamieci w BASIC'u tak:

POKE 106,PEEK(106)-ROZMIAR:GRAPHICS 0:AD=PEEK(106)

i teraz masz wolny obasz od adresu AD do AD+(ROZMIAR*256)

pamietaj o instukcji GRAPHICS, jesli tego nie zrobisz adres ekranu bedzie wskazywac na wolny obszar, ktory wlasnie "zadeklarowales"...