Comp24
My computer for year 2024
Comp24-ideas
2024.01.30 07:32:40 end HW Gilhad

2   Cards

  • Expansion card is connected via system bus.
  • Every physical card will consist of
    • ID - on this signal it enables its ID on data lines for Read
      • 74HC245 + pullups/pulldowns, set direction and Enable connected to ID signal
      • need for test, if card is present and what type it is
      • more card may return same ID, if they are of same type
    • I/O - basic enable for the whole card, A[0..4] select registers (may be divided between more devices) (not all must present)
      • 6522 VIA - 16 regs, 2 CS - best fit - 2 may be used
      • 6821 PIA - 4 regs, 3 CS - up to 4 with +1 decode
      • 6850 ACIA - 2 regs, 3 CS - up to 8 with +2 decode
      • budu rad, kdyz se mi podari tam tuhle trojici dostat jednou, s LEDkama a s RS obvodem ono to zabere hodně místa
  • video
  • sdílená RAM a Arduina
    • Mega umí nativně rozšířenou RAM, ale potřebuje na to extra rychlý 74AHC373, protože sdílí data a adresy
    • já bych spíš použil 3 porty (2xaddr+1xdata) kde to je o něco pomalejší, ale pokud to udělám ve strojáku, pořád by to mělo být dost rychle a bez chytáků
    • na základní video by asi stačila ATMEGA328p (UNO a pod.) se 2K+ RAM (text a pár fontů/spritů),
      • 1334 bytů pro text 46*29, 9*128=1.128K na půl font, může být ve flash
      • 2.25K na plný font
      • ideál je 4K+ pro text i s uživatelským fontem (pro hry)
      • na grafiku potřebuju asi 12K+ RAM (a velký datový tok při přenosech, možná 2 výměnné RAM?)
    • těch sdílených by mohlo být víc, jedna (dvě) pro video, jedna pro FS, dvě pro vypalování EEPROM, libovolně rozšiřujících
    • jedno arduino pro video, jiné pro FS a obecný I/O (a klidně příkazy typu I2C(123):3(45,56,78):5() - pošle 3 data, přečte 5 z dané adresy, podobně SPI, serial, PS/2 ... )
  • Zajímavé obvody
    • IDT7201 - FIFO - krásné, ale co s tím?

3   HomeMegaFORTH branistorm

Potrebuju vymyslet (a popsat) rozhrani mezi 8bitovym pocitacem (CPU) a dvema Arduiny (A a B), ktere bude delat CPLD nazvane GLUE (jako lepidlo, ktere spojuje jednotlive casti). Ze strany CPU pujde o dve dvojice registru - (status_L, addr_L) a (status_H, addr_H) A dvojici registru pro chipy - status_A a status_B Ze strany Arduin půjde o signály privadene na jejich I/O piny

Z pohledu CPU jsou v jeho pameti dve okna o velikosti 8kB (dolni (Low) na adrese 0x8000 a horni(High) na adrese 0xA000) do kterych je neco namapovane

Jsou tri chipy RAM, kazdy ma 128kB (RAM_A sdilena s Arduinem A, RAM_B sdilena s Arduinem B, RAM_C pouze pro CPU)

Kdyz chce CPU pouzit v nejakem okne nejakou pamet, zapise do prislusneho registru (napr. addr_L) pozadovanou adresu jako byte ve tvaru aa00bbbb, kde bity aa udavaji o ktery chip jde (00 RAM_C, 01 RAM_A, 10 RAM_B) a bity bbbb udavaji o kterych 8kB v ramci chipu pujde (4 horni bity adresy).

Nasledne CPU cte v cyklu odpovidajici stavovy registr (status_L), dokud tento neukaze, ze je mozno dotycne okno pouzivat. Stavovy registr ma nasledujici bity 000wm0b bit B je busy - 1 znamena pamet neni jeste pridelena, 0 pamet pridelena je M znamena modified, 1 znamena ze od minuleho prideleni byla pamet modifikovana Arduinem W je Wanted - 1 znamena, ze Arduino by do te pameti chtelo psat (treba mezitim dosla nejaka nova data zvenku)

CPU take kdykoli muze cist stavovy registr chipu (status_A/status_B), s nasledujicimi bity 00dwmac bit A je vlastneno Arduinem - 1 znamena ano bit C je vlastneno CPU - 1 znamena ano M znamena modified, 1 znamena ze od minuleho prideleni byla pamet modifikovana Arduinem W je Wanted - 1 znamena, ze Arduino by do te pameti chtelo psat (treba mezitim dosla nejaka nova data zvenku) D je dirty - CPU tam zapsalo, ale Arduino to jeste necetlo

Potrebuju vymyslet (a popsat) rozhrani mezi 8bitovym pocitacem (CPU) a dvema Arduiny (A a B), ktere bude delat CPLD nazvane GLUE (jako lepidlo, ktere spojuje jednotlive casti). Ze strany CPU pujde o dve dvojice registru - (status_L, addr_L) a (status_H, addr_H) A dvojici registru pro chipy - status_A a status_B Ze strany Arduin půjde o signály privadene na jejich I/O piny

Z pohledu CPU jsou v jeho pameti dve okna o velikosti 8kB (dolni (Low) na adrese 0x8000 a horni(High) na adrese 0xA000) do kterych je neco namapovane

Jsou tri chipy RAM, kazdy ma 128kB (RAM_A sdilena s Arduinem A, RAM_B sdilena s Arduinem B, RAM_C pouze pro CPU)

Kdyz chce CPU pouzit v nejakem okne nejakou pamet, zapise do prislusneho registru (napr. addr_L) pozadovanou adresu jako byte ve tvaru aa00bbbb, kde bity aa udavaji o ktery chip jde (00 RAM_C, 01 RAM_A, 10 RAM_B) a bity bbbb udavaji o kterych 8kB v ramci chipu pujde (4 horni bity adresy).

Nasledne CPU cte v cyklu odpovidajici stavovy registr (status_L), dokud tento neukaze, ze je mozno dotycne okno pouzivat. Stavovy registr ma nasledujici bity 000wm0b bit B je busy - 1 znamena pamet neni jeste pridelena, 0 pamet pridelena je M znamena modified, 1 znamena ze od minuleho prideleni byla pamet modifikovana Arduinem W je Wanted - 1 znamena, ze Arduino by do te pameti chtelo psat (treba mezitim dosla nejaka nova data zvenku)

CPU take kdykoli muze cist stavovy registr chipu (status_A/status_B), s nasledujicimi bity 00dwmac bit A je vlastneno Arduinem - 1 znamena ano bit C je vlastneno CPU - 1 znamena ano M znamena modified, 1 znamena ze od minuleho prideleni byla pamet modifikovana Arduinem W je Wanted - 1 znamena, ze Arduino by do te pameti chtelo psat (treba mezitim dosla nejaka nova data zvenku) D je dirty - CPU tam zapsalo, ale Arduino to jeste necetlo

Pokud CPU namapuje nejakou RAM (jakozto chip), pak mu patri az do chvile, kdy bude v obou oknech namapovano neco jineho (cimz se CPU toho chipu zase vzda)

Obdobne to bude fungovat pro Arduina, Arduino si nemuze pripojit RAM, pokud ji vlastni CPU. Pokud si Arduino pripoji nejakou RAM, tak ji vlastni (a CPU si ji nemuze namapovat), dokud se ji nevzda. Kdyz si Arduino pripoji RAM, tak se predpoklada, ze ji precetlo a zapsalo. Arduino potrebuje vedet, jestli CPU do te pameti zapsalo a jestli ji CPU chce.

A potrebuju pro kazde Arduino vymyslet signaly, aby to mohlo takhle fungovat (potrebuje vedet, jestli je jeho RAM volna, jestli ji CPU chce, jestli ji CPU zapsalo)

A cele to nejak rozumne popsat.