Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: Как пользоваться функцией PAINT через BIOS?

  1. #1
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1243
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как пользоваться функцией PAINT через BIOS?

    В справке написано, что надо записать цвет границы в переменную BRD_COLOR. Но её нет.

    Описал и проверил все нужные функции BIOS. Не рабоатет только PAINT.

    Код:
    // BIOS компьютера Львов ПК01
    
    char getch()                                                   @ 0xF803;                // F803 Ввод символа с клавиатуры с отработкой специальных функций
    char getch2()                                                  @ 0xF806;                // F806 Ввод символа без отработки специальных функций
    char kbhit()                                                   @ 0xF812;                // F812 Статус клавиатуры (FF=нажата, 0=не нажата)
    void putch(char c)                                             @ "lvov/putch.c";        // F809 Вывод символа на экран
    void putchPrinter(char c)                                      @ "lvov/putchprinter.c"; // F80C Вывод символа на принтер
    void putchAll(char c)                                          @ "lvov/putchall.c";     // F80F Вывод символа на экран и/или принтер
    void puts(const char*)                                         @ 0xE4A4;                // E4A4 Вывод на экран текстового сообщения
    void putHexByte(uchar)                                         @ 0xFFD6;                // FFD6 Вывод на экран содержимого регистра A в шестнадцатеричном виде
    void putHexWord(uint)                                          @ 0xFFD1;                // FFD1 Вывод на экран содержимого регистровой пары HL в шестнадцатеричном виде
    void putCrc(void* start, void* end)                            @ "lvov/putcrc.c";       // F815 Вывод на экран контрольной суммы блока
    void locate(uchar x, uchar y, uchar cursor)                    @ "lvov/locate.c";       // F82D Позиционирование курсора (cursor=0 показать курсор, cursor=FF скрыть курсор)
    void clrscr()                                                  @ 0xF836;                // F836 Очистка экрана
    void pset(uchar x, uchar y, uchar c)                           @ "lvov/pset.c";         // F821 Вывод на экран точки
    void preset(uchar x, uchar y)                                  @ "lvov/preset.c";       // F020 Стирание точки
    void line(uchar x0, uchar y0, uchar x1, uchar y1, uchar c)     @ "lvov/line.c";         // F824 Вывод на экран линии
    void rect(uchar x0, uchar y0, uchar x1, uchar y1, uchar c)     @ "lvov/rect.c";         // F827 Вывод на экран прямоугольника
    void fillRect(uchar x0, uchar y0, uchar x1, uchar y1, uchar c) @ "lvov/fillrect.c";     // F82A Вывод закрашенного прямоугольника
    void paint(uchar x, uchar y, uchar c, uchar borderColor)       @ "lvov/paint.c";        // F830 Закраска замкнутой фигуры
    void color(uchar palette, uchar bgcolor)                       @ "lvov/color.c";        // F833 Установка цветовой палитры (palette=0-6, bgcolor=0-7)
    void copy()                                                    @ 0xE627;                // E627 Копирование экрана на принтере
    void beep()                                                    @ 0xF81B;                // F81B Короткий звуковой сигнал ( BEEP ).
    void sound(uchar note, uchar delay)                            @ "lvov/sound.c";        // F81E Управляемый звуковой сигнал ( SOUND ).
    uint vaddr(uchar x, uchar y)                                   @ "lvov/vaddr.c";        // F818 Вычисление экранного адреса по координатам ( VADDR ).
    
    // Функции записи и чтения с магнитофона не описаны
    
    // E2BE Передача бита "0"
    // E2C5 Передача бита "1"
    // E2D5 Передача периода меандра.
    // E42B WR_PILOT Передача пилот-сигнала
    // E437 WR_BYTE Передача байта
    // DD86 WR_WORD Передача слова
    // E3E4 WR_HEAD Передача заголовка файла
    // DD31 BSAVE Передача кодового файла
    // E4D0 Прием пилот-сигнала ( RD_PILOT )
    // E4BE Прием байта ( RD_BYTE ).
    // DDCA Прием слова ( RD_WORD ).
    // E443 Прием заголовка файла ( RD_HEAD ).
    // DDBC Прием блока ( RD_BLOCK ).
    // DD94 Прием кодового файла ( BLOAD ).
    
    // Переменные
    
    #define KEYB_CODE     (*(uchar*)0xBE10) // код нажатой клавиши 
    #define KEYB_STAT     (*(uchar*)0xBE14) // состояние клавиатуры
    #define KEYB_MODE     (*(uchar*)0xBE1D) // режим клавиатуры
    #define KEYB_BEEP     (*(uchar*)0xBE1E) // звук клавиатуры
    
    #define TEXT_ADDR     (*(uchar*)0xBE30) // адрес вывода символа (только чтение)
    #define TEXT_COL      (*(uchar*)0xBE32) // X позиция вывода текста (только чтение)
    #define TEXT_ROW      (*(uchar*)0xBE33) // Y позиция вывода текста (только чтение)
    #define TEXT_COLOR    (*(uchar*)0xBE36) // Цвет текста
    #define BORDER_COLOR  (*(uchar*)0xBE38) // Байт заполнения рамки
    #define SCROLL_LOCK   (*(uchar*)0xBE39) // Cкроллинг авт./ожид.
    #define CURSOR_HIDDEN (*(uchar*)0xBE3C) // Курсор скрыт (только чтение)
    #define PALETTE       (*(uchar*)0xBEC0) // Выбранная палитра (только чтение)
    #define GROUND_COLOR  (*(uchar*)0xBEC1) // Цвет фона (только чтение)
    
    #define PRN_SHIFT     (*(uchar*)0xBE40) // Принтер. Смещение букв кириллицы.
    #define PRN_XOR       (*(uchar*)0xBE41) // Принтер. Инверсный вывод.
    #define DISP_OUT      (*(uchar*)0xBE1B) // 0 если putchAll должна выводить на экран, иначе FFh
    #define PRN_OUT       (*(uchar*)0xBEF3) // 80h если putchAll должна выводить на принтер, иначе 0
    
    // Переменные  записи и чтения с магнитофона не описаны
    
    // BE80/BE81 WR0PERIOD длит.периода сигн."0"  
    // BE82/BE83 WR1PERIOD длит.периода сигн."1"  
    // BE84      PILOT_DUR длительность пилота    
    // BE85                - параметры чтения МЛ  
    // BE86                L (опред. автоматич.)  
    // BE87      FILE_TYPE идентификат.типа файла 
    // BE88/BE89 BASFL_ORG начало BASIC-файла     
    // BE8A/BE8B BASFL_END конец BASIC-файла      
    // BE8C-BE91 SAVE_NAME имя файла запись/эталон
    // BE92-BE97 LOAD_NAME считанное имя файла    
    // BEA3      AUTOSTART признак автостарта     
    // BEA4/BEA5 CODFL_ORG начало CODE-файла      
    // BEA6/BEA7 CODFL_END конец CODE-файла       
    // BEA9/BEAA CODFL_RUN старт CODE-файла       
    // BEAB/BEAC OFFSET    смещение CODE-файла    
    // BEF1/BEF2 LOAD_ERR  адр.перех. по ОШИБ.В/В

  2. Этот пользователь поблагодарил vinxru за это полезное сообщение:
    Titus (16.12.2012)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Veteran Аватар для John North
    Регистрация
    22.09.2006
    Адрес
    Ижевск
    Сообщений
    1,706
    Благодарностей: 400
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    когда у меня еще не было спектрума, знакомый дядька купил такой вот комп..
    помню, приходили к нему играца..
    так вот он был черно-белый, вернее, черно-зеленый..
    о каких то цветах и речи не было..

    ---------- Post added at 04:19 ---------- Previous post was at 04:12 ----------

    пс: вроде тока он назывался «Львив».. через I вроде даже.
    Хороший.. Плохой.. Главное - у кого ружьё !!

  5. #3
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1243
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тот о котором я читаю 8 цветный, причем использовать можно только 4 цвета одновременно.

    Это его стартовый экран



    ---------- Post added at 13:16 ---------- Previous post was at 13:14 ----------

    Цитата Сообщение от John North Посмотреть сообщение
    пс: вроде тока он назывался «Львив».. через I вроде даже.
    Мне удобнее воспринимать русское нзвание, оно у меня с Львами ассоциируется. Типа как Арати Ягуар, Атари Рысь.

    Так ли принципиально писать Львiв?

  6. #4
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1243
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати на корпусе Львов написано.

  7. #5
    Member Аватар для Zelya
    Регистрация
    18.08.2006
    Адрес
    Львов
    Сообщений
    182
    Благодарностей: 169
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    vinxru,
    Насчет PAINT - очень интересная тема. Пока нет времени дизассемблировать, попробовал просто потыкать этот оператор в эумле. Так он вобще странно работает! Я зарисовывал прямоугольник с левым верхним углом (10,10). Так вот, если PAINT`у указать стартовую точку (15, 15) то он будет зарисовывать только от нее, т.е. не весь прямоугольник, а как бы вправо и вниз. Надо будет попозже поиграться детальнее.

    Насчет названия - как Вам угодно. Единственное, что хотелось бы, так это выработать общее латынское написание. Сейчас таких есть 4 шутки:
    1. PC-01 Lvov
    2. PK-01 Lvov
    3. PC-01 Lviv
    4. PK-01 Lviv
    Я отдаю предпочтение №3. Основная дискуссия тута.

    ПС Надеюсь отсутствие не самого важного оператора не охладит Ваш пыл по Великим свершениям на ПК-01?

  8. Этот пользователь поблагодарил Zelya за это полезное сообщение:
    vinxru (17.12.2012)

  9. #6
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1243
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот то, на чем я проверял.

    Работает нормально, только выбран всегда цвет границы 1. Может стоит поискать значение 1 в памяти?

    P.S. Компилятор раздолбан и может неадекватно работать.. Я там опять затеял изменения.

    Выгрузил, что бы интересующиеся потыкали библиотеку. Я там вынес некоторые переменные в файл lvov/bda.h. Их нужно заполнять только перед вызовами функций BIOS, т.е. это аргументы этих функций. А я вызовы оформил как line(x,y,x1,y1,c).
    Последний раз редактировалось vinxru; 17.12.2012 в 15:44.

  10. #7
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Благодарностей: 1243
    Записей в дневнике
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По коду дальше видно, что 0хBEA3 действительно может принимать независимое значение.

    Так что, все сходится. Переменная BRD_COLOR прописана по адресу 0хBEA3, по которому одновременно проживает и AUTOSTART. Такая вот коммуналка.

    Наличие явной баги составители доки отметили, но проблему в результате решили без затей: просто удалили описание процедуры PAINT. Это по-нашенски. Зато PAINT теоретически можно было бы использовать для создания каких-либо неожиданных эффектов при работе с магнитофоном.

    (c) lvovpc.ho.ua

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Как пользоваться памятью 128 к ?
    от женя999 в разделе Память
    Ответов: 11
    Последнее: 16.02.2014, 22:17
  2. Ответов: 3
    Последнее: 31.07.2012, 05:16
  3. как пользоваться отсосом
    от sergey2b в разделе Unsorted
    Ответов: 17
    Последнее: 22.02.2010, 16:21
  4. Excess de Luxe Paint
    от VELESOFT в разделе Графика
    Ответов: 24
    Последнее: 24.10.2008, 23:21
  5. К презенташкам балуюсь Paint.Net-ом
    от andrews в разделе Творчество
    Ответов: 0
    Последнее: 28.06.2007, 11:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •