Basic shifted data unrolling working for violet and green

This commit is contained in:
Quinn Dunki 2016-08-18 12:12:11 -07:00
parent 0a1cd5b8ed
commit dbe729e839
18 changed files with 1381 additions and 247 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
HGR.xcodeproj/xcuserdata
hgrtest.lst
HGR.xcodeproj/project.xcworkspace/xcuserdata/qd.xcuserdatad/UserInterfaceState.xcuserstate
/.DS_Store

View File

@ -10,8 +10,12 @@
707005BE1D3EC75F00623A10 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
707005BF1D3EC7FD00623A10 /* hgrtest.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = hgrtest.s; sourceTree = "<group>"; };
707005C01D3FD65900623A10 /* hgrtable.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = hgrtable.s; sourceTree = "<group>"; };
7090ABA91D4012A600F02EAA /* spritedata.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = spritedata.s; sourceTree = "<group>"; };
7090ABAA1D407B8100F02EAA /* spritegen.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = spritegen.s; sourceTree = "<group>"; };
7090ABA91D4012A600F02EAA /* spritedata0.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = spritedata0.s; sourceTree = "<group>"; };
7090ABAB1D41663400F02EAA /* scratch.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = scratch.s; sourceTree = "<group>"; };
7090ABAC1D418B8900F02EAA /* spritegen0.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = spritegen0.s; sourceTree = "<group>"; };
7090ABAD1D418B8900F02EAA /* spritegen1.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = spritegen1.s; sourceTree = "<group>"; };
7090ABAE1D419C3E00F02EAA /* spritedata1.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = spritedata1.s; sourceTree = "<group>"; };
7090ABAF1D453FDC00F02EAA /* hgrtable2.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = hgrtable2.s; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
@ -20,9 +24,13 @@
children = (
707005BE1D3EC75F00623A10 /* Makefile */,
707005BF1D3EC7FD00623A10 /* hgrtest.s */,
7090ABA91D4012A600F02EAA /* spritedata.s */,
7090ABAA1D407B8100F02EAA /* spritegen.s */,
7090ABAB1D41663400F02EAA /* scratch.s */,
7090ABA91D4012A600F02EAA /* spritedata0.s */,
7090ABAE1D419C3E00F02EAA /* spritedata1.s */,
7090ABAC1D418B8900F02EAA /* spritegen0.s */,
7090ABAD1D418B8900F02EAA /* spritegen1.s */,
707005C01D3FD65900623A10 /* hgrtable.s */,
7090ABAF1D453FDC00F02EAA /* hgrtable2.s */,
);
sourceTree = "<group>";
};

View File

