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

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


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

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

Ghost писал(а):
Дебаггер (не "именно для M68K", а для всей сеги в целом - так даже лучше) есть в Gens.

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


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

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

Кто-нибудь, объясните мне пожалуста, что такое регистр и с чем, его едят, а еще, как им пользоваться и сколько их, всего восемь, что-ли?
А что такое стек?

Хотя бы объясните, как понять эти строки, а дальше я попробую сам разобраться:
Код:

000016E2   MOVE.B    (A0)+,D3
000016E4   MOVEQ     #$01,D4
000016E6   LSL.W     D3,D4
000016E8   SUBQ.W    #$1,D4
000016EA   MOVE.B    (A0)+,D0
000016EC   BEQ       $0000172C

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



Зарегистрирован: 07.07.2006
Сообщения: 105
Откуда: Kirov

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

HoRRoR писал(а):
что такое регистр и с чем, его едят

Они необходимы для управления, адресации памяти и для арифметических вычислений
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


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

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

PEREVODчик писал(а):
HoRRoR писал(а):
что такое регистр и с чем, его едят

Они необходимы для управления, адресации памяти и для арифметических вычислений
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти.

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



Зарегистрирован: 07.07.2006
Сообщения: 105
Откуда: Kirov

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

PEREVODчик писал(а):
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти.

* в раздумье*"Так,я хоть сам-то понял,что сказал."

A0-A7-адресные регистры(adress register)
D0-D7-регистры данных(data register)
Их восемь и они 32-битные.
*Про себя*
"Надо бы мне пореже морозить такую чушь."
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


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

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

PEREVODчик писал(а):
PEREVODчик писал(а):
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти.

* в раздумье*"Так,я хоть сам-то понял,что сказал."

A0-A7-адресные регистры(adress register)
D0-D7-регистры данных(data register)
Их восемь и они 32-битные.
*Про себя*
"Надо бы мне пореже морозить такую чушь."

С кем не бывает? Smile

А что значит плюс в (A0)+ и # в #$01, и что за $01?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
PEREVODчик



Зарегистрирован: 07.07.2006
Сообщения: 105
Откуда: Kirov

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

HoRRoR писал(а):
А что значит плюс в (A0)+

Если не ошибаюсь, присвоить значение по адресу A0.
P.S. А ты по какой доке изучаешь асм?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


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

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

PEREVODчик писал(а):
HoRRoR писал(а):
А что значит плюс в (A0)+

Если не ошибаюсь, присвоить значение по адресу A0.

Вот я не пойму, в чем будет разница между "MOVE.B (A0)+,D3" и "MOVE.B A0,D3", а еще, в чем разница между перемещением слова и байта. Если регистр=4 байта, то при перемещении одного байта, куда он пойдет и как использовать оставшееся место? Еще бы понять, где находятся флаги и когда они меняются и как действует условный переход.

PEREVODчик писал(а):
P.S. А ты по какой доке изучаешь асм?

По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
PEREVODчик



Зарегистрирован: 07.07.2006
Сообщения: 105
Откуда: Kirov

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

Почитай http://www.tv-games.narod.ru/txtz/segabase/92guide.rar
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


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

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

PEREVODчик писал(а):
Почитай http://www.tv-games.narod.ru/txtz/segabase/92guide.rar

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


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

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

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



Зарегистрирован: 13.10.2005
Сообщения: 204
Откуда: Краснодар/Королёв

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

Надеюсь, это как-то поможет (если где-то ошибся, пожалуйста поправляйте)..

000016E2 MOVE.B (A0)+,D3
=====================
копирует байт, находящийся по адресу A0 (т.е. сам адрес содержится в регистре A0), в младший байт регистра D3 (у регистра D3 изменится только младший байт). После чего, регистр A0 автоматически увеличивается на 1 (т.е. адрес смещается на 1). Знак плюс и обозначает то, что адрес будет увеличен ПОСЛЕ копирования байта. А размер увеличения соответствует размеру перемещаемых данных (в данном случае 1 байт).

000016E4 MOVEQ #$01,D4
====================
Регистр D4 принимает значение $01 (точнее $00000001), т.е. изменяется ВЕСЬ регистр D4. Знак решетки означает, что присваивается конкретное число. (Если бы решетки не было, то это значило бы, что присваивается число, находящееся по адресу $00000001, хотя при обращении к памяти обычно пишутся скобки).

000016E6 LSL.W D3,D4
==================
Логический сдвиг влево. Все биты в регистре D4 сдвигаются влево D3 раз. "Выдвинутые" влево биты теряются (ну один правда сохранится в флаге C), а вправа добавляются нули. Если не идет речи об отрицательных числах, то эта операция равносильна умножению D4 на 2^D3 (2 в степени D3). Т.е. если, к примеру, D4=01, D3=03, то после операции D4 = 08.

000016E8 SUBQ.W #$1,D4
====================
D4 уменьшается на $1.

000016EA MOVE.B (A0)+,D0
=====================
Аналогично тому как в первой операции, байт по адресу A0 (но не по тому же адесу, что был в первой операции, т.к. он был увеличен на 1), копируется в младший байт регистра D0. И снова потом A0 увеличивается на 1 байт.

000016EC BEQ $0000172C
=====================
Переход к выполнению программы по адресу $0000172C, если флаг Z=1, в противном случае ничего не происходит. А на флаг Z в данном случае повлияет предыдущая операция MOVE. (Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0)


А вот ссылка, которую мне дал в свое время Amorpho[US]:
http://www.ticalc.org/pub/text/68k/68kpm.zip
Если изучаешь 68000 - обязательно должен иметь это.


Последний раз редактировалось: GrayLightTaliz (Пн Июл 10, 2006 12:17 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


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

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

GrayLight писал(а):
Надеюсь, это как-то поможет (если где-то ошибся, пожалуйста поправляйте)..

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


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

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

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


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

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

HoRRoR писал(а):
По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался.


Слишком разные материалы. Ты бы сначала разобрался с одним процессором - либо Интелом, либо Моторолой (M68000 проще), ато знания будут сумбурные.


GrayLight писал(а):
(Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0)


Если D0 получится в итоге=0, так как Z описывает результат подсчёта, а не значение операндов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


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

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

АнС писал(а):
HoRRoR писал(а):
По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался.


Слишком разные материалы. Ты бы сначала разобрался с одним процессором - либо Интелом, либо Моторолой (M68000 проще), ато знания будут сумбурные.

Теперь список уменьшился до "68k asm tutorial" и MOTOROLA M68000 FAMILY Programmer’s Reference Manual".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



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

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

HoRRoR писал(а):
А если стоит .W, это значит, что операция проводится только с двумя первыми байтами?


Возьмем например команду MOVE.B A0,D3
В регистре A0=00012E0F
B регистре D3=00024EEE
После неё стоик буква B. Это означает, что команда берёт один байт из регистра A0, то есть 0F перетаскивает его в D3, то есть после перетаскивания в D3 получается 00024E0F. Если же после команды стояла буква W, то значит надо брать слово из A0, то есть после выполнения в D3 получается 00022E0F. Если стоит буква L, значит берётся Двойное Слово, то есть после выполнения D3=A0. Всё просто.

Возьмем например команду MOVE.W (A0),D3
В регистре A0=00012E0F
B регистре D3=00024EEE
По адресу 00012E0F = AF 01 45 01

Для начала следует заметить, что в памяти все (ну бывают исключения) данные хранятся в обратном порядке байт, то есть AF014501 на самом деле будет выглядеть 014501AF. И ещё, если регистр или цифры выделен скобками (Например: (A2) или ($001221EA), это значит, что данные будут браться из памяти по адресу, а не из регистра (или если цифры, то не цифры), то есть A0<>(A0), $001221EA<>($001221EA)
Так, после команды стоит буква W, это значит, что будет браться слово из память по адресу A0, то есть AF 01 и перемещаться в регистр D3. Не забывайте про правило!!! То есть в регистре D3 будет 000201AF (а не 0002AF01!!!). Ну если стоит B, то просто перемешается байт. Если L, то Двойное слово.

Возьмем например команду MOVE.B ($00101A00),D3
B регистре D3=00024EEE
По адресу 00101A00 = 11 AA 10 00

Здесь всё аналогично. Только в качестве указателя не регистр, а само значение. В регистре D3 будет 00024E11

Возьмем например команду MOVE.W $1A00,D3
B регистре D3=00024EEE
По адресу 00101A00 = 11 AA 10 00

Эта команда перемешает Двойное слово $1A00 в регистр D3. Следует заметить, что здесь указатель размера указывает не совсем только на размер. Число $1A00 находится сразу после команды, то есть в HEX коде это будет выглядеть так (XX XX код команды).
XX XX 00 1A A4 10 04
Это значит если стояла буква L, то команда была такого вида MOVE.L $10A41A00,D3. Если B то просто MOVE.B $00,D3.

Это всё.

Да и стек (по английски PUSH) - это временное место в памяти для хранения Регистров, Цифр.
Вот в процессоре Pentium команда PSH EAX (EAX - это 32 битный регистр) записывала в стек регистр EAX, а команда POP EAX вставляла регистр обратно.
_____________________________________________________________
GrayLight писал(а):
000016EC BEQ $0000172C
=====================
Переход к выполнению программы по адресу $0000172C, если флаг Z=1, в противном случае ничего не происходит. А на флаг Z в данном случае повлияет предыдущая операция MOVE. (Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0)


Эх... понаписали тут в этом ассемблере. Вот команда JMP. Разве непонятно, что она делает?! Это ж безусловный переход. А вот команда BEQ. Попробуй пойми. В intel есть команды условного перехода JZ - переход если флаг нуля равен 1, JNZ - переход если флаг нуля равен 0. Всё так понятно. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


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

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

Да... Shocked Жалко, что тут нет смайлика, чешущего голову :)

Впрочем, большое спасибо за разъяснение.
Посмотри на код, я правильно делаю?
Код:

000016E2   MOVE.B    (A0)+,D3           ' BLOCK1
000016E4   MOVEQ     #$01,D4            ' BLOCK2
000016E6   LSL.W     D3,D4              ' BLOCK3
000016E8   SUBQ.W    #$1,D4             ' BLOCK4
000016EA   MOVE.B    (A0)+,D0           ' BLOCK5
000016EC   BEQ       $0000172C          ' BLOCK6
000016EE   LSR.B     #1,D0              ' BLOCK7

' Z, N, V, X, C - флаги, AX{0 To 7}, BX{0 To 7} - регистры, AX(1 To 4) - байты регистра.
BLOCK0:
Open file1 for Binary As 1
Dim V As Ineger
Dim N As Ineger
Dim X As Ineger
Dim C As Ineger
Dim Z As Ineger
Dim A0(4) as Byte
Dim A1(4) as Byte
Dim A2(4) as Byte
Dim A3(4) as Byte
Dim A4(4) as Byte
Dim A5(4) as Byte
Dim A6(4) as Byte
Dim A7(4) as Byte
Dim B0(4) as Byte
Dim B1(4) as Byte
Dim B2(4) as Byte
Dim B3(4) as Byte
Dim B4(4) as Byte
Dim B5(4) as Byte
Dim B6(4) as Byte
Dim B7(4) as Byte
Dim tmp(4) as Byte
Dim WRD(2) as String

BLOCK1: ' BYTE
Get #1, Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1, D3(4)
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))' Такой вот у меня процесс присваивания A значения A+1 :)
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))
V=0
C=0
If D3(4)=0 then Z=1 else Z=0
If D3(4)<0 then N=1 else N=0

BLOCK2: ' LONG
D4(4)=0
D4(3)=0
D4(2)=0
D4(1)=1
V=0
C=0
If D4(1)=0 then Z=1 else Z=0
If D4(1)<0 then N=1 else N=0



BLOCK3: ' WORD
FOR CNT=1 TO 2
   WRD(CNT)=MID$(HEX$(D4(3)+D4(4)),CNT,1)
   IF WRD(CNT)="0" THEN
      BTE(CNT)="0000"
   ELSEIF WRD(CNT)="1" THEN
      BTE(CNT)="0001"
   ELSEIF WRD(CNT)="2" THEN
      BTE(CNT)="0010"
   ELSEIF WRD(CNT)="3" THEN
      BTE(CNT)="0011"
   ELSEIF WRD(CNT)="4" THEN
      BTE(CNT)="0100"
   ELSEIF WRD(CNT)="5" THEN
      BTE(CNT)="0101"
   ELSEIF WRD(CNT)="6" THEN
      BTE(CNT)="0110"
   ELSEIF WRD(CNT)="7" THEN
      BTE(CNT)="0111"
   ELSEIF WRD(CNT)="8" THEN
      BTE(CNT)="1000"
   ELSEIF WRD(CNT)="9" THEN
      BTE(CNT)="1001"
   ELSEIF WRD(CNT)="A" THEN
      BTE(CNT)="1010"
   ELSEIF WRD(CNT)="B" THEN
      BTE(CNT)="1011"
   ELSEIF WRD(CNT)="C" THEN
      BTE(CNT)="1100"
   ELSEIF WRD(CNT)="D" THEN
      BTE(CNT)="1101"
   ELSEIF WRD(CNT)="E" THEN
      BTE(CNT)="1110"
   ELSEIF WRD(CNT)="F" THEN
      BTE(CNT)="1111"
   ENDIF      
NEXT CNT
NEWWORD=WRD(1) + WRD(2)
C=val(right$(NEWWORD, 1))
X=C
FOR CNT=1 TO D3
   NEWWORD=MID$(NEWWORD,2,7) & "0"
NEXT CNT
FOR CNT=1 TO 4 STEP 4
   NWORD(CNT)=MID$(NEWWORD,CNT, 4)
   IF NWRD(CNT)="0000" THEN
      BTE(CNT)="0"
   ELSEIF NWRD(CNT)="0001" THEN
      BTE(CNT)="1"
   ELSEIF NWRD(CNT)="0010" THEN
      BTE(CNT)="2"
   ELSEIF NWRD(CNT)="0011" THEN
      BTE(CNT)="3"
   ELSEIF NWRD(CNT)="0100" THEN
      BTE(CNT)="4"
   ELSEIF NWRD(CNT)="0101" THEN
      BTE(CNT)="5"
   ELSEIF NWRD(CNT)="0110" THEN
      BTE(CNT)="6"
   ELSEIF NWRD(CNT)="0111" THEN
      BTE(CNT)="7"
   ELSEIF NWRD(CNT)="1000" THEN
      BTE(CNT)="8"
   ELSEIF NWRD(CNT)="1001" THEN
      BTE(CNT)="9"
   ELSEIF NWRD(CNT)="1010" THEN
      BTE(CNT)="A"
   ELSEIF NWRD(CNT)="1011" THEN
      BTE(CNT)="B"
   ELSEIF NWRD(CNT)="0001" THEN
      BTE(CNT)="C"
   ELSEIF NWRD(CNT)="1100" THEN
      BTE(CNT)="D"
   ELSEIF NWRD(CNT)="1101" THEN
      BTE(CNT)="E"
   ELSEIF NWRD(CNT)="1111" THEN
      BTE(CNT)="F"
   ENDIF
NEXT CNT
D4(4)=VAL("&H"+NWORD(1))
D4(3)=VAL("&H"+NWORD(2))
V=0
If VAL(HEX$(D4(4)+D4(3)))=0 then Z=1 else Z=0
If VAL(HEX$(D4(4)+D4(3)))<0 then N=1 else N=0

BLOCK4: ' WORD
If Val(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))))) > 1 Then C = 1 Else C = 0
D4(4) = Val(Left$(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))) - 1), 2))
D4(3) = Val(Right$(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))) - 1), 2))
If VAL(HEX$(D4(4)+D4(3)))=0 then Z=1 else Z=0
X=C
If VAL(HEX$(D4(4)+D4(3)))<0 then N=1 else N=0

BLOCK5: ' BYTE
Get #1, Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1, D0(4)
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))
V=0
C=0
If D4(1)=0 then Z=1 else Z=0
If D4(1)<0 then N=1 else N=0

BLOCK6:   
IF Z=1 THEN GOTO $172C


Большинство операторов и функций VB я не знаю, поэтому использую известные.

Блин, я окончательно во всем запутался.


Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:39 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



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

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

А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды.
________
А-а-а нет. Всё правильно. Smile


Последний раз редактировалось: IfoR (Пн Июл 10, 2006 3:31 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


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

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

Ura_Orlov писал(а):
А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды.

Я хотел перевести это на VB, а насчет неправильных команд - я их сейчас и по-русски могу начать писать - в голове полный хаос. Мозг с утра столько информации обработал, а если ты насчет ElseIf, то я так привык, все-равно VB исправит Smile .
Тем более я писал этот код с чрезвычайно ограниченными знаниями по обоим языкам.

[edit]

А нет, в данном случае ElseIf написан правильно Smile


Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:45 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



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

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

Код:
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))' Такой вот у меня процесс присваивания A значения A+1 :)
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))


Не понимаю зачем нужен этот код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



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

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

HoRRoR писал(а):
Ura_Orlov писал(а):
А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды.

Я хотел перевести это на VB, а насчет неправильных команд - я их сейчас и по-русски могу начать писать - в голове полный хаос. Мозг с утра столько информации обработал, а если ты насчет ElseIf, то я так привык, все-равно VB исправит Smile .
Тем более я писал этот код с чрезвычайно ограниченными знаниями по обоим языкам.

[edit]

А нет, в данном случае ElseIf написан правильно Smile


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


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

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

Ura_Orlov писал(а):
Код:
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))' Такой вот у меня процесс присваивания A значения A+1 :)
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))


Не понимаю зачем нужен этот код.

А как еще присвоить четырем элементам массива по одному байту из значения?

[edit]

Я перевожу значение в hex, затем разрезаю его на четыре части(правда надо бы еще добавить Right$("0000000"+...,<8>*), чтобы по любому было восемь знаков), потом каждую часть по отдельности перевожу в обычную систему счисления и записываю в соответствующий элемент массива.

[edit]

* Вместо "8"+")" смайлик Cool выдавало Smile


Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:56 pm), всего редактировалось 3 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



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

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

Код:
If D4(1)<0 then N=1 else N=0


Этот код некорректен. Регистр не пожет быть вида -$00000001, он может быть &FFFFFFFE.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



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

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

HoRRoR писал(а):
Ura_Orlov писал(а):
Код:
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))' Такой вот у меня процесс присваивания A значения A+1 :)
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))


Не понимаю зачем нужен этот код.

А как еще присвоить четырем элементам массива по одному байту из значения?


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

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


Powered by phpBB © 2001, 2005 phpBB Group