jalmah.cpp: wrote a snippet for sound banking in Urashima Mahjong/Mahjong Channel Zoom In/Mahjong Daireikai [Angelo Salese]

This commit is contained in:
angelosa 2018-06-17 01:33:11 +02:00
parent a717977ad6
commit a845a6c4fa
2 changed files with 60 additions and 6 deletions

View File

@ -368,7 +368,7 @@ uint32_t urashima_state::screen_update_urashima(screen_device &screen, bitmap_in
bitmap.fill(m_palette->pen(0x1ff), cliprect); //selectable by a ram address?
for(int y = cliprect.min_y; y < cliprect.max_y; y++)
for(int y = cliprect.min_y; y < cliprect.max_y+1; y++)
{
clip.min_y = clip.max_y = y;
@ -700,9 +700,9 @@ WRITE16_MEMBER(jalmah_state::okibank_w)
if(ACCESSING_BITS_0_7)
{
uint8_t *oki = memregion("oki")->base();
m_oki_bank = data & 3;
memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
}
@ -725,7 +725,7 @@ void jalmah_state::jalmah_map(address_map &map)
// 0x080004, 0x080005 MCU read, different for each game
map(0x080010, 0x080011).w(FUNC(jalmah_state::flip_screen_w));
// 0x080012, 0x080013 MCU write related,same for each game
// 0x080014, 0x080015 MCU write related (handshake), same for each game
map(0x080014, 0x080015).noprw(); // MCU handshake
map(0x080016, 0x080017).w(FUNC(jalmah_state::tilebank_w)).umask16(0x00ff);
map(0x080018, 0x080019).w(FUNC(jalmah_state::okibank_w));
map(0x08001a, 0x08001b).w(FUNC(jalmah_state::okirom_w));
@ -1201,10 +1201,10 @@ MACHINE_CONFIG_END
// fake ROM containing 68k snippets
// the original MCU actually uploads these into shared work ram area
//
// we actually compile it using EASy68k tool
#define LOAD_FAKE_MCU_ROM \
ROM_REGION( 0x10000, "jmcu_rom", 0 ) \
ROM_LOAD16_WORD_SWAP( "mcu.bin", 0, 0x10000, BAD_DUMP CRC(43100728) SHA1(96ad65cd30026f7b58e8d3637b3109a221cafa4f)) \
ROM_LOAD16_WORD_SWAP( "mcu.bin", 0, 0x10000, BAD_DUMP CRC(35425d2f) SHA1(9a9914d4e50a665d4eb0efb80552f357fc719e7e)) \
/*

View File

@ -31,9 +31,62 @@ UploadPaletteChunk:
rts
ORG $0800 ; sound code snippet
; move.w #$0, $8001a.l
; move.w $f0b80.l, $80018.l
; move.w $100ffc.l, $80018.l
; move.w $100ffe.l, $8001a.l
movem.l D1, -(A7)
move.w D0, D1
ror.w #$8, D1
and.w #$f, D1
bsr CheckSoundZA
bsr CheckSoundBank
move.w #$8, $80040.l
bsr SoundStatus
andi.w #$3f, D0
ori.w #$80, D0
move.w D0, $80040.l
bsr SoundStatus
move.w #$10, $80040.l
movem.l (A7)+, D1
rts
SoundStatus:
movem.l D0, -(A7)
ReadStatus:
move.w $80040.l, D0
andi.w #$1,D0
bne ReadStatus
movem.l (A7)+, D0
rts
; guess: special bits set in register D0 affect banking (oki can play up to 64 samples so bits 6 and 7 cannot be used)
CheckSoundZA:
btst #$6, D0 ;urashima BGM at start of game
beq NoZA1
ror.w #$1, D1
rts
NoZA1:
btst #$07, D0 ;mjzoomin BGM at start of game
beq NoZA2
move.w #$8, D1
NoZA2:
rts
CheckSoundBank:
cmpi.w #$1, D1
beq SetBank0
cmpi.w #$2, D1
beq SetBank1
cmpi.w #$4, D1
beq SetBank2
move.w #$3, $80018.l
rts
SetBank0:
move.w #$0, $80018.l
rts
SetBank1:
move.w #$1, $80018.l
rts
SetBank2:
move.w #$2, $80018.l
rts
ORG $1000 ; tile upload snippet
@ -89,6 +142,7 @@ ClearLayer:
ORG $fffe ; extend binary ROM to 0x10000 in size
dc.w $ffff
END START
*~Font name~Courier New~
*~Font size~10~
*~Tab type~1~