(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 из г.Армавир. Однако очередной но- мер этого журнала по каким-то причинам до сих пор не появился на свет. Ну а чтобы не пропадать готовому материалу... -========================================- * * * * *