Skip to content

Instantly share code, notes, and snippets.

View ISSOtm's full-sized avatar
🦀
Rewriting RGBDS... In Rust!

Eldred Habert ISSOtm

🦀
Rewriting RGBDS... In Rust!
View GitHub Profile
@ISSOtm
ISSOtm / vblank_handler.asm
Last active January 3, 2024 10:24
Fancy VBlank handler skeleton for Game Boy, with detailed explanation
SECTION "VBlank vector", ROM0[$0040] ; (address as required by the hardware.)
push af ; Avoid overwriting registers, that would mess up the code being interrupted!
; Always restore registers from their shadows, to reset parameters even in the presence
; of raster effects. (This does imply that those registers should be written as late as
; possible during a frame's processing.)
ldh a, [hLCDC]
ldh [rLCDC], a
jr VBlankHandler
VBlankHandlerJump:
SECTION "VBlank handler", ROM0 ; See at the end of this section for its placement.
// Note: requires Nightly Rust as of 2023-11-03.
use std::alloc::{Allocator, System};
/// Object allowing access to the system allocator.
static SYSTEM: System = System;
fn main() {
let layout = Layout::from_size_align(2, 1).unwrap();
@ISSOtm
ISSOtm / configure.sh
Created February 8, 2023 10:01
Fragment of a `./configure.sh` I wrote that generates a `build.ninja`
#!/bin/bash
# shellcheck disable=SC2016 # Dollar signs in single quotes are destined to Ninja, not Bash.
# Safety belt, even if not perfect. Combined with Shellcheck, we should be okay.
set -euo pipefail
cd "$(dirname "$0")" # Go to the script's directory.
BUILD_DIR="build"
CFLAGS="-D_GNU_SOURCE -pthread $(pkg-config --cflags sdl2)"
@ISSOtm
ISSOtm / shell.session
Created November 5, 2022 21:03
Macro definition polyfill for RGBDS 0.4.2+
issotm@sheik-kitty ~% rgbasm - -Dm1=MACRO -Dm2= <<EOF
m1 duck{m2}
PRINTLN "Quack!"
ENDM
duck
EOF
Quack!
issotm@sheik-kitty ~% rgbasm - -Dm1= -Dm2=:MACRO <<EOF
m1 duck{m2}
diff --git a/PKGBUILD b/PKGBUILD
index fe012c2..f43190d 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -18,10 +18,12 @@ optdepends=('libpulse: Pulseaudio support'
'xdg-utils: Open files')
source=("https://dl.discordapp.net/apps/linux/$pkgver/$_pkgname-$pkgver.tar.gz"
'discord-launcher.sh'
+ 'https://github.com/GooseMod/OpenAsar/releases/download/nightly/app.asar'
'LICENSE.html::https://discordapp.com/terms'
@ISSOtm
ISSOtm / firefox
Created September 20, 2022 19:45
Wrapper to make Firefox respect the current theme (e.g. under i3 or Wayland)
#!/bin/bash
# Start Firefox, enforcing the global theme
export GTK_THEME="${GTK_THEME:-"$(xfconf-query -c xsettings -p /Net/ThemeName)"}"
if [[ "$XDG_SESSION_TYPE" = wayland ]]; then
export MOZ_ENABLE_WAYLAND=1
fi
exec "$(type -a "$(basename "$0")" | grep -Fv "$(realpath "$0")" | head -n 1 | cut -d ' ' -f 3)" "$@"
@ISSOtm
ISSOtm / PKGBUILD
Last active January 8, 2022 02:08
Overhauled PKGBUILD for aseprite-git
# Maintainer: Justin Wong <jusw85 at hotmail dot com>
# Contributor: Eldred Habert <me@eldred.fr>
# Contributor: Benoit Favre <benoit.favre@gmail.com>
# Contributor: Alexander Rødseth <rodseth@gmail.com>
# Contributor: Kamil Biduś <kamil.bidus@gmail.com>
# Discussion: https://bbs.archlinux.org/viewtopic.php?pid=1853334#p1853334
pkgname=aseprite-git
pkgver=1.3.beta7.r63.g8ec2fff44
@ISSOtm
ISSOtm / map_to_sym.awk
Created September 25, 2021 13:23
Awk script for generating a Game Boy SYM file from a RGBDS map file
#!/usr/bin/awk -f
/^[^ \t]+[ \t]bank #([0-9]+):$/ {
bank = substr($3, 2)
sub(/:/, "", bank)
}
/^[ \t]*\$[0-9A-Fa-f]{4}[ \t]+=[ \t]+/ {
printf "%02x:%s %s\n", bank, substr($1, 2), $3
}
@ISSOtm
ISSOtm / maze.py
Created September 5, 2021 16:08
"Clever" assembly for NANDGame maze escape mission (not really Python, just for approximate syntax highlighting)
# Start of main loop
loop:
# Wait until everything is settled before doing anything
A = 0x600
D = A
wait_init:
A = 0x7FFF
# D has its bits get progressively cleared as exit conditions become true
# (since we're not instructing the robot to move, it won't suddenly start doing so)
@ISSOtm
ISSOtm / metasprite_defs.asm
Created July 29, 2021 23:21
Metasprite animation definition
MACRO nb_cels
REDEF NB_CELS equs "_NB_CELS\@"
db {NB_CELS}
DEF {NB_CELS} = 0
ENDM
MACRO cel
db (\1) ; Amount of frames to display this cel during
REDEF {NB_CELS} = {NB_CELS} + (\1)
dw (\2) ; Ptr to cel
ENDM