| Index | wersja polska |
The presented device allows to exchange files between the PB-1000 and a PC through the serial port. It isn't compatible with the original FA-7/MD-100 interface. See this project for a compatible one.



The programs intentionally use only a subset of instructions accepted by the built-in assembler. The HD61 assembler can be also applied, but with the LEVEL 0 option.
The timing critical parts are marked by the number of clock cycles in the comments. Please don't change them (for example by replacing the JP instructions with more optimal JR) unless you know what you are doing!
pb1000s6.zip - both following programs stripped of comments and excessive whitespace
The program sends the contents of the sequential file of fixed name "MEMO" through the serial port. The transfer can be interrupted with the BRK key.
ORG &H7000
START &H7000
PST PD,&HC4
PST PE,&HC0
CAL &HB6EE ;copy the file name "MEMO" to WORK1
CAL &HE80F ;search for a file name in WORK1, any file type
JP C,&HABE0 ;NF Error, file not found
PRE IZ,$6 ;pointer to the directory entry
DB 233,36,96 ;= LDM $4,(IZ+$30),4
; $4,$5 = data begin pointer, $6,$7 = data end pointer
LOOP1: SBCW $6,$4
RTN Z ;return when end of the file
LD $0,$30 ;keyboard column KO1
CAL &H0625 ;select KO column $0, read KI row to $1,$2
BIU $1 ;KI12 -> Carry
RTN C ;return when the BRK key was pressed
LD $1,($4) ;$1 <- byte to send
ADW $4,$30 ;increment the data pointer
CAL RSWRT ;transmit the byte
JR LOOP1
; transmit the byte $1 through the port PD3
RSWRT: LD $2,&HFB ;2 stop bits
BIUW $1 ;start bit
INVW $1
GST IE,$0
PST IE,$31 ;disable interrupts
; bit loop, should take 379 clock cycles (=910000kHz/2400baud)
RSWR1: LD $3,&H0C ;12 cycles
BIDW $2 ;14 cycles, transmitted bit -> Carry
ROU $3 ;9 cycles
BIU $3 ;9 cycles
BIU $3 ;9 cycles
BIU $3 ;9 cycles
PST PE,$3 ;9 cycles
; delay
LD $3,11 ;12 cycles
RSWR2: SB $3,1 ;12 cycles
JP NZ,RSWR2 ;12 cycles
NOP ;6 cycles
; next bit, $1,$2=&H0001 when all 11 bits have been transmitted
SBCW $30,$1 ;17 cycles
JR NZ,RSWR1 ;9 cycles
PST IE,$0 ;restore interrupts
RTN
The program reads data from the serial port to the sequential text file of fixed name "MEMO". The transfer is terminated upon reception of an EOF character (code &H1A), or when the BRK key was pressed, or when transmission error occurred.
Binary files can be transferred as a text (either as a list of values following the DATA statement in a BASIC program, or in the PBF hex format), then converted to the destination format. Suitable conversion programs TRANS and PBFTOBIN are provided with the HD61 assembler.
ORG &H7000
START &H7000
PST PE,&HC0
CAL &HB6EE ;copy the file name "MEMO" to WORK1
CAL &HE80F ;search for a file name in WORK1, any file type
CAL NC,&HE842 ;KILL, delete the file if exists
CAL &HB1C2 ;NDFMK, create a sequential file
PRE IZ,&H6945
DB 233,2,96 ;= LDM $2,(IZ+$31),4 ;$2<-MEMEN, $4<-DATDI
GST IE,$1
PST IE,$31 ;disable interrupts
PST IA,$30 ;select the KO1 keyboard column
; wait for the start bit
LOOP1: GRE KY,$8
BIU $8 ;KI12 -> Carry
JR C,EXIT ;return when the BRK key was pressed
; it should take ca. 1.5*379 clock cycles from this point up to BIT1
GPO $8 ;9 cycles
ANC $8,&H10 ;12 cycles
JR NZ,LOOP1 ;9 cycles
; start bit detected
LDW $8,&H0818 ;23 cycles, $9 = bit counter, $8 = delay
JR DEL2 ;9 cycles
; bit loop, should take 379 clock cycles from this point up to STORE
LOOP2: NOP ;6 cycles
LD $8,14 ;12 cycles, delay
DEL2: SB $8,1 ;12 cycles
JR NZ,DEL2 ;9 cycles
; it should take 379 clock cycles from this point up to STOP1
BIT1: GPO $8 ;9 cycles
AN $8,&H10 ;12 cycles
SBC $30,$8 ;12 cycles, received bit -> Carry
ROD $6 ;9 cycles, $6 = received byte
; next bit
SB $9,1 ;12 cycles
JP NZ,LOOP2 ;12 cycles
; process the received byte
STORE: SBC $6,&H1A ;12 cycles
JR Z,EXIT ;9 cycles, EOF encountered
SBCW $2,$4 ;17 cycles
JR NC,OMERR ;9 cycles, out of memory
PRE IX,$2 ;14 cycles
LD $7,&H1A ;12 cycles, EOF character
STW $6,(IX-$30) ;20 cycles, store the received character + EOF
ADW $2,$30 ;17 cycles, increment the data pointer
STW $2,(IZ+$31) ;20 cycles, MEMEN
PRE IX,$4 ;14 cycles, DATDI
LD $0,3 ;12 cycles
STW $2,(IX+$0) ;20 cycles, end address of the file
LD $8,6 ;12 cycles, delay
DEL3: SB $8,1 ;12 cycles
JR NZ,DEL3 ;9 cycles
; check the stop bit
STOP1: GPO $8
AN $8,&H10
JR NZ,LOOP1
FRERR: PST IE,$1 ;restore interrupts
JP &HAC30 ;FR error (framing error)
OMERR: PST IE,$1 ;restore interrupts
JP &HABBD ;OM error (insufficient memory)
EXIT: PST IE,$1 ;restore interrupts
RTN
Here is a link to a similar project using an integrated interface circuit (RS232 or USB) instead of discrete components. The provided software supports data transfer speed of 9600 bps. Please note that the author chose different PB-1000 port pins.