Charles Moyes

Hacker, maker, entrepreneur.

What's Up

Co-founder and CTO of BlockSchool, a San Francisco-based company that is building the world's first online CS school for kids featuring live tutors.

In my spare time, I enjoy playing didgeridoo, distance running, and listening to EDM music.

I love what I do.

Cornell University Projects

Brain-Computer Interface "Brain Pong" Game using EEG (2012)

With Mengxiang Jiang for ECE 4760: Designing with Microcontrollers, advised by Dr. Bruce R. Land

Few video games are more basic than Pong, but Charles Moyes and Mengxiang Jiang’s version is incredibly complex. The two Cornell University students built a custom electroencephalography (EEG) device so they could control the game’s onscreen paddle with their minds.

Popular Science Magazine, July 20, 2012

Built a robust Brain-Computer Interface (BCI) using single-channel electroencephalography (EEG) with an AVR ATmega644 microcontroller where the user is able to play Pong using their brain waves.

Featured by Engadget, CNet, New York Times, Popular Science, CBC News, Slate Magazine, PC World, Mashable, Hackaday, Adafruit, German National TV (ZDF kulturpalast), TechFest 2013 conference at Indian Institute of Technology, Bombay campus.

Rigid Body Sound Synthesis Engine (2011)

With Mark Wang (Google) for CS 6650: Computational Motion, advised by Dr. Doug L. James

Wrote a rigid body sound synthesis engine using modal synthesis and contact force projection over a system of ODE mass-spring-damper oscillators [O'Brien 2002] with a tetrahedral finite element model in C++. Developed a rigid body dynamics engine using the projected Gauss-Seidel method [K. Erleben 2007] to iteratively resolve contact forces. Was able to model the sound of objects hitting glass, along with striking resonating bells in real-time.

Fenestra Puzzle Platformer XNA Game for Xbox 360 with Kinect NUI (2011)

With John Austin, Crystal Ngai, Matt Blair, and Sixing Chen (Harvard), advised by Dr. Walker White

Developed XNA game engine featuring in-line scripting (pre-compiled and dynamic using .NET reflection), WinForms GUI level editor with embedded XNA context and C# scripting, hierarchical structure of MVC-patterned game entities, Kinect NUI controls with moving averages for jumping detection and time-domain motion filtering for arm movements, refraction and glow FX shader effects, Farseer 2D physics engine, sound engine with dynamically-blended music tracks, and Xbox 360 port.

High School Projects

OpenGL 3D Flight Simulation (2007)

I created a realistic software-based flight simulation of a Cessna aircraft using my own Newtonian rigid body dynamics engine, an accurate FEM (finite element) flight model, and my own OpenGL 3D engine in C++. Partitioned the simulated Cessna aircraft into simplified lifting surfaces, such as elevators and wing sections. Empirical NACA wind tunnel test data for cambered airfoils is used to calculate velocity, angle of attack, and lift and drag coefficients. The lift, drag, thrust, and gravitational forces are numerically integrated via the Verlet method [Dummer] to determine the position of the airplane.

Rigid body contact forces are resolved iteratively using velocity impulses and positional penetration depth corrections [Mirtich and Canny 1995]. The results are graphically rendered onto the screen in real-time, responding to user input via keyboard controls. Atmospheric scattering [O'Neil] sky color calculations, quad-tree LOD terrain rendering, and cloud rendering lend graphical realism to the project.

WIP WebGL in-browser demo with accelerometer controls using three.js and Physijs. Future plans for Leap Motion NUI integration.

x86 32-bit Operating System (2006)

I built an Intel x86 compatible 32-bit Operating System in C and ASM bootable using GNU GRUB. The monolithic kernel features interrupt-based system calls, a keyboard driver, a console I/O driver, a basic error handler, a command line, FAT12 file system support, and the execution of stand-alone C applications. There is a paging memory manager with process virtual address spaces and DMA, and support for preemptive multitasking using a round robin task scheduler. ELF user-mode (Ring 3) binaries are loaded for the shell and testing applications. The user applications are loaded using a floppy disk controller driver. Testing is accomplished using the Bochs x86 PC simulator.

Software Audio Synthesizer (2008)

I wrote a software audio synthesizer that parses MIDI data from my M-Audio Axiom keyboard. It has polyphonic sine wave, sawtooth, square wave, and white noise oscillators. A Butterworth low-pass digital FIR third-order polynomial filter with resonance is used for subtractive synthesis. There is also rudimentary support for ASDR (Attack, Sustain, Decay, Release) envelopes. Effects include reverberation, bit crusher, pitch bend, phaser, and chorus (using 7 simultaneous, detuned oscillators). The graphical user interface uses the GTK library.

Doom for Nintendo DS (2005) Web Site; with Dave Murphy

I've lost interest in Metroid Prime: Hunters for my DS again. I just can't get over the nagging criticism that I'd much rather be playing either a real Metroid title or a real FPS, not the two lamely mashed together. Gimme Doom any day.

And lo and behold, some homebrew programmer has!

Kotaku, August 9, 2006

Ported the PrBoom fork of the Doom engine to Nintendo DS using Nintendo DS SDL library. Added wifi multiplayer support using Stephen Stair's DS Wifi library. WIP Yamaha OPL3 FM synthesizer emulator on ARM7. Received over 13k downloads on day one and media coverage from Kotaku, 1-Up, DCemu, Drunken Coders, and Digg.

Atari 2600 System Emulator for Nintendo DS (2005)

Ported the Stella Atari 2600 emulator to Nintendo DS using Nintendo DS SDL library. ROM file browser using Michael Chisholm's Nintendo DS FAT library libFAT with DLDI support (shared my file browser implementation with Troy Davis for his Commodore 64 DS emulator, FrodoDS). 6502 CPU core emulator runs on DS ARM9. Atari Television Interface Adapter (TIA) graphics outputs to Nintendo DS graphics MODE_FB0 framebuffer. Streaming audio output support using a ring buffer which sends samples to the ARM7 processor using shared memory IPC. Listed on Zophar's Domain and Dev-Scene DIY gaming web sites.

OpenGL 3D Engine (2005-2008)

I have been recently working on an updated version of my 3D engine that features effects such as GLSL shader support, cubic environment mapping (reflections and refractions), high dynamic range HDR lighting, per-pixel lighting, bump mapping, parallax mapping, and chromatic aberration. The engine supports rendering key-frame animated Quake 2 MD2 models and Quake 3 binary space partition BSP indoor environments.

The engine also features rigid body dynamics and outdoor terrain rendering (with sky boxes and water). Shadows are rendered using the stencil buffer technique. I plan to add support for variance shadow mapping, GLSL atmospheric scattering, and screen-space ambient occlusion (SSAO). I am also interested in deferred shading and real-time global illumination techniques for rendering photorealistic lighting.