Разработка и ромхакинг > Программирование
Разработка под M68K
<< < (3/5) > >>
GManiac:

--- Цитата ---То есть адрес move.b  d0,($1234).w   это тоже самое что ($00001234).l
Но если адрес move.b  d0,($8900).w           \
                     move.b  d0,($FFFF8900).w     / это = ($FFFF8900).l

hex code -11C0 8900   (FFFF тут нету).   то есть вычитывается из нуля и получается FFFF.

То есть адрес меняется целиком, хоть и 2байта.

Тоже самое все же знают команду moveq ? она в мануале называется 8битной. (move 8-bit immediate), но при этом меняются все 4байта регистра. (т.е. либо 000000xx , либо ffffffxx)
--- Конец цитаты ---
В MOTOROLA 68000 FAMILY Programmer’s Reference Manual обо всём этом написано. Даже схемы нарисованы, какая часть адреса берётся и когда он знакорасширяется. В частности, конечный адрес всегда 4-хбайтный, а воздействие на адресный регистр всегда влияет на весь регистр, о чём там часто написано. Т.е. если адрес в команде двухбайтный (например, MOVEA), он знакорасширяется до 4 байт и пишется в адресный регистр.

То же про MOVEQ, всё там написано:

--- Цитата ---Description: Moves a byte of immediate data to a 32-bit data register. The data in an 8-bit
field within the operation word is sign- extended to a long operand in the data register
as it is transferred.
--- Конец цитаты ---



--- Цитата ---
--- Цитата ---Но, я тут по-другому вопросу вообщем, как загонять ram в исходник? т.е. создать рам + c00000+a00000 (чтобы получить доступ к меткам "lea VDP " и т.д.). Или как это надо делать?  (просто как задать меткам адрес?)
--- Конец цитаты ---

--- Конец цитаты ---
Директива equ.
Ti_:

--- Цитата: GManiac от 14 Июль 2010, 01:30:44 ---Т.е. если адрес в команде двухбайтный (например, MOVEA), он знакорасширяется до 4 байт и пишется в адресный регистр.

Директива equ.

--- Конец цитаты ---
ясно, спасибо.

но то, все равно там если глянуть часть адресов можно было сделать, но не сделали через 2байта.
(может компилятор такой был?)
потом если посмотреть многие разрабы старались большую часть игры поставить в ram начиная с >ff8000  и там больше всего адресов находится , а другие делали просто подряд от начала ram.
Ti_:
а я вот еще что нашел - MOVEM.W - тоже знакорасширяемая.

и я тут начал ром сначала изучать и смотрим:
ROM:00000294                 movem.l (a6),d0-a6  ; видимо решили очистить региcтры?

но можно было очистить через movem.w  .


некоторые вопросы вызывает это:
ROM:0000023E loc_0_23E:                              ; CODE XREF: RESET+24j
ROM:0000023E                 move.w  (a4),d0
ROM:00000240                 moveq   #0,d0

в чем смысл неясно??  (a4= вдп_контроль)

потом move.l  #'SEGA',$2F00(a1)  ; код безопасности сеги который записывается если версия неправильная? вот что за версия - железа? что будет если его записывать если правильная и не записывать если неправильная (т.е. наооборот).

далее:
 moveq   #0,d0
  movea.l d0,a6
  move    a6,usp  ,  user stack pointer  - что это такое , зачем он нужен еще 1 стак поитер? и в него тут 0 пишут ?

дальше: команды для VDP (инициализация)
ROM:000002B8                 dc.b 4                  ; 8004
ROM:000002B9                 dc.b $14                ; 8114
ROM:000002BA                 dc.b $30              ; 8230
ROM:000002BB                 dc.b $3C             ; 833c
ROM:000002BC                 dc.b   7                ; 8407

и т.д.

вот есть у кого список всех (или большинства команд?) только не в битах как в мануале.

и эта шаблонка (reset+data для регистров) она у всех одинаковая (её сега чтоли выдывала всем?), и зачем её так запутали? (везде циклы, всё от-но берется и т.д.) - то есть это просто им захотелось сильно сэкономить место или от пиратов(чтобы ломали дольше)?
можно ж было просто напихать move.w $8004,(a4) и т.д.



Добавлено позже:
p.s. чтобы в asm68k.exe  схавал надо писать move.l a6,usp  (а не move).

