Indeks English versionEnglish version

Dostęp do całej pamięci kalkulatora Casio FX-8000G oraz uruchamianie na nim programów maszynowych

Autorem poniższych informacji i programów jest Samir Ribic.


Instalacja

W celu usunięcia ograniczeń dostępu do pamięci należy przeprowadzić poniższą procedurę dokładnie według opisu. Pominięcie choćby jednego kroku uniemożliwi osiągnięcie spodziewanego efektu.

  1. Wciśnij Reset.
  2. Mode 2
    Powinno pokazać się 1446 wolnych bajtów
  3. Mode 1
  4. Range
        Xmin -10
         max 10
        scl 1
        Ymin -10
         max 10
        scl 1
  5. Wciśnij G↔T
  6. Range
        Xmin -10
         max 10
        scl 0
        Ymin -10
         max 10
        scl 0
  7. Wciśnij G↔T
  8. Następnie wciśnij AC a następnie Shift oraz Alpha i wpisz
    SAVE "A"G
    Pomiędzy SAVE i pierwszym cudzysłowem ma być spacja, pomiędzy drugim cudzysłowem oraz G nie może być spacji.
  9. Wciśnij EXE
    Pojawi się komunikat SYS error
  10. Wciśnij strzałkę w lewo a potem EXE aby powtórzyć ostatnie polecenie
    Pojawi się teraz komunikat Save execution I/O error
  11. Ponownie strzałka w lewo i EXE aby powtórzyć ostatnie polecenie
    Spowoduje to znowu komunikat SYS error
  12. Wciśnij AC i przejdź do mode 3 (PCL). Będzie widać dwa zajęte programy (4 i 5). Skasuj program 4 klawiszem AC. Teraz wszystkie programy będą zajęte. Wciśnij SHIFT DEL żeby skasować wszystkie programy.
    Obecnie jest 1654 bajtów wolnej pamięci. W tym stanie nie ma już kontroli zakresu indeksów tablic.

W celu przetestowania nowych możliwości można wpisać:
1.11111111→A[208]
Następnie EXE oraz G↔T.
Właśnie zapisałeś 8 bajtów do pamięci graficznej wyświetlacza!


Zastosowanie

Najbardziej użyteczną zaletą nieograniczonego dostępu do pamięci jest możliwość użycia graficznego bufora drukarki jako pamięci dla tablic w zakresie Z[615] do Z[960].

Pod adresem zajmowanym przez zmienną Z[358] jest stos maszynowy. Zapis do tej zmiennej specjalnie skonstruowanej wartości zawierającej adres procedury umożliwia uruchamianie programów maszynowych na kalkulatorze fx-8000G. Niestety, zakres wartości które można w ten sposób zapisywać do pamięci jest ograniczony przez przyjęty w fx-8000G dziesiętny (BCD) system kodowania liczb.

W tym trybie możliwe było dokonanie następujących osiągnięć:

Trik odkryli wspólnymi siłami w lutym 1989 roku: Zeljko Juric, Samir Ribic i Emir Kapic.


Uruchamianie programów maszynowych

Liczba (-5÷9)×(1E-44) składa się z ośmiu bajtów o wartości &H55. Adres &H5555 jest zajęty przez zmienną A[42] obejmującą zakres adresów &H5550~&H5557. Zatem wpisanie wartości (-5÷9)×(1E-44) do zmiennej Z[358] uruchomi kod maszynowy zawarty wewnątrz zmiennej A[42].

Wygodniejszym miejscem dla programów maszynowych byłby obszar pamięci graficznej ekranu w zakresie adresów &H5A80 do &H5D80. Przy użyciu komendy Plot można w ten obszar wpisać dowolną wartość. Komenda Cls zapełnia go wartością &HFF, natomiast komenda Plot kasuje wybrany bit na zero.

Następujący program pośredniczący wykonuje skok pod adres programu maszynowego umieszczonego w pamięci ekranu:

  ORG  &H5555
  LDW  IX,&H5930
  LDW  IY,0
  ADW  IX,&H90
  LDW  IY,&H11
  LDW  IY,0
  ADW  IX,&H90
  LDW  IY,&H11
  LDW  IY,0
  ADW  IX,&H98
  LDW  IY,&H11
  LDW  IY,0
  IJMP IX

Dosyć dziwny wygląd tego programu jest spowodowany ograniczonym zakresem wartości, które można wpisać do zmiennej. Wszystkie operacje na rejestrze IY są tylko wypełniaczami miejsca bez żadnej funkcji.

Wpisanie programu pośredniczącego:

  0.3594→A[42]
  1.00419048E41→A[43]~A[44]
  1.00419848E41→A[45]
  1.0007705E41→A[46]

Tak wygląda jego kod w pamięci:

  5550: 99 00 00 00 00 40 59 30
  5558: 41 00 00 48 90 41 00 11
  5560: 41 00 00 48 90 41 00 11
  5568: 41 00 00 48 98 41 00 11
  5570: 41 00 00 50 07 70 00 11

Uruchomienie programu:

  (-5÷9)×(1E-44)→Z[358]

W następujących przykładach zostanie użyty taki oto krótki program maszynowy zapisujący bajt do pamięci graficznej ekranu:

  ORG  &H5AE8
  LDW  IX,&H5B50  ;40 5B 50
  ST   (IX),&HAB  ;D0 AB
  JMP  0          ;70 00 00

Program ładujący (1)

Ten prosty program kopiuje liczby szesnastkowe wpisywane z klawiatury do pamięci graficznej ekranu zaczynając od adresu &H5AE8.

Program 0, Mode Comp

  0.3594→A[42]
  1.00419048E41→A[43]~A[44]
  1.00419848E41→A[45]
  1.0007705E41→A[46]
  Range 1,95,0,1,63,0
  Cls
  8→A
  Lbl 0
  53→C
  8→D
  Plot 0,0
  Prog 1
  Lbl 1
  Frac (B÷2)=0⇒Plot A,C
  Int (B÷2)→B
  Isz C
  C=57⇒49→C
  Dsz D
  Goto 1
  Isz A
  Goto 0

Program 1, Mode BASE-n

  Hex
  ?→B
  Dec

Uruchom Program 0 wpisując polecenie:

  Prog 0

Następnie wpisz dane szesnastkowo, każdy bajt osobno:

  40 5B 50 D0 AB 70 00 00

Zakończ wpisywanie danych za pomocą Mode 1 a następnie Mode +

Uruchom program maszynowy wpisując:

  (-5÷9)×(1E-44)→Z[358]

Po restarcie systemu wciśnij G↔T aby obejrzeć bajt wpisany do pamięci graficznej ekranu.


Program ładujący (2)

Inna wersja kopiująca dane pobrane z obszaru Programu 1 do pamięci graficznej ekranu zaczynając od adresu &H5AE8.

Program 0, Mode Comp

  Ans→B
  S<2⇒Goto 0
  0.3594→A[42]
  1.00419048E41→A[43]~A[44]
  1.00419848E41→A[45]
  1.0007705E41→A[46]
  Lbl 0
  S=0⇒Goto 1
  Range 1,95,0,1,63,0
  Cls
  8→C
  Lbl 3
  " "
  Dsz C
  Goto 3
  11→A
  Lbl 1
  53→C
  32→D
  B<0⇒B+2xy32→B
  Lbl 2
  Frac (B÷2)=0⇒Plot A,C
  Int (B÷2)→B
  Isz C
  C=57⇒49→C
  Frac ((D-1)÷8)=0⇒Dsz A
  Dsz D
  Goto 2
  A+8→A
  0→S
  Plot 0,0

Program 1, Mode Base-n

  2→S
  Hex
  405B50D0:Prog 0
  AB700000:Prog 0

Program 1 zawiera dane w postaci szesnastkowej, w grupach po osiem cyfr (cztery bajty), po każdej grupie danych następuje wywołanie Prog 0.

Uruchom Program 1. Ilość danych jest ograniczona do 88 bajtów kopiowanych pod stały adres.


Adaptacja dla Casio fx-8500G

Autorem poniższej informacji jest Nadav Vansover.

Procedura uwolnienia indeksów tablic w fx-8000G wymaga niewielkiej modyfikacji, żeby działała na fx-8500G. Wystarczy na początku dodać komendę Defm 22. W kroku 2 powinno się wyświetlać 6390 wolnych bajtów, natomiast w kroku 12 powinno być 6774 wolnych bajtów.

Negatywnym efektem ubocznym procedury uruchomionej na fx-8500G jest uszkodzony Edytor Plików. Wprawdzie można go wywołać, ale nie działa, pokazując słynny komunikat "irregal" error.

Mimo, że lokalizacje danych w pamięci wydają się takie same dla obu kalkulatorów, istnieje stałe przesunięcie o 640 pozycji w indeksach tablicy. To znaczy że: