| Разработка и ромхакинг > Программирование |
| Разработка под 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:. Это важно в двух смыслах: Фиксить ли эмуль? Если это и на приставке - то значит это никак не обойти (. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |