1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-06-03 04:29:33 +00:00
8bitworkshop/test/ecs/sprites.txt

561 lines
11 KiB
Plaintext
Raw Normal View History

2022-02-23 17:16:47 +00:00
EVENT__start = 1
EVENT__preframe = 1
EVENT__kernel = 1
EVENT__scanline = 1
2022-02-24 19:30:10 +00:00
EVENT__postframe = 1
2022-02-23 17:16:47 +00:00
EVENT__joyleft = 1
EVENT__joyright = 1
EVENT__joyup = 1
EVENT__joydown = 1
2022-02-24 19:30:10 +00:00
EVENT__SetHorizPos = 1
.scope Main
.zeropage
HasBitmap_bitmap_b0:
.res 1
.res 1
.res 1
.res 1
HasColormap_colormap_b0:
.res 1
.res 1
.res 1
.res 1
HasXpos_xpos_b0:
.res 1
.res 1
.res 1
.res 1
HasYpos_ypos_b0:
.res 1
.res 1
.res 1
.res 1
SpriteSlot_sprite_b0:
.res 1
.res 1
.res 1
.res 1
TEMP:
2022-02-17 15:58:13 +00:00
Kernel2Sprite__2__tmp:
Joystick__3__tmp:
SpriteHider__9__tmp:
.res 1
2022-02-17 15:58:13 +00:00
SpriteShuffler__8__tmp:
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.res 1
.code
KernelSection_lines_b0:
.byte 192
BGColor_bgcolor_b0:
.byte 162
Bitmap_bitmapdata_b0:
.byte <(Bitmap_bitmapdata_e1_b0+31)
.byte <(Bitmap_bitmapdata_e2_b0+31)
Bitmap_bitmapdata_b8:
.byte >(Bitmap_bitmapdata_e1_b0+31)
.byte >(Bitmap_bitmapdata_e2_b0+31)
Bitmap_bitmapdata_e1_b0:
.byte 1
.byte 1
.byte 3
.byte 7
.byte 15
.byte 31
.byte 63
.byte 127
Bitmap_height_b0:
.byte 8
.byte 8
Bitmap_bitmapdata_e2_b0:
.byte 24
.byte 62
.byte 255
.byte 255
.byte 255
.byte 255
.byte 62
.byte 24
Colormap_colormapdata_b0:
.byte <(Colormap_colormapdata_e3_b0+31)
Colormap_colormapdata_b8:
.byte >(Colormap_colormapdata_e3_b0+31)
Colormap_colormapdata_e3_b0:
.byte 6
.byte 3
.byte 6
.byte 9
.byte 12
.byte 14
.byte 31
.byte 63
Sprite_plyrflags_b0:
.byte 0
.byte 3
.byte 2
.byte 0
Main__INITDATA:
.byte 1
.byte 0
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 50
.byte 100
.byte 80
.byte 40
.byte 150
.byte 60
.byte 90
.byte 150
.byte 0
.byte 1
.byte 2
.byte 3
__Start:
2022-02-23 14:43:19 +00:00
;;; start action Init__main_init__1
.include "vcs-ca65.h"
.macpack longbranch
.define PAL 0
__NMI:
__Reset:
__BRK:
CLEAN_START
ldy #20
: lda Main__INITDATA-1,y
sta HasBitmap_bitmap_b0-1,y
dey
bne :-
2022-02-27 15:31:09 +00:00
;;; start action FrameLoop__start__3
2022-02-27 15:31:09 +00:00
FrameLoop__start__4__NextFrame:
FRAME_START
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__preframe__5
.define KLINES #192
.define KPAD 32
; set height to zero in case no sprites
lda #0
sta Kernel2Sprite__2__tmp+8
sta Kernel2Sprite__2__tmp+9
; set temp value so we don't read bitmap from h/w registers
lda #$F0
sta Kernel2Sprite__2__tmp+2
sta Kernel2Sprite__2__tmp+3
sta Kernel2Sprite__2__tmp+6
sta Kernel2Sprite__2__tmp+7
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__preframe__5
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__preframe__8
ldy #0
2022-02-27 15:31:09 +00:00
Kernel2Sprite__preframe__9____each:
ldx SpriteSlot_sprite_b0,y
; flags set according to sprite slot value
; skip sprite if negative
2022-02-27 15:31:09 +00:00
jmi Kernel2Sprite__preframe__10__nosprite
; set player object flags
lda Sprite_plyrflags_b0,x
sta NUSIZ0,y
sta REFP0,y
; calculate screen height - ypos
lda KLINES+KPAD
sec
sbc HasYpos_ypos_b0,x
sta Kernel2Sprite__2__tmp+11
; calculate bitmap pointer
stx Kernel2Sprite__2__tmp+12 ; save X (Sprite index)
lda HasBitmap_bitmap_b0,x ; deref bitmap
tax
lda Bitmap_bitmapdata_b0,x
sec
sbc Kernel2Sprite__2__tmp+11
sta Kernel2Sprite__2__tmp+0,y ; Y = sprite slot index
lda Bitmap_bitmapdata_b8,x
sbc #0
sta Kernel2Sprite__2__tmp+2,y
; get bitmap height
lda Bitmap_height_b0,x
sta Kernel2Sprite__2__tmp+8,y
; calculate colormap pointer
ldx Kernel2Sprite__2__tmp+12 ; restore X
lda HasColormap_colormap_b0,x ; deref colormap
tax
lda Colormap_colormapdata_b0,x
sec
sbc Kernel2Sprite__2__tmp+11
sta Kernel2Sprite__2__tmp+4,y
lda Colormap_colormapdata_b8,x
sbc #0
sta Kernel2Sprite__2__tmp+6,y
; save ypos
ldx Kernel2Sprite__2__tmp+12 ; restore X
lda HasYpos_ypos_b0,x
sta Kernel2Sprite__2__tmp+10,y
2022-02-27 15:31:09 +00:00
Kernel2Sprite__preframe__10__nosprite:
iny
cpy #2
2022-02-27 15:31:09 +00:00
jne Kernel2Sprite__preframe__9____each
Kernel2Sprite__preframe__9____exit:
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__preframe__8
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__preframe__11
; shuffle pointers into (MSB, LSB) byte order
; L0 L1 H0 H1 -> L0 H0 L1 H1
lda Kernel2Sprite__2__tmp+1
ldy Kernel2Sprite__2__tmp+2
sty Kernel2Sprite__2__tmp+1
sta Kernel2Sprite__2__tmp+2
lda Kernel2Sprite__2__tmp+5
ldy Kernel2Sprite__2__tmp+6
sty Kernel2Sprite__2__tmp+5
sta Kernel2Sprite__2__tmp+6
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__preframe__11
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__preframe__13
lda #162
sta COLUBK
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__preframe__13
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__preframe__16
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__preframe__16
2022-02-27 15:31:09 +00:00
;;; start action SetXPos__preframe__17
sta HMCLR
2022-02-27 15:31:09 +00:00
;;; end action SetXPos__preframe__17
2022-02-27 15:31:09 +00:00
;;; start action SetXPos__preframe__19
ldy #0
2022-02-27 15:31:09 +00:00
SetXPos__preframe__20____each:
ldx SpriteSlot_sprite_b0,y
lda HasXpos_xpos_b0,x
2022-02-27 15:31:09 +00:00
;;; start action SetHorizPos__SetHorizPos__22
; SetHorizPos routine
; A = X coordinate
; Y = player number (0 or 1)
sta WSYNC ; start a new line
sec ; set carry flag
nop
2022-02-27 15:31:09 +00:00
SetHorizPos__SetHorizPos__23__DivideLoop:
sbc #15 ; subtract 15
2022-02-27 15:31:09 +00:00
bcs SetHorizPos__SetHorizPos__23__DivideLoop ; branch until negative
eor #7 ; calculate fine offset
asl
asl
asl
asl
sta RESP0,y ; fix coarse position
sta HMP0,y ; set fine offset
2022-02-27 15:31:09 +00:00
;;; end action SetHorizPos__SetHorizPos__22
iny
cpy #2
2022-02-27 15:31:09 +00:00
jne SetXPos__preframe__20____each
SetXPos__preframe__20____exit:
2022-02-27 15:31:09 +00:00
;;; end action SetXPos__preframe__19
2022-02-27 15:31:09 +00:00
;;; start action SetXPos__preframe__24
2022-02-27 15:31:09 +00:00
;;; end action SetXPos__preframe__24
2022-02-27 15:31:09 +00:00
;;; start action SetXPos__preframe__25
sta WSYNC
sta HMOVE
2022-02-27 15:31:09 +00:00
;;; end action SetXPos__preframe__25
KERNEL_START
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__kernel__27
ldy #0
sty VDELP0
iny
sta VDELP1
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__kernel__27
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__kernel__30
ldy #192
2022-02-27 15:31:09 +00:00
Kernel2Sprite__kernel__32__LVScan:
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__scanline__33
; draw player 0
lda Kernel2Sprite__2__tmp+8 ; height
dcp Kernel2Sprite__2__tmp+10 ; ypos
2022-02-27 15:31:09 +00:00
bcs Kernel2Sprite__scanline__34__DoDraw1
lda #0
.byte $2C
2022-02-27 15:31:09 +00:00
Kernel2Sprite__scanline__34__DoDraw1:
lda (Kernel2Sprite__2__tmp+0),y
.if 0 = 0
sta WSYNC
.endif
sta GRP0
lda (Kernel2Sprite__2__tmp+4),y
sta COLUP0
; draw player 1
lda Kernel2Sprite__2__tmp+9 ; height
dcp Kernel2Sprite__2__tmp+11 ; ypos
2022-02-27 15:31:09 +00:00
bcs Kernel2Sprite__scanline__34__DoDraw2
lda #0
.byte $2C
2022-02-27 15:31:09 +00:00
Kernel2Sprite__scanline__34__DoDraw2:
lda (Kernel2Sprite__2__tmp+2),y
sta GRP1
lda (Kernel2Sprite__2__tmp+6),y
sta COLUP1
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__scanline__33
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__scanline__35
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__scanline__35
dey ; next scanline
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__scanline__36
; draw player 0
lda Kernel2Sprite__2__tmp+8 ; height
dcp Kernel2Sprite__2__tmp+10 ; ypos
2022-02-27 15:31:09 +00:00
bcs Kernel2Sprite__scanline__37__DoDraw1
lda #0
.byte $2C
2022-02-27 15:31:09 +00:00
Kernel2Sprite__scanline__37__DoDraw1:
lda (Kernel2Sprite__2__tmp+0),y
.if 1 = 0
sta WSYNC
.endif
sta GRP0
lda (Kernel2Sprite__2__tmp+4),y
sta COLUP0
; draw player 1
lda Kernel2Sprite__2__tmp+9 ; height
dcp Kernel2Sprite__2__tmp+11 ; ypos
2022-02-27 15:31:09 +00:00
bcs Kernel2Sprite__scanline__37__DoDraw2
lda #0
.byte $2C
2022-02-27 15:31:09 +00:00
Kernel2Sprite__scanline__37__DoDraw2:
lda (Kernel2Sprite__2__tmp+2),y
sta GRP1
lda (Kernel2Sprite__2__tmp+6),y
sta COLUP1
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__scanline__36
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__scanline__38
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__scanline__38
dey ; next scanline
2022-02-27 15:31:09 +00:00
bne Kernel2Sprite__kernel__32__LVScan ; repeat until out of lines
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__kernel__30
2022-02-27 15:31:09 +00:00
;;; start action Kernel2Sprite__kernel__39
lda #0
sta GRP0
sta GRP1
sta GRP0
sta GRP1
2022-02-27 15:31:09 +00:00
;;; end action Kernel2Sprite__kernel__39
KERNEL_END
2022-02-27 15:31:09 +00:00
;;; start action Joystick__postframe__41
; 2 control inputs share a single byte, 4 bits each
lda SWCHA
sta Joystick__3__tmp+0
2022-02-27 15:31:09 +00:00
;;; end action Joystick__postframe__41
2022-02-27 15:31:09 +00:00
;;; start action Joystick__postframe__43
ldx #0
2022-02-27 15:31:09 +00:00
Joystick__postframe__44____each:
asl Joystick__3__tmp+0
2022-02-27 15:31:09 +00:00
bcs Joystick__postframe__45__SkipMoveRight
2022-02-27 15:31:09 +00:00
;;; start action MoveJoyX__joyright__46
lda HasXpos_xpos_b0,x
clc
adc #1
cmp #152
2022-02-27 15:31:09 +00:00
bcs MoveJoyX__joyright__48__nomove
sta HasXpos_xpos_b0,x
2022-02-27 15:31:09 +00:00
MoveJoyX__joyright__48__nomove:
2022-02-27 15:31:09 +00:00
;;; end action MoveJoyX__joyright__46
2022-02-27 15:31:09 +00:00
Joystick__postframe__45__SkipMoveRight:
asl Joystick__3__tmp+0
2022-02-27 15:31:09 +00:00
bcs Joystick__postframe__45__SkipMoveLeft
2022-02-27 15:31:09 +00:00
;;; start action MoveJoyX__joyleft__49
lda HasXpos_xpos_b0,x
sec
sbc #1
2022-02-27 15:31:09 +00:00
bcc MoveJoyX__joyleft__51__nomove
sta HasXpos_xpos_b0,x
2022-02-27 15:31:09 +00:00
MoveJoyX__joyleft__51__nomove:
2022-02-27 15:31:09 +00:00
;;; end action MoveJoyX__joyleft__49
2022-02-27 15:31:09 +00:00
Joystick__postframe__45__SkipMoveLeft:
asl Joystick__3__tmp+0
2022-02-27 15:31:09 +00:00
bcs Joystick__postframe__45__SkipMoveDown
2022-02-27 15:31:09 +00:00
;;; start action MoveJoyY__joydown__52
lda HasYpos_ypos_b0,x
clc
adc #1
cmp #220
2022-02-27 15:31:09 +00:00
bcs MoveJoyY__joydown__54__nomove
sta HasYpos_ypos_b0,x
2022-02-27 15:31:09 +00:00
MoveJoyY__joydown__54__nomove:
2022-02-27 15:31:09 +00:00
;;; end action MoveJoyY__joydown__52
2022-02-27 15:31:09 +00:00
Joystick__postframe__45__SkipMoveDown:
asl Joystick__3__tmp+0
2022-02-27 15:31:09 +00:00
bcs Joystick__postframe__45__SkipMoveUp
2022-02-27 15:31:09 +00:00
;;; start action MoveJoyY__joyup__55
lda HasYpos_ypos_b0,x
sec
sbc #1
2022-02-27 15:31:09 +00:00
bcc MoveJoyY__joyup__57__nomove
sta HasYpos_ypos_b0,x
2022-02-27 15:31:09 +00:00
MoveJoyY__joyup__57__nomove:
2022-02-27 15:31:09 +00:00
;;; end action MoveJoyY__joyup__55
2022-02-27 15:31:09 +00:00
Joystick__postframe__45__SkipMoveUp:
inx
cpx #4
2022-02-27 15:31:09 +00:00
jne Joystick__postframe__44____each
Joystick__postframe__44____exit:
2022-02-27 15:31:09 +00:00
;;; end action Joystick__postframe__43
2022-02-27 15:31:09 +00:00
;;; start action SpriteShuffler__postframe__58
; load two sprite slots at left side of array
lda SpriteSlot_sprite_b0
sta SpriteShuffler__8__tmp+0
lda SpriteSlot_sprite_b0+1
sta SpriteShuffler__8__tmp+1
; move two slots to the left
ldx #0
2022-02-27 15:31:09 +00:00
SpriteShuffler__postframe__60__loop:
lda SpriteSlot_sprite_b0+2,x
sta SpriteSlot_sprite_b0,x
inx
cpx #4-2
2022-02-27 15:31:09 +00:00
bne SpriteShuffler__postframe__60__loop
; store two sprite slots at right side of array
lda SpriteShuffler__8__tmp+0
sta SpriteSlot_sprite_b0+4-2
lda SpriteShuffler__8__tmp+1
sta SpriteSlot_sprite_b0+4-1
2022-02-27 15:31:09 +00:00
;;; end action SpriteShuffler__postframe__58
2022-02-27 15:31:09 +00:00
;;; start action SpriteHider__postframe__61
lda #4-1
sta SpriteHider__9__tmp+0
2022-02-27 15:31:09 +00:00
;;; end action SpriteHider__postframe__61
2022-02-27 15:31:09 +00:00
;;; start action SpriteHider__postframe__64
ldy #0
2022-02-27 15:31:09 +00:00
SpriteHider__postframe__65____each:
ldx SpriteSlot_sprite_b0,y
lda HasYpos_ypos_b0,x
cmp #192
2022-02-27 15:31:09 +00:00
bcc SpriteHider__postframe__66__skip
; swap this sprite slot with slot at end of array
lda SpriteSlot_sprite_b0,y
pha
ldx SpriteHider__9__tmp+0 ; clobbers X, but no longer used
lda SpriteSlot_sprite_b0,x
sta SpriteSlot_sprite_b0,y
pla
sta SpriteSlot_sprite_b0,x
dec SpriteHider__9__tmp+0
2022-02-27 15:31:09 +00:00
SpriteHider__postframe__66__skip:
iny
cpy #2
2022-02-27 15:31:09 +00:00
jne SpriteHider__postframe__65____each
SpriteHider__postframe__65____exit:
2022-02-27 15:31:09 +00:00
;;; end action SpriteHider__postframe__64
FRAME_END
2022-02-27 15:31:09 +00:00
jmp FrameLoop__start__4__NextFrame ; loop to next frame
2022-02-27 15:31:09 +00:00
;;; end action FrameLoop__start__3
; start main routine
.segment "VECTORS"
Return: .word $6060
VecNMI:
VecReset: .word Main::__Reset
VecBRK: .word Main::__BRK
2022-02-23 14:43:19 +00:00
;;; end action Init__main_init__1
.endscope
Main__Start = Main::__Start