r0: number of digits
r1: style
1: show 00 symbol
other: don't show 00 symbol

080BCF00 (T)  push    r4-r7,r14
080BCF02 (T)  mov     r7,r9
080BCF04 (T)  mov     r6,r8
080BCF06 (T)  push    r6,r7
080BCF08 (T)  mov     r5,r0
080BCF0A (T)  lsl     r5,r5,10h
080BCF0C (T)  lsr     r5,r5,10h
080BCF0E (T)  lsl     r1,r1,10h
080BCF10 (T)  lsr     r1,r1,10h
080BCF12 (T)  mov     r9,r1

// Load window pointer
080BCF14 (T)  ldr     r4,=3005230h
080BCF16 (T)  ldr     r0,[r4,8h]

080BCF18 (T)  mov     r1,0h
080BCF1A (T)  mov     r2,0h
080BCF1C (T)  strh    r2,[r0,32h]         // ?
080BCF1E (T)  ldr     r0,[r4,8h]
080BCF20 (T)  strh    r2,[r0,34h]         // cursor X
080BCF22 (T)  ldr     r0,[r4,8h]
080BCF24 (T)  strh    r2,[r0,36h]         // cursor Y
080BCF26 (T)  ldr     r0,[r4,8h]
080BCF28 (T)  add     r0,42h
080BCF2A (T)  strb    r5,[r0]             // cursor delta (actually the number of digits)
080BCF2C (T)  ldr     r0,[r4,8h]
080BCF2E (T)  strh    r2,[r0,3Eh]         // ?
080BCF30 (T)  ldr     r0,[r4,8h]
080BCF32 (T)  ldr     r0,[r0,10h]         // r0 is a struct that holds the current number selection buffer
080BCF34 (T)  strb    r1,[r0,15h]
080BCF36 (T)  strb    r1,[r0,14h]
080BCF38 (T)  strb    r1,[r0,13h]
080BCF3A (T)  strb    r1,[r0,12h]
080BCF3C (T)  strb    r1,[r0,19h]
080BCF3E (T)  strb    r1,[r0,18h]
080BCF40 (T)  strb    r1,[r0,17h]
080BCF42 (T)  strb    r1,[r0,16h]
080BCF44 (T)  mov     r0,0h
080BCF46 (T)  mov     r1,0F0h
080BCF48 (T)  mov     r2,14h
080BCF4A (T)  mov     r3,5h
080BCF4C (T)  bl      8000364h            // not sure what this does

080BCF50 (T)  ldr     r1,=3005270h
080BCF52 (T)  ldr     r2,[r4,8h]
080BCF54 (T)  mov     r3,24h
080BCF56 (T)  ldsh    r0,[r2,r3]
080BCF58 (T)  add     r0,4h
080BCF5A (T)  lsl     r0,r0,6h
080BCF5C (T)  ldr     r1,[r1]
080BCF5E (T)  add     r1,r1,r0
080BCF60 (T)  mov     r3,22h
080BCF62 (T)  ldsh    r0,[r2,r3]
080BCF64 (T)  lsl     r0,r0,1h
080BCF66 (T)  add     r1,r1,r0
080BCF68 (T)  mov     r12,r1              // tilemap pointer to start of 3rd row

// Populate the first four slots with empty tiles
080BCF6A (T)  ldr     r0,=8B1B4B0h
080BCF6C (T)  mov     r8,r0
080BCF6E (T)  mov     r1,r8
080BCF70 (T)  add     r1,9Ah
080BCF72 (T)  ldr     r4,=30051ECh
080BCF74 (T)  ldrh    r0,[r4]
080BCF76 (T)  ldrh    r1,[r1]
080BCF78 (T)  add     r0,r0,r1
080BCF7A (T)  lsl     r0,r0,10h
080BCF7C (T)  lsr     r6,r0,10h
080BCF7E (T)  ldr     r7,=3005228h
080BCF80 (T)  ldrh    r1,[r7]
080BCF82 (T)  mov     r0,r6
080BCF84 (T)  orr     r0,r1
080BCF86 (T)  mov     r1,r12
080BCF88 (T)  strh    r0,[r1]
080BCF8A (T)  mov     r2,r12
080BCF8C (T)  add     r2,40h
080BCF8E (T)  mov     r3,r6
080BCF90 (T)  add     r3,20h
080BCF92 (T)  ldrh    r1,[r7]
080BCF94 (T)  mov     r0,r3
080BCF96 (T)  orr     r0,r1
080BCF98 (T)  strh    r0,[r2]
080BCF9A (T)  mov     r2,2h
080BCF9C (T)  add     r12,r2
080BCF9E (T)  mov     r0,r6
080BCFA0 (T)  orr     r0,r1
080BCFA2 (T)  mov     r1,r12
080BCFA4 (T)  strh    r0,[r1]
080BCFA6 (T)  add     r1,40h
080BCFA8 (T)  ldrh    r2,[r7]
080BCFAA (T)  mov     r0,r3
080BCFAC (T)  orr     r0,r2
080BCFAE (T)  strh    r0,[r1]
080BCFB0 (T)  mov     r0,2h
080BCFB2 (T)  add     r12,r0
080BCFB4 (T)  mov     r0,r6
080BCFB6 (T)  orr     r0,r2
080BCFB8 (T)  mov     r1,r12
080BCFBA (T)  strh    r0,[r1]
080BCFBC (T)  mov     r2,r12
080BCFBE (T)  add     r2,40h
080BCFC0 (T)  ldrh    r1,[r7]
080BCFC2 (T)  mov     r0,r3
080BCFC4 (T)  orr     r0,r1
080BCFC6 (T)  strh    r0,[r2]
080BCFC8 (T)  mov     r2,2h
080BCFCA (T)  add     r12,r2
080BCFCC (T)  orr     r6,r1
080BCFCE (T)  mov     r0,r12
080BCFD0 (T)  strh    r6,[r0]
080BCFD2 (T)  add     r0,40h
080BCFD4 (T)  ldrh    r2,[r7]
080BCFD6 (T)  orr     r3,r2
080BCFD8 (T)  strh    r3,[r0]
// end populating the first 4 tiles with blanks

// Print dollar sign
080BCFDA (T)  mov     r1,2h
080BCFDC (T)  add     r12,r1
080BCFDE (T)  mov     r1,0FAh
080BCFE0 (T)  lsl     r1,r1,1h
080BCFE2 (T)  add     r1,r8
080BCFE4 (T)  ldrh    r0,[r4]
080BCFE6 (T)  ldrh    r1,[r1]
080BCFE8 (T)  add     r0,r0,r1
080BCFEA (T)  lsl     r0,r0,10h
080BCFEC (T)  lsr     r6,r0,10h
080BCFEE (T)  mov     r0,r6
080BCFF0 (T)  orr     r0,r2
080BCFF2 (T)  mov     r2,r12
080BCFF4 (T)  strh    r0,[r2]
080BCFF6 (T)  add     r2,40h
080BCFF8 (T)  mov     r0,r6
080BCFFA (T)  add     r0,20h
080BCFFC (T)  ldrh    r1,[r7]
080BCFFE (T)  orr     r0,r1
080BD000 (T)  strh    r0,[r2]

