Indeks English versionEnglish version

Casio FX-700P - opis sprzętu

co jest w środku

[kliknij na zdjęcie żeby powiększyć]


Mikroprocesor

W kalkulatorze FX-700P został użyty mikroprocesor HD61913A01 z wewnętrzną pamięcią programu oraz zintegrowanym sterownikiem wyświetlacza LCD i klawiatury. Może się on komunikować z zewnętrzną pamięcią danych i peryferiami przez 4-bitową magistralę.

mikroprocesor


Klawiatura

Zwykle końcówki portu klawiatury są podzielone na dwie grupy: wiersze skonfigurowane jako wyjścia i kolumny skonfigurowane jako wejścia. Wciśnięty klawisz łączy wybrany wiersz z wybraną kolumną.
Kalkulator Casio FX-700P nie zachowuje tej konwencji. Klawisze mogą być podłączone między dwie dowolne końcówki portu klawiatury, bez żadnego podziału na wiersze i kolumny. Zaletą takiego rozwiązania jest mniejsza potrzebna ilość końcówek portu dla obsługi określonej liczby klawiszy, wadą jest bardziej skomplikowany algorytm obsługi klawiatury.

schemat klawiatury


Magistrala systemowa

przebiegi na magistrali systemowej

Linie danych (Data) są dwukierunkowe z opornikami polaryzującymi o dużej oporności wymuszającymi wysoki poziom. Na liniach danych obowiązuje zanegowana logika, tzn. jako zero logiczne przyjęty został wysoki poziom, jako jedynka logiczna niski poziom.
CE (Chip Enable) - aktywny niski poziom.
OP - gdy poziom niski (OP=0) następuje przesyłanie danych do rejestru komend (Command Register, tylko do zapisu), gdy wysoki to do rejestru danych (Data Register, możliwy zapis lub odczyt). Ten sygnał nie powinien się zmieniać, gdy linia CE jest w stanie niskim.
Wszystkie linie magistrali systemowej mogą być ustawione w stan wysokiej impedancji, co umożliwia dostęp z zewnątrz do pamięci RAM.
Częstotliwość impulsów CK1 i CK2 wynosi ok. 200kHz.


Pamięć RAM

Kalkulator FX-700P zawiera dwa układy scalone pamięci RAM typu HD61914A, zajmujące przestrzeń adresową odpowiednio $0000-$07FF i $0800-$0FFF. Podobny model PB-100 ma wlutowany tylko jeden układ scalony pamięci, przy czym można dodać drugi znajdujący się wewnątrz opcjonalnego modułu rozszerzenia OR-1. Interpreter języka BASIC nie obsługuje dalszego powiększania ilości pamięci RAM.

HD61914 - statyczna pamięć RAM o pojemności 8192 bitów, zorganizowana jako 2048 słów 4-bitowych.

opis wyprowadzeń układu HD61914A

Opis wyprowadzeń:

Końcówka Funkcja
D4-D1dwukierunkowa szyna danych
OPwybór rejestru
CK1, CK2dwufazowy zegar
CEChip Enable, aktywny poziom niski
V1wybór dekodowanego bitu adresu A11
GNDmasa (plus napięcia zasilającego)
VDD2-5V gdy stan aktywny, 0V gdy stan nieaktywny (tylko przechowywanie danych)
VDD1podtrzymanie zawartości pamięci, podłączone do -5V przez opornik 390ohm

Końcówki 24-27 i 29-33 są w kalkulatorze podłączone GND. Niektóre z nich (tzn. V2-V4) przypuszczalnie mogłyby funkcjonować jako dodatkowe linie wyboru dekodowanego adresu (A12-A14), ale nie testowałem tego. Wszystkie pozostałe końcówki są nie podłączone.

Dostępne komendy:

Kod Funkcja Opis
$4Zapis Komenda zapisu (OP=0) składa się z 4-bitowego słowa $4, po którym następuje 4-bitowe słowo zawierające adres pamięci oraz trzy 4-bitowe słowa zawierające 11-bitowy adres wewnątrz pamięci (najpierw słowo najmniej znaczące). Najbardziej znaczący bit adresu wewnątrz pamięci jest ignorowany. Po wysłaniu tej komendy można do pamięci zapisać dowolną ilość danych w następnym cyklu OP=1. Licznik adresu zwiększany jest automatycznie po każdym przesłanym 4-bitowym słowie.
$0Odczyt Komenda odczytu jest podobna do komendy zapisu, z tym że pierwsze przesyłane 4-bitowe słowo jest równe $0 a nie $4. Po wysłaniu tej komendy można z pamięci odczytać dowolną ilość danych w następnym cyklu OP=1. Licznik adresu zwiększany jest automatycznie po każdym przesłanym 4-bitowym słowie.
Pojedyncze 4-bitowe słowo $0 pojawia się regularnie na magistrali gdy kalkulator jest bezczynny. Nie znam jego dokładnego przeznaczenia, prawdopodobnie coś w rodzaju reset.

Przykłady:

    OP=0 40C71          ;zapis pod adres $0FC0
    OP=1 12A            ;zapisywane dane: $0FC0<-$1, $0FC1<-$2, $0FC2<-$A

    OP=0 04630		;odczyt z addresu $0364
    OP=1 7C		;odczytywane dane: $0364->$7, $0365->$C

    OP=0 0              ;reset

Złącze systemowe

złącze systemowe

Funkcje końcówek

Końcówka
złącza
Końcówka
procesora
Symbol Funkcja
14D4linia danych, bit 4
23D3linia danych, bit 3
32D2linia danych, bit 2
41D1linia danych, bit 1
580OPwybór rejestru
679CK2dwufazowy zegar
778CK1dwufazowy zegar
877*VDD3-5V gdy kalkulator włączony, 0V gdy wyłączony
975CE1RAM Chip Enable, aktywny niski poziom
1074CE2Chip Enable interfejsu magnetofonu kasetowego, aktywny niski poziom
1176VDD1minus zasilania
1273GNDmasa (plus zasilania)

Gwiazdka przy numerze oznacza, że końcówka procesora jest połączona z magistralą nie bezpośrednio, ale przez dodatkowy układ.

Z kalkulatora można pobierać prąd najwyżej kilka mA do zasilania dodatkowych urządzeń. Większy pobór prądu spowodowałby zbyt duży spadek napięcia, ponieważ wewnętrzny regulator obniżający napięcie baterii do ok. 5V składa się tylko z diody krzemowej i opornika 100ohm połączonych szeregowo.

Dodatkowa płytka drukowana

W okolicach procesora jest zamontowana dodatkowa płytka drukowana, której schemat jest przedstawiony na poniższym rysunku. Celem tego układu jest prawdopodobnie zapobieganie utraty danych w pamięci RAM w momencie włączania i wyłączania kalkulatora. Zmiana sygnału on/stby generuje krótki impuls na wyjściu bramki XOR, który na chwilę blokuje sygnał CK2 pamięci RAM.

schemat dodatkowej płytki drukowanej


Interfejs magnetofonu kasetowego

Interfejs jest wybrany przy niskim poziomie linii CE2. Dane są przesyłane tylko przez linię Data4 (obowiązuje zanegowana logika).

Dostępne komendy:

Kod Funkcja Opis
101000Otwarcie do zapisu Komenda otwiera kanał komunikacyjny do zapisu.
011000Otwarcie do odczytu Komenda otwiera kanał komunikacyjny do odczytu.
000100Odczyt stanu interfejsu Kalkulator wysyła tę komendę w cyklu OP=0, po czym w cyklu OP=1 odczytuje jeden bit danych. Odczytany bit=0 oznacza że interfejs magnetofonu jest zajęty lub nie podłączony, bit=1 oznacza że jest gotowy do odebrania/wysłania danej. Błąd ERR9 gdy przekroczony limit czasu.
010010Transfer danej Kalkulator wysyła tę komendę w cyklu OP=0, po czym w cyklu OP=1 przesyła bajt danej szeregowo w następującej kolejności:
  • bit startu
  • 8 bitów danej (najpierw bit najmniej znaczący)
  • bit parzystości
  • 2 bity stopu
  • 4 bity bez znaczenia (zwykle 1)
