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_flipy.s

      1     .include    "global.s"
      2 
      3     .title  "Metasprites"
      4     .module Metasprites
      5 
      6     .area	GBDKOVR (PAG, OVR)
      7     ___move_metasprite_hflip_PARM_2::
      8     ___move_metasprite_flipy_PARM_2:: .ds 2
      9     ___move_metasprite_hflip_PARM_3::
     10     ___move_metasprite_flipy_PARM_3:: .ds 2
     11 
     12     .area   _HOME
     13 
     14 .define xPos  "___move_metasprite_flipy_PARM_2"
     15 .define yPos  "___move_metasprite_flipy_PARM_3"
     16 
     17 ; uint8_t __move_metasprite_flipy(uint8_t id, int16_t x, int16_t y)
     18 
     19 ___move_metasprite_flipy::
     20 ___move_metasprite_hflip::
     21     jsr .move_metasprite_prologue
     22 ___move_metasprite_flipy_loop:
     23     lda [*___current_metasprite],y      ; dy
     24     eor #0xFF
     25     bpl ___move_metasprite_flipy_dyNeg
     26     sec
     27     adc *yPos
     28     sta *yPos
     29     bcs 1$
     30     dec *yPos+1
     31 1$:
     32 ___move_metasprite_flipy_loop_writePosY:
     33     sta _shadow_OAM+OAM_POS_Y,x
     34     lda *yPos+1
     35     bne ___move_metasprite_flipy_outsideY
     36     iny
     37     lda [*___current_metasprite],y      ; dx
     38     bmi ___move_metasprite_flipy_dxNeg
     39     clc
     40     adc *xPos
     41     sta *xPos
     42     bcc 2$
     43     inc *xPos+1
     44 2$:
     45 ___move_metasprite_flipy_loop_writePosX:
     46     sta _shadow_OAM+OAM_POS_X,x
     47     lda *xPos+1
     48     bne ___move_metasprite_flipy_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_YFLIP
     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_flipy_loop
     65 ___move_metasprite_flipy_end:
     66     jmp .move_metasprite_epilogue
     67 
     68 ___move_metasprite_flipy_dxNeg:
     69     clc
     70     adc *xPos
     71     sta *xPos
     72     bcs 1$
     73     dec *xPos+1
     74 1$:
     75     jmp ___move_metasprite_flipy_loop_writePosX
     76 
     77 ___move_metasprite_flipy_dyNeg:
     78     cmp #0x7F
     79     beq ___move_metasprite_flipy_end
     80     sec
     81     adc *yPos
     82     sta *yPos
     83     bcc 1$
     84     inc *yPos+1
     85 1$:
     86     jmp ___move_metasprite_flipy_loop_writePosY
     87 
     88 ___move_metasprite_flipy_outsideY:
     89     iny
     90     lda [*___current_metasprite],y      ; dx
     91     bmi ___move_metasprite_flipy_outsideY_dxNeg
     92     clc
     93     adc *xPos
     94     sta *xPos
     95     bcc ___move_metasprite_flipy_outsideX
     96     inc *xPos+1
     97 ___move_metasprite_flipy_outsideX:
     98     iny
     99     ; Skip tile index / props
    100     iny
    101     iny
    102     lda #0xF0
    103     sta _shadow_OAM+OAM_POS_Y,x
    104     jmp ___move_metasprite_flipy_loop
    105 
    106 ___move_metasprite_flipy_outsideY_dxNeg:
    107     clc
    108     adc *xPos
    109     sta *xPos
    110     bcs 1$
    111     dec *xPos+1
    112 1$:
    113     jmp ___move_metasprite_flipy_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.