Ramdysk i RAM-Cart


      Dawno, dawno temu za górami, za lasami w mieście na dwie litery opracowano "coś" co miało odmienić życie posiadaczom magnetofonów, a tym zamożniejszym (posiadaczom stacji dysków he, he), miało podnieść konfort pracy! Niestety... o ile "magnetofoniarze" nie mogli narzekać (urządzenie oraz programy do jego obsługi zdały swój egzamin), o tyle posiadacze stacji szybko przekonali się iż nie jest to tak piękne jakby się mogło wydawać!

      RAM-Cart (tak nazwano to "coś") mógł być obsługiwany tylko i wyłącznie za pomocą jednego DOS'u (na całe szczęście jest to jeden z lepszych systemów, a dla mnie najlepszy). Lukę tą starano się uzupełnić handler'em zamieszczonym swego czasu w TA. Z własnych doświadczeń wiem iż niewiele on nam pomoże! Większość DOS'ów odmawia 100% współpracy z tą nakładką (delikatnie mówiąc). Z pewnością większości wystarczył by wspomniany system, ale... Bardzo szybko posiadacze maszyn z rozszerzoną pamięcią zorientowali się iż korzystając z DOS'u obsługującego RAM-Cart'a "znika" im RAMDYSK! Jak nie trudno się domyśleć było to najzwyklejsze "pójście na łatwiznę"! Procedurę obsługującą Ramdysk zastąpiono procką, która obsługiwała Ram-Cart'a! W ten sposób większość użytkowników z rozszerzoną pamięcią zrezygnowało z "wygody" jaką zapewniało im to "coś".

      Tu właściwie kończy się historia tego urządzenia! Troszkę szkoda bo moim zdaniem warto mieć choć "troszkę" pamięci, która nie jest kasowana po wyłączeniu komputera! Z drugiej strony mając 256Kb dodatkowej pamięci głupotą by było rezygnować z niej! Problemu tego nie mają posiadacze QMEG'a! Po odpowiedniej konfiguracji można mieć Ramdysk o pojemności jednej strony dyskietki w podwójnej gęstości, cztery wolne banki oraz dostęp do Ram-Cart'a! W takiej właśnie sytuacji jestem ja.

    ORG $0817

    LDA $30a
    ASL A
    PHP
    LSR A
    SEC
    ROR A
    STA $31
    ROR $30
    PLP
    LDA $30b
    AND #$01
    ROL A
    ASL A
    ASL A
    ASL A
    EOR #$18
    PHA
    LDA $304
    STA $32
    LDA $305
    STA $33
    SEI
    LDY #$00
    STY $d40e
    STY $d400
    STY byte2
    STY $d500
    LDA #$03
    STA byte1
    LDA $d013
    BEQ Lp1
    INC byte2
    DEC byte1
Lp1 PLA
    ORA byte1
    TAX
    LDA $303
    BPL Lp3
Lp2 LDA byte2
    STA $d500
    LDA ($32),Y
    STX $d500
    STA ($30),Y
    INY
    BPL Lp2
    BMI Lp4
Lp3 STX $d500
    LDA ($30),Y
    PHA
    LDA byte2
    STA $d500
    PLA
    STA ($32),Y
    INY
    BPL Lp3
Lp4 LDA byte2
    STA $d500
    CLI
    LDA #$C0
    STA $d40e
    LDX $18
    LDY #$01
    RTS

byte1 dta b(03)
byte2 dta b(00)
      Od wieków wiadomo że jak ktoś da nam palec to niebawem chcielibyśmy całą rękę! Szkoda jest tych czterech banków, tym bardziej że można je wykorzystać jako kolejny Ramdysk! Wystarczy bowiem w DOS'ie II+/D do komórek pod adresem $0896 wpisać następujące wartości: $83, $87, $8b, $8f, a do komórki $070e wartość $20 aby oprócz Ramdysku uzyskanego przy pomocy QMEG'a mieć dodatkowy Ramdysk, który obsługiwany będzie przez DOS. W ten sposób wykorzystujemy pełne 256Kb dodatkowej pamięci. Niestety wykorzystując DOS'a II+/D, który umożliwia obsługę Ram-Cart'a na przeszkodzie staje nam wspomniany wyżej problem!

      Czekając na wstępniaka od Jabola trochę się nudziłem. Postanowiłem więc zamiast dłubać w nosie podłubać w moim zakurzonym Ram-Car'cie. Po jego uruchomieniu przy pomocy trzech "paluszków" odpaliłem DOS'a i... przypomniałem sobie o tym wszystkim o czym pisałem wcześniej. Wstępniaka dalej nie było, a więc zacząłem "rozglądać" się w kodzie, który stworzył Stefan Dorndorf, a panowie z UM pięknie go sobie przywłaszczyli. Na początku postanowiłem odnaleść procedurę obsługującą RAM-Cart. Niestety szło mi to nieco "topornie". Wtedy pomyślałem iż przydał by się program, który umożliwiałby porównanie dwóch plików. Jak się okazało nie ma takiego tz. jest, ale po porównaniu wyświetlana jest tylko informacja o tym czy pliki są takie same, czy też różne (opcję taką posiada także Professional Copy - Yo Fox!). Ja potrzebowałem programu, który oprócz tak "Seriousowatej" informacji podawał by mi adresy oraz bajty jakimi się różnią oba pliki. W ten sposób powstał D-Compare v2.0 (wersja 1.0 powstała w Turbo Basicu, ale z wiadomych powodów była "mocno" ograniczona). O samym programie napiszę kiedy indziej!

      Po "przepuszczeniu plików z DOS'em v6.1 i v6.1R (RAM-Cart) bardzo szybko odnalazłem prockę, którą widzicie obok. Jest to właśnie procka, która umożliwia współpracę DOS'u II+/D z RAM-Cart'em. Oryginalnie znajduje się ona pod adresem $0817 i zajmuje 131 bajtów. Dokładnie w tym samym miejscu znajduje się procka obsługująca Ramdysk i także zajmuje 131 bajtów. Rozwiązanie problemu opisanego wcześniej nasuneło się samo. Skoro obie proce znajdują się pod tym samym adresem, a także (choć nie koniecznie) zajmują tyle samo miejsca to wystarczy je poprostu podmieniać! Sposób ten co prawda wyklucza użycie w tym samym czasie obu urządzeń, ale umożliwia za to dostęp (i pełną obsługę) do obu! Niewiele myśląc zabrałem się za realizację tego pomysłu. Na początku były oczywiście testy, które wypadły pomyślnie! Zapis oraz odczyt przebiegał bez problemu, a więc trafiłem!!!

      Szczęście nie trwało długo! Po zaformatowaniu Ram-Cart'a okazywało się iż zamiast oczekiwanych 482 sektorów (moje "coś" ma tylko 64Kb) wpisywane było 1009 (jak dla ramdysku 128Kb). Jeszcze raz "rzut oka" na rezultaty porównania i okazało się iż bajty pod adresami: $0be5, $0be7, $0be8 należy zapełnić wartościami: $48, $e2, $ca, aby wszystko było w porządku! Teraz już wystarczyło napisać prosty program podmieniający obie procedury aby móc korzystać (w miarę konfortowo) z tych dwóch urządzeń. Odpowiedni program znajdziecie w pliku ze stuff'em, a tutaj krótko go opiszę.

