CPM książka kucharska
: poniedziałek 29 sie 2022, 13:15
Skoro mamy już uwolniony ten system do własnych zastosowań, to może warto byśmy stworzyli swoją własną jego kopię. Opis będzie dotyczył CP/M v 2.2 i zapewne będzie on chaotyczny i miejscami pobieżny, ale powinien dać nam ogólną wiedzę jak takie coś przygotować do własnego sprzętu. Fundamentalnym wymaganiem jest mapowanie pamięci RAM od samego jego początku, gdzie zwykle rezyduje pamięć ROM, więc wymagane są sztuczki wyłączające ROM i w jej miejsce umieszczenie RAM w trackie inicjacji systemu operacyjnego. Sam system składa się z dwóch elementów: BDOS i uzależnionego od sprzętu CBIOS. BDOS z wbudowanym interpreterem poleceń CCP jest ogólnie dostępny dzięki rekonstrukcji jakiej dokonał Clark A. Calkins w poprzednim stuleciu (jak to brzmi!
), a szkielet CBIOS który tu udostępniam będziemy musieli dostosować do posiadanych urządzeń. Dla uproszczenia przyjąłem adresację standardu RC2014 i jako pamięć masową interface CF (wyłącznik ROM - 0x38, moduł CF - 0x10). Do napisania pozostanie nam tylko inicjacja i obsługa portu szeregowego jako terminala. Wybór konkretnego układu jest uwarunkowany od własnych preferencji i zasobów w szufladzie
. Sam CBIOS to zbiór 16 funkcji, które w większości już są napisane.
Nasza inicjatywa jest tylko skupiona wokół funkcji 0 - boot, gdzie powinniśmy umieścić kod inicjujący nasz port szeregowy, oraz funkcje 2 - Console status (gotowy/nie), 3 - Console input (sprawdzenie czy coś zostało przyjęte) i 4 - Console output (wysyłanie danych). Pozostałe funkcje są już gotowe! Obsługa przerwań portu szeregowego nie jest wymagana, system i tak korzysta z metody odpytywania i jedyne do czego może się przydać aktywny system przerwań jest sterowanie kontrolą przepływu RTS/CTS dla wyższych prędkości transmisji. Jak widać nie jest to dużo pracy, by móc samodzielnie przygotować ten system do własnego sprzętu. Nie taki diabeł straszny jak go malują
Kod: Zaznacz cały
jp boot ; 0 Initialize.
jp wboot ; 1 Warm boot.
jp const ; 2 Console status.
jp conin ; 3 Console input.
jp conout ; 4 Console output.
jp list ; 5 List output.
jp punch ; 6 Punch output.
jp reader ; 7 Reader input.
jp home ; 8 Home disk.
jp seldsk ; 9 Select disk.
jp settrk ; 10 Select track.
jp setsec ; 11 Select sector.
jp setdma ; 12 Set DMA address.
jp read ; 13 Read 128 bytes.
jp write ; 14 Write 128 bytes.
jp listst ; 15 List status.
jp sectran ; 16 Sector translate. Nasza inicjatywa jest tylko skupiona wokół funkcji 0 - boot, gdzie powinniśmy umieścić kod inicjujący nasz port szeregowy, oraz funkcje 2 - Console status (gotowy/nie), 3 - Console input (sprawdzenie czy coś zostało przyjęte) i 4 - Console output (wysyłanie danych). Pozostałe funkcje są już gotowe! Obsługa przerwań portu szeregowego nie jest wymagana, system i tak korzysta z metody odpytywania i jedyne do czego może się przydać aktywny system przerwań jest sterowanie kontrolą przepływu RTS/CTS dla wyższych prędkości transmisji. Jak widać nie jest to dużo pracy, by móc samodzielnie przygotować ten system do własnego sprzętu. Nie taki diabeł straszny jak go malują