Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
GepardD
5 / 5 / 1
Регистрация: 23.10.2009
Сообщений: 63
#1

Обращение к памяти - C++

12.05.2011, 08:47. Просмотров 1250. Ответов 2
Метки нет (Все метки)

есть процедурка замены определения символа с номером num из банка bank на символ, образ которого записан в масиве crr;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void *kods(char bank; char num)
{ char far *uk;
   int wo;
char crr[5][14]={
      {0x70,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},
      {0x3A,0x44,0x44,0x44,0x44,0x45,0x47,0x7c,0x00,0x00,0x00,0x00,0x00,0x00},
      {0x66,0x66,0x24,0x24,0x3a,0x3a,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},
      {0x30,0x48,0x48,0x48,0x70,0x40,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00},
      {0x40,0x40,0x40,0x40,0x40,0x40,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00},
      };
   outport(0x3ce,6);  //адрес многоцелевого регистра
   outport(0x3cf,1);   // граф. режим
   outport(0x3c4,2);  // адрес регистра маски битовой плоскости
   outport(0x3c5,4);  // бит плоскости 2
   outport(0x3c4,4);  // адрес рег. режима использования памяти
   outport(0x3c5,6);  // отмена режима счет/нечет
 
   for (i=0;i<31;i++) 
{/*вот и сама загвоздка в паскале тут используется вот такая процедура из паскаля mem[$a000:bank*$20000+num*32+i]=crr[i]
 
Для обращения к ячейкам ОЗУ и ПЗУ  используются  дальние
указатели,которые обьявляются в программе следующим образом:
 
    char far * uk;-для работы с байтами
 
 
     При этом первым следует младший байт,потом-старший байт.Напри-
мер,для чтения слова из ОЗУ по адресу 0040:0010H используется выра-
жение:
                wo:=MemW[$0040:$0010]
                ---->
                uk=( int far * ) 0x00400010;
                wo=* uk;
 
 
 вот мои попытки это реализовать:
 
    (int far *)(0xa000:bank+num*32+i)=crr[i];
       wo=* uk;
     
*/}
 
 
   outport(0x3c4,4);
   outport(0x3c5,2);
   outport(0x3c4,2);
   outport(0x3c5,3);
   outport(0x3ce,6);
   outport(0x3cf,0xE);
}


подскажите в чем ошибка
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 08:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к памяти (C++):

Прямое обращение к памяти - C++
Доброго всем времени суток. Товарищи, помогите пожалуйста найти литературу для компилятора DJGPP. Точнее для особенностей данного...

Обращение к double** из метода dll вызывает ошибку памяти - C++
Есть класс который создает двухмерный массив. Этот класс экпортирую в dll и использую полученную библиотеку в программе С#. Все...

Обращение к разработчикам 30+ - C++
Салют всем. Здесь просто такая тема: мне 19; я юный и не опытный падаван; мне срочно необходима помощь, а в городе опытных знакомых...

Обращение к функциям Диспетчера устройств - C++
Доброго времени суток. Ищу статьи или примеры по работе с диспетчером устройств :) Есть ли у кого ни будь таковые ?)) Если конкретней, то...

Как оптимизировать обращение к элементам вектора? - C++
Добрый день. Подскажите, пожалуйста, где я не прав. Есть класс, в нем координаты и другие параметры, описывающие существ (овцы и...

Обращение к сервисам IIS по net tcp - C++
добрый день. Прошу помощи в решении такой задачи.(руководство ставит задачу, не важно умеешь не умеешь - учись.) Суть вопроса. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
resource2008
109 / 109 / 2
Регистрация: 11.03.2011
Сообщений: 421
12.05.2011, 21:13 #2
а что такое far в данном случае?


Цитата Сообщение от GepardD Посмотреть сообщение
crr[i]
- массив ведь двумерный


так до конца и не понял задачу. может так?
C++
1
2
3
4
5
6
7
8
9
10
   for (int i=0;i<31;i++) 
{
 
// записали в uk полученный адрес
uk = (char*) ( ( 0xa000 * 0x10000 ) + bank ) + ( num*32 + i );
 
// записали по адресу uk символ из массива 
// что куда менять не знаю, поэтому пишу так
*uk = (char) *(crr + i);
}
0
GepardD
5 / 5 / 1
Регистрация: 23.10.2009
Сообщений: 63
13.05.2011, 10:08  [ТС] #3
Все спс разобрался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void repl(char bank, char num, char sym[14])
 {
  char far *p=(char far *)0xa0000000;
  outportb(0x3ce,6);
  outportb(0x3cf,1);
  outportb(0x3c4,2);
  outportb(0x3c5,4);
  outportb(0x3c4,4);
  outportb(0x3c5,6);
  for(int i=0;i<32;i++)
   {
    p+=num*32+bank*0x2000+i;
    *p=sym[i];
   }
  outportb(0x3c4,4);
  outportb(0x3c5,2);
  outportb(0x3c4,2);
  outportb(0x3c5,3);
  outportb(0x3ce,6);
  outportb(0x3cf,0xe);
 }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 10:08
Привет! Вот еще темы с ответами:

Можно ли заменить обращение к Union без указания типа переменной? - C++
Можно ли заменить обращение к Union без указания типа переменной?(т.е. без .i .f .str, а просто к &quot;data&quot;) #include &lt;stdio.h&gt; #include...

мне нужно создать ползунок памяти, то есть что бы показывало сколько памяти свободно и сколько занято! - C++ Builder
Ребят помогите пожалуйста!!! мне нужно создать ползунок памяти, то есть что бы показывало сколько памяти свободно и сколько занято! всего...

Обращение к памяти. - C++ Linux
Подскажите с помощью чего\как можно отследить обращение функции к памяти? Есть некая функция, написанная на асме, которая преобразует...

GDB обращение к памяти - C++
Прошу прощения за может глупый вопрос, но как такое может быть (gdb) print _params.DirectReplies $18 = true (gdb) print...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru