Program monitora (albo Basic) do 6800

Kolejne pytanie związane z tematyką retro. :) Jakiś czas temu zacząłem budować modułowy komputer na 6502: płyta z CPU i pamięciami + dodatkowe płytki z różnymi peryferiami. Projekt jest już właściwie na ukończeniu - udało mi się uruchomić większość układów i przeportować na to EhBasica, który pełni funkcję "systemu operacyjnego".

W międzyczasie z ciekawości zbudowałem alternatywną płytę CPU, wykorzystującą procesor MC6802. Ze stroną sprzętową nie było problemu - udało mi się napisać procedury do obsługi najważniejszych peryferiów. Bardziej problematyczne okazało się znalezienie do tego "systemu operacyjnego". Z tego co widzę nie ma niczego porównywalnego do EhBasica.

Trafiłem na MicroBasica z 1976 roku, ale po przeglądnięciu kodu źródłowego widzę, że został on napisany do pracy na jakimś innym systemie z monitorem zapisanym w ROM-ie. W jego kodzie znajdują się ustawione na sztywno adresy jakichś procedur oraz (prawdopodobnie) zmiennych. Pomimo eksperymentów nie udało mi się go zmodyfikować w ten sposób, aby dział jako samodzielny program, startujący z ROM-u po uruchomieniu komputera.

Zmieniam więc podejście i szukam czegoś prostszego. Czy ktoś mógłby polecić jakiś prosty program Monitora, dający się łatwo dostosować do pracy na dowolnym komputerze opartym na 6800, po ustawieniu adresów (początek RAM-u, stos, lokalizacja w EPROM-ie) oraz podstawowych procedur odpowiedzialnych za komunikcję (inicjalizacja UART, pobranie znku, wysłanie znaku)?

Reply to
Atlantis
Loading thread data ...

Czas zapomniec o starociach :-)

Ciekawe czy OS9 jest jeszcze dostepny

formatting link
A moze Altair 680 ?
formatting link
Ale ... moze posadz Forth :-)

Wiele tych procedur w ROM pewnie nie uzywal.

J.

Reply to
J.F

poniedziałek, 16 sierpnia 2021 o 10:56:43 UTC-5 Atlantis napisał(a):

Nie znam takowego poza tym co moglbys wygrzebac z starych komodorkowych romow/cartrige. Ja bym chyba wolal sobie taka platforme nieco unowoczesnic i spiąć z PC aby robic dewelopment. Jak sobie bys ogarnal cos na miare actionreplay-a sterowanego z PC to mialbys wygodniej i szybciej. Szczegolnie ze mozesz sobie i zegar odpinac i masz kontrole nad dostepem do pamieci itp. Ale to inne podejscie i moze ci nie pasowac.

Co do systemu operacyjnego to akurat nie jest az takie trudne jak patrzysz na funkcjonalnosc basica. Byle dobrze sobie dobrac ramy jak bedziesz kodowac (basic vs ciscovy ios vs cos ala rest api) Daj znac co ci sie wykluło.

Reply to
ptoki

Projekt hobbystyczny, bez jakiegokolwiek praktycznego przeznaczenia. ;)

Zbyt nowoczesne. ;) MC6802 nie uruchomi kodu napisanego pod MC6809.

Finalnie udało mi się znaleźć i uruchomić monitor dla 6800. Konkretnie ten:

formatting link
Po dostosowaniu dresów i napisaniu procedur I/O ruszył właściwie bez problemu.

Może teraz faktycznie spróbuję zintegrować w EPROM-ie jeszcze jakiś prosty BASIC. :)

Reply to
Atlantis

Nie ta rodzina procesorów. :) W Commodore pracowały układy MOS6502, w moim komputerku siedzi Motorola MC6802. One nie są kompatybilne na poziomie kodu binarnego, architektury ani nawet asemblera, chociaż akurat asemblery mają dość podobne.

To dość oczywiste. Na dobrą sprawę nikt już nie rozwija oprogramowania dla komputerów retro na komputerach retro. Wszystko jest pisane na współczesnych pecetach i budowane za pomocą cross asemblerów/kompilatorów, a następnie testowane na emulatorach. Dopiero finalnie uruchamia się to na oryginalnym sprzęcie. W tej chwili komputer pracuje na terminalu szeregowym, ale finalnie dostanie klawiaturę AT i ekran (kompozytowe wyjście wideo), a RS232 będzie służył jedynie do ładowania softu. Jak mi starczy samozaparcia, to spróbuję dodać jakąś prostą obsługę karty CF. :)

Reply to
Atlantis

Powodzenia!

Swoja droga to ciekawe ze zeszlo jakies 30-40 lat aby hobbysta mogl samodzielnie zrobic to co kiedys robila cala forma albo zespol wysoko kwalifikowanych fachowcow.

Reply to
ptoki

Wręcz przeciwnie. Te pierwsze komputery były właśnie budowane przez pojedynczych pasjonatów, z części dostępnych na rynku. Bardzo często zresztą jedna osoba projektowała hardware i pisała software. Steve Wozniak sam zaprojektował Apple-1, napisał WozMon i interpreter Basica dla tego systemu. Większe zespoły zaczęły być potrzebne dopiero wtedy, gdy trzeba było budować komputery z customowymi układami scalonymi, a do tego wyrobić się z premierą przed najbliższym sezonem świątecznym. ;)

Reply to
Atlantis

Ale ponoc podobne na poziomie nozek - wstaw 6502 :-)

J.

Reply to
J.F

Zrob na czyms wpolczesnym :-)

Moze da sie przerobic :-)

J.

Reply to
J.F

Nie. One MIAŁY być kompatybilne pinowo. A dokładniej kompatybilna pinowo z 6800 miała być wersja 6501, rozwijana równolegle przez MOS. Układ nigdy jednak szybko wycofano z produkcji, bo Motorola wytoczyła proces. Obecnie ciężko go dostać i do tanich nie należy.

Procesor 6502 jest z grubsza podobny do 6800, ale występuje kilka różnic wymagających przerabiania projektu płytki. Tak właśnie powstał mój komputerek na 6800 - zacząłem od podobnego projektu na 6502 i po jakimś czasie uświadomiłem sobie, że tylko nieznacznie modyfikując PCB będe mógł zrobić płytkę procesorową dla 6802.

W ramach ciekawostki można także dodać, że płytka do Apple-1 została zaprojektowana przez Wozniaka w sposób uniwersalny, pozwalający na jej odpalenie z 6800 (wystarczy zostawić kilka otwartych zworek, wlutować układ generatora dwufazowego sygnału zegarowego, a także włożyć jeden dodatkowy układ scalony w podstawkę). Prawdopodobnie współzałożyciel Apple do końca nie był pewien jaki procesor zostanie użyty, albo chciał pozostawić te decyzję użytkownikom (pierwotnie komputer miał być sprzedawany w formie kitów). Ostatecznie jednak wszystkie egzemplarze lutowane w garażu miały procesor 6502, a sterujący nim monitor został napisany pod ten procesor. Dopiero w ostatnich latach paru pasjonatów zaczęło budować repliki oparte na tej alternatywnej architekturze.

Reply to
Atlantis

Ok, na chwilę obecną mam już działający monitor z funkcją deasemblera oraz ładowanie kodu z plików S19 po porcie szeregowym. Teraz jeszcze tylko przydałby się jakiś działający interpreter Basica. ;)

Reply to
Atlantis

Użytkownik "Atlantis" napisał w wiadomości grup dyskusyjnych:611a8ab9$0$29057$ snipped-for-privacy@news.neostrada.pl...

[ciach fajne tematy]

Szacun kurde :-)

Reply to
invalid unparseable

Raczej nie o to chodzi.

Reply to
invalid unparseable

Dzięki. ;) Mały update. Udało mi się uruchomić TSC MicroBasic. Działą po załadowaniu do RAM-u. Niestety okazuje się, że program został napisany w ten sposób, że nie da się go odpalić z EPROM-u (zawiera smomodyfikujący kod). Z jakiegoś powodu nie chce też działać po przekopiowaniu z EPROM-u do RAM-u.

Reply to
Atlantis

Kolejne pytanie w tym temacie. Mianowicie czy ktoś z was wie/pamięta jak w asemblerze zapisywało się kompletny stan systemu na stosie? Chodzi mi o zapisanie wszystkich rejestrów, wliczając w to rejestr flag.

Kontekst: Przenoszę właśnie swój kod obsługi ekranu CRT (za pomocą układu TMS9918) z innego projektu, opartego na 6502. Na chwilę obecną kod działa prawidłowo, gdy załaduję go z pliku S19 i uruchomię z RAM-u. Podstawową rolę w tym kodzie pełni procedura VDPPUTC, która po wywołaniu wrzuca na ekran znak ASCII, którego kod znajduje się w rejestrze A. Jednocześnie pilnuje lokalizacji kursora, realizuje przewijanie ekranu itp.

Procedura działa poprawnie z RAM-u. Problem zaczął się, gdy chciałem przenieść ją do EPROM-u i wywołać z wnętrza monitora, aby znaki wysyłane przez RS232 (główny interfejs użytkownika) były jednocześnie wysyłane na ekran.

Niestety, po dodaniu tego kawałka kodu monitor przestaje działać stabilnie - wysyła echo na RS232, znaki pojawiają się też na ekranie, ale nie ma żadnej reakcji na komendy. Po jakimś czasie wpada zresztą w nieskończoną pętlę...

Pierwsza teoria o jakiej pomyślałem to myśl, że coś wewnątrz VDPPUTC nadpisuje któryś z rejestrów lub którąś z flag, potrzebnych w dalszej części kodu. Próbuję zrzucać na stos rejestr B oraz zapisywać X do osobnej lokalizacji w pamięci (nie widzę opcji wysłania go na stos) ale nigdzie nie widzę opcji zrobienia tego z rejestrem flag.

Reply to
Atlantis
2021-08-28 o 19:14 +0200, Atlantis napisał:

PUSHA / POPA

Ale to od 80186 dopiero. Jeśli ma działać na 8086 to PUSH AX, PUSH BX, PUSH CX, itd.

formatting link
Mateusz

Reply to
Mateusz Viste

Miałem na myśli rodzinę CPU, której dotyczy cały ten wątek, czyli 6800. :) Wygląda na to, że nie ma możliwości zapisania i przywrócenia stanu rejestru flag, więc kod musi być pisany w ten sposób, aby nie miło to znaczenia.

W każdym razie znalazłem przyczynę - nie zwróciłem uwagi, że jedna z procedur była wywoływana jeszcze w jednym miejscu, co powodowało nadpisanie rejestru A. Tak więc gdy kontrola została zwrócona do głównej pętli, znajdowały się w nim bzdury. Teraz już wszystko działa. Komputer posiada działający ekran (telewizor z wejściem kompozytowym) oraz klawiaturę AT od starego peceta. ;)

Reply to
Atlantis

A to przepraszam, nie śledziłem - migło mi "retro, jak wrzucić wszystkie flagi na stos" i wyskoczyłem... Kajam się i kłaniam uniżenie.

Mateusz

Reply to
Mateusz Viste

Niemal na pewno jest - chyba by sie nie dalo bez tego ... no moze, jakby wbudowac w przerwania, a inaczej - niepotrzebne.

Instrukcje TAP i TPA

J.

Reply to
J.F

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.