D-RAM v1.0
Kodowanie Jager/Dial

      Jest to nakładka na DOS II+/D v6.1 lub 6.4 umożliwiająca współpracę z Ram-Cart'em oraz Ramdyskiem! Program jest relokowany co umożliwia zainstalowanie go pod adresem aktualnie wskazywanym przez MemLo.

      Przed instalacją program sprawdza czy Ram-Cart jest zainstalowany. Jeżeli nie zostanie on wykryty to instalacja zostanie przerwana. Odpowiedni komunikat ukaże się na ekranie, naciśnięcie dowolnego klawisza umożliwi powrót do DOS'u! Poprawna instalacja D-RAM'u obwieszczona zostanie informacją o klawiszach umożliwiających dostęp do danego urządzenia. I tak:

            SHIFT+SELECT - zmiana urządzenia czyli dostęp do Ram-Cart'u lub Ramdysku.

            SHIFT+OPTION - odinstalowanie D-RAM'u.

      Zmiana dostępu do urządzenia nie jest w żaden sposób sygnalizowana. Umożliwia to poprawną współpracę z większością programów. Jedyną informacją o tym z jakim urządzeniem obecnie pracujemy jest zainwersowanie słowa RUN widocznego w DOS'ie w prawym górnym rogu ekranu w przypadku dostępu do RAM-Cart'u. Jeżeli masz odłączony BASIC to wystarszy wpisać średnik i nacisnąć RETURN aby DOS pokazał swoje informacje (wersję, autora, adres RUN itp.).

      Odinstalowanie programu możliwe jest tylko w przypadku gdy pracujemy na ekranie systemowym (w większości wypadków jest to tylko DOS). Zostaniemy poinformowani o odinstalowaniu odpowiednim komunikatem. Naciśnięcie dowolnego klawisza umożliwi powrót do DOS'u poprzez JMP (10).

      D-RAM odporny jest na RESET, a co najważniejsze poprawnie inicjalizuje DOS oraz siebie z czego chyba zadowolony byłby JBW, bo obecnie nikt tego nie stosuje :-). Poza tym wykorzystuje on przerwanie VBLKI (opóźnione). Zaznaczę jeszcze że procedura relokująca została napisana przed wiekami przez wspomnianego już JBW i jak widać działa (wiele osób twierdziło że tak nie jest a mi się poprostu wydaje że nie potrafili przystosować programu do relokatora).

Na zakończenie jeszcze mały TIPS.

      Nie wiem jak wygląda to w RAM-Car'cie 128Kb, ale w 64Kb po zaformatowaniu go "oryginalnym" DOS'em (tym z pakietu) ilość wolnych sektorów wynosi 482! Kiedyś mnie to dziwiło, bo przecież powinno to być 499 sektorów. Po pewnym czasie dałem sobie z tym spokój. Teraz jednak powróciłem do tego. I co się okazało? Sprawa jest bardzo prosta! Wystarczy bowiem do komórki pod adresem $070e wpisać $20, a następnie zaformatować RAM-Cart. "Zielonych" informuję iż komórka ta umożliwia konfigurację wielkości Ramdysku. Wartość $20 ustawia nam wielkość Ramdysku na 64Kb. Jeżeli posiadasz więcej dodatkowej pamięci to po zaformatowaniu RAM-Cart'a wpisz poprzednią wartość. W ten sposób zyskujemy 17 sektorów! Swoją drogą to pan Syrylak mógł o tym wspomnieć, ale pewnie biedak sam o tym nie wiedział! Standardowo wpisana jest tam wartość $80, a więc podejrzewam że w RAM-Cartach 128Kb wszystko jest w porządku! Zupełnie "zielonych" informuję iż przed zmianą wartości w pamięci musi być DOS II+/D obsługujący RAM-Cart'a!

Jager/Dial