// Print a zero for each digit
080BD002 (T)  mov     r3,2h
080BD004 (T)  add     r12,r3
080BD006 (T)  mov     r1,0E0h
080BD008 (T)  lsl     r1,r1,1h
080BD00A (T)  add     r1,r8
080BD00C (T)  ldrh    r0,[r4]
080BD00E (T)  ldrh    r1,[r1]
080BD010 (T)  add     r0,r0,r1
080BD012 (T)  lsl     r0,r0,10h
080BD014 (T)  lsr     r6,r0,10h
080BD016 (T)  mov     r4,0h
080BD018 (T)  lsl     r5,r5,10h
080BD01A (T)  asr     r5,r5,10h
080BD01C (T)  cmp     r4,r5
080BD01E (T)  bge     80BD050h
080BD020 (T)  mov     r3,r7
080BD022 (T)  mov     r7,r6
080BD024 (T)  add     r7,20h
080BD026 (T)  ldrh    r1,[r3]
080BD028 (T)  mov     r0,r6
080BD02A (T)  orr     r0,r1
080BD02C (T)  mov     r1,r12
080BD02E (T)  strh    r0,[r1]
080BD030 (T)  mov     r2,r12
080BD032 (T)  add     r2,40h
080BD034 (T)  ldrh    r1,[r3]
080BD036 (T)  mov     r0,r7
080BD038 (T)  orr     r0,r1
080BD03A (T)  strh    r0,[r2]
080BD03C (T)  lsl     r0,r4,10h
080BD03E (T)  mov     r2,80h
080BD040 (T)  lsl     r2,r2,9h
080BD042 (T)  add     r0,r0,r2
080BD044 (T)  mov     r1,2h
080BD046 (T)  add     r12,r1
080BD048 (T)  lsr     r4,r0,10h
080BD04A (T)  asr     r0,r0,10h
080BD04C (T)  cmp     r0,r5
080BD04E (T)  blt     80BD026h

// If style == 1, draw the 00 symbol
080BD050 (T)  mov     r2,r9
080BD052 (T)  cmp     r2,1h
080BD054 (T)  bne     80BD084h
080BD056 (T)  ldr     r1,=8B1B4B0h
080BD058 (T)  mov     r3,0EAh
080BD05A (T)  lsl     r3,r3,1h
080BD05C (T)  add     r1,r1,r3
080BD05E (T)  ldr     r0,=30051ECh
080BD060 (T)  ldrh    r0,[r0]
080BD062 (T)  ldrh    r1,[r1]
080BD064 (T)  add     r0,r0,r1
080BD066 (T)  lsl     r0,r0,10h
080BD068 (T)  lsr     r6,r0,10h
080BD06A (T)  ldr     r3,=3005228h
080BD06C (T)  ldrh    r1,[r3]
080BD06E (T)  mov     r0,r6
080BD070 (T)  orr     r0,r1
080BD072 (T)  mov     r1,r12
080BD074 (T)  strh    r0,[r1]
080BD076 (T)  mov     r2,r12
080BD078 (T)  add     r2,40h
080BD07A (T)  mov     r0,r6
080BD07C (T)  add     r0,20h
080BD07E (T)  ldrh    r1,[r3]
080BD080 (T)  orr     r0,r1
080BD082 (T)  strh    r0,[r2]

// Does a whole bunch of stuff, some relating to party members,
// some relating to updating the text scroll registers
080BD084 (T)  ldr     r4,=3005230h
080BD086 (T)  bl      80BD844h

// Takes care of inputs and drawing the cursor and numbers
// Returns (value+1) if user pressed A/L, -1 if user pressed B/select, 0 otherwise
080BD08A (T)  ldr     r0,[r4,8h]
080BD08C (T)  bl      80C9444h
080BD090 (T)  lsl     r0,r0,10h
080BD092 (T)  cmp     r0,0h
080BD094 (T)  beq     80BD118h

// If button is pressed:
    080BD096 (T)  ldr     r1,=3005270h
    080BD098 (T)  ldr     r3,[r4,8h]
    080BD09A (T)  mov     r2,24h
    080BD09C (T)  ldsh    r0,[r3,r2]
    080BD09E (T)  add     r0,4h               // Start clearing the 5th row of tiles (3rd row of text)
    080BD0A0 (T)  lsl     r0,r0,6h
    080BD0A2 (T)  ldr     r1,[r1]
    080BD0A4 (T)  add     r1,r1,r0
    080BD0A6 (T)  mov     r2,22h
    080BD0A8 (T)  ldsh    r0,[r3,r2]
    080BD0AA (T)  lsl     r0,r0,1h
    080BD0AC (T)  add     r1,r1,r0
    080BD0AE (T)  mov     r12,r1
    080BD0B0 (T)  ldr     r0,=30051ECh
    080BD0B2 (T)  ldrh    r1,[r0]
    080BD0B4 (T)  ldr     r0,=1FFh
    080BD0B6 (T)  add     r2,r1,r0
    080BD0B8 (T)  ldr     r0,=3005228h
    080BD0BA (T)  ldrh    r0,[r0]
    080BD0BC (T)  orr     r2,r0
    080BD0BE (T)  lsl     r2,r2,10h
    080BD0C0 (T)  lsr     r6,r2,10h
    080BD0C2 (T)  add     r1,96h
    080BD0C4 (T)  orr     r1,r0
    080BD0C6 (T)  lsl     r1,r1,10h
    080BD0C8 (T)  lsr     r5,r1,10h
    080BD0CA (T)  mov     r4,0h
    080BD0CC (T)  mov     r1,26h
    080BD0CE (T)  ldsh    r0,[r3,r1]
    080BD0D0 (T)  cmp     r4,r0
    080BD0D2 (T)  bge     80BD122h
    080BD0D4 (T)  ldr     r0,=3005230h
    080BD0D6 (T)  ldr     r2,[r0,8h]
    080BD0D8 (T)  mov     r3,r12
    080BD0DA (T)  strh    r6,[r3]             // Clear a row tile
    080BD0DC (T)  mov     r0,r12
    080BD0DE (T)  add     r0,40h
    080BD0E0 (T)  strh    r6,[r0]             // Clear the tile below it
    080BD0E2 (T)  add     r0,40h
    080BD0E4 (T)  strh    r5,[r0]             // Clear the window border tile (gets rid of the number cursor)
    080BD0E6 (T)  lsl     r0,r4,10h
    080BD0E8 (T)  mov     r1,80h
    080BD0EA (T)  lsl     r1,r1,9h
    080BD0EC (T)  add     r0,r0,r1
    080BD0EE (T)  mov     r3,2h
    080BD0F0 (T)  add     r12,r3
    080BD0F2 (T)  lsr     r4,r0,10h
    080BD0F4 (T)  asr     r0,r0,10h
    080BD0F6 (T)  mov     r3,26h
    080BD0F8 (T)  ldsh    r1,[r2,r3]
    080BD0FA (T)  cmp     r0,r1
    080BD0FC (T)  blt     80BD0D8h            // Clear columns until we hit the window width
    080BD0FE (T)  b       80BD122h
    080BD100 (T)  strh    r0,[r6,r0]
    080BD102 (T)  lsl     r0,r0,0Ch
    080BD104 (T)  strh    r0,[r6,r1]
    080BD106 (T)  lsl     r0,r0,0Ch
    080BD108 (T)  push    r4,r5,r7
    080BD10A (T)  lsr     r1,r6,2h
    080BD10C (T)  str     r4,[r5,r7]
    080BD10E (T)  lsl     r0,r0,0Ch
    080BD110 (T)  strh    r0,[r5,r0]
    080BD112 (T)  lsl     r0,r0,0Ch
    080BD114 (T)  lsl     r7,r7,7h
    080BD116 (T)  lsl     r0,r0,0h


080BD118 (T)  ldr     r0,=30009F8h
080BD11A (T)  mov     r1,0h
080BD11C (T)  ldsh    r0,[r0,r1]
080BD11E (T)  cmp     r0,1h
080BD120 (T)  bne     80BD086h
080BD122 (T)  ldr     r0,=3005230h
080BD124 (T)  ldr     r1,[r0,8h]
080BD126 (T)  mov     r0,0h
080BD128 (T)  strh    r0,[r1,2Ah]
080BD12A (T)  pop     r3,r4
080BD12C (T)  mov     r8,r3
080BD12E (T)  mov     r9,r4
080BD130 (T)  pop     r4-r7
080BD132 (T)  pop     r1
080BD134 (T)  bx      r1
