Indeks | English version |
Przedstawione urządzenie umożliwia transfer danych pomiędzy kalkulatorem FX-8000G i komputerem PC za pomocą portu szeregowego. Nie jest kompatybilne z oryginalną przystawką FA-80.
Schemat interfejsu dla portu RS232. Może tylko przesyłać dane do kalkulatora.
Schemat interfejsu dla poziomów logicznych 5V. W celu podłączenia do portu RS232 lub USB wymagany jest dodatkowy konwerter zbudowany np. na układzie MAX232 (RS232) lub FT232R (USB).
Programy przesyłające dane napisane zostały w języku asembler. Metoda wpisywania i uruchamiania programów maszynowych na kalkulatorze FX-8000G opisana jest na osobnej stronie.
Program odczytuje dane z portu szeregowego do pamięci edytora plików. Transmisja zostaje zakończona wciśnięciem klawisza DEL lub gdy wystąpił błąd.
2→S Hex 60B78A40:Prog 0 C00041C7:Prog 0 7C600F99:Prog 0 4802C300:Prog 0 C0847114:Prog 0 49F9822C:Prog 0 82087C5A:Prog 0 FA41081A:Prog 0 0BF10174:Prog 0 5B085EF1:Prog 0 0FF9820C:Prog 0 82082B82:Prog 0 01FE00FA:Prog 0 FA03F101:Prog 0 745B088C:Prog 0 000BF101:Prog 0 745B25F9:Prog 0 822C8208:Prog 0 7C5AFA70:Prog 0 B1880000:Prog 0
Fragmenty kodu, które zawierają w komentarzu liczbę taktów, muszą być wykonane w ściśle określonym czasie. Nie powinny być one modyfikowane w sposób, który by wpływał na czas wykonania.
ORG &H5AE8 BEGIN: CAL &HB78A ;"LOAD executing" LDW IX,&HC000 LDW IY,&HC77C CAL &H0F99 ;zapełnienie pamięci RAM od adresu IX do IY wartością &HFF ADW IX,2 ;IX = &HC77D PST IE,&H00 ;zablokowanie przerwań PST KO,&H84 ;wybrane wyjście portu klawiatury KO9 ; czekanie na bit startu LOOP1: JMP K,&H1449 ;10 taktów, "Break" gdy wciśnięty klawisz DEL ; powinno zająć ok. 1.5*379 taktów od tego miejsca do BIT1 GST R2,IF ;8 taktów TAN R2,&H08 ;10 taktów JMP Z,LOOP1 ;10 taktów ; został wykryty bit startu LDW IY,&H081A ;10 taktów, R121 = licznik bitów, R57 = opóźnienie ; pętla odbierająca bity, powinna zająć 379 taktów stąd do STORE LOOP2: DEL2: SB R57,1 ;10 taktów JMP NZ,DEL2 ;10 taktów LD R57,15 ;10 taktów, opóźnienie ; powinno zająć 379 taktów od tego miejsca do STOP1 BIT1: GST R2,IF ;8 taktów AN R2,&H08 ;10 taktów TSB R2,1 ;10 taktów, odbierany bit bit -> Carry ROD R0 ;8 taktów, R0 = odbierany bajt NOP ;6 taktów NOP ;6 taktów ; następny bit SB R121,1 ;10 taktów JMP NZ,LOOP2 ;10 taktów ; zapis odebranego bajtu do pamieci STORE: ST -(IX),R0 ;16 taktów DEL3: SB R57,1 ;10 taktów JMP NZ,DEL3 ;10 taktów ; sprawdzenie obecności bitu stopu STOP1: GST R2,IF TAN R2,&H08 JMP Z,LOOP1 ;następny bajt, gdy nie wystąpił błąd ramki JMP &HB188 ;"I/O error"
Program wysyła przez port szeregowy zawartość pamięci RAM. Transmisja może zostać przerwana klawiszem DEL.
2→S Hex 60B77B40:Prog 0 C000C300:Prog 0 C0847114:Prog 0 495E8203:Prog 0 A801FC81:Prog 0 405F8B90:Prog 0 0B830174:Prog 0 5B00FE02:Prog 0 FE01775B:Prog 0 12C10070:Prog 0 5AFDC101:Prog 0 745AFD23:Prog 0 F0E0775A:Prog 0 F2701449:Prog 0
ORG &H5AE8 BEGIN: CAL &HB77B ;"SAVE executing" LDW IX,&HC000 PST IE,&H00 ;zablokowanie przerwań PST KO,&H84 ;wybrane wyjście portu klawiatury KO9 ; pętla wysyłająca bajty LOOP1: JMP K,&H1449 ;"Break" gdy wciśnięty klawisz DEL LD R2,&H03 ;2 bity stopu LD R1,(IX)+ BIUM R1..R2 ;bit startu ; pętla wysyłająca bity, powinna zająć 379 taktów (=910000kHz/2400baud) LOOP2: LDM R3..R4,16 ;14 taktów, zapis do R4 tylko dla nabicia taktów DEL: SB R3,1 ;10 taktów JMP NZ,DEL ;10 taktów ; w tym momencie bit Carry jest skasowany ROD R2 ;8 taktów ROD R1 ;8 taktów, wysyłany bit -> Carry JMP C,ONE ;10 taktów PST IF,&H00 ;8 taktów JMP LOOP2 ;10 taktów, następny bit ONE: PST IF,&H01 JMP NZ,LOOP2 ;następny bit ; następny bajt TSB R120,&HE0 ;koniec pamięci RAM? JMP C,LOOP1 ;następny bajt jeżeli nie JMP &H1449 ;"Break"