Commit Graph

1568 Commits

Author SHA1 Message Date
Irmen de Jong
dc6475c91b vm: fixed non-byte array indexing 2022-05-17 18:53:33 +02:00
Irmen de Jong
0bf00d1ca4 c64/c128 targets: perform cleanup at program exit such as re-enabling run-stop key and character set switching. 2022-05-15 16:44:26 +02:00
Irmen de Jong
d1a707df57 fix assigning a pointer (uword) to string not copying the correct memory 2022-05-15 16:10:58 +02:00
Irmen de Jong
4dc9b45297 vm: fixed string comparisons, added missing vm string module 2022-05-13 23:10:13 +02:00
Irmen de Jong
6e31eebfb5 vm: ifElse codegen uses proper branching instructions now 2022-05-12 21:26:17 +02:00
Irmen de Jong
a7df828932 vm: codegen uses INCM/DECM if possible 2022-05-12 19:40:31 +02:00
Irmen de Jong
517cf61d11 vm: limit int instructions to just 2 register args 2022-05-11 22:36:47 +02:00
Irmen de Jong
4be7bc8323 vm: limit float instructions to just 2 register args 2022-05-11 22:09:46 +02:00
Irmen de Jong
74c05d00a9 vm: fix comparison operator codegen for floats 2022-05-11 17:07:21 +02:00
Irmen de Jong
bacba629a5 vm: use shift-one instructions in codegen 2022-05-11 15:50:51 +02:00
Irmen de Jong
14e36f1362 vm: fix assignment to array 2022-05-11 15:26:54 +02:00
Irmen de Jong
d43ad849d1 vm: actually use the store-zero instructions in codegen 2022-05-11 15:18:36 +02:00
Irmen de Jong
627aa61184 clean up subroutine inlining, basis for new try 2022-05-09 15:42:58 +02:00
Irmen de Jong
fef52c0112 automatically convert multi-compare expression (if X==1 or X==2..) to contaiment check if X in [1,2,..] 2022-05-08 13:21:34 +02:00
Irmen de Jong
8c4765b386 vm: support non-unary functions in pipe expressions 2022-05-07 20:42:05 +02:00
Irmen de Jong
7c121bfc01 first steps to support multiple args in pipe expressions 2022-05-07 19:00:47 +02:00
Irmen de Jong
942c5cc04b fix crash when optimizing pipe expression too aggressively 2022-05-07 17:29:36 +02:00
Irmen de Jong
348b3036ff now correctly accepts "xxx" * constexpr (where constexpr is not just a single const number) 2022-05-05 23:21:20 +02:00
Irmen de Jong
09d3451d9d vm: accept %asmbinary (but it is eventually ignored in code execution) 2022-05-05 21:43:31 +02:00
Irmen de Jong
b1a49e5f29 vm: implement rest of float instructions 2022-05-04 22:31:45 +02:00
Irmen de Jong
da01a5b4dc vm: implement float to integer cast, any, all, reverse 2022-05-04 22:08:21 +02:00
Irmen de Jong
3f9cdd9b56 vm: fix mul and div instructions 2022-05-04 01:10:59 +02:00
Irmen de Jong
0f9e87d7bb fixed compiler crash when casting float to integer, fixed float to int cast value error on cx16 2022-05-03 23:43:38 +02:00
Irmen de Jong
0869789214 vm: implement float type casts to integer types 2022-05-02 23:38:32 +02:00
Irmen de Jong
10c8cc35c5 vm: implement float divide multiply sub add 2022-05-02 21:53:43 +02:00
Irmen de Jong
30c2e3e8ff vm: fix comparisons codegen 2022-05-02 21:32:45 +02:00
Irmen de Jong
86cc2f1075 vm: implementing more fp instructions 2022-05-02 21:06:14 +02:00
Irmen de Jong
b32641db87 remove syscall() builtin functions
vm code can do this via inline assembly
2022-05-01 00:41:30 +02:00
Irmen de Jong
0ee790969d vm: allow inline "assembly" 2022-04-30 23:24:25 +02:00
Irmen de Jong
7844ace934 vm: implementing floating-point 2022-04-29 22:27:02 +02:00
Irmen de Jong
0fab806f36 vm: some preparations for floating point 2022-04-27 17:45:58 +02:00
Irmen de Jong
be2113d291 vm: starting to implement floating point instructions 2022-04-26 21:25:59 +02:00
Irmen de Jong
625d5b2313 vm: some preparations for floating point 2022-04-26 21:08:32 +02:00
Irmen de Jong
cf50e4f6ec vm: printing of numbers now via conv module.
assigning strings now converted to strcopy function call in the compiler ast.
2022-04-23 02:15:51 +02:00
Irmen de Jong
7eea97d741 - floats: remove all floating point builtin functions and move them to the floats module instead 2022-04-22 00:45:54 +02:00
Irmen de Jong
88b55ab93e vm: add abs() and fix 6502 abs() code. 2022-04-18 21:20:17 +02:00
Irmen de Jong
ee36d47c27 vm: added cmp() and most of the status-branch instructions 2022-04-18 19:59:48 +02:00
Irmen de Jong
0f36be0001 vm: simple optimizations for +/-/*/div with constants 2022-04-14 22:42:25 +02:00
Irmen de Jong
0f4a197e34 improve ast check on pipe expressions 2022-04-14 00:49:06 +02:00
Irmen de Jong
7dbff5b9e6 abs: remove support for floats. Use floats.fabs() instead.
this solves: can't use abs() etc in pipe expression because return type depends on argument type
2022-04-14 00:38:31 +02:00
Irmen de Jong
220246278a removed sum(), max(), min(). abs() now always returns uword type.
This greatly simplifies internal handling of builtin functions by always having one fixed return type.
2022-04-14 00:21:16 +02:00
Irmen de Jong
349e5a15e9 min/max give proper error for string args
als implmented more vm builtin functions/syscalls
2022-04-13 23:09:25 +02:00
Irmen de Jong
bf7f4bba7b doc 2022-04-13 20:43:07 +02:00
Irmen de Jong
ab1766a559 moved all *integer* builtin trig functions (sin8u, cos8u etc) as regular asmsubs in math module 2022-04-13 00:27:35 +02:00
Irmen de Jong
51bf33040a vm: add many builtin functions 2022-04-11 22:39:33 +02:00
Irmen de Jong
a2c7273801 vm: use memory load instruction better 2022-04-11 20:55:06 +02:00
Irmen de Jong
ec6ac5bf24 vm: added swap() 2022-04-11 01:50:47 +02:00
Irmen de Jong
ec7501782d vm: added 1-bit variants of lsr/lsl opcodes 2022-04-11 00:25:00 +02:00
Irmen de Jong
890b1c2d52 more readable 2022-04-10 22:31:37 +02:00
Irmen de Jong
c25d07259a add block directive options to PtBlock 2022-04-10 21:37:47 +02:00
Irmen de Jong
c960246eee add some utility methods to PtNode to find the defining subroutine/block 2022-04-10 21:20:01 +02:00
Irmen de Jong
b6eb343234 moving string escaping out of antlr project 2022-04-10 17:31:30 +02:00
Irmen de Jong
a0face4a28 vm: implementing rol/ror 2022-04-09 11:13:49 +02:00
Irmen de Jong
a8cf9f5cc4 vm: syscalls can now return value 2022-04-05 20:46:34 +02:00
Irmen de Jong
8e4c0f7c22 vm: add sorting and reverse functions, fix value arg out of range errors 2022-04-05 17:48:49 +02:00
Irmen de Jong
d78bfcc35c vm: more optimal code when array index is constant value 2022-04-05 00:19:37 +02:00
Irmen de Jong
2b7c09e6ee vm: more optimal code for loops ending on 0 2022-04-05 00:08:38 +02:00
Irmen de Jong
036d9dbe59 got rid of unnecessary cast of boolean expressions by making their type dynamically adjust to byte or word 2022-04-04 23:43:55 +02:00
Irmen de Jong
1d342cc6af optimize cx16 textio.setcc()/setcc2() 2022-04-04 22:23:06 +02:00
Irmen de Jong
62b32b2211 todos 2022-04-03 22:56:13 +02:00
Irmen de Jong
5b3ccab7dc vm: support noreinit option 2022-04-03 17:19:50 +02:00
Irmen de Jong
d616cb283b vm: implemented Pipe expression 2022-04-03 15:25:32 +02:00
Irmen de Jong
6ff56dc0bb vm: implemented When 2022-04-02 19:04:12 +02:00
Irmen de Jong
1e63615592 tweaks 2022-04-02 18:04:41 +02:00
Irmen de Jong
b133d51a83 make the parser report '&&' as an error instead of treating it as bitwise and followed by address-of. 2022-04-02 02:08:01 +02:00
Irmen de Jong
20d06d9f9d fix return type error for asmsubs with >1 result values 2022-04-01 22:30:15 +02:00
Irmen de Jong
e2886e5303 x16 r39: update vtui lib and example 2022-04-01 21:09:40 +02:00
Irmen de Jong
c6cf330e70 fix bug in codegen for containment check in bytearrays and strings 2022-04-01 20:46:28 +02:00
Irmen de Jong
f7431f809e fix colorbars example issue with memcopy due to overlapping buffers 2022-04-01 00:54:06 +02:00
Irmen de Jong
ea43c34de8 x16 r39: fix screen colors after changing screen mode 2022-04-01 00:21:22 +02:00
Irmen de Jong
fb6e9fa58f x16 r39: fix textio routines for new vera memory layout 2022-03-31 23:47:11 +02:00
Irmen de Jong
86a7200012 x16 r39: cx16.screen_set_mode() -> cx16.screen_mode() 2022-03-31 18:17:28 +02:00
Irmen de Jong
6ddb7453e1 vm postincrdecr on array done 2022-03-31 02:13:20 +02:00
Irmen de Jong
ad2355f8d3 vm forloop done 2022-03-31 01:41:59 +02:00
Irmen de Jong
0a0c58d450 added for loop over constant ranges 2022-03-30 23:42:15 +02:00
Irmen de Jong
0dc592b819 working on vm 2022-03-30 22:23:25 +02:00
Irmen de Jong
f46300016d working on vm 2022-03-30 01:58:31 +02:00
Irmen de Jong
3e1a7c6102 fix vm signed comparisons 2022-03-29 00:57:33 +02:00
Irmen de Jong
f07065bf84 some x16 example changes to use the improved mode $80 screen resolution 2022-03-28 22:30:34 +02:00
Irmen de Jong
6d79903eb3 workin on vm issues 2022-03-28 01:49:43 +02:00
Irmen de Jong
bb1bf6a88c working on vm 2022-03-28 00:40:15 +02:00
Irmen de Jong
30cbb6c9a8 implementing more of the vm 2022-03-27 21:59:46 +02:00
Irmen de Jong
4e33ab1e89 cx16 target: update float routine addresses to new r39 kernal FP package 2022-03-27 19:34:49 +02:00
Irmen de Jong
5494f309c0 working on vm 2022-03-27 17:46:15 +02:00
Irmen de Jong
3b6e7eccdd simplified containment check, only possible on string and arrays (as per the docs) 2022-03-27 16:59:55 +02:00
Irmen de Jong
e41d6787bb working on vm 2022-03-27 14:23:01 +02:00
Irmen de Jong
ed30108961 removed '**' power-operator. Use floats.pow() instead. 2022-03-27 13:16:34 +02:00
Irmen de Jong
12712ef812 working on vm 2022-03-27 11:48:44 +02:00
Irmen de Jong
0307f6b42c working on vm 2022-03-25 20:22:41 +01:00
Irmen de Jong
b5331d821c fix string encoding for escaped characters 2022-03-25 00:17:41 +01:00
Irmen de Jong
27f6d47efa working on vm codegen 2022-03-24 23:26:57 +01:00
Irmen de Jong
06b38506d1 working on vm translator 2022-03-22 01:43:02 +01:00
Irmen de Jong
fd581ffc37 moved pattern_match() from prog8_lib to string module 2022-03-21 21:32:10 +01:00
Irmen de Jong
7d2bf892b1 added start of virtual machine compilation target 2022-03-19 00:57:35 +01:00
Irmen de Jong
a99e77093f added syscall() builtin functions (only useful for experimental code gen) 2022-03-17 01:19:58 +01:00
Irmen de Jong
92737bb695 better handling of loadAddress 2022-03-13 16:21:02 +01:00
Irmen de Jong
9b81955544 optimizing new Ast 2022-03-13 11:49:07 +01:00
Irmen de Jong
4a0031080a getting rid of directives in new Ast 2022-03-13 00:30:20 +01:00
Irmen de Jong
40e9fba312 working on new Ast and XML export to test it 2022-03-12 22:38:16 +01:00
Irmen de Jong
e227cc92ff new ast: regular subroutine has just 0 or 1 return type 2022-03-12 14:12:06 +01:00
Irmen de Jong
abcdd331db started with a simulator 2022-03-10 21:23:00 +01:00
Irmen de Jong
0a04e626d7 added new intermediate (simplified) AST meant for new codegen 2022-03-10 21:21:15 +01:00
Irmen de Jong
a03c4c3659 working on symbol table 2022-03-04 22:26:46 +01:00
Irmen de Jong
38beebe720 fix pipe check for number of args 2022-03-02 21:29:09 +01:00
Irmen de Jong
fc1c3c6808 working on altered pipe syntax 2022-03-02 20:58:38 +01:00
Irmen de Jong
96ba895b84 working on altered Pipe syntax 2022-02-27 02:42:28 +01:00
Irmen de Jong
df35dfe3bf added atari XEX output format with default $2000 load address 2022-02-26 15:36:22 +01:00
Irmen de Jong
c5504c6657 added ATASCII encoding table for atari 2022-02-25 23:48:39 +01:00
Irmen de Jong
530e109433 added altirra as atari emu2 2022-02-25 19:16:37 +01:00
Irmen de Jong
6185d5eca1 Merge remote-tracking branch 'origin/master' 2022-02-24 22:52:08 +01:00
Irmen de Jong
891f870ec0 todo 2022-02-23 21:58:27 +01:00
Freddy
ad9933f0f6 fixed chrout for atari and added two examples 2022-02-23 16:42:22 +01:00
Irmen de Jong
eeb3c968d6 streamline handling of launcher type and program load address. %address is now required if not using a basic-launcher. 2022-02-22 22:43:14 +01:00
Irmen de Jong
406658a10f reimplemented sys.memcopy and sys.memset on cx16 to work without kernal too 2022-02-22 21:07:19 +01:00
Irmen de Jong
6a0551cea1 added 'atari' compiler target beginnings (Atari 800 XL)
also default char and string encoding now taken from compiler target
2022-02-22 00:52:35 +01:00
Irmen de Jong
21e9723bb2 allow the last term in a pipe statement to be a variable, rewrites this as var = <rest of pipe> 2022-02-21 02:33:19 +01:00
Irmen de Jong
60b2c44a44 fix returntype handling of builtinfunctions, fix errors in pipe expressions 2022-02-21 01:44:29 +01:00
Irmen de Jong
c4fe3ecc0a refactor 2022-02-20 22:04:18 +01:00
Irmen de Jong
7a2164b4d0 introduced BuiltinFunctionCallStatement node for codegen 2022-02-18 23:27:11 +01:00
Irmen de Jong
0a43eae184 rework registerArgsViaStackEvaluation to use cpu hardware stack instead 2022-02-18 22:38:00 +01:00
Irmen de Jong
3117e2b2a3 more tweaks 2022-02-18 01:25:08 +01:00
Irmen de Jong
7aa807ec7f proper error if attempting to do a containment check against non const range, and some cleanup in asmgen 2022-02-16 00:39:19 +01:00
Irmen de Jong
4d16e1e14a now checks for invalid text encodings for given compilation target 2022-02-15 01:39:12 +01:00
Irmen de Jong
73fc18099e properly report duplicate label names 2022-02-15 00:39:10 +01:00
Irmen de Jong
2725c4ad4d slight tweaks to zp and allocator 2022-02-12 00:15:52 +01:00
Irmen de Jong
c8cd6e9460 removed old @"screencodes" string encoding syntax (use sc:"hello" instead) 2022-02-11 22:07:14 +01:00
Irmen de Jong
0cd27d6129 fix empty lines in subroutine ast printing 2022-02-11 21:44:38 +01:00
Irmen de Jong
c13b7fd883 report free/occupied Zeropage space at end of compilation 2022-02-10 21:59:44 +01:00
Irmen de Jong
41b1c80492 label name from memory() no longer interned as string var 2022-02-10 00:45:20 +01:00
Irmen de Jong
e5d7316e5d streamlining non-zpvars asmgen using new mechanism 2022-02-10 00:09:09 +01:00
Irmen de Jong
b043c3a6da streamlining vars asmgen using new mechanism 2022-02-09 21:58:25 +01:00
Irmen de Jong
98b2855b9c cleanups 2022-02-09 16:35:52 +01:00
Irmen de Jong
f3c52c409f variable zp allocation now only done in the allocator 2022-02-08 23:44:21 +01:00
Irmen de Jong
8c2e6971fc start using vars instead of callgraph (2) 2022-02-08 21:09:00 +01:00
Irmen de Jong
1903990f30 start using vars instead of callgraph 2022-02-08 20:40:10 +01:00
Irmen de Jong
7d67005709 more rewrite variable allocation 2022-02-08 20:40:10 +01:00
Irmen de Jong
6bdd81623f cleaning up AsmGen interface 2022-02-06 17:07:03 +01:00
Irmen de Jong
8ae3bad6f7 fix rts in empty asmsub 2022-02-06 05:05:58 +01:00
Irmen de Jong
77de99b383 rts-check for non-inlined subroutines + var init adjustment when noreinit, moved out of codegen 2022-02-06 04:03:03 +01:00
Irmen de Jong
312949f336 added experimental codegen backend option 2022-02-05 21:42:03 +01:00
Irmen de Jong
30e1c3307c simplify SourceCode: just read the full text immediately. Also optimized imports. 2022-02-05 03:50:54 +01:00
Irmen de Jong
08e052380a comments 2022-02-05 03:14:26 +01:00
Irmen de Jong
548374ac2d fix: do proper sign exension when multiplying signed word and byte vars 2022-02-05 01:52:13 +01:00
Irmen de Jong
69b9dfa468 fix invalid recursion warning for code referencing subroutine but not via a call 2022-02-01 23:09:52 +01:00
Irmen de Jong
5c8c64242f callgraph: nameInAssemblyCode searches smarter (for unused()) 2022-02-01 00:33:05 +01:00
Irmen de Jong
f965804e6d fix invalid optimization of returning a parameter variable in a subroutine 2022-01-28 16:44:42 +01:00
Irmen de Jong
ec078eba72 optimize w=msb(w) => w>>=8, w=lsb(w) ==> w&=$00ff 2022-01-28 16:11:52 +01:00
Irmen de Jong
7b3cd71085 fixed improper optimization of word<<8 and word>>8 2022-01-28 13:54:06 +01:00
Irmen de Jong
06128b5d07 optimize word&=$ff00 and word&=$00ff 2022-01-28 13:40:28 +01:00
Irmen de Jong
5ecf2a3357 enable more optimizations for typecasted assignments. Fixed missing codegen for assigning bytes to words in certain cases. 2022-01-27 18:05:25 +01:00