diff options
-rw-r--r-- | asm/slot_machine.s | 103 | ||||
-rw-r--r-- | include/gba/macro.h | 30 | ||||
-rw-r--r-- | src/field/slot_machine.c | 22 |
3 files changed, 39 insertions, 116 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 4060e2541..c5dd8bd26 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,109 +5,6 @@ .text - thumb_func_start sub_8101A44 -sub_8101A44: @ 8101A44 - push {r4,lr} - ldr r0, _08101A7C @ =sub_810196C - bl SetVBlankCallback - ldr r3, _08101A80 @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r4, _08101A84 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08101A88 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101A7C: .4byte sub_810196C -_08101A80: .4byte 0x04000208 -_08101A84: .4byte 0x04000200 -_08101A88: .4byte REG_DISPSTAT - thumb_func_end sub_8101A44 - - thumb_func_start sub_8101A8C -sub_8101A8C: @ 8101A8C - push {r4-r7,lr} - sub sp, 0x4 - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0x80 - lsls r3, 9 - mov r4, sp - movs r6, 0 - ldr r1, _08101AD8 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _08101ADC @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_08101AAA: - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r5 - subs r3, r5 - cmp r3, r5 - bhi _08101AAA - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101AD8: .4byte 0x040000d4 -_08101ADC: .4byte 0x81000800 - thumb_func_end sub_8101A8C - - thumb_func_start sub_8101AE0 -sub_8101AE0: @ 8101AE0 - sub sp, 0x4 - movs r2, 0xE0 - lsls r2, 19 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r0, _08101AFC @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08101B00 @ =0x81000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - add sp, 0x4 - bx lr - .align 2, 0 -_08101AFC: .4byte 0x040000d4 -_08101B00: .4byte 0x81000200 - thumb_func_end sub_8101AE0 - thumb_func_start sub_8101B04 sub_8101B04: @ 8101B04 push {r4,r5,lr} diff --git a/include/gba/macro.h b/include/gba/macro.h index a0edf2a49..945ba4885 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -104,25 +104,29 @@ } #define DmaClearLarge(dmaNum, dest, size, block, bit) \ -{ \ - u32 _size = size; \ - while (1) \ - { \ - DmaFill##bit(dmaNum, 0, dest, (block)); \ - dest += (block); \ - _size -= (block); \ - if (_size <= (block)) \ - { \ - DmaFill##bit(dmaNum, 0, dest, _size); \ - break; \ - } \ - } \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ + break; \ + } \ + } \ } #define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) #define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) +# define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) +# define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) + #define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ { \ const void *_src = src; \ diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 3bff71f4f..60f8a58ff 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -148,6 +148,28 @@ void sub_8101A28(void) REG_DISPCNT = 0; } +void sub_8101A44(void) +{ + u16 imeBak; + SetVBlankCallback(sub_810196C); + imeBak = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = imeBak; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; +} + +void sub_8101A8C(void) +{ + DmaClearLarge16(3, (u16 *)(BG_VRAM), BG_VRAM_SIZE, 0x1000); +} + +void sub_8101AE0(void) +{ + DmaClear16(3, (u16 *)OAM, OAM_SIZE); +} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); |