Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/68: Рейтинг темы: голосов - 68, средняя оценка - 4.65
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83

Чтение из порта 60h

07.10.2011, 21:54. Показов 13628. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая задачка.
Написать программу для считывания скан-кода и вывода на экран в виде 16-ричного числа.
Программа считывания скан-кодов должна содержать прием скан-кода из порта адаптера клавиатура с адресом 60h и формирование ответного (квитирующего) сигнала для микроЭВМ клавиатуры, который должен передаваться в виде командного слова через порт с адресом 61h.
Собственно, как можно считать из порта скан-код? Через что это реализуется?
Спасибо большое.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2011, 21:54
Ответы с готовыми решениями:

Чтение скан-кодов из порта 60h
Для подтверждения, что скан-код считан в 61h необходимо послать подтверждение: in al, 61h mov ah, al ;нафига??? or al, 80h out...

Чтение с порта PS/2
Я в ассемблере новичёк. С портами также знаком поверхностно. Помогите мне, кто может: Хочу использовать радио мышку как пульт ))....

Прерывание int 60h - какой функционал?
Всем привет. Я никак не могу найти, что делает это прерывание. Может кто-нибудь подскажет? Я использую эмулятор bochs и некоторый BIOS....

21
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
07.10.2011, 22:08
in \ out
но скорее всего винда тебя не пустит к портам
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
08.10.2011, 11:44
Цитата Сообщение от Хакер
Программа считывания скан-кодов должна содержать прием скан-кода из порта адаптера клавиатура с адресом 60h
Это абсолютно некорректно. Преподу - неуд. Даже перехват int 9 в многозадачных системах некорректен, для этого используется int15.
Цитата Сообщение от Хакер
Собственно, как можно считать из порта скан-код? Через что это реализуется?
Дизассемблируй BIOS, ты же "Хакер", гы-гы-гы...
А обработчик int15 - вот он:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
        jmp     work
Old_i15 dw      0,0
Str_    db  0h,0h
pushall proc    near
    jmp pushwrk
Save    dw  0, 0
pushwrk:
    pop [Save]
    pop [Save +2]
    push    ax
    push    bx
    push    cx
    push    dx
    push    ds
    push    es
    push    si
    push    di
    push    bp
    push    [Save +2]
    push    [Save]
    ret
pushall endp
 
popall  proc    near
    jmp popwrk
Rest    dw  0, 0
popwrk:
    pop [Rest]
    pop [Rest +2]
    pop bp
    pop di
    pop si
    pop es
    pop ds
    pop dx
    pop cx
    pop bx
    pop ax
    push    [Rest +2]
    push    [Rest]
    ret
popall  endp
 
get proc    near
    mov ah, al
    mov cl, 4
    shr ah, cl
    and al, 0Fh
 
    add ah, 30h
    cmp ah, 3Ah
    jl  prd_1
    add ah, 7h
prd_1:  mov cs:[Str_], ah
    add al, 30h
    cmp al, 3Ah
    jl  prd_2
    add al, 7h
prd_2:  mov cs:[Str_ +1], al
    ret
get endp
 
write   proc    near
    mov ah, 0fh
    int 10h
    push    cs
    pop es
    lea bp, cs:Str_
    mov cx, 2
    mov dx, 0000h
    mov bl, 70h
    mov ax, 1300h
    int 10h
        ret
write   endp
 
New_i15:
    call    pushall
    call    get
    call    write
    call    popall
    iret
 
work:
        push    cs
        pop     ds
        mov     ax, 3515h
        int     21h
        mov     [Old_i15], bx
        mov     [Old_i15 +2], es
        lea     dx, New_i15
        mov     ax, 2515h
        int     21h
        lea     dx, work
        int     27h
Цитата Сообщение от Хакер
Спасибо большое.
Ник смени, чучело, не позорься. Или иди тусоваться на ксакеп.ру
1
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
08.10.2011, 19:12  [ТС]
Это абсолютно некорректно. Преподу - неуд. Даже перехват int 9 в многозадачных системах некорректен, для этого используется int15.
Я написал так, как этого потребовали. Через прерывания не катит.

Ник смени, чучело, не позорься. Или иди тусоваться на ксакеп.ру
1. Я ни перед кем не позорился.
2. Я никого не оскорблял.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
08.10.2011, 20:04
Хакер, ландо, просто таки ники доставляют. Вот примерчик, вывод на экран был выше:http://www.arl.wustl.edu/~lock... HEADING5-1
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
10.10.2011, 13:11
Charles Kludge, ValeryS,
Достаточно Хакеру перезагрузить компьютер в DOS с флешки или с дискеты и доступ к портам появится, ну, а если требуется доступ к портам под Windows, то не сложно найти в сети такие вещи как porttalk.sys, OpenPort, GiveIO.sys и т.д.
1
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
10.10.2011, 18:38  [ТС]
Имея аски код клавиши, как его конвертировать в хекс?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.10.2011, 19:55
Цитата Сообщение от Mikl___ Посмотреть сообщение
Достаточно Хакеру перезагрузить компьютер в DOS с флешки или с дискеты и доступ к портам появится, ну, а если требуется доступ к портам под Windows, то не сложно
майкл сам то понял
Цитата Сообщение от Хакер Посмотреть сообщение
Имея аски код клавиши, как его конвертировать в хекс?
человек не знает чем скан отличается от аски и придумал какойто хекс
Хакер, специально для тебя кроме IBM совместимых машин есть еше куча других
и кроме винды и матери его доса есть куча ОС
если ты хочешь узнать сканы должен узнать порты и прочие протоколы ибо никто не обещал что 19 прерывание будет работать на других платформах
1
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
10.10.2011, 20:04  [ТС]
человек не знает чем скан отличается от аски и придумал какойто хекс
Хакер, специально для тебя кроме IBM совместимых машин есть еше куча других
и кроме винды и матери его доса есть куча ОС
если ты хочешь узнать сканы должен узнать порты и прочие протоколы ибо никто не обещал что 19 прерывание будет работать на других платформах
Спасибо, а-то я не знал...
Объясняю популярно. Я уже получил аски код клавиши. Например, скан-код для аски-символа А будет 41h, а его хекс - 1Eh. Сверяю все по таблицам и онлайн-конвертерам, так что ошибки в моих толкованиях не может быть. И так...мне нужно Аски-символ 'A' преобразовать в хекс - 1Eh. Как-то так...
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.10.2011, 20:30
Ъ, модераторы, прилепите плиз, Ральфа. http://www.cs.cmu.edu/~ralf/files.html

Цитата Сообщение от Хакер
Например, скан-код для аски-символа А будет 41h, а его хекс - 1Eh.
С точностью до наоборот. скачай Ральфа, открой INTERRUP.A и найди там "Values for keyboard make/break (scan) code:"
1
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
10.10.2011, 20:42  [ТС]
Это все не то, что мне необходимо. Ладно, всем спасибо. Тушите свет...
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.10.2011, 20:43
объясняю популярно для невежд
В.С. Высоцкий
Цитата Сообщение от Хакер Посмотреть сообщение
скан-код для аски-символа А будет 41h,
нет!!
аска код для символа А будет 41h никто не спорит (ибо это стандартизировано)
а скан-код это код который выдает клавиатура на нажатие клавиши и если ты поднимешь свой сабж
и на самом деле будешь читать из порта никто не гарантировал что ты получишь 41(это делает биос по моему 19 прерывание) ибо на моей клаве A -0x41 a - 0x61 ф Ф чейто там еще (лень проверять)это все аски коды(причем стандартизированы только англоязычные,для русских и прочих есть куча стандартов)а скан код от клавиши один(может это ты и называешь хекс кодом?)
причем это стандартизировано для ИБМ никто не гарантировал что для других машин это совпадет
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.10.2011, 20:53
ValeryS, Nope. Скан-коды всех клав устаканены давным-давно.(102/105)keys, exclude OEM extensions. Ссыль на талбичку я дал.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.10.2011, 21:42
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Скан-коды всех клав устаканены давным-давно.(102/105)keys,
ключевое слово 102-105
а ежли я сделаю свою клаву и не под ИБМ
устаканены но не стандартизированы( или я не прав??)

Добавлено через 5 минут
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Ссыль на талбичку я дал.
посмотрел ни одной ссылки на стадарт и более того
System Requirements: DOS 2.0+, MASM-compatible assembler.
а че кроме ибм и доса(читай винда) у нас более ничего не существует
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.10.2011, 21:49
ValeryS, да пожалуйста. Но при это вы должны будете обеспечить софт, обрабатывающий
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Int_15h_entry   proc    far
        pushf
        cmp ah,4Fh          ; Keyboard intercept ?
        jz  $$1         ; yes, processing
        popf
        jmp dword ptr cs:Old_isr15  ; go back
;
; Mode Toggle Section
;
 
$$1:
        cmp al,0ffh
        jnz $$001
        mov ax,$VER$
        popf
        clc
        retf    2
$$001:
        call    dword ptr cs:Old_isr15
        pusha
        push    ds          ;
        push    es          ;
 
        push    cs          ;
        pop ds          ;   ds = cs
        push    ax
        xor ax,ax           ;; set up BIOS data seg
        mov es,ax           ;;
        mov dx,word ptr es:Kb_flags_1_
        mov ax,dx
        mov bl,byte ptr es:Kb_flags_3_
        and bl,0ch
        AND ah,0f3h
        or  ah,bl
        and ax,0            ; This mask will be defined during startup
K_mask      equ $ - 2
 
        cmp ax,word ptr K_mask
        jnz $$3
$$03:       xor byte ptr ds:Cyrillic,0ffh ; Yes,toggle mode
        mov bx,300h
        jnz $$2         ;
        or  bx,550h         ; for Russ/Lat
$$2:        mov ax,Tone_r       ; beep
        call    ax
;$$2:       call    ds:Tone_r       ;; ??? KL - 02-27-93 02:55pm
$$3:
        pop ax
;
; Encoding Section
;
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.10.2011, 21:52
в догонку цитата
The interrupt list is a comprehensive listing of interrupt calls, I/O ports, memory locations, far-call interfaces, and more for IBM PC
как мы видим для IBM PC , а как насчет маков и прочих антари со спектрумами

Добавлено через 1 минуту
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Int_15h_entry
для ИБМ да (это программное прерывание)
но это не абсолют
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.10.2011, 21:57
Цитата Сообщение от ValeryS Посмотреть сообщение
а че кроме ибм и доса(читай винда) у нас более ничего не существует
Ну почему же? Код из PDP 11/70 илиVAX-11/780 вас вряд ли обрадует, равно как и железки типа VT-105/MERA 7209, etc...
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.10.2011, 22:15
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Код из PDP 11/70 илиVAX-11/780 вас вряд ли обрадует, равно как и железки типа VT-105/MERA 7209, etc...
не радует
но приходилось
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.10.2011, 22:38
Цитата Сообщение от ValeryS Посмотреть сообщение
как насчет маков и прочих антари со спектрумами
Всё зависит от контроллера клавы. AFAIR, VT52/VT-105 передавали в ИРПР/ИРПС ASCII, а не scancode. Ландо, это лирика. Если Хакеру поставити задачу просто отображать сканкоды, то мой примерчик достаточно перевесить на int 9. Полноценая обработка типа <ALT><CTRL><ХЗ> потребует массив состояний клавиш, флаги, и т.д. Ну, как здесь:http://www.intel-assembler.it/... e-masm.asp
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
11.10.2011, 05:31
Цитата Сообщение от ValeryS Посмотреть сообщение
майкл сам то понял
Пример непосредственного обращения к портам из ring3 из-под WinXP. Написано на nasmw без линкера и компилятора ресурсов. Во вложении исходный текст, ехе и r0pc.sys by @L.chemist (Andrey A. Meshkov) Возможности перезагрузки, вывода звука через системный динамик, получение скан-кода и всё через порты, которые по-идее закрыты системой.
Внимание! При запуске приложение извлекает из себя драйвер, что может не понравится антивирусу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2011, 05:31
Помогаю со студенческими работами здесь

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не...

Чтение из COM-порта
Здравствуйте! Никак не могу правильно прочитать данные из COM-порта. Мой процессор отправляет в компорт в бесконечном цикле (каждые...

Чтение COM-порта на C++
Всем привет! Сразу скажу, что новичок в этом и вообще не разбираюсь. Очень долго искал код на c++, который позволил бы читать COM-порт....

Чтение из com-порта
Здраствуйте реализовал простенькую програмку по отправке данных на порт теперь же нужно их от туда забрать и вывести на экран #include...

Чтение COM порта
Не отсылайте в гугл, я от туда весь день не вылазию.... Помогите разобраться с чтением порта. Нашел TComPort, но не могу его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru