nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 09:21



Reply to topic  [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next
FreeBASIC 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
А Вы экспериментируете на 32-х или 64-х разрядной Windows?

32-х
IgorR76 wrote:
Это надо уточнить в первую очередь.

Где уточнить?

IgorR76 wrote:
Windows Vista и выше не дадут пользовательской программе обращаться напрямую к железу. Только через драйвер.

А я через чего лезу, кэп очевидность? Или inpout32.dll не драйвер?

IgorR76 wrote:
Посмотрите в диспетчер устройств: есть ли системный таймер по нужным адресам. Если нет - никакая системная эмуляция из статей не заработает.

Если бы его там не было, я бы к нему не лез, кэп... 8)

_________________
iLavr


07 Apr 2016 17:51
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
Нет, dll - это не драйвер. Драйвер - это .sys - то, что работает в режиме ядра. А Ваша inpout - просто оболочка для вызова системных функций.

Читаем русским по белому в этом топике:
inpout32.dll wrote:
Совместимость со всеми ОС Windows обеспечивается тем, что сначала драйвер проверяет, какая ОС установлена. Если это 9x, то при обращении к библиотеке с помощью функций Out32(адрес порта, байт данных) – это для записи в порт и Inp32 (адрес порта) – для чтения из порта, драйвер конвертирует эти обращения к стандартным и известным нам функциям _outp(адрес порта, байт данных) и _inp(адрес порта). Если же она имеет дело с NT, то обращения конвертируются в запросы к стандартному драйверу ОС, через который и идет обмен информацией с портом.


IgorR76 wrote:
Посмотрите, есть ли регулятор "Системный динамик" в настройках звука. И вспомните, слышали ли Вы когда-нибудь бипер от подопытного? Например, при входе в биос, или при садящейся батарее... Если нет- то бипер не подключен.

У меня на старом ноуте выход спикера заведен на звуковую карту, но никакого регулятора "Системный динамик" в настройках звука нет и в помине, но все приблуды отлично работают.
Так что спикера физически вполне может и не быть, собственно, так оно чаще всего в ноутах и бывает.

_________________
iLavr


07 Apr 2016 18:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Вот, кстати, на моей служебной машине под ХР среди устройств есть и таймер и системный динамик! :o
Attachment:
Speaker.JPG
Speaker.JPG [ 123.62 KiB | Viewed 8458 times ]

Но всеми тестовыми программами системный динамик молчит как рыба об лед.
В микшере звуковой карты он тоже не наблюдается и регулировки громкости его нет.

Значит спикер могли просто не поставить в корпус, но вскрывать машину мне сейчас сугубо неохота...

_________________
iLavr


08 Apr 2016 08:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
> Напоминаю - задача с помощью софта, не требующего регистрации и админских привелегий на ЛЮБОЙ машине иметь доступ к портам ВВ

через драйвер или напрямую? напрямую говорят низя...

_________________
:dj: https://mastodon.social/@Shaos


08 Apr 2016 09:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
> Напоминаю - задача с помощью софта, не требующего регистрации и админских привелегий на ЛЮБОЙ машине иметь доступ к портам ВВ

через драйвер или напрямую? напрямую говорят низя...

Через драйвер, конечно, но хотелось бы, чтобы драйвер не тебовал привилегий администратора.

В общем пробовал сегодня все приблуды на машине с Вендой 7-64.

Вот это не запустилось вощще...

Image

Венда сказала, что это 16-битное приложение и чтобы я обратился к поставщику за
новой версией. То есть - к самому себе. :mrgreen:

Я обратился и запустил вот это приложение, т.к. оно 32-разрядное и работает с библиотекой
inpout32.dll.

Image

Оно запустилось нормально, но звуков не издало.

Хотел на ходу перекомпилировать под библиотеку inpoutx64.dll.
Тут компилятор сказал, что он незарегистрированный... ну понятно - я его просто в спешке слил на флешку...

Вот такие говенства с Вендой 7-64... :-?

_________________
iLavr


08 Apr 2016 10:24
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
а COM с LPT недостаточно? им вроде права администратора не нужны
или теперь нужны?...

_________________
:dj: https://mastodon.social/@Shaos


08 Apr 2016 10:31
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
а COM с LPT недостаточно? им вроде права администратора не нужны
или теперь нужны?...

Shaos, так я и проверяю вот это всё на Вендах-7: где какие права нужны, ну и всё остальное.
На работе наблюдается массовый переход на Венду-7... что-то это не радует.

Протеус вот, как ни странно, отлично заработал под Вендой-7-64, причем с флешки.
Я даже не сразу осознал, что Венда-7-64.

_________________
iLavr


08 Apr 2016 10:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я вот думаю, надо изменить тестовую программу. Не звук ожидать из спикера, а просто с каналом таймера поработать.
Почитать "на лету" что-ли. Похоже, что до порта таймера я достаю, а звук спикера - это сама по себе проблема отдельная.

_________________
iLavr


08 Apr 2016 11:08
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Со звуком спикера в ноутбуках ситуация вырисовывается следующая:
Attachment:
SYSDIN.gif
SYSDIN.gif [ 9.91 KiB | Viewed 8468 times ]

Если в перечне Системных устройств присутствует Системный динамик, то звук спикера по каналу 2
таймера
, видимо услышать можно и должно.

Кстати, аппаратными ресурсами Системного динамика считают порт 61h, хотя на сам динамик в нём
приходится только Бит 1, а Бит 0 - контролирует Gate канала 2 таймера.
Attachment:
SYSDINR.gif
SYSDINR.gif [ 9.43 KiB | Viewed 8468 times ]


В новом ноутбуке Системный динамик в перечне Системных устройств у меня отсутствует, и, видимо,
системная функция beep программно реализуется через звуковую карту.
А бибиканье через канала 2 таймера, похоже, что никто не обещал. :-?


Но я уже чуть раньше сказал, что, похоже, тест доступа к портам, и, в частности, к портам таймера
следует изменить, не рассчитывая на результат услышать beep.
И я тест изменил вот как:
Канал 2 таймера теперь программируется в Режим 0:
Code:
                MOV     AL,0B0H; = 1011.0000b - в pегистp команд
                OUT     43H,AL                ; port 43H, 8253 wrt timr
                JMP     SHORT $+2

Делитель загружается максимальный - 65536:
Code:
                MOV     AX,0000H        ;(делитель)
                OUT     42H,AL            ; мл.байт в  port 42H, 8253 timer 2
                JMP     SHORT $+2
                MOV     AL,AH
                OUT     42H,AL            ; ст.байт в  port 42H, 8253 timer 2
                IN      AL,61H                ; port 61H, 8255 port B, read
                JMP     SHORT $+2
                OR      AL,03H; = 0000.0011b - установили 2 младших бита
                OUT     61H,AL;                 port 61H, 8255 B - spkr, etc
                JMP     SHORT $+2

Теперь суть теста заключается в том, что мы читаем канал 2 таймера "на лету".
Делитель по каждому тику тактовой частоты уменьшается на 1, и при достижении
значения 0000H, счет в канале 2 должен прекратиться.
Code:
LOC_0022:
                MOV     AL,80H; = read 'on fly'
                OUT     43H,AL
                JMP     SHORT $+2
                IN      AL,42H
                JMP     SHORT $+2
                MOV     AH,AL
                IN      AL,42H
                JMP     SHORT $+2
                OR      AH,AL
                JZ      LOC_0023
                ...
                JMP      LOC_0022
LOC_0023:


В общем-то так оно и происходит... но при достижении значения 0000H, счет в канале 2 НЕ ПРЕКРАЩАЕТСЯ! :o
Он начинается снова с максимального значения!
А в режиме 0 так быть не должно! :o Так только режимы 2 и 3 работают... :-?

Предположение только одно, что в работу канала как-то вмешивется Венда...
Есть, правда, предположение хуже, что таймер в VLSI-чипах не полностью идентичен 8254, но в это
как-то верить не хочется...

Попробую повторить тест под чистым DOS.

_________________
iLavr


10 Apr 2016 04:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Попробую повторить тест под чистым DOS.

Результат меня просто потряс! :esurprised:

Этот интегрированный в южный мост таймер, который должен, по идее, полностью повторять
поведение оригинального i8254, В РЕЖИМЕ 0 КАНАЛА 2 ДЕЛАЕТ АВТОМАТИЧЕСКУЮ ЗАГРУЗКУ
И ПРОДОЛЖАЕТ СЧЕТ!


Ассемблерный код следующий:
Code:
SEG_A           SEGMENT BYTE PUBLIC
                ASSUME  CS:SEG_A, DS:SEG_A
                ORG     100h

BEEPER          PROC    FAR

START:
                JMP     LOC_0021

TONE_HIGH       DW      0854H ; 1.190.000/1000=1200Гц (делитель 3DFH)
TONE_LOW        DW      0A90H ; 1.190.000/3000=440Гц  (делитель)4A6H;
DATA_0010       DB      01H   ; пpизнак совпадения и пеpеключения (не используем)
DATA_0012       DB     '     <-BEEPER: press any key to stop & exit!',00H
TAB_HEX         DB      '0123456789ABCDEF'

BEEPER          ENDP

LOC_0021:
                MOV     AX,0F00H; узнаем pежим
                INT     10H
                PUSH    BX   ; сохpаним стpаницу
                XOR     BX,BX; очистить окно
                MOV     CX,BX; pазмеpами:
                MOV     BH,07H; аттpибут
                MOV     DH,24; 25 стpок на
                MOV     DL,AH; AH столбцов
                MOV     AX,0600H
                INT     10H
                POP     BX    ; восстановим стpаницу
                XOR     DX,DX ; <- веpхний угол
                MOV     AX,0200H
                INT     10H   ; установим куpсоp

                MOV     BX,OFFSET DATA_0012
LOC_0020:
                MOV     AL,CS:[BX]
                OR      AL,AL
                JZ      LOK_0021
                MOV     AH,0EH; записать символ из AL
                INT     10H
                INC     BX
                JMP     LOC_0020
LOK_0021:
                CALL    PUT_BEEP; настроим таймер
LOC_0022:
                MOV     AL,80H; = чтение на лету, канал 2
                OUT     43H,AL
                JMP     SHORT $+2
                IN      AL,42H;   low byte
                JMP     SHORT $+2
                MOV     AH,AL; <- low byte
                IN      AL,42H;  high byte
                JMP     SHORT $+2
;                OR      AH,AL ;  AH=AL=00h?
;                JZ      LOK_0022

LOC_VIDS:;_____ AL-SYMBOL; DI-OFFSET
                PUSH    ES
                PUSH    AX

                XOR     AX,AX
                MOV     DI,AX;  DI = 0000h смещение в буфере

                MOV     AX,0B800H; сегмент текст.буфера экрана
                MOV     ES,AX
                POP     AX

                CALL    SHOW_HEX
                MOV     AL,AH
                CALL    SHOW_HEX
                POP     ES

                MOV     AX,0101H
                INT     16H ;_____ опрос клавиатуры без ожидания
                JZ      LOC_0022
LOK_0022:
                CALL    SHUT_UP
;                INT     20H
                MOV     AX,4C05H
                INT     21H   ; Выход с ошибкой 5

;____________________________ Генеpация звука ________________________________
PUT_BEEP        PROC NEAR
                PUSH    AX
;                MOV     AX,CS:TONE_HIGH       ;=880Гц (делитель)
;                MOV     AX,CS:TONE_LOW        ;=440Гц (делитель)
                MOV     AX,0000H               ;=65536 (делитель)
                CALL    LOCK_BEEP
                POP     AX
                RET

PUT_BEEP        ENDP
;---------------------------- Вывод звука -----------------------------------
LOCK_BEEP       PROC NEAR
;________________________________ Настpоим таймеp ___________________________
                PUSH    DX
                PUSH    AX     ; AX - делитель сохpаним

;                MOV     AL,0B6H; = 1011.0110b - в pегистp команд
                MOV     AL,0B0H; = 1011.0100b - в pегистp команд
                MOV     DX,0043H
                OUT     DX,AL                ; port 43H, 8253 wrt timr mode
                JMP     SHORT $+2
                POP     AX     ; AX - делитель восстановим
;----------------------------------------------------------------------------
                MOV     DX,0042H
                OUT     DX,AL                ; port 42H, 8253 timer 2 spkr
                JMP     SHORT $+2
                MOV     AL,AH
                OUT     DX,AL                ; port 42H, 8253 timer 2 spkr
                JMP     SHORT $+2
;________________________________ Включение звука ____________________________
                IN      AL,61H                ; port 61H, 8255 port B, read
                JMP     SHORT $+2
                OR      AL,03H; = 0000.0011b - установили 2 младших бита
                              ;          ¦L----- бит 0 = 1 включить таймеp(2)
                              ;          L------ бит 1 = 1 включить динамик
                OUT     61H,AL;                 port 61H, 8255 B - spkr, etc
                JMP     SHORT $+2
                POP     DX
                RET
LOCK_BEEP       ENDP

;________________________________ Выключение звука ___________________________
SHUT_UP         PROC NEAR
                IN      AL,61H                ; port 61H, 8255 port B, read
                JMP     SHORT $+2
                AND     AL,0FCH; = 1111.1100b - сбpосили 2 младших бита
                               ;          ¦L---- бит 0 = 0 выключить таймеp(2)
                               ;          L----- бит 1 = 0 выключить динамик
                OUT     61H,AL ;                port 61H, 8255 B - spkr, etc
                JMP     SHORT $+2
                OUT     61H,AL;
                RET
SHUT_UP         ENDP

SHOW_HEX PROC   NEAR                ; AL - байт на вывод в HEX виде
                PUSH    AX
                PUSH    CX

                PUSH    AX
                AND     AL,0F0H
                MOV     CL,4
                SHR     AL,CL
                CALL    HEXASC
                MOV     ES:[DI],AL
                INC     DI
                INC     DI
                POP     AX

                AND     AL,0FH
                CALL    HEXASC
                MOV     ES:[DI],AL
                INC     DI
                INC     DI

                POP     CX
                POP     AX
                RETN
SHOW_HEX        ENDP

;______________ Перекодировка ______
HEXASC   PROC   NEAR
                PUSH    BX
                MOV     BX,OFFSET TAB_HEX
                XLAT
                POP     BX
                RETN
HEXASC          ENDP

;-----------------------------------------------------------------------------
SEG_A           ENDS

                END     START


Если поменять комментарии вот в этих строчках и сделать активным код 0B6H,
Code:
;                MOV     AL,0B6H; = 1011.0110b - в pегистp команд
                MOV     AL,0B0H; = 1011.0100b - в pегистp команд

то спикер в режиме 3 тарахтит с частотой ~19 Hz.

Если снять комментарий со следующих строк:
Code:
;                OR      AH,AL ;  AH=AL=00h?
;                JZ      LOK_0022

то программа-таки выйдет из цикла чтения канала 2 таймера по достижению значения 0000Н,
как, собственно, и было задумано, но сделает это случайным образом, когда AH=AL=00h
случайно совпадет.

У кого есть возможность скомпилировать и проверить это на своих ноутбуках - попробуйте!
Результат меня зело обескуражил... Похоже, что интегрированный таймер упростили по соображению:
всё равно он всегда в режиме 3 с автозагрузкой...


P.S.Если я ничего в жизни по этому поводу не пропустил, то таймер 8254 в режиме 0 должен работать вот так:
Attachment:
SYStime0.gif
SYStime0.gif [ 11.27 KiB | Viewed 8463 times ]

Но вдруг были какие-то иные директивы и распоряжения? :wink:

_________________
iLavr


10 Apr 2016 07:22
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Если я ничего в жизни по этому поводу не пропустил, ...

А вот выходит, что и пропустил... :osad: (посыпаю голову пеплом) Слишком уж меня везде уверили,
что i8253 и i8254 практически идентичны за небольшим исключением. :-?

А Дьявол как раз и кроется в деталях - продолжать счет по достижению 0000 - это, оказывается, фича i8254!
Attachment:
I8254.gif
I8254.gif [ 36.16 KiB | Viewed 8460 times ]
http://www.scs.stanford.edu/10wi-cs140/pintos/specs/8254.pdf

И самое интересное, что я с этим сталкивался уже очень давно, когда писал эмулятор
таймера 8253 для "Специалиста" на двух каналах интегрированного таймера 8254.
Меня тогда, выходит, здорово выручила привычка не делать проверку на 0, а делать проверку
на уход в минус, но с фичей я тогда, выходит, что до конца не разобрался... :osad: Виноват... :-?

_________________
iLavr


10 Apr 2016 08:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну а теперь о хорошем, коли уж все непонятки учтены... :ewink:

Я изменил программу согласно тому факту, что счетчик таймера не прекращает счет при переходе
через 0000Н, и вот её новый вариант:
Code:
SEG_A           SEGMENT BYTE PUBLIC
                ASSUME  CS:SEG_A, DS:SEG_A
                ORG     100h

BEEPER          PROC    FAR

START:
                JMP     LOC_0021

TONE_HIGH       DW      0854H ; 1.190.000/1000=1200Гц (делитель 3DFH)
TONE_LOW        DW      0A90H ; 1.190.000/3000=440Гц  (делитель)4A6H;
DATA_0010       DB      01H   ; пpизнак совпадения и пеpеключения (не используем)
DATA_0012       DB     '0000H <-TEST TIMER: press any key to stop & exit!',00H
TAB_HEX         DB     '0123456789ABCDEF'

BEEPER          ENDP

LOC_0021:
                MOV     AX,0F00H; узнаем pежим
                INT     10H
                PUSH    BX   ; сохpаним стpаницу
                XOR     BX,BX; очистить окно
                MOV     CX,BX; pазмеpами:
                MOV     BH,07H; аттpибут
                MOV     DH,24; 25 стpок на
                MOV     DL,AH; AH столбцов
                MOV     AX,0600H
                INT     10H
                POP     BX    ; восстановим стpаницу
                XOR     DX,DX ; <- веpхний угол
                MOV     AX,0200H
                INT     10H   ; установим куpсоp

                MOV     BX,OFFSET DATA_0012
LOC_0020:
                MOV     AL,CS:[BX]
                OR      AL,AL
                JZ      LOK_0021
                MOV     AH,0EH; записать символ из AL
                INT     10H
                INC     BX
                JMP     LOC_0020
LOK_0021:
                CALL    PUT_BEEP; настроим таймер
LOC_0022:
                MOV     AL,80H; = чтение на лету, канал 2
                OUT     43H,AL
                JMP     SHORT $+2
                IN      AL,42H;   low byte
                JMP     SHORT $+2
                MOV     AH,AL; <- low byte
                IN      AL,42H;  high byte
                JMP     SHORT $+2
                XCHG    AH,AL
                CMP     BX,AX; BX-AX
                MOV     BX,AX; сохраним предыдущее значение
                JA      LOC_0022
                XCHG    AH,AL
LOC_VIDS:;_____ AL-SYMBOL; DI-OFFSET
                PUSH    ES
                PUSH    AX

                XOR     AX,AX
                MOV     DI,AX;  DI = 0000h смещение в буфере

                MOV     AX,0B800H; сегмент текст.буфера экрана
                MOV     ES,AX
                POP     AX

                CALL    SHOW_HEX
                MOV     AL,AH
                CALL    SHOW_HEX
                POP     ES

                MOV     AX,0101H
                INT     16H ;_____ опрос клавиатуры без ожидания
                JZ      LOC_0022
LOK_0022:
                CALL    SHUT_UP
;                INT     20H
                MOV     AX,4C05H
                INT     21H   ; Выход с ошибкой 5

;____________________________ Генеpация звука ________________________________
PUT_BEEP        PROC NEAR
                PUSH    AX
;                MOV     AX,CS:TONE_HIGH       ;=880Гц (делитель)
;                MOV     AX,CS:TONE_LOW        ;=440Гц (делитель)
                MOV     AX,0000H               ;=65536 (делитель)
                MOV     BX,AX
                DEC     BX
                CALL    LOCK_BEEP
                POP     AX
                RET

PUT_BEEP        ENDP
;---------------------------- Вывод звука -----------------------------------
LOCK_BEEP       PROC NEAR
;________________________________ Настpоим таймеp ___________________________
                PUSH    DX
                PUSH    AX     ; AX - делитель сохpаним

;                MOV     AL,0B6H; = 1011.0110b - в pегистp команд
                MOV     AL,0B0H; = 1011.0100b - в pегистp команд
                MOV     DX,0043H
                OUT     DX,AL                ; port 43H, 8253 wrt timr mode
                JMP     SHORT $+2
                POP     AX     ; AX - делитель восстановим
;----------------------------------------------------------------------------
                MOV     DX,0042H
                OUT     DX,AL                ; port 42H, 8253 timer 2 spkr
                JMP     SHORT $+2
                MOV     AL,AH
                OUT     DX,AL                ; port 42H, 8253 timer 2 spkr
                JMP     SHORT $+2
;________________________________ Включение звука ____________________________
                IN      AL,61H                ; port 61H, 8255 port B, read
                JMP     SHORT $+2
                OR      AL,03H; = 0000.0011b - установили 2 младших бита
                              ;          ¦L----- бит 0 = 1 включить таймеp(2)
                              ;          L------ бит 1 = 1 включить динамик
                OUT     61H,AL;                 port 61H, 8255 B - spkr, etc
                JMP     SHORT $+2
                POP     DX
                RET
LOCK_BEEP       ENDP

;________________________________ Выключение звука ___________________________
SHUT_UP         PROC NEAR
                IN      AL,61H                ; port 61H, 8255 port B, read
                JMP     SHORT $+2
                AND     AL,0FCH; = 1111.1100b - сбpосили 2 младших бита
                               ;          ¦L---- бит 0 = 0 выключить таймеp(2)
                               ;          L----- бит 1 = 0 выключить динамик
                OUT     61H,AL ;                port 61H, 8255 B - spkr, etc
                JMP     SHORT $+2
                OUT     61H,AL;
                RET
SHUT_UP         ENDP

SHOW_HEX PROC   NEAR                ; AL - байт на вывод в HEX виде
                PUSH    AX
                PUSH    CX

                PUSH    AX
                AND     AL,0F0H
                MOV     CL,4
                SHR     AL,CL
                CALL    HEXASC
                MOV     ES:[DI],AL
                INC     DI
                INC     DI
                POP     AX

                AND     AL,0FH
                CALL    HEXASC
                MOV     ES:[DI],AL
                INC     DI
                INC     DI

                POP     CX
                POP     AX
                RETN
SHOW_HEX        ENDP

;______________ Перекодировка ______
HEXASC   PROC   NEAR
                PUSH    BX
                MOV     BX,OFFSET TAB_HEX
                XLAT
                POP     BX
                RETN
HEXASC          ENDP

;-----------------------------------------------------------------------------
SEG_A           ENDS

                END     START

В ней есть атавизмы старого варианта, но теперь она четко фиксирует лишь переход через 0000Н,
и выводит следующее после этого число.
Назначение программы - сугубо проверить доступ к таймеру командами IN и OUT, а также
работоспособность при этом самого таймера по каналу 2, с адресом 42Н.

Результаты на этот раз приятные сверх меры!

Таймер доступен на ноутбуке из-под голой DOS, несмотря на довольно гнусную архитектуру
ноутбука, где почти всё висит на "внутренней шине" и по адресам портов недоступно.
LPT и COM-порты отсутствуют как факт. В наличии только 2 USB.
Для пробы в голой DOS я стартовал с загрузочной флешки с поддержкой NTFS.

Вторая приятная вещь: эта же самая программа отлично работает под Вендой-7-32 безо всяких
DOS-боксов, что меня удивило, ведь пишут, что команды IN и OUT - привелегированные, и
вызывают исключение или не выполняются. У меня - выполняются. 8)
Attachment:
8254dos.gif
8254dos.gif [ 9.76 KiB | Viewed 8451 times ]


Теперь о доступе через библиотеку inpout32.dll. Доступ к портам происходит через неё под
Вендой-7-32 просто великолепно. Я, правда, с перепугу переписал заново приложение, контролируя
всё более тщательным образом:
Attachment:
8254tst.gif
8254tst.gif [ 7.41 KiB | Viewed 8451 times ]

Оно теперь демонстрирует обратный отсчет при чтении таймера "на лету".

Кстати говоря, скачал я мануал и на таймер i8253, где тоже нашел упоминание о том, что
он продолжает счет при переходе через 0000Н. Странно, почему мне не попадалась такая информация
о таймере КР580ВИ53... :-?

Теперь буду пробовать эти программы на сторонних Вендах-7, где я на правах гостя.

Ну и эта задача, на мой взгляд, отвечает на вопрос, зачем мне лезть к таймеру.
Таймер - это единственное устройство, на всех воможных посторонних машинах, которое заведомо
в них есть и точно находится всегда по адресам 40Н...43Н.
Тем более, что обращение к каналу 2 таймера совершенно безопасно для всех систем, но позволяет
проверить доступость портов ввода-вывода.
А на моем ноутбуке практически больше и нет устройств, доступных по адресам портов, к которым
можно было бы обратиться не создавая лишних проблем.

Теперь о том, почему, собственно, топик называется FreeBASIC... Дело в том, что для возможости
программирования на незнакомых машинах, я всегда носил на флешке Visual Basic 3.0.
Он великолепно работал автономно, никак не затрагивая ни реестр, ни какую другую требуху
этих машин.
Но вот Венда-7-64 ему в работе отказала, что вынудило меня начать искать Visual Basic 3.0
альтернативу, столь же неприхотливо работающую с флешки и не требующую установки.
Пока не нашел... :osad:

_________________
iLavr


10 Apr 2016 21:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Вторая приятная вещь: эта же самая программа отлично работает под Вендой-7-32 безо всяких
DOS-боксов, что меня удивило, ведь пишут, что команды IN и OUT - привелегированные, и
вызывают исключение или не выполняются. У меня - выполняются. 8)
Image

А вот под Вендой-7-64 этот фокус не прошел, даже с правами администратора.
При запуске она ответила окном:"Денаед!"

Но с другой стороны удивило, что в Системных устройствах Венды-7-64 оказался
"Системный динамик", хотя всюду пишут, что она его не поддерживает.
Буду разбираться дальше...

_________________
iLavr


12 Apr 2016 13:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Сегодня дошли руки еще поэкспериментировать с портами под Вендой-7-64 в гостевом доступе без прав администратора.

Ну чтобы эксперимент считать чистым, Венда была у меня вот такая:
Attachment:
out1.gif
out1.gif [ 70.07 KiB | Viewed 8406 times ]


С вот таким набором устройств:
Attachment:
Out4.gif
Out4.gif [ 72.26 KiB | Viewed 8406 times ]

То есть Системный таймер в устройствах есть, а Системного динамика - нет.

Динамическая библиотека доступа к портам НЕ РЕГИСТРИРОВАЛАСЬ в Венде 7, а лежала в папке на диске C:,
куда мне всё перекинуть вместе с компилятором было позволено, а вот в Програм Файлз - НЕТ.

Ну и доступ к портам сработал без вопросов... :o
Attachment:
out0.gif
out0.gif [ 29.79 KiB | Viewed 8406 times ]


Вот это невзрачное с точки зрения MS-DOS происшествие, что я без проблем обратился к портам таймера,
и есть "взлом системы", о чем мне тут ранее рассказывали?

Также в режиме гостевого доступа я спокойно зарегистрировал компилятор (самое смешное, что я сейчас
сижу на другой Венде-7-64 с правами Администратора
:o а компилятор зарегить она не дает...) :obye:

_________________
iLavr


15 Apr 2016 07:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
(самое смешное, что я сейчас сижу на другой Венде-7-64 с правами Администратора :o а компилятор зарегить она не дает...)

Продолжаем опыты над Вендой-7-64, где я сижу с правами Администратора... :wink:
Ну зарегить она не дает, поскольку хочет, чтобы я запустил приложение от имени администратора...
Attachment:
Column1.gif
Column1.gif [ 32.56 KiB | Viewed 8405 times ]

Это особо ни на что не влияет, только мне напоминают "злым окном", что я работаю на незарегистрированной копии...
Ладно... зарегистрирую от имени Администратора, чтобы не мешало мне.

А вот теперь самое интересное! Честно скажу, я этого как бы уже и не ожидал... :-?
Конфигурация этой Венды-7-64 вот такая:
Attachment:
Out5.gif
Out5.gif [ 307.71 KiB | Viewed 8405 times ]

То есть, есть и Системный таймер и Встроенный динамик. Я, честно говоря, перед опытами сегодня спросил
владельца машины - слышал ли он хоть раз её спикер (может его внутри нет) - он ответил мне отрицательно...

ТАК ВОТ, ДЖЕНТЛЬМЕНЫ, ОНА СПИКЕРОМ ЗАБИБИКАЛААААААА!!!! :esurprised:
Attachment:
Out7.gif
Out7.gif [ 44.64 KiB | Viewed 8405 times ]

Динамическая библиотека доступа к портам inpout32.dll НЕ РЕГИСТРИРОВАЛАСЬ в Венде 7, а также лежала в папке на диске C:

_________________
iLavr


15 Apr 2016 08:36
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 20 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.