7,251

(8 odpowiedzi, napisanych Programowanie - 8 bit)

> 2.

jesli zdefiniujesz obraz tak, zeby linia nie miala 32 znaki tylko np 255 to skroll moze byc realizowany przez zapis 2 bajtow a nie przesuwaniu 32 bajtow...

> 3.

tak, to nie jest problem, powinienes najpierw poczytac jak atari tworzy obraz, nie bylo by tych pytan...


> Najbardziej chciałbym mieć możliwość wyświetlania znaków na jakimś wirtualnym ekranie, tak było w amigowym Amosie - można było rysować na ekranie logicznym/wirtualnym, a potem jedną instrukcją przekopiować to na właściwy ekran.

w amosie nie calkiem kopiowal ekran, raczej zmienial jego adres... na atari jest tak samo - blyskawicznie (poczytaj o technice page fliping - chyba w basicu miguta jest to opisane)

7,252

(273 odpowiedzi, napisanych Programowanie - 8 bit)

trzeba jeszcze zaplanowac zadanie (przerwanie vbi?) ktore bedzie co ramke przerzucac 32*24 (768) bajtow z pamieci atrybutow zx spectrum do pamieci vbxe :-)

7,253

(273 odpowiedzi, napisanych Programowanie - 8 bit)

emulec dziala:

program na zx tu: http://atari.pl/fmtest.sna

uruchomiony na zxemu (atari) tu: http://atari.pl/zx_emu.avi

szybkosc: niezadawalajaca (na moje oko sporo ponizej 10%)

widze to tak, ze jedyna droga do uruchomienia gier z trumny na atari (poprzez emulacje) to przepisanie czesci kodu (petli, podprogramow) na assa 6502, albo zainsalowanie 65816 ;-)

---
jak wylaczam przerwania to emulec idzie ok. 6% oryginalu (to powyzej bylo z wlaczonymi przerwanami)

7,254

(709 odpowiedzi, napisanych Fabryka - 8bit)

najciezej zrobic ostatnie 10%

7,255

(273 odpowiedzi, napisanych Programowanie - 8 bit)

ale nikt nie powie "nie da sie" ;)

7,256

(273 odpowiedzi, napisanych Programowanie - 8 bit)

jestem pod wrazeniem.

7,257

(273 odpowiedzi, napisanych Programowanie - 8 bit)

na swoje usprawiedliwienie moge tylko powiedziec ze jeszcze nie doszedlem do rozkazu retn a to on byl kluczem... (w naglowku nie widzialem nigdzie wartosci dla pc) ;-)


--
stan na dzis

http://atari.pl/z80emu1.gifhttp://atari.pl/zxemu.gif

7,258

(273 odpowiedzi, napisanych Programowanie - 8 bit)

http://atari.pl/fmtest.sna - uruchamiac na zxspectrum; joystick kempston



-- kto mi pomoze rozszyfrowac naglowek (27 bajtow) pliku .sna albo inaczej jak/gdzie trumna zapisuje adres startu programu?

7,259

(273 odpowiedzi, napisanych Programowanie - 8 bit)

emulacja calej listy rozkazow jest ambitna... postaram sie wkrotce pokazac dzialajacy kod jakiegos programu (moze jakas ekstremalnie krotka gra albo cos) w kodzie z80 na atari, w emu beda tylko rozkazy, ktore beda uzywane w tym konkretnym programie, jesli ktos kuma generowanie obrazu na trumnie albo zx81 prosze o kontakt (jak wygladalaby dl dla antica?)

czuje ze to moze byc porazka jesli chodzi o szybkosc

-- organizacje obrazu juz mam. jak odczytac wcisniety klawisz gumiaka?

-- 3 slowa do ksiedza prowadzacego:
1. kempston to jakos niestandardowo podpiete urzadzenie? - moze byc mapowane z STICK0/STICK1 atari?
2. jak wyobrazacie sobie zrobienie mapy kolorow? 2 drogi, albo olac mape kolorow albo migajacy obraz na 1 planie mapa kolorow w trybie gtia na drugim bitplan w hiresie?

7,260

(273 odpowiedzi, napisanych Programowanie - 8 bit)

8080 ma mniej rejestrow, nie ma niektorych trybow adresowania, rej stanu jest krotszy, jakies myki sa z rozkazamio skokow wzglednych, lista rozkazow jest sporo krotsza od z80, emulacja 8080 musi byc szybsza od emulacji z80, poza tym caly czas mowicie o emulacji zx, ja o emulacji samego procesora. dopoki nie bedzie 65816 i vbxe nie ma co marzyc o zxsectrum

7,261

(273 odpowiedzi, napisanych Programowanie - 8 bit)

http://www.pldos.pl/bogus/software/cpm/cpm_hist.htm

7,262

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> http://atari.pl/z80test.sna
> programik mozna uruchomic pod dowolnym emulatorem spektrumny.
> rysuje migajacy roznokolorowy pasek w pamieci atrybutow

    ld a, 0xc8
    ld b, 0x07
    ld hl, 0x5800
lo:ld (hl), a
    inc hl
    add a, 0x08
    djnz lo

a tu skrin z emulacji:
http://atari.pl/z80emu.gif

pasek na srodku pokazuje jak dlugo wykonywala sie ta petla, dla zainteresowanych policze (ale to juz w domu) ile cykli pozarla emulacja

powinno dac sie to przyspieszyc, pisalem w pracy wiec....

rozkaz djnz robi skoki tylko w tyl (ale dodany jest skok na procke do przodu wiec to nie powinno wplywac na szybkosc emulacji tej konkretnej procedurki)

hmmm moze ktos poda szybki sposob obliczenia wartosci dla skokow wzglednych?


-- policzylem cykle mam nadzieje dobrze:
petla wykonana na z80 250 cykli
petla wykonana na emulowanym z80 - 1806 cykli 6502 (obejmuje dekodowanie rozkazu pustego i opuszczenie trybu emulacji)

jak sie maja cykle z80 na 3,5mhz do cykli 6502 przy 1,79?mhz ???

-- male poprawki i z 1806 zjechalem do 1716 cykli

-- cos kolo 14% ? innymi slowy, implementujac wszystkie rozkazy i myki z80 na 6502 pewnie emulacja zamknie sie przy wlaczonym ekranie w 10% szybkosci oryginalu - na 65816/14 po optymalizacji byc moze bedzie 70-80% oryginalu - mozliwe?

7,263

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> Zaimplementuj, zdebuguj, pogadamy
...
> mnie nie interesuje przedstawienie wyników "każdemu", tylko mnie samemu.
...

no to pogadalismy. mimo wszystko ja postaram sie przedstawic wyniki szerszemu forum

7,264

(273 odpowiedzi, napisanych Programowanie - 8 bit)

e tam zmian, zaznaczasz na ekranie rozpoczecie emulacji oraz zakonczenie dzialania emulatora, pasek pokazuje jak szybko dziala emulec, nikt tu nie mowi pokaz program tylko poke skrinszota.

7,265

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> Teoretycznie mogę, ale musiałbym za dużo przerabiać. Mogę ci podać wynik w ramkach VBL, ale do tego przydałoby się, żeby pętla wykonywała się większą liczbę razy (np. kilkadziesiąt tysięcy razy) dla lepszej dokładności.

sadze ze widoczny efekt bedzie juz przy tak malej petli ktora zmiesci sie w 1 ramce i kazdy bedzie mogl zobaczyc na wlasne oczy ile to trwa.

> Nie bardzo rozumiem, po co ładujesz 7 do rejestru B.

czlowiek cale zycie sie uczy (licznik petli)... moze czas na assa z80?


    ld HL,$ffff
    ld A,$3f
loop:
    ld (HL),$00
    dec HL
    cp H
    jr NZ,loop

nie zmiesci sie w ramce, wytlumaczylem wczesniej dlaczego procka powinna zmiescic sie w ramce

7,266

(273 odpowiedzi, napisanych Programowanie - 8 bit)

jest tam taka masa rejestrow ze automodyfikacja raczej nie byla by potrzebna... chociaz...

7,267

(273 odpowiedzi, napisanych Programowanie - 8 bit)

sporo czasu zabiera aktualizacja pc z80 to o czym piszesz Pecus bylo by mysle o 1/4 szybsze od emulacji w locie...

7,268

(273 odpowiedzi, napisanych Programowanie - 8 bit)

tu lezy program testowy, ktory bede chcial uruchomic na atari:

http://atari.pl/z80test.sna
programik mozna uruchomic pod dowolnym emulatorem spektrumny.
rysuje migajacy roznokolorowy pasek w pamieci atrybutow

    ld a, 0xc8
    ld b, 0x07
    ld hl, 0x5800
lo:ld (hl), a
    inc hl
    add a, 0x08
    djnz lo
     
swoja droga w assie z80 pisze sie prawie jak w basicu ;-) faktycznie podnad 500 rozkazow
jesli ktos wie jak wydobyc pisk (beep) z gumiaka i jak obslugiwac klawisze to zapraszam na priv moze sie cos na gumowca napisze ;-)

wracajac do emulatora z80 na 6502 (nie trumny na atari), mam pewne przemyslenia jak przyspieszyc emulacje:
- brak ochrony pamieci (dlaczego emulator ma dbac o to zeby nie dac sie wyrabac zle napisanemu programowi w z80?) - to odnosnie blokowania zapisu do rom
- umiejscowienie pamieci emulowanego proca w liniowym ramie (65816 sie klania)
- napotkanie rozkazu nieobslugiwanego powoduje opuszczenie emulatora

jeszcze nie wiem jak zaemulowac rejestr stanu z80...

na dniach program

---
@draco030, jesli mozesz uruchom ten programik moze w taki sposob:

    lda #50
q  cmp vcount
    bne q

    sta wsync
    sta colpf2

    jmp emulator

po skonczeniu dzialania petli z80

    lda colpf2s
    sta colpf2

i tu skok do poczatku czyli zerowania z80 i znowu petla

pozwoli to 'zobaczyc' jak toto szybko dziala. i pokaz skrinszota :-)

pozdrawiam

7,269

(273 odpowiedzi, napisanych Programowanie - 8 bit)

romu zxspectrum sciagal nie bede ale pociagne jakies tutoriale assa z80 i zadzialam na tych przykladach.

przydala by sie statystyka ktore rozkazy i jak czesto wystepuja w programach...

7,270

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> Czemu? Znasz rozkaz, który po pobraniu opkodu nie wymaga zwiększenia PC?

po pobraniu nie, po wykonaniu owszem - chociazby JP - a to jest dla nas istotne wykonujemy rozkaz i oczekujemy aktualnych wartosci w rejestrach.

pc nie zawsze sie zwieksza o 1: rodzina ADC, SUB, OR, XOR, CP, INC, DEC, RLC, SRA, JP, CALL itd itd dwa razy robisz aktualizacje pc a wystarczy raz przy rozkazie (bo juz wiadomo co to bedzie) u Ciebie nie wiadomo dlatego 2 razy robisz to samo a cykle leca.

> Zaimplementuj, zdebuguj, pogadamy

przyjmuje wyzwanie. prosze o przykladowy w miare krotki kod z80 z iloscia cykli 6502 w jakim sie wykonal, moze byc lista niepowiazanych rozkazow tylko dla sprawdzenia... od podania przykladu prosze o tydzien czasu na napisanie emula (tydzien jak nie bedzie w przykladowym kodzie udziwnien). moze mi sie uda :-)

7,271

(273 odpowiedzi, napisanych Programowanie - 8 bit)

przyklad LDIR i LDD maja ten sam kod, tu beda miec ten sam adres skoku ale 'operand' bedzie wyznaczal ktoryu rozkaz bedzie wykonany - 256 tablice wystarcza


---
powyzsza petla dekodowania moze byc zmniejszona do 25 cykli (zawsze, a nie 29-51 u Ciebie), tylko trzeba zadbac o wlasciwe korzystanie z rej. y i to wydaje mi sie miejsce ktore pozwoli znacznie przyspieszyc emulacje.

moim skromnym zdaniem procedura dekodujaca powinna byc jak najkrotsza (wykonywana najczesciej) a ciezar aktualizacji rejestru pc spoczywac na procedurze wykonywania rozkazow. patrzac na to globalnie szybkosc emulacji powinna byc wieksza w moim przykladzie (nawet gdy dorobie stronicowanie po 16kb)

7,272

(273 odpowiedzi, napisanych Programowanie - 8 bit)

emulgator:

1. rejestry z80 na stronie zerowej poukladane tak, zeby mozna bylo uzywac adresowania (),y czyli np. rej H i L leza w kolejnosci L, H itd.
2. petla dekodujaca na stronie zerowej
3. tablice skokow 256b x 2 (L adresu, H adresu procedury emulacji rozkazu)
4. pamiec od $4000 - 32kb
5. dbamy przy operacji na stosie i skokach bezposrednich z80 o wlasciwa wartosc pc - pc powiekszone jest o $4000


petla dekodujaca na stronie zerowej:
start:
ldy #0
lda (pc),y
tax
lda Lo_tab,x
sta _jmp+1
lda Hi_tab,x
sta _jmp+2
_jmp:
jmp $ffff - 27 cykli i mamy zdekodowany rozkaz z80



procedura emulacji LD (HL),$n
_LD
iny
lda (PC),y   - argument
dey
sta (HL),y   - do pamieci
inc pc
bne _LDend
inc pc+1
bpl _LDend
lsr pc+1     - pc od $4000 do $7fff
jmp start
-- wlasnie zauwazylem ze pc ma sie zwiekszyc o 2 wiec tu wchodzi w gre procedura z adc #2


i to tyle, emulec nie jest taki ciezki do zrobienia cos mi sie wydaje. cos przegapilem?


a 65816 swoja droga by sie przydal, nie trzeba by bylo stronicowac pamieci z80...

---
tak chcialem zeby emulec zmiescil sie tak w 4 kb :-) i uruchomil na 65xe bez rozszerzenia dla z80 i 32kb ramu

---
jak wyglada Twoja procedura dekodowania rozkazu?

---
500 rozkazow :-) ufff to ja chyba zerknalem na inna tabele rozkazow z80 :-) zlamilem :-)

7,273

(273 odpowiedzi, napisanych Programowanie - 8 bit)

duzo bo procka aktualizujaca pc wyglada tak:

clc
lda pc
adc #1
sta pc
lda pc+1
adc #0
sta pc+1

ale moze wygladac rowniez tak:

inc pc
bne end
inc pc+1
bpl end (32 kb ramu)
asl pc+1
end

a wtedy z 18 cykli robi sie od 8, bardzo rzadko 15 a w szczegolnym przypadku 19 co daje -10 cykli na interpretacji prawie kazdego rozkazu

7,274

(273 odpowiedzi, napisanych Programowanie - 8 bit)

NOP - z warunkami jak wyzej czyli petla, skoki, interpretacja rozkazu i powrot do petli to 48 cykli 6502
LD (HL),$x - 62 cykle 6502

tylko, ze nie biore pod uwage istnienia romu czyli gdzie z80 chce zapisac tam zapisze (oczywisice w granicach swojej pamieci 16kb)

7,275

(273 odpowiedzi, napisanych Programowanie - 8 bit)

pc aktualizujesz podczas wykonywania czy dekodowania rozkazu?

podaj rozkaz ktory wykonuje sie najdluzej