Adventurer #12
31 января 2001

Программирование - Процедуры для получения значений необходимых при создании чего-то на бордере или мультиколора.

     (C) Deadie/HorrorSoft/CPU

     Вообще-то я вот о чём. Пока я кодил,
а  точнее  собирал  HorrorFasTest , мне в
голову   закралась  крамольная  мысля  об
autoconfig'е для всяких там multicolor'ов
и  border'ных  эффектов.  Для меня до сих
пор остается загадкой, почему demomaker'ы
фиксят  такие эффекты только (в основном)
под  две  модели  Спектрума  ( Pentagon и
Scorpion ).  Как многие знают, для созда-
ния  чего-то  на бордере или мультиколора
надо знать количество строк (линий) экра-
на  /tpl/  и  количество  тактов  на одну
строку (линию) /lps/. Естественно, исходя
из этих значений и задаются константы для
процедур  вывода  на экран. Вот эти самые
значения  можно получить, использовав ни-
жеприведенные процедурки. Замечу, что ис-
тинные  значения вы получите, только если
выключен турборежим. И для начала приведу
процедуру,  которая  определяет,  включен
или выключен turbo mode:

               ATTENTION!!
  На авторство нижеприведенных процедур
              НЕ ПРЕТЕНДУЮ!

;Определение состояния turbo mode
; вх: -
;вых: A=0 - выкл, A=1 - вкл
TURBO   CALL INT_TRB
        LD A,B
        CP #00
        JR Z,TURBOFF
        CP #02
        JR NC,TURBON
        LD A,C
        CP #41
        JR NC,TURBON
TURBOFF XOR A
        RET
TURBON  LD A,1
        RET
TRB_INT DI
        LD A,#C3
        LD (#BCBC),A
        LD HL,INT_TR1
        LD (#BCBD),HL
        LD A,#BA
        LD I,A
        IM 2
        LD DE,#0000
        EI
        HALT
        LD HL,INT_TR2
        LD (#BCBD),HL
TRB_IN3 INC DE
        LD B,#0F
        DJNZ $
        LD A,R
        JR INT_TR3
TRB_IN1 EI
        RET
TRB_IN2 POP HL
        LD C,E
        LD B,D
        IM 1
        EI
        RET

     А  теперь  самое главное - процедуры
расчета lps и tpl:

;Рассчет кол-ва строк растра
;(линий в экране)
; вх: -
;вых: DE - lps
CLC_LPS CALL IM2SET
        LD A,#C3
        LD (#FEFE),A
        LD HL,LPS2
        LD (#FEFF),HL
        LD DE,0
        EI
        HALT
        LD HL,LPS3
        LD (#FEFF),HL
LPS1    INC DE
        LD B,#0F
        DJNZ $
        LD A,R
        JR LPS1
LPS2    EI
        RET
LPS3    POP HL
        CALL IM1SET
        EI
        RET

     Почти во всех Спектрумах сделано 312
либо  320 строчек (к примеру: в фирменном
312, в Пентагоне - 320). Продолжим:

;Рассчет кол-ва тактов в строке растра
; (линии экрана)
; вх: -
;вых: A - tpl
CLC_TPL CALL IM2SET
        LD A,#C3
        LD (#FEFE),A
        LD HL,TPL1
        LD (#FEFF),HL
        LD DE,0
        LD HL,TPL2
        EI
        HALT
TPL1    LD (#FEFF),HL
        LD HL,TPL3
        EI
        HALT
TPL2    LD (#FEFF),HL
        NOP
        NOP
        NOP
        INC HL
        EI
        INC DE
        JP $-1
TPL3    POP HL
        POP HL
        EX DE,HL
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD A,N ;N=0 -312, N<>0 -320 строк
        OR A;^сюда заносите число
        LD BC,156
        JR Z,TPL4;156 (312) и 160 (320)
        LD BC,160
        XOR A
TPL4    OR A
        SBC HL,BC
        INC A
        JR NC,TPL4
        CALL IM1SET
        EI
        RET

;Процедурки установки прерываний
IM2SET  DI
        LD HL,#FE00
        LD A,H
        LD B,L
IM2SETL LD (HL),A
        DEC HL
        DJNZ IM2SETL
        LD (HL),A
        LD A,H
        LD I,A
        IM 2
        RET

IM1SET  DI
        LD A,#3F
        LD I,A
        IM 1
        RET


     А длина INT'а в тактах рассчитывает-
ся еще проще: tpl*lps (только  для noWAIT
Спеков ) и все!

     ┌───────╥─────────┬─────────┐
     │ lps   ║ 312 tpl │ 320 tpl │
     ├───────╫─────────┼─────────┤
     │ 216   ║ 67392   │ 69120   │
     │ 220   ║ 68640   │ 70400   │
     │ 224   ║ 69888   │ 71680   │
     │ 228   ║ 71136   │ 72960   │
     │ 232   ║ 72384   │ 74240   │
     └───────╨─────────┴─────────┘

     Вообще-то,  для настройки необходимо
знать положение INT'а относительно начала
кадра, но об этом в следующей серии...

     Вместо  PS:  Я не кодер, поэтому мои
измышления  по  поводу  autoconfig'а надо
взять  за теорему, которую надо еще дока-
зать.  Надеюсь,  что  мои  догадки все же
превратятся и в аксиому, а эта информация
вам хоть как-то поможет.




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

Похожие статьи:
Coding - Directory System: описание системы каталогов для TR-DOS.
Авторы журнала - ZX-Format No.4
Софт - о глюках в NICRON'е.

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