Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> верхняя память в DOS, как это организовать в BC++3.1 
:(
    Опции темы
cOZA
Дата 4.5.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Помогите разобраться с выделением памяти под "чистым" DOS'ом. Необходимо увидеть, желательно, все 128 метров памяти. А он видит только порядка 640К. Говорят что можно использовать XMS расширитель, но я с ним не работал и не знаю как им пользоваться.
Если можно - то какие-нибудь доки (на русском, желательно) или примеры использования расширителей, или ссылки.

Заранее благодарен. 
PM MAIL   Вверх
e-moe
Дата 4.5.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



для XMS нужен драйвер hymem.sys
подробнее читай тут (Методички по системному программированию) 
PM MAIL WWW ICQ   Вверх
cOZA
Дата 5.5.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Спасибо - но я это знал и ранее. А вопрос у меня в том как писать программу в BC++3.1 так чтоб она ИСПОЛЬЗОВАЛА (по возможности всю) как можно больше памяти. И не говорила о том что structure too big.
Как это сделать?
PM MAIL   Вверх
bsa
Дата 5.5.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Никак, имхо.
Для работы с непрерывными объемами памяти (для структур, например) более 64Кб необходимо работать в 32-х битном режиме. А чистый ДОС это делать не умеет. Для этого нужно использовать специальную надстройку (типа DOS-4GW, если не ошибаюсь). Но она должна поддерживаться компилятором.
Как вариант, попробуй использовать другой компилятор (не от Borland), который позволяет делать ДОС-приложения для защищенного режима процессора. 

Это сообщение отредактировал(а) bsa - 5.5.2006, 09:01
PM   Вверх
cOZA
Дата 5.5.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Не совсем согласен. Хотя бы 32 метра но увидеть можно. Видел как у человека прога захватывала ~20 метров и общалась с ними как хотела.
Вот только с ним я уже не могу поговорить.
Если кто знает - подскажите. Выход должен быть. 
PM MAIL   Вверх
Coala
Дата 5.5.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.5.2006
Где: Москва

Репутация: нет
Всего: 0



В любом случае нужен драйвер памяти защищенного режима. В своё время писал на Watcom C/C++ 10, в его комплект как раз и входит DOS4GW.EXE, о котором говорил bsa. И опять же (если память МОЯ не изменяет) - доступны будут только 32 метра. 
ЗЫ - если кто ещё помнит досовские Дум и Хексен - они как раз были написаны на Ваткоме и работали в защищенном режиме. А сам драйвер был встроен в экзешник игры. 

Это сообщение отредактировал(а) Coala - 5.5.2006, 12:15
PM MAIL   Вверх
cOZA
Дата 5.5.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Подскажите как здесь поступить? Ругается в указанном месте:

#include<stdio.h>
#include<dos.h>
int main(void)
{
  union REGS regs;
  struct SREGS segregs;
  typedef struct _DRIVER
   {
     struct _DRIVER far *pNext;
     int DevAttr;
     unsigned int Strategy;
     unsigned int Interrupt;
     char sName[8];
   };
  struct _DRIVER far *ptr;
  unsigned int i, offset;
  printf("Адрес заголовка   Имя устройства\n\n");
  regs.h.ah = 0x52;
  intdosx(&regs, &regs, &segregs);
  ptr = MK_FP(segregs.es, regs.x.bx + 0x22); //<<-- несовметимы типы
  offset = FP_OFF(ptr);
  while(offset != 0xFFFF)
   {
     printf("%04X:%04X          ", FP_SEG(ptr), offset);
     if(ptr->DevAttr < 0)
        for(i = 0; i <= 7; i++) printf("%c", ptr->sName[i]);
       else printf("Блочное устройство");
     printf("\n");
     ptr=ptr->pNext;
     offset = FP_OFF(ptr);
    }
  return 0;
 }

Добавлено @ 14:52 
 smile  Сорри - только сейчас понял в чем проблема.

2 Coala :а можно этот экстендер прикрутить к BC++3.1?
и где достать по нему нормальную инфу. 
PM MAIL   Вверх
Coala
Дата 5.5.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.5.2006
Где: Москва

Репутация: нет
Всего: 0



Цитата(cOZA @  5.5.2006,  15:45 Найти цитируемый пост)
Coala :а можно этот экстендер прикрутить к BC++3.1?
Это - вряд ли. В самом компиляторе должна быть возможность создавать приложения защищенного режима, а в твоем Борланде ее помоему просто нет. То есть, сам драйвер тебя не спасет.
 
PM MAIL   Вверх
cOZA
Дата 5.5.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Хм. Да он пишет что Expanded Memory in use: 0
а: Extended Memory in use: 2619568

И помоему все приложение должно строиться так:
оно проверяет загружен ли экстендер, затем запрашивает у него блок, и в случае удачи -> копирует его в расширенную память. Так?
То есть нужно посылать в нужные регистры и извлекать из них...
По крайней мере именно об этом и говорят те "методички" на кои дали ссылки в самом первом ответе.

ЗЫ: Или я не туда иду? 
PM MAIL   Вверх
e-moe
Дата 5.5.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



Цитата(cOZA @  5.5.2006,  13:45 Найти цитируемый пост)
2 Coala :а можно этот экстендер прикрутить к BC++3.1?

а я думаю что можно. насколько я помню с экстендерами идет свой линкер который все это лепит в одну программу.
Хотя я могу ошибаться...

А вообще может проще перейти в Unreal режим? Тогда можно без проблем в "реальном" режиме использовать до 4 Гб памяти...
ну только нужно будет менеджер памяти написать на асме...
 
PM MAIL WWW ICQ   Вверх
bsa
Дата 5.5.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Действительно, а что мешает перейти на Linux (*BSD и т.п.) или Windows? Там таких проблем нет. Только драйвер уровня ядра надо написать. Но, имхо, это не так сложно. 
PM   Вверх
cOZA
Дата 6.5.2006, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Мешает - сама постановка задачи. ДОС система реал-таймовая, а именно это и нужно в данной задаче.

ЗЫ: Да и самому интересно решить проблему.
 
PM MAIL   Вверх
Exekutor
Дата 6.5.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: 1
Всего: 4



Адресовать более 64кб можно если использовать несколько сигментов кода. Но это чистый ассемблер. 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
cOZA
Дата 6.5.2006, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Не согласен. Как выяснилось есть множество библиотек позволяющие производить данные манипуляции с памятью.

Кстати подскажите как подключить HIMEM.sys (обеспечивает XMS спецификацию) к WinXP -> ломает ходить на "ДОС-машину", хочется удобства.  smile 
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.