User Tag List

Показано с 1 по 10 из 63

Тема: Специалист: Вопросы программирования

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,436
    Спасибо Благодарностей отдано 
    163
    Спасибо Благодарностей получено 
    190
    Поблагодарили
    121 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да вроде сейчас Квартус не ругается на шину адреса. Зашил ПЛИС новой прошивкой, еще не включал. Хоть бы затикала...

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

  3. #2

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В базовом ROM-BIOS СПЕЦИАЛИСТА ошибочно называемом загрузчиком (вот в ВЕКТОРЕ действительно загрузчик в 512 байт) обнаружил идиотическую ошибку. Которая заключается в том, что хотя есть ячейки для адреса фонта (AFONT=8FE7), как и в ОРИОНЕ, но пользоваться ими в отличие от ОРИОНА, свободно нельзя. Невозможно поменять фонт разместив его в произвольном месте ОЗУ.

    Оказывается фонт можно размещать только по определённым адресам. Можно размещать фонт только по такому адресу, которое удовлетворяет следующему условию. Если адрес размещения фонта разделить на 8 (что равноценно сдвигу вправо на 3 разряда), то в младшем байте получившегося числа, должно быть значение меньше 80H. В противном случае драйвер вывода выдаёт на экран мусор.

    Это происходит потому, что А.Волков применил 8-ми разрядное сложение, а следовало применить 16-ти разрядное сложение. И такой драйвер вообще непригоден для вывода (без извращений) 8-ми битовых символов (КОИ-8). Это может делать драйвер ОРИОНА, а чтобы выводить КОИ-8 данным драйвером надо немножко извращаться, - при кодах символов >80H отнимать от кода символа 80H и в ходе вывода менять адрес фонта в ячейках AFONT.

    Раньше я не знал об этом, т.к в 80-тые не доводилось менять фонт. Столкнулся с этим сегодня, когда хотел загрузить латинский фонт большие и маленькие буквы, т.к это требуют CP/M-программы. Чтобы не заморачиваться, можно использовать адрес фонта кратный 1000H, т.е D000, E000, F000. Но это не всегда выгодно, когда приходится биться за экономию каждого байта.

    Естественно, эта ошибка повторена и во всех совместимых мониторах, в т.числе и в мониторе В.Ивинских.

    Вот подпрограмма А.Волкова:
    Код:
    A_C056:	LD	HL,(AFONT)
    	ADD	L
    	LD	L,A		; A= код символа
    	ADD	HL,HL
    	ADD	HL,HL
    	ADD	HL,HL		; HL= адрес символа в ОЗУ
    А вот как правильно:
    Код:
    	LD	L, A		; A= код символа
    	LD	H,0
    	ADD	HL, HL
    	ADD	HL, HL
    	ADD	HL, HL
    	EX	DE,HL
    	LD	HL, (AFONT)
    	ADD	HL, DE		; HL= адрес символа в ОЗУ
    С учётом того, что в H ранее уже есть 0, то число команд CPU всего на одну больше, а число байтов на 2 больше. Но так делать правильно. А при Z80 число команд одинаково. При выводе символа процессор исполняет не менее 200 команд. Экономия одной команды ускоряет вывод на 0.5%. Если уж хотелось ускорить, это делается линейным участком копирования символа, что даёт выигрыш в более, чем в 150 маш.тактов.
    Последний раз редактировалось barsik; 12.01.2018 в 20:36.

  4. #3
    HardWareMan
    Гость

    По умолчанию

    barsik, Волков сэкономил на подпрограмме вычисления адреса символа в фонте (а этот код вызывается каждый раз при выводе символа) выравняв расположение этого фонта ровно по блоку, что дает младший байт равным 00. Это хорошее решение при тех условиях. А еще, этот адрес заранее поделенный на 8. Тем не менее, с этим загрузчиком работал ED^7000 корректно, используя свой фонт для маленьких букв. И да, ПСПЗУ с C000-C7FF это именно загрузчик, согласно журнальному описанию. Ибо он загружал либо игру либо монитор с кассеты и передавал туда автоматически управление. А то, что он предоставлял базовый сервис это названия не меняет.
    Последний раз редактировалось HardWareMan; 12.01.2018 в 20:24.

  5. #4

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    выравняв расположение этого фонта ровно по блоку, что дает младший байт равным 00
    Не совсем так. Адрес фонта поделён на 8, чтобы не было переноса в команде ADD L, адрес фонта должен быть кратным 800h.

    - - - Добавлено - - -

    Учитывая, что перед этим из кода символа вычитается 20h, можно фонт подвинуть вперёд максимум на 100h байт. Вышесказанное верно, если мы хотим использовать весь диапазон символов 20-FF.

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

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

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

Похожие темы

  1. Специалист: Бейсик
    от Prusak в разделе Специалист
    Ответов: 28
    Последнее: 26.07.2019, 16:07
  2. Специалист: Разное
    от Splinter в разделе Специалист
    Ответов: 171
    Последнее: 09.05.2018, 07:50
  3. Языки программирования
    от BlackWolf в разделе Программирование
    Ответов: 188
    Последнее: 26.04.2009, 15:34
  4. Техника программирования процедурных сопроцессоров
    от andrews в разделе Программирование
    Ответов: 4
    Последнее: 29.12.2006, 20:10

Ваши права

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