Index | wersja polska |
The presented device allows to transfer data between the FX-8000G and a PC through the serial port. It isn't compatible with the original FA-80 unit.
Circuit diagram of an interface for an RS232 port. It can only load data to the calculator.
Circuit diagram of an interface with 5V voltage levels. In order to be used with an RS232 or USB port, an additional converter is required, for example built around the MAX232 level shifter (RS232) or the FT232R chip (USB).
The communication programs are written in assembler. The method of entering and executing machine code on the FX-8000G is described on a separate page.
The program reads data from the serial port to the file editor area. The transfer is terminated when the DEL key was pressed, or when transmission error occurred.
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
The timing critical parts are marked by the number of clock cycles in the comments. Please don't change them unless you know what you are doing!
ORG &H5AE8 BEGIN: CAL &HB78A ;"LOAD executing" LDW IX,&HC000 LDW IY,&HC77C CAL &H0F99 ;fill RAM from address IX to IY with &HFF ADW IX,2 ;IX = &HC77D PST IE,&H00 ;disable interrupts PST KO,&H84 ;select the keyboard output KO9 ; wait for the start bit LOOP1: JMP K,&H1449 ;10 cycles, "Break" when DEL key was pressed ; it should take ca. 1.5*379 clock cycles from this point up to BIT1 GST R2,IF ;8 cycles TAN R2,&H08 ;10 cycles JMP Z,LOOP1 ;10 cycles ; start bit detected LDW IY,&H081A ;10 cycles, R121 = bit counter, R57 = delay ; bit loop, should take 379 clock cycles from this point up to STORE LOOP2: DEL2: SB R57,1 ;10 cycles JMP NZ,DEL2 ;10 cycles LD R57,15 ;10 cycles, delay ; it should take 379 clock cycles from this point up to STOP1 BIT1: GST R2,IF ;8 cycles AN R2,&H08 ;10 cycles TSB R2,1 ;10 cycles, received bit -> Carry ROD R0 ;8 cycles, R0 = received byte NOP ;6 cycles NOP ;6 cycles ; next bit SB R121,1 ;10 cycles JMP NZ,LOOP2 ;10 cycles ; store the received byte STORE: ST -(IX),R0 ;16 cycles DEL3: SB R57,1 ;10 cycles JMP NZ,DEL3 ;10 cycles ; check for the stop bit STOP1: GST R2,IF TAN R2,&H08 JMP Z,LOOP1 ;next byte if no framing error JMP &HB188 ;"I/O error"
The program dumps the RAM contents through the serial port. The transfer can be terminated with the DEL key.
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 ;disable interrupts PST KO,&H84 ;select the keyboard output KO9 ; byte loop LOOP1: JMP K,&H1449 ;"Break" when DEL key was pressed LD R2,&H03 ;2 stop bits LD R1,(IX)+ BIUM R1..R2 ;start bit ; bit loop, should take 379 clock cycles (=910000kHz/2400baud) LOOP2: LDM R3..R4,16 ;14 cycles, dummy load to R4 DEL: SB R3,1 ;10 cycles JMP NZ,DEL ;10 cycles ; Carry cleared at this point ROD R2 ;8 cycles ROD R1 ;8 cycles, transmitted bit -> Carry JMP C,ONE ;10 cycles PST IF,&H00 ;8 cycles JMP LOOP2 ;10 cycles, next bit ONE: PST IF,&H01 JMP NZ,LOOP2 ;next bit ; next byte TSB R120,&HE0 ;end of the RAM? JMP C,LOOP1 ;next byte if not JMP &H1449 ;"Break"