af32b6c2 |
1 | /************************************* |
2 | Little John GP32 |
3 | File : ncpu.S |
4 | Authors : FCA author |
5 | modified and adapted by Yoyo. |
6 | adapted for fceu by notaz, 2007. |
7 | **************************************/ |
8 | |
9 | #include "ncpu.h" |
10 | |
11 | @@@ |
12 | @@@ Offets from REG_OP_TABLE |
13 | @@@ |
14 | #define OTOFFS_NES_RAM (nes_internal_ram - cpu_exec_table) |
15 | #define OTOFFS_NES_STACK (nes_stack - cpu_exec_table) |
16 | #define OTOFFS_NES_REGS (nes_registers - cpu_exec_table) |
17 | #define OTOFFS_PC_BASE (pc_base - cpu_exec_table) |
18 | |
19 | @ fceu |
20 | #define FCEU_IQNMI 0x08 |
21 | #define FCEU_IQTEMP 0x80 |
22 | |
23 | |
24 | @@@@@@@@@@@@@@@@@@@@@@@@@@ |
25 | |
26 | |
27 | @ SECTION_FAST |
28 | SECTION_TEXT |
29 | ALIGN |
30 | |
31 | |
32 | |
33 | @@@ |
34 | @@@ r0 = Address (unbased) |
35 | @@@ uses REG_OP_TABLE; sets REG_PC; trashes r1,r2; keeps r0 |
36 | @@@ |
37 | .macro REBASE_PC |
38 | @ FIXME: do something with mem not in Page[]. |
39 | cmp r0, #0x2000 |
40 | ldrge r1, =Page |
41 | movge r2, r0, lsr #11 |
42 | ldrge r2, [r1, r2, lsl #2] |
43 | andlt r2, r0, #0xf800 |
44 | addlt r1, REG_OP_TABLE, #OTOFFS_NES_RAM |
45 | sublt r2, r1, r2 |
46 | str r2, [REG_OP_TABLE, #OTOFFS_PC_BASE] |
47 | add REG_PC, r2, r0 |
48 | .endm |
49 | |
50 | |
51 | .macro RETURN_FROM_CPU_EXEC |
52 | b cpu_exec_end |
53 | .endm |
54 | |
55 | |
56 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
57 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
58 | @@@ |
59 | @@@ CYCLE_NEXT |
60 | @@@ |
61 |