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
-
pamięć
128Kx8bit (uniform block) FLASH M29F010B 70K6
firmy STMicroelectronics.
-
przewód
w izolacji teflonowej Kynar
1x0,25mm.
-
opcjonalnie podstawka
PLCC 32.
Garść uwag na wstępie
-
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.
-
rodzaj
użytego przewód nie ma większego
znaczenia.
-
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/
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"
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 posiadającej końcówki
E0, E1, E2 podłączone do masy:
SAVE 0
lub SAVE
LOAD 0
lub LOAD
- Zapis i
odczyt pamięci posiadającej końcówki E0, E1, E2
podłączone do +Vcc: SAVE
7 LOAD
7
Obsługa bazy danych
/SDATA, LDATA/
- Baza danych zapisywana jest 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 innego niż P9
możemy zmienić linię nr 20:
20 FOR Z=1 TO
10
porównywanie rekordów
10
VAC
20 IF LDATA
1=LDATA 2 THEN 100
30
PRINT
"ROZNE" 40 END
100 PRINT
"ZGODNE"
110
END
Znak <> zastępujemy właściwym
symbolem z klawiatury 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) (/E0,E1,E2 = GND, READ/ Device
Select Code = binary 10100001 / decimal
161)
(/E0,E1,E2 = VCC,
READ/ Device Select Code = 10101111 /
175)
130 FOR I=1
TO L
140
X=I2CRBYTE 0: IF X<192; $=$+CHR X
(Assign Read Byte
to X + Send ACK : CHR 191 = Last ASCII Sign)
(Sequential Read, From Start Address to Start
Address + L)
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:
b7, b6, b5, b4
-> Device Type Identifier
b3, b2, b1 ->
E2, E1, E0 (Chip Enable
Address)
b0 ->
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
Zaczynamy
...
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 testowa
- rozszerzone mozliwości POKE, PEEK, [INS] (aktualnie działa jak przełacznik) i [DEL] (na
końcu linii działa jak BACKSPACE) 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
 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
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ą.
Styki nr 1 i 30
zdemontowałem.
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ą.
Część nóżek
musimy delikatnie skrzywić, pamiętając o tym, że
nóżki podstawki są bardzo
kruche.
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.
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.
|