notaz.gp2x.de
/
cyclone68000.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix compatibility with ancient gas
[cyclone68000.git]
/
tools
/
idle.s
diff --git
a/tools/idle.s
b/tools/idle.s
index
e970d2e
..
7ac8520
100644
(file)
--- a/
tools/idle.s
+++ b/
tools/idle.s
@@
-8,11
+8,17
@@
.data
.align 2
.data
.align 2
+idle_data:
have_patches:
.word 0
have_patches:
.word 0
+ .word Op____
+ .word Op6002
+ .word Op6602
+ .word Op6702
.equ patch_desc_table_size, 10
.equ patch_desc_table_size, 10
+@ to from
patch_desc_table:
.word (0x71fa<<16) | 0x66fa, idle_detector_bcc8, idle_bne, Op6602 @ bne.s
.word (0x71f8<<16) | 0x66f8, idle_detector_bcc8, idle_bne, Op6602 @ bne.s
patch_desc_table:
.word (0x71fa<<16) | 0x66fa, idle_detector_bcc8, idle_bne, Op6602 @ bne.s
.word (0x71f8<<16) | 0x66f8, idle_detector_bcc8, idle_bne, Op6602 @ bne.s
@@
-30,11
+36,13
@@
patch_desc_table:
.align 2
.align 2
-.global CycloneInitIdle
+.global CycloneInitIdle
JT @ jt
-CycloneInitIdle:
- ldr r3, =CycloneJumpTab
- ldr r2, =patch_desc_table
+CycloneInitIdleJT:
+ adr r12,offset_table
+ ldr r2, [r12, #1*4] @ =patch_desc_table-ot
+ mov r3, r0 @ =CycloneJumpTab
+ add r2, r2, r12
mov r12,#patch_desc_table_size
cii_loop:
mov r12,#patch_desc_table_size
cii_loop:
@@
-51,22
+59,28
@@
cii_loop:
subs r12,r12,#1
bgt cii_loop
subs r12,r12,#1
bgt cii_loop
- ldr r0, =have_patches
+ adr r12,offset_table
+ ldr r0, [r12, #0*4] @ =idle_data-ot
mov r1, #1
mov r1, #1
- str r1, [r0
]
+ str r1, [r0
, r12] @ have_patches
bx lr
bx lr
-.global CycloneFinishIdle
+.global CycloneFinishIdle
JT @ jt
-CycloneFinishIdle:
- ldr r0, =have_patches
- ldr r0, [r0]
- tst r0, r0
+CycloneFinishIdleJT:
+ adr r12,offset_table
+ ldr r3, [r12, #0*4] @ =idle_data-ot
+ ldr r1, [r3, r12]! @ have_patches
+ tst r1, r1
bxeq lr
bxeq lr
- ldr r3, =CycloneJumpTab
- ldr r2, =patch_desc_table
+ stmfd sp!, {r4,r5}
+ mov r5, r3
+ ldr r2, [r12, #1*4] @ =patch_desc_table-ot
+ mov r3, r0 @ =CycloneJumpTab
+ ldr r4, [r5, #1*4] @ =Op____
+ add r2, r2, r12 @ =patch_desc_table
mov r12,#patch_desc_table_size
cfi_loop:
mov r12,#patch_desc_table_size
cfi_loop:
@@
-74,17
+88,16
@@
cfi_loop:
ldr r1, [r2, #12] @ normal
str r1, [r3, r0, lsl #2]
ldrh r0, [r2, #2]
ldr r1, [r2, #12] @ normal
str r1, [r3, r0, lsl #2]
ldrh r0, [r2, #2]
- ldr r1, =Op____
add r0, r3, r0, lsl #2
add r0, r3, r0, lsl #2
- str r
1, [r0]
- str r
1
, [r0, #0x800]
+ str r
4, [r0] @ Op____
+ str r
4
, [r0, #0x800]
add r2, r2, #16
subs r12,r12,#1
bgt cfi_loop
add r2, r2, #16
subs r12,r12,#1
bgt cfi_loop
- ldr r0, =have_patches
mov r1, #0
mov r1, #0
- str r1, [r0]
+ str r1, [r5] @ have_patches
+ ldmfd sp!, {r4,r5}
bx lr
bx lr
@@
-104,15
+117,15
@@
idle_bra:
b Op6002
idle_bne:
b Op6002
idle_bne:
- msr cpsr_flg, r10
- mov
ne
r5, #2 @ 2 is intentional due to strange timing issues
- inc_counter
ne
+ tst r10, #0x40000000 @ Z set?
+ mov
eq
r5, #2 @ 2 is intentional due to strange timing issues
+ inc_counter
eq
b Op6602
idle_beq:
b Op6602
idle_beq:
- msr cpsr_flg, r10 ;@ ARM flags = 68000 flags
- mov
eq
r5, #2
- inc_counter
eq
+ tst r10, #0x40000000 @ Z set?
+ mov
ne
r5, #2
+ inc_counter
ne
b Op6702
b Op6702
@@
-154,14
+167,16
@@
idle_detector_bcc8:
ble exit_detector
@ remove detector from Cyclone
ble exit_detector
@ remove detector from Cyclone
+ adr r12,offset_table
+ ldr r1, [r12] @ =idle_data-ot
mov r0, r8, lsr #8
cmp r0, #0x66
mov r0, r8, lsr #8
cmp r0, #0x66
- ldrlt r1, =Op6002
- ldreq r1, =Op6602
- ldrgt r1, =Op6702
+ add r1, r1, r12 @ =idle_data
+ ldrlt r1, [r1, #4*2] @ =Op6002-ot
+ ldreq r1, [r1, #4*3] @ =Op6602-ot
+ ldrgt r1, [r1, #4*4] @ =Op6702-ot
- ldr r3, =CycloneJumpTab
- str r1, [r3, r8, lsl #2]
+ str r1, [r6, r8, lsl #2]
bx r1
exit_detector:
bx r1
exit_detector:
@@
-171,3
+186,6
@@
exit_detector:
beq Op6602
b Op6702
beq Op6602
b Op6702
+offset_table:
+ .word idle_data - offset_table
+ .word patch_desc_table - offset_table