OldComp.cz
http://oldcomp.cz/

Pidi HW emulátor a převodník JOY->USB
http://oldcomp.cz/viewtopic.php?f=81&t=644
Stránka 1012

Autor:  nobomi [ 06.02.2015, 16:04 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Tak jsem separoval rutiny ládující obraz do mezi bufferu a z něj do DMA bufferu pro MZ700 textový režim použitý v IAP loaderu, tedy podstatnou část generování VGA obrazu (následuje už jen DMA přenos, na ten překladač nemá vliv, takže není nutně předmětem testu).

Program jsem upravil pro STM32F4 DICOVERY, ale z IO pinů se používají jen LED diody (v main.c), takže lze lehce upravit na libovolnou jinou desku s STM32F4x5 4x7 nebo 4x9 (je potřeba nastavit frekvenci krystalu v system_stm32f4xx.c pokud není 8MHz). LEDky jsou nastaveny takto: zelená svítí, modrá nesvítí, červená se rozsvítí na začátku každého generovaného dvojřádku, na konci zhasne, oranžová se na 50000 generovaných VGA řádku rozsvítí a dalších 50000 zhasne. Lze tak podle blikání oranžové ledky určit kolik % času MCU by generování zabralo = počet_sekund_měření*37,8/počet_bliknutí. Překlad jsem dělal jak v Keilu, tak v EmBlocks s nastavenou optimalizací -O2, v Keilu mi vychází rychlost generování za 27% času v EmBlocks za 43% času, tedy míň jak 2/3 rychlost vůči překladu z Keilu. Co s tím ?

Projekt pro obě prostředí v příloze, díky za pomoc.

Přílohy:
SPEEDtest.zip [210.71 KiB]
636 krát

Autor:  hynek [ 07.02.2015, 07:48 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Uzasne pripravene! Discovery tu mam, tak to snadno pujde i realne vyzkouset. V pondeli si v praci vygeneruju z Keila listing instrukci a pak zacnu porovnavat, co s tim dela GCC.

Autor:  JohnBlbec [ 08.02.2015, 16:14 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

ja bych se teda moc primlouval za atari (6502). jsem jediny?

Autor:  hynek [ 09.02.2015, 11:02 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Po prvnich testech ten rozdil nevypada az tak spatne. Keil ma 10 bliknuti za cca 7s, gcc s -O1 ma 10 bliknuti za cca 8s. Je tento rozdil akceptovatelny nebo mam zacit hledat nejake cesty zrychleni pro kod prelozeny v gcc?

Autor:  nobomi [ 09.02.2015, 20:37 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

JohnBlbec píše:
ja bych se teda moc primlouval za atari (6502). jsem jediny?
Má to dva háčky, prvním je natvrdo v HW nastavená 16-ti barevná CGA paleta a pak to horší, kdo to napíše ? :shrug: Já do Atari bohužel vůbec nevidím.

hynek píše:
Po prvnich testech ten rozdil nevypada az tak spatne. Keil ma 10 bliknuti za cca 7s, gcc s -O1 ma 10 bliknuti za cca 8s. Je tento rozdil akceptovatelny nebo mam zacit hledat nejake cesty zrychleni pro kod prelozeny v gcc?
No tak to mi škeble nebere, překlad s -O1 je asi o 35% rychlejší než s -O2 nebo -O3 ?!? :shock: Kdybych si to teď neověřil, tak tomu neuvěřím, to by mě ani nenapadlo zkoušet. :bang:
Pořád to není ideál, na finální překlad nic moc, ale vyvíjet by se s tím už asi dalo, každopádně díky :jump:

Autor:  ctirad [ 09.02.2015, 21:14 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

8bit atari má paletu 256 barev takže by se musel upravit HW a taky je to poměrně složitý stroj s několika koprocesory, co se musí precizně synchronizovat, aby z toho něco lezlo. Nečekám, že by se do toho někomu chtělo.

Autor:  Matej [ 09.02.2015, 21:49 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

No na PCdle Ti treba 1GHz na Altirru. ARM by si musel mat core duo. Ako nehovorim ze by som nechcel hned by som bral. Ale aby hry boli plynule...

Autor:  zz_indigo [ 09.02.2015, 22:00 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Matej píše:
No na PCdle Ti treba 1GHz na Altirru. ARM by si musel mat core duo. Ako nehovorim ze by som nechcel hned by som bral. Ale aby hry boli plynule...


blbost. Na arme predsa nemusi mat OS ktory mu bude zrat 4/5 vykonu.

Autor:  hynek [ 10.02.2015, 07:51 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Do rana me jeste napadlo par veci, kterak upravit zdrojak, aby se dal lepe prelozit. Vysledek je okomentovan nize.

Neni mi uplne jasne, proc jsou dve funkce pro pripravu dat pal_line a pal_buf0_buf1. Neslo by je napsat dohromady? Zase by se o neco zmensila rezie...

Dalsi poznamka se tyka verze GCC: 4.8.3 na windows generovala o kousicek delsi kod nez 4.8.2 na linuxu.
Aby vzniknul kod, ktery bude vzdy dostatecne rychly, musel by se napsat rovnou v (inline) assembleru. Mohl bych neco pripravit, ale nemam si jak overit, ze bude fungovat spravne... Protoze se tu snazime dosahnout zkraceni bloku cca 20 instrukci o 2 instrukce. To uz se IMHO na optimalizacich prekladace neda nechat. Vzdy je nebezpeci, ze s jinou (novejsi) verzi prekladace to prestane byt funkcni - ze se to zpomali neunosne.

Doplneni:
Prikladam upravenou verzi pal.c. Funguje zhruba stejne rychle jako verze z Keilu.
Zatim jsem upravil funkci pal_line, aby preklad vysel lepe. Dale jsem prepsal pal_buf0_buf1 do assembleru.
Urcite by se dalo dosahnout dalsiho zrychleni prepsanim i dalsich casti do assembleru, ale v tuto chvili mi to neprijde nutne.
Asi bude nutne pridat podminky pro preklad pomoci GCC nebo Keil - pro Keil bych nechal puvodni C-ckovy kod (mj. jako komentar pro assembler :-)
Upozorneni: kod jsem zkousel pouze na rychlost, nikoli na spravnost funkce - nemam to jak overit, ze to generuje data spravne...

Přílohy:
pal.zip [1.94 KiB]
614 krát

Autor:  nobomi [ 10.02.2015, 10:43 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

hynek píše:
Do rana me jeste napadlo par veci, kterak upravit zdrojak, aby se dal lepe prelozit. Vysledek je okomentovan nize.

Neni mi uplne jasne, proc jsou dve funkce pro pripravu dat pal_line a pal_buf0_buf1. Neslo by je napsat dohromady? Zase by se o neco zmensila rezie...
Ono to v tomhle případě zbytečné je, ale v emulátoru první část generuje emulace 8bitu, která jede svojí řádkovou rychlostí (třeba 312řádků/50Hz) a láduje výsledek v úporném formátu do mezipaměti (ta pak obsahuje všechny řádky) a generování VGA obrazu dělá tu druhou půlku algoritmu, láduje to z mezibufferu do DMA bufferu VGA řádku (628řádků/60Hz), na buffer pro stránku přímo ve formátu VGA není dost místa v RAM.

hynek píše:
Dalsi poznamka se tyka verze GCC: 4.8.3 na windows generovala o kousicek delsi kod nez 4.8.2 na linuxu.
Aby vzniknul kod, ktery bude vzdy dostatecne rychly, musel by se napsat rovnou v (inline) assembleru. Mohl bych neco pripravit, ale nemam si jak overit, ze bude fungovat spravne... Protoze se tu snazime dosahnout zkraceni bloku cca 20 instrukci o 2 instrukce. To uz se IMHO na optimalizacich prekladace neda nechat. Vzdy je nebezpeci, ze s jinou (novejsi) verzi prekladace to prestane byt funkcni - ze se to zpomali neunosne.
To je jasné, daní za zdroják ve vyšším jazyku je tohle riziko. Už jsem zkoušel pár věcí do asm přepsat a měl jsem vždycky potíže udělat to aspoň tak rychlé, jako to dělá Keil.

hynek píše:
Doplneni:
Prikladam upravenou verzi pal.c. Funguje zhruba stejne rychle jako verze z Keilu.
Zatim jsem upravil funkci pal_line, aby preklad vysel lepe. Dale jsem prepsal pal_buf0_buf1 do assembleru.
Urcite by se dalo dosahnout dalsiho zrychleni prepsanim i dalsich casti do assembleru, ale v tuto chvili mi to neprijde nutne.
Asi bude nutne pridat podminky pro preklad pomoci GCC nebo Keil - pro Keil bych nechal puvodni C-ckovy kod (mj. jako komentar pro assembler :-)
Upozorneni: kod jsem zkousel pouze na rychlost, nikoli na spravnost funkce - nemam to jak overit, ze to generuje data spravne...
Díky, juknu na to, připravím nějakou verzi s funkčním výstupem na VGA (k discovery bude stačit jen přidat dsub 15pin konektor), ať se to lehce kontroluje.

Autor:  JohnBlbec [ 10.02.2015, 13:18 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

predpokladam, ze kompilator je dostatecne chytry, aby si vsechno inkrementovani i++ ve for cyklech prevedl na ++i. pokud ne, asi bych to zmenil a neco malo cyklu usetril.

Autor:  omikron [ 17.02.2015, 18:30 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Je nějakej použitelnej disassembler pro ARM?

Autor:  Pablo2048 [ 17.02.2015, 20:55 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Co treba IDA-Pro? https://www.hex-rays.com/products/ida/processors.shtml

Autor:  omikron [ 07.03.2015, 23:32 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Kde najdu doporučený startup kód pro STM32F105RBT6?

Autor:  Pablo2048 [ 08.03.2015, 11:56 ]
Předmět příspěvku:  Re: Pidi HW emulátor a převodník JOY->USB

Na hloupou otázku hloupá odpověď - na internetu přece.... A teď vážně. Nevím, co od startupu očekáváš, ale hodně záleží na prostředí/překladači, se kterým to chceš použít. Jiný startup má keil, jiný startup má gcc a trochu jiný startup má i CrossWorks, který má pod kapotou také GCC. Odlišnosti ve startupech jdou ruku v ruce s odlišnostmi v linker skriptech (pojmenování segmentů a jejich začátků a konců) atd...

Stránka 1012 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/