|
|
| version 1.1, 2003/12/15 20:58:12 | version 1.5, 2003/12/19 12:29:04 |
|---|---|
| Line 1 | Line 1 |
| I286_MEMREADMAX equ &a4000 | |
| I286_MEMWRITEMAX equ &a0000 | |
| USE_HIMEM equ &110000 | USE_HIMEM equ &110000 |
| ; cpu_reg equ 0 | INCLUDE i286a.inc |
| ; cpu_remainclock equ 28 | |
| ; cpu_baseclock equ 32 | |
| ; cpu_clock equ 36 | |
| ; cpu_adrsmask equ 40 | |
| ; cpu_es_base equ 44 | |
| ; cpu_cs_base equ 48 | |
| ; cpu_ss_base equ 52 | |
| ; cpu_ds_base equ 56 | |
| ; cpu_ss_fix equ 60 | |
| ; cpu_ds_fix equ 64 | |
| ; cpu_prefix equ 68 | |
| ; cpu_trap equ 70 | |
| ; cpu_type equ 71 | |
| ; cpu_pf_semaphore equ 72 | |
| ; cpu_repbak equ 76 | |
| ; cpu_inport equ 80 | |
| ; cpu_ovflag equ 84 | |
| ; cpu_GDTR equ 88 | |
| ; cpu_IDTR equ 94 | |
| ; cpu_MSW equ 100 | |
| ; cpu_resetreq equ 102 | |
| ; cpu_itfbank equ 103 | |
| CPU_EXTMEM equ 104 | |
| CPU_EXTMEMSIZE equ 108 | |
| CPU_MAINMEM equ 112 | |
| ; IMPORT mem | |
| IMPORT memfn | IMPORT memfn |
| IMPORT i286core | IMPORT i286core |
| IMPORT i286_nonram_r | IMPORT i286_nonram_r |
| Line 43 CPU_MAINMEM equ 112 | Line 13 CPU_MAINMEM equ 112 |
| EXPORT i286_memorywrite | EXPORT i286_memorywrite |
| EXPORT i286_memorywrite_w | EXPORT i286_memorywrite_w |
| MACRO | EXPORT i286a_memoryread |
| $label MEMADR $offset | EXPORT i286a_memoryread_w |
| $label dcd (i286core + CPU_MAINMEM) $offset | EXPORT i286a_memorywrite |
| MEND | EXPORT i286a_memorywrite_w |
| AREA .text, CODE, READONLY | AREA .text, CODE, READONLY |
| i286_memoryread | i286_memoryread |
| i286a_memoryread | |
| ldr r3, i2mr_cpu | |
| cmp r0, #I286_MEMREADMAX | cmp r0, #I286_MEMREADMAX |
| bcs i2mr_ext | bcs i2mr_ext |
| ldr r1, i2mr_mem | ldrb r0, [r3, r0] |
| ldrb r0, [r0, r1] | |
| mov pc, lr | mov pc, lr |
| i2mr_mem MEMADR ; !! | i2mr_cpu dcd i286core + CPU_SIZE |
| i2mr_ext cmp r0, #USE_HIMEM | i2mr_ext cmp r0, #USE_HIMEM |
| bcs i2mr_himem | bcs i2mr_himem |
| ldr r3, i2mr_memfnrd8 | stmdb sp!, {r7, r9, lr} |
| and r1, r0, #(&1f << 15) | ldr r2, i2mr_memfnrd8 |
| ldr pc, [r3, r1, lsr #(15 - 2)] | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | |
| ldr r2, [r2, r12 lsr #(15 - 2)] | |
| CPULDC | |
| mov lr, pc | |
| mov pc, r2 | |
| CPUSVC | |
| ldmia sp!, {r7, r9, pc} | |
| i2mr_memfnrd8 dcd memfn | i2mr_memfnrd8 dcd memfn |
| i2mr_himem sub r1, r0, #&100000 | i2mr_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| ldr r3, i2mr_cpu | ldr r2, [r3, #CPU_EXTMEM] |
| ldr r12, [r3, #CPU_EXTMEMSIZE] | sub r1, r0, #&100000 |
| cmp r1, r12 | cmp r1, r12 |
| bcs i286_nonram_r | bcs i286_nonram_r |
| ldr r12, [r3, #CPU_EXTMEM] | ldrb r0, [r2, r1] |
| ldrb r0, [r1, r12] | |
| mov pc, lr | mov pc, lr |
| i2mr_cpu dcd i286core ; !! | |
| i286_memoryread_w | i286_memoryread_w |
| i286a_memoryread_w | |
| 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 |
| ldr r1, i2mrw_mem | ldrh r0, [r3, r0] |
| ldrh r0, [r0, r1] | |
| mov pc, lr | mov pc, lr |
| i2mrw_mem MEMADR | i2mrw_cpu dcd i286core + CPU_SIZE |
| i2mre_ext cmp r0, #USE_HIMEM | i2mre_ext cmp r0, #USE_HIMEM |
| bcs i2mre_himem | bcs i2mre_himem |
| i2mrw_ext ldr r3, i2mre_memfnrd16 | i2mrw_ext stmdb sp!, {r7, r9, lr} |
| and r1, r0, #(&1f << 15) | ldr r2, i2mre_memfnrd16 |
| ldr pc, [r3, r1, lsr #(15 - 2)] | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | |
| ldr r2, [r2, r12 lsr #(15 - 2)] | |
| CPULDC | |
| mov lr, pc | |
| mov pc, r2 | |
| CPUSVC | |
| ldmia sp!, {r7, r9, pc} | |
| i2mre_memfnrd16 dcd memfn + (32 * 4) * 2 | i2mre_memfnrd16 dcd memfn + (32 * 4) * 2 |
| i2mre_himem sub r1, r0, #&100000 | i2mre_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| ldr r3, i2mre_cpu | ldr r12, [r3, #CPU_EXTMEM] |
| ldr r12, [r3, #CPU_EXTMEMSIZE] | sub r1, r0, #&100000 |
| cmp r1, r12 | cmp r1, r12 |
| bcs i286_nonram_rw | bcs i286_nonram_rw |
| ldr r12, [r3, #CPU_EXTMEM] | ldrh r0, [r1, r2] |
| ldrh r0, [r1, r12] | |
| mov pc, lr | mov pc, lr |
| i2mre_cpu dcd i286core ; !! | |
| i2mro_main add r1, r0, #1 | i2mro_main add r1, r0, #1 |
| cmp r1, #I286_MEMREADMAX | cmp r1, #I286_MEMREADMAX |
| bcs i2mro_ext | bcs i2mro_ext |
| ldr r1, i2mrw_mem | add r1, r3, r0 |
| add r1, r1, r0 | ldrb r0, [r3, r0] |
| ldrb r0, [r1] | |
| ldrb r1, [r1, #1] | ldrb r1, [r1, #1] |
| add r0, r0, r1 lsl #8 | add r0, r0, r1 lsl #8 |
| mov pc, lr | mov pc, lr |
| Line 114 i2mro_ext cmp r1, #USE_HIMEM | Line 92 i2mro_ext cmp r1, #USE_HIMEM |
| bcs i2mro_himem | bcs i2mro_himem |
| movs r1, r1, lsl #(32 - 15) | movs r1, r1, lsl #(32 - 15) |
| bne i2mrw_ext | bne i2mrw_ext |
| stmdb sp!, {r4 - r6, lr} ; ここチェックするように… | stmdb sp!, {r4 - r7, r9, lr} ; ここチェックするように… |
| ldr r4, i2mro_memfnrd8 | ldr r4, i2mro_memfnrd8 |
| add r5, r0, #1 | mov r9, r3 |
| and r1, r0, #(&1f << 15) | and r1, r0, #(&1f << 15) |
| CPULDC | |
| ldr r2, [r4, r1 lsr #(15 - 2)] | |
| add r5, r0, #1 | |
| mov lr, pc | mov lr, pc |
| ldr pc, [r4, r1, lsr #(15 - 2)] | mov pc, r2 |
| and r1, r5, #(&1f << 15) | |
| mov r6, r0 | mov r6, r0 |
| ldr r2, [r4, r1, lsr #(15 - 2)] | |
| mov r0, r5 | mov r0, r5 |
| and r1, r0, #(&1f << 15) | |
| mov lr, pc | mov lr, pc |
| ldr pc, [r4, r1, lsr #(15 - 2)] | mov pc, r2 |
| add r0, r6, r0 lsl #8 | add r0, r6, r0 lsl #8 |
| ldmia sp!, {r4 - r6, pc} | CPUSVC |
| ldmia sp!, {r4 - r7, r9, pc} | |
| i2mro_memfnrd8 dcd memfn | i2mro_memfnrd8 dcd memfn |
| i2mro_himem sub r1, r1, #&100000 | i2mro_himem ldr r2, [r3, #CPU_EXTMEM] |
| ldr r3, i2mro_cpu | |
| ldr r2, [r3, #CPU_EXTMEM] | |
| ldr r12, [r3, #CPU_EXTMEMSIZE] | ldr r12, [r3, #CPU_EXTMEMSIZE] |
| add r2, r2, r1 | sub r1, r1, #&100000 |
| add r2, r1, r2 | |
| beq i2mro_10ffff ; = 10ffff | beq i2mro_10ffff ; = 10ffff |
| cmp r1, r12 | cmp r1, r12 |
| bcs i2mro_himeml ; = over | bcs i2mro_himeml ; = over |
| Line 140 i2mro_himem sub r1, r1, #&100000 | Line 122 i2mro_himem sub r1, r1, #&100000 |
| ldrb r1, [r2] | ldrb r1, [r2] |
| add r0, r0, r1 lsl #8 | add r0, r0, r1 lsl #8 |
| mov pc, lr | mov pc, lr |
| i2mro_10ffff ldr r0, i2mro_mem10ffff | i2mro_10ffff ldrb r0, [r3, r0] |
| ldrb r0, [r0] | |
| cmp r1, r12 | cmp r1, r12 |
| bcs i2mro_himemh | bcs i2mro_himemh |
| ldrb r1, [r2] | ldrb r1, [r2] |
| Line 149 i2mro_10ffff ldr r0, i2mro_mem10ffff | Line 130 i2mro_10ffff ldr r0, i2mro_mem10ffff |
| mov pc, lr | mov pc, lr |
| i2mro_himeml ldreqb r0, [r2, #-1] | i2mro_himeml ldreqb r0, [r2, #-1] |
| movne r0, #&ff | movne r0, #&ff |
| i2mro_himemh add r0, r0, #&ff00 | i2mro_himemh orr r0, r0, #&ff00 |
| mov pc, lr | mov pc, lr |
| i2mro_cpu dcd i286core ; !! | |
| i2mro_mem10ffff MEMADR + USE_HIMEM - 1 | |
| i286_memorywrite | i286_memorywrite |
| i286a_memorywrite | |
| ldr r3, i2mw_cpu | |
| cmp r0, #I286_MEMWRITEMAX | cmp r0, #I286_MEMWRITEMAX |
| bcs i2mw_ext | bcs i2mw_ext |
| ldr r2, i2mw_mem | strb r1, [r3, r0] |
| strb r1, [r0, r2] | |
| mov pc, lr | mov pc, lr |
| i2mw_mem MEMADR ; !! | i2mw_cpu dcd i286core + CPU_SIZE ; !! |
| i2mw_ext cmp r0, #USE_HIMEM | i2mw_ext cmp r0, #USE_HIMEM |
| bcs i2mw_himem | bcs i2mw_himem |
| ldr r3, i2mw_memfnwr8 | stmdb sp!, {r7, r9, lr} |
| and r2, r0, #(&1f << 15) | ldr r2, i2mw_memfnwr8 |
| ldr pc, [r3, r2, lsr #(15 - 2)] | and r12, r0, #(&1f << 15) |
| mov r9, r3 | |
| ldr r2, [r2, r12, lsr #(15 - 2)] | |
| CPULDC | |
| mov lr, pc | |
| mov pc, r2 | |
| CPUSVC | |
| ldmia sp!, {r7, r9, pc} | |
| i2mw_memfnwr8 dcd memfn + (32 * 4) | i2mw_memfnwr8 dcd memfn + (32 * 4) |
| i2mw_himem sub r2, r0, #&100000 | i2mw_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| ldr r3, i2mw_cpu | |
| ldr r12, [r3, #CPU_EXTMEMSIZE] | |
| ldr r3, [r3, #CPU_EXTMEM] | ldr r3, [r3, #CPU_EXTMEM] |
| sub r2, r0, #&100000 | |
| cmp r2, r12 | cmp r2, r12 |
| strccb r1, [r2, r3] | strccb r1, [r3, r2] |
| mov pc, lr | mov pc, lr |
| i2mw_cpu dcd i286core ; !! | |
| if 1 | |
| i286_memorywrite_w | i286_memorywrite_w |
| i286a_memorywrite_w | |
| 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 |
| ldr r2, i2mww_mem | strh r1, [r3, r0] |
| strh r1, [r0, r2] | |
| mov pc, lr | mov pc, lr |
| i2mww_mem MEMADR ; !! | i2mww_cpu dcd i286core + CPU_SIZE ; !! |
| i2mwe_ext cmp r0, #USE_HIMEM | i2mwe_ext cmp r0, #USE_HIMEM |
| bcs i2mwe_himem | bcs i2mwe_himem |
| i2mww_ext ldr r3, i2mwe_memfnwr16 | i2mww_ext stmdb sp!, {r7, r9, lr} |
| and r2, r0, #(&1f << 15) | ldr r2, i2mwe_memfnwr16 |
| ldr pc, [r3, r2, lsr #(15 - 2)] | and r12, r0, #(&1f << 15) |
| mov r9, r3 ; cpu | |
| ldr r2, [r2, r12 lsr #(15 - 2)] | |
| CPULDC | |
| mov lr, pc | |
| mov pc, r2 | |
| CPUSVC | |
| ldmia sp!, {r7, r9, pc} | |
| i2mwe_memfnwr16 dcd memfn + (32 * 4) * 3 | i2mwe_memfnwr16 dcd memfn + (32 * 4) * 3 |
| i2mwe_himem sub r2, r0, #&100000 | i2mwe_himem ldr r12, [r3, #CPU_EXTMEMSIZE] |
| ldr r3, i2mwe_cpu | |
| ldr r12, [r3, #CPU_EXTMEMSIZE] | |
| ldr r3, [r3, #CPU_EXTMEM] | ldr r3, [r3, #CPU_EXTMEM] |
| sub r2, r0, #&100000 | |
| cmp r2, r12 | cmp r2, r12 |
| strcch r1, [r2, r3] | strcch r1, [r2, r3] |
| mov pc, lr | mov pc, lr |
| i2mwe_cpu dcd i286core ; !! | |
| i2mwo_main add r2, r0, #1 | i2mwo_main add r2, r0, #1 |
| cmp r2, #I286_MEMWRITEMAX | cmp r2, #I286_MEMWRITEMAX |
| bcs i2mwo_ext | bcs i2mwo_ext |
| ldr r2, i2mww_mem | add r2, r3, r0 |
| add r2, r2, r0 | mov r12, r1 lsr #8 |
| strb r1, [r2] | strb r1, [r3, r0] |
| mov r1, r1, lsr #8 | strb r12, [r2, #1] |
| strb r1, [r2, #1] | |
| mov pc, lr | mov pc, lr |
| i2mwo_ext cmp r2, #USE_HIMEM | i2mwo_ext cmp r2, #USE_HIMEM |
| Line 220 i2mwo_ext cmp r2, #USE_HIMEM | Line 207 i2mwo_ext cmp r2, #USE_HIMEM |
| movs r2, r2, lsl #(32 - 15) | movs r2, r2, lsl #(32 - 15) |
| bne i2mww_ext | bne i2mww_ext |
| ldr r2, i2mwo_memfnwr8 | stmdb sp!, {r4 - r7, r9, lr} ; ここチェックするように… |
| stmdb sp!, {r0 - r1, lr} ; ここチェックするように… | ldr r4, i2mwo_memfnwr8 |
| and r3, r0, #(&1f << 15) | mov r9, r3 |
| and r12, r0, #(&1f << 15) | |
| CPULDC | |
| ldr r2, [r4, r12 lsr #(15 - 2)] | |
| add r5, r0, #1 | |
| mov r6, r1 lsr #8 | |
| mov lr, pc | mov lr, pc |
| ldr pc, [r2, r3, lsr #(15 - 2)] | mov pc, r2 |
| ldmia sp!, {r0 - r1, lr} | and r12, r5, #(&1f << 15) |
| ldr r2, i2mwo_memfnwr8 | mov r0, r5 |
| add r0, r0, #1 | ldr r2, [r4, r12, lsr #(15 - 2)] |
| mov r1, r1, lsr #8 | mov r1, r6 |
| and r3, r0, #(&1f << 15) | mov lr, pc |
| ldr pc, [r2, r3, lsr #(15 - 2)] | mov pc, r2 |
| CPUSVC | |
| ldmia sp!, {r4 - r7, r9, pc} | |
| i2mwo_memfnwr8 dcd memfn + (32 * 4) | i2mwo_memfnwr8 dcd memfn + (32 * 4) |
| i2mwo_himem sub r2, r2, #&100000 | i2mwo_himem ldr r12, [r3, #CPU_EXTMEM] |
| ldr r3, i2mwo_cpu | ldr r0, [r3, #CPU_EXTMEMSIZE] |
| ldr r12, [r3, #CPU_EXTMEM] | sub r2, r2, #&100000 |
| ldr r3, [r3, #CPU_EXTMEMSIZE] | add r12, r2, r12 |
| add r12, r12, r2 | |
| beq i2mwo_10ffff ; = 10ffff | beq i2mwo_10ffff ; = 10ffff |
| cmp r2, r3 | cmp r2, r0 |
| mov r2, r1 lsr #8 | |
| strlsb r1, [r12, #-1] | strlsb r1, [r12, #-1] |
| mov r1, r1, lsr #8 | strccb r2, [r12] |
| strccb r1, [r12] | |
| mov pc, lr | mov pc, lr |
| i2mwo_10ffff ldr r2, i2mwo_mem10ffff | i2mwo_10ffff add r3, r3, #USE_HIMEM |
| strb r1, [r12] | mov r2, r1 lsr #8 |
| cmp r3, #0 | strb r1, [r3, #-1] |
| mov r1, r1, lsr #8 | cmp r0, #0 |
| strneb r1, [r12] | strneb r1, [r12] |
| mov pc, lr | mov pc, lr |
| i2mwo_cpu dcd i286core ; !! | |
| i2mwo_mem10ffff MEMADR + USE_HIMEM - 1 | |
| endif | |
| END | END |