Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mój PseudoComputer na procesorze ATMega32

AWllen 07 Jul 2012 16:03 16045 31
Renex
  • Mój PseudoComputer na procesorze ATMega32

    Witam.

    Od razu przepraszam za jakość płytki drukowanej, dopiero uczę się je robić.

    Moją nową "zabawką" jest urządzenie, zwane "PseudoComputerem".

    Pomysł
    Wpadłem na pomysł urządzenia, które będzie posiadało coś na kształt interpretera. Wczytuje ono komendę w postaci kodu, następnie argumenty do niej i wykonuje zadanie. Szukałem znanych standardów kodów maszynowych, ale w końcu stworzyłem własny.

    Budowa i działanie
    Budowa płyty głównej jest nietypowa - nie ma tu pamięci RAM. Jest tylko pamięć EEPROM 24C256. Procesor (ATMega32) w trakcie działania programu wczytuje program bezpośrednio z EEPROM. Fakt, rozwiązanie jest wolne (przekaz przez I2C), ale po pierwsze nie miałem kostek, a po drugie, wymagałoby to większej ilości portów do stworzenia szyny adresowania. Mogłem jednak użyć RAMu dynamicznego - przyznaję.

    Mój PseudoComputer na procesorze ATMega32 Mój PseudoComputer na procesorze ATMega32 Mój PseudoComputer na procesorze ATMega32

    Po uruchomieniu urządzenia włącza się tryb Writing by RS232. Programowanie odbywa się poprzez wpisywanie po kolei bajtów programu. Aby wybrać adres pamięci wpisujemy 255 a potem pierwszy bajt i drugi. Dalej piszemy "bajt po bajcie". Pozwala to na szybkie programowanie. Programować można za pomocą komputera (tu trwają pracę nad programem) lub za pomocą zadajnika RS232, ale o tym zaraz.
    Pamięć EEPROM ma dwubajtową (jak już pisałem) deklarację adresu. Pierwszy bajt (0-127) definiuję "grupę" (jak ja to nazywam), a drugi (0-255) poszczególny adres. Grupa 0 jest zarezerwowana (tam mają być ustawienia ale póki co nie ma nic), a grupy 1-127 są dla programów. Możemy wpisywać wiele programów, a potem wybrać grupę, z którego chcemy uruchomić program. Każdy program musi zaczynać się komendą 1 i zaczynać się w 1 adresie swojej grupy. Przykładowo nie możemy zacząć programu w adresie 127/10, ale w 121/1 już tak. Programy mogą zajmować więcej niż 1 grupę i w wypadku przepełnienia dalszą część piszemy w następnej grupie.

    Jest też tryb Reading from IIC. Pozwala on "na sucho" sprawdzić bajty wpisane w pamięci i ewentualnie znaleźć błędy.

    Aby uruchomić program, wciskamy przycisk RUN (górny na płytce). Pojawia się prośba o wybranie adresu programu. Jeżeli program zaczyna się w adresie 5/1, wybieramy 5 za pomocą przycisku SET (dolnego). Wciskamy RUN i program się uruchamia.
    Program kończy komenda 0. Wyświetla się wtedy informacja End of program i wracamy z powrotem do trybu pisania programu.

    Mój PseudoComputer na procesorze ATMega32 Mój PseudoComputer na procesorze ATMega32 Mój PseudoComputer na procesorze ATMega32

    Interpreter i kod maszynowy.
    Interpreter powstał w BASCOMIe. Wsad (razem z menu i wszystkimi funkcjami) zajmuje 16% pamięci, co oznacza, że możemy użyć ATMegi16. Program wymaga dopracowania, więc go nie publikuję. Wczytuje on dane bezpośrednio z kostki EEPROM. w pamięci SRAM układu znajdują się bufor zmiennych używanych przez program (32 zmienne 8-bitowe)
    Kod maszynowy (jeśli tak można to nazwać) został opracowany przeze mnie. Działa on "najprościej, jak się da". Możemy tworzyć zmienne i na nich działać, pętlować program (przeskakiwać do danego adresu) i wykonywać operacje warunkowe. Możemy wyświetlać dane na wyświetlaczu LCD i korzystać z RS232. Pracuję też nad umożliwienie pracy z wejściami i wyjściami (by uzewnętrznić możliwości).
    Póki co, nie miałem kłopotów z pracą interpretera. Sam interpreter ruszył praktycznie "z kopyta"

    Zadajnik RS232
    Powstał na potrzeby PseudoComputera i umożliwia wprowadzanie komend. Zasada jest prosta: wprowadzamy cyfry (w systemie dziesiętnym) i wciskamy gwiazdkę by wysłać bajt. Siedzi tu procesor ATTiny2313. Podstawka została przylutowana bezpośrednio do pinów klawiatury. 2 diody (WRITE i ERROR - łatwo się domyśleć, która jest która) pokazują: zaczęto wprowadzać cyfrę i przepełnienie bajtu.

    Mój PseudoComputer na procesorze ATMega32 Mój PseudoComputer na procesorze ATMega32

    A oto film:




    Zapraszam do krytyki.

    Cool? Ranking DIY
    About Author
    AWllen
    Level 15  
    Offline 
    Has specialization in: mikrokontrolery, www
    AWllen wrote 198 posts with rating 59, helped 5 times. Live in city Olsztyn. Been with us since 2012 year.
  • Renex
  • #2
    leonow32
    Level 30  
    Takie minikomputerki mają wbrew pozorom ogromne zastosowanie, w szczególności w edukacji. Bardzo fajna konstrukcja. Napisanie własnego interpretera to też fajna rzecz. De facto możesz mówić, że stworzyłeś własny język programowania. Prosty, ale własny ;) Kiedyś zaczynałem od podobnego prostego komputerka, a pod koniec wyszła mi kobyła z 20 scalakami :) życzę dalszych sukcesów, bo możesz sporo osiągnąć.
  • #3
    AWllen
    Level 15  
    Quote:

    Takie minikomputerki mają wbrew pozorom ogromne zastosowanie, w szczególności w edukacji. Bardzo fajna konstrukcja. Napisanie własnego interpretera to też fajna rzecz. De facto możesz mówić, że stworzyłeś własny język programowania. Prosty, ale własny Wink Kiedyś zaczynałem od podobnego prostego komputerka, a pod koniec wyszła mi kobyła z 20 scalakami Smile życzę dalszych sukcesów, bo możesz sporo osiągnąć.

    Urządzenie oczywiście planuję rozwijać. Po pierwsze - lepsza płytka. Udało mi się też niedawno kupić 62256 (statyczny RAM), ale będę zastanawiał się nad użyciem dynamicznego (by oszczędzić portów).
    Język możemy rozwijać i dodawać nowe procedury by korelować program z nowymi urządzeniami. Już program przystosowany jest do obsługi wyświetlacza LCD 16*4.

    Co do inspiracji urzekł mnie cytat z książki o historii komputera:
    Dawna szkoła programowania w kodzie maszynowym odeszła do lamusa. Dziś programiści korzystają tylko z gotowych kompilatorów, przez co powstają opasłe objętościowo programy
    Muszę się z tym zgodzić. Mój programik liczący od 1 do 100 ma 30 bajtów.

    Quote:
    READY jak w Atari

    Mi się to kojarzy z Commodore 64.
  • #4
    Darektbg
    Level 21  
    Jeżeli chodzi o pseudokod to polecam maszynę RAM. 13 podstawowych komend przy użyciu których można zrobić bardzo dużo.

    Tutaj jest więcej informacji na ten temat, włącznie z programem do analizy
    http://www.szkup.com/?pid=praca_mgr
  • #5
    pogi13
    Level 14  
    Na bardzo podobną konstrukcję natknąłem się w którymś numerze EDW z 2001 lub 2002 roku. Ale i tak konstrukcja godna podziwu :)
  • #6
    rradi
    Level 19  
    Podoba mi się. Tylko pogratulować chęci.
    Zastanawia mnie tylko zastosowanie pamięci EEPROM, a mianowicie, czy nie ulegnie ona zbyt szybko zużyciu?
  • #7
    leonow32
    Level 30  
    AWllen wrote:

    Urządzenie oczywiście planuję rozwijać. Po pierwsze - lepsza płytka. Udało mi się też niedawno kupić 62256 (statyczny RAM), ale będę zastanawiał się nad użyciem dynamicznego (by oszczędzić portów).

    Dynamiczny RAM w AVR-ach to przerost formy nad treścią. Zamęczysz się tą "dynamiką", obsługę tego trzeba będzie zrobić w 100% programowo, a pożytku z tego nie będzie. Lepiej kup ATmega128, bo tam masz wyprowadzone magistrale adresową i danych i można do tego podłączyć SRAM bez żadnej filozofii. Zewnętrzny SRAM działa tak, jak wewnętrzna pamięć AVR-a (również SRAM :) ) i nawet można zapomnieć, że ta pamięć jest w innym scalaku. Po odpowiednim ustawieniu kompilatora wszystko robi się automatycznie, a od strony sprzętowej masz pełne wsparcie. Nawet nie trzeba wiedzieć, w jaki sposób ta pamięć działa! Jeżeli szukasz gotowca, to proszę bardzo: Link i Link.
  • #8
    Jimi Hendrix
    Level 19  
    no albo 8051 gdzie jak wiem w doświadczenia możesz mieć dowolną ilość RAMU.
    Widziałem gdzieś w Internecie nawet odtwarzacz mp3 na 8051 z pamięcią SIMM jako RAMem, oczywiście nie obyło się bez małego CPLD.

    Bardzo fajny temat. Takie projekty są pouczające BASIC itd, wstęp do prawdziwego programowania. Moim marzeniem jest zrobić platformę sprzętową i odpalić mój system operacyjny, o którym kiedyś mówiłem (JonOS), Rzecz jasna na 8088. Nie mogę tylko zgromadzić potrzebnych układów scalonych. Jakby ktoś miał Pc/XT do odsprzedania to jestem chętny.
    Ta architektura jest bardzo fajna, przez 16-bitowość przewyższa AVR i Z80. 16 bit na szynie 8 bit i 20 linii adresowych. Geniusze w tym Intelu.

    pozdrawiam
    Janek
  • Renex
  • #9
    RitterX
    Level 39  
    Dawno temu zbudowałm coś takiego na i8085+2864+6264+i8255+ 8.seg_LED x 9disp (CQYP95 z tego co pamiętam). Na znanym portalu aukcyjnym czasami bywa wystawiany CA80 na Z80.
    Jak rozumiem interpreter bezpśrednio tłumaczy kod na instrukcje? A może zrobiłeś maszynę wirtualną choćby taką jaka jest zaproponowana w jednej z aplikacji na stronie Atmela dla uC AVR?
    Co do pamięci RAM zdania, jak widzisz, są podzielone. Dodam od siebie, że EEPROMy mają na tyle dużą liczbę zapisów, że wydaje się ona zbędna a jedynie koplikuje płytkę PCB. Nie mniej to Twój projekt.

    @jimi Hendrix
    Zastanów się czy nie lepiej wziąć np. 80188XL (PLCC80) albo coś podobnego. Na znanym portalu aukcyjnym bywają. Nie będziesz musiał robić skomplikowanej płytki a będziesz miał już wszystkie niezbędne peryferia typu układ przerwań, timery/liczniki, zegar,... .
  • #10
    AWllen
    Level 15  
    Dziękuje za pozytywne opinie.

    @leonow32 dziękuje za porady i linki. Twój wkład będzie wykorzystany w następnych wersjach.
    Quote:
    Zastanawia mnie tylko zastosowanie pamięci EEPROM, a mianowicie, czy nie ulegnie ona zbyt szybko zużyciu?
    Póki co nie mam z nią problemów - program wczytuje się i odczytuje się bez zarzutów.
    Quote:
    Bardzo fajny temat. Takie projekty są pouczające BASIC itd, wstęp do prawdziwego programowania. Moim marzeniem jest zrobić platformę sprzętową i odpalić mój system operacyjny, o którym kiedyś mówiłem (JonOS), Rzecz jasna na 8088. Nie mogę tylko zgromadzić potrzebnych układów scalonych. Jakby ktoś miał Pc/XT do odsprzedania to jestem chętny.
    Tobie również życzę sukcesów, w przeciwieństwie do mnie musisz mieć ogromną cierpliwość w zbieraniu scalaków.
    Quote:
    Na bardzo podobną konstrukcję natknąłem się w którymś numerze EDW z 2001 lub 2002 roku. Ale i tak konstrukcja godna podziwu
    Jeżeli mógłby mi ktoś podrzucić skany. Z góry dzięki.

    Informuję również, że od jutra (poniedziałek 9 lipca) do 16 lipca (poniedziałek), ze względu na wyjazd (wreszcie ! :D ) nie będę miał dostępu do sieci WWW (a jednak się da :P) i nie będzie moich odpowiedzi na Wasze posty. Nie przestawajcie jednak i piszcie pytania - na wszystko postaram się odpowiedzieć.

    Pozdrawiam.
    AWllen
  • #11
    Anonymous
    Anonymous  
  • #12
    roll99
    Level 12  
    Witam

    Projekt ładnie wykonany, dużo pracy, pewnie dużo nauczył...tylko czy takiej funkcjonalności nie ma asembler "wbudowany" w uP?

    pozdrawiam Jurek
  • #13
    tmf
    Moderator of Microcontroller designs
    leonow32 wrote:
    AWllen wrote:

    Urządzenie oczywiście planuję rozwijać. Po pierwsze - lepsza płytka. Udało mi się też niedawno kupić 62256 (statyczny RAM), ale będę zastanawiał się nad użyciem dynamicznego (by oszczędzić portów).

    Dynamiczny RAM w AVR-ach to przerost formy nad treścią. Zamęczysz się tą "dynamiką", obsługę tego trzeba będzie zrobić w 100% programowo, a pożytku z tego nie będzie. Lepiej kup ATmega128, bo tam masz wyprowadzone magistrale adresową i danych i można do tego podłączyć SRAM bez żadnej filozofii. Zewnętrzny SRAM działa tak, jak wewnętrzna pamięć AVR-a (również SRAM :) ) i nawet można zapomnieć, że ta pamięć jest w innym scalaku. Po odpowiednim ustawieniu kompilatora wszystko robi się automatycznie, a od strony sprzętowej masz pełne wsparcie. Nawet nie trzeba wiedzieć, w jaki sposób ta pamięć działa! Jeżeli szukasz gotowca, to proszę bardzo: Link i Link.


    Jakkolwiek w ogólności masz rację, to w szczegółach jest różnie. XMEGA (która należy do 8-bitowych AVR) ma obsługę pamięci dynamicznej RAM (dokładniej SDRAM). Ale oczywiście to ma sens, jeśli tej pamięci miałoby być dużo, jeśli do 64-128 kB to istotnie lepiej wrzucić SRAM.
  • #14
    krzyskwas
    Level 9  
    mógł byś dać schemat ideowy tego pseudo computera?
  • #15
    hoozar
    Level 10  
    Jimi Hendrix wrote:

    Ta architektura jest bardzo fajna, przez 16-bitowość przewyższa AVR i Z80. 16 bit na szynie 8 bit i 20 linii adresowych. Geniusze w tym Intelu.


    Z jednej strony faktycznie pomysł genialny, bo można na tanich i ogólnodostępnych układach zrobić komputer z mocnym procesorem. Z drugiej strony - 16 bitów przepuszczone przez szynę 8 bitów - potrzeba 2x więcej czasu na dostęp do danych -> strata; adres składany z 16-bit segmentu i przesunięcia (co ciągnie się do dzisiaj, tylko w trochę innej formie) powoduje problemy z określeniem przez programistę "Gdzie ja jestem w pamięci????" itd itp...

    Dobra, narzekam i narzekam, a sam miałem wiele frajdy grzebiąc pod nagim DOS-em w assemblerze na 386 :-) W każdym razie życzę powodzenia w składaniu sprzętu i pozdrawiam.

    PS. Znalazłem ostatnio w szafie 386DX 25MHz i mnóstwo kostek statycznego RAM z cache z płyt 486. 486 też mam kilka sztuk. Chyba zbuduję sobie coś na nim.
  • #16
    Jimi Hendrix
    Level 19  
    No rzeczywiście przesunięcie i podział pamięci na 64kb segmenty (wynalazek Polaka btw) może być denerwujący. Ale x86 w asemblerku się bardzo fajnie programuje. Oczywiście tym 16-bitowym, bo wprowadzony od 286 tryb wirtualny, po mimo możliwości adresowania całej pamięci, a nie tylko 1 Mb jest naprawdę trudny w programowaniu. Ale po co więcej pamięci? 16 bits is enough :)
    Na Windowsie albo Linuksie programowania w asemblerze bym się nie podjął...

    Zaletą takiego komputerka byłaby możliwość prostego podpięcia kart na ISA, DMA bym sobie podarował, bo i tak pewno bym korzystał wyłącznie z pamięci stałej i chyba w XT jeszcze DMA jest do odświeżania pamięci używany jeden kanał, mam od cholery kości 64kb z 486 one są statyczne i mają bardzo krótki czas dostępu. Czyli zostaje nam timer 8254, IRQ 8259, dzielnik zegaru na 3 8284. I to wszystko. Jeszcze 8228 jeśli chcemy 8088 w trybie max użyć chociaż ja naprawdę nie widzę sensu. Źródła BIOSu XT są w Internecie. Karta VGA ma własny BIOS, który zastępuje procedury Int 10h przystosowane do oryginalnej MDA I CGA.
    Najlepiej by było to wykonać w postaci karty ISA właśnie, tak jak przemysłowe komputery były, kartę ze slotami ISA też gdzieś mam, dałoby się kartę z prockiem, VGA, multi I/O na com lpt i dyskietki. No i można jeszcze DS12887 dorzucić jak nam na zegarze zależy i NVRAM.
    I można pograć w Alley Cata albo Paratroopera hahahahha

    No właśnie i jeszcze jakieś 8051 albo AVR do klawiatury. Śmieszne że miałby mięcej MIPSów niż CPU...
  • #17
    hoozar
    Level 10  
    Jimi Hendrix wrote:
    Ale x86 w asemblerku się bardzo fajnie programuje. Oczywiście tym 16-bitowym, bo wprowadzony od 286 tryb wirtualny, po mimo możliwości adresowania całej pamięci, a nie tylko 1 Mb jest naprawdę trudny w programowaniu. Ale po co więcej pamięci? 16 bits is enough :)

    <rotfl> Coś mi to przypomina: 640K ought to be enough for anybody :-) Nawet na 286 możesz skorzystać z tylko z RealMode i nie musisz używać Protected, który na tym procu jest akurat mocno nieprzyjemny. Ale na 386 już jest bardziej sensowny.

    Jimi Hendrix wrote:

    Na Windowsie albo Linuksie programowania w asemblerze bym się nie podjął...

    Nie przesadzaj, nie jest tragicznie. Pod linuxem składnia jest może lekko zakręcona, ale nie musisz pisać w gcc, jest jeszcze NASM, gdzie składnia jest podobna do MASM. Programowałem x86 pod Windowsem w asm (MASM) i nie było tragicznie, wystarczy skorzystać z API Windowsa i jest w miarę nieźle. Popełniłem też jakieś liczenie w zmiennym przecinku na koprocesorze w asm i wyszło nawet nieźle (2.5x szybciej liczył niż program w C).

    Jimi Hendrix wrote:

    Zaletą takiego komputerka byłaby możliwość prostego podpięcia kart na ISA, DMA bym sobie podarował, bo i tak pewno bym korzystał wyłącznie z pamięci stałej i chyba w XT jeszcze DMA jest do odświeżania pamięci używany jeden kanał, mam od cholery kości 64kb z 486 one są statyczne i mają bardzo krótki czas dostępu. Czyli zostaje nam timer 8254, IRQ 8259, dzielnik zegaru na 3 8284. I to wszystko. Jeszcze 8228 jeśli chcemy 8088 w trybie max użyć chociaż ja naprawdę nie widzę sensu. Źródła BIOSu XT są w Internecie. Karta VGA ma własny BIOS, który zastępuje procedury Int 10h przystosowane do oryginalnej MDA I CGA.
    Najlepiej by było to wykonać w postaci karty ISA właśnie, tak jak przemysłowe komputery były, kartę ze slotami ISA też gdzieś mam, dałoby się kartę z prockiem, VGA, multi I/O na com lpt i dyskietki. No i można jeszcze DS12887 dorzucić jak nam na zegarze zależy i NVRAM.

    Jeśli jesteś zainteresowany, to Timer, IRQ, DMA mam kości z rozbiórki starych płyt, ale nie wiem czy działają. Jeśli ci zależy to mogę poszukać. Mam też kilka płyt 286 i jakieś pamięci do nich, ale to sam zdecyduj czy bawisz się w montaż czy tylko podmienisz BIOS-a.

    Jimi Hendrix wrote:

    I można pograć w Alley Cata albo Paratroopera hahahahha

    W Alley Cata grałem namiętnie, pamiętam....
  • #18
    RitterX
    Level 39  
    Proponowałbym rozpocząć tę "podróż" od rozwiązania Kolegi AWllen. Zrobienie komputera na 286,... na 2 warstwowej PCB to mocno ryzykowny pomysł. Dlatego zasugerowałem i80188. Na starych płytach 286,... są specjalizowane układy do obsługi pamięci i magistrali a ich pdf-ów ze świecą szukać. Budowa na "surowym" 486 płyty jest jeszcze trudniejsza. Sugerowałbym poczytać o tym jak jest obsługiwana w nim fizycznie pamięć i jaką ma szerokość magistrala. Można użyć "gotowego" 486 z praktycznie wszystkimi peryferiami. Są dostępne układy SOC. Ale znowu trzeba go gdzieś kupić i to jednostkowo.
    Sensownym wydaje się, oprócz powyższego projektu, użycie układu Parallax Propeller. Inaczej mimo poniesienia kosztów nic nie powstanie w sensownym czasie. Komputer buduje się po to by coś robił a nie po to by powstał.
  • #19
    hoozar
    Level 10  
    RitterX wrote:
    Na starych płytach 286,... są specjalizowane układy do obsługi pamięci i magistrali a ich pdf-ów ze świecą szukać.

    Wbrew pozorom nie jest z tym najgorzej. 286 od 8086/88 nie różnił się aż tak bardzo od strony układów peryferyjnych. "Na dzień dobry" można założyć, że taki chipset ma w sobie kombinację wszystkich peryferiów od 8086, czyli 8254, 8237, 8259 + RTC + czasami klawiatura na 8041 + sterownik SDRAM (nie zawsze). Co prawda, te układy przeważnie są mniej lub bardziej rozbudowane w porównaniu z oryginałem i bez dokumentacji nie uzyska się z nich 100% możliwości, ale działać będzie. Jedyny problem to końcówkologia...

    Przykład: chipset dla procesora 286, UMC UM82C206L, zawiera w sobie 2 x 8237, 2 x 8259, 1 x 8254, 1 x 146818 (RTC) + kilka pomniejszych układów spinających to w całość. A żeby nie być gołosłownym: Link do datasheet-a Jimi Hendrix gdyby był zainteresowany kością, to mam 1 szt wyjętą z jakiejś płyty. Mnie raczej do niczego się nie przyda, więc mogę oddać, niech posłuży dla rozwoju czyjejś pasji.

    RitterX wrote:
    Zrobienie komputera na 286,... na 2 warstwowej PCB to mocno ryzykowny pomysł.

    2 warstwy to nie wyprawa w Himalaje, nie przesadzajmy. Dla początkującego może to stanowić pewien problem, ale z drugiej strony, czy nie jest problemem zalutowanie Atmega w TQFP44 na jednej tylko warstwie? Poza tym 2 warstwy raczej nie robi się w domu na Positivie pod kwarcówką.
    RitterX wrote:
    Budowa na "surowym" 486 płyty jest jeszcze trudniejsza.

    Na 486 raczej nie robiłbym czegoś od zera, ten procesor jest trochę za bardzo rozbudowany jak na moje potrzeby/możliwości/wiedzę/ilość wolnego czasu. Ale 386 jak najbardziej. Procesor ma standardowe wyprowadzenia: dane, adres, sygnały sterujące, zasilanie. Sterowanie trochę może nietypowe, ale za pomocą kilku bramek można zrobić standardowe sygnały #MEM_RD, #MEM_WR, #IO_RD, #IO_WR. Znalazłem ostatnio na sieci dokument Intela z przykładowym systemem na 386. Oprócz sterownika pamięci cache 82385 (który zamierzam pominąć w swoim projekcie) cała reszta oparta jest na zestawie 82xx dla 8086, zestawie kostek pamięci SRAM i SDRAM i kilku układach PAL, które załatwiają logikę sterowania. Jak znajdę to jutro w pracy to podam linka.

    Poza tym, nie bójcie się wyzwań. Ludzie, którzy zaprojektowali te procesory nie są wcale bogami czy geniuszami na miarę noblistów, żyją tu i teraz; tak samo jak Wy jedzą, śpią i pracują. Twórzcie, wymyślajcie, projektujcie, budujcie, jak się nie uda, to jeszcze raz, wprowadzić poprawki i uruchomić. Jak czegoś nie wiecie, pytacie na Elektrodzie, przeważnie znajdzie się ktoś kto wie i podpowie rozwiązanie. To naprawdę jest proste, tylko nie wolno się bać porażki. Jeszcze jedno: za 1 razem na pewno nie zadziała. Nie ma bata. Na 99.99% nie zadziała. Chyba że to zasilacz na 7805. Ale i tak może się okazać, że stab źle przylutowany i właśnie się usmażył. Żeby zadziałało czasami potrzeba naprawdę wielu prób i zmian. Ale jak w końcu działa wg założeń - frajda jest naprawdę niesamowita.

    Jeśli chodzi o mnie, to ostatni układ elektroniczny zmontowałem ok. 15 lat temu na 8051. I wcale mnie nie przeraża fakt, że teraz projektuję układ na 386. W pracy mam do zaprojektowania układ na DSP (nawet nie wiem jaki procesor tam wstawię, 3 dzień siedzę nad datasheetami, chyba wybiorę TI jeśli będzie w miarę dostępny w kraju), za tydzień składam i uruchamiam inny układ na ARM Samsunga i naprawdę wcale mnie to nie przeraża. Jeśli tylko zadziała to wszystko wg założeń - to będzie naprawdę coś wspaniałego.
  • #20
    Jimi Hendrix
    Level 19  
    hoozar: jakbyś mógł mi podesłać te płyty z 286 byłbym bardzo wdzięczny, w szczególności jeśli mają peryferia, a nie tylko jeden czipset. Zresztą w podmianę BIOSu też bym się chętnie pobawił.
    Sam mam płytę z oryginalnego IBM PC/AT, w której tylko podmieniłem RTC na DS12887, ten ze zintegrowaną bateryjką. Tam właśnie nie ma czipsetu, wszystkie peryferia są w postaci pojedynczych kostek. Jest na niej wszystko co potrzeba do zrobienia kompa na 8086, no ale żal mi tej płyty po prostu. Przez lata nazbierałem trochę tych "śmieci" - sound blastera 1.0 (8-bitowego, druga po AdLibie karta z syntezą FM, do tego 8 bitowy dźwięk :D), parę kart graficznych VGA 8 bitowych, multi I/O i inne tam. Karty ISA są na tyle fajne, ze swoją prostotą, że można je do jakiegoś mikrokontrolera podłączyć, sam łączyłem do 8051.
    Jest jeszcze prostsza wersja XT - IBM PCjr, bez DMA, z odświeżaniem pamięci na NMI 8088. Do tego IBM daje wszystkie schematy, kody źródłowe BIOSów zaczynając od IBM PC a kończąc na XT.
    hoozar, jeśli naprawdę nie potrzebujesz tych płyt, peryferiów itd, to odezwij się na priva do mnie, napiszę Ci mój adres.
    Podziwiam Twój zapał i chęć robienia czegoś na 386. 32-bitowa magistrala danych, hmm, to mi "cuchnie" już 4 warstwową płytką. Ja bym mojego 8088 zrobił najchętniej na wire-wrap ale nie mam zielonego pojęcia gdzie można w Polsce kupić te płytki i te śmieszne narzędzie. Jako okablowanie by pewno kynar wystarczył.
    Umiem programować GALe, programator do nich też mam, także na pewno nie zejdę tak nisko by całą logikę, dekodowanie adresów na bramkach robić.
    Nie zapomnij też, że musisz jeszcze pewno sam całego BIOSa napisać do tego 386.

    Co do asemblera, ja od początku w NASM piszę, bardzo fajna jest ta składnia i obsługuje wszystkie procki od 8086, turbo mi jakoś nigdy nie podpasował, z tymi deklaracjami itd.

    Do biosa Ci polecam NVRAM jakiś dallasa, nie wiem czy jeszcze wysyłają próbki, ja mam kilka DS1230 i są po prostu super, 10 lat utrzymywania danych po odłączeniu zasilania, bez potrzeby bawienia się z UV. Do tego, chociaż że są pinowo kompatybilne z 62256 możesz je zamiast 27128 wsadzić, tylko o ile pamiętam przed wsadzeniem programujesz wtedy dolne 16 kb.

    pozdrawiam

    Dodano po 1 [godziny] 47 [minuty]:

    286 rzeczywiście nie różnił się za bardzo od 8088 pod względem peryferiów, część z nich miał po prostu zdublowane - 2 kontrolery przerwań (połączone w dosyć durny sposób by zachować wsteczną kompatybilność), 2 kontrolery DMA, timer został jeden, 2 kości z BIOSEM - jedna dla młodszej, druga dla starszej części słowa. No i oczywiście słynna obsługa A20 władowana do kontrolera klawiatury.

    hoozar: ja nie pamietam już dokładnie, ale czy czasem w pc/xt nie było 8042 do klawiatury? tylko 8255 i rejestr przesuwny? Mam klawiaturę Olivetti z XT jakiegoś i nie wiem zupełnie jak się zabrać za jej obsługę, ma 9 pinowy port D-SUB. Do tego dwukierunkową komunikację z komputerem. Chciałbym zrobić jakąś przejściówkę na małym uC z niej na AT albo port szeregowy i sobie jej na co dzień używać bo jest naprawdę porządnie zrobiona.

    Pozdrawiam
    Janek

    Dodano po 16 [minuty]:

    sprawdziłem w "8088 personal computer introductory guide" i rzeczywiście do obsługi klawy jest 74LS322 i 8255, który dodatkowo steruje głośniczkiem odczytuje dip-switche i informuje o błędach parzystości.
    super jest ta książka, taka niebieska. nie do pomyślenia by w dzisiejszych czasach ktoś schematy urządzeń umieszczał. no ale na tym polegał sukces IBM PC - open hardware, patented BIOS hehe

    pozdrawiam po raz trzeci
  • #21
    hoozar
    Level 10  
    Jimi Hendrix wrote:
    hoozar: jakbyś mógł mi podesłać te płyty z 286 byłbym bardzo wdzięczny, w szczególności jeśli mają peryferia, a nie tylko jeden czipset. Zresztą w podmianę BIOSu też bym się chętnie pobawił.

    Sprawdzę w weekend dokładnie co mam i odezwę się w poniedziałek z listą tego, co mogę ci podesłać. Po prostu muszę strych przekopać ;-)
    Jimi Hendrix wrote:
    hoozar, jeśli naprawdę nie potrzebujesz tych płyt, peryferiów itd, to odezwij się na priva do mnie, napiszę Ci mój adres.
    Jedną czy dwie pewnie sobie zostawię, reszta którą znajdę jest twoja :-)
    Jimi Hendrix wrote:
    Podziwiam Twój zapał i chęć robienia czegoś na 386. 32-bitowa magistrala danych, hmm, to mi "cuchnie" już 4 warstwową płytką.

    Myślę, że zmieszczę się na 2 warstwach, to naprawdę nie jest tak bardzo rozbudowany procesor, 132 końcówki tylko :-)
    Jimi Hendrix wrote:
    Umiem programować GALe, programator do nich też mam, także na pewno nie zejdę tak nisko by całą logikę, dekodowanie adresów na bramkach robić.
    Nie zapomnij też, że musisz jeszcze pewno sam całego BIOSa napisać do tego 386.

    Bez przesady, bramki to tylko przykład. Oczywiście że logikę będę robił na czymś większym. Generalnie jednym z założeń projektu jest wykorzystanie tego, co mam pod ręką, o ile będzie sprawne.
    Wiem, że czeka mnie napisanie systemu. Nie będzie to jednak klasyczny BIOS, a raczej coś w stylu Embedded. Nie będę też odtwarzał PC-ta, tylko własne rozwiązania wrzucę.
    Jimi Hendrix wrote:
    Do biosa Ci polecam NVRAM jakiś dallasa, nie wiem czy jeszcze wysyłają próbki, ja mam kilka DS1230 i są po prostu super...

    Mam kilka kostek 28(cośtam) Intela z wylutu, prawdopodobnie je zastosuję (bo mam :-) ), ale dzięki za podpowiedź.
    Jimi Hendrix wrote:
    ja nie pamietam już dokładnie, ale czy czasem w pc/xt nie było 8042 do klawiatury? tylko 8255 i rejestr przesuwny? Mam klawiaturę Olivetti z XT jakiegoś i nie wiem zupełnie jak się zabrać za jej obsługę, ma 9 pinowy port D-SUB.

    Tego nie pamiętam, mój XT miał już chipset ze wszystkimi peryferiami w jednej kości (oprócz pamięci oczywiście).
    Jimi Hendrix wrote:
    Chciałbym zrobić jakąś przejściówkę na małym uC z niej na AT albo port szeregowy i sobie jej na co dzień używać bo jest naprawdę porządnie zrobiona.

    Mam nadzieję, że ci się uda. Pamiętam swoją klawiaturę od XT, podbita blachą od dołu, praktycznie nie do rozbicia, nie to co współczesne plastiki...


    Odnośnie mojej obietnicy z wczoraj: 33 MHz 386 System Design Considerations.pdf. Opisane co i jak plus załączniki ze schematami. Polecam lekturę.
  • #22
    Jimi Hendrix
    Level 19  
    Ok dzięki wielkie.

    132? No ale 32 bitowa szyna danych adresów ile nie pamiętam, chociaż i tak pewno wszystkich nie musisz wykorzystać. Chętnie zobaczę projekt albo zdjęcie tej płytki, bo jak zmieścisz 32 bitowy komp na 2 warstwach to naprawdę wielki szacunek.

    Planujesz by to pracowało w trybie rzeczywistym czy wirtualnym? Wiem, że w rzeczywistym możesz i tak korzystać z komend 32-bitowych, ale w wirtualnym za to cały RAM Twój.

    No fajna klawiatura, nie wiem czy nie wywalę tego mikrokontrolera w środku i nie wsadzę innego ze swoim programem. Szkoda, że nie potrafię programować 8042 i nie mam programatora, w tej klawiaturze jest wersja w ceramicznej obudowie z okienkiem, mam lampkę UV to by znacznie ułatwiło robotę. A nie mam pojęcia czy jakiś uC jest pinowo kompatybilny z tym. starczyłoby gdyby kompatybilne w sumie tylko zasilanie było.

    Pozdrawiam i dziękuję
  • #23
    hoozar
    Level 10  
    Jimi Hendrix wrote:
    Ok dzięki wielkie.

    132? No ale 32 bitowa szyna danych adresów ile nie pamiętam, chociaż i tak pewno wszystkich nie musisz wykorzystać. Chętnie zobaczę projekt albo zdjęcie tej płytki, bo jak zmieścisz 32 bitowy komp na 2 warstwach to naprawdę wielki szacunek.

    Jak zrobię/opracuję to wrzucę na Elektrodę. Prawdopodobnie pojawi się też w DIY, ale dopiero jak zadziała.
    Jimi Hendrix wrote:

    Planujesz by to pracowało w trybie rzeczywistym czy wirtualnym? Wiem, że w rzeczywistym możesz i tak korzystać z komend 32-bitowych, ale w wirtualnym za to cały RAM Twój.

    Start w rzeczywistym, potem chroniony.
    Jimi Hendrix wrote:
    Szkoda, że nie potrafię programować 8042 i nie mam programatora...

    8042 jest - w pewnym skrócie myślowym - okrojoną wersją 8051. Podobne rozkazy, tylko mniej, podobne peryferia, tylko mniej i o mniejszych możliwościach. Inna rzecz to jakiś kompilator do tego, nigdy się nie interesowałem tym, ale może jest gdzieś na sieci. BTW. jedna z płyt ma wersję 8742, co sugerowałoby (o ile się nie mylę) EPROM w środku. Może dałoby się go przeprogramować?


    Odnośnie płyt: w tym miejscu są zdjęcia tego, co znalazłem. Mam ok. 11 sztuk płyt 286 małych, 3 sztuki 286 "dużych" - jedna ma koprocesor 287!!, 2 płyty 8088 (chyba to cię najbardziej zainteresuje, każdy IC osobno, 8239, 8259, 8253) - jedna wg. naklejonej informacji ma padnięty sterownik klawiatury, 2 płyty 486, z czego jedna z procesorem i pamięci "krótkie SIMM-y" do 286.

    UWAGA!! Nie wszystkie pamięci pasują do wszystkich płyt. Jeśli ktoś będzie chciał płytę z pamięcią, postaram się dobrać tak żeby pasowało, ale nie obiecuję wszystkim, że się uda.

    Niektóre płyty 286 posiadają pamięć na pokładzie, inne nie. Większość tych płyt i pamięci działała, ale w tej chwili nie mam możliwości sprawdzenia, czy działają nadal. Uprzedzam również rzetelnie, że z powodu miejsca i sposobu przechowywania płyty mogą mieć podgięte piny do zworek. Z powodu wieku przy bateriach jest bardzo nieciekawy nalot, należy się liczyć z możliwością uszkodzenia druku w tym miejscu.

    Jeśli ktoś coś z tego potrzebuje, to moje warunki są następujące:

    1. Zamówienia składamy na elektroda.pl - kto pierwszy ten lepszy (żeby nie było dlaczego ja nie dostałem a on dostał).
    2. Płyty są w czterech grupach (286 małe, 286 duże, 8088, 486). Proszę napisać, kto ile z danej grupy bierze, tak samo ile pamięci (kostki przeważnie po 256kb).
    3. Ponieważ nie jestem instytucją dopłacającą do interesu, paczkę opłacacie sami. na prv podam nr konta do przelewu, ewentualnie sami zamawiacie sobie kuriera - można np. tutaj, adres na prv. Paczki wyceniam wg. wagi, przesyłka Pocztą Polską.
    4. Jeśli ktoś przy okazji ma życzenie "dać na tacę" na nowy aparat (zbieram na Canona EOS :D ) - chętnie przyjmuję wszystkie datki :-)

    Uwaga do admina/moderatora: Nie jestem pewien, czy w tym momencie ten post nie powinien wylądować w dziale kupię/sprzedam. Jeśli tak, proszę o przeniesienie i z góry przepraszam za kłopot.
  • #25
    AWllen
    Level 15  
    Witam.

    Z tego, co widzę, rozpętała się głęboka rozmowa na temat tworzenia własnych komputerów. Bardzo fajnie, że tyle ludzi się takimi tematami interesuję.
    Quote:
    mógł byś dać schemat ideowy tego pseudo computera?

    Pracuję nad nim, być może już dziś wrzucę.
  • #26
    leonow32
    Level 30  
    Wszystko fajne, ale nie wiem czy jest sens robić komputerki w oparciu o takie zabytki jak 286 i inne starocie. Mnóstwo czasu na to stracicie, a właściwie do niczego to się nie przyda. Myślę, że lepiej się wziąć za AVR albo AVR32 czy jakieś ARMy, STM, LPC. To jest przyszłość i czas poświęcony na komputer z takim układem będzie wykorzystany trochę bardziej owocnie.
  • #27
    AWllen
    Level 15  
    Witam
    Mam schemat. Zrobiony w KiCADzie i gdy eksportowałem do formatu PostScript "przebarwiła się w praniu" ATMega32.
    Przepraszam że dopiero teraz, ale siła wyższa (brak prądu).
  • #28
    leonow32
    Level 30  
    Odnoście Kicada, to lepiej rozbić połączenia przy pomocy etykiet, bo jak ten schemat Ci się rozrośnie to zrobi się taki labirynt, że sam się pogubisz ;)

    Ten LCD bez nazwy to HD44780? Lepiej dać regulację kontrastu przy pomocy potencjometru. Kondensator C5 220uF daj przed stabilizatorem a nie za nim. AREF łączy się do masy przez kond 100n.

    Przy okazji polecam instrukcja do programu Kicad gdzie znajdziesz biblioteki symboli narysowane zgodnie z normami obowiązującymi w naszej strefie klimatycznej ;)
  • #29
    AWllen
    Level 15  
    Quote:

    Ten LCD bez nazwy to HD44780? Lepiej dać regulację kontrastu przy pomocy potencjometru.

    Tak. Ten sam, który najczęściej współpracuje z AVRami.
    Quote:

    Kondensator C5 220uF daj przed stabilizatorem a nie za nim.

    Da się poprawić. Na płytce jest miejsce na niego przed 7805.
    [/quote]
    Kondensator C5 220uF daj przed stabilizatorem a nie za nim.
    Quote:

    AREF łączy się do masy przez kond 100n

    A nie przypadkiem do plusa (ADC nie jest używane)?
  • #30
    hans512
    Level 15  
    Znakomite.
    Gdybys podpial i obsluzyl do tego klawiature alfa numeryczna to moglbys napisac sobie interpreter fortha i miec naprawde uzyteczny komputer.

    Naprawde ciekawy projekt i chetnie zobaczylbym kod zrodlowy interpretera :)