Не работает программа на встроенном видео

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

Модератор: Andy

Ответить
vlad_shum
Сообщения: 1
Зарегистрирован: 18 мар 2009, 11:58

Доброго времени суток, уважаемые!
Не могли бы вы помочь с маленькой проблемой? Программа, написанная на ассемблере и использующая графический режим, правильно выполняется на внешней видеокарте. На встроенной графике - только на секунды две появляется чёрный экран, и сама выгружается. Я новичок в ассемблере, задание делал по примерам к Зубкову, но и они выполняются только на внешней видеокарте.
вот код моей программки:

Код: Выделить всё

CSEG segment		; имя сегмента программы
org 100h			; начинаем её со смещения 100h
Start:			; метка начала программы
;*******************************************************************************
	[U]mov 	ah, 0h	;Установка видео режима
	mov 	al, 4h	;AL = режим(графика, 320*200)
	int 	10h     	;Видео сервис[/U]
	MOV  	CX, 160	;номер столбца
   	MOV  	DX, 100	;номер ряда 
Main:
Set_quadro:
	Call	set_dot
	Push	dx
	Push	cx
	Inc	dx
	Call	set_dot
       Inc	dx
	Call	set_dot
	Pop 	cx
	Pop	dx
Main_loop:
	Mov	ah, 1		; код функции "проверка готовности"
	Int	16h		; обращение к BIOS
	Jz	Main_loop	; символ не введён, возвращаемся на начало подпрограммы
	Xor	ah, ah	; код функции "чтение символа в AL"
	Int	16h		; обращение к BIOS
;*******************************************************************************
	Cmp	al, 'k'	; сравнение полученного символа с "g"
	Jne	_cmp2
	Call	del_quadro
	Inc	cx
	Cmp	cx,320
	Jne	inc_2
	Xor	cx,cx
Inc_2:
	Inc	dx
	Cmp	dx,200
	Jne	main
	Xor	dx,dx
	Jmp	main
_cmp2:
;******************************************************************************
	Cmp	al, 'g'
	Jne	_cmp3
	Call	del_quadro
	Dec	cx
	Jnz	Dec_2
	Mov	cx,319
Dec_2:
	Inc	dx
	Cmp	dx,200
	Jne	main
	Xor	dx,dx
	Jmp	main
_cmp3:
	Cmp	ah, 41h
	Jne	Main
	mov 	ah, 0h	;Установка видео режима
	mov 	al, 3h	;AL = режим(текст,80x25,16/8)
	int 	10h     	;Видео сервис
	int 	20h		; выход из программы
;*******************************************************************************
set_dot:	
   	Mov	ax, 0B800H         ;указываем на видеобуфер
   	mov	ES,AX             ;
   	Mov	ax, 0C03h
	Int	10h
	ret
;*******************************************************************************
Del_dot:
	Mov	ax, 0B800H         ;указываем на видеобуфер
   	mov	ES,AX             ;
   	Mov	ah, 0Ch
	Mov	al,4
	Int	10h
	Ret
;*******************************************************************************
del_quadro:
	Call	del_dot
	Push	dx
	Push	cx
	Inc	dx
	Call	del_dot
       Inc	dx
	Call	del_dot
	Pop 	cx
	Pop	dx

;*******************************************************************************
CSEG ends			; конец сегмента
end Start			; конец программы.
я так понимаю, что дело в подчёркнутом участке кода, но во всех примерах и теории делается именно так... Наставьте на верный путь, плиз, подсажите, что дописать, чтобы было видео-независимо?..
OS Windows XP SP3, motherboard GA M55-S3Gplus, CPU Athlon 6000
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Никто не гарантирует поддержку старых режимов, это же EGA.
Ответить