OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

Krsn Vnoce a Happy Fuckin Year 2020

Právě je 27.01.2020, 04:14

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 69 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5  Další
Autor Zpráva
PříspěvekNapsal: 10.01.2020, 09:45 
Offline
Kecálek

Registrován: 06.03.2018, 16:00
Příspěvky: 117
Has thanked: 0 time
Been thanked: 46 times
Teoreticky by mělo jít použít příkaz BASICu "ROM", ale nevím přesně, s jakými parametry - je to obdoba TRANSFER z MONITORu. Upravovat ROM s BASICem mi přijde zbytečné i vzhledem k tomu, že ovladač XY41xx se stejně musí postupně nacpat do 16-ti bytových okének vedle VideoRAM. A zcela určitě se kombinace BASIC+XY41xx+PMD32 nevejde do 16kB modulu (9+6+5=20kB). Musí se použít 32kB nebo megamodul.

Po zběžném projetí obsahu jednotlivých ROM si myslím, že by se PMD32 a XY41xx v BASICu nepokousaly. Ale nezkoumal jsem to nějak moc křečovitě a do hloubky.

Petr


Nahoru
 Profil  
 
PříspěvekNapsal: 10.01.2020, 09:59 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Díky rychlému shromáždění ovladače plotteru, příručky k němu a podrobného popisu jak funguje už je možné začít uvažovat o tom, co zatím schází - tedy samotný program k tisku a formát dat, který by se k tisku mohl použít.

Udělal jsem si takovou maličkou osobní bouři mozků, mám li se držet někdy až absurdních překladů z angličtiny v dobových manuálech, a rozdělil jsem si problém na několik částí. Celý program bych za sebe viděl strukturou jako modulární ve stylu unixu s jednotlivými podprogramy, navzájem se podporujícími ale navzájem oddělenými.

1. Vstup dat
Jako vstup dat uvažuji několik možností. Protože se objevil VARIEL, jedna z možností vstupu dat by měla být síť. Představuji si to tak, že PMD 85-2 s připojeným plotrem se přepne do režimu "print server" a bude očekávat data po sériové lince z druhého PMD, kde se bude moct s obrázkem lépe manipulovat. Jednak se dá jeden plotter využít pro celou síť a potom v obou případech máte celý výkon daného počítače na jeden úkol.

Druhá možnost je PMD 32SD a (nejspíš) standardní disketa. PMD s plotrem by bylo schopné alespoň číst soubory z diskety a ty tisknout.

Třetí možnost je SP210. Díky dálkovému ovládání se dá kazeťák využít k uživatelsky příjemnému tisku a dokonce je schopný si sám vyhledat i záznam na kazetě. Samozřejmě by byla vhodná volba i ruční obsluhy, kdy by si počítač vždy počkal co mu uživatel pustí.

A nakonec KZD-1. V případě, že ovladač KZD-1 bude schopný koexistovat s úpravami pro plotr byla by ještě tato možnost. Uživatelsky by to bylo blíž PMD 32 byť ne tak rychlé.


2. Možnosti kresby a datový formát
Obrázek bych nahrával po částech, protože PMD 85-2 má jen 48kB RAM, z toho jen cca 21 kB pro uživatele. Při použití BASICu by to dávalo možnosti mít relativně velký program a přitom nemít problémy s tiskem i rozsáhlých kreseb. Uvažoval jsem nahrávat části o velikosti 1 kB až 3 kB, zbytek RAM by zbyl pro tiskový program.

Soubor s daty (pokud tedy něco už neexistuje) jsem zamýšlel buď vektorově, nebo textově, případně kombinace. Vektorově by bylo na čáru potřeba cca 6 - 9 bajtů když by se využívala maximální přesnost plotru. Ten má rozlišení 0,1mm a 1700x2550 bodů, to bodově dělá až 4335000 vektorů a tak není možné aby se takový obraz vešel PMD do RAM. Proto to dělení souboru po pár kilobajtech. Při 10 bajtech na čáru by se do 294 kB vešlo cca 30 000 čar, a na kazetu cca 12 tisíc čar, to už je myslím dostatečné pro skoro vše co by kdokoliv snad chtěl tisknout na tomto typu plotru.

Adresace by byla následující (v hex) typ = X, Y, délka D, směr (úhel) a typ čáry
0000, 0000, 0000, 000|00
Rozlišení 2bajty X, 2 bajty Y, 2 bajty délka, 1,5bajtu úhel a 0,5 bajtu typ čáry

Toto rozlišení je použitelné pro rovné čáry, ale ovladač díky integraci do Basicu si "rozumí" i s úhly a umí i sklon písma v závislosti na úhlu. Dále má předdefinované 4 typy čar a jeden typ, který se dá uživatelsky měnit pomocí parametrů. Toho bych využil pro definici dalších typů čar, které by se daly kreslit. Ten půlbajt na konci umožňuje 16 kombinací, tedy 4 + 12 uživatelských. Na základě toho by se dynamicky modifikovala hodnota uživatelské čáry v programu a plotter by mohl kreslit 16 různých typů naráz. Úhel se dá vyjádřit v 512 hodnotách (5 bitů), to je od 0,7 stupně. Pokud by byla potřeba větší přesnosti, dalo by se omezit počet typů čar na 8, tedy 4+4 a získat 1024 možných hodnot úhlu, tedy rozlišení 0,35 stupně z 360.

Máte k dispozici i ASCII znakovou sadu zabudovanou do ovladače. Umí to i diakritiku, takže by se dalo tisknout text s grafikou naráz. Pro kutily by jistě šel definovat nový uživatelský font jako plugin.

Soubor s daty by byl čisté ASCII s čísly v hex + řídící znaky (typ dat - tedy vektor/text, začátek vektoru, konec úseku 1 - 3 kB...).

3. Grafický výstup na obrazovku
Držel bych se spíše při zemi a umožňoval nějaký náhled ale primárně by musel být schopný tisknout i bez výstupu na obrazovku kvůli jejímu malému rozlišení a úspoře RAM. Nevím zda se dá vyčítat i video RAM ale pokud by to šlo, dal by se definovat minimálně určitý kus na ukládání dat. Obrazovka by sice zrnila, ale bylo by o několik až 12 kB paměti navíc.

Když by grafický podprogram uměl i nějaké grafické primitivy ve stylu funkce vyšších jazyků (vytvoř kruh, trojůhelník o rozměrech x,y,z...) lépe by se z něj vytvářela "CAD" část. Ale možná už by to na PMD bylo příliš, byť by to louskalo druhé PMD a kreslícímu by zasílalo jen ASCII data :-). Samozřejmě nejsnadnější by byla práce s editorem ve stylu ColorAce editoru, který by vyplivl obrázek v ASCII a ten by se dal nahrát na PMD 32SD a pak vytisknout přímo.

Tak, toť mé vize doposud, myslím si že většina z toho už v nějakém formátu či provedení existuje, takže pokud znáte něco lepšího (ale zase proveditelného...) sem s tím :-). :heilpmd:


Nahoru
 Profil  
 
PříspěvekNapsal: 10.01.2020, 11:07 
Offline
Kecálek

Registrován: 06.03.2018, 16:00
Příspěvky: 117
Has thanked: 0 time
Been thanked: 46 times
ad1: síťový protokol (jakýkoliv) ti zase ubere něco uživatelské RAM, vyvstává i otázka umístění v RAM, aby nekolidoval s dalšími "ovladači" a počet přípojných míst (konektorů) je také konečný (xy41, PMD32, KZD/SP, síť ...)

ad2: proč si život komplikovat dalším datovým formátem. HPGL je jistě snadno použitelné a napsat v BASICu jednoduchý interpret základních příkazů by asi taky šlo.

