Advertisement
Guest User

Untitled

a guest
Oct 4th, 2018
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. initSVT:
  2.  
  3.     lda.b #PT_NULL
  4.     pha
  5.     sta.l $7E5410
  6.    
  7.     ldx.w #SVT_LOC
  8.     ldy.w #SVT_LOC + 1
  9.     lda.b #MAX_SVT_ENTRIES * SVT_ENTRY_SIZE - 2
  10.    
  11.     rep #$30
  12.     pha
  13.    
  14.     mvn $7E=$7E
  15.    
  16.     pla
  17.     plb
  18.    
  19.     sep #$20
  20.    
  21.     rts
  22.    
  23. allocateSVTEntry:
  24.  
  25.         phx
  26.         phy
  27.         pha
  28.        
  29.         lda.b #$7E
  30.         pha
  31.         plb
  32.        
  33.         ldx.w #0
  34.         ldy.w #0
  35.        
  36.         phy
  37.         ldy.w #SVT_LOC
  38.         sty.w tempWord
  39.         ply
  40.        
  41.         lda (ADTI),y
  42.         pha
  43.        
  44.         -
  45.             cpy.w #MAX_SVT_ENTRIES
  46.             beq ++
  47.             lda (tempWord)
  48.             beq +
  49.             iny
  50.             inx #SVT_ENTRY_SIZE
  51.             inc $04
  52.             inc $04
  53.             inc $04
  54.             inc $04
  55.             inc $04
  56.             bra -
  57.            
  58.         +
  59.            
  60.             pla
  61.             sta.l SVT_LOC,x
  62.            
  63.             sep #$10
  64.            
  65.             phy
  66.             phx
  67.             tyx
  68.            
  69.             lda.l SVTCharTable,x
  70.             ldy.b #actor.charAddr
  71.             sta (ADTI),y
  72.            
  73.             plx
  74.            
  75.             rep #$20
  76.            
  77.             ply
  78.             phx
  79.             tya
  80.             asl
  81.             tax
  82.            
  83.             lda.l SVTSizeTable,x
  84.             ldy.b #actor.vramAddr
  85.             sta (ADTI),y
  86.            
  87.             plx
  88.             pha
  89.            
  90.             inx
  91.             sta.l SVT_LOC,x
  92.            
  93.             sep #$20
  94.             rep #$10
  95.            
  96.             jsr f_resetADB
  97.            
  98.             lda.b #$80        
  99.             sta.w REG_VMAIN
  100.            
  101.             rep #$20
  102.             pla
  103.             lsr
  104.             tax
  105.             xba
  106.             sep #$20
  107.  
  108.             stx.w REG_VMADDL
  109.  
  110.             lda.b #$01
  111.             sta.w REG_DMAP0
  112.             lda.b #$18
  113.             sta.w REG_BBAD0
  114.            
  115.             pla
  116.             ply
  117.             plx
  118.            
  119.             stx.w REG_A1T0L
  120.             sta.w REG_A1B0
  121.            
  122.             sty.w REG_DAS0L
  123.  
  124.             lda.b #$01
  125.             sta.w REG_MDMAEN
  126.            
  127.             rts
  128.            
  129.         +
  130.             ply
  131.             plx
  132.             pla
  133.            
  134.             rts
  135.            
  136. renderOAM:
  137.  
  138.     pha
  139.     plb
  140.    
  141.     sta.b tempByte
  142.     stx.w tempWord
  143.     lda (tempWord)
  144.     pha
  145.     inc tempWord
  146.    
  147.     lda.b #$7E
  148.     pha
  149.     plb
  150.    
  151.     sep #$10
  152.    
  153.     ldx.b #0
  154.     ldy.b #MAX_ST_ENTRIES
  155.    
  156.     findFreeSTSlot:
  157.    
  158.         cpy.b #0
  159.         beq ++
  160.         lda ST_LOC,x
  161.         beq +
  162.         inx
  163.         dey
  164.         bra findFreeSTSlot
  165.         +
  166.             pla
  167.             dec
  168.             tay
  169.             phy
  170.             phx
  171.         -
  172.             cpy.b #0
  173.             beq allocateSTSlots
  174.             inx
  175.             lda ST_LOC,x
  176.             bne moveToNextSlot
  177.             dey
  178.             bra -
  179.            
  180.         //; size does not match slot count
  181.         moveToNextSlot:
  182.        
  183.             inx
  184.             ply
  185.             bra findFreeSTSlot
  186.            
  187.         allocateSTSlots:
  188.        
  189.             plx     //; get starting allocation index
  190.             stx.b sprCallback
  191.             pla
  192.             clc
  193.             adc.b #1    //; get count + 1
  194.            
  195.             tay
  196.             sty.b sprCallback+2
  197.            
  198.             ldy.b #actor.x
  199.             lda (ADTI),y
  200.             pha
  201.            
  202.             iny
  203.            
  204.             lda (ADTI),y
  205.             pha
  206.            
  207.             ldy.b #actor.SPTID
  208.             lda (ADTI),y
  209.             pha
  210.            
  211.             rep #$20
  212.            
  213.             ldy.b #actor.vramAddr
  214.             lda (ADTI),y
  215.             pha
  216.            
  217.             xba
  218.             sep #$20
  219.            
  220.             ldy.b #actor.charAddr
  221.             lda (ADTI),y
  222.             pha
  223.            
  224.             lda.b tempByte
  225.             pha
  226.             plb
  227.            
  228.             ldy.b sprCallback+2
  229.            
  230.         parseSTDefinitions:
  231.        
  232.             cpy.b #0
  233.             beq +
  234.             jsr parseSTDef
  235.             inc sprCallback
  236.             bra parseSTDefinitions
  237.            
  238.         //; time to clean up our mess
  239.         +
  240.             rep #$20
  241.            
  242.             pla
  243.             pla
  244.             pla
  245.            
  246.             sep #$20
  247.             rep #$10
  248.            
  249.             lda.b #0
  250.             pha
  251.             plb
  252.            
  253.             rts
  254.            
  255. parseSTDef:
  256.    
  257.     phb
  258.     phy
  259.     ldx.b #LAST_META_ENTRY
  260.     txy
  261.     dey
  262.     -
  263.         cpx.b #0
  264.         beq plotOAMEntry
  265.         lda (tempWord),y
  266.         pha
  267.         dex
  268.         dey
  269.         bra -
  270.    
  271.     plotOAMEntry:
  272.        
  273.        
  274.         lda.b #MAX_ST_ENTRIES-1
  275.         sbc.b sprCallback
  276.        
  277.         sta.b tempByte
  278.        
  279.         rep #$20
  280.         asl
  281.         asl
  282.         clc
  283.         adc.w #OAMT_LOC
  284.         sta.w tempLong
  285.        
  286.         sta.w $0100
  287.        
  288.         sep #$20
  289.  
  290.         lda.b #0
  291.         tay
  292.         pha
  293.         plb
  294.         xba
  295.        
  296.         pla     //; X position
  297.         adc $0E,s
  298.         sta [tempLong],y
  299.         iny
  300.        
  301.         pla     //; Y position
  302.         adc $0C,s
  303.         sta [tempLong],y
  304.         iny
  305.        
  306.         pla     //; size
  307.         adc $0A,s
  308.         sta sprCallback+2
  309.        
  310.         pla     //; char
  311.         adc $08,s
  312.         sta [tempLong],y
  313.         iny
  314.        
  315.         pla     //; palette
  316.         adc $06,s
  317.         sta [tempLong],y
  318.        
  319.         lda.b tempByte
  320.         tax
  321.         lsr
  322.         lsr
  323.         tay
  324.         txa
  325.        
  326.         and.b #3
  327.         asl
  328.         tax
  329.        
  330.         lda oamHighTable,x
  331.         eor.b #$FF
  332.         and OAM_HIGH,y
  333.        
  334.         phx
  335.        
  336.         ldx.b sprCallback+2
  337.         beq +
  338.        
  339.         plx
  340.         inx
  341.         ora oamHighTable,x
  342.         bra ++
  343.        
  344.         +
  345.        
  346.         plx
  347.        
  348.         +
  349.        
  350.         sta OAM_HIGH,y
  351.        
  352.         ply
  353.         dey
  354.        
  355.         lda.b tempWord
  356.         clc
  357.         adc.b #5
  358.         sta.b tempWord
  359.        
  360.         plb
  361.        
  362.         rts
  363.        
  364.  
  365. macro defineMacroSprite(X, Y, SIZE, TILE, FLAG) {
  366.    
  367.         db {X}
  368.         db {Y}
  369.        
  370.         if {SIZE} == OBJ_LARGE {
  371.             db $01
  372.         } else {
  373.             db $00
  374.         }
  375.        
  376.         db {TILE}
  377.         db {FLAG}
  378. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement