LPT порт
P.S. А что, пользоваться гуглем религия запрещает?
P.S. А что, пользоваться гуглем религия запрещает?
Про то как считать устройством с порта я понял, а вот прогу вникнуть не могу - BAsic, можно сказать, первый раз вижу. Да и там какая то библиотека юзается, а мне этого не надо, мне надо от начала и до конца самому (чтоб научиться).
P.S. И вообще, лучше всего на C или на ASM'e чтоб код был....
base+1 -порт состояния
читаеш биты 7,6 порта состояния
если =01b то пишеш в порт данных
базовый порт можно в биосе посмотреть .
на порту ноги 2-9 байт данных.
нога 14 - строб .
А как мне вычислить BASE для порта LPT1?
Я понимаю что в BIOS'e, но где?
область данных биоса
0040h:0008h - первый
0040h:000ah - второй
0040h:000ch - третий
0040h:000eh - четвёртый
model small
.code
org 100h
begin:
mov ah,00h
mov al,03h
int 10h
mov ax,cs
mov ds,ax
mov bx,offset Hello
mov si,00h
call Write
jmp data_end
BASE1 dw 00h
DATA_END:
;поиск BASE
mov ax,40h
mov es,ax
mov ax,word ptr ES:[08h]
mov BASE1,ax
;выводим число 1
mov al,01h
mov ax,dx
in ax,01h
mov bx,offset Wait1
mov si,160
call Write
;ожидаие клавиши
mov ah,00h
int 16h
;восстановим значение =0
mov ax,dx
in ax,00h
mov bx,offset End01
mov si,320
call Write
sd:
jmp sd
Hello db "LPT-1 PIN2 = 1",0
End01 db "End of work",0
wait1 db "Press any key",0
;si - смещение на экране
;bx - смещение в DATA
Write:
mov ax,0B800h
mov es,ax
WriteRun:
mov al,byte ptr DS:[bx]
mov es:[si],byte ptr al
inc bx
add si,02h
mov al,byte ptr ds:[bx]
cmp al,0
jne WriteRun
ret
end begin
Прога компилируется в COM и запускается под winXP. Может это винда ей работать мешает?
Еще, формат инструкций x86 следующий:
инструкция <приемник> <источник>
Т.е., то, что у Вас написано in ax, 01h означает прочитать слово из порта 01h и положить его в ax
Поменял. Всё равно не работает :)
Коротко.
1. открываешь файл с именем "LPT1"
2. пишешь в него байт через WriteFile
Чтобы все работало корректно - соединить линию BUSY(11) и Paper End(12) с общим проводим(напр., 20), а Strobe(1) соединить с Acknowledge(10).
Распайка разъема
Примечание. При передаче потока считаем данные действительными, если на линии Strobe высокий уровень.
Да и помоему в обратную сторну через этот файл данные не передать...
Да и помоему в обратную сторну через этот файл данные не передать...
В Windows XP не получится получить доступ к портам без написания/использования драйвера. По поводу понижения скорости - неправда.
Тогда можете дать ссылочку на какую русскоязычную литературу по написанию дрйверов...
P.S. А по поводу скорости: А по вашему что быстрее - команда OUT или запись в файл?
область данных биоса
0040h:0008h - первый
0040h:000ah - второй
0040h:000ch - третий
0040h:000eh - четвёртый
Пишу драйвер и вот задумался под виндами как мне этот BASE вытащить? Режим то защищённый, и в область данных BIOS'a особо не влезешь...
На всём готовеньком не научишься...
Кстати а этот BASE на всех компах одинаковый или могут быть варианты?
У меня напимер BASE = 03BCh...