3 @ ranges/opcodes (idle, normal):
4 @ 71xx, 73xx - bne.s (8bit offset)
5 @ 75xx, 77xx - beq.s (8bit offset)
6 @ 7dxx, 7fxx - bra.s (8bit offset)
14 .equ patch_desc_table_size, 10
17 .word (0x71fa<<16) | 0x66fa, idle_detector_bcc8, idle_bne, Op6601 @ bne.s
18 .word (0x71f8<<16) | 0x66f8, idle_detector_bcc8, idle_bne, Op6601 @ bne.s
19 .word (0x71f6<<16) | 0x66f6, idle_detector_bcc8, idle_bne, Op6601 @ bne.s
20 .word (0x71f2<<16) | 0x66f2, idle_detector_bcc8, idle_bne, Op6601 @ bne.s
21 .word (0x75fa<<16) | 0x67fa, idle_detector_bcc8, idle_beq, Op6701 @ beq.s
22 .word (0x75f8<<16) | 0x67f8, idle_detector_bcc8, idle_beq, Op6701 @ beq.s
23 .word (0x75f6<<16) | 0x67f6, idle_detector_bcc8, idle_beq, Op6701 @ bne.s
24 .word (0x75f2<<16) | 0x67f2, idle_detector_bcc8, idle_beq, Op6701 @ bne.s
25 .word (0x7dfe<<16) | 0x60fe, idle_detector_dead, idle_bra, Op6001 @ bra.s
26 .word (0x7dfc<<16) | 0x60fc, idle_detector_dead, idle_bra, Op6001 @ bra.s
33 .global CycloneInitIdle
36 ldr r3, =CycloneJumpTab
37 ldr r2, =patch_desc_table
38 mov r12,#patch_desc_table_size
42 ldr r1, [r2, #4] @ detector
43 str r1, [r3, r0, lsl #2]
45 ldr r1, [r2, #8] @ idle
46 add r0, r3, r0, lsl #2
48 ldr r1, [r2, #12] @ normal
60 .global CycloneFinishIdle
68 ldr r3, =CycloneJumpTab
69 ldr r2, =patch_desc_table
70 mov r12,#patch_desc_table_size
74 ldr r1, [r2, #12] @ normal
75 str r1, [r3, r0, lsl #2]
78 add r0, r3, r0, lsl #2
92 .macro inc_counter cond
93 ldr r0, =idle_hit_counter
105 msr cpsr_flg, r10 ;@ ARM flags = 68000 flags
111 msr cpsr_flg, r10 ;@ ARM flags = 68000 flags
120 ldr r0, =(Pico+0x22208) @ Pico.m
121 ldr r1, =idledet_start_frame
122 ldr r0, [r0, #0x1c] @ ..frame_count
125 blt exit_detector @ not yet
127 mov r0, r8, asl #24 @ Shift 8-bit signed offset up...
128 add r0, r4, r0, asr #24 @ jump dest
132 sub r1, r1, r8, lsl #24
140 orreq r2, r2, #0x0200
141 tst r8, #0x0100 @ 67xx (beq)?
142 orrne r2, r2, #0x0400
148 bl SekRegisterIdlePatch
149 cmp r0, #1 @ 0 - ok to patch, 1 - no patch, 2 - remove detector
153 @ remove detector from Cyclone
154 tst r8, #0x0100 @ 67xx (beq)?
158 ldr r3, =CycloneJumpTab
159 str r1, [r3, r8, lsl #2]
163 tst r8, #0x0100 @ 67xx (beq)?
169 @ patch without further questions
175 bl SekRegisterIdlePatch