Name: 1993-06-reflex Language: Pascal Description: Two-player game for DOS, when a beep sounds, the first one to press Shift on the keyboard wins. One player uses left-shift and the other one uses right-shift. Name: 1993-07-cryptarithm Language: Pascal Description: Cryptharithm for text-mode DOS. Name: 1993-08-tictactoe4d Language: Pascal Description: 4D Tic-Tac-Toe for text-mode DOS. There are two versions, one is a two-player game, the other is single-player against a minimax AI. Name: 1994-05-pacman Language: Pascal Description: Pac-man clone for text-mode DOS. Name: 1994-05-polimac115 Language: C Description: Exercises from the course MAC155 from Poli USP (Introduction to Computing for Tech and Sciences). Name: 1994-09-freecell Language: Pascal Description: Freecell implementation for text-mode DOS. I think this was the last program I wrote in Pascal. Name: 1994-11-raytracer Language: C++ Description: An object-oriented raytracer. I had just learned C++ and thought it would be a nice language to write a raytracer. Name: 1995-04-physics Language: C++ Description: Rudimentary physics simulation: no integration, it just plotted a trajectory based on parametric equations. I think this was the first expression evaluator I wrote. In this package there's also a text-based windows manager called RicardoVision. Name: 1995-05-arkanoid Language: C Description: An arkanoid clone for text-mode DOS. Name: 1995-05-scancode Language: C Description: Prints the scancode of any pressed key on keyboard. We didn't have home internet to check scan code tables on those days, so I had to extract them manually. Name: 1995-07-checkers Language: C++ Description: A checkers implementation for text-mode DOS. Two-player only, I didn't write an AI for this. Name: 1995-09-doom Language: C++, Assembly x86 Description: Even though it' s called doom, this is actually a wolfenstein clone. I got a very high frame rate on a 386, but I had only 90-degree walls, no ceiling or floor (but I did have distance cueing and texture mapping). The drawing is based on raycasting over a BSP tree, and most time-consuming tasks were done directly in assembly. Name: 1995-10-descent Language: Assembly x86 Description: Improving on the doom clone, I started a descent clone. This one could place walls on any orientation, but had only flat shading. Name: 1995-10-firedemocpp Language: C++ Description: A small demo with a realistic fire animation, written in C++. Name: 1995-10-firedemoasm Language: Assembly x86 Description: A small demo with a realistic fire animation, rewritten from scratch in assembly, since the C++ version was too slow at the time. Name: 1995-11-sbplayer Language: C++ Description: A macrolanguage player for SoundBlasters, compatible with the command PLAY from MSX. I made this three days after buying a SoundBlaster card. Name: 1995-12-graphicseditor Language: C++ Description: A small graphics editor for the VGA 256 color mode. I think I wrote this to draw textures for the doom clone. Name: 1995-12-rtv Language: Assembly x86 Description: A real-time raytracer over a voxel field. Name: 1996-01-engine Language: Assembly x86 Description: Another 3D graphics engine, this one could place triangles in general position, with texture mapping and gouraud shading. Name: 1996-04-gomoku Language: C++ Description: Text-based Gomoku for DOS, this one had an AI based on heuristics. Name: 1996-04-videotun Language: C++ Description: Display a static pattern to calibrate monitors. Name: 1996-06-asciieditor Language: C++ Description: An ASCII art editor. I used this mostly to write text-based UIs for my programs. The debug screens from BrMSX were written with this. Name: 1996-06-boss Language: C++ Description: A game development library providing low-level access to PC hardware. Since this accessed the hardware directly, I called it the Bittencourt Operating System (BOSS). The nicest thing about this was using operator[] to simulate linear memory arrays in DOS using the XMS driver. Name: 1996-06-psgplayer Language: C++ Description: My first emulator. This one emulates the PSG chip from MSX, it could play MSX tunes on the PC by mapping the PSG registers on the FM registers of the SoundBlaster. Of course this method had a very low sound quality when compared to the original. Name: 1996-06-shading Language: C Description: Fast shading using lookup tables. Name: 1996-08-doom Language: C, Lex, Yacc Description: Another 3d engine, this time with a DSL to describe polygons. Name: 1996-11-rbc Language: C, Lex, Yacc Description: A portable C compiler, it generates code for a virtual stack machine, and this code is then converted to Assembly Z80 or Assembly x86. Name: 1996-11-rbrt Language: C++, Lex, Yacc Description: An adaptative ray tracer. Much improved since the 1994-11 version, this one has more primitives, and include a DSL to describe the scene to be rendered. Name: 1996-12-vesa Language: C Description: Lists all video modes available from a VESA videocard. Name: 1996-12-rbvv Language: C Description: Voxel rendering engine based on shell extraction. This was promising but videocard makers spoiled the fun for us software renderers. Name: 1997-04-rbd Language: C, Lex, Yacc, Assembly x86 Description: 3d engine capable of reading and processing models from 3D Studio, generates fractal landscapes, compatible with dos and linux. Name: 1997-08-penguin Language: C++, Lex, Yacc Description: A parallax game engine including a DSL for character description. Name: 1997-08-brmsx Language: Assembly x86, Binary x86 Description: This MSX emulator raised the bar for all others, being the faster and most accurate of its time. You may like to check the self-modifying code in psg.asm, and also some code written in binary on blit.asm (I was using tasm at the time, and it didn't have MMX support, so I had to encode it manually). Name: 1997-10-wave Language: C Description: Plays a 440Hz square wave on sound blaster using dma transfers. Name: 1997-11-rbz Language: C Description: Comparison of many pre-encoding schemes to improve image compression. The goal was to check which scheme was the best to encode a dithered image. Name: 1997-12-psgplayer Language: C Description: Update to the old psgplayer, this time emulating the PSG using wave-based synthesis. This was a proof of concept before I implemented sound support in BrMSX. Name: 1998-04-dsktool Language: C Description: A FAT12 implementation, useful to insert and extract files from floppy disk images. Name: 1998-04-brsms Language: Assembly x86, Binary x86 Description: Console emulator, supports Sega SG-1000, Sega SC-3000, Sega Master System, Sega Game Gear and Colecovision. Name: 1998-05-glove Language: C Description: A driver for a virtual reality glove called 5th Glove. Name: 1998-06-twoliners Language: BASIC Description: A collection of games and demos in two lines of MSX BASIC. Name: 1998-07-serial Language: C Description: Connects two computers using a serial cable. This was a proof of concept before I implemented multiplayer over serial in BrMSX. Name: 1998-08-scr2grp Language: C Description: Converts ZX Spectrum .SCR screenshots to the MSX .GRP format. Name: 1998-09-must Language: Assembly Z80 Description: Plays compressed music in an MSX with a standard megaram. Mame: 1998-09-wav2wvz Language: C Description: Converts a .wav file to the .wvz format used by must. Name: 1998-12-mp2audio Language: C Description: Decodes the header of an mp2 audio file. Name: 1999-02-smsfix Language: C Description: Fix bad dumps of SMS cartridges. Name: 1999-02-castool Language: C Description: Reads a wave file containing an MSX cassete image and demodulate the FSK to get a .cas binary stream. Name: 1999-03-gota Language: C Description: Realistic physics simulator, could handle static and dynamic coils with newton integration. Name: 1999-05-fudebrowser Language: Assembly Z80 Description: Web browser for MSX. Browses over pre-rendered html pages loaded from disk. Name: 1999-05-wise Language: C, Lex, Yacc Description: Converts html files into the htz format used by fudebrowser. Name: 1999-10-fourfours Language: C Description: Solve the four fours puzzle using forward chaining. Name: 1999-10-readwav Language: Assembly Z80 Description: Plays a .wav file on an MSX without additional hardware. Name: 1999-11-screenconv Language: C Description: Convert images to mant MSX formats (screens 7,8,10,12). Name: 1999-11-fractalcomp Language: C Description: Encoder and decoder for a fractal compression scheme. Quality was nice but it took a long, long time to encode an image. Name: 1999-12-hypefm Language: Assembly Z80, C Description: Driver to add FM music to Hype. Name: 1999-12-tmnt Language: Assembly Z80 Description: RGB sprite engine for MSX2+ in screen 10. Name: 1999-12-joywave Language: Assembly Z80, C Description: Streams a wave to a MSX turboR using joynet. Name: 1999-12-joyrom Language: Assembly Z80, C Description: Loads a ROM in MSX using joynet. Name: 2000-01-3dtictactoe Language: Java Description: 3D tic tac toe as a java applet. This game differs from classic 3d tic tac toe, since it's played on a board topologically equivalent to a toroid. Name: 2000-03-smsx Language: Assembly Z80 Description: Reads a BrSMS savestate and renders the screenshot on a MSX. Name: 2000-04-advram Language: Assembly Z80 Description: Benchmark to evaluate three methods of video blitting on MSX2 (ADVRAM, direct V9958 access and V9958 commands). Name: 2000-05-ameba Language: C Description: Artificial life simulator, to watch evolution in real time. Name: 2000-05-tetrinet Language: Assembly Z80 Description: Multiplayer Tetrinet implementation for MSX, using only 4kb. Name: 2000-12-brmsxwin Language: C++, Assembly Z80 Description: A port of BrMSX to Windows, focusing on user-friendly UI. Name: 2001-08-mis Language: C, Assembly Z80 Description: A variation of huffman encoding based on the MIS algorithm. Name: 2001-11-shalom Language: C, Assembly Z80 Description: Translation of the game Shalom from japanese to portuguese. Includes a DSL to apply the translation patch. Don't open patch.txt unless you like spoilers. Name: 2002-02-bfcompiler Language: BASIC Description: A brainfuck compiler written in 3 lines of MSX BASIC. Name: 2002-05-elite Language: Assembly Z80 Description: 3D wireframe engine for MSX. Name: 2002-06-terramex Language: Assembly Z80 Description: A demo of what Terramex would look like in screen 8. Name: 2002-06-terrain Language: Matlab Description: Terrain generation using Perlin noise. Name: 2002-06-pigment Language: Matlab Description: Animal pigment skin generator using cellular automata. Name: 2002-08-fudebium Language: VHDL Description: A Z80 clone in VHDL. Eventually I ditched this for T80 from opencores. Name: 2002-09-checkers Language: C Description: An engine of checkers where the computer plays against itself. Name: 2002-10-numeric Language: Assembly Z80 Description: Fast routines to perform square root and division by 9. Name: 2002-12-jvm Language: C Description: Decodes the header of a Java .class file. Name: 2003-01-asciiart Language: Javascript Description: ASCII Art written in javascript. Name: 2003-02-canyon Language: Assembly Z80 Description: Vertical parallax game engine for MSX. Name: 2003-02-agi Language: BASIC Description: Converts graphics and sounds from AGI Sierra adventures to MSX2. Name: 2003-04-superopt Language: C Description: Superoptimization, uses brute force to find the minimum assembly code that is equivalent to a given C snippet. Generates Z80 assembly. Name: 2003-08-pangram Language: C Description: Generates pangrams in portuguese. Name: 2003-10-vis Language: C Description: Determines visibility on a maze. Name: 2003-11-plasma Language: Assembly x86 Description: Plasma demo using only 176 bytes. Name: 2003-11-eternalflame Language: Assembly Z80 Description: This is a remake of 1995-10-firedemo, this time running on MSX2 with a binary of only 256 bytes. Name: 2003-11-star Language: C Description: Starfield demo. Name: 2003-12-rbsocket Language: C Description: A web server written on the socket level. Name: 2004-02-ramboplus Language: Assembly Z80 Description: Patch to insert a new opening screen on the game Rambo. In order to fit the new screen on the original 32kb of the game, I had to compress the image using quadtrees and a mix of RLE and LZ. Name: 2004-04-girlsgarden Language: Assembly Z80 Description: Patch to convert the SG1000 game Girl's Garden to MSX. This is mainly a SN76489 sound chip emulator on top of the AY-3-8912. Name: 2004-05-nsub Language: Assembly Z80 Description: Patch to convert the SG1000 game N-Sub to MSX. Improves on the original game adding a new opening screen. Name: 2004-06-sic Language: Assembly Z80 Description: Patch to convert the Colecovision game Space Invaders Collection to MSX. Name: 2004-06-ttf Language: Assembly Z80 Description: True type font renderer for MSX. Name: 2004-07-zbasic Language: C Description: MSX BASIC detokenizer. Name: 2004-08-boing Language: Assembly Z80 Description: A remake of the Amiga demo Boing Ball to MSX1. Name: 2004-08-modplayer Language: Java Description: MOD Player written in java. Name: 2004-08-brmc1000 Language: Java Description: An MC-1000 emulator written as a Java applet. Name: 2004-12-particle Language: C Description: Particle demo, implements the same effect seen on the Star Wars Episode 3 DVD menu. Name: 2005-05-fpgapong Language: VHDL Description: A pong clone for the Digilent FPGA. Name: 2005-06-gomoku Language: Java Description: Gomoku applet. Name: 2005-09-gibi Language: C Description: This was supposed to grow to a .cbr reader for Nintendo DS, but in the end I found the ds screen resolution to be too low for this. Name: 2005-11-graphosds Language: C Description: An MSX graphics editor running on the Nintendo DS. Name: 2006-03-hikago Language: Java Description: Translation of the GBA game Hikaru no Go from japanese to english. I still want to get back to this project someday. Name: 2006-08-nurikabe Language: C++ Description: Nurikabe solver using human-based reasoning. Name: 2006-12-bignumfac Language: C++ Description: Bignum factorial using template metaprogramming. Name: 2007-12-spojdashboard Language: Python Description: A dashboard displaying info about spoj users. Name: 2008-03-roman Language: C Description: Roman numbers using preprocessor metaprogramming. Name: 2008-04-mandelbrot Language: Actionscript, Python, Javascript, Bytecode JVM Description: The Mandelbrot fractal implemented under 512 bytes in many languages. Name: 2008-04-sudoku Language: C++ Description: Solver for irregular sudokus using exact cover and dancing links. Name: 2008-04-power10 Language: C++ Description: Calculates log10(x) in O(log log n) using template metaprogramming. Name: 2008-05-optimumpower Language: C++ Description: Find the optimum sequence of multiplications to calculate integer powers, using addition chains. Name: 2008-05-montecarlo Language: C++ Description: Password reconstruction using monte carlo and exact cover. Name: 2008-05-turingoneliner Language: Python Description: Compiles brainfuck to a python one liner. Name: 2008-06-nthprime Language: Python Description: Calculates the nth prime using a formula based on Wilson's theorem. Name: 2008-06-randomprime Language: C++ Description: Monte carlo simulation for the expected value of a trial and error random prime number algorithm. Name: 2008-06-randompi Language: Python Description: Calculates pi using a monte carlo approximation. Name: 2008-06-miles Language: Python Description: Convert miles to kilometers using fibonacci shifts. Name: 2008-10-bookperspective Language: Python Description: Applies perspective correction on photos of book covers. Name: 2009-01-capullo Language: Python Description: Perspective drawing using pyOpenGL. Name: 2009-03-rakell Language: Haskell Description: Ray-tracer in Haskell. Name: 2009-03-spectrum Language: Java, GWT Description: Wavelength spectrum editor using GWT. Name: 2009-06-cylon Language: VHDL Description: Cylon visor for the Digilent FPGA board. Name: 2010-01-orbits Language: Python Description: Draw planetary orbits when Newton's gravitation law is not inversely quadratic. Name: 2010-02-pairprogramming Language: C Description: Single-person pair programming. Name: 2010-03-cyclic Language: Python Description: Find cyclic numbers. Name: 2010-04-zenoreduce Language: Python Description: Zeno machine emulator. Name: 2010-07-bozofactoring Language: Python Description: Find prime factors of a number using the worst known method. Name: 2010-10-archytas Language: Povray Description: Draw Archytas' solution to the Delian problem using povray. Name: 2010-11-birthday Language: Python Description: Compare approximation to the birthday paradox. Name: 2011-01-geom Language: C++ Description: Generate constructible numbers using forward chaining. Name: 2011-03-randompi Language: BASIC Description: Calculates pi using a monte carlo approximation, in ZX-81 BASIC. Name: 2011-05-torto Language: Prolog Description: Solution of the Torto Reverso puzzle using prolog. Name: 2011-05-bdd Language: C++ Description: An implementation of BDD (binary decision diagram). Name: 2011-07-constexpr Language: C++0x, Python Description: An analysis of metaprogramming techniques using C++0x. Name: 2011-08-doppelstern Language: C++ Description: Solves the Doppelstern puzzle using exact cover and dancing links. Name: 2011-10-gotour Language: Go Description: Solutions for the exercises on go-tour.appspot.com. Name: 2011-10-exactcover Language: Go Description: A parallel implementation of the exact cover written in Go. Name: 2011-11-aiclass Language: C++, Python Description: Exercises from the 2011 ai-class.com course. Name: 2011-12-mlclass Language: Matlab Description: Exercises from the 2011 ml-class.com course. Name: 2012-02-spojlib Language: C++ Description: Generic C++ libraries to help solving spoj problems. Name: 2012-03-html5game Language: Javascript Description: Small game in javascript to demonstrate HTML5 features. Name: 2012-04-spojsamples Language: C++ Description: SPOJ tutorials solved using spojlib. Name: 2012-06-noise Language: Matlab Description: Scripts to compare the noise generated by a real MSX and an emulator. Name: 2012-07-tdcjump Language: Javascript Description: HTML5 showcase demo for a tech talk on TDC 2012 in Sao Paulo. Name: 2012-12-spojtools Language: Python Description: Scripts to automate SPOJ using the command line. Name: 2013-01-facegif Language: Python Description: Face recognition using opencv and python. Name: 2013-01-pigame Language: Python Description: Try to find a period on the sequence of integer multiples of pi. Name: 2013-01-govelha Language: Go Description: Opens the entire game tree of a tic-tac-toe game. Name: 2013-01-facebook Language: C++, Python Description: Solutions for problems on the Facebook Hacker Cup 2013. Name: 2013-04-codejam Language: Python Description: Solutions for problems on the Google Code Jam 2013. Name: 2013-04-analytic Language: Python Description: Exercises and experiments from Sedgewick's Combinatoric Analytics course. Name: 2013-07-multirm Language: Python Description: Traverses a directory tree eliminating repeated files. Name: 2013-07-voronoi Language: C++ Description: Generates a Pointillism using iterated Voronoi diagrams. Name: 2013-08-nurikabe Language: C++ Description: Nurikabe solver using MIP. Name: 2014-01-webserver Language: C++, Go Description: Simple web server in idiomatic C++11 and Go. Name: 2014-02-partition Language: C++ Description: Graph partition using MIP. Name: 2014-02-randomwalk Language: Python Description: Simulation of a one-dimensional random walk. Name: 2014-03-akari Language: C++ Description: Akari solver using MIP. Name: 2014-03-germantank Language: Python Description: Simulation of the german tank problem. Name: 2014-11-grabfm Language: TCL Description: Openmsx script to convert fm basic files to the vgm format. name: 2014-11-0hh1 language: C++ description: Solver for the 0hh1 puzzle using mip. name: 2015-01-getram language: python description: Extract the ram contents from an openMSX save state. name: 2015-04-nephew language: python description: Estimate how much of my genes are present in my nephews. name: 2016-04-codejam language: C++, python description: Solution for google code jam 2016. name: 2016-05-msxpi language: Assembly Z80 description: Calculates 1000 digits of pi using the spigot algorithm. name: 2016-07-spojsubmit language: Python description: Script to submit solutions to spoj through the new interface. name: 2016-07-bozosearch language: Python description: Monte Carlo simulation of the Binary Bozo Search. name: 2016-07-totorial language: Python description: Monte Carlo simulation for the Analytic Combinatorics totorial. name: 2016-09-pokemongo language: Python description: Monte Carlo simulation to estimate time required to collect all pokemons in Pokemon GO. name: 2017-05-magicsquare language: C++ description: Solves the magic square with EasySCIP. name: 2017-07-calculator language: Python description: Builds a two-digit calculation using only HTML. name: 2018-03-countpaths language: Mathematica description: Count the number of paths in a graph, using three different algorithms. name: 2018-10-serialize language: C++ description: Ideas for automatic serialization in C++. name: 2019-02-gplus language: Python description: Download missing photos from Google+ Takeout. name: 2019-02-ocr language: Bash description: Convert a .ps file to .txt by using gs and tesseract. name: 2019-04-googledocs language: Javascript description: Add a menu option on Google Docs to highlight text with a code style. name: 2019-09-blogmigration language: Python description: Parse a wordpress xml to extract individual blog posts and download images. name: 2020-03-birthpalin language: Python description: Check how many birthdays are palindrome in a given base. name: 2020-09-timeturner language: OpenSCAD description: Add random stars to a 3D model of Hermione's Time Turner, suited to 3D printing.