ad3: VideoRAM jde normálně číst - je to volně přístupná část paměti. Problém je v tom, že je rozdělena na mikrořádky o 64bytech, ze kterých je pro vlastní zobrazení použito 48byte (a z každého takového byte 6 bitů pro jednotlivé pixely => 48byte*6bitů=288pixelů) a ve zbývajících 16 byte je uložen právě "ovladač" pro xy41 (a nejen on). To znamená, že např. 1. mikrořádek obrazovky začíná v RAM na 0C000h a končí na 0C02Fh (48byte) a od 0C030h do 0C03Fh (16 byte) jsou uloženy, v tomto případě, proměnné MONITOIRu/BASICu. 2. mikrořádek pak začíná na 0C040h, atd... Pokud by jsi chtěl tedy využívat VideoRAM pro data, musíš napsat funkci/službu, která bude toto rozložení v paměti respektovat, jinak si přepíšeš proměnné a "ovladač" od xy41.

Petr


Nahoru
 Profil  
 
PříspěvekNapsal: 10.01.2020, 11:30 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Ano, boj o RAM na každém kroku, to je PMD :-). Právě proto jsem to uvažoval vytvořit jako konglomerát nezávislých podprogramů, ne monolyt. Nahrál by se jen ten jeden kousek co by byl potřeba a zbytek ne. To že by bylo třeba 5 verzí programu no a co :-).

Interpret HPGL no proč ne, jestli se vleze... XY4131 je příliš "blbé" na HPGL, to uměl přímo až poslední kus v řadě 4160. Ale jeden člověk pro 4131 vytvořil novou řídící logiku s implementací HPGL, kdy se posílají příkazy a procesor v plotru už si je přežvýkává sám. Dokonce mu i updatuje firmware - tam by šlo data posílat přímo ale netuším kolik hardcore modderů by to kdy vůbec využilo. Jestli je někde takový popis HPGL ze kterého by se to dalo vyrobit k dispozici, sem s ním :-). Ty moje vize nehodlám tlačit proti zdi, bylo to spíš k diskusi :-). Ovladač je spíš zaměřený na výstupy basicu tak jestli hpgl není trochu moc?

48 bajtů na řádek to jsou minimálně 4 vektory, tedy o cca 968 čar navíc :-). Rozsekání by samozřejmě bylo potřeba pečlivě ošetřit ale imho by to u té dvojky za to stálo, těch 16 kB RAM co má oproti ní trojka navíc tu trochu schází vzhledem k tomu kolik místa zabere Basic a i ten program bude dost rozsáhlý. Zase cool efekt kdyby to byla jakási cache by byl, že vizuálně by bylo vidět jak se to plní i vyprázňuje :-). A při vzdáleném ovládání by absence displeje nevadila.


Nahoru
 Profil  
 
PříspěvekNapsal: 10.01.2020, 19:25 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Začal jsem si hrát s emulátorem a XY ROM modulem. Testuju ty prográmky co jsou přibalené v příručce a něco se vykreslí, něco se musí kreslit na plotteru a bez signálu ready z plotru se nehnu protože emulátor ho neobsahuje tak musím používat COPYS jen na obrazovku.

Ale funguje to dobře, stačí zadat jen ROM 0 a nehledat v tom žádné složitosti, ovladač si už vše nakopíruje sám. Tak se těším na praktickou aplikaci s živým hardwarem, vzhledem k bídnému rozlišení PMD a naopak vysokému rozlišení u plotteru ty kresby vypadají dost pochybně :lol: - kruh na plotru je elipsa na PMD. Určitě to není na nějaké zpracování. Z toho mi vyplývá že ta cesta "print server" je správná, obrazovka s křivým a neúplným obrázkem vážně není potřeba.

Nešlo by nějaký ten signál ready a bitmapovou kresbu emulátoru přeci jen doimplementovat, když výstup tiskárny je k dispozici? :god2: Je to monochromaticky a 5 signálů... Mě by to výrazně pomohlo s tvorbou aplikace, teď reálný hardware na kterém by to běhalo nemám.

Díval jsem se na wikipedii na ten HPGL jazyk první generace, což je tak akorát na tyhle plotry a asi by to implementovat šlo, byť možná ne v celé šíři. I v basicu, jen by se musely správně napsat ty převodní rovnice. Ale tuším že rychlost by byla poměrně katastrofální, rovné čáry budiž ale kružnice či křivky, to té 8080ce moc nejde (tady to přímo volá po Am9511A). Třeba testovací obrazec s 5 kružnicemi se počítá >3 minuty...

Kód:
10 DEFFNCV(J)=.9+J*.1
20 GCLEAR:SCALE-2,2,-2,2:FOR J=1TO5:MOVE0,FNCV(J)
30 FOR I=0TO2*3.1STEP.05:PLOT.5*FNCV(J)*SIN(I),FNCV(J)*COS(I),J
40 NEXT I,J


1000 COPYS:SCALE 0,1,0,1:GCLEAR:MOVE .7,.5
1010 FOR I=0 TO 6.2 STEP .3
1020 I1=INT(I):I2=INT(I*10-I1*10):I3=INT(ABS(I*100-I1*100-I2*10))
1030 B$=CHR$(I1+48)+"."+CHR$(I2+48)+CHR$(I3+48)
1040 LABEL .5,.6,I,0;"     SKLON "B$" RAD":MOVE .7,.5
1050 NEXT I:MOVE0,0
1060 PLOT 1,0,1;1,1,1;0,1,1;0,0,1:COPYT,5
1070 LABEL.5,.7,3.14/2,0;:PRINT
1080 LABEL*;CHR$(14)"V"CHR$(25)"ypis programu"CHR$(15)
1090 LABEL .27,.38,3.14/2,0;:PRINT:LIST 1000

případně
1040 LABEL .5,.6,I,0;"    PMD 85 ZDRAVI OLDCOMP ":MOVE .7,.5



Když nějaké data, tak asi jedině předžvýkané tak, aby to jen čistě točilo motory a hlídalo zda pisátko neškrtá o okraje pravítka... No ale je to první dojem, tak třeba to nebude tak horké jak se mi zatím zdá.


Přílohy:
PMD85.png
PMD85.png [ 19.35 KiB | Zobrazeno 574 krát ]
Kruhy.png
Kruhy.png [ 14.68 KiB | Zobrazeno 575 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 11.01.2020, 17:31 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Po dalším hraní si jsem si řekl, že v návodu zmiňovaná disproporce na obrazovce vs. plotr je vlastně způsobena zcela jednoduše - "čtverec" v PMD se napasovává na obdélník papíru. Rozlišení plotru je 1700 x 2550, což se při vydělení 1:10 už dá v PMD zobrazit teoreticky bez chyby - 170 : 255 a poměr je 1,5:1. Leč kýžený výsledek se mi nedostavil.

Musel jsem změnit SCALE na 1:1,8 aby se výsledek +/- dostavil a vypadalo to líp. Teď už jen hodit to do plotru jak by ty poměry byly rozjeté :-). Měl by to někdo s funkční kombinací PMD a plotru chuť zkusit co z toho vyleze?

Kód:
10 DEFFNCV(J)=.9+J*.1
20 GCLEAR:SCALE-2,2,-2,2:FOR J=1TO5:MOVE0,FNCV(J)
30 FOR I=0TO2*3.1STEP.05:PLOT.5*FNCV(J)*SIN(I),FNCV(J)*COS(I),J
40 NEXT I,J

kdy do řádku s funkcí jsem u větších rozlišení zadal 18+J*10 aby to bylo vidět...
10 DEFFNCV(J)=18+J*10


Přílohy:
1ku1,8.png
1ku1,8.png [ 9.1 KiB | Zobrazeno 521 krát ]
288x242.png
288x242.png [ 5.73 KiB | Zobrazeno 521 krát ]
2 rozliseni.png
2 rozliseni.png [ 13.31 KiB | Zobrazeno 521 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 12.01.2020, 19:13 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Spáchal jsem první část jakéhosi technologického dema, schopného pokud možno vyloudit z možností upraveného Basicu a PMD co se dá. Můžete si hrát s vámi zadaným krátkým textem (spíš doporučuji slovo) přímo na obrazovce, měnit jeho velikost, sklon, rotaci a umístění. Kdyby to nebylo tak pomalé, tak by se z toho dalo i něco vymačkat, zase tak blbé to není. Určitá grafická editace textu by šla docela snadno, byť fyzické grafické rozlišení PMD není dostatečné pro nějakou vážnější práci - toť postřeh, co by se měl probublat do v desáté pětiletce naplánovaného PMD 85-4 ;-).

Sice to samo o sobě k ničemu moc není, ale pro implementaci HPGL 1 je stejně nezbytné velmi dobře rozumět tomu, jak to funguje a věřím že ty jednotlivé "funkce" se dají využít v případných grafických uživatelských programech.

Pro zájemce o spuštění v emulátoru - je potřeba zapnout režim PMD 85-2 a vložit ROM modul s BASIC-G V2.0 XY. Ten totiž obsahuje samotný ovladač plotru. Bez něj to nebude fungovat!

A před nahráváním programu z kazety musíte ještě zadat ROM 0 aby se ovladač nahrál a BASIC zmodifikoval. Bohužel je to takhle uživatelsky "příjemné" ale není to nic zase tak moc složitého. Tisk jsem zatím neimplementoval, nemám plotr a lidem s plotrem tam stačí jen doplnit odpovídající příkazy místo BEEP.

Kód:
K ovladani textove casti programu slouzi:
K0 - zmensi pismo o .1
K1 - zvetsi pismo o .1
K2 - zmensi sklon pisma o .1
K3 - zvetsi sklon pisma o .1
K4 - zmeni uhel rotace textu o .1
K5 - zmensi uhel rotace textu o .1
K6 - posune text o znak doleva
K7 - posune text o znak doprava
K8 - posune text o bod nahoru
K9 - posune text o bod dolu
K10 - Jen pípne :-)
K11 - Konec programu


Jinak hrátky s textem, to je srandička. PMD by se dalo i s poměrně jednoduchým programem změnit na grafický psací stroj. Masakr začne s čistou grafikou, tam je to už složité a hlavně pomalé...


Přílohy:
DEMO XY4131.zip [1.07 KiB]
11 krát
Nahoru
 Profil  
 
PříspěvekNapsal: 16.01.2020, 23:26 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Tak jsem zase malinko pokročil s tím demo grafickým programem. Dávat to sem teď nebudu, protože zase TAK MOC jsem nepokročil :lol:. Demo už je rozdělené na dvě části, textovou a grafickou, a dá se z každé části i dema samotného korektně vyjet a zvolit test druhý. Dopsal jsem přesnou rotaci po fyzickém 1 stupni a začal jsem implementovat první grafické příkazy, zatím úsečku, trojúhelník, kruh, výseč kruhu (protože HP-GL®) a nějaký čtverec/obdélník. Na křivky se zatím ještě necítím. Nejdřív je udělám pevné, následně se s nimi bude dát dynamicky hrát změnou parametrů (byť "dynamicky" v případě PMD znamená v tomto režimu tak 1 FPS na pár čar na obrazovce) aby se z toho v ideálním případě ve finále mohly vyloupnout jednotlivé rutiny a algoritmy pro tisk složitějších obrázků.


Nahoru
 Profil  
 
PříspěvekNapsal: 17.01.2020, 20:16 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Tak první dynamická implementace příkazu vykreslování kruhu pomocí Basicu je funkční :-). Funguje poloměr, definovatelná přesnost výpočtu i poloha na papíru. Díky rozlišení 10:1 je to celé na obrazovce klasicky protáhlé. Jádro interpretru bude načítat stringy o definované velikosti podle typu příkazu ze souboru a postupně je provádět jeden za druhým. Teď už jen mít plotr jak to bude vypadat na něm...

Kód:
10 GCLEAR
20 SCALE 0,255,0,170
30 PRINT AT 3,3 "Napis na kolik stupnu presnosti pocitat"
40 PRINT AT 4,3"1=nejvic,180 nejmene a jaky polomer."
50 Z=.01745329:PI=3.14159265
60 INPUT O:INPUT R:H=O*Z
70 PRINT AT 5,3"Zadej souradnice X a Y v rozsahu 0-255 a 170"
80 INPUT X:INPUT Y:MOVE R,Y
90 FOR I=0 TO 2*PI+0.017STEP H
100 A=X+R*COS(I)
110 B=Y+R*SIN(I)
120 PLOT A,B
130 NEXT I
140 PRINT AT 6,3"Chces kreslit znovu (A/B)?"
150 E=USR('89C0)
160 IF E=65 THEN GOTO 60
170 IF E=66 THEN END
180 GOTO 150


A taková technická - jak byste viděli řešení datového přenosu a vyčítání dat? Pomocí řetězců nebo pole? Pole se totiž dá uložit i na pásku a může být dost velké, string zase můžeme dobře zpracovávat zabudovanými příkazy. Případně to zkombinuju a pole budu načítat po řetězcích :-).


Přílohy:
KruhyA.png
KruhyA.png [ 8.73 KiB | Zobrazeno 330 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 18.01.2020, 14:06 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Druhá funkce je hotová - výseč kružnice :-). V modelovém příkladu je kružnice o poloměru 30, poloha x=100, y=80, výseč začíná v bodě 0 a její úhel je 120°.

Kód:
0 REM Vysec kruhu
10 GCLEAR
20 SCALE 0,255,0,170
30 PRINT AT 3,3 "Napis na kolik stupnu presnosti pocitat"
40 PRINT AT 4,3"1=nejvic,180 nejmene a jaky polomer."
50 Z=.01745329:PI=3.14159265
60 INPUT O:INPUT R:H=O*Z
70 PRINT AT 5,3"Zadej souradnice X a Y v rozsahu 0-255 a 170"
75 PRINT AT 6,3"a od jakeho stupne zacit a jak velkou vysec.
80 INPUT X:INPUT Y:MOVE X+R,Y
85 INPUT T:INPUT U:K=T*Z
90 L=(U*Z)+K:A=X+R*COS(K):B=Y+R*SIN(K):MOVE A,B
95 FOR I=K TO L+0.017STEP H
100 A=X+R*COS(I)
110 B=Y+R*SIN(I)
120 PLOT A,B
130 NEXT I


Přílohy:
Vysec kruhu.png
Vysec kruhu.png [ 6.7 KiB | Zobrazeno 295 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 18.01.2020, 14:27 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
A třetí funkce je hotová - úsečka. Má dvě varianty - rychlejší když znáte počáteční a koncový bod (využije se hw interpolátor PMD) a verzi pomalejší, kdy stačí definovat jen počátek, délku a sklon a nemusíte znát koncové souřadnice.

Kód:
0 REM Usecka A
10 GCLEAR
20 SCALE 0,255,0,170
30 PRINT AT 3,3 "Napis X,Y pro zacatek, delku a sklon"
40 Z=.01745329:PI=3.14159265
60 INPUT X:INPUT Y:INPUT R:MOVE X,Y
85 INPUT T:K=T*Z
90 A=X+R*COS(K):B=Y+R*SIN(K):PLOT A,B

a
Kód:
0 REM Usecka B
10 GCLEAR
20 SCALE 0,255,0,170
30 PRINT AT 3,3 "Napis X,Y pro zacatek, delku a sklon"
40 Z=.01745329:PI=3.14159265
60 INPUT X:INPUT Y:INPUT R:MOVE X,Y
85 INPUT T:K=T*Z
90 A=X+R*COS(K):B=Y+R*SIN(K):PLOT A,B


Nahoru
 Profil  
 
PříspěvekNapsal: 18.01.2020, 18:20 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Čtvrtá funkce je hotová - implementace kubické Bézierovy křivky se 4 body (2 koncové a dva body řídící) :-).

Kód:
0 GCLEAR
10 SCALE 0,255,0,170
15 REM Definice bodu krivky
20 XA=10:YA=10:XB=150:YB=150:XC=230:YC=110:XD=250:YD=10
25 MOVE XA,YA
30 REM Vypocet VAH jednotlivych ridicich bodu
40 MX=XA
50 MY=YA
60 NX=3.0*(XB-XA)
70 NY=3.0*(YB-YA)
80 PX=3.0*(XA+XC-2.0*XB)
90 PY=3.0*(YA+YC-2.0*YB)
100 QX=XD-3.0*XC+3.0*XB-XA
110 QY=YD-3.0*XC+3.0*YB-YA
120 FOR T=0 TO 1 STEP .01
130 X=MX+NX*T+PX*T*T+QX*T*T*T
140 Y=MY+NY*T+PY*T*T+QY*T*T*T
150 PLOT X,Y
160 NEXT T


Od této chvíle se už dá mluvit o gafickém interpretru - jsme schopni zobrazit text a manipulovat s ním, bod, libovolnou křivku, kruh, výseč kruhu, trojúhelník, čtverec či obdélník i úsečku. Tak dám další funkce zatím k ledu a začnu řešit datové pole a způsob jak importovat data z něj do grafického programu PMDGRAF :-). Doufejme již brzo bude z PMD možné vytvořit grafický plotter co bude umět využít nabízené možnosti XY4131.


Přílohy:
bezierB.png
bezierB.png [ 3.94 KiB | Zobrazeno 279 krát ]
bezier.png
bezier.png [ 3.38 KiB | Zobrazeno 280 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 18.01.2020, 22:06 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Začal jsem práce na metodě jak programu dodat data. "První volbou" a zároveň nejjednodušší možností je kazeťák. Přemýšlel jsem jak data programu udat a dospěl jsem k názoru, že nejlepší bude nějaká fixní velikost souboru. Tak jsem pro začátek nastavil velikost pole na 1 kB v rozměrech 21x47 (reálně pole zabere 4 kB kvůli způsobu ukládání dat do něj). Je to z toho důvodu, že řádek u PMD má 47 znaků a do takového pole se vejde 21 plných řádků, což je skoro celá obrazovka textu. Tedy při hustém výpisu ho i na PMD uvidíte celý.

Způsob zápisu dat je trošku inspirovaný HPGL a jazyky typu html. Do souboru jsem volil momentálně co nejůspornější ale přitom člověkem editovatelný zápis. Tedy text s čárkami, kdy příkazy budou odděleny pouze středníkem a první dva znaky budou vždy písmena. To umožní zadat až 784 příkazů a při průměrné délce kolem 10 bajtů na příkaz/čáru dosáhnout "hustoty" zhruba 100 unikátních objektů či čar na pole. Protože se jedná o nadstavbu ovladače plotteru, většina dat by měla být čistě grafických a plotr díky tomu bude jezdit s papírem a perem samostatně.

Kód:
Tedy pro příklad:
Vykresli úsečku o začátku X=10,Y=50, délce 30 a úhlu 50 stupňů by se napsalo následovně:
LT10,50,30,50;

Vykresli kruh o středu X=120,Y=120 a poloměru 50, přesnost kresby nejvyšší(1):
CI120,120,50,1;

A poslední příklad vykresli Bézierovou křivku s počátkem 0,0 koncem 150,60 a řídícími body 80,70 a 170,160:
BE0,0,150,60,80,70,170,160;



Pole mohu samozřejmě ještě zvětšit ale idea je, že po dojetí na konec pole se načte zase další 1kB úsek (nebo případně větší část) a šetří se tím vzácná RAM PMD 85-2 pro kreslicí program jako takový. Až po jeho plném dokončení se může maximální velikost jednoho pole případně změnit na víc než 4 kB. Taky to teoreticky umožňuje jednoduché obrázky ukládat např. do MegaROM modulu po pár kB a komplexita scény je zvrchu v tomto případě standardně omezená 99 poli (při kapacitě po 4 kB asi 40 000 objektů) a když s tím program bude počítat, tak víceméně jen kapacitou média - pojede to dokolečka.

Pokud někdo znáte lepší způsob načítání dat, rád se ho dozvím.

První nástřel jak vytvořit, uložit a znovu načíst pole je zde, vykradl jsem příručku k PMD 85 :-) :

Kód:
10 REM Vytvoreni + ulozeni pole
15 DIM A(21,47)
20 FOR I=1 TO 21
30 FOR J=1 TO 47
35 A(I,J)=I+J
50 NEXT J
60 NEXT I
70 PAUSE: DSAVE 4;A(21,47)"POLE"
80 CLEAR:END
90 REM Nahrati pole
100 DIM A(21,47)
110 ? "Priprav magnetofon a stlac klavesu!"
120 DLOAD 4;A(21,47)
130 FOR I=1 TO 21
140 FOR J=1 TO 47
150 PRINT A(I,J);
160 NEXT J: PRINT: NEXT I


Načítání pole je v tomto případě velmi snadné - načtou se první dva znaky, určí se jaký příkaz a vytvoří se string, kterému příkaz rozumí. Následně se příkaz provede a situace se opakuje. Důležitá v této fázi bude synchronizace s plotrem ale to se nedá bez živého hardwaru moc dělat. Starat se o ni by ale měl opět ovladač samotný.


Nahoru
 Profil  
 
PříspěvekNapsal: 22.01.2020, 12:16 
Offline
Profík
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 594
Has thanked: 26 times
Been thanked: 59 times
Víte někdo v jakém poměru souřadnicového rozsahu pracuje XY 4131 s PMD? Řekněme v PMD bude 255x170 a na plotru je 2550x1700. Jaká hodnota dostane plotr na konec osy? 170 nebo 1700? Docela bych to potřeboval pro popis příkazů zda mám do formátu vstupních dat začlenit desetinnou tečku nebo je to int hodnota po 1.


Nahoru
 Profil  
 
PříspěvekNapsal: 22.01.2020, 14:34 
Offline
Kecálek

Registrován: 06.03.2018, 16:00
Příspěvky: 117
Has thanked: 0 time
Been thanked: 46 times
Rozsah podle manuálu je 260x185mm a je 10 kroků na 1 mm, čili 2600x1850 kroků. Osa Y může být samozřejmě trochu (nebo výrazně :D ) delší - nejsou na ní žádné koncové dorazy - jde třeba tisknou na A3 rozříznutou podél (neboli 2xA4 za sebou). U osy X je problém ten, že koncové spínače jsou trochu blíž a celých 1850 kroků neprojde (alespoň mě ne). Ale je možné je po rozebrání plotru :suicide: trochu posunout.

Jinak jsem na sbazaru koupil sadu Centrograf 1040 za 50,- Kč + pošta. Jednoduše jsem je upravil pro použití gelovky Pilot G-2 0.5 (jak uvádí zxcygnus). Rýsovací agregáty jsou v mizerném stavu, tak jsem použil je. Uřízl jsem "čudlík", ve kterém je vetknutá kovová trubička, díru jsem zvětšil vrtákem 2,4mm a na druhém konci uřízl dvě a kousek třetí sekce se závitem tak, aby po vsunutí náplně koukala její téměř celá kovová část - možná bude třeba zvětšit z vnitřní strany agregátu kousek díry 2,4 mm na asi 3 mm, protože plastová část náplně má větší průměr, než kovová. Aby se agregát ve svém držáku moc neviklal (zkrácené závity), omotal jsem jeho zúženou část kaptonovou páskou tak, aby v držáku byl natěsno. U držáku agregátu je odříznutý výstupek, na kterém je původně nasazený zásobník s tuší. Dovnitř násadky jsem ještě vložil pružinku z propisky a vše sešrouboval dohromady. V horní části obrázku neupravený držák agregátu a vlastní agregát a v prostřední, co z nich zbylo po úpravě.

Nevím, jestli zxcygnusovi ty 1040 do plotru nepasovaly, mě jdou zašroubovat volně, v celé délce závitu :like: . Třeba jsem měl štěstí na jinou sérii se správným závitem.

Petr


Přílohy:
Poznámka: Úprava Centrograf 1040
Centrograf 1040.jpg
Centrograf 1040.jpg [ 325.35 KiB | Zobrazeno 103 krát ]
Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 69 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz