All Projects → catseye → SixtyPical

catseye / SixtyPical

Licence: other
A 6502-oriented low-level programming language supporting advanced static analysis

Programming Languages

python
139335 projects - #7 most used programming language
shell
77523 projects
xBase
55 projects

Projects that are alternatives of or similar to SixtyPical

crusher
No description or website provided.
Stars: ✭ 21 (-16%)
Mutual labels:  static-analysis, symbolic-execution
Bap
Binary Analysis Platform
Stars: ✭ 1,385 (+5440%)
Mutual labels:  static-analysis, symbolic-execution
Crosshair
An analysis tool for Python that blurs the line between testing and type systems.
Stars: ✭ 586 (+2244%)
Mutual labels:  static-analysis, symbolic-execution
Pyre Check
Performant type-checking for python.
Stars: ✭ 5,716 (+22764%)
Mutual labels:  static-analysis, abstract-interpretation
sturdy
Sturdy is a library for developing sound static analyses in Haskell.
Stars: ✭ 49 (+96%)
Mutual labels:  static-analysis, abstract-interpretation
progge.rs
Program analysis playground for a simple, imperative language
Stars: ✭ 29 (+16%)
Mutual labels:  static-analysis, abstract-interpretation
Apisan
APISan: Sanitizing API Usages through Semantic Cross-Checking
Stars: ✭ 46 (+84%)
Mutual labels:  static-analysis, symbolic-execution
monadic-cfa
Generic implementation of different CFA families based on monadic decomposition
Stars: ✭ 16 (-36%)
Mutual labels:  static-analysis, abstract-interpretation
clam
Static Analyzer for LLVM bitcode based on Abstract Interpretation
Stars: ✭ 180 (+620%)
Mutual labels:  static-analysis, abstract-interpretation
UTBotCpp
Tool that generates unit test by C/C++ source code, trying to reach all branches and maximize code coverage
Stars: ✭ 59 (+136%)
Mutual labels:  static-analysis, symbolic-execution
Sys
Sys: A Static/Symbolic Tool for Finding Good Bugs in Good (Browser) Code
Stars: ✭ 149 (+496%)
Mutual labels:  static-analysis, symbolic-execution
sai
Staged Abstract Interpreters
Stars: ✭ 58 (+132%)
Mutual labels:  symbolic-execution, abstract-interpretation
Lyra
No description or website provided.
Stars: ✭ 23 (-8%)
Mutual labels:  static-analysis, abstract-interpretation
OCCAM
OCCAM: Object Culling and Concretization for Assurance Maximization
Stars: ✭ 20 (-20%)
Mutual labels:  static-analysis, abstract-interpretation
docker-coala-base
coala base docker image
Stars: ✭ 20 (-20%)
Mutual labels:  static-analysis
JAW
JAW: A Graph-based Security Analysis Framework for JavaScript and Client-side CSRF
Stars: ✭ 26 (+4%)
Mutual labels:  static-analysis
nes-runner
An infinite runner NES game!
Stars: ✭ 28 (+12%)
Mutual labels:  6502-assembly
OpenStaticAnalyzer
OpenStaticAnalyzer is a source code analyzer tool, which can perform deep static analysis of the source code of complex systems.
Stars: ✭ 19 (-24%)
Mutual labels:  static-analysis
clair-cicd
Making CoreOS' Clair easily work in CI/CD pipelines
Stars: ✭ 27 (+8%)
Mutual labels:  static-analysis
LibPecker
an obfuscation-resilient, highly precise and reliable library detector for Android applications
Stars: ✭ 38 (+52%)
Mutual labels:  static-analysis

SixtyPical

Version 0.21 | See also: Bubble Escape 2KSITU-SOL


NOTE: Having met the majority of its goals, the SixtyPical project might not undergo much more development going forward. See Future directions for SixtyPical for more information.


SixtyPical brings advanced static analysis to the 6502.

SixtyPical is a low-level programming language supporting some advanced static analysis methods. Its reference compiler can generate efficient code for several 6502-based target platforms while catching many common mistakes at compile-time, reducing the time spent in debugging.

Quick Start

Make sure you have Python (2.7 or 3.5+) installed. Then clone this repository and put its bin directory on your executable search path. Then you can run:

sixtypical

If you have the VICE emulator suite installed, you can run

sixtypical --run-on=x64 eg/c64/hearts.60p

and it will compile the hearts.60p source code and automatically start it in the x64 emulator, and you should see:

Screenshot of result of running hearts.60p

You can try sixtypical --run-on on other sources in the eg directory tree, which contains more extensive examples, including an entire game(-like program); see eg/README.md for a listing.

Features

SixtyPical aims to fill this niche:

  • You'd use assembly, but you don't want to spend hours debugging (say) a memory overrun that happened because of a ridiculous silly error.
  • You'd use C or some other "high-level" language, but you don't want the extra overhead added by the compiler to manage the stack and registers.

SixtyPical gives the programmer a coding regimen on par with assembly language in terms of size and hands-on-ness, but also able to catch many ridiculous silly errors at compile time.

Low level

Many of SixtyPical's primitive instructions resemble those of the MOS Technology 6502 — it is in fact intended to be compiled to 6502 machine code. However, it also provides some "higher-level" operations based on common 8-bit machine-language programming idioms, including

  • copying values from one register to another (via a third register when there are no underlying instructions that directly support it)
  • copying, adding, and comparing 16-bit values (done in two steps)
  • explicit tail calls
  • indirect subroutine calls

While a programmer will find these constructs convenient, their inclusion in the language is primarily to make programs easier to analyze.

Static analysis

The SixtyPical language defines an effect system, and the reference compiler symbolically executes the input program in the manner of flow typing to confirm that it does not violate it. This can detect common mistakes such as

  • you forgot to clear carry before adding something to the accumulator
  • a subroutine that you called trashes a register you thought it preserved
  • you tried to read or write a byte beyond the end of a byte array
  • you tried to write the address of something that was not a routine, to a jump vector

Efficient code

Unlike most conventional languages, in SixtyPical the programmer must manage memory very explicitly, selecting the registers and memory locations to store each piece of data in. So, unlike a C compiler such as cc65, a SixtyPical compiler doesn't need to generate code to handle calling conventions or register allocation. This results in smaller (and thus faster) programs.

The flagship demo, a minigame for the Commodore 64, compiles to a 930-byte .PRG file.

Target platforms

The reference implementation can analyze and compile SixtyPical programs to 6502 machine code formats which can run on several 6502-based 8-bit architectures:

For example programs for each of these, see eg/README.md.

Specification

SixtyPical is defined by a specification document, a set of test cases, and a reference implementation written in Python.

There are over 400 test cases, written in Falderal format for readability. In order to run the tests for compilation, dcc6502 needs to be installed.

Documentation

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].