-
Notifications
You must be signed in to change notification settings - Fork 0
/
findprimes.bs2
115 lines (99 loc) · 2.64 KB
/
findprimes.bs2
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
' ============================================================================
'
' {$STAMP BS2}
' {$PBASIC 2.5}
' ============================================================================
' -----[ Pins/Constants/Variables ]-------------------------------------------
SDA PIN 14 'P0 transceives to/from SDA
SCL PIN 15 'P1 sends clock pulses
START PIN 13 'Button to select true/magnetic north mode
DRDY PIN 12 'Indicates data is ready
' ---------- DL1414 constants and variables ---------------------
D0 PIN 0
D1 PIN 1
D2 PIN 2
D3 PIN 3
D4 PIN 4
D5 PIN 5
D6 PIN 6
nWE74 PIN 9
nWE30 PIN 8
A0 PIN 10
A1 PIN 11
char VAR Byte
led VAR Byte
i VAR Byte
Arg0 VAR Word
Arg1 VAR Word
N VAR Word
M VAR Word
Digits DATA "0123456789ABCDEF"
'LedBufferLen CON 8
'LedBuffer VAR Byte(LedBufferLen)
' -----[ Main Routine ]-------------------------------------------------------
DIRS = %0000111101111111
GOSUB ClearDisplay
GOSUB TestAll
WaitForStart:
'DEBUG CLS
DEBUG CR, "From:" : DEBUGIN DEC5 Arg0
DEBUG CR, " To:" : DEBUGIN DEC5 Arg1
'IF (START = 1) THEN GOTO WaitForStart
i = 0
n = Arg0
LoopN:
IF (n > Arg1) THEN GOTO WaitForStart
IF (n < 2) THEN GOTO NextN
IF (n < 4) THEN GOTO FoundPrime '2, 3
m = 1
NextM:
m = m + 1
'DEBUG CR, "Trying n = ", DEC n, " m = ", DEC m
IF (n // m = 0) THEN GOTO NextN
IF (m * m >= n) THEN GOTO FoundPrime
GOTO NextM
FoundPrime:
GOSUB PrintN
NextN:
n = n + 1
GOTO LoopN
PrintN:
i = i + 1
DEBUG CR, "(", DEC i, ") PRIME = ", DEC N
RETURN
' ----- Display on 2 DL1414 LEDs ------------------------------------------
DisplayCharOnLed:
char = char & %01111111 ' only 7 pins for character data
IF (char >= "a") AND (char <="z") THEN ' convert lowercase to uppercase
char = char - 32
ENDIF
OUTL = char ' put code to data lines
LOOKUP (led & %00000011), [%11110011, %11110111, %11111011, %11111111], OUTH ' put out address for digits
IF ((led & 7) > 3) THEN
'DEBUG "displayed '", STR char,"' on lower DL1414 position ",DEC pos,CR
LOW nWE74
HIGH nWE74
ELSE
'DEBUG "displayed '", STR char,"' on upper DL1414 position ",DEC pos,CR
LOW nWE30
HIGH nWE30
ENDIF
'led = led - 1
RETURN
TestAll:
FOR char = %00100000 TO %01011111
FOR led = 0 TO 7
GOSUB DisplayCharOnLed
NEXT
'PAUSE 100
NEXT
GOSUB ClearDisplay
RETURN
ClearDisplay:
char = " "
led = 7
FOR i = 0 TO 7
'LedBuffer(led) = char
GOSUB DisplayCharOnLed
NEXT
RETURN