7,251

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> Zob. post #104.

zob. jit ;-)

---

@laoo, co wiecej, mozna by bylo z kodu emulca usunac wszystko nie potrzebne do koncowej emulacji danego programu.

7,252

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> To zrób i pochwal się, ile ci to dało :-)

ok. :-)
podaj liczbe cykli wykoania takiego czegos:

ld a,b
or c

a ja pochweale sie ile by to zajelo :-)


> Wystarczy jeden.

masz ambicje zrobic emulator 100%? komus sie to udalo?


> Jak już bystro zauważył dely, ty nie mówisz o emulatorze

tak? to o czym?

@ laoo nie doczytalem Twojej wypowiedzi, teraz ja zrozumialem dopiero. masz racje. nie potrzeba by bylo dekompilacji robic.

7,253

(273 odpowiedzi, napisanych Programowanie - 8 bit)

> Ja nie zauważyłem, żeby na ogólnym tle kodu znajdującego się w ROM-ie Spectrum takie sekwencje występowały jakoś szczególnie często.

oj bardzo czesto i nie koniecznie zwiazane z rysowaniem na ekranie - chociaz w giercach to jest bardzo widoczne i sekwencje sa dluzsze, wracajac do romu trumny pierwszy lepszy wielokrotny przyklad

ld a,r
or r / and r

zerkam teraz na jakies procki z romu ... cale procedurki mozna by bylo zastapic niekiedy.

@laoo no wlasnie nie bardzo automat, a co gdy podmieniany wzor bedzie grafika albo jakimis innymi danymi? po to wlasnie trzeba by bylo robic reczna deasemblacje i tylko kod poddawac patchowaniu.

> Z tego, co mi wiadomo, żadne nie są wolne: "puste" miejsca w tabeli oznaczają rozkazy, które po dodaniu prefiksu działają tak samo, jak odpowiedniki bez prefiksu. Dokumentacja, którą czytałem sugeruje, że bywa to używane do utrudnienia analizy kodu (bo większość disasemblerów się na tym ponoć wykłada).

heh no nie przesadzaj, ile takich programow znajdziesz? 1%? watpie

a co do zajetosci pamieci - nie ma potrzeby implementowania WSZYSTKICH rozkazow, po dekompilacji i wydzieleniu kodu z80 sprawdzamy z czego mozna zrezygnowac a jak jestesmy hardcoreowcami to sprawdzamy na jakich bitach w rej statusu program nie kozysta i zalaczamy wersje rozkazow emulujacych bez ustawiania odpowiednich bitow :D to by bylo cos.


---
@ laoo nie doczytalem Twojej wypowiedzi, teraz ja zrozumialem dopiero. masz racje. nie potrzeba by bylo dekompilacji robic.

7,254

(273 odpowiedzi, napisanych Programowanie - 8 bit)

akurat ten przyklad jest nagminny, jak narazie w kazdym programie znalazlem taka/podobna konstrukcje:

daleko szukac... w romie spectrum tez tak jest ;-)

wynika to miedzy innymi ze specyficznej organizacji pamieci ekranu.

7,255

(273 odpowiedzi, napisanych Programowanie - 8 bit)

podczas emulacji z80 napotykam na rozkazy typu:

1.zaladuj jakis rejestr do akumulatora
2.wykonaj jakas operacje logiczna/arytmetyczna
3.zapisz wynik w poprzednim rejestrze

lub

1. petle z ldir (przesuwanie pamiec-pamiec)

itp...

podczas emulacji tracimy sporo czasu na interpretacje kazdego rozkazu osobno...

z80 ma prefixy, w tablicy rozkazow po prefixie jest duzo wolnego miejsca, mozna zrobic tak,
ze w kodzie (ingerencja w kod programu z80) gdy trafimy na taki kod jak z przykladu wsadzamy prefix i kod makro.

makro moze dzialac nawet szybciej niz zlepek rozkazow na z80, zwlaszcza przy podprogramach.

kolejna sprawa to jaka mozna miec motywacje podczas przenoszenia jakiejs gry z trumny na atari (poprzez emulacje)?
podpisac sie pod taka praca nie mozna, samej dlubaniny przy dekompilacji i wyszukiwaniu
podprogramow, ktore nie sa samomodyfikowane przez program cala masa...
jak znajdzie sie ktos, kto odwali czarna robote czyli deasembluje jakas gre, wydzieli z niej kod i dane to razem mozemy przeniesc taka gre na atari z predkoscia zblizona do oryginalu (jesli bedzie za wolno, wieksze czesci kodu z80 przepisze na 6502)

ordynarna emulacja jak pokazalem wczesniej jest za wolna do takich zabaw - ok 6% to zenada.

7,256

(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,257

(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,258

(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,259

(709 odpowiedzi, napisanych Fabryka - 8bit)

najciezej zrobic ostatnie 10%

7,260

(273 odpowiedzi, napisanych Programowanie - 8 bit)

ale nikt nie powie "nie da sie" ;)

7,261

(273 odpowiedzi, napisanych Programowanie - 8 bit)

jestem pod wrazeniem.

7,262

(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,263

(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,264

(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,265

(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,266

(273 odpowiedzi, napisanych Programowanie - 8 bit)

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

7,267

(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,268

(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,269

(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,270

(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,271

(273 odpowiedzi, napisanych Programowanie - 8 bit)

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

7,272

(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,273

(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,274

(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,275

(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 :-)