Star #01
30 августа 1996

Программистам - Слияние картинок, инвертирование экрана, сдвиг влево на один пиксел, сдвиг вправо на один пиксел.



+------------------------------+
|  ----- ПРОГРАММИСТАМ -----   |
+------------------------------+
                                
Сегодня в разделе процедуры:    
1."Слияние картинок"            
2."Инвертирование экрана"       
З."Сдвиг влево на один пиксел"  
4."Сдвиг вправо на один пиксел" 
                                
1." Слияние картинок "          
Эта процедура объединяет картин-
ку, храняшуюся в ОЗУ , с текущим
экраном.Атрибуты не  изменяются.
                                
    LD  НL,16З84                
    LD  DЕ,АDDR                 
    LD  ВС,6144                 
LОР LD  А,(DЕ)                  
    ОR  (НL)                    
                                
    LD  (НL),А                  
    INС НL                      
    INС НL                      
    DЕС ВС                      
    LD  А,В                     
    ОR  С                       
    JR  NZ,LОР                  
    RЕТ                         
                                
Как она работает :              
В пару регистров НL  загружается
начальный адрес  экрана , в пару
регистров DЕ загружается адрес  
картинки храняшуюся в ОЗУ, реги-
стровая пара ВС служит счетчиком
В аккумулятор А загружается байт
с адресом в DЕ и выполняется ло-
гическое 'ИЛИ' ( ОR ) этого зна-
чения с байтом экрана. Результат
помещается в область экрана.    
НL и DЕ  перемещаются  на следу-
ющую позицию,счетчик уменьшается
Если счетчик  не  равен нулю, то
процедура возвращается назад для
повторения процесса со следующем
байтом.                         
                                
2." Инвертирование экрана "     
Эта  процедура инвертирует все в
экране : если пиксель включен,он
сбрасывается, если выключен , то
устанавливается.                
                                
    LD  НL,16З84                
    LD  ВС,6144                 
    LD  D,255                   
LОР LD  А,D                     
    SUВ (НL)                    
    LD  (НL),А                  
                                
    INС НL                      
    DЕС ВС                      
    LD  А,В                     
    ОR  С                       
    JR  NZ,LОР                  
    RЕТ                         
                                
Как она работает :              
В пару  регистров НL загружается
адрес начала экрана, а в  ВС за-
гружается его длина. В D-регистр
записывается  число  255. Всякий
раз когда процедура возвращается
к LОР, в аккумулятор загружается
значение из D-регистра. Значение
байта,хранящегося по адресу,ука-
занному в НL,вычитается из акку-
мулятора,а результат загружается
в тот  же самый байт.Таким обра-
зом делается инвертирование.    
НL  увеличивается , указывая  на
следующий  байт , а  счетчик  ВС
уменьшается на единицу , если он
не равен нулю, то процедура воз-
вращается к LОР.                
                                
З."Сдвиг влево на один пиксел"  
Эта   процедура   сдвигает   все
содержимое экрана на один пиксел
влево. Атрибуты  не  изменяются.
                                
     LD   НL,22527              
     LD   С,192                 
LОР1 LD   В,З2                  
     ОR   А                     
LОР2 RL   (НL)                  
     DЕС  НL                    
     DJNZ LОР2                  
     DЕС  С                     
                                
     JR   NZ,LОР1               
     RЕТ                        
                                
Как она работает :              
В пару регистров НL  загружается
адрес последнего байта экрана, а
в регистр  С  загружается колли-
чество линий в экране. В регистр
' В '  загружается   колличество
байтов в одной линии.Флаг  пере-
носа устанавливается в ноль.    
Байт, адресованый  НL сдвигается
на один бит влево , бит переноса
копируется в крайний правый бит,
а крайний  левый  бит копируется
во флаг переноса. Пара регистров
НL уменьшается  для  указания на
следующий   байт. Счетчик  ' В '
уменьшается. Если он не равен 0,
то  осуществляется   переход  на
LОР2 , иначе  уменьшается  коли-
чество обрабатываемых  линий, и,
если оно не равно 0,подпрограмма
возвращается к процедуре LОР1.  
                                
4."Сдвиг вправо на один пиксел" 
Эта   процедура   сдвигает   все
содержимое экрана на один пиксел
вправо. Атрибуты  не изменяются.
                                
      LD   НL,16З84             
      LD   С,192                
LОР1  LD   В,З2                 
      ОR   А                    
LОР2  RR   (НL)                 
      INС  НL                   
      DJNZ LОР2                 
      DЕС  С                    
      JR   NZ,LОР1              
                                
      RЕТ                       
                                
Как она работает :              
В пару регистров НL  загружается
адрес начала экрана, а в регистр
'С' колличество линий на экране.
В регистр 'В' загружается колли-
чество  байтов  на  одной линии.
Флаг  переноса устанавливается в
0.Байт по адресу  НL  сдвигается
на один бит вправо, бит переноса
копируется в  крайний левый бит,
а крайний  правый бит копируется
во  флаг переноса.Пара регистров
НL  увеличивается , указывая  на
следующий  байт  и счетчик ' В '
уменьшается.Если он  не равен 0,
то программа  переходит на LОР2,
иначе  уменьшается   колличество
обрабатываемых линий, и, если не
равно 0, подпрограмма  переходит
на LОР1.                        
                                
Небольшой ананос -              
В  следующем  выпуске  вы можете
узнать :                        
Как поставить защиту от Маgiс на
компьютере Sсоrрiоn .           
Как перехватить  кнопку  Маgiс в
том же компьютере.              
__________________________________________




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новости - Тоt/i8, Crutсh/Oriоn, Aхоr, Pоман Чунин, ТDD, Jоhn.
Реклама - реклама и объявления.
Форум - Позвонил нам владелец BBS dRON AND nICK и предложил много интересных форм сотрудничества.

В этот день...   25 сентября