russian ROMhacking
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Порт на MegaDrive одного из модов "Бесконечного лета"
ТомахомэДата: Пятница, 10.05.2024, 13:14 | Сообщение # 61
Генерал-лейтенант
Группа: Проверенные
Сообщений: 522
Статус: Оффлайн
Цитата SegaMark ()
Можно попробовать добавить свою реализацию asm процедуры loadtiles, основанной на ее оригинальном asm коде. Но у меня почему то не получается назначить адрес записи в VDP. В закрепе реализации стандартных процедур и функций на asm в bex, может кто-нибудь разберется как это работает.


Похожим образом пытался поступить и я. Компилируется успешно, но на работе итогового рома не отражается примерно никак.
Код
Declare Asm Sub DrawBG(a1 as long)
    move.l    $c0000000,$c00004.l
    move.b    #$f, d0
    move.w #$0, $c00000.l
    dc.l    $51c8fff6 'dbra D0, (-$a,PC)
    move.l    $60200000,$c00004.l
    move.w    #$1bff, d0
    move.l    (a1)+, $c00000.l
    dc.l    $51c8fff8 'dbra D0, (-8,PC)
End Sub


Сообщение отредактировал Томахомэ - Пятница, 10.05.2024, 13:16
 
SegaMarkДата: Понедельник, 13.05.2024, 17:23 | Сообщение # 62
Сержант
Группа: Проверенные
Сообщений: 31
Статус: Оффлайн
У меня все таки получилось написать данную процедуру, только я пока не до конца понимаю как это работает. Проверил только на SamMenu, неизвестно как будет с остальными работать

Код

DIM bkgIndex as Long
    bkgIndex&=LblPtr&(SamMenu)
    DrawBG bkgIndex&

Declare Sub DrawBG(bkgIndex as Long)
    palettes Black_pal,0,0,16
    my_load_tiles bkgIndex&, 896, 257' 896 Tiles (256x224, 32x28)
    Ink 0
    DRAWTILESINC &h200+Priority(1),0,0,32,28 'na4alo tileset,x,y,shir,visot
    palettes SamMenu_pal,0,0,16
End Sub

'load a set of tiles 8x8 large, and 32 bytes/tile
'a0=adress of tiles,d0=number of tiles,d1=vram adress
'move.l    #$C00000,a4  ; a4 = VDP Base address
declare asm sub my_load_tiles(d5.l, d0.w, d1.w):

    movea.l    d5,a0     ; ????? ??????? ????
    ;move.w #896, d0  ; ?????????? ??????
    ;move.w #$101, d1 ; ????? ? VRAM
   
    move    #$2700,sr
    move.w    #$8F02,4(a4)
    ;lsl.l    #2,d1
    ;lsr.w    #2,d1
    ;swap    d1
    add.l    #$40000000,d1
    move.l    d1,4(a4)
    subq.l    #1,d0
    
@1:
    movem.l    (a0)+,d2/d3/d4/d5/d6/d7/a1/a2
    move.l    d2,(a4)
    move.l    d3,(a4)
    move.l    d4,(a4)
    move.l    d5,(a4)
    move.l    d6,(a4)
    move.l    d7,(a4)
    move.l    a1,(a4)
    move.l    a2,(a4)
    dbra    d0,@1
    move    #$2000,sr
end sub
 
ТомахомэДата: Вторник, 14.05.2024, 12:15 | Сообщение # 63
Генерал-лейтенант
Группа: Проверенные
Сообщений: 522
Статус: Оффлайн
Ахахахахах, оказывается, всё могло бы превосходно работать, если бы я не забыл поставить # перед числами $c0000000 и $60200000! biggrin Старушка Моторола, видно, всё думала, что ей дают указание загрузить данные по какому-то адресу (до которого ей к тому же, бедненькой, "не дотянуться"). Ну да ладно - теперь главное, всё работает, а заодно внесено также такое "техническое новшество", как графика и палитра в одном бинарнике (последняя там идёт в самом конце) - уж чем хорош ассемблер, так это возможностью работать с очень-очень смешанными типами данных. Так, например, когда я несколько месяцев назад ковырял Iraq War 2003, узнал, что при загрузке каждого сэмпла первыми несколькими байтами в куске данных идёт сначала, если не изменяет память, номер адресуемого Z80 "банка" общего с M68k ROM-пространства, где этот сэмпл хранится, затем отступ от начала банка, далее уже совершенно точно - информация о длине сэмпла, и лишь потом - непосредственно звуковые данные.
 
ТомахомэДата: Среда, 15.05.2024, 19:36 | Сообщение # 64
Генерал-лейтенант
Группа: Проверенные
Сообщений: 522
Статус: Оффлайн
По какой-то причине вызовы подпрограммы DrawBG оказалось категорически противопоказано размещать перед Sleep и, соответственно, Pause - потому что иначе тогда бьётся вся VDP, кроме, ха-ха, непосредственно тайлов фона. В чём же тут причина, и как выкручиваться, чтобы можно было между сменой фона и последующими действиями выдерживать небольшие паузы?
 
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Поиск: