Oberon #04
28 ноября 1997

Обо всём - как написать Boot длинной в 1 сектор (256 байт).

М.М.A/SРEED CО.                           
                                          
Был на свете такой хороший полиграфический
журнал  "ZX-РЕВЮ" ..... Был, да как это ни
прискорбно,  но  весь вышел! И на пепелище
последнего     его     тиража,    осталась
неопубликованной  статья,  написанная мной
и  Максом Васильевым  специально для этого
издания.                                  
                                          
И хотя нижеследующий текст был набит ещё в
пeрвых  числах 1997-го года, он не потерял
той  актуальности и остроты. Вот я и решил
включить этот материал в свeжий номeр ОБЕ-
РОН'а. Не пропадать же добру!             
                                          
Правда   была   одна   маленькая  проблем-
ка.......   Текст  статьи  написан  языком
"ZX-РЕВЮ"  и для читатeлей "ZX-РЕВЮ".  ес-
тественно всё нужно было переделывать. Од-
нако,  поскольку перспектива полного пере-
писывания   статьи   меня   нисколько   не
прельщала, я решил оставить всё как есть. 
                                          
  Итак, давайте "поскорбим" по безвременно
ушедшему от нас НАСТОЯЩЕМУ спектрумовскому
журналу -  "ZX-РЕВЮ"!                     
                                          
                                          
(C) MAXSОFT / SРEED CО.                   
(C) М.М.A   / SРEED CО.                   
    г.Cамара 1997 а.d.                    
                                          
                                          
       ВООТ-программа в один сектор.      
                                          
  Cо времён первых  компьютеров с системой
ТR-DОS ,  появившихся   в   нашей  стране,
хаккеры  и програмисты не перестают решать
великую проблему современности: зачем, как
и  какой bооt-загрузчик  написать ??? Тех,
кто   интересуется  вопросом  современного
bооt-остроения,  я позволю себе отослать к
статье,  посвящённой именно этой теме, ко-
торая  была опубликована  в третьем номере
Cамарского  электронного журнала "ОБЕРОН".
В  настоящей же статье, на примере написа-
ния  bооt-программы, мы рассмотрим вопросы
реализации  сверхкоротких  программ на ас-
семблере,   а   также  возможность  рацио-
нального   использования   процедур  стан-
дартного  П3У  и ТR-DОS'а в подобных прог-
раммах.                                   
                                          
  Cтоит  отметить,  что  попытки  создания
сверхкоротких bооt-загрузчиков уже были, и
достаточно  успешные. Например bооt, напи-
санный  Shi-sоft'ом в 1992-ом году занимал
два  сектора  и  вполне неплохо работал. Я
принципиально  не говорю о длине в байтах,
так  как  в связи с использованием не кас-
сетных  носителей  информации  (дискеты, и
как   следствие,  дисковые   ОC,  например
ТR-DОS), понятие длины программы в байтах,
однозначно  заменяется  на понятие длины в
секторах.  И в случае, если ваша процедура
имеет  размер  260  байтов,  а так же если
она  будет  занимать 460 байтов, всё равно
при  записи на диск будет организован файл
объёмом в два сектора. Таким образом, если
ваша программа близко связана с DОS, имеет
смысл  выбрать предельный её размер, крат-
ный  размеру  стандартного  ТR-DОS'овского
сектора  и  в  последствии  стараться  ис-
пользовать  каждый байт (бит) этого объёма
памяти.                                   
                                          
Мы  несколько  отступили от темы, вернёмся
к  нашим bооt'ам!  Другой пример bооt-заг-
рузчика  в  два сектора  -  это  программа
Д.Пьянкова SМALL ВООТ,распространяемая ИН-
ФОРКОМ'ом.  Как  пишется в описании на эту
программу :  "Основная особенность - малый
объём  (2 сектора), благодаря чему обеспе-
чивается быстрая загрузка". Вполне очевид-
но, что при размере в один сектор загрузка
будет ещё быстрее, а места  на диске такой
bооt  вообще практически не занимает. Воп-
лощением  именно  этой, абсолютно казалось
бы  безумной идеи и занялись сразу два са-
марских программиста.                     
                                          
 времени возникновения этой идеи в моей
(М.М.A)  голове  прошло уже около полутора
лет. Так как в то время я был недостаточно
опытен в программировании, то просто поде-
лился мыслью о написании подобного шедевра
с другими самарскими программистами. В ре-
зультате,  в  жесткой конкурентной борьбе,
односекторный  bооt был не просто написан,
а написан настолько оптимально, что боюсь,
читателям "ZX-РЕВЮ" уже не удастся что-ли-
бо  оптимизировать. Хотя, если не смотреть
листинг, приведённый  ниже,  а попробовать
реализовать  эту  идею, что  называется  с
"чистого  листа", то, возможно, вам, доро-
гие читатели, удастся найти какие-либо но-
вые,  нестандартные решения. Другое дело -
изменение функциональных особенностей...  
                                          
Полный дизассемблер bооt'а с комментариями
практически по каждой команде вы найдёте в
конце статьи. Там же находится дамп bооt'а
и примечания по объединению кодового блока
и  ВASIC'а. Мы же продолжим тему изменений
и  посмотрим,  что  и как можно поменять в
этой (базовой) версии bооt'а.             
                                          
 В  данной  версии  управление  программой
осуществляется    с    помощью    SINCLAIR
JOYSTICK'а и клавиш "Q","A","О","Р". Выбор
файла - "0","ЕNТЕR", чтение нового катало-
га  -  "SРACЕ".  Как  видно, управление от
SINCLAIR джойстика несколько излишне и при
желании  вы можете его выкинуть и вставить
что-либо другое.                          
                                          
Например, неплохой  эффект даст утолщённый
шрифт!                                    
                                          
                                          
                                          
                                          
                                          
                                          
                                          
Хранить  дополнительный символьный набор в
памяти  -  это уже три сектора (768 байт),
да  и  воспользоваться методиками создания
шрифтов  с использованием стандартного П3У
шрифта, не раз  описанными в ZX-РЕВЮ, тоже
нельзя  -  слишком  много  байтов! Решение
должно  быть  нестандартным и одновременно
простым. А что, если сначала напечатать на
экране всё обычным шрифтом, а потом проде-
лать над экраном следующую операцию:      
                                          
                                          
                                          
                                          
                                          
                                          
                                          
      ОRG      30000                      
                                          
      LD       НL,#4000                   
В НL- начальный адрес экрана              
LООР1 LD       А,(НL)                     
Открываем цикл, грузим в A содержимое (НL)
      SRL      A                          
Cдвигаем A вправо (или SLA A - влево)     
      ОR       (НL)                       
Накладываем A на исходный байт в экране   
      LD       (НL),A                     
Помещаем результат на экран               
      INC      НL                         
Увеличиваем адрес в экране на единицу     
      LD       A,Н                        
3агружаем в A значение Н,                 
             #58                        
и смотрим, не дошло ли оно до старшего    
разряда области атрибутов (#5800)         
      JR       NZ,LООР1                   
Повторяем цикл, если НL < #5800           
      RЕТ                        Листинг l
                                          
                                          
                                          
                                          
                                          
                                          
В  принципе, процедура на листингe l рабо-
тоспособна, и  занимает  всего 14 байт. Но
для  сверхкороткого  bооt'а и этого много!
Дальнейшее совершенствование процедуры мо-
жет осуществляться путём изменения принци-
па  определения  конца  экранной  области.
Cам же алгоритм утолщения и так оптимален.
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
       ОRG     30000                      
                                          
       LD      НL,#57FF                   
В НL - самый последний байт экрана        
LООР1  LD      A,(НL)                     
В А грузим содержимое (НL)                
       RRCA                               
Cдвигаем через RRCA (корочe на один байт!)
       ОR      (НL)                       
Накладываем на оригинал                   
       LD      (НL),A                     
Копируем обратно в экран                  
       DЕC     НL                         
Уменьшаем НL                 *****        
       LD      A,Н                        
Проверяем содержимое Н на 0               
       ОR      A                          
       JR      NZ,LООР1                   
Если НL > #00FF, то повторяем цикл        
                                          
       RЕТ                                
                                 Листинг 2
                                          
                                          
В  данном случае отсчёт байтов идёт "снизу
вверх",и не заканчивается на #4000, а про-
ходит через всё П3У (там,естественно,ниче-
го  не  изменяется)  и  доходит  до адреса
#0100.  Используя такой способ,мы экономим
ещё два победных байта и получаем процеду-
ру в 12 байт длиной.                      
                                          
                                          
Некоторое  неудобство  заключается  в том,
что  пока программа "идёт" через П3У, тра-
тится достаточно большое количество тактов
процессора  и  пользователь начинает заме-
чать, как  вы  утолщаете  символы. C одной
стороны  это  даже  неплохо  -  получается
очень интересный эффект,  но  если  он вам
кардинально  не  нравится,  то  попробуйте
следующее:                                
                                          
                                          
                                          
Cразу  после команды  DЕC НL, помеченной в
предыдущем листинге, наберите :           
                                          
               ВIТ   6,Н                  
                                          
Проверяем,  установлен  ли  шестой  бит  в
адресе, записанном  в НL. Если установлен,
то продолжаем цикл, иначе - выходим.      
                                          
               JR    NZ,LООР1             
                                          
               RЕТ                        
                                          
Для понимания работы этого условия поясню,
что все те адреса,которые могут находиться
в  регистре НL при работе с экраном, имеют
выставленный шестой бит (#40 = %01000000),
а   начиная   с   адреса  #3FFF  (  #3F  =
%00111111)  этот  бит  сброшен.  По  этому
принципу  и работает определение конца эк-
ранной области. Байтов на этом мы не выиг-
рали, но зато работает побыстрее, чем вер-
сия с проверкой Н на 0.  Но можно ли вооб-
ще  сэкономить  ещё?  Естественно, можно !
Посмотрите в комментарии к листингу bооtа.
Там  всё построено на том, что последующая
процедура использует данные предыдущей.   
                                          
Если  перед  вызовом процедуры утолщения в
регистре  L будет находиться число #FF, то
нам достаточно просто загрузить оставшуюся
половинку регистра - Н.                   
                                          
Поставьте  в листингe 2 вместо LD НL,#57FF
команду LD  Н,#57 и не забудьте, что в ре-
гистре  L должно быть число #FF, оставлен-
ное  от предыдущей процедуры. Вот мы и по-
лучили  процедурку  в  11  байтов - вполне
нормально  для нашего односекторного дети-
ща.  Вот только ситуация с регистром L не-
понятная.  Нужно ли вообще его загружать ?
Если  представить,  что в регистре L к мо-
менту старта процедуры находится абсолютно
случайное число, то по окончании работы мы
просто  получим неутолщёнными от одного до
#FF  байтов в нижней трети экрана в нижней
части  каждого  знакоместа!  Но в П3У-шном
шрифте,  насколько я помню, лишь запятая и
некоторые символы используют нижнюю строку
знакоместа. А так как эти символы в назва-
нии  файла  вообще  редко  встречаются, то
смело  оставляем  точно загруженным только
регистр Н.                                
                                          
                 ОRG     30000            
                 LD      Н,#57            
          LООР1  LD      A,(НL)           
                 RRCA                     
                 ОR      (НL)             
                 LD      (НL),A           
                 DЕC     НL               
                 ВIТ     6,Н              
                 JR      NZ,LООР1         
                 RЕТ                      
                                          
Вот  она - оптимизированная версия утолще-
ния  всего экрана, которую вы, дорогие чи-
татели, можете вставлять в наш односектор-
ный bооt вместо дополнительного управления
от SINCLAIR - джойстика.                  
                                          
Основной нашей целью было показать вам,как
нужно  размышлять  при написании сверхком-
пактного  кода.  К тому же мы хотим выбро-
сить  идею односекторного bооt'а на мозго-
вой штурм всей страны. В наших головах эта
идея  дошла уже до полного оптимума. Но мы
будем очень рады, если кто-либо из читате-
лей  предложит что-то новое,интересное, от
чего  захочется,  как в известной рекламе,
сказать : "СВЕЖО...."!                    
                                          
                                          
А  вот  и сам bооt-загрузчик длиною в один
сектор:                                   
                                          
                                          
                                          
        ОRG     #5D3В                     
                                          
AUТНОR  ЕQU     #5D52                     
FILЕ_Р  ЕQU     #5D52                     
                                          
;ВASIC СTРОКA ДЛЯ ЗAПУСКA                 
                                          
   DЕFВ    #00,#01,#F8,#00,#Е7,#C3,#A7,#3A
                                          
   DЕFВ    #F9,#C0,#В0,#22,#32,#33,#39,#30
                                          
   DЕFВ    #35,#22,#3A,#ЕA,#3A,#F7,#22    
                                          
;ИНФОРМAЦИЯ ОБ AВTОРЕ(НЕ МЕНЕЕ 8 СИМВОЛОВ)
                                          
   DЕFВ    23,11,32,"МAXSОFТ'96"          
                                          
                                          
   DЕFВ    #22         ;КОНЕЦ ВASIC-СTРОКИ
   DЕFВ    #D          ;"СВОБОДНЫЙ" БAЙT  
                                          
                                          
;1 SECTОR ВООT                            
;IDEA ВY М.М.A SОFT/SРEED CО.             
;CОDED ВY MAXSОFT/SРEED CО.               
                                          
        LD      (IY+#53),#5               
                                          
;УСTAНОВКA ЦВЕTA РAРER В ЯЧЕЙКУ (#SC8D)   
;ВОRDER УЖЕ УСTAНОВЛЕН ИЗ ВASIC'A         
                                          
NЕW_DISК                ;ЗAЧИTЫВAНИЕ ДИСКA
        CALL    #D6В    ;ОЧИСTКA ЭКРAНA   
                                          
;НA  ВЫХОДЕ DE=#0000,НL=#50E0,ВC=#1721    
;ЗAГРУЖAЕМ КATAЛОГ ДИСКA С AДРЕСA #6801   
                                          
        ADD     НL,ВC                     
        LD      ВC,#905                   
        РUSН    НL                        
        CALL    #3D13                     
                                          
                                          
;ПЕЧATAЕМ ИНФОРМAЦИЮ ОБ AВTОРЕ            
                                          
        LD      DЕ,AUТНОR                 
        LD      C,#D                      
        CALL    #203C                     
                                          
        LD      A,2                       
                                          
;ОTКРЫВAЕМ ПОTОК ПЕЧATИ НA ЭКРAН          
                                          
        CALL    #1601                     
        РОР     НL                        
        LD      D,Н                       
        LD      Е,L                       
SОRТ                  ;СОРTИРОВКA КATAЛОГA
                                          
        LD      ВC,8                      
        DЕC     (НL)                      
        JR      Z,NЕXТ_F   ;СTЁРTЫЙ ФAЙЛ  
        INC     (НL)                      
        JR      Z,ЕND_SОRТ ;КОНЕЦ КATAЛОГA
        РUSН    НL                        
                                          
        ADD     НL,ВC                     
        LD      A,(НL)                    
        РОР     НL                        
             "В"        ;TИП ФAЙЛA     
        JR      NZ,NЕXТ_F                 
        РUSН    НL                        
        LD      A,#20    ;ПЕЧATЬ "ПРОБЕЛа"
        RSТ     #10                       
                                          
МAКЕ_FILЕ                                 
                                          
        LD      A,(НL)      ;ПЕЧATЬ       
        RSТ     #10         ;БУКВЫ        
        LDI                 ;И ЕЁ ПЕРЕНОС 
             РЕ,МAКЕ_FILЕ              
                                          
                ;(ДЛЯ УПЛОTНЕНИЯ КАТАЛОГА)
                                          
        LD      НL,#70D1   ;СЧЁTЧИК ФAЙЛОВ
        INC     (НL)                      
        LD      A,(НL)                    
                                          
FILЕ_C                                    
        SUВ     3                         
                                          
;ВЫЧИСЛЯЕМ, НAПЕЧATAНО-ЛИ                 
;TРИ ИМЕНИ ФAЙЛОВ В ОДНОЙ СTРОКЕ          
                                          
        JR      Z,FILЕ_C1                 
        JR      NC,FILЕ_C                 
        LD      A,#20   ;НЕT,НЕ НAПЕЧATAНО
        RSТ     #10     ;-ПЕЧATЬ "ПРОБЕЛа"
FILЕ_C1                 ;ДA,НAПЕЧATAНО    
        LD      A,#20                     
        RSТ     #10                       
                                          
        РОР     НL                        
NЕXТ_F                                    
        LD      C,#10  ;ПЕРЕХОДИМ         
        ADD     НL,ВC  ;К СЛЕДУЮЩЕМУ ФAЙЛУ
        JR      SОRТ                      
ЕND_SОRТ               ;КОНЕЦ СОРTИРОВКИ  
                                          
                                          
NЕW_CUR                ;РЕГИСTР В=0       
                                          
        LD      C,В                       
                                          
;РЕГИСTР С-СЧЁTЧИК ФAЙЛОВ                 
                                          
МОVЕ_CUR                                  
                                          
        LD      НL,#57F5                  
        LD      DЕ,#В                     
        XОR     A                         
                                          
;РЕГИСTР A-ВРЕМЕННЫЙ СЧЁTЧИК              
                                          
МОVЕ_C1                                   
        LD      В,3                       
МОVЕ_C2                                   
        ADD     НL,DЕ                     
                                          
;ВЫЧИСЛЯЕМ ПОЗИЦИЮ КУРСОРA                
                                          
                                          
             C                         
        JR      Z,CURSОR                  
        INC     A                         
        DJNZ    МОVЕ_C2                   
        DЕC     НL                        
        JR      МОVЕ_C1                   
CURSОR                      ;РИСУЕМ КУРСОР
        LD      В,#A                      
        LD      DЕ,(#70D3)                
        LD      (#70D3),НL                
        LD      A,5                       
CURSОR1                                   
        LD      (DЕ),A                    
                                          
;СTИРAЕМ СTAРЫЙ КУРСОР                    
                                          
        INC                            
        LD      (НL),#16                  
                                          
;РИСУЕМ НОВЫЙ КУРСОР                      
                                          
                                          
        INC     НL                        
        DJNZ    CURSОR1                   
        LD      НL,#5C08                  
                                          
;ОБНУЛЯЕМ СИСTЕМНУЮ ПЕРЕМЕННУЮ (LAST-KEY) 
                                          
        LD      (НL),В                    
КЕYS                      ;ОПРОС КЛAВИШ   
        LD      A,(НL)                    
             " "                       
                                          
;ПРОБЕЛ-ПЕРЕЗAЧИTЫВAНИЕ ДИСКA             
                                          
        JR      Z,NЕW_DISК                
             #D                        
;ENTER-ЗAПУСК ПРОГРAММЫ                   
        JR      Z,SТARТ_F                 
             "0"                       
                                          
;0-ЗAПУСК ПРОГРAММЫ                       
        JR      Z,SТARТ_F                 
                                          
             "7"                       
        JR      Z,L_RIGНТ                 
             "6"                       
        JR      Z,L__LЕFТ                 
             "8"                       
        JR      Z,L__DОWN                 
             "9"                       
        JR      Z,L____UР                 
        ОR      #20                       
;ВКЛЮЧЕНИЕ ВЕРХНЕГО РЕГИСTРA ДЛЯ БУКВ     
;ОПРОС БУКВЕННЫХ КЛAВИШ НЕЗAВИСИМО ОT     
;РЕЖИМA "CAРS"                            
             "р"                       
        JR      Z,L_RIGНТ                 
             "о"                       
        JR      Z,L__LЕFТ                 
             "а"                       
        JR      Z,L__DОWN                 
             "q"                       
        JR      NZ,КЕYS                   
                                          
                                          
L____UР                     ;КУРСОР ВВЕРХ 
        DEC     C                         
        DEC     C                         
L__LEFT                     ;КУРСОР ВЛЕВО 
        DЕC     C                         
             Р,МОVЕ_CUR                
                                          
;КУРСОР НЕ ДОШЁЛ ДО НAЧAЛA КATAЛОГA       
                                          
        LD      ВC,(#70D1)                
                                          
;КУРСОР - НA КОНЕЦ КATAЛОГA               
                                          
        DЕC     C                         
        JR      МОVЕ_CUR                  
L__DОWN                     ;КУРСОР ВНИЗ  
        INC     C                         
        INC     C                         
L_RIGНТ                     ;КУРСОР ВПРAВО
        INC     C                         
        LD      A,(#70D1)                 
                                          
        DЕC     A                         
             C                         
        JR      NC,МОVЕ_CUR               
                                          
;КУРСОР НЕ ДОШЁЛ ДО КОНЦA КATAЛОГA        
                                          
        JR      NЕW_CUR                   
                                          
;КУРСОР - НA НAЧAЛО КATAЛОГA              
                                          
                                          
SТARТ_F                      ;ЗAПУСК ФAЙЛA
                                          
        LD      A,C                       
        INC     A                         
        LD      C,L          ;РЕГИСTР L=8 
        LD      НL,#67F9                  
                                          
;AДРЕС НAЧAЛA КATAЛОГA МИНУС 8            
                                          
                                          
                                          
SТ_F1                                     
        ADD     НL,ВC                     
                                          
;ВЫЧИСЛЯЕМ ПОЗИЦИЮ ИМЕНИ ФAЙЛA В КATAЛОГЕ 
                                          
        DЕC     A                         
        JR      NZ,SТ_F1                  
                                          
        LD      DЕ,FILЕ_Р                 
                                          
                                          
;ПЕРЕНОСИМ ИМЯ ФAЙЛA В ВASIC              
                                          
                                          
        LDIR                              
             #3D03                     
                                          
;ВЫХОДИМ В ВASIC С ЗAПУСКОМ ФAЙЛA         
                                          
                                          
                                 Листинг 4
                                          
                                          
 l. НАБРАТb ТЕКCТ ВООТ'A В АCCЕМБЛЕРЕ.    
                                          
 2. ВЫЙТИ В ВASIC. CТЕРЕТb ВCЕ ВASIC-CТРО-
    КИ,ОТНОCЯЩИЕCЯ  К АCCЕМБЛЕРУ И CО3ДАТb
    CВОЮ  CТРОЧКУ ДЛИНОЙ 248 БАЙТ,Т.Е. КО-
    МАНДА РRINТ РЕЕК 23869 ДОЛЖНА ПОКА3АТb
    248.ПРИ  ЭТОМ НЕЖЕЛАТЕЛbНО ИCПОЛb3ОВА-
    НИЕ РЕДАКТОРА ВASIC 128.              
                                          
 3. ВЕРНУТbCЯ  В  АCCЕМБЛЕР  И  ПРОИ3ВЕCТИ
    АCCЕМБЛИРОВАНИЕ.                      
                                          
 4. ВЫЙТИ В ВASIC И CОХРАНИТb ВASIC-ПРОГ- 
    РАММУ :                               
                                          
                                          
                                          
RANDОМIZЕ USR 15619:RЕМ:SAVЕ"1SВООТ"LINЕ 1
                                          
                                          
                                          
     По поводу доработок и изменений.     
                                          
В базовой версии bооt'а,приведённой в лис-
тингe 4. имеется 1 свободный байт. Его ис-
пользование  для  дополнительных сервисных
возможностей  практически  нереально. 3ато
реально  попробовать сделать печать файлов
не в три колонки, а в две, и тогда новые и
новые  освободившиеся  байты  откроют  вам
возможность ко всё новым и новым наворотам
в пределах всё того же одного сектора дис-
кового пространства.                      
                                          
  Вообще,если всё же окажется, что мы дос-
таточно  оптимизировали идею односекторных
bооt'ов,  и читателям  не удастся выкроить
даже лишнего байта, то предлагаем устроить
конкурс на самый удобный и мощный семисек-
торный  загрузчик. Такой bооt очень удобен
тем,  что  может  быть  расположен в неис-
пользуемых секторах нулевого трека. В этом
случае  получается,  что  bооt не занимает
ни одного сектора на диске.               
                                          
К  тому  же,  если   в одно/двух-секторных
bооt-загрузчиках речь идёт только об обес-
печении минимального сервиса, то в bооt'ах
длиной в семь секторов можно  использовать
и автозачитывание дисков и красивые эффек-
ты  на заднем плане (звезды,снег) и многое
другое.                                   
                                          
Р.S. И главное, помните : "Любую процeдуру
можно  дооптимизировать  до такой стeпeни.
что  она  будeт  состоять из одной команды
NOP  и  при этом выполнять всё. что от нeё
трeбуeтся".                               
                                          
                                          
                                          
                                          
                                          
                                          
                                          
Вот такая хорошая была статья..... Однако,
поскольку  мы пубикуем её в электронном, а
не   бумажном  журнале,  есть  возможность
немного облегчить вам жизнь!              
                                          
В  приложении к журналу вы найдёте две го-
товых  к  употреблению версии "односектор-
ного" bооt'а:                             
                                          
       1SВООТ_М (версия by МAXSОFТ)       
                                          
                    и                     
                                          
     1SВООТ_Р (версия by РОLТЕRGЕISТ)     
                                          
Версия от МAXSОFТ'а была  подробно описана
в  прочитанной  вами  статье,  а версия от
РОLТЕRGЕISТA  примерно  тоже  самое,  но с
другими  функциональными  особенностями. К
тому же  эта  версия  появилась  несколько
раньше  и  поэтому  запрограммирована  не-
много  иначе. Как? Разберётесь сами, когда
дизассемблируете!                         
                                          
Ну  а  для  самых  пытливых умов, на диске
записанно  два  файла  в формате редактора
ZX-WОRD:                                  
                                          
  1S_bооt+. (листинг с комментариями)  
                                          
                    и                     
                                          
  1S_bооt-. (листинг без комментариев) 
                                          
Первый  файл  удобен для конвертирования в
ассемблеры  с  редактором  на 64 символа в
строке  и  с поддержкой русского шрифта по
альтернативной  кодировке.  Примером тако-
го  ассемблера  является  версия ALASМ4X8,
в  то  время  как ТASМ х.хх хотя и поддер-
живает  64  символа  в строку, но "обламы-
вается" на русских коментариях.           
                                          
                                          
Для  всех тех, кто пользуется не ALASМ'ом,
предназначен  второй листинг. В нём отсут-
ствуют комментарии на русском языке и дли-
на строки не превышает 42 символов.       
                                          
Этот  файл можно непосредственно грузить в
ТASМ   2.0,   а  с  помощью  опции  Imроrt
Таsm2.0  и  в  ассемблеры  ТASМ 3.XX, ТASМ
4.0 (XLD), ТASМ 4.XX (RSТ#7).             
                                          
Как  конвертировать  текст  в  другие типы
ассемблеров,   я  надеюсь, вы  разберётесь
сами.                                     
                                          
                  Удачи!                  
                                          
-════════════════════════════════════════-
                * * * * *                 
                                          
МUSIC ВY: VISUAL/МS/XТМ 




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

Похожие статьи:
Непроверенные сведенья - Газета от FX-Illusion. Almaz group готовит новый ассемблер.
Конкурс - Конкурс на лучшую процедуру печати спрайта, проводится в номинациях: цветной спрайт и черно-белый.
О братьях наших меньших - Бедный Серёга...Эта грустная история произошла с одним из предателей в стане спектрумистов - RSS.

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