Oberon #05
06 ноября 1998

(C) М.М.A ака UnBEL!EVER/SPEED СО./XTM'98 
                                          
         IS-DOS с картинками !!?          
                                          
   В незапамятно давние времена, читывал я
какой-то журнал,посвящённый рС. Журнал был
направлен  на юзеров и из страницы в стра-
ницу,  красной  нитью  шла тема новогодних
подарков - купите это, купите то, best по-
дарок на Новый Под, и т.д. Среди продавае-
мого хлама был какой то CD диск, купив ко-
торый,  "вы непременно освоите современные
технологии мультимедиа, не вставая из тёп-
лого кресла". В качестве примера "освоения
мультимедиа  технологий", предлагалось ра-
зукрасить свой wINDOWS, используя картинки
записанные на диске, в соответствии с нас-
тупающим Новым Подом. Чуть ниже приводился
рабочий экран wIN'95, где толпой резвились
снеговики,  Деды  Морозы  и  прочие зимние
атрибуты.                                 
                                          
   "Вот зажравшиеся капиталисты!", - поду-
мал  я  тогда. Это что же получается,  они
могут разукрасить свой windows к празднику
всякими там картинками, а мы должны догни-
вать  на  фоне синих панелей однообразного
IS-DOS'а ??? Нет, непорядок!              
                                          
   Именно  так  и зародился тот самый файл
start., который вы можете найти на дис-
ке с журналом. Скопировав его на загрузоч-
ный IS-DOS диск, назвав start.сом и пропи-
сав  его  в  конце autoexec.bat, вы можете
смело  перегружать  систему и наслаждаться
rulez'ом.  Ну  а  тем, кому интересно, как
всё это работает, посвящена излагаемая ни-
же информация.                            
                                          
   Не  имея никакого представления о внут-
реннем  устройстве is-dos'а и уж тем более
не  зная  всех  тонкостей программирования
под  него,  я действовал чисто интуитивно.
Адрес ассемблирования был взят по аналогии
с  первым попавшимся под руку .сом файлом,
все  регистры  сохранялись  на стеке перед
стартом  и извлекались обратно при возвра-
щении.   Как   ни   странно,  но  вся  эта
конструкция заработала.                   
                                          
   Однако незнание is-dos'а дало свои пло-
ды:  если  при первом запуске всё проходит
гладко,  то  при попытке запуска start.сом
из  уже  загруженной is-dos приводят к не-
большим  глюкам.  Для самой системы это не
страшно  - могу дать гарантии, что сия на-
веска на is-dos не подпортит данные на ва-
шем диске.                                
                                          
   Ниже  приведён исходник start.сом с ко-
мментариями по тексту.Исходник был написан
в ALASM'е и по сему используются  специфи-
ческие  для этого редактора команды DISP и
INCLUDE.  Три  эффекта гашения экрана были
взяты  мной из ZX-РЕВЮ (давно это было - с
трудом  вспоминаю!). Именно   поэтому я не
стал приводить на них комментарии.Да и са-
ми  эффекты  очистки вы можете смело заме-
нить на свои. В приложении к журналу поме-
щён  приведённый  ниже  исходник в формате
ZX-WORD,  из  которого  нетрудно  получить
текст в формате любого ассемблера.        
                                          
     Разбирайтесь и наслаждайтесь....     
                                          
        ORG     30000                     
        DISP    24000                     
        PUSH    AF                        
        XOR     A                         
        OUT     (#FE).A;Сохраняем         
        PUSH    BC     ;абсолютно все     
        PUSH    DE     ;регистры на       
        PUSH    HL     ;стеке             
        EXX            ;исключительно     
        PUSH    HL     ;на случай         
        PUSH    DE     ;атомной           
        PUSH    BC     ;войны!            
                                          
        EX      AF.AF' ;                  
        PUSH    AF     ;                  
        PUSH    IX     ;                  
        PUSH    IY     ;                  
                                          
        CALL    EFFECT ; Вызываем САМУ    
                       ; процедуру.....   
                                          
        POP     IY     ; Ну а раз мы      
        POP     IX     ;  сохранили на    
        POP     AF     ;   стеке все      
        EX      AF.AF' ;    регистры,     
        POP     BC     ;    то не грех    
        POP     DE     ;   их оттуда      
        POP     HL     ;  и извлечь перед 
        EXX            ; выходом!         
        POP     HL     ;                  
        POP     DE     ;                  
        POP     BC     ;                  
        POP     AF     ;                  
        RET                               
                                          
EFFECT  DI                ;               
        LD      HL.#S800  ;"Зачерняем"    
        LD      DE.#S80l  ;   экран       
        LD      BC.767    ;               
        LD      (HL).L    ;               
        LDIR              ;               
                                          
        LD      A.R       ;Пользуясь      
        AND     #l        ; регистром R   
        CP      0         ;  выбираем     
        CALL    Z.PICTURl ; один из двух  
        CP      l         ;упакованных    
        CALL    Z.PICTUR2 ;экранов.       
                                          
                                          
        LD      HL.0      ;Эта хитрая     
        PUSH    HL        ;конструкция    
        PUSH    HL        ;призвана       
        POP     DE        ;обеспечить     
        POP     BC        ;необходимую    
        LDIR              ;задержку       
        LDIR              ;для успешного  
        LDIR              ;рассмотрения   
        LDIR              ;появившейся    
        LDIR              ;на экране      
        LDIR              ;картинки....   
        EI                                
NETO    LD      A.R       ;Снова пользуя  
        AND     #03       ;R,мы "случайно"
        CP      3         ;выбираем один  
        JR      Z.NETO    ;из вариантов   
        CP      0         ;гашения экрана 
        JP      Z.TERMl   ;и переходим к  
        CP      l         ;выбранной      
        JP      Z.POGAS   ;процедуре.     
        JP      RADUGA    ;               
                                          
POGAS   CALL    C4                        
        LD      DE.0                      
        LD      B.#l4                     
C2      PUSH    BC                        
        LD      HL.#4000                  
C3      LD      A.(DE)                    
        AND     (HL)                      
        LD      (HL).A                    
        INC     DE                        
        INC     HL                        
        LD      A.H                       
        CP      #S8                       
        JR      NZ.C3                     
        EX      DE.HL                     
        LD      BC.#l770                  
        AND     A                         
        SBC     HL.BC                     
        EX      DE.HL                     
        POP     BC                        
        DJNZ    C2                        
        LD      C.7                       
        CALL    C6                        
        RET                               
C4      LD      HL.#S800                  
CS      LD      (HL).6                    
        INC     HL                        
        LD      A.H                       
        CP      #SB                       
        JR      NZ.CS                     
        RET                               
C6      LD      HL.#S800                  
C7      LD      (HL).C                    
        INC     HL                        
        LD      A.H                       
        CP      #SB                       
        JR      NZ.C7                     
        RET                               
                                          
:-----------------------------------------
: CLS SCREEN - RADUGA                     
:-----------------------------------------
RADUGA  LD      E.#F8                     
L637S   CALL    L6380                     
        HALT                              
        INC     E                         
        LD      A.E                       
        CP      #78                       
        JR      NZ.L637S                  
        RET                               
L6380   PUSH    DE                        
        PUSH    AF                        
        LD      D.0                       
L6384   PUSH    DE                        
        LD      A.#47                     
L6387   CALL    L639C                     
        DEC     E                         
        DEC     A                         
        CP      #3F                       
        JP      NZ.L6387                  
        POP     DE                        
        DEC     E                         
        INC     D                         
        LD      A.D                       
        CP      24                        
        JR      NZ.L6384                  
        POP     AF                        
        POP     DE                        
        RET                               
L639C   EX      AF.AF'                    
        LD      A.E                       
        CP      32                        
        JR      NC.LбЗBD                  
        LD      A.D                       
        CP      #l8                       
        JR      NC.LбЗBD                  
        PUSH    HL                        
        LD      HL.#S800                  
        SRL     D                         
        RR      L                         
        SRL     D                         
        RR      L                         
        SRL     D                         
        RR      L                         
        ADD     HL.DE                     
        LD      D.A                       
        EX      AF.AF'                    
        LD      (HL).A                    
        POP     HL                        
        RET                               
LбЗBD   EX      AF.AF'                    
        RET                               
                                          
                                          
                                          
:-----------------------------------------
: CLS SCREEN FROM TERMINATOR2             
:-----------------------------------------
TERMl   LD      B.7                       
L4      HALT                              
        LD      HL.lSOO0                  
L0      DEC     HL                        
        LD      A.L                       
        OR      H                         
        JR      NZ.L0                     
        LD      HL.22S28                  
L3      LD      A.(HL)                    
        AND     S6                        
        JR      Z.Ll                      
        SUB     8                         
Ll      LD      C.A                       
        LD      A.(HL)                    
        AND     7                         
        JR      Z.L2                      
        DEC     A                         
L2      OR      C                         
        LD      (HL).A                    
        INC     HL                        
        LD      A.H                       
        CP      9l                        
        JR      NZ.L3                     
        DJNZ    L4                        
        RET                               
PICTURl INCBIN  "scrl"                    
PICTUR2 INCBIN  "scr2"                    
                                          
P.S.  Совсем забыл! В is-dos есть буфер на
насколько  десятков нажатий на клавиши. Во
время   наслаждения   цветной  картикой  и
процессом  её  исчезания, вы можете нажать
серию  клавиш,  которые  подействуют сразу
после возвращения в систему. Так,например,
мне  удаётся   "вслепую"  вызвать  пользо-
вательское   меню   (2),   выбрать   пункт
"Восстановить  RAM ДИСК" (пять раз "курсор
вниз"  + ENTER) и после разворачивания RAM
ДИСКА  перейти  на  другую панель ("курсор
влево").  На  самом  же деле нажатий может
быть ещё больше и все они запомнятся!     
                                          
P.P.S.  Данная статья была написана ещё  в
феврале  этого  года и первоначально пред-
назначалась   для   электронного   журнала
ODYSSEY из г.Армавир. Однако очередной но-
мер  этого журнала по каким-то причинам до
сих пор не появился на свет. Ну а чтобы не
пропадать готовому материалу...           
                                          
-========================================-
                * * * * * 



Other articles:


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

Similar articles:
From the Editor - The authors worked on the second issue of Spectrum Progress.
Forever2e3 SE report - Report of Pol ^ Phantasy (in English).

В этот день...   23 November