(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: