Программирование_Спринтера_Денис_Паринов.doc

(163 KB) Pobierz
Экран и палитра

Форум

Программирование Спринтера»

 

 

 

Оглавление:

Экран и палитра              2

Шрифты              7

Память              10

Файлы              14

Звук              16

ISA-8 слоты              18

Summary              18

More information              18

Акселератор компьютера Sprinter.              20

Прерывания              22

IDE контроллер              23

FDD контроллер              24

Клавиатура              25

Коды ошибок DSS              27


Экран и палитра

 

            Denis Parinov

            (Sprinter Team)

            2002/10/02 00:57

                   Re: Графические режимы [re: Shiru_Otaku]

 

 

 

            Функции для работы с экраном:

 

   Сейчас DOS поддерживает четыре режима экрана.

Два текстовых:

  40x32 символов c 16 цветами (режим 02h);

  80x32 символов c 16 цветами (режим 03h);

и два графических:

  320x256 точек с 256 цветами (режим 81h);

  640x256 точек с 16 цветами (режим 82h);

Основным режимом является текстовый режим 80x32 (03h), если вашапрограмма

работает в другом режиме, то вам следует перед переключением режимаполучить

номер текущего режима функцией 51h GETVMOD и сохранить его, а передзавершением

программы восстановить его.

 

Например:

 

              LD              C,51h              ;получить режим экрана

              RST              10h

              LD              C,A              ;поместить номер режима экрана в регистр C

              PUSH              BC              ;и сохранить на стеке (B - страница, C - режим)

              .

              .                             ;ваша программа

              .

 

              POP              BC              ;взять со стека режим экрана

              LD              A,C              ;поместить номер режима экрана в регистр A

              LD              C,50h              ;установить режим экрана

              RST              10h

              LD              C,41h              ;завершить программу.

              RST              10h

 

  DSS имеет функции вывода на текстовый экран символов и символьных строк.Для

графических режимов требуются собственные процедуры вывода на экран.Например,

при завершении программы вы можете выдать строку на текстовый экран:


              LD              HL,STRING              ;указатель на строку символов

              LD              C,5Ch                            ;вывод строки символов

              RST              10h

 

STRING              DB              "Thank you for using my program..."              ;текстовая строка

              DB              13,10                            ;символы возврата каретки и перевода строки

              DB              0                            ;символ конца строки

 

  Для вывода на графический экран, вам необходимо подключить видео память водно

из трех окон памяти 04000h-07FFFh, 08000h-0BFFFh, 0C000h-0FFFFh. Этоосуществля-

ется выводом значения 50h в соответствующий порт 0A2h, 0C2h или 0E2h в

зависимости от окна памяти. При подключении обратите внимание на то, чтобыстек

вашей программы не попадал в это адресное пространство.

 


Например, если вам нужно поставить точку на экране, то подпрограмма длярежима

81h будет выглядеть так:

 

; HL - горизонтальная координата

; DE - вертикальная координата

 

              IN              A,(0E2h)              ;считать из порта номер страницы подключенной в

                                                        ;третье окно памяти

              LD              C,A                            ;запомнить в регистре C

              LD              A,50h                            ;страница видео памяти

              OUT              (0E2h),A              ;подключение видео памяти

              LD              A,E                            ;поместить вертикальную координату в регистр A.

              OUT              (89h),A                            ;выдать в порт

              LD              DE,0C000h              ;адрес начала третьего окна памяти

              ADD              HL,DE                            ;получить адрес точки (адрес начала окна +

                                                        ;горизонтальная координата)

              LD              A,255                            ;цвет выводимой точки (от 0 до 255)

              LD              (HL),A                            ;вывод точки на экран

              LD              A,C                            ;вспомнить номер страницы памяти

              OUT              (0E2h)                            ;подключить страницу памяти вместо страницы видео

                                                        ;памяти

 

  Перед выводом точек следует установить необходимые цвета в палитре.Различные

режимы вывода на экран задаются номером видео страницы от 50h до 5Fh.Подробнее

о режимах вывода вы можете прочитать в описании архитектуры компьютера.

 

50h (80) SETVMOD     (Выбор режима экрана)

 

входные данные:

 

  A - режим экрана

    02h - текстовый 40x32x16 цветов

    03h - текстовый 80x32x16 цветов

    81h - графический 320x256x256 цветов

    82h - графический 640x256x16 цветов

  B - страница экрана 0/1

  C - 50h

 

выходные данные:

 

  A - код ошибки, если CF=1

 

  Функция устанавливает режим экрана. Седьмой бит режима экрана установлен

для графических режимов и сброшен для текстовых. Существуют два текстовыхрежима

и два графических.

 

 

51h (81) GETVMOD     (Получить текущий режим экрана)

 

входные данные:

 

  C - 51h

 

выходные данные:

 

  A - текущий режим экрана

  B - страница экрана 0/1

 

  Функция возвращает текущий режим экрана и номер страницы экрана.

 


            Anonymous

            (Unregistered)

            2003/03/01 10:13

 

            Здравствуйте. А как с палитрами??? Как загрузить произвольную

            палитру (отдельный цвет). Желательно с исходником.

            Почему системная палитра выглядит по разному в эмуляторе и реальном

            Спринтере.

 

            Alex_Goryachev

            (Sprinter Team)

            2003/03/01 12:51

 

            Пример из исходников Антона Енина (

            http://www.petersplus.com/download/sources/aprint.zip )

 

 

;[]=======================================================================[]

; palette from Flex Navigator

CustomPalette:

                            db              0x00, 0x00, 0x00, 0x00              ; Black                            00

                            db              0x00, 0x00, 0xFF, 0x00              ; B.Red                            01

                            db              0x00, 0x80, 0x00, 0x00              ; Green                            02

                            db              0x00, 0xFF, 0xFF, 0x00              ; B.Yellow              03

                            db              0x80, 0x00, 0x00, 0x00              ; Blue                            04

                            db              0xFF, 0xFF, 0x00, 0x00              ; Invert bg              05

                            db              0x80, 0x00, 0x00, 0x00              ; Invert fg              06

                            db              0x80, 0x80, 0x80, 0x00              ; BlackGray              07

                            db              0xC0, 0xC0, 0xC0, 0x00              ; HighGray              08

                            db              0x80, 0x00, 0x00, 0x00              ; Panel                            09

                            db              0xFF, 0xFF, 0x00, 0x00              ; Files                            0A

                            db              0x00, 0xFF, 0xFF, 0x00              ; Select Files              0B

                            db              0x00, 0xFF, 0xFF, 0x00              ; InvSel Files              0C

                            db              0xC0, 0xC0, 0xC0, 0x00              ; Reserved              0D

                            db              0xFF, 0xFF, 0xFF, 0x00              ; White                            0E

                            db              0xFF, 0xFF, 0xFF, 0x00              ; White                            0F

 

;[]=======================================================================[]

;[]=======================================================================[]

; set requist video mode 640x256x16

SetVideoMode:

                            ld              c, 0x51                                          ; save previos vmode

                            rst              0x10

                            ld              (vmode + 1), a

                            ld              a, b

                            ld              (vscrn + 1), a

                            sub              ...

Zgłoś jeśli naruszono regulamin