Releases: RodrigoDornelles/3bc-lang
Releases · RodrigoDornelles/3bc-lang
Version 0.1.3
Warnings
- codacy data was deleted.
- publish in dockerhub: https://hub.docker.com/r/rodrigodornelles/3bc-lang
- now the interpreter runs up to 2x faster.
- is 2 million parsed lines per second (i3-10105f)
- in mnemonic reading the worst case that would be half speed is now equal to the best case.
Features
- added clang-tidy linter.
- added support to docker container.
- added support to mips and mips64¹.
- added support to s390x¹.
- added shebang in 3bc programs.
- fixed correct detec BSD kernel.
- fixed when
TBC_P_COMPUTER
compiles with TBC_NOT_ARGCV
.
- modified ANSI C-Compatible primitive fixed size types.
- modified the interprteter functions more readable and easier to maintain.
- modified linear search was changed to binary in the menemonics.
- removed compiler warnings.
- removed codacy.
- removed
sscanf
dependency.
notes
- only in docker
Acknowledgment
sponsors
contributors
Version 0.1.2
Warnings
- there is no active coverage reporting tool.
- interrupt waiting time in seconds is inaccurate.
- interrupt waiting time it's not supported for windows.
Features
- added target build for makefile.
- added support to dynamic libaries.
- added support to windows aarch64.
- added support to linux powerpc, powerpc64 and riscv64.
- added scripts for easy crossbuilds.
- added shebang for
.3bc
examples.
- added support arduino log base2 in cpu mode 38.
- added website brazilian flagg in download buttons. 🇧🇷
- added macros to detects cpu arch, plataform, kernel, etc.
- fixed check boundaries in interpreter tickets.
- fixed license notice in header's ands source's files.
- fixed idle waiting time for microseconds and milliseconds.
- fixed memory invasions in
interpreter_syntax_constants
and driver_power_signal
- improved makefile clean.
- improved support intel from i686 to i386.
- changed asset names sufix and prefix.
- changed main files folder root to
programs/
.
- changed carriage return
\r
to be ignored in interpreter.
- changed extesion in wasm assets modules from
.js
to .mjs
.
- changed website color links to have more hires and improve visibility.
- changed website cdn fonts roboto and material-icons from google to jsdelivr.
- dropped readme FAQ.
- dropped macros
PARSER_PACK
and PARSER_UNPACK
- dropped codecov (😡 I'm tired of false positives caused by comments or code moved between files)
Acknowledgment
sponsors
contributors
bug reporters
Version 0.1.1
Features
- added arch linux PKGBUILD
- added support to kernel Nuttx
- added simple install script for linux and macos
- added automatic publishing assets on gh releases workflow
- fixed problem when more 255 virtual machines are initied
- fixed oversized buffer in hypervisor (saved 50% of ram memory)
- improved code standards and documentations (linters, formatting, warnings, issues templates)
Acknowledgment
sponsors
contributors
Version 0.1.0
Anniversary Celebration First Official Release
🇺🇸 Exactly after 1 year of development, first stable release, celebrate your Christmas with 3bc language!
🇧🇷 Exatamente após 1 ano de desenvolvimento, primeira versão estavél, comemore seu natal com a 3bc language!
Features
- NPM libary
- Arduino libary
- 99% test coverage
- 16 automated tests (2 new)
- 44 cpu modes (4 customisable)
- 7 Supported architectures (arm, x86, wasm, asmjs, risc-v, avr, mos6502)
Beta 9
V8! TURBOCHARGED COMPETITION!
Now the language can run with less than 200 bytes of ram. (90 bytes shared, 86 bytes per virtual machine)
Updates
-
reduce 30% ram usage
-
reduce 20% rom usage
-
add cpu mode sleep
-
add error number negative
-
add boolean bitwise cpu modes
-
add log natural and log base cpu modes
-
add two new arduino framework examples
-
add nine boolean bitwise cpu modes
-
add flag _3BC_DISABLE_INTERPRETER
-
add support to many virtual machines in some host
-
unify functions some functions
-
reorder memory configs
-
clean llrbt memory
-
better interrupts
-
unlock interpreter buffer read
-
removed registers mmax
& mmin
.
-
removed tco cpu mode
-
removed all helpers
-
NOTE there will be no report of changes in cpu modes, there were many changes in this update, and this will be definitive, these changes will no longer be frequent.
Beta 8
V8! Vrum Vrum!
Updates
- Add support to procedural paradigm
- Add support to CC65 (MOS6502 C Compiler)
- Add support to Arduino Framework
- Add support to esp8266 & esp32 (arduino framework)
- Add register STRB in stream and inputs modes
- add algebraic boolean CPU modes (31..39)
- Add procedures CPU modes (41..43)
- Memory alignment
- POSIX terminal fixes
- Decrease 15% of rom size
- Tests Coverage in 99% of code
- Implemented 12 automated tests
- Reorder streams (STRB, STRO, STRI, STRX, STRC)
- Removed sort cpu mode
- Removed C++
Register changes
MODE BOOL NOT mode: 31
name |
octal |
bit |
description |
math |
1 |
001 |
boolean not |
MODE BOOL AND mode: 32
name |
octal |
bit |
description |
math |
1 |
001 |
boolean and |
aux |
math |
aux * math |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
MODE BOOL OR mode: 33
name |
octal |
bit |
description |
math |
1 |
001 |
boolean or |
aux |
math |
aux + math |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
MODE BOOL XOR mode: 34
name |
octal |
bit |
description |
math |
1 |
001 |
boolean xor |
aux |
math |
aux (+) math |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
MODE BOOL NAND mode: 35
name |
octal |
bit |
description |
math |
1 |
001 |
boolean nand |
aux |
math |
!(aux * math) |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
MODE BOOL NOR mode: 36
name |
octal |
bit |
description |
math |
1 |
001 |
boolean nor |
aux |
math |
!(aux + math) |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
MODE BOOL XNOR mode: 37
name |
octal |
bit |
description |
math |
1 |
001 |
boolean xnor |
aux |
math |
!(aux (+) math) |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
MODE BOOL AND NOT mode: 38
name |
octal |
bit |
description |
math |
1 |
001 |
boolean and not |
aux |
math |
aux * !math |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
MODE BOOL OR NOT mode: 39
name |
octal |
bit |
description |
math |
1 |
001 |
boolean or not |
aux |
math |
aux + !math |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
MODE PROCEDURE_RET mode: 41
name |
octal |
bit |
description |
call |
1 |
001 |
return from procedure unconditionally |
fcal |
2 |
010 |
return from procedure if aux memory is fill |
zcal |
3 |
011 |
return from procedure if aux memory is empty |
pcal |
4 |
100 |
return from procedure if aux memory is positive |
ncal |
5 |
101 |
return from procedure if aux memory is negative |
MODE PROCEDURE mode: 42
name |
octal |
bit |
description |
call |
1 |
001 |
call label procedure unconditionally |
fcal |
2 |
010 |
call label procedure if aux memory is fill |
zcal |
3 |
011 |
call label procedure if aux memory is empty |
pcal |
4 |
100 |
call label procedure if aux memory is positive |
ncal |
5 |
101 |
call label procedure if aux memory is negative |
MODE PROCEDURE_RET_TCO mode: 43
name |
octal |
bit |
description |
call |
1 |
001 |
return from procedure at label unconditionally |
fcal |
2 |
010 |
return from procedure at label if aux memory is fill |
zcal |
3 |
011 |
return from procedure at label if aux memory is empty |
pcal |
4 |
100 |
return from procedure at label if aux memory is positive |
ncal |
5 |
101 |
return from procedure at label if aux memory is negative |
- NOTE: this cpu mode should be used for Tail Call Optimization, or else to make explicit when procedures will be terminated passing a label.
Beta 7
Arduino GPIO's support
Updates
- add four new memory configs.
- add support to arduino framework gpio's.
- add two new registers in cpu mode memory
muse
moff
.
- changed hash literal to starts with colon. (wrong
"deprecated"
) (correct :updated
)
- changed names of register
tmax
tmin
to mmax
mmin
- removed register
tcfg
in cpu mode memory
Register changes
MODE MEMORY mode: 6
name |
octal |
bit |
free |
1 |
001 |
aloc |
2 |
010 |
moff tcfg |
3 |
011 |
muse |
4 |
100 |
mmax tmax |
5 4 |
101 100 |
mmin tmin |
6 5 |
110 101 |
Beta 6
Support memory pointers!
Updates
- add two new cpu modes
- add two new errors (columns wrongs, null pointer)
- add alternative syntax (using:
,
.
;
)
- fix missing function
log2
in avr architeture
- fix white space in literal character
- fix grammar errors in source code
- solved
math_basics.3bc
example not working
- removed characters limits by line
- improve tokenization, improves interpreter performance and better supports syntax
- improve internals for larger implementations in the future
- improve compact mode is 10% more economical in ram memory
- improve some macros to facilitate language portability
Register changes
MODE MEMORY PTR mode: 7
name |
octal |
bit |
description |
free |
1 |
001 |
realese memory in pointer |
aloc |
2 |
010 |
set a value in pointer |
pull |
3 |
011 |
pull aux memory to address pointer memory (ptr <- aux) |
spin |
4 |
100 |
inverse values inner memory pointer and aux (ptr <-> aux) |
push |
5 |
101 |
push aux memory to pointer memory (ptr -> aux) |
MODE HELPER SIGN mode: 18
name |
octal |
bit |
description |
math |
1 |
001 |
verify number sign and storage in aux memory (-1, 0, 1) |
MODE MEMORY SORT mode: 18
mode: 31
name |
octal |
bit |
description |
math |
1 |
001 |
sort memory address values |
Beta 5
Support for negative numbers
this update delayed because my computer problem, and it took me a while to pick up the pace of development again, after refactoring, now i will endeavor to keep updates shorter.
Updates
- add five new cpu modes
- add literal type hash
- add literal const
skip
- add negative numbers support
- add jumps to "future"
- add compact mode (saves 60% memory or more)
- fixed error line number
- fixed allow using all hardware memory (before there was a 50% limit)
- refactored how works physical memory to promote greater use of hardware and performance in large programs (impacts slightly on smaller programs)
- changed unit tests using typescript to ruby (decrease the number of project dependencies)
- changed license MIT to GNU GPL3
Register changes
MATH ABS mode: 19
mode: 18
name |
octal |
bit |
description |
math |
1 |
001 |
positive module aux memory value |
MATH NEGATIVE mode: 19
name |
octal |
bit |
description |
math |
1 |
001 |
negative module aux memory value |
HELPER PERCENTAGE mode: 18
mode: 25
name |
octal |
bit |
description |
math |
1 |
001 |
percentage aux memory value |
MODE HELPER REVERSE mode: 26
name |
octal |
bit |
description |
nb02 |
1 |
001 |
base 2 reverse number |
nb08 |
1 |
010 |
base 8 reverse number |
nb10 |
1 |
011 |
base 10 reverse number |
nb16 |
1 |
100 |
base 16 reverse number |
MODE HELPER LOG BASE 2 mode: 27
name |
octal |
bit |
description |
math |
1 |
001 |
base 2 logarithm |
MODE HELPER LOG BASE 10 mode: 28
name |
octal |
bit |
description |
math |
1 |
001 |
base 10 logarithm |
MODE HELPER MUL ADD mode: 29
name |
octal |
bit |
description |
nb02 |
1 |
001 |
multiply by 2 and accumulate operation |
nb08 |
2 |
010 |
multiply by 8 and accumulate operation |
nb10 |
3 |
011 |
multiply by 10 and accumulate operation |
nb16 |
4 |
100 |
multiply by 16 and accumulate operation |
Beta 4
Mid february update
Updates
- added unit tests
- added code coverage
- added portability avr architecture
- added portability risc-v architecture
- added suport to numbers in register column
- added suport to binary base (ex:
0b000
, 0b001
, 0b010
)
- fixed invalid label problem
- fixed error reporting inaccurate
- fixed wild pointers unexpected behavior possible
- modified custom advanced memory settings are now correct
- removed some irrelevant codes for virtual machine
- removed irrelevant register
stru
Try using numbers as registers !
Prints 5
with only using binary base
0b111 0b00 0b010
0b001 0b00 0b101