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

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

<b>Программирование</b> - вывод окна и текста меню.
────────────────────────────────
    ВЫВОД ОКНА И ТЕКСТА МЕНЮ    
────────────────────────────────
                  Величутин Н.В.
                  --------------
                                
 Тот  кто занимается разработкой
программ  знает,  что  хорошо  и
профессионально   выглядит    та
программа где есть красивые меню
с рамкой и тенью.               
                                
 Предлагаю для вашего рассмотре-
ния подпрограмму которой я поль-
зуюсь уже два года.             
                                
 Подпрограмма полностью  переме-
щаемая, т.е. кодовый  блок можно
загрузить  по  любому  адресу  и
запустить его по  адресу загруз-
ки.                             
                                
                                
                                
 Как известно всем кто  програм-
мирует  на  ассемблее, что  пол-
ностью  перемещаемые   программы
делать несколько сложнее и  выг-
лядят  они запутано, т.к. исклю-
чение из программ  таких  команд
как  CALL NN,  JP NN,  LD (NN),A
и   т.д.,  хранение   переменных
толко в регистрах или  на  стеке
не позволяет делать по настояще-
му структуированную программу.Но
использовать кодовый блок  такой
программы одно удовольствие. Вся
работа сводится к загрузке этого
блока по любому свободному адре-
су,размещению входных параметров
из основной программы и все!    
                                
 Входные параметры (адрес текста
координаты вывода окна, ширина и
высота окна,цвет  фона и чернил)
передаются в начало программы  и
                                
                                
рассчитываются следующим образом
                                
 addr - адрес загрузки программы
 addr+7 -  младший  байт  адреса
           размещения текста    
 addr+8 -  старший  байт  адреса
           размещения текста    
 addr+10- координата вывода окна
          по Y (0 - верх экрана)
 addr+12- координата вывода окна
          по X (0 - левая часть 
          экрана)               
 addr+14- высота  окна  в знако-
          местах                
 addr+16- ширина  окна  в знако-
          местах                
 addr+18- цвет чернил           
 addr+20- цвет фона             
                                
 Текст программы:               
                                
     ORG  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          цвет фона
     PUSH HL                    
     PUSH IX                    
     PUSH ВС                    
     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   PUSH ВС                цикл
     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   в одной строке
     РОР  ВС         возврат для
     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                 
     РОР  ВС                    
     LD   A,16           и цвета
     RST  #0010           чернил
     LD   A,В                   
     RST  #0010                 
     LD   A,H                   
     LD   В,7                   
A5   ADD  A,H          умножение
     DJNZ A5             на 8  и
     PUSH HL                    
     LD   H,A         вычисление
     LD   A,169       координаты
     SBC  A,H          угла меню
     РОР  HL                по Y
                                
                                
     LD   В,A                   
     PUSH ВС                    
     LD   A,L                   
     LD   В,7                   
A6   ADD  A,L           такие же
     DJNZ A6          вычисления
     INC  A           координаты
     РОР  ВС                по 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               рамки
     SBC  A,3                   
                                
                                
     LD   Е,A                   
     LD   В,D                   
A9   PUSH ВС        вычерчивание
     LD   В,H              одной
     LD   C,L              линии
     PUSH DE               рамки
     PUSH HL           используя
     CALL 8933      подпрограмму
     РОР  HL                 ПЗУ
     РОР  DE                    
     INC  H                     
     РОР  ВС                    
     DJNZ A9                    
     LD   В,Е                   
A10  PUSH ВС               то же
     LD   В,H              самое
     LD   C,L         для другой
     PUSH DE             стороны
     PUSH HL                    
     CALL 8933                  
     РОР  HL                    
     РОР  DE                    
                                
                                
     INC  L                     
     РОР  ВС                    
     DJNZ A10                   
     LD   В,D                   
A11  PUSH ВС              третья
     LD   В,H            сторона
     LD   C,L                   
     PUSH DE                    
     PUSH HL                    
     CALL 8933                  
     РОР  HL                    
     РОР  DE                    
     DEC  H                     
     РОР  ВС                    
     DJNZ A11                   
     LD   В,Е                   
A12  PUSH ВС           четвертая
     LD   В,H            сторона
     LD   C,L              рамки
     PUSH DE                    
     PUSH HL                    
     CALL 8933                  
                                
                                
     РОР  HL                    
     РОР  DE                    
     DEC  L                     
     РОР  ВС                    
     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)  взять символ
     СР   163       если его код
     JR   NC,В2       больше 163
     СР   1        если больше 1
     JR   NC,В3   если меньше то
     RET                   выход
В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 конец текста.
 На ваш вопрос почему так?      
Отвечу. Я так захотел.          
 Если вам не  понравится  можете
изменить эту часть программы.   
 Например:                      
                                
     СР  13                     
     JR  Z,В2                   
     СР  255                    
     RET Z                      
                                
                                
                                
────────────────────────────────
                                
                                
 В приложении вы найдете кодовые
блоки этих программ.            
                                
 техт - кодовый блок первой     
        программы.              
 windows - кодовый блок второй  
        программы.              
                                



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

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

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

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

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

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

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

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

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

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


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

Похожие статьи:
Party zone - от Keyser Soze с CAFE'2002 (часть 1).
Железо - графика на ZX Spectrum, какие перспективы?
Тема ОС - Для cоздания надeжной многозадачноcти cмeнить cам Z80...
Этюды - Программа вывода картинки.
Rectime - продолжение описания Emage Work Station.

В этот день...   3 декабря