19 июня 2002


А  сейчас  совсем чуточку бреда,ну для то-
что,чтобы  оттянуть  штурм  на BRADS TALE.
Вы  знали,что  в  SE#1;2(SPECTRUM EXPERT),
текст  не печатается,а он просто LDIR'тся.
Нет,ежу  понятно,что  нельзя  просто  так:
взять  и  LDIR,перед  этим  он  строится в
памяти по нужному адресу,а потом при помо-
щи  LDIR  печатается  на экран.Он хреначит
по 32 байта 8 строк.И это все гораздо быс-
трее,чем  печатать,но  громоздко,потому не
выгодно.                                  
Помниться в ZX#8,там была "ЭПОПЕЯ",там Ме-
дноногов  рассказывал  как  Ворон'а писал.
ОН  говорил,как  совместить  прерывания  и
стек.Довольно  интересный метод,но я так и
не  вник в него,для меня это слишком слож-
но,но вот Х-TRАDEя смотрю поняли.         
Значит,у них скрол экрана через стек.Имем-
но таким методом,который более рационально
подходит,т.е.                             
         LD DE,NNNNN                      
         PUSH DE                          
nnnnn-число из экрана.Ну взяли мы из экра-
на два байта и на стек,а стек у нас на эк-
ране.И,когда  придут  прерывания  у нас не
будет  лажи на экране ввиде бегущих пиксе-
лов.А  сейчас я предложу вам программу,на-
писанную  NOTSOFT'ом специално для газеты,
но  так  и не вошедшую в газету по причине
простой до безбожности-IM2.Или проще гово-
ря прерывания.Смотрите                    
                                          
;*****************************************
       (c) 2002,NOTSOFT/ANOT GROUP        
;*****************************************
        ORG #6000                         
        DI                                
        LD HL,22528,DE,HL,ВС,767          
        INC DE:LD (HL),70:LDIR            
        LD А,3:OUT (#FE)                  
        LD HL,#4000:LD В,184              
FILL    PUSH HL                           
.32     LD А,R:LD (HL),А:INC HL           
        РОР HL:CALL DOWNHL                
        DEC В:JP NZ,FILL                  
        CALL DO                           
LOOP1   LD А,#BF:IN (#FE):RRA:JR C,LOOP1  
LLLL    CALL #C000                        
LOOP    LD А,#BF:IN (#FE):RRA:JR NC,LLLL  
        LD А,#7F:IN (#FE):RRA:JR C,LOOP   
        RET                               
DO      LD IX,#C000                       
        LD (IX),#ED:INC IX                
        LD (IX),#73:INC IX                
        LD (IX),#FF:INC IX                
        LD (IX),#FE:INC IX                
        LD HL,#4000:;    ****             
        LD DE,#4020;     ****             
        LD В,184;        ----             
L2      LD (IX),#31:INC IX                
        LD (IX),E:INC IX                  
        LD (IX),D:INC IX                  
        PUSH HL,DE                        
        LD C,16                           
L1      LD (IX),#E1:INC IX                
        LD (IX),#22:INC IX                
        LD (IX),L:INC IX                  
        LD (IX),H:INC IX                  
        INC HL,HL:DEC C                   
        JR NZ,L1                          
        РОР HL:CALL DOWNHL;     !!!!      
        ЕХ DE,HL                          
        РОР HL:CALL DOWNHL;     !!!!      
        DJNZ L2                           
        LD (IX),#ED:INC IX                
        LD (IX),#7В:INC IX                
        LD (IX),#FF:INC IX                
        LD (IX),#FE:INC IX                
        LD (IX),201                       
        RET                               
;--------------------------------------   
DOWNHL  INC H:LD А,H:AND 7:RET NZ:LD А,L  
        ADD А,32:LD L,А:RET C:LD А,H      
        SUB 8:LD H,А                      
        RET                               
                                          
UPHL    DEC H:LD А,H:AND 7:СР 7:RET NZ    
        LD А,L:SUB 32:LD L,А:RET C        
        LD А,H:ADD А,8:LD H,А             
        RET                               
;--------------------------------------   
Программа написана на STORmv1.1.          
.32-значит,что  32 раза исполнится эта ко-
манда,это наподобии REPT.Почему не исполь-
зовали  REPT,да  потому,что у нас его нет.
Хотя  STORm  понимает  такую команду,но не
работает,а жаль.                          
В  птограмме  есть демонстрационный эффект
именно  для  него  и формируем экран(.32).
На экране формируется всякая байда и после
нажатия  клавиши  начинает  скролироваться
через стек,скрол быстрый,но ест недостаток
Он  с прерываниями не любит работать.Прога
работать-то  будет,все о.k.,но при приходе
IM2  вы увидите на экране,где сейчас нахо-
дятся  прерывания.Потому  и лажово-то все.
Хотя,если  у  вас  на прерываниях не висит
музыка,а  что-нибудь такое простое,то мож-
но свобдно делать так:                    
                                          
INT     DI                                
        LD (STACK+1),SP                   
        LD SP,NNNNN                       
        PUSH AF                           
        PUSH ВС                           
        PUSH DE                           
        .......                           
        РОР  DE                           
        РОР  ВС                           
        РОР  AF                           
STACK   SP,0                              
        EI                                
        RET                               
                                          
Я  не  преводил  все регистры,которые надо
сохранить на стеке,потому что это дело уже
личное.Кому  что  надо,тот то и сохраняет.
И  вот  после этого вы на экране ничего не
увидите.Но  зачем сохранять стек,когда на-
чинаем   обрабатывать  прерывания,если  мы
пред этим делаем DI ? Да так на всякий слу
чай,все равно децл байт.                  
Да,забыл сказать прога формирует по адресу
#C000 блок кодов:                         
                                          
               LD SP,NNNNN                
               РОР HL                     
               LD (ХХХХХ),HL              
                                          
И такой блок надолго,пока не будет сформи-
ровано для всего экрана.                  
nnnnn-адрес в экране.                     
xxxxx-адрес в экране.                     
Как вы понимает,что адреса-то разные.     
И  еще,****  вот  таким вот знаком указаны
места,где можно поменять адреса.          
                                          
Эти  адреса  отвечают за сколько скролиро-
вать  будем,если  мы  скролируем вниз,т.е.
изпользуем подпрограмму DOWNHL(на самом де
ле  это  вверху  да ладно),то HLбыть вот так,и разница этих регистров дол-
жна быть 32(!!!!!).Это обязательно.       
Когда  поменяете,вычислите  сколько  линий
вам  нужно  скролировать,и поменяйте ----,
вот там находится счетчик линий.          
А если вам нужно скролировать вверх(на са-
мом деле-то вы понимаете,что вниз).То нуж-
но поменять call'ы,вместо DOWNHL,поставить
UPHL(об'ясняю  все  как ламерам :)).И соо-
тветственно поменять адреса.Тут,надеюсь по
нимаете,что  здесь  наооборот,т.е.HL>DE.А,
елси  не  понимает,то  разберитесь  в ней.
И самое главное,про прерывания не забывай-
те.Они  ой как хреново на эту прогу дейст-
вуют,потому я ее и не использую.          
Ну что ж закончу номер я на этом,BARDS ТА-
LE  сегодня  не будет,т.к. карту готовлю.А
также кое-какие еще прибамбасы.           
Так что только в следующем номере,а  может
и нет,я,надеюсь,что будет.Да и честно гово
ря,я не знаю когда выйдет следующий номер.
Этот номер вышел через три дня после преды
дущего,просто мне писать было что,да и в  
следующем есть что писать,просто я скоро в
Питер уеду(на следующей неделе),потому ско
рее всего не успею выпустить 9-ый........ 
Ладно,поживем-увидим.                     
Все,всем пока,увидимся в 9-ом номере.     



Other articles:


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

Similar articles:

В этот день...   21 November