<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://f256wiki.wildbitscomputing.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=1BitFeverDreams</id>
	<title>Foenix F256 / Wildbits/K2 Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://f256wiki.wildbitscomputing.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=1BitFeverDreams"/>
	<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Special:Contributions/1BitFeverDreams"/>
	<updated>2026-06-01T01:17:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38571</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38571"/>
		<updated>2026-05-28T15:52:51Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Music */ firejam v1.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|S.P.O.T.&lt;br /&gt;
|Satellite Position and Orbital Tracking: network driven representation of the position of the ISS (international space station) from data on the internet&lt;br /&gt;
|Mike C&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/SPOT&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|hackGfx&lt;br /&gt;
|Tile scrolling red pixels demo with short opl3 playback loop&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/hackGfx.pgz &lt;br /&gt;
* spacebar to toggle text&lt;br /&gt;
* S to toggle music&lt;br /&gt;
* backarrow to quit&lt;br /&gt;
it requires sshockt.vgm located in media/vgm/ in order to work with the music&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sshockt.vgm&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.5 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller. Hit the [WLD] / [FNX] key to toggle playing with the typing keyboard.&lt;br /&gt;
&lt;br /&gt;
v1.5 is here https://github.com/Mu0n/WildbitsOscar64CDoodles/tree/main/releases&lt;br /&gt;
&lt;br /&gt;
older v1.2 is here https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=FPGA_Releases&amp;diff=38570</id>
		<title>FPGA Releases</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=FPGA_Releases&amp;diff=38570"/>
		<updated>2026-05-25T13:36:16Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* How to Upgrade the FPGA for the F256K2 */ μSD instead of uSD and K2 instead of F256K2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# move the FG &amp;amp; BG Text LUT to:&lt;br /&gt;
&lt;br /&gt;
=== Important: ===&lt;br /&gt;
Most users will want to consume the &amp;quot;Firmware package relases&amp;quot; (taken from here: https://github.com/FoenixRetro/f256-firmware/releases. )  which contain both the latest of the FPGA releases seen here on this page, and the kernel/base programs intended for the flash memory. The page you&#039;re ready here is meant for power user who would want to test back compatibility or attempt some roll-backs in case bugs are found, and for readers who want to learn about the release notes of each new FPGA version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(* &amp;quot;Purple&amp;quot; refers to the official 2025+ release of the K2; &amp;quot;Black&amp;quot; refers to the first run of K2B boards sent out to the original F256K owners in late 2024)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Latest FPGA core files for all platforms ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;F256Jr2&amp;lt;/big&amp;gt; ====&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;F256K2&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
!&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr2/Classic/2025-01-07/F256Jr2_MMU_Jan8th_2025_OPL3.mcs 08-Jan-2025]&lt;br /&gt;
|OPL3 added&lt;br /&gt;
!&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K2/CNTX1/2025-02-02/CFP95600C.bin 02-Feb-2025]&lt;br /&gt;
Purple*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2Purple/CNTX1/CFP95600C.bin 05-Feb-2025]&lt;br /&gt;
|fix Onboard Access to a SPI Flash&lt;br /&gt;
LCD Splash Screen&lt;br /&gt;
|-&lt;br /&gt;
|65816 Ext&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr2/Extended/2024-12-21/F256Jr2_Ext16_Dec21st_2024.mcs 21-Dec-2024]&lt;br /&gt;
|Implementation of the 256Bytes&lt;br /&gt;
Copy from Flash to RAM before booting.&lt;br /&gt;
!&lt;br /&gt;
|65816 Ext&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K2/CNTX2/2025-01-07/CFP95616E.bin 07-Jan-2025]&lt;br /&gt;
Purple*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2Purple/CNTX2/CFP95616E.bin 06-Jan-2025]&lt;br /&gt;
|Updated access to WS6100&lt;br /&gt;
UART for the VS1053B&lt;br /&gt;
|-&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|[https://c256foenix.com/product-category/gen2-core/?v=5435c69ed3bc Buy Here]&lt;br /&gt;
|2x CPU speed&lt;br /&gt;
layer of 16 bit colored text&lt;br /&gt;
&lt;br /&gt;
hardware line drawing&lt;br /&gt;
&lt;br /&gt;
64 more sprites.&lt;br /&gt;
!&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2/CNTX4/F256K2x_Cores_Foenix138_BlackBoard_B3B_July27th_2025.bin 27-Jul-2025]&lt;br /&gt;
Purple*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2/CNTX4/F256K2x_Cores_Foenix138_B0C_August4th_2025.bin 4-Aug-2025]&lt;br /&gt;
|2x CPU speed&lt;br /&gt;
layer of 16 bit colored text&lt;br /&gt;
&lt;br /&gt;
hardware line drawing&lt;br /&gt;
&lt;br /&gt;
64 more sprites.&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/Jr2/6809/2025-06-15/F256JrJr_FNX6809_June14th_RC0014_0003.mcs 15-Jun-2025]&lt;br /&gt;
|WIFI Speed and Interface (added TX_Empty &amp;amp; RX_Empty Flag)&lt;br /&gt;
!&lt;br /&gt;
|6809&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2/CNTX3/NitrOS9_Load_BlackBoardB3B_WifiFixed_Sept4th.bin 04-Sep-2025]&lt;br /&gt;
Purple*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2Purple/CNTX3/NitrOS9_Load_PurpleBoardB0C_WifiFixed_Sept4th.bin 04-Sep-2025]&lt;br /&gt;
|Wifi fix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;F256Jr&amp;lt;/big&amp;gt; ====&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;F256K&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
!&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr/Classic/F256M_Wbh_Jan26th_2025_RC20_0100.jic 26-Jan-2025]&lt;br /&gt;
|fixes Overlay FONT on top of graphic &lt;br /&gt;
with Background Color Enabled&lt;br /&gt;
!&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K/F256Kc_WBh_Jan26th_2025_RC16_0001.jic 26-Jan-2025]&lt;br /&gt;
|fixes Overlay FONT on top of graphic &lt;br /&gt;
with Background Color Enabled&lt;br /&gt;
|-&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/Jr/Extended/F256M_Wbh_Jun24th_2025_RC0100_0002.jic 24-Jun-2025]&lt;br /&gt;
|Fixed bugs with register 0x0000 and 0x0001&lt;br /&gt;
!&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K/F256Kc_WBh_Jun23th_RC0100_0003_DualSpeed_CPU.jic 23-Jun-2025]&lt;br /&gt;
|Fixed bugs with register 0x0000 and 0x0001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Previous FPGA core files for all platforms ===&lt;br /&gt;
Use these for testing out older softwares and snooping around for persistant issues.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;Previous F256Jr2 Cores&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/Jr2/6809/2025-06-13/F256Jr2_FNX6809_June13th_RC0017_0002.mcs 13-Jun-2025]&lt;br /&gt;
|Move the FG &amp;amp; BG Text LUT to: &lt;br /&gt;
&lt;br /&gt;
$18_3800        $18_383F            TEXT_LUT_FG&lt;br /&gt;
&lt;br /&gt;
$18_3840        $18_387F            TEXT_LUT_BG&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/Jr2/6809/2025-06-11/F256Jr2_FNX6809_June11th_RC0017_0000.mcs 11-Jun-2025]&lt;br /&gt;
|big Wishlist&lt;br /&gt;
full access to write back the onboard flash&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr2/6809/2025-01-17/F256Jr2_FNX6809_Jan17th_RC0014_0002.mcs 17-Jan-2025]&lt;br /&gt;
|Fix for the manual Reset&lt;br /&gt;
Fix for the readback of Multiplication Values&lt;br /&gt;
&lt;br /&gt;
Endianess&lt;br /&gt;
&lt;br /&gt;
Changes to: Line/Pixel Position&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;Previous&amp;lt;/big&amp;gt; &amp;lt;big&amp;gt;F256K2&amp;lt;/big&amp;gt; &amp;lt;big&amp;gt;Cores&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K2/CNTX1/2025-01-08/CFP95600C.bin 08-Jan-2025]&lt;br /&gt;
Purple*: n/a &lt;br /&gt;
|OPL3 implemented&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K2/CNTX1/2025-01-07/CFP95600C.bin 07-Jan-2025]&lt;br /&gt;
Purple*: n/a&lt;br /&gt;
|Instantiation of the UART for the VS1053B @ $DDB0&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|Black*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2/CNTX3/K2_NitrOS9_Load_BlackBoard_Aug26th.bin 26-Aug-2025]&lt;br /&gt;
Purple*: [https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K2Purple/CNTX3/FNX6809_First_Release_Aug24th_PurpleBoard.bin 24-Aug-2025]&lt;br /&gt;
|This is the preliminary version and only works with a PS/2 keyboard plugged in.&lt;br /&gt;
If destined for slot 3, rename the file and put in CNTX3/f256k2t9.bin&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;Previous F256Jr Cores&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr/Classic/F256M_Wbh_Dec23rd_2023_RC18_0100.jic 23-Dec-2023]&lt;br /&gt;
|Tiles fix; shifted by one towards the left. &lt;br /&gt;
(0100 = Serial RAM/Flash Select)&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr/Classic/F256M_Wbh_Nov18th_2023_RC17_0100.jic 18-Nov-2023]&lt;br /&gt;
|In light of decision to dump the big ticket items and the accessories from the store...&lt;br /&gt;
&lt;br /&gt;
* Removed the very SPI core introduced yesterday to drive the FNXNET51 module.&lt;br /&gt;
* Removed the DP memory for the MMU and replace it back with simple Registers, which means that when you reset the system, the MMU, Page0 will be reset back to the way it was. However, the caveat is that if you change between RAM to FLASH MMU default value, you need to do a reset, either a debug reset or General Reset because the MMU is now only 32bytes in Size, so, 4 pages of 8 values.&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/Jr/Classic/F256M_WBh_Nov17th_2023_RC16_0111.jic 17-Nov-2023]&lt;br /&gt;
|&lt;br /&gt;
* No Write Allowed when Debug Port writes in the MMU Memory Zone&lt;br /&gt;
* Incorporation of a new SPI Controller to interface with the FNXNET51 module using the NES/SNES MiniDin9 Connector&lt;br /&gt;
* ReSync of the Debug Generated RDY to stop the CPU. (untested)&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/tree/main/fpga/Jr/Classic various older]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/Jr/Extended/F256M_Wbh_Jun17th_2025_RC0100_0001.jic 16-Jun-2025]&lt;br /&gt;
|CPU runs at 2x speed at 12 MHz&lt;br /&gt;
MUST use a 65816 cpu chip, &lt;br /&gt;
&lt;br /&gt;
will not work with the 6502&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
==== &amp;lt;big&amp;gt;Previous&amp;lt;/big&amp;gt; &amp;lt;big&amp;gt;F256K&amp;lt;/big&amp;gt; &amp;lt;big&amp;gt;Cores&amp;lt;/big&amp;gt; ====&lt;br /&gt;
|-&lt;br /&gt;
!Core&lt;br /&gt;
!Link&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K/2024-12-23/F256K_WBh_Dec23rd_RevB0x_RC14_0000.jic 23-Dec-2023]&lt;br /&gt;
  &lt;br /&gt;
