Forum

Z PMD 85 Infoserver

:: späť na zoznam tém ::
Správa
Autor  Autor ::  JL
Poslaná  Poslaná ::  10.12.2013 23:48:50
Predmet  Predmet ::  BIOS CP/M
Ahoj

Kam by se slušelo umístit inicializaci 8251 a 8253 v BIOSu?

Nebo jinam než do BIOSu?

Připsal jsem ji před konec rutiny GOMIK: v BIOS4UNI.MAC

a GENER na mě řve že je BIOS moc velký

Současně jsem připsal obsluhu 8251 do rutin PUNCH a READER

Možná se to tam opravdu nevejde, ale to by se mi moc nelíbilo.

Díky za radu
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  11.12.2013 09:17:21
Predmet  Predmet ::  Re: BIOS CP/M - *EDIT*
O obave s nedostatkom miesta som písal.
GENER hlásil, že je BIOS dlhý v časti CODE alebo v časti DATA?

Ale skúsim odpovedať na tebou položenú otázku.

Ak budeme predpokladať, že žiadny z programov spustených pod CP/M nám "nepreprogramuje" USART a ani PIT, tak by malo stačiť vykonať ich inicializáciu iba raz a to počas studeného štartu.
Ideálne teda na konci rutiny BINIT, ktorá je potom prepísaná dátami (bufframi). Tam stačí zavolať rutinu z Monitora na adrese 8B46h v prípade PMD 85-2(A), resp. 0EB46h v prípade PMD 85-3.
Zámerne píšem o oboch prípadoch, pretože je to treba rozlíšiť (preto je ten BIOS označený ako UNI).
Naviac je potrebné v prípade PMD 85-2A pred zavolaním tejto rutiny nastránkovať ROM a po návrate opäť vrátiť RAM.

Rýchlosť prenosu je defaultne 4800Bd a tá je v systémovej premennej na adrese 0C07Ch (viď. kapitola 5.3 na strane 144 manuálu k PMD 85-3).

EDIT:
Ešte som zabudol upozorniť na jednu dôležitú vec.
Je treba pamätať na skutočnosť, že klávesnicová rutina "požiera" prijímané znaky z USARTu, takže v priebehu prenosu NESMÚ byť volané rutiny CONST a CONIN BIOSu. To je už samozrejme záležitosť samotného programu, v tvojom prípade napr. PIP. Nespomínam si, či PIP počas "kopírovania" robí nejaké testy konzoly kvôli prípadnému prerušeniu kopírovania/prenosu. Ale snáď ani nie.
 
Správa
Autor  Autor ::  JL
Poslaná  Poslaná ::  11.12.2013 20:20:56
Predmet  Predmet ::  Re: BIOS CP/M
Ahoj

No nakonec jsem asi při třetí raní skončil s tím, že mi i čistý nemodifikovaný kód z sysgen.p32 odsud z webu končí

SYNCRONIZATION ERROR, nebo jak ta hláška je

Jen jednou se mi podařilo nový systém vygenerovat, bohužel s chybou, takže po rebootu se na trvalo rozezněl pípák a ze sériáku lezly hovadiny.

Teď to zkouším znovu na čistém obrazu disku a SYNCRONIZATION ERROR mě nemine :-(


BTW: to poškození dat sériového portu při čtení klávesnice mě krajně mrzí. Čím je to způsobeno? Nepředpokládám, že by to bylo obvyklé chování CP/M. Je to chyba v klávesnicové rutině, nebo je to hw záležitost?
Pokud je to sw chyba, byl bych ochoten nějakou práci investovat do opravy.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  11.12.2013 22:08:31
Predmet  Predmet ::  Re: BIOS CP/M
Tak som to overil a skutočne to tú chybu vypíše. Nie som si celkom istý prečo, ale predpokladám, že po ukončení XSUB je aktuálny systém alebo samotný obsah pamäti v nejakom "čudnom" stave.
Po resete a opätovnom spustení MOVOS.COM už vygenerovanie systému prebehne bez problémov.
Takže po skončení GENER je nutný reset.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  12.12.2013 08:17:24
Predmet  Predmet ::  Re: BIOS CP/M
Takže svoje tvrdenie o "požieraní" prijímaných znakov z USARTu beriem späť!

V CP/M BIOSe je použitá klávesnicová rutina INKEY (89C0h/0E9C0h - test klávesnice bez čakania) z Monitora, ktorá síce testuje stav USARTu, či bol prijatý byte, a ak áno prevedie sa ihneď návrat, ale tento prijatý byte sa neprevezme (to je práve dôležité).
Takže žiadny problém sa nekoná. Práve naopak, má to svoje opodstatnenie. Počas prenosu sa môže priebežne volať CONST, aby mohol byť prenos prerušený užívateľom a zároveň test klávesnice "neblokuje" samotný prenos.

Ja som si to pomýlil s rutinou INKLAV (84A1h/0E4A1h - test klávesnice s čakaním), ktorá toto "požieranie" zámerne robí.
 
Správa
Autor  Autor ::  JL
Poslaná  Poslaná ::  12.12.2013 08:55:45
Predmet  Predmet ::  Re: BIOS CP/M
to jsem rád

ohledně toho testu statusu 8251:

Je možné číst status vícekrát?

Moje čtecí rutina testuje flag přítomnosti přijatého bajtu a ponechává informaci v Z, protože to některé programy potřebují.

Vracím tedy EOF nebo data a v Z informaci jestli to jsou data.


Podobně testuju stav portu před vysíláním, ale tam rutina čeká na uvolnění.
Tady by smazání statusu mohlo způsobit teoreticky výtuh, ale asi když INKEY přečte status, nestane se tím 8251 nepřipravenou.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  12.12.2013 09:54:14
Predmet  Predmet ::  Re: BIOS CP/M
Status je možné samozrejme čítať opakovane. RxRDY (bit 1 stavového slova) je zhodený až po prečítaní prijatého bytu.
TxRDY (bit 0 stavového slova) klávesnicová rutina netestuje.
:: späť na zoznam tém ::