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

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