@ -3,7 +3,7 @@
import sys,os,png
class Colors:
black,magenta = range(2)
black,magenta,green = range(3)
def main(argv):
@ -27,26 +27,37 @@ def main(argv):
for shift in range(7):
for phase in range(2):
if shift==0 and phase>0:
continue
for row in range(height):
for col in range(width):
(pixelr,pixelg,pixelb,half) = pixelRemap(pixeldata,row,col,width,shift,phase)
(color,half) = pixelRemap(pixeldata,row,col,width,shift,phase)
bitmap[row][col] = color
if pixelr==255 and pixelg==0 and pixelb==255:
bitmap[row][col] = Colors.magenta
else:
bitmap[row][col] = Colors.black
spriteNum = max(0,shift*2-1+phase)
printBitmap(bitmap,os.path.splitext(pngfile)[0].upper(),spriteNum,half,0)
spriteNum = shift*2+phase
printBitmap(bitmap,os.path.splitext(pngfile)[0].upper(),spriteNum,half,0,phase)
def pixelColor(pixeldata,row,col):
r = pixeldata[row][col*3]
g = pixeldata[row][col*3+1]
b = pixeldata[row][col*3+2]
color = Colors.black
if r==255 and g==0 and b==255:
color = Colors.magenta
else:
if r==0 and g==255 and b==0:
color = Colors.green
return color
def pixelRemap(pixeldata,row,col,width,shift,phase):
halfPixel = 0
overHalf = 0
origColor = pixelColor(pixeldata,row,col)
if shift>=width:
overHalf = 1
@ -58,37 +69,40 @@ def pixelRemap(pixeldata,row,col,width,shift,phase):
col = col+shift
else:
col = col-(width-shift)
if origColor==Colors.green:
col = col+1
if not overHalf:
halfPixel = -1
if col >= width or col<0:
return (0,0,0,halfPixel)
r = pixeldata[row][col*3]
g = pixeldata[row][col*3+1]
b = pixeldata[row][col*3+2]
return (r,g,b,halfPixel)
return (Colors.black,halfPixel)
remapColor = pixelColor(pixeldata,row,col)
return (remapColor,halfPixel)
def colorString(color,currByteString):
if len(currByteString) > 6:
if color==Colors.magenta:
return '1'
else:
return '0'
else:
if color==Colors.magenta:
return '10'
if color==Colors.magenta:
return 'ba'
else:
if color==Colors.green:
return 'ab'
return '00'
def printBitmap(bitmap,label,shift,halfShift,highbit):
print "%s%d:" % (label,shift)
def containsGreen(row):
for col in range(len(row)):
if row[col] == Colors.green:
return 1
return 0
def printBitmap(bitmap,label,spriteNum,halfShift,highbit,phase):
print "%s%d:" % (label,spriteNum)
for row in range(len(bitmap)):
byteString = "%d" % highbit
byteString = ""
for col in range(len(bitmap[0])):
append = colorString(bitmap[row][col],byteString)
@ -99,8 +113,14 @@ def printBitmap(bitmap,label,shift,halfShift,highbit):
else:
if halfShift<0:
byteString = byteString[1:] + "0"
sys.stdout.write("\t.byte\t%%%s\n" % byteString);
if len(byteString)>6:
byteString = byteString[:-1]
# if phase==0:
# byteString = byteString[::-1]
sys.stdout.write("\t.byte\t%%%d%s\n" % (highbit,byteString));
sys.stdout.write('\n\n')
sys.stdout.flush()

157
HiSprite2.py Executable file
View File

@ -0,0 +1,157 @@
#!/usr/bin/python
import sys,os,png
class Colors:
black,magenta,green = range(3)
def main(argv):
if len(argv)<1:
printHorzontalLookup()
exit(0)
pngfile = sys.argv[1]
reader = png.Reader(pngfile)
try:
pngdata = reader.asRGB8()
except:
usage()
width = pngdata[0]
height = pngdata[1]
pixeldata = pngdata[2]
for shift in range(0,7):
spriteChunks = layoutSpriteChunk(pixeldata,width,height,shift)
for chunkIndex in range(len(spriteChunks)):
print "%s_SHIFT%d_CHUNK%d:" % (os.path.splitext(pngfile)[0].upper(),shift,chunkIndex)
print spriteChunks[chunkIndex]
def layoutSpriteChunk(pixeldata,width,height,shift):
bitmap = [[0 for x in range(width)] for y in range(height)]
byteWidth = width/2+1
spriteChunks = ["" for x in range(byteWidth)]
for row in range(height):
pixelRow = bitmap[row]
bitStream = ""
for pixelIndex in range(width):
pixel = pixelColor(pixeldata,row,pixelIndex)
if pixel == Colors.black:
bitStream += "00"
else:
if pixel == Colors.green:
bitStream += "01"
else:
bitStream += "10"
bitStream = shiftStringRight(bitStream,shift)
bitStream = bitStream[:byteWidth*8]
bitPos = 0
byteSplits = [0 for x in range(byteWidth)]
for byteIndex in range(byteWidth):
remainingBits = len(bitStream) - bitPos
bitChunk = ""
if remainingBits < 0:
bitChunk = "0000000"
else:
if remainingBits < 7:
bitChunk = bitStream[bitPos:]
bitChunk += fillOutByte(7-remainingBits)
else:
bitChunk = bitStream[bitPos:bitPos+7]
bitChunk = bitChunk[::-1]
byteSplits[byteIndex] = "0" + bitChunk
bitPos += 7
for chunkIndex in range(len(byteSplits)):
spriteChunks[chunkIndex] += ".byte %%%s\t\n" % byteSplits[chunkIndex]
return spriteChunks
def fillOutByte(numBits):
filler = ""
for bit in range(numBits):
filler += "0"
return filler
def shiftStringRight(string,shift):
if shift==0:
return string
shift *=2
result = ""
for i in range(shift):
result += "0"
result += string
return result
def pixelColor(pixeldata,row,col):
r = pixeldata[row][col*3]
g = pixeldata[row][col*3+1]
b = pixeldata[row][col*3+2]
color = Colors.black
if r==255 and g==0 and b==255:
color = Colors.magenta
else:
if r==0 and g==255 and b==0:
color = Colors.green
return color
def printHorzontalLookup():
print "HGRROWS_GRN:"
for byte in range(40):
pixels = 4
offset = 0
if (byte%2):
pixels = 3
offset = -1
for entry in range(pixels):
print "\t.byte $%02x" % (byte + offset)
print "\nHGRROWS_BITSHIFT_GRN:"
for pixel in range(140):
print "\t.byte $%02x" % ((pixel % 7)*24)
def usage():
print '''
Usage: HiSprite <png file>
PNG file must not have an alpha channel!
'''
sys.exit(2)
if __name__ == "__main__":
main(sys.argv[1:])

