| Indeks | English version
|
Moim zdaniem, najpoważniejszą wadą MK-85 w stosunku do pierwowzoru Casio FX-700P jest brak obsługi jakiejś zewnętrznej pamięci masowej. Przedstawiony projekt wykorzystuje możliwość programowania w języku maszynowym do realizacji zapisu programów BASIC w nieulotnej pamięci szeregowej.
Do realizacji projektu wybrana została popularna szeregowa pamięć EEPROM typu 93C86 z magistralą Microwire, podłączona do portu klawiatury. Pamięć EEPROM powinna być wyciągana lub wkładana do podstawki tylko przy wyłączonym kalkulatorze.

W pamięci EEPROM zapisywana jest tablica adresów programów BASIC z adresu 822C-823F oraz segment kodu programów począwszy od adresu 826A.
Wygodnie jest pozostawić program startujący jako P0 i używać tylko P1-P9 dla innych programów w języku BASIC.
; port 100, bit 7 - Data Output
; port 102, bit 1 - Data Input
; port 102, bit 2 - Clock
; port 102, bit 3 - Chip Select
.radix 16
start: mov #E,@#102 ;CE=0, CK=0, DO=0
mov #822C,r4 ;adres początkowy RAM
mov #C000,r3 ;komenda READ i adres EEPROM
clr r5 ;bez opóźnień
cmpb @#825A,#4C ;'L', load
beq loop
mov #A000,r3 ;komenda WRITE i adres EEPROM
mov #20,r5 ;opóźnienie ok. 10ms
cmpb @#825A,#53 ;'S', save
bne end
; Write Enable
mov #9800,r1 ;komenda EWEN
mov #E,r2 ;13 (dziesiętnie) impulsów clock
jsr pc,xfer
mov #E,@#102 ;CE=0, CK=0, DO=0
; transmisja danych
loop: mov r3,r1
add #8,r3 ;zwiększenie adresu EEPROM
mov #E,r2 ;13 (dziesiętnie) impulsów clock
jsr pc,xfer
mov (r4),r1 ;dana do zapisu, ignorowana przy odczycie
mov #11,r2 ;16 (dziesiętnie) impulsów clock
jsr pc,xfer
mov #E,@#102 ;CE=0, CK=0, DO=0
mov r5,r0 ;opóźnienie
beq load
jsr pc,@#10FC ;czas zapisu do EEPROM ok. 10ms
br next
load: mov r1,(r4) ;odczytana dana
next: cmpb (r4)+,(r4)+ ;zwiększenie adresu RAM
cmp r4,#8240
bcs loop
bne next1
mov #826A,r4 ;pominięcie obszaru zmiennych systemowych
next1: cmp r4,@#823E
bcs loop
; Write Disable
end: mov #8000,r1 ;komenda EWDS
mov #E,r2 ;13 (dziesiętnie) impulsów clock
jsr pc,xfer
mov #E,@#102 ;CE=0, CK=0, DO=0
; restart systemu
clr r0 ;wektor reset
jmp (r0)
xfer1: bic #4,r0 ;CK=1
mov r0,@#102
mov @#100,r0
rolb r0 ;Carry=/DO
; wysłanie r1 przez DI oraz odczyt z DO do r1
; oczekuje ilości_bitów+1 w r2
xfer: rol r1 ;Carry=/DI, bit 0 rejestru r1 = /DO
mov #3,r0 ;CE=1, CK=0, DI=0
sbc r0 ;CE=1, CK=0, DI=/Carry
asl r0
mov r0,@#102
sob r2,xfer1
com r1
rts pc
9000 !DF,15,0E,00,02,01,C4,15 9010 !2C,82,C3,15,00,C0,05,0A 9020 !D7,A7,5A,82,4C,00,11,03 9030 !C3,15,00,A0,C5,15,20,00 9040 !D7,A7,5A,82,53,00,28,02 9050 !C1,15,00,98,C2,15,0E,00 9060 !F7,09,68,00,DF,15,0E,00 9070 !02,01,C1,10,C3,65,08,00 9080 !C2,15,0E,00,F7,09,54,00 9090 !01,13,C2,15,11,00,F7,09 9100 !4A,00,DF,15,0E,00,02,01 9110 !40,11,03,03,DF,09,FC,10 9120 !01,01,4C,10,14,A5,17,21 9130 !40,82,E7,87,02,02,C4,15 9140 !6A,82,1F,21,3E,82,E1,87 9150 !C1,15,00,80,C2,15,0E,00 9160 !F7,09,18,00,DF,15,0E,00 9170 !02,01,00,0A,48,00,C0,45 9180 !04,00,1F,10,02,01,C0,17 9190 !00,01,40,8C,41,0C,C0,15 9200 !03,00,80,0B,C0,0C,1F,10 9210 !02,01,8F,7E,41,0A,87,00 9999 END
mk85util.zip - rozmiar pliku: 21kB, teksty
źródłowe i kody wykonywalne, DOS lub Windows (w okienku DOS)
Ten program dokonuje konwersji listy programów BASIC w formacie ASCII na wewnętrzny format danych MK-85.
Sposób użycia:
bas2mk85.com program1.bas [program2.bas program3.bas ...]
Ten program dokonuje przeciwnej operacji, tzn. wyświetla zawartość pamięci EEPROM.
Sposób użycia: mk852bas.com infile.bin