HC-91 CP/M - transfer prin portul serial

167 views
Skip to first unread message

Mihai Gaitos

unread,
Dec 5, 2020, 2:08:13 PM12/5/20
to romanianho...@googlegroups.com
Status update (daca intereseaza pe cineva :) ) in urma unei discutii de acum ceva vreme de pe grupul de yahoo.

S-a facut receptie seriala pentru HC cu CP/M, merge "brici" la 19200 bps.
De asemenea programe de transmisie/receptie XMODEM si scris in fisier.
Presupun ca ar trebui sa functioneze si pe HC-2000 (nu doar -91), dar nu am cum sa testez.

Istorie si surse la https://hawk.ro/stories/hc/hc_serial_ro.html

Enjoy!

Mihai ha...@hawk.ro [RomanianHomeComputer] wrote:
 

Multumesc de lamuriri!

Mda si cu RDR: e cam la fel (ba parca chiar mai rau la erori...)
Si acuma realizez... IF-1 nu include niciun fel de SIO, tot lucrul cu
seriala se face din soft, bit cu bit, corect? In ce m-am bagat... aoleu
timing-uri... :)

Cosmin hco...@yahoo.com [RomanianHomeComputer] wrote:
> Dupa cate stiu, se poate transfera si cu PIP, poti incerca: "PIP
> A:FISIER.TXT=RDR:" pentru a primi un fisier. Se citeste de pe seriala
> pana la caracterul ASCII 26 (EOF).
> Dar pot aparea erori la transfer, etc.. de aia exista protcoale gen
> Kermit, XModem.
>
> Nu ma mira ca ai erori la primire in programul tau daca folosesti
> functile BDOS pentru asta. CP/M nu are probabil nici un buffer de
> citire, si o implementare "corecta" in cazul asta ar trebui sa
> citeasca portul serial pe intreruperi.
>

Bogdan

unread,
Dec 7, 2020, 7:55:01 AM12/7/20
to RomanianHomeComputer
multumesc! de curand am "scos de la naftalina" un hc2000 si m-am jucat putin, si bineinteles ca am intampinat aceeasi problema, cu transferul de fisiere. chiar ma gandeam daca exista vreo solutie pentru portul serial.

am testat imaginea pusa de tine in emulatorul fuse, dar nu mi-a deschis-o direct. am impresia ca e formatul care se poate scrie direct pe discheta, nu formatul .dsk asteptat de fuse; dar, am redenumit hcserial.dsk in hcserial.img si am rulat

samdisk copy hcserial.img hcserial.dsk

si apoi imaginea a mers in emulator. mentionez asta in caz ca cineva intampina probleme cu formatul.

o sa testez si in hc, cand am timp sa fac un cablu.

foarte interesante si celelalte postari ale tale!

George Chirtoaca

unread,
Dec 7, 2020, 9:38:13 AM12/7/20
to romanianho...@googlegroups.com
Salut,

Ineresanta poveste. 

Am folosit mai demult transferul pe "seriala" intre HC in modul BASIC si PC pentru a rula pe HC binarele pe care produceam pe PC. 
Foloseam un mic program pentru Windows pe care l-am scris, l-am pus cu surse aici: http://rhc.zapto.org/index.php?dir=bin/pc/Tools/rs232/COM2HC.zip. Acolo mai sunt si alte 3 utilitare gasite pe WordlOfSpectrum pentru acest scop, pentru transfer cu Spectrum cu IF1. 
Tin minte ca restrictia era sa se trimita un buffer de un singur octet pentru a evita erorile de transfer, si mergea OK cu rutinele BASIC, gen FORMAT "b";19200: LOAD *"b".

Mai tin minte ca a mai scris si Roelof Konig de pe grup rutine pentru transfer serial, dar nu gasesc documentul lui. II contactez si sper sa il gaseasca el.

Mai exista in fisierele de pe grup documentata o interfata RS232 "pe bune" facuta cu SIO de Cristi Grecu.

