|
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'а надо взять за теорему, которую надо еще дока- зать. Надеюсь, что мои догадки все же превратятся и в аксиому, а эта информация вам хоть как-то поможет.
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3