| Indeks | English version |
Opisane urządzenie umożliwia wymianę plików pomiędzy kalkulatorem PB-1000 i komputerem PC za pomocą portu szeregowego. Nie jest zgodne z oryginalnym interfejsem FA-7/MD-100, za to jest znacznie mniejsze i nie wymaga osobnego zasilania. Wersja zgodna z FA-7/MD-100 jest przedstawiona tutaj.


Programy sterujące zostały napisane z użyciem tylko oficjalnej listy rozkazów, tak żeby były akceptowane przez wbudowany asembler. Można je również skompilować za pomocą asemblera HD61 z opcją LEVEL 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 (np. przez zastąpienie instrukcji JP przez optymalniejszą JR).
pb1000s6.zip - oba poniższe programy pozbawione komentarzy i nadmiernych spacji
Program wysyła przez port szeregowy zawartość pliku o stałej nazwie "MEMO". Transmisja może zostać przerwana klawiszem BRK.
ORG &H7000
START &H7000
PST PD,&HC4
PST PE,&HC0
CAL &HB6EE ;kopiuj nazwę pliku "MEMO" do WORK1
CAL &HE80F ;znajdź plik dowolnego typu o nazwie w WORK1
JP C,&HABE0 ;NF Error, plik nie został znaleziony
PRE IZ,$6 ;wskaźnik do wpisu katalogu
DB 233,36,96 ;= LDM $4,(IZ+$30),4
; $4,$5 = wskaźnik początku danych, $6,$7 = wskaźnik końca danych
LOOP1: SBCW $6,$4
RTN Z ;powrót gdy osiągnięty koniec pliku
LD $0,$30 ;kolumna klawiatury KO1
CAL &H0625 ;wysłanie $0 na KO, odczyt wiersza KI do $1,$2
BIU $1 ;KI12 -> Carry
RTN C ;powrót, gdy wcisnięty klawisz BRK
LD $1,($4) ;$1 <- bajt do wysłania
ADW $4,$30 ;zwiększenie wskaźnika danych
CAL RSWRT ;wysłanie bajtu
JR LOOP1
; procedura wysyła bajt $1 przez port PD3
RSWRT: LD $2,&HFB ;2 bity stopu
BIUW $1 ;bit startu
INVW $1
GST IE,$0
PST IE,$31 ;zablokowanie przerwań
; pętla wysyłająca bity, powinna zająć 379 taktów (=910000kHz/2400baud)
RSWR1: LD $3,&H0C ;12 taktów
BIDW $2 ;14 taktów, wysyłany bit -> Carry
ROU $3 ;9 taktów
BIU $3 ;9 taktów
BIU $3 ;9 taktów
BIU $3 ;9 taktów
PST PE,$3 ;9 taktów
; opóźnienie
LD $3,11 ;12 taktów
RSWR2: SB $3,1 ;12 taktów
JP NZ,RSWR2 ;12 taktów
NOP ;6 taktów
; następny bit, $1,$2=&H0001 gdy wysłane wszystkie 11 bitów ramki
SBCW $30,$1 ;17 taktów
JR NZ,RSWR1 ;9 taktów
PST IE,$0 ;przywrócenie stanu przerwań
RTN
Program odczytuje dane z portu szeregowego do pliku tekstowego o stałej nazwie "MEMO". Transmisja zostaje zakończona po odebraniu znaku EOF o kodzie &H1A, lub gdy została przerwana klawiszem BRK, lub gdy wystąpił błąd.
Pliki binarne można przesyłać jako tekst (jako listę argumentów instrukcji DATA w programie BASIC lub w szesnastkowym formacie PBF), a następnie przekonwertować na docelowy format. Odpowiednie programy konwertujące TRANS oraz PBFTOBIN są dołączone do asemblera HD61.
ORG &H7000
START &H7000
PST PE,&HC0
CAL &HB6EE ;kopiuj nazwę pliku "MEMO" do WORK1
CAL &HE80F ;znajdź plik dowolnego typu o nazwie w WORK1
CAL NC,&HE842 ;KILL, skasuj istniejący plik
CAL &HB1C2 ;NDFMK, utwórz nowy plik tekstowy
PRE IZ,&H6945
DB 233,2,96 ;= LDM $2,(IZ+$31),4 ;$2<-MEMEN, $4<-DATDI
GST IE,$1
PST IE,$31 ;zablokowanie przerwań
PST IA,$30 ;wybierz kolumnę klawiatury KO1
; czekanie na bit startu
LOOP1: GRE KY,$8
BIU $8 ;KI12 -> Carry
JR C,EXIT ;powrót, gdy wcisnięty klawisz BRK
; powinno zająć ok. 1.5*379 taktów od tego miejsca do BIT1
GPO $8 ;9 taktów
ANC $8,&H10 ;12 taktów
JR NZ,LOOP1 ;9 taktów
; został wykryty bit startu
LDW $8,&H0818 ;23 takty, $9 = licznik bitów, $8 = opóźnienie
JR DEL2 ;9 taktów
; pętla odbierająca bity, powinna zająć 379 taktów stąd do STORE
LOOP2: LD $8,14 ;12 taktów, opóźnienie
DEL2: SB $8,1 ;12 taktów
JR NZ,DEL2 ;9 taktów
NOP ;6 taktów
; powinno zająć 379 taktów od tego miejsca do STOP1
BIT1: GPO $8 ;9 taktów
AN $8,&H10 ;12 taktów
SBC $30,$8 ;12 taktów, odebrany bit -> Carry
ROD $6 ;9 taktów, $6 = odebrany bajt
; następny bit
SB $9,1 ;12 taktów
JP NZ,LOOP2 ;12 taktów
; zapis odebranego bajtu do pamieci
STORE: SBC $6,&H1A ;12 taktów
JR Z,EXIT ;9 taktów, koniec gdy odebrano EOF
SBCW $2,$4 ;17 taktów
JR NC,OMERR ;9 taktów, brak pamięci
PRE IX,$2 ;14 taktów
LD $7,&H1A ;12 taktów, znak EOF
STW $6,(IX-$30) ;20 taktów, zapis odebranego znaku + EOF
ADW $2,$30 ;17 taktów, zwiększenie wskaźnika danych
STW $2,(IZ+$31) ;20 taktów, MEMEN
PRE IX,$4 ;14 taktów, DATDI
LD $0,3 ;12 taktów
STW $2,(IX+$0) ;20 taktów, adres końcowy pliku
LD $8,6 ;12 taktów, opóźnienie
DEL3: SB $8,1 ;12 taktów
JR NZ,DEL3 ;9 taktów
; sprawdzenie obecności bitu stopu
STOP1: GPO $8
AN $8,&H10
JR NZ,LOOP1
FRERR: PST IE,$1 ;przywrócenie stanu przerwań
JP &HAC30 ;FR error (błąd ramki)
OMERR: PST IE,$1 ;przywrócenie stanu przerwań
JP &HABBD ;OM error (brak pamięci)
EXIT: PST IE,$1 ;przywrócenie stanu przerwań
RTN
Link do podobnego projektu wykorzystującego układ scalony interfejsu RS232 lub USB zamiast pojedynczych elementów. Załączone oprogramowanie potrafi przesyłać dane z prędkością 9600 bps. Uwaga: autor wybrał inne bity portu PB-1000.