А сейчас совсем чуточку бреда,ну для то-
что,чтобы оттянуть штурм на 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: