To je jen otázka vnímání velikosti vesmíru. Třeba někteří do toho času nacpali emulátor PMD85. Vlastně ne, tam skládají jen composite video.petr-kubac píše: ↑19 kvě 2025, 12:54 Odpovídám si sám - 10% zbývá na FORTH. Tipuji že jede jen během HSYNC + VSYNC ???
memxFORTH
Re: memxFORTH
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
-
- Příspěvky: 35
- Registrován: 24 říj 2023, 18:45
Re: memxFORTH
Ještě k tomu připočti bordery. Samotné synchropulsy moc času neposkytují. Ale pokud uvažujeme PAL video, tak se z jednoho TV mikrořádku (64uS) využívá zpravidla něco kolem 40uS na zobrazení dat a tedy 24uS zbývá (obraz je zateměn a procesor se může věnovat něčemu jinému). U Didaktiku M byl obraz jen tuším 32uS široký (proto byl v podstatě čtvercový a ne obdélník), čili v každém řádku zbývá 32uS, ale tam se CPU o zobrazení nestará, na to má ULU.petr-kubac píše: ↑19 kvě 2025, 12:54 Odpovídám si sám - 10% zbývá na FORTH. Tipuji že jede jen během HSYNC + VSYNC ???
Ve vertikálním směru je to ještě lepší. Bez nutnosti nějakého centrování je při neprokládaném PAL TV zobrazení 100% viditelných nějakých 256 řádků z 312 (někdo počítá až do 320, zejména u čistě HW zobrazovacích jednotek). Čili máme k dispozici minimálně 56 TV mikrořádků á 64uS, tedy minimálně 3,584 mS, kdy se procesor může věnovat něčemu jinému. A to je spooooousta času

U VGA je to trochu větší honička.
Kromě zmiňovaného emulátoru PMD85 v Atmeze, je celá řada počítačů, kde se CPU přímo podílí na zobrazení a další věci (klávesnice a obvykle BASIC) zpracovává ve výše uvedených prodlevách. A to při podstatně nižším taktovacím kmitočtu CPU, než má to dnešní Arduino. Namátkou: ZX80/81 (Z80 3,5MHz), COMP+JuTer (UB8830 8MHz). Všechny jsem studoval a stavěl jako repliky.
Pak jsou počítače, kde se sice CPU přímo nepodílí na zobrazení, ale při zobrazování je stejně odstaven, páč zobrazovací obvody skrze DMA vyčítají data ze společné RAM a procesor stojí. Typicky ruský RADIO-86RK, Cosmac VIP, nebo vzorové Intelácké Low cost terminály se zobrazovacími kontroléry 8275 nebo 8276. U toho terminálu s 8276 je jako CPU použit pomalý 8051 a během zobrazení přímo sype data do 8276 bez nutnosti použití DMA kontroléru 8257. Kromě toho pochopitelně obsluhuje maticovou klávesnici a sériovou linku. Já to zkoušel a to dokonce ve VGA režimu. Fungovalo to, ale byl to fakt kalup

Na obrázku níže je TV video generované přímo klasickým jednočipem 8051 čistě softwarově bez dalšího HW v podobě posuvných registrů a podobně. Jednočip má krystal 24MHz a strojní takt (/12) je tedy 0,5uS. Nejrychleji jsem dokázal vysouvat data rychlostí 1,5uS/pixel. Čili mohu dosáhnout "úctyhodného" rozlišení kolem 25px v ose X

Re: memxFORTH
Asi 90% sežere zobrazování, interrupty jsou pro Vsync a pro zobrazení řádků.
Ve zbytku jede program (na který tím pádem zbyde asi tak 10%), který o těch přerušeních "neví a nestará se" a prostě zapisuje do "VideoRAM" jako do obyčejného pole znaků a ono to pak nějak samo ...
Problém je, že na FORTH tam zbývá dost málo RAM, takže uživatel může nadefinovat jen pár slov. Pokusím se to zobrazování přeportovat na ATmega2560 (jako je v Arduino Mega), ale budu tam muset udělat vlastní PCB, protože potřebuju ten pin se systémovýma hodinama (a vytáhnout i ostatní piny taky neuškodí, a rozšířit paměť a ... a ...)
Ve zbytku jede program (na který tím pádem zbyde asi tak 10%), který o těch přerušeních "neví a nestará se" a prostě zapisuje do "VideoRAM" jako do obyčejného pole znaků a ono to pak nějak samo ...

Problém je, že na FORTH tam zbývá dost málo RAM, takže uživatel může nadefinovat jen pár slov. Pokusím se to zobrazování přeportovat na ATmega2560 (jako je v Arduino Mega), ale budu tam muset udělat vlastní PCB, protože potřebuju ten pin se systémovýma hodinama (a vytáhnout i ostatní piny taky neuškodí, a rozšířit paměť a ... a ...)
Re: memxFORTH
Takže práce na grafické kartě pokračují, už se začíná ledacos rýsovat 
A s tím pájením pod mikroskopem jdou dělat i značné vylomeniny:
Potřeboval jsem si vytáhnout hodinový signál z Arduino Mega PRO - no, on tam není, ale když propojím dvě nožičky na procesoru, tak ho ven dostanu oklikou, to přece nemůže být až takový problém, vždyť je nedělí ani půl milimetru.
Hrál jsem si s tím asi půl hodiny a docela se mi to povedlo celkem hezky
Ten oblouček má 0.4mm, spojuje ty dva piny a ten mezi nima elegantne míjí.
Spojuje sice hezky, ale blbé piny. Měl jsem to spojit o kousek vedle.
No nevadí, tak to oddělám a zkusím znovu (stejně jsem nechtěl jít spát). Oddělání se povedlo, ale znovu už míň - pájka zatekla mezi nožičky kam neměla a nechtělo se jí ven. No naštěstí vlastně teď zrovna tu nožičku mezi vlastně stejně nepotřebuju, tak to udělám jinak.
Sice to není tak hezké, ale zase to pro změnu funguje:

Takže mám 16MHz a můžu konečně začít zkoumat, jestli mi to k něčemu bude (víc viz můj github projekt a zvláště jeho žurnálek
A při testování mi velice pomohlo,že na tom běžel FORTH, takže jsem si mohl velice snadno tahat různě za nožičky a číst, co to vlastně dělá.

A s tím pájením pod mikroskopem jdou dělat i značné vylomeniny:
Potřeboval jsem si vytáhnout hodinový signál z Arduino Mega PRO - no, on tam není, ale když propojím dvě nožičky na procesoru, tak ho ven dostanu oklikou, to přece nemůže být až takový problém, vždyť je nedělí ani půl milimetru.
Hrál jsem si s tím asi půl hodiny a docela se mi to povedlo celkem hezky

Ten oblouček má 0.4mm, spojuje ty dva piny a ten mezi nima elegantne míjí.
Spojuje sice hezky, ale blbé piny. Měl jsem to spojit o kousek vedle.
No nevadí, tak to oddělám a zkusím znovu (stejně jsem nechtěl jít spát). Oddělání se povedlo, ale znovu už míň - pájka zatekla mezi nožičky kam neměla a nechtělo se jí ven. No naštěstí vlastně teď zrovna tu nožičku mezi vlastně stejně nepotřebuju, tak to udělám jinak.
Sice to není tak hezké, ale zase to pro změnu funguje:

Takže mám 16MHz a můžu konečně začít zkoumat, jestli mi to k něčemu bude (víc viz můj github projekt a zvláště jeho žurnálek

A při testování mi velice pomohlo,že na tom běžel FORTH, takže jsem si mohl velice snadno tahat různě za nožičky a číst, co to vlastně dělá.
Kód: Vybrat vše
: x DUP 0 PORTE C! DDRE C! PORTE C! PINE C@ FC AND . ; ( clear output on PE,
open another pin for output and set it, read the port, ignore bits 0 and 1 (RX TX) )
: p? PINE C@ 0FC AND . ; ( what is on Port E? )
: p! PORTE C! p? ; ( set port E to value on Top Of Stack (TOS) )
: pp ff PINE C! p? ; ( change all output pins on port E to other values )
bit3 x ( set PE3 - nice, nothing extra happened )
0 p! ( just normal function )
bit7 x ( try the hack )
p? ( WOW we read 1 on PE5 and PE6 and PE7, also Arduino D3 is ON )
0 p! ( and now it is OFF again - nice ! )