Dane odczytywane z taśmy są przesunięte o 4 bity, tzn. bit startu jest piątym odbieranym bitem. Każdy transfer danej musi być poprzedzony sprawdzeniem stanu interfejsu za pomocą komendy Odczyt stanu interfejsu.
Przed wysłaniem na taśmę właściwych danych konieczne jest zapisanie sygnału wprowadzającego składającej się z ok. 160 słów równych 111111111111xxxx (w celu ustalenia się prędkości przesuwu taśmy, poziomu zapisu itp.).
100100Wykryta częstotliwość nośna Kalkulator wysyła tę komendę w trybie LOAD po odebraniu pierwszych 12 słów sygnału wprowadzającego. Od tego momentu dane przesyłane przez interfejs do kalkulatora będą synchronizowane bitem startu.
000000Reset Ta komenda zamyka kanał komunikacyjny.
111100Zamknięcie kanału Zwykle kalkulator kończy transmisję wysyłając komendę Reset. Wyjątkiem jest transmisja zainicjowana przez LOAD, która kończona jest tą komendą. Przy odczycie z taśmy za pomocą GET nadal występuje w tym miejscu komenda Reset.

Przykłady:

    Zapis na taśmę
    ==============

1.  OP=0 101000         ;otwarcie kanału do zapisu

2.  OP=0 000100         ;powtarzaj tę sekwencję, aż interfejs
    OP=1 0 lub 1        ;zwróci jedynkę

    OP=0 010010         ;wyślij słowo sygnału wprowadzającego
    OP=1 1111111111111111

3.  powrót do punktu 2, aż zostanie wysłane ok. 160 słów

4.  OP=0 000100         ;powtarzaj tę sekwencję, aż interfejs
    OP=1 0 lub 1        ;zwróci jedynkę

    OP=0 010010         ;wyślij bajt do zapisu ($63 w tym przykładzie)
    OP=1 0110001100111111

5.  powrót do punktu 4, aż wszystkie dane zostaną zapisane

6.  OP=0 000000         ;zamknięcie kanału komunikacyjnego

    Odczyt z taśmy
    ==============

1.  OP=0 011000         ;otwarcie kanału do odczytu

2.  OP=0 000100         ;powtarzaj tę sekwencję, aż interfejs
    OP=1 0 lub 1        ;zwróci jedynkę

    OP=0 010010         ;odczytaj słowo sygnału wprowadzającego
    OP=1 1111111111111111

3.  powrót do 2, aż zostanie odebrane 12 słów

4.  OP=0 100100		;wyślij do interfejsu komendę "Wykryto częstotliwość nośną"

5.  OP=0 000100         ;powtarzaj tę sekwencję, aż interfejs
    OP=1 0 lub 1        ;zwróci jedynkę

    OP=0 010010         ;odczytaj daną
    OP=1 1111010010011011 ;przykładowa odczytana dana $C9

6.  powrót do punktu 5, aż wszystkie dane zostaną odebrane

7.  OP=0 000000         ;zamknięcie kanału komunikacyjnego

Interfejs drukarki

Kalkulator zapisuje drukowane dane do pamięci RAM pod adres $0132-$0133.
Do sterowania przepływem informacji wykorzystane są komendy sterujące skladające się z 4-bitowego słowa wysyłanego przy OP=0 oraz tego samego słowa wysyłanego przy OP=1. Oba słowa przesyłane są przy CE1=1 i CE2=1.

Protokół transmisji

  1. Kalkulator zapisuje drukowany znak do pamięci RAM pod adresy $0132-$0133.
  2. Kalkulator wysyła komendę sterującą $F, po czym zwalnia magistralę.
  3. Drukarka po wykryciu tej operacji przejmuje kontrolę nad magistralą.
  4. Drukarka odczytuje daną z pamięci RAM z adresu $0132-$0133, generując niezbędne sygnały sterujące. Jeżeli odczytany bajt jest równy $FE, to limit czasu na zwolnienie magistrali wynosi ok. 300 ms, w przeciwnym razie ok. 4 sekundy.
  5. Po wydrukowaniu znaku drukarka wysyła komendę sterującą $E, po czym zwalnia magistralę.
  6. Kalkulator po wykryciu tej operacji przejmuje kontrolę nad magistralą.
  7. Kalkulator wysyła komendę sterującą $E.
  8. Powyższe kroki są powtarzane, aż wszystkie znaki zostaną wydrukowane.

Kody znaków specjalnych:

Kod Funkcja
$80 wstawiany między obliczane wyrażenie a wynik obliczeń (w trybie pracy jako kalkulator), drukowane jako spacja
$F0 wstawiany na koniec każdej linii listingu programu BASIC, chyba ignorowany przez drukarkę
$FD kod wysyłany przez kalkulator po wciśnięciu klawisza AC, przerywa drukowanie i czyści bufor drukarki
$FE kod rozdzielający drukowane znaki
$FF powrót karetki/nowa linia