ZX Format #08
31 декабря 1997

Программистам - Basic - 8: Окончание описания Beta-Basic. Мeга-Бeйсик и Лазeр-Бeйсик или что можно сдeлать на обычном Бeйсикe.

<b>Программистам</b> - Basic - 8: Окончание описания Beta-Basic. Мeга-Бeйсик и Лазeр-Бeйсик или что можно сдeлать на обычном Бeйсикe.
Мега-Бейсик и Лазер-Бейсик   
              или              
       что можно сделать       
      на обычном Бейсике       
                               
music by IRONMAN               
(C)Д.Рудовский                 
_______________________________
                               
   Пeрвым  делом должен заметить, что Me-
га-Бейсик  (в дальнейшем МБ) мало отлича-
ется по возможностям от Бета-Бейсика, ко-
торый  был  описан  в предыдущих статьях.
Поэтому  описание  МБ, которое будет дано
ниже,  будет  основано именно на описании
Бета-Бейсика.                            
                               
          МЕГА-БЕЙСИК          
                               
    Начнем с технических характеристик:  
                               
                           МБ     ББ     
                               
Занимаемый объем памяти: 21240   18577   
Среднее ускорение                        
        работы программ:   1.2    2.5    
Кол-во дополнительных                    
               процедур:    20     30    
                функций:    18     21    
Эффективность работы в                   
 редакторе по сравнению                  
со стандартным бейсиком: 1.0-1.5   2-3   
                               
  Как видно из таблицы, МБ уступает ББ по
всем  параметрам. Однако МБ все же приме-
няется  из-за более мощной поддержки окон
во время работы бейсик-программы, а также
отсутствия конфликтов с TR-DOS.          
                               
        Редактор текста        
                               
  - Вызов на редактирование текущей
строки.                                  
  - очищает строку ввода.    
  - стирает символ справа от
курсора.                                 
 <>=> - курсор в конец строки.           
 <<=> - курсор в начало строки.          
 <<>>  - удаление текста справа от kypco-
ра.                                      
  - листинг с текущей строки.   
   - указатель текущей строки устано-
вить на предыдущую строку.               
  - указатель текущей строки устано-
вить на следующую строку.                
                               
      Описание команд МБ       
                               
   WINDOW_X,Y,D,W - эта команда позволяет
определять  произвольные окна на экране (
ну,  разумеется, в пределах самого экрана
),  при этом X,Y - координаты окна, а D и
W - ширина и высота соответственно.      
   CURRENT_N  - предыдущая команда позво-
ляла  переопределить  текущее окно, а для
выбора текущего окна используется эта ко-
манда. Параметр N - (а он может быть от 0
до  9) определяет номер окна, которое бу-
дет активным после использования этой ко-
манды.                                   
   CLW_N,A - Очистка окна. Номер окна за-
дается  параметром N, а параметр A задает
метод очистки:                           
            А=0 - очищается окно вместе  
                 с атрибутами;           
            А=1 - очищается окно без ат- 
                 рибутов;                
            А=2 - инверсия окна;         
            А=3 - стираются только атри- 
                 буты.                   
   PAN_C,A  - эта команда позволяет сдви-
гать  содержимое окна по горизонтали, при
этом  параметр  C определяет цвет заливки
освободившейся  части  окна (0-Ink, 1-Ра-
рег), параметр A определяет направление и
величину сдвига ("+" - слева, "-" - спра-
ва).                                     
   SCROLL_C,A  -  собственно  говоря, эта
команда   аналогична  предыдущей,  с  той
только  разницей, что сдвигается содержи-
мое окна не по горизонтали, а по вертика-
ли и соответственно параметр A определяет
сдвиг сверху или снизу.                  
   PANW_A - эта команда аналогична коман-
де PAN_, только здесь производится цикли-
чeский  сдвиг, т.e. ушедшее направо появ-
ляется  слева и наоборот и параметр соот-
ветственно только один.                  
   SCROLLW_A  -  циклический  сдвиг окна,
аналогичный  SCROLL_, подробности см. вы-
ше.                                      
   MODE_N,A - сия команда позволяет уста-
новить размер шрифта в окне N в соответс-
твии с параметром A:                     
           А=1 - 4х8 пикселей;           
           А=2 - 8х8 пикселей;           
           А=3 - 8х16 пикселей;          
           А=4 - 16х16 пикселей.         
                               
   STIPPLE_N - эта команда позволяет выб-
рать  заполнение символов для режима, ус-
танавливаeмoгo  командой  MODE_N,4. N со-
держит битовую маску для заполнения.     
   FONT_N  - команда необходима для уста-
новки  шрифта  N в текущем окне. В МБ ис-
пользуется  3  шрифта:  0  -  стандартный
шрифт  бейсика; 1, 2 - шрифты МБ, которые
можно заменить своими.                   
   SPRINT_X,Y,A,P,A$  - сия команда явля-
ется  альтернативой  команде  PRINT  AT и
позволяет  выводить текст A$ в координаты
X,Y  с масштабированием символов по гори-
зонтали с коэффициентом А, а по вертикали
с коэффициентом P.                       
   CHANGE_N,A  -  меняет  везде  атрибут,
равный N, на атрибут, равный A.          
   SWAP_N,X  - вставляет атрибут N вместо
атрибута X и наоборот.                   
   FADE_N - последовательно просматривает
атрибуты,  не изменяя тех, которые меньше
или равны N, и уменьшая те, которые боль-
ше. Команда работает до тех пор, пока все
атрибуты не станут меньше или равными N. 
   INVERT - собственно говоря, назначение
этой команды видно из имени. Она uhbeptu-
рует текущее окно.                       
   DEFG_A$,N1,...,N8  - сия команда опре-
дeляeт  символ  пользователя  A$, который
определяется 8 байтами N1...N8.          
   GET_0,A,Y,X,D,W  -  очень полезная ко-
манда, позволяющая сохранить часть экрана
с  координат X,Y и размерами D и W по ши-
рине и высоте соответственно в адрес A.  
   PUT_F,A,Y,X,D,W - команда oбратна пре-
дыдущей.  Она  выводит ранее записанную с
адреса  А  часть экрана в координаты X,Y,
высотой W и шириной D по методу F:       
            F=0 - COPY;                  
            F=1 - AND;                   
            F=2 - XOR;                   
            F=4 - COPY без атрибутов;    
            F=5 - AND без атрибутов;     
            F=6 - XOR без атрибутов.     
                               
   SPUT_A,Y,X,В,C,W,D - команда аналогич-
на предыдущей, В и C коэффициенты масшта-
бирoвания.                               
   REPEAT  ... UNTIL_N - конструкция цик-
ла,  альтернативная FOR ... NEXT. Выраже-
ние N определяет условие выхода из цикла.
Если N=0, то тело цикла повторяется, ина-
че цикл прерывается.                     
   PUSH_A,В  -  помещает  на  стек  номер
строки и номер оператора.                
   POP  - снимает со стека верхнее значе-
ние.                                     
   MTASK_N  -  организатор многозадачного
(2х  задачнoгo) режима. При получении ко-
манды  устанавливается вторая точка входа
в  программу  со  строки  N. Если N=0, то
восстанавливается однозадачный режим.    
   PLAY_N,L,S,D,F  - Расширение оператора
ВЕЕР. N - тон (0-чистый тон, 1-шум.);    
         L - длина шага;                 
         S - начальная частота;          
         D - кoличeстoв шагов;           
         F - приращение частоты на шаге. 
                               
   SON, SOFF - включение и выключение ге-
hepatopa звуков на прерывании.           
   SREP_N - количество повторений данных,
записанных в буфер.                      
   SOUND_N,A,В,C,D  -  занесение данных в
буфер генератора звуков.                 
                               
         N=0 - очистка буфера и запись с 
              начала.                    
         N=1 - запись звука в конец бу-  
              фера.                      
         А - аналогично N в PLAY;        
         В - аналогично F в PLAY;        
         C - число шагов при однократном 
            запуске;                     
         D - число запусков.             
                               
   DOKE_N,A  -  запись  слова (2х байт) в
память.                                  
   CALL_N  -  вызов подпрограммы с адреса
N.                                       
                               
         ЛАЗЕР-БЕЙСИК          
                               
   Лазер-Бейсик  (далее  ЛБ) предназначен
для создания программ, использующих дина-
мичeскую  растровую  графику. Редактор ЛБ
практически не отличается от стандартного
бейсика  и в состав команд редактирования
текста  введены всего две команды - .RNUM
и .REMK.                                 
    .RNUMa,b,c  - предназначена для пере-
нумерации. а - старый номер строки, с ко-
торой  будет выполнена перенумерация; b -
новый  номер, который будет присвоен пер-
вой  строке из блока; c - шаг nepehymepa-
ции.                                     
    .REMK  -  удаляет  все комментарии из
программы.                               
                               
   Переменные Лазер Бейсика    
                               
   Для работы со спрайтами и экраном в ЛБ
введены несколько графических переменных,
с которыми работают процедуры ЛБ.        
                               
 .COL : горизонтальная координата;       
 .ROW : вертикальная координата;         
 .LEN : длина;                           
 .HGT : высота;                          
 .SRW : горизонтальная координата  внутри
        спрайта;                         
 .SCL : вертикальная   координата  внутри
        спрайта;                         
 .NPX : величина сдвига  в  командах вер-
        тикальнoгo сдвига;               
 .SPN : номер текущего спрайта;          
 .SP1 : номер спрайта  источника для опе-
        раций с двумя спрайтами;         
 .SP2 : номер  спрайта приемника для опе-
        раций с двумя спрайтами.         
                               
   Переменные .COL, .ROW, .LEN и .HGT мо-
гут  быть использованы как для окна экра-
на, так и для окна спрайта.              
                               
      Обработка спрайтов       
                               
   Для   создания  спрайтов  используются
следующие команды:                       
                               
 .SPRT :                                 
     выделяет  место под спрайт, opuehtu-
    руясь  на переменные LEN и HGT. Таким
    образом    выделяемый   объем   равен
    9*HGT*LEN+5.  Место выделяется навер-
    ху;                                  
 .ISPR :                                 
     аналогичен  предыдущей  команде,  но
    место выделяется внизу;              
 .GTBL :                                 
     заполняет спрайт данными с экрана, в
    соответствии с размерами спрайта при-
    emhuka. Для этой команды в переменных
    COL и ROW должны находится координаты
    той области экрана, которая будет пе-
    рeмeщeна в спрайт.                   
 .GTOR :                                 
     аналогична  .GTBL,  но  перенос осу-
    щeствляeтся по OR;                   
 .GTND :                                 
     аналогична  .GTBL,  но  перенос осу-
    щeствляeтся по AND;                  
 .GTXR :                                 
     аналогична  .GTBL,  но  перенос осу-
    щeствляeтся по XOR;                  
                               
   Вместе с процедурами создания спрайтов
надо   упомянуть  o  процедурах  удаления
спрайтов:  их тоже три. .WSPR oбратна ко-
манде .SPRT, .DSPR oбратна команде .ISPR,
а .CLSM очищает спрайт SPN.              
                               
    Несколько сервисных команд:          
                               
 .INVM :                                 
     производит  инверсию  спрайта, номер
    которого задан в SPN.                
 .MIRM :                                 
     зеркальное  отражение спрайта вокруг
    его центральной оси.                 
 .MARM :                                 
     отражение атрибутов спрайта.        
 .SPNM :                                 
     поворот  спрайта  SP2 на 90 градусов
    по  часовой  стрелке, результат зано-
    сится в спрайт SP1.                  
 .DSPM :                                 
     увеличение  размеров спрайта SP2 в 2
    раза.  Результат  заносится  в спрайт
    SP1.  SP1  должен  имет вдвое большие
    размеры по сравнению со спрайтом SP2,
    иначе   произойдет   порча   соседних
    спрайтов и спрайт SP1 будет испорчен.
 .SRTM :                                 
     установка постоянных атрибутов INK и
    PAPER в спрайте SPN.                 
                               
    Ну и под конец команды сдвига:       
                               
 .WL1M, .WLЧM, .WL8M :                   
     сдвиг  спрайта влево на 1,4 и 8 пик-
    селей с возвратом.                   
 .WR1M, .WRЧM, .WR8M :                   
     сдвиг спрайта вправо на 1,4 и 8 пик-
    селей с возвратом.                   
 .SL1M, .SLЧM, .SL8M :                   
     сдвиг влево без возврата.           
 .SR1M, .SRЧM, .SR8M :                   
     сдвиг вправо без возврата.          
 .WCRM :                                 
     вертикальный  скроллинг с возвратом,
    направление и величина сдвига задает-
    ся переменной .NPX                   
 .SCRM :                                 
     вертикальный скроллинг без возврата,
    направление и величина сдвига задает-
    ся переменной .NPX                   
 .ATLM :                                 
     скроллинг  атрибутов влево с вoзвра-
    том.                                 
 .ATRM :                                 
     скроллинг атрибутов вправо с вoзвра-
    том.                                 
 .ATUM :                                 
     скроллинг  атрибутов вверх с вoзвра-
    том.                                 
 .ATDM :                                 
     скроллинг  атрибутов  вниз с вoзвра-
    том.                                 
                               
       Работа с окнами.        
                               
    Окно  в  ЛБ  определяется переменными
COL,  ROW,  LEN,  HGT, причем наборы этих
переменных можно сохранять, используя пе-
рeмeнную  SET.  Эта  переменная позволяет
присвоить набору номер, так, чтобы потом,
присвоив  переменной  SET  этот номер, мы
восстановили  значения  переменных  этого
набора.  Всего  может быть до 16 наборов.
Пример:                                  
                               
  10 .SET=0: .COL=10: .ROW=10:           
     .HGT=5: .LEN=5                      
  20 .SET=1: .COL=0:.ROW=0: .HGT=22:     
     .LEN=32                             
  30 .SET=0: LET X=?COL: LET Y=?ROW:     
     LET L=?LEN: LET H=?HGT              
  40 PRINT X,Y,L,H                       
                               
Результат:                               
                               
10                10                     
5                 5                      
                               
    Команда   .CLSV   аналогична  команде
.CLSM,  но выполняется для текущего окна,
а команда .SETV аналогична команде .SRTM,
хотя выполняется для окна.               
    Практически  все  команды  работы  со
спрайтами   продублированы  и  для  окон,
только  вместо  M  на конце команды у них
стоит  V.  Поэтому  я остановлюсь лишь на
командах вывода спрайтов в окно.         
 .PTBL :                                 
     вывод  спрайта  на  экран. COL и ROW
    содержат координаты вывода, а SPN но-
    мер выводимого спрайта.              
 .PTOR,.PTND,.PTXR :                     
     аналогичны PTBL, но наложение спрай-
    та  на экран производится по принципу
    OR, AND и XOR соответственно.        
 .PWBL,.PWOR,.PWXR,.PWND :               
     эта  группа  команд идентична группе
    .PTBL, но производит вывод не спрайта
    целиком,  а окна из спрайта на экран.
    В качестве параметров используются:  
.COL,.ROW : координаты вывода в экране;  
.SCL,.SRW : координаты окна в спрайте;   
.HGT,.LEN : размеры окна;                
.SPN : номер спрайта.                    
 .ATON,.ATOF :                           
     включение  и выключение режима пере-
    носа атрибутов спрайта на экран.     
 .MOVE :                                 
     перемещение  спрайта.  Спрайт SP1 по
    принципу  XOR  помещается  в  позицию
    COL,ROW;  затем спрайт SP2 помещается
    в позицию COL+LEN,ROW+HGT. Параметры:
.COL,.ROW : начальные координаты;        
.HGT,.LEN : смещение при движении;       
.SP1,.SP2 : начальный и конечный спрайты.
                               
      Считывание текущих       
     значений  переменных      
                               
    Для  получения значений переменных ЛБ
используется специальная форма записи:   
                               
       LET VAR=?FUN, где                 
                               
  VAR : переменная бейсика;              
  FUN : переменная ЛБ.                   
                               
NB! запрещены конструкции типа:          
                               
    PRINT ?COL                           
    LET X=?COL+DX                        
                               
    Кроме описанных выше переменных, в ЛБ
есть  несколько  специфичных  переменных,
которые нельзя установить:               
  ?KBF :                                 
     не  равна 0, если клавиша COL из по-
    луряда ROW нажата;                   
  ?SCV :                                 
     равна 0, если знакоместо с координа-
    тами COL,ROW пусто;                  
  ?TST :                                 
     ищет  спрайт с номером SPN, если его
    нет,  то  выдает сообщение об ошибке,
    иначе равна его адресу, а в HGT и LEN
    записываются его размеры;            
  ?PEK(х) :                              
     считывает  слово (2 байта) из адреса
    х.                                   
                               
       Несколько слов о        
    программировании на ЛБ     
                               
    При  написании  программы  на ЛБ надо
учитывать,  что все команды ЛБ используют
одни  и те же переменные, поэтому необхо-
димо шире использовать наборы (переменная
SET).  Пример  использования  наборов при
написании программы приведен ниже:       
                               
  10 .SET=0: .COL=0: .ROW=18: .SPN=6     
  20 .SET=1: .COL=26: .ROW=18: .SPN=8    
  30 .SET=2: .COL=0: .ROW=8              
  40 .SET=0: .PTXR: .SET=1: .PTXR        
  50 .SET=2: LET KEY=?KBF                
  60 IF KEY<>0 THEN STOP                 
  70 .SET=0: .PTXR: LET X=?COL           
  80 IF X=26 THEN LET X=-1               
  90 .COL=X+1                            
 100 .SET=1: .PTXR: LET X=?COL           
 110 IF X=0 THEN LET X=27                
 120 .COL=X-1                            
 130 GO TO 40                            
                               
    Сия программа выводит спрайты 6 и 8 в
позиции  0,18  и  26,18  соответственно и
двигает их навстречу друг другу, при дос-
тижeнии   противоположного   края  экрана
спрайт  возвращается в исходное положение
и  все повторяется заново. При нажатии на
 программа останавливается.       
                               
         Компилятор ЛБ         
                               
    В  отличие от остальных расширений ЛБ
позволяет  компилировать  свои программы,
что  позволяет  увеличить скорость их вы-
полнения и высвободить больше места в па-
мяти,  т.к. процедуры, используемые в от-
компилированной  программе занимают всего
5К. верхней памяти.                      
    Для  компиляции  необходимо  в чистом
бейсике сделать CLEAR 59799, затем загру-
зить компилятор (COMPCODE), свою програм-
му и запустить компилятор с адреса 59800.
В  процессе  компиляции текст вашей прог-
раммы  будет заменен oбъeктным кодом, ко-
торый  можно  будет  записать как обычный
бейсик.  Для выполнения откомпилированной
программы надо написать загрузчик. Пример
загрузчика для TR-DOS приведен ниже:     
                               
  10 CLEAR SPR-1                         
  20 RANDOMIZE USR 15619: REM:           
          LOAD "RTCODE" CODE             
  30 RANDOMIZE USR 15619: REM:           
          LOAD "SPRITES" CODE SPR        
  40 LET T=INT(SPR/256):                 
          POKE 62464,SPR-256*T:          
          POKE 62465,T                   
  50 POKE 62466,255: POKE 62467,220      
  60 RANDOMIZE USR 15619: REM:           
          LOAD "PROG"                    
                               
    Здесь SPRITES : имя файла спрайтов;  
SPR : адрес загрузки спрайтов;           
PROG : имя объектного кода.              
    Если  в  программе  не использовались
спрайты,  то  строки  30 и 40 можно опус-
тить, тогда адрес CLEAR будет - 59799.   
                               
          Литература.          
                               
  1.  "Справочник по системным программам
для компьютера ZX-Spectrum";изд. "CИЛEКC"
C.-Пб, 1992г, 2SSctp.                    
  2. "Справочник по системным программам.
ZX-Spectrum.";изд. "СОЛОН" Москва, 1991г,
261стр.                                  
                               
_______________________________



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

Oт авторов - Внoвь пoслe дoлгoгo пeрeрыва Вы читаeтe "рeдактoрскую кoлoнку".

Авторы журнала - ZX-Format No.8

Содержание номера - краткое содержание журнала ZX-Format No.8

Игрушки - обзор новинок: Stryker In The Grypts Of Trogan, Black Beard, Wizard Wars, Panther, Mario Bros, Ole. Toro!, Flip It!, Угoлки, Battlefield Germany.

Игрушки - Адвентюры: The Boggit. Он же болотник. Памяти пoчившeй пoлиграфичeскoй вeрсии ZX-Peвю пoсвящаeтся...

Игрушки - Адвентюры: Детали. Мысли на околоадвентюрные темы.

Игрушки - Lone Wolf: Новелла по игре.

Игрушки - По полочкам: Чeрный ворон - описание эпизодов.

Программистам - Basic - 8: Окончание описания Beta-Basic. Мeга-Бeйсик и Лазeр-Бeйсик или что можно сдeлать на обычном Бeйсикe.

Программистам - Кодинг для начинающих: "Погружeниe в движeниe". Часть вторая.

Программистам - Арифмeтика II: Прoдoлжаeм знакoмить вас с матeматичeскими прoцeдурами. Рeчь пoйдeт o мeтoдиках вoзвeдeния в любую стeпeнь и извлeчeния любoгo кoрня.

Программистам - IRIS: Описание и разбор эффекта.

Программистам - Digital sound на Спектруме: О тoм, как заставить SPECCY вoспрoизвoдить oцифрoванныe звуки.

IS-DOS - News: Что нового в Is-Dos c января 1997г. по май 1998г.

IS-DOS - Faq: Ответы на часто задаваемые вопросы.

Железо - KAY-1024: Характеристики и описание.

Железо - IDE HDD для iS-Dos: схeма кoнтрoллeра IDE винчeстeра, прoизвoдимoгo фирмoй (C)Nemo, для кoмпьютeрoв с систeмнoй шинoй типа Nemo-bus.

Железо - IDE-BUS: oписаниe IDE-шины и кoманд HDD.

Железо - Для чайников: Boot-Selector. Приспoсoблeниe для тoгo, чтoбы "пoмeнять мeстами" 3-х и 5-и дюймoвыe дискoвoды.

Премьера - Pro Tracker 3.31: Музыкальный редактор, характеристики, описание.

Премьера - Sprite Master 5.11: Описание мнoгoфункциoнальной графичeской утилиты для рабoты сo спрайтами.

Премьера - Best view 1.0: Прoграмма, с пoмoщью кoтoрoй Вы мoжeтe прoсматривать тeкстoвыe, графичeскиe и шрифтoвыe файлы, а такжe файлы в фoрматe ассeмблeра ZX-ASM 3.0.

Премьера - Flash Tracker Song Compiler: Кoмпилятoр для пeрeвoда рабoчeгo мoдуля в удoбoваримый вид, кoтoрый ужe мoжeт примeняться в прoграммах всякoгo рoда.

Интервью - Многоизвестные факты из истории DELTA 4 (в трeх главах c прoлoгoм и эпилoгoм).

Здесь был ты - Повелитель зубов - 3. Окончание похождений компании бравых хоббитов.

Здесь был ты - Маски: Маленькая трагичeская истoрия...

Почта - письма читателей: Прoсвирoв Ceргeй, Глушeц Виталий, Cyrах/Cross Worlds.

Почта - бесплатная реклама и обьявления.

Разное - Ретроспектива: Мы рeшили вспoмнить, чeм oзнамeнoвал сeбя прoшeдший гoд в истoрии Sрectrum.

Разное - перспективы ПО. Чёрный Ворон - 2, Зеркало, Mega Tetris 2000.

Разное - Эпопея: Днeвник разрабoтки oднoй прoграммы.

Разное - Конкурс: Кoмпьютeрныe анeкдoты oт читатeлeй.

Amiga New`s - Heкoтoрыe нoвoсти oт прoизвoдитeлeй жeлeза - Phаse5 и Вlittersoft.

Линия жизни - Практичeски всe прoизвoдитeли гoвoрят, чтo кoмeрчeски Sрectrum умeр. Задача "Линии жизни" пoдтвeрдить или oпрoвeргнуть этo.


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

Похожие статьи:
Мертвые не потеют - бредни от Stalex'a.
Игры - рецензия на игры Monstrland.
Sofтинка - Внешний вид операционной системы ZXVGS.
Нусс, почитаем - Психоз пятый, как никак с опозданием больше чем в год, но все-таки вышел.
Оттяг - Несколько советов тем, кто хочет отправить программы по почте своим зарубежным друзьям.

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