Вид курсора мыши

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Попробуйте WIN кодировку Я пишу в RadASM, открываете наверное под DOS
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

С вашего позволения, покажу то,что вижу.

[Syntax="Asm"]

.model small
.stack 100h
.286p
.data
infoprog db 10,13,"Mouse test",10,13,'$'
mouse_err db 10,13,"Mouse error",10,13,'$'
sym db 11111111b
db 11111111b
db 11111000b
db 11111000b
db 11111000b
db 11011000b
db 11001100b
db 11001100b
db 00000110b
db 00000110b
db 00000011b
db 00000011b
db 00000001b
db 00000001b
db 00000000b
db 00000000b

db 0,0,0,0,0,0,0,0
.code
.startup
mov ax,0003h ; гсвановивм 03h режим 80е25
int 10h
mov dx,offset infoprog ; влвесви индормажионное сообйение
mov ax,0900h
int 21h
mov ax,0c07h ; ожидаем нажавие Enter длп запгска программл
int 21h
cmp al,0dh; Ќажава клавииа Enter?
jz run_prog ; если да, во запгсвивм программг
jmp exit_prog; иназе влеод из программл
run_prog:
xor ax,ax ; проверпем нализии манипглпвора млим
int 33h
cmp ax,0ffffh; если резглмвав равен 0ffffh во все в порпдке
je mouse_ok
mov ax, 0900h; иназе влдавм предгпреждение и завериивм программг
mov dx, offset mouse_err
int 21h
exit_prog:
mov ax, 4c00h ; законзивм программг
int 21h

mouse_ok:
mov ax,1130h
mov bx, 0004h
int 10h

mov ax,1100h
mov cx,1
mov dx,255
mov bx,1000h
push ds
pop es
mov bp, offset sym
int 10h

mov ax,0200h
mov dx,255
int 21h

mov ax, 0001h ; вклозивм млим
int 33h

mov ax,000ah
mov bx,0
mov cx,0ff00h
mov dx,000ffh
int 33h

GetChar:
mov ax,0700h ; ожидаем нажавие на клавииг Esc
int 21h
cmp al,27;нажава Esc?
jne GetChar; если нев продолживм опрос клавиавгрл

mov ax, 0002h ; влклозивм млим
int 33h

mov ax, 4c00h ; законзивм программг
int 21h
end


[/Syntax]

Так-то ничего страшного, но читать не приятно. Да и хотелось-бы знать, что вы там написали.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Какой-то древнеукраинский или кривой Т9 )))))
It's a long way to the top if you wanna rock'n'roll
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

[Syntax="Asm"]
.startup
mov ax,0003h ; установить 03h режим 80х25
int 10h
mov dx,offset infoprog ; вывести информационное сообщение
mov ax,0900h
int 21h
mov ax,0c07h ; ожидаем нажатие Enter для запуска программы
int 21h
cmp al,0dh; Нажата клавиша Enter?
jz run_prog ; если да, то запустить программу
jmp exit_prog; иначе выход из программы
run_prog:
xor ax,ax ; проверяем наличии манипулятора мышь
int 33h
cmp ax,0ffffh; если результат равен 0ffffh то все в порядке
je mouse_ok
mov ax, 0900h; иначе выдать предупреждение и завершить программу
mov dx, offset mouse_err
int 21h
exit_prog:
mov ax, 4c00h ; закончить программу
int 21h

mouse_ok:
....
mov ax, 0001h ; включить мышь
int 33h
....
GetChar:
mov ax,0700h ; ожидаем нажатие на клавишу Esc
int 21h
cmp al,27;нажата Esc?
jne GetChar; если нет продолжить опрос клавиатуры

mov ax, 0002h ; выключить мышь
int 33h

mov ax, 4c00h ; закончить программу
int 21h
end[/Syntax]
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

somewhere писал(а):Вообще такие вещи всегда делались вручную, никто никакие функции не использовал. Например, люди создавали графический курсор (стрелку) в текстовом режиме. Добивались этого путем программирования знакогенератора - т.е. битовых строк, которые определяют каждый текстовый символ, через порты видеоадаптера.
Причем предполагалось что общее количество различных символов на экране всегда меньше 256-4 (252). Вид тех самых 4 символов, на которых стоял указатель мыши заменялся на битовые изображения этих символов с наложением курсора (стрелки). Только коды этих символов менялись на диапазон с 252-255, чтобы остальные символы на экране не попортились новым изображением. Для примера можно посмотреть NDD.EXE или FFORMAT.COM в которых именно такая реализация.
Примерно по такой же схеме рисовались графические формы поверх текстовых и все в то время удивлялись как люди совмещали графический и текстовый режимы.
somewhere, вот-вот! Это постоянное перепрограммирование 4-х символов нужно было, чтобы продемонстрировать особую крутость программы. Т.к. в этих случаях делалось даже так, что курсор плавно "скользил" по тексту, находящемуся на экране.

Я подозреваю, что это черезчур для учебной задачки Alex_Burn-а. Видимо, ему как раз достаточно через Int 33h, AX = 000Ah, как написал airyashovв #2.

А через постоянное перепрограммирование внешнего вида символов мы как-то раз реалировали "бегущее сообщение". Наподобие того, как бегут по экрану (снизу вверх) титры кинофильма.

Там еще тонкость, что помимо программирования вида символов хорошо бы (если речь шла о VGA) перевести экран в режим матрицы символа 8x16 (из 9x16). Для лучшей смотрибельности.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Там еще тонкость, что помимо программирования вида символов хорошо бы (если речь шла о VGA) перевести экран в режим матрицы символа 8x16 (из 9x16). Для лучшей смотрибельности.
Ну да, была такая фича. Я когда делал, всегда смотрел видеорежим чтобы определить размер матрицы. Ну или функцию Int 10h юзал для ее определения. Зато прикольно, когда по нортону вместо красного прямоугольника настоящий курсор ходил. Косяк только один был - его цвет, т.к. он зависел от аттрибутов символов и мог быть неравномерным.
&quot писал(а):Я подозреваю, что это черезчур для учебной задачки Alex_Burn-а
Просто внешне показалось, что нужно реализовать графический курсор в текстовом режиме, который не "шагает" по символьной матрице, а двигается плавно.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Всем большое спасибо за помощь! Вроде разобрался.
Что касается задания, то просто хотелось, чтобы форма курсора в графическом режиме была отлична от прямоугольника.
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

г-н airyashov, а что в вашем примере значат следующие строки?

[Syntax="ASM"]
mov ax,1130h
mov bx, 0004h
int 10h
[/Syntax]
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

получить адрес памяти где хранятся коды знакогенератора для символов 128-255
Ответить