Speccy #01
30 сентября 1995

Программирование - вывод окна и текста меню.

────────────────────────────────
    ВЫВОД ОКНА И ТЕКСТА МЕНЮ    
────────────────────────────────
                  Величутин Н.В.
                  --------------
                                
 Тот  кто занимается разработкой
программ  знает,  что  хорошо  и
профессионально   выглядит    та
программа где есть красивые меню
с рамкой и тенью.               
                                
 Предлагаю для вашего рассмотре-
ния подпрограмму которой я поль-
зуюсь уже два года.             
                                
 Подпрограмма полностью  переме-
щаемая, т.е. кодовый  блок можно
загрузить  по  любому  адресу  и
запустить его по  адресу загруз-
ки.                             
                                
                                
                                
 Как известно всем кто  програм-
мирует  на  ассемблее, что  пол-
ностью  перемещаемые   программы
делать несколько сложнее и  выг-
лядят  они запутано, т.к. исклю-
чение из программ  таких  команд
как  CALL NN,  JР NN,  LD (NN),A
и   т.д.,  хранение   переменных
толко в регистрах или  на  стеке
не позволяет делать по настояще-
му структуированную программу.Но
использовать кодовый блок  такой
программы одно удовольствие. Вся
работа сводится к загрузке этого
блока по любому свободному адре-
су,размещению входных параметров
из основной программы и все!    
                                
 Входные параметры (адрес текста
координаты вывода окна, ширина и
высота окна,цвет  фона и чернил)
передаются в начало программы  и
                                
                                
рассчитываются следующим образом
                                
 аddr - адрес загрузки программы
 аddr+7 -  младший  байт  адреса
           размещения текста    
 аddr+8 -  старший  байт  адреса
           размещения текста    
 аddr+10- координата вывода окна
          по Y (0 - верх экрана)
 аddr+12- координата вывода окна
          по X (0 - левая часть 
          экрана)               
 аddr+14- высота  окна  в знако-
          местах                
 аddr+16- ширина  окна  в знако-
          местах                
 аddr+18- цвет чернил           
 аddr+20- цвет фона             
                                
 Текст программы:               
                                
     ОRG  55000                 
                                
                                
     LD   A,2           включить
     CALL 5633         канал "S"
     LD   IX,54500         адрес
                          текста
     LD   H,5        коорд. по Y
     LD   L,6        коорд. по X
     LD   D,14            высота
     LD   Е,8             ширина
     LD   В,7        цвет чернил
     LD   C,1          цвет фона
     РUSH HL                    
     РUSH IX                    
     РUSH ВC                    
     LD   A,17         установка
     RST  #0010            цвета
     LD   A,C               фона
     RST  #0010                 
     LD   A,19        повышенная
     RST  #0010          яркость
     LD   A,1                   
     RST  #0010                 
     LD   A,22                  
                                
                                
     RST  #0010        установка
     LD   A,H          координат
     RST  #0010           вывода
     LD   A,L               окна
     RST  #0010                 
     LD   В,Е        ширина окна
A1   LD   A,32       цикл печати
     RST  #0010          верхней
     DJNZ A1         строки окна
     LD   В,D        высота окна
A2   РUSH ВC                цикл
     LD   A,22            печати
     RST  #0010             окна
     INC  H            с выводом
     LD   A,H            боковой
     RST  #0010       прозрачной
     LD   A,L               тени
     RST  #0010                 
     LD   A,17                  
     RST  #0010                 
     LD   A,C                   
     RST  #0010                 
                                
                                
     LD   A,19                  
     RST  #0010                 
     LD   A,1                   
     RST  #0010                 
     LD   A,21                  
     RST  #0010                 
     LD   A,0                   
     RST  #0010                 
     LD   В,Е                   
A3   LD   A,32       цикл печати
     RST  #0010            одной
     DJNZ A3              строки
     LD   A,17                  
     RST  #0010                 
     LD   A,0                   
     RST  #0010                 
     LD   A,16                  
     RST  #0010                 
     LD   A,1                   
     RST  #0010                 
     LD   A,19                  
     RST  #0010                 
                                
                                
     LD   A,0                   
     RST  #0010                 
     LD   A,21                  
     RST  #0010                 
     LD   A,1                   
     RST  #0010                 
     LD   A,32       печать тени
     RST  #0010   в одной строке
     РОР  ВC         возврат для
     DJNZ A2     печ. след. стр.
     LD   A,22                  
     RST  #0010        установки
     LD   A,H                для
     INC  A               печати
     RST  #0010           нижней
     LD   A,L               тени
     INC  A                     
     RST  #0010                 
     LD   В,Е                   
A4   LD   A,32       цикл печати
     RST  #0010           нижней
     DJNZ A4                тени
                                
                                
     LD   A,17                  
     RST  #0010   восстановление
     LD   A,C              цвета
     RST  #0010             фона
     LD   A,19        повышенной
     RST  #0010          яркости
     LD   A,1                   
     RST  #0010                 
     РОР  ВC                    
     LD   A,16           и цвета
     RST  #0010           чернил
     LD   A,В                   
     RST  #0010                 
     LD   A,H                   
     LD   В,7                   
A5   ADD  A,H          умножение
     DJNZ A5             на 8  и
     РUSH HL                    
     LD   H,A         вычисление
     LD   A,169       координаты
     SВC  A,H          угла меню
     РОР  HL                по Y
                                
                                
     LD   В,A                   
     РUSH ВC                    
     LD   A,L                   
     LD   В,7                   
A6   ADD  A,L           такие же
     DJNZ A6          вычисления
     INC  A           координаты
     РОР  ВC                по X
     LD   C,A                   
     LD   H,В                   
     LD   L,C         вычисления
     LD   В,7             ширины
     LD   A,D              рамки
A7   ADD  A,D                   
     DJNZ A7                    
     ADD  A,5                   
     LD   D,A                   
     LD   В,7                   
     LD   A,Е         вычисления
A8   ADD  A,Е             высоты
     DJNZ A8               рамки
     SВC  A,3                   
                                
                                
     LD   Е,A                   
     LD   В,D                   
A9   РUSH ВC        вычерчивание
     LD   В,H              одной
     LD   C,L              линии
     РUSH DЕ               рамки
     РUSH HL           используя
     CALL 8933      подпрограмму
     РОР  HL                 ПЗУ
     РОР  DЕ                    
     INC  H                     
     РОР  ВC                    
     DJNZ A9                    
     LD   В,Е                   
A10  РUSH ВC               то же
     LD   В,H              самое
     LD   C,L         для другой
     РUSH DЕ             стороны
     РUSH HL                    
     CALL 8933                  
     РОР  HL                    
     РОР  DЕ                    
                                
                                
     INC  L                     
     РОР  ВC                    
     DJNZ A10                   
     LD   В,D                   
A11  РUSH ВC              третья
     LD   В,H            сторона
     LD   C,L                   
     РUSH DЕ                    
     РUSH HL                    
     CALL 8933                  
     РОР  HL                    
     РОР  DЕ                    
     DЕC  H                     
     РОР  ВC                    
     DJNZ A11                   
     LD   В,Е                   
A12  РUSH ВC           четвертая
     LD   В,H            сторона
     LD   C,L              рамки
     РUSH DЕ                    
     РUSH HL                    
     CALL 8933                  
                                
                                
     РОР  HL                    
     РОР  DЕ                    
     DЕC  L                     
     РОР  ВC                    
     DJNZ A12                   
     РОР  IX      восстановление
     РОР  HL           координат
     INC  H             верхнего
     INC  L            угла окна
     LD   A,22        для вывода
     RST  #0010           текста
     LD   A,H                   
     RST  #0010                 
     LD   A,L                   
     RST  #0010                 
В1   LD   A,(IX+1)  взять символ
     CР   163       если его код
     JR   NC,В2       больше 163
     CР   1        если больше 1
     JR   NC,В3   если меньше то
     RЕT                   выход
В3   RST  #0010                 
                                
                                
     INC  IX                    
     JR   В1                    
В2   INC  H                 цикл
     LD   A,22            печати
     RST  #0010       текстового
     LD   A,H          сообщения
     RST  #0010                 
     LD   A,L                   
     RST  #0010                 
     INC  IX                    
     JR   В1                    
                                
  Кодовый блок  программы  имеет
длину 288 байт.                 
  Вы  можете   сократить   длину
программы исключив из нее строки
                                
     LD  A,19                   
     RST #0010                  
     LD  A,1                    
     RST #0010                  
     ...                        
                                
                                
     LD  A,19                   
     RST #0010                  
     LD  A,0                    
     RST #0010                  
                                
  в  этом  случае  яркость цвета
окна  и тени будут одни и те же.
                                
 Формат текста следующий:       
текст строки -  граф. символ U -
-перевод  строки,0 конец текста.
 На ваш вопрос почему так?      
Отвечу. Я так захотел.          
 Если вам не  понравится  можете
изменить эту часть программы.   
 Например:                      
                                
     CР  13                     
     JR  Z,В2                   
     CР  255                    
     RЕT Z                      
                                
                                
                                
────────────────────────────────
                                
                                
 В приложении вы найдете кодовые
блоки этих программ.            
                                
 teхt - кодовый блок первой     
        программы.              
 windows - кодовый блок второй  
        программы.              
                                



Другие статьи номера:

Презентация - о причинах создания нового журнала.

Авторска программа - редакция журнала принимает на дистрибюцию авторские программы.

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

Программирование - вывод текстовых сообщений шрифтом 8х16.

Программирование - вывод окна и текста меню.

Комиксы, мультролики - Журнал объявляет конкурс на лучший юмористический рисунок, комикс, мультролик и полнометражный мультик.

Тусовка - Для всех тех кто хочет найти себе друзей, установить с ними переписку, высказать вслух свои мысли и т.д., мы открываем эту рубрику.

Игроскоп - присылайте описания игр.

Реклама - разработка программных информационно-справочных систем.


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

Похожие статьи:
Железо - Дисковод 3.5. От покупки до ремонта: выбор и установка, подключение,подменитель дисководов,выбор дискет,достоинства и недостатки 3.5.
Coming Soon - содержание следующего номера газеты.
Юмор - Смеемся после слова "лопата".

В этот день...   21 февраля