|
|
| version 1.5, 2003/12/19 12:29:04 | version 1.10, 2005/05/20 13:59:46 |
|---|---|
| Line 1 | Line 1 |
| USE_HIMEM equ &110000 | |
| INCLUDE i286a.inc | INCLUDE i286a.inc |
| INCLUDE i286amem.inc | |
| IMPORT memfn | IMPORT memfn |
| IMPORT i286core | IMPORT i286acore |
| IMPORT i286_nonram_r | IMPORT i286_nonram_r |
| IMPORT i286_nonram_rw | IMPORT i286_nonram_rw |
| EXPORT i286_memoryread | EXPORT memp_read8 |
| EXPORT i286_memoryread_w | EXPORT memp_read16 |
| EXPORT i286_memorywrite | EXPORT memp_write8 |
| EXPORT i286_memorywrite_w | EXPORT memp_write16 |
| EXPORT memr_read8 | |
| EXPORT memr_read16 | |
| EXPORT memr_write8 | |
| EXPORT memr_write16 | |
| EXPORT i286a_memoryread | EXPORT i286a_memoryread |
| EXPORT i286a_memoryread_w | EXPORT i286a_memoryread_w |
| Line 20 USE_HIMEM equ &110000 | Line 24 USE_HIMEM equ &110000 |
| AREA .text, CODE, READONLY | AREA .text, CODE, READONLY |
| i286_memoryread | memr_read8 mov r1, r1 lsl #16 |
| i286a_memoryread | mov r0, r0 lsl #4 |
| ldr r3, i2mr_cpu | add r0, r0, r1 lsr #16 |
| memp_read8 ldr r3, i2mr_cpu | |
| cmp r0, #I286_MEMREADMAX | cmp r0, #I286_MEMREADMAX |
| bcs i2mr_ext | bcs i2mr_ext |
| ldrb r0, [r3, r0] | ldrb r0, [r3, r0] |
| mov pc, lr | mov pc, lr |
| i2mr_cpu dcd i286core + CPU_SIZE | i2mr_cpu dcd i286acore + CPU_SIZE |
| i2mr_ext cmp r0, #USE_HIMEM | i2mr_ext cmp r0, #USE_HIMEM |
| bcs i2mr_himem | bcs i2mr_himem |
| stmdb sp!, {r7, r9, lr} | stmdb sp!, {r7, r9, lr} |
| Line 35 i2mr_ext cmp r0, #USE_HIMEM | Line 40 i2mr_ext cmp r0, #USE_HIMEM |
| and r12, r0, #(&1f << 15) | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | mov r9, r3 ; cpu |
| ldr r2, [r2, r12 lsr #(15 - 2)] | ldr r2, [r2, r12 lsr #(15 - 2)] |
| CPULDC | ldr r7, [r9, #CPU_REMAINCLOCK] |
| mov lr, pc | mov lr, pc |
| mov pc, r2 | mov pc, r2 |
| CPUSVC | str r7, [r9, #CPU_REMAINCLOCK] |
| ldmia sp!, {r7, r9, pc} | ldmia sp!, {r7, r9, pc} |
| i2mr_memfnrd8 dcd memfn | i2mr_memfnrd8 dcd memfn |
| i2mr_himem ldr r12, [r3, #CPU_EXTMEMSIZE] | i2mr_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| Line 50 i2mr_himem ldr r12, [r3, #CPU_EXTMEMSI | Line 55 i2mr_himem ldr r12, [r3, #CPU_EXTMEMSI |
| mov pc, lr | mov pc, lr |
| i286_memoryread_w | memr_read16 mov r1, r1 lsl #16 |
| i286a_memoryread_w | mov r0, r0 lsl #4 |
| ldr r3, i2mrw_cpu | add r0, r0, r1 lsr #16 |
| memp_read16 ldr r3, i2mrw_cpu | |
| tst r0, #1 | tst r0, #1 |
| bne i2mro_main | bne i2mro_main |
| cmp r0, #I286_MEMREADMAX | cmp r0, #I286_MEMREADMAX |
| bcs i2mre_ext | bcs i2mre_ext |
| ldrh r0, [r3, r0] | ldrh r0, [r3, r0] |
| mov pc, lr | mov pc, lr |
| i2mrw_cpu dcd i286core + CPU_SIZE | i2mrw_cpu dcd i286acore + CPU_SIZE |
| i2mre_ext cmp r0, #USE_HIMEM | i2mre_ext cmp r0, #USE_HIMEM |
| bcs i2mre_himem | bcs i2mre_himem |
| i2mrw_ext stmdb sp!, {r7, r9, lr} | i2mrw_ext stmdb sp!, {r7, r9, lr} |
| Line 67 i2mrw_ext stmdb sp!, {r7, r9, lr} | Line 73 i2mrw_ext stmdb sp!, {r7, r9, lr} |
| and r12, r0, #(&1f << 15) | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | mov r9, r3 ; cpu |
| ldr r2, [r2, r12 lsr #(15 - 2)] | ldr r2, [r2, r12 lsr #(15 - 2)] |
| CPULDC | ldr r7, [r9, #CPU_REMAINCLOCK] |
| mov lr, pc | mov lr, pc |
| mov pc, r2 | mov pc, r2 |
| CPUSVC | str r7, [r9, #CPU_REMAINCLOCK] |
| ldmia sp!, {r7, r9, pc} | ldmia sp!, {r7, r9, pc} |
| i2mre_memfnrd16 dcd memfn + (32 * 4) * 2 | i2mre_memfnrd16 dcd memfn + (32 * 4) * 2 |
| i2mre_himem ldr r12, [r3, #CPU_EXTMEMSIZE] | i2mre_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| ldr r12, [r3, #CPU_EXTMEM] | ldr r2, [r3, #CPU_EXTMEM] |
| sub r1, r0, #&100000 | sub r1, r0, #&100000 |
| cmp r1, r12 | cmp r1, r12 |
| bcs i286_nonram_rw | bcs i286_nonram_rw |
| Line 134 i2mro_himemh orr r0, r0, #&ff00 | Line 140 i2mro_himemh orr r0, r0, #&ff00 |
| mov pc, lr | mov pc, lr |
| i286_memorywrite | memr_write8 mov r1, r1 lsl #16 |
| i286a_memorywrite | mov r0, r0 lsl #4 |
| ldr r3, i2mw_cpu | add r0, r0, r1 lsr #16 |
| mov r1, r2 | |
| memp_write8 ldr r3, i2mw_cpu | |
| cmp r0, #I286_MEMWRITEMAX | cmp r0, #I286_MEMWRITEMAX |
| bcs i2mw_ext | bcs i2mw_ext |
| strb r1, [r3, r0] | strb r1, [r3, r0] |
| mov pc, lr | mov pc, lr |
| i2mw_cpu dcd i286core + CPU_SIZE ; !! | i2mw_cpu dcd i286acore + CPU_SIZE |
| i2mw_ext cmp r0, #USE_HIMEM | i2mw_ext cmp r0, #USE_HIMEM |
| bcs i2mw_himem | bcs i2mw_himem |
| stmdb sp!, {r7, r9, lr} | stmdb sp!, {r7, r9, lr} |
| Line 149 i2mw_ext cmp r0, #USE_HIMEM | Line 157 i2mw_ext cmp r0, #USE_HIMEM |
| and r12, r0, #(&1f << 15) | and r12, r0, #(&1f << 15) |
| mov r9, r3 | mov r9, r3 |
| ldr r2, [r2, r12, lsr #(15 - 2)] | ldr r2, [r2, r12, lsr #(15 - 2)] |
| CPULDC | ldr r7, [r9, #CPU_REMAINCLOCK] |
| mov lr, pc | mov lr, pc |
| mov pc, r2 | mov pc, r2 |
| CPUSVC | str r7, [r9, #CPU_REMAINCLOCK] |
| ldmia sp!, {r7, r9, pc} | ldmia sp!, {r7, r9, pc} |
| i2mw_memfnwr8 dcd memfn + (32 * 4) | i2mw_memfnwr8 dcd memfn + (32 * 4) |
| i2mw_himem ldr r12, [r3, #CPU_EXTMEMSIZE] | i2mw_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| Line 163 i2mw_himem ldr r12, [r3, #CPU_EXTMEMSI | Line 171 i2mw_himem ldr r12, [r3, #CPU_EXTMEMSI |
| mov pc, lr | mov pc, lr |
| i286_memorywrite_w | memr_write16 mov r1, r1 lsl #16 |
| i286a_memorywrite_w | mov r0, r0 lsl #4 |
| ldr r3, i2mww_cpu | add r0, r0, r1 lsr #16 |
| mov r1, r2 | |
| memp_write16 ldr r3, i2mww_cpu | |
| tst r0, #1 | tst r0, #1 |
| bne i2mwo_main | bne i2mwo_main |
| cmp r0, #I286_MEMWRITEMAX | cmp r0, #I286_MEMWRITEMAX |
| bcs i2mwe_ext | bcs i2mwe_ext |
| strh r1, [r3, r0] | strh r1, [r3, r0] |
| mov pc, lr | mov pc, lr |
| i2mww_cpu dcd i286core + CPU_SIZE ; !! | i2mww_cpu dcd i286acore + CPU_SIZE |
| i2mwe_ext cmp r0, #USE_HIMEM | i2mwe_ext cmp r0, #USE_HIMEM |
| bcs i2mwe_himem | bcs i2mwe_himem |
| i2mww_ext stmdb sp!, {r7, r9, lr} | i2mww_ext stmdb sp!, {r7, r9, lr} |
| Line 180 i2mww_ext stmdb sp!, {r7, r9, lr} | Line 190 i2mww_ext stmdb sp!, {r7, r9, lr} |
| and r12, r0, #(&1f << 15) | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | mov r9, r3 ; cpu |
| ldr r2, [r2, r12 lsr #(15 - 2)] | ldr r2, [r2, r12 lsr #(15 - 2)] |
| CPULDC | ldr r7, [r9, #CPU_REMAINCLOCK] |
| mov lr, pc | mov lr, pc |
| mov pc, r2 | mov pc, r2 |
| CPUSVC | str r7, [r9, #CPU_REMAINCLOCK] |
| ldmia sp!, {r7, r9, pc} | ldmia sp!, {r7, r9, pc} |
| i2mwe_memfnwr16 dcd memfn + (32 * 4) * 3 | i2mwe_memfnwr16 dcd memfn + (32 * 4) * 3 |
| i2mwe_himem ldr r12, [r3, #CPU_EXTMEMSIZE] | i2mwe_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| Line 244 i2mwo_10ffff add r3, r3, #USE_HIMEM | Line 254 i2mwo_10ffff add r3, r3, #USE_HIMEM |
| strneb r1, [r12] | strneb r1, [r12] |
| mov pc, lr | mov pc, lr |
| ; ---- from asm | |
| i286a_memoryread | |
| cmp r0, #I286_MEMREADMAX | |
| bcs i2amr_ext | |
| ldrb r0, [r9, r0] | |
| mov pc, lr | |
| i2amr_ext cmp r0, #USE_HIMEM | |
| bcs i2amr_himem | |
| ldr r2, i2amr_memfnrd8 | |
| and r12, r0, #(&1f << 15) | |
| ldr pc, [r2, r12 lsr #(15 - 2)] | |
| i2amr_memfnrd8 dcd memfn | |
| i2amr_himem ldr r12, [r9, #CPU_EXTMEMSIZE] | |
| ldr r2, [r9, #CPU_EXTMEM] | |
| sub r1, r0, #&100000 | |
| cmp r1, r12 | |
| bcs i286_nonram_r | |
| ldrb r0, [r2, r1] | |
| mov pc, lr | |
| i286a_memoryread_w | |
| tst r0, #1 | |
| bne i2amro_main | |
| cmp r0, #I286_MEMREADMAX | |
| bcs i2amre_ext | |
| ldrh r0, [r9, r0] | |
| mov pc, lr | |
| i2amre_ext cmp r0, #USE_HIMEM | |
| bcs i2amre_himem | |
| i2amrw_ext ldr r2, i2amre_memfnrdw | |
| and r12, r0, #(&1f << 15) | |
| ldr pc, [r2, r12 lsr #(15 - 2)] | |
| i2amre_memfnrdw dcd memfn + (32 * 4) * 2 | |
| i2amre_himem ldr r12, [r9, #CPU_EXTMEMSIZE] | |
| ldr r2, [r9, #CPU_EXTMEM] | |
| sub r1, r0, #&100000 | |
| cmp r1, r12 | |
| bcs i286_nonram_rw | |
| ldrh r0, [r1, r2] | |
| mov pc, lr | |
| i2amro_main add r1, r0, #1 | |
| cmp r1, #I286_MEMREADMAX | |
| bcs i2amro_ext | |
| add r1, r9, r0 | |
| ldrb r0, [r9, r0] | |
| ldrb r1, [r1, #1] | |
| add r0, r0, r1 lsl #8 | |
| mov pc, lr | |
| i2amro_ext cmp r1, #USE_HIMEM | |
| bcs i2amro_himem | |
| movs r1, r1, lsl #(32 - 15) | |
| bne i2amrw_ext | |
| ldr r3, i2amro_memfnrdb | |
| stmdb sp!, {r5 - r6, lr} ; ここチェックするように… | |
| and r1, r0, #(&1f << 15) | |
| ldr r2, [r3, r1 lsr #(15 - 2)] | |
| add r5, r0, #1 | |
| mov lr, pc | |
| mov pc, r2 | |
| ldr r3, i2amro_memfnrdb | |
| and r1, r5, #(&1f << 15) | |
| mov r6, r0 | |
| ldr r2, [r3, r1, lsr #(15 - 2)] | |
| mov r0, r5 | |
| mov lr, pc | |
| mov pc, r2 | |
| add r0, r6, r0 lsl #8 | |
| ldmia sp!, {r5 - r6, pc} | |
| i2amro_memfnrdb dcd memfn | |
| i2amro_himem ldr r2, [r9, #CPU_EXTMEM] | |
| ldr r12, [r9, #CPU_EXTMEMSIZE] | |
| sub r1, r1, #&100000 | |
| add r2, r1, r2 | |
| beq i2amro_10ffff ; = 10ffff | |
| cmp r1, r12 | |
| bcs i2amro_himeml ; = over | |
| ldrb r0, [r2, #-1] | |
| ldrb r1, [r2] | |
| add r0, r0, r1 lsl #8 | |
| mov pc, lr | |
| i2amro_10ffff ldrb r0, [r9, r0] | |
| cmp r1, r12 | |
| bcs i2amro_himemh | |
| ldrb r1, [r2] | |
| add r0, r0, r1 lsl #8 | |
| mov pc, lr | |
| i2amro_himeml ldreqb r0, [r2, #-1] | |
| movne r0, #&ff | |
| i2amro_himemh orr r0, r0, #&ff00 | |
| mov pc, lr | |
| i286a_memorywrite | |
| cmp r0, #I286_MEMWRITEMAX | |
| bcs i2amw_ext | |
| strb r1, [r9, r0] | |
| mov pc, lr | |
| i2amw_ext cmp r0, #USE_HIMEM | |
| bcs i2amw_himem | |
| ldr r2, i2amw_memfnwrb | |
| and r12, r0, #(&1f << 15) | |
| ldr pc, [r2, r12, lsr #(15 - 2)] | |
| i2amw_memfnwrb dcd memfn + (32 * 4) | |
| i2amw_himem ldr r12, [r9, #CPU_EXTMEMSIZE] | |
| ldr r3, [r9, #CPU_EXTMEM] | |
| sub r2, r0, #&100000 | |
| cmp r2, r12 | |
| strccb r1, [r3, r2] | |
| mov pc, lr | |
| i286a_memorywrite_w | |
| tst r0, #1 | |
| bne i2amwo_main | |
| cmp r0, #I286_MEMWRITEMAX | |
| bcs i2amwe_ext | |
| strh r1, [r9, r0] | |
| mov pc, lr | |
| i2amwe_ext cmp r0, #USE_HIMEM | |
| bcs i2amwe_himem | |
| i2amww_ext ldr r2, i2amwe_memfnwrw | |
| and r12, r0, #(&1f << 15) | |
| ldr pc, [r2, r12 lsr #(15 - 2)] | |
| i2amwe_memfnwrw dcd memfn + (32 * 4) * 3 | |
| i2amwe_himem ldr r12, [r9, #CPU_EXTMEMSIZE] | |
| ldr r3, [r9, #CPU_EXTMEM] | |
| sub r2, r0, #&100000 | |
| cmp r2, r12 | |
| strcch r1, [r2, r3] | |
| mov pc, lr | |
| i2amwo_main add r2, r0, #1 | |
| cmp r2, #I286_MEMWRITEMAX | |
| bcs i2amwo_ext | |
| add r2, r9, r0 | |
| mov r12, r1 lsr #8 | |
| strb r1, [r9, r0] | |
| strb r12, [r2, #1] | |
| mov pc, lr | |
| i2amwo_ext cmp r2, #USE_HIMEM | |
| bcs i2amwo_himem | |
| movs r2, r2, lsl #(32 - 15) | |
| bne i2amww_ext | |
| ldr r12, i2amwo_memfnwrb | |
| and r3, r0, #(&1f << 15) | |
| add r2, r0, #1 | |
| ldr r12, [r12, r3 lsr #(15 - 2)] | |
| mov r3, r1, lsr #8 | |
| stmdb sp!, {r2 - r3, lr} ; ここチェックするように… | |
| mov lr, pc | |
| mov pc, r12 | |
| ldr r12, i2amwo_memfnwrb | |
| ldmia sp!, {r0 - r1, lr} | |
| and r3, r0, #(&1f << 15) | |
| ldr pc, [r12, r0 lsr #(15 - 2)] | |
| i2amwo_memfnwrb dcd memfn + (32 * 4) | |
| i2amwo_himem ldr r12, [r9, #CPU_EXTMEM] | |
| ldr r0, [r9, #CPU_EXTMEMSIZE] | |
| sub r2, r2, #&100000 | |
| add r12, r2, r12 | |
| beq i2amwo_10ffff ; = 10ffff | |
| cmp r2, r0 | |
| mov r2, r1 lsr #8 | |
| strlsb r1, [r12, #-1] | |
| strccb r2, [r12] | |
| mov pc, lr | |
| i2amwo_10ffff add r3, r9, #USE_HIMEM | |
| mov r2, r1 lsr #8 | |
| strb r1, [r3, #-1] | |
| cmp r0, #0 | |
| strneb r1, [r12] | |
| mov pc, lr | |
| END | END |