-
11. Data: 2024-07-09 12:26:10
Temat: Re: Portowanie CP/M
Od: Atlantis <m...@w...pl>
On 9.07.2024 11:21, J.F wrote:
> Postęp duży, ale - prawidłowo odtwarzasz rejestry po przerwaniu?
Wydaje mi się, że tak. Niemniej patrząc w kod teraz uświadomiłem sobie
jeszcze jedną rzecz, która naprowadziła mnie na trop możliwej przyczyny.
Kilka źródeł w Internecie mocno zalecało wydzielenie osobnego stosu dla
BIOS-a i podmienianie go przynajmniej w tych procedurach, które będą z
niego najbardziej intensywnie korzystały. Powodem takiego stanu rzeczy
jest fakt, że BDOS posiada stosunkowo mały stos.
I teraz jeszcze raz rzuciłem okiem na procedury obsługi przerwań
napisane dobrych parę lat temu. Widzę, że nawet te obecnie
niezaimplementowane są "szablonami" w których bezsensownie jest cały
kontekst. Pewnie parę lat temu przygotowałem je pod uzupełnienie treścią
i nigdy tego nie zrobiłem. W czasach TinyBasic-a nie miało to znaczenia,
bo używałem pojedynczego, sporego stosu.
Teraz jednak BDOS podmienia stos na swój własny, o ograniczonym
rozmiarze. Istnieje więc spora szansa, że odpalające się przerwania
kumulują się i stos zostaje przepełniony.
Jeśli mam rację, to wyłączanie przerwań zaraz po wejściu do procedur
BIOS-a w pewnym stopniu chroniło także stos BDOS-a (bo do momentu
podmiany stosów ciągle operujemy na starym). Okienko czasowe w którym
przerwanie mogło spowodować nadpisanie pamięci nieco się zmniejszało.
Niemniej przerwania odpalające się poza BIOS-em ciągle mogą spowodować
problem. Mam nadzieję, że optymalizacja wykorzystania stosu w
procedurach obsługi przerwań wystarczy do rozwiązania tego problemu.
> Pamieci video tam nie masz, to jest RS na terminal ?
Pamięć wideo jest, ale w postaci osobnego układu na osobnej magistrali.
TMS9918 posiada swój własny VRAM, którego nie współdzieli z systemem, a
z procesorem komunikuje się przez kilka rejestrów w przestrzeni IO.
RS w tej chwili służy tylko do debugowania. Za systemowy terminal robi
telewizor CRT oraz klawiatura od peceta, obsługiwana przez 8242.
-
12. Data: 2024-07-09 22:57:20
Temat: Re: Portowanie CP/M
Od: Atlantis <m...@w...pl>
No i hipoteza się potwierdziła. Wyłączyłem przerwania zupełnie przy
inicjacji CPM. Potrzebowałem ich tak naprawdę tylko do obsługi
klawiatury, więc przepisanie procedur jej obsługi na pooling rozwiązało
problem. Teraz CP/M zaczął działać normalnie - DIR jest printowany w
całości, podobnie jak zawartość plików w przypadku polecenia TYPE.
Nie wszystko jeszcze działa poprawnie - muszę dopisać procedurę WRITE
oraz wprowadzić kilka optymalizacji, ale teraz przynajmniej wiem, że
system działa.
-
13. Data: 2024-07-10 07:28:47
Temat: Re: Portowanie CP/M
Od: "J.F" <j...@p...onet.pl>
On Tue, 9 Jul 2024 22:57:20 +0200, Atlantis wrote:
> No i hipoteza się potwierdziła. Wyłączyłem przerwania zupełnie przy
> inicjacji CPM. Potrzebowałem ich tak naprawdę tylko do obsługi
> klawiatury, więc przepisanie procedur jej obsługi na pooling rozwiązało
> problem. Teraz CP/M zaczął działać normalnie - DIR jest printowany w
> całości, podobnie jak zawartość plików w przypadku polecenia TYPE.
> Nie wszystko jeszcze działa poprawnie - muszę dopisać procedurę WRITE
> oraz wprowadzić kilka optymalizacji, ale teraz przynajmniej wiem, że
> system działa.
No to teraz ciekawe - zmieniales jakies rejestry w przerwaniu,
czy stos cos zajezdzał.
Jak czytam, ze CCP startuje program ze stosem na 8 słów ...
troche mało. Co prawda program powinien zaraz ustawic swój stos, ale
nadal cos mało.
A swoja droga - nie pamietam, ale zeby przerwania działaly, to BIOS
musi ustawic odpowiednie instrukcje pod adresem 56 i ewentualnie
innymi ... wpisujesz ?
J.
-
14. Data: 2024-07-10 09:03:24
Temat: Re: Portowanie CP/M
Od: Atlantis <m...@w...pl>
On 10.07.2024 07:28, J.F wrote:
> No to teraz ciekawe - zmieniales jakies rejestry w przerwaniu,
> czy stos cos zajezdzał.
Stos. Konkretnie stos BDOS/CCP. System został zaprojektowany w czasach,
gdy RAM był drogi, więc pamięć była używana oszczędnie. Kilka źródeł
ostrzegało, że jego rozmiar jest niewielki i pisząc BIOS warto
podmieniać SP na osobny, wydzielony obszar pamięci. Nie wziąłem pod
uwagę, że przerwania mogą się odpalać w dowolnym momencie, w pewnych
sytuacjach prowadząc do przepełnienia stosu BDOS/CCP i nadpisania pamięci.
> Jak czytam, ze CCP startuje program ze stosem na 8 słów ...
> troche mało. Co prawda program powinien zaraz ustawic swój stos, ale
> nadal cos mało.
Podejrzewam, że Garry Kildall mógł zwyczajnie nie wziąć pod uwagę
możliwości, że w tle będą działały przerwania.
> A swoja droga - nie pamietam, ale zeby przerwania działaly, to BIOS
> musi ustawic odpowiednie instrukcje pod adresem 56 i ewentualnie
> innymi ... wpisujesz ?
To chyba chodzi o przerwania wywoływane instrukcjami RST. Pozwalają one
za pomocą szybkich (jednobajtowych) instrukcji wykonać skok pod adres
zapisany właśnie pod tymi adresami.
Ja mam przerwania zrealizowane za pomocą 8259, gdzie wektory (i same
procedury obsługi) przerwań są na stałe zaszyte w EPROM-ie, w górnej
części przestrzeni adresowej.
Trochę szkoda, bo zależało mi na przerwaniach timera i RTC pracujących w
tle, jednak obejdę się bez tego.
-
15. Data: 2024-07-11 09:31:54
Temat: Re: Portowanie CP/M
Od: "J.F" <j...@p...onet.pl>
On Wed, 10 Jul 2024 09:03:24 +0200, Atlantis wrote:
> On 10.07.2024 07:28, J.F wrote:
>> Jak czytam, ze CCP startuje program ze stosem na 8 słów ...
>> troche mało. Co prawda program powinien zaraz ustawic swój stos, ale
>> nadal cos mało.
>
> Podejrzewam, że Garry Kildall mógł zwyczajnie nie wziąć pod uwagę
> możliwości, że w tle będą działały przerwania.
Być może, ale czy nie troche dziwne ?
W zasadzie, jednozadaniowy komputer osobisty ... no ale jak z
terminalem po RS232, to w zasadzie musi mieć przerwania ... prawie
musi.
>> A swoja droga - nie pamietam, ale zeby przerwania działaly, to BIOS
>> musi ustawic odpowiednie instrukcje pod adresem 56 i ewentualnie
>> innymi ... wpisujesz ?
>
> To chyba chodzi o przerwania wywoływane instrukcjami RST. Pozwalają one
> za pomocą szybkich (jednobajtowych) instrukcji wykonać skok pod adres
> zapisany właśnie pod tymi adresami.
Tak, tylko w prawdziwym przerwaniu te rozkazy są generowane
zewnętrznie.
> Ja mam przerwania zrealizowane za pomocą 8259, gdzie wektory (i same
> procedury obsługi) przerwań są na stałe zaszyte w EPROM-ie, w górnej
> części przestrzeni adresowej.
Hm, jak to zrobiłes?
Wiki cos mówi, ze on z 8085 może wspólpracować, ale o 8080 to google
milczy.
> Trochę szkoda, bo zależało mi na przerwaniach timera i RTC pracujących w
> tle, jednak obejdę się bez tego.
Alez możesz, tylko trzeba zmniejszyc zużycie stosu/założyć własny.
Albo ... źródla CP/M jak widzę są dostępne, przekompilować z wiekszym
stosem.
J.
-
16. Data: 2024-07-11 09:59:20
Temat: Re: Portowanie CP/M
Od: "J.F" <j...@p...onet.pl>
On Thu, 11 Jul 2024 09:31:54 +0200, J.F wrote:
> On Wed, 10 Jul 2024 09:03:24 +0200, Atlantis wrote:
>> Ja mam przerwania zrealizowane za pomocą 8259, gdzie wektory (i same
>> procedury obsługi) przerwań są na stałe zaszyte w EPROM-ie, w górnej
>> części przestrzeni adresowej.
>
> Hm, jak to zrobiłes?
>
> Wiki cos mówi, ze on z 8085 może wspólpracować, ale o 8080 to google
> milczy.
A, ok, doczytałem, 8259 wysyła instrukcje CALL z adresem.
>> Trochę szkoda, bo zależało mi na przerwaniach timera i RTC pracujących w
>> tle, jednak obejdę się bez tego.
>
> Alez możesz, tylko trzeba zmniejszyc zużycie stosu/założyć własny.
> Albo ... źródla CP/M jak widzę są dostępne, przekompilować z wiekszym
> stosem.
>
J.
-
17. Data: 2024-07-12 19:14:46
Temat: Re: Portowanie CP/M
Od: Atlantis <m...@w...pl>
On 11.07.2024 09:31, J.F wrote:
> Być może, ale czy nie troche dziwne ?
> W zasadzie, jednozadaniowy komputer osobisty ... no ale jak z
> terminalem po RS232, to w zasadzie musi mieć przerwania ... prawie
> musi.
Większość projektów komputerków retro jakie widziałem i tak korzysta z
poolingu.
> Hm, jak to zrobiłes?
Już dokładnie nie pamiętam. Chyba po prostu skopiowałem rozwiązanie ze
schematu jakiegoś innego, przetestowanego projektu.
> Wiki cos mówi, ze on z 8085 może wspólpracować, ale o 8080 to google
> milczy.
8080 i 8085 są niemal identyczne. Różnice sprowadzają się do połowy
magistrali adresowej multipleksowanej liniami danych, braku konieczności
korzystania z dodatkowych układów (generator sygnałów zegarowych +
kontroler magistrali), obecności wejścia i wyjścia szeregowego (i
związanych z nimi przerwań) oraz oczywiście zasilania pojedynczym
napięciem 5V.
> Alez możesz, tylko trzeba zmniejszyc zużycie stosu/założyć własny.
> Albo ... źródla CP/M jak widzę są dostępne, przekompilować z wiekszym
> stosem.
Pewnie tak. Obawiam się jednak, że nie będzie to takie proste. Z tego co
pamiętam sporo założeń związanych z działaniem systemu opiera się na
tym, że określone elementy kodu (np. BIOS-u) znajdą się w określonych
miejscach, w stosunku do innych elementów. Jeśli zacznę zmieniać rozmiar
buforów umieszczonych wewnątrz BDOS-a, może mi się to wszystko rozjechać
i bez przepisania większej części kodu nie będzie tak łatwo tego naprawić.
-
18. Data: 2024-07-12 20:45:49
Temat: Re: Portowanie CP/M
Od: "J.F" <j...@p...onet.pl>
On Fri, 12 Jul 2024 19:14:46 +0200, Atlantis wrote:
> On 11.07.2024 09:31, J.F wrote:
>> Alez możesz, tylko trzeba zmniejszyc zużycie stosu/założyć własny.
>> Albo ... źródla CP/M jak widzę są dostępne, przekompilować z wiekszym
>> stosem.
>
> Pewnie tak. Obawiam się jednak, że nie będzie to takie proste. Z tego co
> pamiętam sporo założeń związanych z działaniem systemu opiera się na
> tym, że określone elementy kodu (np. BIOS-u) znajdą się w określonych
> miejscach, w stosunku do innych elementów. Jeśli zacznę zmieniać rozmiar
> buforów umieszczonych wewnątrz BDOS-a, może mi się to wszystko rozjechać
> i bez przepisania większej części kodu nie będzie tak łatwo tego naprawić.
Nie chce mi się patrzeć do tych źródeł, ale jeśli w miarę przyzwoicie
napisany, to nie powinno być większych problemów.
A w dodatku ten stos możesz umieścic gdzies wysoko, oryginalne miejsce
pozostawić, a zmienić tylko adresy ładujące.
J.
-
19. Data: 2024-07-13 07:59:47
Temat: Re: Portowanie CP/M
Od: Atlantis <m...@w...pl>
Swoją drogą, ktoś może kojarzy do czego można wykorzystać to wejście i
wyjście szeregowe w 8085? Da się na tym zrobić implementację np. UART-a,
bez konieczności stosowania zewnętrznych układów? Jak wygląda w takim
przypadku ustalanie baudrate-u?