Из журнала ZX Format #6, Санкт-Петербург, 30.07.1997 Изготовление мультиколоров (C) MIK. VIRT GROUP. _________________________________________ Эта статья является прямым логическим продолжением предыдущей, посвящённой бор- дюрным эффектам. Поэтому для наилучшего понимания нижеизложеного, советую вам прочитать предыдущую статью. Часть первая и единственная. Мультиколор можно определить, как такое представление графической информации, при котором с помощью программных средств достигается получение в одном знакоместе более, чем двух цветов. Примечание : Обратите внимание на то, что получение более чем двух цветов в пределах байта, принадлежащего знакоместу, невозможмо посредством нижеизложенной технологии. Теперь пора перейти к описанию техничес- кой стороны мультиколора. Как я уже отме- чал, принципы работы бордюрных эффектов и мультиколора схожи. Самым проблематичным представляется фиксация их по времени. Само существование мультиколора основано на том, что при построении каждой линии основного экрана ULA ( группа микросхем ответственных за вывод графики ) заново читает информацию из области атрибутов и если после построения фрагмента экрана, до начала построения следующей строки, подменить данные описывающие эти строки, то следующая строка будет построена в со- ответствии с новыми данными об атрибутах. Итак, для того, чтобы получить мультико- лор, вам необходимо произвести следующие действия : 1. Дождаться сигнала INT. 2. Выдержать паузу до момента начала построения интересующей нас области (На самом деле меньшую на время, которое вам необходимо для передачи нужной информации в область атрибутов). 3. Подождать пока заменяемые вами атри- буты будут построены. 4. Кинуть на их место новые данные. 5. Если необходимо, выдержать паузу = время построения одной строки - время потраченое на пункты 3 и 4. 6. Бодро перейти к пункту 3. 7. Сделать что-нибудь полезное. По традиции не буду забивать вам голову пустой писаниной, а сразу перейду к при- меру. Устроим мультиколор в нулевой строке,0-5 знакоместа. ORG #8000 DI LD HL, #BE00 LD DE, #BE01 LD BC, 256 LD A, H LD (HL), #BF LDIR LD I, A LD A, #C9 ;Обработчик LD (#BFBF), A ;прерывания IM 2 ;команда RET MAIN EI HALT DI LD A, 63 ; ! LOOP1 DS 52, 0 ; ! DEC A JR NZ, LOOP1 ;Цикл ожидания построения ;бордюра, время зависит ;от типа компьютера LD HL, DATA LD A, 8 LOOP2 LD DE, #5800 LDI ;16 LDI ;16 LDI ;16 LDI ;16 LDI ;16 LDI ;16 ;переброска атрибутов LD DE, 0 ;Не значимая команда, ;необходима, что-бы потратить ;время DS 23, 0 ; ! ;Ожидании до 224 тактов (за ;столько большинство комперов ;строят строку. DEC A JR NZ, LOOP2 LD A, #7F IN A, #FE RRA JP C, MAIN IM 1 RET DATA DB...... ;Данные об атрибутах. Все временные задержки в этом примере сделаны под Scorpion. Если вы располагае- те другим типом компьютера, вам надо са- мим подобрать числа в строках, отмече- ных (!) . Фактически это все, что можно сказать по данному вопросу и я надеюсь, что вы суме- ете применить полученные знания. _________________________________________