Deja Vu #01
30 июня 1997
  TR-DOS  

Coding - Режим IM 2 при работе в TR-DOS (вариант Loader'а).

<b>Coding</b> - Режим IM 2 при работе в TR-DOS (вариант Loader'а).
(C)1997 CARDINAL

      Режим IM 2 при работе TR-DOS.
__________________________________________

                  * * *

  Сегодня  мы поговорим о дисковых загруз-
чиках.  Если вы не поняли мою мысль, я по-
ясню. Кто видел INSULT MEGADEMO или BATTLE
COMMAND (cracked by STALKER), те, наверно,
заметили,  что  LOADER'ы  там музыкальные,
именно о таких LOADER'ах пойдет наш разго-
вор.  Совместить музыку, бегушку и др. на-
вороты  с  загрузчиком  не так сложно, как
кажется.  Надо музыку и др. навороты поса-
дить  на  прерывания а LOADER оставить как
есть.  Каким  же  должен  быть LOADER ? Он
должен работать с портами ВГ напрямую и не
запрещать  прерывания  во  время работы, а
дальше  дело техники. Хотя есть один нюанс
в  этом  деле. Надо правильно организовать
прерывания, а как я сейчас поясню. Во вре-
мя прихода очередного импульса прерывания,
на  стек  ложится  адрес  возврата, если в
этот  момент  было включено ПЗУ TR-DOS, то
оно  отключается, и начинает работать наша
программа обработки прерывания. Когда наша
программка  обработки  прерываний  сделает
свое  дело, то она возвращается в основную
программу по RET или RETI. А чтобы не было
обломов  при возврате именно в ПЗУ TR-DOS,
надо  вместо  RET или RETI надо ставить JP
#3D2F.  Ниже  дан  приблизительный вариант
LOADER'а.

        ORG 25000
        DI
        LD SP,24999
        CALL 49152       ;инициализируем
        DI               ;музыку
        LD HL,#BE00      ;организовываем
        LD D,H           ;прерывания
        LD E,L
        LD B,L
        LD C,L
        INC E
        INC B
        LD (HL),#BF
        LD A,H
        IM 2
        LD I,A
        LDIR
        EI
        LD DE,#0100      ;в DE помещаем
                         ;трек и сектор
        LD HL,#4000      ;в HL адрес
        LD B,#1B         ;в B длина
        CALL LOADER      ;запуск
JOY1    LD A,#7F
        IN A,(254)       ;после загрузки
        RRCA             ;ожидаем нажатия
        JR C,JOY1        ;SPACE
        CALL 49152       ;гасим музыку
        DI
        RET              ;возврат

LOADER  LD A,(#5CF6)
        INC E
        LD (PUT_DR+1),A
        LD A,I
        LD A,#F3
        JP PO,INT
        LD A,#FB
INT     LD (PUT_INT),A
LOOP    LD A,D
        AND A
        RRA
        LD C,#7F
        CALL DOS
        LD A,#3C
        JR NC,PUT_DR
        LD A,#2C
PUT_DR  OR 0
        LD C,#FF
        CALL DOS
        LD A,#18
        PUSH BC
        PUSH DE
        LD BC,#011F
        CALL DOS
        LD IX,#3EF5
        CALL TRDOS
        LD D,A
        LD IX,#20B1
        CALL TRDOS
        POP DE
        POP BC
LOOP1   PUSH BC
        PUSH DE
        LD A,E
        LD C,#5F
        CALL DOS
LOOP2   PUSH HL
        LD C,#1F
        LD A,#80
        CALL DOS
        LD C,#7F
        LD IX,#3FD5
        CALL TRDOS
        JP P,REPEAT
        CALL CH_REG
PUT_IN  NOP
        POP HL
        LD A,(#5CD6)
        OR A
        JR NZ,LOOP2
        LD A,#7F         ;опрашиваем кла-
        IN A,(254)       ;вишу SPACE во
        RRCA             ;время загрузки
        CALL NC,KON      ;вызов подпрог-
                         ;раммы если было
                         ;нажатие
        POP DE
        POP BC
        INC H
        BIT 4,E
        JR NZ,N_TR
        INC E
        DJNZ LOOP1
        JR OK_QUIT
N_TR    LD E,#01
        INC D
        DJNZ LOOP
OK_QUIT DEC E
        LD (#5CF4),DE    ;перед выходом
                         ;сохраняем трек
                         ;и сектор
        RET
KON     DI               ;запрещаем преры-
                         ;вания
        LD A,#F3         ;кладем байт #F3
        LD (PUT_INT),A   ;в ячейку PUT_INT
        XOR A            ;восстанавливаем
        LD I,A           ;прежний режим
        IM 1             ;прерываний
        LD C,#FD         ;очищаем AY CHIP
        LD H,A
QUIT1   LD B,#FF
        OUT (C),A
        LD B,#BF
        OUT (C),H
        INC A
        CP 16
        RET Z
        JR QUIT1
        RET              ;вых. из подпрог-
                         ;раммы
;вся эта бурда  нужна  для того, чтобы при
;нажатии SPACE во время загрузки, дальней-
;шая загрузка пошла с нормальной скоростью

CH_REG  XOR A            ;читаем регистр
        LD (#5CD6),A     ;состояния
        LD HL,#0007
        PUSH HL
        INC A
        PUSH AF
        LD IX,#2099
        JR TRDOS
REPEAT  POP HL
        POP DE
        POP BC
        JP LOOP
DOS     LD IX,#2A53
TRDOS   PUSH IX
        JP #3D2F

        ORG #BFBF        ;обработка преры-
        PUSH AF          ;вания
        PUSH HL
        PUSH DE
        PUSH BC
        PUSH IX
        PUSH IY
        CALL 49158       ;запуск музыки
        POP IY
        POP IX
        POP BC
        POP DE
        POP HL
        POP AF
        EI
        JP #3D2F         ;переход на адрес
                         ;#3D2F где стоит
                         ;RET

  А  сейчас  небольшой комментарий. Не ве-
шайте  на  прерывания  много  прибамбасов,
иначе  загрузка будет проходить медленнее,
чем  с  магнитофона.  Последние  дорожка и
сектор сохраняется в ячейке #5CF4. Все ад-
реса  в  листинге произвольные, и по-этому
меняйте  их  на  удобные для вас, в случае
необходимости. Вообще-то LOADER может быть
любым, лишь бы он не запрещал прерывания и
не глючил при ошибке чтения.

END...




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

Coding - Описание программы AntiRST8 (для ZS256).

Coding - Режим IM 2 при работе в TR-DOS (вариант Loader'а).

Software - Oбзор системных программ : ZX-Turbo Assembler v3.10 demo, Flash Music Module Convertor v 1.1, Pro Tracker v2.4, Str Music Decompiles v1.1, Extremes Tracker v 1.3, Softcopy v1.3.

Software - Новинки демосцены: Over The Top, Brain Sugery, Braind Crash, Paraxyzm, Nerve Trackmo, Insane, Trashe, Iris Uldtra demo.

Software - Обзор новых игровых программ: Mortal Kombat, Magic Stripes, Return to Home 4, Чёрный Ворон, Athena, Rescate Atlantida, Skull & Crossbones, Mario Islands demo.

Software - Описание системной программмы: Professional Xoring System v1.0.

Апперативчик - Об оболочке журнала и управлении в ней.

Апперативчик - От авторов

Доска почета - "oVERFILE" всю страну кинули". О Кемеровской Спектрумовской Сцене. Пара слов о писи.

Доска почета - Попса, Must Die !

За бугром - Богатые тоже плачут?

За бугром - Интервью с Джоном Ритманом.

Капля припоя - Использование принтера СМ-6337 с компьютером Скорпион ZS 256 Turbo+.

Капля припоя - О доработке компьютера Scorpion ZS256 (Схема доработки AY).

Проба пера - Рассказ "Война продолжается"

Реклама - Реклама и объявления ...

Семь и 1/2 - Из неопубликованного: Стих "Кроха сын к отцу пошел..."

Семь и 1/2 - Повесть о настоящем Werewolfe или Virtual'но амижный синдром.

Семь и 1/2 - Прострелить себе ногу (руководство программистам).

Тема - Музыкальные возможности ZX-Spectrum'а: что было, что есть и что будет.


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

Похожие статьи:
Обратная связь - контакты редакции.
Change Of Plan
Demoparty - КАСик из Sinclair Club организует KIDSOFT'2004.
Мнения у котелка - Вот она - новая, суперклассная, неповторимая газета Городок!
Обмен опытом - Game Making 2: всевозможные методы вывода спрайтов (по мотивам игры Full Shit).

В этот день...   21 ноября