201 Ostatnio edytowany przez pr0be (2007-02-25 20:05:21)

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

202

Tak się zastanawiam .... może Z80 zmieści się do VBXE ... Nie znam tego procesora, ale pewnie jakas niewielka szansa jest.

pomidor

203

No i electron pozamiatał :)

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.

204

elektron :-) vbxe karta grafiki i emulator zx :-)

ok. tym czasem powprowadzalem te zmiany o ktorych mowil tebe i probe (wszystkie 2,3,4 bajtowe wykonuja sie teraz szybciej) popredni przyklad circle idzie teraz ponizej 12 ale sporo powyzej 11% (metoda pomiaru jak poprzednio)

natomiast zeby pokazac jak wygladaja kolorki zxspectrum bez kolorkow atari przenioslem cos takiego:
http://pouet.net/prod.php?which=1983
i wyglada to tak:
http://atari.pl/05.rar - szybkosc hmm lekko ponizej 6% (poimiar jak poprzednio)

http://atari.pl/hsc/ad.php?i=1.

205

[offtopic] electron: nie wiem, czy już o tym mówiłem, ale skoro jeszcze jest tam miejsce, a karta ma własną pamięć, to aż się prosi o dorzucenie jeszcze przetwornika do dźwięku i niech to cudo odgrywa jeszcze sample.[/offtopic]

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

206

W obecnej wersji rdzenia (a16) zajęte jest około 90% zasobów układu FPGA, oczywiście chcę wstawić jeszcze większy układ a poza tym jeżeli robić emulację z80 to na nowym rdzeniu - wszystkie te bajery blitter etc. nie są przecież potrzebne.

pomidor

207

Electron czy Twoja karta będzie zgodna z którymś z DirectX - ów ;) ?

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

208

electron napisał/a:

Tak się zastanawiam .... może Z80 zmieści się do VBXE ...

Heh, to jest myśl. Jedyny problem z zewnętrznym Z80 był, jak program na nim odpalony dopuścić do układów video - wsadzenie procesora do VBXE to świetnie rozwiązuje (pozostaje klawiatura/joystick, ale to by się już jakimś prostym wspomaganiem ze strony Atari dało załatwić).

A gdzie jest nosty, żeby powiedzieć "to już nie jest Atari"? :P

KMK
? HEX$(6670358)

209

electron napisał/a:

może Z80 zmieści się do VBXE

Na FPGA się nie znam, więc nie wiem czy może się to przydać: http://www.opencores.org/projects.cgi/web/t80/overview Kiedyś trafiłem na ten projekt i tak sobie przeleżał w linkach kilka lat. Jest to implementacja rdzenia Z80, 8080 i gameboya.

Byl hrozný tento stát, když musel jsi se dívat, jak zakázali psát a zakázali zpívat,
a bylo jim to málo, poručili dětem modlit se jak si přálo Veličenstvo Kat.

210

Widziałem to ... nie wiem, czy umiałbym to adaptować, może lepiej zrobić samemu - ale jak już powiedziałem szanse na zmieszczenie w vbxe są takie sobie ...

pomidor

211

ZRÓBTA przejściówkę do podłączenie karty AGP :)

a tak na serio to nie kombinujcie towarzyszu Electron tylko finalizujcie, bo kombinując można przekombinować

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

212

a poza tym jak mowil (chyba), program obslugi karty mozna dogrywac z pliku :-)

http://atari.pl/circle.obx  - bugfix i demo teraz startuje tak jak na zxie.

http://atari.pl/hsc/ad.php?i=1.

213 Ostatnio edytowany przez xxl (2007-02-28 09:45:25)

sorka za podpisywanie pod soba, ale jest mus.

probowalem uruchomic gre deathchase no 1 wsrod 100 najlepszych gier na trumne. program dziala ok poltory sekundy heh.
http://atari.pl/dctest.gif

mam dwie sprawy:

1. kto ma pomysl na rozsadne wprowadzenie kolorow na ekran - moze na vbi postawic procedurke, ktora przeszuka pamiec atrybutow zx i skoryguje pamiec dla drugiej DL ? bedzie migalo ale jakas namiastka kolorow bedzie. ???

2. potrzebuje kodu 6502 dlarozkazow z80 (jak historia pokazala warto prosic o pomoc :) )
- LDDR - kopiuje BC (B-starszy bajt) bajtow z adresu wskazanego przez HL do pamieci wskazanej przez DE, podobne dzialanie jak LDIR tylko ze tu HL,BC,DE maja zostac zmniejszone o 1 po przekopiowaniu jednego bajtu a nie jak tam BC zmniejszany a HL i DE zwiekszane
- LD (ix+n),m - zaladuje liczbe m do pamieci pod adres w IX +/-n  - n jest liczba w kodzie u2

_dd_36
                iny
                lda (z80_pc),y    ; jakie n
                bmi _dd_36_1
                iny                ; dodatnia
                lda (z80_pc),y     ; m
                tax
                dey
                lda (z80_pc),y     ; n
                tay
                txa
                sta (z80_ix),y     ; m do ix+n
                ldy #0
                rts
_dd_36_1
                eor #255        ; ujemna
                adc #1
                sta temp_z      ; n
                lda z80_ixl
                sec
                sbc temp_z
                sta temp_z
                lda z80_ixh
                sbc #0
                sta temp_z1     ; temp_z jest ix-n
                iny
                lda (z80_pc),y  ; m
                sta (temp_z),y  ; m do ix-n
                ldy #0
                clc
                rts

http://atari.pl/hsc/ad.php?i=1.

214

    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

:)

215

nie mam nic na swoje usprawiedliwienie, moze jedynie to ze pisze w nocy i malo co mysle, pozniej jak czytam te wypociny to az wstyd...

http://atari.pl/deathchase.rar

tak to chodzi (jeszcze nie dziala jak trzeba wszystko - drzewa sie nie ruszaja - procka wymaga rozkazu, ktorego jeszcze nie napisalem...

http://atari.pl/hsc/ad.php?i=1.

216

a gdyby tak zamieszczać pliczki *.a8s? Wychodzą mniejsze niż te aviki i zawsze można sobie F7 wcisnąć :)

217

taki rozkaz porusza drzewami:
_ed_b8          equ *         ; LDDR - bc bajtow z hl do de, zmniejsz o jeden bc,hl,de

                ldy #0

_ed_b8_3  lda z80_c
                bne _ed_b8_2
                lda z80_b
                bne _ed_b8_1

                rts

_ed_b8_1  dec z80_b
_ed_b8_2  dec z80_c

                lda (z80_hl),y
                sta (z80_de),y
               
                lda z80_l
                bne *+4
                dec z80_h
                dec z80_l

                lda z80_e
                bne *+4
                dec z80_d
                dec z80_e

                jmp _ed_b8_3

--
pokaze jak nie bedzie sie wieszal ... mam gdzies buga... szukam, moze dzis wieczor pokaze juz cos dzialajacego

http://atari.pl/hsc/ad.php?i=1.

218

tak to chodzi (jeszcze nie dziala jak trzeba wszystko - drzewa sie nie ruszaja - procka wymaga rozkazu, ktorego jeszcze nie napisalem...

A nie lepiej napisać obsługę wszystkich rozkazów, a nie dopasowywać "emulator" do czegoś konkretnego?

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.

219

dely: to nie dopasowywanie, tylko uruchamianie częściowo gotowego programu. Jak zaimplementuje wszystkie legalne, to i tak nie będzi koniec, bo z80 ma chyba z setke nielegali, których ktoś kiedyś może użył, więc pisać można w nieskończoność.

220

dely: na 6502 nie mam takich ambicji. tak jak mowil laoo, mozna go pisac dowolnie dlugo, dlatego poszedlem na latwizne i sprobuje uruchomic deathchasa, jak trafi na jakis rozkaz nie obslugiwany to dopisuje... przy okazji mniej wiecej wiem ktory rozkaz ma jakies bledy/zle dziala/wolno dziala /nie dziala itp.

drzewa w ruchu: http://atari.pl/deathchase1.rar

http://atari.pl/hsc/ad.php?i=1.

221

zdaje sie że w podobny sposób były pisane emulatory dla Nintendo64

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

222

Czy w temacie coś drgnęło...? Draco, zostaw na razie F7 i zabierz się za emulator, XXL - a co z Twoim projektem...?

Sikor umarł...

223

sajkor: zapomniales ze motywowanie draco nie przynosi skutkow? ma swoj plan czasowy i sie go trzyma...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

224

jellonek: ale ja wiem o czymś, o czym ty nie wiesz: Draco ma już kompa z F7, a na pamięci liniowej nie chce mu działać i jak powiedział na ostatnimn mini-sztabie: na razie nie ma motywacji ;)

Sikor umarł...

225

przepisalem emulca tak, zeby zajmowal jak najmniejmiejsca - teraz miesci sie w 4kb - dziala wolniej ale co tam :-) laduje .sna (nie mam loadera - dlatego wczytanie jakiegokolwiek zrzutu to wcisniecie kompilacji w madsie (ins).

od ostatniej animacji dopisalem troche rozkazow i teraz dzialaja liczniki, skrin tytulowy, start gry, game over... praktycznie jest wszystko :-) - no jedna rzecz szfankuje (wkurzajacy bug) i dlatego jeszcze nie puszczam w obieg...
acha, klawiatura jest mapowana pod dzojstik (na potrzeby tej gry wystarczy), przejrzalem troszke kodu i na 101% mozna podmieniac procedurki tak jak to w watku niejednokrotnie bylo mowione.

sprawdzilem tez tego demosa co na forever8 jest gdziestam w tekstach pisanych przez ludzi, potrzeba bylo dopisac tylko relokator stosu :) i poszlo :-)) no dobra, po chwili sie zawiesil heh.

http://atari.pl/hsc/ad.php?i=1.