⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r2d_geometry.s

📁 是一个手机功能的模拟程序
💻 S
📖 第 1 页 / 共 2 页
字号:


     .state32

 .include "r2d_asm_utils.inc"
 .include "r2d_asm_configs.inc"


    ; Main asm code (it is reflecting the C code of
    ; r2d_blit_lcd_to_lcd)

    .text

 .if (R2D_ASM = R2D_ON)

    .global _r2d_blit_lb,_r2d_blit_la
    .global _r2d_sb_down1,_r2d_sb_down2,_r2d_sa_up1,_r2d_sa_up2
    .global _r2d_scb_down1,_r2d_scb_down2,_r2d_sca_up1,_r2d_sca_up2
    .global _r2d_sdb_down1,_r2d_sdb_down2,_r2d_sda_up1,_r2d_sda_up2
    .global _r2d_skip_color_proc_a
    .global _r2d_end_ynb_color_dst_a
    .global _r2d_skip_color_proc_b
    .global _r2d_end_ynb_color_dst_b
    .global _r2d_skip_color_dst_a
    .global _r2d_skip_color_dst_b 
   

    .global _r2d_sconvcolb_down1,_r2d_econvcolb_down1
    .global _r2d_sconvcolb_down2,_r2d_econvcolb_down2
    .global _r2d_sconvcola_up1,_r2d_econvcola_up1
    .global _r2d_sconvcola_up2,_r2d_econvcola_up2

    .global _r2d_swb_down1,_r2d_swb_down2,_r2d_swa_up1,_r2d_swa_up2


    ; Patch list for write_shift_pixel_down
    .global _r2d_sft_dst_n_b_down1,_r2d_sft_dst_n_b_down2
    .global _r2d_sft_srcb__b_down1,_r2d_sft_srcb__b_down2
    .global _r2d_sft_dstc__b_down1,_r2d_sft_dstc__b_down2

    .global _r2d_sft_src_c_b_down1,_r2d_sft_src_c_b_down2
    .global _r2d_sft_b_c_b_down1,_r2d_sft_b_c_b_down2
    .global _r2d_sft_dstb_c_b_down1,_r2d_sft_dstb_c_b_down2
    .global _r2d_sft_d_c_b_down1,_r2d_sft_d_c_b_down2
    .global _r2d_sft_dstc_c_b_down1,_r2d_sft_dstc_c_b_down2

    ; Patch list for write_shift_pixel_up
    .global _r2d_sft_dst_n_a_up1,_r2d_sft_dst_n_a_up2
    .global _r2d_sft_srcb__a_up1,_r2d_sft_srcb__a_up2
    .global _r2d_sft_dstc__a_up1,_r2d_sft_dstc__a_up2

    .global _r2d_sft_src_c_a_up1,_r2d_sft_src_c_a_up2
    .global _r2d_sft_b_c_a_up1,_r2d_sft_b_c_a_up2

    ; Patch list fro shift_pixel_down
    .global _r2d_sft_dst_n_downa,_r2d_sft_dst_n_downb,_r2d_sft_dst_n_downc
    .global _r2d_sft_srcb_n_downa,_r2d_sft_srcb_n_downb,_r2d_sft_srcb_n_downc

    .global _r2d_sft_src_c_downa,_r2d_sft_src_c_downb,_r2d_sft_src_c_downc

    ; Patch list fro shift_pixel_up
    .global _r2d_sft_dst_n_upa,_r2d_sft_dst_n_upb,_r2d_sft_dst_n_upc
    .global _r2d_sft_srcb_n_upa,_r2d_sft_srcb_n_upb,_r2d_sft_srcb_n_upc

    .global _r2d_sft_src_c_upa,_r2d_sft_src_c_upb,_r2d_sft_src_c_upc
    .global _r2d_enda,_r2d_endb

	.global _r2d_skip_load_src_a_up1,_r2d_skip_load_src_a_up2;
	.global _r2d_skip_load_src_b_down1,_r2d_skip_load_src_b_down2;
	.global _r2d_skip_shift_down_downa,_r2d_skip_shift_down_downb,_r2d_skip_shift_down_downc;
    .global _r2d_skip_shift_up_upa,_r2d_skip_shift_up_upb,_r2d_skip_shift_up_upc;

    .global _r2d_no_null_src_counter_a,_r2d_no_null_src_counter_b
	.global _r2d_end_a_up2,_r2d_end_b_down2,_r2d_end_downa,_r2d_end_downb,_r2d_end_downc;
    .global _r2d_end_upa,_r2d_end_upb,_r2d_end_upc;

	.global _r2d_always_read_a_up1,_r2d_always_read_a_up2
	.global _r2d_always_read_b_down1,_r2d_always_read_b_down2
  
    .ref $r2d_blit_lcd_to_lcd

 .endif

write_shift_pixel_down .macro label
       ; Create free space for result
	   .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_dst_n_:label:       MOV dstvalue,dstvalue, LSR #R2D_PIXEL_DEPTH 
       .else
_r2d_sft_dst_n_:label:       MOV dstvalue,#0
	   .endif

       ; Mask to extract pixel from src_current
_r2d_sft_src_c_:label:       MOV calca,src_current,LSL #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)
_r2d_always_read_:label:  MOV src_current,src_current
_r2d_sft_b_c_:label:       MOV calca,calca,LSR #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)

       ; Mask to extract pixel from dst_current
