-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathalmostSmart.asm
More file actions
58 lines (45 loc) · 1.4 KB
/
almostSmart.asm
File metadata and controls
58 lines (45 loc) · 1.4 KB
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
; This bot is already pretty smart, it will pick up items and avoid everything else.
; The code here is indented to show stack height: Each element (float or byte)
; on the stack *before* an instruction is represented by one column of indendation.
; Overclock the CPU to 20 cycles per second (helps with beam sensor)
push8 #20
push8 #IO_OVERCLOCK
io
start:
; Read beam sensor
push8 #IO_SENSOR
io
pop8 type ; Save type of object hit by sensor
popf distance ; Save distance from sensed object
; Are we looking at an item?
push8 type
push8 b00001100 ; This is a label (see below)! Binary number 00001100 = gold or battery flag.
and ; The top of the stack is now nonzero if an item was seen.
jnz dontEvade ; If we saw an item, do not evade.
jmp updateMove ; Otherwise, evade things
; Set beam distance to 256.0, which means we'll drive straight ahead.
dontEvade:
pushf 256.0
popf distance
;jmp updateMove ; (This jump is unnecessary)
updateMove:
; Turn when we get closer to things.
; Sets the steering to (256.0 - distance) / 256.0
pushf 256.0
pushf 256.0
pushf distance
subf
divf
push8 #IO_STEER
io
; Slow down the closer we get to things.
; Sets the motor to distance / 256.0
pushf 256.0
pushf distance
divf
push8 #IO_MOTOR
io
jmp start
distance: dbf 0.0
type: db8 #0
b00001100: db8 #12 ; The binary number 00001100 has the decimal value 12