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

version 1.2, 2003/12/19 00:25:49 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 48  CPU_MAINMEM   equ  112 Line 18  CPU_MAINMEM   equ  112
         EXPORT  i286a_memorywrite          EXPORT  i286a_memorywrite
         EXPORT  i286a_memorywrite_w          EXPORT  i286a_memorywrite_w
   
         MACRO  
 $label  MEMADR  $offset  
 $label  dcd             (i286core + CPU_MAINMEM) $offset  
         MEND  
   
         AREA    .text, CODE, READONLY          AREA    .text, CODE, READONLY
   
 i286_memoryread  i286_memoryread
 i286a_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  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 118  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 144  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 153  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  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                                                                ; !!  
   
   
 i286_memorywrite_w  i286_memorywrite_w
 i286a_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 223  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  
   
         END          END
   

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


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