-
Notifications
You must be signed in to change notification settings - Fork 13
/
README
690 lines (534 loc) · 19.4 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
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-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-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-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-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-aleste2
Language: Assembly Z80, Python, TCL
Description: Converts Aleste 2 from disks to a ROM files.