.. vim: noexpandtab fileencoding=utf-8 nomodified wrap textwidth=200 foldmethod=marker foldmarker={{{,}}} foldcolumn=4 ruler showcmd lcs=tab\:|- list :date: 2023.05.31 00:49:18 :tags: 6809,OMENkilo,Castor,Pollux :authors: Gilhad :summary: Obecně okolo OMEN kilo a 6809 :title: 6809 & OMEN kilo :nice_title: |logo| 6809 & OMEN kilo |logo| %HEADER% Odkazy -------------------------------------------------------------------------------- `make: Auto Vars `__ `asm6809 `__ `OMEN: kilo `__ Castor -------------------------------------------------------------------------------- * `2023.11.20` Rozhodl jsem se, že nový **EEPROM** systém pro `OMEN kilo` nazvu `Castor`, protože proč ne :) `Castor `__ * `2023.12.13` Dotaz na `ACIA MC68B50 `__ Poznámky -------------------------------------------------------------------------------- .. sidebar:: Poznámky :class: right-sidebar Ukázka, jak řešit 6502 počítač s perifériema a emulovanou pamětí ROM `ERIC-1 `__ * periférie/paměť je organizovaná na byty s adresou, navíc na sběrnici se liší Read a Write (na sys. busu kila jsou signály **/WR** = NOT(Write & E) a **/RD** = NOT(R & E) * posloupnost: * nejdřív je platná adresa a R/W a Data k zápisu * pak jde **E** nahoru * pak jde **E** dolu (a čtou se Data = musí být vystavena ke čtení) * pak přestanou být platné adresy (50MHz), data k zápisu (30MHz) a potřeba data ke čtení (100MHz) * vzhledem k rychlostem 74xx nemusím řešit, co je po pádu **E** v jakém pořadí * jinými slovy - při náběhu **E** paměť čte adresy a R/W a data, co se mají zapsat, při odpadnutí **E** musí být data ke čtení vystavená (a pak už ne) * **E** může přímo řídit Input Enable a Output Enable (3-state) Device na systémovém aplikačním busu -------------------------------------------------------------------------------- * je vybíraná pomocí **IO 1..7** (na přeskáčku ze 7 rozsahů (1k každý) - protože 3-8 dostává A12,A11,A10 sestupně (při enable 100xxxXX XXXXXXXX )) * má 8 R-registrů a 8 W-registrů (zapínané pomocí **/RD** resp. **/WR**) adresovaných pomocí A0-A2 a (/RD,/WR) * při náběhu /WR může začít číst data * při odpadnutí /RD musí být vystavena platná data * --- * Realizace: * 000 R je Read-only Stavový registr, pro ostatní registry udržuje 1/0 pro možno/nemožno použít * 000 W je Write-only Control registr pro nastavování device (otázka je, co to bude znamenat) - 0.bit=1 * 001 ? je Data registr (připraven pro čtení 1.bit=1, připraven pro zápis 2.bit=1) * HW * Stavový registr - 74HC245 - 8bit průchodka BEZ paměti - DIR fixní, !/Enable = !IOx & 000 & !/RD, vstupní data R-S latch pro každý registr zvlášť (potřebujeme stavy hned, nezapisovat je tam nějakým signálem) * Control registr - 74HC373 - 8bit D-3state - Input(D)=D[0..7], LE = !IOx & 000 & !/WR, LE nuluje R-S 0 * Read registr - 74HC373 - 8bit D-3state - Output(Q)=D[0..7], !OE = !IOx & 001 & !/RD, OE nuluje R-S 1 * Write registr - 74HC373 - 8bit D-3state - Input(D)=D[0..7], LE = !IOx & 001 & !/WR, LE nuluje R-S 2 * --- * logika * IO+000+/RD+/WR = 6in ->4Out+2neg * R-S (3) = 6x NAND * negace pro IOx (1), 000 (3), /WR /RD (2), LE->RS (2) = 8x NOT * ??? * pro vybírání chipů asi použiju správně naprogramovanou `ATF16V8BQL-15PU <.root/HW/ATF16V8BQL.html>`__ * Arduino? * Vzhledem k pomalosti digitalRead/Write (nestihne nic udělat během 4MHz = 4 vlastní takty a pak už **E** jistě odpadnulo) si může dovolit přímo zareagovat na R-S v nule, přečíst/zapsat příslušný 74HC373/registr a pak nahodit R-S * Víc detailů viz `Expanduino I `_ Historie -------------------------------------------------------------------------------- * `2023.06.12` Vztahy mezi **E** a devicema * `2023.05.31` Založení stránky