15-12-2012




Opis wymiany pamięci ROM na pamięć typu FLASH w mikrokomputerze MK 85 / MK 85M

UWAGA: Wszelkie modyfikacje dokonujesz na własne ryzyko.

PRZETESTOWANA WERSJA ROM: 23A - do pobrania w dziale "Materiałay pomocnicze"
WERSJA BETA ROM: 27 - do pobrania w dziale "Materiałay pomocnicze"

(przed zaprogramowaniem pamięci FLASH plik należy rozpakować)

Niniejszy materiał powstał dzięki pomocy Piotra Piątka oraz dokumentacji mikroprocesora
КА1013ВМ1, którą udostępnił Vladimir Poletaev, za co serdecznie dziękuję!

Twórcą zmodyfikowanego oprogramowania MK 85 jest
Piotr Piątek (program jest rozwijany).

Gromadzimy części
  1. pamięć 128Kx8bit (uniform block) FLASH M29F010B 70K6 firmy STMicroelectronics.
  2. przewód w izolacji teflonowej Kynar 1x0,25mm.
  3. opcjonalnie podstawka PLCC 32.
Garść uwag na wstępie
  1. Pamięć użyta w tym projekcie oznaczona jest jako 70K6, czyli czas dostępu 70ns, PLCC32 i zakres temperatur –40 to 85°C.
    Dokumentacja pamięci M29F010B w formacie pdf: M29F010B.pdf

    Zastosowana pamięć posiada pojemność 128kB, zmodyfikowany soft wymaga tylko 32kB, jednak dzięki większej pojemności istnieje możliwość wgrania do czterech różnych wersji oprogramowania w tym np. całkowicie własnego softu (procesor MK 85 kompatybilny jest z PDP-11) i przełączania się pomiędzy tymi wersjami.
  2. rodzaj użytego przewód nie ma większego znaczenia.
  3. finalna wersja modyfikacji, nie będzie posiadać podstawki, bezpośredni montaż pamięci jest dużo łatwiejszy.

Nowe funkcje i komendy

na podstawie informacji, które otrzymałem od Piotra (niektóre fragmenty opisu są cytatami):

1. Obsługa 32kB pamięci RAM

2. Nowe komendy:
POKE adres,dana
CALL adres
SAVE adres
LOAD adres
SDATA linia,"tekst"
I2CSTART
I2CSTOP
I2CWBYTE
MODE 7
MODE 8
OFF
RUN
/W TRYBIE PRACY PROGRAMU - AUTOSTART/
BEEP /wersja 27/

3. Nowe funkcje:
PEEK adres
LDATA linia
I2CRBYTE

Obsługa bezpośrednich odwołań do pamięci /POKE, PEEK, CALL/
POKE x,y zapis bajtu y pod adresem x
PEEK x odczyt bajtu spod adresu x
CALL x wywołanie programu maszynowego pod adresem x
Adres może być liczbą dziesiętna mieszczącą się w przedziale 0 do 65535 lub szesnastkową poprzedzoną znakami &H. Użycie liczb szesnastkowych dozwolone jest w adresowaniu i w operacjach matematycznych.
Znaki "&H"
można wywołać za pomocą kombinacji klawiszy "EE" + "H"
Od adresu 100h do 104h wartość jest 16 bitowa, a od adresu 105h 8 bitowa /wersja 27/.
Adres 102h to adres portu PP.

Przykłady

Zapis bajtu 55 pod adresem 814Eh:
POKE 33102,55
lub
POKE &H814E,55
lub
POKE &H814E,&H37

Przypisanie zmiennej A bajtu odczytanego spod adresu 814Eh:
A = PEEK 33102
lub
A = PEEK &H814E

Wywołanie podprogramu w języku maszynowym pod adresem 0A5Eh (wyświetla ilość wolnej pamięci na wyświetlaczu 7-segmentowym):
CALL 2654
lub
CALL &H0A5E

Obsługa pamięci masowej /SAVE, LOAD/
- Obsługa do 8 pamięci EEPROM 24256, każda musi mieć wybrany inny adres odpowiednią kombinacją E0, E1, E2).
- Brak pamięci zgłaszany jest błędem ERR9
- Zapis i odczyt pamięci - końcówki E0, E1, E2 podłączone do masy:
SAVE 0 lub SAVE
LOAD 0 lub LOAD
- Zapis i odczyt pamięci - końcówki E0, E1, E2 podłączone do +Vcc:
SAVE 7
LOAD 7

Obsługa bazy danych /SDATA, LDATA/
- Baza danych zapisywana jest zawsze w programie P9.
- Dopuszczalne jest istnienie programu i bazy danych jednocześnie.
- Zapis rekordu odbywa się za pomocą polecenia
SDATA x,"yyy"
 gdzie x oznacza numer linii, yyy oznacza treść rekordu.
- Odczyt rekordu odbywa się za pomocą funkcji
LDATA x
 gdzie x oznacza numer linii.
- Dopuszczalne jest porównywanie rekordów.
- Zapis i odczyt możliwy jest w trybie kalkulatora i w trybie pracy programów.

Przykłady

zapis i odczyt bazy danych
10 VAC
20 FOR Z=101 TO 111
30 INPUT "DATA",$
40 SDATA Z,$
50 NEXT Z
60 VAC
70 FOR Z=1 TO 10
80 $=LDATA Z
90 PRINT "REKORD";Z;" ";"DATA";$
100 NEXT Z

lub

...
30 INPUT "DATA",A$
40 SDATA Z,A$
...
80 A$=LDATA Z
90 PRINT "REKORD";Z;" ";"DATA";A$
...

dla programu zapisanego nie pod P9 możemy zmienić linię nr 20:
20 FOR Z=1 TO 10

porównywanie rekordów
10 VAC
20 IF LDATA 111=LDATA 112 THEN 100
30 PRINT "ROZNE"
40 END
100 PRINT "ZGODNE"
110 END
111 !ELEKTRONIKA-MK-85
112 !ELEKTRONIKA-MK-85


Obsługa magistrali I2C /I2CWBYTE, I2CRBYTE, I2CSTART, I2CSTOP/
I2CWBYTE X wysyła na magistralę I2C bajt X oraz bit ACK
I2CRBYTE X zwraca bajt odczytany z magistrali I2C oraz wysyła bit ACK gdy X=0 lub NACK gdy X<>0
I2CSTART rozpoczęcie transmisji danych
I2CSTOP zakończenie transmisji danych
Przerwany transfer (np. w wyniku wystąpienia błędu w programie) może pozostawić porty w stanie powodującym zwiększony pobór prądu, zalecane jest w takiej sytuacji wyłączenie i włączenie komputera.

Przykłady

Zapis zmiennej $ do pamięci EEPROM 24256 pod adres 7F00h dla nóżek E0, E1, E2 podłączonych do masy:
10 $="ELEKTRONIKA"
20 L=LEN $
30 I2CSTART:I2CWBYTE 160:I2CWBYTE 127:I2CWBYTE 0
(Start I2C : Device Select Code+Write Enable : Start Address : Send ACK)
(/E0,E1,E2 =  GND, WRITE/ Device Select Code = binary 10100000 / decimal 160)
(/E0,E1,E2 = +Vcc, WRITE/ Device Select Code = 10101110 / 174)
40 FOR I=1 TO L
50 I2CWBYTE ASCI MID(I,1)
(Sequential Write, From Start Address to Start Address + L)
60 NEXT I
70 I2CSTOP
w trybie TURBO może zachodzić konieczność opóźnienia odczytu w tym celu można zmodyfikować linię kończącą zapis:
70 I2CSTOP:I2CSTOP

Odczyt z EEPROM do zmiennej $
dla nóżek E0, E1, E2 podłączonych do masy:
100 $=""
110 I2CSTART:I2CWBYTE 160:I2CWBYTE 127:I2CWBYTE 0
(Start I2C : Device Select Code+Write Enable : Start Address : Send ACK)
120 I2CSTART:I2CWBYTE 161
(Start : Device Select Code + Read Enable)
|Device Select Code /E0,E1,E2 connected to  GND + Read Enable/  = binary 10100001 = decimal 161|
|
Device Select Code /E0,E1,E2 connected to +Vcc + Read Enable/  = binary 10101111 = decimal 175|
130 FOR I=1 TO L
(Sequential Read, From Start Address to Start Address + L)
140 X=I2CRBYTE 0: IF X<192; $=$+CHR X
(Assign Read Byte to X + Send ACK : CHR 191 = Last ASCII Sign ; $ = $ + Read ASCII Sign)
150 NEXT I
160 X=I2CRBYTE 1:I2CSTOP
(Assign Read Byte to X + Send NACK : Stop I2C)
170 PRINT $

dla nóżek E0, E1, E2 podłączonych do +Vcc:
...
30 I2CSTART:I2CWBYTE 174:I2CWBYTE 127:I2CWBYTE 0
...
110 I2CSTART:I2CWBYTE 174:I2CWBYTE 127:I2CWBYTE 0
120 I2CSTART:I2CWBYTE 175
...

Device Select Code:
bit7, bit6, bit5, bit4 -> Device Type Identifier
bit3, bit2, bit1 -> E2, E1, E0 (
Chip Enable Address)
bit0 -> R/W

Obsługa zegara taktującego /MODE 7, MODE 8/
MODE 7 ustawia tryb normalny, zmiana możliwa w trybie kalkulatora, pracy programów i za pomocą kombinacji klawiszy "MODE" + "7"
MODE 8 ustawia tryb turbo, zmiana możliwa w trybie kalkulatora, pracy programów i za pomocą kombinacji klawiszy "MODE" + "8"

Obsługa zarządzania energią /OFF/

OFF wyłączenie mikrokomputera - możliwe w trybie kalkulatora i pracy programów

Obsługa autostartu /RUN - w trybie pracy programu/
RUN automatyczny start programu po włączeniu zasilania. Pominięcie autostartu możliwe jest dzięki wciśnięciu klawisza "SPC" lub "." przy włączaniu zasilania

Przykład

po włączeniu zasilania nastąpi automatyczne uruchomienie programu zawierającego w ostatniej lini po ENDkomendę RUN (brak END spowoduje wygenerowanie błędu)
10 PRINT "ELEKTRONIKA"
20 END
30 RUN

Obsługa głośniczka podłączonego do wyjścia PP11  /wersja 27/
BEEP spowoduje wygenerowanie krótkiego sygnału o częstotliwości ok. 1kHz

Test pamięci

Prawidłowo zainstalowana pamięć ROM pozwoli nam uruchomić MK 85, jeżeli na wyświetlaczu pojawi się napis "READY P0", wpisujemy TEST i naciskamy EXE.
Mikrokomputer podczas testu pamięci ROM sprawdzi jej sumę kontrolną. W przypadku błędu sumy kontrolnej pojawi się napis "
дефект ПЗУ".


Materiały pomocnicze

Spakowany plik potrzebny do zaprogramowania pamięci FLASH (ORG): ROM_ORG.ZIP
Spakowany plik potrzebny do zaprogramowania pamięci FLASH (wersja 23A_1): ROM23A_1.ZIP
Spakowany plik potrzebny do zaprogramowania pamięci FLASH (wersja 23A_2): ROM23A_2.ZIP
(zwiększone pętle opóźniające SCROLL i REPEAT dla zegara pracującego tylko na wyższej częstotliwości - sprawdzone dla 2MHz)
Spakowany plik potrzebny do zaprogramowania pamięci FLASH (wersja 27): ROM27.ZIP
wersja 27 -  testowa:
1).  rozszerzone mozliwości POKE i PEEK.
Addres: od 100h do 104h  -> 16bit /POKE &H102, FFFF/
PORT PP (PP1 - PP15): 102h
Addres: od 105h -> 8bit /POKE &H110, FF/
2). [INS] aktualnie działa jak przełacznik, [DEL] na końcu linii działa jak BACKSPACE
3). dodana komenda BEEP sterująca wyjściem PP11

Schemat ideowy modyfikacji MK 85 w formacie jpg: new_rom_sch.jpg
Schemat ideowy modyfikacji MK 85 w formacie pdf: new_rom_sch.pdf

BEZPOŚREDNI MONTAŻ PAMIĘCI PLCC32

ROM MOD
Powyżej przedstawiłem tylko rysunek, ale bezpośredni montaż pamięci w przeciwieństwie do instalacji podstawki PLCC32 jest bardzo prosty. Nóżki nowej pamięci musimy wymodelować i skrócić na odpowiednią długość. Dzięki temu, że nóżki pamięci są znacznie bardziej plastyczne od kruchych końcówek podstawki, odpowiednia zmiana ich kształtu nie powinna stanowić problemu.
Rysunek pamięci MK 85 pochodzi ze strony Piotra (rysunek wykorzystałem bez pytania - jestem świnią)
Nóżki 2 i 3 (A16 i A15) nowej pamięci można podłączyć do przełącznika tak jak na schemacie ideowym lub tak jak na rysunku bezpośrednio do 0V2. Nóżki 1 i 30 nowej pamięci możemy odłamać, dzięki temu nie będą nam przeszkadzać.
Nóżki pamięci, które nie dosięgną do swoich odpowiedników na płycie, możemy przylutować do wolnych padów, a następnie za pomocą kynaru poprowadzić do właściwych miejsc (odpowiednie pady, przelotki lub ścieżki).

MONTAŻ PODSTAWKI PLCC32

PLCC32
Podstawkę PLCC32 musimy odpowiednio zmodyfikować przy użyciu np. pilnika.

16kB
Fotografia przedstawia podstawkę PLCC32 z wszystkimi wymaganymi połączeniami, należy pamiętać o odpowiednim poprowadzeniu przewodów (prawa strona zdjęcia) w przeciwnym wypadku będziemy mieli problemy z przykręceniem pokrywy dociskającej płytę z elektroniką.

16kB
Styki nr 1 i 30 zdemontowałem.

16kB
Należy uważać na otwory w płycie głównej, musimy zachować odpowiedni dystans pomiędzy kynarem a otworami w przeciwnym wypadku będziemy mieli problemy z założeniem pokrywy dociskającej płytę główną.

16kB
Część nóżek musimy delikatnie skrzywić, pamiętając o tym, że nóżki podstawki są bardzo kruche.

16kB
Fotografia przedstawia ekstremalnie skrzywione nóżki nr 22 i 23, tak mocne odkształcenie możemy zrealizować tylko i wyłącznie delikatnie profilując nóżki na całej ich długości.

16kB
Wyprostowanie nóżek do poziomu zrealizujemy poprzez wyprofilowanie ich zaraz za ich fabrycznym zgięciem, próba odchylenia ich w miejscu oryginalnego zgięcia zakończy się ukruszeniem nóżek.