Obsah
- 2023.12.30 16:20:25 Úvahy o Comp24
- 2023.12.17 12:18:00 I/O karta další úvahy, VGA
- 2023.12.15 03:18:56 I/O karta - úvod
- 2023.12.14 19:59:16 IRQ, RTS/CTS/RFR
- 2023.12.14 05:56:19 IRQ pro MC68B50, moduly
- 2023.12.13 03:29:47 RTS na MC68B50
- 2023.12.12 00:29:27 potřebuju IRQ
- 2023.12.12 00:22:25 blog, style
2023.12.30 16:20:25 Úvahy o Comp24
- https://digicoolthings.com Minimalist Europe Card Bus - zajímavé nápady
- používá backplate a DIN 41612 konektor (asi 4x dražší než pinhead s dlouhýma nohama, ale víc "profi")
- používá 10x10 cm desku
- přetaktování HD6309 na 4 MHz - to by řešilo moje problémy s nestíháním IRQ při 1150.200 b/s
- Comp24 - přemýšlím nad přebudováním systému zcela od základů (a udělám si na to webovky)
- všechno na 10x10 cm deskách z JLC s průchozí sběrnicí 2x32 pin a šroubovacími otvory pro stackování - a asi taky co půjde, tak smd kvůli místu?
- 2x ROM, aby to mohlo z jedné běžet a druhou vypalovat
- to ale znamená mapování té druhé někam jinam a případně i přemapování té první, aby se mohly prohodit kvůli bootování
- a pak bych taky mohl mapovat RAM, zejména místo ROM a případně i jinak, pro EMS-like stránkování
- paměť asi rozhodit po 8kB a nastavit default 4xRAM, 1x nic (nebo 2. ROM), 1x devices, 2x ROM
- moduly
- CPU + dekóder sběrnice + krystal 16 MHz
- 2xROM + mapování
- 3xRAM + mapování
- možná by stálo za to mít u RAM druhou sběrnici pro práci s videokartou, kde by se jedna RAM namapovala výlučně videokartě a druhá se dala CPU a pak by to šlo přehodit jako double-buffering a tím by se vyřešilo sdílení přístupu
- a pak by musela být i třetí RAM, kde by běžel program, byl zásobník a tak
- ty RAM by musely být fyzicky různé chipy, aby se dala přepnout sběrnice tam či onam
- Expanduino_II - smd 74HC74 + RS, piggy-back deska pro SD kartu, RTC a vyvedení sběrnic
- vyplnit volný prostor univerzálníma dírkama (to ostatně i na všech ostatních deskách)
- přidat ID na adresu 000 a přesunout Expanduino na jinou adresu (00x, nebo 100)
- možná externí verzi čistě přez serial?
- I/O ACIA+PIA+RTS/CTS+ID (asi 2x?)
- video - asi prvně seriové ze 2 arduin, časem možná něco s videoRAM
- Edge triggered R-S - asi chci 2/2 74HC74 (dvě D s resetem) + 2/4 74HC02 (4xNOR) podle tohoto schéma
- Průchodku pro Status chci 74HC241, nebo 74HC244 nebo 74HC245 (nejlepší rozložení pinů) (nebo 74HC240 a tahat to z Q)
- Časování sběrnice
- Adresa je platná od náběžné hrany Q (která je před náběžnou hranou E)
- Data pro zápis do RAM jsou platná mezi odběžnou hranou Q a odběžnou hranou E
- Data z RAM se čtou při odběžné hraně E
- Tedy
- CPU čte data - můžu reagovat na náběžnou hranu Q a musím to stihnout do odběžné hrany E a jak budu kmitat mezi tím není důležité
- CPU zapisuje data - můžu začít dekódovat při náběžné hraně Q
- pokud mi nevadí kmitající data, tak můžu číst od náběžné hrany Q až do odběžné hrany E a pak už je musím uchovat na poslední hodnotě
- pokud mi vadí kmitající data (třeba pro R-S), tak msím číst od odběžné hrany Q až do odběžné hrany E a pak už je musím uchovat na poslední hodnotě
- Jinými slovy asi chci signály
- ReadEnabled = (E OR Q) - reaguju vystavením dat
- WriteAddressReady = (E OR Q) - reaguju dekódováním adresy (nebo na to kašlu, nebo, pokud mi nevadí kmitání, zařínám číst už teď)
- WriteData = (E AND NOT Q) - reaguju načtením dat (pokud je to moje adresa) - po ukončení už číst nesmím
2023.12.17 12:18:00 I/O karta další úvahy, VGA
- I/O karta - HW latch bude mnohem lepší, když to budou 2 adresy pro zápis - jedna pro Set bity, druhá pro Reset bity, bude tam za tím 8 RS obvodů (a světýlka)
- když budu chtít nastavit jeden bit, tak tam pošlu pro něj jedničku na příslušný R/S vstup a nemusím řešit ostatní - kde je nula, tam se to nezmění
- pro čtení stačí 1 adresa (pokud mě vůbec bude zajímat), druhá by mohla být to ID, udávající typ desky (a její přítomnost)
- možná skromněji (a nemusím sběrnici zatím rozšiřovat)
- 2 adresy pro ID + 8bit latch
- 2 adresy pro 1x ACIA
- 4 adresy pro 1x PIA
- micro karta - 2x74HC00 - 1bit latch (1x NOT na IOx, 1xNOT na A0, 1+1x NAND na jejich kombinaci, 2xNAND na 1 RS) jakýkoli přístup na sudou/lichou adresu rozsahu to přepne
- mini karta - 4x74HC00 + 2x74HC279 + 2x74HC00 - 8bit latch (NOT /IOx && (NOT) /A0) && (8xdata)
- MegaShield - pro nastavování +5V a GND možná nebudu dělat 40+40 MOSFETů, ale jen vytáhnu ty piny na 2x20 lištu a drátama si to přivedu kam budu chtít. A možná to rozhodím na 4x 2x5 pinů.
- a pozici chipu můžu snadno zakódovat jako pozici jeho pinu 1 (a tím je plně daná) a velikost (a tím vím i vše ostatní)
- BluePill a VGA
- RPI Pico a VGA
- RPI Pico a VGA minimal
2023.12.15 03:18:56 I/O karta - úvod
- Tak jsem zabil větší část dne záhadnýma chybama. Nakonec se ukázalo, že problém je v indexování bufferu pro indexy $80+, protože 8bitové registry se chovají jako signed. Nahrubo jsem to přepsal na ABX za cenu pár bytů a hlavně taktů navíc a už to chodí.
- I/O karta je docela akutní pro řízení toku dat ( bez RFR to pořádně nepůjde)
- samozřejmě, že komunikace přez ACIA přímo na ní by vše řešila, čímž bych ovšem dostal dost nechutnou závislost
- asi se spokojím s kompromisem: kilo bez I/O karty prostě pojede postaru a bude řešit handshake přez typeHEX.py
- s I/O kartou bude mít druhý hlavní vstup a budu to zapojovat tam
- I/O karta obětuje jednu adresu na zadrátovanou ID hodnotu, aby šla snadno rozeznat
- 2x Pia = 2x4 adresy, 1x ACIA = 2 adresy, HW latch = 1 adresa, ID = 1 adresa == 12 adres, vejde se, pokud na 30 (NC) přivedu A3 jako 4. linku
- Asi výběr desky přez switche 1-7
2023.12.14 19:59:16 IRQ, RTS/CTS/RFR
- Pokračuju v úpravách a testování, přidal jsem test na zbývající délku fronty (End is near), která by měla nějak zatáhnout brzdu (deasertovat RFR Ready For Read), jen nevím jak (zbývají 2-3 smyčky)
- asi použít nějaký neobsazený pin a řídit ho přez #0 (TODO)
- nestačí jen zapsat a doufat, je potřeba testovat stav (a čekat), jinak hrozí ztráta volání (teď mi prošly 2/8) a taky rozbití dat při přenosu
- ale asi to povede k problémům s časováním, protože Expanduino může žrát neomezeně taktů, zvláčtě když tam nebude
- samostatná I/O karta s HW bufferem/latchem by byla lepší
- Ohackovat nějaký převodník na plnou komunikaci a zadrátovat to do stávajícího HW
- Možná udělat I/O desku s ACIA, 1-2x PIA a 1x 8bit HW latch právě pro řízení provozu (nebo na to zneužít jednu paralelní bránu) - a samozřejmě IRQ a FIRQ a možná i timer
- Testovací program by měl navíc:
- volitelně inicializovat buffery, jak data, tak hodnoty (TODO DONE)
- dělat shell s příkazem Quit, Clear, Fill, Test, Dump (TODO DONE)
- skončit test po (asi) 10s nečinnosti (TODO DONE)
- Chtělo by to ještě timer pro čtení Expanduina, ale není jak (další verze Expanduina by měla obsahovat přístup k IRQ a FIRQ a aspoň jeden obousměrný "stavový registr" (?#4?) pod přímou ruční kontrolou Polluxe - neustále ready, pořád drží poslední hodnotu v každém směru (bez LED)) (PLAN)
2023.12.14 05:56:19 IRQ pro MC68B50, moduly
IRQ od MC68B50 jsem přidrátoval :) (BTW: 320 C je pro odizolování drátku dostačující a funguje dobře, hrot D24, ale možná příště zkusím BCx)
Začal jsem psát ovladač, pro čtení už funguje, teď ještě pro psaní a jejich neinterruptové protějšky pro spolupráci.
Když to tam cpu pomocí cat tak normální program mezi interrupty zvládá pár (3-4) smyčky - no, nic moc teda a to toho ještě nedělám moc
; LDX #data Loop ; {{{ INC ,X BNE Loop INC $100,X BNE Loop INC $200,X BNE Loop INC $300,X BNE Loop INC $400,X BRA Loop ; }}}
Nápad - relokovatelné rezidentní moduly - se začátkem řekněme od $200, "když se to zapne", tak se nahraje od začátku, upraví se adresy v IHEXu včetně startu, "když se to potvrdí", tak se konec vezme jako nový začátek a upraví se hlavičky.
- ale to by nepřežilo první RESET
- takže by třeba ve V_cosi byla adresa prvního a před ním adresa druhého atd ... a header by měl odkaz na další a byl by čtyřdílný - start, délka, ukazatel na další (0000 = není další) a stamp jako XOR V a všech předchozích (snad dost náhodné), přičemž by ta čísla navíc musela být uvěřitelná (vše v RAM) a ten V_cosi by se nuloval jen když by ten odkaz v něm neseděl
- a to by pak na ně mohl být i rozeskok a mohly by mít i jména ...
- třeba by každý modul měl ještě vlastní, nekódovanou, hlavičku ve stylu BRA aaa; llll; rrrr; "Name\0"; aaa: kde aaa je návěští hned za jménem, llll je délka dat, přez které by se dělal CRC, rrrr je rezidentní délka včetně dat a Name\0 je jméno modulu s nějakým limitem
- po nahrátí by se skočilo na (přepočtenou) AutoExec adresu (kde se napáchá první inicializace, pokud), při dalších spuštěních pak na začátek, kde se skočí za jméno a co bude tam už je problém modulu
- po resetu by se prošly moduly a pokud by seděly hlavišky, tak fajn, pokud někde ne, tak by se tam ten řetězec ukončil
- díky V by to mělo být perzistentní při restartech, ale ne přez vypnutí (snad - i když to asi nemá smysl, CRC je lepší), díky CRC by se měla nějak udržet "snad neporušenost"
2023.12.13 03:29:47 RTS na MC68B50
Napsal jsem dotaz na https://retrocomputing.stackexchange.com/questions/28133/can-the-mc6850-acia-signal-that-it-wants-to-send-data-but-not-receive-it a dostal dost zajímavých a důležitých odpovědí
RTS nejde použít k řízení, pokud chci vysílat, asi to musím udělat nějak jinak (jiný HW)
Musím konečně přiletovat ten IRQ a začít řídit přenosy
2023.12.12 00:29:27 potřebuju IRQ
Dnešek jsem spíš věnoval dokumentaci, do HowTo jsem přidal programování a nějaké triky do Arduina a elektroniky, hlavně jsem si rozmyslel, že Castor potřebuje IRQ pro ACIA a ring buffery, jinak nebude stíhat žádné copy/paste a bude mít pořád problémy. A protože stejně mám jen vstup po Seriálu, tak se nedozvím stisknutí a puštění klávesy, jenom jednotlivé napsané znaky a než to speciálně odchytávat v IRQ je jednodušší to z toho bufferu normálně číst. A taky čistší.
Jinými slovy - musím na tu desku OMEN kilo naletovat propojku, která tam chybí. A protože ten výstup je open colector, tak ji dám prostě pod ten pullup a bude to fungovat přesně jak má.
Dokud Castor nebude dělat příkazovou řádku s editací a potvrzení Enterem na konci, tak nebude problém. Pak se rozdělí čtení dalšího znaku řádky a čtení bez čekání.
Asi zůstanu u rychlosti 115.200 kb/s, protože víc neustíhám krmit a číst a aspoň nebudu (snad) muset řešit překrývající se interrupty.
A při vyprázdnění výstupního bufferu musím vypnout Transmit Interrupt a při vložení znaku ho musím zapnout (asi neuškodí při každém vložení zapínat).
2023.12.12 00:22:25 blog, style
Tak jsem se rozhodl psát i blog, kam bych dával tak neuspořádaně, co se vlastně dělo, co jsem dělal a tak podobně.
Protože specializované články jsou všude možně rozhozené a já bych chtěl i nějaké centrální místo.
Časem asi začnu jednotlivé měsíce? roky? vyčleňovat do archívu, aby to nebylo moc dlouhé a bylo dohledatelné, ale to až toho bude víc a usadí se formát.
Zatím jsem přidal nepovinný metatag :style: blog a dal mu dvojitý rámeček pro section, nevypadá to zcela zle
A asi to budu dělat až jako druhou úroveň, protože na to už mám makro :)
A pak to nebude tak roztahané ve zdrojáku.