diff options
author | Ben Firshman <ben@firshman.co.uk> | 2010-07-06 12:43:10 +0100 |
---|---|---|
committer | Ben Firshman <ben@firshman.co.uk> | 2010-07-06 12:43:10 +0100 |
commit | 164a093cc99f9953b126d3b457de02461a590be6 (patch) | |
tree | aebb9180d9ce0386e4df5d61396da7918fee5198 | |
parent | fb14713d02d9a3eabcde2094690d48f1a2d9833e (diff) | |
download | jsnes-164a093cc99f9953b126d3b457de02461a590be6.zip jsnes-164a093cc99f9953b126d3b457de02461a590be6.tar.gz jsnes-164a093cc99f9953b126d3b457de02461a590be6.tar.bz2 |
Removed all code specific to my personal site and added some example homebrew roms
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | index.html | 82 | ||||
-rw-r--r-- | jsnes.3.css | 17 | ||||
-rw-r--r-- | roms/croom/README.html | 75 | ||||
-rw-r--r-- | roms/croom/croom.nes | bin | 0 -> 24592 bytes | |||
-rw-r--r-- | roms/lj65/README.txt | 314 | ||||
-rw-r--r-- | roms/lj65/lj65.nes | bin | 0 -> 24592 bytes |
7 files changed, 416 insertions, 74 deletions
@@ -1,5 +1,5 @@ /build/ -/roms/ +/local-roms/ jsnes.tmproj ._* .DS_Store @@ -4,10 +4,6 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>JSNES: A JavaScript NES emulator</title> - <link rel="stylesheet" href="/style.3.css" type="text/css" media="screen" -charset="utf-8"> - <link rel="stylesheet" href="jsnes.3.css" type="text/css" media="screen" -charset="utf-8"> <script src="lib/jquery-1.4.2.min.js" type="text/javascript" charset="utf-8"></script> <script src="lib/dynamicaudio-min.js" type="text/javascript" charset="utf-8"></script> @@ -25,30 +21,34 @@ charset="utf-8"> $(function() { nes = new JSNES({ 'ui': $('#emulator').JSNESUI({ + "Homebrew": [ + ['Concentration Room', 'roms/croom/croom.nes'], + ['LJ65', 'roms/lj65/lj65.nes'], + ], "Working": [ - ['Bubble Bobble', 'roms/Bubble Bobble (U).nes'], - ['Concentration Room', 'roms/croom.nes'], - ['Contra', 'roms/Contra (U) [!].nes'], - ['Donkey Kong', 'roms/Donkey Kong (JU).nes'], - ['Dr. Mario', 'roms/Dr. Mario (JU).nes'], - ['Golf', 'roms/Golf (JU).nes'], - ['The Legend of Zelda', 'roms/Legend of Zelda, The (U) (PRG1).nes'], - ['Lemmings', 'roms/Lemmings (U).nes'], - ['Lifeforce', 'roms/Lifeforce (U).nes'], - ['lj65', 'roms/lj65.nes'], - ['Mario Bros.', 'roms/Mario Bros. (JU) [!].nes'], - ['Mega Man', 'roms/Mega Man (U).nes'], - ['Pac-Man', 'roms/Pac-Man (U) [!].nes'], - ['Super Mario Bros.', 'roms/Super Mario Bros. (JU) (PRG0) [!].nes'], - ['Tennis', 'roms/Tennis (JU) [!].nes'], - ['Tetris', 'roms/Tetris (U) [!].nes'], - ['Tetris 2', 'roms/Tetris 2 (U) [!].nes'], - ['Zelda II - The Adventure of Link', 'roms/Zelda II - The Adventure of Link (U).nes'] + ['Bubble Bobble', 'local-roms/Bubble Bobble (U).nes'], + + ['Contra', 'local-roms/Contra (U) [!].nes'], + ['Donkey Kong', 'local-roms/Donkey Kong (JU).nes'], + ['Dr. Mario', 'local-roms/Dr. Mario (JU).nes'], + ['Golf', 'local-roms/Golf (JU).nes'], + ['The Legend of Zelda', 'local-roms/Legend of Zelda, The (U) (PRG1).nes'], + ['Lemmings', 'local-roms/Lemmings (U).nes'], + ['Lifeforce', 'local-roms/Lifeforce (U).nes'], + + ['Mario Bros.', 'local-roms/Mario Bros. (JU) [!].nes'], + ['Mega Man', 'local-roms/Mega Man (U).nes'], + ['Pac-Man', 'local-roms/Pac-Man (U) [!].nes'], + ['Super Mario Bros.', 'local-roms/Super Mario Bros. (JU) (PRG0) [!].nes'], + ['Tennis', 'local-roms/Tennis (JU) [!].nes'], + ['Tetris', 'local-roms/Tetris (U) [!].nes'], + ['Tetris 2', 'local-roms/Tetris 2 (U) [!].nes'], + ['Zelda II - The Adventure of Link', 'local-roms/Zelda II - The Adventure of Link (U).nes'] ], "Nearly Working": [ - ['Duck Hunt', 'roms/Duck Hunt (JUE) [!].nes'], - ['Super Mario Bros. 3', 'roms/Super Mario Bros. 3 (U) (PRG1) [!].nes'] + ['Duck Hunt', 'local-roms/Duck Hunt (JUE) [!].nes'], + ['Super Mario Bros. 3', 'local-roms/Super Mario Bros. 3 (U) (PRG1) [!].nes'] ] }) }); @@ -56,19 +56,11 @@ charset="utf-8"> </script> </head> -<body><div id="wrapper"> +<body> <h1>JSNES</h1> - <p class="summary">A JavaScript <a href="http://en.wikipedia.org/wiki/Nintendo_Entertainment_System">NES</a> emulator. <small>By <a href="/">Ben Firshman</a> <a href="http://twitter.com/bfirsh">@bfirsh</a></small></p> <div id="emulator"></div> -<script type="text/javascript"> -digg_url = 'http://digg.com/playable_web_games/JSNES_A_NES_emulator_written_entirely_in_Javascript'; - -</script> -<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script> -<script type="text/javascript" src="http://www.reddit.com/button.js?t=1"></script> - <h2>Controls</h2> <table id="controls"> <tr> @@ -116,28 +108,6 @@ digg_url = 'http://digg.com/playable_web_games/JSNES_A_NES_emulator_written_enti <td>Num-3</td> </tr> </table> - - <h2>About</h2> - <p>A few months ago, I stumbled across Matt Westcott's excellent <a href="http://matt.west.co.tt/spectrum/jsspeccy/">JSSpeccy</a>. I had seen some pretty imaginative <a href="http://en.wikipedia.org/wiki/Canvas_(HTML_element)">canvas</a> creations, but JavaScript emulators? What a perfect idea for a daft new project.</p> - <p>I got underway shamelessly porting <a href="http://www.virtualnes.com/">vNES</a> into JavaScript. Although not the most efficient, it didn't have any of the pointer memory mapping magic associated with emulators written in lower level languages. As such, it was more or less a direct port, bar a few tweaks to compensate for the lack of static typing, and obviously a rewrite of all the I/O.</p> - <p>JSNES runs at full speed on <a href="http://www.google.com/chrome">Google Chrome</a> with a modern computer, so it is highly recommended you use that to play. On <a href="http://www.apple.com/safari/">Safari 4</a> it runs at almost full speed. Otherwise, it just about works on <a href="http://getfirefox.com/">Firefox 3.5</a>, but it's hardly playable.</p> - <p>The source is available on <a href="http://github.com/bfirsh/jsnes/">Github</a>, contributions welcome!</p> - - <h2>News</h2> - <h3>7th January 2010</h3> - <p>It has been in the pipeline for a while, but JSNES can now play sound! There is no way of playing dynamically generated sound in JavaScript, but I have created a tiny Flash application reads a buffer from JavaScript then writes it to the sound card. I hope to release this as a reusable library, hopefully opening up many possibilities for cool sound applications such as <a href="/projects/jstunes/">jsTunes</a>.</p> - <p>Playing sound probably won't run at full speed, but Chrome appears to be fastest.</p> - -<script type="text/javascript" charset="utf-8"> - var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); - document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); - </script> - <script type="text/javascript"> - try { - var pageTracker = _gat._getTracker("UA-6774621-1"); - pageTracker._trackPageview(); - } catch(err) {} -</script> -</div></body> +</body> </html> diff --git a/jsnes.3.css b/jsnes.3.css deleted file mode 100644 index 0cfa886..0000000 --- a/jsnes.3.css +++ /dev/null @@ -1,17 +0,0 @@ -#emulator { - text-align: center; -} - -.nes-controls { - margin-bottom: 2em; -} - -.nes-status { - font-size: 0.8em; - color: #999; -} - -.nes-screen { - display: block; - margin: 0 auto 20px auto; -} diff --git a/roms/croom/README.html b/roms/croom/README.html new file mode 100644 index 0000000..79b7989 --- /dev/null +++ b/roms/croom/README.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML><html><head> +<title>Concentration Room</title> +<link rel="stylesheet" type="text/css" href="docs/croom.css"> +</head><body> +<div id="pgheader"><div class="thereisnosuchthingaspaddingauto"> +<h1><img alt="Concentration Room" width="320" height="128" src="docs/croomlogo320.png"></h1> +<ul id="headerlist"> +<li><strong>About</strong> +<ul> +<li><a href="#overview">Overview</a> +<li><a href="#requirements">Requirements</a> +<li><a href="#modes">Modes</a> +<li><a href="#faq">FAQ</a> +</ul> +<li><a href="http://pineight.com/croom/dl">Download</a> +</ul> + +</div></div><div id="pgbody"><div class="thereisnosuchthingaspaddingauto"> + +<h2><a name="overview">Overview</a></h2> +<img src="docs/croom_screenshot01.png" style="float:right; margin: 0 0 1em 1em"> +<p> +An accident at the biochemical lab has released a neurotoxin, +and you've been quarantined after exposure. Maintain your +sanity by playing a card-matching game. +</p><p> +The table is littered with 10, 20, 36, 52, or 72 face-down cards. +Flip two cards, and if they show the same emblem, you keep them. +If they don't, flip them back. +</p> + +<h2><a name="requirements">System Requirements</a></h2> +<p> +Concentration Room is designed for your Nintendo Entertainment System. This version is an NROM-128 (16 KiB PRG, 8 KiB CHR), and it has been tested on a <a title="CompactFlash to NES adapter" href="http://www.retrousb.com/index.php?cPath=24">PowerPak</a>. It also works in PC-based emulators such as <a href="http://nestopia.sourceforge.net/">Nestopia</a> and <a href="http://fceux.com/web/home.html">FCE Ultra</a>. +</p> + +<h2><a name="modes">Modes</a></h2> +<dl> +<dt>1 Player Story<dd> +Play solitaire to start to work the toxin out of your system. Then defeat other contaminated technicians and children one on one. +<dt>1 Player Solitaire<dd> +Select a difficulty level, then try to clear the table without having to turn back more than 99 non-matching pairs. +<dt>2 Players<dd> +Two players take turns turning over cards. They can pass one controller back and forth or use one controller each. If a pair doesn't match, the other player presses the A and B Buttons and takes a turn. The first player to take half the pairs wins. +<dt>Vs. CPU<dd> +Like 2 Players, except the second player is controlled by the NES. +</dl> + +<h2><a name="faq">FAQ (Fully Anticipated Questions)</a></h2> +<dl> +<dt>How long have you been working on this?<dd> +This is actually my third try. The logo and the earliest background sketch date back to 2000. It got held up because I lacked artistic skill on the 16x16 pixel canvas. The second try in 2007 finalized the appearance of the game, and I did some work on the "emblem designer" that will show up in a future release. In late November 2009, I discovered <a title="Review of Dian Shi Mali on waluigious.com" href="http://www.waluigious.com/2008/09/in-which-dian-shi-ma-li.html"><i>Dian Shi Mali</i></a>, a <a title="Dian Shi Mali article on Wikipedia" href="http://en.wikipedia.org/wiki/Dian_Shi_Mali">gambling simulator</a> for the Famicom (Asian version of the NES) that also uses 16x16 pixel emblems. After a few hours of <a title="Video of Dian Shi Mali play" href="http://www.youtube.com/watch?v=4s1mAPISOzw">pushing Start to rich</a>, I was inspired to create a set of 36 emblems. By then, I was ready to code most of the game in spare time during December 2009. +<dt>Why are you still making games that don't scroll? You're better than that, as I saw in the <a title="Video of a homebrew sidescroller engine" href="http://www.youtube.com/watch?v=GY693NxC9xU">President video</a>.<dd> +I saw it as something simple that I could finish fairly quickly in order to push falling block games off <a href="http://www.pineight.com/">the front page of my web site</a>. +<dt>GameTek already made two other Concentration games on the NES. Why did you make this one?<dd> +The controls in <i>I Can Remember</i> nor <i>Classic Concentration</i> are clunky. Neither of them features a full 72-card deck. And of course, they're not <a title="Free Software Definition (free speech, not free beer)" href="http://www.gnu.org/philosophy/free-sw.html">free software</a>. +<dt>In vs. modes, why end the game at half the cards matched instead of one more than half?<dd> +Pairs early in a game require more skill to clear, and the last pair requires absolutely no skill. For example, a 20-card game tied at 4-4 will always end up 6-4. And at 5-3, the player in the lead likely got more early matches. So if we award no points for the last pair, the first player to reach half always wins. +<dt>What's that font?<dd> +The font in the game's logo is called <a href="http://www.windowfonts.com/fonts/wasted-collection.html">Wasted Collection</a>. The font in <a title="Launcher for small programs for Game Boy Advance" href="http://www.pineight.com/gba/#mbmenu">Multiboot Menu</a> was based on it. The monospace font for menu text originally appeared in the "Who's Cuter" demo and is based on <a href="http://en.wikipedia.org/wiki/Chicago_%28typeface%29">Apple Chicago by Susan Kare</a>. (Another fun font is on <a href="http://www.angelfire.com/stars5/tkcpics2/wildworld/#downloads">this page</a>.) +<dt>Are you a Nazi?<dd> +No, and that's why this game is called Concentration <em>Room,</em> not <a title="National Lampoon video" href="http://www.youtube.com/watch?v=cXeHn9k27Iw">Concentration Camp</a>. +</dl> +<h2>Legal</h2> +<p> +Copyright © 2010 Damian Yerrick <croom@pineight.com> +</p><p> +Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. +</p><p> +The accompanying program is free software: you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>, version 3 or later. As a special exception, you may copy and distribute exact copies of the program, as published by Damian Yerrick, in iNES or UNIF executable form without source code. +</p><p> +This product is not sponsored or endorsed by Nintendo, Ravensburger, Hasbro, Mattel, Quaker Oats, NBC Universal, GameTek, or Apple. +</p> +</div></div> +</body></html> diff --git a/roms/croom/croom.nes b/roms/croom/croom.nes Binary files differnew file mode 100644 index 0000000..716d3cc --- /dev/null +++ b/roms/croom/croom.nes diff --git a/roms/lj65/README.txt b/roms/lj65/README.txt new file mode 100644 index 0000000..aaf1804 --- /dev/null +++ b/roms/lj65/README.txt @@ -0,0 +1,314 @@ + _ _ __ ___
+| | (_) / / / __|
+| | _ / /_ | /__
+| | | | | _ \ |___ \
+| |_ | | | (_) | .___) |
+ \__|_| | \___/ \___/
+ |__/
+
+LJ65
+an NES game
+by Damian Yerrick
+
+See the legal section below.
+
+_____________________________________________________________________
+Introduction
+
+LJ65 is an action puzzle game for NES comparable to the popular
+game Tetris(R), except distributed as free software and with more
+responsive movement controls.
+
+_____________________________________________________________________
+Installing
+
+LJ65 is designed to run on Nintendo Entertainment System (called
+Family Computer in Japan) and accurate NES emulators. It is
+distributed as source code and an iNES format binary, using mapper
+0 (NROM). Separate binaries for NTSC and PAL systems are provided.
+
+This program has been tested on NES using a PowerPak. It also works
+on the current versions of Nintendulator, Nestopia, and FCE Ultra.
+(Do not use the outdated Nesticle emulator anymore.)
+
+To run LJ65 on an NES without buying a PowerPak, you'll need to
+solder together an NES cartridge with at least 16 KB of PRG space
+and 4 KB of CHR space. A modded NROM-128 or CNROM board should be
+fine. Chris Covell has put together instructions on how to replace
+NES Game Paks' mask ROM chips with writable EEPROMs.
+http://www.zyx.com/chrisc/solarwarscart.html
+
+To build LJ65 from source code, you will need
+ * CC65 (from http://www.cc65.org/ but you don't need the
+ non-free C compiler)
+ * GNU Make and Coreutils (included with most Linux distributions;
+ Windows users can use MSYS from http://www.devkitpro.org/)
+
+Modify the makefile to point to where you have CC65 installed.
+Then run make. (Windows users can run mk.bat instead, which runs
+make in the correct folder.) On a desktop PC from late 2000 with
+a Pentium III 866 MHz, recompiling the whole thing takes about one
+second. To build some data conversion tools, you'll need a GNU C
+compiler such as MinGW; I have included Windows binaries of the
+conversion tools for those who want to quickly get into hacking
+on LJ65.
+
+_____________________________________________________________________
+Game controls
+
+Title screen:
+ Start: Show playfields.
+Game over:
+ A+B: Join game.
+Menu:
+ Control Pad up, down: Move cursor.
+ Control Pad left, right: Change option at cursor.
+ A: Start game.
+Game:
+ Control Pad left, right, down: Move piece.
+ Control Pad up: Move piece to floor.
+ Control Pad up, down once landed: Lock piece into place.
+ A: Rotate piece clockwise.
+ B: Rotate piece anticlockwise.
+ Start: Pause game.
+
+_____________________________________________________________________
+Play
+
+At first, press Start to skip past each of the informational screens.
+Then press Start at the title screen to display the playfields.
+At this point, either player can press the A and B buttons at the
+same time to begin playing.
+
+The pieces in LJ65 are called tetrominoes. (The word comes from
+tetra-, a Greek prefix meaning four, and -omino, as in domino or
+pentomino.) Each of the seven tetrominoes is made of four square
+blocks and named after a letter of the Latin alphabet that it
+resembles:
+ _ _ ___ ___ _ ___
+ _______ | |___ ___| | | | _| _| _| |_ |_ |_
+|_______| |_____| |_____| |___| |___| |_____| |___|
+ I J L O S T Z
+
+When you start the game, a tetromino will begin to fall slowly into
+the bin. You can move it with the Control Pad and rotate it with
+the A or B button.
+
+The goal of LJ65 is to make complete horizontal lines by
+packing the pieces into the bin with no holes. If you complete
+a line, everything above it will move down a row. If you complete
+more than one line with a piece, you get more points.
+
+As you play, the pieces will gradually fall faster, making the game
+more difficult. At some point, the pieces will fall so fast that
+they appear immediately at the bottom row of the playfield. If you
+fill the bin to the top, to the point where more pieces cannot enter,
+you "top out" and the game ends.
+
+If you have an overhang in the blocks, you can slide another
+piece under it by holding Left or Right as the new piece passes
+by the overhang:
+ _
+ | |
+ _| |
+ |___|
+ _ _ _ _ _
+ _| | => _| | | | => _| | |
+| _| | _|_| | | _| |
+|_| |_| |___| |_|___|
+
+Or in some cases, you can rotate pieces into very tight spaces:
+ _
+ _| |
+ |_ |
+ |_|
+ _ ___ _ _ ___ _ ___
+| | |_ | => | |_| |_ | => | |___|_ |
+| |_ _| | | |_ |_| | | |_ _| |
+|___| |___| |___|_|___| |___|_|___|
+
+_____________________________________________________________________
+Rotation systems
+
+LJ65 supports two rotation systems, which it calls "Center" and
+"Bottom". Center implements rules more familiar to Western players,
+while Bottom pleases fans of the Japanese arcade tradition.
+
+In Center, pieces start out with their flat side down, and they
+rotate around the center of an imaginary 3x3 or 4x4 cell bounding
+box. If this is blocked, try one square to the right, one square to
+the left, and finally one square up.
+Up locks a piece into place immediately, and down waits for another
+press of up or down before locking the piece.
+After a piece locks, the next one comes out immediately, but after
+the pieces have sped up enough, the next piece waits a bit.
+Colors match the so-called Guideline: I is turquoise.
+
+. []. . []. . . . . []. . [][] . []. . . . []. .
+[][][] . [][] [][][] [][]. [][]. . [][] . [][] [][].
+. . . . []. . []. . []. . . . . . [] [][]. . [].
+Figure: T and S rotation in Center
+
+In Bottom, the J, L, S, T, and Z pieces start out with their flat
+side up, and they rotate to stay in contact with the bottom of an
+imaginary 3x3 cell box. S and Z pieces also keep a block in the
+bottom center of this box. If this is blocked by a wall or a block
+outside the piece's central column, then try one square to the right,
+one square to the left, and finally (in the case of T) one square up.
+Down locks on contact, and up waits for another press of up or down
+to lock. After a piece locks, the next one waits a bit to come out.
+Colors match those from a game with a monkey: I is red.
+
+. . . . []. . . . . []. . . . []. . . . . []. .
+[][][] [][]. . []. . [][] . [][] [][]. . [][] [][].
+. []. . []. [][][] . []. [][]. . []. [][]. . [].
+Figure: T and S rotation in Bottom
+
+_____________________________________________________________________
+Scoring
+
+Use up or down on the Control Pad to drop pieces, and you'll get
+one point per row that the piece moves down.
+
+You also get points for clearing lines. Clearing more lines
+with a single piece is worth more points:
+
+SINGLE (1 line with any piece) 1 * 1 * 100 = 100 points
+DOUBLE (2 lines with any piece) 2 * 2 * 100 = 400 points
+TRIPLE (3 lines with I, J, or L) 3 * 3 * 100 = 900 points
+HOME RUN (4 lines with I only) 4 * 4 * 100 = 1600 points
+
+Making lines with consecutive pieces is called a combo and is
+worth even more points. In general, the score for a line clear
+is the number of lines cleared with this piece, times the number
+of lines cleared so far in this combo, times 100. For example,
+a double-triple-single combo is worth a total of 2300 points:
+
+2 lines 2 * 2 * 100 = 200 points
+3 lines 3 * 5 * 100 = 1500 points
+1 line 1 * 6 * 100 = 600 points
+
+When you start clearing lines, the game shows how many lines you
+made in this combo. If you leave a 2-block-wide hole at the side
+of the bin, you might manage to make a combo of 12 lines or more.
+But then you have to weigh this against keeping your stack low
+and earning more drop bonus.
+
+There are some grandmasters who can get millions of points in
+some puzzle games. There exists a known corner case in this
+game's score computation, and scoring is expected to fail beyond
+6,553,000 points.
+
+If two players are playing, and you have GARBAGE turned on in the
+menu, and you complete more than one line with a piece, the other
+player's field rises by one or more rows:
+
+DOUBLE: 1 line
+TRIPLE: 2 lines
+HOME RUN: 4 lines
+
+This is not affected by combos.
+
+_____________________________________________________________________
+Keypress codes
+
+Some of the lesser-used features of the game are hidden so that
+players interested in the most common features don't become confused.
+
+At title screen:
+ * B + Left hides the ghost piece.
+
+_____________________________________________________________________
+Questions
+
+Q: Isn't this a copy of Tetris?
+
+Yes, in part, but we don't believe it infringes Tetris Holding's
+copyright. It was developed by people who had not read the source
+code of Tetris. We disagree with Tetris Holding's claim of broad
+patent-like rights over the game. Any similarity between LJ65 and
+Tetris is a consequence of common methods of operation, which are
+excluded from U.S. copyright (17 USC 102(b)).
+
+Q: Where's (feature that has appeared in another game)?
+
+If it's mentioned in the "future" list at the bottom of CHANGES.txt,
+I know about it, and you may see some of those issues resolved in
+the next version. Otherwise, I'd be glad to take suggestions,
+provided that they aren't "network play with no lag" or "make the
+game just like that Japanese game I saw on YouTube".
+
+Q: Why aren't the blocks square on my TV?
+
+In NTSC, a square pixel is 7/24 of a color subcarrier period wide
+in 480i mode or 7/12 of a period in the so-called "240p" mode.
+But like the video chipsets in most 8-bit and 16-bit computing
+platforms, the NES PPU generates pixels that are not square:
+8/12 of a period instead of 7/12. Games for PC, Apple II, or any
+other platform with frame buffer video could correct for this by
+drawing differently sized tiles, but games for NES are limited to
+an 8x8 pixel tile grid. PAL video and widescreen televisions make
+the problem even more pronounced.
+
+Q: Why do some pieces change color subtly when they land?
+
+The NES's tile size is 8x8 pixels, but the "attribute table"
+assigns palettes to 16x16 pixel areas, or clusters of 2x2 tiles.
+Only three colors plus the backdrop color can appear in each
+color area. So the game approximates the color of each piece as a
+combination of blue, orange, and green throughout the screen.
+
+The MMC5 mapper has ExGrafix, which allows 8x8 pixel color areas.
+But the only source of MMC5 hardware is used copies of Castlevania
+III: Dracula's Curse and Koei's war sims, unlike the discrete mapper
+boards that retrousb.com sells.
+
+Q: Who is the fellow on How to Play, and where are his legs?
+
+Who are you, and where is your tail? ;-)
+
+_____________________________________________________________________
+Credits
+
+Program and graphics by Damian Yerrick
+Original game design by Alexey Pajitnov
+NES assembler toolchain by Ullrich von Bassewitz
+NES emulators by Xodnizel, Martin Freij, and Quietust
+NES documentation by contributors to http://nesdevwiki.org/
+
+Music:
+ TEMP is "Tetris New Melody (OCRemoved)" by Am.Fm.GM
+ K.231 is "Leck mich im Arsch" by Wolfgang A. Mozart
+
+_____________________________________________________________________
+Legal
+
+Copyright (c) 2009 Damian Yerrick
+
+This manual is under the following license:
+
+ This work is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any
+ damages arising from the use of this work.
+
+ Permission is granted to anyone to use this work for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this work must not be misrepresented; you
+ must not claim that you wrote the original work. If you use
+ this work in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such,
+ and must not be misrepresented as being the original work.
+ 3. This notice may not be removed or altered from any
+ source distribution.
+
+ The term "source" refers to the preferred form of a work for making
+ changes to it.
+
+The LJ65 software described by this manual is distributed under
+the GNU General Public License, version 2 or later, with ABSOLUTELY
+NO WARRANTY. See GPL.txt for details.
+
+LJ65 is not a Tetris product and is not endorsed by Tetris Holding.
diff --git a/roms/lj65/lj65.nes b/roms/lj65/lj65.nes Binary files differnew file mode 100644 index 0000000..1304d36 --- /dev/null +++ b/roms/lj65/lj65.nes |