PDA

Просмотр полной версии : Рисуем на BORDER



breeze
15.03.2009, 03:24
ммм... обсмотрелся я тут темы про «Вспоминаем демки с эффектом на бордюре (http://zx.pk.ru/showthread.php?t=8950)», и решил тряхнуть стариной :rolleyes: прикинул немного кода и решил вывести статическую картинку на border, но слегка удивился: вот если скажем делать простой горизонтальный эффект (вся линия одним цветом), то как бы всё мило и красиво... а вот если скажем сделать цветные вертикальные полосы, то края будут как бы на пару пикселей колбаситься туда сюда, и это уже далеко не красиво :( пробовал данные выводить в порт разными способами и просто последовательностью (по старинке):



ld a,1
out (254),a
ld a,2
out (254),a
ld a,3
out (254),a
ld a,4
out (254),a
ld a,5
out (254),a
ld a,6
out (254),a
ld a,7
out (254),a
ld a,0
out (254),a


и типо модным способом через OUTI



ld hl,data
ld bc,#00fe
outi
outi
outi
outi
outi
outi
outi
outi

data db 1,2,3,4,5,6,7,0


результат абсолютно одинаков :mad:

Посему интересует такой вопрос, это так всегда было ? тоесть на динамических эффектах этого просто не заметно, а на статической картинке всё глюки, как на ладони, или же есть какой-то финт ушами который я не знаю ? :eek:

GM BIT
15.03.2009, 03:52
Мне этот вопрос также не давал покоя. psndcj мне часть разъяснил

GM
Стабилизация эффектов на бордюре.
Если сделать
ORG 25000
EI
LD C,254
LD H,0
LD L,7
L1 HALT
LD DE,2000 : маленько задержим
L2 DEC DE
LD A,D
OR E
JR C,L2
OUT (C),L
OUT (C),H
LD A,127
IN A ,(254)
RRA
JR C,L1
RET
Почему эта полосочка на бодюре не стоит на месте а дергается, может IM 2 или как? Еще жмешь на клаву что-то меняется.

psndcj
потому что используется стандартный обработчик прерываний из ПЗУ - а там и кнопки опрашиваются и еще чтото делается... надо задавать табличку для своего обработчика и включать IM 2 типа так

di
ld hl,imtab:ld a,h,i,a
ld a,low int_jump
ld (hl),a:inc l:jr nz,$-2
inc h:ld (hl),a
ld l,h:ld (hl),#c3 //код команды JP #xxxx
ld de,ТВОЙ_ОБРАБОТЧИК
ld (hl),e:inc hl:ld (hl),d
im 2:ei
imtab - табличка 257 байт с ровного адреса (#xx00), inter - джампер на обработчик (младший и старший байты равны) - к примеру в наших демах используется #be00 и #bfbf соответственно.
а и важно - чтобы работало везде - надо ставить в памяти в пределах #8000-#bfff

GM
А IM 2 шагает сразу по INT или с задержкой?

psndcj
когда приходит прерывания процессор читает из адреса I*256+#ff (но на самом деле младший байт может плавать на многих клонах, для этого и делается табличка 257 байт) - и переходит на этот адрес. при этом выполняется предыдущая команда до конца - поэтому даже если если процесор выполнял HALT - наш обработчик будет работать сначала фрейма +0.3 такта... это как-то можно устранить программно - но тут уж я не помощник - помню в ZX-Ревю каком-то было полное описание работы бордюрных и мультиколорных эффектов.

GM
При включеном IM 2 (в обработчике RET) после halt на следующей команде эмулятор выдает от 19 до 22 тактов, сейчас пытаюсь устранить, тоже в ступоре.

GM BIT
15.03.2009, 04:07
Все, что я пока успел напробывать.
Там два файла в формате STORM.
BO - твердо стоящее изображение на бордюре.
BO1 - начало эффекта шторы (не доделано)

psndcj
15.03.2009, 07:57
в принципе уже писал - но еще раз =) дерганье на пару пикселов происходит из-за того, что когда делается HALT при наступлении прерывания процессор завершает обработку этой команды, а она делается 4 такта. ну то есть мы не знаем сколько тактов в начале фрейма у нас будет занято - 0,1,2,3... типа так (немного косноязычно, и может неправильно в терминологии, но смысл таков).

на фирменных машинах (а может только на 48х?) если HALT выполняется во время построения экрана (когда луч идет по основному экрану), то прерывание начинается всегда точно. а вот на наших клонах этот фокус не прокатывает =(

есть вариант - написать цикл длительностью 71680 тактов (под Пентагон) - тогда дергаться ничего не будет =) для статики вполне пойдет.

GM BIT
15.03.2009, 08:56
В ZX Ревю 4-5 за 96г. есть что-то связанное с убиранием 0-3 такта.

breeze
15.03.2009, 11:30
не :) историю про IM2 я знаю (забыл упомянуть что именно так я и рисую), а вот с HALT теперь понятно :(

Добавлено через 1 минуту

Все, что я пока успел напробывать.

Спасибо посмотрю!

Activator
15.03.2009, 12:05
В ZX Ревю 4-5 за 96г. есть что-то связанное с убиранием 0-3 такта.
Цитата с той статьи: ".....Правда у FILTER'а есть недостаток - он долго работает (несколько прерываний). Таким образом, с его помощью возможна только первоначальная синхронизация, а когда кадры пропускать нельзя, Вам придется выкручиваться без него." Так что если для бордер-эффекта используется комп типичный Пентагону - то в этом случае потребуется оптимизация кода так чтобы процессорного времени он занимал кратное 4-м тактам.

ram_scan
15.03.2009, 15:06
В каком-то ленточном мегалоадере от Players Premier была вертикальная зебра на бордюре в случае сбоя чтения.

Стояла колом и не дергалась на всем на чем только можно. Какая конкретно игруха хоть тресни не вспомню, но их не так много было. Можно подсмотреть там как они выкрутились.

psb
15.03.2009, 16:13
есть вариант - написать цикл длительностью 71680 тактов (под Пентагон) - тогда дергаться ничего не будет =) для статики вполне пойдет.

это через чур уж... вот как правильно:


оптимизация кода так чтобы процессорного времени он занимал кратное 4-м тактам.

VNN_KCS
15.03.2009, 22:16
Если пускаете в работу скроллер, индикаторы, плейер музыки и пр., нужно эти подпрограммы доработать так, чтоб они в любое время при работе занимали одно и то-же количество времени(такты проца). Тогда ничего не будет дёргаться.
А если будет то сделайте следующее:
ld hl,0
ld de,0
ld bc,10;это значение будете подбирать
ldir
Я лично использовал, в своё время, именно это для устранения дёрганья.
Сначала опрос клавы на O - P (меньш - больше), а когда подбирал, опрос клавы удалял.

psb
15.03.2009, 23:52
Я лично использовал, в своё время, именно это для устранения дёрганья.
ну так а смысл в чем? в итоге сделать чтоб все было кратно 4 тактам. вот и весь секрет.

проще уж тогда подбирать так:
scf
ret nc
ret nc
ret nc

либо кусок вообще не нужен, либо оставлять 1-3 ret'а.

GM BIT
16.03.2009, 07:33
Не понял почему кратное 4 но с виду работает.

org #8000
di
ld hl,#b200; включаем im 2
ld de,#b201
ld bc,256
ld (hl),#b3
ld a,h
ld i,a
ldir
ld a,201
ld (#b3b3),a
im 2

l1 ei ;4
halt ;4

ld a,(hl) ;7 ???????? Дополняем цикл

ld hl,0 ;10 Задержим
ld de,0 ;10
ld bc,500 ;10
ldir ;21*500=10500+16 (на выход)

ld a,7 ;7 Вывод полоски
out (#fe),a ;12
xor a ;4
out (#fe),a ;12

ld a,#7f ;7 опрос батона
in a,(#fe) ;11
rra ;8
jr c,l1 ;10
im 1
ret

Итого цикл 16632 - делится на 4
Результат - устойчивое статическое изображение

breeze
16.03.2009, 09:17
Не понял почему кратное 4 но с виду работает.

гм... по логике всё верно, но вот в unreal что-то не совсем :( может проблемы с эмулем ? :mad:

GM BIT
16.03.2009, 09:30
Использую Spectaculator (режим Pentagon 128).
В приложении файл BO формат Storm

psndcj
16.03.2009, 09:35
неверно же такты посчитаны =)

l1 ei ;4
halt ;4

ld a,(hl) ;7 ???????? Дополняем цикл

ld hl,0 ;10 Задержим
ld de,0 ;10
ld bc,500 ;10
ldir ;21*500=10500+16 (на выход) //21*499 + 16 = 10495

ld a,7 ;7 Вывод полоски
out (#fe),a ;12//11 - ошибка в питерской книге - верная дока на оффсайте (http://z80.info/z80sean.txt)
xor a ;4
out (#fe),a ;12 //11

ld a,#7f ;7 опрос батона
in a,(#fe) ;11
rra ;8//4
jr c,l1 ;10//12

итого получается - 10607 тактов =) странно кстати - видимо я тож где-то ступил...

ну и еще строчку ld a,h,i,a:im 2 забыл вставить, из-за этого не работает =)

у меня в SMT'шном анрыле на удивление работает... причем полоска не по центру экрана (как у Бриза на шоте), а с левого края.

GM BIT
16.03.2009, 09:56
Текст подправил. Про неправильные Питерские такты вообще первый раз слышу (спасибо) всегда пользовался и парился. Полоска у меня также слева. И теперь совсем непонятно почему она замерла. Может не 4 а нечетное число

VNN_KCS
16.03.2009, 10:24
ну так а смысл в чем? в итоге сделать чтоб все было кратно 4 тактам. вот и весь секрет.
Вот и я об этом. Каждый выкручивается по своему.

гм... по логике всё верно, но вот в unreal что-то не совсем может проблемы с эмулем ?
У меня в Unrealfix программа Dynamice в режимах Пентагона и Скорпиона работает по разному. Я имею ввиду картинку на бордюре. С виду создаётся впечатление, что у этих клонов разное количество тактов на построение одной линии экрана.
насколько я помню - у всех СНГшных клонов 224 такта а у зарубежных другое,
216 вроде. Может кто просветит? Зараннее спасибо.

Добавлено через 14 минут

ld hl,0 ;10 Задержим
ld de,0 ;10
ld bc,500 ;10
ldir ;21*500=10500+16 (на выход) //21*499 + 16 = 10495
Здесь эта процедура используется для задержки, чтоб полоска вышла на видимую часть бордюра. Я же использовал для выравнивания числа тактов, в конце всей программы. Значение ВС минимально возможное.
А так можно долго подбирать, если рисуешь большую картинку.

GM BIT
16.03.2009, 12:32
Еще вопрос по последней программе:
Если в дебагере Spectaculator'a поставить остановку на ld a,(hl) счетчик тактов в этот момент всегда будет показывать 29т из 71680
Откуда эти 29 кто объяснит? (вроде бы ret, ei, halt и все, или я чего-то не понимаю)

TmK
16.03.2009, 13:00
Совет сделать все кратным 4 тактам я понял... Т.е. чтоб код всей программы выполнылся за время кратное 4 тактам (необязательно одинаковое в каждом прерывании).
Вопрос1: В каком эмуле удобно смотреть кол-во тактов за прерывание и т.п.?
Вопрос2: Как синхронизироваться с нулевым отсчетом
Вопрос3: Сколько тактов на разных клонах длится INT, и как его вычислять, После выполнения HALT проходит сколько тактов? (длительность INT + 4 такта выполнения HALT + 0..3 смещение по кратности 4), Как на эти характеристики влияет М1?

З.Ы.: Сам сталкнулся с данной проблемой при написании демки, а для некоторых эффектов мне важно смещение в 10тактов. Причем расчитанные данные исходя из того что я знаю не подошли, пришлось подстраивать визуально, что не есть гуд...

VNN_KCS
16.03.2009, 17:26
Вопрос2: Как синхронизироваться с нулевым отсчетом
С команды HALT начинается прорисовка экрана вместе с бордюром.

Добавлено через 14 минут

Вопрос3: Сколько тактов на разных клонах длится INT, и как его вычислять, После выполнения HALT проходит сколько тактов?
Мне кажется так: HALT - пошла прорисвка, затем IM2 обработчик - его такты. Ну а потом всё остальное. 4 такта HALT-а так или иначе войдут в программу. Если не на первом, так на втором INT-е.
Вычисление INT-а: число тактов на горизонтальную линию помножь на количество линий растра. Например Пентагон - 224х320=71680.
Была у меня программка вычисляющая всё это(не моя), но всё ушло в небытие.

VNN_KCS
16.03.2009, 21:44
GM BIT вот несколько исходников с бордюром и даже музыкой.
Может поможет чем либо. Только в Аласме. Там и сам Аласм.

mishutka
16.03.2009, 23:47
Вот и я об этом. Каждый выкручивается по своему.

У меня в Unrealfix программа Dynamice в режимах Пентагона и Скорпиона работает по разному. Я имею ввиду картинку на бордюре. С виду создаётся впечатление, что у этих клонов разное количество тактов на построение одной линии экрана.
насколько я помню - у всех СНГшных клонов 224 такта а у зарубежных другое,
216 вроде. Может кто просветит? Зараннее спасибо.


так верно вы говорите - время построения линии у скорпиона и пентагона разное

breeze
17.03.2009, 00:11
GM BIT вот несколько исходников с бордюром и даже музыкой.
Может поможет чем либо. Только в Аласме. Там и сам Аласм.

вааааааааааааааааау! это супер! :)

psndcj
17.03.2009, 07:33
У меня в Unrealfix программа Dynamice в режимах Пентагона и Скорпиона работает по разному. Я имею ввиду картинку на бордюре. С виду создаётся впечатление, что у этих клонов разное количество тактов на построение одной линии экрана.
насколько я помню - у всех СНГшных клонов 224 такта а у зарубежных другое,
216 вроде. Может кто просветит?

на Скорпионе нечетные команды округлятся до четных в большую сторону (то есть вместо 7 будет 8), вроде причем всегда. на фирменных тачках округление происходит при построении экрана только (то есть пока луч рисует бордюр, такого нет). на 48х компьютерах 224 такта, на 128, +2, +3 - 228.

так как к бордюру дышу сравнительно параллельно, может что-то и не точно...

TmK
17.03.2009, 09:58
VNN_KCS я немножко не это имел ввиду под нулевым отсчетом :)

Команда HALT выполняется в цикле длительностью четыре машинных такта. Если в это время пришел кадровых синхроинмульс, цикл выполнения HALT прерывается и программа продолжается.
Если обозначить машинные такты HALT как halt0, halt1, halt2, halt3, то возможны следующие ситуации (цикл выполнения прерывается после завершения всех 4 тактов команды):

halt0 КСИ
halt1
halt2
halt3

halt0
halt1 КСИ
halt2
halt3

halt0
halt1
halt2 КСИ
halt3

halt0
halt1
halt2
halt3 КСИ

В первом варианте длительность HALT от начала КСИ = 4 такта, во втором =3, в третьем =2, в последнем=1.


следующий вопрос был по поводу растактовки относительно КСИ, т.е. например для Пентагона так(?):

Х-тактов КСИ
Y-тактов HALT (1..4 тактов)
71680-X-Y свободных тактов

или как?

VNN_KCS
17.03.2009, 10:53
или как?
Откровенно говоря не знаю. Всё что знал - это то что я узнал из литературы и собственного обыта работы с бордюром. Я собрал много компов в своё время Ленинград 1, 2, АТМ 3 модели, ЛЬвов, Краснодар и наконец Пентагон. А вот работу внутри процессора не совсем понял, хоть в литературе много написано.
Наверное это надо спросить людей наподобие тех, которые создают эти клоны.

psb
17.03.2009, 13:51
Х-тактов КСИ
не важно сколько тактов длится инт. это время вообще не привязано к тактам на пентагоне (у меня оно было порядка 72 тактов! при этом короткие прерывания успевали срабатывать аж 2 раза подряд).

но есть время перехода на программу прерывания, оно составляет порядка 17 тактов (но могу ошибаться). и вот тогда свободных тактов будет 71680-(0..3)-17.

проверить легко. делаем программу, которая по HALT вызывает прерывание. в прерывании настраивается другой адрес прерывания, а дальше EI и куча нопов. во втором прерывании извлекается из стека адрес, на котором произошло прерывание.


псевдокод:


InitInt(Int1)
halt
jr $


Int1:
InitInt(Int2)
int11:
ei
ds 20000; 20000 nop'ов
jr $; на всякий случай

Int2:
pop hl; адрес на котором произошло прерывание
hl=hl-Int11; сколько выполнилось 4х-тактовых команд
hl=hl+_time_of_calling_&_working_InitInt(); общее время свободных тактов за прерывание
print(hl)
jr $


вам ведь именно это надо, а не теорию, куда сколько тактов уходит.

VNN_KCS
17.03.2009, 16:51
делаем программу, которая по HALT вызывает прерывание. в прерывании настраивается другой адрес прерывания
А при постсроении BORDER-эффекта оно тебе надо?
Ты вообще о чём?
Поправляю своё мнение. Переадресацию INT-a не делал, а вот в один INT выполнялась одна прога, а в другой другая - это делал. Эффект, согласитесь, нехилый. см. ZX Time 10.
Кому надо - скину интро, ломайте, не жалко.

Добавлено через 4 минуты

не важно сколько тактов длится инт.
А вот здесь ты вообще не прав. Чувствуется что ты с бордюром ни гу-гу.
А может я и не прав.

DDp
17.03.2009, 18:34
Команда HALT выполняется в цикле длительностью четыре машинных такта. Если в это время пришел кадровых синхроинмульс, выполнение HALT прерывается...
Никание команды INT-ом не прерываются! Команда всегда выполняется до конца и только в конце команды присходит (или не происходит) срабатывание прерывания.


The CPU honors a request at the end of the current instruction if the internal software-controlled interrupt enable flip-flop (IFF) is enabled.

А, вот, если бы было так, как вы описали, бордюрные эффекты как раз и не дергались никогда.

VNN_KCS
17.03.2009, 18:52
Никание команды INT-ом не прерываются! Команда всегда выполняется до конца и только в конце команды присходит (или не происходит) срабатывание прерывания.
А вот на мой взгляд команда HALT означает "остановить, отработать прерывание и начать сначала"
По крайней мере так оно ПРОГРАММНО и делается.

SAM style
17.03.2009, 19:07
А вот на мой взляд команда HALT означает "остановить и начать сначала"
По крайней мере так оно ПРОГРАММНО и делается.
HALT циклится сам на себя до тех пор пока процессор не примет прерывание (а если они запрещены, то это навечно). Каждый раз генерируется M1 и проходят положеные 4 такта. Если внутри них был приём прерывания (не приход INT и не КС, хотя с ними это связано), то по завершении M1 зацикливание прерывается, и процессор принимает сигнал прерывания.

VNN_KCS
17.03.2009, 19:15
Никание команды INT-ом не прерываются!
Та ты шо! (sorry Ukranion slang)

Добавлено через 7 минут

а если они запрещены, то это навечно
Здесь стопудово согласен. CPU HALTED на эмуле лицезрел неоднократно. На Спекки этого не пишется, но чувствуется. Сам по приколу это использовал.
Кстати в начале программ я использовал EI, HALT. Угадайте - почему?

Добавлено через 9 минут

HALT циклится сам на себя до тех пор пока процессор не примет прерывание
А если разрешены - то я прав.

Vitamin
17.03.2009, 21:44
А если разрешены - то я прав.
Дык он как раз и расписал поведение программы при включенных прерываниях.
Не прерываются они. Ни в процессе выполнения, ни в процессе выборки из памяти. Я вот только не помню, как ведет себя процессор, если INT целиком перекрывается исполнением одной длинной команды. DDp, ты вроде как-то этот вопрос на практике проверял.

DDp
17.03.2009, 23:15
Я вот только не помню, как ведет себя процессор, если INT целиком перекрывается исполнением одной длинной команды. DDp, ты вроде как-то этот вопрос на практике проверял.
Про LDIR-ы вроде давно извесно, находится поиском. (я проверял длинную последовательность префиксов)

psb
17.03.2009, 23:26
если INT целиком перекрывается исполнением одной длинной команды.
если это не LDIR и подобные, то инт пропускается. был у друга такой экземпляр пентагона. короткий инт был - изредка пропускались прерывания, в демах было заметно.

А вот здесь ты вообще не прав. Чувствуется что ты с бордюром ни гу-гу.
ты просто не понял, что я хотел сказать.
я говорил не о времени от инта до инта, а про длину самого инта. она значения не имеет, главное, чтоб инт был установлен "между командами". и вот с этого момента начинается обработка прерывания (точнее сначала проц положит адрес возврата в стек, потом сменит PC и т.д. - вот на это израсходуется сколько-то тактов).

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

можно, кстати, определять, ваитовая машина, неваитовая, или даже частичноваитовая ли (как фирменные).

Добавлено через 47 секунд

я проверял длинную последовательность префиксов
какой результат?

Vitamin
18.03.2009, 08:06
Про LDIR-ы вроде давно извесно,


если это не LDIR и подобные,

LDIR - это не особо длинная команда, всего 21 такт (хотя и она может перекрыть).


(я проверял длинную последовательность префиксов)
Вот про нее и говорю.

TmK
18.03.2009, 11:10
Поняно) Придется лезть схемы смотреть... осциллограмм не нашел(

Добавлено через 28 минут

не важно сколько тактов длится инт. это время вообще не привязано к тактам на пентагоне (у меня оно было порядка 72 тактов! при этом короткие прерывания успевали срабатывать аж 2 раза подряд).

но есть время перехода на программу прерывания, оно составляет порядка 17 тактов (но могу ошибаться). и вот тогда свободных тактов будет 71680-(0..3)-17.


На самом деле важно как расположен инт относительно КСИ и сколько машинных тактов прошло от момента начала отрисовки экрана до выполнения первой команды нашего обработчика прерываний, а не кол-во свободных тактов (видимо я вопрос неправильно поставил)
Если ИНТ и КСИ совпадают, то имеем описанную тобой ситуацию:

Приход ИНТ+КСИ - нулевой отсчет тактов прерывания и пикселов экрана (на данном этапе невидимых)
1) 1..4 Кол-во машинных циклов HALT оставшихся после прихода ИНТ (0 быть не может, т.к. в данном случае HALT "размянулся" с ИНТ)
2) N тактов обработка INT процессором
3) Начало выполнения подпрограммы прерывания

по 2 пункту прилагаю найденную осциллограмму.

Т.е. о начала КСИ до выполнения первой команды нашего обработчика прерываний проходит N+1..4 тактов

Или кто то хочет меня поправить?

TmK
18.03.2009, 11:41
.....

psb
18.03.2009, 19:37
На самом деле важно как расположен инт относительно КСИ и сколько машинных тактов прошло от момента начала отрисовки экрана до выполнения первой команды нашего обработчика прерываний, а не кол-во свободных тактов
может я ошибаюсь, никогда не проглядывал этот момент в схемах, но если есть КСИ, зачем делать еще один сигнал точно такой же частоты сдвинутый по фазе?
мне кажется они должны совпадать.


0 быть не может, т.к. в данном случае HALT "размянулся" с ИНТ
вот это еще тоже вопрос. но так ли важен этот такт? все же гораздо проще подобрать задержку на глаз.

DDp
18.03.2009, 20:21
Я вот только не помню, как ведет себя процессор, если INT целиком перекрывается исполнением одной длинной команды.
(я проверял длинную последовательность префиксов)
Вот про нее и говорю.
какой результат?
http://zx.pk.ru/showthread.php?t=6978&page=3

GM BIT
18.03.2009, 21:12
GM BIT вот несколько исходников с бордюром и даже музыкой.
Может поможет чем либо. Только в Аласме. Там и сам Аласм.
Чего-то бегучка не хочет запускаться, вроде все правильно делаю. У всех так или у меня только? Понравилась реализация потактовой задержки.
А по поводу процедуры из PSG-WINS где настройка на INT вообще не понял для чего она.
А так в принципе все понятно. Спасибо за примеры.

VNN_KCS
19.03.2009, 08:53
Чего-то бегучка не хочет запускаться, вроде все правильно делаю. У всех так или у меня только? Понравилась реализация потактовой задержки.
А по поводу процедуры из PSG-WINS где настройка на INT вообще не понял для чего она.
Процедура нужна для настройки на первый такт INT-а. Попробуй ее убрать и прорисовка бордюра будет начинаться по разному при каждом запуске.
Почему скролл не пошёл - для меня загадка. я перед отправкой попробовал на унреале и спектакуляторе.
Ты ничего не менял? Щас скачаю и попробую. Может где глюк прошёл при закачке.

VNN_KCS
19.03.2009, 09:56
Проверил - всё работает. Загрузил Аласм, W - загрузил скролл, А- отассеблил, R - запустил, по пробелу вернулся в аласм.
Я использую унреал, полноэкранный режим, border - wide, driver=ddraw
Кстати там не весь текст выводился, получи исправленное.