Diff for /np2/i286a/memorya.s between versions 1.1 and 1.6

version 1.1, 2003/12/15 20:58:12 version 1.6, 2003/12/20 10:27:55
Line 1 Line 1
   
 VRAM_STEP                       equ             &100000          INCLUDE i286a.inc
 VRAM_B                          equ             &0a8000          INCLUDE i286amem.inc
 VRAM_R                          equ             &0b0000          INCLUDE i286aio.inc
 VRAM_G                          equ             &0b8000  
 VRAM_E                          equ             &0e0000  
   
 FONT_ADRS                       equ             &110000  
 ITF_ADRS                        equ             &1f8000  
   
 ; 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  
   
 ; gdcs_access           equ             0  
 ; gdcs_disp                     equ             1  
 GDCS_TEXTDISP           equ             2  
 GDCS_MSWACC                     equ             3  
 GDCS_GRPHDISP           equ             4  
 ; gdcs_palchange        equ             5  
 ; gdcs_mode2            equ             6  
   
 ; grcg_counter          equ             0  
 ; grcg_mode                     equ             4  
 GRCG_MODEREG            equ             6  
 GRCG_TILE                       equ             8  
 ; grcg_gdcwithgrcg      equ             16  
 ; grcg_chip                     equ             20  
   
 ; vramop_operate        equ             0  
 VRAMOP_TRAMWAIT         equ             4  
 VRAMOP_VRAMWAIT         equ             8  
 VRAMOP_GRCGWAIT         equ             12  
   
 GW_LOW                          equ             0  
 GW_HIGH                         equ             4  
 GW_WRITABLE                     equ             8  
   
   
 ;       IMPORT  mem  
         IMPORT  memfn          IMPORT  memfn
         IMPORT  i286core  
         IMPORT  vramupdate          IMPORT  vramupdate
         IMPORT  gdcs  
         IMPORT  vramop  
         IMPORT  grcg  
         IMPORT  tramupdate          IMPORT  tramupdate
         IMPORT  cgwindow  
   
 ;       EXPORT  i286_wt          IMPORT  egc_write
 ;       EXPORT  tram_wt          IMPORT  egc_read
           IMPORT  egc_write_w
           IMPORT  egc_read_w
   
           EXPORT  i286_rd
           EXPORT  i286_rdex
           EXPORT  i286w_rd
           EXPORT  i286w_rdex
           EXPORT  i286_wt
           EXPORT  i286_wtex
           EXPORT  i286w_wt
           EXPORT  i286w_wtex
   
           EXPORT  tram_rd
           EXPORT  tramw_rd
           EXPORT  tram_wt
           EXPORT  tramw_wt
   
           EXPORT  vram_r0
           EXPORT  vram_r1
           EXPORT  vramw_r0
           EXPORT  vramw_r1
         EXPORT  vram_w0          EXPORT  vram_w0
         EXPORT  vram_w1          EXPORT  vram_w1
         EXPORT  grcg_rmw0          EXPORT  vramw_w0
         EXPORT  grcg_rmw1          EXPORT  vramw_w1
   
           EXPORT  grcg_tcr0
           EXPORT  grcg_tcr1
           EXPORT  grcgw_tcr0
           EXPORT  grcgw_tcr1
   
         EXPORT  grcg_tdw0          EXPORT  grcg_tdw0
         EXPORT  grcg_tdw1          EXPORT  grcg_tdw1
           EXPORT  grcgw_tdw0
           EXPORT  grcgw_tdw1
   
         EXPORT  vramw_w0          EXPORT  grcg_rmw0
         EXPORT  vramw_w1          EXPORT  grcg_rmw1
         EXPORT  grcgw_rmw0          EXPORT  grcgw_rmw0
         EXPORT  grcgw_rmw1          EXPORT  grcgw_rmw1
         EXPORT  grcgw_tdw0  
         EXPORT  grcgw_tdw1  ;;      EXPORT  egc_rd
   ;;      EXPORT  egcw_rd
   ;;      EXPORT  egc_wt
   ;;      EXPORT  egcw_wt
   
           EXPORT  emmc_rd
           EXPORT  emmcw_rd
           EXPORT  emmc_wt
           EXPORT  emmcw_wt
   
           EXPORT  i286_itf
           EXPORT  i286w_itf
   
           EXPORT  i286_wn
           EXPORT  i286w_wn
   
         EXPORT  i286_nonram_r          EXPORT  i286_nonram_r
         EXPORT  i286_nonram_rw          EXPORT  i286_nonram_rw
   
         MACRO  
 $label  MEMADR  $offset  
 $label  dcd             (i286core + CPU_MAINMEM) $offset  
         MEND  
   
         AREA    .text, CODE, READONLY          AREA    .text, CODE, READONLY
   
   ; ---- memory...
   
   i286_rd                 ldrb    r0, [r9, r0]
                                   mov             pc, lr
   i286_rdex               ldr             r12, [r9, #CPU_ADRSMASK]
                                   and             r0, r12, r0
                                   ldrb    r0, [r9, r0]
                                   mov             pc, lr
   
   i286w_rd                add             r2, r9, #1
                                   ldrb    r1, [r9, r0]
                                   ldrb    r3, [r2, r0]
                                   orr             r0, r1, r3 lsl #8
                                   mov             pc, lr
   i286w_rdex              ldr             r12, [r9, #CPU_ADRSMASK]
                                   add             r2, r9, #1
                                   and             r0, r12, r0
                                   ldrb    r1, [r9, r0]
                                   ldrb    r3, [r2, r0]
                                   orr             r0, r1, r3 lsl #8
                                   mov             pc, lr
   
   i286_wt                 strb    r1, [r9, r0]
                                   mov             pc, lr
   i286_wtex               ldr             r2, [r9, #CPU_ADRSMASK]
                                   and             r0, r2, r0
                                   strb    r1, [r9, r0]
                                   mov             pc, lr
   
   i286w_wt                add             r2, r9, #1
                                   mov             r3, r1 lsr #8
                                   strb    r1, [r9, r0]
                                   strb    r3, [r2, r0]
                                   mov             pc, lr
   i286w_wtex              ldr             r12, [r9, #CPU_ADRSMASK]
                                   add             r2, r9, #1
                                   mov             r3, r1 lsr #8
                                   and             r0, r12, r0
                                   strb    r1, [r9, r0]
                                   strb    r3, [r2, r0]
                                   mov             pc, lr
   
   
 ; ---- write byte  
   
         if 0  ; ---- text ram
 i286_wt                 ldr             r2, iwt_cpu  
                                 ldr             r3, iwt_mem  
                                 ldr             r2, [r2, #CPU_ADRSMASK]  
                                 and             r0, r0, r2  
                                 strb    r1, [r0, r3]  
                                 mov             pc, lr  
 iwt_cpu                 dcd             i286core  
 iwt_mem                 MEMADR  
         endif  
   
         if 0  
 tram_wt                 ldr             r2, twt_cpu  
                                 ldr             r3, twt_vramop  
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_TRAMWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
   
   tram_rd         ;;      ldr             r3, trd_vramop
                                   ldrb    r12, [r9, #MEMWAIT_TRAM]
                                   sub             r1, r0, #&a4000
                                   cmp             r1, #&1000
                                   CPUWORK r12
                                   ldrcsb  r0, [r0, r9]
                                   movcs   pc, lr
                                   ldr             r2, trd_cgwnd
                                   tst             r0, #1
                                   ldreq   r3, [r2, #CGW_LOW]
                                   ldrne   r3, [r2, #CGW_HIGH]
                                   and             r0, r0, #(&f << 1)
                                   add             r1, r9, #FONT_ADRS
                                   add             r3, r1, r3
                                   ldrb    r0, [r3, r0 lsr #1]
                                   mov             pc, lr
   trd_cgwnd               dcd             cgwindow
   ;; trd_vramop   dcd             vramop
   
   
   tramw_rd        ;;      ldr             r3, twrd_vramop
                                   ldrb    r2, [r9, #MEMWAIT_TRAM]
                                   ldr             r12, twrd_cgwnd
                                   tst             r0, #1
                                   CPUWORK r2
                                   bne             tramw_rd_odd
                                   sub             r1, r0, #&a4000
                                   cmp             r1, #&1000
                                   ldrcsh  r0, [r0, r9]
                                   movcs   pc, lr
                                   ldr             r2, [r12, #CGW_LOW]
                                   ldr             r3, [r12, #CGW_HIGH]
                                   and             r0, r0, #(&f << 1)
                                   add             r1, r9, #FONT_ADRS
                                   add             r12, r1, r0 lsr #1
                                   ldrb    r0, [r12, r2]
                                   ldrb    r1, [r12, r3]
                                   orr             r0, r0, r1 lsl #8
                                   mov             pc, lr
   twrd_cgwnd              dcd             cgwindow
   tramw_rd_odd    add             r1, r0, #1
                                   cmp             r1, #&a4000
                                   bcc             tramw_rd_oddt
                                   beq             tramw_rd_3fff
                                   cmp             r1, #&a5000
                                   ble             tramw_rd_oddf
   tramw_rd_oddt   ldrb    r0, [r0, r9]
                                   ldrb    r1, [r1, r9]
                                   orr             r0, r0, r1 lsl #8
                                   mov             pc, lr
   tramw_rd_3fff   cmp             r1, #(1 << 31)          ; set v / clr z
   tramw_rd_oddf   ldrvc   r2, [r12, #CGW_HIGH]
                                   ldrne   r12, [r12, #CGW_LOW]
                                   addal   r3, r9, #FONT_ADRS
                                   andvc   r0, r0, #(&f << 1)
                                   andne   r1, r1, #(&f << 1)
                                   addvc   r2, r2, r3
                                   addne   r12, r12, r3
                                   ldrvcb  r0, [r2, r0 lsr #1]
                                   ldrvsb  r0, [r0, r9]
                                   ldrneb  r1, [r12, r1 lsr #1]
                                   ldreqb  r1, [r1, r9]
                                   orr             r0, r0, r1 lsl #8
                                   mov             pc, lr
   
   
   tram_wt         ;;      ldr             r3, twt_vramop
                                   ldrb    r12, [r9, #MEMWAIT_TRAM]
                                   cmp             r0, #&a4000
                                   bcs             twt_cgwnd
                                   CPUWORK r12
   
                                   ldr             r3, twt_gdcs
                                 mov             r12, r0, lsl #(31 - 12)                                  mov             r12, r0, lsl #(31 - 12)
                                 cmp             r0, #&a2000                                  cmp             r0, #&a2000
                                 bcc             twt_write                                  bcc             twt_write
   
                                 cmp             r0, #&a4000  
                                 bcs             twt_nontram  
                                 tst             r0, #1                                  tst             r0, #1
                                 movne   pc, lr                                  movne   pc, lr
   
                                 cmp             r12, #(&1fe0 << (31 - 12))  twt_attr                cmp             r12, #(&1fe0 << (31 - 12))
                                 bcc             twt_write                                  bcc             twt_write
                                 tst             r0, #2                                  tst             r0, #2
                                 beq             twt_write                                  beq             twt_write
                                   ldrb    r2, [r3, #GDCS_MSWACC]
                                 ldr             r2, twt_gdcs  
                                 ldrb    r2, [r2, #GDCS_MSWACC]  
                                 cmp             r2, #0                                  cmp             r2, #0
                                 moveq   pc, lr                                  moveq   pc, lr
   
 twt_write               ldr             r3, twt_mem  twt_write               strb    r1, [r0, r9]
                                 strb    r1, [r3, r0]  twt_dirtyupd    ldr             r2, twt_tramupd
                                   ldrb    r0, [r3, #GDCS_TEXTDISP]
                                   mov             r1, #1
                                   strb    r1, [r2, r12, lsr #(32 - 12)]
                                   orr             r0, r0, #1
                                   strb    r0, [r3, #GDCS_TEXTDISP]
                                   mov             pc, lr
   
   
   ;; twt_vramop   dcd             vramop
   twt_gdcs                dcd             gdcs
   twt_tramupd             dcd             tramupdate
   
   
   tramw_wt                ldrb    r12, [r9, #MEMWAIT_TRAM]
                                   cmp             r0, #&a4000
                                   bcs             twwt_cgwnd
                                   CPUWORK r12
                                   ldr             r3, twt_gdcs
                                   mov             r12, r0 lsl #(31 - 12)
                                   tst             r0, #1
                                   bne             twwto_main
                                   cmp             r0, #&a2000
                                   strcch  r1, [r0, r9]
                                   bcc             twt_dirtyupd
                                   bcs             twt_attr
   
   twwto_main              mov             r2, r0
                                   add             r0, r0, #1
                                   cmp             r0, #&a2000
                                   strleb  r1, [r2, r9]
                                   mov             r1, r1 lsr #8
                                   bgt             twt_attr
                                   strb    r1, [r0, r9]
                                   ldrb    r1, [r3, #GDCS_TEXTDISP]
                                 ldr             r2, twt_tramupd                                  ldr             r2, twt_tramupd
                                 mov             r3, #1                                  mov             r0, #1
                                 strb    r3, [r2, r12, lsr #(32 - 12)]                                  orr             r1, r1, #1
                                 ldr             r2, twt_gdcs                                  strb    r0, [r2, r12 lsr #(32 - 12)]
                                 ldrb    r12, [r2, #GDCS_TEXTDISP]                                  add             r12, r12, #(1 << (32 - 12))]
                                 orr             r2, r2, r3                                  strb    r1, [r3, #GDCS_TEXTDISP]
                                 strb    r12, [r2, #GDCS_TEXTDISP]                                  strb    r0, [r2, r12 lsr #(32 - 12)]
                                 mov             pc, lr                                  mov             pc, lr
   
 twt_nontram             cmp             r0, #&a5000  
   twt_cgwnd               CPUWORK r12
                                   ldr             r3, twt_cgwindow
                                   cmp             r0, #&a5000
                                 movcs   pc, lr                                  movcs   pc, lr
                                   ldrb    r12, [r3, #CGW_WRITABLE]
                                   and             r0, r0, #&1f
                                 tst             r0, #1                                  tst             r0, #1
                                   tstne   r12, #1
                                 moveq   pc, lr                                  moveq   pc, lr
                                 ldr             r2, twt_cgwnd                                  orr             r12, r12, #&80
                                 ldrb    r12, [r2, #GW_WRITABLE]                                  strb    r12, [r3, #CGW_WRITABLE]
                                   ldr             r3, [r3, #CGW_HIGH]
                                   add             r12, r9, #FONT_ADRS
                                   add             r12, r12, r0 lsr #1
                                   strb    r1, [r12, r3]
                                   mov             pc, lr
   twt_cgwindow    dcd             cgwindow
   
   twwt_cgwnd              CPUWORK r12
                                   ldr             r3, twt_cgwindow
                                   cmp             r0, #&a5000
                                   movcs   pc, lr
                                   ldrb    r12, [r3, #CGW_WRITABLE]
                                   tst             r0, #1
                                   moveq   r1, r1 lsr #8
                                 tst             r12, #1                                  tst             r12, #1
                                 moveq   pc, lr                                  moveq   pc, lr
                                 orr             r12, r12, #&80                                  orr             r12, r12, #&80
                                 strb    r12, [r2, #GW_WRITABLE]                                  strb    r12, [r3, #CGW_WRITABLE]
                                 and             r0, r0, #(&f << 1)                                  and             r0, r0, #(&f << 1)
                                 ldr             r3, [r2, #GW_HIGH]                                  ldr             r3, [r3, #CGW_HIGH]
                                 ldr             r12, twt_fontrom                                  add             r12, r9, #FONT_ADRS
                                 add             r12, r12, r0 lsr #1                                  add             r12, r12, r0 lsr #1
                                 strb    r1, [r3, r12]                                  strb    r1, [r12, r3]
                                   mov             pc, lr
   
   
   
   ; ---- vram normal
   
   vram_r1                 add             r0, r0, #VRAM_STEP
   vram_r0                 ldrb    r3, [r9, #MEMWAIT_VRAM]
                                   ldrb    r0, [r0, r9]
                                   CPUWORK r3
                                   mov             pc, lr
   
   
   vramw_r1                add             r0, r0, #VRAM_STEP
   vramw_r0        ;;      ldr             r3, twrd_vramop
                                   add             r2, r0, r9
                                   ldrb    r3, [r9, #MEMWAIT_VRAM]
                                   ldrb    r0, [r9, r0]
                                   ldrb    r1, [r2, #1]
                                   CPUWORK r3
                                   orr             r0, r0, r1 lsl #8
                                 mov             pc, lr                                  mov             pc, lr
 twt_cpu                 dcd             i286core  
 twt_vramop              dcd             vramop  
 twt_mem                 MEMADR  
 twt_tramupd             dcd             tramupdate  
 twt_gdcs                dcd             gdcs  
 twt_cgwnd               dcd             cgwindow  
 twt_fontrom             MEMADR  + FONT_ADRS  
         endif  
   
   
 vram_w0                 ldr             r2, vw0_cpu  vram_w0         ;;      ldr             r3, vw0_vramop
                                 ldr             r3, vw0_vramop  
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_VRAMWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r2, vw0_gdcs                                  ldr             r2, vw0_gdcs
                                   strb    r1, [r0, r9]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vw0_vramupd
                                   mov             r0, r0, lsl #(32 - 15)
                                 ldrb    r12, [r2, #GDCS_GRPHDISP]                                  ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   CPUWORK r1
                                   ldrb    r1, [r3, r0, lsr #(32 - 15)]
                                 orr             r12, r12, #1                                  orr             r12, r12, #1
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 ldr             r2, vw0_mem                                  orr             r1, r1, #1
                                 strb    r1, [r0, r2]                                  strb    r1, [r3, r0, lsr #(32 - 15)]
                                 ldr             r2, vw0_vramupd  
                                 mov             r0, r0, lsl #(32 - 15)  
                                 ldr             r2, vw0_vramupd  
                                 ldrb    r12, [r2, r0, lsr #(32 - 15)]  
                                 orr             r12, r12, #1  
                                 strb    r12, [r2, r0, lsr #(32 - 15)]  
                                 mov             pc, lr                                  mov             pc, lr
 vw0_cpu                 dcd             i286core  ;; vw0_vramop   dcd             vramop
 vw0_vramop              dcd             vramop  
 vw0_gdcs                dcd             gdcs  vw0_gdcs                dcd             gdcs
 vw0_mem                 MEMADR  
 vw0_vramupd             dcd             vramupdate  vw0_vramupd             dcd             vramupdate
   
 vram_w1                 ldr             r2, vw1_cpu  vram_w1                 add             r0, r0, #VRAM_STEP
                                 ldr             r3, vw1_vramop                          ;;      ldr             r3, vw1_vramop
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_VRAMWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r2, vw1_gdcs                                  ldr             r2, vw1_gdcs
                                   strb    r1, [r0, r9]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vw1_vramupd
                                   mov             r0, r0, lsl #(32 - 15)
                                 ldrb    r12, [r2, #GDCS_GRPHDISP]                                  ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   CPUWORK r1
                                   ldrb    r1, [r3, r0, lsr #(32 - 15)]
                                 orr             r12, r12, #2                                  orr             r12, r12, #2
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 ldr             r2, vw1_mem                                  orr             r1, r1, #2
                                 strb    r1, [r0, r2]                                  strb    r1, [r3, r0, lsr #(32 - 15)]
                                 ldr             r2, vw1_vramupd  
                                 mov             r0, r0, lsl #(32 - 15)  
                                 ldr             r2, vw1_vramupd  
                                 ldrb    r12, [r2, r0, lsr #(32 - 15)]  
                                 orr             r12, r12, #2  
                                 strb    r12, [r2, r0, lsr #(32 - 15)]  
                                 mov             pc, lr                                  mov             pc, lr
 vw1_cpu                 dcd             i286core  ;; vw1_vramop   dcd             vramop
 vw1_vramop              dcd             vramop  
 vw1_gdcs                dcd             gdcs  vw1_gdcs                dcd             gdcs
 vw1_mem                 MEMADR  + VRAM_STEP  
 vw1_vramupd             dcd             vramupdate  vw1_vramupd             dcd             vramupdate
   
   
   vramw_w0        ;;      ldr             r3, vww0_vramop
                                   ldr             r2, vww0_gdcs
                                   tst             r0, #1
                                   bne             vww0_odd
                                   strh    r1, [r0, r9]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vww0_vramupd
                                   mov             r0, r0 lsl #(32 - 15)
                                   ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   add             r3, r3, r0 lsr #(32 - 15)
                                   CPUWORK r1
                                   ldrh    r1, [r3]
                                   orr             r12, r12, #1
                                   strb    r12, [r2, #GDCS_GRPHDISP]
                                   orr             r1, r1, #1
                                   orr             r1, r1, #(1 << 8)
                                   strh    r1, [r3]
                                   mov             pc, lr
   ;; vww0_vramop  dcd             vramop
   vww0_gdcs               dcd             gdcs
   vww0_vramupd    dcd             vramupdate
   vww0_odd                add             r12, r0, r9
                                   strb    r1, [r0, r9]
                                   mov             r1, r1 lsr #8
                                   strb    r1, [r12, #1]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vww0_vramupd
                                   mov             r0, r0, lsl #(32 - 15)
                                   ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   add             r3, r3, r0 lsr #(32 - 15)
                                   CPUWORK r1
                                   ldrb    r0, [r3]
                                   ldrb    r1, [r3, #1]
                                   orr             r12, r12, #1
                                   strb    r12, [r2, #GDCS_GRPHDISP]
                                   orr             r0, r0, #1
                                   orr             r1, r1, #1
                                   strb    r0, [r3]
                                   strb    r1, [r3, #1]
                                   mov             pc, lr
   
   vramw_w1                add             r0, r0, #VRAM_STEP
                           ;;      ldr             r3, vww1_vramop
                                   ldr             r2, vww1_gdcs
                                   tst             r0, #1
                                   bne             vww1_odd
                                   strh    r1, [r0, r9]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vww1_vramupd
                                   mov             r0, r0 lsl #(32 - 15)
                                   ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   add             r3, r3, r0 lsr #(32 - 15)
                                   CPUWORK r1
                                   ldrh    r1, [r3]
                                   orr             r12, r12, #2
                                   strb    r12, [r2, #GDCS_GRPHDISP]
                                   orr             r1, r1, #2
                                   orr             r1, r1, #(2 << 8)
                                   strh    r1, [r3]
                                   mov             pc, lr
   ;; vww1_vramop  dcd             vramop
   vww1_gdcs               dcd             gdcs
   vww1_vramupd    dcd             vramupdate
   vww1_odd                add             r12, r0, r9
                                   strb    r1, [r0, r9]
                                   mov             r1, r1 lsr #8
                                   strb    r1, [r12, #1]
                                   ldrb    r1, [r9, #MEMWAIT_VRAM]
                                   ldr             r3, vww1_vramupd
                                   mov             r0, r0, lsl #(32 - 15)
                                   ldrb    r12, [r2, #GDCS_GRPHDISP]
                                   add             r3, r3, r0 lsr #(32 - 15)
                                   CPUWORK r1
                                   ldrb    r0, [r3]
                                   ldrb    r1, [r3, #1]
                                   orr             r12, r12, #2
                                   strb    r12, [r2, #GDCS_GRPHDISP]
                                   orr             r0, r0, #2
                                   orr             r1, r1, #2
                                   strb    r0, [r3]
                                   strb    r1, [r3, #1]
                                   mov             pc, lr
   
   
   
   ; ---- grcg...
   
   grcg_tcr1               add             r0, r0, #VRAM_STEP
   grcg_tcr0               ldr             r3, grw_grcg
                                   ldrb    r2, [r9, #MEMWAIT_GRCG]
                                   bic             r0, r0, #&f8000
                                   ldrb    r12, [r3, #GRCG_MODEREG]
                                   CPUWORK r2
                                   mov             r12, r12 lsl #28
                                   tst             r12, #(1 << 28)
                                   add             r0, r0, #VRAM_B
                                   ldreqb  r1, [r3, #GRCG_TILE + 0]
                                   ldreqb  r2, [r0, r9]
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 29)
                                   add             r0, r0, #(VRAM_R - VRAM_B)
                                   ldreqb  r1, [r3, #GRCG_TILE + 2]
                                   ldreqb  r2, [r0, r9]
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 30)
                                   add             r0, r0, #(VRAM_G - VRAM_R)
                                   ldreqb  r1, [r3, #GRCG_TILE + 4]
                                   ldreqb  r2, [r0, r9]
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 31)
                                   add             r0, r0, #(VRAM_E - VRAM_G)
                                   ldreqb  r1, [r3, #GRCG_TILE + 6]
                                   ldreqb  r2, [r0, r9]
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   and             r12, r12, #&ff
                                   eor             r0, r12, #&ff
                                   mov             pc, lr
   tcr_grcg                dcd             grcg
   
   
   grcgw_tcr1              add             r0, r0, #VRAM_STEP
   grcgw_tcr0              ldr             r3, tcrw_grcg
                                   ldrb    r2, [r9, #MEMWAIT_GRCG]
                                   bic             r0, r0, #&f8000
                                   ldrb    r12, [r3, #GRCG_MODEREG]
                                   CPUWORK r2
                                   tst             r0, #1
                                   mov             r12, r12 lsl #28
                                   bne             tcrw_odd
                                   tst             r12, #(1 << 28)
                                   add             r0, r0, #VRAM_B
                                   ldreqh  r1, [r3, #(GRCG_TILE + 0)]
                                   ldreqh  r2, [r0, r9]
                                   add             r0, r0, #(VRAM_R - VRAM_B)
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 29)
                                   ldreqh  r1, [r3, #(GRCG_TILE + 2)]
                                   ldreqh  r2, [r0, r9]
                                   add             r0, r0, #(VRAM_G - VRAM_R)
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 30)
                                   ldreqh  r1, [r3, #(GRCG_TILE + 4)]
                                   ldreqh  r2, [r0, r9]
                                   add             r0, r0, #(VRAM_E - VRAM_G)
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 31)
                                   ldreqh  r1, [r3, #(GRCG_TILE + 6)]
                                   ldreqh  r2, [r0, r9]
                                   eoreq   r1, r2, r1
                                   orreq   r12, r1, r12
                                   mvn             r12, r12 lsl #16
                                   mov             r0, r12 lsr #16
                                   mov             pc, lr
   tcrw_grcg               dcd             grcg
   tcrw_odd                add             r0, r0, r9
                                   str             lr, [sp, #-4]!
                                   add             r0, r0, #VRAM_B
                                   tst             r12, #(1 << 28)
                                   ldreqb  r1, [r0]
                                   ldreqb  r2, [r0, #1]
                                   ldreqh  lr, [r3, #GRCG_TILE + 0]
                                   add             r0, r0, #(VRAM_R - VRAM_B)
                                   orreq   r1, r1, r2 lsl #8
                                   eoreq   r1, r1, lr
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 29)
                                   ldreqb  r1, [r0]
                                   ldreqb  r2, [r0, #1]
                                   ldreqh  lr, [r3, #GRCG_TILE + 2]
                                   add             r0, r0, #(VRAM_G - VRAM_R)
                                   orreq   r1, r1, r2 lsl #8
                                   eoreq   r1, r1, lr
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 30)
                                   ldreqb  r1, [r0]
                                   ldreqb  r2, [r0, #1]
                                   ldreqh  lr, [r3, #GRCG_TILE + 4]
                                   add             r0, r0, #(VRAM_E - VRAM_G)
                                   orreq   r1, r1, r2 lsl #8
                                   eoreq   r1, r1, lr
                                   orreq   r12, r1, r12
                                   tst             r12, #(1 << 31)
                                   ldreqb  r1, [r0]
                                   ldreqb  r2, [r0, #1]
                                   ldreqh  lr, [r3, #GRCG_TILE + 6]
                                   orreq   r1, r1, r2 lsl #8
                                   eoreq   r1, r1, lr
                                   orreq   r12, r1, r12
                                   mvn             r12, r12 lsl #16
                                   mov             r0, r12 lsr #16
                                   ldr             pc, [sp], #4
   
   
 grcg_tdw0               mov             r0, r0, lsl #(32 - 15)  grcg_tdw0               mov             r0, r0, lsl #(32 - 15)
                                 mov             r0, r0, lsr #(32 - 15)                                  mov             r0, r0, lsr #(32 - 15)
Line 237  grcg_tdw0  mov  r0, r0, lsl #(32 - 15) Line 557  grcg_tdw0  mov  r0, r0, lsl #(32 - 15)
                                 orr             r12, r12, #1                                  orr             r12, r12, #1
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 b               grcg_tdw                                  b               grcg_tdw
   
 grcg_tdw1               mov             r0, r0, lsl #(32 - 15)  grcg_tdw1               mov             r0, r0, lsl #(32 - 15)
                                 mov             r0, r0, lsr #(32 - 15)                                  mov             r0, r0, lsr #(32 - 15)
                                 ldr             r2, grw_vramupd                                  ldr             r2, grw_vramupd
Line 249  grcg_tdw1  mov  r0, r0, lsl #(32 - 15) Line 568  grcg_tdw1  mov  r0, r0, lsl #(32 - 15)
                                 orr             r12, r12, #2                                  orr             r12, r12, #2
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 add             r0, r0, #VRAM_STEP                                  add             r0, r0, #VRAM_STEP
   grcg_tdw                add             r0, r0, #VRAM_B
 grcg_tdw                ldr             r2, grw_mem  
                                 ldr             r3, grw_grcg                                  ldr             r3, grw_grcg
                                 add             r0, r0, r2                                  add             r0, r0, r9
                                 ldrb    r2, [r3, #GRCG_MODEREG]                                  ldrb    r2, [r3, #GRCG_MODEREG]
                                 orr             r1, r1, r2 lsl #16                                  orr             r1, r1, r2 lsl #16
   
                                 tst             r1, #(1 << 16)                                  tst             r1, #(1 << 16)
                                 ldreqb  r2, [r3, #(GRCG_TILE + 0)]                                  ldreqb  r2, [r3, #(GRCG_TILE + 0)]
                                 streqb  r2, [r0]                                  streqb  r2, [r0]
Line 271  grcg_tdw  ldr  r2, grw_mem Line 588  grcg_tdw  ldr  r2, grw_mem
                                 add             r0, r0, #(VRAM_E - VRAM_G)                                  add             r0, r0, #(VRAM_E - VRAM_G)
                                 ldreqb  r2, [r3, #(GRCG_TILE + 6)]                                  ldreqb  r2, [r3, #(GRCG_TILE + 6)]
                                 streqb  r2, [r0]                                  streqb  r2, [r0]
                           ;;      ldr             r3, grw_vramop
                                 ldr             r2, grw_cpu                                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                 ldr             r3, grw_vramop                                  CPUWORK r3
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_GRCGWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 mov             pc, lr                                  mov             pc, lr
   
   
 grcg_rmw0               cmp             r1, #&ff  grcg_rmw0               cmp             r1, #&ff
                                 beq             grcg_tdw0                                  beq             grcg_tdw0
                                 cmp             r1, #0                                  cmp             r1, #0
Line 295  grcg_rmw0  cmp  r1, #&ff Line 609  grcg_rmw0  cmp  r1, #&ff
                                 orr             r12, r12, #1                                  orr             r12, r12, #1
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 b               grcg_rmw                                  b               grcg_rmw
   
 grcg_rmw1               cmp             r1, #&ff  grcg_rmw1               cmp             r1, #&ff
                                 beq             grcg_tdw1                                  beq             grcg_tdw1
                                 cmp             r1, #0                                  cmp             r1, #0
Line 311  grcg_rmw1  cmp  r1, #&ff Line 624  grcg_rmw1  cmp  r1, #&ff
                                 orr             r12, r12, #2                                  orr             r12, r12, #2
                                 strb    r12, [r2, #GDCS_GRPHDISP]                                  strb    r12, [r2, #GDCS_GRPHDISP]
                                 add             r0, r0, #VRAM_STEP                                  add             r0, r0, #VRAM_STEP
   grcg_rmw                add             r0, r0, #VRAM_B
 grcg_rmw                ldr             r2, grw_mem  
                                 ldr             r3, grw_grcg                                  ldr             r3, grw_grcg
                                 add             r0, r0, r2                                  add             r0, r0, r9
                                 ldrb    r2, [r3, #GRCG_MODEREG]                                  ldrb    r2, [r3, #GRCG_MODEREG]
                                 orr             r1, r1, r2 lsl #16                                  orr             r1, r1, r2 lsl #16
                                 tst             r1, #(1 << 16)                                  tst             r1, #(1 << 16)
Line 352  grmw_ged  tst  r1, #(8 << 16) Line 664  grmw_ged  tst  r1, #(8 << 16)
                                         bic             r12, r12, r1                                          bic             r12, r12, r1
                                         orr             r12, r12, r2                                          orr             r12, r12, r2
                                         strb    r12, [r0]                                          strb    r12, [r0]
   grcg_clock      ;;      ldr             r3, grw_vramop
 grcg_clock              ldr             r2, grw_cpu                                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                 ldr             r3, grw_vramop                                  CPUWORK r3
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_GRCGWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 mov             pc, lr                                  mov             pc, lr
   
 grw_vramupd             dcd             vramupdate  grw_vramupd             dcd             vramupdate
 grw_gdcs                dcd             gdcs  grw_gdcs                dcd             gdcs
 grw_mem                 MEMADR  + VRAM_B  
 grw_grcg                dcd             grcg  grw_grcg                dcd             grcg
 grw_cpu                 dcd             i286core  ;; grw_vramop   dcd             vramop
 grw_vramop              dcd             vramop  
   
   
   
 ; ---- write word  
   
 vramw_w0                ldr             r2, vww0_cpu  
                                 ldr             r3, vww0_vramop  
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_VRAMWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r2, vww0_gdcs  
                                 ldrb    r12, [r2, #GDCS_GRPHDISP]  
                                 orr             r12, r12, #1  
                                 strb    r12, [r2, #GDCS_GRPHDISP]  
   
                                 ldr             r2, vww0_mem  
                                 ldr             r3, vww0_vramupd  
                                 mov             r12, r0, lsl #(32 - 15)  
                                 add             r3, r3, r12, lsr #(32 - 15)  
   
                                 tst             r0, #1  
                                 bne             vww0_odd  
                                 strh    r1, [r0, r2]  
                                 ldrh    r1, [r3]  
                                 orr             r1, r1, #1  
                                 orr             r1, r1, #(1 << 8)  
                                 strh    r1, [r3]  
                                 mov             pc, lr  
   
 vww0_odd                add             r2, r2, r0  
                                 strb    r1, [r2]  
                                 mov             r1, r1, lsr #8  
                                 strb    r1, [r2, #1]  
                                 ldrb    r12, [r3]  
                                 orr             r12, r12, #1  
                                 strb    r12, [r3]  
                                 ldrb    r12, [r3, #1]  
                                 orr             r12, r12, #1  
                                 strb    r12, [r3, #1]  
                                 mov             pc, lr  
 vww0_cpu                dcd             i286core  
 vww0_vramop             dcd             vramop  
 vww0_gdcs               dcd             gdcs  
 vww0_mem                MEMADR  
 vww0_vramupd    dcd             vramupdate  
   
 vramw_w1                ldr             r2, vww1_cpu  
                                 ldr             r3, vww1_vramop  
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r3, [r3, #VRAMOP_VRAMWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 ldr             r2, vww1_gdcs  
                                 ldrb    r12, [r2, #GDCS_GRPHDISP]  
                                 orr             r12, r12, #2  
                                 strb    r12, [r2, #GDCS_GRPHDISP]  
   
                                 ldr             r2, vww1_mem  
                                 ldr             r3, vww1_vramupd  
                                 mov             r12, r0, lsl #(32 - 15)  
                                 add             r3, r3, r12, lsr #(32 - 15)  
   
                                 tst             r0, #1  
                                 bne             vww1_odd  
                                 strh    r1, [r0, r2]  
                                 ldrh    r1, [r3]  
                                 orr             r1, r1, #2  
                                 orr             r1, r1, #(2 << 8)  
                                 strh    r1, [r3]  
                                 mov             pc, lr  
   
 vww1_odd                add             r2, r2, r0  
                                 strb    r1, [r2]  
                                 mov             r1, r1, lsr #8  
                                 strb    r1, [r2, #1]  
                                 ldrb    r12, [r3]  
                                 orr             r12, r12, #2  
                                 strb    r12, [r3]  
                                 ldrb    r12, [r3, #1]  
                                 orr             r12, r12, #2  
                                 strb    r12, [r3, #1]  
                                 mov             pc, lr  
 vww1_cpu                dcd             i286core  
 vww1_vramop             dcd             vramop  
 vww1_gdcs               dcd             gdcs  
 vww1_mem                MEMADR  + VRAM_STEP  
 vww1_vramupd    dcd             vramupdate  
   
   
   
 grcgw_tdw0              ldr             r2, grww_gdcs  grcgw_tdw0              ldr             r2, grww_gdcs
Line 488  grcgw_tdw1  ldr  r2, grww_gdcs Line 704  grcgw_tdw1  ldr  r2, grww_gdcs
                                 orr             r12, r12, #2                                  orr             r12, r12, #2
                                 strb    r12, [r2, #1]                                  strb    r12, [r2, #1]
                                 add             r0, r0, #VRAM_STEP                                  add             r0, r0, #VRAM_STEP
 grcgw_tdw               ldr             r2, grww_mem  grcgw_tdw               add             r2, r9, #VRAM_B
                                 ldr             r3, grww_grcg                                  ldr             r3, grww_grcg
                                 add             r0, r0, r2                                  add             r0, r0, r2
                                 ldrb    r2, [r3, #GRCG_MODEREG]                                  ldrb    r2, [r3, #GRCG_MODEREG]
Line 512  grcgw_tdw  ldr  r2, grww_mem Line 728  grcgw_tdw  ldr  r2, grww_mem
                                 ldreqb  r2, [r3, #(GRCG_TILE + 6)]                                  ldreqb  r2, [r3, #(GRCG_TILE + 6)]
                                 streqb  r2, [r0]                                  streqb  r2, [r0]
                                 streqb  r2, [r0, #1]                                  streqb  r2, [r0, #1]
                                 ldr             r2, grww_cpu                          ;;      ldr             r3, grww_vramop
                                 ldr             r3, grww_vramop                                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]                                  CPUWORK r3
                                 ldr             r3, [r3, #VRAMOP_GRCGWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 mov             pc, lr                                  mov             pc, lr
   
   
 grcgw_rmw0              add             r2, r1, #1  grcgw_rmw0              add             r2, r1, #1
                                 cmp             r2, #&10000                                  cmp             r2, #&10000
                                 beq             grcgw_tdw0                                  beq             grcgw_tdw0
Line 539  grcgw_rmw0  add  r2, r1, #1 Line 753  grcgw_rmw0  add  r2, r1, #1
                                 orr             r12, r12, #(1 << 8)                                  orr             r12, r12, #(1 << 8)
                                 strh    r12, [r2, r0]                                  strh    r12, [r2, r0]
                                 b               grcge_rmw                                  b               grcge_rmw
   
 grcgw_rmw1              add             r2, r1, #1  grcgw_rmw1              add             r2, r1, #1
                                 cmp             r2, #&10000                                  cmp             r2, #&10000
                                 beq             grcgw_tdw1                                  beq             grcgw_tdw1
Line 554  grcgw_rmw1  add  r2, r1, #1 Line 767  grcgw_rmw1  add  r2, r1, #1
                                 ldr             r2, grww_vramupd                                  ldr             r2, grww_vramupd
                                 tst             r0, #1                                  tst             r0, #1
                                 bne             grcgo_rmw1                                  bne             grcgo_rmw1
   
                                 ldrh    r12, [r2, r0]                                  ldrh    r12, [r2, r0]
                                 orr             r12, r12, #2                                  orr             r12, r12, #2
                                 orr             r12, r12, #(2 << 8)                                  orr             r12, r12, #(2 << 8)
                                 strh    r12, [r2, r0]                                  strh    r12, [r2, r0]
                                 add             r0, r0, #VRAM_STEP                                  add             r0, r0, #VRAM_STEP
   grcge_rmw               add             r2, r9, #VRAM_B
 grcge_rmw               ldr             r2, grww_mem  
                                 ldr             r3, grww_grcg                                  ldr             r3, grww_grcg
                                 add             r0, r0, r2                                  add             r0, r0, r2
                                 ldrb    r2, [r3, #GRCG_MODEREG]                                  ldrb    r2, [r3, #GRCG_MODEREG]
Line 601  grmwe_ged  tst  r1, #(8 << 16) Line 812  grmwe_ged  tst  r1, #(8 << 16)
                                         bic             r12, r12, r1                                          bic             r12, r12, r1
                                         orr             r12, r12, r2                                          orr             r12, r12, r2
                                         strh    r12, [r0]                                          strh    r12, [r0]
 grmwe_eed               ldr             r2, grww_cpu  grmwe_eed       ;;      ldr             r3, grww_vramop
                                 ldr             r3, grww_vramop                                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]                                  CPUWORK r3
                                 ldr             r3, [r3, #VRAMOP_GRCGWAIT]  
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
                                 mov             pc, lr                                  mov             pc, lr
   
 grww_gdcs               dcd             gdcs  grww_gdcs               dcd             gdcs
 grww_vramupd    dcd             vramupdate  grww_vramupd    dcd             vramupdate
 grww_mem                MEMADR  + VRAM_B  
 grww_grcg               dcd             grcg  grww_grcg               dcd             grcg
 grww_cpu                dcd             i286core  ;; grww_vramop  dcd             vramop
 grww_vramop             dcd             vramop  
   
 grcgo_rmw0              add             r2, r2, r0  grcgo_rmw0              add             r2, r2, r0
                                 ldrb    r12, [r2]                                  ldrb    r12, [r2]
Line 634  grcgo_rmw1  add  r2, r2, r0 Line 840  grcgo_rmw1  add  r2, r2, r0
                                 strb    r12, [r2, #1]                                  strb    r12, [r2, #1]
                                 add             r0, r0, #VRAM_STEP                                  add             r0, r0, #VRAM_STEP
   
 grcgo_rmw               ldr             r2, grww_mem  grcgo_rmw               add             r2, r9, #VRAM_B
                                 ldr             r3, grww_grcg                                  ldr             r3, grww_grcg
                                 add             r0, r0, r2                                  add             r0, r0, r2
                                 ldrb    r2, [r3, #GRCG_MODEREG]                                  ldrb    r2, [r3, #GRCG_MODEREG]
Line 698  grmwo_ged  tst  r1, #(8 << 16) Line 904  grmwo_ged  tst  r1, #(8 << 16)
                                         orr             r12, r12, r2 lsr #8                                          orr             r12, r12, r2 lsr #8
                                         strb    r12, [r0, #1]                                          strb    r12, [r0, #1]
   
 grcgw_clock             ldr             r2, grww_cpu  grcgw_clock     ;;      ldr             r3, grww_vramop
                                 ldr             r3, grww_vramop                                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                 ldr             r12, [r2, #CPU_REMAINCLOCK]                                  CPUWORK r3
                                 ldr             r3, [r3, #VRAMOP_GRCGWAIT]                                  mov             pc, lr
                                 sub             r12, r12, r3  
                                 str             r12, [r2, #CPU_REMAINCLOCK]  
   
   ; ---- egc
   
   egc_rd                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                   CPUWORK r3
                                   b               egc_read
   
   
   egcw_rd
   
   
   egc_wt                  ldrb    r3, [r9, #MEMWAIT_GRCG]
                                   CPUWORK r3
                                   b               egc_write
   
   egcw_wt
   
   
   
   ; ---- emmc
   
   emmc_rd                 ldr             r2, emrd_extmempp
                                   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
                                   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
                                   and             r12, r0, #(3 << 14)
                                   mov             r0, r0 lsl #(32 - 14)
                                   ldr             r3, [r2, r12 lsr #(14 - 2)]
                                   tst             r0, #(1 << (32 - 14))
                                   bne             emmcw_rd_odd
                                   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
                                   ldrb    r0, [r3, r0 lsr #(32 - 14)]
                                   add             r0, r1, r0 lsl #8
                                   mov             pc, lr
   emmcw_rd_3fff   eor             r12, r12, #(1 << 14)                            ; !
                                   ldr             r0, [r2, r12 lsr #(14 - 2)]
                                   ldrb    r0, [r0]
                                   add             r0, r1, r0 lsl #8
                                   mov             pc, lr
   
   
   
   
   emmcw_wt                ldr             r2, emwwt_extmempp
                                   and             r12, r0, #(3 << 14)
                                   mov             r0, r0 lsl #(32 - 14)
                                   ldr             r3, [r2, r12 lsr #(14 - 2)]
                                   tst             r0, #(1 << (32 - 14))
                                   bne             emmcw_wt_odd
                                   add             r3, r3, r0 lsr #(32 - 14)
                                   strh    r1, [r3]
                                 mov             pc, lr                                  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))
                                   beq             emmcw_wt_3fff
                                   strb    r1, [r3, r0 lsr #(32 - 14)]
                                   mov             pc, lr
   emmcw_wt_3fff   eor             r12, r12, #(1 << 14)                            ; !
                                   ldr             r0, [r2, r12 lsr #(14 - 2)]
                                   strb    r1, [r0]
                                   mov             pc, lr
   
   
   ; ---- itf
   
   i286_itf                ldrb    r2, [r9, #CPU_ITFBANK]
                                   mov             r3, r0 lsl #(32 - 15)
                                   add             r12, r9, #ITF_ADRS
                                   cmp             r2, #0
                                   ldreqb  r0, [r9, r0]
                                   ldrneb  r0, [r12, r3 lsr #(32 - 15)]
                                   mov             pc, lr
   
   
   i286w_itf               ldrb    r2, [r9, #CPU_ITFBANK]
                                   tst             r0, #1
                                   bne             i286w_itf_odd
                                   cmp             r2, #0
                                   orrne   r0, r0, #VRAM_STEP
                                   ldrh    r0, [r0, r9]
                                   mov             pc, lr
   i286w_itf_odd   cmp             r2, #0
                                   orrne   r0, r0, #VRAM_STEP
                                   add             r2, r0, #1
                                   ldrb    r0, [r0, r9]
                                   ldrb    r1, [r2, r9]
                                   orr             r0, r0, r1 lsl #8
                                   mov             pc, lr
   
   
   
 ; ---- other  ; ---- other
   
 i286_nonram_r   mov             r0, #&ff  i286_nonram_r   mov             r0, #&ff
                                 mov             pc, lr  i286_wn                 mov             pc, lr
   
 i286_nonram_rw  mov             r0, #&ff  i286_nonram_rw  mov             r0, #&ff
                                 add             r0, r0, #&ff00                                  orr             r0, r0, #&ff00
                                 mov             pc, lr  i286w_wn                mov             pc, lr
   
   
         END          END

Removed from v.1.1  
changed lines
  Added in v.1.6


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