в comix zone тут дизасмил увидел используют во многих местах trap  (trap #1) - в других играх не видел (надо бы побольше проверимть) .
и ворды после нее потом к какому-то адресу прибавляются.  

ещё интересно что графику Cкеча сжали?я не нашел (и куда распаковывается в RAM или каждый раз??- но не тормозит?)


--- Код: ---ROM:001DBFFE loc_0_1DBFFE:                           ; CODE XREF: ROM:loc_0_1DBE88p
ROM:001DBFFE                 trap    #1
ROM:001DBFFE ; ---------------------------------------------------------------------------
ROM:001DC000                 dc.w $AF6A
ROM:001DC002 ; ---------------------------------------------------------------------------
ROM:001DC002                 moveq   #$1B,d0
ROM:001DC004                 jsr     loc_0_2E46
ROM:001DC008                 rts

--- Конец кода ---

вот она:

--- Код: ---ROM:001CE58A                 global TRAP1
ROM:001CE58A TRAP1:
ROM:001CE58A                 move.l  a5,-(sp)
ROM:001CE58C                 movea.l 6(sp),a5
ROM:001CE590                 movea.w (a5)+,a5
ROM:001CE592                 adda.l  #word_0_138E0E,a5
ROM:001CE598                 move.l  a5,$30(a0)
ROM:001CE59C                 move.w  #1,$34(a0)
ROM:001CE5A2                 andi.w  #unk_0_FFFFFBF7,$A(a0)
ROM:001CE5A8                 clr.w   $2A(a0)
ROM:001CE5AC                 move.w  #8,$3A(a0)
ROM:001CE5B2                 addq.l  #2,6(sp)
ROM:001CE5B6                 movea.l (sp)+,a5
ROM:001CE5B8                 rte
--- Конец кода ---



еще вопрос по z80 что-туда записывают вначале в его RAM (из этой же шаблонки), ведь писали что он в перезагрузке должен быть при включении??
и он не с 0 своей RAM читает а с "C"??  ( у меня в эмуляторе так показывает, да и тут видно что-то нето начинает с XOR, так что там
за цифры внаале?


--- Код: ---ROM:0000                 xor     a
ROM:0001                 ld      bc, 1FD9h
ROM:0004                 ld      de, 27h
ROM:0007                 ld      hl, 26h ; '&'
ROM:000A                 ld      sp, hl
ROM:000B                 ld      (hl), a
ROM:000C                 ldir
ROM:000E                 pop     ix
ROM:0010                 pop     iy
ROM:0012                 ld      i, a
ROM:0014                 ld      r, a
ROM:0016                 pop     de
ROM:0017                 pop     hl
ROM:0018                 pop     af
ROM:0019                 ex      af, af'
ROM:001A                 exx
ROM:001B                 pop     bc
ROM:001C                 pop     de
ROM:001D                 pop     hl
ROM:001E                 pop     af
ROM:001F                 ld      sp, hl
ROM:0020                 di
ROM:0021                 im      1
ROM:0023                 ld      (hl), 0E9h
ROM:0025                 jp      (hl)

--- Конец кода ---
MetalliC:
нда, книжки ты по-прежнему читать не хочешь )

--- Цитата: Ti_ ---move    a6,usp  ,  user stack pointer  - что это такое , зачем он нужен еще 1 стак поитер? и в него тут 0 пишут ?
--- Конец цитаты ---
в процессоре есть два режима - пользовательский и супервизора.
в юзер-моде вот как раз этот USP и используется как стек (А7)
супервизоре используется свой А7, а доступ к тому пользовательскому регистру стека идет как USP.


--- Цитата: Ti_ ---в comix zone тут дизасмил увидел используют во многих местах trap  (trap #1) - в других играх не видел (надо бы побольше проверимть) .
и ворды после нее потом к какому-то адресу прибавляются.
--- Конец цитаты ---
я такое встречал раньше - суть в том что таким макаром передают какие-то аргументы обработчику трапа
ну а он после возвращает управление не на (A7) а на (A7)+длинааргументов, в твоем случае +2
это кстати четко видно на твоем листинге
Ti_:
Существует ли редактор ассемблера для M68K нормальный? 
В текстовых редакторах не нашел, готовых плагинов тоже нет(то есть может быть есть , но где?)

Пробовал редактор из комплекта EASY68K - так он там кривой ужасно. (Стоит ли пробовать IDE68k-может там нормальный?)

Идеал это если б как в IDA все показывало , только редактировать можно было, ну и список имен меток,джампы по ним и т.д.... но кажется неосучествимо...
Smoke:
Сам искал в свое время, ничерта не нашел. Пришлось писать в блокноте xD
Марат:
B Scite есть подсветка синтаксиса, если тебя это интересует. Я себе добавил инструкции мотороллы в sci lexer и подключил его к sci te.
Takamura-kun:
Джентельмены, возможно ли присобачить этот gcc для m68k к code blocks? на мой взгляд - самый удобный ide, а как
пользоваться компилятором без ide - понять ума не хватает. Очень хочется написать игру для SMD на С.  :)
romanich, sergi, обновите ссылки, прошу. Ни сырцов mr.nuts2 ни проекта romanich скачать не получается  :(
GManiac:
Где-то в этой теме.
http://gendev.spritesmind.net/forum/viewtopic.php?t=14

Добавлено позже:
Блина, нажимаю на первом посте этой странице Цитировать, и виснет. Скопировал цитату вручную.

--- Цитата ---некоторые вопросы вызывает это:
ROM:0000023E loc_0_23E:                              ; CODE XREF: RESET+24j
ROM:0000023E                 move.w  (a4),d0
ROM:00000240                 moveq   #0,d0

в чем смысл неясно??  (a4= вдп_контроль)
--- Конец цитаты ---
Холостое чтение, VDP_CTRL это порт, а не ОЗУ, поэтому такое чтение на что-то может повлиять.
Например, в стандартном коде старта сеговских игр есть такой кусок:

--- Код: ---_000002FA: 4A79 00C00004            TST.W     VDP:$00C00004
_00000300: 2E79 00000000            MOVEA.L   ROM:$00000000,A7
--- Конец кода ---
Takamura-kun:
GManiac, вот спасибо, дружище! =)

Добавлено позже:
Есть вопрос касательно компиляции исходников totin'a (battlecity)..
жалуется на sh.exe, выдает запрет.  :(
Если кто знаком с решением данной проблемы буду благодарен за помощь.
MobNet:
чет неочень хороший исходник уменя вышел(

E:\Sega\asm68k>asm68k /p asm.asm,asm.bin

SN 68k version 2.53

E:\SEGA\ASM68K\ASM.ASM(44) : Error : xdef/xref can only be used when producing l
inkable output
 global reset
E:\SEGA\ASM68K\ASM.ASM(1229) : Error : xdef/xref can only be used when producing
 linkable output
 global vblank
E:\SEGA\ASM68K\ASM.ASM(1246) : Error : xdef/xref can only be used when producing
 linkable output
 global hblank
Errors during pass 1 - pass 2 aborted
Assembly completed.
3 error(s) from 170615 lines in 0.2 seconds

E:\Sega\asm68k>pause
Для продолжения нажмите любую клавишу . . .


44 строка


--- Код: --- global RESET
RESET: ; DATA XREF: sub_694o
move #$2700,sr
move.b (byte_A10001).l,d7
move.b d7,(byte_FFB036).l
andi.b #$F,d7
beq.w loc_222
move.l #$53454741,($A14000).l


--- Конец кода ---
Segaman:
убери все global

--- Код: ---RESET: ; DATA XREF: sub_694o
move #$2700,sr
move.b (byte_A10001).l,d7
move.b d7,(byte_FFB036).l
andi.b #$F,d7
beq.w loc_222
move.l #$53454741,($A14000).l
--- Конец кода ---
MobNet:
Segaman,спасибо конечно но я уже ранее твоего ответа попробовал убрать но после компиляции ошибок 0 а работать  не хочет черный экран(
Ti_:

--- Цитата: MobNet от 09 Апрель 2012, 10:41:23 ---попробовал убрать но после компиляции ошибок 0 а работать  не хочет черный экран(

--- Конец цитаты ---
Что за исходник? Дизасм какой-то игры?
Segaman:
да, новую игру разбирает
Segaman:
такой вопрос. никто не пробовал запустить программу для м68к в адресном пространстве з80 заранее отключив сам з80?

Добавлено позже:
и еще вопрос. помница на вики давным давно находил инфу про техас инструментс из сеги.
так вот там было сказано что шумогенератор можно приспособить к проигрыванию звуковой дорожки путём очень частого изменения частот. я даж дему качал, но её увы не сохранилось. там еще говорилось что з80 даже на пару с моторолкой не смогут так часто менять частоту. что там нужен был бы проц в 2 или 3 раза мощнее моторолки.
щас копаться в инете времени нет. может кто слыхал такое?
Segaman:
ладно, не в той теме обащеетесь.
создайте отдельную.

вопрос к знатокам. команда PEA действует также как LEA, но записывает адрес в стек? правильно?
если да то какие вариации она ест?
т.е. pea (a1) и там pea offset_850(pc,d1)
MetalliC:

--- Цитата: Segaman ---ладно, не в той теме обащеетесь.
создайте отдельную.
--- Конец цитаты ---
я б с радостью, пусть только модеры этого раздела сообщения в нее перенесут


--- Цитата: Segaman ---команда PEA действует также как LEA, но записывает адрес в стек? правильно?
--- Конец цитаты ---
ага.
Operation: SP – 4 ® SP; < ea > ® (SP)
Assembler Syntax: PEA < ea >
Attributes: Size = (Long)
Description: Computes the effective address and pushes it onto the stack. The effective
address is a long address.

PS: рекомендую почитывать вот эту книжку - www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf
Segaman:
спасибо
r57shell:
Не знаю даже, там ли я пишу :lol:
Создавать тему было лень. Подниму ка эту.
Вопрос следующий:
После немногочисленных тестов, мною был замечен баг. В одной ситуации, спрайты с Low priority, перекрывают спрайты с High priority.
Этот баг только эмуля? или на железе происходит тоже самое?
Погуглил немного, так и не понял ничего :lol:.
Это важно в двух смыслах: Фиксить ли эмуль? Если это и на приставке - то значит это никак не обойти (.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии