Телевизор - монитор?

Вы можете использовать драйверы для видеокарточек 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...

Дарю кусочек кода

Это из программы 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)

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...

Сегодня программировал.

Сделал много. По сути, сделал полный шаг в сторону рабочей программы.
Этот шаг - универсальный алгоритм по заполнению информации о микшерах в системе в массив.
То есть, собирает всю информацию о микшерах и заносит её в массив.
Потом с ним можно работать, обрабатывая информацию о микшерах.
Вот основная подпрограмма:

;----------------------------------------------------------
; Открывает указанный микшер и заполняет структуру о этом микшере
;
; 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...