Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2015, 19:45   #21
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию

Цитата:
Можно и BGI пользоваться
Нельзя.
Во-первых, там нет прозрачного цвета. Только мутные логические операции.
Во-вторых, BGI не умеет отражать спрайты.
В-третьих, драйвер svga256.bgi мне придется красть из порнотетриса, потому как в стандартный паскаль он не входит. Без него — 16 цветов.
В-четвертых и главных, BGI работает крайне неспешно и неторопливо.
В-пятых и еще более главных, BGI крайне негибко.

Цитата:
Если используются стандартные режимы EGA с ограниченным количеством цветов (8, 16 или 64, не помню), для пересылки в экранный буфер используется очень хитрый механизм с регистрами-задвижками и портами
Именно поэтому не пользуюсь режимами EGA. Вообще нормальная плавная графика пошла после того, как EGA-режимами перестали пользоваться.
У меня режим 13h. 320x200, 256 цветов из палитры, строго один байт на пиксель, полный экран чуть меньше сегмента.

Но вопрос не в этом. Вопрос — где ошибка в моем простеньком коде.
Я ошибки не вижу, а программа вылетает.

Цитата:
лучше поискать готовую графическую библиотеку для Turbo Pascal, ориентированную на игры
Да там нечего искать. Нарисовать спрайт, нарисовать тайл, бросить буфер на экран, вывести текст, поправить палитру — ничего сложного.
Просто немного тормозит на чистом паскале.
)))

Последний раз редактировалось Чудо-программист; 22.08.2015 в 19:52.
Чудо-программист вне форума Ответить с цитированием
Старый 23.08.2015, 11:02   #22
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от Чудо-программист Посмотреть сообщение
У меня режим 13h. 320x200, 256 цветов из палитры, строго один байт на пиксель, полный экран чуть меньше сегмента.
Ну вот, блин. Надо было сразу так и говорить. Перечитай свое первое сообщение в теме и скажи, плакать надо или смеяться. Чуть было в "Юмор" тему не перевели.

Цитата:
Сообщение от Чудо-программист Посмотреть сообщение
Да там нечего искать. Нарисовать спрайт, нарисовать тайл, бросить буфер на экран, вывести текст, поправить палитру — ничего сложного.
Вот этим и должна заниматься библиотека. Код, написанный и отлаженный другими программистами с учетом особенностей аппаратуры и прочего.

Код из сообщения #8 может падать из-за неверного вычисления адресов. Квадратные скобки не забыты? Как описаны переменные Screen1 и Screen2?
Vapaamies вне форума Ответить с цитированием
Старый 23.08.2015, 17:43   #23
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию

Код:
type
  TScreen = array[0..ScreenMaxY, 0..ScreenMaxX] of Byte;
  PScreen = ^TScreen;

var
  Screen1. Screen2: PScreen

...

procedure InitBufs;

begin
  New(Screen1);
  Screen2 := Ptr(40960, 0)
end;
Как-то так они описаны.
)))
Чудо-программист вне форума Ответить с цитированием
Старый 23.08.2015, 21:11   #24
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

И что мешает использовать системную процедуру Move? Вот ее исходник (memh.asm):
Код:
; Move standard procedure

MoveMem:

	MOV	BX,SP
	MOV	DX,DS
	LDS	SI,SS:[BX+10]
	LES	DI,SS:[BX+6]
	MOV	CX,SS:[BX+4]
	CLD
	CMP	SI,DI
	JAE	@@1
	ADD	SI,CX
	ADD	DI,CX
	DEC	SI
	DEC	DI
	STD
@@1:	REP	MOVSB
	CLD
	MOV	DS,DX
	RETF	10
Вызывать ее из Паскаля, и всё, будет быстро:
Код:
begin
  Move(Screen1^, Screen2^, SizeOf(TScreen));
end;
Vapaamies вне форума Ответить с цитированием
Старый 23.08.2015, 21:16   #25
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию

Экран режима 13h — очень тормозной, поэтому Movsw будет ровно вдвое быстрее.
А так у меня вообще было Screen2^ := Screen1^, по скорости как Move.
)))
Чудо-программист вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование встроенного ассемблера Jeckor Visual C++ 5 23.11.2014 09:28
Вывод графики в Pascal с использованием встроенного ассемблера иванлеон Помощь студентам 1 17.04.2012 12:44
Блок-схема к программе на паскале со вставками ассемблера. V1rus.25 Помощь студентам 0 09.04.2012 18:59
в турбо паскале natalialove Фриланс 8 31.05.2010 19:11
в турбо паскале tanyalove Помощь студентам 17 29.04.2010 13:16