101

(36 odpowiedzi, napisanych Programowanie - 8 bit)

zmieniamy

        ldx #($100-(_bpl-q0+2))&$ff
        jsr get
        bpl store
        xor #$ff
        beq stop
        ldx #($100-(_bpl-q1+2))&$ff

store   tay
          stx _bpl+1

na

        ldy #($100-(_bpl-q0+2))&$ff
        jsr get
        bpl store
        eor #$ff
        beq stop
        ldy #($100-(_bpl-q1+2))&$ff

store   
          sty _bpl+1
          tay

dzieki czemu mamy rejestr X wolny, i mozemy zmienic procke GET na taka:

get    inx
        bne *+5
        inc adr+2

adr   lda $cafe,x

i mamy 2 bajty do przodu, czyli 46 bajtow w "normalnej" pamieci lub 42 na "zero page", do tego procka jest o 3 cykl na bajt szybsza ;)

cala procka wyglada tak:

loop    ldy #($100-(_bpl-q0+2))&$ff
        jsr get
        bpl store
        eor #$ff
        beq stop
        ldy #($100-(_bpl-q1+2))&$ff

store   sty _bpl+1
    tay

q0      jsr get
q1      sta $dead
        inc q1+1
        bne *+5
        inc q1+2

        dey
_bpl    bpl *

        bvc loop

get     inx
        bne *+5
        inc adr+2

adr   lda $cafe,x

stop    rts

102

(62 odpowiedzi, napisanych Fabryka - 8bit)

jesli chodzi o grafe to tak powinny wlasnie wygladac gry na male atari ;)

103

(40 odpowiedzi, napisanych Fabryka - 8bit)

wow! ten nowy hires wyglada rewelacyjnie!
chcesz powiedziec ,ze w 320x200 da sie uzyskac 5 kolcow (jeden odcien jak sie domyslam) bez interlance'u i bez zadnych ograniczen?
czy jednak sa jakies ograniczenia z tym zwiazane co do wyboru kolorow w danym obszarze (jak w g2f)?

104

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

hmm.. r u sure?

i testing it on real atari before yesterday and is the same problem on it...
yes the basses sounds rather equally in the whole song (except the bass tone that sound like bass2.wav ;) ), i mean the sound of bass do not change when playing the song (it is possible if u use on the same channel instrument with command 1), but if u run sv2k4fin(or msx.xex) several times u should notice that the bassline sound different even than u set Sound Quality to 2,7(Atari800Win Plus 4.0) or run on real atari...

105

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

hmm wlasnie przetestowalem oba sposoby (tzn z resetowaniem timer'a i z skctl), jesli zrobilem to dobrze, to niestety nie dalo skutkow...

przedchilka dostalem odpowiedz od Raster'a, pozwole sobie ja tutaj wkleic, mam nadzieje ,ze sie na mnie nie obrazi ;)

I think, that behaviour you decribe does POKEY chip itself.
POKEY contains many of timers and merged signals which can
interfere and it's a one of reasons for it.

IMHO, this different basses are containing in a lot of games
and programs, it isn't possible to manage it.

POKEY has one register for "reset" timers, but storing to AUDC/AUDF
registers proceed subsequently with no exactly identical intervals
(according to the branch operation in code, IRQ/NMI interrupts,
memory refreshing, etc.) and it does this "variable sounds" effect.

I was searching for solution of this long ago - I tried to reset
pokey registers periodically, but entire sound output was awful with it
(it's logical - all the sounds' waveforms was breaked and restarted
repeatedly).

I'm sorry.

Greetings, Radek, raster/c.p.u.

czyli wynika, ze ten problem raczej nie jest do rozwiazania :(
pytanie tylko czy klopot z "losowym" brzmieniem wystepuje rowniez w
innych trackerach przy distortion C na Atari...

106

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

mam glupie pytanie: czy pokey generuje dzwiek w pewien sposob losowy?
po odpaleniu kilku (kilkunastu) razy muzyki (msx.xex - powinna byc w zalaczniku), dzwiek basa jest zupelnie inny (sa chyba 3 albo 4 rodzaje brzmienia). Kiedys myslalem ,ze to wina emulacji pokey'a, ale jak sie okazalo na real atari jest to samo...
mysle ,ze nie moze byc to wina player'a RMT, poniewaz z reguly program za kazdym razem powinien dzialac tak samo, w tym wypadku za kazdym razem dziala/gra inaczej...

troche to dziwne, bo na emulatorze, jesli sie odpali program przez load executable, pamiec jest czyszczona (oprocz tej pod romem) a rejestry i inne znaczniki ustawiane zawsze tak samo (chyba :>), wiedz teoretycznie program (przynajmniej na emulatorze) powinien dzialac za kazdym razem identycznie.

kiedy robilem pare testow w RMT, okazalo sie ,ze brzmienie tego bass'a  zmienia sie za kazdym razem, kiedy na tym samym kanale jest grany instrument, ktory ma ustawione COMMAND1 (Play frequency $XY), niestety to i tak w niczym nie pomaga bo, to jedynie zmienia brzmienie (ktore i tak jest inicjowane za kazdym razem losowo), a nie ustawia je...

czy ktos jest w stanie wytlumaczyc, czemu pokey, za kazdym razem odgrywa podany plik inaczej? ;)
moze dlatego ,ze pokey pelni funkcje timera i brzmienie dzwieku jest zalezne wlanie od tego timera?
moze istnienie jakis magiczny rejestr, ktory "wyzeruje" ustawienia pokey'a, dzieki czemu za kazdym razem bedzie grac tak samo ;)
pomocy! bo ja juz tego nie kumam :>

PS: w zalaczniku, powinny byc jeszcze dwa pliki wav, w ktorych wyraznie slychac o co mi chodzi ;)

