--- np2/i286a/memoryd.s 2003/12/15 20:58:12 1.1 +++ np2/i286a/memoryd.s 2003/12/19 12:29:04 1.5 @@ -1,38 +1,8 @@ -I286_MEMREADMAX equ &a4000 -I286_MEMWRITEMAX equ &a0000 - USE_HIMEM equ &110000 -; cpu_reg equ 0 -; 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 - + INCLUDE i286a.inc -; IMPORT mem IMPORT memfn IMPORT i286core IMPORT i286_nonram_r @@ -43,70 +13,78 @@ CPU_MAINMEM equ 112 EXPORT i286_memorywrite EXPORT i286_memorywrite_w - MACRO -$label MEMADR $offset -$label dcd (i286core + CPU_MAINMEM) $offset - MEND - + EXPORT i286a_memoryread + EXPORT i286a_memoryread_w + EXPORT i286a_memorywrite + EXPORT i286a_memorywrite_w AREA .text, CODE, READONLY - i286_memoryread +i286a_memoryread + ldr r3, i2mr_cpu cmp r0, #I286_MEMREADMAX bcs i2mr_ext - ldr r1, i2mr_mem - ldrb r0, [r0, r1] + ldrb r0, [r3, r0] mov pc, lr -i2mr_mem MEMADR ; !! +i2mr_cpu dcd i286core + CPU_SIZE i2mr_ext cmp r0, #USE_HIMEM bcs i2mr_himem - ldr r3, i2mr_memfnrd8 - and r1, r0, #(&1f << 15) - ldr pc, [r3, r1, lsr #(15 - 2)] + stmdb sp!, {r7, r9, lr} + ldr r2, i2mr_memfnrd8 + 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_himem sub r1, r0, #&100000 - ldr r3, i2mr_cpu - ldr r12, [r3, #CPU_EXTMEMSIZE] +i2mr_himem ldr r12, [r3, #CPU_EXTMEMSIZE] + ldr r2, [r3, #CPU_EXTMEM] + sub r1, r0, #&100000 cmp r1, r12 bcs i286_nonram_r - ldr r12, [r3, #CPU_EXTMEM] - ldrb r0, [r1, r12] + ldrb r0, [r2, r1] mov pc, lr -i2mr_cpu dcd i286core ; !! - i286_memoryread_w +i286a_memoryread_w + ldr r3, i2mrw_cpu tst r0, #1 bne i2mro_main cmp r0, #I286_MEMREADMAX bcs i2mre_ext - ldr r1, i2mrw_mem - ldrh r0, [r0, r1] + ldrh r0, [r3, r0] mov pc, lr -i2mrw_mem MEMADR +i2mrw_cpu dcd i286core + CPU_SIZE i2mre_ext cmp r0, #USE_HIMEM bcs i2mre_himem -i2mrw_ext ldr r3, i2mre_memfnrd16 - and r1, r0, #(&1f << 15) - ldr pc, [r3, r1, lsr #(15 - 2)] +i2mrw_ext stmdb sp!, {r7, r9, lr} + ldr r2, i2mre_memfnrd16 + 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_himem sub r1, r0, #&100000 - ldr r3, i2mre_cpu - ldr r12, [r3, #CPU_EXTMEMSIZE] +i2mre_himem ldr r12, [r3, #CPU_EXTMEMSIZE] + ldr r12, [r3, #CPU_EXTMEM] + sub r1, r0, #&100000 cmp r1, r12 bcs i286_nonram_rw - ldr r12, [r3, #CPU_EXTMEM] - ldrh r0, [r1, r12] + ldrh r0, [r1, r2] mov pc, lr -i2mre_cpu dcd i286core ; !! i2mro_main add r1, r0, #1 cmp r1, #I286_MEMREADMAX bcs i2mro_ext - ldr r1, i2mrw_mem - add r1, r1, r0 - ldrb r0, [r1] + add r1, r3, r0 + ldrb r0, [r3, r0] ldrb r1, [r1, #1] add r0, r0, r1 lsl #8 mov pc, lr @@ -114,25 +92,29 @@ i2mro_ext cmp r1, #USE_HIMEM bcs i2mro_himem movs r1, r1, lsl #(32 - 15) bne i2mrw_ext - stmdb sp!, {r4 - r6, lr} ; ここチェックするように… + stmdb sp!, {r4 - r7, r9, lr} ; ここチェックするように… ldr r4, i2mro_memfnrd8 - add r5, r0, #1 + mov r9, r3 and r1, r0, #(&1f << 15) + CPULDC + ldr r2, [r4, r1 lsr #(15 - 2)] + add r5, r0, #1 mov lr, pc - ldr pc, [r4, r1, lsr #(15 - 2)] + mov pc, r2 + and r1, r5, #(&1f << 15) mov r6, r0 + ldr r2, [r4, r1, lsr #(15 - 2)] mov r0, r5 - and r1, r0, #(&1f << 15) mov lr, pc - ldr pc, [r4, r1, lsr #(15 - 2)] + mov pc, r2 add r0, r6, r0 lsl #8 - ldmia sp!, {r4 - r6, pc} + CPUSVC + ldmia sp!, {r4 - r7, r9, pc} i2mro_memfnrd8 dcd memfn -i2mro_himem sub r1, r1, #&100000 - ldr r3, i2mro_cpu - ldr r2, [r3, #CPU_EXTMEM] +i2mro_himem ldr r2, [r3, #CPU_EXTMEM] ldr r12, [r3, #CPU_EXTMEMSIZE] - add r2, r2, r1 + sub r1, r1, #&100000 + add r2, r1, r2 beq i2mro_10ffff ; = 10ffff cmp r1, r12 bcs i2mro_himeml ; = over @@ -140,8 +122,7 @@ i2mro_himem sub r1, r1, #&100000 ldrb r1, [r2] add r0, r0, r1 lsl #8 mov pc, lr -i2mro_10ffff ldr r0, i2mro_mem10ffff - ldrb r0, [r0] +i2mro_10ffff ldrb r0, [r3, r0] cmp r1, r12 bcs i2mro_himemh ldrb r1, [r2] @@ -149,70 +130,76 @@ i2mro_10ffff ldr r0, i2mro_mem10ffff mov pc, lr i2mro_himeml ldreqb r0, [r2, #-1] movne r0, #&ff -i2mro_himemh add r0, r0, #&ff00 +i2mro_himemh orr r0, r0, #&ff00 mov pc, lr -i2mro_cpu dcd i286core ; !! -i2mro_mem10ffff MEMADR + USE_HIMEM - 1 - i286_memorywrite +i286a_memorywrite + ldr r3, i2mw_cpu cmp r0, #I286_MEMWRITEMAX bcs i2mw_ext - ldr r2, i2mw_mem - strb r1, [r0, r2] + strb r1, [r3, r0] mov pc, lr -i2mw_mem MEMADR ; !! +i2mw_cpu dcd i286core + CPU_SIZE ; !! i2mw_ext cmp r0, #USE_HIMEM bcs i2mw_himem - ldr r3, i2mw_memfnwr8 - and r2, r0, #(&1f << 15) - ldr pc, [r3, r2, lsr #(15 - 2)] + stmdb sp!, {r7, r9, lr} + ldr r2, i2mw_memfnwr8 + 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_himem sub r2, r0, #&100000 - ldr r3, i2mw_cpu - ldr r12, [r3, #CPU_EXTMEMSIZE] +i2mw_himem ldr r12, [r3, #CPU_EXTMEMSIZE] ldr r3, [r3, #CPU_EXTMEM] + sub r2, r0, #&100000 cmp r2, r12 - strccb r1, [r2, r3] + strccb r1, [r3, r2] mov pc, lr -i2mw_cpu dcd i286core ; !! - - if 1 i286_memorywrite_w +i286a_memorywrite_w + ldr r3, i2mww_cpu tst r0, #1 bne i2mwo_main cmp r0, #I286_MEMWRITEMAX bcs i2mwe_ext - ldr r2, i2mww_mem - strh r1, [r0, r2] + strh r1, [r3, r0] mov pc, lr -i2mww_mem MEMADR ; !! +i2mww_cpu dcd i286core + CPU_SIZE ; !! i2mwe_ext cmp r0, #USE_HIMEM bcs i2mwe_himem -i2mww_ext ldr r3, i2mwe_memfnwr16 - and r2, r0, #(&1f << 15) - ldr pc, [r3, r2, lsr #(15 - 2)] +i2mww_ext stmdb sp!, {r7, r9, lr} + ldr r2, i2mwe_memfnwr16 + 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_himem sub r2, r0, #&100000 - ldr r3, i2mwe_cpu - ldr r12, [r3, #CPU_EXTMEMSIZE] +i2mwe_himem ldr r12, [r3, #CPU_EXTMEMSIZE] ldr r3, [r3, #CPU_EXTMEM] + sub r2, r0, #&100000 cmp r2, r12 strcch r1, [r2, r3] mov pc, lr -i2mwe_cpu dcd i286core ; !! i2mwo_main add r2, r0, #1 cmp r2, #I286_MEMWRITEMAX bcs i2mwo_ext - ldr r2, i2mww_mem - add r2, r2, r0 - strb r1, [r2] - mov r1, r1, lsr #8 - strb r1, [r2, #1] + add r2, r3, r0 + mov r12, r1 lsr #8 + strb r1, [r3, r0] + strb r12, [r2, #1] mov pc, lr i2mwo_ext cmp r2, #USE_HIMEM @@ -220,40 +207,42 @@ i2mwo_ext cmp r2, #USE_HIMEM movs r2, r2, lsl #(32 - 15) bne i2mww_ext - ldr r2, i2mwo_memfnwr8 - stmdb sp!, {r0 - r1, lr} ; ここチェックするように… - and r3, r0, #(&1f << 15) + stmdb sp!, {r4 - r7, r9, lr} ; ここチェックするように… + ldr r4, i2mwo_memfnwr8 + 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 - ldr pc, [r2, r3, lsr #(15 - 2)] - ldmia sp!, {r0 - r1, lr} - ldr r2, i2mwo_memfnwr8 - add r0, r0, #1 - mov r1, r1, lsr #8 - and r3, r0, #(&1f << 15) - ldr pc, [r2, r3, lsr #(15 - 2)] + mov pc, r2 + and r12, r5, #(&1f << 15) + mov r0, r5 + ldr r2, [r4, r12, lsr #(15 - 2)] + mov r1, r6 + mov lr, pc + mov pc, r2 + CPUSVC + ldmia sp!, {r4 - r7, r9, pc} i2mwo_memfnwr8 dcd memfn + (32 * 4) -i2mwo_himem sub r2, r2, #&100000 - ldr r3, i2mwo_cpu - ldr r12, [r3, #CPU_EXTMEM] - ldr r3, [r3, #CPU_EXTMEMSIZE] - add r12, r12, r2 +i2mwo_himem ldr r12, [r3, #CPU_EXTMEM] + ldr r0, [r3, #CPU_EXTMEMSIZE] + sub r2, r2, #&100000 + add r12, r2, r12 beq i2mwo_10ffff ; = 10ffff - cmp r2, r3 + cmp r2, r0 + mov r2, r1 lsr #8 strlsb r1, [r12, #-1] - mov r1, r1, lsr #8 - strccb r1, [r12] + strccb r2, [r12] mov pc, lr -i2mwo_10ffff ldr r2, i2mwo_mem10ffff - strb r1, [r12] - cmp r3, #0 - mov r1, r1, lsr #8 +i2mwo_10ffff add r3, r3, #USE_HIMEM + mov r2, r1 lsr #8 + strb r1, [r3, #-1] + cmp r0, #0 strneb r1, [r12] mov pc, lr -i2mwo_cpu dcd i286core ; !! -i2mwo_mem10ffff MEMADR + USE_HIMEM - 1 - endif - END