Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сжатая графика Pac-man 2(SEGA)
На страницу Пред.  1, 2, 3, 4, 5  След.
 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Вт Июл 11, 2006 12:01 am    Заголовок сообщения: Ответить с цитатой

Что-то разговор вообще отошёл от темы. Тема называется "Сжатая графика Pac-man 2(SEGA)". Выше я привёл код процедуры распаковки LZ, которым запакована почти вся графика в игре, и сказал, что могу разъяснить, как она работает, чтобы афтару стал понятен алгоритм распаковки и запаковки и можно было написать пакер. HoRRoR, тебе нужно описание?
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вт Июл 11, 2006 7:02 am    Заголовок сообщения: Ответить с цитатой

КОНЕЧНО!!!!!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Вт Июл 11, 2006 1:54 pm    Заголовок сообщения: Ответить с цитатой

Советую отдебужить этот код для лучшего понимания алгоритма. Для примера будем использовать основной шрифт (адрес 160073). Просто поставь брякпоинт в GensDebug на 0415C6 перед появлением логотипа SEGA. Предположим, что мы уже зашли в процедуру распаковки, тогда в регистре A0 должно быть записано 160073. А A1 указывает на FF7000. В любой момент A1 указывает на ту ячейку, в которую будет записано значение, но пока она ещё не обработана. Итак,
Код:
000016E2   MOVE.B    (A0)+,D3
000016E4   MOVEQ     #$01,D4
000016E6   LSL.W     D3,D4
000016E8   SUBQ.W    #$1,D4

Из начала сжатых данных всегда считывается один байт. Его предназначение таково: как известно, для LZ надо указывать, на сколько байт смотреть назад (указатель) относительно текущей позиции, и количество повторяемых байт; всего в нашем алгоритме под указатель и число повторений отводится два байта (см. ниже), а в этом первом байте указывается, сколько бит отводится под указатель. В нашем примере это 0B, т.е. под указатель 11 бит, а под число повторений - оставшиеся 5 бит. После логического сдвига (строка 16E6), аналогичного возведению двойки в степень, получаем "размер словаря", в нашем случае это 2^11=2048=800h байт. Далее, из D4 вычитается 1 (получится D4=000007FF), это надо для усечения больших указателей (чтобы они не превышали размер словаря) командой AND (строка 1708).
Теперь собственно разжатие.
Код:
000016EA   MOVE.B    (A0)+,D0
000016EC   BEQ       $0000172C

Считывается "управляющий" байт. Если он нулевой, мы выходим из процедуры, распаковка закончена.

Код:
000016EE   LSR.B     #1,D0
000016F0   BEQ       $000016EA
000016F2   BCC       $000016F8

Последовательно просматриваются биты управляющего байта, начиная с младшего. Команда LSR сдвигает все биты D0 вправо, а самый правый бит записывается во флаг C. Если байт D0 стал нулевым (BEQ), возвращаемся к чтению следующего управляющего байта. {По-моему, этот момент немного глуп, т.к. так просматриваются не все биты (см. в конце), и если нам надо несколько раз применить LZ, которому соответствует нулевой бит (см. ниже), и так совпадёт, что все нулевые управляющие (т.е. указывающие, что надо применить LZ) биты находятся в старшей части байта, то они не будут просмотрены, т.к. байт к тому времени станет нулевым, и придётся считывать следующий байт. Таким образом, нельзя применить LZ больше 7 раз подряд, потому что при применении >=8 раз весь управляющий байт был бы нулевым и от него не было бы толку. Решение проблемы см. в конце} Если выдвинутый бит нулевой (команда BCC), то переходим к LZ-распаковке (начиная с 16F8), иначе
Код:
000016F4   MOVE.B    (A0)+,(A1)+
000016F6   BRA       $000016EE

просто считываем несжатый байт и возвращаемся к просмотру битов управляющего байта (16EE). В нашем примере 1-й байт равен FF, следовательно мы просто считаем 7 байт (не 8, потому что после 8-го сдвига байт станет нулевым).

Отсюда идёт сама LZ-распаковка:
Код:
000016F8   CMP.B     #$08,D3
000016FC   BEQ       $00001712

Если под указатель отводится 8 бит (ровно байт), то под число повторений тоже 1 байт, поэтому применяется упрощённая схема чтения указателя (переход к строке 1712).
Если указатель не 8-битный, то из считанного слова (см. ниже) надо извлечь отдельно указатель и отдельно число повторений.

Код:
000016FE   MOVE.B    (A0)+,D1
00001700   LSL.W     #8,D1
00001702   MOVE.B    (A0)+,D1

Читаем слово. Здесь нельзя применить move.w (a0)+,d1, т.к. a0 может оказаться нечётным, а с нечётных адресов нельзя читать слова.
Итак, мы имеем слово, содержащее указатель и число повторов. В нашем примере первое такое слово равно 2804h=0010 1000 0000 0100b. В младших 11 битах хранится "указатель" - число, которое надо вычесть из текущего адреса (регистр A1), чтобы получить тот адрес, с которого надо повторять байты. Как видно, это 0 0000 0100b = 4h. В нашем примере A1 в этот момент равен 00FF700F, значит, байты надо повторять с адреса 00FF700F - 4 = 00FF700B. В старших пяти битах хранится число повторений: 0010 1b = 5h, т.е. надо повторить пять байт с адресов FF700B-FF7010 в адреса FF700F-FF7013.

Код:
00001704   MOVE.W    D1,D2
00001706   SUBQ.W    #$1,D2
00001708   AND.W     D4,D2
0000170A   SUB.W     D4,D1
0000170C   SUBQ.W    #$1,D1
0000170E   LSR.W     D3,D1
00001710   BRA       $0000171E

Извлекаем отдельно указатель (регистр D2) с помощью сдвигов и число повторений минус 1 в D1. Вычитание единицы нужно для цикла с постусловием: если D1=0, цикл повторится 1 раз, если D1=1, 2 раза и т.д.

Код:
00001712   MOVEQ     #$00,D2
00001714   MOVEQ     #$00,D1
00001716   MOVE.B    (A0)+,D1
00001718   SUBQ.B    #$1,D1
0000171A   MOVE.B    (A0)+,D2
0000171C   SUBQ.B    #$1,D2

Упрощённое чтение указателя и числа повторений (если каждое значение по 8 бит).

Код:
0000171E   NEG.W     D2
00001720   LEA       $FF(A1,D2.L),A2

Берём отрицание указателя (для вычитания его из текущего адреса) и получаем адрес для повторений.

Код:
00001724   MOVE.B    (A2)+,(A1)+
00001726   SUBQ.W    #$1,D1
00001728   BCC       $00001724

Копирование байтов в цикле с постусловием.

Код:
0000172A   BRA       $000016EE

Возвращаемся к просмотру управляюещго байта.

Код:
0000172C   RTS

Выход.

Думаю, самый непонятный момент будет с преждевременным выходом из просмотра управляющего байта (строка 16F0). Объясню подробнее, в чём дело:
пусть D0=EFh=1110 1111b
После 4 сдвигов мы скопируем 4 байта из рома, затем применим 1 раз LZ, затем после ещё 2 сдвигов (всего получается 4+2+1=7) скопируем ещё 2 байта, и будет D0=01h=0000 0001b. Этот единичный бит указывает на то, что надо скопировать ещё один байт, но после сдвига байт D0 становится нулевым, проверка на ноль идёт раньше, чем проверка на значение бита (строки 16F0 и 16F2), поэтому мы перейдём к чтению следующего управляющего байта, а бит просто потеряется.
Как видно, самый старший бит в любом случае теряется, это надо учесть. Лучше делать его всегда единичным, чтобы не потерялись предыдущие нулевые биты (т.к. байт D0 может стать нулевым уже не после 7, а после 6 и т.д. сдвигов). Поэтому если мы хотим применить LZ 8 раз подряд, надо сделать отдельно 7 раз LZ (байт 80h=1000 0000b), а оставшийся 1 раз LZ указывать уже в следующем управляющем байте.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вт Июл 11, 2006 2:36 pm    Заголовок сообщения: Ответить с цитатой

Большое спасибо, сейчас буду разбираться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вт Июл 11, 2006 3:51 pm    Заголовок сообщения: Ответить с цитатой

Пока что вот что накатал:
Код:

Dim bte as byte
Dim adres as integer
adres=1

Get #1, A0, D3 '000016E2 B
A0=A0+1
D4=1 '000016E4  W
D4=Val(Right$(Hex$(D4*(2^D3)),4))'000016E6  W
D4=D4-&H100 '000016E8  B
L000016EA:
Get #1, A0, bte '000016EA B
D0=bte
A0=A0+1
If D0=0 Then Goto L0000172C '000016EC
L000016EE:
If D0/2=int(D0/2) then rbit=0 else rbit=1 '000016EE B
D0=Val(Right$(D0*(2^(-1))),2)
If D0=0 then Goto L000016EA '000016F0
If rbit=0 then GoTo L000016EA '000016F2
Get #1, A0, bte '000016F4  B
Put #2, adres, bte
A1=A1+1
adres=adres+1
GoTo L000016EE '000016F6
'000016F8 B
If D3=8 Then GoTo L00001712 '000016FC
Get #1, A0, bte '000016FE B
D1=bte
A0=A0+1
D1=Val(Right$(Hex$(D1*(2^8)),4))'00001700 W
Get #1, A0, bte '00001702 B
D1=bte
A0=A0+1
D2=D1 ' 00001704 W
D2=D2-1 ' 00001706 W

Ну как, у меня получается?

[edit]

Нет, тут не правильно. Никак не могу понять, почему D4=2^D3? Ведь логический сдвиг проводится с D4, а в операции 2^D3 его нет, что я проглядел?

[edit]

Немного подправил код.

[edit]

Подожди ка, чтобы число сдвинуть влево, надо его умножить на два в степени кол-ва сдвижений?

[edit]

Еще раз подправил код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 12, 2006 9:37 am    Заголовок сообщения: Ответить с цитатой

Кстати, насчет аватары. Может IE с PNG не всегда дружит?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 12, 2006 12:39 pm    Заголовок сообщения: Ответить с цитатой

А как понять "LEA $FF(A1,D2.L),A2"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 12, 2006 3:34 pm    Заголовок сообщения: Ответить с цитатой

Начинаю потихоньку въезжать - я ступил, что пытался понять именно по коду, а когда в hex-едиторе открыл, потихоньку доходить начало.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 12, 2006 6:09 pm    Заголовок сообщения: Ответить с цитатой

ВРОДЕ ПОНЯЛ... Razz

Да, правда PEREVODчик сказал, я правда офигел, когда узнал насколько он прост. Это код сложный(для меня, по крайней мере), а алгоритм прост, как незнаю что.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Ср Июл 12, 2006 6:36 pm    Заголовок сообщения: Ответить с цитатой

Пока сам не разберёшься, ничьи подталкивания не помогут осмыслить СУТЬ, все чужие советы способны лишь вдолбить конкретные примеры.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 13, 2006 11:58 am    Заголовок сообщения: Ответить с цитатой

ПОМОГИТЕ!!! Я написал прогу, но когда она разпаковывает 16 тайлов(512 байт), дальше указатели становятся слишком большими и идет всякая чушь, потипу числа повторений 0. В чем дело??? Может там какой промежуточный байт есть? И что такое "словарь"? Для чего нужен его размер?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 13, 2006 1:04 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
идет всякая чушь, потипу числа повторений 0

Это я ошибся, но указатели действительно слишком большие, например заполнено всего 512 байт а указатель равен 544 байтам(это указатель 01000100000, кол-во повторов 00100(байты 20 22 по адресу $16016D). Как с эти бороться?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Чт Июл 13, 2006 2:30 pm    Заголовок сообщения: Ответить с цитатой

Не знаю, как у твоего анпакера получилось, что указатель по адресу $16016D, дебуггер показывает, что указатель по адресу $16016B, там написано 0002, т.е. указатель извлекается как двойка, а число повторений действительно как бы 0 (это если по битам читать), но там так устроено, что 0 интерпретируется как максимум, т.е. в данном случае $20=32 повторения (потому что 5 бит на число повторений). Ща свой напишу.
И не забывай, у Моторолы идёт прямой порядок байт, т.е. в каком порядке они записаны в памяти, в таком они идут в самом числе, так что по адресу $16016D записано не 2022, а 2220.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 13, 2006 2:48 pm    Заголовок сообщения: Ответить с цитатой

GHOST, СПАСИБО ОГРОМНОЕ!!!!!!!!!!
Из-за этого нуля и не работало! Еще раз спасибо, век буду благодарен!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 13, 2006 3:07 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Не знаю, как у твоего анпакера получилось, что указатель по адресу $16016D, дебуггер показывает, что указатель по адресу $16016B, там написано 0002

Ну правильно, а следующий указатель по адресу $16016D. Управляющий байт 80 - 10000000, находится по адресу $160166, это значит, что будет считываться 7 раз по два байта(вернее по одному указателя), 2220 по адресу $16016D считается 4-ым по счету.
Главное, что анпакер заработал, скоро допишу до пакера.

Ghost писал(а):
И не забывай, у Моторолы идёт прямой порядок байт, т.е. в каком порядке они записаны в памяти, в таком они идут в самом числе, так что по адресу $16016D записано не 2022, а 2220.

Это я просто ошибся.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Чт Июл 13, 2006 4:34 pm    Заголовок сообщения: Ответить с цитатой

Щет, я уже анпакер написал. Вотъ, если у тя паскаль есть, скомпиль (тока я не стал делать для имён файлов paramstr, просто имя в проге меняй, и адрес для распаковки там же).
Код:
{$G+}
var f,fa:file;
    bufr:array[0..16383] of byte;
    bufw:array[0..32767] of byte;
    res,d4:word;
    d0:byte;

begin
assign(f,'pac-man2.bin');
reset(f,1);
assign(fa,'pacman2.bin');
rewrite(fa,1);
seek(f,$160073);
blockread(f,bufr,sizeof(bufr),res);
asm
lea di,bufw
lea bx,bufr
mov cl,[bx]
inc bx
mov ax,1
shl ax,cl
dec ax
mov d4,ax

@u_byte:
mov al,[bx]
inc bx
test al,al
jz @exit
mov d0,al

@lsr:
shr d0,1
jz @u_byte
jae @lz

mov ah,[bx]
inc bx
mov [di],ah
inc di
jmp @lsr

@lz:
mov ax,[bx]
add bx,2
rol ax,8

mov dx,ax
dec dx
and dx,d4
inc dx
sub ax,d4
dec ax
shr ax,cl
inc ax

mov si,di
sub si,dx
@copying:
mov ch,[si]
inc si
mov [di],ch
inc di
dec ax
jnz @copying
jmp @lsr

@exit:
sub di,offset bufw
mov res,di
end;
blockwrite(fa,bufw,res,res);
close(f);
close(fa);
end.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 13, 2006 4:55 pm    Заголовок сообщения: Ответить с цитатой

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

А вот мой код(VB знаю где-то на три, поэтому так нерационально):
Код:

Dim bte As Byte
Dim uprbyte As Integer
Open file1 For Binary As 1
Open file2 For Binary As 2
adr2 = 1
adr1 = Val("&H" + Adress) + 1


Get #1, adr1, bte
'MsgBox "Считан начальный байт " & Hex(bte) & " по адресу " & Hex$(adr1 - 1)
adr1 = adr1 + 1
num = 16 - bte
dic = 2 ^ bte - 1

getuprbyte:
Get #1, adr1, bte
'MsgBox "Считан управляющий байт " & Hex(bte) & " по адресу " & Hex$(adr1 - 1)
cnt = 0
adr1 = adr1 + 1
uprbyte = bte
If uprbyte = 0 Then
    'MsgBox "Управляющий байт по адресу " & Hex$(adr1) & " равен нулю - выход."
    GoTo ENDUNP
End If
   

count:
cnt = cnt + 1
If cnt = 8 Or uprbyte = 0 Then GoTo getuprbyte  '
If uprbyte / 2 = Int(uprbyte / 2) Then rbit = 0 Else rbit = 1
'MsgBox "Правый бит байта " & Hex(uprbyte) & " равен " & rbit
uprbyte = uprbyte \ 2
If rbit = 1 Then
    Get #1, adr1, bte: adr1 = adr1 + 1
    Put #2, adr2, bte: adr2 = adr2 + 1
    'MsgBox "Правый бит равен 1, просто считываем байт " & Hex(bte) & " по адресу " & Hex(adr1 - 2) & " и пишем байт " & Hex(bte) & " по адресу " & Hex(adr2 - 2)
    GoTo count
Else
    Get #1, adr1, bte: adr1 = adr1 + 1: pbyte1 = bte
    Get #1, adr1, bte: adr1 = adr1 + 1: pbyte2 = bte
    'MsgBox "Правый бит равен 0, читаем байты " & Hex(pbyte1) & " и " & Hex(pbyte2) & " по адресу " & Hex(adr1 - 3)
        pbyte = (pbyte1 * 256) + pbyte2
    For koef = 1 To 16
    If pbyte / 2 = pbyte \ 2 Then bitst = "0" & bitst Else bitst = "1" & bitst
        pbyte = pbyte \ 2
    Next koef
   
    bits2 = Right$(bitst, 16 - num)
    bits1 = Left$(bitst, num)
   
    For r = 0 To Len(bits1) - 1
        byte1 = byte1 + Val(Mid(bits1, Len(bits1) - r, 1)) * (2 ^ r)
    Next r
    For r = 0 To Len(bits2) - 1
        byte2 = byte2 + Val(Mid(bits2, Len(bits2) - r, 1)) * (2 ^ r)
    Next r
        & " . Переводим в числа, первый байт " & byte1 & " , второй байт " & byte2
    If byte2 = 0 Then byte2 = 2048
    adr2b = adr2 - byte2
   If adr2b < 1 Then MsgBox adr2b & "   " & adr2 & " - " & byte2 & "|||" & Hex(adr1 - 3) & "   " & bitst
    If byte1 = 0 Then byte1 = 32   
    For cntr = 1 To byte1
    Get #2, adr2b, bte: adr2b = adr2b + 1
    Put #2, adr2, bte: adr2 = adr2 + 1
    If bte < 0 Then MsgBox adr1 & "   " & adr2 & "    " & adr2b
    Next cntr
    End If
    bitst = ""
    pbyte = 0
    bits = 0
    bitsn1 = 0
    bitsn2 = 0
    byte1 = 0
    byte2 = 0
    adr2b = 0
    GoTo count
    MsgBox "Почему выход?"
ENDUNP:
Close
MsgBox "Всё!"


[edit]

Подправил код, была та же проблема с нулём, но только не в количестве повторов, а в указателях.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Июл 14, 2006 8:55 am    Заголовок сообщения: Ответить с цитатой

А что такое "брякпоинты" и вообще, как правильно дебаггером пользоваться?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Июл 14, 2006 1:47 pm    Заголовок сообщения: Ответить с цитатой

Как вам заставочка?

Если не видно, качать FlashGet'ом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пт Июл 14, 2006 2:17 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Как вам заставочка?


Жить можно. Cool
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Июл 14, 2006 2:29 pm    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
HoRRoR писал(а):
Как вам заставочка?


Жить можно. Cool

Если бы не кой-какие проблемы, жить было бы еще можнее Smile.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пт Июл 14, 2006 7:52 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
А что такое "брякпоинты" и вообще, как правильно дебаггером пользоваться?


Ты что, до сих пор не знаешь, что такое брякпоинт. В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка Very Happy ) нужен для того, чтобы затормозить выполнение программы в определённом месте. Например, по адресу h0001C045 (то есть, программы останавливает своё выполнение как только она дойдёт до этого адреса) или на флаг нуля или на команду или другое действие.

Ну как правильно пользоваться дебагером зависит только от дебагера. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Июл 14, 2006 8:30 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
HoRRoR писал(а):
А что такое "брякпоинты" и вообще, как правильно дебаггером пользоваться?


Ты что, до сих пор не знаешь, что такое брякпоинт. В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка Very Happy ) нужен для того, чтобы затормозить выполнение программы в определённом месте. Например, по адресу h0001C045 (то есть, программы останавливает своё выполнение как только она дойдёт до этого адреса) или на флаг нуля или на команду или другое действие.

Ну как правильно пользоваться дебагером зависит только от дебагера. Very Happy


А где его ставить то?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пт Июл 14, 2006 10:17 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Ura_Orlov писал(а):
HoRRoR писал(а):
А что такое "брякпоинты" и вообще, как правильно дебаггером пользоваться?


Ты что, до сих пор не знаешь, что такое брякпоинт. В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка Very Happy ) нужен для того, чтобы затормозить выполнение программы в определённом месте. Например, по адресу h0001C045 (то есть, программы останавливает своё выполнение как только она дойдёт до этого адреса) или на флаг нуля или на команду или другое действие.

Ну как правильно пользоваться дебагером зависит только от дебагера. Very Happy


А где его ставить то?


В GensDebuger.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пт Июл 14, 2006 11:13 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка Very Happy )


Контрольная точка - это чекпоинт, а бряк - это Точка Останова. Я не придираюсь, просто на заметку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5  След.
Страница 4 из 5

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group