Mix
Random mix of pages and files
Blog 2023
2023.12.12 00:20:56 - 2024.01.02 09:43:40 end blog Gilhad

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.