aboutsummaryrefslogtreecommitdiff
path: root/samples/move.orgaasm
blob: f47b6ffa7799c8064a513b9c958524f95e7baebc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
JMP ,main
include(std.orgaasm)

@main
	#0000 #4007 /draw/hline
	#0001 #4007 /draw/hline
	#007e #4007 /draw/hline
	#007f #4007 /draw/hline
	#0000 #4007 /draw/vline
	#0001 #4007 /draw/vline
	#007e #4007 /draw/vline
	#007f #4007 /draw/vline
@main/loop
	SLP
	/input/update
	/player/erase
	/player/update
	/player/draw
	/invert
	JMP ,main/loop

@input.kleft  0000
@input.kright 0000
@input.kup    0000
@input.kdown  0000
@input/update ( -- )
	-Input LDA
	DUP #0010 AND #0000 NEQ -input.kup    STA
	DUP #0020 AND #0000 NEQ -input.kdown  STA
	DUP #0040 AND #0000 NEQ -input.kleft  STA
	    #0080 AND #0000 NEQ -input.kright STA
	RET

@player.x 003b
@player.y 003b

@player/update ( -- )
@player/update/movex
	#0003 #0075
	-player.x LDA
	-input.kleft LDA SUB
	-input.kright LDA ADD
	/clamp -player.x STA
@player/update/movey
	#0002 #0074
	-player.y LDA
	-input.kup LDA SUB
	-input.kdown LDA ADD
	/clamp -player.y STA
@player/update/break
	RET

@player/erase ( -- )
	-player.x LDA
	-player.y LDA
	-blacksquare
	/draw/sprite
	RET

@player/draw ( -- )
	-player.x LDA
	-player.y LDA
	-player.spr
	/draw/sprite
	RET

@invert ( -- )
	-Screen
@invert/loop
	DUP LDA #0001 LSF OVR STA
	INC DUP JNZ ,invert/loop
	POP RET

@draw/pixel ( x y col -- )
	ROT #007f AND
	ROT #007f AND
	#0007 LSF ADD -Screen ADD
	STA
	RET

@draw.col 0000
@draw/hline ( y col -- )
	-draw.col STA       ( y )
	#0080               ( y x )
@draw/hline/loop
	DEC
	OVR OVR SWP         ( y x x y )
	-draw.col LDA       ( y x x y col )
	/draw/pixel         ( y x )
	DUP JNZ ,draw/hline/loop
	POP POP RET

@draw/vline ( x col -- )
	-draw.col STA       ( x )
	#0080               ( x y )
@draw/vline/loop
	DEC
	OVR OVR             ( x y x y )
	-draw.col LDA       ( x y x y col )
	/draw/pixel         ( x y )
	DUP JNZ ,draw/vline/loop
	POP POP RET

@draw/sprite.oscr 0000
@draw/sprite ( x y addr -- )
	ROT ROT #0007 LSF ADD -Screen ADD ( spr scr )
	#0008                             ( spr scr n )
@draw/sprite/loop
	DEC
	OVR OVR #0007 LSF ADD             ( spr scr n oscr )
	#0080 ADD                         ( spr scr n oscr )
	-draw/sprite.oscr STA             ( spr scr n )
	ROT SWP OVR OVR #0003 LSF ADD     ( scr spr n ospr )
	-draw/sprite.oscr LDA             ( scr spr n ospr oscr )
	#0008 /memcpy                     ( scr spr n )
	SWP ROT ROT                       ( spr scr n )
	DUP JNZ ,draw/sprite/loop
	POP POP POP RET

@blacksquare
	0000 0000 000f 000f 000f 000f 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	000f 0000 000f 000f 000f 000f 0000 000f
	000f 0000 000f 000f 000f 000f 0000 000f
	000f 0000 000f 000f 000f 000f 0000 000f
	000f 0000 000f 000f 000f 000f 0000 000f
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 000f 000f 000f 000f 0000 0000

@player.spr
	0000 ffff ffff ffff ffff ffff ffff 0000
	ffff 0000 ffff ffff ffff ffff 0000 ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff 0000 ffff
	ffff ffff 0000 0000 0000 0000 ffff ffff
	0000 ffff ffff ffff ffff ffff ffff 0000