mirror of
https://github.com/bradgrantham/apple2a.git
synced 2025-02-17 04:30:32 +00:00
Fix array allocation and access.
This commit is contained in:
parent
fae94825ce
commit
96cf8f7c61
2
Makefile
2
Makefile
@ -7,7 +7,7 @@ endif
|
|||||||
CC65 ?= $(TREES)/cc65/bin
|
CC65 ?= $(TREES)/cc65/bin
|
||||||
APPLE2E ?= $(TREES)/apple2e/apple2e
|
APPLE2E ?= $(TREES)/apple2e/apple2e
|
||||||
|
|
||||||
CPU = 65C02
|
CPU = 6502
|
||||||
ROM = apple2a.rom
|
ROM = apple2a.rom
|
||||||
LIB = apple2rom.lib
|
LIB = apple2rom.lib
|
||||||
|
|
||||||
|
@ -1,46 +1,46 @@
|
|||||||
10 GR
|
10 GR
|
||||||
20 TS = 40
|
20 TS = 40
|
||||||
30 DIM DX(9),DY(9),C(9),X(9),Y(9),T(9)
|
30 DIM DX(9),DY(9),C(9),X(9),Y(9),T(9)
|
||||||
1000 DX(0) = 12
|
1000 DX(0) = -1
|
||||||
1005 DY(0) = 15
|
1005 DY(0) = -19
|
||||||
1010 C(0) = 6
|
1010 C(0) = 1
|
||||||
1015 T(0) = 10
|
1015 T(0) = 26
|
||||||
1100 DX(1) = 19
|
1100 DX(1) = -14
|
||||||
1105 DY(1) = 0
|
1105 DY(1) = -13
|
||||||
1110 C(1) = 5
|
1110 C(1) = 5
|
||||||
1115 T(1) = 9
|
1115 T(1) = 23
|
||||||
1200 DX(2) = -19
|
1200 DX(2) = 12
|
||||||
1205 DY(2) = -1
|
1205 DY(2) = -15
|
||||||
1210 C(2) = 9
|
1210 C(2) = 7
|
||||||
1215 T(2) = 9
|
1215 T(2) = 3
|
||||||
1300 DX(3) = -19
|
1300 DX(3) = 19
|
||||||
1305 DY(3) = 3
|
1305 DY(3) = 2
|
||||||
1310 C(3) = 1
|
1310 C(3) = 9
|
||||||
1315 T(3) = 32
|
1315 T(3) = 10
|
||||||
1400 DX(4) = -1
|
1400 DX(4) = 17
|
||||||
1405 DY(4) = 19
|
1405 DY(4) = -10
|
||||||
1410 C(4) = 7
|
1410 C(4) = 12
|
||||||
1415 T(4) = 27
|
1415 T(4) = 4
|
||||||
1500 DX(5) = -12
|
1500 DX(5) = 17
|
||||||
1505 DY(5) = -15
|
1505 DY(5) = -9
|
||||||
1510 C(5) = 12
|
1510 C(5) = 9
|
||||||
1515 T(5) = 3
|
1515 T(5) = 5
|
||||||
1600 DX(6) = -19
|
1600 DX(6) = 15
|
||||||
1605 DY(6) = -2
|
1605 DY(6) = 12
|
||||||
1610 C(6) = 7
|
1610 C(6) = 4
|
||||||
1615 T(6) = 18
|
1615 T(6) = 22
|
||||||
1700 DX(7) = 17
|
1700 DX(7) = -18
|
||||||
1705 DY(7) = 9
|
1705 DY(7) = -8
|
||||||
1710 C(7) = 13
|
1710 C(7) = 5
|
||||||
1715 T(7) = 7
|
1715 T(7) = 23
|
||||||
1800 DX(8) = -19
|
1800 DX(8) = -2
|
||||||
1805 DY(8) = 1
|
1805 DY(8) = -19
|
||||||
1810 C(8) = 10
|
1810 C(8) = 1
|
||||||
1815 T(8) = 5
|
1815 T(8) = 29
|
||||||
1900 DX(9) = 18
|
1900 DX(9) = -7
|
||||||
1905 DY(9) = 8
|
1905 DY(9) = 18
|
||||||
1910 C(9) = 1
|
1910 C(9) = 10
|
||||||
1915 T(9) = 9
|
1915 T(9) = 28
|
||||||
2200 I = 0
|
2200 I = 0
|
||||||
2210 OX = X(I) : OY = Y(I)
|
2210 OX = X(I) : OY = Y(I)
|
||||||
2220 X(I) = 20 + DX(I) * T(I) / 40
|
2220 X(I) = 20 + DX(I) * T(I) / 40
|
||||||
|
@ -6,13 +6,14 @@ str = """%(init)d00 DX(%(which)d) = %(x)d
|
|||||||
%(init)d10 C(%(which)d) = %(c)d
|
%(init)d10 C(%(which)d) = %(c)d
|
||||||
%(init)d15 T(%(which)d) = %(t)d"""
|
%(init)d15 T(%(which)d) = %(t)d"""
|
||||||
|
|
||||||
|
num_stars = 10
|
||||||
ts = 40
|
ts = 40
|
||||||
|
|
||||||
print "10 GR"
|
print "10 GR"
|
||||||
print "20 TS = %d" % ts
|
print "20 TS = %d" % ts
|
||||||
print "30 DIM DX(9),DY(9),C(9),X(9),Y(9),T(9)"
|
print "30 DIM DX(%(n)d),DY(%(n)d),C(%(n)d),X(%(n)d),Y(%(n)d),T(%(n)d)" % {'n' : num_stars - 1 }
|
||||||
|
|
||||||
for i in range(0,10) :
|
for i in range(0,num_stars) :
|
||||||
angle = random.uniform(0,.999)
|
angle = random.uniform(0,.999)
|
||||||
x = int(20 * math.cos(angle * 3.14159 * 2))
|
x = int(20 * math.cos(angle * 3.14159 * 2))
|
||||||
y = int(20 * math.sin(angle * 3.14159 * 2))
|
y = int(20 * math.sin(angle * 3.14159 * 2))
|
||||||
@ -27,5 +28,5 @@ print "2230 Y(I) = 20 + DY(I) * T(I) / %d" % ts
|
|||||||
print "2235 T(I) = T(I) + 1 : IF T(I) = TS THEN T(I) = 0"
|
print "2235 T(I) = T(I) + 1 : IF T(I) = TS THEN T(I) = 0"
|
||||||
print "2240 COLOR=0 : PLOT OX, OY"
|
print "2240 COLOR=0 : PLOT OX, OY"
|
||||||
print "2250 COLOR=C(I) : PLOT X(I), Y(I)"
|
print "2250 COLOR=C(I) : PLOT X(I), Y(I)"
|
||||||
print "2260 I = I + 1 : IF I < 10 GOTO 2210"
|
print "2260 I = I + 1 : IF I < %d GOTO 2210" % num_stars
|
||||||
print "2300 GOTO 2200"
|
print "2300 GOTO 2200"
|
||||||
|
2
main.c
2
main.c
@ -617,6 +617,8 @@ static void push_operator_stack(uint8_t op) {
|
|||||||
// All our operators are left-associative, so no special check for the case
|
// All our operators are left-associative, so no special check for the case
|
||||||
// of equal precedence.
|
// of equal precedence.
|
||||||
while (g_op_stack_size > 0 &&
|
while (g_op_stack_size > 0 &&
|
||||||
|
op != OP_OPEN_PARENS &&
|
||||||
|
op != OP_ARRAY_DEREF &&
|
||||||
(top_op = g_op_stack[g_op_stack_size - 1]) != OP_OPEN_PARENS &&
|
(top_op = g_op_stack[g_op_stack_size - 1]) != OP_OPEN_PARENS &&
|
||||||
top_op != OP_ARRAY_DEREF &&
|
top_op != OP_ARRAY_DEREF &&
|
||||||
OP_PRECEDENCE(top_op) >= OP_PRECEDENCE(op)) {
|
OP_PRECEDENCE(top_op) >= OP_PRECEDENCE(op)) {
|
||||||
|
@ -501,6 +501,9 @@ uint16_t next_statement(uint16_t line_number, uint16_t var_address) {
|
|||||||
* the variable that will store the array location.
|
* the variable that will store the array location.
|
||||||
*/
|
*/
|
||||||
void allocate_array(uint16_t size, uint16_t var_addr) {
|
void allocate_array(uint16_t size, uint16_t var_addr) {
|
||||||
|
// Actual size is one more. DIM X(10) allocates 11-entry array.
|
||||||
|
size += 1;
|
||||||
|
|
||||||
// Check for overflow.
|
// Check for overflow.
|
||||||
if (g_arrays_size + size > MAX_ARRAY_WORDS) {
|
if (g_arrays_size + size > MAX_ARRAY_WORDS) {
|
||||||
print("Too many arrays.\n");
|
print("Too many arrays.\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user