User Tools

Site Tools


base:sprite_x-coordinate_calculus

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:sprite_x-coordinate_calculus [2015-04-17 04:34] (current)
Line 1: Line 1:
 +===== Signed Sprite X-Coordinate calculus: by delta table =====
 +
 +This piece of code adds a signed byte (from the delta table) to an unsigned byte (the sprite x-coordinate) and returns a unsigned 9-bit number, storing the lower 8-bits on the sprite x-coordinate register and 9th bit on the sprite x-coordinate MSB register.
 +
 +<​code>​
 + ;Calc new sprite 0 X-coordinate by delta table
 +        ;by The_WOZ/​soft154i
 +
 +        ; XDELTA = delta table for X
 +        ; y register = XDELTA index
 + clc
 + clv
 + lda $D000 ​          ;Load first operand: sprite0 x-coordinate
 + bmi .pxa0 ​          ;Test sign of first operand
 + adc XDELTA,​y ;​First operand is positive (in 2's complement)
 + sta $D000
 + bpl .cnt
 + bvs .cnt
 + lda #​$fe ;​Reset MSB
 + and $D010
 + jmp .pxm0
 +.pxa0
 + adc XDELTA,​y ;​First operand is negative
 + sta $D000
 + bvs .cnt
 + bcc .cnt
 + bmi .cnt
 + lda #​$01 ;​Set MSB
 + ora $D010
 +.pxm0 sta $D010
 +
 +.cnt    ;--- Rest of the program ---
 +
 +; X Delta table, ACME format
 +XDELTA !byte 5,6,5,6,5,6
 +      !byte 5,5,5,5,5,4
 +      !byte 4,4,4,4,3,4
 +      !byte 3,2,3,2,2,2
 +      !byte 1,1,1,1,0,0
 +      !byte 0,​0,​0,​-1,​-1,​-1
 +      !byte -1,​-1,​-1,​-2,​-2,​-1
 +      !byte -2,​-2,​-2,​-2,​-1,​-2
 +      !byte -2,​-2,​-1,​-2,​-2,​-1
 +      !byte -2,​-1,​-1,​-1,​-1,​0
 +      !byte -1,​0,​-1,​0,​0,​1
 +      !byte 0,1,0,1,1,1
 +      !byte 1,2,1,2,2,1
 +      !byte 2,2,2,1,2,2
 +      !byte 2,2,1,2,2,1
 +      !byte 1,1,1,1,1,0
 +      !byte 0,​0,​0,​0,​-1,​-1
 +      !byte -1,​-1,​-2,​-2,​-2,​-3
 +      !byte -2,​-3,​-4,​-3,​-4,​-4
 +      !byte -4,​-4,​-4,​-5,​-5,​-5
 +      !byte -5,​-5,​-6,​-5,​-6,​-5
 +      !byte -6,​-6,​-5,​-6,​-5,​-6
 +      !byte -5,​-6,​-5,​-5,​-5,​-5
 +      !byte -5,​-4,​-4,​-4,​-4,​-4
 +      !byte -3,​-4,​-3,​-2,​-3,​-2
 +      !byte -2,​-2,​-1,​-1,​-1,​-1
 +      !byte 0,0,0,0,0,1
 +      !byte 1,1,1,1,1,2
 +      !byte 2,1,2,2,2,2
 +      !byte 1,2,2,2,1,2
 +      !byte 2,1,2,1,1,1
 +      !byte 1,0,1,0,1,0
 +      !byte 0,​-1,​0,​-1,​0,​-1
 +      !byte -1,​-1,​-1,​-2,​-1,​-2
 +      !byte -2,​-1,​-2,​-2,​-2,​-1
 +      !byte -2,​-2,​-2,​-2,​-1,​-2
 +      !byte -2,​-1,​-1,​-1,​-1,​-1
 +      !byte -1,​0,​0,​0,​0,​0
 +      !byte 1,1,1,1,2,2
 +      !byte 2,3,2,3,4,3
 +      !byte 4,4,4,4,4,5
 +      !byte 5,5,5,5,6,5
 +      !byte 6,5,6,6
 +
 +</​code>​
  
base/sprite_x-coordinate_calculus.txt ยท Last modified: 2015-04-17 04:34 (external edit)