25 Кадр
Как заставить на паскале экран микать 25 раз в секунду, а 25 кадром вставит какую нибудь реплику, типа "Ты хочешь пить!!!"
Облазила, хелпу по пасу и что-то нет ничего. Может просто ложить картинки 1/25 сек. Хотя рождается такая мысль, что заставить монитор "микать" 25 гц не получится однозначно (из паса).
Как заставить на паскале экран микать 25 раз в секунду, а 25 кадром вставит какую нибудь реплику, типа "Ты хочешь пить!!!"
Я занимался этой темой, но у меня не получилось.
Могу лишь поделить некоторыми соображениями.
Вопервых в нашем распоряжении ДОС.Значит пределом наших возможностей являются стандартные графические разрешения прописанные в БИОСе.(ты ведь хочешь храфику?) Например 320*200*256 .
пишем
asm
begin
mov ax(вроде) 13h
mov чегото ещё кудато -- щас не помню...
int 10h
end
получили графический режим.Далее выделяем в пмяти блок 64000байт(код не пишу -- я на Паскуале давно не сидел).И кидаем в него нашу картинку. потом с помощью того же АСМа кидаем его по адресу А000:0000 -- именно тут видеобуфер для 13 режима
begin
push ds
les di,video_buffer
lds si,buffer
mov cx,320*200/2
cld
rep movsw
pop ds
end;
Чтото типа такого -- работает изумительно, потрясающе быстро!И ещё нам абсолютно не нужен graph.tpu!
=================================================
Работа сделает вас свободными!
(лозунг фашистских концлагерей)
Как заставить на паскале экран микать 25 раз в секунду, а 25 кадром вставит какую нибудь реплику, типа "Ты хочешь пить!!!"
В каждой машине есть СИСТЕМНЫЙ ТАЙМЕР по адрессам 40h-43h. Какойто из них мелькает в 25гц, чтоли 43h. В общем если рассмотреть процесс он делает так:
0
5
0
5
0
5
и т.д.
сделай так
If port[$43] = 5 then begin
{Обновление картинки}
end;
Может быть под тормоза програмные будет минимум 20гц. Но всё равно.
Как заставить на паскале экран микать 25 раз в секунду, а 25 кадром вставит какую нибудь реплику, типа "Ты хочешь пить!!!"
%)) Забавно %) Вообще почему бы тебе не попробовать это сделать на делфе с использованием DirectDraw (DirectX). Там ставишь 100 Гц, которые делятся нацело на 25. И вперед!...
Во-первых, вся прога должна идти в графике. Чтобы не маяться,
1) отвяжить от Graph.TPU
2) пиши свои asm-процедурки, либо в теле проги, либо во внешней библиотечке, под ASM же и скомпилированной
Короче, переходишь в графический режим. Любой (во всяком случае 640x480x16 и 320x200x256) имеют постраничную организацию (не путать с цветовыми плоскостями. Просто если ты будешь переносить картинку в буфер VRAM, получишь при такой раскадровке весьма ощутимое "моргание" экрана. Поэтому пока у тебя на экране основная картинка, заполняешь вторую (пока скрытую) страницу, потом прерыванием... 10h, что ли... функцию тоже надо смотреть — меняешь указатель на активную страницу.
Подождал чуть-чуть (см. системный тик) и меняешь обратно. Можно привязаться к прерыванию таймера... Но долго и сложно. А постранично можно даже текстовый режим выводить, если я не ошибаюсь.
Язык: ASM. Формат: текст MS-DOS.