|Tiles fix; shifted by one towards the left. &lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K/F256K_WBh_Dec9th_RevB0x_RC13_0000.jic 09-Dec-2023]&lt;br /&gt;
|&lt;br /&gt;
* Fixes a problem with Interrupt from timer0 that was working on the Jr.&lt;br /&gt;
* Resolves a discrepancy between the F256Jr interrupt block and the F256K.&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/blob/main/fpga/K/F256K_WBh_Nov19th_RevB0x_RC12_0011.jic 19-Nov-2023]&lt;br /&gt;
|Corrects the issue with no-response from command $20 &amp;amp; $21 (not being processed in the early parser). The Jr doesn&#039;t have the issue.&lt;br /&gt;
|-&lt;br /&gt;
|6502 MMU&lt;br /&gt;
|various older&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|65816 Ext 2x&lt;br /&gt;
|[https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/fpga/K/F256Kc_WBh_Jun18th_2025_RC0100_0000_DualSpeed_CPU.jic 18-Jun-2025]&lt;br /&gt;
|CPU runs at 2x speed at 12 MHz&lt;br /&gt;
MUST use a 65816 cpu chip, &lt;br /&gt;
&lt;br /&gt;
will not work with the 6502&lt;br /&gt;
|-&lt;br /&gt;
|6809&lt;br /&gt;
|N/A yet&lt;br /&gt;
|N/A yet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---old version will be kept at the bottom for a while in case errors are found above---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FPGA Upgrade Guide ==&lt;br /&gt;
&lt;br /&gt;
==== How to Upgrade the F256K FPGA (and F256Jr) ====&lt;br /&gt;
Note that the below Video Guide applies to both the F256K &amp;amp; F256Jr, despite it just being titled F256K.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;U7bq7t_qjxg&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to download Quartus Prime Lite 18.1 Edition, since you are going to target a EP4CE15 FPGA (Cyclone 4).&lt;br /&gt;
&lt;br /&gt;
Do not update to the latest version of Quartus Prime Lite, as the latest version doesn’t support that family of FPGA anymore and the software is very big.&lt;br /&gt;
&lt;br /&gt;
Also, one might want to download only the &amp;quot;Intel® Quartus® Prime Programmer and Tools&amp;quot; as opposed to download the whole software by clicking on &amp;quot;Additional Software&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/software-kit/665990/intel-quartus-prime-lite-edition-design-software-version-18-1-for-windows.html Intel Quartus Prime Lite Edition 18.1 for  Windows]&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/software-kit/665988/intel-quartus-prime-lite-edition-design-software-version-18-1-for-linux.html Intel Quartus Prime Lite Edition 18.1 for Linux]&lt;br /&gt;
&lt;br /&gt;
==== How to Upgrade the FPGA for the Wildbits/K2 (F256K2) ====&lt;br /&gt;
It is possible that there will be more graceful methods in the future, but for now, the easiest is to pop off the μSD card found on the left side of the board marked &amp;quot;μSD Card / FPGA Load&amp;quot; and to replace the .bin files inside the directory of the root of that μSD card, using a modern computer.&lt;br /&gt;
&lt;br /&gt;
This is a video guide that covers both upgrade the FPGA cores of the K2 as well as updating the firmware once the FPGA is improved or installed for the first time:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;pOab0ocKqac&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will of course imply that you open up your case. [[Optional Upgrades#Opening the F256K case|There is a guide]] on how to do so for the original F256K enclosure. The K2 enclosure is similar. &lt;br /&gt;
&lt;br /&gt;
For those unfamiliar with the process of removing the μSD card from these slide-operation holders here is the process:&lt;br /&gt;
&lt;br /&gt;
1) very gently press down on the middle metal locking slider that goes across on top of the μSD card and slide it towards the left.&lt;br /&gt;
&lt;br /&gt;
2) the μSD card and its locking slider will now open up by rotating towards the left with a hinge on the left side&lt;br /&gt;
&lt;br /&gt;
Inside the root of this μSD card, there are four folders marked as CNTX# where # is a number from 1 to 4. Simply replace the .bin file therein to update any one given core. You may completely ignore .prm files since they do not affect the F256K2.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Folder&lt;br /&gt;
!Hard coded file name&lt;br /&gt;
!Typical* usage&lt;br /&gt;
!CPU in the FPGA&lt;br /&gt;
|-&lt;br /&gt;
|CNTX1&lt;br /&gt;
|CFP95600C.bin&lt;br /&gt;
|F256 Classic mode with a memory management unit (MMU), where the CPU sees 64k at once&lt;br /&gt;
|65816 acting as 6502&lt;br /&gt;
|-&lt;br /&gt;
|CNTX2&lt;br /&gt;
|CFP95616E.bin&lt;br /&gt;
|F256 Extended mode with a flat memory map all accessible at once&lt;br /&gt;
|65816&lt;br /&gt;
|-&lt;br /&gt;
|CNTX3&lt;br /&gt;
|f256k2t9.bin&lt;br /&gt;
|F256 with the 6809 core (planned) or 68000 core (planned)&lt;br /&gt;
|6809&lt;br /&gt;
|-&lt;br /&gt;
|CNTX4&lt;br /&gt;
|foenix138.bin&lt;br /&gt;
|F256 with 2x CPU speed Extended mode with a flat memory map all accessible at once&lt;br /&gt;
|65816&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Note* on typical usage ======&lt;br /&gt;
As long as you keep the proper hard coded names tied to their folder names, you can slide any core to any slot. For example, if you want the 2x core to be in the CTNX2 folder, just rename it appropriately to CFP95616E.bin as you put it into CTNX2/.&lt;br /&gt;
&lt;br /&gt;
====== K2 core prep steps: ======&lt;br /&gt;
&lt;br /&gt;
# Take care of placing the bin file in the FPGA load μSD card&lt;br /&gt;
# Set the core selecting DIP switches at the back of the unit. Down (towards bottom of the unit) = 0, Up (towards the upper side of the unit) = 1. See below for all possibilities.&lt;br /&gt;
# Power up the unit. If this is the first time you&#039;re using that core and you&#039;ve never done step 4 for it, it&#039;s normal to not have a properly booted initial software (ie superbasic or otherwise)&lt;br /&gt;
# Write the firmware to the content of the flash. Each of the 4 cores have their own 512kb of reserved flash space that are selected at the same time as the core itself from the μSD FPGA load card. Once they are written to, they are set for future usages as you switch between cores and won&#039;t require further flash writes, unless you&#039;re doing updates.&lt;br /&gt;
&lt;br /&gt;
====== Core selecting DIP switches in the back ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Core 1&lt;br /&gt;
!Core 2&lt;br /&gt;
!Core 3&lt;br /&gt;
!Core 4&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Core1.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Core3.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Core2.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Core4.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
|0 0&lt;br /&gt;
|1 0&lt;br /&gt;
|0 1&lt;br /&gt;
|1 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== How to Upgrade the FPGA for the F256Jr. the 2nd ====&lt;br /&gt;
Go look at this [[FPGA Upgrade Guide (F256JrJr)|guide here in the wiki]].&lt;br /&gt;
&lt;br /&gt;
=== Suggested USB Blaster (K and Jr. only) ===&lt;br /&gt;
&lt;br /&gt;
Earth People Technology&lt;br /&gt;
[https://www.amazon.ca/JTAG-Blaster-Intel-Altera-Programmer/dp/B07BZMSZ3G/ref=sr_1_3?crid=WWV8P0OHVCE3&amp;amp;keywords=altera+usb+blaster&amp;amp;qid=1688067039&amp;amp;sprefix=altera+usb+blaster%2Caps%2C113&amp;amp;sr=8-3]&lt;br /&gt;
[https://earthpeopletechnology.com/?wpsc-product=ept-2232h-sp-s1]&lt;br /&gt;
&lt;br /&gt;
Terasic USB Blaster (low cost version)&lt;br /&gt;
[https://www.digikey.ca/en/products/detail/terasic-inc/P0302/2003484]&lt;br /&gt;
[https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=&amp;amp;No=46#contents]&lt;br /&gt;
&lt;br /&gt;
Chinese Knockoff (please avoid if possible)&lt;br /&gt;
&lt;br /&gt;
=== Open Source blaster software (K and Jr. only) ===&lt;br /&gt;
&lt;br /&gt;
For those who are struggling to program the FPGA with Linux or Apple, Stef found this great tool:&lt;br /&gt;
&lt;br /&gt;
https://github.com/trabucayre/openFPGALoader/releases&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Getting_Started&amp;diff=38569</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Getting_Started&amp;diff=38569"/>
		<updated>2026-05-25T13:32:54Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Getting Powered Up */ added text for wildbits. Added details for the JR2 powering situation. Added text on the internal uSD cards for gen2 machines.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Powered Up ==&lt;br /&gt;
&lt;br /&gt;
=== Powering your F256K and Wildbits/K2 (fmr. known as F256K2) ===&lt;br /&gt;
&lt;br /&gt;
These machines are powered via a standard 2.5mm DC Connector, which takes a centre-positive 12V 2A capable Power Supply.&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to use 9 V instead of 12 V, (&#039;&#039;I can personally vouch for it -Mu0n&#039;&#039;). Typical power draw is around 4 to 5 W.&lt;br /&gt;
&lt;br /&gt;
This type of power supply is quite common.  [https://www.amazon.com/Adapter-100-240V-Transformer-Charger-Security/dp/B091XSVV1Y Example 12V 2A capable power supply] (used by at least 1 Discord user successfully)&lt;br /&gt;
&lt;br /&gt;
The Wildbits/K2 (or F256K2) higher end FPGA requires adding a [https://www.amazon.com/dp/B08CMK8BMT compatible heatsink] if you&#039;re running advanced cores like the theoretical 68k core, but is not required for the default K2c/e, 6809, or Core2x.&lt;br /&gt;
&lt;br /&gt;
=== Powering your Wildbits/Jr2 (formerly known as F256Jr2) ===&lt;br /&gt;
Power is provided through a USB-C connector. The cable used there is also providing 4x channels for programming the FPGA, allowing the use of the debug port and the system&#039;s serial COM port.&lt;br /&gt;
&lt;br /&gt;
=== Powering your F256Jr ===&lt;br /&gt;
&lt;br /&gt;
The F256Jr is supplied as a Mini-ITX form factor mainboard, with a standard 24 pin ATX power supply connector for power connectivity.&lt;br /&gt;
&lt;br /&gt;
Since the F256Jr needs relatively little power, compared to a mini-ATX PC, a popular DC 12V 24pin Pico ATX PSU works well and is a compact solution.&lt;br /&gt;
&lt;br /&gt;
* [https://www.amazon.com/dp/B08F57GKCL Pico PSU] - You power the Pico PSU via a 12V DC center-positive Power Supply source.&lt;br /&gt;
* [https://www.amazon.com/dp/B07MXXXBV8 12V DC center-positive A/C Adapter] - Commonly used to power the Pico PSU.&lt;br /&gt;
The board itself has no power switch. If you do not have a Mini-ITX case, a pin header on the board can be bridged by a jumper and thereby used instead of a proper power switch as a stop gap solution. In this picture https://wiki.c256foenix.com/images/6/64/Pinout_Jr_December_7th_Trans.png  the pin header in question is shown in the lower right and is labeled with &#039;&#039;PW ON SPST Switch&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Getting programs onto the Wildbits/F256 ==&lt;br /&gt;
&lt;br /&gt;
=== SD Card === &lt;br /&gt;
&lt;br /&gt;
The F256K, Wildbits/K2 (F256K2), F256JR and Wildbits/Jr2 (F256Jr.Jr.) have an SD card slot.  The device software to read the SD card is a bit touchy (it&#039;s inherited from the Commander X16 project) and doesn&#039;t work with all SD cards&lt;br /&gt;
&lt;br /&gt;
* Cards should support the V2 protocol (HC or XC); older cards that only support the V1 protocol (typically 2GB or less) won&#039;t work. By contrast, the kernels for the C256 machines generally only work with V1 cards.  Note that, in both cases, this is a software limitation -- all of the Foenix machines are electrically capable of using both kinds of cards.&lt;br /&gt;
* Partitioning should be MBR, and partition type 0x0c.&lt;br /&gt;
* Cards *MUST* be formatted FAT32 -- **NOT: FAT, FAT12, FAT16, or exFAT**.   &lt;br /&gt;
* Formatting with Windows 10/11 works fine, but make sure to force FAT32 (or use the command line: &amp;lt;code&amp;gt;format /FS:FAT32 H:&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Formatting with MacOS will only work using the &amp;lt;code&amp;gt;diskutil&amp;lt;/code&amp;gt; command line utility. An example usage looks like this: &amp;lt;code&amp;gt;sudo diskutil eraseDisk FAT32 [DiskName] MBRFormat /dev/[DiskNumber]&amp;lt;/code&amp;gt;.  You can use &amp;lt;code&amp;gt;diskutil list&amp;lt;/code&amp;gt; to get the disk number for the SD Card.&lt;br /&gt;
* Formatting and partitioning SD cards with Linux can be done using the &amp;lt;code&amp;gt;gnome-disk-utility&amp;lt;/code&amp;gt; (known simply as &amp;lt;u&amp;gt;Disks&amp;lt;/u&amp;gt;) and is installed on most mainstream distributions of Linux. &amp;lt;u&amp;gt;Disks&amp;lt;/u&amp;gt; will access all the drives on the computer so be sure you have the SD card selected when editing. [https://wiki.gnome.org/Apps/Disks Gnome/Disks wiki]&lt;br /&gt;
* FAT32 only supports a maximum partition size of 32Gb, on larger cards you will need to create multiple partitions -- however, only the first is recognized by DOS.&lt;br /&gt;
* Some folks have had luck formatting cards with the [https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-download/ Official SD Association formatter for Windows].&lt;br /&gt;
&lt;br /&gt;
=== Internal μSD Card(s) ===&lt;br /&gt;
The gen 2 machines have additional μSD for various purposes.&lt;br /&gt;
&lt;br /&gt;
The Wildbits/Jr2 (F256Jr2) has a μSD socket on its underside for &amp;quot;internal storage&amp;quot; purposes. This needs to be enabled through a specific FPGA feature that is still pending in May of 2026.&lt;br /&gt;
&lt;br /&gt;
The Wildbits/K2 (F256K2) has two μSD sockets inside the case. The leftmost one is a storage for the FPGA binary builds that get sent to the FPGA during bootup, according to the status of the DIP switches at the backside of the case. Four such builds can be prepared in advanced and you can read more on this topic in the [[FPGA Releases|FPGA Release page]]. The rightmost  μSD socket is for &amp;quot;internal storage&amp;quot; purposes. This needs to be enabled through a specific FPGA feature that is still pending in May of 2026.&lt;br /&gt;
&lt;br /&gt;
=== Curated Software Collections ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection Go here to get a nice curated collection of programs] - it was first pepared for VCF East 2025 for the showroom Foenix table, but it is actively getting further updates. simply unzip it to the root of the flash card. You are encouraged to browse and launch most things with the f/manager program by first diving into /- fm from superbasic.&lt;br /&gt;
* An older 2023 pack can be found here (and is referenced down below in the SuperBasic section of this current page), simply unzip it to the root of the flash card: [https://github.com/FoenixRetro/Documentation/blob/main/f256/archive older demo pack from 2023]&lt;br /&gt;
&lt;br /&gt;
=== Tutorial Video on 13 methods on running programs: ===&lt;br /&gt;
&amp;lt;youtube&amp;gt;0ShFv89KGDs&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
00:41 Method 1 - SuperBasic program&lt;br /&gt;
&lt;br /&gt;
01:51 Method 2 - .pgz, .pgZ or .pgx executable from SuperBasic&lt;br /&gt;
&lt;br /&gt;
03:12 Method 3 - Program residing in flash memory&lt;br /&gt;
&lt;br /&gt;
05:58 Method 4 - .pgz, .pgZ or .pgx from DOS&lt;br /&gt;
&lt;br /&gt;
07:31 Method 5 - f/manager utility&lt;br /&gt;
&lt;br /&gt;
12:31 Method 6 - 5.25&amp;quot; 1541 Commodore Disk Drive&lt;br /&gt;
&lt;br /&gt;
14:08 Method 7 - FoenixMgr python scripts for .pgz, .pgZ or .pgx&lt;br /&gt;
&lt;br /&gt;
17:52 Method 8 - FoenixMgr python scripts for .bin&lt;br /&gt;
&lt;br /&gt;
22:21 Method 9 - FoenixMgr modifying the flash programs &lt;br /&gt;
&lt;br /&gt;
25:41 Method 10 - Fcart &amp;amp; PGZ2FLASH to program a Flash Cartridge&lt;br /&gt;
&lt;br /&gt;
28:58 Method 10b - PGZ2Flash to program a Flash Program&lt;br /&gt;
&lt;br /&gt;
30:01 Method 11 - Fcart to REPROGRAM a Flash Cartridge&lt;br /&gt;
&lt;br /&gt;
33:51 Method 12 - Toolbox environment in 65816 extended mode&lt;br /&gt;
&lt;br /&gt;
=== Debug USB port ===&lt;br /&gt;
&lt;br /&gt;
* This is what most developers use as it&#039;s the most convenient.  Connect the debug USB port to your PC or Mac&lt;br /&gt;
&lt;br /&gt;
* You can use:&lt;br /&gt;
** [https://github.com/pweingar/FoenixMgr FoenixMgr] - works on Windows, Mac, Linux&lt;br /&gt;
*** A Python script to manage the Foenix series of retro style computers through their USB debug ports. This tool allows uploading files of various formats to system RAM, and displaying memory through various me&lt;br /&gt;
&lt;br /&gt;
** [https://github.com/Trinity-11/FoenixIDE FoenixIDE] (Windows only)&lt;br /&gt;
*** Development and Debugging Suite for the C256 Foenix Family of Computers.&lt;br /&gt;
&lt;br /&gt;
=== wget (for gen1 only: F256K and F256Jr) ===&lt;br /&gt;
If you have the [[wifi]] configured, you can use [https://github.com/ghackwrench/F256_wget wget] to pull programs and data right off the web!&lt;br /&gt;
&lt;br /&gt;
== SuperBASIC ==&lt;br /&gt;
&lt;br /&gt;
The machine boots to SuperBASIC.  SuperBASIC is inspired by BBC BASIC but offers quite a bit more.&lt;br /&gt;
&lt;br /&gt;
* Read the [https://github.com/FoenixRetro/f256-superbasic/blob/main/reference/source/f256jr_basic_ref.pdf SuperBASIC Reference Manual].&lt;br /&gt;
&lt;br /&gt;
* Watch EMWhite&#039;s excellent intro series on Youtube:&lt;br /&gt;
** Full Playlist here: [https://www.youtube.com/playlist?list=PLeHjTvk7NPiSqGz4REMH-S4hjYpLS2YNR EMWhite&#039;s Intro Series - Full Playlist].&lt;br /&gt;
** Part 1 can be viewed here:&lt;br /&gt;
&amp;lt;youtube&amp;gt;G_S2c_MsqYA&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get started, you can type in a sample program at the command prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 for i=1 to 5&lt;br /&gt;
20 print &amp;quot;Hello world&amp;quot;&lt;br /&gt;
30 next&lt;br /&gt;
run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SuperBASIC is similar to CBM (Microsoft) BASIC but has some differences.  For example, note in the sample above it&#039;s just &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; not &amp;lt;code&amp;gt;next i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The first 15 or so pages of the [https://github.com/FoenixRetro/f256-superbasic/blob/main/reference/source/f256jr_basic_ref.pdf SuperBASIC Reference Manual] are quite instructive.  &lt;br /&gt;
&lt;br /&gt;
SuperBASIC is actually much more powerful and supports structured programming (procedures, blocks etc.) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; - Run this to display directory of SD card&lt;br /&gt;
&lt;br /&gt;
Loading &amp;amp; running programs off of the SD card is similarly easy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
load &amp;quot;JrWordl.bas&amp;quot;&lt;br /&gt;
run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the C64, you can save time in loading programs from the &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; listing by using your cursor keys to go up to the entry, typing &amp;lt;code&amp;gt;load &amp;quot;&amp;lt;/code&amp;gt; (insert mode is active by default) etc.  You can use &amp;lt;code&amp;gt;CTRL+E&amp;lt;/code&amp;gt; to jump to the end of the line and use &amp;lt;code&amp;gt;CTRL+K&amp;lt;/code&amp;gt; to delete any text from the cursor to the end of the line.  Correctly place the closing &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; and hit &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt; acts as a &amp;quot;break&amp;quot; command and stops any running SuperBASIC program or &amp;lt;code&amp;gt;LIST&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
Read built-in help/reference:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/help&amp;lt;/code&amp;gt; : But &#039;&#039;&#039;NOTE&#039;&#039;&#039;, this erases BASIC memory!  Use Backspace key to go back in menus and to exit.&lt;br /&gt;
&lt;br /&gt;
Explore the included demo SuperBASIC programs:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Program !! Notes !! Source&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;JrWordl.bas&amp;lt;/code&amp;gt; || Wordle game, guess 5 letter word ||&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;mandel.bas&amp;lt;/code&amp;gt; || Draws Mandlebrot set in graphics mode, takes between 2 and 3 hours || [https://github.com/Mu0n/F256KbasicBASICdoodles @Mu0n]&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;rpg-demo.bas&amp;lt;/code&amp;gt; || UI sample that shows Zelda like RPG game.  Control the character with an Atari-joystick connected to JoyPort1 || @econtrerasd&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;Problematic_Code.bas&amp;lt;/code&amp;gt; || Displays scrolling starfield ||&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;noelrl.bas&amp;lt;/code&amp;gt; || Simple integer BASIC bench mark from Noel&#039;s retro lab.  Completes &amp;lt; 3.5 seconds, compares very favourably to other retro systems! || [https://www.youtube.com/watch?v=H05hM_Guoqk Youtube]&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;dance.bas&amp;lt;/code&amp;gt; || Animates sprite of dancer || [https://github.com/Mu0n/F256KbasicBASICdoodles @Mu0n]&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;luna.bas&amp;lt;/code&amp;gt; || Displays simple scene ||&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;blink.bas&amp;lt;/code&amp;gt; || Blinks drive access light || [https://github.com/Mu0n/F256KbasicBASICdoodles @Mu0n]&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;piano.bas&amp;lt;/code&amp;gt; || Play some notes with the PSG || [https://github.com/Mu0n/F256KbasicBASICdoodles @Mu0n]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Running pgz, pgZ, pgx Executable Files ===&lt;br /&gt;
Running executables from superbasic involves calling the &amp;quot;pexec program&amp;quot; normally stored in Flash memory, but which is written as simply as possible with a &amp;quot;-&amp;quot; (dash symbol without the quotes) to make it easy and convenient to run programs.&lt;br /&gt;
&lt;br /&gt;
You can use this notation to execute file.pgz (the same can be done with pgx, pgZ):&amp;lt;pre&amp;gt;&lt;br /&gt;
/- file.pgz&lt;br /&gt;
&amp;lt;/pre&amp;gt;The / is for running anything that&#039;s stored in flash&lt;br /&gt;
&lt;br /&gt;
The - is the special alias for pexec, as it is stored in flash&lt;br /&gt;
&lt;br /&gt;
Therefore /- is used together to launch an executable, which would follow as the first argument to the right. Keep in mind you need a space between /- and your program name.&lt;br /&gt;
&lt;br /&gt;
=== More Resources ===&lt;br /&gt;
=== This Wiki ===&lt;br /&gt;
&lt;br /&gt;
Explore all of the content of this Wiki, to expand your F256 series knowledge!&lt;br /&gt;
&lt;br /&gt;
=== Discord ===&lt;br /&gt;
&lt;br /&gt;
The [https://discord.gg/9vjUEGgcUS Wildbits Computing Company Discord] is the primary place to get questions answered.&lt;br /&gt;
&lt;br /&gt;
Also, if you resolve your question, and you didn&#039;t find the answer here on the Wiki, &#039;&#039;&#039;&#039;&#039;please consider contributing to the Wiki&#039;&#039;&#039;&#039;&#039;, for the benefit of others with the same question!&lt;br /&gt;
&lt;br /&gt;
=== Foenix Retro Systems Newsletter ===&lt;br /&gt;
&lt;br /&gt;
Read back issues [http://apps.emwhite.org/foenixmarketplace/ here] (also a great source for sample programs).   &lt;br /&gt;
&lt;br /&gt;
Issues starting at #4 cover the F256 line.  Issues 1-3 cover the previous version of the hardware (C256), although there are still many salient points.&lt;br /&gt;
&lt;br /&gt;
=== Youtube Channels with regular Foenix videos ===&lt;br /&gt;
Official Foenix Retro Systems channel: https://www.youtube.com/@foenixretrosys &lt;br /&gt;
&lt;br /&gt;
8-Bit Wall of Doom (from EMWhite): https://www.youtube.com/@8-bitwallofdoom&lt;br /&gt;
&lt;br /&gt;
AnyBit Fever Dreams (from Mu0n): https://www.youtube.com/@anybitfeverdreams&lt;br /&gt;
&lt;br /&gt;
Boisy Pitre (from MrPitre): https://www.youtube.com/@boisypitre&lt;br /&gt;
&lt;br /&gt;
digarok (from digarok): https://www.youtube.com/@digarok&lt;br /&gt;
&lt;br /&gt;
Micah Bly (from Micah): https://www.youtube.com/@micahbly8241&lt;br /&gt;
&lt;br /&gt;
NormanYen (from beethead): https://www.youtube.com/@normanyen5720&lt;br /&gt;
&lt;br /&gt;
Programmer vs World (from PlasmaTrout): https://makertube.net/c/programmervsworld/videos&lt;br /&gt;
&lt;br /&gt;
==== Specific youtube videos from heavy hitters: ====&lt;br /&gt;
Jan Beta reviews the F256K: https://www.youtube.com/watch?v=57FuA8YuXn0&lt;br /&gt;
&lt;br /&gt;
Perifractic (from Retro Recipes) reviews the F256K: https://www.youtube.com/watch?v=TJQgecozNzU&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38568</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38568"/>
		<updated>2026-05-12T16:57:20Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|S.P.O.T.&lt;br /&gt;
|Satellite Position and Orbital Tracking: network driven representation of the position of the ISS (international space station) from data on the internet&lt;br /&gt;
|Mike C&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/SPOT&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|hackGfx&lt;br /&gt;
|Tile scrolling red pixels demo with short opl3 playback loop&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/hackGfx.pgz &lt;br /&gt;
* spacebar to toggle text&lt;br /&gt;
* S to toggle music&lt;br /&gt;
* backarrow to quit&lt;br /&gt;
it requires sshockt.vgm located in media/vgm/ in order to work with the music&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sshockt.vgm&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38567</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38567"/>
		<updated>2026-05-12T16:57:04Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Applications */ S.P.O.T.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|S.P.O.T. iss&lt;br /&gt;
|Satellite Position and Orbital Tracking: network driven representation of the position of the ISS (international space station) from data on the internet&lt;br /&gt;
|Mike C&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/SPOT&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|hackGfx&lt;br /&gt;
|Tile scrolling red pixels demo with short opl3 playback loop&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/hackGfx.pgz &lt;br /&gt;
* spacebar to toggle text&lt;br /&gt;
* S to toggle music&lt;br /&gt;
* backarrow to quit&lt;br /&gt;
it requires sshockt.vgm located in media/vgm/ in order to work with the music&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sshockt.vgm&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38566</id>
		<title>Oscar64</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38566"/>
		<updated>2026-05-01T19:34:14Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Embedding asset files */ parameters added to the #embed directive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
=== Installation procedure ===&lt;br /&gt;
(this is from Mu0n, under Windows 11 but using a WSL command window)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Noteworthy files and folders ===&lt;br /&gt;
&lt;br /&gt;
(some of these are merely suggestions in how to organize your local installation of oscar64)&lt;br /&gt;
&lt;br /&gt;
assuming your &#039;&#039;&#039;BASEPATH&#039;&#039;&#039; = the folder where you do your installation,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/&#039;&#039;&#039; is where the compiler should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/&#039;&#039;&#039; is where the F256/wildbits libraries for oscar64 should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/&#039;&#039;&#039; is the folder containing all the library files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/f256lib.c&#039;&#039;&#039; is the master library file, also has a corresponding f256lib.h header file and loads all the rest.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039; is a good place to store your projects&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/&#039;&#039;&#039; is the root folder of your project called &#039;myproject&#039; and where the program and linker produced files end up in&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/&#039;&#039;&#039; is the folder containing all of your source code&lt;br /&gt;
&lt;br /&gt;
=== How to manage multiple source code files in a project ===&lt;br /&gt;
&lt;br /&gt;
* Create .h + .c pairs of source code files by themes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use &#039;&#039;&#039;whatever.h&#039;&#039;&#039; so that &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/whatever.c&#039;&#039;&#039; and its corresponding whatever.h are referred to&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Put the entirety of whatever.h&#039;s content between &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#ifndef WHATEVER_H&lt;br /&gt;
&lt;br /&gt;
#define WHATEVER_H&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to avoid complaints of multiple definitions if multiple files need this reference.&lt;br /&gt;
&lt;br /&gt;
=== Compiling a program, scripts from Mu0n ===&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./c.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./car.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Embedding asset files ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to embed files that are larger than 64kb OR if you want to manually force a specific size of data that will get loaded as an embedded asset, use a byte number right after #embed, like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__export const char bmScreen[] = {&lt;br /&gt;
	#embed 76800 &amp;quot;../assets/bitmap.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;(this would load a full screen bitmap of 76,800 bytes at a 320x240 resolution.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an offset from which to start using your data, use a second number like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__export const char binaryChunk[] = {&lt;br /&gt;
	#embed 8192 1024 &amp;quot;../assets/chunk.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&#039;&#039;(this would load 8kb but starting at byte 1024 from the start instead of 0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== How to use higher memory and the MMU to store code ===&lt;br /&gt;
&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accessing the extra 2x core banks of 512kb memory ===&lt;br /&gt;
&lt;br /&gt;
Since the launch of the 2x core, the full 2MB of SRAM is accessible if you set a bit right in register 0x0000. For more details on this feature of the 2x core, [[Use the Core2x|see this page]].&lt;br /&gt;
&lt;br /&gt;
To peek a byte at these regions of memory, use this asm block as an oscar64 function:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;peek24&#039;&#039;&#039; accepts a 32bit long address, stores it temporarily into a few bytes near the beginning of zero page. It then activates bit 3 of register 0x0000 to access the new 2x core higher memory banks. Finally, it fetches the content of that byte as a returned char.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char peek24(unsigned long addr)&lt;br /&gt;
{&lt;br /&gt;
    return __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
		&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
&lt;br /&gt;
        byt 0xa7&lt;br /&gt;
	byt 0x05&lt;br /&gt;
		&lt;br /&gt;
        stx 0x00&lt;br /&gt;
        sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
&lt;br /&gt;
        sta accu&lt;br /&gt;
        lda #0&lt;br /&gt;
        sta accu+1&lt;br /&gt;
	};&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write something to these higher memory banks, you can use &#039;&#039;&#039;poke24&#039;&#039;&#039;, which goes the other way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void poke24(unsigned long addr, unsigned char value)&lt;br /&gt;
{&lt;br /&gt;
    __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
				&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
		&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
		&lt;br /&gt;
        lda value&lt;br /&gt;
        &lt;br /&gt;
	byt 0x87&lt;br /&gt;
	byt 0x05&lt;br /&gt;
	stx 0x00&lt;br /&gt;
	sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
	ldx #0x00&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Troubleshoot Gotchas&amp;quot; during compilation ===&lt;br /&gt;
&lt;br /&gt;
None to report so far.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38565</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38565"/>
		<updated>2026-04-30T13:16:55Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Floating point module = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in this [[IO Pages#$D900: Sprites|Sprite section of the IO Pages]], as well as in chapter 5 of the [[Manuals|Jr reference book]] starting at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38564</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38564"/>
		<updated>2026-04-30T13:16:24Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* New Features Documentation for the Core2x for K2 and Jr2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in this [[IO Pages#$D900: Sprites|Sprite section of the IO Pages]], as well as in chapter 5 of the [[Manuals|Jr reference book]] starting at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38563</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38563"/>
		<updated>2026-04-30T13:15:48Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Accessing an extra bank of 64 sprites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Features Documentation for the Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in this [[IO Pages#$D900: Sprites|Sprite section of the IO Pages]], as well as in chapter 5 of the [[Manuals|Jr reference book]] starting at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38562</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38562"/>
		<updated>2026-04-30T13:15:26Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Accessing an extra bank of 64 sprites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Features Documentation for the Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in this [[IO Pages|Sprite section of the IO Pages]], as well as in chapter 5 of the [[Manuals|Jr reference book]] starting at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38561</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38561"/>
		<updated>2026-04-30T13:06:26Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Accessing an extra bank of 64 sprites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Features Documentation for the Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in chapter 5 of the [[Manuals|Jr reference book]] starting at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38560</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38560"/>
		<updated>2026-04-30T13:05:06Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Accessing an extra bank of 64 sprites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Features Documentation for the Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in chapter 5 of the [[Manuals|Jr reference book]] at start at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+I/O Memory Control Register (0x0001)&lt;br /&gt;
!B7&lt;br /&gt;
!&#039;&#039;&amp;lt;u&amp;gt;B6&amp;lt;/u&amp;gt;&#039;&#039;&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38559</id>
		<title>Use the Core2x</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_Core2x&amp;diff=38559"/>
		<updated>2026-04-30T13:04:07Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: sections laid out for the 2x core page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Features Documentation for the Core2x for K2 and Jr2 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
These new features were brought in as a new FPGA core back in August of 2025. It was feature complete for the K2 and mostly feature complete for the Jr2. Since early 2026, feature parity is coming to the Jr2.&lt;br /&gt;
&lt;br /&gt;
Here is the original reference document from August 2025 from Stefany Allaire:&lt;br /&gt;
[https://256-foenix.us-east-1.linodeobjects.com/F256K2x_Cores%2FCore2x_ShortFormSpec_Aug7th.pdf Core2x_ShortForm_Documentation]&lt;br /&gt;
&lt;br /&gt;
Here is Stefany Allaire&#039;s video on the Core2x features: https://www.youtube.com/watch?v=ECu1Z3AwZEw&lt;br /&gt;
&lt;br /&gt;
=== Flat mode 24 bit memory addressing and accessing 3 new banks of 512kb of SRAM ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Moving I/O decoding and Flash/Cart to higher memory ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Accessing an extra bank of 64 sprites ===&lt;br /&gt;
&lt;br /&gt;
To access the extra bank of 64 sprites using the same register locations as the first 64 sprites, just set bit 6 to 1 of register 0x0001.&lt;br /&gt;
&lt;br /&gt;
Keep it cleared when you want to access the first bank.&lt;br /&gt;
&lt;br /&gt;
The sprite registers are well documented in chapter 5 of the [[Manuals|Jr reference book]] at start at 0xD900, assuming you have i/o page set at 0.&lt;br /&gt;
&lt;br /&gt;
I/O Memory Control Register (0x0001)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Not used&lt;br /&gt;
|Sprite Block Select - 0:Sprite 0-63, 1:Sprite 64-127 &lt;br /&gt;
|Move Flash/Cart to High&lt;br /&gt;
|Move IO Devices to High&lt;br /&gt;
|Active IO Page[2]&lt;br /&gt;
|IO Page Disable - 0:Enabled, 1:Disabled&lt;br /&gt;
|Active IO Page[1]&lt;br /&gt;
|Active IO Page[0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== New layer: memtext mode (more colors, fonts, background and foreground bigger LUTs) ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== VDMA Controller adds 16bit memcopy ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Fast hardware line draw ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Floating point module ====&lt;br /&gt;
&lt;br /&gt;
To do.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38558</id>
		<title>Oscar64</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38558"/>
		<updated>2026-04-30T11:46:21Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* How to manage multiple source code files in a project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
=== Installation procedure ===&lt;br /&gt;
(this is from Mu0n, under Windows 11 but using a WSL command window)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Noteworthy files and folders ===&lt;br /&gt;
&lt;br /&gt;
(some of these are merely suggestions in how to organize your local installation of oscar64)&lt;br /&gt;
&lt;br /&gt;
assuming your &#039;&#039;&#039;BASEPATH&#039;&#039;&#039; = the folder where you do your installation,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/&#039;&#039;&#039; is where the compiler should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/&#039;&#039;&#039; is where the F256/wildbits libraries for oscar64 should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/&#039;&#039;&#039; is the folder containing all the library files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/f256lib.c&#039;&#039;&#039; is the master library file, also has a corresponding f256lib.h header file and loads all the rest.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039; is a good place to store your projects&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/&#039;&#039;&#039; is the root folder of your project called &#039;myproject&#039; and where the program and linker produced files end up in&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/&#039;&#039;&#039; is the folder containing all of your source code&lt;br /&gt;
&lt;br /&gt;
=== How to manage multiple source code files in a project ===&lt;br /&gt;
&lt;br /&gt;
* Create .h + .c pairs of source code files by themes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use &#039;&#039;&#039;whatever.h&#039;&#039;&#039; so that &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/whatever.c&#039;&#039;&#039; and its corresponding whatever.h are referred to&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Put the entirety of whatever.h&#039;s content between &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#ifndef WHATEVER_H&lt;br /&gt;
&lt;br /&gt;
#define WHATEVER_H&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to avoid complaints of multiple definitions if multiple files need this reference.&lt;br /&gt;
&lt;br /&gt;
=== Compiling a program, scripts from Mu0n ===&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./c.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./car.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Embedding asset files ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to use higher memory and the MMU to store code ===&lt;br /&gt;
&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accessing the extra 2x core banks of 512kb memory ===&lt;br /&gt;
&lt;br /&gt;
Since the launch of the 2x core, the full 2MB of SRAM is accessible if you set a bit right in register 0x0000. For more details on this feature of the 2x core, [[Use the Core2x|see this page]].&lt;br /&gt;
&lt;br /&gt;
To peek a byte at these regions of memory, use this asm block as an oscar64 function:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;peek24&#039;&#039;&#039; accepts a 32bit long address, stores it temporarily into a few bytes near the beginning of zero page. It then activates bit 3 of register 0x0000 to access the new 2x core higher memory banks. Finally, it fetches the content of that byte as a returned char.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char peek24(unsigned long addr)&lt;br /&gt;
{&lt;br /&gt;
    return __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
		&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
&lt;br /&gt;
        byt 0xa7&lt;br /&gt;
	byt 0x05&lt;br /&gt;
		&lt;br /&gt;
        stx 0x00&lt;br /&gt;
        sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
&lt;br /&gt;
        sta accu&lt;br /&gt;
        lda #0&lt;br /&gt;
        sta accu+1&lt;br /&gt;
	};&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write something to these higher memory banks, you can use &#039;&#039;&#039;poke24&#039;&#039;&#039;, which goes the other way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void poke24(unsigned long addr, unsigned char value)&lt;br /&gt;
{&lt;br /&gt;
    __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
				&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
		&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
		&lt;br /&gt;
        lda value&lt;br /&gt;
        &lt;br /&gt;
	byt 0x87&lt;br /&gt;
	byt 0x05&lt;br /&gt;
	stx 0x00&lt;br /&gt;
	sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
	ldx #0x00&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Troubleshoot Gotchas&amp;quot; during compilation ===&lt;br /&gt;
&lt;br /&gt;
None to report so far.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_OPL3_YMF262&amp;diff=38557</id>
		<title>Use the OPL3 YMF262</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Use_the_OPL3_YMF262&amp;diff=38557"/>
		<updated>2026-04-30T06:06:21Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Usage: */ typo in hex address&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The YMF262 is inside the FPGA of some machines ==&lt;br /&gt;
&lt;br /&gt;
The F256 machines, except the F256Jr., have in their Beatrix FPGA a YMF262 capable of Yamaha OPL3 that uses up to 36 operators. You can also use it in compatible OPL2 that uses a subset of up to 18 operators&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== F256 registers for 6502, 65816, 6809(?) cores ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Register Name&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OPL_ADDR_L&lt;br /&gt;
|0xD580 &lt;br /&gt;
|Register for addressing ports 0x000 to 0x0FF&lt;br /&gt;
|-&lt;br /&gt;
|OPL_DATA&lt;br /&gt;
|0xD581 &lt;br /&gt;
|Data register for all ports&lt;br /&gt;
|-&lt;br /&gt;
|OPL_ADDR_H&lt;br /&gt;
|0xD582 &lt;br /&gt;
|Register for addressing ports 0x100 to 0x1FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Usage: =====&lt;br /&gt;
When targetting a port in the 0x000 - 0x0FF range, send the port byte to 0xD580, then its data byte to 0xD581.&lt;br /&gt;
&lt;br /&gt;
When targetting a port in the 0x100 - 0x1FF range, send the port byte &#039;&#039;masked with 0x0FF to 0xD582,&#039;&#039; then its data byte to 0xD581&#039;&#039;.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Example 1: to start the chip using port 0x01, send 0x01 to 0xD580, then 0x01 to 0xD581.&lt;br /&gt;
&lt;br /&gt;
Example 2: to enable OPL3 using port 0x105, send 0x05 to 0xD582, then 0x01 to 0xD581.&lt;br /&gt;
&lt;br /&gt;
=== Chip wide ports ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Test Register / Waveform Select Enable&lt;br /&gt;
|0x01&lt;br /&gt;
|Must be used to &amp;quot;start the chip&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Test Register&lt;br /&gt;
| Wave Select Enable&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | Test Register&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | Set all Test Register bits to 0 to start the chip. B5 clear = all sine waves B5 set= enables wave choices in 0xE0-F5&lt;br /&gt;
|-&lt;br /&gt;
|Timer 1 Count&lt;br /&gt;
|0x02&lt;br /&gt;
|8bit timer with resolution of 80 us. &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | If overflow occurs, status register is set and preset value is loaded&lt;br /&gt;
|-&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Timer 2 Count&lt;br /&gt;
|0x03&lt;br /&gt;
|8bit timer with resolution of 320 us. &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | If overflow occurs, status register is set and preset value is loaded&lt;br /&gt;
|-&lt;br /&gt;
|IRQ-Reset/Mask/Start&lt;br /&gt;
|0x04&lt;br /&gt;
|Timer controls &lt;br /&gt;
|Reset&lt;br /&gt;
|T1Mask&lt;br /&gt;
|T2Mask&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|T2Start&lt;br /&gt;
|T1Start&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | B7 resets and IRQ flags status reg and ignore all others when this is set&amp;lt;br&amp;gt;&lt;br /&gt;
B6 timer 1 mask. status reg is not affected in overflow&amp;lt;br&amp;gt;&lt;br /&gt;
B5 timer 2 mask. same for timer2&amp;lt;br&amp;gt;&lt;br /&gt;
B1 Timer 2 start. timer on/off&amp;lt;br&amp;gt;&lt;br /&gt;
B0 Timer 1 start, same&lt;br /&gt;
|-&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Four-Operator Enable&lt;br /&gt;
|0x104&lt;br /&gt;
| Sets up four-operator channels&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4-OP B-E&lt;br /&gt;
| 4-OP A-D&lt;br /&gt;
| 4-OP 9-C&lt;br /&gt;
| 4-OP 2-5&lt;br /&gt;
| 4-OP 1-4&lt;br /&gt;
| 4-OP 0-3&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | When fully set 0, 18 two-operator pairs are formed. When non-zero, four-operators are formed at specific locations&amp;lt;br&amp;gt;&lt;br /&gt;
B5: channels 11-14 (decimal) are grouped&amp;lt;br&amp;gt;&lt;br /&gt;
B4: channels 10-13&amp;lt;br&amp;gt;&lt;br /&gt;
B3: channels 9-12&amp;lt;br&amp;gt;&lt;br /&gt;
B2: channels 2-5&amp;lt;br&amp;gt;&lt;br /&gt;
B1: channels 1-4&amp;lt;br&amp;gt;&lt;br /&gt;
B0: channels 0-3&lt;br /&gt;
|-&lt;br /&gt;
|OPL3 Mode Enable&lt;br /&gt;
|0x105&lt;br /&gt;
| enables OPL3 extensions&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Enable&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | set B0 to enable 36 operators, 4-OP synth, 8 waveforms, stereo output. When cleared, OPL2 is enabled.&lt;br /&gt;
|-&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Tremolo/Vibrato/Percussion&lt;br /&gt;
|0xBD&lt;br /&gt;
| Bits 0-4 are treated as key-on/key-offs.&lt;br /&gt;
| Tre&lt;br /&gt;
| Vib&lt;br /&gt;
| Perc Mode&lt;br /&gt;
| BassDrum&lt;br /&gt;
| SnareDrum&lt;br /&gt;
| Tom-Tom&lt;br /&gt;
| Cymbal&lt;br /&gt;
| Hi-Hat&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | B7 and B6 set = more present effect. &amp;lt;br&amp;gt;B5 being set enables these 4 default percussive instruments&lt;br /&gt;
When using B0-B4, key-on in channels 6,7,8 and their fnums have to be cleared! Their ADSR must be appropriate&amp;lt;br&amp;gt;&lt;br /&gt;
This register is only used in OPL2 lower half, it does not affect higher half OPL3.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Channel wide ports ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Frequency Number (LO)&lt;br /&gt;
|0xA0&lt;br /&gt;
|The first 8 out of 10 bits of frequency value&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; |Frequency Number (L)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |One only needs to generate 12 semi-tones once and use them over and over for western equal temperament music&lt;br /&gt;
{0x205, 0x223, 0x244, 0x267, 0x28B, 0x2B2, 0x2DB, 0x306, 0x334, 0x365, 0x399, 0x3CF}  this array also includes&lt;br /&gt;
the top 2 bits used in the next register base of 0xB0.&lt;br /&gt;
|-&lt;br /&gt;
|Key On - Freq Block - Freq Num (Hi)&lt;br /&gt;
|0xB0&lt;br /&gt;
|Last 2 out of 10 bits of frequency value. &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Key On&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |Freq Block&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |FNum (H)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |Key On toggles in the playing of the note on/off. Block kinda switches octaves&lt;br /&gt;
|-&lt;br /&gt;
|Feedback - Algorithm&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|OutChD&lt;br /&gt;
|OutChB&lt;br /&gt;
|R&lt;br /&gt;
|L&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |Feedback&lt;br /&gt;
|Synth&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |Digital audio outputs R = right speaker, L = left speaker, B = 3rd output, D = 4th output&lt;br /&gt;
Feedback: sends a portion of its output back to itself if set between value of 1-7&lt;br /&gt;
Synthesis types:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Op 1&amp;amp;2&lt;br /&gt;
!Op 3&amp;amp;4&lt;br /&gt;
!Type&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|None&lt;br /&gt;
|FM&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|None&lt;br /&gt;
|AM&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|FM-FM&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|AM-FM&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|FM-AM&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|AM-AM&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Operator wide ports ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Various Effects &lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|Tremolo&lt;br /&gt;
|Vibrato&lt;br /&gt;
|Sus&lt;br /&gt;
|KSR&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |Tremolo and Vibrato turn the effects on and off&lt;br /&gt;
Sustain until key off&lt;br /&gt;
Enveloppe scaling KSR, when 1, higher notes are shorter than lower notes&lt;br /&gt;
Bits 0-3: Frequency Mutiplication, adds a multiplication coefficient to the note frequency&lt;br /&gt;
multi 0 is a factor of 0.5&lt;br /&gt;
multi 1 is 1&lt;br /&gt;
multi 2 is 2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|KSL and output levels&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |KSL 0-3&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |Output Level 0-32&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |Key Scale Level is the attenuation of output level at higher pitch&lt;br /&gt;
KSL 0 : none KSL 1: 3dB/octave, KSL  2: 1.5 dB/octave, KSL 3: 6.0 dB/octave&lt;br /&gt;
Output level works in reverse: 0 is the loudest, 0x3F is the softest.&lt;br /&gt;
|-&lt;br /&gt;
!Port Name&lt;br /&gt;
!Port Address&lt;br /&gt;
!Description&lt;br /&gt;
!B7&lt;br /&gt;
!B6&lt;br /&gt;
!B5&lt;br /&gt;
!B4&lt;br /&gt;
!B3&lt;br /&gt;
!B2&lt;br /&gt;
!B1&lt;br /&gt;
!B0&lt;br /&gt;
|-&lt;br /&gt;
|Attack and Decay&lt;br /&gt;
|0x60&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |Attack 0x00 to 0x0F&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |Decay 0x00 to 0x0F&lt;br /&gt;
|-&lt;br /&gt;
|Sustain and Release&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |Sustain 0x00 to 0x0F&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |Release 0x00 to 0x0F&lt;br /&gt;
|-&lt;br /&gt;
|Waveform select&lt;br /&gt;
|0xE0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |Waveform&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; |Chip wide register 0x01&#039;s bit 5 must be set to 1 to enable all of the following&lt;br /&gt;
&lt;br /&gt;
Waveforms of 4-7 are only available with OPL3&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Value&lt;br /&gt;
!Type&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Sine&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Half-sine&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Absolute value sine&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Pulse Sine&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Sine with even periods only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Absolute sine with even periods only&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Square&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Derived Square&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Accessing all the operators ====&lt;br /&gt;
In order to access all the operator&#039;s registers, you must apply an offset to all of the previous addresses from the above section, which were all relevant to operator 0. &lt;br /&gt;
&lt;br /&gt;
Here are a couple of examples to help visualize this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;18&amp;quot; |Operators of bank 0 (OPL2 and OPL3) &lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 1&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 2&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 3&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 4&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 5&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 6&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 7&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 8&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Channel 9&lt;br /&gt;
|-&lt;br /&gt;
!Operators----&amp;gt;&lt;br /&gt;
!1&lt;br /&gt;
!4&lt;br /&gt;
!2&lt;br /&gt;
!5&lt;br /&gt;
!3&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!10&lt;br /&gt;
!8&lt;br /&gt;
!11&lt;br /&gt;
!9&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!16&lt;br /&gt;
!14&lt;br /&gt;
!17&lt;br /&gt;
!15&lt;br /&gt;
!18&lt;br /&gt;
|-&lt;br /&gt;
!Modulator or Carrier ----&amp;gt;&lt;br /&gt;
!M1&lt;br /&gt;
!C1&lt;br /&gt;
!M2&lt;br /&gt;
!C2&lt;br /&gt;
!M3&lt;br /&gt;
!C3&lt;br /&gt;
!M4&lt;br /&gt;
!C4&lt;br /&gt;
!M5&lt;br /&gt;
!C5&lt;br /&gt;
!M6&lt;br /&gt;
!C6&lt;br /&gt;
!M7&lt;br /&gt;
!C7&lt;br /&gt;
!M8&lt;br /&gt;
!C8&lt;br /&gt;
!M9&lt;br /&gt;
!C9&lt;br /&gt;
|-&lt;br /&gt;
|Register for Various Effects&lt;br /&gt;
|0x20&lt;br /&gt;
|0x23&lt;br /&gt;
|0x21&lt;br /&gt;
|0x24&lt;br /&gt;
|0x22&lt;br /&gt;
|0x25&lt;br /&gt;
|0x28&lt;br /&gt;
|0x2B&lt;br /&gt;
|0x29&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x2D&lt;br /&gt;
|0x30&lt;br /&gt;
|0x33&lt;br /&gt;
|0x31&lt;br /&gt;
|0x34&lt;br /&gt;
|0x32&lt;br /&gt;
|0x35&lt;br /&gt;
|-&lt;br /&gt;
|Register for KSL and output levels&lt;br /&gt;
|0x40&lt;br /&gt;
|0x43&lt;br /&gt;
|0x41&lt;br /&gt;
|0x44&lt;br /&gt;
|0x42&lt;br /&gt;
|0x45&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4B&lt;br /&gt;
|0x49&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x4A&lt;br /&gt;
|0x4D&lt;br /&gt;
|0x50&lt;br /&gt;
|0x53&lt;br /&gt;
|0x51&lt;br /&gt;
|0x54&lt;br /&gt;
|0x52&lt;br /&gt;
|0x55&lt;br /&gt;
|}&lt;br /&gt;
For OPL3, these addresses for channels 10 to 18 are the same, but you need to send these registers to 0xD582 (instead of 0xD580), then the value to 0xD581.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38556</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38556"/>
		<updated>2026-04-30T05:59:07Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Calypsi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== CC65 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[cc65]] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Calypsi ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[Calypsi]] wiki page.&lt;br /&gt;
&lt;br /&gt;
Website with all the info: [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[llvm-mos]] wiki page.&lt;br /&gt;
&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[oscar64]] wiki page.&lt;br /&gt;
&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38555</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38555"/>
		<updated>2026-04-30T05:58:55Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Calypsi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== CC65 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[cc65]] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Calypsi ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[Calypsi] wiki page.&lt;br /&gt;
&lt;br /&gt;
Website with all the info: [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[llvm-mos]] wiki page.&lt;br /&gt;
&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[oscar64]] wiki page.&lt;br /&gt;
&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38554</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38554"/>
		<updated>2026-04-30T05:57:42Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* C Compilers */ massive revamp, sent info into separate page per compiler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== CC65 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[cc65]] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Calypsi ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[llvm-mos]] wiki page.&lt;br /&gt;
&lt;br /&gt;
Website with all the info: [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[llvm-mos]] wiki page.&lt;br /&gt;
&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&lt;br /&gt;
Dedicated [[oscar64]] wiki page.&lt;br /&gt;
&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Llvm-mos&amp;diff=38553</id>
		<title>Llvm-mos</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Llvm-mos&amp;diff=38553"/>
		<updated>2026-04-30T05:51:06Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: new llvm-mos page separate from the rest of the C compilers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [https://llvm-mos.org/wiki/Welcome llvm-mos] project is a suite of development tools aimed at 65xx processors. It comes with optimizing C and C++ compilers that are mostly compatible with the C99 and C++11 standards, allowing for modern programming styles.&lt;br /&gt;
&lt;br /&gt;
Foenix F256 support, programming libraries, examples, and installers for Windows, MacOS, and Linux can be found at [https://kangaroopunch.com/view/ShowSoftware?id=13 Kangaroo Punch Studios].&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
You can find the [https://kangaroopunch.com/files/download/software/f256lib.pdf PDF manual linked] at the [https://kangaroopunch.com/view/ShowSoftware?id=13 Kangaroo Punch distribution] of llvm-mos specifically tailored to the F256/Wildbits.&lt;br /&gt;
&lt;br /&gt;
=== Installation procedure ===&lt;br /&gt;
&lt;br /&gt;
Very easy, can be done for Windows running a single batch file, or linux running a single script. Follow the instructions found in the PDF manual linked above.&lt;br /&gt;
&lt;br /&gt;
=== Noteworthy files and folders ===&lt;br /&gt;
&lt;br /&gt;
(some of these are merely suggestions in how to organize your local installation of llvm-mos)&lt;br /&gt;
&lt;br /&gt;
assuming your &#039;&#039;&#039;BASEPATH&#039;&#039;&#039; = the folder where you do your installation,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH\f256dev\foenixmgr&#039;&#039;&#039; a copy of foenixmgr to interact with your machine with the usb debug cable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\code\&#039;&#039;&#039; is a good place to store your projects&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\code\myproject\&#039;&#039;&#039; is the root folder of your project called &#039;myproject&#039; and where the program and linker produced files end up in&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\code\myproject\src\&#039;&#039;&#039; is the folder containing all of your &#039;myproject&#039; source code&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\mos-platform\f256\lib\link.ld&#039;&#039;&#039; a parameter file for the linker options. It&#039;s where you can set the optimization level to -O1, -O2, -O3 or -Os. You can clone this file inside your project folder to let the clone override this main one.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to manage multiple source code files in a project ===&lt;br /&gt;
&lt;br /&gt;
* Create .h + .c pairs of source code files by themes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use &#039;&#039;&#039;#include &amp;quot;../src/whatever.h&amp;quot;&#039;&#039;&#039; so that &#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\code\myproject\src\whatever.c&#039;&#039;&#039; and its corresponding whatever.h are referred to&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Put the entirety of whatever.h&#039;s content between &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#ifndef WHATEVER_H&lt;br /&gt;
#define WHATEVER_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to avoid complaints of multiple definitions if multiple files need this reference.&lt;br /&gt;
&lt;br /&gt;
=== Compiling a program, scripts from Mu0n ===&lt;br /&gt;
&lt;br /&gt;
I use a few batch files that are located in &#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the batch file &amp;quot;c.bat&amp;quot; (compile) I use to simply compile a program, adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;code&amp;quot; folder. Run it using the command &#039;&#039;&#039;c projectname&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call D:\F256\llvm-mos\f256build.bat code/%1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the batch file &amp;quot;car.bat&amp;quot; (compile and run) so that I also execute it to the real machine, using foenixmgr and the usb debug cable. Run it using the command &#039;&#039;&#039;car projectname&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call D:\F256\llvm-mos\f256build.bat code/%1&lt;br /&gt;
call D:\F256\llvm-mos\f256run.bat code/%1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the batch file &amp;quot;cas.bat&amp;quot; (compile and send) so that I also send it to the real machine, using foenixmgr&#039;s pcopy routine to write it to the root of the SD card. Run it using the command &#039;&#039;&#039;cas projectname&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call D:\F256\llvm-mos\f256build.bat code/%1&lt;br /&gt;
copy .\code\%1\%1.pgz D:\F256\FoenixMgr\tools\cmd\&lt;br /&gt;
cd D:\F256\FoenixMgr\tools\cmd\&lt;br /&gt;
call pcopy.bat %1.pgz&lt;br /&gt;
cd D:\F256\llvm-mos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Embedding asset files ===&lt;br /&gt;
&lt;br /&gt;
Assuming your assets are in &#039;&#039;&#039;BASEPATH\f256dev\llvm-mos\code\myproject\assets\&#039;&#039;&#039;, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EMBED(palgrudge, &amp;quot;../assets/grudge.pal&amp;quot;, 0x10000);//1kb&lt;br /&gt;
EMBED(boy1, &amp;quot;../assets/boy1.bin&amp;quot;,   0x10400);//1kb&lt;br /&gt;
EMBED(thing, &amp;quot;../assets/thing.bin&amp;quot;, 0x10800);//1kb&lt;br /&gt;
EMBED(girl1, &amp;quot;../assets/girl1.bin&amp;quot;, 0x10C00);//1kb&lt;br /&gt;
EMBED(cath, &amp;quot;../assets/cath.bin&amp;quot;,   0x11000);//1kb&lt;br /&gt;
EMBED(cat, &amp;quot;../assets/cat.bin&amp;quot;,     0x11400);//1kb&lt;br /&gt;
EMBED(dash, &amp;quot;../assets/dash.bin&amp;quot;,   0x13000); //2kb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to use higher memory and the MMU to store code ===&lt;br /&gt;
(this section is credited to jbaker8935)&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessing the extra 2x core banks of 512kb memory ===&lt;br /&gt;
&lt;br /&gt;
Since the launch of the 2x core, the full 2MB of SRAM is accessible if you set a bit right in register 0x0000. For more details on this feature of the 2x core, see this page.&lt;br /&gt;
&lt;br /&gt;
To peek a byte at these regions of memory, use this asm block routine as a function:&lt;br /&gt;
&lt;br /&gt;
PEEK24 accepts a 32bit long address, stores it temporarily into a few bytes near the beginning of zero page. It then activates bit 3 of register 0x0000 to access the new 2x core higher memory banks. Finally, it fetches the content of that byte as a returned char.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
asm (&lt;br /&gt;
    &amp;quot;.text                  \n&amp;quot;&lt;br /&gt;
    &amp;quot;.global PEEK24         \n&amp;quot;&lt;br /&gt;
    &amp;quot;PEEK24:                \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $5          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   stx     $6          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   lda     __rc2       \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $7          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldx     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldy     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   txa                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ora     #$8         \n&amp;quot;&lt;br /&gt;
    &amp;quot;   php                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sei                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   tya                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ora     #48         \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   .byte   0xa7,0x05   \n&amp;quot;&lt;br /&gt;
    &amp;quot;   stx     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sty     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   plp                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldx     #0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   rts                 \n&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write something to these higher memory banks, you can use POKE24, which goes the other way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
asm (&lt;br /&gt;
    &amp;quot;.text                  \n&amp;quot;&lt;br /&gt;
    &amp;quot;.global POKE24         \n&amp;quot;&lt;br /&gt;
    &amp;quot;POKE24:                \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $5          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   stx     $6          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   lda     __rc2       \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $7          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldx     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldy     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   txa                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ora     #$8         \n&amp;quot;&lt;br /&gt;
    &amp;quot;   php                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sei                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   tya                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ora     #$48         \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sta     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   lda     __rc4       \n&amp;quot;&lt;br /&gt;
    &amp;quot;   .byte   0x87,0x05   \n&amp;quot;&lt;br /&gt;
    &amp;quot;   stx     $0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   sty     $1          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   plp                 \n&amp;quot;&lt;br /&gt;
    &amp;quot;   ldx     #0          \n&amp;quot;&lt;br /&gt;
    &amp;quot;   rts                 \n&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Troubleshoot Gotchas&amp;quot; during compilation ===&lt;br /&gt;
&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
3) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
4) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
5) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38552</id>
		<title>Oscar64</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38552"/>
		<updated>2026-04-29T20:53:59Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Accessing the extra 2x core banks of 512kb memory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
=== Installation procedure ===&lt;br /&gt;
(this is from Mu0n, under Windows 11 but using a WSL command window)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Noteworthy files and folders ===&lt;br /&gt;
&lt;br /&gt;
(some of these are merely suggestions in how to organize your local installation of oscar64)&lt;br /&gt;
&lt;br /&gt;
assuming your &#039;&#039;&#039;BASEPATH&#039;&#039;&#039; = the folder where you do your installation,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/&#039;&#039;&#039; is where the compiler should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/&#039;&#039;&#039; is where the F256/wildbits libraries for oscar64 should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/&#039;&#039;&#039; is the folder containing all the library files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/f256lib.c&#039;&#039;&#039; is the master library file, also has a corresponding f256lib.h header file and loads all the rest.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039; is a good place to store your projects&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/&#039;&#039;&#039; is the root folder of your project called &#039;myproject&#039; and where the program and linker produced files end up in&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/&#039;&#039;&#039; is the folder containing all of your source code&lt;br /&gt;
&lt;br /&gt;
=== How to manage multiple source code files in a project ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Compiling a program, scripts from Mu0n ===&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./c.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./car.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Embedding asset files ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to use higher memory and the MMU to store code ===&lt;br /&gt;
&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accessing the extra 2x core banks of 512kb memory ===&lt;br /&gt;
&lt;br /&gt;
Since the launch of the 2x core, the full 2MB of SRAM is accessible if you set a bit right in register 0x0000. For more details on this feature of the 2x core, [[Use the Core2x|see this page]].&lt;br /&gt;
&lt;br /&gt;
To peek a byte at these regions of memory, use this asm block as an oscar64 function:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;peek24&#039;&#039;&#039; accepts a 32bit long address, stores it temporarily into a few bytes near the beginning of zero page. It then activates bit 3 of register 0x0000 to access the new 2x core higher memory banks. Finally, it fetches the content of that byte as a returned char.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char peek24(unsigned long addr)&lt;br /&gt;
{&lt;br /&gt;
    return __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
		&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
&lt;br /&gt;
        byt 0xa7&lt;br /&gt;
	byt 0x05&lt;br /&gt;
		&lt;br /&gt;
        stx 0x00&lt;br /&gt;
        sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
&lt;br /&gt;
        sta accu&lt;br /&gt;
        lda #0&lt;br /&gt;
        sta accu+1&lt;br /&gt;
	};&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write something to these higher memory banks, you can use &#039;&#039;&#039;poke24&#039;&#039;&#039;, which goes the other way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void poke24(unsigned long addr, unsigned char value)&lt;br /&gt;
{&lt;br /&gt;
    __asm {&lt;br /&gt;
	lda addr&lt;br /&gt;
	sta 0x05&lt;br /&gt;
	lda addr+1&lt;br /&gt;
	sta 0x06&lt;br /&gt;
	lda addr+2&lt;br /&gt;
	sta 0x07&lt;br /&gt;
				&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
	txa&lt;br /&gt;
		&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
		&lt;br /&gt;
        lda value&lt;br /&gt;
        &lt;br /&gt;
	byt 0x87&lt;br /&gt;
	byt 0x05&lt;br /&gt;
	stx 0x00&lt;br /&gt;
	sty 0x01&lt;br /&gt;
		&lt;br /&gt;
	plp&lt;br /&gt;
	ldx #0x00&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Troubleshoot Gotchas&amp;quot; during compilation ===&lt;br /&gt;
&lt;br /&gt;
None to report so far.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38551</id>
		<title>Oscar64</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Oscar64&amp;diff=38551"/>
		<updated>2026-04-29T20:52:11Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: Created page with &amp;quot;==== Documentation ====  The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md  === Installation procedure === (this is from Mu0n, under Windows 11 but using a WSL command window)  &amp;lt;blockquote&amp;gt;Assumptions:  * Windows&amp;#039; WSL is installed (ie with Ubuntu) * Python is installed inside windows * make is installed inside WSL * gcc is installed inside WSL (&amp;#039;&amp;#039;&amp;#039;sudo apt install build-essential&amp;#039;&amp;#039;&amp;#039;) &amp;lt;/blockquote&amp;gt;  Step 1) in W...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
=== Installation procedure ===&lt;br /&gt;
(this is from Mu0n, under Windows 11 but using a WSL command window)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Noteworthy files and folders ===&lt;br /&gt;
&lt;br /&gt;
(some of these are merely suggestions in how to organize your local installation of oscar64)&lt;br /&gt;
&lt;br /&gt;
assuming your &#039;&#039;&#039;BASEPATH&#039;&#039;&#039; = the folder where you do your installation,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/&#039;&#039;&#039; is where the compiler should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/&#039;&#039;&#039; is where the F256/wildbits libraries for oscar64 should be installed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/&#039;&#039;&#039; is the folder containing all the library files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/f256lib/f256lib.c&#039;&#039;&#039; is the master library file, also has a corresponding f256lib.h header file and loads all the rest.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039; is a good place to store your projects&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/&#039;&#039;&#039; is the root folder of your project called &#039;myproject&#039; and where the program and linker produced files end up in&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/myproject/src/&#039;&#039;&#039; is the folder containing all of your source code&lt;br /&gt;
&lt;br /&gt;
=== How to manage multiple source code files in a project ===&lt;br /&gt;
&lt;br /&gt;
To do.&lt;br /&gt;
&lt;br /&gt;
=== Compiling a program, scripts from Mu0n ===&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./c.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./car.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Embedding asset files ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to use higher memory and the MMU to store code ===&lt;br /&gt;
&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accessing the extra 2x core banks of 512kb memory ===&lt;br /&gt;
&lt;br /&gt;
Since the launch of the 2x core, the full 2MB of SRAM is accessible if you set a bit right in register 0x0000. For more details on this feature of the 2x core, [[Use_the_Core2x|see this page]].&lt;br /&gt;
&lt;br /&gt;
To peek a byte at these regions of memory, use this asm block as an oscar64 function:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;peek24&#039;&#039;&#039; accepts a 32bit long address, stores it temporarily into a few bytes near the beginning of zero page. It then activates bit 3 of register 0x0000 to access the new 2x core higher memory banks. Finally, it fetches the content of that byte as a returned char.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char peek24(unsigned long addr)&lt;br /&gt;
{&lt;br /&gt;
    return __asm {&lt;br /&gt;
		lda addr&lt;br /&gt;
		sta 0x05&lt;br /&gt;
		lda addr+1&lt;br /&gt;
		sta 0x06&lt;br /&gt;
		lda addr+2&lt;br /&gt;
		sta 0x07&lt;br /&gt;
		&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
		txa&lt;br /&gt;
&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
&lt;br /&gt;
        byt 0xa7&lt;br /&gt;
		byt 0x05&lt;br /&gt;
		&lt;br /&gt;
        stx 0x00&lt;br /&gt;
        sty 0x01&lt;br /&gt;
		&lt;br /&gt;
		plp&lt;br /&gt;
&lt;br /&gt;
        sta accu&lt;br /&gt;
        lda #0&lt;br /&gt;
        sta accu+1&lt;br /&gt;
		};&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write something to these higher memory banks, you can use &#039;&#039;&#039;poke24&#039;&#039;&#039;, which goes the other way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void poke24(unsigned long addr, unsigned char value)&lt;br /&gt;
{&lt;br /&gt;
    __asm {&lt;br /&gt;
		lda addr&lt;br /&gt;
		sta 0x05&lt;br /&gt;
		lda addr+1&lt;br /&gt;
		sta 0x06&lt;br /&gt;
		lda addr+2&lt;br /&gt;
		sta 0x07&lt;br /&gt;
				&lt;br /&gt;
        ldx 0x00&lt;br /&gt;
        ldy 0x01&lt;br /&gt;
		txa&lt;br /&gt;
		&lt;br /&gt;
        ora #0x08&lt;br /&gt;
        php&lt;br /&gt;
        sei&lt;br /&gt;
        sta 0x00&lt;br /&gt;
        tya&lt;br /&gt;
        ora #0x30&lt;br /&gt;
        sta 0x01&lt;br /&gt;
		&lt;br /&gt;
        lda value&lt;br /&gt;
        &lt;br /&gt;
		byt 0x87&lt;br /&gt;
		byt 0x05&lt;br /&gt;
		stx 0x00&lt;br /&gt;
		sty 0x01&lt;br /&gt;
		&lt;br /&gt;
		plp&lt;br /&gt;
		ldx #0x00&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Troubleshoot Gotchas&amp;quot; during compilation ===&lt;br /&gt;
&lt;br /&gt;
None to report so far.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38550</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38550"/>
		<updated>2026-04-28T20:50:55Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Compiling a program, scripts from Mu0n */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trampoline scheme for functions in higher memory ====&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Call into overlay 2 via trampoline (in main memory)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
==== Compiling a program, scripts from Mu0n ====&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./c.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &#039;&#039;&#039;./car.sh myprojectname&#039;&#039;&#039;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38549</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38549"/>
		<updated>2026-04-28T20:48:58Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Compiling a program, scripts from Mu0n */ car script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trampoline scheme for functions in higher memory ====&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Call into overlay 2 via trampoline (in main memory)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
==== Compiling a program, scripts from Mu0n ====&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./c.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./car.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 5. TRANSFER ---&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Transferring to F256K2 via Windows Python...&amp;quot;&lt;br /&gt;
    # We use the Windows path for the file we just built&lt;br /&gt;
    WIN_BIN_PATH=&amp;quot;D:\\F256\\f256lib-oscar64\\doodles\\${PROJ_NAME}\\${BIN_FILE}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    $PYTHON_EXE &amp;quot;$FOENIX_MGR&amp;quot; --port COM8 --run-pgz &amp;quot;$WIN_BIN_PATH&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Compilation failed.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38548</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38548"/>
		<updated>2026-04-28T20:48:06Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Trampoline scheme for functions in higher memory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trampoline scheme for functions in higher memory ====&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Call into overlay 2 via trampoline (in main memory)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
==== Compiling a program, scripts from Mu0n ====&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./c.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./car.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38547</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38547"/>
		<updated>2026-04-28T20:47:27Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Trampoline scheme for functions in higher memory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trampoline scheme for functions in higher memory ====&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OVL1_BLOCK 8 // Physical 0x10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #pragma directive such as:&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Call into overlay 2 via trampoline (in main memory)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
==== Compiling a program, scripts from Mu0n ====&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./c.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./car.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38546</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38546"/>
		<updated>2026-04-28T20:45:09Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: more details for oscar64&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trampoline scheme for functions in higher memory ====&lt;br /&gt;
Much like assets, you will have to use the #pragma directive to set up a section and region for each chunk of RAM. Since a trampoline scheme gets used here in conjunction with the machine&#039;s MMU, these regions should be 0x2000 big, or 8kb.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these chunks of RAM will be swapped in and out of the 0xA000 to 0xBFFF 8kb chunk visible by the CPU. &lt;br /&gt;
&lt;br /&gt;
Here is the list of stuff you must define for it to work:&lt;br /&gt;
&lt;br /&gt;
* A specific number for your code&#039;s block = physical address / 0x2000 you have in mind to stash your code. For example, to use the 8kb of code space between 0x10000 and 0x11FFF, this will be &amp;quot;overlay block 8&amp;quot;. For the space between 0x12000 and 0x13FFF, this is &amp;quot;overlay block 9&amp;quot;&lt;br /&gt;
* #pragma directive such as:&amp;lt;pre&amp;gt;&lt;br /&gt;
// Overlay 1: stored at physical 0x10000, compiled to run at 0xA000&lt;br /&gt;
#pragma section( ovl1_code, 0 )&lt;br /&gt;
#pragma region( ovl1, 0x10000, 0x12000, , , { ovl1_code }, 0xA000 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Forward declaration of a trampoline function used to access the higher memory function, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
// Forward declarations of trampolines (in main code, always visible)&lt;br /&gt;
// ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Trampolines save the current bank 5 mapping, switch to the target&lt;br /&gt;
// overlay&#039;s physical block, call the FAR function, then restore the&lt;br /&gt;
// original mapping.  This supports nested cross-overlay calls.&lt;br /&gt;
&lt;br /&gt;
void firstSegment(int arg1, int arg2) {&lt;br /&gt;
	volatile byte saved = PEEK(OVERLAY_MMU_REG);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, OVL1_BLOCK);&lt;br /&gt;
	FAR_firstSegment(arg1, arg2);&lt;br /&gt;
	POKE(OVERLAY_MMU_REG, saved);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Your far memory function in between #pragma code directives:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma code( ovl1_code )&lt;br /&gt;
&lt;br /&gt;
void FAR_firstSegment(int arg1, int arg2) {&lt;br /&gt;
	textPrint(&amp;quot;firstSegment = &amp;quot;);&lt;br /&gt;
	textPrintInt((int32_t)(arg1 + arg2));&lt;br /&gt;
	textPrint(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Call into overlay 2 via trampoline (in main memory)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma code( code ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;Note: it&#039;s perfectly ok to define multiples of these high memory regions. One far memory function can call another far memory function from another region without issue, but it has to call it through its lower memory trampoline.&lt;br /&gt;
&lt;br /&gt;
==== Compiling a program, scripts from Mu0n ====&lt;br /&gt;
I use a pair of scripts that are located in BASEPATH/f256lib-oscar64/doodles/&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the shell script (&amp;quot;c.sh&amp;quot;) I use to simply compile a program, this works regardless if your project uses one .c file or multiples. Adjust your absolute paths to what you have on your modern computer. &amp;quot;projectname&amp;quot; is the folder of your project inside the &amp;quot;doodles&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./c.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 1. CONFIGURATION ---&lt;br /&gt;
OSCAR_BIN=&amp;quot;/mnt/d/F256/oscar64/bin/oscar64&amp;quot;&lt;br /&gt;
# Use the Windows python launcher (it handles COM8 perfectly)&lt;br /&gt;
PYTHON_EXE=&amp;quot;python.exe&amp;quot; &lt;br /&gt;
# Use the Windows path for the script (escaped backslashes)&lt;br /&gt;
FOENIX_MGR=&amp;quot;D:\\F256\\llvm-mos\\f256dev\\FoenixMgr\\FoenixMgr\\fnxmgr.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 2. ARGUMENTS ---&lt;br /&gt;
PROJ_NAME=&amp;quot;$1&amp;quot;&lt;br /&gt;
SRC_DIR=&amp;quot;${PROJ_NAME}/src/&amp;quot;&lt;br /&gt;
SRC_FILE=&amp;quot;${PROJ_NAME}/src/${PROJ_NAME}.c&amp;quot;&lt;br /&gt;
OUT_DIR=&amp;quot;${PROJ_NAME}/&amp;quot;&lt;br /&gt;
BIN_FILE=&amp;quot;${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
FLAGS=&amp;quot;-tm=f256k -n -v -i=../f256lib&amp;quot;&lt;br /&gt;
# --- 3. Gather all files in src/&lt;br /&gt;
&lt;br /&gt;
mapfile -t CFILES &amp;lt; &amp;lt;(find &amp;quot;$SRC_DIR&amp;quot; -maxdepth 1 -type f -name &amp;quot;*.c&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# --- 4. COMPILE ---&lt;br /&gt;
echo &amp;quot;Compiling:&amp;quot;&lt;br /&gt;
printf &#039;%s\n&#039; &amp;quot;${CFILES[@]}&amp;quot;&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;Linking into ${OUT_DIR}/${PROJ_NAME}.pgz&amp;quot;&lt;br /&gt;
$OSCAR_BIN $FLAGS &amp;quot;${CFILES[@]}&amp;quot; -o=&amp;quot;./$OUT_DIR/$PROJ_NAME.pgz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Here&#039;s the shell script (&amp;quot;car.sh&amp;quot; = Compile And Run) I use to compile a program and send it over to my Wildbits through the foenixmgr script. This assumes that your host is win11 and python is run from that, from inside WSL ubuntu. Tweak to your setup&#039;s situation, of course.&lt;br /&gt;
&lt;br /&gt;
run it using the command &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;./car.sh myprojectname&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38545</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38545"/>
		<updated>2026-04-28T20:26:03Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* C Compilers */ oscar64 main link up top&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* [https://github.com/sdwfrost/oscar64 oscar64] (read below for detailed install instructions)&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38544</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38544"/>
		<updated>2026-04-28T20:24:08Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: embedding assets for oscar64&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
The main documentation website is located here: https://github.com/drmortalwombat/oscar64/blob/main/oscar64.md&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Embedding assets ====&lt;br /&gt;
Here&#039;s an example of a few assets loaded in a specific spot in memory, starting from 0x10000. It needs to be part of a section, then a region and then some array identifiers that point to the data itself. When the project compiles, you can check out the layout of the memory being used inside your .map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * The following assets will be located within these bounds&lt;br /&gt;
 *&lt;br /&gt;
10000 - 10400 : grupal, DATA:assets&lt;br /&gt;
10400 - 10800 : sBoy1, DATA:assets&lt;br /&gt;
10800 - 10c00 : sThing, DATA:assets&lt;br /&gt;
10c00 - 11000 : sGirl1, DATA:assets&lt;br /&gt;
11000 - 11400 : sCath, DATA:assets&lt;br /&gt;
11400 - 11800 : sCat, DATA:assets&lt;br /&gt;
11800 - 12000 : sDash, DATA:assets&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma section( assets, 0 )&lt;br /&gt;
#pragma region( assets, 0x10000, 0x20000, , , {assets} )&lt;br /&gt;
#pragma data(assets)&lt;br /&gt;
__export const char grupal[] = {    //1kb palette from 0x10000 to 0x103FF&lt;br /&gt;
	#embed &amp;quot;../assets/grudge.pal&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sBoy1[] = {  //16x16 sprite of 1kb from 0x10400 to 0x107FF&lt;br /&gt;
	#embed &amp;quot;../assets/boy1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sThing[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/thing.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sGirl1[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/girl1.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCath[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cath.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sCat[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/cat.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
__export const char sDash[] = {&lt;br /&gt;
	#embed &amp;quot;../assets/dash.bin&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//return to normalcy&lt;br /&gt;
#pragma data(data)&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38535</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38535"/>
		<updated>2026-04-19T16:16:57Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */ added the vgm for hackGfx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|hackGfx&lt;br /&gt;
|Tile scrolling red pixels demo with short opl3 playback loop&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/hackGfx.pgz &lt;br /&gt;
* spacebar to toggle text&lt;br /&gt;
* S to toggle music&lt;br /&gt;
* backarrow to quit&lt;br /&gt;
it requires sshockt.vgm located in media/vgm/ in order to work with the music&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sshockt.vgm&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38534</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38534"/>
		<updated>2026-04-19T16:11:25Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */ hackGfx demo is added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|hackGfx&lt;br /&gt;
|Tile scrolling red pixels demo with short opl3 playback loop&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/hackGfx.pgz &lt;br /&gt;
* spacebar to toggle text&lt;br /&gt;
* S to toggle music&lt;br /&gt;
* backarrow to quit&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38533</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38533"/>
		<updated>2026-04-18T23:35:21Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&amp;lt;nowiki/&amp;gt;this is v0.9, the memtext layer is buggy and L0 and L1 for tiles are absent for now.&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38532</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38532"/>
		<updated>2026-04-18T23:34:48Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */ Mu0n&amp;#039;s gfxDemo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|gfxDemo&lt;br /&gt;
|Vicky graphics layer demo showcasing: mouse, reg text mode, mem text mode, 3 bitmaps, 3 tiles, sprites, palette swaps&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/gfxDemo.pgz&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38531</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38531"/>
		<updated>2026-04-18T20:24:57Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories media/palettes/, media/tiles/ and media/sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38530</id>
		<title>Software for 6502</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Software_for_6502&amp;diff=38530"/>
		<updated>2026-04-18T19:30:23Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Demos */ rpg-demo from Ernesto in demos/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note that when an hex address is given, it&#039;s meant to instruct as to which address to bload or to send (ie foenixmgr python script) the program (ie a .bin file) to before running it. For extra help on how to run .bin files and almost every possible scheme that has to be used to run program, you can consult this video that&#039;s also part of [[Getting Started]], this one: https://www.youtube.com/watch?v=0ShFv89KGDs&lt;br /&gt;
&lt;br /&gt;
Many download links are posts in the main [https://discord.gg/9vjUEGgcUS Foenix Retro Systems discord server] which will require you to join in order to get to them.&lt;br /&gt;
&lt;br /&gt;
A [[Getting Started#Demos Archive|Demo Archive]] was put together in September 2023 to get ready to show to youtubers, some of these are linked once more, in this page.   &lt;br /&gt;
&lt;br /&gt;
There&#039;s also the Foenix Marketplace website maintained by EMWhite with its own collection of articles and software http://apps.emwhite.org/foenixmarketplace/.  &lt;br /&gt;
&lt;br /&gt;
===== Curated SD card collection of games, demos, utilities =====&lt;br /&gt;
Here is a download link to a zip file meant to be extracted into the root of an SD card: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
&lt;br /&gt;
Best to wipe out your SD card and start anew with the contents of this extracted to root. Micah&#039;s file manager doesn&#039;t like long lists of files so it really is best to not overdo it. I tried to minimize the files in root, but I couldn&#039;t for everything.&lt;br /&gt;
&lt;br /&gt;
Open the readme.txt file with moreorless to see some instructions about the collection. Best to run /- fm first, then open the readme.txt from it&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|F256 f/term&lt;br /&gt;
|Terminal emulator for F256K and Jr with classic (flat) memory load&lt;br /&gt;
|Micah&lt;br /&gt;
| - fterm.pgZ or use f/manager&lt;br /&gt;
|https://github.com/WartyMN/F256-terminal/blob/main/release/fterm.pgZ&lt;br /&gt;
|-&lt;br /&gt;
|FoenixTarot&lt;br /&gt;
|Tarot card readings in SuperBasic&lt;br /&gt;
|Mike&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/mcassera/FoenixTarot/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|Forthf256&lt;br /&gt;
|Forth implementation&lt;br /&gt;
|Vasyl&lt;br /&gt;
|pgz in its forth/ folder&lt;br /&gt;
|https://github.com/VasylTsv/ForthX16&lt;br /&gt;
|-&lt;br /&gt;
|WildBits Graphic Toolkit&lt;br /&gt;
|(fmr. F256-GraphicToolkit) Sprite editor, Tilemap editor, Font editor + misc tools&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/F256-GraphicToolkit/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|badapple&lt;br /&gt;
|A 80x60 textmode port of Bad Apple, uses the VS1053b for quality mp3 audio. Needs a Jr2 or K2!&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz*&lt;br /&gt;
|*unzip badapple.zip into the root of your SD card. If done right, the 3 files within will be in the demos/ folder. The program expects its data file there when it runs. https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/badapple.zip&lt;br /&gt;
|-&lt;br /&gt;
|balls&lt;br /&gt;
|Draw a good quantity of multiplexed sprites, fast. Balls bouncing around&lt;br /&gt;
|celton&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/FoenixRetro/demos/blob/main/MultiplexedSprites.md&lt;br /&gt;
|-&lt;br /&gt;
|F256Archon&lt;br /&gt;
|Splash screen intro, plays MIDI using the SAM2695, requires a K2 or Jr2&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256Archon/releases&lt;br /&gt;
|-&lt;br /&gt;
|f256_life&lt;br /&gt;
|An implementation of Conway&#039;s game of life&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_life&lt;br /&gt;
|-&lt;br /&gt;
|F256 Mandelbrot&lt;br /&gt;
|Draws Mandelbrot set fast (5 mins) using coprocessor math. Allows to zoom into the set.&lt;br /&gt;
|mgr42&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|https://github.com/rmsk2/F256_Mandelbrot&lt;br /&gt;
|-&lt;br /&gt;
|F256ShowCase&lt;br /&gt;
|Shows sliding tiling graphics, moves with joystick&lt;br /&gt;
|eriktier&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/pig-games/F256Showcase&lt;br /&gt;
|-&lt;br /&gt;
|fnxmas23 &lt;br /&gt;
|PSG mod music, scrolling text, sound effects, must see demo!&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/xmas24_k2.pgz revised version that can run on wave 2 Jr2 and K2 as well&lt;br /&gt;
|-&lt;br /&gt;
|foenixmas23&lt;br /&gt;
|Xmas 2023 demo with SID music from the classic 1983 C64 xmas demo&lt;br /&gt;
|EMWhite&lt;br /&gt;
|uses basic loader&lt;br /&gt;
|http://apps.emwhite.org/shared-files/815/?foenixmas23.zip&lt;br /&gt;
|-&lt;br /&gt;
|livingworlds&lt;br /&gt;
|Living Worlds, a port of a color cycling by Mark Ferrari, ported here on the F256 by haydenkale&lt;br /&gt;
|haydenkale&lt;br /&gt;
|$0000&lt;br /&gt;
|https://github.com/clandrew/livingworlds/tree/e4532e0d530b76ccb90368fdf5ad10bfa2deeb12&lt;br /&gt;
|-&lt;br /&gt;
|mandel&lt;br /&gt;
|Will draw a mandelbrot set in 3 hours, more useful as a stability test than a useful fractal program&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#fractal&lt;br /&gt;
|-&lt;br /&gt;
|mariobros&lt;br /&gt;
|Tilemap and platformer test based on Mario Bros. (1983)&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/mariobros&lt;br /&gt;
|-&lt;br /&gt;
|pendulum&lt;br /&gt;
|Sprite and MIDI demo&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/pendulum&lt;br /&gt;
|-&lt;br /&gt;
|rpg-demo&lt;br /&gt;
|A Vicky graphic layers demos of sprites and layers, controlled by joy2&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|bas&lt;br /&gt;
|unzip the following zip file into the root of your SD card. By doing so, various asset files will be put into the directories palettes/, tiles/ and sprites/. the .bas itself can be put anywhere.&lt;br /&gt;
https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/rpg-demo.zip&lt;br /&gt;
|-&lt;br /&gt;
|wormhole&lt;br /&gt;
|Shows a fast wireframe animation of a wormhole&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz or bin at $0000&lt;br /&gt;
|https://github.com/clandrew/wormhole?tab=readme-ov-file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|bbombers&lt;br /&gt;
|Boulder Bombers (Alpha-2)  Clone of Canyon Bombers&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/BoulderBombers&amp;lt;nowiki/&amp;gt;https://github.com/scttgs0/BoulderBombers/releases/tag/alpha_2&lt;br /&gt;
|-&lt;br /&gt;
|Bombsweeper&lt;br /&gt;
|Bomb sweeper port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/855689509520932885/1196352934083035156&lt;br /&gt;
|-&lt;br /&gt;
|Cosmic&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/1054250238308790342/1175982979537969214&lt;br /&gt;
|-&lt;br /&gt;
|F256-Trek&lt;br /&gt;
|Updated Trek, with modern F256 Graphics&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|[https://github.com/econtrerasd/Trek-F256/releases/tag/v1.0 https://github.com/econtrerasd/Trek-F256/releases]&lt;br /&gt;
|-&lt;br /&gt;
|F256 two to the power of eleven&lt;br /&gt;
|Port of the puzzle game of 2048&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/F256_2048&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fillerup&lt;br /&gt;
|Fill &#039;er Up (WIP)&lt;br /&gt;
Qix-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Fill-er-up&lt;br /&gt;
|-&lt;br /&gt;
|FusionDrive&lt;br /&gt;
|An outrun type game that also plays a MIDI soundtrack&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|wip v0.2, can use a NES pad #1 to move around, or left/right arrow keys currently https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jewelkeeper&lt;br /&gt;
|Sokoban port&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/raw/refs/heads/main/apps/jewelkeeper.pgz&amp;lt;nowiki/&amp;gt;You can now specify a level file when loading the game &amp;lt;code&amp;gt;/- jewelkeeper.pgz &amp;lt;levels.txt&amp;gt;&amp;lt;/code&amp;gt;.  Find more levels at https://www.sourcecode.se/sokoban/levels.php.  Keep in mind the maximum level dimension is 20x15, anything larger will be ignored&lt;br /&gt;
|-&lt;br /&gt;
|Jr Wördl&lt;br /&gt;
|port of Wordle&lt;br /&gt;
|AgeAgeEye&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/ageageeye/Superbasic-F256Jr-examples&lt;br /&gt;
|-&lt;br /&gt;
|kartdemo&lt;br /&gt;
|Kart racing game&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225217654487253094/1228246780840513556&lt;br /&gt;
|-&lt;br /&gt;
|Lair of the Lich King&lt;br /&gt;
|Rogue like dungeon crawler. Demo has 3 levels; full has 25+&lt;br /&gt;
|Micah&lt;br /&gt;
| - lkdemo/lk.pgz&lt;br /&gt;
|[https://discord.com/channels/691915291721990194/1230670413361844244/1317256215566487593 1.0 Beta 19 Demo]&lt;br /&gt;
|-&lt;br /&gt;
|livewire&lt;br /&gt;
|Livewire (WIP)&lt;br /&gt;
Tempest-like game&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/Livewire&lt;br /&gt;
|-&lt;br /&gt;
|Maze-Munch&lt;br /&gt;
|Pac-Man clone&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/Maze-Munch&lt;br /&gt;
|-&lt;br /&gt;
|pdefense&lt;br /&gt;
|Planetary Defense (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgx&lt;br /&gt;
mouse&lt;br /&gt;
atari joystick&lt;br /&gt;
|https://github.com/scttgs0/PlanetaryDefense&lt;br /&gt;
|-&lt;br /&gt;
|Shanghai/Mahjongg&lt;br /&gt;
|A clone of Shanghai. Also known as Mahjongg&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz or KUP&lt;br /&gt;
mouse needed&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong&lt;br /&gt;
|-&lt;br /&gt;
|Ski-Jr&lt;br /&gt;
|Ski game downhill&lt;br /&gt;
|digarok&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/blob/main/ski-jr.bas&lt;br /&gt;
|-&lt;br /&gt;
|Track &amp;amp; Field&lt;br /&gt;
|Olympic Game by Konami (WIP)&lt;br /&gt;
|Scott (xDraconian)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tetris&lt;br /&gt;
|Good old 80&#039;s game&lt;br /&gt;
|Daniel Tremblay (Grenouye)&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick or keyboard&lt;br /&gt;
|https://github.com/dtremblay/c256-tetris/tree/f256k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #01 - April 6th/7th 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|15puzzle&lt;br /&gt;
|Number sort puzzle&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_15puzzle/releases&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Flight Simulator&lt;br /&gt;
|flying simulator&lt;br /&gt;
|sduensin&lt;br /&gt;
|pgz&lt;br /&gt;
|https://cdn.discordapp.com/attachments/1225481966200029286/1227764847819620454/shotel.pgz&lt;br /&gt;
|-&lt;br /&gt;
|frisbee&lt;br /&gt;
|Frisbee throw past sport game&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/f256/blob/develop/merlin32/frisbee/frisbee.pgz&lt;br /&gt;
|-&lt;br /&gt;
|Impasse&lt;br /&gt;
|Shoot &#039;em up&lt;br /&gt;
|digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1227075699895046235&lt;br /&gt;
|-&lt;br /&gt;
|soccur&lt;br /&gt;
|mutliplayer game of soccer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|executable:https://discord.com/channels/691915291721990194/1225481966200029286/1226808228948611184&lt;br /&gt;
source code:&lt;br /&gt;
https://discord.com/channels/691915291721990194/1225481966200029286/1226812472069980232&lt;br /&gt;
|-&lt;br /&gt;
|Trek&lt;br /&gt;
|port of classic Star Trek game&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1225481966200029286/1226727849944289341&lt;br /&gt;
|-&lt;br /&gt;
|Typing Star&lt;br /&gt;
|typing reaction game&lt;br /&gt;
|haydenkale&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/clandrew/typestar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #02 - October 25th-November 1st 2024 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Bach&#039;s MIDI Hero&lt;br /&gt;
|Free MIDI/PSG play + note play tutorial&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
the MIDI feature requires a F256K2 or F256Jr2; a legacy PSG option also allows F256K and F256Jr to still hear it. Optionally uses a MIDI in controller plugged in.&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/releases/download/v1.2/BachHero.pgz&lt;br /&gt;
|-&lt;br /&gt;
|f256_snake&lt;br /&gt;
|&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz. Use cursor keys, Atari joystick or SNES pad to play&lt;br /&gt;
|https://github.com/rmsk2/f256_snake&lt;br /&gt;
|-&lt;br /&gt;
|fnxsnake&lt;br /&gt;
|&lt;br /&gt;
|silk-neon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/ksiondag/fnxsnake&lt;br /&gt;
|-&lt;br /&gt;
|The Hallow&lt;br /&gt;
|&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamOct2024&lt;br /&gt;
|-&lt;br /&gt;
|Halloween Birthday&lt;br /&gt;
|&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/GameJam2024_F256K&lt;br /&gt;
|-&lt;br /&gt;
|Haunted Mansion&lt;br /&gt;
|&lt;br /&gt;
|digarok&lt;br /&gt;
|superbasic&lt;br /&gt;
|https://github.com/digarok/fnxgamejam-haunted-mansion&lt;br /&gt;
|-&lt;br /&gt;
|Kooyan&lt;br /&gt;
|&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dtremblay/kooyan.git&lt;br /&gt;
|-&lt;br /&gt;
|Spooky Run&lt;br /&gt;
|&lt;br /&gt;
|dwsJason&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/dwsJason/spooky&lt;br /&gt;
|-&lt;br /&gt;
|Trick or Treat&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/TrickOrTreat&lt;br /&gt;
|-&lt;br /&gt;
|Ultima III - Exodus&lt;br /&gt;
|port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Ultima_3&lt;br /&gt;
|-&lt;br /&gt;
|Warlock&lt;br /&gt;
|remake of 68000 game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
atari joystick&lt;br /&gt;
DOWN=change_level&lt;br /&gt;
UP=jump&lt;br /&gt;
UP-LEFT=leap&lt;br /&gt;
UP-RIGHT=leap&lt;br /&gt;
|https://github.com/scttgs0/Foenix_GameJam_Oct2024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Jam #03 - April 18th-April 27th 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Arcade Shanghai v1.2&lt;br /&gt;
|Shanghai clone&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic, keep the .bas program in root, the rest in the provided ashanghai/ folder&lt;br /&gt;
|https://github.com/econtrerasd/ashanghai/releases&lt;br /&gt;
|-&lt;br /&gt;
|Bawk Bawk Cluck Cluck&lt;br /&gt;
|Chicken themed platformer&lt;br /&gt;
|beethead&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/noyen1973/FoenixGameJamApr2025&lt;br /&gt;
|-&lt;br /&gt;
|BitLadder&lt;br /&gt;
|Shoot &#039;Em Up&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz. For full sound compatibility, a Jr2 or K2 is needed. &lt;br /&gt;
Uses 4 sound chips! (PSG, SID, OPL3, MIDI)&lt;br /&gt;
|https://mu0n.itch.io/bitladder&lt;br /&gt;
|-&lt;br /&gt;
|F256_Commando&lt;br /&gt;
|Commando port&lt;br /&gt;
|SprySloth&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/cmassat/F256_Commando&lt;br /&gt;
|-&lt;br /&gt;
|F256_LodeRunner&lt;br /&gt;
|Lode Runner port&lt;br /&gt;
|Minstrel Dragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/minstreldragon/F256_Loderunner/releases&lt;br /&gt;
|-&lt;br /&gt;
|Mahjong&lt;br /&gt;
|Shangai clone&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/f256_mahjong/releases&lt;br /&gt;
|-&lt;br /&gt;
|Quarth&lt;br /&gt;
|Block placement arcade game&lt;br /&gt;
|Grenouye&lt;br /&gt;
|pgz&lt;br /&gt;
|https://grenouye.itch.io/f256-quarth&lt;br /&gt;
|-&lt;br /&gt;
|Skee(ster)-Ball&lt;br /&gt;
|&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/skeeball256/tree/main&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game Jam #04 - November-December 2025 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Fallitaire&lt;br /&gt;
|A cozy fall-themed twist on Pyramid Solitaire, built for the Foenix F256K2 Game Jam!&lt;br /&gt;
|Programmer Vs World&lt;br /&gt;
|bas&lt;br /&gt;
|https://programmervsworld.itch.io/fallitaire&lt;br /&gt;
|-&lt;br /&gt;
|H.E.R.O.&lt;br /&gt;
|Port of the classic game H.E.R.O.&lt;br /&gt;
|Cibee&lt;br /&gt;
|pgz&lt;br /&gt;
|https://c1bee.itch.io/hero&lt;br /&gt;
|-&lt;br /&gt;
|Leaderboard&lt;br /&gt;
|Golf game&lt;br /&gt;
|xDraconian&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discord.com/channels/691915291721990194/1424187774642290799/1456104940186501132&lt;br /&gt;
|-&lt;br /&gt;
|Pitfall&lt;br /&gt;
|Port of the classic Pitfall game from Activision&lt;br /&gt;
|MinstrelDragon&lt;br /&gt;
|pgz&lt;br /&gt;
|https://minstrel.itch.io/pitfall-foenix-f256x&lt;br /&gt;
|-&lt;br /&gt;
|Return of the Falcon&lt;br /&gt;
|&lt;br /&gt;
|Callisto&lt;br /&gt;
|TBD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Swicheroo&lt;br /&gt;
|An Alternate Puzzle Game&lt;br /&gt;
|jbaker8935&lt;br /&gt;
|pgz&lt;br /&gt;
|https://jbaker8935.itch.io/switcheroo&lt;br /&gt;
|-&lt;br /&gt;
|Track Day&lt;br /&gt;
|v1.0 top down race game vs computer controlled opponents&lt;br /&gt;
|MikeC&lt;br /&gt;
|pgz&lt;br /&gt;
|https://mcassera.itch.io/track-day-racing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|cozyMIDI&lt;br /&gt;
|Plays a SMF with the SAM2695 or VS1053b &lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|cozyMIDI v2.7 can open and play type 0 and type 1 standard MIDI files (SMF)&lt;br /&gt;
needs a Jr2 or K2&lt;br /&gt;
with a 2x core at https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
&lt;br /&gt;
has a light show using all four RGB case LEDs of the K2 (might break compatibility with Jr2? test it please!)&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;midi/&#039; folder /- cozymidi&lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager, if you put this as &amp;lt;code&amp;gt;midiplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .mid files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/cozymidi.pgz&lt;br /&gt;
|-&lt;br /&gt;
|digestMidi&lt;br /&gt;
|converts .mid to .dim&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|.mid files are slow to load, parse and prepare for a playback. This tool comes in to convert them into a .dim format that strips out unnecessary MIDI commands and sets it up for timer0 time delays. Works with type 0 and type 1 standard midi files. This tools does the conversion and lets you hear the result.&lt;br /&gt;
Find the latest version here: https://github.com/Mu0n/F256MiscGoodies/tree/main/apps&lt;br /&gt;
|-&lt;br /&gt;
|EdInHisLib&lt;br /&gt;
|SID+OPL3 simultaneously&lt;br /&gt;
|beethead, ported from xantax&lt;br /&gt;
|pgz&lt;br /&gt;
|F256 port: https://discordapp.com/channels/691915291721990194/1054249926521016392/1184413356598231120&lt;br /&gt;
original: &amp;lt;nowiki&amp;gt;https://csdb.dk/release/?id=170898&amp;lt;/nowiki&amp;gt;. Not 100% accurate but close.&lt;br /&gt;
|-&lt;br /&gt;
|F256amp&lt;br /&gt;
|mp3, ogg, wav, wma file playback&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(aka audioplayer.pgz) v2.3 Needs a Jr.2 or K2 since it uses the VS1053b chip.&lt;br /&gt;
For a starter collection of .mp3 and other audio files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick an audio file. it expects a &amp;lt;code&amp;gt;media/mp3/&amp;lt;/code&amp;gt; folder, but it can live without it and peek into the root instead. &lt;br /&gt;
&lt;br /&gt;
run operation 2: with an argument, it will auto-play it: /- f256amp yourmp3file.mp3 &lt;br /&gt;
&lt;br /&gt;
run operation 3:  in f/manager, if you put this as &amp;lt;code&amp;gt;audioplayer.pgz&amp;lt;/code&amp;gt; in the &#039;_apps/&#039; folder. This lets f/manager automatically open up .mp3, .wav, .ogg, .wma that you press enter on.&lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/f256amp.pgz&lt;br /&gt;
|-&lt;br /&gt;
|FireJam&lt;br /&gt;
|all chips, music playing with MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.2 MIDI in and out capable, it will still partially work with a Jr. (PSG, and SID if you have them), a K (PSG, SID, OPL3) and the newest wave 2 Jr2 and K2 (PSG, SID, OPL3, SAM, VS1053b).&lt;br /&gt;
Best to use with a MIDI in controller, but it&#039;ll be controllable with arrows and space to make notes individually, or the F keys to start beats. https://github.com/Mu0n/F256KsimpleCdoodles/tree/main/NoFussDemos&lt;br /&gt;
|-&lt;br /&gt;
|jrtracker&lt;br /&gt;
|Tracker based in basic and uses the PSG&lt;br /&gt;
(considered obsolete, use tracker2)&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://ptb.discord.com/channels/691915291721990194/1008139105386889346/1188292876984143983&lt;br /&gt;
|-&lt;br /&gt;
|modo&lt;br /&gt;
|MOD player using the PSG&lt;br /&gt;
|dwsJason and digarok&lt;br /&gt;
|pgz&lt;br /&gt;
|https://discordapp.com/channels/691915291721990194/855689509520932885/1190723114661859429&lt;br /&gt;
|-&lt;br /&gt;
|Musik&lt;br /&gt;
|Music piece demo using MIDI&lt;br /&gt;
|Mike&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/mcassera/Musik/blob/main/Musik.PGZ&amp;lt;nowiki/&amp;gt;Musikalisches Würfelspiel&lt;br /&gt;
Requires a Jr2 or K2 since it uses MIDI&lt;br /&gt;
|-&lt;br /&gt;
|opl3snooper&lt;br /&gt;
|playback of VGM files (that use opl2 and opl3) and MIDI in&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v1.1 mainly plays back vgm files, but you can pause it and snoop around the channel instruments and play up to 18 note polyphony with MIDI in. expects a collection in media/vgm/, or it will browse from the root if it can&#039;t find.  &lt;br /&gt;
It can load a .spl (Simple PLaylist) text file, which is one file per line, including their respective paths. &lt;br /&gt;
Requires a Jr2 or K2 with a 2x core to use the extra bank of SRAM.&lt;br /&gt;
For a starter collection of .vgm files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection&lt;br /&gt;
run operation 1: just as itself, it will force you to pick a midi file in the &#039;media/vgm/&#039; folder &lt;br /&gt;
&lt;br /&gt;
run operation 2: in f/manager (v1.1b9 and up), if you put this as &amp;lt;code&amp;gt;vgmplayer.pgz&amp;lt;/code&amp;gt;in the &#039;_apps/&#039; folder, f/manager will open midi file with it when you launch .vgm files. &lt;br /&gt;
&lt;br /&gt;
Program link: https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3snooper.pgz &lt;br /&gt;
|-&lt;br /&gt;
|opl3tweak&lt;br /&gt;
|uses MIDI in, plays 18 channels polyphony in real time to the YMF262 OPL3. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently.  https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/opl3tweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|piano&lt;br /&gt;
|Plays some PSG notes with the keyboard&lt;br /&gt;
|Mu0n&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles?tab=readme-ov-file#pulse-sound-generator-piano&lt;br /&gt;
|-&lt;br /&gt;
|playvgm&lt;br /&gt;
|plays a headless vgm file with OPL3&lt;br /&gt;
|G33kyAndIKnowIt&lt;br /&gt;
|pgx&lt;br /&gt;
|https://github.com/natebarney/playvgm-f256k&lt;br /&gt;
some example music files can be gotten from this post:&lt;br /&gt;
[https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 https://discord.com/channels/6][https://discord.com/channels/691915291721990194/975117322836656138/1220366429640065074 91915291721990194/975117322836656138/1220366429640065074]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) open a normal .vgm into a hex editor &amp;lt;nowiki/&amp;gt;and cut out the header bytes from 0x00 to 0x&amp;lt;nowiki/&amp;gt;FF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) run by first using superbasic&#039;s &#039;&#039;&#039;&#039;&#039;bload&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;quot;yourmusicfile&amp;quot;, $01000&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
followed by running this program with &#039;&#039;&#039;&#039;&#039;/- playvgm.pgx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sidtweak&lt;br /&gt;
|uses MIDI in, plays 6 channels polyphony in real time to the dual SID. Fish for random register values.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|v0.1. Can&#039;t save or load instrument definitions yet. Needs a K2 with a MIDI in currently. https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/sidtweak.pgz&lt;br /&gt;
Arrows to move around, + and - keys to incr/decr values or type in a hex value directly under the highlighted position.&lt;br /&gt;
|-&lt;br /&gt;
|rawsidplayer&lt;br /&gt;
|plays raw PSID files from the HVSC collection, converted by zigreSID&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|(formely psidplayer) v0.2 find rawsidplayer.pgz and a starter .rsd file (raw sid dumps). For a starter collection of .rsd files, check the SD curated collection here: https://github.com/Mu0n/F256MiscGoodies/tree/main/SDCard_Collection &lt;br /&gt;
extract sid.zip into a folder /sid/ in the root of your SD card, that&#039;s where psidplayer.pgz will first look to let you pick a file. failing that, it will fall back to the root folder and let you navigate.&lt;br /&gt;
&lt;br /&gt;
program link:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Mu0n/F256KsimpleCdoodles/raw/refs/heads/main/NoFussDemos/rawsidplayer.pgz&lt;br /&gt;
|-&lt;br /&gt;
|tracker2 v1.5&lt;br /&gt;
|Like jrtracker.bas, but using both PSGs&lt;br /&gt;
|contrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/econtrerasd/Tracker2/releases&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Uti&amp;lt;nowiki/&amp;gt;lities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Descrip&amp;lt;nowiki/&amp;gt;tion&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|basic2text&lt;br /&gt;
|A simple utility for translating Commodore BASIC (all variants) from its native tokenized file format to a text format that can be opened with SuperBASIC. Does not perform any code translation: all adaptation is up to you. &lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ&lt;br /&gt;
|https://github.com/WartyMN/F256-BasText/releases/latest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dcopy&lt;br /&gt;
|A tool to copy files from one drive to another or to/from your PC via RS-232 and a nullmodem cable&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz/flash&lt;br /&gt;
|https://github.com/rmsk2/f256_dcopy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f/manager&lt;br /&gt;
|A general file utility, launcher, and memory viewing program. Dual-panel file/memory browsers; copy between disks,  between folders on same disk, and from memory to disk and vice versa; delete, rename, and duplicate files; view files as hex or text (with word-wrap); launch applications and known file types; set the RTC clock; search in RAM and flash. Works with internal SD card and IEC devices such as FNX1591 and Commodore 1541. Can be installed in primary flash position ahead of SuperBASIC or DOS, or at a higher location. Can also be run from disk with &amp;quot;- fm.pgz&amp;quot;.&lt;br /&gt;
|Micah&lt;br /&gt;
|pgZ/flash&lt;br /&gt;
|https://github.com/WartyMN/F256-FileManager/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|f256_reset&lt;br /&gt;
|A small utility that lets you reset the machine through this piece of flash software&lt;br /&gt;
|mgr42&lt;br /&gt;
|flash&lt;br /&gt;
|https://github.com/rmsk2/f256_reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fcart&lt;br /&gt;
|A program that allows to write data to flash expansion cartridges &lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/cartflash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashcart&lt;br /&gt;
|Allows to wipe a block of flash or write a program to a flash cart, from this basic program from the F256Jr/K&lt;br /&gt;
|redfool.&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Red-Fool/F256_FlashCart/tree/main&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|flashselect&lt;br /&gt;
|Allows to select a program to start from a flash cartridge via a menu&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz, on-board and cartridge flash&lt;br /&gt;
|https://github.com/rmsk2/flashselect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|fonts&lt;br /&gt;
|A variety of fonts using the standard F256 character set arrangement. Load with the F256 file manager (f/manager), or your own code.&lt;br /&gt;
|Micah&lt;br /&gt;
|(not a program)&lt;br /&gt;
|[https://github.com/WartyMN/Foenix-Fonts/tree/main https://github.com/WartyMN/Foenix-Fonts]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|midiStuff&lt;br /&gt;
|Test program for a F256K2 or F256Jr2 that sends MIDI data to the internal sam2695 dream chip that produces MIDI based audio. Also test a keyboard controller plugged in the MIDI in port.&lt;br /&gt;
|Mu0n&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles/blob/main/README.md#midistuff&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|moreorless&lt;br /&gt;
|A text editor for the Foenix 256 line of computers&lt;br /&gt;
|mgr42&lt;br /&gt;
|pgz&lt;br /&gt;
|https://github.com/rmsk2/moreorless/releases/&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pgz2flash&lt;br /&gt;
|A program for your Linux, Windows or MacOS machine to turn any PGZ or SuperBASIC program into a KUP which can be run from cartridge or onboard flash memory&lt;br /&gt;
|mgr42&lt;br /&gt;
|Executable for modern computers&lt;br /&gt;
|https://github.com/rmsk2/pgz2flash&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sidTester&lt;br /&gt;
|Simple superbasic program that tests out all 3 voices of the SID1 on the Jr (if populated), K, Jr2 and K2. Ported by Mu0n, made by andy on HackJunk.com https://hackjunk.com/2017/11/07/commodore-64-sid-tester/&lt;br /&gt;
|andy&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/Mu0n/F256MiscGoodies/blob/main/apps/sidtester.bas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|testsuite.bas&lt;br /&gt;
|a series of tests for your F256, video modes and sound chips&lt;br /&gt;
|econtrerasd&lt;br /&gt;
|basic&lt;br /&gt;
|run from the root, &lt;br /&gt;
https://github.com/econtrerasd/testSuite-F256/releases&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|wget&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;fetches a file from a http address if you have a network connection active. Works with the K and Jr. ESP32 Feather &#039;huzzah&#039; board. Not meant to be used with the K2 and Jr2 Wiznet chip.&lt;br /&gt;
|gadget&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;pgz/flash&lt;br /&gt;
|https://github.com/ghackwrench/F256_wget&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Program&lt;br /&gt;
!Description&lt;br /&gt;
!Author&lt;br /&gt;
!Notes on running&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|Assembly examples&lt;br /&gt;
|Sample programs for several features of the Foenix F256K and Jr.&lt;br /&gt;
|mgr42&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/rmsk2/Hello_Foenix256_Jr/blob/main/testprogs.md&lt;br /&gt;
|-&lt;br /&gt;
|cc65 example&lt;br /&gt;
|c example code&lt;br /&gt;
|gadget&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/ghackwrench/F256_Jr_Kernel_DOS&lt;br /&gt;
|-&lt;br /&gt;
|digarok basic stuff&lt;br /&gt;
|Lots of basic examples&lt;br /&gt;
|digarok&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/digarok/superbasic-traveler/tree/main&lt;br /&gt;
|-&lt;br /&gt;
|MikeC repos&lt;br /&gt;
|Various projects in assembly&lt;br /&gt;
|MikeC&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/mcassera&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K asm doodles&lt;br /&gt;
|Some asm examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleASMdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K basic doodles&lt;br /&gt;
|Some basic examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KbasicBASICdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Mu0n&#039;s F256K C doodles&lt;br /&gt;
|Some C examples&lt;br /&gt;
|Mu0n&lt;br /&gt;
|read github&lt;br /&gt;
|https://github.com/Mu0n/F256KsimpleCdoodles&lt;br /&gt;
|-&lt;br /&gt;
|Raúl SQ basic repo&lt;br /&gt;
|F256 SuperBASIC Trigonometry&lt;br /&gt;
|Raúl SQ&lt;br /&gt;
|basic&lt;br /&gt;
|https://github.com/raul-sq/FoenixF256K2&lt;br /&gt;
|-&lt;br /&gt;
|tcp example&lt;br /&gt;
|connects to a server and gets typed in text echoed back to you&lt;br /&gt;
|gadget&lt;br /&gt;
|$2000&lt;br /&gt;
|https://github.com/ghackwrench/F256_example_tcp&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38524</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38524"/>
		<updated>2026-03-21T16:31:18Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Getting set up on Windows 10/11 (-Mu0n) */ better compilation line at the very end&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c -o=BASEPATH/f256lib-oscar64/doodles/myproject/myproject.pgz&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38523</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38523"/>
		<updated>2026-03-21T14:41:28Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Getting set up on Windows 10/11 (-Mu0n) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder &lt;br /&gt;
 &lt;br /&gt;
 Step 3) type WSL &lt;br /&gt;
 &lt;br /&gt;
 Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38522</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38522"/>
		<updated>2026-03-21T14:40:19Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Getting set up on Windows 10/11 (-Mu0n) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it &#039;&#039;&#039;BASEPATH&#039;&#039;&#039;) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039; &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder Step 3) type WSL Step 4) clone oscar64 with&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; and &#039;&#039;&#039;&#039;f256lib-oscar64&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from /f256lib-oscar64/doodles/MakeFile to get the rest going) (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled oscar64 of step 7 like so: (assuming your project myproject is in BASEPATH/f256lib-oscar64/doodles/)&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38521</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38521"/>
		<updated>2026-03-21T14:38:20Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* List of &amp;quot;Gotchas&amp;quot; for llvm-mos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Step 1) in Windows, make a base directory (let&#039;s call it BASEPATH) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;nowiki/&amp;gt;* the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;nowiki/&amp;gt;* the f256lib-oscar64 project, &#039;main branch&#039;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
(both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Step 2) from windows, open a cmd window, go to your intended base folder&lt;br /&gt;
Step 3) type WSL&lt;br /&gt;
Step 4) clone oscar64 with &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Step 5) clone f256lib-oscar64 side by side in the same base folder. &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Both &#039;oscar64&#039; and &#039;f256lib-oscar64&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
(this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
(warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from &#039;&#039;&#039;/f256lib-oscar64/doodles/MakeFile&#039;&#039;&#039; to get the rest going) &lt;br /&gt;
(warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
Step 9) to compile a single project in general, make sure you use a path that points to the compiled &#039;&#039;&#039;oscar64&#039;&#039;&#039; of step 7 like so:&lt;br /&gt;
(assuming your project &#039;&#039;&#039;myproject&#039;&#039;&#039; is in &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039;) &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38520</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38520"/>
		<updated>2026-03-21T14:37:31Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Oscar64 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&lt;br /&gt;
&lt;br /&gt;
void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Step 1) in Windows, make a base directory (let&#039;s call it BASEPATH) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;nowiki/&amp;gt;* the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;nowiki/&amp;gt;* the f256lib-oscar64 project, &#039;main branch&#039;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
(both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Step 2) from windows, open a cmd window, go to your intended base folder&lt;br /&gt;
Step 3) type WSL&lt;br /&gt;
Step 4) clone oscar64 with &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Step 5) clone f256lib-oscar64 side by side in the same base folder. &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Both &#039;oscar64&#039; and &#039;f256lib-oscar64&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
(this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
(warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from &#039;&#039;&#039;/f256lib-oscar64/doodles/MakeFile&#039;&#039;&#039; to get the rest going) &lt;br /&gt;
(warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
Step 9) to compile a single project in general, make sure you use a path that points to the compiled &#039;&#039;&#039;oscar64&#039;&#039;&#039; of step 7 like so:&lt;br /&gt;
(assuming your project &#039;&#039;&#039;myproject&#039;&#039;&#039; is in &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039;) &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38519</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38519"/>
		<updated>2026-03-21T14:37:15Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&amp;lt;blockquote&amp;gt;void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it BASEPATH) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder&lt;br /&gt;
 Step 3) type WSL&lt;br /&gt;
 Step 4) clone oscar64 with &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder. &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;oscar64&#039; and &#039;f256lib-oscar64&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from &#039;&#039;&#039;/f256lib-oscar64/doodles/MakeFile&#039;&#039;&#039; to get the rest going) &lt;br /&gt;
 (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled &#039;&#039;&#039;oscar64&#039;&#039;&#039; of step 7 like so:&lt;br /&gt;
 (assuming your project &#039;&#039;&#039;myproject&#039;&#039;&#039; is in &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039;) &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38518</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38518"/>
		<updated>2026-03-21T14:36:27Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: indent was weird for the oscar64 section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&amp;lt;blockquote&amp;gt;void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it BASEPATH) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder&lt;br /&gt;
 Step 3) type WSL&lt;br /&gt;
 Step 4) clone oscar64 with &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder. &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;oscar64&#039; and &#039;f256lib-oscar64&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from &#039;&#039;&#039;/f256lib-oscar64/doodles/MakeFile&#039;&#039;&#039; to get the rest going) &lt;br /&gt;
 (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled &#039;&#039;&#039;oscar64&#039;&#039;&#039; of step 7 like so:&lt;br /&gt;
 (assuming your project &#039;&#039;&#039;myproject&#039;&#039;&#039; is in &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039;) &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38517</id>
		<title>C Development</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=C_Development&amp;diff=38517"/>
		<updated>2026-03-21T14:34:33Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: added oscar64 and reorganized sections for llvm-mos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;C Compilers&#039;&#039;&#039; ==&lt;br /&gt;
* [[cc65]]&lt;br /&gt;
* [https://www.calypsi.cc/ Calypsi]&lt;br /&gt;
* [[llvm-mos]]&lt;br /&gt;
* oscar64&lt;br /&gt;
&lt;br /&gt;
=== LLVM-MOS ===&lt;br /&gt;
This fork of llvm-mos was adapted for F256/Wildbits usage by user sduensing from Kangaroo Punch Studios and [https://kangaroopunch.com/view/ShowSoftware?id=13 can be found here]. The installation instructions are simple and work for both Windows and Linux. It mostly uses a one-stop-shop f256lib.h file containing macros and functions leveraging some devices (not all yet) and the MicroKernel.&lt;br /&gt;
&lt;br /&gt;
The default linking configuration will have your code start at 0x300, a 8 kb stack/trampoline from 0xA000 to 0xBFFF that is used to bring in higher memory content visible into that slice of the first 64k of the CPU. The slice 0xC000 to 0xDFFF is used by IO as usual and 0xE000 to 0xFFFF is used by the MicroKernel as usual. To change any of this, you can bring a modified copy of link.ld into your /projectfolder/ and it will supersede this default mapping.&lt;br /&gt;
&lt;br /&gt;
==== List of &amp;quot;Gotchas&amp;quot; for llvm-mos ====&lt;br /&gt;
1) When trying to use the EMBED directive in order to put data at specific memory locations, keep in mind that you CAN&#039;T comment those lines out with &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, the compiler will try to follow them whether they&#039;re in them or not. The only way to comment them is to use &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) When trying to use the EMBED directive, you may want to put your assets in a subfolder of your project. As in, assuming your source files are in ./src/ (where &#039;.&#039; is the root of your project) and your assets are in ./assets/, then you WILL need to refer to your asset files like so: &amp;lt;code&amp;gt;EMBED(myassetname, &amp;quot;../assets/myassetfile.bin&amp;quot;, 0x10000);&amp;lt;/code&amp;gt;. Note the weird ../ folder backtracking that has to be used. No other combination worked for me (-Mu0n)&lt;br /&gt;
&lt;br /&gt;
3) In the f256dev/ folder, the f256build.bat file contains all you need to compile and link your project. In the &amp;quot;call mos-f256-clang.bat&amp;quot; line, one important switch is the optimization level you let the compiler use. Experiment with -O1 (no optimization), -O2 (some) and -O3 (most). Some operations and repetitions work with some and fail with others. One prominent example of where it failed was a repetitive fileRead operation that read and parsed little chunks of data from a file, byte by byte and while it compiled and linked, it failed during execution. By reducing -O3 to -O2, it all worked again.&lt;br /&gt;
&lt;br /&gt;
4) One linking error kept giving me &amp;quot;&amp;lt;code&amp;gt;ld.lld: error: ld-temp.o &amp;lt;inline asm&amp;gt;:2:1: operand must be a 16-bit address sta (mos8(.LpickAudioFile_zp_stk+4)&amp;lt;/code&amp;gt;&amp;quot; despite not having written any inline assembly in my project. You can skirt around the issue for the problematic function by adding a compiler attribute: &amp;lt;code&amp;gt;__attribute__((optnone))&amp;lt;/code&amp;gt; right before your function definition.&lt;br /&gt;
&lt;br /&gt;
5) When your code nears a size of 0x9400 and above, you may get in trouble in terms of code not being fully loaded into RAM while executing. Either deliberately put some code into far memory and devise a scheme with the MMU to swap that code in and out of reach for the CPU, or you can carve yourself a bit more space by editing f256dev/llvm-mos/mos-platform/f256/lib/link.ld and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xA000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* fake C Stack */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PROVIDE(__stack = 0xC000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to get yourself an extra 8k of code space before it collides with the stack&lt;br /&gt;
&lt;br /&gt;
6) The compiler will often complain about a missing closing curly bracket &#039;}&#039; at the end of your source files. Just add the one it requires at the very end even though it&#039;s an extra one, or, finish your source file by putting your last function with this notation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void myLastFunction(uint8_t whatever) {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;//bunchacode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== jbaker8935&#039;s guide on creating trampolines for functions in higher memory: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
what you can do is pick a function in one of your projects that isnt time critical and create a trampoline function for it using this pattern:&amp;lt;blockquote&amp;gt;void FAR8_video_init(void);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma clang optimize off&lt;br /&gt;
__attribute__((noinline))&lt;br /&gt;
void video_init(void) {&lt;br /&gt;
    volatile unsigned char ___mmu = (unsigned char)*(volatile unsigned char *)0x000d;&lt;br /&gt;
    *(volatile unsigned char *)0x000d = 8;&lt;br /&gt;
    FAR8_video_init();&lt;br /&gt;
    *(volatile unsigned char *)0x000d = ___mmu;&lt;br /&gt;
}&lt;br /&gt;
#pragma clang optimize on&lt;br /&gt;
&lt;br /&gt;
__attribute__((noinline, section(&amp;quot;.block8&amp;quot;)))&lt;br /&gt;
void FAR8_video_init(void)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note: that FAR8_video_init is the renamed function that is being moved.  It&#039;s just a convention.&lt;br /&gt;
in your main you can call video_init as you do normally and the trampoline will take care of swapping the code into A000 in cpu memory.&lt;br /&gt;
For linking you need to create file f256.ld that sits in the project directory.   it is a copy of &amp;quot;${ROOT}/llvm-mos/mos-platform/f256/lib/link.ld&amp;quot; but has additional linker instructions to explain how to deal with block8.  à&lt;br /&gt;
Around line 100 or so you need to add instructions after the include output.ld statement.  like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Overlay Segments and Binary Data */&lt;br /&gt;
  INCLUDE output.ld&lt;br /&gt;
&lt;br /&gt;
/* Hand Coded output.ld records */&lt;br /&gt;
  SHORT(8*0x2000)&lt;br /&gt;
  BYTE(8/8)&lt;br /&gt;
  SHORT(end_block8 - __block8_lma)&lt;br /&gt;
  BYTE(0x00)&lt;br /&gt;
  TRIM(block8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i&#039;m using f256build.sh and the normal &#039;everything in src&#039; structure.  Also I didnt fiddle with moving the default stack or swap page,  so this example trampoline is using A000   (writing to 0x000d).   Note that the mmu is left in edit mode, so the trampolines can just write to 000d with no disabling of interrupts.&lt;br /&gt;
&lt;br /&gt;
=== Oscar64 ===&lt;br /&gt;
Oscar64 is a C/C++ cross compiler running on a modern system (such as a Windows PC, Mac or Linux machine) and targets the classic 6502 family of processors. It is mainly focused on Commodore systems such as the C64, PET or VIC20. The compiler supports C99 and many C++ features up to variadic templates and lambda functions.&lt;br /&gt;
&lt;br /&gt;
The purpose of this compiler is to eliminate the need to write 6502 assembler code to achieve high code density and fast execution speed. It continues to improve with all the games, demos and tools written by it. It supports disk overlays and banked cartridges for larger projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oscar64 was adapted for the F256/WildBits by swdfrost and [https://github.com/sdwfrost/oscar64 here is a link its github page]. You will also need the adaptation of the f256lib (ported over from llvm-mos) [https://github.com/sdwfrost/f256lib-oscar64 from this github page] as well, which also includes many projects examples as well. &lt;br /&gt;
&lt;br /&gt;
==== Getting set up on Windows 10/11 (-Mu0n) ====&lt;br /&gt;
Assumptions:&lt;br /&gt;
&lt;br /&gt;
* Windows&#039; WSL is installed (ie with Ubuntu)&lt;br /&gt;
* Python is installed inside windows&lt;br /&gt;
* make is installed inside WSL&lt;br /&gt;
* gcc is installed inside WSL (&#039;&#039;&#039;sudo apt install build-essential&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Step 1) in Windows, make a base directory (let&#039;s call it BASEPATH) that will hold both:&lt;br /&gt;
 &lt;br /&gt;
 * the oscar64 project, but with the &#039;f256k-support&#039; branch rather than &#039;main&#039; branch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 * the f256lib-oscar64 project, &#039;main branch&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 (both from sdwfrost&#039;s GitHub account)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Step 2) from windows, open a cmd window, go to your intended base folder&lt;br /&gt;
 Step 3) type WSL&lt;br /&gt;
 Step 4) clone oscar64 with &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b f256k-support &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/oscar64.git&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Step 5) clone f256lib-oscar64 side by side in the same base folder. &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;git clone -b main &amp;lt;nowiki&amp;gt;https://github.com/sdwfrost/f256lib-oscar64&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Both &#039;oscar64&#039; and &#039;f256lib-oscar64&#039; folders will be in the same location when this is done.&lt;br /&gt;
 &lt;br /&gt;
 Step 6) go into oscar64/&lt;br /&gt;
 &lt;br /&gt;
 Step 7) type:&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;make -f make/makefile&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (this assumes gcc being present in WSL, it will take a while!)&lt;br /&gt;
 &lt;br /&gt;
 Step 8) switch over to f256lib-oscar64/ and type:&lt;br /&gt;
 &lt;br /&gt;
  &#039;&#039;&#039;OSCAR64=../../oscar64/bin/oscar64 make all&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 (warning 1: at the time of writing this guide, the 2nd project, BachHero, triggers an error that halts the whole list. Simply remove that entry from &#039;&#039;&#039;/f256lib-oscar64/doodles/MakeFile&#039;&#039;&#039; to get the rest going) &lt;br /&gt;
 (warning 2: most projects will compile, but not run properly when run in the Wildbits environment since they expect extra library files that have not been ported over)&lt;br /&gt;
 &lt;br /&gt;
 Step 9) to compile a single project in general, make sure you use a path that points to the compiled &#039;&#039;&#039;oscar64&#039;&#039;&#039; of step 7 like so:&lt;br /&gt;
 (assuming your project &#039;&#039;&#039;myproject&#039;&#039;&#039; is in &#039;&#039;&#039;BASEPATH/f256lib-oscar64/doodles/&#039;&#039;&#039;) &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;BASEPATH/oscar64/bin/oscar64 -tm=f256k -n -i=BASEPATH/f256lib-oscar64/f256lib BASEPATH/f256lib-oscar64/doodles/myproject/src/myproject.c&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38463</id>
		<title>Raspberry Pi Pico Update</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38463"/>
		<updated>2026-02-14T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: warning for header rip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raspberry Pi Pico Update ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
There is an onboard RP2040 chip (pi pico). It is NOT PRESENT on the Jr2. It&#039;s only present on the K2. It&#039;s responsible for the following things:&lt;br /&gt;
&lt;br /&gt;
* the bootloader procedure that loads the right core while booting the K2. &lt;br /&gt;
* it is also known as the &amp;quot;FPGA Manager&amp;quot;&lt;br /&gt;
* Has modifiable code that can invite more features and possibly a faster bootup&lt;br /&gt;
&lt;br /&gt;
=== Preparing new pico flash files ===&lt;br /&gt;
&lt;br /&gt;
Check this [https://github.com/wildbitscomputing/fpga-manager fpga manager] repo from Cibee which can tweak and compile such files into .uf2. This project uses VSCode, the pico sdk and openocd in order to do everything.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a summary of the booting time gains that were accomplished by Cibee (see the benchmark table on the side)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bit bang (slowest): was the old method, at launch of the K2, of sending a core file to the FPGA. &lt;br /&gt;
&lt;br /&gt;
pio (faster): is the new method tried by Cibee&lt;br /&gt;
&lt;br /&gt;
SD raw (slowest): was the old way of storing the core file, uncompressed, as .bin files. See [[FPGA_Releases#How_to_Upgrade_the_FPGA_for_the_F256K2]] for the exact file structure needed inside the internal &amp;quot;left&amp;quot; uSD card.&lt;br /&gt;
&lt;br /&gt;
SD gzip (faster): is a new method of individually storing those same core files as .bin.gzip, reducing the amount of bytes to send dramatically&lt;br /&gt;
&lt;br /&gt;
FLASH LZ4 (fastest): is embedding the core files inside the pi pico flash memory so that the core manager carries its own data and sends it to the fpga during bootup. This no longer involves the internal &amp;quot;left&amp;quot; uSD card at all.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a recent enough fpga manager (January 2026) is flashed into the pi pico, it will try to prepare the fpga with this following sequence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Reads a 2-bit context DIP switch to select one of four FPGA slots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Attempts SD card programming first (LZ4 blocks, gzip, then raw .bin).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Falls back to LZ4 images stored in fixed flash slots if SD is unavailable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Prints the chosen method and timing over USB stdio if enabled.&lt;br /&gt;
[[File:FPGA Manager Benchmark.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Opening the case ===&lt;br /&gt;
&lt;br /&gt;
You can refer to this section to learn how you can be [[Opening_the_F256K_case]]&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard USB Header ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to follow:&lt;br /&gt;
[[File:Rp2040-cable.jpeg|thumb|Connector location for the pico USB pin header, Switch S3 on the left, and cable orientation]]&lt;br /&gt;
Installation step:&lt;br /&gt;
&lt;br /&gt;
* Install Cable as above (F256K2 Powered Off). &#039;&#039;&#039;WARNING&#039;&#039;&#039;, with &#039;&#039;&#039;VERY LITTLE&#039;&#039;&#039; cable tension, this pin header can snap off [from Mu0n] and force you onto the next method of flashing using the SWD header, as seen in the next section.&lt;br /&gt;
* Plug Cable in any PC that holds the new programming file.&lt;br /&gt;
* Keep 1 finger on the button&lt;br /&gt;
* Power the F256K2&lt;br /&gt;
* A new folder will appear on the PC&#039;s Desktop&lt;br /&gt;
* Drop the new .uf2 file in the newly appeared folder.&lt;br /&gt;
* Power off F256K2&lt;br /&gt;
* Remove cable&lt;br /&gt;
* Reinstall the system as your heart&#039;s desire&lt;br /&gt;
* Power On the unit&lt;br /&gt;
* RP2040 is updated and running (because you need it to boot the unit)&lt;br /&gt;
* Bob&#039;s your uncle!&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard SWD Header ===&lt;br /&gt;
&lt;br /&gt;
SWD: Serial Wire Debug. This other pin header is a second way to update your flash and gives a little more flexibility to do it piece by piece by flashing .bin at specific flash locations or .elf in one go.&lt;br /&gt;
[[File:Swd connector.png|thumb|Connector location for the SWD pin header, near the FPGA]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need either:&lt;br /&gt;
&lt;br /&gt;
* a [https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html Pi Debug Probe] which comes with the necessary cable that leads to 3 female Dupont endings needed here&lt;br /&gt;
* openocd tool from PicoSDK v1.5.1 or more recent&lt;br /&gt;
* a prepared .bin file with updated code. &lt;br /&gt;
* a conversion tool to convert .uf2 to .bin, you can use this website https://polpo.org/tmp/uf2-to-bin.html or other known tools in the pico community&lt;br /&gt;
* the key step is to use openocd like so: openocd -s scripts -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c &amp;quot;adapter speed 5000; program NewFirmware.bin verify reset exit 0x10000000&amp;quot;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38462</id>
		<title>Raspberry Pi Pico Update</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38462"/>
		<updated>2026-02-14T15:27:09Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Raspberry Pi Pico Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raspberry Pi Pico Update ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
There is an onboard RP2040 chip (pi pico). It is NOT PRESENT on the Jr2. It&#039;s only present on the K2. It&#039;s responsible for the following things:&lt;br /&gt;
&lt;br /&gt;
* the bootloader procedure that loads the right core while booting the K2. &lt;br /&gt;
* it is also known as the &amp;quot;FPGA Manager&amp;quot;&lt;br /&gt;
* Has modifiable code that can invite more features and possibly a faster bootup&lt;br /&gt;
&lt;br /&gt;
=== Preparing new pico flash files ===&lt;br /&gt;
&lt;br /&gt;
Check this [https://github.com/wildbitscomputing/fpga-manager fpga manager] repo from Cibee which can tweak and compile such files into .uf2. This project uses VSCode, the pico sdk and openocd in order to do everything.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a summary of the booting time gains that were accomplished by Cibee (see the benchmark table on the side)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bit bang (slowest): was the old method, at launch of the K2, of sending a core file to the FPGA. &lt;br /&gt;
&lt;br /&gt;
pio (faster): is the new method tried by Cibee&lt;br /&gt;
&lt;br /&gt;
SD raw (slowest): was the old way of storing the core file, uncompressed, as .bin files. See [[FPGA_Releases#How_to_Upgrade_the_FPGA_for_the_F256K2]] for the exact file structure needed inside the internal &amp;quot;left&amp;quot; uSD card.&lt;br /&gt;
&lt;br /&gt;
SD gzip (faster): is a new method of individually storing those same core files as .bin.gzip, reducing the amount of bytes to send dramatically&lt;br /&gt;
&lt;br /&gt;
FLASH LZ4 (fastest): is embedding the core files inside the pi pico flash memory so that the core manager carries its own data and sends it to the fpga during bootup. This no longer involves the internal &amp;quot;left&amp;quot; uSD card at all.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a recent enough fpga manager (January 2026) is flashed into the pi pico, it will try to prepare the fpga with this following sequence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Reads a 2-bit context DIP switch to select one of four FPGA slots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Attempts SD card programming first (LZ4 blocks, gzip, then raw .bin).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Falls back to LZ4 images stored in fixed flash slots if SD is unavailable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Prints the chosen method and timing over USB stdio if enabled.&lt;br /&gt;
[[File:FPGA Manager Benchmark.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Opening the case ===&lt;br /&gt;
&lt;br /&gt;
You can refer to this section to learn how you can be [[Opening_the_F256K_case]]&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard USB Header ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to follow:&lt;br /&gt;
[[File:Rp2040-cable.jpeg|thumb|Connector location for the pico USB pin header, Switch S3 on the left, and cable orientation]]&lt;br /&gt;
Installation step:&lt;br /&gt;
&lt;br /&gt;
* Install Cable as above (F256K2 Powered Off)&lt;br /&gt;
* Plug Cable in any PC that holds the new programming file.&lt;br /&gt;
* Keep 1 finger on the button&lt;br /&gt;
* Power the F256K2&lt;br /&gt;
* A new folder will appear on the PC&#039;s Desktop&lt;br /&gt;
* Drop the new .uf2 file in the newly appeared folder.&lt;br /&gt;
* Power off F256K2&lt;br /&gt;
* Remove cable&lt;br /&gt;
* Reinstall the system as your heart&#039;s desire&lt;br /&gt;
* Power On the unit&lt;br /&gt;
* RP2040 is updated and running (because you need it to boot the unit)&lt;br /&gt;
* Bob&#039;s your uncle!&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard SWD Header ===&lt;br /&gt;
&lt;br /&gt;
SWD: Serial Wire Debug. This other pin header is a second way to update your flash and gives a little more flexibility to do it piece by piece by flashing .bin at specific flash locations or .elf in one go.&lt;br /&gt;
[[File:Swd connector.png|thumb|Connector location for the SWD pin header, near the FPGA]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need either:&lt;br /&gt;
&lt;br /&gt;
* a [https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html Pi Debug Probe] which comes with the necessary cable that leads to 3 female Dupont endings needed here&lt;br /&gt;
* openocd tool from PicoSDK v1.5.1 or more recent&lt;br /&gt;
* a prepared .bin file with updated code. &lt;br /&gt;
* a conversion tool to convert .uf2 to .bin, you can use this website https://polpo.org/tmp/uf2-to-bin.html or other known tools in the pico community&lt;br /&gt;
* the key step is to use openocd like so: openocd -s scripts -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c &amp;quot;adapter speed 5000; program NewFirmware.bin verify reset exit 0x10000000&amp;quot;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=File:Swd_connector.png&amp;diff=38461</id>
		<title>File:Swd connector.png</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=File:Swd_connector.png&amp;diff=38461"/>
		<updated>2026-02-14T15:26:09Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Serial Wire Debug header populated. This cable leads to a Pi Debug Probe&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=File:FPGA_Manager_Benchmark.png&amp;diff=38460</id>
		<title>File:FPGA Manager Benchmark.png</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=File:FPGA_Manager_Benchmark.png&amp;diff=38460"/>
		<updated>2026-02-14T15:15:21Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Provides booting time comparisons according to the strategy in bringing a core file to the FPGA&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38459</id>
		<title>Raspberry Pi Pico Update</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38459"/>
		<updated>2026-02-14T15:13:38Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raspberry Pi Pico Update ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
There is an onboard RP2040 chip (pi pico). It is not present on the Jr2. It&#039;s responsible for the following things:&lt;br /&gt;
&lt;br /&gt;
* the bootloader procedure that loads the right core while booting the K2. &lt;br /&gt;
* it is also known as the &amp;quot;FPGA Manager&amp;quot;&lt;br /&gt;
* Contains the K2 LCD screen special bitmap to be shown at bootup&lt;br /&gt;
* Has modifiable code that can invite more features and possibly a faster bootup&lt;br /&gt;
&lt;br /&gt;
=== Preparing new pico flash files ===&lt;br /&gt;
&lt;br /&gt;
Check this [https://github.com/wildbitscomputing/fpga-manager fpga manager] repo from Cibee which can tweak and compile such files into .uf2. This project uses VSCode, the pico sdk and openocd in order to do everything.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a summary of the booting time gains that were accomplished by Cibee:&lt;br /&gt;
&lt;br /&gt;
[[File:Fpga Manager Benchmark.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Opening the case ===&lt;br /&gt;
&lt;br /&gt;
You can refer to this section to learn how you can be [[Opening_the_F256K_case]]&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard USB Header ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to follow:&lt;br /&gt;
[[File:Rp2040-cable.jpeg|thumb|Connector location, Switch S3 on the left, and cable orientation]]&lt;br /&gt;
Installation step:&lt;br /&gt;
&lt;br /&gt;
* Install Cable as above (F256K2 Powered Off)&lt;br /&gt;
* Plug Cable in any PC that holds the new programming file.&lt;br /&gt;
* Keep 1 finger on the button&lt;br /&gt;
* Power the F256K2&lt;br /&gt;
* A new folder will appear on the PC&#039;s Desktop&lt;br /&gt;
* Drop the new .uf2 file in the newly appeared folder.&lt;br /&gt;
* Power off F256K2&lt;br /&gt;
* Remove cable&lt;br /&gt;
* Reinstall the system as your heart&#039;s desire&lt;br /&gt;
* Power On the unit&lt;br /&gt;
* RP2040 is updated and running (because you need it to boot the unit)&lt;br /&gt;
* Bob&#039;s your uncle!&lt;br /&gt;
&lt;br /&gt;
=== Flashing using the onboard SWD Header ===&lt;br /&gt;
&lt;br /&gt;
SWD: Serial Wire Debug. This other pin header is a second way to update your flash and gives a little more flexibility to do it piece by piece by flashing .bin at specific flash locations or .elf in one go.&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need either:&lt;br /&gt;
&lt;br /&gt;
* a [https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html Pi Debug Probe] which comes with the necessary cable that leads to 3 female Dupont endings needed here&lt;br /&gt;
* openocd tool from PicoSDK v1.5.1 or more recent&lt;br /&gt;
* a prepared .bin file with updated code. &lt;br /&gt;
* a conversion tool to convert .uf2 to .bin, you can use this website https://polpo.org/tmp/uf2-to-bin.html or other known tools in the pico community&lt;br /&gt;
* the key step is to use openocd like so: openocd -s scripts -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c &amp;quot;adapter speed 5000; program NewFirmware.bin verify reset exit 0x10000000&amp;quot;&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=File:Fpga_Manager_Benchmark.png&amp;diff=38458</id>
		<title>File:Fpga Manager Benchmark.png</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=File:Fpga_Manager_Benchmark.png&amp;diff=38458"/>
		<updated>2026-02-14T15:13:17Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;describes booting times in relation to the strategy of getting fpga cores to the fpga&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Firmware&amp;diff=38457</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Firmware&amp;diff=38457"/>
		<updated>2026-02-14T14:59:22Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: moving the RP2040 firmware to its own hardware maintenance page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== System Flash ROM ==&lt;br /&gt;
The Foenix F256K, Jr., K2 and Jr2 computers contain 512K of flash memory which is intended to store software which should be available to the user without any media like SD-cards or IEC drives present. Think of it like a space traditionally occupied by ROM chips of 80&#039;s computers containing critical, often used programs and routines, but instead of being very rarely updated with scarce ROM chip revisions, it can be quickly updated with firmware revisions using the FoenixMgr python scripts.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;: for the F256K2, each core has its own dedicated area of 512K of flash memory. When switching to a new core, a separate dedicated area of 512K exists for that core and there&#039;s an expectation that the process of flashing the firmware has to be done for it.   &lt;br /&gt;
&lt;br /&gt;
This collection of software can be changed by the user by simply reprogramming the flash &amp;quot;ROM&amp;quot;. At the moment (2025+) the following applications are stored in flash as a default loadout: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Collection of 6502/65816 firmware programs as of firmware release version 2025.13&lt;br /&gt;
!Absolute Block* in Memory Map&lt;br /&gt;
!Block* Offset in onboard Flash&lt;br /&gt;
!Name of program&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x00&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;reserved&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x41&lt;br /&gt;
|0x01&lt;br /&gt;
|xdev&lt;br /&gt;
|trampoline program meant to react to developper scripts from [[FoenixMgr]]: pcopy, runpgz, runpgx&lt;br /&gt;
|-&lt;br /&gt;
|0x42 to 0x45&lt;br /&gt;
|0x02 to 0x05&lt;br /&gt;
|superbasic&lt;br /&gt;
|if xdev has nothing to react to, superbasic is your default startup program&lt;br /&gt;
|-&lt;br /&gt;
|0x46&lt;br /&gt;
|0x06&lt;br /&gt;
|dos&lt;br /&gt;
|minimalistic file management and info shell&lt;br /&gt;
|-&lt;br /&gt;
|0x47&lt;br /&gt;
|0x07&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;free&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x08&lt;br /&gt;
|fcart&lt;br /&gt;
|allows a user to flash the 256K Flast Cart with 8kb prepared blocks. See [[CartFlasher|this for usage]]&lt;br /&gt;
|-&lt;br /&gt;
|0x49&lt;br /&gt;
|0x09&lt;br /&gt;
|&#039;&#039;&#039;free&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4A&lt;br /&gt;
|0x0A&lt;br /&gt;
|help&lt;br /&gt;
|text help on screen for superbasic programming&lt;br /&gt;
|-&lt;br /&gt;
|0x4B to 0x4E&lt;br /&gt;
|0x0B to 0x0E&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;free&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4F&lt;br /&gt;
|0x0F&lt;br /&gt;
|wget&lt;br /&gt;
|web get, works only for gen1 K and Jr equipped with a feather wifi board&lt;br /&gt;
|-&lt;br /&gt;
|0x50 to 0x56&lt;br /&gt;
|0x10 to 0x16&lt;br /&gt;
|fm&lt;br /&gt;
|f/manager - a rather feature rich file manipulation, program launcher and memory exploration software&lt;br /&gt;
|-&lt;br /&gt;
|0x57&lt;br /&gt;
|0x17&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;free&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58 to 0x5B&lt;br /&gt;
|0x18 to 0x1B&lt;br /&gt;
|mless&lt;br /&gt;
|moreorless - a text editor. See [[Moreorless|here for more information.]]&lt;br /&gt;
|-&lt;br /&gt;
|0x5D to 0x7B&lt;br /&gt;
|0x1D to 0x3B&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;free&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x7C to 0x7F&lt;br /&gt;
|0x3C to 0x3F&lt;br /&gt;
|microkernel&lt;br /&gt;
|the microkernel, gadget&#039;s masterpiece used by many programs&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;Block: each block of flash memory is 8kb is size&lt;br /&gt;
&lt;br /&gt;
To reprogram the flash, you can start with the [https://github.com/FoenixRetro/f256-firmware/releases official firmware releases in this github.] &lt;br /&gt;
&lt;br /&gt;
This repo is part the [https://github.com/FoenixRetro FoenixRetro] Github organisation which in turn is an attempt to gather forks of all projects which are part of the firmware and other resources relevant for the Foenix F256 new retro computers.&lt;br /&gt;
&lt;br /&gt;
There are now two firmware loads available: Gen1 - for K and Jr and Gen2 - for K2 and Jr2. The only difference between these loads is the superbasic part of the firmware, in order to have a properly identified superbasic startup screen that reflects the exact computer and generation in the logo.&lt;br /&gt;
&lt;br /&gt;
====== Video tutorial: ======&lt;br /&gt;
A part of a tutorial video covers updating the firmware as a follow up step to updating the FPGA core, check it at 6:45 and on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;pOab0ocKqac&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6809 firmware: ====&lt;br /&gt;
This core has specialized firmware - it is best to ask around in the appropriate channels of the [https://discord.gg/9vjUEGgcUS Foenix discord].&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38456</id>
		<title>Raspberry Pi Pico Update</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Raspberry_Pi_Pico_Update&amp;diff=38456"/>
		<updated>2026-02-11T05:09:16Z</updated>

		<summary type="html">&lt;p&gt;1BitFeverDreams: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raspberry Pi Pico Update ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
There is an onboard RP2040 chip (pi pico). It is not present on the Jr2. It&#039;s responsible for the following things:&lt;br /&gt;
&lt;br /&gt;
* the bootloader procedure that loads the right core while booting the K2. &lt;br /&gt;
* it is also known as the &amp;quot;FPGA Manager&amp;quot;&lt;br /&gt;
* Contains the K2 LCD screen special bitmap to be shown at bootup&lt;br /&gt;
* Has modifiable code that can invite more features and possibly a faster bootup&lt;br /&gt;
&lt;br /&gt;
=== Opening the case ===&lt;br /&gt;
&lt;br /&gt;
You can refer to this section to learn how you can be [[Opening_the_F256K_case]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Finding the right header and connecting a cable ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to follow:&lt;br /&gt;
&lt;br /&gt;
* Find the right .uf2 file from this github repo https://github.com/wildbitscomputing/fpga-manager&lt;br /&gt;
* Find the red circled header for USB&lt;br /&gt;
* Use the provided USBA to female dupont connector cable you should have received with your K2 kit upon purchase. These fairly standard cables can be found online if it needs to be replaced&lt;br /&gt;
* While the K2 is powered off, hold the BOOTSEL button nearby and plug the cable into your modern computer&lt;br /&gt;
* When a special drive pops up on your modern computer, drag and drop the .uf2 replacement image for the pico into that drive - it will auto-dismount and perform the update.&lt;/div&gt;</summary>
		<author><name>1BitFeverDreams</name></author>
	</entry>
</feed>