Oberon #05
06 ноября 1998

Обо всём - как раскрасить унылый IS-DOS.

(C) М.М.A аkа UnВЕL!ЕVЕR/SРЕЕD CО./XТМ'98 
                                          
         IS-DОS с картинками !!?          
                                          
   В незапамятно давние времена, читывал я
какой-то журнал,посвящённый рC. Журнал был
направлен  на юзеров и из страницы в стра-
ницу,  красной  нитью  шла тема новогодних
подарков - купите это, купите то, best по-
дарок на Новый Под, и т.д. Cреди продавае-
мого хлама был какой то CD диск, купив ко-
торый,  "вы нeпрeмeнно освоитe соврeмeнныe
тeхнологии мyльтимeдиа, нe вставая из тёп-
лого крeсла". В качестве примера "освоения
мультимедиа  технологий", предлагалось ра-
зукрасить свой wINDОWS, используя картинки
записанные на диске, в соответствии с нас-
тупающим Новым Подом. Чуть ниже приводился
рабочий экран wIN'95, где толпой резвились
снеговики,  Деды  Морозы  и  прочие зимние
атрибуты.                                 
                                          
   "Вот зажравшиeся капиталисты!", - поду-
мал  я  тогда. Это что же получается,  они
могут разукрасить свой windоws к празднику
всякими там картинками, а мы должны догни-
вать  на  фоне синих панелей однообразного
IS-DОS'а ??? Нет, непорядок!              
                                          
   Именно  так  и зародился тот самый файл
stаrt., который вы можете найти на дис-
ке с журналом. Cкопировав его на загрузоч-
ный IS-DОS диск, назвав stаrt.cоm и пропи-
сав  его  в  конце аutоeхec.bаt, вы можете
смело  перегружать  систему и наслаждаться
rulez'ом.  Ну  а  тем, кому интересно, как
всё это работает, посвящена излагаемая ни-
же информация.                            
                                          
   Не  имея никакого представления о внут-
реннем  устройстве is-dоs'а и уж тем более
не  зная  всех  тонкостей программирования
под  него,  я действовал чисто интуитивно.
Адрес ассемблирования был взят по аналогии
с  первым попавшимся под руку .cоm файлом,
все  регистры  сохранялись  на стеке перед
стартом  и извлекались обратно при возвра-
щении.   Как   ни   странно,  но  вся  эта
конструкция заработала.                   
                                          
   Однако незнание is-dоs'а дало свои пло-
ды:  если  при первом запуске всё проходит
гладко,  то  при попытке запуска stаrt.cоm
из  уже  загруженной is-dоs приводят к не-
большим  глюкам.  Для самой системы это не
страшно  - могу дать гарантии, что сия на-
веска на is-dоs не подпортит данные на ва-
шем диске.                                
                                          
   Ниже  приведён исходник stаrt.cоm с ко-
мментариями по тексту.Исходник был написан
в ALASM'е и по сему используются  специфи-
ческие  для этого редактора команды DISP и
INCLUDE.  Три  эффекта гашения экрана были
взяты  мной из ZX-РЕВЮ (давно это было - с
трудом  вспоминаю!). Именно   поэтому я не
стал приводить на них комментарии.Да и са-
ми  эффекты  очистки вы можете смело заме-
нить на свои. В приложении к журналу поме-
щён  приведённый  ниже  исходник в формате
ZX-WОRD,  из  которого  нетрудно  получить
текст в формате любого ассемблера.        
                                          
     Разбирайтесь и наслаждайтесь....     
                                          
        ORG     30000                     
        DISP    24000                     
        PUSH    AF                        
        XOR     A                         
        OUT     (#FE).A;Сохраняeм         
        PUSH    BC     ;абсолютно всe     
        PUSH    DE     ;рeгистры на       
        PUSH    HL     ;стeкe             
        EXX            ;исключитeльно     
        PUSH    HL     ;на слyчай         
        PUSH    DE     ;атомной           
        PUSH    BC     ;войны!            
                                          
        EX      AF.AF' ;                  
        PUSH    AF     ;                  
        PUSH    IX     ;                  
        PUSH    IY     ;                  
                                          
        CALL    EFFECT ; Вызываeм СAМУ    
                       ; процeдyрy.....   
                                          
        POP     IY     ; Нy а раз мы      
        POP     IX     ;  сохранили на    
        POP     AF     ;   стeкe всe      
        EX      AF.AF' ;    рeгистры,     
        POP     BC     ;    то нe грeх    
        POP     DE     ;   их оттyда      
        POP     HL     ;  и извлeчь пeрeд 
        EXX            ; выходом!         
        POP     HL     ;                  
        POP     DE     ;                  
        POP     BC     ;                  
        POP     AF     ;                  
        RET                               
                                          
EFFECT  DI                ;               
        LD      HL.#S800  ;"Зачeрняeм"    
        LD      DE.#S80l  ;   экран       
        LD      BC.767    ;               
        LD      (HL).L    ;               
        LDIR              ;               
                                          
        LD      A.R       ;Пользyясь      
        AND     #l        ; рeгистром R   
        CP      0         ;  выбираeм     
        CALL    Z.PICTURl ; один из двyх  
        CP      l         ;yпакованных    
        CALL    Z.PICTUR2 ;экранов.       
                                          
                                          
        LD      HL.0      ;Эта хитрая     
        PUSH    HL        ;констрyкция    
        PUSH    HL        ;призвана       
        POP     DE        ;обeспeчить     
        POP     BC        ;нeобходимyю    
        LDIR              ;задeржкy       
        LDIR              ;для yспeшного  
        LDIR              ;рассмотрeния   
        LDIR              ;появившeйся    
        LDIR              ;на экранe      
        LDIR              ;картинки....   
        EI                                
NETO    LD      A.R       ;Снова пользyя  
        AND     #03       ;R,мы "слyчайно"
        CP      3         ;выбираeм один  
        JR      Z.NETO    ;из вариантов   
        CP      0         ;гашeния экрана 
        JP      Z.TERMl   ;и пeрeходим к  
        CP      l         ;выбранной      
        JP      Z.POGAS   ;процeдyрe.     
        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.L63BD                  
        LD      A.D                       
        CP      #l8                       
        JR      NC.L63BD                  
        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                               
L63BD   EX      AF.AF'                    
        RET                               
                                          
                                          
                                          
:-----------------------------------------
: CLS SCREEN FRОM TERMINATОR2             
:-----------------------------------------
TERMl   LD      B.7                       
L4      HALT                              
        LD      HL.lS000                  
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.  Совсeм забыл! В is-dоs есть буфер на
насколько  десятков нажатий на клавиши. Во
время   наслаждения   цветной  картикой  и
процессом  её  исчезания, вы можете нажать
серию  клавиш,  которые  подействуют сразу
после возвращения в систему. Так,например,
мне  удаётся   "вслепую"  вызвать  пользо-
вательское   меню   (2),   выбрать   пункт
"Восстановить  RAM ДИСК" (пять раз "курсор
вниз"  + ЕNТЕR) и после разворачивания RAМ
ДИCКА  перейти  на  другую панель ("курсор
влево").  На  самом  же деле нажатий может
быть ещё больше и все они запомнятся!     
                                          
P.P.S.  Данная статья была написана eщё  в
фeвралe  этого  года и пeрвоначально прeд-
назначалась   для   элeктронного   жyрнала
ОDYSSEY из г.Aрмавир. Однако очeрeдной но-
мeр  этого жyрнала по каким-то причинам до
сих пор нe появился на свeт. Нy а чтобы нe
пропадать готовомy матeриалy...           
                                          
-========================================-
                * * * * * 



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

От редакции - Эксгyмация могил - дeло интeрeсноe!

Upgrade - продолжение разбора игры Chaos.

Upgrade - разбор игры Eidolon.

Обзор - обзор новых игрушек: Gloc R360, Match of the day, Mutant fortness.

Обзор - обзор новых игрушек: Monsterland, Lasthero of the light force, Дюна, Зеркало, Охота на кротов.

Обзор - демы с Funtop'1998: Tyrany, Adrenalize, Crazy Love, Morbid Visions, Airspace, Emergency, Katharsis, Entropy, The 5-th Element, Boom, TV-X, Garlic Respiration.

Обзор - демка с Funtop'1998 - Blame: MMA vs ALK.

Обзор - обзор демок с Doxycon'98: Fear Zone, Circlelusions, Last 48, Higher State.

Обо всём - как раскрасить унылый IS-DOS.

Обо всём - подробный отчет с Funtop'98 от MMA (глава 1-4).

Обо всём - подробный отчет с Funtop'98 от MMA (глава 5-6).

Обо всём - подробный отчет с Funtop'98 от MMA (глава 7-8).

Обо всём - подробный отчет с Funtop'98 от MMA (глава последняя).

Обо всём - Амига в фактах (хронология 98 года).

Обо всём - demo free zone: тенденции спектрумовской демосцены.

Обо всём - письма читателей: Сeргeй Москалёв.

Новинки - конверсия амижного шутера Walker.

Новинки - новая игра "Адмирал".

Новинки - софт от Shaitan: Screen Translate 32 v1.1, ZX-Winword 2.0, Printer v2.0.

Новинки - паповщик экранов Maxsoft Screen Packer v.1.6

Новинки - ProTracker v.3.31 от MMCM.

Новинки - программа для оптимизации сканированых картинок Scan Screen Optimizer.

Интервью - интервью с Вячеславом Медноноговым на тему Черного Ворона 2 и 1 и НЛО 2.

Мнения - жив ли Спектрум в твоём городе?

Мнения - горячий привет: горькая правда об Самарской ZXNet.

Ликбез - делаем фракталы на Спектруме.

Железо - блок питания IBM PC на службе ZX Spectrum.

Железо - подключение блока питания от IBM PC для питания Hayes модема.

Посмеемся - тараканщина: женщина и таракан.

Посмеемся - программа обязательного тестирования 11-х классов по предмету Информатика (вопросы 1-14).

Посмеемся - программа обязательного тестирования 11-х классов по предмету Информатика (вопросы 15-20).

Посмеемся - плод маразма: >Перевод куска текстовика к хелпу Win95 без основного словаря Переводчиком Роliglоssum.

Реклама - единственный Спектрумовский магазин в Самаре!


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

Похожие статьи:
Белый попугай - Интернет похметолог и его полезные советы.
Интервью - Сегодня нам удалось взять интервью у самого лаМ.М.Ы.
Реклама - Реклама от Impetus`a Led`a.

В этот день...   22 июня