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