Binary file not shown.

BIN
box.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

BIN
box_grn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

BIN
box_mag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

View File

@ -441,3 +441,4 @@ HGRROWS_L:
.byte $D0
.byte $D0

283
hgrtable2.s Normal file
View File

@ -0,0 +1,283 @@
HGRROWS_GRN:
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $02
.byte $02
.byte $02
.byte $02
.byte $02
.byte $02
.byte $02
.byte $04
.byte $04
.byte $04
.byte $04
.byte $04
.byte $04
.byte $04
.byte $06
.byte $06
.byte $06
.byte $06
.byte $06
.byte $06
.byte $06
.byte $08
.byte $08
.byte $08
.byte $08
.byte $08
.byte $08
.byte $08
.byte $0a
.byte $0a
.byte $0a
.byte $0a
.byte $0a
.byte $0a
.byte $0a
.byte $0c
.byte $0c
.byte $0c
.byte $0c
.byte $0c
.byte $0c
.byte $0c
.byte $0e
.byte $0e
.byte $0e
.byte $0e
.byte $0e
.byte $0e
.byte $0e
.byte $10
.byte $10
.byte $10
.byte $10
.byte $10
.byte $10
.byte $10
.byte $12
.byte $12
.byte $12
.byte $12
.byte $12
.byte $12
.byte $12
.byte $14
.byte $14
.byte $14
.byte $14
.byte $14
.byte $14
.byte $14
.byte $16
.byte $16
.byte $16
.byte $16
.byte $16
.byte $16
.byte $16
.byte $18
.byte $18
.byte $18
.byte $18
.byte $18
.byte $18
.byte $18
.byte $1a
.byte $1a
.byte $1a
.byte $1a
.byte $1a
.byte $1a
.byte $1a
.byte $1c
.byte $1c
.byte $1c
.byte $1c
.byte $1c
.byte $1c
.byte $1c
.byte $1e
.byte $1e
.byte $1e
.byte $1e
.byte $1e
.byte $1e
.byte $1e
.byte $20
.byte $20
.byte $20
.byte $20
.byte $20
.byte $20
.byte $20
.byte $22
.byte $22
.byte $22
.byte $22
.byte $22
.byte $22
.byte $22
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $26
.byte $26
.byte $26
.byte $26
.byte $26
.byte $26
.byte $26
HGRROWS_BITSHIFT_GRN:
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90
.byte $00
.byte $18
.byte $30
.byte $48
.byte $60
.byte $78
.byte $90

Binary file not shown.

312
hgrtest.s
View File

@ -28,6 +28,18 @@ SCRATCH0 = $19
SCRATCH1 = $1a
; Macros
.macro BLITBYTE xPos,yPos,addr
lda #xPos
sta PARAM0
lda #yPos
sta PARAM1
lda #<addr
sta PARAM2
lda #>addr
sta PARAM3
jsr BlitSpriteOnByte
.endmacro
.macro BLIT xPos,yPos,addr
lda #xPos
sta PARAM0
@ -55,80 +67,226 @@ loop:
lda #$00
jsr LinearFill
.if 1
ldx #1
stx PARAM0
lda #80
sta PARAM1
lda #<BOX_MAG_SHIFT0_CHUNK0
sta PARAM2
lda #>BOX_MAG_SHIFT0_CHUNK0
sta PARAM3
jsr BlitSprite
.endif
.if 0
BLITBYTE 0,80,BOX_MAG_SHIFT0_CHUNK0
BLITBYTE 1,80,BOX_MAG_SHIFT0_CHUNK1
BLITBYTE 2,80,BOX_MAG_SHIFT0_CHUNK2
BLITBYTE 0,90,BOX_MAG_SHIFT1_CHUNK0
BLITBYTE 1,90,BOX_MAG_SHIFT1_CHUNK1
BLITBYTE 2,90,BOX_MAG_SHIFT1_CHUNK2
BLITBYTE 0,100,BOX_MAG_SHIFT2_CHUNK0
BLITBYTE 1,100,BOX_MAG_SHIFT2_CHUNK1
BLITBYTE 2,100,BOX_MAG_SHIFT2_CHUNK2
BLITBYTE 0,110,BOX_MAG_SHIFT3_CHUNK0
BLITBYTE 1,110,BOX_MAG_SHIFT3_CHUNK1
BLITBYTE 2,110,BOX_MAG_SHIFT3_CHUNK2
BLITBYTE 0,120,BOX_MAG_SHIFT4_CHUNK0
BLITBYTE 1,120,BOX_MAG_SHIFT4_CHUNK1
BLITBYTE 2,120,BOX_MAG_SHIFT4_CHUNK2
BLITBYTE 0,130,BOX_MAG_SHIFT5_CHUNK0
BLITBYTE 1,130,BOX_MAG_SHIFT5_CHUNK1
BLITBYTE 2,130,BOX_MAG_SHIFT5_CHUNK2
BLITBYTE 0,140,BOX_MAG_SHIFT6_CHUNK0
BLITBYTE 1,140,BOX_MAG_SHIFT6_CHUNK1
BLITBYTE 2,140,BOX_MAG_SHIFT6_CHUNK2
BLITBYTE 4,80,BOX_GRN_SHIFT0_CHUNK0
BLITBYTE 5,80,BOX_GRN_SHIFT0_CHUNK1
BLITBYTE 6,80,BOX_GRN_SHIFT0_CHUNK2
BLITBYTE 4,90,BOX_GRN_SHIFT1_CHUNK0
BLITBYTE 5,90,BOX_GRN_SHIFT1_CHUNK1
BLITBYTE 6,90,BOX_GRN_SHIFT1_CHUNK2
BLITBYTE 4,100,BOX_GRN_SHIFT2_CHUNK0
BLITBYTE 5,100,BOX_GRN_SHIFT2_CHUNK1
BLITBYTE 6,100,BOX_GRN_SHIFT2_CHUNK2
BLITBYTE 4,110,BOX_GRN_SHIFT3_CHUNK0
BLITBYTE 5,110,BOX_GRN_SHIFT3_CHUNK1
BLITBYTE 6,110,BOX_GRN_SHIFT3_CHUNK2
BLITBYTE 4,120,BOX_GRN_SHIFT4_CHUNK0
BLITBYTE 5,120,BOX_GRN_SHIFT4_CHUNK1
BLITBYTE 6,120,BOX_GRN_SHIFT4_CHUNK2
BLITBYTE 4,130,BOX_GRN_SHIFT5_CHUNK0
BLITBYTE 5,130,BOX_GRN_SHIFT5_CHUNK1
BLITBYTE 6,130,BOX_GRN_SHIFT5_CHUNK2
BLITBYTE 4,140,BOX_GRN_SHIFT6_CHUNK0
BLITBYTE 5,140,BOX_GRN_SHIFT6_CHUNK1
BLITBYTE 6,140,BOX_GRN_SHIFT6_CHUNK2
.endif
.if 0
BLIT 20,80,SPRITE0
BLITBYTE 20,80,MAG0
BLITBYTE 21,80,MAG1
BLIT 20,90,SPRITE1
BLIT 21,90,SPRITE2
BLITBYTE 20,90,MAG2
BLITBYTE 21,90,MAG3
BLIT 20,100,SPRITE3
BLIT 21,100,SPRITE4
BLITBYTE 20,100,MAG4
BLITBYTE 21,100,MAG5
BLIT 20,110,SPRITE5
BLIT 21,110,SPRITE6
BLITBYTE 20,110,MAG6
BLITBYTE 21,110,MAG7
BLIT 21,120,SPRITE7
BLIT 22,120,SPRITE8
BLITBYTE 21,120,MAG8
BLITBYTE 22,120,MAG9
BLIT 21,130,SPRITE9
BLIT 22,130,SPRITE10
BLITBYTE 21,130,MAG10
BLITBYTE 22,130,MAG11
BLIT 21,140,SPRITE11
BLIT 22,140,SPRITE12
BLIT 22,150,SPRITE0
BLITBYTE 21,140,MAG12
BLITBYTE 22,140,MAG13
.endif
.if 0
BLITBYTE 22,80,GRN0
BLITBYTE 23,80,GRN1
BLITBYTE 22,90,GRN2
BLITBYTE 23,90,GRN3
BLITBYTE 22,100,GRN4
BLITBYTE 23,100,GRN5
BLITBYTE 22,110,GRN6
BLITBYTE 23,110,GRN7
BLITBYTE 23,120,GRN8
BLITBYTE 24,120,GRN9
BLITBYTE 23,130,GRN10
BLITBYTE 24,130,GRN11
BLITBYTE 23,140,GRN12
BLITBYTE 24,140,GRN13
.endif
.if 0
BLITBYTE 20,80,BOX_MAG0
BLITBYTE 21,80,BOX_MAG1
BLITBYTE 20,90,BOX_MAG2
BLITBYTE 21,90,BOX_MAG3
BLITBYTE 20,100,BOX_MAG4
BLITBYTE 21,100,BOX_MAG5
BLITBYTE 20,110,BOX_MAG6
BLITBYTE 21,110,BOX_MAG7
BLITBYTE 21,120,BOX_MAG8
BLITBYTE 22,120,BOX_MAG9
BLITBYTE 21,130,BOX_MAG10
BLITBYTE 22,130,BOX_MAG11
BLITBYTE 21,140,BOX_MAG12
BLITBYTE 22,140,BOX_MAG13
.endif
.if 0
BLITBYTE 20,80,BOX_GRN0
BLITBYTE 20,90,BOX_GRN1
BLITBYTE 21,90,BOX_GRN2
BLITBYTE 20,100,BOX_GRN3
BLITBYTE 21,100,BOX_GRN4
BLITBYTE 20,110,BOX_GRN5
BLITBYTE 21,110,BOX_GRN6
BLITBYTE 21,120,BOX_GRN7
BLITBYTE 22,120,BOX_GRN8
BLITBYTE 21,130,BOX_GRN9
BLITBYTE 22,130,BOX_GRN10
BLITBYTE 21,140,BOX_GRN11
BLITBYTE 22,140,BOX_GRN12
.endif
;rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BLIT 20,80,BOX0
.if 0
BLITBYTE 20,80,BOX0
WAIT
BLIT 20,80,BLACK
BLITBYTE 20,80,BLACK
BLIT 20,80,BOX1
BLIT 21,80,BOX2
BLITBYTE 20,80,BOX1
BLITBYTE 21,80,BOX2
WAIT
BLIT 20,80,BLACK
BLIT 21,80,BLACK
BLITBYTE 20,80,BLACK
BLITBYTE 21,80,BLACK
BLIT 20,80,BOX3
BLIT 21,80,BOX4
BLITBYTE 20,80,BOX3
BLITBYTE 21,80,BOX4
WAIT
BLIT 20,80,BLACK
BLIT 21,80,BLACK
BLITBYTE 20,80,BLACK
BLITBYTE 21,80,BLACK
BLIT 20,80,BOX5
BLIT 21,80,BOX6
BLITBYTE 20,80,BOX5
BLITBYTE 21,80,BOX6
WAIT
BLIT 20,80,BLACK
BLIT 21,80,BLACK
BLITBYTE 20,80,BLACK
BLITBYTE 21,80,BLACK
BLIT 21,80,BOX7
BLIT 22,80,BOX8
BLITBYTE 21,80,BOX7
BLITBYTE 22,80,BOX8
WAIT
BLIT 21,80,BLACK
BLIT 22,80,BLACK
BLITBYTE 21,80,BLACK
BLITBYTE 22,80,BLACK
BLIT 21,80,BOX9
BLIT 22,80,BOX10
BLITBYTE 21,80,BOX9
BLITBYTE 22,80,BOX10
WAIT
BLIT 21,80,BLACK
BLIT 22,80,BLACK
BLITBYTE 21,80,BLACK
BLITBYTE 22,80,BLACK
BLIT 21,80,BOX11
BLIT 22,80,BOX12
BLITBYTE 21,80,BOX11
BLITBYTE 22,80,BOX12
WAIT
BLIT 21,80,BLACK
BLIT 22,80,BLACK
BLITBYTE 21,80,BLACK
BLITBYTE 22,80,BLACK
BLIT 22,80,BOX0
BLITBYTE 22,80,BOX0
WAIT
BLIT 22,80,BLACK
BLITBYTE 22,80,BLACK
jmp loop
.endif
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -136,30 +294,75 @@ loop:
; Trashes everything
; PARAM0: X Pos
; PARAM1: Y Pos
; PARAM2: Sprite Ptr MSB
; PARAM3: Sprite Ptr LSB
; PARAM2: Sprite Ptr LSB
; PARAM3: Sprite Ptr MSB
;
BlitSprite:
clc ; Compute sprite data base
ldx PARAM0
lda HGRROWS_BITSHIFT_GRN,x
adc PARAM2
sta PARAM2
lda #0
adc PARAM3
sta PARAM3
ldy #7
blitSprite_loop:
clc
clc ; Calculate Y line
tya
adc PARAM1 ; Calculate Y line
adc PARAM1
tax
lda HGRROWS_H,x ; Compute hires row
sta blitSprite_smc+2
sta blitSprite_smc+2 ; Self-modifying code
lda HGRROWS_L,x
sta blitSprite_smc+1
ldx PARAM0 ; Compute hires column
ldx PARAM0 ; Compute hires horizontal byte
lda HGRROWS_GRN,x
tax
lda (PARAM2),y
blitSprite_smc:
sta $2000,x
dey
bpl blitSprite_loop
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BlitSpriteOnByte
; Trashes everything
; PARAM0: X Byte
; PARAM1: Y Pos
; PARAM2: Sprite Ptr MSB
; PARAM3: Sprite Ptr LSB
;
BlitSpriteOnByte:
ldy #7
blitSpriteOnByte_loop:
clc
tya
adc PARAM1 ; Calculate Y line
tax
lda HGRROWS_H,x ; Compute hires row
sta blitSpriteOnByte_smc+2
lda HGRROWS_L,x
sta blitSpriteOnByte_smc+1
ldx PARAM0 ; Compute hires column
lda (PARAM2),y
blitSpriteOnByte_smc:
sta $2000,x
dey
bpl blitSpriteOnByte_loop
rts
@ -221,8 +424,11 @@ venetianFill_inner:
.include "hgrtable.s"
.include "spritedata.s"
.include "spritegen.s"
.include "hgrtable2.s"
.include "spritedata0.s"
.include "spritedata1.s"
.include "spritegen0.s"
.include "spritegen1.s"
; Suppress some linker warnings - Must be the last thing in the file

19
scratch.s Normal file
View File

@ -0,0 +1,19 @@
BOX0:
.byte %00101010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00101010
BOX1:
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001

View File

@ -5,17 +5,27 @@
; Copyright (c) 2015 One Girl, One Laptop Productions. All rights reserved.
;
SPRITE0:
MAG0:
.byte %01010101 ; Byte aligned
.byte %01000001 ; (reversed)
.byte %01000001
.byte %01000001
.byte %01000001 ;;;;;;;;;;;;;;;;;;;;
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01010101
SPRITE1:
MAG1:
.byte %00000000 ; Byte aligned
.byte %00000000 ; (2nd byte, reversed)
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
MAG2:
.byte %01010100 ; One pixel shift
.byte %00000100 ; (reversed)
.byte %00000100
@ -25,7 +35,7 @@ SPRITE1:
.byte %00000100
.byte %01010100
SPRITE2:
MAG3:
.byte %00000010 ; One pixel shift
.byte %00000010 ; (2nd byte, reversed)
.byte %00000010
@ -36,7 +46,7 @@ SPRITE2:
.byte %00000010
SPRITE3:
MAG4:
.byte %01010000 ; Two pixel shift
.byte %00010000 ; (reversed)
.byte %00010000
@ -46,7 +56,7 @@ SPRITE3:
.byte %00010000
.byte %01010000
SPRITE4:
MAG5:
.byte %00001010 ; Two pixel shift
.byte %00001000 ; (2nd byte, reversed)
.byte %00001000
@ -57,7 +67,7 @@ SPRITE4:
.byte %00001010
SPRITE5:
MAG6:
.byte %01000000 ; Three pixel shift
.byte %01000000 ; (reversed)
.byte %01000000
@ -67,7 +77,7 @@ SPRITE5:
.byte %01000000
.byte %01000000
SPRITE6:
MAG7:
.byte %00101010 ; Three pixel shift
.byte %00100000 ; (2nd byte, reversed)
.byte %00100000
@ -78,7 +88,7 @@ SPRITE6:
.byte %00101010
SPRITE7:
MAG8:
.byte %00101010 ; Four pixel shift
.byte %00000010 ; (reversed)
.byte %00000010
@ -88,7 +98,7 @@ SPRITE7:
.byte %00000010
.byte %00101010
SPRITE8:
MAG9:
.byte %00000001 ; Four pixel shift
.byte %00000001 ; (2nd byte, reversed)
.byte %00000001
@ -99,7 +109,7 @@ SPRITE8:
.byte %00000001
SPRITE9:
MAG10:
.byte %00101000 ; Five pixel shift
.byte %00001000 ; (reversed)
.byte %00001000
@ -109,7 +119,7 @@ SPRITE9:
.byte %00001000
.byte %00101000
SPRITE10:
MAG11:
.byte %00000101 ; Five pixel shift
.byte %00000100 ; (2nd byte, reversed)
.byte %00000100
@ -120,7 +130,7 @@ SPRITE10:
.byte %00000101
SPRITE11:
MAG12:
.byte %00100000 ; Six pixel shift
.byte %00100000 ; (2nd byte, reversed)
.byte %00100000
@ -130,7 +140,7 @@ SPRITE11:
.byte %00100000
.byte %00100000
SPRITE12:
MAG13:
.byte %00010101 ; Six pixel shift
.byte %00010000 ; (reversed)
.byte %00010000

152
spritedata1.s Normal file
View File

@ -0,0 +1,152 @@
;
; spritedata.s
;
; Created by Quinn Dunki on 7/19/16
; Copyright (c) 2015 One Girl, One Laptop Productions. All rights reserved.
;
GRN0:
.byte %00101010 ; Byte aligned
.byte %00000010 ; (reversed)
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00101010
GRN1:
.byte %00000001 ; Byte aligned
.byte %00000001 ; (2nd byte, reversed)
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
GRN2:
.byte %00101000 ; One pixel shift
.byte %00001000 ; (reversed)
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00101000
GRN3:
.byte %00000101 ; One pixel shift
.byte %00000100 ; (2nd byte, reversed)
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000101
GRN4:
.byte %00100000 ; Two pixel shift
.byte %00100000 ; (reversed)
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
GRN5:
.byte %00010101 ; Two pixel shift
.byte %00010000 ; (2nd byte, reversed)
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010101
GRN6:
.byte %00000000 ; Three pixel shift
.byte %00000000 ; (reversed)
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
GRN7:
.byte %01010101 ; Three pixel shift
.byte %01000001 ; (2nd byte, reversed)
.byte %01000001
.byte %01000001 ;;;;;;;;;;;;;;;;;;;;
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01010101
GRN8:
.byte %01010100 ; Four pixel shift
.byte %00000100 ; (reversed)
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %01010100
GRN9:
.byte %00000010 ; Four pixel shift
.byte %00000010 ; (2nd byte, reversed)
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
GRN10:
.byte %01010000 ; Five pixel shift
.byte %00010000 ; (reversed)
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %01010000
GRN11:
.byte %00001010 ; Five pixel shift
.byte %00001000 ; (2nd byte, reversed)
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001010
GRN12:
.byte %01000000 ; Six pixel shift
.byte %01000000 ; (2nd byte, reversed)
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
GRN13:
.byte %00101010 ; Six pixel shift
.byte %00100000 ; (reversed)
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00101010