zalacznik tutaj: http://www.bryza.net/~toldi/pokey.zip

107

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

pisze sie na 2xXE ;)

108

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

Yo!
fajnie ,ze stronka znowu wstaje, a Ty znowu znalazles czas na Atari ;)

trainery leza tutaj:
http://80.55.59.75/~pr0be/trainers.zip
http://80.55.59.75/~pr0be/trainers2.zip

109

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

mozna wyswietlic 1 playera w roznych kolorach w 2 roznych pozycjach w 1 lini

ale te 2 duszki z jednego playera w 1 lini beda wygladac identycznie czy niekoniecznie?
tzn. mozna w 1 lini wyswietlic wiecej niz dwa ROZNE duszki 4-kolorowe?

110

(11 odpowiedzi, napisanych Scena - 8bit)

hmm...
mnozenie przez 256 mozna latwiej i o wiele szybciej zrobic tak: powiedzmy ,ze chcesz pomnozyc liczbe 16bitowa przez 256 (wynik 24bit)

lda liczba
sta wynik+1
lda liczba+1
sta wynik+2
lda #$00
sta wynik

dzielenie liczby 16bitowej (ze znakiem) przez 512 mozna zrobic szybciej po przez pominiecie najmlodszego bajtu (czyli podzielenie przez 256) oraz podzielenie tego przez 2 (256*2=512):

    lda liczba+1 ; starszy bajt liczby do podzielenia
    bmi _ujemna
    lsr @
    sta wynik ; wynik 8bitowy
    jmp _dalej

_ujemna    eor #$ff
    clc
    adc #$01
    lsr @
    eor #$ff
    clc
    adc #$01
    sta wynik

_dalej    ...

jesli chodzi o szybkosc to dzielic przez 512 mozna tak :)

    ldx liczba+1
    lda div512tb,x

wystarczy miec teraz talibce 256 bajtowa, ktora tworzysz tak:

gendvtb    ldx #$00
    txa
    bpl _neg
    lsr @
    sta div512tb,x
    jmp _gendv
_neg    eor #$ff
    clc
    adc #$01
    lsr @
    eor #$ff
    clc
    adc #$01
    sta div512tb,x
_gendv    inx
    bne gendvtb+2

i masz dzielenie przez 512 liczby 16bitowej w 7-9cykli ;)


co do mnozenia liczby 8bitowej przez 8bitowa to jest bardzo dobry przyklad tutaj: http://www.6502.org/source/integers/fastmult.htm

korzysta on z zaleznosci, ze: a*b=f(a+b)-f(a-b), f(x)=x*x/4
chyba najlepszy i najszybszy sposob na mnozenie (pomijajac pamieciozerne tablice :>)

gorzej jesli chcesz pomnozyc WIEKSZE liczby ze znakiem, mialem ostatnio wlasnie taki problem...

ztablicowanie wynikow (8bit * 8bit) zajmie dokladnie cala pamiec atarynki, wiedz odpada...

mozna tak stworzyc tablice f(x) ,zeby dalo sie pomozyc liczby ze znakiem ale sa pewne ograniczenia:
jesli a+b>128 mamy przepelnienie
jesli a-b>128 mamy przepelnienie
wiedz np. nie pomnozymy liczby 124 razy 8 bo 124+8 daje nam -124 (w kodzie U2) wiedz mamy przepelnienie,

mozna zastosowac tutaj pewna wlasciwosc ,ze

a*b=(a_lo+256*a_hi)*b=(a_lo*b) + 256*(a_hi*b)

dzieki czemu mozna obliczyc mnozenie 16bit ze znakiem razy 8bit ze znakiem po przez 2 mnozenia 8bit*8bit ze znakiem, niestety takie cos zajmuje ~100cykli wiedz przy duzej ilosc mnozen to odpada...

ja ten problem rozwiazlem tak (mnozy 9bitowa liczbe ze znakiem razy 8bitowa liczbe ze znakiem):

; tmp,tmp+1 * Y
; bestcase: 10+mul+rts (unsigned by unsigned)
; worstcase: 37+mul+rts (unsigned by signed)
; worstcase: 35+mul+rts (signed by unsigned)
; worstcase: 26+mul+rts (signed by signed)
;
mul16    bmi neg0
    lda tmp+1
    bmi neg2
    lda tmp
    jsr mul
    rts
neg2    lda tmp
    eor #$ff
    clc
    adc #$01
    jsr mul
    tay
    lda res
    eor #$ff
    clc
    adc #$01
    sta res
    tya
    eor #$ff
    adc #$00
    rts

neg0    lda tmp+1
    bmi neg1
    lda negtab,y
    ldy tmp
    jsr mul
    tay
    lda res
    eor #$ff
    clc
    adc #$01
    sta res
    tya
    eor #$ff
    adc #$00
    rts

neg1    lda negtab,y
    sta tmp2
    ldy tmp
    lda negtab,y
    ldy tmp2
    jsr mul
    rts

majac szybkie mnozenie 8bit*8bit=16bit res (takie jak w przykladzie z 6502.org) da to nam wynik w przyzwoitym czasie (oczywiscie jsr mul nalzy zastapic cala procedura mnozenia ,zeby nie tracic 12cykli na jsr+rts)

ale jesli to ma byc prosta scena 3d najlepszym i najszybszym sposobem jest zrobienie sobie tablicy sin(a)*x, i bez zadnego mnozenia mozemy obracac punkty w bardzo szybkim tepie (niestety bardzo pamieciozerne ;>, poniwaz przy 128katach i "gridzie" -64..64 tablica sinosow zajmuje nam 16384bajty...)
oczywiscie da sie ta tablice skrocic kosztem kilku(nastu) cykli np. wiedzadz ,ze -64*-43 to to samo co -(64*-43), dzieki czemu mozemy ztablicowac tylko wartosci dodatnie i przed mnozeniem sprawdzac znaki (a potem je zmieniac).
majac taka fajna tablice obrot punktu to poprostu pare linijek, cos w stylu tego:

ldy X
lda (costab),y
sec
ldy Y
sbc (sintab),y
sta newX

ldy X
lda (sintab),y
clc
ldy Y
adc (costab),y
sta newY

oczywiscie przed obrotem nalzy ustawic wskazniki sintab i costab tak aby wskazywaly do wartosci wynikow odpowiedniego dla danego kata:

lda katalfa
clc
adc #>sintab
sta sintab+1
lda katalfa
clc
adc #>costab
sta costab+1
lda #$00
sta sintab
sta costab

i robimy to tylko RAZ przed obrotem punktow.

jesli chodzi ogolnie o programowaniu 6502 to najlepsza strona jaka znalazlem jest: http://www.ffd2.com/fridge/chacking/
na niej praktycznie nauczylem sie programowac w asemblerze, co prawda przyklady sa dla c64 ale procesor jest ten sam, wiedz nie ma zadnego problemu, polecam nr 9 gdzie jest bardzo spory artykul o programowaniu 3d na 6502 (mnozenie, dzielenie, perspektywa, obroty, macierze itp)

111

(41 odpowiedzi, napisanych Zloty)

bylo miodzio! Respect dla Grey'a za zajebiste party! No i czekamy na kolejna edycje za rok ;)

A mam pytanie-jak wam się podobało moje "w 2 godz. 16 kb Intro written in Turbo Basic XL" ? Jestem ciekaw waszej opinii.

no no druciak w basicu, hehe kiedys tez probowalem ale u mnie chodzilo to wolniej i starsznie mrugalo ;>
teraz tylko pozostalo Ci przeniesc sie w calosci na assemblera i bedzie spox!
tak na przyszlosc to nastepnym razem zabezpiecz program przed hakerem o xywce Pinokio, poprzez POKE 566,158, wtedy jego magiczne narzedzie hakerskie w postaci klawisza Break nie zadziala ;)

przy okazji zapodaje POPRAWIONA wersje mojego intra1k z SV, nie ma to jak kodowac 4h przed party... dopiero po powrocie zauwazylem, ze glowna procka byla zwalona i przez to pixel byl dwa razy wiekszy w poziomie..., jakby tego bylo malo zle byla generowana textura... po usunieciu bledow i malej optymalizacji plik wazy teraz o ~70 bajtow mniej i dziala lepiej ;)

112

(8 odpowiedzi, napisanych Scena - 8bit)

spoko, w zalaczniku dolaczam wszystkie utwory Born'a jakie udalo mu sie do tej pory skonczyc ;)

113

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

drac030 a nie szybciej bylo by pisac program na kartce papieru? potem bys go zmienial na opkody i wklepywal do BASIC'a (jako ciag danych DATA) potem wystarczy cos takiego zapisac w odpowiedni obszar pamieci(READ i POKE) i dac w BASIC'u X=USR(ADRES), oczywiscie nalezalo by korzystac z obszaru pamieci tak aby nie nadpisac OS czy BASIC'a ;)
ale nie musial bys co chwilka zapisywac i wczytywac danych... a jak by cos nie dzialalo jak trzeba to wystarczylo by wcisnac RESET i porawic niektore rzeczy ;)
ja tak pisalem pierwsze programy w asemblerze tylko dlatego ,ze na magnecie pod Asemblerem za dlugo to trwalo ;) potem przezucilem sie na X-ASM na grzybie...

114

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

jak komus sie nudzi to moze sobie sciagnac nastepne 11 trainerow ;o
http://80.55.59.75/~pr0be/trainers2.zip

115

(5 odpowiedzi, napisanych Bałagan)

chyba chodzi o to ,ze poraz pierwszy w histori, Polska gra wybila sie tak wysoko (Painkiller) ,ze zostala oficialna gra na CPL (po WCG chyba najwieksza impreza/turniej dla graczy ,ktorzy walcza o naprawde spora kase)

116

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

ja mam gdzies na kasecie taki program, tyle ,ze jest pod Turbo2000F czyli pod wersje ,w ktorej przerobka magnetofonu wymagala dodatkowego przelacznika Turbo/Normal a nie dodatkowego kabla... wiedz to Ciebie pewnie nie ratuje...
swoja droga nie wiedzialem ,ze tak mozna...
myslalem ,ze ten program dodaje tylko dodatkowy wpis do tablicy urzadzen jako litera "T: nazwa" i "przekierowuje" na urzadzenie turbo (D: nazwa), tak aby programy uzytkowe nie myslaly ,ze Turbo to stacja dyskow...

czyli dzieki temu mozna odczytac taki program w DOS'ie i bedzie dzialac Turbo2000 ze stacja dyskow?!?

117

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

Dracon moglbys zapodac jakies namary na trainery LBS i Clever People? zchecia bym sobie je zobaczyl...

a co do Ninja, moze to wina Joy'a bo tam naprawde modifikacja nie ma nic wspolnego ze sterowaniem ;)
procedurka zadajaca obrazenia jest prawie taka sama jak w orginale, z ta roznica ,ze sprawdza czy obrazenia zostaly zadane graczowi czy przeciwnikowi, jesli przeciwnikowi to odejmuje normalnie obrazenia, jesli graczowi to RTS ;)
chyba ,ze depacker cos namieszal ;)

118

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

Hi!

jakos mialem ostatnio zajawke, aby porobic trainery do gier...

pierwotnie mialy byc zrobione dla AHT, ale z tego co mi mowil Stryker, Blackd0t raczej juz nie ma czasu na Atari :(

kazda gra, oprocz trainera zawiera male intro i jest spakowana dj packer'em (te ,ktore sie nie daly podzielilem najpierw na kilka mniejszych czesci albo spakowalem wczesniej przez Run Lenght Encoding)

jak by ktos chcial to leza tutaj: http://80.55.59.75/~pr0be/trainers.zip

119

(34 odpowiedzi, napisanych Bałagan)

z tego co sie orientuje, to bedziesz mogl wybrac miedzy stara oferta a nowa... wiedz nie widze problemu mozesz zostac przy starej umowie, ale wtedy nie dostaniesz bonusow ;)

ja tam sie ciesze bo w mojej sieci jest DSL 1MB i teraz za free bede miec 2MB ;)

120

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

hmm... co do wersji Ghost&Goblins na Atari byla jeszcze gra Ghostly Goblins, szkoda ,ze jest tylko wersja demo, ale chociaz pograc mozna...

mozecie ja sciagnac tutaj: http://80.55.59.75/~pr0be/ghostly_goblins.rar

121

(88 odpowiedzi, napisanych Zloty)

hmm nie wiem czy ktos to jeszcze zdazy przeczytac, ale ja z Czajnikiem mozemy sie troche spoznic i byc ~18...

122

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

wszystko juz chyba dziala, nie mam tylko pewnosci co do wartosi, ktore wpisuje do $d40e(NMI),$d301(OS) poniewaz zrobilem tak jak mowil Swiety odczytalem wartosci bitow tych komorek przed wylaczeniem OS tyle ,ze sa to chyba komorki TYLKO DO ZAPISU wiedz moglem otrzymac jakas zla wartosc - odczytalo mi z obu komorek wartosc $FF, taka tesz wpisalem no i dziala! ;) OS zostal znowu przepisany z ROM->RAM

a co do SuperMegaQrsu, to niestety jest tylko info o wylaczeniu OS (bo w sumie po co go potem wlaczac ;>)
tak czy inaczej z kursow TeBe dosc duzo sie nauczylem, wkoncu moglem gdzies poczytac o takich rzeczach jak wylaczenie OS czy stawianie pixela ;), u wujka Zientary tego nie ma :P

dzieki!

123

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

Yo!
Czy jest mozliwosc odlaczenia OS a potem wlaczenia go spowrotem?
potrzebuje na krotki okres czasu, dostep do pamieci $c000-$cfff lub $d800-$fff0
robie to tak:

    lda #$00
    sta $d40e
    lda #$fe
    sta $d301

nastepnie troche bawie sie pamiecia od $c000-$cfff, potem wlaczam NMI i atari sie wysypuje, poniewaz przy odlaczaniu OS kasuje sie standardowa procedura NMI(umieszczona od $c018)

teraz pytanie: czy da rade po odlaczeniu OS wlaczyc go spowrotem? istnieje jakas magiczna komorka sprzetowa po ustawieniu ,ktorej zostanie przepisany znowu ROM->RAM?

tak pozatym co oprocz procedury NMI siedzi w pamieci od $c000-$cfff i od $d800-$fff0???

124

(66 odpowiedzi, napisanych Scena - 8bit)

no... wreszcie!

pod emulatorem naprawde w niektorych momentach cos sie "sypie", pod real atari jeszcze nie sprawdzalem ;)

a co do wieszania to poprostu wloz druga dyskietke i zrestatuj emulator SHIFT+F5 i powinno dzialac...

zaje_biste demko... musze sie polapac o co biega z tym mapowaniem, narazie wiem ,ze jest to cos w stylu:
lda $xxxx,x
ora $yyyy,x
sta $zzzz,y
;o

125

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

pr0be ale zes odpowiedz pyknal ;) z czego zes to przepisal ;) ?? hehe ja mam chyba to: TURBO2000F ;]

hehe tak to jest jak sie siedzi przez 6 lat na magnecie ;)