Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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 11 12 13 14 15 16 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 класса...
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Приоритетно для машин 286, 386, 486-х.
Если заработает на XT - не страшно, но и не принципиально.
Для пентиумов не нужно, для них материнка без поддержки PS/2 - экзотика.

Вообще, первая мысль была - использовать тупой цикл, со счетчиком.
Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора.
Это начальное значение можно считать на этапе инициализации (т.е. только один раз).
Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково.
Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс.
i8088
Advanced Member


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


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Если заработает на XT - не страшно, но и не принципиально.
[/q]
На XT не заработает - там нет 8042 вообще.


Rio444 написал:
[q]
Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс.
[/q]
Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms

Канал 1 подходит, но надо проверить, на всех ли 286-486 AT машинах его настройка одинакова? Если на всех машинах он настроен на 0x12h, то как раз один тик ~15mks
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms
[/q]
Rio444 написал:
[q]
Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс.
[/q]
i8088
Advanced Member


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


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444, OK, я чего-то не сообразил сразу.
Приношу свои извинения!
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 * 8 9 10 11 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