Stránka 2 z 2

Re: memxFORTH

Napsal: 19 kvě 2025, 13:30
od fulda
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 ???
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.

Re: memxFORTH

Napsal: 20 kvě 2025, 17:47
od nostalcomp
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 ???
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.

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 :) Ačkoliv je nutné přiznat, že během těch borderů si procesor musí "odskočit" na generování (alespoň počátek a konec) těch synchropulsů.

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 :) Nápis na obrázku má na šířku 20px. Pokud bych nebyl maximalista a vertikálně zobrazoval třeba jen kolem 200 mikrořádků (ZX 80/81/Spectrum zobrazují jen 192 a stačí to), mám hafo času něco počítat. Uvažoval jsem o Tetrisu a Videostopu, ale pak mě to nějak přestalo bavit... Barevné zobrazení je možné jen díky připojení do SCARTu. Do RCA Cinche zobrazuje jen v úrovních šedi (pokud se nepřipojí externí enkodér barev).

8051 SW PAL TV video
8051 SW PAL TV video
ahoj.jpg (7.29 KiB) Zobrazeno 921 x

Re: memxFORTH

Napsal: 21 kvě 2025, 02:23
od gilhad
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 ...)

Re: memxFORTH

Napsal: 15 čer 2025, 14:16
od gilhad
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 Obrázek

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:

Obrázek

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 ! )