Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

Переделка АТ интерфейса клавиатуры в PS/2 на старых платах

Уровня 386-х, 486-х, чтобы можно было подключить PS/2 мышь.

<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 * 7 8 9 10 .. 12 13 14 15 16 17
Печать
 
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
В некоторых источниках пишут, что эта функция
[/q]
не позволяет реализовать задержку меньше 976 мкс, если речь про это:
http://vitaly_filatov.tripod.com/ng/asm/asm_026.13.html
[q]
что будет, если длительность меньше
[/q]
Надо разбираться как она внутри работает, чтобы проверить это.
[q]
В частности, как реализовать задержку 15мкс?
[/q]
Ровно не получится, но вряд ли вам наносекунды будут принципиальны ;)
Самому запрограммировать таймер 8254 на нужную частоту прерываний и ловить IRQ0
https://en.wikibooks.org/wiki/...rval_Timer
Нужный делитель - 18.


Как различные ОС к такому отнесутся - ничего обещать не могу.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
pahan, спасибо за наводку. Почитаю.
Может можно как-то попроще? Или есть готовый код для таймера?
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
Сам с ним не развлекался, а примеры кода есть здесь:
http://wiki.osdev.org/Programmable_Interval_Timer
Там хорошая простыня ;)
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Я бы только посоветовал использовать инструкции не выше 286,
чтобы можно было использовать эту разработку на 286 платах.

В кодах BIOS-ов небольше задержки часто делаются просто loop цилами,
но понятно, что такая задержка зависит от частоты и поколения CPU.

Работу с таймером с только 16-bit инструкциями можно подсмотреть в коде
Atmel программатора для AT89 (прилагаю AT89.ZIP, файл XTIMER.ASM)

PS. Я бы использовал MASM (или другой DOS assembler), чтобы можно было вести разработку на 286 машине.

Прикрепленный файл (AT89.ZIP, 0 байт, скачан: 17 раз)
justontime
Full Member


Откуда: СПб
Всего сообщений: 236
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
10 сен. 2016
Rio444 написал:
[q]
как реализовать задержку 15мкс?
[/q]
Думаю, это самое реальное из всего возможного (подпрограмма задержки из BIOS PC/XT):



WAITF    PROC  NEAR      ; FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR
                  ; ENTRY:
                  ; (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT
                  ; MEMORY REFRESH TIMER 1 OUTPUT AT THE DMA CHANNEL 0 ADDRESS REGISTER USED AS REFERENCE.
                  
                  ; EXIT:
                  ; AFTER (CX) TIME COUNT (PLUS OR MINUS 31 MICROSECONDS)
                  ; (CX) = 0    
  
      PUSH  AX        ; SAVE WORK REGISTER (AH)
      SHR    CX,1      ; DIVIDE 15us COUNT DOWN TO 30us COUNT
      ADC    CX,0
      JCXZ  WAITF9      ; EXIT IF COUNT WAS ZERO OR ONE

      OUT    DMA+12,AL    ; CLEAR THE DMA BYTE POINTER FLIP/FLOP
WAITF1:
      PUSHF          ; SAVE INTERRUPT STATE
      CLI            ; BLOCK INTERRUPTS TILL NEXT CHANGE
WAITF3:               ; WAIT FOR REFRESH ADDRESS CHANGE
      IN    AL,DMA      ; READ CURRENT ADDRESS LOW BYTE
      AND    AL,11111110B  ; DISCARD LOW BIT (30us)
      CMP    AH,AL      ; DID VALUE JUST CHANGE
      MOV    AH,AL      ; SAVE NEW/OLD VALUE INCASE IT DID
      IN    AL,DMA      ; READ HIGH BYTE (AND IGNORE)
      JE    WAITF3      ; WAIT FOR A CHANGE IN ADDRESS BITS

      POPF          ; RESTORE INTERRUPTS
      LOOP  WAITF1      ; DECREMENT CYCLES COUNT TILL COUNT END
WAITF9:
      POP    AX        ; RESTORE (AH)
      RET            ; RETURN (CX)= 0

WAITF    ENDP



Извините за формат - тегов CODE что-то не вижу на форуме...

Думаю, канал 0 DMA - единственное, что на старых компьютерах может более-менее надежно выдавать подобные интервалы, причем крайне маловероятно, чтобы кто-то решил его перепрограммировать (хотя такие примеры тоже знаю). Перепрограммировать 8253 категорически не рекомендую - несовместимость с чем-нибудь практически гарантирована...
Tronix
Advanced Member


Откуда: Москва
Всего сообщений: 1749
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 янв. 2008
Оффтопик: Оффтопик: justontime Оооо, вы только что подали мне идею, как все-таки попробовать Трайдент запустить. Нужно рефреш в BIOS увеличить до пары секунд, или сколько память потянет и попробовать стартануть. Если дело в ALE, то может успеть Video BIOS стартануть. РУ7 у меня держала данные до 5 секунд, помнится, без рефреша.
Кай
Гость
Divine Assassin

Откуда: извне (from beyond)
Всего сообщений: 13709
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 авг. 2010
[q]
Извините за формат - тегов CODE что-то не вижу на форуме...
[/q]
{code}


WAITF  PROC  NEAR  ; FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR
; ENTRY:
; (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT
; MEMORY REFRESH TIMER 1 OUTPUT AT THE DMA CHANNEL 0 ADDRESS REGISTER USED AS REFERENCE.

REM Oни есть. Но их нужно вводить ручками.

{/code}

Соотв. фигурные скобки меняем на квадратные. :)
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
justontime, большое спасибо!
Буду разбираться.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
justontime, этот код для XT, но в AT машинах канал DMA0 освободился от функции регенерации памяти.
Соответственно, для требуемой нам AT читать DMA регистры уже не годится.
А во всех ли интересующих нас AT (286-486) канал 0 канал 1 8253 (с DMA он уже не связан) настроен на период 15мкс,
чтобы можно было его использовать? Надо будет проверить.

upd
Исправил, напутал номер канала 8253
justontime
Full Member


Откуда: СПб
Всего сообщений: 236
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
10 сен. 2016
i8088 написал:
[q]
но в AT машинах
[/q]
А, я просто неправильно понял проблему - думал, что речь идет только о решении для совсем старых машин PC/XT класса...
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 * 7 8 9 10 .. 12 13 14 15 16 17
Печать
Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS