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'а надо взять за теорему, которую надо еще дока- зать. Надеюсь, что мои догадки все же превратятся и в аксиому, а эта информация вам хоть как-то поможет.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября