51

(273 odpowiedzi, napisanych Programowanie - 8 bit)

    iny
    lda (z80_pc),y
    bmi neg
    sta temp_z
    iny
    lda (z80_pc),y
    ldy temp_z
    sta (z80_ix),y
    ldy #0
    rts

neg    adc z80_ix ; z80_ixl
    sta temp_z
    lda #$ff
    adc z80_ix+1 ; z80_ixh
    sta temp_z+1
    iny
    lda (z80_pc),y
    ldy #0
    sta (temp_z),y
    clc
    rts

:)

52

(273 odpowiedzi, napisanych Programowanie - 8 bit)

oki, mialem teraz troche wiecej czasu i teraz napisalem troche inna implementacje tego rozkazu (wczesniej jedynie zoptymalizowalem twoj kod bez zmiany koncepcji)

jesli jest tak jak mysle, tzn ten rozkaz powoduje skopiowanie BC bajtow z HL do DE. to cos takiego powinno dzialac znacznie szybciej:

    ldx z80_b
    bne l2
; B=0 wiec kopiujemy C bajtow
    ldx z80_c
    beq end
    ldy #0
l1    lda (z80_hl),y
    sta (z80_de),y
    iny
    dex
    bne l1

    clc
    tya
    adc z80_l
    sta z80_l
    bcc *+5
    inc z80_h
    clc

    tya
    adc z80_e
    sta z80_e
    bcc *+4
    inc z80_d

    stx z80_c ; B juz jest zero!
end    rts ; koniec

; B>0 wiec kopiujemy conajmniej B*256bajtow
l2    ldy #0
l3    lda (z80_hl),y
    sta (z80_de),y
    iny
    bne l3
    inc z80_hl+1
    inc z80_de+1
    dex
    bne l3

; ok mamy juz skopiowane B*256bajtow, zostalo nam do
; skopiowania jeszcze C bajtow
    ldx z80_c
    beq end2
l4    lda (z80_hl),y
    sta (z80_de),y
    iny
    dex
    bne l4

    clc
    tya
    adc z80_l
    sta z80_l
    bcc *+5
    inc z80_h
    clc

    tya
    adc z80_e
    sta z80_e
    bcc *+4
    inc z80_d
 
    stx z80_c
end2    stx z80_b
    rts ; koniec

wzrost szybkosc polega na tym ,ze w tej wersji, fragment kodu:

        tya        
        adc z80_l
        sta z80_l
        bcc _ed_b01
        inc z80_h
        clc

_ed_b01 tya
        adc z80_e
        sta z80_e
        bcc _ed_b02
        inc z80_d
        clc

jest wykonywany tylko raz a u ciebie o ile sie nie myle bedzie wykonywany B+1 razy...

to samo tyczy sie tego fragmentu:

_ed_b02 lda z80_b
        beq _ed_b04    ; koniec
        dec z80_b
        dex
        jmp _ed_b05    ; kopiuj

ktory w mojej wersji juz nie jest potrzebny (dokladnie wiemy ile skopiowac bajtow juz na samym poczatku, wiec po co sprawdzac to, co kazdy obieg petli)

no i dla B<>0 petla kopiujaca jest o 2cykle szybsza (nie potrzebujemy tam instrukcji DEX bo wiemy, ze kopiujemy wielokrotnosc 256bajtow)

EDIT: na upartego, mozna by to przyspieszyc dla B<>0 np. tak:
petle:

l2    ldy #0
l3    lda (z80_hl),y
    sta (z80_de),y
    iny
    bne l3

mozna troszke rozpisac:

l2    ldy #0
l3    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    lda (z80_hl),y
    sta (z80_de),y
    iny
    bne l3

petla nierozpisana wykonuje sie: (5+6+2+3)*256=4096cykle
petla rozpisana(8razy) wykonuje sie: (3 + (5+6+2)*8)*32=3424cykle
nalezy pamietac, ze petla musi byc rozpisana N razy, gdzie N to potega dwojki, wiedz np. jak rozpiszesz to 10razy to nie bedzie dzialac poniewaz warunek "bne" bedzie sprawdzany nie w tym miejscu co powinnien

53

(273 odpowiedzi, napisanych Programowanie - 8 bit)

temp_z jest zupelnie nie potrzebne... mozna to przez caly czas trzymac w rejestrze Y dzieki czemu zaoszczedzimy mase cykli (8 w bestcase i 5 w worstcase)... druga sprawa to jak juz wspomnial w poprzednim poscie TeBe to zamiana "lda adc sta" na "bcc inc" z uwzglednieniem tego ,ze gdy nastapi bcc flaga C jest skasowana, wiedz nie trzeba juz robic CLC przed ADC

_ed_b0        equ *      ; LDIR

        ldx z80_c
        beq _ed_b02
                
_ed_b05        ldy #0
_ed_b03        lda (z80_hl),y
        sta (z80_de),y
        iny
        dex
        bne _ed_b03

        stx z80_c
        bne *+3
        dey

        clc
        tya
        adc z80_l
        sta z80_l
        bcc _ed_b01
        inc z80_h
        clc

_ed_b01        tya
        adc z80_e
        sta z80_e
        bcc *+4
        inc z80_d

_ed_b02        lda z80_b
        beq _ed_b04    ; koniec
        dec z80_b
        jmp _ed_b05    ; kopiuj

_ed_b04        equ *

PS:
nie kumam jednej rzeczy:

            dex
            bne _ed_b03
LABEL1
            stx z80_c
            sty temp_z
            bne _ed_b01
            dec temp_z

nie ma tu przypadkiem blendu logicznego?
wedlug mnie "dec temp_z" bedzie wykonywany ZAWSZE poniewaz kod od LABEL1 bedzie wykonywany po opusczeniu petli "_ed_b03" a ta petla zostanie opusczona gdy flaga Z=1 wiedz "BNE _ed_b01" nie zostanie wykonane nigdy (rozkazy stx/sty nie wplywaja na flage Z!)

54

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

jesli na poczatku wczasie odczytywania nazwy pliku sa czarno-biale paski, a w momecie wczytywania danych kolorowe to jest to Turbo 2002 znane takze jako Turbo 2000F.

pare miesiecy temu kopiowalem pare rzeczy wlasnie z tego turbo na grzyba przez SIO2PC. Wkladalo sie do emulowanej stacji dyskow przez SIO2PC dyskietke z kopierami turbo (byly w bazie plikow na atari area). odpalalo sie odpowiedni kopier i juz mozna bylo bezklopotu wczytywac dane zapisane w systemie KSO Turbo a potem to zapisac normalnie na ATR'a (nalezalo przy tym pamietac ,ze magnetofon turbo to bylo urzadzenie T: a nie D: )

55

(273 odpowiedzi, napisanych Programowanie - 8 bit)

tak sobie przypadkiem looknolem w kod pod debugerem i widze ,ze twoja procedure do pobierania rozkazu procesora z80 (ta co jest umieszczona pod adresem od $D0-$DF) mozna jeszcze znacznie zoptymalizowac i skrucic ja o 3cykle:

u ciebie wyglada tak:

lda (pc),y
tax
lda $3e00,x
sta _jmp+1
lda $3f00,x
sta _jmp+2
_jmp jmp $ffff

a mozna ja jeszcze zoptymalizowac na cos takiego:

pc equ _pc+1
_pc ldx $ffff,y
lda $3e00,x
sta _jmp+1
lda $3f00,x
sta _jmp+2
_jmp jmp $ffff

poprostu zamieniamy "lda (pc),y tax" na "ldx $ffff,y", bo zauwaz ,ze operand ldx jest na stronie zerowej, wiedz bez klopotu bedziesz mogl sie do niego odwolywac np. w emulacji rozkazow procesora z80 przez adresowanie: lda (pc),y - wiedz nic nie tracisz czysty zysk ;)

no i powodzenia w ukonczeniu projektu, bo zapowiada sie niezle!

PS: do czego sa u ciebie przerwania DLI i takie geste LMS w Display Liscie?

56

(56 odpowiedzi, napisanych Zloty)

jesli SV wypali w tym roku to oczywiscie sie pojawie ;)

57

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

miker ostatni akapit postu #50 ;)
wszystko zalezy od tego ile czasu zajmie nam skonczenie dema...

58

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

dzieki wielkie za uwagi...
ciesze sie, ze gra wam przypadla do gustu ;)

z tego co widze ,to duzo osob zwrocilo uwage na zbyt wolna akceleracje ruchu - oki postaram sie to zmienic w nastepnej wersji oraz wygladzic bardziej skok...
a co do czarno-bialych przerywnikow to tez mysle ,ze Powrooz sobie poradzi ;)

jest to wersja testowa, wiedz level mial byc z zalozenia troche trudniejszy, oczywiscie w wersji finalnej, poczatkowe levele beda o wiele latwiejsze niz aktualny...
co do klopotow ze skakaniem, to jest to raczej kwestia oswojenia sie ze sterowaniem, wystarczy skakac z rozpedu a nie z miejsca ;)

PM overlay o ktorym wspomnial XXL raczej ciezko bedzie tutaj uzyc - sprajty raczej zawsze beda wykorzystane jak nie na przeciwnika to na bonus... jedyne czego teraz zaluje to to, ze troche nie pomyslalem, i nie zwrocilem uwagi Powroozowi ,zeby ograniczyl wysokosc sprajtow do 16pixeli, wtedy mozna by bylo rozmiescic bezklopotu 2razy wiecej sprajtow na ekranie i PM overlay byl by wtedy bardzo uzyteczny...

jesli chodzi o termin ukonczenia gry, to mysle ,ze niewczesniej niz za 4-5miesiecy... teraz wiekszy priorytet dla nas ma nowe demo, ktore mamy zamiar wystawic na Forever 2k7, aktualnie jeszcze zaczelismy myslec nad jeszcze jednym demem na Silly Venture (o ile bedzie)...

59

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

wlasnie skonczylismy prace nad wersja preview naszej nowej gry.
gra pierwotnie miala byc skonczona na Abbuc Software Contest, ale nie wyrobilismy sie do deadline ;)
to zaowocowalo przepisaniem kodu praktycznie od nowa, dopracowaniu grafiki itp.

preview gry mozna sciagnac tu: http://manta.univ.gda.pl/~pwisnie/crownland_preview.zip

jest to wersja testowa, wiedz jesli zauwazycie jakies bledy to dajcie znac...

aktualnie znane mi sa 2 bugi:
-kaszana synchronizacji pionowej w momecie efektu spadania napisow (tylko real atari - na emulatorze jest ok), nie wiem czym to moze byc spowodowane, nie jest to chyba wina braku JVB w display-liscie bo adres DL jest updejtowany przez VBL, mozliwe ,ze jest to wina wywolania DLI w liniach>=240, tak czy inaczej gra dziala ;)
-kiedy czas zliczy do zera, kaszani sie sprajt gracza.

60

(20 odpowiedzi, napisanych Bałagan)

1. ok 12-13 lat
2. Bajtek (glownie Atari Basic)
  Asemblera 6502 nauczylem sie z Commodorowskiego Maga: http://www.ffd2.com/fridge/chacking/ oraz z ksiazki "programowanie processora 6502" - autor nieznany bo nie mam okladki 8-)
3. asm6502, asmx86, c/c++, pascal/delphi, php
4. aktualnie nie (jeszcze studiuje)
5. Bloodshed Dev-C++ dla programow w C/C++, wbudowany Notatnik do reszty (asm/php/html), jesli chodzi o kompilatory 6502 to mads/xasm

61

(10 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:

W ICBUFL/ICBUFL+1 masz liczbę wczytanych bajtów.

no tak :)
dzieki!

62

(10 odpowiedzi, napisanych Programowanie - 8 bit)

hmm ale odczytanie wielkosci plikow przez katalog dyskietki tez nie jest pewne, bo rozne dosy inaczej "sformatuja" dane wyjsciowe: np. w MyDos wygladaja one tak: "  DOS45678SYS 037", a w SDX wyjscie bedzie wygladalo tak: "DOS45678 SYS   4736" co juz jest problemem, nie wspominajac juz o tym ,ze w pierwszym przypadku mamy dlugosc podana w sektorach a w drugim dlugosc podana w bajtach...

jak juz Fox wspomnial jedyna pewna metoda chyba bedzie odczyt pliku w calosci...
szkoda bo mialem nadzieje ,ze w czasie wykonwyania operacji OPEN, jest pobierana dlugosc pliku i gdzies zapisywana...

jeszcze jedno lamerskie pytanie ;)

powiedzmy ,ze chce wczytac caly plik, robie cos takiego:

    ldx #$10
    lda #7
    sta iccmd,x
    lda #0
    sta icbufa,x
    lda #$80
    sta icbufa+1,x
    lda #$ff
    sta icbufl,x
    lda #$ff
    sta icbufl+1,x
    jsr ciomain

po tym jest wszystko pieknie, pod $8000-$xxxx mam wczytany caly plik, tylko skad mam wiedziec ile zostalo wczytane bajtow? ;)
wczytywanie pliku bajt-po-bajcie (icbufl=0) daloby mi prawidlowa odpowiedz, ale to raczej bardzo kiespki sposob ze wzgledu na szybkosc...

63

(10 odpowiedzi, napisanych Programowanie - 8 bit)

jak pobrac dlugosc pliku bez grzebania "recznie" w sektorze 361?
czy istnieje wogole jakas operacja CIO podczas, ktorej zostaje gdzies zapisana dlugosc aktualnie uzywanego pliku? (komenda specjalna LEN raczej odpada, bo nie wszystkie dosy ja obsluguja)

64

(254 odpowiedzi, napisanych Bałagan)

tak sie przy okazji zapytam ;)
Solo z jaka czestotliwoscia mniej wiecej sa probkowane te sample, ktorych uzyles w "pmix.sap" i "new_ps1.sap"?
bo na sapplayerze nie widac zbytnio - pokazuje IRQFREQ ~50-200hz a w momecie grania sampla pewnie jest duuuzo wiekszy ;)
bo tak sie zastanawiam czy przy czestotliwosci ~1500Hz sample by wogole brzmialy? bo jesli tak to mozna by bylo bez zadnego obciazenia procka grac je z taka czestotliwoscia w demach :)

65

(254 odpowiedzi, napisanych Bałagan)

jeszcze troche dodam od siebie zanim ten temat zostanie zamkniety ;)

Jestem fanatykiem zarowno SID'a jak i POKEY'a. Kocham obydwa uklady, oba sa specyficzne i nikt nie jest w stanie ich porownac.

Kiedys sluchalem nalogowo tylko sap'ow, a jak raz na jakis czas zapuscilem sobie jakas muzyczke z C64 to nie kumalem czemu ludzi sadza ,ze SID jest lepszy niz POKEY - dla mnie wtedy kazdy SID brzmial praktycznie identycznie - caly czas ten sam bass + miliard modulacji. Poprostu bylem przyzwyczajony do bardziej "melodyjnych" kawalkow, dlatego tez kawalki z SIDa brzmialy dla mnie wtedy gorzej niz te z POKEY'a ;)

z czasem zaczolem sluchac bardzo duzo SIDow i "oswoilem" sie z jego brzmieniem. Dlatego nie dziwi mnie podejscie co poniektorych Atarowcow, ze muzyka na C64 jest hmm jak by to napisac  "malo zroznicowana" ;)

po paru latach sluchania muzy zarowno z POKEY'a jak i SID'a, chociaz jestem Atarowcem moge smialo powiedziec, ze jesli chodzi o muzyke grana z czestotliwoscia 50Hz to POKEY moze sie schowac - wystarczy posluchac nowszych zakow Orcan'a(IMHO gosciu wyciska takie dzwieki z SID'a na muzyce 1/ramke, ze szczena opada), KB(jego cover z Second Reality bardziej mi sie podoba niz orginal z PC!), Jeff'a, Fanta'y, Sonic'a, Wacek'a, Rodney'a czy wielu innych...

caly problem w tym ,ze POKEY nie jest chipem w 100% przeznaczonym do oblsugi dzwieku, jest to tez uklad o pare lat starszy od SID'a.
Pokey nie posiada takich wypas filtrow jak SID, nie posiada takich "gladkich" i przyjemnych dla ucha basow, nie mowiac juz o mozliwosci modulowania dzwieku (kontrolowanego i w tak duzym zakresie w jakim posiada SID), dlatego nie znajdziez w muzyczkach Atarowskich tego czym sie tak bardzo podniecasz - dobrze brzmiacego drum&bass'u (bynajmniej nie tak dobrze brzmiacego jak na SID'e)
jesli nie podobal ci sie bass z bash'a czy z rolo7, ktory IMHO jak na POKEY'a jest rewelacyjny, to musze ciebie zmartwic - lepszego raczej nie znajdziesz...

tak SID ma o wiele lepsze basy, ale za to na POKEY'u brzmia nieporownywalnie lepiej niektore instrumenty perkusyjne (np. talerze), nie mowiac juz o wysokich dzwiekach, ktore sa o wiele bardziej czystrze i przestrzenne niz te SID'owe.

tak czy inaczej brak odpowiednich filtrow oraz "dobrego" basu sprawa, ze techniawa/drum&bass na SID'e zawsze bedzie brzmial lepiej niz na POKEY'u, ale przeciez to nie jedyne gatunki muzyczne...

a co do "zlych wyborow w dziecinstwie" to z perspektywy czasu jestem niezmiernie szczesliwy ,ze mialem Atari a nie C64. Atari ma o wiele wieksze mozliwosci niz C64 jesli chodzi o dema (i nie tylko), co wyrazie widac i tutaj nie trzeba wogole dyskutowac wystarczy zobaczyc takie produkcje jak Reditus/Forsaken Love/Numen/TimeKeeper/Drunk Chessboard (mozna je sciagnac np. z www.pouet.net). Nie powinno to nikogo dziwic, Atari jest troche szybsze od C64 (o jakies ~30% - a nie jak niektorzy mysla o 70%) do tego ma rewelacyjny uklad graficzny, ktory do dem nadaje sie idealnie. Na C64 cieniowane obiekty/bumpy i wiele innych efektow wyglada w porownaiu do Atari oblesnie. A jesli juz wygladaja znosnie to sa piekelnie wolne. (i to nie dlatego, ze Atari ma troche szybszy procek, ale z wielu innych powodow min z powodu VIC'a, ktory nie jest tak "elastyczny" jak Antic - np. tryb "chunky" (rozdzielczosc: ~80x50, 16kolorow), ktory jest najczesciej uzywany na Atari i bardzo czesto na C64 w demach, na Atari mozna uzyskac go praktycznie za "darmo" na C64 trzeba go emulowac na znakach, co jak rozmawialem z jednym z koderow ze sceny C64 zzera bardzo duzo procka, tak ,ze zostaje niecale ~10000cykli na ramke (dla porownania - Atari w tym trybie ma ~28000cykli na ramke - czyli jest prawie 3 razy szybszy!)


PS: IMHO mowienie tutaj o samplach oraz o softwarowych wspomagaczach jest troche lamerskie, bo co z tego, ze Atari ladnie gra na samplach, jak tego nie mozna wykorzystac w bardziej praktyczny sposob, np jako podklad muzyczny do gier czy dem, ze wzgledu na to ,ze odgrywanie sampli zzera prawie calego procka...

66

(10 odpowiedzi, napisanych Bałagan)

http://www.c64hq.com
http://www.gamebase64.com
http://www.lemon64.com

67

(32 odpowiedzi, napisanych Bałagan)

http://tvp.cdp.pl//video/2006/05/30/74998/film.asf - ta sama akcja, tylko tutaj lepiej widac o co chodzi ;)

68

(16 odpowiedzi, napisanych Scena - 8bit)

twh just run those demos on emulator and turn stereo mode on in it. if u hear sound in only one speaker then that demo don't support stereo, otherwise it do ;)

69

(88 odpowiedzi, napisanych Zloty)

bede na 100% ;)

70

(83 odpowiedzi, napisanych Quast Rules)

mam pytanie: jak podpunkt drugi regulaminu ma sie do przerywan np. DL? sa dozwolone czy nie?

71

(89 odpowiedzi, napisanych Programowanie - 8 bit)

http://manta.univ.gda.pl/~pwisnie/mads.zip
TeBe tutaj masz wersje, ktora MADS 1.6.9 zle kompiluje...

MADS 1.6.2

904D    CLC
904E    ADC $867F,X
9051    STA $92 ;MEOLFLG
9053    JMP $9053
9056    BRK
9057    BRK

MADS 1.6.9

904D    CLC
904E    ADC $8600,X
9051    STA $00
9053    BRK
9054    BRK
9055    BRK
9056    BRK
9057    BRK

72

(89 odpowiedzi, napisanych Programowanie - 8 bit)

manta.univ.gda.pl/~pwisnie/rotate.zip

tu jest przyklad, ktory obraca dowolna ilosc punktow - dla uproszczenia nie ma tam dzielenia przez 128 oraz jest obliczana tylko wspolrzedna X:
x'=M1*vx +  M2*vy + M3*vz


dane sa takie:
M1=$32 M2=$7e M3=$55
vertexnum=1
vx[0]=$01ab vy[0]=$0564 vz[0]=$ff72

M1*vx=$005366
M2*vy=$02a738
M3*vz=$ffd0da

cos zle oblicza M3*vz - wychodzi $fed0da a powinno byc $ffd0da...
zmienilem takze procedure mnozenia tak aby nie korzystala z rejestru X, ktory jest uzywany jako licznik aktualnego wierzcholka...

nie jest to oczywiscie na maxa zopytmalizowane, jak wroce wieczorem to sie jeszcze pobawie ;)

PS: nie wiem czemu, ale najnowszy MADS zle to kompiluje - aktualny przyklad sie wysypuje, dlatego radze go kompilowac starsza wersja (ta dolaczona do archiwum)

73

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Eru napisał/a:

Jakbyś rozpisał całe liczenie jednej współrzędnej (czyli 3 mnożenia połączone z dodawaniem), zapodaj gdzieś, to zoptymalizuje się

spoko, jutro bede miec czas to napisze, i wkoncu zmienimy teorie w praktyke ;)

i pomyslec ,ze teraz mnozenie 8bit signed*8bit signed to tylko 20cykli a 16signed*8signed to ~60-70cykli o tylu to ja nawet nie marzylem ;)

74

(89 odpowiedzi, napisanych Programowanie - 8 bit)

o kurde sorki Eru, pomylilo mi sie, oczywiscie chodzilo mi o Twoj pomysl ;)

75

(89 odpowiedzi, napisanych Programowanie - 8 bit)

jellonek napisał/a:

nie czaje kto ci broni najpierw przemnozyc m1, m4, m7 przez x, po czym m2, ... przez y, i to samo dla z... w sumie 6x bys oszczedzal na ladowaniu danej 16bit

podkreslam to co napisal Jellonek "OSZCZEDZAL NA LADOWANIU DANEJ 16BITOWEJ", tyle ,ze ladowanie danej 16biotwej przy kazdym mnozeniu to zawsze tylko LDY Blo LDX Bhi, no chyba ,ze chodzi ci o to ,zeby tego LDY i LDX nie robic przy nastepnym mnozeniu (ale tak tez raczej nie mozna, bo pomiedzy dwoma mnozeniami rejestr Y sie zmieni)

Fox napisał/a:

Ustawiasz dla każdego puktu na stronie zerowej wskaźniki podrzebne do mnożeń przez starsze i młodsze bajty X, Y i Z

w aktualnej procedurze mnozenia tablice/wskazniki ustawia sie na podstawie mnoznika 8bitowego a nie 16bitowego... chyba ,ze chodzi wam o to ,zeby tak przerobic procedure ,zeby bylo na odwrot...
tak czy inaczej nie ma sensu zajmowac sie tym problemem bo pomysl Eru z przemnozeniem wszytkiego najpierw przez M1, potem przez M2 itd miazdzy wszystko, tylko 9 ustawien wskaznikow/tablic zeby pomnozyc dowolna ilosc punktow ;)