Дневник, метка assembler
9 записей
В форме
Я опять в форме.
Read more...
Read more...
Телевизор - монитор?
Вы можете использовать драйверы для видеокарточек Cirrus Logic и не только и Trident . Ещё вы можете попробовать драйвера,которые делал не я.
При этом все стандартные видеорежимы (от 0 до 19) работают (показываются) отлично. Только на Cirrus при разрешении 320 точек по горизонтали показывает немного узко (в 2 раза),но тоже приемлемо. Зато на Cirrus есть возможность работать в SVGA режимах 640*480 256 цветов и 800*600 256. В первом случае видно 640*350 (можно регулировать от 320 до 390). Во втором можно 640*350,а на некоторых мониторах устанавливается 800*350. Оставшуюся часть изображения можно наблюдать,передвигаясь с помощью клавиш или мышки (используется средняя кнопка).Но это только в DOS в реальном режиме.
Подробнее
Read more...
При этом все стандартные видеорежимы (от 0 до 19) работают (показываются) отлично. Только на Cirrus при разрешении 320 точек по горизонтали показывает немного узко (в 2 раза),но тоже приемлемо. Зато на Cirrus есть возможность работать в SVGA режимах 640*480 256 цветов и 800*600 256. В первом случае видно 640*350 (можно регулировать от 320 до 390). Во втором можно 640*350,а на некоторых мониторах устанавливается 800*350. Оставшуюся часть изображения можно наблюдать,передвигаясь с помощью клавиш или мышки (используется средняя кнопка).Но это только в DOS в реальном режиме.
Подробнее
Read more...
Дарю кусочек кода
Это из программы ExactMouse.
Самое ядро. Рассчитывает размеры области считывания и увеличения.
mov edi, ofs ptSize_src
mov ebx, ofs ptSize_dst
mov ecx, [(t inid esi).ZoomLevel]
mov eax, [(t inid esi).ZoomWndSizeX]
sub edx, edx
div ecx
test al, 1
jnz @@odd_0
inc eax
jmp @@odd_00
@@odd_0:
or edx, edx
jz @@odd_00
inc eax
inc eax
@@odd_00:
mov [(t POINT edi).x], eax
mul ecx
mov [(t POINT ebx).x], eax
А вот и мои рассуждения на бумаге насчёт этого самого блока кода.
( Read more... )
Read more...
Comments (7)Самое ядро. Рассчитывает размеры области считывания и увеличения.
mov edi, ofs ptSize_src
mov ebx, ofs ptSize_dst
mov ecx, [(t inid esi).ZoomLevel]
mov eax, [(t inid esi).ZoomWndSizeX]
sub edx, edx
div ecx
test al, 1
jnz @@odd_0
inc eax
jmp @@odd_00
@@odd_0:
or edx, edx
jz @@odd_00
inc eax
inc eax
@@odd_00:
mov [(t POINT edi).x], eax
mul ecx
mov [(t POINT ebx).x], eax
А вот и мои рассуждения на бумаге насчёт этого самого блока кода.
( Read more... )
Read more...
Разделить на 0.75
Как, не используя математический сопроцессор, разделить на 0.75 1.33333?
Использовать Ассемблер.
Ответ
Read more...
Comments (7)Использовать Ассемблер.
Ответ
Read more...
Хранитель экрана. Точки на экране
Попробуйте мой хранитель экрана.
Read more...
Comments (30)Read more...
IRIS
Симпатичная программа. Выводит на экран быстро меняющийся рисунок.
Использует аппаратные возможности VGA-адаптера.
P386
jr equ jmp short
bptr equ byte ptr
wptr equ word ptr
dwptr equ dword ptr
ofs equ offset
len_stek = 333
stek = offset posl+len_stek+len_dat
dat = offset posl
old_crd_mou = dat ;+4
data_15 = old_crd_mou+4 ;+1
data_16 = data_15+1 ;+1
data_17 = data_16+1 ;+1
data_18 = data_17+1 ;+1
len_dat = (data_18+1-dat)
Model tiny
Assume CS:IRIS,DS:IRIS
IRIS segment 'code' byte public use16
Дальше читать
Read more...
Использует аппаратные возможности VGA-адаптера.
P386
jr equ jmp short
bptr equ byte ptr
wptr equ word ptr
dwptr equ dword ptr
ofs equ offset
len_stek = 333
stek = offset posl+len_stek+len_dat
dat = offset posl
old_crd_mou = dat ;+4
data_15 = old_crd_mou+4 ;+1
data_16 = data_15+1 ;+1
data_17 = data_16+1 ;+1
data_18 = data_17+1 ;+1
len_dat = (data_18+1-dat)
Model tiny
Assume CS:IRIS,DS:IRIS
IRIS segment 'code' byte public use16
Дальше читать
Read more...
Сегодня программировал.
Сделал много. По сути, сделал полный шаг в сторону рабочей программы.
Этот шаг - универсальный алгоритм по заполнению информации о микшерах в системе в массив.
То есть, собирает всю информацию о микшерах и заносит её в массив.
Потом с ним можно работать, обрабатывая информацию о микшерах.
Вот основная подпрограмма:
;----------------------------------------------------------
; Открывает указанный микшер и заполняет структуру о этом микшере
;
; IN -> Номер микшера;
;
; OUT=> Адрес структуры с информацией об открытом микшере;
;
proc Mixer_Load
ARG @@uMixerID :dword
USES esi,edi,ebx
LOCAL @@MixerCaps :MIXERCAPS, @@mlDest :MIXERLINE,\
@@mlSrc :MIXERLINE, @@dwDestination :dword, @@arrMixer :dword,\
@@phmx0 :dword, @@arrMixer_size :dword
;--
Call GlobalAlloc, GPTR, 4 + (size MIXERCAPS) + 4 + 4 + 4
or eax, eax
jz @@exit_err
Смотреть её полностью
А вот алгоритм установки движков, основанный на этом массиве и подпрограммах.
Заметьте, как всё просто обрабатывается, быстро и универсально!
call Mixer_new
or eax, eax
jz @@exit1
mov [arrMixers], eax
;===
mov eax, [arrMixers]
mov eax, [eax+4]
mov esi, [eax]
mov ecx, [eax+12]
add eax, [eax+8]
xchg edi, eax
@@n10:
cmp [(t MIXERLINE edi).dwComponentType], \
MIXERLINE_COMPONENTTYPE_SRC_ANALOG
jnz @@o28_0
call InitSlider, esi, [hwnd1], [(t MIXERLINE edi).dwLineID],\
MIXERCONTROL_CONTROLTYPE_VOLUME
@@o28_0:
cmp [(t MIXERLINE edi).dwComponentType], MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
jnz @@o28
call InitSlider, esi, [hwnd0], [(t MIXERLINE edi).dwLineID],\
MIXERCONTROL_CONTROLTYPE_VOLUME
@@o28:
add edi, size MIXERLINE
dec ecx
jnz @@n10
Read more...
Этот шаг - универсальный алгоритм по заполнению информации о микшерах в системе в массив.
То есть, собирает всю информацию о микшерах и заносит её в массив.
Потом с ним можно работать, обрабатывая информацию о микшерах.
Вот основная подпрограмма:
;----------------------------------------------------------
; Открывает указанный микшер и заполняет структуру о этом микшере
;
; IN -> Номер микшера;
;
; OUT=> Адрес структуры с информацией об открытом микшере;
;
proc Mixer_Load
ARG @@uMixerID :dword
USES esi,edi,ebx
LOCAL @@MixerCaps :MIXERCAPS, @@mlDest :MIXERLINE,\
@@mlSrc :MIXERLINE, @@dwDestination :dword, @@arrMixer :dword,\
@@phmx0 :dword, @@arrMixer_size :dword
;--
Call GlobalAlloc, GPTR, 4 + (size MIXERCAPS) + 4 + 4 + 4
or eax, eax
jz @@exit_err
Смотреть её полностью
А вот алгоритм установки движков, основанный на этом массиве и подпрограммах.
Заметьте, как всё просто обрабатывается, быстро и универсально!
call Mixer_new
or eax, eax
jz @@exit1
mov [arrMixers], eax
;===
mov eax, [arrMixers]
mov eax, [eax+4]
mov esi, [eax]
mov ecx, [eax+12]
add eax, [eax+8]
xchg edi, eax
@@n10:
cmp [(t MIXERLINE edi).dwComponentType], \
MIXERLINE_COMPONENTTYPE_SRC_ANALOG
jnz @@o28_0
call InitSlider, esi, [hwnd1], [(t MIXERLINE edi).dwLineID],\
MIXERCONTROL_CONTROLTYPE_VOLUME
@@o28_0:
cmp [(t MIXERLINE edi).dwComponentType], MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
jnz @@o28
call InitSlider, esi, [hwnd0], [(t MIXERLINE edi).dwLineID],\
MIXERCONTROL_CONTROLTYPE_VOLUME
@@o28:
add edi, size MIXERLINE
dec ecx
jnz @@n10
Read more...
Найдите ошибку :))
cmp [(t MIXERLINE edi).dwComponentType], MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY
Read more...
Read more...