View File

@ -1,143 +0,0 @@
BOX0:
.byte %01010101
.byte %01010001
.byte %01000101
.byte %01010001
.byte %01000101
.byte %01010001
.byte %01000101
.byte %01010101
BOX1:
.byte %01010100
.byte %01000100
.byte %00010100
.byte %01000100
.byte %00010100
.byte %01000100
.byte %00010100
.byte %01010100
BOX2:
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
BOX3:
.byte %01010000
.byte %00010000
.byte %01010000
.byte %00010000
.byte %01010000
.byte %00010000
.byte %01010000
.byte %01010000
BOX4:
.byte %00001010
.byte %00001010
.byte %00001000
.byte %00001010
.byte %00001000
.byte %00001010
.byte %00001000
.byte %00001010
BOX5:
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
BOX6:
.byte %00101010
.byte %00101000
.byte %00100010
.byte %00101000
.byte %00100010
.byte %00101000
.byte %00100010
.byte %00101010
BOX7:
.byte %00101010
.byte %00100010
.byte %00001010
.byte %00100010
.byte %00001010
.byte %00100010
.byte %00001010
.byte %00101010
BOX8:
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
BOX9:
.byte %00101000
.byte %00001000
.byte %00101000
.byte %00001000
.byte %00101000
.byte %00001000
.byte %00101000
.byte %00101000
BOX10:
.byte %00000101
.byte %00000101
.byte %00000100
.byte %00000101
.byte %00000100
.byte %00000101
.byte %00000100
.byte %00000101
BOX11:
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
BOX12:
.byte %00010101
.byte %00010100
.byte %00010001
.byte %00010100
.byte %00010001
.byte %00010100
.byte %00010001
.byte %00010101

