--- np2/i286a/memorya.s 2003/12/20 11:49:47 1.7 +++ np2/i286a/memorya.s 2005/03/11 15:12:57 1.13 @@ -6,12 +6,13 @@ IMPORT vramupdate IMPORT tramupdate - IMPORT egc_write - IMPORT egc_read - IMPORT egc_write_w - IMPORT egc_read_w + IMPORT egc_writebyte + IMPORT egc_readbyte + IMPORT egc_writeword + IMPORT egc_readword EXPORT memfn + EXPORT i286_memorymap EXPORT i286_vram_dispatch EXPORT i286_nonram_r @@ -50,7 +51,7 @@ memfn dcd i286_rdex ; 00 dcd vram_r0 ; e0 dcd i286_rd dcd i286_rd - dcd i286_itf + dcd i286_rb dcd i286_wtex ; 00 dcd i286_wtex @@ -116,7 +117,7 @@ memfn dcd i286_rdex ; 00 dcd vramw_r0 ; e0 dcd i286w_rd dcd i286w_rd - dcd i286w_itf + dcd i286w_rb dcd i286w_wtex ; 00 dcd i286w_wtex @@ -993,68 +994,67 @@ grcgw_clock ;; ldr r3, grww_vramop mov pc, lr - ; ---- egc egc_rd ldrb r3, [r9, #MEMWAIT_GRCG] CPUWORK r3 - b egc_read + b egc_readbyte egcw_rd ldrb r3, [r9, #MEMWAIT_GRCG] ldrb r2, egcwrd_egc tst r0, #1 CPUWORK r3 - beq egc_read_w + beq egc_readword ldrh r12, [r2, #EGC_SFT] tst r12, #&1000 bne egcwrd_std add r2, r0, #1 mov r3, r1 lsr #8 stmdb sp!, {r2, r3, lr} - bl egc_write + bl egc_writebyte ldmia sp!, {r0, r1, lr} - b egc_write + b egc_writebyte egcwrd_std stmdb sp!, {r0, r1, lr} add r0, r0, #1 mov r1, r1 lsr #8 - bl egc_write + bl egc_writebyte ldmia sp!, {r0, r1, lr} - b egc_write + b egc_writebyte egcwrd_egc dcd egc egc_wt ldrb r3, [r9, #MEMWAIT_GRCG] CPUWORK r3 - b egc_write + b egc_writebyte egcw_wt ldrb r3, [r9, #MEMWAIT_GRCG] ldrb r2, egcwwt_egc tst r0, #1 CPUWORK r3 - beq egc_write_w + beq egc_writeword ldrh r12, [r2, #EGC_SFT] stmdb sp!, {r4, r5, lr} tst r12, #&1000 bne egcwwt_std add r4, r0, #1 mov r5, r1 lsr #8 - bl egc_read + bl egc_readbyte mov r1, r5 mov r5, r0 mov r0, r4 - bl egc_read + bl egc_readbyte orr r0, r5, r0 lsl #8 ldmia sp!, {r4, r5, lr} egcwwt_std mov r4, r0 mov r5, r1 add r0, r0, #1 mov r1, r1 lsr #8 - bl egc_read + bl egc_readbyte mov r1, r5 mov r5, r0 mov r0, r4 - bl egc_read + bl egc_readbyte orr r0, r5, r0 lsl #8 ldmia sp!, {r4, r5, lr} egcwwt_egc dcd egc @@ -1062,25 +1062,22 @@ egcwwt_egc dcd egc ; ---- emmc -emmc_rd ldr r2, emrd_extmempp +emmc_rd add r2, r9, #CPU_EMS and r3, r0, #(3 << 14) ldr r2, [r2, r3 lsr #(14 - 2)] mov r0, r0 lsl #(32 - 14) ldrb r0, [r2, r0 lsr #(32 - 14)] mov pc, lr -emrd_extmempp dcd extmem + EM_PAGEPTR - -emmc_wt ldr r2, emwt_extmempp +emmc_wt add r2, r9, #CPU_EMS and r3, r0, #(3 << 14) ldr r2, [r2, r3 lsr #(14 - 2)] mov r0, r0 lsl #(32 - 14) strb r1, [r2, r0 lsr #(32 - 14)] mov pc, lr -emwt_extmempp dcd extmem + EM_PAGEPTR -emmcw_rd ldr r2, emwrd_extmempp +emmcw_rd add r2, r9, #CPU_EMS and r12, r0, #(3 << 14) mov r0, r0 lsl #(32 - 14) ldr r3, [r2, r12 lsr #(14 - 2)] @@ -1089,7 +1086,6 @@ emmcw_rd ldr r2, emwrd_extmempp add r3, r3, r0 lsr #(32 - 14) ldrh r0, [r3] mov pc, lr -emwrd_extmempp dcd extmem + EM_PAGEPTR emmcw_rd_odd ldrb r1, [r3, r0 lsr #(32 - 14)] adds r0, r0, #(1 << (32 - 14)) beq emmcw_rd_3fff @@ -1103,9 +1099,7 @@ emmcw_rd_3fff eor r12, r12, #(1 << 14) mov pc, lr - - -emmcw_wt ldr r2, emwwt_extmempp +emmcw_wt add r2, r9, #CPU_EMS and r12, r0, #(3 << 14) mov r0, r0 lsl #(32 - 14) ldr r3, [r2, r12 lsr #(14 - 2)] @@ -1114,7 +1108,6 @@ emmcw_wt ldr r2, emwwt_extmempp add r3, r3, r0 lsr #(32 - 14) strh r1, [r3] mov pc, lr -emwwt_extmempp dcd extmem + EM_PAGEPTR emmcw_wt_odd strb r1, [r3, r0 lsr #(32 - 14)] mov r1, r1 lsr #8 adds r0, r0, #(1 << (32 - 14)) @@ -1129,23 +1122,30 @@ emmcw_wt_3fff eor r12, r12, #(1 << 14) ; ---- itf -i286_itf ldrb r2, [r9, #CPU_ITFBANK] - mov r3, r0 lsl #(32 - 15) - add r12, r9, #ITF_ADRS +i286_rb ldrb r2, [r9, #CPU_ITFBANK] + orr r12, r0, #VRAM_STEP + cmp r2, #0 + ldreqb r0, [r0, r9] + ldrneb r0, [r12, r9] + mov pc, lr + + +i286_wb ldrb r2, [r9, #CPU_ITFBANK] + orr r12, r0, #(&1c8000 - &0e8000) cmp r2, #0 - ldreqb r0, [r9, r0] - ldrneb r0, [r12, r3 lsr #(32 - 15)] + streqb r1, [r0, r9] + strneb r1, [r12, r9] mov pc, lr -i286w_itf ldrb r2, [r9, #CPU_ITFBANK] +i286w_rb ldrb r2, [r9, #CPU_ITFBANK] tst r0, #1 - bne i286w_itf_odd + bne i286w_rb_odd cmp r2, #0 orrne r0, r0, #VRAM_STEP ldrh r0, [r0, r9] mov pc, lr -i286w_itf_odd cmp r2, #0 +i286w_rb_odd cmp r2, #0 orrne r0, r0, #VRAM_STEP add r2, r0, #1 ldrb r0, [r0, r9] @@ -1154,6 +1154,22 @@ i286w_itf_odd cmp r2, #0 mov pc, lr +i286w_wb ldrb r2, [r9, #CPU_ITFBANK] + tst r0, #1 + bne i286w_wb_odd + cmp r2, #0 + addne r0, r0, #(&1c8000 - &0e8000) + strh r1, [r0, r9] + mov pc, lr +i286w_wb_odd cmp r2, #0 + addne r0, r0, #(&1c8000 - &0e8000) + mov r3, r1 lsr #8 + add r2, r0, #1 + strb r1, [r0, r9] + strb r3, [r2, r9] + mov pc, lr + + ; ---- other @@ -1165,6 +1181,55 @@ i286_wn mov pc, lr ; ---- dispatch +i286_memorymap + ldr r3, i2mm_memfn + and r1, r0, #1 + adr r2, mmaptbl + add r12, r2, r1 lsl #5 + ldr r1, [r2, r1 lsl #5] + ldr r2, [r12, #4] + str r1, [r3, #((0 * 32) + (0xe8000 >> (15 - 2)))] + str r1, [r3, #((0 * 32) + (0xf0000 >> (15 - 2)))] + str r2, [r3, #((0 * 32) + (0xf8000 >> (15 - 2)))] + ldr r1, [r12, #8] + ldr r2, [r12, #12] + str r1, [r3, #((4 * 32) + (0xd0000 >> (15 - 2)))] + str r1, [r3, #((4 * 32) + (0xd8000 >> (15 - 2)))] + str r2, [r3, #((4 * 32) + (0xe8000 >> (15 - 2)))] + str r2, [r3, #((4 * 32) + (0xf0000 >> (15 - 2)))] + str r2, [r3, #((4 * 32) + (0xf8000 >> (15 - 2)))] + ldr r1, [r12, #16] + ldr r2, [r12, #20] + str r1, [r3, #((8 * 32) + (0xe8000 >> (15 - 2)))] + str r1, [r3, #((8 * 32) + (0xf0000 >> (15 - 2)))] + str r2, [r3, #((8 * 32) + (0xf8000 >> (15 - 2)))] + ldr r1, [r12, #24] + ldr r2, [r12, #28] + str r1, [r3, #((12 * 32) + (0xd0000 >> (15 - 2)))] + str r1, [r3, #((12 * 32) + (0xd8000 >> (15 - 2)))] + str r2, [r3, #((12 * 32) + (0xe8000 >> (15 - 2)))] + str r2, [r3, #((12 * 32) + (0xf0000 >> (15 - 2)))] + str r2, [r3, #((12 * 32) + (0xf8000 >> (15 - 2)))] + mov pc, lr +i2mm_memfn dcd memfn +mmaptbl dcd i286_rd ; NEC + dcd i286_rb + dcd i286_wn + dcd i286_wn + dcd i286w_rd + dcd i286w_rb + dcd i286_wn + dcd i286_wn + dcd i286_rb ; EPSON + dcd i286_rb + dcd i286_wt + dcd i286_wb + dcd i286w_rb + dcd i286w_rb + dcd i286w_wt + dcd i286w_wb + + i286_vram_dispatch ldr r3, i2vd_memfn and r1, r0, #15