Updated some docs on m2_drawwindow

This commit is contained in:
jeffman 2017-03-10 16:29:27 -05:00
parent 40a50dfb3d
commit c0d481cb8c
3 changed files with 41 additions and 11 deletions

View File

@ -6,5 +6,6 @@
03001F30 m2_food
03001F3A m2_rockin
03001F50 m2_player1
080C87D0 m2_drawwindow
080C980C m2_printnextch
080CA4BC m2_scrolltext

View File

@ -26,6 +26,7 @@ Custom WRAM: 2027FC0
Subroutines
-----------
80C87D0: draw blank window and border (r0: window pointer)
80C980C: print next character (r0: window pointer)
80CA4BC: scroll text upwards (r0: window pointer)

View File

@ -1,3 +1,5 @@
m2_drawwindow:
// r0: window pointer
080C87D0 (T) push {r4-r7,r14}
080C87D2 (T) mov r7,r10
@ -34,35 +36,58 @@
080C8808 (T) lsr r0,r0,#0x10
080C880A (T) mov r8,r0
int current_x = 0;
int current_y = 0;
int tilemap = ldr[0x3005270];
u16 *ptr = tilemap + (window_y * 64) + (window_x * 2);
for (int current_area = 0; current_area < window_area; current_area++)
{
if (current_x >= window_width || window_x + current_x > 0x1F)
{
if (current_y >= window_height || window_y + current_y > 0x1F)
break;
// 80C884A
current_x = 0;
current_y++;
int y = current_y + window_y;
*ptr = tilemap + (y * 64) + (window_x * 2);
}
*ptr = 0xE2FF;
current_x++;
ptr += 2;
}
080C880C (T) mov r7,#0x0
080C880E (T) mov r1,#0x20
080C8810 (T) ldsh r0,[r6,r1] // window area
080C8812 (T) mov r10,r4
080C8812 (T) mov r10,r4 // 0x3005270
080C8814 (T) cmp r7,r0
080C8816 (T) bge #0x80C888C
080C8818 (T) mov r2,r10
080C881A (T) mov r3,r12
080C881A (T) mov r3,r12 // x counter
080C881C (T) lsl r0,r3,#0x10
080C881E (T) asr r1,r0,#0x10
080C8820 (T) mov r4,#0x26
080C8822 (T) ldsh r0,[r6,r4]
080C8822 (T) ldsh r0,[r6,r4] // window width
080C8824 (T) cmp r1,r0
080C8826 (T) bge #0x80C8832
080C8828 (T) mov r3,#0x22
080C882A (T) ldsh r0,[r6,r3]
080C882A (T) ldsh r0,[r6,r3] // window x
080C882C (T) add r0,r0,r1
080C882E (T) cmp r0,#0x1F
080C8830 (T) ble #0x80C8868
080C8832 (T) mov r4,r9
080C8832 (T) mov r4,r9 // y counter
080C8834 (T) lsl r0,r4,#0x10
080C8836 (T) asr r1,r0,#0x10
080C8838 (T) mov r5,#0x28
080C883A (T) ldsh r0,[r6,r5]
080C883A (T) ldsh r0,[r6,r5] // window height
080C883C (T) cmp r1,r0
080C883E (T) bge #0x80C888C
080C8840 (T) mov r0,#0x24
080C8842 (T) ldsh r5,[r6,r0]
080C8842 (T) ldsh r5,[r6,r0] // window y
080C8844 (T) add r0,r5,r1
080C8846 (T) cmp r0,#0x1F
080C8848 (T) bgt #0x80C888C
@ -75,10 +100,10 @@
080C8856 (T) asr r0,r0,#0x10
080C8858 (T) add r0,r5,r0
080C885A (T) lsl r0,r0,#0x6
080C885C (T) ldr r1,[r2]
080C885C (T) ldr r1,[r2] // 0x3005270
080C885E (T) add r1,r1,r0
080C8860 (T) mov r5,#0x22
080C8862 (T) ldsh r0,[r6,r5]
080C8862 (T) ldsh r0,[r6,r5] // window x
080C8864 (T) lsl r0,r0,#0x1
080C8866 (T) add r5,r1,r0
080C8868 (T) mov r0,r8
@ -99,10 +124,13 @@
080C8886 (T) ldsh r0,[r6,r4]
080C8888 (T) cmp r1,r0
080C888A (T) blt #0x80C881A
080C888C (T) mov r0,#0x0
080C888E (T) strh r0,[r6,#0x32]
080C888E (T) strh r0,[r6,#0x32] // ?
// It seems the remaining code draws the window borders
080C8890 (T) ldr r5,=#0x30051EC
080C8892 (T) ldrh r5,[r5]
080C8892 (T) ldrh r5,[r5] // tile offset
080C8894 (T) mov r12,r5
080C8896 (T) ldr r0,=#0x1DF
080C8898 (T) add r0,r12