Code formatter for CC65 assembly
Project description
nice65
Code formatter for CC65 assembly (WIP).
Requirements:
- Python 3.x
- Lark
Features:
- Makes ugly code less ugly
- Fixes indentation and letter cases (mnemonics, registers)
- Understands weird labels, such as colon-less (C64 style) and unnamed (
:
,:+++
) - Support for basic macros
- Skip files with
; nice65: ignore
comment - Tested with C64 Kernal/Basic and my 6502-based SBC ROM code
Not implemented yet:
- Complex macros
- Proper formatting of arithmetic expressions
- Better indentation of comments based on deduced context
Notes:
- Colon-less label mode (
-l
) breaks macros due to ambiguity of the syntax. Use this option only with legacy code that contains no macros (such as C64 source code).
Installation
pip install nice65
Example usage
# Reformat and print to STDOUT
nice65 samples/example.s
# Modify file in-place
nice65 samples/example.s -m
# Write result to another file
nice65 samples/example.s -o samples/clean.s
# or
nice65 samples/example.s > samples/clean.s
# Recursively reformat all files in directory with extension ".s"
nice65 ./samples/ -r
# Recursively reformat all files in directory with extension ".asm"
nice65 ./samples/ -r -p '*.asm'
Before:
.macro ldax aa, bb ; do stuff
lda aa
ldx bb ; load bb
.endmacro
.macro pushall
pha
phx
phy
.endmacro
.data
foo:.byte 1
.code
; Fill zeropage with zeroes
fill:
PHa
Phx
start: pushall
ldax #0, #0
@again: sta $00 ,x ;Yeah, we can use stz, but I just need some code to test nice65!
inx
bne @again ; Repeat
; Do unnecessary throwaway stuff to test expressions
lda #<($42 + %10101010- (foo*2))
cmp foo+2
jmp :+
: lda $1234
@ridiculously_long_label_just_for_the_sake_of_it:PLX
pla
end:rts
After:
.macro ldax aa, bb ; do stuff
LDA aa
LDX bb ; load bb
.endmacro
.macro pushall
PHA
PHX
PHY
.endmacro
.data
foo: .byte 1
.code
; Fill zeropage with zeroes
fill:
PHA
PHX
start: pushall
ldax #0, #0
@again:
STA $00, X ; Yeah, we can use stz, but I just need some code to test nice65!
INX
BNE @again ; Repeat
; Do unnecessary throwaway stuff to test expressions
LDA #<($42+%10101010-(foo*2))
CMP foo+2
JMP :+
: LDA $1234
@ridiculously_long_label_just_for_the_sake_of_it:
PLX
PLA
end: RTS
Using with Vim
:nnoremap <M-r> :%! nice65 -<CR>
Using with NeoVim
If you want to be fancy, here's an example on how to have nice65 configured as code formatter for NeoVim with null-ls:
-
Make sure you have the following neovim plugins installed:
maxbane/vim-asm_ca65
- sets filetype for CA65 buffersjose-elias-alvarez/null-ls.nvim
- allows to run custom scripts as language servers
-
Add configuration:
local null_ls = require("null-ls") null_ls.setup({ on_attach = on_attach, -- Remove this line if you don't use on_attach }) null_ls.register({ method = null_ls.methods.FORMATTING, filetypes = { 'asm_ca65' }, generator = null_ls.formatter({ command = 'nice65', args = {'-'}, to_stdin = true, from_stdout = true, }), })
-
Trigger the formatting:
:lua vim.lsp.buf.format()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
nice65-0.1.1.tar.gz
(6.7 kB
view details)
Built Distribution
File details
Details for the file nice65-0.1.1.tar.gz
.
File metadata
- Download URL: nice65-0.1.1.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bef67e761503702a148872647a3f136ca1c789bbb5845e98c74ca3772a25f940 |
|
MD5 | 1ffa8fec9bd4c797745147ea1f1a7ff5 |
|
BLAKE2b-256 | 5bb19f20db4b78ed3c9b9af8153da21599cea158207046de2626c90e637439f0 |
File details
Details for the file nice65-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: nice65-0.1.1-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0668ba9debab5d6592400054c55069c72c769eb291f04ad0c1081812bb9326cb |
|
MD5 | e02aab8a667961292f47de006a425b47 |
|
BLAKE2b-256 | 8859a6d5d4bf38b943a1213e9c26c6b3795fb76d7c4e24ba6c6a91abfa60ad8b |