IS-DOS
______
(C)1998 M.M.A aka UnBELIEVER/XTM
IS-DOS с картинками !!?
В незапамятно давние времена, читывал я
какой-то журнал посвященный pC. Журнал был
направлен на юзеров и из страницы в стра-
ницу, красной нитью шла тема новогодних
подарков - купите это, купите то, best по-
дарок на Новый Год, и т.д. Среди продaвае-
мого хлама был какой то CD диск, купив ко-
торый, "вы непременно освоите современные
технологии мультимедиа,не вставая из теп-
лого кресла". В качестве примера "освоения
мультимедиа-технологий", предлагалось ра-
зукрасить свой WINDOWS, используя картинки
записанные на диске, в соответствии с нас-
туающим Новым Годом. Чуть ниже приводился
рабочий экран wIN'95 где толпой резвились
снеговики, Деды Морозы и прочие зимние
аттрибуты.
"Вот зажравшиеся капиталисты!", - поду-
мал я тогда. Это что же получаеться, они
могут разукрасить свой windows к празднику
всякими там картинками, а мы должны догни-
вать на фоне синих панелей одообразного
IS-DOS'а???? Нет, непорядок!
Именно так и зародился тот самый файл
start.com, который вы можете найти на дис-
ке с журналом. Скопировав его на загрузоч-
ный IS-DOS диск, назвав start.com и пропи-
сав его в конце autoexec.bat, вы можете
смело перегружать систему и наслаждаться
rulez'ом. Ну а тем, кому интересно, как
все это работает, посвящена излагаемая ни-
же информация.
Не имея никакого представления об вут-
реннем устройстве is-dos'а и уж тем более
не зная всех тонкостей программирования
под него, я действовал чисто интуитивно.
Адрес ассемблирования был взят по аналогии
с первым попавшимся под руку .com файлом,
все регистры сохранялись на стеке перед
стартом и извлекались обратно при возвра-
щении. Как ни странно, но вся эта
конструкция заработала.
Однако незнание is-dos'а дало свои пло-
ды: если при первом запуске все проходит
гладко, то при попытке запуска start.com
из уже загруженной is-dos приводят к не-
большим глюкам. Для самой системы это не
страшно - могу дать гарантии, что сея на-
веска на is-dos не подпортит данные на ва-
шем диске.
Ниже приведен исходник start.com с ко-
ментариями по тексту. Исходник был написан
в ALASM'е и по сему используються спецефи-
ческие для этого редактора команды DISP и
INCLUDE. Три эффекта гашения экрана были
взяты мной из ZX-РЕВЮ (давно это было - с
трудом вспоминаю). Именно по этому я не
стал приводить на них комментарии.Да и са-
ми эффекты очистки вы можете смело заме-
нить на свои.
Разбирайтесь и наслаждайтесь....
ORG 30000
DISP 24000
XOR A
OUT (#FE),A
PUSH AF ;Сохраняем
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,#5800 ;"Зачерняем"
LD DE,#5801 ; экран
LD BC,767 ;
LD (HL),L ;
LDIR ;
LD A,R ;Пользуясь
AND #1 ; регистром R
CP 0 ; выбираем
CALL Z,PICTUR1 ; один из двух
CP 1 ;упакованных
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,TERM1 ;и переходим к
CP 1 ;выбранной
JP Z,POGAS ;процедуре.
JP RADUGA ;
POGAS CALL C4
LD DE,0
LD B,#14
C2 PUSH BC
LD HL,#4000
C3 LD A,(DE)
AND (HL)
LD (HL),A
INC DE
INC HL
LD A,H
CP #58
JR NZ,C3
EX DE,HL
LD BC,#1770
AND A
SBC HL,BC
EX DE,HL
POP BC
DJNZ C2
LD C,7
CALL C6
RET
C4 LD HL,#5800
C5 LD (HL),6
INC HL
LD A,H
CP #5B
JR NZ,C5
RET
C6 LD HL,#5800
C7 LD (HL),C
INC HL
LD A,H
CP #5B
JR NZ,C7
RET
;-----------------------------------------
; CLS SCREEN LIKE RADUGA - RADUGA
;-----------------------------------------
RADUGA LD E,#F8
L6375 CALL L6380
HALT
INC E
LD A,E
CP #78
JR NZ,L6375
RET
L6380 PUSH DE
PUSH AF
LD D,#00
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 #18
JR NC,L63BD
PUSH HL
LD HL,#5800
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 FROM TERMINATOR2
;-----------------------------------------
TERM1 LD B,7
L4 HALT
LD HL,15000
L0 DEC HL
LD A,L
OR H
JR NZ,L0
LD HL,22528
L3 LD A,(HL)
AND 56
JR Z,L1
SUB 8
L1 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 91
JR NZ,L3
DJNZ L4
RET
PICTUR1 INCBIN "scr1"
PICTUR2 INCBIN "scr2"
P.S. Совсем забыл! В is-dos есть буфер на
насколько десятков нажатий на клавиши. Во
время наслаждения цветной картикой и
процeссом ее исчезания, вы можете нажать
серию клавиш, которые подействуют сразу
после возвращения в систему. Так например
мне удаеться "в слепую" вызвать пользо-
ватeльское меню (2), выбрать пункт
"Восстaновить RAM ДИСК" (пять раз "курсор
вниз" + ENTER) и после разворачивания RAM
ДИСКА перейти на другую панель ("курсор
влево"). На самом же деле нажатий может
быть еще больше и все они запомняться!