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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2009, 18:52   #1
NamelessEndless
Ворон-мститель
Пользователь
 
Аватар для NamelessEndless
 
Регистрация: 26.05.2008
Сообщений: 24
Вопрос 11h прерывание. Программирование знакогенератора.

Доброго времени суток Пишу лабораторную по програмированию знакогенератора при помощи прерывния 11h. В общем, немного я запуталась. Задание такое : Разработать собственные образы символов, размером 8х8, для "2","3","4" и "Н". Записать их как последовательность 16-х цыфр. Занести в массивы. Вывести на экран любой текст, содержащий эти символы. Загрузить в таблицу знакогенератора №1 стандартный набор изображений символов, соответственно размером 8х8 . Изменить в этой таблице стандартные символы на пользовательские, использовав для этого подфункцию 0h. Сделать таблицу с изменеными символами активной, при этом экранные изображения символв должны изменится на разработанные. При завершении работы программы обязательно возобновить стандартную нулевую таблицу. Можно использовать только int86(), int86x().
Вот часть кода, что уже сделала. В общем, идет только вывод текста на экран.
Код:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <dos.h>
void ChangeSymbol(int , unsigned char *);
void OutText (char * , int);
void SetActiveTable (int ntab);
void Set88 (int ntab);
void main () {
   int numb_col[]={10,12,9};
   char txt1[]="234H LIFE IS GOOD 234H";
   char txt2[]="12345H 23456H 34567H";
   char txt3[]="223344HH TRY TO CATCH ME!";
   unsigned char two[]={0x66,0xff,0xff,0xff,
			0x7e,0x3e,0x1c,0x08};
  unsigned char three[]={0x18,0x3c,0x7e,0xff,
			  0xff,0x7e,0x3c,0x18};
   unsigned char four[]={0x18,0x3c,0x7e,0xff,
			 0xff,0x66,0x18,0x3c};
   unsigned char ch_H[]={0x3c,0x99,0xff,0xff,
			 0x99,0x18,0x18,0x3c}; 
   clrscr();


   SetActiveTable(1);
   Set88(1);
   OutText(txt1,numb_col[0]);
   OutText(txt2,numb_col[1]);
   OutText(txt3,numb_col[2]);
   ChangeSymbol(1, two);
   getchar();
   SetActiveTable(0);

getch();
}

  void ChangeSymbol(int ntab, unsigned char *newsmb)
  {  struct REGPACK rp;
	 rp.r_ax=0x1100;
	 rp.r_bx=8<<8|ntab;
	 rp.r_cx=1;
	 rp.r_dx='2';
	 rp.r_es=FP_SEG(newsmb);
	 rp.r_bp=FP_OFF(newsmb);
	 intr(0x10,&rp);
  }
  void Set88 (int ntab)
  { union REGS rg;
    rg.h.ah=0x11;
    rg.h.al=0x12;
    rg.h.bl=ntab;
    int86(0x11,&rg,&rg);
  }

  void SetActiveTable (int ntab)
  { union REGS rg;

    rg.h.al=0x1103;
    rg.h.bl=ntab|ntab<<2;
    int86(0x10,&rg,&rg);

  }

  void OutText (char * text, int col)
  { char *ps=text;
    int cl=col;
    while(*ps!='\0') {
       textcolor(cl);
       putch(*ps++);
    }
    putch('\r');
    putch('\n');
  }
Вопрос 1: Обьясните пожалуйста, почему не идет изменение размера символов на 8х8 и замена их разработанными образами.
Вопрос 2: Как переписать функцию ChangeSymbol под int86(). Не могу разобраться с регистрами...

И вообще, посоветуйте пожалуйста литературу и может у кого есть исходники или примеры кода подобной задачи. Буду очень признательна..

пысы. Все делается на Borland C++ for Dos.
Бог умер. Воскрес и мстит.
NamelessEndless вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывание программы Василий Общие вопросы Delphi 8 11.01.2009 03:07
Свое прерывание! kamazz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 05.12.2008 20:07
6 прерывание ленусик Фриланс 1 03.06.2008 16:22
6 прерывание ленусик Помощь студентам 5 30.05.2008 16:57