_r2d_sft_dstb_c_:label:       MOV calcb,dst_current,LSL #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)
_r2d_sft_d_c_:label:       MOV calcb,calcb,LSR #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)
   
       ; Do foreground detection
_r2d_sd:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_ed:label:

       ; Get foreground/background colors if needed
_r2d_sc:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_ec:label:

_r2d_sconvcol:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_econvcol:label:

       ; Compute drawing mode
_r2d_s:label:
       MOV calca,calca
       MOV calcb,calca
       MOV calcb,calcb
_r2d_e:label:
_r2d_sft_dstc_c_:label:       ORR dstvalue,dstvalue,calcb, LSL #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)

_r2d_sw:label:
       MOV dstvalue,dstvalue
_r2d_ew:label:

       ; Read new data if needed
	   .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_srcb__:label:       MOV src_current,src_current, LSR #R2D_PIXEL_DEPTH
_r2d_sft_dstc__:label:       MOV dst_current,dst_current, LSR #R2D_PIXEL_DEPTH
       .else
_r2d_sft_srcb__:label:       MOV src_current,src_current,LSR #0
_r2d_sft_dstc__:label:       MOV dst_current,dst_current,LSR #0
	   .endif

       SUBS dstcounter,dstcounter,#1
       MOVEQ dstcounter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
_r2d_skip_load_src_:label: MOV src_current,src_current
       SUBS srccounter,srccounter,#1
       BNE M1END?
       MOV srccounter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
       LDR src_current,[p_src_current,#4]!
M1END?
  .endm

write_shift_pixel_up .macro label
     .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_dst_n_:label:       MOV dstvalue,dstvalue, LSL #R2D_PIXEL_DEPTH 
     .else
_r2d_sft_dst_n_:label:       MOV dstvalue,#0
	 .endif

_r2d_sft_src_c_:label:      MOV calca,src_current,LSR #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)
_r2d_always_read_:label:  MOV src_current,src_current
_r2d_sft_b_c_:label:      MOV calcb,dst_current,LSR #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)

       ; Do foreground detection
_r2d_sd:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_ed:label:

       ; Get foreground/background colors if needed
_r2d_sc:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_ec:label:

_r2d_sconvcol:label:
       MOV calca,calca
       MOV calca,calca
       MOV calca,calca
_r2d_econvcol:label:

       ; Compute drawing mode
_r2d_s:label:
       MOV calca,calca
       MOV calcb,calca
       MOV calcb,calcb
_r2d_e:label:
       ORR dstvalue,dstvalue,calcb

_r2d_sw:label:
       MOV dstvalue,dstvalue
_r2d_ew:label:

       .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_srcb__:label:       MOV src_current,src_current, LSL #R2D_PIXEL_DEPTH
_r2d_sft_dstc__:label:       MOV dst_current,dst_current, LSL #R2D_PIXEL_DEPTH
       .else
_r2d_sft_srcb__:label:       MOV src_current,src_current,LSL #0
_r2d_sft_dstc__:label:       MOV dst_current,dst_current,LSL #0
	   .endif

       SUBS dstcounter,dstcounter,#1
       MOVEQ dstcounter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
_r2d_skip_load_src_:label: MOV src_current,src_current
       SUBS srccounter,srccounter,#1
       BNE M1END?
       MOV srccounter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
       LDR src_current,[p_src_current,#-4]!
M1END?
  .endm

shift_pixel_down .macro arg,reg,label
_r2d_skip_shift_down_:label:  MOV dstvalue,dstvalue

     .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_dst_n_:label:       MOV dstvalue,dstvalue, LSR #R2D_PIXEL_DEPTH 
     .else
_r2d_sft_dst_n_:label:       MOV dstvalue,#0
	 .endif

_r2d_sft_src_c_:label:       ORR arg,arg,:reg:_current, LSL #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)

     .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_srcb_n_:label:       MOV :reg:_current,:reg:_current, LSR #R2D_PIXEL_DEPTH
     .else
_r2d_sft_srcb_n_:label:       MOV :reg:_current,#0
	 .endif

       SUBS :reg:counter,:reg:counter,#1
       BNE M1END?
       MOV :reg:counter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
       LDR :reg:_current,[p_:reg:_current,#4]!
M1END?
  .endm

shift_pixel_up .macro arg,reg,label
_r2d_skip_shift_up_:label:  MOV dstvalue,dstvalue
     .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_dst_n_:label:       MOV dstvalue,dstvalue, LSL #R2D_PIXEL_DEPTH 
     .else
_r2d_sft_dst_n_:label:       MOV dstvalue,#0
	 .endif

_r2d_sft_src_c_:label:       ORR arg,arg,:reg:_current, LSR #((1<<R2D_MEMORY_WORD) - R2D_PIXEL_DEPTH)

      .if (R2D_PIXEL_DEPTH != 32)
_r2d_sft_srcb_n_:label:       MOV :reg:_current,:reg:_current, LSL #R2D_PIXEL_DEPTH
      .else
_r2d_sft_srcb_n_:label:       MOV :reg:_current,#0
	  .endif


       SUBS :reg:counter,:reg:counter,#1
       BNE M1END?
       MOV :reg:counter,#(1<<R2D_PIXELS_PER_MEMORY_WORD)
       LDR :reg:_current,[p_:reg:_current,#-4]!
M1END?
  .endm

 .if (R2D_ASM = R2D_ON)

;--------------------------------------
;
; v_direction == -1
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -