Expanduino_I

Pochlubte se svým robotem ostatním!
Odpovědět
Uživatelský avatar
gilhad
Příspěvky: 258
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Expanduino_I

Příspěvek od gilhad »

Není to zrovna robot, ale aspoň je v tom Arduino ...

TL;DR: Expanduino je rozšiřující deska, která poskytuje 3 8-bitové obousměrné komunikační kanály + 1 8-bitový řídící a 8-bitový stavový pro snadné připojení dalších zařízení k SBC 6809 a 6502 (a podobným)

Obrázek


Stránky: http://8bit.gilhad.cz/6809/Expanduino/Expanduino_I.html
Poznámky, Plány a Errata
Galerie z finální fáze oživování

Pro počítače: OMEN Kilo a Bravo
MCU: Arduino Pro Micro (Atmega32U4)

Expanduino je rozšiřující deska, která poskytuje 3 8-bitové obousměrné komunikační kanály + 1 8-bitový řídící a 8-bitový stavový pro snadné připojení dalších zařízení k SBC 6809 a 6502 (a podobným).

Na rozdíl od například Z80, 8086 a tak podobně nemají 6809 ani 6502 žádné vstupně/výstupní porty a ke všemu přistupují stejně jako k paměti - prostě čtou a zapisují byty jako obvykle, a pokud se "náhodou" strefí na nějaké zajímavé místo, tak se začnou dít věci - například fungovat periferie :D

Aby taková periferie s nima fungovala, tak musí v plné rychlosti (třeba 2MHz) dekódovat adresu na adresové sběrnici, zjistit, zda je signál pro čtení nebo zápis a podle toho na datovou sběrnici vystavit data, nebo je z ní přečíst, než ten signál zmizne.
Některé periferie jsou na to přímo stavěné, jako třeba MC68B50 ACIA (sériová linka) a musí se jim pomoct jenom s dekódováním adresy, zatímco jiné na to stavěné nejsou vůbec a musí se jim nějak pomoct hodně a udělat to za ně všechno (RTC, I2C senzory, SPI zařízení, SD karty ...).

Na druhou stranu například takové Arduino má v sobě elektroniku pro I2C, SPI a tak přímo zabudovanou a je pro něj spousta modulů na připojení a knihovan na jejich ovládání, takže jako interface by bylo celkem šikovné. Akorát teda absolutně neustíhá zareagovat na na signály ze sběrnice a včas tam nachystat, nebo přečíst data.

Takže Expanduino mezi nimi tvoří most. Pro 6809 odchytává 9000h-9003h paměť v obou směrech a pro Arduino představuje 8 SPI registrů (4 pro čtení, 4 pro zápis) a navíc eviduje, kdo k danému zdroji přistoupil jako poslední a kdo je teda další na řadě, aby s ním něco dělal. A pokud se k němu oba chovají aspoň trochu slušně, tak si můžou běžet různými rychlostmi a pracovat různým způsobem sobě přirozeným a o nic se nestarat.

Teď už mám za sebou prví kolo návrhu, plošňák mi dorazil, osadil jsem většinu čipů a opravil pár chyb, které jsem v návrhu udělal a tak se s tím chci taky někde chlubit 8-)

Ty stránky :arrow: http://8bit.gilhad.cz/6809/Expanduino/Expanduino_I.html a :arrow: Poznámky, Plány a Errata průběžně upravuju a doplňuju, takže už začínají dávat smysl i někomu jinému, než jenom mě, a bude ještě líp ;)

Přez různé schválnosti osudu, jako vyhřívací chipy, spálené páječky, chybějící chipy, pozitivní a negativní logika a mnohé další efekty speciální jsem se nakonec přece jen někam dokopal :D

Tady je pár fotek z poslední fáze ladění a kutění :arrow: http://8bit.gilhad.cz//6809/Expanduino/ ... lerie.html - včetně několika přilehlých přípravků a mezivýrobků ;)

Teď už zbývají jen takové maličkosti, jako si napsat firmware na míru, aby to umělo RTC, práci se soubory a tak podobně, napsat si nějaký OS, nebo aspoň slušný monitor a už si budu moct začít hrát se svým retrocomputerem :ugeek: ... teda, až si na to napíšu nějaké ty hry ... :twisted:

(A taky chci dopsat dokumentaci a někam vystavit ty různé meziprogramy a testovadla, která jsem k tomu všemu vybudoval ... ale i ta nejdelší cesta začíná prvním krokem a ten jsem dnes dokončil )

Expanduino_I (klikací)
Obrázek

Galerie z finální fáze oživování (klikací)
Obrázek

Errata, Poznámky a Plány (klikací)
Obrázek



A taky o tom budu postupně psát víc a uvítám jak pochvaly, tak kritiku, tak nápady na vylepšení a další připomínky.
Uživatelský avatar
gilhad
Příspěvky: 258
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Expanduino_I

Příspěvek od gilhad »

Tak mě frankenstein-chip potrolil, když si trhnul nohou (od napájení) a pak z něj padaly nesmysly. Ale přišel jsem mu na to a zatrhnul (přiletoval) mu to a už seká dobrotu.
A taky dorazily normální chipy, takže přišel o postavení jedináčka :)
A už jsem naučil 6809 si od Expanduina vyžádat přesný čas.
A změřil jsem rychlost, kterou dokážou cpát data do HW, bez testů, zda se smí a zda někdo poslouchá (Arduino R: 18.000 B/s W: 18.500 B/s; 6809: 96.900 B/s - ano, je to v bytech za sekundu) tedy s plným handshakem bude Expanduino_I asi 2x pomalejší, než ACIA - to není zlé, vzhledem k tomu, co všechno může zařizovat, ale komunikaci spíš tedy přez tu ACIA ... programy v sekci zdrojáky na Expanduinu (Teda ono tam je ještě dost dalšího systémového bordelu, jako vybírání kanálu, spousta digitalWrite a tak, takže kdybych to chtěl optimalizovat na kost, tak by to ještě asi šlo dost, ale to teď není priorita)
Uživatelský avatar
gilhad
Příspěvky: 258
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Expanduino_I

Příspěvek od gilhad »

Výrazně jsem zjednodušil přidávání nových příkazů a je to fajn.
Taky jsem začal psát přístup k SD kartě, ale tam jsem narazil - examply mi chodí na breadboardu, po drobné úpravě kodu (ohledně přístupu k SPI) i v desce, ale už se tam nevejdou s ovládacím softwarem (zabráno víc než 100% flash = paměti pro program)
Teď už jsem ty examply nějak základně ořezal o spoustu zbytných věcí, stejně jako ten Expanduino systém a problém pořád trvá (Global variables use 1959 bytes (76%) of dynamic memory, leaving 601 bytes for local variables. Maximum is 2560 bytes.) a jakýkoli pokus o použití SD pak vede k tomu, že se zásobník potká s haldou a nějak se to vysype (často až po vypsání obsahu karty, nebo tak něco).
Tak jsem vyměknul a objednal Arduino nano Every, které má místo 32 kB flash celých 48 kB a místo 2.5 kB RAM rovnou 6 kB a tam už se to bude muset vejít bez řečí. Jen ještě budu muset udělat konverzní desku ála F-chip pro ty Arduina, mají jiný půdorys a počet nohou. (V Expanduino_II už bude upravený pro Every v základu)
(Přemýšlel jsem ještě o Blue Pill, kterých mám doma taky pár, ale 3V3 logika by s 5V nedělala dobrotu a konverze by byla složitá)
Uživatelský avatar
gilhad
Příspěvky: 258
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Expanduino_I

Příspěvek od gilhad »

  • Rozchodil jsem EEPROMwriter pro Mega Shield 01 a okopíroval si OMEN Kilo 8kB EEPROM na novou 32kB (a ta stará chcípla). Takže můžu přepínat Bank 0 a 1.
  • Rozchodil jsem EEPROMcopy pro OMEN Kilo, takže můžu kopírovat z jedné banky do druhé. (a až to vylepším o zadávání čísel tam a zpět, tak budu moct vypalovat i cokoli z RAM)
  • Rozchodil jsem Emulator6809 a můžu si emulovat KiloExp.EEPROM :) RESET mi funguje :)
  • Mám nový boot do EEPROM, sice ještě nic moc nedělá, ale píše písmenka :)
  • Expanduino_I v.00.00.01 (Nano Every/Micro Pro) zdetekuje Expanduino_I a vypíše jeho verzi. Main loop umí reboot, komentář a help :) 1164 B celkem z toho asi 300 B textů
Uživatelský avatar
gilhad
Příspěvky: 258
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Expanduino_I

Příspěvek od gilhad »

Tak už mi to chodí - teda aspoň Castor (systémový EEPROM pro 6309) je ve stavu, kdy se dá nazvat plně funkčním alespoň na nejzákladnější úrovni

Například se dá do něj nabootovat, relokovat ho do RAM a tam z něj do ROM vypálit update.
(A to i přez to, že ta EEPROM zlobí a zápisy do ní nejsou spolehlivé, takže je nutno je opakovat, dokud se neuchytí správně. A aby se moc neošoupala, tak se vypaluje jen to, co je jinak (po bytech))

Z expanduina (pokud ho najde) si stáhne a spustí soubor /BOOT.HEX
Až to Expanduino bude umět, tak podobně bude moct spustit cokoli.
Umí to číst RTC a taky nastavit čas.
Umí načíst a spustit IHEX ze vstupu, nebo expanduina.
Umí vypisovat paměť, zavolat kód z libovolné adresy, porovnat dva bloky paměti, smazat RAM (přepsat daným bytem)

Start:

Kód: Vybrat vše

--==### CASTOR ###==--
v.0.1.0-r3 / master
07.12.2023 01:44:51
Address range: C000 - D8D8 (Total 18D8 ROM)
+++0000+
## Expanduino_I v.00.00.03 (Nano Every)
# Expanduino detected
 (Channel set to 1 )
Boot
*BOOT
Main Loop
> ### Expanduino_I v.00.00.03 (Nano Every)

> :20 2200 ################################ ;)
> :20 2220 #####=########################## ;)
> :20 2240 ################################ ;)
> :20 2260 #######=######################## ;)
> :20 2280 ################################ ;)
> :20 22A0 ################################ ;)
> :20 22C0 ################################ ;)
> :1A 22E0 ########################## ;)
> :00 2200  ;)

písmenko A přepíná AutoExec

Kód: Vybrat vše

> a Autoexec is now allowed

> exec pending:

Hello World!

Welcome back in Loop
>


Help obsahuje nápovědu takřka ke všemu (a ještě dumpne registry a spol)

Kód: Vybrat vše

> ?
Regs: A: 3F; B: 00; CC: 59=eFhINzvC; DP: 00; X: CAF2; Y: C19F; S: 7FAC; U: 7FAC; W: 1000; V: 8C9E;
 PC[CAF5]: 27 05 17 F8 E0 20 EB 17 F8 C1 39 17 FB 0C ^ 17 F5 BA 30 8D 08 4C 17 F8 BD 30 8D 0A 99 17 F8;
 St[7FAC]: C1 9F C0 00 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 00 01 00 22 00 01 90 00 04 90 01 03 00 03 90 00 08 90;

--==### CASTOR ###==--
v.0.1.0-r3 / master
07.12.2023 01:44:51
Address range: C000 - D8D8 (Total 18D8 ROM)
 Help:
Q, q - quit Castor (Reboot computer)
R, r - return to calling program
C, c - call address
> - Relocate to new RAM place
D, d - dump memory
: - IHEX (type 0 & 3 ( & 1))
# - the rest of line is Comment (and so ignored)
* - the rest of line is StarCommand for Expanduino
^ - send 1 byte ControlCommand to Expanduino
| - SetAltChannel for communication with Expanduino
A,a - SwapAutoexec for IHEX etc.
F, f - SwapFastIHEX - fast=only RAM
` - Test (do not use)
~ - Diff memory to memory
K - KillROM (do not use)
Z, z - Zero - clear RAM to 00 (or any value)
?, H, h - this help
SYSTEM_Autoexec_allowed:  Yes 
SYSTEM_FastIHEX_allowed:  No 
LOOP.exec.pending:  No 
LOOP.exec.addr: 2200
Expanduino detected:  Yes 
> 

Obrácený apostrof zavolá SWI, SWI2 a SWI3 (SW interrupty) jako test a ty skutečně projdou kudy mají

Kód: Vybrat vše

> ` TEST

Regs: A: 60; B: 00; CC: D1=EFhInzvC; DP: 00; X: D2D8; Y: C19F; S: 7F9E; U: 7FAC; W: 1000; V: 8C9E;
 PC[C04B]: 00 1D 12 20 1E 12 12 17 05 BA 3B 17 05 B6 ^ 3B 17 05 B2 3B 17 05 AE 3B 17 05 AA 3B 17 05 A6;
 St[7F9E]: D1 60 00 10 00 00 D2 D8 C1 9F 7F AC CC 0C C1 9F C0 00 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 00 01 00 22;

Regs: A: 60; B: 00; CC: D1=EFhInzvC; DP: 00; X: D2D8; Y: C19F; S: 7F9E; U: 7FAC; W: 1000; V: 8C9E;
 PC[C057]: 05 B6 3B 17 05 B2 3B 17 05 AE 3B 17 05 AA ^ 3B 17 05 A6 3B 17 05 A2 3B 10 CE 7F B0 30 8C 99;
 St[7F9E]: D1 60 00 10 00 00 D2 D8 C1 9F 7F AC CC 0E C1 9F C0 00 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 00 01 00 22;

Regs: A: 60; B: 00; CC: D1=EFhInzvC; DP: 00; X: D2D8; Y: C19F; S: 7F9E; U: 7FAC; W: 1000; V: 8C9E;
 PC[C05B]: 05 B2 3B 17 05 AE 3B 17 05 AA 3B 17 05 A6 ^ 3B 17 05 A2 3B 10 CE 7F B0 30 8C 99 34 10 86 00;
 St[7F9E]: D1 60 00 10 00 00 D2 D8 C1 9F 7F AC CC 11 C1 9F C0 00 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 00 01 00 22;

> 

Taky má vlastní stránku http://8bit.gilhad.cz//6809/Castor.html, která časem rozkošatí :D
Odpovědět