Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
1

Управление видеопамятью Турбо Си

19.09.2016, 15:40. Просмотров 721. Ответов 35
Метки нет (Все метки)

Управление видеопамятью  Турбо Си

Что за ошибки такие?
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// ****** Control videoadapter ................ * /
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
//***************Constanty */
#define VSEG 0xb800    /* video memory segment address*/
#define byte unsigned char#define word unsigned int
#define Esc 27
#define Spase 32
#define Enter 13
#define Up 0x48
#define Down 0x50
#define Left 0x4b
#define Right 0x4d
#define Home 0x47
int xk,yk;
//*****Reading a character from the video memory*/
byte GetSym(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2));
}
//****read from the video memory*/
byte GetAtr(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2+1));
}
//****Write a character in the video memory*/
void PutSym(x1,y1,sym)
int x1,y1;
byte sym;
{
pokeb(VSEG,y1*160+x1*2,sym);
}
//****Record attribute to video memory*/
void PutAtr(x1,y1,atr)
int x1,y1;
byte atr;
{
pokeb(VSEG,y1*160+x1*2+1,atr);
}
//***The inversion of a square on the screen*/
void Invert(x1,y1)
int x1,y1;
{
byte b;
int i,j;
for (j=0;j<5;j++)for (i=0;i<10;i++)
{
b=GetAtr(x1*10+i,y1*5+j);
PutAtr(x1*10+i,y1*5+j,(b^0x7f));
}
}
//***Replacing the current square in the upper left*/
void Change(x,y)
byte x,y;
{
int i,j;
byte ba,bs;
if ((x!=0)||(y!=0))
for (j=0;j<5;j++)
for (i=0;i<10;i++)
{
bs=GetSym(x*10+i,y*5+j);
ba=GetAtr(x*10+i,y*5+j);
PutSym(x*10+i,y*5+j,GetSym(i,j));
PutAtr(x*10+i,y*5+j,GetAtr(i,j));
PutSym(i,j,bs);
PutAtr(i,j,ba);
}
}
//***Stirring squares until you press*/
void RandText(void)
{
Invert(xk,yk);
xk=5;
yk=1;
while(!kbhit())
{
Change(xk,yk);
xk++;
if (xk>7) xk=0;
yk++;
if (yk>4) yk=0;
}
Invert(xk,yk);
}
//******Start the main program*/
main(int argn,char *argc[])
{int i;
xk=0;
yk=0;
if (argn>1){}
else     / /* If the parameter is not present, the output instructions*/
{
textattr(10);
clrscr();
cprintf(""""""""""""""""");
cprintf("   Laboratorna rabota  N5       ");
cprintf(""""""""""""""""");
cprintf(""""""""""""""""");
cprintf("  Control videoadapter.      ");
cprintf(""""""""""""""""");
textattr(15);
gotoxy(23,4);cprintf("Demonstration of video memory.");
textattr(12);
gotoxy(30,6);cprintf("<< MOZAIKA >>");
textattr(14);
gotoxy(30,8);cprintf("control keys:");
gotoxy(7,10);cprintf("< Left, Right, Up, Down> — ");
cprintf("square dedicated management.");
gotoxy(7,11);cprintf("<Spase Bar> — Sharing content ");
cprintf("between the selected square");
gotoxy(7,12);cprintf("      and the upper left");
cprintf(" квадратом.");
gotoxy(7,13);cprintf("<Enter> — squares mixing");
cprintf(" until you press any key.");
gotoxy(7,14);cprintf("<Esc> — Entrance.");
textattr(11);
gotoxy(28,16);cprintf("ZADACHA GAME :");
gotoxy(14,17);cprintf("Absorb with keys");
cprintf("management initial screen.");
textattr(12);
gotoxy(27,19);cprintf("Zelaem uspeha!");
textattr(7);
gotoxy(1,21);cprintf("Note: When you start with ");
cprintf("parameter<<>");
gotoxy(13,22);cprintf("the initial screen for the game");
cprintf("is the current.");
}
Invert(xk,yk);for(i=0;i==0;)
switch(getch())
{ //* Processing of keypresses */
case Esc: i++; break;
case Enter:RandText();break;
case Spase:Invert(xk,yk);
Change(xk,yk);
Invert(xk,yk);
break;
case 0:
switch (getch()) {
case Left:Invert(xk,yk);
xkkk;
if(xk<0) xk=7;
Invert(xk,yk);
break;
case Right:Invert(xk,yk);
xk++;
if(xk>7) xk=0;
Invert(xk,yk);
break;
case  Up:Invert(xk,yk);
ykkk;
if(yk<0) yk=4;
Invert(xk,yk);
break;
case Down:Invert(xk,yk);
yk++;
if(yk>4) yk=0;
Invert(xk,yk);
break;
}
}
Invert(xk,yk);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2016, 15:40
Ответы с готовыми решениями:

Управление клавиатурой в Турбо Си
Cкачал Borland C++ 3.1.У меня виндовс 8.1 DosBox запускается.File-&gt;Open...

Работа с видеопамятью напрямую
Нашел кусок кода для работы с видеопамятью напрямую #include &lt;conio.h&gt;...

Работа с видеопамятью
Доброго дня, кодеры! Может кто подсказать как узнать объём свободной/занятой...

Приколы с видеопамятью
Доброго времени суток. Решил написать сюда, ибо не очень хочу обращаться в СЦ....

Работа с видеопамятью
Господа программисты помогите исправить программу так , чтобы бегущая строка...

35
castaway
Эксперт С++
4937 / 3042 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
19.09.2016, 15:56 2
9-ю строку раздели на две.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 19:57  [ТС] 3
разделил 9 строку
Управление видеопамятью  Турбо Си
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 19:58  [ТС] 4
Кстати чего ехе не создаеться,а просто запускаетья спрашиваю по др лабам где код компилиться без ошибок.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 20:15  [ТС] 5
C
1
2
3
4
5
6
7
8
9
10
11
12
//***************Constanty */
#define VSEG 0xb800    /* video memory segment address*/
#define byte unsigned char
#define word unsigned int
#define Esc 27
#define Spase 32
#define Enter 13
#define Up 0x48
#define Down 0x50
#define Left 0x4b
#define Right 0x4d
#define Home 0x47
вот так 9 строку разделил
0
castaway
Эксперт С++
4937 / 3042 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
19.09.2016, 20:28 6
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
вот так 9 строку разделил
Да. Я понял что всё правильно.

Это старый стиль языка Си:
C++
1
2
3
4
5
byte GetSym( x1, y1 )
int x1, y1;
{
    ...
}
Нужно так:
C++
1
2
3
4
byte GetSym( int x1, int y1 )
{
    ...
}
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 20:57  [ТС] 7
Управление видеопамятью  Турбо Си

что компилятору в блоке if-else не нравиться,коментарий же так обьявляеться.
0
zer0mail
2458 / 2094 / 217
Регистрация: 03.07.2012
Сообщений: 7,588
Записей в блоге: 1
19.09.2016, 20:59 8
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
,коментарий же так обьявляеться.
Нет, не так
0
nd2
2889 / 2444 / 1069
Регистрация: 29.01.2016
Сообщений: 8,137
19.09.2016, 21:00 9
Или первый слеш убери, или пробел между слешами.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 21:05  [ТС] 10
Управление видеопамятью  Турбо Си

сделал комментарий вот // и компилятор принял.Теперь ему в сprintf какие то символы не нравятся.
0
nd2
2889 / 2444 / 1069
Регистрация: 29.01.2016
Сообщений: 8,137
19.09.2016, 21:09 11
Делай линию не кавычками.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 22:21  [ТС] 12
Управление видеопамятью  Турбо Си

вот подправил,cprintf
0
Voivoid
709 / 281 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
19.09.2016, 23:32 13
Ох, лол, вот это прям почти артефакт неолита
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
19.09.2016, 23:44  [ТС] 14
Мне нужно установить видеорежим VESA и нарисовать ромб вместо квадрата.Мне что бы попроще и минимум строк кода.Ато я тут нагородил с квадратом.Может есть готовый исходник?
0
castaway
Эксперт С++
4937 / 3042 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 07:30 15
9 часов мусолили код, а оказалось нужен режим VESA...
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
20.09.2016, 10:07  [ТС] 16
все в муках происходит.Я думаю,что на Си можно как то маленькую асемблеровскую вставку,что бы VESA включить?
0
castaway
Эксперт С++
4937 / 3042 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 10:15 17
Какой именно режим тебя интересует?
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
20.09.2016, 16:50  [ТС] 18
Любой видео режим VESA(самый простой),а после него ромб нарисовать и все.

Добавлено через 2 минуты
http://shackmaster.narod.ru/vidmodes.htm
0
castaway
Эксперт С++
4937 / 3042 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 17:11 19
Почему именно VESA? С ним будет много проблем (переключение банков). Советую 320x200x8.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
20.09.2016, 18:18  [ТС] 20
у меня такая лабораторка.В нем написано сделать VESA и не уточняют какой.Пусть будет на ваш выбор.

Добавлено через 2 минуты
Поскольку мою пред тему закрыли,то в догонку еще вопрос по установке видео режима не VESA
Assembler
1
2
3
mov ah,0 ; функция выбора режима работы видеоадаптера
mov al,mode ; выбираем режим mode
int 10h
Мне нужно mode=6
значит будет так
Assembler
1
2
3
mov ah,0 ;
mov al,6 ;
int 10h
?
как эту асемблеровскую вставку сделать на СИ и потом начертить линию?

Добавлено через 2 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Советую 320x200x8.
это VESA?
0
20.09.2016, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2016, 18:18

Непонятная ситуация с видеопамятью
здравствуйте! у меня gtx 660 , в ней должно быть 2048 обьем видеопамяти, однака...

Работа с видеопамятью напрямую
Есть ли какой-нибудь способ управлять мерцанием символа, не устанавливая...

Сортировка массива с текстовой видеопамятью!
Сортировка массива(10 случайных чисел) методом пузырька с использованием...


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

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

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