FreeCalypso > hg > freecalypso-reveng
changeset 390:37ee46a0dde7
compal/sym-fw-disasm: some study of buz.obj code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 01 Apr 2022 04:30:44 +0000 |
parents | 623316d1ece7 |
children | a40557e5b35f |
files | compal/sym-fw-disasm |
diffstat | 1 files changed, 543 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/compal/sym-fw-disasm Thu Mar 31 20:56:56 2022 +0000 +++ b/compal/sym-fw-disasm Fri Apr 01 04:30:44 2022 +0000 @@ -4,6 +4,9 @@ ; critical board-specific init functions and in order to better prepare ; ourselves for doing similar analysis on other Compal fw versions ; for which we don't have any symbols. +; +; 2022 update: we have now also done some disassembly of Compal's buzzer +; melody player code, guided by the linker map and symbol table. 0: ea000225 b 0x89c 4: ea000825 b 0x20a0 @@ -203,6 +206,437 @@ 22f8: e1a00002 mov r0, r2 22fc: ea061cdf b 0x189680 ; _INC_Initialize +; Compal-original buz.obj .text section + +$PWT_BZ_set: + 16dba8: 49de ldr r1, =0xfffef008 ; via 0x16df24 + 16dbaa: 2020 mov r0, #32 ; 0x20 + 16dbac: 880a ldrh r2, [r1, #0] + 16dbae: 4310 orr r0, r2 + 16dbb0: 8008 strh r0, [r1, #0] + 16dbb2: 4770 bx lr + +$PWT_BZ_reset: + 16dbb4: 49db ldr r1, =0xfffef008 ; via 0x16df24 + 16dbb6: 48dc ldr r0, =0xffdf ; via 0x16df28 + 16dbb8: 880a ldrh r2, [r1, #0] + 16dbba: 4010 and r0, r2 + 16dbbc: 8008 strh r0, [r1, #0] + 16dbbe: 4770 bx lr + +$lmi_buzzer_on: + 16dbc0: b510 push {r4, lr} + 16dbc2: 4bda ldr r3, =0xfffe8802 ; via 0x16df2c + 16dbc4: 2201 mov r2, #1 + 16dbc6: 781c ldrb r4, [r3, #0] + 16dbc8: 4322 orr r2, r4 + 16dbca: 701a strb r2, [r3, #0] + 16dbcc: 4ad8 ldr r2, =0xfffe8800 ; via 0x16df30 + 16dbce: 7010 strb r0, [r2, #0] + 16dbd0: 2001 mov r0, #1 + 16dbd2: 0049 lsl r1, r1, #1 + 16dbd4: 4308 orr r0, r1 + 16dbd6: 7050 strb r0, [r2, #1] + 16dbd8: bd10 pop {r4, pc} + +$lmi_buzzer_off: + 16dbda: 48d6 ldr r0, =0xfffe8801 ; via 0x16df34 + 16dbdc: 7841 ldrb r1, [r0, #1] + 16dbde: 0849 lsr r1, r1, #1 + 16dbe0: d305 bcc 0x16dbee + 16dbe2: 2100 mov r1, #0 + 16dbe4: 7001 strb r1, [r0, #0] + 16dbe6: 21fe mov r1, #254 ; 0xfe + 16dbe8: 7842 ldrb r2, [r0, #1] + 16dbea: 4011 and r1, r2 + 16dbec: 7041 strb r1, [r0, #1] + 16dbee: 4770 bx lr + +$pick_tempo_shift: + 16dbf0: 1e80 sub r0, r0, #2 + 16dbf2: 2800 cmp r0, #0 + 16dbf4: d012 beq 0x16dc1c + 16dbf6: 3801 sub r0, #1 + 16dbf8: 2800 cmp r0, #0 + 16dbfa: d00d beq 0x16dc18 + 16dbfc: 3803 sub r0, #3 + 16dbfe: 2802 cmp r0, #2 + 16dc00: d90a bls 0x16dc18 + 16dc02: 3806 sub r0, #6 + 16dc04: 2801 cmp r0, #1 + 16dc06: d907 bls 0x16dc18 + 16dc08: 3803 sub r0, #3 + 16dc0a: 2802 cmp r0, #2 + 16dc0c: d904 bls 0x16dc18 + 16dc0e: 3804 sub r0, #4 + 16dc10: 2801 cmp r0, #1 + 16dc12: d901 bls 0x16dc18 + 16dc14: 2000 mov r0, #0 + 16dc16: 4770 bx lr + 16dc18: 2001 mov r0, #1 + 16dc1a: 4770 bx lr + 16dc1c: 2002 mov r0, #2 + 16dc1e: 4770 bx lr + +$pick_freq_shift: + 16dc20: 1e40 sub r0, r0, #1 + 16dc22: 2813 cmp r0, #19 ; 0x13 + 16dc24: d903 bls 0x16dc2e + 16dc26: 3825 sub r0, #37 ; 0x25 + 16dc28: 2800 cmp r0, #0 + 16dc2a: d02f beq 0x16dc8c + 16dc2c: e02c b 0x16dc88 + 16dc2e: a102 add r1, pc, #8 + 16dc30: 0080 lsl r0, r0, #2 + 16dc32: 5808 ldr r0, [r1, r0] + 16dc34: 4687 mov pc, r0 + 16dc36: 46c0 nop (mov r8, r8) + + 16dc38: 0016dca8 + 16dc3c: 0016dca4 + 16dc40: 0016dca0 + 16dc44: 0016dca8 + 16dc48: 0016dc9c + 16dc4c: 0016dca8 + 16dc50: 0016dc88 + 16dc54: 0016dca8 + 16dc58: 0016dc98 + 16dc5c: 0016dc98 + 16dc60: 0016dc90 + 16dc64: 0016dc90 + 16dc68: 0016dc9c + 16dc6c: 0016dc9c + 16dc70: 0016dc88 + 16dc74: 0016dc98 + 16dc78: 0016dca8 + 16dc7c: 0016dc88 + 16dc80: 0016dc94 + 16dc84: 0016dc90 + + 16dc88: 2100 mov r1, #0 + 16dc8a: e00f b 0x16dcac + 16dc8c: 2101 mov r1, #1 + 16dc8e: e00d b 0x16dcac + 16dc90: 2103 mov r1, #3 + 16dc92: e00a b 0x16dcaa + 16dc94: 2106 mov r1, #6 + 16dc96: e008 b 0x16dcaa + 16dc98: 2101 mov r1, #1 + 16dc9a: e006 b 0x16dcaa + 16dc9c: 2102 mov r1, #2 + 16dc9e: e004 b 0x16dcaa + 16dca0: 2105 mov r1, #5 + 16dca2: e002 b 0x16dcaa + 16dca4: 2108 mov r1, #8 + 16dca6: e000 b 0x16dcaa + 16dca8: 2104 mov r1, #4 + 16dcaa: 43c9 mvn r1, r1 + 16dcac: 48a2 ldr r0, =0x83e408 ; _freq_shift + 16dcae: 6001 str r1, [r0, #0] + 16dcb0: 2100 mov r1, #0 + 16dcb2: 5e40 ldrsh r0, [r0, r1] + 16dcb4: 4770 bx lr + +$lmi_custom_tone_req_ring: + 16dcb6: b5f0 push {r4, r5, r6, r7, lr} + 16dcb8: 1c04 add r4, r0, #0 + 16dcba: 4da0 ldr r5, =0x83e414 ; _lmi_audio_control + 16dcbc: 2005 mov r0, #5 + 16dcbe: 7028 strb r0, [r5, #0] + 16dcc0: 2c25 cmp r4, #37 ; 0x25 + 16dcc2: d001 beq 0x16dcc8 + 16dcc4: 2c26 cmp r4, #38 ; 0x26 + 16dcc6: d101 bne 0x16dccc + 16dcc8: 2004 mov r0, #4 + 16dcca: 7028 strb r0, [r5, #0] + 16dccc: 2600 mov r6, #0 + 16dcce: 706e strb r6, [r5, #1] + 16dcd0: 2c01 cmp r4, #1 + 16dcd2: d101 bne 0x16dcd8 + 16dcd4: 489a ldr r0, =0x34ab4 ; _custom_tone_volume_table_1 + 16dcd6: e008 b 0x16dcea + 16dcd8: 2c02 cmp r4, #2 + 16dcda: d003 beq 0x16dce4 + 16dcdc: 2c0b cmp r4, #11 ; 0xb + 16dcde: d001 beq 0x16dce4 + 16dce0: 2c09 cmp r4, #9 + 16dce2: d101 bne 0x16dce8 + 16dce4: 4897 ldr r0, =0x34abc ; _custom_tone_volume_table_2 + 16dce6: e000 b 0x16dcea + 16dce8: 4897 ldr r0, =0x34aac ; _custom_tone_volume_table + 16dcea: 5c40 ldrb r0, [r0, r1] + 16dcec: 70a8 strb r0, [r5, #2] + 16dcee: 70ea strb r2, [r5, #3] + 16dcf0: 2701 mov r7, #1 + 16dcf2: 712f strb r7, [r5, #4] + 16dcf4: 80ee strh r6, [r5, #6] + 16dcf6: f018 faeb bl 0x1862d0 ; $mmiGetRingTone + 16dcfa: 2c00 cmp r4, #0 + 16dcfc: dd1d ble 0x16dd3a + 16dcfe: 2c2a cmp r4, #42 ; 0x2a + 16dd00: dc1b bgt 0x16dd3a + 16dd02: 0121 lsl r1, r4, #4 + 16dd04: 1841 add r1, r0, r1 + 16dd06: 4a91 ldr r2, =0x83e40c ; _lmi_playing_tone + 16dd08: 1c08 add r0, r1, #0 + 16dd0a: 3810 sub r0, #16 ; 0x10 + 16dd0c: 6800 ldr r0, [r0, #0] + 16dd0e: 6010 str r0, [r2, #0] + 16dd10: 200c mov r0, #12 ; 0xc + 16dd12: 1a08 sub r0, r1, r0 + 16dd14: 498e ldr r1, =0x83e410 ; _freq_component + 16dd16: 7802 ldrb r2, [r0, #0] + 16dd18: 700a strb r2, [r1, #0] + 16dd1a: 498e ldr r1, =0x83e411 ; _style_infor + 16dd1c: 700f strb r7, [r1, #0] + 16dd1e: 2c2a cmp r4, #42 ; 0x2a + 16dd20: db02 blt 0x16dd28 + 16dd22: 4885 ldr r0, =0x83e408 ; _freq_shift + 16dd24: 6006 str r6, [r0, #0] + 16dd26: e006 b 0x16dd36 + 16dd28: 4a83 ldr r2, =0x83e408 ; _freq_shift + 16dd2a: 6841 ldr r1, [r0, #4] + 16dd2c: 6011 str r1, [r2, #0] + 16dd2e: 6880 ldr r0, [r0, #8] + 16dd30: 7829 ldrb r1, [r5, #0] + 16dd32: 1840 add r0, r0, r1 + 16dd34: 7028 strb r0, [r5, #0] + 16dd36: 4888 ldr r0, =0x83e404 ; _lmi_play_state + 16dd38: 7007 strb r7, [r0, #0] + 16dd3a: bdf0 pop {r4, r5, r6, r7, pc} + +$lmi_custom_tone_req: + 16dd3c: b530 push {r4, r5, lr} + 16dd3e: 4c7f ldr r4, =0x83e414 ; _lmi_audio_control + 16dd40: 2505 mov r5, #5 + 16dd42: 7025 strb r5, [r4, #0] + 16dd44: 2500 mov r5, #0 + 16dd46: 7065 strb r5, [r4, #1] + 16dd48: 4d7f ldr r5, =0x34aac ; _custom_tone_volume_table + 16dd4a: 5c69 ldrb r1, [r5, r1] + 16dd4c: 70a1 strb r1, [r4, #2] + 16dd4e: 70e2 strb r2, [r4, #3] + 16dd50: 2101 mov r1, #1 + 16dd52: 7121 strb r1, [r4, #4] + 16dd54: 2200 mov r2, #0 + 16dd56: 80e2 strh r2, [r4, #6] + 16dd58: 4a7e ldr r2, =0x83e411 ; _style_infor + 16dd5a: 7011 strb r1, [r2, #0] + 16dd5c: 4a7b ldr r2, =0x83e40c ; _lmi_playing_tone + 16dd5e: 6010 str r0, [r2, #0] + 16dd60: 487b ldr r0, =0x83e410 ; _freq_component + 16dd62: 7003 strb r3, [r0, #0] + 16dd64: 4874 ldr r0, =0x83e408 ; _freq_shift + 16dd66: 2200 mov r2, #0 + 16dd68: 6002 str r2, [r0, #0] + 16dd6a: 487b ldr r0, =0x83e404 ; _lmi_play_state + 16dd6c: 7001 strb r1, [r0, #0] + 16dd6e: bd30 pop {r4, r5, pc} + +$DM_buzzer_ringtone_control: + 16dd70: b500 push {lr} + 16dd72: 2800 cmp r0, #0 + 16dd74: d107 bne 0x16dd86 + 16dd76: f7ff ff30 bl 0x16dbda ; $lmi_buzzer_off + 16dd7a: f7ff ff1b bl 0x16dbb4 ; $PWT_BZ_reset + 16dd7e: 4976 ldr r1, =0x83e404 ; _lmi_play_state + 16dd80: 2000 mov r0, #0 + 16dd82: 7008 strb r0, [r1, #0] + 16dd84: bd00 pop {pc} + 16dd86: 1c10 add r0, r2, #0 + 16dd88: 1c1a add r2, r3, #0 + 16dd8a: f7ff ff94 bl 0x16dcb6 ; $lmi_custom_tone_req_ring + 16dd8e: f7ff ff0b bl 0x16dba8 ; $PWT_BZ_set + 16dd92: bd00 pop {pc} + +$DM_buzzer_control: + 16dd94: b590 push {r4, r7, lr} + 16dd96: af03 add r7, sp, #12 ; 0xc + 16dd98: 1c1c add r4, r3, #0 + 16dd9a: 783b ldrb r3, [r7, #0] + 16dd9c: 2800 cmp r0, #0 + 16dd9e: d107 bne 0x16ddb0 + 16dda0: f7ff ff1b bl 0x16dbda ; $lmi_buzzer_off + 16dda4: f7ff ff06 bl 0x16dbb4 ; $PWT_BZ_reset + 16dda8: 496b ldr r1, =0x83e404 ; _lmi_play_state + 16ddaa: 2000 mov r0, #0 + 16ddac: 7008 strb r0, [r1, #0] + 16ddae: bd90 pop {r4, r7, pc} + 16ddb0: 1c10 add r0, r2, #0 + 16ddb2: 1c22 add r2, r4, #0 + 16ddb4: f7ff ffc2 bl 0x16dd3c ; $lmi_custom_tone_req + 16ddb8: f7ff fef6 bl 0x16dba8 ; $PWT_BZ_set + 16ddbc: bd90 pop {r4, r7, pc} + +$BZ_status: + 16ddbe: 2000 mov r0, #0 + 16ddc0: 4965 ldr r1, =0x83e404 ; _lmi_play_state + 16ddc2: 7809 ldrb r1, [r1, #0] + 16ddc4: 2900 cmp r1, #0 + 16ddc6: d000 beq 0x16ddca + 16ddc8: 2001 mov r0, #1 + 16ddca: 4770 bx lr + +$lmi_custom_tone_handler: + 16ddcc: b570 push {r4, r5, r6, lr} + 16ddce: b094 sub sp, #80 ; 0x50 + 16ddd0: 4d61 ldr r5, =0x83e404 ; _lmi_play_state + 16ddd2: 7828 ldrb r0, [r5, #0] + 16ddd4: 2800 cmp r0, #0 + 16ddd6: d100 bne 0x16ddda + 16ddd8: e099 b 0x16df0e + 16ddda: 485c ldr r0, =0x83e40c ; _lmi_playing_tone + 16dddc: 6801 ldr r1, [r0, #0] + 16ddde: 4c57 ldr r4, =0x83e414 ; _lmi_audio_control + 16dde0: 7860 ldrb r0, [r4, #1] + 16dde2: 0080 lsl r0, r0, #2 + 16dde4: 180e add r6, r1, r0 + 16dde6: 7920 ldrb r0, [r4, #4] + 16dde8: 1e40 sub r0, r0, #1 + 16ddea: 2800 cmp r0, #0 + 16ddec: d053 beq 0x16de96 + 16ddee: 3801 sub r0, #1 + 16ddf0: 2800 cmp r0, #0 + 16ddf2: d035 beq 0x16de60 + 16ddf4: 3801 sub r0, #1 + 16ddf6: 2800 cmp r0, #0 + 16ddf8: d15b bne 0x16deb2 + 16ddfa: 2006 mov r0, #6 + 16ddfc: 5f00 ldrsh r0, [r0, r4] + 16ddfe: 2800 cmp r0, #0 + 16de00: dc44 bgt 0x16de8c + 16de02: 7860 ldrb r0, [r4, #1] + 16de04: 3001 add r0, #1 + 16de06: 7060 strb r0, [r4, #1] + 16de08: 7860 ldrb r0, [r4, #1] + 16de0a: 0080 lsl r0, r0, #2 + 16de0c: 180d add r5, r1, r0 + 16de0e: 8868 ldrh r0, [r5, #2] + 16de10: 2800 cmp r0, #0 + 16de12: d10f bne 0x16de34 + 16de14: 7861 ldrb r1, [r4, #1] + 16de16: 484e ldr r0, =0x83e410 ; _freq_component + 16de18: 7800 ldrb r0, [r0, #0] + 16de1a: 3801 sub r0, #1 + 16de1c: 4281 cmp r1, r0 + 16de1e: da04 bge 0x16de2a + 16de20: 4944 ldr r1, =0xfffe8801 ; via 0x16df34 + 16de22: 2000 mov r0, #0 + 16de24: 7008 strb r0, [r1, #0] + 16de26: 2003 mov r0, #3 + 16de28: e015 b 0x16de56 + 16de2a: 2001 mov r0, #1 + 16de2c: 7120 strb r0, [r4, #4] + 16de2e: 2000 mov r0, #0 + 16de30: 7060 strb r0, [r4, #1] + 16de32: e011 b 0x16de58 + 16de34: 4840 ldr r0, =0x83e408 ; _freq_shift + 16de36: 8801 ldrh r1, [r0, #0] + 16de38: 8868 ldrh r0, [r5, #2] + 16de3a: 1808 add r0, r1, r0 + 16de3c: 0400 lsl r0, r0, #16 + 16de3e: 0c00 lsr r0, r0, #16 + 16de40: 0040 lsl r0, r0, #1 + 16de42: 4946 ldr r1, =0x34ac4 ; _l1_tone_table + 16de44: 5c08 ldrb r0, [r1, r0] + 16de46: 78a1 ldrb r1, [r4, #2] + 16de48: 786a ldrb r2, [r5, #1] + 16de4a: 1889 add r1, r1, r2 + 16de4c: 0609 lsl r1, r1, #24 + 16de4e: 0e09 lsr r1, r1, #24 + 16de50: f7ff feb6 bl 0x16dbc0 ; $lmi_buzzer_on + 16de54: 2002 mov r0, #2 + 16de56: 7120 strb r0, [r4, #4] + 16de58: 7828 ldrb r0, [r5, #0] + 16de5a: 7821 ldrb r1, [r4, #0] + 16de5c: 4348 mul r0, r1 + 16de5e: e018 b 0x16de92 + 16de60: 2006 mov r0, #6 + 16de62: 5f00 ldrsh r0, [r0, r4] + 16de64: 2800 cmp r0, #0 + 16de66: dc11 bgt 0x16de8c + 16de68: 2100 mov r1, #0 + 16de6a: 4832 ldr r0, =0xfffe8801 ; via 0x16df34 + 16de6c: 7001 strb r1, [r0, #0] + 16de6e: 7862 ldrb r2, [r4, #1] + 16de70: 4837 ldr r0, =0x83e410 ; _freq_component + 16de72: 7800 ldrb r0, [r0, #0] + 16de74: 3801 sub r0, #1 + 16de76: 4282 cmp r2, r0 + 16de78: db02 blt 0x16de80 + 16de7a: 2001 mov r0, #1 + 16de7c: 7061 strb r1, [r4, #1] + 16de7e: e003 b 0x16de88 + 16de80: 4834 ldr r0, =0x83e411 ; _style_infor + 16de82: 7800 ldrb r0, [r0, #0] + 16de84: 80e0 strh r0, [r4, #6] + 16de86: 2003 mov r0, #3 + 16de88: 7120 strb r0, [r4, #4] + 16de8a: e040 b 0x16df0e + 16de8c: 2006 mov r0, #6 + 16de8e: 5f00 ldrsh r0, [r0, r4] + 16de90: 3801 sub r0, #1 + 16de92: 80e0 strh r0, [r4, #6] + 16de94: e03b b 0x16df0e + 16de96: 4668 mov r0, sp + 16de98: a11e add r1, pc, #120 ; 0x78 + 16de9a: f01a f9e7 bl 0x18826c ; $sprintf + 16de9e: 4668 mov r0, sp + 16dea0: f751 fd90 bl 0xbf9c4 ; $L1_send_debug + 16dea4: 78e0 ldrb r0, [r4, #3] + 16dea6: 2800 cmp r0, #0 + 16dea8: d003 beq 0x16deb2 + 16deaa: 4829 ldr r0, =0x83e410 ; _freq_component + 16deac: 7800 ldrb r0, [r0, #0] + 16deae: 2800 cmp r0, #0 + 16deb0: d106 bne 0x16dec0 + 16deb2: f7ff fe92 bl 0x16dbda ; $lmi_buzzer_off + 16deb6: f7ff fe7d bl 0x16dbb4 ; $PWT_BZ_reset + 16deba: 2000 mov r0, #0 + 16debc: 7028 strb r0, [r5, #0] + 16debe: e026 b 0x16df0e + 16dec0: 8870 ldrh r0, [r6, #2] + 16dec2: 2800 cmp r0, #0 + 16dec4: d109 bne 0x16deda + 16dec6: 481b ldr r0, =0xfffe8801 ; via 0x16df34 + 16dec8: 1c42 add r2, r0, #1 + 16deca: 2101 mov r1, #1 + 16decc: 7813 ldrb r3, [r2, #0] + 16dece: 4319 orr r1, r3 + 16ded0: 7011 strb r1, [r2, #0] + 16ded2: 2100 mov r1, #0 + 16ded4: 7001 strb r1, [r0, #0] + 16ded6: 2003 mov r0, #3 + 16ded8: e00f b 0x16defa + 16deda: 4917 ldr r1, =0x83e408 ; _freq_shift + 16dedc: 8809 ldrh r1, [r1, #0] + 16dede: 1840 add r0, r0, r1 + 16dee0: 0400 lsl r0, r0, #16 + 16dee2: 0c00 lsr r0, r0, #16 + 16dee4: 0040 lsl r0, r0, #1 + 16dee6: 491d ldr r1, =0x34ac4 ; _l1_tone_table + 16dee8: 5c08 ldrb r0, [r1, r0] + 16deea: 78a1 ldrb r1, [r4, #2] + 16deec: 7872 ldrb r2, [r6, #1] + 16deee: 1889 add r1, r1, r2 + 16def0: 0609 lsl r1, r1, #24 + 16def2: 0e09 lsr r1, r1, #24 + 16def4: f7ff fe64 bl 0x16dbc0 ; $lmi_buzzer_on + 16def8: 2002 mov r0, #2 + 16defa: 7120 strb r0, [r4, #4] + 16defc: 7830 ldrb r0, [r6, #0] + 16defe: 7821 ldrb r1, [r4, #0] + 16df00: 4348 mul r0, r1 + 16df02: 80e0 strh r0, [r4, #6] + 16df04: 78e0 ldrb r0, [r4, #3] + 16df06: 28ff cmp r0, #255 ; 0xff + 16df08: d001 beq 0x16df0e + 16df0a: 1e40 sub r0, r0, #1 + 16df0c: 70e0 strb r0, [r4, #3] + 16df0e: b014 add sp, #80 ; 0x50 + 16df10: bd70 pop {r4, r5, r6, pc} + 16df12: 46c0 nop (mov r8, r8) + $Init_Target: 17ba8c: b530 push {r4, r5, lr} 17ba8e: b081 sub sp, #4 @@ -582,6 +1016,115 @@ 182270: 8011 strh r1, [r2, #0] 182272: 4770 bx lr +; buzzer.obj .text section follows, as identified in the linker map. +; All code is strictly unchanged from TCS211 original. + +$BZ_Init: + 186124: 4770 bx lr + +$BZ_Enable: + 186126: 492e ldr r1, =0xfffe480e ; via 0x1861e0 + 186128: 2001 mov r0, #1 + 18612a: 880a ldrh r2, [r1, #0] + 18612c: 4310 orr r0, r2 + 18612e: 8008 strh r0, [r1, #0] + 186130: 4770 bx lr + +$BZ_Disable: + 186132: 482b ldr r0, =0xfffe480e ; via 0x1861e0 + 186134: 8801 ldrh r1, [r0, #0] + 186136: 0409 lsl r1, r1, #16 + 186138: 0c49 lsr r1, r1, #17 + 18613a: 0049 lsl r1, r1, #1 + 18613c: 8001 strh r1, [r0, #0] + 18613e: 4770 bx lr + +$BZ_Tone: + 186140: 21ff mov r1, #255 ; 0xff + 186142: 3101 add r1, #1 + 186144: 4288 cmp r0, r1 + 186146: db00 blt 0x18614a + 186148: 20ff mov r0, #255 ; 0xff + 18614a: 4926 ldr r1, =0xfffe4808 ; via 0x1861e4 + 18614c: 8008 strh r0, [r1, #0] + 18614e: 4770 bx lr + +$BZ_Volume: + 186150: 2840 cmp r0, #64 ; 0x40 + 186152: db00 blt 0x186156 + 186154: 203f mov r0, #63 ; 0x3f + 186156: 4924 ldr r1, =0xfffe4812 ; via 0x1861e8 + 186158: 8008 strh r0, [r1, #0] + 18615a: 4770 bx lr + +$BZ_KeyBeep_ON: + 18615c: b500 push {lr} + 18615e: b081 sub sp, #4 + 186160: f7ff ffe0 bl 0x186124 + 186164: 20ff mov r0, #255 ; 0xff + 186166: f7ff fff3 bl 0x186150 + 18616a: f7ff ffdc bl 0x186126 + 18616e: 2032 mov r0, #50 ; 0x32 + 186170: f7ff ffe6 bl 0x186140 + 186174: 2000 mov r0, #0 + 186176: e001 b 0x18617c + 186178: 9800 ldr r0, [sp, #0] + 18617a: 3001 add r0, #1 + 18617c: 9000 str r0, [sp, #0] + 18617e: 9900 ldr r1, [sp, #0] + 186180: 481a ldr r0, =0x4268 ; via 0x1861ec + 186182: 4281 cmp r1, r0 + 186184: dbf8 blt 0x186178 + 186186: f7ff ffd4 bl 0x186132 + 18618a: b001 add sp, #4 + 18618c: bd00 pop {pc} + +$BZ_KeyBeep_OFF: + 18618e: b500 push {lr} + 186190: b081 sub sp, #4 + 186192: f7ff ffc7 bl 0x186124 + 186196: 20ff mov r0, #255 ; 0xff + 186198: f7ff ffda bl 0x186150 + 18619c: f7ff ffc3 bl 0x186126 + 1861a0: 2064 mov r0, #100 ; 0x64 + 1861a2: f7ff ffcd bl 0x186140 + 1861a6: 2000 mov r0, #0 + 1861a8: e001 b 0x1861ae + 1861aa: 9800 ldr r0, [sp, #0] + 1861ac: 3001 add r0, #1 + 1861ae: 9000 str r0, [sp, #0] + 1861b0: 9900 ldr r1, [sp, #0] + 1861b2: 480e ldr r0, =0x4268 ; via 0x1861ec + 1861b4: 4281 cmp r1, r0 + 1861b6: dbf8 blt 0x1861aa + 1861b8: f7ff ffbb bl 0x186132 + 1861bc: b001 add sp, #4 + 1861be: bd00 pop {pc} + +$LT_Enable: + 1861c0: 4770 bx lr + +$LT_Disable: + 1861c2: 4770 bx lr + +$LT_Level: + 1861c4: 2840 cmp r0, #64 ; 0x40 + 1861c6: db00 blt 0x1861ca + 1861c8: 203f mov r0, #63 ; 0x3f + 1861ca: 4909 ldr r1, =0xfffe4810 ; via 0x1861f0 + 1861cc: 8008 strh r0, [r1, #0] + 1861ce: 4770 bx lr + +$LT_Status: + 1861d0: 4803 ldr r0, =0xfffe480e ; via 0x1861e0 + 1861d2: 8800 ldrh r0, [r0, #0] + 1861d4: 0840 lsr r0, r0, #1 + 1861d6: 07c0 lsl r0, r0, #31 + 1861d8: 0fc0 lsr r0, r0, #31 + 1861da: 0600 lsl r0, r0, #24 + 1861dc: 0e00 lsr r0, r0, #24 + 1861de: 4770 bx lr + $INC_Initialize: 1887ac: b510 push {r4, lr} 1887ae: 1c04 add r4, r0, #0