--
Ați primit acest mesaj deoarece sunteți abonat(ă) la grupul „RomanianHomeComputer” din Grupuri Google.
Pentru a vă dezabona de la acest grup și pentru a nu mai primi e-mailuri de la acesta, trimiteți un e-mail la adresa romanianhomecomp...@googlegroups.com.
Pentru a vizualiza această discuție pe web, accesați https://groups.google.com/d/msgid/romanianhomecomputer/0254cb6e-e97c-436f-bc64-9e518ff9d925n%40googlegroups.com.

George Chirtoacă

unread,
Feb 21, 2021, 1:47:36 PM2/21/21
to RomanianHomeComputer
Salut,

Am facut cateva experimente cu transferul pe seriala cu un HC 2000 si un PC, folosind diverse metode. Concluziile sunt:
1. Folosind comenzile de BASIC(LOAD *"b"/SAVE *"b"), viteza maxima teoretica fara pierdieri e 4800 BAUD. Viteza efectiva e mai mica, in jur de 3200 BAUD, in ambele sensuri.
2. Folosind rutinele lui Mihai Gaitos, cu viteza teoretica 19200 BAUD, vitezele efective sunt in jur de 17000 BAUD PC la HC si 8000 BAUD HC la PC.
3. Folosind rutina lui Roelof Koning (mai jos) PC la HC, cu viteza teoretica 115200 BAUD,  se corup datele.
Deci rutinele lui Mihai sunt cea mai buna optiune. 

Eu sunt interesat de transferul serial pentru a adauga la programul HCDisk facilitatea de a scrie/citii imagini de disc folosind HC-ul, care sa le transfere catre/de la PC prin seriala. Asta deoarece poate fi mai simplu sa cumparam un cablu serial-USB, si sa facem un adaptor pasiv pentru mufa seriala HC, decat sa mai gasim PC-uri cu unitate floppy. De asemenea, se pot transfera rapid programe din PC la HC, fara a mai folosi dischete sau stick USB prin interfata GoTek, etc.
O imagine de disc de 640 KB s-ar transfera de la HC la PC in 10,5 minute prin seriala. Pe discheta, viteza teoretica e pe la 250 kbiti/s.
Pentru un joc de aproximativ 40 KB, incarcarea de la PC la HC dureaza cam 20 de secunde. E mai lent ca discul, dar mult mai rapid decat incarcarea de pe caseta, care avea 1200 BAUD.
Alta varianta interesanta de interfatare e prin audio, programul OTLA se lauda cu BAUD 12000 folosind modulari eficiente, deci de 10 ori viteza normala pentru caseta: https://code.google.com/archive/p/otla/https://sites.google.com/site/hyperkingproject/tutoriales/modificaciones/compresiondejuegosdespectrumaaltavelocidadotla .



DEVICE ZXSPECTRUM48
; * TORNADO *  serial 115200 baud
;============================================================
           ORG  40000
;           DUMP 40000

;TxD input from PC is on port 247, bit 7
;The CTS signal for PC is on bit 4 on port 239
; DE  = memaddr
; DE' = len

Start1:
setvals    EXX
           LD   DE,6912
           EXX
           LD   DE,16384          ;screen$

start      DI
           DEC  DE                ;accomodate the coming INC
           LD   BC,239            ;port for CTS
           LD   A,255
           OUT  (C),A             ;signal CTS =1
           LD   C,247             ;now TXD port

loopaddr   IN   A,(C)             ;12
           JP   P,loopaddr        ;10   loop if <128

prep       LD   A,0               ;7 (spend some Ts here)
           INC  DE                ;6   total 35 Ts

bitloop    IN   L,(C)             ;12
           RL   L                 ;8
           RRA                    ;4
           INC  HL                ;6 delay, total 30 Ts
b1         IN   L,(C)
           RL   L
           RRA
           INC  HL                ;6 delay, total 30 Ts
b2         IN   L,(C)
           RL   L
           RRA
           INC  HL                ;6 delay, total 30 Ts
b3         IN   L,(C)
           RL   L
           RRA
           CP   1                 ;7 delay, total 31 Ts
b4         IN   L,(C)
           RL   L
           RRA
           INC  HL                ;6 delay, total 30 Ts
b5         IN   L,(C)
           RL   L
           RRA
           INC  HL                ;6 delay, total 30 Ts
b6         IN   L,(C)
           RL   L
           RRA
           INC  HL                ;6 delay, total 30 Ts
b7         IN   L,(C)
           RL   L
           RRA   ;24 Ts, no further delay

storebyte  CPL                    ;4 invert all bits(!)
           LD   (DE),A            ;7  store
           EXX                    ;4
           DEC  DE                ;6  count
           LD   A,D               ;4
           OR   E                 ;4
           EXX                    ;4
           JP   NZ,loopaddr       ;10  total 43

exit       LD   C,239
           LD   A,0
           OUT  (C),A             ;CTS = 0
           EI
           RET
End:

savebin "serial2.bin", Start1, End - Start1

Mihai Gaitos

unread,
Feb 21, 2021, 4:37:20 PM2/21/21
to romanianho...@googlegroups.com
Salut!

Multumesc de teste si apreciere! :)

Si eu am avut o mancarime cu interfata CAS (din HC/Spectrum) dar
folosind un PIC (microcontroller) care sa genereze semnalele, nu placa
de sunet (pentru control mai precis); treaba e inca la stadiul de idee;
oricum nu stiu daca e de interes pentru scopul tau.

Pentru serial, *cred* ca se pot optimiza rutinele pentru 38400 (la 28800
am mai multa siguranta dar e nestandard). Desigur, asta cu bucla de
temporizare facuta strict pentru viteza respectiva, asa cum o am acum se
potriveste *bine* la 19200 si *binisor* la 9600, prin modificarea unei
simple constante. Daca exista interes, sunt dispus sa scot HC-ul din
cutie si sa mai rafinez rutinele (momentan sunt oarecum aglomerat cu
alte probleme "casnice" dar daca zice lumea ca vre... se rezolva!)
Desigur ca pe masura ce creste viteza, temporizarile sunt tot mai
critice; pe de alta parte "if my calculations are correct", 1 NOP
corespunde cam la 1/2 bit la cuvant (10 bitzi) deci ar fi ceva sanse.

Side-note: ajungem sa scriem disketele direct cu HC-ul? Niiice!

George, daca ai chef sa modifici, be my guest! :) Daca zici ca vrei
sapat, instalez agregatul si pun la sapat dar mai asa, spre dupa
jumatatea lui martie.

PS, @Bogdan Necula: nu am uitat nici de partea cu disketele. Urmeaza dar
nu prea curand.

Cu bine,
Mihai
> BASIC, gen *FORMAT "b";19200: LOAD *"b"*.
> <https://groups.google.com/d/msgid/romanianhomecomputer/0254cb6e-e97c-436f-bc64-9e518ff9d925n%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
> --
> Ați primit acest mesaj deoarece sunteți abonat(ă) la grupul
> „RomanianHomeComputer” din Grupuri Google.
> Pentru a vă dezabona de la acest grup și pentru a nu mai primi
> e-mailuri de la acesta, trimiteți un e-mail la adresa
> romanianhomecomp...@googlegroups.com
> <mailto:romanianhomecomp...@googlegroups.com>.
> Pentru a vizualiza această discuție pe web, accesați
> https://groups.google.com/d/msgid/romanianhomecomputer/9a6c54ca-0030-44c9-a27d-e94e83f1350dn%40googlegroups.com
> <https://groups.google.com/d/msgid/romanianhomecomputer/9a6c54ca-0030-44c9-a27d-e94e83f1350dn%40googlegroups.com?utm_medium=email&utm_source=footer>.

George Chirtoaca

unread,
Feb 22, 2021, 6:36:57 AM2/22/21
to romanianho...@googlegroups.com
Salut,

MIhai, nu e graba, cred ca e suficient ce avem pentru scopul dorit.
Folosirea HC-ului pentru citire/scriere imagini de disc ar fi restrictionat la formatul BASIC, suportat de rutinele standard, sau cel mult cel CPM, altfel necesita rutine custom de acces la floppy controller, pentru orice geometrie de disc (a facut Roelof asa ceva)..
Am pus pe github programul de PC pentru transfer pe seriala, aici: https://github.com/0sAND1s/COM2HC .

Reply all
Reply to author
Forward
0 new messages