Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[Borland C++ 3.1] Графика под дос. Огромные объемы.

14K
15 апреля 2007 года
demonoide
30 / / 11.02.2007
Вот начал окультуривать свою курсовую игрушку. Пишу в Borland C++ 3.1
Почитал о bmp, открыл, вывел, всё отлично... но...

Открытие файла происходит очень медленно, у меня на машине это не заматно, но в ВУЗЕ и на машиене в соседней комнате это занимает около трёх секунд.

По совету препода и одногруппников, решил перед тем, как программа запуститься, считать все картинки в оперативную память и с неё напрямую их грузить.

Здесь как раз и вышла заморочка.

Выставил в компияторе heapsize 640 Kb, начал выделять память.
У меня около 10 картинок 640x480 256(цв), следовательно выделил:

 
Код:
unsigned char **bmp_cdn,
 bmp_cdn = new unsigned char*[640];
  for(i=0; i<640; i++)
    bmp_cdn=new unsigned char[480];


Подгрузил картинку, всё ок. Но потом понял, что я уже использовал 640*480*1 байт или 300 кб, памяти у меня под всё 500 с чем-то (проверил спец. функцией). Второй раз выделить столько же не получилось.

Вопрос такой, можно ли как-нибудь обхитрить это дело и занести в ОЗУ через DOS хотя бы 3000 кб, ведь я точно знаю, что к примеру такие игры как Doom, Quake подгружали в память намного больше, и писались под C++ (правда компиль был другой), однако они тоже под Dos.

Или хотя бы подскажите, как можно загрузить эти 10 картинок, чтобы используя всего около 500 кб, можно было играть вполне без подзагрузок. Вариант каждый раз вывешивать 'Loading' не очень то нравиться, учитывая, что небольшие объекты в игре должны быть подвижными.
14K
15 апреля 2007 года
demonoide
30 / / 11.02.2007
Вот прочитал:
"Это ограничение к сожалению преследует MS DOS и аналогичные ей ОС других производителей, начиная с того момента, как горячо любимый в околокомпьютерных кругах Билл Гейтс заявил, что 640 килобайт достаточно для всех возможных задач ПК."

Видимо больше никак... как быть...
252
15 апреля 2007 года
koderAlex
1.4K / / 07.09.2005
http://www.cs.cmu.edu/~ralf/files.html
14K
15 апреля 2007 года
demonoide
30 / / 11.02.2007
SPAWNO - единственное, что там нашёл. Но мне бы хотелось помимо ссылки услышать комментарии. Как с ним работать и что конкретнее он делает.
27K
18 апреля 2007 года
BigPaHa
3 / / 18.04.2007
[COLOR="Black"][SIZE="2"]demonoide[/SIZE][/COLOR] проблема решена?
Меня тоже интересует этот вопрос, но никак не могу найти доку.
Не могли бы поделится тем, что у вас уже получилось?
14K
18 апреля 2007 года
demonoide
30 / / 11.02.2007
Поспрашивал на других форумах, у препода + у согруппников, посоветовали использовать far указатели, т.е. выделять память в отдельном сегменте. Сейчас разбираюсь.
391
18 апреля 2007 года
Archie
562 / / 03.02.2005
Нужно использоdать DOS-расширители, которые работают с памятью выше 1Мб (типа DPMI), соответственно, в защищенном режиме.
252
18 апреля 2007 года
koderAlex
1.4K / / 07.09.2005
цитата из "interrup.g" списка Ральфа Брауна .
Код:
INT 21 - DOS 2+ - ALLOCATE MEMORY
    AH = 48h
    BX = number of paragraphs to allocate
Return: CF clear if successful
        AX = segment of allocated block
    CF set on error
        AX = error code (07h,08h) (see #01680 at AH=59h/BX=0000h)
        BX = size of largest available block
Notes:  DOS 2.1-6.0 coalesces free blocks while scanning for a block to
      allocate
    .COM programs are initially allocated the largest available memory
      block, and should free some memory with AH=49h before attempting any
      allocations
    under the FlashTek X-32 DOS extender, EBX contains a protected-mode
      near pointer to the allocated block on a successful return
SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
--------D-2149-------------------------------
INT 21 - DOS 2+ - FREE MEMORY
    AH = 49h
    ES = segment of block to free
Return: CF clear if successful
    CF set on error
        AX = error code (07h,09h) (see #01680 at AH=59h/BX=0000h)
Notes:  apparently never returns an error 07h, despite official docs; DOS 2.1+
      code contains only an error 09h exit
    DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
      freed, only when a block is allocated or resized
    the code for this function is identical in DOS 2.1-6.0 except for
      calls to start/end a critical section in DOS 3.0+
SeeAlso: AH=48h,AH=4Ah
--------D-214A-------------------------------
INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
    AH = 4Ah
    BX = new size in paragraphs
    ES = segment of block to resize
Return: CF clear if successful
    CF set on error
        AX = error code (07h,08h,09h) (see #01680 at AH=59h/BX=0000h)
        BX = maximum paragraphs available for specified memory block
Notes:  under DOS 2.1-6.0, if there is insufficient memory to expand the block
      as much as requested, the block will be made as large as possible
    DOS 2.1-6.0 coalesces any free blocks immediately following the block
      to be resized
SeeAlso: AH=48h,AH=49h
252
18 апреля 2007 года
koderAlex
1.4K / / 07.09.2005
если с прерываниями лень возится , то
http://forum.codenet.ru/showthread.php?t=33532&page=2
92K
05 декабря 2013 года
street000
1 / / 05.12.2013
автор, а где вы прочитали про загрузку картинок в борланд си++3.1 ? Я уже неделю ничего по этой теме найти не могу(

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог