🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #770

Re: szybkie czytanie z LPT

#770
From: Arek
Date: Sun, 22 Oct 2006 16:08
55 lines
3542 bytes
p.h. napisał(a) w wiadomości: ...
>Próbuję uzyskać maksymalną prędkość czytania portu LPT.
>[...]
>próbkować port LPT muszę czytać z prędkością min. 600kB/s. Jest to
>możliwe, gdyż program DigiTrace osiąga ok. 750kB/s na moim sprzęcie.
>Problem w tym, że nie mogę go użyć (zbiera za mało danych) i piszę swój
>własny program, który jednak osiąga jedynie 480kB/s w wersji ASM, zaś w
>wersjach napisanych w VB lub C tylko 280kB/s. [...]

Teoretycznie Win mogą przepuszczać odwołania do portu, ale z
opóźnieniem wynikającym z "obróbki" tego odwołania przez mechanizmy
ochrony procesora. Nawet jak jest zezwolenie to opóźnienie może
być większe niż w "czystym" kompie np. w DOS. Mowa o zezwoleniu
"sprzętowym", czyli bezpośrednio przez procesor a nie o wywołaniu
wyjątku i w nim dopiero programowe przetunelowanie odwołania.

>Zastanawiam się gdzie tkwi kruczek - jak czytać port LPT szybciej?

Elektronika portu powinna wyciągnąć więcej ale może istotnie wait
state'ty na ISA (lub jej emulacji) przeszkadzają. Spotkałem się z
przypadłością na PCI - zmodyfikowany BIOS karty graficznej wlókł się
przy starcie komputera niemiłosiernie wolno nawet z porównaniu z
szyną ISA, niezależnie od cache'owania Video BIOSu.

Jeżeli wystarczy proste zbieranie danych (pamięć, potem do pliku),
a ich analiza offline to spróbuj w "czystym" 16-bitowym DOS, jeśli
to możliwe bez odpalania EMM386.EXE z uwzględnieniem innych rad
z tego wątku. Możesz użyć instrukcji 32-bitowego dostępu do danych
w razie potrzeby. Jeżeli zabraknie pamięci na dane to przez odpowiedni
trick z modyfikacją rej. segmentowych można otworzyć sobie pełną 2^32
przestrzeń adresową w trybie 26-bitowego kodu. Tylko wątpię czy można
liczyć na jednakowe interwały czasowe "próbkowania".

Doświadczenie: Celeron 700MHz, szyna 66MHz
pętla (rozwinięcie 32)
  in al,dx
  stosb
Zegar systemowy ok 18.2 Hz włączony nomalnie, służył do odliczenia
ok. 55ms (czas pomiaru)
630-650 kHz  okno DOS w Win98 bez specjalnych driverów
655 kHz  DOS z emm386
671 kHz  DOS bez emm386  (668 kHz z rozwinięciem 16)

ciekawostka - wyrzucenie stosb (tylko odczyt portu) nie zwiększył
w sposób zauważalny prędkości, za to dodatkowe instrukcje dostępu
do pamięci wyraźnie spowolniły... Czyżby więc pipelining jednak
zadziałał mimo, że operacje (in al,dx i stosb) na tym samym
rejestrze (al)?
A opóżnienia są spowodowane tylko dostępem do portu? Hmm...

Arek

PS. Jeżeli zależy ci na prękości (i dokładności) to pozostaje
prosty rejestrator offline sprzętowy. Poszukaj i popytaj na
pl.misc.elektronika
Technical Details
Message-ID: <ehg4um$hf6$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
References: <eh1v9c$act$1@news.task.gda.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: "Arek" <abcdek@poczta.onet.pl.usun_cde>
Newsgroups: pl.comp.lang.asm
Subject: Re: szybkie czytanie z LPT
Date: Sun, 22 Oct 2006 18:08:28 +0200
Organization: Onet.pl
Lines: 57
Message-ID: <ehg4um$hf6$1@news.onet.pl>
References: <eh1v9c$act$1@news.task.gda.pl>
NNTP-Posting-Host: pc248.ostroleka.cvx.ppp.tpnet.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1161533207 17894 217.99.63.248 (22 Oct 2006 16:06:47 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Sun, 22 Oct 2006 16:06:47 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3
X-Sender: JteAwJqAvHI2MiWs2GPQK71wcJ1i8aMz
X-Newsreader: Microsoft Outlook Express 4.72.3110.5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit