git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/libc/targets/mos6502/nes/metasprites_flipx.s

      1     .include    "global.s"
      2 
      3     .title  "Metasprites"
      4     .module Metasprites
      5 
      6     .area	GBDKOVR (PAG, OVR)
      7     ___move_metasprite_vflip_PARM_2::
      8     ___move_metasprite_flipx_PARM_2:: .ds 2
      9     ___move_metasprite_vflip_PARM_3::
     10     ___move_metasprite_flipx_PARM_3:: .ds 2
     11 
     12     .area   _HOME
     13 
     14 .define xPos  "___move_metasprite_flipx_PARM_2"
     15 .define yPos  "___move_metasprite_flipx_PARM_3"
     16 
     17 ; uint8_t __move_metasprite_flipx(uint8_t id, int16_t x, int16_t y)
     18 
     19 ___move_metasprite_flipx::
     20 ___move_metasprite_vflip::
     21     jsr .move_metasprite_prologue
     22 ___move_metasprite_flipx_loop:
     23     lda [*___current_metasprite],y      ; dy
     24     bmi ___move_metasprite_flipx_dyNeg
     25     clc
     26     adc *yPos
     27     sta *yPos
     28     bcc 1$
     29     inc *yPos+1
     30 1$:
     31 ___move_metasprite_flipx_loop_writePosY:
     32     sta _shadow_OAM+OAM_POS_Y,x
     33     lda *yPos+1
     34     bne ___move_metasprite_flipx_outsideY
     35     iny
     36     lda [*___current_metasprite],y      ; dx
     37     eor #0xFF
     38     bmi ___move_metasprite_flipx_dxNeg
     39     sec
     40     adc *xPos
     41     sta *xPos
     42     bcc 2$
     43     inc *xPos+1
     44 2$:
     45 ___move_metasprite_flipx_loop_writePosX:
     46     sta _shadow_OAM+OAM_POS_X,x
     47     lda *xPos+1
     48     bne ___move_metasprite_flipx_outsideX
     49     iny
     50     lda [*___current_metasprite],y      ; tile index
     51     iny
     52     clc
     53     adc *___current_base_tile
     54     sta _shadow_OAM+OAM_TILE_INDEX,x
     55     lda [*___current_metasprite],y      ; props
     56     eor #OAMF_XFLIP
     57     adc *___current_base_prop
     58     iny
     59     sta _shadow_OAM+OAM_ATTRIBUTES,x
     60     inx
     61     inx
     62     inx
     63     inx
     64     bne ___move_metasprite_flipx_loop
     65 ___move_metasprite_flipx_end:
     66     jmp .move_metasprite_epilogue
     67 
     68 ___move_metasprite_flipx_dxNeg:
     69     sec
     70     adc *xPos
     71     sta *xPos
     72     bcs 1$
     73     dec *xPos+1
     74 1$:
     75     jmp ___move_metasprite_flipx_loop_writePosX
     76 
     77 ___move_metasprite_flipx_dyNeg:
     78     cmp #0x80
     79     beq ___move_metasprite_flipx_end
     80     clc
     81     adc *yPos
     82     sta *yPos
     83     bcs 1$
     84     dec *yPos+1
     85 1$:
     86     jmp ___move_metasprite_flipx_loop_writePosY
     87 
     88 ___move_metasprite_flipx_outsideY:
     89     iny
     90     lda [*___current_metasprite],y      ; dx
     91     eor #0xFF
     92     bmi ___move_metasprite_flipx_outsideY_dxNeg
     93     sec
     94     adc *xPos
     95     sta *xPos
     96     bcc ___move_metasprite_flipx_outsideX
     97     inc *xPos+1
     98 ___move_metasprite_flipx_outsideX:
     99     iny
    100     ; Skip tile index / props
    101     iny
    102     iny
    103     lda #0xF0
    104     sta _shadow_OAM+OAM_POS_Y,x
    105     jmp ___move_metasprite_flipx_loop
    106 
    107 ___move_metasprite_flipx_outsideY_dxNeg:
    108     sec
    109     adc *xPos
    110     sta *xPos
    111     bcs 1$
    112     dec *xPos+1
    113 1$:
    114     jmp ___move_metasprite_flipx_outsideX

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.