210
spritegen0.s Normal file
View File

@ -0,0 +1,210 @@
BOX_MAG_SHIFT0_CHUNK0:
.byte %01010101
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01010101
BOX_MAG_SHIFT0_CHUNK1:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT0_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT1_CHUNK0:
.byte %01010100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %01010100
BOX_MAG_SHIFT1_CHUNK1:
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
BOX_MAG_SHIFT1_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT2_CHUNK0:
.byte %01010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %01010000
BOX_MAG_SHIFT2_CHUNK1:
.byte %00001010
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001010
BOX_MAG_SHIFT2_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT3_CHUNK0:
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
BOX_MAG_SHIFT3_CHUNK1:
.byte %00101010
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00101010
BOX_MAG_SHIFT3_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT4_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT4_CHUNK1:
.byte %00101010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00101010
BOX_MAG_SHIFT4_CHUNK2:
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
BOX_MAG_SHIFT5_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT5_CHUNK1:
.byte %00101000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00101000
BOX_MAG_SHIFT5_CHUNK2:
.byte %00000101
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000101
BOX_MAG_SHIFT6_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_MAG_SHIFT6_CHUNK1:
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
BOX_MAG_SHIFT6_CHUNK2:
.byte %00010101
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010101

210
spritegen1.s Normal file
View File

@ -0,0 +1,210 @@
BOX_GRN_SHIFT0_CHUNK0:
.byte %00101010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00101010
BOX_GRN_SHIFT0_CHUNK1:
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
.byte %00000001
BOX_GRN_SHIFT0_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT1_CHUNK0:
.byte %00101000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00101000
BOX_GRN_SHIFT1_CHUNK1:
.byte %00000101
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000101
BOX_GRN_SHIFT1_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT2_CHUNK0:
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
BOX_GRN_SHIFT2_CHUNK1:
.byte %00010101
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010101
BOX_GRN_SHIFT2_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT3_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT3_CHUNK1:
.byte %01010101
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01010101
BOX_GRN_SHIFT3_CHUNK2:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT4_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT4_CHUNK1:
.byte %01010100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %00000100
.byte %01010100
BOX_GRN_SHIFT4_CHUNK2:
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00000010
BOX_GRN_SHIFT5_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT5_CHUNK1:
.byte %01010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %01010000
BOX_GRN_SHIFT5_CHUNK2:
.byte %00001010
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001010
BOX_GRN_SHIFT6_CHUNK0:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
BOX_GRN_SHIFT6_CHUNK1:
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
BOX_GRN_SHIFT6_CHUNK2:
.byte %00101010
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00101010