Merge pull request #112 from jgeisler0303/simulator

Grbl Simulator. Oh yeah.
This commit is contained in:
Sonny Jeon 2013-01-17 12:01:37 -08:00
commit dd06268c3d
22 changed files with 1281 additions and 0 deletions

323
sim/HelloWorld.nc Normal file
View File

@ -0,0 +1,323 @@
( Made using CamBam - http://www.cambam.co.uk )
( Untitled 2/13/2012 2:54:50 PM )
( T0 : 0.0394 )
G20 G90 G64 G40
G0 Z0.125
( T0 : 0.0394 )
T0 M6
( Engrave1 )
G17
M3 S1000
G0 X-3.0 Y-0.0451
G1 F10.0 Z-0.001
G1 F60.0 X-2.8845 Y-0.035
G3 X-2.8723 Y-0.0943 I0.3244 J0.0363
G3 X-2.8467 Y-0.1492 I0.2072 J0.0631
G3 X-2.805 Y-0.1917 I0.1471 J0.1027
G3 X-2.7533 Y-0.2212 I0.1578 J0.2169
G3 X-2.6114 Y-0.2483 I0.1366 J0.3297
G3 X-2.4877 Y-0.2275 I0.006 J0.3418
G3 X-2.4438 Y-0.2048 I-0.0766 J0.2022
G3 X-2.4082 Y-0.1707 I-0.0792 J0.1182
G3 X-2.3817 Y-0.0912 I-0.1063 J0.0796
G3 X-2.4069 Y-0.0155 I-0.1191 J0.0024
G3 X-2.4449 Y0.0175 I-0.1101 J-0.0883
G3 X-2.4902 Y0.0394 I-0.1379 J-0.2279
G3 X-2.572 Y0.0637 I-0.3019 J-0.8663
G3 X-2.6549 Y0.0842 I-1.0468 J-4.0562
G2 X-2.7457 Y0.1086 I0.3878 J1.6213
G2 X-2.8334 Y0.1422 I0.1472 J0.5158
G2 X-2.8886 Y0.1787 I0.1401 J0.2718
G2 X-2.9325 Y0.2281 I0.1404 J0.1692
G2 X-2.9647 Y0.3435 I0.1821 J0.1129
G2 X-2.9249 Y0.4741 I0.2336 J0.0003
G2 X-2.8088 Y0.5669 I0.2044 J-0.1368
G2 X-2.6391 Y0.5984 I0.1639 J-0.4097
G2 X-2.5469 Y0.5908 I0.0024 J-0.5372
G2 X-2.458 Y0.565 I-0.0669 J-0.395
G2 X-2.3369 Y0.4678 I-0.0947 J-0.2421
G2 X-2.2915 Y0.3221 I-0.2346 J-0.1531
G1 X-2.4088 Y0.3132
G3 X-2.4277 Y0.386 I-0.236 J-0.0223
G3 X-2.4732 Y0.4457 I-0.1488 J-0.0662
G3 X-2.5498 Y0.4817 I-0.1158 J-0.1469
G3 X-2.6341 Y0.4905 I-0.08 J-0.3586
G3 X-2.7184 Y0.4829 I-0.0045 J-0.4232
G3 X-2.7962 Y0.4495 I0.0315 J-0.1804
G3 X-2.8331 Y0.4066 I0.0864 J-0.1118
G3 X-2.8467 Y0.3517 I0.1005 J-0.0539
G3 X-2.8107 Y0.2697 I0.1052 J-0.0028
G3 X-2.7679 Y0.2452 I0.1001 J0.125
G3 X-2.698 Y0.2215 I0.2359 J0.583
G3 X-2.6265 Y0.2034 I0.3957 J1.414
G2 X-2.5228 Y0.1782 I-0.5539 J-2.5053
G2 X-2.4215 Y0.1448 I-0.1803 J-0.7161
G2 X-2.3553 Y0.1057 I-0.1442 J-0.3193
G2 X-2.3022 Y0.0501 I-0.1407 J-0.1878
G2 X-2.2637 Y-0.0811 I-0.19 J-0.127
G2 X-2.306 Y-0.2205 I-0.2532 J0.0006
G2 X-2.4278 Y-0.3221 I-0.2339 J0.1566
G2 X-2.6057 Y-0.3581 I-0.1712 J0.3891
G2 X-2.7129 Y-0.3503 I-0.0037 J0.6909
G2 X-2.8164 Y-0.3215 I0.0637 J0.4292
G2 X-2.9495 Y-0.2117 I0.1147 J0.2747
G2 X-3.0 Y-0.0451 I0.265 J0.1712
G0 Z0.125
G0 X-2.111
G1 F10.0 Z-0.001
G1 F60.0 Y0.5826
G1 X-1.9975
G1 Y0.2508
G2 X-1.9077 Y0.3198 I0.2024 J-0.1703
G2 X-1.7969 Y0.3429 I0.1077 J-0.2394
G2 X-1.6675 Y0.3132 I0.0063 J-0.2692
G2 X-1.5893 Y0.2325 I-0.0755 J-0.1515
G2 X-1.5698 Y0.1586 I-0.2396 J-0.1028
G2 X-1.5653 Y0.0823 I-0.5851 J-0.0725
G1 Y-0.3423
G1 X-1.6789
G1 Y0.0823
G3 X-1.6859 Y0.1476 I-0.2729 J0.0036
G3 X-1.7161 Y0.206 I-0.1238 J-0.027
G3 X-1.764 Y0.2366 I-0.0845 J-0.0794
G3 X-1.8202 Y0.2451 I-0.0537 J-0.1649
G3 X-1.9155 Y0.2186 I-0.0001 J-0.1841
G3 X-1.9786 Y0.1479 I0.072 J-0.1278
G3 X-1.9938 Y0.087 I0.221 J-0.0878
G3 X-1.9975 Y0.0243 I0.4875 J-0.0599
G1 Y-0.3423
G1 X-2.111
G1 Y-0.0451
G0 Z0.125
G0 X-1.4292 Y-0.1385
G1 F10.0 Z-0.001
G2 F60.0 X-1.4088 Y-0.076 I0.182 J-0.0249
G2 X-1.3502 Y-0.0104 I0.1662 J-0.0896
G2 X-1.2681 Y0.0268 I0.1554 J-0.2334
G2 X-1.1672 Y0.0438 I0.1926 J-0.8334
G3 X-1.065 Y0.0586 I-0.2128 J1.8303
G3 X-0.9647 Y0.0829 I-0.1109 J0.6767
G3 X-0.9641 Y0.1126 I-1.9501 J0.0563
G3 X-0.97 Y0.1648 I-0.2046 J0.003
G3 X-0.9962 Y0.2104 I-0.0883 J-0.0204
G3 X-1.0574 Y0.2412 I-0.0943 J-0.111
G3 X-1.1256 Y0.2489 I-0.0647 J-0.2692
G3 X-1.187 Y0.2436 I-0.0032 J-0.3217
G3 X-1.2442 Y0.2205 I0.0237 J-0.141
G3 X-1.2805 Y0.1756 I0.0774 J-0.0998
G3 X-1.3003 Y0.1214 I0.2336 J-0.1162
G1 X-1.4114 Y0.1366
G2 X-1.3931 Y0.1969 I0.337 J-0.0694
G2 X-1.3615 Y0.2514 I0.2096 J-0.0848
G2 X-1.3162 Y0.2923 I0.1453 J-0.1155
G2 X-1.2612 Y0.3189 I0.1409 J-0.221
G2 X-1.1092 Y0.3429 I0.1442 J-0.4206
G2 X-1.0386 Y0.3388 I0.0029 J-0.5642
G2 X-0.9697 Y0.3227 I-0.0351 J-0.3052
G2 X-0.927 Y0.3022 I-0.0865 J-0.2354
G2 X-0.8909 Y0.2716 I-0.0727 J-0.1224
G2 X-0.8555 Y0.1946 I-0.1386 J-0.1102
G2 X-0.8507 Y0.1424 I-0.3836 J-0.0615
G2 X-0.8499 Y0.0899 I-1.3758 J-0.0494
G1 Y-0.0615
G3 X-0.8489 Y-0.1619 I4.6791 J-0.0068
G3 X-0.8429 Y-0.2622 I0.9512 J0.0067
G3 X-0.8139 Y-0.3423 I0.2546 J0.0469
G1 X-0.9325
G2 X-0.9552 Y-0.2596 I0.2182 J0.1044
G2 X-1.077 Y-0.3354 I-0.2823 J0.3183
G2 X-1.2019 Y-0.3574 I-0.1221 J0.3266
G2 X-1.2917 Y-0.3463 I-0.0042 J0.3355
G2 X-1.3716 Y-0.3038 I0.0496 J0.1895
G2 X-1.4309 Y-0.1656 I0.1197 J0.1332
G2 X-1.4292 Y-0.1385 I0.1837 J0.0022
G0 Z0.125
G0 X-1.3093 Y-0.1513
G1 F10.0 Z-0.001
G3 F60.0 X-1.3098 Y-0.1625 I0.0949 J-0.0101
G3 X-1.2757 Y-0.2382 I0.0971 J-0.0018
G3 X-1.228 Y-0.2624 I0.075 J0.0889
G3 X-1.1748 Y-0.2685 I0.0506 J0.2058
G3 X-1.0581 Y-0.2401 I0.0042 J0.2367
G3 X-0.983 Y-0.1612 I-0.0857 J0.1567
G3 X-0.9681 Y-0.1054 I-0.1756 J0.0768
G3 X-0.9647 Y-0.0477 I-0.4434 J0.0549
G1 Y-0.006
G2 X-1.0563 Y-0.0325 I-0.2032 J0.5301
G2 X-1.1502 Y-0.0489 I-0.2867 J1.3668
G3 X-1.2003 Y-0.0575 I0.1165 J-0.8276
G3 X-1.2492 Y-0.0716 I0.0505 J-0.2671
G3 X-1.294 Y-0.1089 I0.0375 J-0.0907
G3 X-1.3093 Y-0.1513 I0.0797 J-0.0526
G0 Z0.125
G0 X-0.6738
G1 F10.0 Z-0.001
G1 F60.0 Y0.3277
G1 X-0.5704
G1 Y0.2407
G2 X-0.4877 Y0.317 I0.2085 J-0.1428
G2 X-0.376 Y0.3429 I0.1052 J-0.2003
G2 X-0.2246 Y0.2987 I0.0049 J-0.265
G2 X-0.1256 Y0.1738 I-0.1536 J-0.2235
G2 X-0.0921 Y-0.0022 I-0.4197 J-0.1709
G2 X-0.1294 Y-0.1877 I-0.4477 J-0.0066
G2 X-0.2366 Y-0.3139 I-0.2559 J0.1088
G2 X-0.3842 Y-0.3574 I-0.1486 J0.2319
G2 X-0.4865 Y-0.3335 I-0.0033 J0.2159
G2 X-0.5603 Y-0.2729 I0.1079 J0.2068
G1 Y-0.5991
G1 X-0.6738
G1 Y-0.1513
G0 Z0.125
G0 X-0.5586 Y-0.1219
G1 F10.0 Z-0.001
G3 F60.0 X-0.5186 Y-0.2022 I0.2066 J0.0526
G3 X-0.4624 Y-0.2478 I0.1393 J0.1145
G3 X-0.3918 Y-0.2641 I0.0691 J0.1387
G3 X-0.3198 Y-0.2472 I0.0014 J0.1565
G3 X-0.2625 Y-0.2003 I-0.0865 J0.1642
G3 X-0.2186 Y-0.1056 I-0.1741 J0.1382
G3 X-0.2082 Y-0.0016 I-0.463 J0.0985
G3 X-0.2185 Y0.0988 I-0.445 J0.0051
G3 X-0.2612 Y0.1902 I-0.2152 J-0.0448
G3 X-0.3165 Y0.2368 I-0.1435 J-0.1141
G3 X-0.3868 Y0.2539 I-0.0691 J-0.1308
G3 X-0.459 Y0.2348 I-0.0004 J-0.1446
G3 X-0.5155 Y0.1858 I0.1042 J-0.1769
G3 X-0.5599 Y0.0921 I0.1824 J-0.1439
G3 X-0.571 Y-0.0111 I0.4286 J-0.0981
G3 X-0.561 Y-0.1111 I0.4541 J-0.0052
G3 X-0.5586 Y-0.1219 I0.209 J0.0418
G0 Z0.125
G0 X0.0092 Y-0.0653
G1 F10.0 Z-0.001
G2 F60.0 X0.0069 Y-0.013 I0.4635 J0.0463
G2 X0.0253 Y0.1266 I0.49 J0.0063
G2 X0.094 Y0.2495 I0.2937 J-0.0834
G2 X0.1968 Y0.3207 I0.209 J-0.1921
G2 X0.3199 Y0.3429 I0.1188 J-0.3064
G2 X0.4396 Y0.321 I0.004 J-0.3162
G2 X0.5394 Y0.2514 I-0.1055 J-0.2578
G2 X0.6066 Y0.1308 I-0.2207 J-0.202
G2 X0.6246 Y-0.006 I-0.4641 J-0.1307
G2 X0.624 Y-0.0363 I-1.1335 J0.0085
G1 X0.1243
G3 X0.1404 Y-0.1264 I0.3467 J0.0157
G3 X0.1867 Y-0.2054 I0.1984 J0.0632
G3 X0.3268 Y-0.2641 I0.1356 J0.1272
G3 X0.4334 Y-0.2312 I0.0048 J0.1741
G3 X0.4761 Y-0.184 I-0.1056 J0.1381
G3 X0.5034 Y-0.1265 I-0.2498 J0.1544
G1 X0.6208 Y-0.141
G2 X0.583 Y-0.2296 I-0.3145 J0.082
G2 X0.518 Y-0.3007 I-0.2247 J0.1403
G2 X0.4267 Y-0.3449 I-0.1599 J0.2137
G2 X0.3262 Y-0.3574 I-0.0969 J0.3673
G2 X0.1999 Y-0.337 I-0.005 J0.3687
G2 X0.0927 Y-0.2672 I0.094 J0.2616
G2 X0.0252 Y-0.1484 I0.2166 J0.2017
G2 X0.0092 Y-0.0653 I0.4475 J0.1294
G0 Z0.125
G0 X0.1306 Y0.0571
G1 F10.0 Z-0.001
G1 F60.0 X0.5047
G3 X0.4926 Y0.1236 I-0.3356 J-0.0268
G3 X0.4618 Y0.1839 I-0.1636 J-0.0456
G3 X0.3211 Y0.2495 I-0.1362 J-0.1084
G3 X0.1893 Y0.1971 I-0.0043 J-0.1815
G3 X0.1467 Y0.1326 I0.1313 J-0.1328
G3 X0.1306 Y0.0571 I0.2303 J-0.0887
G0 Z0.125
G0 X0.7412 Y0.0837
G1 F10.0 Z-0.001
G2 F60.0 X0.7407 Y0.1082 I0.5215 J0.0227
G2 X0.7673 Y0.3004 I0.6459 J0.0084
G2 X0.8643 Y0.4684 I0.405 J-0.1218
G2 X1.0099 Y0.568 I0.2954 J-0.2758
G2 X1.1836 Y0.599 I0.1677 J-0.4369
G2 X1.4145 Y0.5378 I0.0061 J-0.4431
G2 X1.5709 Y0.3669 I-0.2021 J-0.3421
G2 X1.6126 Y0.246 I-0.4508 J-0.2228
G2 X1.6252 Y0.1189 I-0.6041 J-0.1243
G2 X1.6119 Y-0.0104 I-0.6073 J-0.0028
G2 X1.5684 Y-0.1328 I-0.4911 J0.1054
G2 X1.4075 Y-0.3013 I-0.3494 J0.1726
G2 X1.1829 Y-0.3581 I-0.2218 J0.4049
G2 X1.0618 Y-0.343 I-0.0025 J0.4735
G2 X0.9495 Y-0.295 I0.1059 J0.4032
G2 X0.7937 Y-0.1227 I0.2106 J0.3471
G2 X0.7412 Y0.0837 I0.469 J0.2292
G0 Z0.125
G0 X0.867 Y0.0872
G1 F10.0 Z-0.001
G3 F60.0 X0.8863 Y-0.0342 I0.4738 J0.0131
G3 X0.9564 Y-0.1574 I0.3033 J0.091
G3 X1.1823 Y-0.2533 I0.2187 J0.2012
G3 X1.3066 Y-0.2297 I0.004 J0.318
G3 X1.4094 Y-0.1562 I-0.1146 J0.269
G3 X1.4803 Y-0.0268 I-0.2365 J0.2136
G3 X1.499 Y0.1195 I-0.5092 J0.1396
G3 X1.4904 Y0.22 I-0.5565 J0.0028
G3 X1.4605 Y0.3164 I-0.4006 J-0.0713
G3 X1.3489 Y0.447 I-0.2653 J-0.1138
G3 X1.1842 Y0.4937 I-0.1607 J-0.2531
G3 X0.9602 Y0.4041 I-0.0045 J-0.3134
G3 X0.9124 Y0.3396 I0.1696 J-0.1757
G3 X0.8761 Y0.2256 I0.3481 J-0.1739
G3 X0.8669 Y0.1063 I0.7033 J-0.1142
G3 X0.867 Y0.0872 I0.474 J-0.0059
G0 Z0.125
G0 X1.7691
G1 F10.0 Z-0.001
G1 F60.0 Y0.5826
G1 X1.8826
G1 Y0.0552
G1 X2.1514 Y0.3277
G1 X2.2984
G1 X2.0422 Y0.0792
G1 X2.3243 Y-0.3423
G1 X2.1842
G1 X1.9627 Y0.0003
G1 X1.8826 Y-0.0767
G1 Y-0.3423
G1 X1.7691
G1 Y0.0872
G0 Z0.125
G0 X2.3737 Y0.0387
G1 F10.0 Z-0.001
G2 F60.0 X2.3936 Y0.142 I0.4767 J-0.0383
G2 X2.4757 Y0.2684 I0.2668 J-0.0833
G2 X2.5741 Y0.3252 I0.1952 J-0.225
G2 X2.6864 Y0.3429 I0.109 J-0.3265
G2 X2.8089 Y0.3214 I0.0042 J-0.3359
G2 X2.9123 Y0.252 I-0.1045 J-0.2674
G2 X2.9809 Y0.1358 I-0.2103 J-0.2027
G2 X3.0 Y0.0022 I-0.4192 J-0.1278
G2 X2.9922 Y-0.102 I-0.6432 J-0.0046
G2 X2.9608 Y-0.2016 I-0.3284 J0.0487
G2 X2.8479 Y-0.3164 I-0.2422 J0.1253
G2 X2.6864 Y-0.3574 I-0.1586 J0.2861
G2 X2.563 Y-0.3364 I-0.0045 J0.3461
G2 X2.4586 Y-0.2672 I0.1004 J0.2648
G2 X2.3902 Y-0.1456 I0.2134 J0.2001
G2 X2.3722 Y-0.0073 I0.4726 J0.1318
G2 X2.3737 Y0.0387 I0.4782 J0.0077
G0 Z0.125
G0 X2.4901 Y0.0298
G1 F10.0 Z-0.001
G3 F60.0 X2.4889 Y-0.0073 I0.4225 J-0.032
G3 X2.5 Y-0.1088 I0.4249 J-0.0051
G3 X2.5451 Y-0.2003 I0.2117 J0.0474
G3 X2.6864 Y-0.2641 I0.1376 J0.1166
G3 X2.8271 Y-0.1997 I0.0032 J0.1789
G3 X2.8724 Y-0.1065 I-0.1677 J0.1391
G3 X2.8832 Y-0.0035 I-0.432 J0.0977
G3 X2.8719 Y0.0957 I-0.3951 J0.0049
G3 X2.8265 Y0.1845 I-0.2065 J-0.0494
G3 X2.6864 Y0.2489 I-0.1372 J-0.1139
G3 X2.5451 Y0.1852 I-0.0037 J-0.1803
G3 X2.4999 Y0.0939 I0.164 J-0.1379
G3 X2.4901 Y0.0298 I0.4127 J-0.0961
G0 Z0.125
M5
M30

47
sim/Makefile Normal file
View File

@ -0,0 +1,47 @@
# Part of Grbl Simulator
#
# Copyright (c) 2012 Jens Geisler
#
# Grbl is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Grbl is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Grbl. If not, see <http://www.gnu.org/licenses/>.
OBJECTS = main.o simulator.o runtime.o ../protocol.o ../planner.o ../settings.o ../print.o ../nuts_bolts.o eeprom.o serial.o avr\pgmspace.o avr\interrupt.o util\delay.o util\floatunsisf.o ../stepper.o ../gcode.o ../spindle_control.o ../motion_control.o ../limits.o ../report.o ../coolant_control.o
CLOCK = 16000000
EXE_NAME= grbl_sim.exe
COMPILER= C:\MinGW\bin\gcc.exe
COMPILE = $(COMPILER) -Wall -Os -DF_CPU=$(CLOCK) -include config.h -I.
# symbolic targets:
all: main
new: clean main
clean:
rm -f $(EXE_NAME) $(OBJECTS)
# file targets:
main: $(OBJECTS)
$(COMPILE) -o $(EXE_NAME) $(OBJECTS) -lm -Wl,--gc-sections
%.o: %.c
$(COMPILE) -c $< -o $@
../protocol.o: ../protocol.c
$(COMPILE) -include rename_execute_runtime.h -c $< -o $@
../planner.o: ../planner.c
$(COMPILE) -include planner_inject_accessors.c -c $< -o $@

42
sim/avr/interrupt.c Normal file
View File

@ -0,0 +1,42 @@
/*
interrupt.c - replacement for the avr library of the same name to provide
dummy register variables
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#include "interrupt.h"
// dummy register variables
uint16_t timsk0;
uint16_t timsk1;
uint16_t timsk2;
uint16_t ocr1a;
uint16_t ocr2a;
uint16_t tcnt0;
uint16_t tcnt2;
uint16_t tccr0b;
uint16_t tccr2b;
uint16_t tccr1b;
uint16_t tccr0a;
uint16_t tccr1a;
uint16_t tccr2a;
uint16_t pcmsk0;
uint16_t pcicr;
void sei() {};

82
sim/avr/interrupt.h Normal file
View File

@ -0,0 +1,82 @@
/*
interrupt.h - replacement for the avr include of the same name to provide
dummy register variables and macros
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef interrupt_h
#define interrupt_h
#include <inttypes.h>
// dummy register variables
extern uint16_t timsk0;
extern uint16_t timsk1;
extern uint16_t timsk2;
extern uint16_t tcnt0;
extern uint16_t tcnt2;
extern uint16_t tccr0b;
extern uint16_t tccr0a;
extern uint16_t tccr2a;
extern uint16_t tccr2b;
extern uint16_t tccr1b;
extern uint16_t tccr1a;
extern uint16_t ocr1a;
extern uint16_t ocr2a;
extern uint16_t pcmsk0;
extern uint16_t pcicr;
// macros to turn avr interrupts into regular functions
#define TIMER1_COMPA_vect
#define ISR(a) void interrupt_ ## a ()
// enable interrupts does nothing in the simulation environment
void sei();
// dummy macros for interrupt related registers
#define TIMSK0 timsk0
#define TIMSK1 timsk1
#define TIMSK2 timsk2
#define OCR1A ocr1a
#define OCR2A ocr2a
#define OCIE1A 0
#define OCIE2A 0
#define TCNT0 tcnt0
#define TCNT2 tcnt2
#define TCCR0B tccr0b
#define TCCR0A tccr0a
#define TCCR1A tccr1a
#define TCCR1B tccr1b
#define TCCR2A tccr2a
#define TCCR2B tccr2b
#define CS21 0
#define CS10 0
#define WGM13 0
#define WGM12 0
#define WGM11 0
#define WGM10 0
#define WGM21 0
#define COM1A0 0
#define COM1B0 0
#define TOIE0 0
#define TOIE2 0
#define PCICR pcicr
#endif

21
sim/avr/io.h Normal file
View File

@ -0,0 +1,21 @@
/*
io.h - dummy replacement for the avr include of the same name
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/

26
sim/avr/pgmspace.c Normal file
View File

@ -0,0 +1,26 @@
/*
pgmspace.c - replacement for the avr library of the same name to provide
dummy functions
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
// this is not really ever called in the simulation
char pgm_read_byte_near(const char* s) {
return s[0];
}

30
sim/avr/pgmspace.h Normal file
View File

@ -0,0 +1,30 @@
/*
pgmspace.h - replacement for the avr include of the same name to provide
dummy functions andd macros
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef pgmspace_h
#define pgmspace_h
#define PSTR(s) s
char pgm_read_byte_near(const char* s);
#endif

21
sim/avr/sleep.h Normal file
View File

@ -0,0 +1,21 @@
/*
sleep.h - dummy replacement for the avr include of the same name
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/

117
sim/config.h Normal file
View File

@ -0,0 +1,117 @@
/*
config.h - replacement for the include of the same name in grbl
to define dummy registers
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef config_h
#include "../config.h"
#include <inttypes.h>
// dummy register variables implemented in simulator.c
extern uint8_t stepping_ddr;
extern uint8_t stepping_port;
extern uint8_t spindle_ddr;
extern uint8_t spindle_port;
extern uint8_t limit_ddr;
extern uint8_t limit_port;
extern uint8_t limit_int_reg;
extern uint8_t pinout_ddr;
extern uint8_t pinout_port;
extern uint8_t pinout_int_reg;
extern uint8_t coolant_flood_ddr;
extern uint8_t coolant_flood_port;
// ReDefine pin-assignments
#undef STEPPING_DDR
#define STEPPING_DDR stepping_ddr
#undef STEPPING_PORT
#define STEPPING_PORT stepping_port
#undef X_STEP_BIT
#define X_STEP_BIT 2 // Uno Digital Pin 2
#undef Y_STEP_BIT
#define Y_STEP_BIT 3 // Uno Digital Pin 3
#undef Z_STEP_BIT
#define Z_STEP_BIT 4 // Uno Digital Pin 4
#undef X_DIRECTION_BIT
#define X_DIRECTION_BIT 5 // Uno Digital Pin 5
#undef Y_DIRECTION_BIT
#define Y_DIRECTION_BIT 6 // Uno Digital Pin 6
#undef Z_DIRECTION_BIT
#define Z_DIRECTION_BIT 7 // Uno Digital Pin 7
#undef STEPPERS_DISABLE_DDR
#define STEPPERS_DISABLE_DDR stepping_ddr
#undef STEPPERS_DISABLE_PORT
#define STEPPERS_DISABLE_PORT stepping_port
#undef STEPPERS_DISABLE_BIT
#define STEPPERS_DISABLE_BIT 0 // Uno Digital Pin 8
#undef LIMIT_DDR
#define LIMIT_DDR limit_ddr
#undef LIMIT_PORT
#define LIMIT_PORT limit_port
#undef LIMIT_PIN
#define LIMIT_PIN limit_port
#undef X_LIMIT_BIT
#define X_LIMIT_BIT 1 // Uno Digital Pin 9
#undef Y_LIMIT_BIT
#define Y_LIMIT_BIT 2 // Uno Digital Pin 10
#undef Z_LIMIT_BIT
#define Z_LIMIT_BIT 3 // Uno Digital Pin 11
#undef LIMIT_INT
#define LIMIT_INT 0
#undef LIMIT_PCMSK
#define LIMIT_PCMSK limit_int_reg
#undef SPINDLE_ENABLE_DDR
#define SPINDLE_ENABLE_DDR spindle_ddr
#undef SPINDLE_ENABLE_PORT
#define SPINDLE_ENABLE_PORT spindle_port
#undef SPINDLE_ENABLE_BIT
#define SPINDLE_ENABLE_BIT 4 // Uno Digital Pin 12
#undef SPINDLE_DIRECTION_DDR
#define SPINDLE_DIRECTION_DDR spindle_ddr
#undef SPINDLE_DIRECTION_PORT
#define SPINDLE_DIRECTION_PORT spindle_port
#undef SPINDLE_DIRECTION_BIT
#define SPINDLE_DIRECTION_BIT 5 // Uno Digital Pin 13
#undef PINOUT_DDR
#define PINOUT_DDR pinout_ddr
#undef PINOUT_PORT
#define PINOUT_PORT pinout_port
#undef PINOUT_PIN
#define PINOUT_PIN pinout_port
#undef PINOUT_PCMSK
#define PINOUT_PCMSK pinout_int_reg
#undef PINOUT_INT
#define PINOUT_INT 0
#undef COOLANT_FLOOD_DDR
#define COOLANT_FLOOD_DDR coolant_flood_ddr
#undef COOLANT_FLOOD_PORT
#define COOLANT_FLOOD_PORT coolant_flood_port
#undef COOLANT_FLOOD_BIT
#define COOLANT_FLOOD_BIT 0
#endif

38
sim/eeprom.c Normal file
View File

@ -0,0 +1,38 @@
/*
eeprom.c - replacement for the avr library of the same name to provide
dummy functions
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
// These are never called in the simulator
unsigned char eeprom_get_char( unsigned int addr ) {
return 0;
}
void eeprom_put_char( unsigned int addr, unsigned char new_value ) {
}
void memcpy_to_eeprom_with_checksum(unsigned int destination, char *source, unsigned int size) {
}
int memcpy_from_eeprom_with_checksum(char *destination, unsigned int source, unsigned int size) {
return 0;
}
// end of file

6
sim/gnuplot.plt Normal file
View File

@ -0,0 +1,6 @@
t_= NaN
x_= NaN
y_= NaN
z_= NaN
splot 'HelloWorldSteps.dat' u 2:3:4:(dx= $2-x_,x_=$2,dy=$3-y_,y_=$3,dz=$4-z_,z_=$4,dt=$1-t_,t_=$1,sqrt(dx*dx+dy*dy+dz*dz)/(dt<0.01?0.01:dt)) title "Simulated steps with speed dependent coloring" with lines palette

88
sim/main.c Normal file
View File

@ -0,0 +1,88 @@
/*
main.c - main grbl simulator program
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include "../planner.h"
#include "../stepper.h"
#include "../gcode.h"
#include "../protocol.h"
#include "../nuts_bolts.h"
#include "../settings.h"
#include "../spindle_control.h"
#include "../limits.h"
#include "../coolant_control.h"
#include "simulator.h"
int main(int argc, char *argv[]) {
// Get the minimum time step for printing stepper values.
// If not given or the command line cannot be parsed to a float than
// step_time= 0.0; This means to not print stepper values at all
if(argc>1) {
argv++;
step_time= atof(*argv);
}
// Setup output file handles. Block info goes to stdout. Stepper values go to stderr.
block_out_file= stdout;
step_out_file= stderr;
// Make sure the output streams are flushed immediately.
// This is important when using the simulator inside another application in parallel
// to the real grbl.
// Theoretically flushing could be limited to complete lines. Unfortunately Windows
// does not know line buffered streams. So for now we stick to flushing every character.
//setvbuf(stdout, NULL, _IONBF, 1);
//setvbuf(stderr, NULL, _IONBF, 1);
st_init(); // Setup stepper pins and interrupt timers
memset(&sys, 0, sizeof(sys)); // Clear all system variables
//settings_reset(); TODO: implement read_settings from eeprom
settings_init();
protocol_init(); // Clear incoming line data
//printf("plan_init():\n");
plan_init(); // Clear block buffer and planner variables
//printf("gc_init():\n");
gc_init(); // Set g-code parser to default state
//printf("spindle_init():\n");
spindle_init();
//printf("limits_init():\n");
limits_init();
//printf("coolant_init():\n");
coolant_init();
//printf("st_reset():\n");
st_reset(); // Clear stepper subsystem variables.
sys.auto_start = true; // runtime commands are not processed. We start to simulate immediately
// Main loop of command processing until EOF is encountered
//printf("protocol_process():\n");
protocol_process();
// flush the block buffer and print stepper info on any pending blocks
plan_synchronize();
// Graceful exit
fclose(block_out_file);
fclose(step_out_file);
exit(EXIT_SUCCESS);
}

View File

@ -0,0 +1,10 @@
#include "../planner.h"
static block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instructions
block_t *get_block_buffer() { return block_buffer; }
static volatile uint8_t block_buffer_head; // Index of the next block to be pushed
uint8_t get_block_buffer_head() { return block_buffer_head; }
static volatile uint8_t block_buffer_tail; // Index of the next block to be pushed
uint8_t get_block_buffer_tail() { return block_buffer_tail; }

View File

@ -0,0 +1,2 @@
#define protocol_execute_runtime orig_protocol_execute_runtime
//void __attribute__((weak)) protocol_execute_runtime(void);

38
sim/runtime.c Normal file
View File

@ -0,0 +1,38 @@
/*
runtime.c - replacement for the modul of the same name in grbl
Run time commands are not processed in the simulator.
Instead, the execute_runtime() is used as a hook to handle stepper simulation
and printing of simulation results.
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#include "simulator.h"
#include <stdio.h>
void orig_protocol_execute_runtime(void);
// replacement for original execute_runtime as a hook to print blocks as they are generated
// and to control simulation of buffered blocks
void protocol_execute_runtime(void) {
orig_protocol_execute_runtime();
//printf("printBlock():\n");
printBlock();
//printf("handle_buffer():\n");
handle_buffer();
}

53
sim/serial.c Normal file
View File

@ -0,0 +1,53 @@
/*
serial.c - replacement for the modul of the same name in grbl
Make sure the simulator reads from stdin and writes to stdout.
Also print info about the last buffered block.
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#include "../serial.h"
#include <stdio.h>
#include "simulator.h"
#include <stdio.h>
void serial_write(uint8_t data) {
printBlock();
if(print_comment && data!='\n' && data!='\r') {
fprintf(block_out_file, "# ");
print_comment= 0;
}
if(data=='\n' || data=='\r')
print_comment= 1;
fprintf(block_out_file, "%c", data);
// Indicate the end of processing a command. See simulator.c for details
runtime_second_call= 0;
}
uint8_t serial_read() {
int c;
if((c = fgetc(stdin)) != EOF) {
serial_write(c);
return c;
}
return SERIAL_NO_DATA;
}

1
sim/sim.bat Normal file
View File

@ -0,0 +1 @@
grbl_sim.exe 0.01 <HelloWorld.nc >HelloWorld.dat 2> HelloWorldSteps.dat

217
sim/simulator.c Normal file
View File

@ -0,0 +1,217 @@
/*
simulator.c - functions to simulate how the buffer is emptied and the
stepper interrupt is called
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <stdio.h>
#include "../stepper.h"
#include "../planner.h"
#include "../nuts_bolts.h"
#include "simulator.h"
// This variable is needed to determine if execute_runtime() is called in a loop
// waiting for the buffer to empty, as in plan_synchronize()
// it is reset in serial_write() because this is certainly called at the end of
// every command processing
int runtime_second_call= 0;
// Current time of the stepper simulation
double sim_time= 0.0;
// Next time the status of stepper values should be printed
double next_print_time= 0.0;
// Minimum time step for printing stepper values. Given by user via command line
double step_time= 0.0;
// global system variable structure for position etc.
system_t sys;
int block_position[]= {0,0,0};
uint8_t print_comment= 1;
uint8_t end_of_block= 1;
uint32_t block_number= 0;
// Output file handles set by main program
FILE *block_out_file;
FILE *step_out_file;
// dummy port variables
uint8_t stepping_ddr;
uint8_t stepping_port;
uint8_t spindle_ddr;
uint8_t spindle_port;
uint8_t limit_ddr;
uint8_t limit_port;
uint8_t limit_int_reg;
uint8_t pinout_ddr;
uint8_t pinout_port;
uint8_t pinout_int_reg;
uint8_t coolant_flood_ddr;
uint8_t coolant_flood_port;
extern block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instructions
extern uint8_t block_buffer_head; // Index of the next block to be pushed
extern uint8_t block_buffer_tail; // Index of the block to process now
// Stub of the timer interrupt function from stepper.c
void interrupt_TIMER2_COMPA_vect();
// Call the stepper interrupt until one block is finished
void sim_stepper() {
//printf("sim_stepper()\n");
block_t *current_block= plan_get_current_block();
// If the block buffer is empty, call the stepper interrupt one last time
// to let it handle sys.cycle_start etc.
if(current_block==NULL) {
interrupt_TIMER2_COMPA_vect();
return;
}
while(current_block==plan_get_current_block()) {
sim_time+= get_step_time();
interrupt_TIMER2_COMPA_vect();
// Check to see if we should print some info
if(step_time>0.0) {
if(sim_time>=next_print_time) {
if(end_of_block) {
end_of_block= 0;
fprintf(step_out_file, "# block number %d\n", block_number);
}
fprintf(step_out_file, "%20.15f, %d, %d, %d\n", sim_time, sys.position[X_AXIS], sys.position[Y_AXIS], sys.position[Z_AXIS]);
// Make sure the simulation time doesn't get ahead of next_print_time
while(next_print_time<sim_time) next_print_time+= step_time;
}
}
}
// always print stepper values at the end of a block
if(step_time>0.0) {
fprintf(step_out_file, "%20.15f, %d, %d, %d\n", sim_time, sys.position[X_AXIS], sys.position[Y_AXIS], sys.position[Z_AXIS]);
end_of_block= 1;
block_number++;
}
}
// Returns the index of the previous block in the ring buffer
uint8_t prev_block_index(uint8_t block_index)
{
if (block_index == 0) { block_index = BLOCK_BUFFER_SIZE; }
block_index--;
return(block_index);
}
block_t *get_block_buffer();
uint8_t get_block_buffer_head();
uint8_t get_block_buffer_tail();
block_t *plan_get_recent_block() {
if (get_block_buffer_head() == get_block_buffer_tail()) { return(NULL); }
return(get_block_buffer()+prev_block_index(get_block_buffer_head()));
}
// Print information about the most recently inserted block
// but only once!
void printBlock() {
block_t *b;
static block_t *last_block;
//printf("printBlock()\n");
b= plan_get_recent_block();
if(b!=last_block && b!=NULL) {
//fprintf(block_out_file,"%s\n", line);
//fprintf(block_out_file," block: ");
if(b->direction_bits & (1<<X_DIRECTION_BIT)) block_position[0]-= b->steps_x;
else block_position[0]+= b->steps_x;
fprintf(block_out_file,"%d, ", block_position[0]);
if(b->direction_bits & (1<<Y_DIRECTION_BIT)) block_position[1]-= b->steps_y;
else block_position[1]+= b->steps_y;
fprintf(block_out_file,"%d, ", block_position[1]);
if(b->direction_bits & (1<<Z_DIRECTION_BIT)) block_position[2]-= b->steps_z;
else block_position[2]+= b->steps_z;
fprintf(block_out_file,"%d, ", block_position[2]);
fprintf(block_out_file,"%f", b->entry_speed_sqr);
fprintf(block_out_file,"\n");
last_block= b;
}
}
// The simulator assumes that grbl is fast enough to keep the buffer full.
// Thus, the stepper interrupt is only called when the buffer is full and then only to
// finish one block.
// Only when plan_synchronize() wait for the whole buffer to clear, the stepper interrupt
// to finish all pending moves.
void handle_buffer() {
// runtime_second_call is reset by serial_write() after every command.
// Only when execute_runtime() is called repeatedly by plan_synchronize()
// runtime_second_call will be incremented above 2
//printf("handle_buffer()\n");
if(plan_check_full_buffer() || runtime_second_call>2) {
sim_stepper(step_out_file);
} else {
runtime_second_call++;
}
}
double get_step_time() {
/* code for the old stepper algorithm
uint16_t ceiling;
uint16_t prescaler;
uint32_t actual_cycles;
uint8_t invalid_prescaler= 0;
prescaler= ((TCCR1B>>CS10) & 0x07) - 1;
ceiling= OCR1A;
switch(prescaler) {
case 0:
actual_cycles= ceiling;
break;
case 1:
actual_cycles= ceiling * 8L;
break;
case 2:
actual_cycles = ceiling * 64L;
break;
case 3:
actual_cycles = ceiling * 256L;
break;
case 4:
actual_cycles = ceiling * 1024L;
break;
default:
invalid_prescaler= 1;
}
if(invalid_prescaler) return 12345.0;
else return (double)actual_cycles/F_CPU;*/
return (double)((ocr2a+1)*8)/(double)(F_CPU);
}

60
sim/simulator.h Normal file
View File

@ -0,0 +1,60 @@
/*
simulator.h - functions to simulate how the buffer is emptied and the
stepper interrupt is called
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef simulator_h
#define simulator_h
#include <stdio.h>
#include "../nuts_bolts.h"
// Output file handles
extern FILE *block_out_file;
extern FILE *step_out_file;
// This variable is needed to determine if execute_runtime() is called in a loop
// waiting for the buffer to empty, as in plan_synchronize()
extern int runtime_second_call;
// Minimum time step for printing stepper values. Given by user via command line
extern double step_time;
// global system variable structure for position etc.
extern system_t sys;
extern uint8_t print_comment;
// Call the stepper interrupt until one block is finished
void sim_stepper();
// Check if buffer is full or if plan_synchronize() wants to clear the buffer
void handle_buffer();
// Print information about the most recently inserted block
void printBlock();
// Calculate the time between stepper interrupt calls from TCCR1B and OCR1A AVR registers
// which are set in config_step_timer in stepper.c
// This reconstructs the stepper-internal value of variable st.cycles_per_step_event
// The reconstruction is done to truely decouple the simulator from the actual grbl code
double get_step_time();
#endif

27
sim/util/delay.c Normal file
View File

@ -0,0 +1,27 @@
/*
delay.c - replacement for the avr library of the same name to provide
dummy functions
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
// TODO: the simulation time should reflect when grbl dwells
// Maybe this becomes a no-issue when dwell is executed in a buffered block
void _delay_ms(int i) {}
void _delay_us(int i) {}

29
sim/util/delay.h Normal file
View File

@ -0,0 +1,29 @@
/*
delay.h - replacement for the avr include of the same name to provide
dummy functions
Part of Grbl Simulator
Copyright (c) 2012 Jens Geisler
Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef delay_h
#define delay_h
void _delay_ms(int i);
void _delay_us(int i);
#endif

3
sim/util/floatunsisf.c Normal file
View File

@ -0,0 +1,3 @@
float __floatunsisf (unsigned long v) {
return v;
}