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.