Diff for /np2/i286a/memoryd.s between versions 1.5 and 1.8

version 1.5, 2003/12/19 12:29:04 version 1.8, 2003/12/22 07:41:15
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
   
Line 13  USE_HIMEM   equ  &110000 Line 12  USE_HIMEM   equ  &110000
         EXPORT  i286_memorywrite          EXPORT  i286_memorywrite
         EXPORT  i286_memorywrite_w          EXPORT  i286_memorywrite_w
   
           EXPORT  i286_membyte_read
           EXPORT  i286_memword_read
           EXPORT  i286_membyte_write
           EXPORT  i286_memword_write
   
         EXPORT  i286a_memoryread          EXPORT  i286a_memoryread
         EXPORT  i286a_memoryread_w          EXPORT  i286a_memoryread_w
         EXPORT  i286a_memorywrite          EXPORT  i286a_memorywrite
Line 20  USE_HIMEM   equ  &110000 Line 24  USE_HIMEM   equ  &110000
   
         AREA    .text, CODE, READONLY          AREA    .text, CODE, READONLY
   
   i286_membyte_read
                                   mov             r1, r1 lsl #16
                                   mov             r0, r0 lsl #4
                                   add             r0, r0, r1 lsr #16
 i286_memoryread  i286_memoryread
 i286a_memoryread  ;;i286a_memoryread
                                 ldr             r3, i2mr_cpu                                  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 43  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 58  i2mr_himem  ldr  r12, [r3, #CPU_EXTMEMSI
                                 mov             pc, lr                                  mov             pc, lr
   
   
   i286_memword_read
                                   mov             r1, r1 lsl #16
                                   mov             r0, r0 lsl #4
                                   add             r0, r0, r1 lsr #16
 i286_memoryread_w  i286_memoryread_w
 i286a_memoryread_w  ;;i286a_memoryread_w
                                 ldr             r3, i2mrw_cpu                                  ldr             r3, i2mrw_cpu
                                 tst             r0, #1                                  tst             r0, #1
                                 bne             i2mro_main                                  bne             i2mro_main
Line 59  i286a_memoryread_w Line 71  i286a_memoryread_w
                                 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 79  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]
Line 134  i2mro_himemh orr  r0, r0, #&ff00 Line 146  i2mro_himemh orr  r0, r0, #&ff00
                                 mov             pc, lr                                  mov             pc, lr
   
   
   i286_membyte_write
                                   mov             r1, r1 lsl #16
                                   mov             r0, r0 lsl #4
                                   add             r0, r0, r1 lsr #16
                                   mov             r1, r2
 i286_memorywrite  i286_memorywrite
 i286a_memorywrite  ;;i286a_memorywrite
                                 ldr             r3, i2mw_cpu                                  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 166  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 180  i2mw_himem  ldr  r12, [r3, #CPU_EXTMEMSI
                                 mov             pc, lr                                  mov             pc, lr
   
   
   i286_memword_write
                                   mov             r1, r1 lsl #16
                                   mov             r0, r0 lsl #4
                                   add             r0, r0, r1 lsr #16
                                   mov             r1, r2
 i286_memorywrite_w  i286_memorywrite_w
 i286a_memorywrite_w  ;;i286a_memorywrite_w
                                 ldr             r3, i2mww_cpu                                  ldr             r3, i2mww_cpu
                                 tst             r0, #1                                  tst             r0, #1
                                 bne             i2mwo_main                                  bne             i2mwo_main
Line 172  i286a_memorywrite_w Line 194  i286a_memorywrite_w
                                 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 202  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 266  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             r12, [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
   

Removed from v.1.5  
changed lines
  Added in v.1.8


RetroPC.NET-CVS <cvs@retropc.net>