-- Table structure for table `blah_vote_desc`
--

CREATE TABLE `blah_vote_desc` (
  `vote_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `vote_text` text NOT NULL,
  `vote_start` int(11) NOT NULL DEFAULT '0',
  `vote_length` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`vote_id`),
  KEY `topic_id` (`topic_id`)
) ENGINE=MyISAM AUTO_INCREMENT=33 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `blah_vote_desc`
--

INSERT INTO `blah_vote_desc` VALUES (1,71,'jakich lubisz bohater?w?',1107268598,0),(2,107,'Stuff z FO1/2 czy FO:T?',1109098988,604800),(3,162,'jacys chetni?',1111879431,1209600),(5,355,'Jaki smak?',1120764906,0),(6,405,'Kt?re nowo?ci z Sonic\'em zapowiadaj? sie najlepiej?',1129140012,0),(7,468,'Zms wraca.. co wy nato^^',1136636702,0),(8,474,'Co jest bardziej oble?ne.',1136920921,0),(9,495,'ile razy w tygodniu sie masturbujesh??',1139922792,864000),(10,592,'Na kt?r? gre polujesz?',1143304757,0),(11,605,'Co sadzisz ?',1144072994,0),(12,610,'Czy boisz sie Buki?',1144459649,0),(13,625,'JAKIE LUBISZ NAJBARDZIEJ PRODUKCJE ?',1144851450,0),(14,703,'Twój ulubiony zespóÅ&amp;#65533;:',1148328851,0),(15,717,'Co kupiłeś starej na dzień starej?',1148632453,259200),(16,734,'Ktory transformer jest najlepszy??',1149962041,0),(17,906,'CZY GRY Z TONIM HO£KIEM SOM FJANE???????????????/////////////////',1153585333,0),(18,923,'hair',1153902305,0),(19,1090,'Vote',1157901240,0),(20,1124,'zabrodziæ siê?',1158700397,0),(21,1311,'Powtarzalno¶æ w sprawdzonych seriach:',1166293210,0),(22,1476,'Czy moja klasa jest zwalona?',1179160999,0),(23,1490,'Dobry pomys³?',1179607639,0),(24,1657,'Na ktora partie/komitet zaglosujesz/zaglosowalbys dzisiaj w wyborach do Sejmu?',1192965752,172800),(25,1725,'czy drx  ma usun±æ dzia³ Sonic',1198581525,0),(26,1732,'shoutbox',1198878927,0),(27,1802,'Czy lubisz Pana Jezusa??',1207750144,0),(28,1812,'Pytanie do ankiety',1212274229,0),(29,1813,'Wefwef wef32?',1212589930,26956800),(30,1839,'Spierdalaj',1219616333,0),(31,1851,'MASZ?',1226959485,0),(32,4756,'Na co najlepiej siê nie spuszczaæ??? XD',1308138950,0);

--
-- Table structure for table `blah_vote_results`
--

CREATE TABLE `blah_vote_results` (
  `vote_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `vote_option_id` tinyint(4) unsigned NOT NULL DEFAULT '0',
  `vote_option_text` varchar(255) NOT NULL DEFAULT '',
  `vote_result` int(11) NOT NULL DEFAULT '0',
  KEY `vote_option_id` (`vote_option_id`),
  KEY `vote_id` (`vote_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `blah_vote_results`
--

INSERT INTO `blah_vote_results` VALUES (1,1,'Sonic',0),(1,2,'Amy',0),(1,3,'Tails',0),(1,4,'Cream i Chees',1),(1,5,'R??',0),(1,6,'Shadow',1),(1,7,'Knukcles',0),(1,8,'Eggman',0),(2,1,'FO1/2',1),(2,2,'FO:T',0),(2,3,'Mixed',2),(3,1,'tka! :):):)',1),(3,2,'moge zagrac.',1),(3,3,'ja! ja! ja! wezcie mnie!!1',3),(5,1,'paprykowe',4),(5,2,'zielona cebulka',3),(5,3,'serowe',1),(5,4,'fromage',0),(5,5,'grill',1),(5,6,'bekon',2),(5,7,'smakowy misz-masz',1),(6,1,'Sonic Rush',2),(6,2,'Shadow The Hedgehog',3),(6,3,'Sonic Riders',0),(6,4,'Sonic The Hedgehog',5),(7,1,'tak',3),(7,2,'nie',2),(8,1,'Furry',6),(8,2,'Loli',2),(9,1,'jakies 2-3 razy dziennie',3),(9,2,'ile moge tD',0),(9,3,'a h****cie to boli, mam duzego to lubie sie pobawic!!!!',0),(9,4,'mam dziefczyne !!!',3),(9,5,'trzepanie i walenie to najlepsze okreslenie XD',2),(10,1,'Heroes of Might and Magic 5',2),(10,2,'Unreal Tournament 2007',0),(10,3,'Splinter Cell: Double Agent',0),(10,4,'Inna [napisz jaka]',6),(11,1,'Lcd sux ... -_-',5),(11,2,'Lcd rlz ^_^',3),(12,1,'tak',1),(12,2,'tak, bardzo!',4),(12,3,'troche sie boje',1),(12,4,'na jej widok sram po gaciach!!!',13),(12,5,'nie, no moze troszeczke...',3),(13,1,'ROCCO SIFREDI',1),(13,2,'COLOR CLIMAX',1),(13,3,'PODRYWACZE',0),(13,4,'PODRYWACZKI',0),(13,5,'CLASSIC XXX',0),(13,6,'NEW SENSATIONS',0),(13,7,'BIG TIT SWIMING TEAM',0),(14,1,'Queen',5),(14,2,'patrz wyżej',3),(15,1,'Perfumy olol.',0),(15,2,'Kwiatka lolo.',2),(15,3,'Coś innego iksde.',3),(15,4,'Nic.',2),(15,5,'...to dzisiaj dzień matki?',2),(16,1,'Soundwave',1),(16,2,'Soundwave',1),(16,3,'Soundwave',1),(16,4,'jakis inny',1),(17,1,'Tak',1),(17,2,'Tak',0),(17,3,'Tak',2),(17,4,'Tak',1),(17,5,'Tak',1),(17,6,'Nie [ta opcja automatycznie usuwa ciê z forum]',5),(18,1,'a',3),(18,2,'b',0),(18,3,'c',4),(19,1,'Yong',4),(19,2,'Filip',0),(19,3,'Buka',9),(20,1,'TAK',2),(20,2,'NIE',2),(21,1,'rox',4),(21,2,'sux',4),(22,1,'Tak',3),(22,2,'Tak',2),(23,1,'Tak',0),(23,2,'Nie',1),(24,1,'Polska Partia Pracy',1),(24,2,'Liga Polskich Rodzin',1),(24,3,'Prawo i Sprawiedliwosc',0),(24,4,'Platforma Obywatelska RP',9),(24,5,'Komitet Wyborczy Polskiego Stronnictwa Ludowego',0),(24,6,'Samoobrona Rzeczpospolitej Polskiej',1),(24,7,'Komitet Wyborczy Wyborców &quot;Mniejszosc Niemiecka&quot;',0),(24,8,'Lewica i Demokraci SLD+SDPL+PD+UP',1),(24,9,'Komitet Wyborczy Partii Kobiet',0),(24,10,'Komitet Wyborczy Samoobrona Patriotyczna',0),(24,11,'Komitet Wyborczy Wierni Polsce',0),(24,12,'Komitet Wyborczy Lewica i Demokraci',0),(24,13,'Komitet Wyborczy Krajowej Partii Emerytów i Rencistów',1),(24,14,'Komitet Wyborczy Narodowego Odrodzenia Polski',0),(24,15,'Komitet Wyborczy Zwiazku Slowianskiego',0),(24,16,'Komitet Wyborczy Konfederacja Polski Niepodleglej - Obóz Patriotyczny',0),(24,17,'Komitet Wyborczy Partii Rozwoju',0),(24,18,'Komitet Wyborczy Samoobrony Odrodzenie',0),(24,19,'Komitet Wyborczy Polskiej Partii Socjalistycznej',0),(24,20,'Komitet Wyborczy Stronnictwa Ludowego &quot;Ojcowizna&quot;',0),(24,21,'Komitet Wyborczy Unii Lewicy III RP',0),(24,22,'Komitet Wyborczy Demokratycznej Partii Lewicy',0),(24,23,'Komitet Wyborczy Polskiej Wspólnoty Narodowej',0),(24,24,'Komitet Wyborczy Obrona Narodu Polskiego',0),(24,25,'Komitet Wyborczy Konfederacji Polski Niepodleglej',0),(24,26,'Komitet Wyborczy Wyborców &quot;Piast&quot;',0),(24,27,'Komitet Wyborczy Wyborców Pro Vita Et Patria',0),(24,28,'Komitet Wyborczy Wyborców Dariusza Jedliny',0),(24,29,'Komitet Wyborczy Wyborców &quot;Mniej podatków!&quot;',0),(25,1,'TAK',5),(25,2,'NIE',4),(26,1,'tak',2),(26,2,'nie',4),(27,1,'Tak!',1),(27,2,'No!',0),(27,3,'Kocham!',3),(27,4,'Trzepie do jego fotek tD',9),(28,1,'Opcja ankiety',4),(28,2,'Opcja ankiety ',4),(29,1,'Wwfe, dsfw23.',0),(29,2,'Wsd 32reqwerw.',0),(29,3,'Rqwr.',3),(29,4,'Fsadas!!!!111',4),(30,1,'Spierdalaj',5),(30,2,'Spierdalaj',1),(30,3,'Spierdalaj',5),(30,4,'Spierdalaj',1),(31,1,'TAK',2),(31,2,'MAM',5),(32,1,'na gramofon',0),(32,2,'kiszenie ogora w cipce',0),(32,3,'yong li¿e pa³e',1),(32,4,'Witam PAnie Maciorze',2);

--
-- Table structure for table `blah_vote_voters`
--

CREATE TABLE `blah_vote_voters` (
  `vote_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `vote_user_id` mediumint(8) NOT NULL DEFAULT '0',
  `vote_user_ip` char(8) NOT NULL DEFAULT '',
  KEY `vote_id` (`vote_id`),
  KEY `vote_user_id` (`vote_user_id`),
  KEY `vote_user_ip` (`vote_user_ip`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `blah_vote_voters`
--

INSERT INTO `blah_vote_voters` VALUES (1,38,'d4ba5d74'),(1,7,'d999543c'),(2,9,'53119b1a'),(2,10,'d519d1b2'),(2,35,'d54dabb2'),(3,12,'d519d1b2'),(3,10,'d519d1b2'),(3,31,'d519d1b2'),(3,9,'53119b1a'),(3,30,'51d27b09'),(5,119,'51be8c60'),(5,6,'d54d4fe9'),(5,24,'3ee9e93a'),(5,52,'5279ccc8'),(5,8,'53170e22'),(5,47,'5310b5b2'),(5,7,'d9995442'),(5,9,'53119b0a'),(5,84,'5310899c'),(5,30,'51d27b09'),(6,26,'51be8363'),(6,21,'53eeb07c'),(6,9,'53119b0a'),(6,52,'531b62a9'),(6,18,'d44c25a2'),(6,11,'d999042a'),(6,99,'531adf8f'),(6,47,'5310b5b2'),(7,17,'d519d1b2'),(7,4,'5559a1c2'),(7,145,'d4f47712'),(7,9,'53118aa2'),(7,5,'503553c2'),(8,4,'5559a1c2'),(8,5,'503553c2'),(8,26,'51be9f6e'),(8,8,'531751f4'),(8,10,'d519d1b2'),(8,6,'c352b84b'),(8,9,'53118aa2'),(9,24,'3ee9e93a'),(9,5,'53afb4d1'),(9,18,'d44c25a2'),(9,4,'5559a1c2'),(9,12,'d519d1b2'),(9,17,'d519d1b2'),(9,2,'531097fa'),(9,9,'53118aa2'),(6,163,'5311c372'),(10,5,'503553c2'),(10,4,'5559a1c2'),(10,145,'5033fa0e'),(10,47,'5313b7d2'),(10,155,'55edb595'),(10,6,'d46aa8ce'),(10,21,'57cc2602'),(10,12,'d519d1b2'),(11,24,'d999dda2'),(11,99,'530a6ec1'),(11,16,'531cecfa'),(11,153,'50304cf7'),(11,2,'530f5362'),(11,5,'503553c2'),(11,47,'5313b7d2'),(11,6,'57602e10'),(12,18,'d44c25a2'),(12,12,'d519d1b2'),(12,47,'5313b7d2'),(12,6,'d46aa8ce'),(12,145,'5033fa0e'),(12,17,'d519d1b2'),(12,2,'530f5362'),(12,26,'51be8e5f'),(12,99,'530a6a93'),(12,155,'55edb595'),(12,24,'d999dda2'),(13,24,'d999dda2'),(12,31,'d519d1b2'),(14,12,'d519d1b2'),(14,5,'503553c2'),(14,21,'57cc26c6'),(14,17,'d519d1b2'),(14,99,'530a6f13'),(15,9,'53118aa2'),(15,47,'5313b7d2'),(15,3,'51be5f74'),(15,21,'57cc26c6'),(15,12,'d519d1b2'),(15,18,'531a1ee4'),(15,17,'d519d1b2'),(15,6,'d46aa8ce'),(15,2,'530f5362'),(16,18,'d44c25a2'),(16,12,'d519d1b2'),(16,145,'5033fa0a'),(12,7,'d999fce7'),(17,4,'5559a1c2'),(17,5,'53afb4d1'),(17,18,'531a2613'),(17,24,'d999dda2'),(17,6,'d46aa8ce'),(17,99,'530a6ee4'),(17,47,'5313b7d2'),(5,5,'53afb4d1'),(8,99,'530a79ee'),(18,6,'d46aa8ce'),(18,16,'531ce4a7'),(18,24,'d999dda2'),(18,18,'531a1b79'),(18,47,'5313b7d2'),(18,2,'530f5362'),(18,15,'51db83d0'),(5,18,'531a060d'),(12,207,'54abf9f1'),(12,52,'531b9889'),(14,24,'d999dda2'),(12,161,'5318edd8'),(19,18,'d44c25a2'),(19,5,'503553c2'),(19,26,'51be9390'),(19,145,'5033fa0a'),(19,6,'57605ddc'),(19,24,'d999dda2'),(19,155,'530eff32'),(19,99,'530a69ce'),(19,17,'d519d1b2'),(19,16,'531cf0c7'),(19,9,'53eedd01'),(19,12,'d519d1b2'),(19,213,'59ab3194'),(20,18,'d44c25a2'),(20,5,'503553c2'),(20,145,'5033fa0a'),(20,24,'d999dda2'),(14,219,'5313b7d2'),(12,223,'53134cde'),(16,24,'d999dda2'),(12,228,'54cd0b09'),(14,215,'540a16dc'),(12,9,'53eedd01'),(17,26,'59e44419'),(17,219,'5313b7d2'),(17,17,'d519d1b2'),(21,219,'5313b7d2'),(21,155,'55edb595'),(21,6,'d46aa8ce'),(21,145,'589c5302'),(21,5,'503553c2'),(21,177,'5559a1c2'),(21,228,'54cd0a51'),(21,223,'57cf9a45'),(12,346,'5313fc2a'),(12,355,'53172854'),(22,228,'54cd0a51'),(22,5,'530cabd2'),(22,17,'d519d1b2'),(22,177,'5559a1c2'),(23,17,'d519d1b2'),(13,336,'57cdc09b'),(12,398,'5305eae3'),(24,2,'530eaddc'),(24,5,'530cabda'),(24,177,'5559a1c2'),(24,398,'5305eb84'),(24,12,'57cdca6a'),(24,21,'53eeee23'),(24,17,'57cdca6a'),(24,228,'54cd158d'),(24,18,'531a3504'),(24,6,'589c6014'),(24,16,'53076f7f'),(24,223,'57cf9a45'),(24,419,'51dbec92'),(24,99,'530593f4'),(22,24,'d999dda2'),(6,439,'d9acffd8'),(25,5,'594d7eed'),(25,336,'4dfd778e'),(25,99,'5559a289'),(25,6,'589c6014'),(25,398,'5b5e87e4'),(25,223,'57cf9ab1'),(25,17,'57cd202f'),(25,439,'d9acfc8e'),(26,398,'5305fd4d'),(26,24,'d999dda2'),(26,5,'594d7eed'),(26,336,'589c0e76'),(26,6,'589c6014'),(26,17,'4dfd6296'),(25,420,'530f51b2'),(27,6,'589c6014'),(27,228,'54cd158d'),(27,18,'57cdc8c8'),(27,5,'530cabda'),(27,17,'57cda31f'),(27,2,'57693538'),(27,26,'55c1f323'),(27,336,'4dfd6f0f'),(27,12,'57cda31f'),(27,398,'5305ed0f'),(27,223,'57cf9ab1'),(27,99,'5559a289'),(27,52,'53082209'),(28,12,'53060b09'),(28,145,'589c532e'),(28,336,'4dfd5076'),(28,17,'57cdac38'),(28,6,'589c6014'),(28,26,'55c1f1be'),(28,18,'57cdfe1e'),(29,18,'9451823e'),(29,145,'589c532e'),(29,12,'57cdfc0a'),(29,17,'57cdfc0a'),(29,26,'55c1f1be'),(28,3,'51be5bf0'),(29,336,'4dfd6a44'),(29,223,'d9adca42'),(30,195,'56297fe9'),(30,177,'5559a1c2'),(30,6,'50ee5397'),(30,398,'576062e7'),(30,17,'57cdc9ed'),(30,8,'53173e37'),(30,336,'4dfd6a97'),(30,223,'540aa560'),(30,99,'5559a289'),(30,18,'4fb9ac26'),(30,12,'57cd23cd'),(30,5,'530cabda'),(31,177,'5559a1c2'),(31,26,'55c1d8f6'),(31,17,'57cda659'),(31,223,'540aa560'),(31,12,'4dfd585f'),(31,18,'531a5841'),(31,420,'5036c802'),(32,9568,'5d69df7f'),(32,9569,'53069973'),(32,31,'5306eb35');

--
-- Table structure for table `blah_words`
--

CREATE TABLE `blah_words` (
  `word_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `word` char(100) NOT NULL DEFAULT '',
  `replacement` char(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`word_id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `blah_words`
--

INSERT INTO `blah_words` VALUES (8,'suchar','Lubie byc ruchanym przez 60 latków.');

--
-- Table structure for table `cult_comments`
--

CREATE TABLE `cult_comments` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `comment` text,
  `news_id` int(8) NOT NULL DEFAULT '0',
  `date` int(15) unsigned NOT NULL DEFAULT '0',
  `nick` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `ip` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=20731 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_comments`
--

INSERT INTO `cult_comments` VALUES (1,'I will be honored to be hosted here drx. Your website pwns more than ever.',1,1121881217,'Ambil','mystical_ambilNOSP@Mhotmail.com','84.122.209.22'),(2,'Wikipedia? I LOVE Wikipedia! =P\r\n\r\nSeriously, this is looking great. I want more. =P',1,1121890379,'Aurochs','rossbullock at sbcglobal dot netc','4.225.19.89'),(3,'Yes, looking very 1337y. Go drx =P',1,1121905374,'Overlord','','81.76.39.104'),(4,'Lookin\\\' pretty good.  One thing that bugs me, though, is the text cursor you get when you mouse over one of the nav options.  This doesn\\\'t allow me to open any of the links in a new window (in IE) or open any of the links in a new tab (in Firefox).  Also, the comment box on this page is a bit too small.\r\n\r\nGood to see HC is still alive, though.  :)',1,1121913070,'Icy Guy','','172.192.118.123'),(5,'I would suggest to change the name to something like \\\"68k Machine Code reference\\\" rather than ASM-to-hex =P (Just in case you don\\\'t know, the equivalent of ASM in hex = machine code.)',5,1122120060,'Who cares?','','85.53.100.81'),(6,'Useful guide, but there are few instructions missing, such as btst, bset, bchg and bclr. Bit instructions are really useful.\r\n\r\nAnyway, these machine codes reference will help me in programming. ',5,1122221899,'Weird Person','','200.141.32.223'),(7,'Nice job Ambil. :D',5,1122248626,'SGR','','69.164.8.60'),(8,'OMG FIRST POST\r\nHeh, this topic title 0wnz.',7,1124406883,'Guifrog','','200.164.233.124'),(9,'!!!',7,1124411441,'Aurochs','','70.17.86.230'),(10,'It\\\'s time to kick ass, and chew bubble gum! But I\\\'m all outta gum!',7,1124458671,'OrdosAlpha','','62.252.128.19'),(11,'burp',1,1124459626,'test','','83.27.87.156'),(12,'\\\"burp\\\"\r\n\r\nDidn\\\'t your mom ever educated you to have a good etiquette? You\\\'ve bu\\\"r\\\"ped this news topic!\r\n\r\n=P',1,1124753963,'Guifrog','','200.164.233.124'),(13,'We\\\'re back to kick more ass, and chew more bubble gum!',11,1127410176,'OrdosAlpha','','62.252.128.19'),(14,'I\\\'m sure Ordos meant to say \\\"kiss more ass\\\"...\r\n\r\n*runs*',11,1127460420,'ShadowFire','','61.68.67.254'),(15,'You have teh betaa. omg.',13,1128045413,'Aurochs','','70.17.110.188'),(16,'Good luck - I live in Warsaw if you mean Poland.',13,1128257984,'Panek','','62.179.88.109'),(17,'Sure...you cant ;)',14,1129324914,'sonicfan','','68.49.170.107'),(18,'i lik pokemon',14,1129484997,'yogisonic','','69.209.152.15'),(19,'i dont, kthxbai',14,1129581828,'Guifrog','','200.164.233.124'),(20,'Wow! Amazing! First Knux in Sonic 1 and now this. Every hack I see screenshots of never seem to stop surprising me and this makes me think this hack woul de a must have if it were ported to a genesis cartridge.',16,1134254114,'Hack Hunter','littletrain1993','64.12.116.203'),(21,'Nice one, drx. Nice to see you\\\'re up and working on stuff again.',16,1134263895,'JohnnyUK','johnnyuk@shadowsoft-games.com','81.99.173.133'),(22,'Heh. I need to do the same for Sonic 2 now.',16,1134350635,'muteKi','','4.248.247.163'),(23,'I\\\'m working on something which should come in handy for every hacker out there. I\\\'m making a list of every location I know. Everything down to where certain code is, palettes, art locations etc. I\\\'ll also have a DSR breakdown ready soon and a load of other random notes.',18,1134933195,'StephenUK','','80.5.160.8'),(24,'I couldn\\\'t tell you the actual compression, but i\\\'m guessing it\\\'s for Sonic 3D (possibly for the intro sequence).',19,1135106670,'StephenUK','','80.5.160.8'),(25,'it looks good, realy good but wheres the download butten?',16,1135111759,'Joey','magious_me@hotmail.com','81.100.143.77'),(26,'Hmmm.....  Sounds like Sonic Compilation, and possibly something to do with the fact that there are 3 games in it.',19,1135114209,'Gunnex','','68.33.10.220'),(27,'uhhh....Sonic Spinball?',19,1135128020,'Rika Chou','','24.23.177.77'),(28,'also, Gunnex, the games in Sonic Compilation are not compressed at all.',19,1135128161,'Rika','','24.23.177.77'),(31,'That was a bit unexpected. It was a completely random guess altogether. Ah well... what do I win now =P',20,1135340125,'StephenUK','','86.137.77.203'),(32,'Hmm... the compression for the floor tiles in S3D?? (Yeah, I gave it a cursory glance in TLP. It\\\'s practically the only compressed art in the game (unless I somehow skipped over it from going TOO quickly).)',19,1135569919,'E_Liquere','','63.23.29.147'),(33,'It says in the news post above that I got it right, so it\\\'s the compression used for the intro sequence in S3D',19,1135611929,'StephenUK','','80.5.160.8'),(34,'Yeah, pretty good this Tails in Sonic 1, pretty good, very nice, very nice too !\r\n\r\nI like this one, and i\\\'ll recommend to all my friends !!\r\n\r\nCONGRATULATIONS !!!',20,1135707595,'EDUARDO_kNuCkLeS','edu1sonic@yahoo.com.br','200.161.114.77'),(35,'This is perfectly !\r\n\r\nThis hack and the from Knuckles is excellent hacks, and is good-maked ones !\r\n\r\nCONGRATULATIONS.\r\n\r\nThis is more one very good hack who i have viewed !\r\nI downloaded this and saved he into a CD-ROM to the rest of my life.\r\nRESUMING:\r\nPERFECTLY COOL !!!!!!!!!!!!',16,1135708011,'Yeah !!','edu1sonic@yahoo.com.br','200.161.114.77'),(36,'I\\\'m Sorry !\r\nThis post as above is a post made by me !',16,1135708114,'EDUARDO_kNuCkLeS','edu1sonic@yahoo.com.br','200.161.114.77'),(37,'Yeh, didn\\\'t see that. I assume then that these use different compressions?',19,1135747241,'E_Liquere (the hack formerly known as muteKi)','','63.23.5.49'),(38,'It\\\'s about time!  Now tails has, well.....TAILS!  Good job!  (I couldn\\\'t do this....)',20,1135955872,'Gunnex','','68.33.10.220'),(39,'Amazing!! This hack is awesome!! Tails\\\' animation in the Title Screen is great!!\r\n\r\nBut it can improve, fixing the color pallets... The ending screen (from the last screen shot) can use Tails animation in Sonic 3 & Knuckles ending and center the sprites too. And, before jump to the screen, Tails can stand with his eyes openeds, not closed.\r\n\r\nAfter all, it a A-WE-SO-ME hack.\r\n\r\n\r\nBy the way, how about a hack in Sonic 1 to increat to Sonic the abilities to do the Spin Dash and Super Peel Out (Sonic CD), and another hack in Sonic 2 to increat the ability to Sonic to do the Super Peel Out and Tails to do his Fly/Swim abilities?',16,1136125899,'Rouken','','201.45.140.129'),(40,'I forgot one important thing: Edit Mode crashes the game. Can you fix this?',16,1136126095,'Rouken','','201.45.140.129'),(41,'Happy New Year =P\r\n\r\nI\\\'ve got something coming up in my hack that you might like drx. It\\\'s a sort of publicity thing, which Hacking Cult and SSRG will hopefully benefit from. Hopefully I should be able to make a private release within the next couple of months. As for a public release, who knows what this year will hold.\r\n\r\nOn a side note, the community hacking guide will be getting a pretty big update soon. Basically, it\\\'ll be a location list for S2, listing where everything I know is (objects, art, palettes, important routines etc)',22,1136554030,'StephenUK','','86.137.78.16'),(42,'well this game is fantastic is the same hack of the year....very nice......and have chaotix in sonic the hegdehog 2 or 3??',16,1136753803,'power knuckles','gukogan@msn.com','201.37.145.115'),(43,'Blah.  I\\\'m looking for your Sonic 1 Beta Hoax.  ::Must be the biggest fan of the Sonic 1 Beta on the net today.::  Lol.  It doesn\\\'t appear to be available for download anywhere on the site.  Could anyone send it to me by any chance?  I would greatly appreciate it.  Don\\\'t worry -- I don\\\'t really plan on doing anything with it.  I just wanna check it out.  Cyan\\\'s Hoax was okay, but you are saying this one has the leaping animation?  That is awesome.  I wish there was a hoax out there that had a playable version of the original Green Hill Zone with the city in the background.  I directed a hacker in designing one a while ago, but he never finished it.  It was looking pretty damn good too...',23,1137300106,'Milo','aiegacy@aol.com','24.250.40.139'),(44,'I too am wondering where to get the Sonic 1 Beta hoax you\\\'ve made, I REALLY want to play it, as I\\\'m a big fan of betas.\r\n\r\nOh; and; have fun in France. Don\\\'t forget to send everyone info about what you saw your trip. (Sightseeing is fun, but I prefer ROM hacking, spriting, and hoaxing.)',23,1137386111,'Sonic-Boy','littletrain1993@aol.com','205.188.117.66'),(45,'Sweet! Now if only he could fly/swim in Sonic 2... Aw heck thats another story! This is sooooo cool!',16,1137386338,'Sonic-Boy','','205.188.117.10'),(46,'The 32X Dev kit? How on EARTH did you get that?!\r\n\r\nOh well, either way it could help ROM hackers everywhere now. (Including myself where as I\\\'m hoping to to add Sonic to the Chaotix cast w/out removing Mighty. ;) )',22,1137386493,'Sonic-Boy','','205.188.116.8'),(47,'A word of warning about Sega2f: It has several mistakes. Part of the layout of the VDP status register is incorrect, for instance.\r\n\r\nCharles MacDonald\\\'s VDP doc is much more useful and detailed.\r\n',22,1137520078,'Bart T.','','192.206.180.200'),(48,'I should have the ROM, I\\\'ll upload it in a second if I do.',23,1137589655,'Gunner112k','','69.70.157.71'),(49,'Nice! So thge rom hack is not to look like the beta but rather the alpha?',23,1137623174,'Sonic-Boy','','152.163.100.203'),(50,'A mistake in Sega2f?\r\nNo way! I\\\'ve tried using it for something1 It sort of nearly worked... Sort of.',22,1137623313,'Sonic-Boy','','152.163.100.203'),(51,'Hmmm... Interesting. How about Tails in Sonic 3D Blast/Flickies Island? (XD! Not possible! Soon to be hopefully!)',20,1137623440,'Sonic-Boy','','152.163.100.203'),(52,'I\\\'m thinking Sonic 3 maybe?\r\nI hope so. We NEED some Sonic 3 hacks out there!',19,1137623547,'Sonic-Boy','','152.163.100.203'),(53,'I shouldn\\\'t bother since I KNOW the differenc.\r\n\r\n\r\n(Rev01=Thomas; Rev00=Tohmas)\r\n\r\nRev00 had spelling issues apparently :P.',17,1137623719,'Sonic-Boy','','152.163.100.203'),(54,'Hmmm..... Sonic 1 AOL edition? where can I get it?\r\nI\\\'d like to see it!',23,1137897062,'Hack Hunter','','64.12.116.71'),(55,'Drx said that it was crap!\r\nBut I too am wondering what it looks like.... I WANNA SEE IT!',23,1137897124,'Sonic-Boy','','64.12.116.71'),(56,'Me 2!',23,1137897152,'Ebony','','64.12.116.71'),(57,'Me 3! I wanna play that AOL version of Sonic 1 so I can see what it\\\'s like! Please put it up for download!',23,1137897213,'Ivory','','64.12.116.71'),(58,'Good to have you back DRX!\r\nSo.... What was it like in France? I\\\'ve never been there before.',24,1137949554,'Sonic-Boy','','64.12.116.201'),(59,'I\\\'m still waiting for that AOL version of Sonic 1..... And what is \\\"Sonic XD\\\"?',24,1137949821,'Hack-Hunter','','64.12.116.201'),(60,'Hack-Hunter; get a life. Sonic XD has yet to be released!\r\n\r\nAnd aren\\\'t you happy that he cracked the code for Sonic Spinball? At all? Oh well.....\r\n\r\nDrx; you really should put that AOL version of Sonic 1 up if you want him to stop bugging you.',24,1137949975,'Sonic-Boy','','64.12.116.201'),(61,'Holy crapping crap of crappers, this is incredible! Wheeeee!',24,1137974056,'Furyhunter','','66.25.191.245'),(62,'SOOOOOOOOooooo......\r\n\r\nWhat other compressiion formats are you goin\\\' 2 crack now? Hopefully something GBA-ish.',24,1138043825,'Sonic-Boy','','152.163.100.201'),(63,'Speaking of the way it\\\'s programmed, Spinball always wrote its text out using ASCII and had %d as the check to place a certain number (emerald count). I\\\'d assume that\\\'s referring to one of the data registers.',24,1138069892,'K','','4.249.180.186'),(64,'actually, no.\r\n\r\nDo you know the sprintf or printf functions? They\\\'re used commonly in C++, PHP, etc. Google it. Spinball only implements %s and %d, but still, it\\\'s a sprintf function. It MAY indicate that Spinball was programmed in C, but be careful, because I also wrote a sprintf function, in pure ASM, without C. I guess we\\\'d have to ask Peter Morawiec, the leader of the Spinball Project.',24,1138106269,'drx','thedrx@gmail.com','83.27.193.27'),(65,'%s & %d?\r\nOh yeah... I\\\'ve heard of those things..... Something to do with the speed of objects an the power of objects right?\r\n\r\nSoooo..... Is there some other compression formats that need to be cracked? Has Sonic CDs compression format alredy been cracked or does it have yet to be cracked?',24,1138151917,'Sonic-Boy','','64.12.116.201'),(66,'%s means string and %d means integer (google for sprintf)\r\n\r\nThere are many compression formats yet to be cracked...',24,1138206596,'drx','thedrx@gmail.com','83.27.246.83'),(67,'I uploaded Sonic 1 AOL Edition a while ago but I think drx deleted it for unkown reasons. If anything you should ask drx if the hack should be up again.',23,1138232163,'Gunner112k','','69.70.157.71'),(68,'OK! I was just wondering though, I wasn\\\'t REALLY asking.....\r\n\r\nSpeaking of compression formats... I\\\'m trying to vrack the Ecco 2 prototypes compression format... But I\\\'m not having very much luck however....  I SUCK AT CRACKING COMPRESSION CODES!!!!',24,1138337588,'Sonic-Boy','','64.12.116.201'),(69,'When ARE you going to release \\\"Sonic XD\\\"?',24,1138425288,'Hack-Hunter','','64.12.116.201'),(70,'MY GOD!!! Hack-Hunter you\\\'re an impeckable idiot... and YOU know it!\r\n\r\nI apologise drx.... Hack-Hunter is just my stupid idiot brother who has no idea about hacking.... Ignore him if you want but he wont stop bugging the crap out of you until you put up a new hack of some type, regardless of how sucky.',24,1138425486,'Sonic-Boy','','64.12.116.201'),(71,'Basically what you\\\'re saying is \\\"Release a hack or we\\\'ll just annoy the shit out of you drx\\\". Why don\\\'t you both just fucking leave him alone and make your own hacks. He actually does more things than just sit in front of a PC uploading stuff for the sake of a couple of annoying retards.',24,1138450450,'StephenUK','','80.5.160.8'),(72,'Hey! Don\\\'t look at me! Get all over my brother like a bad itch! I don\\\'t really care about the hacks! I\\\'m just happy that drx cracked a new compression format! GEEZ! (My brother gets me into SOOOOOO much trouble....)',24,1138466131,'Sonic-Boy','','64.12.116.201'),(73,'............. I have no comment.......',23,1138470373,'Sonic-Boy','','205.188.117.66'),(74,'I guess drx never liked it enough to allow it to be on the downloads section...... He DID say it sucked....',23,1138471594,'Ebony','','205.188.117.66'),(75,'....OK I GIVE!!!!!! IT SCREWED UP EVERYTHING!!!!\r\nSomeone REALLY needs to fix that mistake in Sega2f before it ever gets used again.... I nearly lost something when I tried to use it..... I keeled over!',22,1138471719,'Sonic-Boy','','205.188.116.8'),(76,'Sonic Adventure DX can be hacked?',25,1138568786,'Sonic-Boy','','64.12.116.5'),(77,'(I guess I\\\'ll ask) Is it ok to have the rom on the site? Should it be up again? TELL ME!',23,1138571202,'Ivory','','64.12.116.71'),(78,'...............',24,1138571901,'Hack-Hunter','','64.12.116.201'),(79,'Maybe mother was right.... She should have had 1 son not 2!',24,1138571966,'Sonic-Boy','','64.12.116.201'),(80,'Oh shut up!',24,1138571997,'Hack-Hunter','','64.12.116.201'),(81,'No YOU shu..... No! NO NO NO!\r\nI\\\'m NOT falling for THAT again!\r\nJust go away hack-hunter! (My brother is a freaking moron!)',24,1138572097,'Sonic-Boy','','64.12.116.201'),(82,'(Oh yeah? Well so are you!)',24,1138572144,'Hack-Hunter','','64.12.116.201'),(83,'NOW I\\\'M PISSED OFF!!! I\\\'ll be in my room! Don\\\'t bother to come up Hack-Hunter. You\\\'ll only cause more problems.\r\n(If he gets anywhere near me he\\\'ll get shot.)',24,1138572252,'Sonic-Boy','','64.12.116.201'),(84,'You must be joking.',25,1138578547,'Zeck','','66.93.105.178'),(85,'What?',25,1138581217,'Sonic-Boy','','64.12.116.5'),(86,'What?',25,1138581220,'Sonic-Boy','','64.12.116.5'),(87,'.....................',25,1138581494,'Sonic-Boy','','64.12.116.5'),(88,'Fucking hell are you a retard or something. It\\\'s been possible to hack SADX for ages now, and there\\\'s even some hacks out there of it. You have to hack the PC version though obviously. Stop abusing the comments system as well with your multiple post shit. You only need to make one comment in a row.',25,1138606153,'StephenUK','','80.5.160.8'),(89,'Why don\\\'t you both just fuck off you immature wankers and stop bringing your personal shit here. I think your mother should have stayed celibate and had no sons at all, if this is the shit everyone else has to put up with.',24,1138655606,'StephenUK','','80.5.160.8'),(90,'Why don\\\'t you all quit with the demands. You\\\'re just all taking the piss now. drx is a very busy man and doesn\\\'t need any of this bullshit pressure to release his work. If he wanted it released, it\\\'d be there and he wouldn\\\'t have removed it the first time. Just get off his case and do your own hack if you want to see some more hacks.',23,1138655826,'StephenUK','','80.5.160.8'),(91,'Why don\\\'t you both just fuck off you immature wankers and stop bringing your personal shit here. I think your mother should have stayed celibate and had no sons at all, if this is the shit everyone else has to put up with.',24,1138655846,'StephenUK','','80.5.160.8'),(92,'SHUT THE FUCK UP FOR FUCK SAKE! \r\n\r\nThis is for comments on his work and what he\\\'s released. It\\\'s NOT for nitpicking at little details created by Sega when they handed out their tech docs. If you wanna take it out on someone, take it out on Sega. I wouldn\\\'t be surprised if you didn\\\'t just fuck up when trying to use it, coz the mistakes aren\\\'t that bad.',22,1138655993,'StephenUK','','80.5.160.8'),(93,'clicked, clicked and done.',27,1138664660,'Gunner112k','','69.70.157.71'),(94,'FIRST I DONT HAVE THE PC VERSION OF DX! SECOND..... Those last 2 comments were not typed out or posted by me. Someone is using my name to get me in trouble.',25,1138679582,'Sonic-Boy','','152.163.100.204'),(95,'DONT LOOK AT ME!\r\n\r\nKILL ME! SEE IF I CARE!',24,1138679647,'Sonic-Boy','','152.163.100.201'),(96,'I DONT KNOW JACK SHIT ABOUT HACKING! I\\\'VE COME HERE TO SEE IF I COULD LEARN IT!',23,1138679736,'Sonic-Boy','','152.163.100.200'),(97,'........................',22,1138679812,'Sonic-Boy','','152.163.100.65'),(98,'Why did you try and guess when the answer was already given? Are you a retard or something?',19,1138714741,'StephenUK','','86.136.151.177'),(99,'I clicked each one 20 times.',27,1138714816,'StephenUK','','86.136.151.177'),(100,'Clicked several times!',27,1138777075,'Anonymous','','71.126.166.72'),(101,'YES! KILL HIM!',24,1138946342,'Hack-Hunter','','152.163.100.201'),(102,'STFU! You son of a @^@^',24,1138946432,'Sonic-Boy','','152.163.100.201'),(103,'STFU! You son of a @^@^',24,1138946435,'Sonic-Boy','','152.163.100.201'),(104,'eep.... I think I\\\'ll just walk away now.',24,1138946489,'Hack-Hunter','','152.163.100.201'),(105,'YEAH YOU BETTER GET OUTTA HERE YOU RETARD!',24,1138946719,'Sonic-Boy','','152.163.100.201'),(106,'Why don\\\'t you do us all a favour and both fuck off you immature pricks. Take your personal shit somewhere else.',24,1138998767,'StephenUK','','80.5.160.8'),(107,'This is a great place for hacks but all you can learn here about it is ASM hacking. If you don\\\'t know anything about hacking, and want to leanr, head somewhere else. When you know some more, this page will be even more useful foy you',23,1139633129,'TheCount','','200.125.100.238'),(108,'I think the ads have been removed. Not before I had a chance to click them, though;)',27,1139633711,'TheCount','','200.125.100.238'),(109,'And I suppose that\\\'s why the last 3 were all posted at the same time, huh?',25,1139634881,'TheCount','','200.125.100.238'),(110,'Niiiiice hack!',28,1139635045,'TheCount','','200.125.100.238'),(111,'We aren\\\'t that lazy, drx. Fact is that we are working a lot, it\\\'s just not updates time yet. =P ',29,1140046653,'Sonic Hachelle-Bee','','83.179.145.113'),(112,'hehe, don\\\'t take it too personal. I was talking rather about everybody. I know you\\\'re working on stuff :D',29,1140048964,'drx','','83.16.151.250'),(113,'I\\\'m still working on my hack and S2 locations list, so i\\\'ll make them available as soon as I can as well.',29,1140074691,'StephenUK','','80.5.160.8'),(114,'oi dick you can nearly every game even on the day it comes out if you can be fu ck to',25,1140114239,'pie','ben.rockliffe@hotmail.co.uk','82.46.88.218'),(115,'Yeah, and I\\\'m pretty sure you, Stephen and me aren\\\'t the only ones active around here...\r\n\r\nHello? Who\\\'s active here? :D ',29,1140353848,'Sonic Hachelle-Bee','','83.177.242.227'),(116,'Everyone thats working all day! \r\n\r\n\r\nMy hacks in a big problem, trying to insert mp3s in the game and i can\\\'t find any sonic mp3s!',29,1141029943,'Team Sonic','','203.54.229.251'),(117,'You can\\\'t insert MP3\\\'s anyway, so i\\\'d just give up now.',29,1141073018,'StephenUK','','80.5.160.8'),(118,'You\\\'re forgetting about QJimbo\\\'s tool.',29,1141155225,'Aurochs','','70.17.84.192'),(119,'You can\\\'t *insert* the mp3s into the game, actually :PPP',29,1141161832,'drx','','83.16.151.250'),(120,'I didn\\\'t forget about Qjimbo\\\'s tool, but it\\\'s not technically inserting is it. It doesn\\\'t take a genius to work out how to use the tool either.',29,1141164078,'StephenUK','','80.5.160.8'),(121,'Meh, I meant make them play in the game :p.\r\n\r\nOf course I\\\'m using Qjimbos tool.',29,1141211580,'Team Sonic','','203.54.229.186'),(122,'Thats right, we don\\\'t want to know about how much you hate each other.',24,1141376113,'Team Sonic','','144.134.197.167'),(123,'Absolutely perfect!',30,1141627919,'Team Sonic','','203.54.14.230'),(124,'Thank Gunner for this - he made the template :P',30,1141859818,'drx','','83.16.151.250'),(125,'Yeah but I only contributed the template, you still coded it. Credits still go for you :)',30,1142056039,'Gunner112k','','69.70.157.71'),(126,'I\\\'m just trying to guess what other games are compressed. I\\\'m not trying to guess that. I\\\'m just wondering if there are other games that are compressed.',19,1142490378,'Sonic-Boy','','64.12.117.5'),(127,'I ain\\\'t gonna comment about sonic 2.  Yeah, I give a damn or two about sonic.\r\nThis I\\\'m gonna comment about:\r\n\\\"\\\"\\\"Not for me, for people who visited it\\\"\\\"\\\"\r\n\r\nClosing the forum isn\\\'t the best way to fix the fact that:\\\"\\\"\\\"It sucked anyway\\\"\\\"\\\"\r\n\r\nI only ask an address of a forum which cares about hacking (preferently, not sonic obsessed). And that doesn\\\'t ask all sorts of information, and validation emails, and crap like that. I\\\'m only thirteen and I prefer too keep my name secret. I know I can make a false name, but that\\\'s just annoying.\r\nWell, maybe I\\\'ll upload a pic from time to time of my hack (that is, if Upload still exists??),    but I\\\'ll probably halt it \\\'till someno helps me with the text. With the forum gone and my time drastically reduced, I\\\'ll probably leave the hack for a few months.\r\n\r\nThank you very much for sending it all to hell.\r\n\r\nAs usual, fuck you.',31,1142532294,'TheCount','dario--cappe@hotmail.com','200.125.100.238'),(128,'upload still exists, and you can still post comments or contact someone from the staff',31,1142628572,'drx','','83.16.151.250'),(129,'Staff gives a damn about me, and won\\\'t care if I contact them individually.\r\n\r\nMaybe I\\\'ll post a screenshot (a more suggestive one, with Bernhart as a player), and I would appreciate feedback.',31,1142635783,'TheCount','','200.125.100.238'),(130,'TheCount, You cannot force people to care about your work,',31,1142647831,'Rika','','71.198.219.254'),(131,'I know and I don\\\'t mean to.\r\n\r\nI\\\'m just pointing that it\\\'s useless to contact them.',31,1142656013,'TheCount','','200.125.100.238'),(132,'It might be best to try the old fashioned way>>>\r\n+----------------+\r\n|Anyone cares?|\r\n+----------------+',31,1142722819,'TheCount','','200.125.100.238'),(133,'Why don\\\'t you upload the screenshot first and then expect us to be impressed? :P',31,1142734073,'drx','','83.16.151.250'),(134,'There you go. I had problems finding Bernhart, but I was actually loading the wrong ROM (stuuuupid), so I edited Leon, which I found more easily.\r\n\r\nThere he is, with a blue range, commanding dragoons. I should have equipped him a Langrisser, but the pic is already uploaded.',31,1142741185,'TheCount','','200.125.100.238'),(135,'I just remembered of what a pain in the as is needless browsing.\r\n\r\nhttp://www.hacking-cult.org//html/img/1142740882.gif',31,1142741438,'TheCount','','200.125.100.238'),(136,'Cool!\r\n\r\nSome Champagne? ^^',32,1142776106,'Sonic Hachelle-Bee','hachelle-bee@tele2.fr','213.103.197.187'),(137,'I prefer vodka :D It\\\'s cheaper, too.',32,1142799629,'drx','','83.16.151.250'),(138,'I\\\'m underaged, I\\\'ll stick to 7up??\r\n\r\nScreenshot feedback please.',32,1142802714,'TheCount','','200.125.100.238'),(139,'I\\\'m underage too. That doesn\\\'t stop me.',32,1142892304,'Aurochs','','164.106.169.94'),(140,'Also, maybe you should remove the link to the forums from the side panel there?',32,1142892369,'Aurochs','','164.106.169.94'),(141,'WOAH\r\n\r\nDUDE\r\n\r\nwww.sega-devega.net',31,1142892546,'Aurochs','','164.106.169.94'),(142,'\\\"\\\"\\\"WOAH\r\n\r\nDUDE\\\"\\\"\\\"\r\n\r\nWhat are you talking about?',31,1142912430,'TheCount','','200.125.100.238'),(143,'Well, nice :)',32,1142942149,'Rollabunna','','82.120.41.19'),(144,'To be honest, never played the game. Maybe you could post the original screenshot so we could see the difference? :P',31,1142991842,'drx','','83.16.151.250'),(145,'I thought so??\r\nI uploaded the original game\\\'s screenshot.\r\nIt\\\'s an RPG, so don\\\'t expect too much difference.\r\nBelieve me, it makes a difference if you play it.',31,1143045262,'TheCount','','200.125.100.238'),(146,'Yeah, removing the button is a good idea. Maybe you should add an Upload button too, I haven\\\'t seen any link other than the one you gave me in the forum.\r\n\r\nAnd I don\\\'t think starting to drink at thirteen is a good idea??',32,1143045413,'TheCount','','200.125.100.238'),(147,'http://www.hacking-cult.org//html/img/1143045130.gif',31,1143050415,'Shit I forgot the URL again','','200.125.100.238'),(148,'Nice one!\r\n\r\nDo you know how I can get the statistics for my site?',32,1143126403,'LewisBassett','metalix@sega-devega.net','194.35.219.103'),(149,'No one said anything when the forum reached the thousando posts...',32,1143228859,'TheCount','','200.125.100.238'),(150,'Are you ever gonna let all this about the forums drop? They\\\'re gone, get over it. It\\\'s not the end of the world, unless visiting the forums was all you ever did.',32,1143292434,'StephenUK','','86.133.89.137'),(151,'Never mind the forums. I\\\'m thinking about writing a 68k pseudo-disassembler python program. Two things: do instructions always have to be even addreses?And, what\\\'s the best ASM-to-hex reference around?',32,1143345761,'TheCount','','200.125.100.238'),(152,'Excellent, tx!  Today\\\'s my birthday, what a nice present.  That is if it finishes today.  I have 2.7mb dld/11mb upd so far with 6 days remaining.  Oh well, I\\\'ll seed this beyotch for a long time.',34,1143757571,'GJ','goatjuggler@gmail.com','68.36.121.183'),(153,'NO U',35,1143771923,'Gunner112k','','69.70.157.71'),(154,'There\\\'s a large cock in SOE\\\'s ass!',35,1143772063,'SGR','','67.21.38.193'),(155,'Tell them that the iso is not hosted on your server. You are merely linking to the file. This has been proved in SEVERAL court cases.\r\n\r\nForward them to PirateBay. And it might not hurt to mention to them that emailing piratebay will be a waste of time, because right now, it\\\'s legal in Sweden.',35,1143772749,'Koray','koray@koray.ws','68.49.63.168'),(156,'Lawyers have better grammar.\r\n\r\nI smell a hoax.',35,1143773084,'Ritzbitts','','75.3.230.112'),(157,'LOL SOE\\\'s lawyers',35,1143773132,'Tweaker','nibesto@gmail.com','66.67.236.98'),(158,'I smell a hoax to.\r\nSomeone was trying to stop chris sean\\\'s flow of info to with a legal threat and here is what happened http://www.senntient.com/ubb/Forum13/HTML/000009.html\r\nThat thread is at the bottom of the second page of topics.',35,1143773333,'cheese007','','66.141.187.24'),(159,'Okay, uh, you really should of had more seeds before you decided to distribute this.\r\n\r\nOr at least seeds that were willing to stay seeding 24/7.\r\n\r\nI reccomend you upload it to your server, give the link to just close friends who are willing to seed the file, then take it down once they have it.\r\n\r\nThat way we have some seeds quick.\r\n\r\nI\\\'m willing btw.',35,1143778689,'Koray','koray@koray.ws','68.49.63.168'),(160,'you\\\'re willing to help a shitty cult ripoff? wierd.',35,1143780052,'drx','','83.15.83.98'),(161,'o lol. are you even in #soah?\r\n\r\nBecause I was corrected and informed what this was seconds after I said that by two different people and I apologized. :/',35,1143780277,'Koray','koray@koray.ws','68.49.63.168'),(162,'\\\"because right now, it\\\'s legal in Sweden.\\\" not anymore but the cops dont give a fuck they have more important things to do.\r\n \r\n',35,1143794613,'lol','','81.225.17.243'),(163,'*sigh*\r\nOh well, Sega was sure to find out eventually anyway I suppose.',35,1143799940,'2600','n/a@youshouldntcare.com','67.177.233.219'),(164,'I\\\'d be happy to seed....if I had the whole thing first. 23.1% and holding, unfortunately.',35,1143835575,'LOL','hi2u@or.org','68.121.144.59'),(165,'\\\"Further,\r\nour client is concerned that due to the volume of illegal copies of our\r\nclient\\\'s Sonic X-Treme game being provided via your service our client\r\nis losing substantial sums of money in hard work of many STI developers. \\\"\r\n\r\nIf it\\\'s unreleased, they didn\\\'t make jack shit money off it anyways. the hell are the SOE lawyers smoking?',35,1143841777,'PxB','','206.190.67.253'),(166,'I deleted your comment on my site since you were pretty rude.  I did credit my source as the only way I knew of this was from an email from a friend.  I have never even seen your site before this minute.\r\n\r\nI would have gladly given you a link if you would have been polite about the matter.',34,1143866860,'racketboy','racketboynick@hotmail.com','67.185.214.212'),(167,'Wow this is amazing ! How did u guys come across this? Last i heard, a copy of the only complete level for Sonic Xtreme was sold on ebay for $2500 ... is this a copy of that? Also, how would one run a backup game such as this on a Saturn? Is there some disc-swapping technique ?',34,1143893582,'HyperShadow','soniccult@hypershadow.cjb.net','217.22.183.171'),(168,'Sorry to bug you guys, but it appears there\\\'s currently only one person seeding.  Any way to remedy this?',36,1143903560,'Oylivah','','71.241.90.144'),(169,'hay u fucking fagots. i wil destroy the video game industry by representing SEGA. u gamerz need to git a life. #soah is ghey. i think drx is ghey. sonic xtreme is ghey. ur mom is ghey',35,1143944051,'Jack Thompson','jackpeace@comcast.com','172.165.129.236'),(170,'<html>\r\n<body>\r\n<bold>testing</bold>\r\ntesting\r\n<strike>testing</strike>\r\n</body>\r\n</html>',37,1143951178,'ShitML','','200.125.100.238'),(172,'There were other news here just yesterday, WTF?',31,1143959751,'WTF?','','200.125.100.238'),(173,'NO, man, seriously, what the hell happened?????',31,1144023035,'WTF','','200.125.100.238'),(174,'The news posts were abducted by aliens. What the hell do you think happened? Someone deleted them. It doesn\\\'t take a genius to work that out.',31,1144067304,'StephenUK','','86.136.119.193'),(175,'Nevermind, but I had just pointed out in the last news that the comments allow HTML.\r\n\r\nThey really shouldn\\\'t.',31,1144084442,'??','','200.125.100.238'),(177,'Of course they shouldn\\\'t!!!\r\nThere are countless amounts of viruses that can be downloaded and excecuted by html, with just browsing a page.',31,1144172223,'ShitML','','200.125.100.238'),(179,'<html>\r\n<head>\r\n<title>\r\n\\\'drx ur comments allow html\\\'\r\n</title>\r\n</head>\r\n<body>\r\n</body>\r\n</html>',38,1144630501,':O','','200.125.100.238'),(180,'Very nice drx! It would be awesome if you continued to make more guides like this. Keep it up!\r\n\r\njjftails35',38,1144779818,'jjftails35','joshfiorio@sbcglobal.net','72.51.33.237'),(181,'Finally, some developments into the SVP.',38,1144811912,'King','','72.173.6.52'),(182,'y0, drx.\r\n\r\nThe \\\"Random hack\\\" thing to the left isn\\\'t working correctly. ',38,1144823228,'Rika','','24.23.212.212'),(183,'the hacks here are not there >:-(',40,1150441769,'sonic boom','magious_me@hotmail.com','86.1.150.230'),(184,'the hacks here are not there >:-(',40,1150441859,'sonic boom','magious_me@hotmail.com','86.1.150.230'),(185,'I\'m hosted here at http://www.spin-dash.hacking-cult.org but I can\'t access my ftp server. It used to be ftp://spin-dash.hacking-cult.org username h4Ck3R@hacking-cult.org and i remember the password but it wont work. plz help me. ty',40,1150486783,'h4Ck3R','shadow_red_dragon@yahoo.com','70.251.130.59'),(186,'I just dled FlashFXP and tried to connect to ftp site and it worked but it said login was incorrect. can u please help me. im that guy from pokecommunity.com. my emeil = shadow_red_dragon@yahoo.com',40,1150487472,'h4Ck3R','shadow_red_dragon@yahoo.com','70.251.130.59'),(187,'hi i love it',16,1150636341,'mary beth','bus_mama@hotmile.com','71.7.174.180'),(188,'fuck you',39,1150636444,'msweqq','bhlkjbk','71.7.174.180'),(189,'The Hacks page seems to be broken...',30,1151534045,'Rockman Zero','','68.91.151.163'),(190,'daaaaaamn the hacks are gone',40,1151596245,'messssssssed  up','bengamejolly@yahoo.com','67.131.165.9'),(191,'Hey people, People saying that the hacks are gone, don\'t worry they will probaly be back shortly, plus for some sonic 1 hacks, they can be found by going to the link below:\r\nhttp://www.hacking-cult.org/?hacks/1#1141449975',40,1151598195,'ojdon','','81.156.17.134'),(192,'yippy! sonic 1 hacks!\r\neny for sonic 2',40,1151612404,'sonic boom','magious_me@hotmail.com','86.1.150.230'),(193,'Um, maybe, I\'m doing something wrong, but none will download for me',40,1151627915,'random_passer_by','','4.131.34.175'),(194,'Hello,\r\n\r\nI tried to send you an email but your qmail server hates me :(\r\n\r\nPlease see this link, it can be quite interesting for yoy ;)\r\n\r\nhttp://www.neoflash.com/forum/index.php/board,57.0.html\r\n',40,1151725246,'timofonic','idonwant@morespam.no','87.223.129.134'),(195,'it is interesting indeed, thanks :)',40,1151746984,'drx','','71.139.211.42'),(196,'Nice you replied, please mention me on the forum message saying I informed you about this :)',40,1151774707,'timofonic','nomorespam@please.no','87.223.129.134'),(197,'damnit drx please hlep me. read my post at top',40,1151790731,'h4Ck3R','shadow_red_dragon@yahoo.com','70.251.78.10'),(198,'just noticed :) i\'ll fix it, hang on',40,1151798005,'drx','','24.4.247.248'),(199,'Hello,\r\n\r\ndrx, did you readed me? Please edit your message and say that you know the sample-per-review offer thanks to me ;)\r\n\r\n\r\nBest regards,\r\ntimofonic',40,1151807708,'timofonic','none@paranoid.no','85.137.82.13'),(200,'damnit drx please hlep me. read my post at top',40,1151807971,'h4Ck3R','shadow_red_dragon@yahoo.com','70.251.78.10'),(201,'sorry, dont know why it posted twice.',40,1151808428,'h4Ck3R','shadow_red_dragon@yahoo.com','70.251.78.10'),(202,'it\'s still not working. do you have an email i can contact you with the information i want like username and password? ',40,1151808937,' h4Ck3R','shadow_red_dragon@yahoo.com','70.251.78.10'),(203,'the hacking-cul email address drx has doesn\'t seem to work anymore. Instead, send to his gmail account. thedrx@gmail.com',40,1151946021,'jman2050','','24.110.43.236'),(204,'About the link I posted ith the Sonic 1 hacks, Tghe links maybe brocken plus that is all I could find... Sorry.\r\n',40,1152028347,'ojdon','','86.135.245.119'),(205,'w00t 20 comments',40,1152111069,'blah','bengamejolly@yahoo.com','67.131.165.9'),(206,'Hey drx, the hacks page isn\'t online.\r\n\r\nWhere are the Hacks section ?\r\n\r\nIs under construction, or is offline forever ? ',40,1152203844,'EDUARDO_Knuckles','edu1sonic@yahoo.com.br','201.43.43.31'),(207,'if u looked over everyon, u would of seen a link like this\r\nhttp://www.hacking-cult.org/?hacks/1#1141449975\r\nthey only have that  one up 2 now tho',40,1152213163,'sonic boom','magious_me@hotmail.com','86.1.150.230'),(208,'YIPPEE!!!!!!\r\n\r\nThe hacks are back!!!!!!!',40,1152250151,'Forever Sonic','bengamejolly@yahoo.com','67.131.165.9'),(209,'Holy Shit! Great Job!',41,1152250401,'you\'re a beyoooootch','bengamejolly@yahoo.com','67.131.165.9'),(210,'I have a question. When I go to the Sonic 2 page, \"Project Chaos\" says there is only one playable zone. When I played it, it had more than one zone....even though it was impossible for me to get into Emerald Hill......',41,1152313028,'you\'re a beyoooootch','bengamejolly@yahoo.com','67.131.165.9'),(211,'Only one zone was changed from S2, and that was the Green Hill remake at the start. It won\'t be long until I release another version with a load more updates and technical features that that version had.',41,1152363930,'StephenUK','','80.5.160.4'),(212,'Tails is the best!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',16,1152369285,'Jeanette','','62.31.201.109'),(213,'Here\'s another problem: When I start the game, the zone intro pops up saying \"Emerald Hill Zone\" and just sits there. So I have to restart it. What\'s wrong?',41,1152417150,'you\'re a beyoooootch','bengamejolly@yahoo.com','67.131.165.9'),(214,'Yay!\r\n',41,1152439963,'sonic boom','magious_me@hotmail.com','86.1.150.230'),(215,'What about Devega? That was up for a while but went down again.',40,1152458990,'Lewis','lewis.bassett@gmail.com','172.141.124.165'),(216,'No idea, coz I just tried it and it\'s fine.',41,1152746953,'StephenUK','','80.5.160.4'),(217,'YOU GOT COMMENT!\r\n=O',41,1152850575,'SANiK','','71.250.95.171'),(218,'Hey drx i\'m just glad you made the Sonic 1 Beta Hoax.',41,1152929445,'Meh','bengamejolly@yahoo.com','67.131.165.9'),(219,'I found an issue. In the Knuckles Chaotix section under the Research area of the site. That Chaotix art format info; I clicked something and it brought up an image of Mighty; every link I click in that area brings up an image of Mighty. What is up with this?',41,1153105623,'Mr.Chaotix','','152.163.100.200'),(220,'He\'s right that\'s freaky. Report this bug, Mr.Chaotix!',41,1153195707,'Meh','','67.131.165.9'),(221,'Your Segacon link (http://segacon.hacking-cult.org/) is down; could you bring it back up?\r\n\r\nI\'m looking forward to interfacing my Genesis controller to my PC and doing some sweet stuff with it. :)',41,1153269062,'[Patrick]','mccpat@gmail.com','71.224.114.133'),(222,'I\'d like to report a bug on Sonic 2 Long Version. If you spindash on the ramps in Genocide City or Wood Zone at high speed you will either fall through it and die or get stuck in the wall.',41,1153323632,'Meh','','67.131.165.9'),(223,'Heh, yeah I know I have to upload the pages again and stuff for segacon. But for right now, you can go to segacon.balder.prohosing.com.',41,1153332130,'JJFTails','','69.210.240.38'),(224,'Also, on Sonic 1 Alpha, in Labyrinth Zone and Clockwork Zone my emulator locks up at a certain area. Is this supposed to happen?',41,1153345135,'Meh','','67.131.165.9'),(225,'i dont fix bugs in someone\'s hacks, you know. i dont even fix them in my hacks :P',41,1153669086,'drx','lol@internet','83.27.152.124'),(226,'I assume that means yes it\'s supposed to lock up at Clockwork and Labrinth.',41,1153679827,'Mr.Chaotix','','152.163.100.200'),(227,'Damn...oh well XP sorry i\'m a n00b at this stuff.',41,1153680630,'Meh','','67.131.165.9'),(228,'I guess the locking up is supposed to make it act like a real alpha version.',41,1153710586,'Mr.Chaotix','','64.12.116.71'),(229,'Would\'ve been great if he put in a stage select. Or added a black sky to GHZ XP',41,1153770350,'Meh','','67.131.165.9'),(230,'At least he made Clockwork Act 1 indoors like those old shots in the magazines.',41,1153783108,'Mr.Chaotix','','152.163.100.200'),(231,' Some day I plan to make the <i> perfect </i> Sonic 1 Prototype hack.\r\n\r\n1. Old LBZ Background\r\n2. Old level design in SLZ\r\n3. Old level order\r\n4. Dark sky in GHZ\r\n5. Rolling ball in GHZ (!)\r\n6. Ring >.<\r\n7. Planets in MZ\r\n8. Old level names\r\n9. All black title screen\r\n10. Lost icons in SS\r\n11. Falling tiles in MZ with inverted ground and bubbly lava\r\n12. Old SPZ background with \"Good Luck\" and other signs\r\n13. Purple flowers in GHZ\r\n14. Same pallette underwater\r\n15. CWZ with old background\r\n16. Black background in SLZ\r\n17. Different mountains, city view, and \"WELCOME\" in GHZ\r\n18. \"Leaping\" animation at end of each act\r\n19. Robotnik, S, and Goggle moniters\r\n20. Some objects not in their proper spot\r\n21. Fall too far from getting hit\r\n22. \"Moon\" with old GHZ background\r\n23. Different debug mode\r\n24. \"Falling\" animation into SS\r\n25. Sideways spikes with no torch in MZ\r\n26. Other lost areas now put in\r\n27. Sonic is darker blue\r\n28. Pink spiked badnik in MZ\r\n29. Diagonal conveyor belts\r\n30. \"Standing\" animation when grabbing a bubble\r\n31. Underground section of GHZ\r\n32. Lost totem pole faces\r\n33. Splats the bunny\r\n34. Robotnik blows up in one of the endings\r\n35. \"Warp\" item is used\r\n36. \"Skidding\" animation\r\n37. \"Press Start Button\"\r\n38. Other lights in SLZ\r\n39. \"Machinery\" props in SLZ\r\n40. Lost spindash animations in warp tunnel\r\n41. Shallow water in LBZ and crystal on the ceiling\r\n42. Top springs in SLZ\r\n\r\nAnd that\'s about it! I don\'t plan to make this anytime soon, though. I also want to make it look like it\'s complete unlike the Sonic 2 Beta.\r\n\r\n\r\n',41,1153789997,'Meh','','67.131.165.9'),(232,'That\'s brilliant! But I doubt it\'d be possible until when the Sonic hacking scene gets farther along in it\'s studies.',41,1153802560,'Mr.Chaotix','','64.12.116.71'),(233,'Actually, according to \"Sonic-Cult\" and \"Secrets of Sonic Team\", all that stuff <i> is </i> the prototype! Oh and I forgot to mention one thing.\r\n\r\nTo do all that, I will take data from every single \"Sonic 1 Prototype hack\" around the world. I will also be including \"breaking\" the now BROWN rock as well as add bushes to the scenery. Damn this\'ll take longer than I thought!',41,1153848656,'Meh','','67.131.165.9'),(234,'First Comment!\r\n\r\nDude that shit is awesome!',42,1153848686,'Meh','','67.131.165.9'),(235,'Yes, I have seen this before. Still awesome. So much is done, it\'s really amazing.',42,1153870389,'Rika','','24.23.212.212'),(236,'A pretty long time if you ask me.. And I don\'t think there were brown rocks or bushes in the proto.',41,1153878186,'Mr.Chaotix','','64.12.116.71'),(237,'Yes there were: http://sost.emulation.org/sonic_1/ghz/a/sonic1_ghz.jpg',41,1153881094,'Meh','','67.131.165.9'),(238,'Kabal made this hack as a gift for our Russian emu site http://emu-land.net , but now this hack will be known around the world, I hope)',42,1153901161,'Driver','','217.159.219.202'),(239,'Yeah, I bet you guys are not so good with ASM. Try your best. Kabal would still kick your ass real hard.',42,1153913919,'Tadashi (one of the site makers)','','124.87.247.167'),(240,'I guess my monitor colors are messed up then. It looked purple like in the final.',41,1153943123,'Mr.Chaotix','','64.12.116.71'),(241,'There was once a scene on Mortal Kombat when I was going to \"finish\" a guy over a pit of spikes. I did an uppercut, and he fell down hard into the spikes back first.\r\n\r\nOWN3D',42,1153949784,'Meh','','67.131.165.9'),(242,'OWN3D indeed. OR pwned or *shot*',42,1153966043,'Mr.Chaotix','','64.12.116.201'),(243,'hi alex mcferren you are\r\nhaving a dreamcast at your house.',25,1153968702,'alexmcferren','alexmcferren@yahoo.com','70.241.126.110'),(244,'Tadashi, I\'m sure you\'ll make yourself lots of great friends with that attititude you have here and on IRC. Have fun.',42,1153977013,'drx','thedrx@gmail.com','83.15.83.98'),(245,'drx, why should I care? I always speak straightforward. You just cant do ASM shit anymore and you envy us. Meh.',42,1153996000,'Tadashi','','124.87.247.167'),(246,'lmao, i just dont have the time. also i dont care, you know',42,1154036697,'drx','lolz@derka','83.15.83.98'),(247,'Thx man. Do me a quick favor though. The version you have has a little error that would only allow it to work with my windowsblind theme and themes that were similar to it. Replace the this version with the old one in the utils section: http://rapidshare.de/files/27264768/CHAOXED.rar.html',43,1154039728,'JJFTails','joshfiorio@sbcglobal.net','69.211.0.17'),(248,'fixed',43,1154040484,'drx','drx@drx.drx','83.15.83.98'),(249,'If hacking is supposed to be fun, than why do you underrate Sonic i n Paynt? You sure started a flame on that!',43,1154057324,'Meh','','67.131.165.9'),(250,'You kidding?? That hack was both hilarious and ugly at the same time! It seemed like Green Hill was Circus Hill on my emulator and at the same time I had to wear sunglasses indoors.. but as the creator once said; \"I\'m good at being bad.\" And that is SO true. He did something similar in a Sonic 2 hack of his... Sonic and Tails in Paynt I think it\'s name was... he gave Sonic some of Tails\' hair to add some style but it didn\'t really turn out great, and I died on nearly every level with those hard to survive layouts.',43,1154094466,'Mr.Chaotix','','152.163.100.204'),(251,'hah! first, it wasn\'t me who rated Sonyc in Paynt. But seriously, that game deserves that score. It\'s hilarious! :D',43,1154099773,'drx','drx@drx','83.15.83.98'),(252,'Agreeable drx, VERY agreeable.',43,1154102765,'Mr.Chaotix','','152.163.100.204'),(253,'The only level that was nearly IMPOSSIBLE to beat was the remake of Mystic Caves cuz I couldn\'t see shit XD\r\n\r\nAnd what is with \"Super Milk\" Zone? O.O',43,1154110057,'Meh','','67.131.165.9'),(254,'And what was TOTALLY annoying was that all the levels had the same music from Hidden Palace.',43,1154110153,'Meh','','67.131.165.9'),(255,'Super Milk? I think it was supposed to be Super Mushroom like in the Mario games. XD Really... just some Mushroom Hill ports, a good pallet, some Mario music and there you have it.',43,1154118161,'Mr.Chaotix','','64.12.116.5'),(256,'Trust me. It was Super Milk. I\'m sorry but that\'s just whack XD',43,1154188273,'Meh','','67.131.165.9'),(257,'Wacky as whack.. and over the edge wierd.. or so it may seem... I could make use of the name but not exactly in a rom hack.',43,1154190716,'Mr.Chaotix','','64.12.116.5'),(258,'I seriously couldn\'t get past the Mystic Caves remake. It was all f***ing black.',43,1154190907,'Meh','','67.131.165.9'),(259,'I saw what you mean.. Dark City if you ask me.',43,1154199274,'Mr.Chaotix','','64.12.116.5'),(260,'I like seizure collabs cuz I like to challenge my eyes. Never look at the sun though XP',43,1154229737,'Meh','','67.131.165.9'),(261,'Unfortunately I was foolish enough to stare at the sun at school.. afterwards everything seemed.. pink.',43,1154235686,'Mr.Chaotix','','205.188.117.10'),(262,'YOU DUMBASS! Seriously why would you do that T_T',43,1154270963,'Meh','','67.131.165.9'),(263,'Eh. I was young. Stupid at the time. Had no idea what the sun WAS for that fact.',43,1154281175,'Mr.Chaotix','','152.163.100.204'),(264,'anybody know ringmanx? He\'s got a great site: http://www.geocities.com/pharaohmanx/ChaosEmer.html',43,1154292667,'Meh','','67.131.165.9'),(265,'Haha. That site is so funny. The guy refers to them as \"Alpha Version\" and \"Beta Versions A, B, and C\". Those are so obviously hacks it\'s not even funny.',43,1154475602,'JJFTails','joshfiorio@sbcglobal.net','69.210.250.95'),(266,'You never know, asshole',43,1154487488,'Meh','','67.131.165.9'),(267,'Who said the hacking-cult\'s  message board is gone? Take a look at this!',43,1154547666,'Weird Person','','201.79.178.172'),(268,'LOL I know what you mean. I just realised something if you go to Gens and set to \"Skip frame 8\" or something you can somewhat get around the lag in the Sonic 1 Alpha hack.',43,1154554353,'Meh','','67.131.165.9'),(269,'Didn\'t know that I\'ve always used the Turbo Mode option in Gens+.',43,1154558612,'Mr.Chaotix','','205.188.117.10'),(270,'I once set it to \"Skip frame 8\". Know what happened? Let\'s just say that instead of 10 minutes, I had ten <i>seconds</i>',43,1154577330,'Meh','','67.131.165.9'),(271,'The music track patch and readme/moves list links are broken :/',42,1154578013,'JLsoft','','67.3.198.66'),(272,'Frame rate must have been abusing the game timer. Last time I tried that I STILL had 10 minutes.',43,1154619777,'Mr.Chaotix','','152.163.100.204'),(273,'The hack is so good that it crashes on Gens, Genecyst, and Kgen98. Really, nice work.',42,1154645972,'KP','','200.115.253.19'),(274,'BEST HACK I\'VE EVER SEEN.\r\n\r\nReally, I always wanted MKTrilogy, but this is around as good as MKT.\r\nThis is incredible work.',42,1154656287,'KP','','200.115.253.19'),(275,'I just now found the emulators in the Utilities section. Thanks for putting those up!\r\n\r\nBTW, is it possible to save a screenshot as a GIF file?',43,1154665957,'Meh','','67.131.165.9'),(276,'broken links was fixed',42,1154781865,'evgeny','','220.192.222.46'),(277,'Thanks much :)',42,1154815547,'JLsoft','','67.3.193.233'),(278,'ATTENTION\r\n\r\nThe ratings for some of the hacks were...uh....hacked? lol. Not a real emergency but WTF?',43,1154903840,'Meh','','67.131.165.9'),(279,'Very funn- *stabbed*',43,1154907454,'Mr.Chaotix','','205.188.117.10'),(280,'The last two Sonic 2 hacks have weird looking guest ratings O_o',43,1154917136,'Meh','','67.131.165.9'),(281,'Just checked and I now ask \"WTF?\"',43,1154923852,'Mr.Chaotix','','152.163.100.204'),(282,'You see it, too? WTF indeed',43,1154995828,'Meh','','67.131.165.9'),(283,'Now how it happened to get that way is anyones guess.',43,1155010910,'Mr.Chaotix','','152.163.100.204'),(284,'Maybe they\'ve been...hacked? XD',43,1155086465,'Meh','','67.131.165.9'),(285,'Maybe they did, maybe they didn\'t, maybe it\'s just some site bug, maybe it\'s.. nah, you probably wouldn\'t want to hear my last explanation. (It\'s disgusting anyways..)',43,1155099636,'Mr.Chaotix','','152.163.100.204'),(286,'I\'d like to request that my hack is removed from the list please.',43,1155330604,'StephenUK','','81.104.74.7'),(287,'Well that sucks did you give up on it?',43,1155341035,'Meh','','67.131.165.9'),(288,'Might not be best to ask him. He\'s had people badgering him about it already!',43,1155352215,'Mr.Chaotix','','152.163.100.204'),(289,'Congrats, it\'s gone. A shame, I thought it would be fun in the final version =(',43,1155516861,'Meh','','67.131.165.9'),(290,'I don\'t remember saying that I wasn\'t still working on it.',43,1155814350,'StephenUK','','86.136.149.199'),(291,'Oh...\r\n\r\nDamn that changes everything XD',43,1155855165,'Meh','','67.131.165.9'),(292,'41 fucking comments...a new record',43,1155859330,'Meh','','67.131.165.9'),(293,'(Make that 42.) I think it\'s cause of those odd guest ratings. I\'ll bet you that simple ASM hack is probably going to get removed because of the same reason.',43,1155860300,'Mr.Chaotix','','205.188.117.10'),(294,'Oh, finally, after FOREVER searching for this after reading it on Siliconera, I FINALLY FOUND IT!  YOU GUYS ROCK!\r\n\r\nIt\'s really fun to turn on computer resistance after pressing x then a on the main screen.  If you get the chance to fatal them, they might end up turning the tables and finishing YOU off.  It\'s AWESOME.\r\n\r\nI love losing then fataling them.',42,1156541429,'TheCrazyOne','phuckaz@hotmail.com','209.195.172.112'),(295,'43 comments...sickass...',43,1156558591,'Meh','','67.131.165.9'),(296,'Odd guest ratings are fixed! Cool...',43,1156721329,'Meh','','67.131.165.9'),(297,'Fixed? Finally.. on the previous subject of \"Super Milk\", does this spark any ideas for a new power up item? (Sonic RPG anyone? *shot*)',43,1157456361,'Mr.Chaotix','','152.163.100.204'),(298,'Awsome! I am downloading this right now, just need the rom now! xD \r\n\r\n',44,1158076615,'ojdon','','86.135.242.92'),(299,'Oh and here is a suggestion, you know where you select the tiles, well I say you should make that bigger becuase I can hardly see what tile I am choosing! :S\r\n',44,1158077014,'ojdon','','86.135.242.92'),(300,'I swear to god I was just thinking someone should make something like this. You even had the same name I thought of!',44,1158094489,'Levy','','195.248.104.79'),(301,'All we\'d need now is the Vectorman and Earthworm Jim compression formats and.... well I\'m out of things to say.',44,1158108832,'Mr.Chaotix','','64.12.116.203'),(302,'0_o Earthworm Jim Edits... Nice... No infact very nice!',44,1158172193,'ojdon','','86.135.252.253'),(303,'Very nice work DRX.. some amazing programming there. :)',44,1158179986,'cooliscool','cooliscool@msn.com','71.14.99.47'),(304,'I\'m assuming the thought of Earthworm Jim hacking hasn\'t been touched upon before?',44,1158203908,'Mr.Chaotix','','205.188.116.203'),(305,'Pretty good...I just want to know if it can edit both foreground AND background tiles.',44,1158293386,'muteKi','','4.248.243.10'),(306,'Mr.Chaotix probally not, remember this is sonic hacking and ristar has a link between sonic, so this is probally a one off, you wouldn\'t really get EWJ hacking around here, but hey you could start a project! ;P',44,1158343527,'ojdon','','86.135.249.42'),(307,'So I\'m guessing this means New Junk City in Sonic 1 wasn\'t thought of much here either.',44,1158352765,'Mr.Chaotix','','152.163.100.203'),(308,'ojdon: This place isn\'t just for Sonic related hacking.',44,1158390872,'rika','','69.181.110.196'),(309,'I was meaning in general...',44,1158404301,'ojdon','','86.135.255.27'),(310,'drx did say on some other part of this site that he would expand this place to more than just hacking Sonic. I\'m guessing Ristar is just the beginning and soon on there will be Vectorman then EWJ, Sparkster, Toejam & Earl, etc. You get the idea.',44,1158433448,'Mr.Chaotix','','205.188.116.203'),(311,'Yeah I do :P',44,1158505613,'ojdon','','86.141.29.84'),(312,'Personally, I\'d like to see a few EWJ hacks and maybe a few Sparkster hacks.',44,1158518841,'Mr.Chaotix','','205.188.116.203'),(313,'when is the 12th installment come out, or is it allready out, thanks in advance for anyones answers',42,1158544032,'optiboi','optiboi1981@aol.com','64.12.116.201'),(314,'I\'ve began working on a Rocket Knight Adventures have, and have quite a lot of notes for it.',44,1158665994,'StephenUK','','86.136.216.26'),(315,'Nice. Anything on Earthworm Jim though?',44,1158700071,'Mr.Chaotix','','205.188.116.203'),(316,'Nice Idea... I probally won\'t do it, cos for one i\'m broke, anyway nice idea! Hope it goes well! ',45,1158778605,'ojdon','','81.129.112.157'),(317,'je suis francaise et j\'adore tails !!!',30,1158940608,'tails','','88.136.137.37'),(318,'Sounds good, but I am also broke. \r\nmaybe another time, another place, lol. \r\n\r\n',45,1159146971,'X','','24.12.130.32'),(319,'Yeah, but i\'m sure more people are intrested.',45,1159220020,'ojdon','','86.135.251.197'),(320,'I\'m broke. I\'d like to learn ASM though. I guess I\'ll wait till you revise your ASM guides then.',45,1159229405,'Mr.Chaotix','','64.12.116.204'),(323,'Great work!\r\nhttp://tkfznvbz.com/ldpu/seik.html | http://qcbeppmz.com/pqcu/caok.html',45,1159337392,'Peggy','may@mail.com','72.232.67.244'),(326,'Well done!\r\nhttp://dpwydrlk.com/qvzb/jtfs.html | http://fgknamyt.com/glry/jcra.html',44,1159337428,'Monica','cory@pochta.com','72.232.67.243'),(329,'Nice site!\r\nhttp://mcvxhquy.com/ztcj/cwbs.html | http://nbtjvdua.com/sqiz/wxkz.html',43,1159337454,'Freda','rex@gmail.com','216.32.84.62'),(332,'Nice site!\r\nhttp://bvhovglf.com/uimm/kbpz.html | http://xiivzeot.com/strt/aols.html',42,1159337495,'Kevin','dixie@pismo.com','216.32.84.61'),(335,'Thank you!\r\nhttp://ksuhmhlm.com/mnua/qmka.html | http://fcystxsj.com/rost/iwbh.html',41,1159337570,'Jill','karen@pisem.net','72.232.67.245'),(338,'Nice site!\r\nhttp://qgcipetu.com/fvll/qfqi.html | http://euvlumnk.com/mdgz/eabq.html',45,1159337977,'Phillip','veronica@fromru.com','72.232.67.246'),(341,'Great work!\r\nhttp://strxfuiw.com/iwej/fots.html | http://vrixiujb.com/yfbh/jqos.html',44,1159338030,'Cory','dixie@fromru.net','220.117.162.169'),(344,'Good design!\r\nhttp://hgeeefwy.com/xvwk/zlzq.html | http://vrkvifvy.com/uesd/awlx.html',43,1159338052,'Gabriel','britney@pochta.com','72.232.67.243'),(347,'Great work!\r\nhttp://ckvfefxt.com/udnc/rdhs.html | http://axowjyni.com/rlbn/upqv.html',42,1159338089,'David','john@mail.com','69.41.183.116'),(350,'Nice site!\r\nhttp://idsodlay.com/ycev/xuhj.html | http://zpigsjgq.com/lcju/soin.html',41,1159338113,'Britney','pamela@gmail.com','72.232.67.243'),(353,'Great work!\r\nhttp://csqyokdl.com/zzxl/ypyi.html | http://jojgwtch.com/obor/ckyh.html',45,1159338681,'Alan','debbie@fromru.net','216.32.84.62'),(356,'Well done!\r\nhttp://pttwlfsw.com/clfc/cqml.html | http://hjaylpjl.com/xtwg/gqxy.html',44,1159338714,'Matt','nancy@gmail.com','216.32.84.59'),(361,'Thank you!\r\nhttp://ttuwbimr.com/onty/dsrk.html | http://vpcshrrn.com/jkfm/tjuc.html',43,1159338791,'Robert','joe@fromru.net','216.32.84.61'),(363,'Nice site!\r\nhttp://eziynopz.com/hlwr/pxwo.html | http://tytemlmy.com/gyux/hcyr.html',45,1159338835,'Cory','jane@pochta.net','69.41.183.115'),(366,'Great work!\r\nhttp://kuowvooq.com/hfgv/nqno.html | http://lbyjskpc.com/ojan/zeun.html',42,1159338881,'Cindy','ellen@pisem.net','69.41.183.116'),(368,'Thank you!\r\nhttp://bzkatykn.com/xjjd/vhxf.html | http://xbvphmay.com/ixca/uvbz.html',44,1159338901,'Greg','joy@yahoo.com','72.232.67.246'),(372,'Nice site!\r\nhttp://tpixcufx.com/phim/jvdb.html | http://sabxgjuj.com/kwek/jxqh.html',41,1159338974,'Sabrina','craig@pochta.com','216.32.84.62'),(374,'Good design!\r\nhttp://dpicvmvk.com/rqst/ppze.html | http://tutylfir.com/hxhg/dcgz.html',43,1159339020,'Monica','julie@mail.com','72.232.67.242'),(377,'Well done!\r\nhttp://ilcrmqac.com/vhsy/yeul.html | http://dkdobyfa.com/sqsu/uloz.html',42,1159339062,'Betty','keith@pisem.net','72.232.67.244'),(380,'Thank you!\r\nhttp://sarzarsb.com/hqzl/arps.html | http://lbftgpmr.com/uuqx/kkfa.html',41,1159339110,'Alan','howard@gmail.com','72.232.67.242'),(383,'Good design!\r\nhttp://zranzaim.com/mbsf/fszd.html | http://beqkjkgf.com/hjpt/svha.html',45,1159341363,'Sabrina','patty@fromru.net','72.232.67.243'),(386,'Well done!\r\nhttp://ltsmrsdy.com/tvgp/zrid.html | http://dnqmrmpc.com/xvxj/zmho.html',44,1159341497,'Shelly','betty@mail.com','202.57.129.114'),(389,'Nice site!\r\nhttp://acdtretl.com/hadt/olfk.html | http://qtxvfpdl.com/uozj/auil.html',43,1159341649,'Jane','otto @gmail.com','216.32.84.61'),(392,'Well done!\r\nhttp://ozkoxbad.com/xxoa/wtqj.html | http://ixnspvmr.com/qsuw/nkqz.html',42,1159341719,'Tina','holly@pisem.net','216.32.84.61'),(395,'Nice site!\r\nhttp://nvtysehg.com/cvym/lhzb.html | http://jkalkseh.com/xckv/ohgo.html',41,1159341748,'Ida','gina@pisem.net','216.32.84.59'),(396,'oh dear, is it just me or have you got bots here! *Loads up rifle* Come on lads bounty hunting time!',45,1159548187,'ojdon','','81.129.112.159'),(397,'Either that or this topic just got popular.',45,1159566025,'Mr.Chaotix','','152.163.100.204'),(398,'nice try... >_> nice message :(',45,1159919895,'lol','','68.201.79.86'),(399,'I\'d suggest a DDoS attack to the bot\'s e-mail domain servers o.O (j/k)',45,1159923555,'TheCount','','200.115.253.19'),(400,'I could pay for it, But I but I dont really want the lessons that badly.( Im saving up for an NDS)',45,1160439666,'Kaos','','70.115.66.180'),(401,'The creator of said hack is now God.',42,1161634668,'The S','iamthes@gmail.com','209.147.114.202'),(402,'You can get sprites from Sonic CD if you need Special Stage sprites, since IMHO the style is very similar - just needs different pallete/shading',46,1161989537,'Techokami','','68.163.248.105'),(403,'That\'s correct, Techokami. You can probably look in the special stage file(s) in the Sonic CD .iso with TLP and extract the sprites.',46,1161992182,'Hendricks266','','172.136.103.250'),(404,'Awesome hack here, it\'s near perfect.',46,1162191778,'rika','','69.181.110.196'),(405,'Don\'t you guys have jobs? Hey drx, I\'ll take you up on this offer however you wish to do it, but I work full time. Most of my free time is either on the weekend or for the few hours I\'m still awake after getting home in the evening. ',45,1162556096,'Bit-Blade','bit.blade@gmail.com','68.32.155.58'),(406,'Tell me, how many years have we been waiting for this hoax to become a real hack? :P Well I have been waiting for at least 2 years, more than that I think! :S',46,1162573343,'ojdon','','81.155.220.178'),(407,'It\'s the best hack.',46,1162996221,'master blast','','83.154.156.48'),(408,'Well that\'s cool. I think I should invest in a flash cart with 32x support soon, and this is one more reason why.',46,1163772660,'bullis1','','72.1.205.178'),(409,'Great job!  Now put Tails in as Charmy or something like that as there was question of him being in it.',46,1163980613,'Gunnex','redchao7@comcast.net','69.250.25.31'),(410,'Wow, this\'s Excellent !\r\nCongratulations for this hack !',46,1164631236,'Eduardo_Knuckles','edu1sonic@yahoo.com.br','201.68.182.133'),(411,'I been dying for this disassembly. I like you a lot ',48,1165454294,'Sinkdude','poposheepdog@yahoo.com','4.229.153.179'),(412,'super quick nice job!\r\n',48,1166313272,'Frank Pero','fpusoft@gawab.com','207.118.210.137'),(413,'super quick nice job!\r\n',48,1166313272,'Frank Pero','fpusoft@gawab.com','207.118.210.137'),(414,'Nice, gotta check that out',47,1166384185,'UltimaDyde','','62.253.32.4'),(415,'Sorry did my name wrong',47,1166384202,'UltimaDude*','','62.253.32.4'),(416,'I still can\'t believe you actually dumped it....',48,1166487671,'Team Sonic','','203.54.14.3'),(417,'that great because i made sonic 2 long .',46,1166565624,'sonic the alex hedghog','optimus_prim1222222222222222222222222222222','71.135.187.209'),(418,'good hack because i made sonic ex demo that a good hack you did boy i am 21 years old.',46,1166565782,'shadow/kevin','optimopti us_prim1222222222222222222222222222222','71.135.187.209'),(419,'The BEST game ever!',48,1166752549,'Wildfire','','70.174.164.219'),(421,'fuck that sonic 2 beta and sonic 1 beta and sonic3 beta is fuck cool.',46,1167861400,'al','optimus_prim@yhaioo.com','71.135.184.156'),(20728,'Awesome hack.',46,1178356536,'jd','','222.123.106.19'),(427,'Im love hacking games. Plese, work in a Amy and Cream hacking game! im cant work in this...',48,1168357506,'PC&Amy','Paulo_amy@hotmail.com','82.155.161.155'),(428,'아세키들아 ㅡㅡ 한글몰ë¼? 왜 ì˜어로 처ë§하ëƒ ㅡㅡ 한글좀 ì¨ë¼.. Are you Korean? 한국어를 사랑합시다. 양키님아',45,1168432416,'천멸ì˜성','jjw112911291129@한메ì¼!!','222.97.130.153'),(429,'Someone please help. I\'ve got Sonic 2 on xbox. HOW DO I BEAT THE END STAGE??? I\'m going crazy. Everything I have tried is not working!',31,1168740563,'Brooke','brookafina@hotmail.com','24.252.63.175'),(431,'u fukin gay dr x snatching money u dik ed fuk u',48,1170457102,'dik ed','yamom@yadad.com','82.46.138.245'),(433,'One word: Awesome',45,1170752715,'arnold_the_bartender','arnold_the_bartender@yahoo.com','75.41.244.40'),(434,'Yay! I can now mess around with the beta',48,1171137214,'UltimaDude','','62.253.32.4'),(435,'well the early beta',48,1171137236,'UltimaDude','','62.253.32.4'),(452,'Buy Viagra Online For Best Price:\r\nhttp://best-meds.nm.ru/viagra_kaufen.htm\r\nhttp://buyviagra.hotmail.ru/buy_viagra_online.html\r\nhttp://bestprice.nm.ru/buyviagraonline.htm\r\nhttp://buyviagraonline.nm.ru/order_viagra.html\r\nhttp://cheap-tabs.hotmail.ru/generic-viagra.html\r\nhttp://best-rx.nm.ru/purchase-viagra.html\r\nhttp://cialis-tabs.nm.ru/cialis-levitra.html\r\nhttp://levitra.nightmail.ru/buy-levitra.html\r\nhttp://longlovetabs.nightmail.ru/pill-viagra.html\r\nhttp://medication.hotmail.ru/discount-viagra.htm\r\nhttp://online-rx.hotmail.ru/prescription0viagra.htm\r\nhttp://onlineviagra.nightmail.ru//viagra-bezugsquelle.html\r\nhttp://orderviagra.nm.ru/order-viagra-online.html\r\nhttp://viagra-cheap.nightmail.ru/viagra-for-woman.html\r\nhttp://viagrapills.nm.ru/viagra-rezeptfrei.html\r\nhttp://viagra-rx.nm.ru/generic_viagra.html\r\nhttp://spy-tech.nm.ru/\r\n',45,1171604121,'druis','saka@mail.com','211.176.186.215'),(453,'Buy Viagra Online For Best Price:\r\nhttp://best-meds.nm.ru/viagra_kaufen.htm\r\nhttp://buyviagra.hotmail.ru/buy_viagra_online.html\r\nhttp://bestprice.nm.ru/buyviagraonline.htm\r\nhttp://buyviagraonline.nm.ru/order_viagra.html\r\nhttp://cheap-tabs.hotmail.ru/generic-viagra.html\r\nhttp://best-rx.nm.ru/purchase-viagra.html\r\nhttp://cialis-tabs.nm.ru/cialis-levitra.html\r\nhttp://levitra.nightmail.ru/buy-levitra.html\r\nhttp://longlovetabs.nightmail.ru/pill-viagra.html\r\nhttp://medication.hotmail.ru/discount-viagra.htm\r\nhttp://online-rx.hotmail.ru/prescription0viagra.htm\r\nhttp://onlineviagra.nightmail.ru//viagra-bezugsquelle.html\r\nhttp://orderviagra.nm.ru/order-viagra-online.html\r\nhttp://viagra-cheap.nightmail.ru/viagra-for-woman.html\r\nhttp://viagrapills.nm.ru/viagra-rezeptfrei.html\r\nhttp://viagra-rx.nm.ru/generic_viagra.html\r\nhttp://spy-tech.nm.ru/\r\n',45,1171604154,'druis','saka@mail.com','59.162.170.38'),(465,'Buy Viagra Online Today:\r\nhttp://best-meds.nm.ru/viagra_kaufen.htm\r\nhttp://buyviagra.hotmail.ru/buy_viagra_online.html\r\nhttp://bestprice.nm.ru/buyviagraonline.htm\r\nhttp://buyviagraonline.nm.ru/order_viagra.html\r\nhttp://cheap-tabs.hotmail.ru/generic-viagra.html\r\nhttp://best-rx.nm.ru/purchase-viagra.html\r\nhttp://cialis-tabs.nm.ru/cialis-levitra.html\r\nhttp://levitra.nightmail.ru/buy-levitra.html\r\nhttp://longlovetabs.nightmail.ru/pill-viagra.html\r\nhttp://medication.hotmail.ru/discount-viagra.htm\r\nhttp://online-rx.hotmail.ru/prescription0viagra.htm\r\nhttp://onlineviagra.nightmail.ru/viagra-bezugsquelle.html\r\nhttp://orderviagra.nm.ru/order-viagra-online.html\r\nhttp://viagra-cheap.nightmail.ru/viagra-for-woman.html\r\nhttp://viagrapills.nm.ru/viagra-rezeptfrei.html\r\nhttp://viagra-rx.nm.ru/generic_viagra.html\r\nhttp://www.testviagra.org/\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/\r\nhttp://www.listsitepro.com/buyviagra/\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/\r\nhttp://www.listsitepro.com/viagra/#buyviagraonline\r\nhttp://www.listsitepro.com/viagra/index.html\r\nhttp://www.greatpriceviagra.org/buy-viagra-cheap.html\r\nhttp://www.testviagra.org/\r\nhttp://www.greatpriceviagra.org/purchase-viagra.html\r\nhttp://www.telepathy.nm.ru/viagra-uk.html\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/pfizer-viagra.html\r\nhttp://www.youth-rf.nm.ru/\r\nhttp://groups.google.com/group/buyviagraonline\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/order-viagra-online.html\r\nhttp://www.listsitepro.com/viagra/#buy-viagra\r\nhttp://www.telepathy.nm.ru/viagra-cialis.html\r\nhttp://cheap-generic-viagra.nm.ru/viagra-woman.html\r\nhttp://viagra-viagra-viagra.nm.ru/best-price-viagra.html\r\nhttp://spy-tech.nm.ru/\r\nhttp://best.longlovetabs.com/',45,1171688825,'zayka','koopa@yahoo.com','220.226.63.254'),(466,'Buy Viagra Online Today:\r\nhttp://best-meds.nm.ru/viagra_kaufen.htm\r\nhttp://buyviagra.hotmail.ru/buy_viagra_online.html\r\nhttp://bestprice.nm.ru/buyviagraonline.htm\r\nhttp://buyviagraonline.nm.ru/order_viagra.html\r\nhttp://cheap-tabs.hotmail.ru/generic-viagra.html\r\nhttp://best-rx.nm.ru/purchase-viagra.html\r\nhttp://cialis-tabs.nm.ru/cialis-levitra.html\r\nhttp://levitra.nightmail.ru/buy-levitra.html\r\nhttp://longlovetabs.nightmail.ru/pill-viagra.html\r\nhttp://medication.hotmail.ru/discount-viagra.htm\r\nhttp://online-rx.hotmail.ru/prescription0viagra.htm\r\nhttp://onlineviagra.nightmail.ru/viagra-bezugsquelle.html\r\nhttp://orderviagra.nm.ru/order-viagra-online.html\r\nhttp://viagra-cheap.nightmail.ru/viagra-for-woman.html\r\nhttp://viagrapills.nm.ru/viagra-rezeptfrei.html\r\nhttp://viagra-rx.nm.ru/generic_viagra.html\r\nhttp://www.testviagra.org/\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/\r\nhttp://www.listsitepro.com/buyviagra/\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/\r\nhttp://www.listsitepro.com/viagra/#buyviagraonline\r\nhttp://www.listsitepro.com/viagra/index.html\r\nhttp://www.greatpriceviagra.org/buy-viagra-cheap.html\r\nhttp://www.testviagra.org/\r\nhttp://www.greatpriceviagra.org/purchase-viagra.html\r\nhttp://www.telepathy.nm.ru/viagra-uk.html\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/pfizer-viagra.html\r\nhttp://www.youth-rf.nm.ru/\r\nhttp://groups.google.com/group/buyviagraonline\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/order-viagra-online.html\r\nhttp://www.listsitepro.com/viagra/#buy-viagra\r\nhttp://www.telepathy.nm.ru/viagra-cialis.html\r\nhttp://cheap-generic-viagra.nm.ru/viagra-woman.html\r\nhttp://viagra-viagra-viagra.nm.ru/best-price-viagra.html\r\nhttp://spy-tech.nm.ru/\r\nhttp://best.longlovetabs.com/',45,1171712558,'gid','sany@mail.com','200.49.102.100'),(467,'Buy Viagra Online Today:\r\nhttp://best-meds.nm.ru/viagra_kaufen.htm\r\nhttp://buyviagra.hotmail.ru/buy_viagra_online.html\r\nhttp://bestprice.nm.ru/buyviagraonline.htm\r\nhttp://buyviagraonline.nm.ru/order_viagra.html\r\nhttp://cheap-tabs.hotmail.ru/generic-viagra.html\r\nhttp://best-rx.nm.ru/purchase-viagra.html\r\nhttp://cialis-tabs.nm.ru/cialis-levitra.html\r\nhttp://levitra.nightmail.ru/buy-levitra.html\r\nhttp://longlovetabs.nightmail.ru/pill-viagra.html\r\nhttp://medication.hotmail.ru/discount-viagra.htm\r\nhttp://online-rx.hotmail.ru/prescription0viagra.htm\r\nhttp://onlineviagra.nightmail.ru/viagra-bezugsquelle.html\r\nhttp://orderviagra.nm.ru/order-viagra-online.html\r\nhttp://viagra-cheap.nightmail.ru/viagra-for-woman.html\r\nhttp://viagrapills.nm.ru/viagra-rezeptfrei.html\r\nhttp://viagra-rx.nm.ru/generic_viagra.html\r\nhttp://www.testviagra.org/\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/\r\nhttp://www.listsitepro.com/buyviagra/\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/\r\nhttp://www.listsitepro.com/viagra/#buyviagraonline\r\nhttp://www.listsitepro.com/viagra/index.html\r\nhttp://www.greatpriceviagra.org/buy-viagra-cheap.html\r\nhttp://www.testviagra.org/\r\nhttp://www.greatpriceviagra.org/purchase-viagra.html\r\nhttp://www.telepathy.nm.ru/viagra-uk.html\r\nhttp://www.cheapestviagraonline.org/\r\nhttp://www.greatpriceviagra.org/pfizer-viagra.html\r\nhttp://www.youth-rf.nm.ru/\r\nhttp://groups.google.com/group/buyviagraonline\r\nhttp://him.newmail.ru/\r\nhttp://www.telepathy.nm.ru/order-viagra-online.html\r\nhttp://www.listsitepro.com/viagra/#buy-viagra\r\nhttp://www.telepathy.nm.ru/viagra-cialis.html\r\nhttp://cheap-generic-viagra.nm.ru/viagra-woman.html\r\nhttp://viagra-viagra-viagra.nm.ru/best-price-viagra.html\r\nhttp://spy-tech.nm.ru/\r\nhttp://best.longlovetabs.com/',45,1171712599,'gid','sany@mail.com','193.188.77.2'),(491,'Is it just me or someone posted calling himself dickhead?',48,1171997881,'TheCount','','190.55.85.55'),(545,'Looks Like Someone Has a\r\nSpam Problem ',48,1172545333,'Frank Pero','','69.179.13.110'),(667,'Hellorec - this is just a testing, don\'t worry about it',43,1172991731,'Testergde','tester@tester.com','64.124.222.167'),(684,'You should see what the hpz forums look like.',48,1173114974,'TheCount','','190.55.85.55'),(725,'http://phenforsale3.phpbbx.de/\r\nhttp://phenforsale3.phpbbx.de/',43,1173191796,'billisuk','billisu@mail.com','200.88.223.98'),(1057,'Google is the best search engine',45,1173268309,'AXYYsxrWxq','xpWBnhSX@tIInTZBE.com','85.255.113.158'),(3100,'lozytcaq@mail.com',43,1173582653,'lozytcaq@mail.com','','125.248.143.226'),(3575,'nhaudms@mail.com',45,1173637176,'nhaudms@mail.com','','85.19.187.20'),(4096,'Umm.....Okay I Was Wondering When you where going to get some new Hacks Because This Site Could use some new ones\r\n\r\nThat\'s It,\r\nMike Arcade',48,1173693168,'Mike Arcade','Mike_Arcade07@Yahoo.com','69.104.57.111'),(4597,'what',45,1173755077,'oh my','','66.69.164.77'),(5614,'\r\nThis is a great idea for our community and a time saver for people looking for specific things in and about the neighborhood.\rhttp://www.pitt.edu/~den11/es/roulette-4.html\rhttp://www.pitt.edu/~den11/de/spiel-1.html\rhttp://www.pitt.edu/~den11/es/caribbean-poker-3.html\rhttp://www.pitt.edu/~den11/es/juego-interactivo-4.html\rhttp://www.pitt.edu/~den11/es/juego-pagina-1.html\rhttp://www.pitt.edu/~den11/es/maquinas-tragaperras-4.html\rhttp://www.pitt.edu/~den11/es/maquinas-tragaperras-2.html\rhttp://www.pitt.edu/~den11/es/juegos-apuestas-4.html\rhttp://www.pitt.edu/~den11/es/caribbean-poker-1.html\rhttp://www.pitt.edu/~den11/es/casino-internacional-3.html',45,1173858490,'maquinas tragaperras pagina internet','','41.222.70.190'),(5638,'\r\nExcellent piece of work!!\rhttp://www.pitt.edu/~den11/es/poquer-3.html\rhttp://www.pitt.edu/~den11/de/online-poker-4.html\rhttp://www.pitt.edu/~den11/es/juego-2.html\rhttp://www.pitt.edu/~den11/es/juegos-azar-3.html\rhttp://www.pitt.edu/~den11/es/roulette-1.html\rhttp://www.pitt.edu/~den11/fr/casino-1.html\rhttp://www.pitt.edu/~den11/de/blackjack-2.html\rhttp://www.pitt.edu/~den11/es/juego-al-instante-3.html\rhttp://www.pitt.edu/~den11/es/ganar-premio-2.html\rhttp://www.pitt.edu/~den11/de/casino-spiele-3.html',45,1173860535,'bonus','','199.203.55.3'),(5641,'\r\nExcellent piece of work!!\rhttp://www.pitt.edu/~den11/es/poquer-3.html\rhttp://www.pitt.edu/~den11/de/online-poker-4.html\rhttp://www.pitt.edu/~den11/es/juego-2.html\rhttp://www.pitt.edu/~den11/es/juegos-azar-3.html\rhttp://www.pitt.edu/~den11/es/roulette-1.html\rhttp://www.pitt.edu/~den11/fr/casino-1.html\rhttp://www.pitt.edu/~den11/de/blackjack-2.html\rhttp://www.pitt.edu/~den11/es/juego-al-instante-3.html\rhttp://www.pitt.edu/~den11/es/ganar-premio-2.html\rhttp://www.pitt.edu/~den11/de/casino-spiele-3.html',45,1173860721,'bonus','','218.111.110.57'),(5644,'\r\nMany thanks.\rhttp://www.pitt.edu/~den11/payday/no-bank-statement-payday-loan.html\rhttp://www.pitt.edu/~den11/payday/payday-loan-1000.html\rhttp://www.pitt.edu/~den11/cash/ameriloan-cash-advance.html\rhttp://www.pitt.edu/~den11/cash/cash-advance-philadelphia.html\rhttp://www.pitt.edu/~den11/payday/ics-payday-loan.html\rhttp://www.pitt.edu/~den11/cash/first-cash-advance.html\rhttp://www.pitt.edu/~den11/payday/instant-no-fax-payday-loan.html\rhttp://www.pitt.edu/~den11/payday/online-payday-loan.html\rhttp://www.pitt.edu/~den11/payday/payday-loan-las-vegas.html\rhttp://www.pitt.edu/~den11/cash/cash-advance-los-angeles.html',45,1173860805,'payday loan 1000','','202.115.200.211'),(5659,'\r\nWhat a great idea!\rhttp://www.pitt.edu/~den11/payday/internet-payday-loan.html\rhttp://www.pitt.edu/~den11/cash/same-day-cash-advance.html\rhttp://www.pitt.edu/~den11/payday/quick-payday-loan.html\rhttp://www.pitt.edu/~den11/cash/cash-advance-company.html\rhttp://www.pitt.edu/~den11/payday/free-payday-loan.html\rhttp://www.pitt.edu/~den11/cash/cash-advance-baltimore.html\rhttp://www.pitt.edu/~den11/cash/advance-america-cash-advance.html\rhttp://www.pitt.edu/~den11/payday/payday-loan-company.html\rhttp://www.pitt.edu/~den11/cash/payday-cash-advance-texas.html\rhttp://www.pitt.edu/~den11/cash/first-american-cash-advance.html',45,1173861995,'quick payday loan','','203.28.159.169'),(5752,'Kogda-nibud nastanut holoda',45,1173871121,'Arium Banshi','banshi@ubuntu.net','209.66.122.89'),(9297,'Hacking Cult is BACK! NOW WITH MORE SPAAAAMMMMM!!!',48,1174827447,'WOOOOO!','','66.69.164.77'),(16011,'yzje@mail.com',42,1175445100,'yzje@mail.com','','218.63.252.219'),(17050,'yuneptwi@mail.com',45,1175529832,'yuneptwi@mail.com','','60.50.206.14'),(19877,'fbjwquy@mail.com',45,1175811255,'fbjwquy@mail.com','','124.87.14.210'),(20494,'dose as <a ',46,1175878767,'soma online','d29p_test606@yahoo.com','125.65.81.3'),(20729,'ÕÓÉ ÍÀ ÕÓÅ È ÕÓÅÌ ÏÎÄÃÎÍßÅÒ',42,1249910676,'Õ Ó É  Ñ  Ã Î Ð Û','','213.167.214.215'),(20730,'Õ Ó É ÍÀ Õ Ó Å È Õ Ó Å Ì ÏÎÄÃÎÍßÅÒ',42,1249910725,'Õ Ó É  Ñ  Ã Î Ð Û','','213.167.214.215');

--
-- Table structure for table `cult_games`
--

CREATE TABLE `cult_games` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `fullname` varchar(255) NOT NULL DEFAULT '',
  `type` int(3) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_games`
--

INSERT INTO `cult_games` VALUES (1,'Sonic 1',1),(3,'Sonic 2 &beta;eta',1),(4,'Sonic 2',1),(5,'Sonic 3',1),(6,'Sonic 1 & Knuckles',1),(7,'Knuckles in Sonic 2',1),(8,'Sonic 3 & Knuckles',1),(9,'Sonic & Knuckles',1),(10,'Sonic 3D',1),(11,'Sonic Spinball',1),(12,'Sonic CD',1),(13,'Sonic Compilation',1),(14,'Knuckles Chaotix',1),(15,'Mean Bean Machine',1),(16,'Sonic 1 (8-bit)',1),(17,'Sonic 2 (8-bit)',1),(18,'Megadrive Programming',1),(19,'GD-ROM Ripping',1),(20,'Tutorials',1),(21,'Sonic Crackers',1),(22,'Sonic Chaos',1),(23,'Alex Kidd',1),(24,'Sonic Music Guide',1),(25,'Sonic Adventure DX',1),(27,'Columns',1),(28,'Mortal Kombat',1),(29,'LocalH',2),(30,'drx',2),(31,'Sega\\\'s SVP Chip',1);

--
-- Table structure for table `cult_hacks`
--

CREATE TABLE `cult_hacks` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `author` varchar(255) DEFAULT NULL,
  `desc` text,
  `date` int(11) DEFAULT NULL,
  `game` int(9) DEFAULT NULL,
  `votes` int(9) DEFAULT '0',
  `votes_count` int(9) DEFAULT '0',
  `img` varchar(255) DEFAULT NULL,
  `file` varchar(255) DEFAULT NULL,
  `staff_rating` varchar(10) DEFAULT NULL,
  `features` text,
  `type` int(3) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=68 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_hacks`
--

INSERT INTO `cult_hacks` VALUES (1,'sonic and tals in paynt','thehulk','<b><i>LAST RELEASE</b>: Outdated</i><br><br>thehulk returns with something even worse than sonic in paynt! He is back again, with palettes and layouts that will make your eyes burn and cry at the same time.',1249349675,4,13614,1912,'Sonic 2 - sonic and tals in paynt.png','Sonic 2 - sonic and tals in paynt.rar','1.0','Palettes\r\nLevel Layouts',1),(2,'Project Shadow 2 DEMO 4','JohnnyUK','<b><i>LAST RELEASE</b>: Outdated (2004?)</i><br><br>A great hack featuring Shadow and Chao replacing Sonic and Tails. The levels are well-designed and very fast-paced. Johnny has made sure that there are no bugs in this release. For more info about all changes (writing them all here would be really difficult), read the readme.\r\n\r\nThe bonus rom is also available <a href=hacks/psbonus.php target=_blank>here</a>.',1249349649,4,5954,833,'Sonic 2 - Project Shadow 2 DEMO 4.png','Sonic 2 - Project Shadow 2 DEMO 4.rar','9.0','Palettes\r\nLevel Layouts\r\nSprites\r\nNew Features',1),(3,'Sonic 2 Delta v0.23','Esrael G. Neto','<b><i>LAST RELEASE</b>: 2008-10-06</i><br><br>Sonic 2 Delta is, without a doubt, one of the most ambitious ROM hacking projects ever made. At a time when the Sonic Community struggled with hex editing to edit ROMs, Esrael G. Neto came out of nowhere with Sonic 2 Delta and shocked everyone with astounding technical feats, such as restoring deleted levels, enemies and prototype elements. The project has come a long way and may seem unimpressive for today\\\'s standards, but the fact still remains that Sonic 2 Delta is the ROM hack that officially put advanced Sonic editing on the map.',1249396362,3,7798,1501,'Sonic 2 Beta - Sonic 2 Delta v0.2.png','Sonic 2 Beta - Sonic 2 Delta v0.23.rar','10','New Levels\r\nNew GFX\r\nNew Characters\r\nMusic\r\nASM Code',1),(4,'Sonic 2 Long Version v1.8','Sonic Hachelle-Bee','<b><i>LAST RELEASE</b>: 2004-10-22</i><br><br>Similarly to Sonic 2 Delta, Sonic 2 Long Version restores incomplete/unused levels and adds a few minor features.<br><br>It is worth noting that Sonic Hachelle-Bee, being on a Macintosh, used raw hex and machine code editing for the development of this hack, which is quite an impressive feat considering that he didn\\\'t use any hacking tools.',1249349553,4,5277,730,'Sonic 2 - Sonic 2 Long Version v1.8.png','Sonic 2 - Sonic 2 Long Version v1.8.rar','9.5','New Levels\r\nNew GFX\r\nASM Code',1),(5,'South Island Adventure v0.3','Hivebrain','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Play as Espio the Chameleon (of Knuckles Chaotix fame) in Sonic 1.',1249697568,1,5452,1117,'Sonic 1 - South Island Adventure v0.3.png','Sonic 1 - South Island Adventure v0.3.rar','8.5','Palettes\r\nLevel Layouts\r\nGraphics\r\nASM Code',1),(6,'Eggman in Sonic 1','LOst','<b><i>LAST RELEASE</b>: Outdated (2004?)</i><br><br>Play as Eggman in Sonic 1. Impressive technical feat considering the year it was released, it required reworking the mappings and collision engine from scratch in order to fit Eggman\\\'s sprites in. Very buggy.',1249349875,1,3617,642,'Sonic 1 - Eggman in Sonic 1.png','Sonic 1 - Eggman in Sonic 1.rar','6.5','Sprites\r\nASM Code',1),(7,'Tails In S&K Stages','drx','<b><i>LAST RELEASE</b>: Final</i><br><br>Play as Tails in S&K Stages. You can select Sonic, Knuckles or Tails.',1249696681,6,3131,486,'Sonic 1 & Knuckles - Tails In S&K Stages.png','Sonic 1 & Knuckles - Tails In S&K Stages.rar','7.0','ASM Code',1),(8,'Sonic Gaiden v0.3','Yuski and Esrael','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Sonic Gaiden was the first hack to implement multiple characters in Sonic 1. Play as either Sonic or Mighty.',1249396626,1,2737,451,'Sonic 1 (J) - Sonic Gaiden v0.3.png','Sonic 1 (J) - Sonic Gaiden v0.3.rar','8.0','Palettes\r\nLevel Layouts\r\nSprites\r\nASM Code\r\nNew Features',1),(9,'Tohaka v0.21','Ultima','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Ultima\\\'s once-famed Sonic 2 hack. Collect the emeralds through the levels (there\\\'s one in every act of every zone) and you will encounter a little secret at the end of the game.',1249350116,4,3026,503,'Sonic 2 - Tohaka v0.21.png','Sonic 2 - Tohaka v0.21.rar','8.5','Palettes\r\nLevel Layouts\r\nSprites\r\nASM Code\r\nNew Features',1),(10,'Sonic 2 Delta II v1.0a','Esrael G. Neto','<b><i>LAST RELEASE</b>: 2004-05-16</i><br><br>Esrael G. Neto\\\'s Sonic 2 Delta project ported to the final version of Sonic 2.',1249350412,4,4072,591,'Sonic 2 - Sonic 2 Delta II v1.0.png','Sonic 2 - Sonic 2 Delta II v1.0.rar','10','New Levels\r\nNew GFX\r\nMusic\r\nASM Code\r\nNew Features',1),(23,'Planets in Marble Zone','LOst','<b><i>LAST RELEASE</b>: Outdated</i><br><br>By using SonED, LOst Library and Hivebrain\\\'s disassembly, LOst successfully restored the planets in Marble Zone as they were during the game\\\'s development.',1249397213,1,2691,462,'Sonic 1 - Planets in Marble Zone.png','Sonic 1 - Planets in Marble Zone.rar','7.5','New GFX\r\nASM Code',1),(11,'HyperX ver.1','SKAARG','<b><i>LAST RELEASE</b>: Outdated</i><br><br>One of the first ROM hacks to use SOME (Sonic One Music Editor) to edit voices in Sonic 1 tracks.',1249692492,1,1750,325,'Sonic 1 - HyperX ver.1.png','Sonic 1 - HyperX ver.1.rar','6.0','Palettes\r\nMusic\r\nLevel Edits',1),(12,'Sonic 2 Lost Paradise Version 2','.hack//zero','<b><i>LAST RELEASE</b>: Outdated</i><br><br>.dothack//zero\\\'s outdated hacking project, probably discontinued.',1249912337,4,1325,260,'Sonic 2 - Sonic 2 Lost Paradise Version 1.png','Sonic 2 - Sonic 2 Lost Paradise Version 1.rar','6.0','Palettes\r\nLevel Layouts',1),(13,'Menu Bypass','Hivebrain','<b><i>LAST RELEASE</b>: Final</i><br><br>Bypasses the menu. There are three binaries, each of them loading a different game.',1249396236,13,1538,303,'','Sonic Compilation - Menu Bypass.rar','','Menu Bypass',1),(14,'Sonic 2: Advanced Edit release 2','Rika_chou','Take a look on what could be the most time-consuming hack ever. Completely new levels to explore makes this hack innovative.',1152225873,4,2576,389,'Sonic 2 - Sonic 2 Advanced Edit release 2.png','Sonic 2 - Sonic 2 Advanced Edit release 2.rar','9.5','Sprites\r\nNew Levels\r\nNew GFX',1),(15,'MTAM The Perfect Existance','KojiChao','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Play as Shadow in Sonic 2.',1249396507,4,2012,316,'Sonic 2 - MTAM The Perfect Existance.png','Sonic 2 - MTAM The Perfect Existance.rar','7.5','Palettes\r\nLevel Layouts\r\nNew GFX',1),(16,'Sonic 1 Real-Time Demo Recording','drx','<b><i>LAST RELEASE</b>: Final</i><br><br>Records a demo (while you are playing a level) at $F000 in RAM ($11478 in GST).\r\n\r\nDisables music and sounds.',1249396530,1,1274,254,'','Sonic 1 - Sonic 1 Real-Time Demo Recording.rar','','Demo Recording',1),(17,'Sonic 2 and Knuckles Long Version v1.8','Sonic Hachelle-Bee','<b><i>LAST RELEASE</b>: 2004-10-22</i><br><br>S2&K version of Hachelle-Bee\\\'s Long Version mod.',1249396704,7,4005,601,'Knuckles in Sonic 2 - Sonic 2 and Knuckles Long Version v1.8.png','Knuckles in Sonic 2 - Sonic 2 and Knuckles Long Version v1.8.rar','9.5','New Levels\r\nNew GFX\r\nASM Code',1),(18,'The Hybridization Project','Dr. Eggfan','<b><i>LAST RELEASE</b>: Outdated</i><br><br>This project features levels from the Game Gear version of Sonic 2. Incomplete.',1249396741,4,1362,227,'Sonic 2 - The Hybridization Project.png','Sonic 2 - The Hybridization Project.rar','7.0','Palettes\r\nSprites\r\nNew GFX',1),(19,'sonic in paynt','thehulk','<b><i>LAST RELEASE</b>: Outdated</i><br><br>sonic in paynt was a joke hack created by a joke account on the Sonic CulT forums. Includes the ugliest palettes and level layouts you\\\'ll ever see.',1249396874,1,7654,1226,'Sonic 1 - sonic in paynt.png','Sonic 1 - sonic in paynt.rar','1.0','Palettes\r\nLevel Layouts',1),(20,'Mighty the Armadillo in Sonic 1','Yuski','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Play as Mighty the Armadillo in Sonic 1.',1249396916,1,2403,359,'Sonic 1 - Mighty the Armadillo in Sonic 1.png','Sonic 1 - Mighty the Armadillo in Sonic 1.rar','8.5','Palettes\r\nLevel Layouts\r\nMusic\r\nASM Code',1),(21,'Unnamed Hack','ICEKnight','<b><i>LAST RELEASE</b>: Final</i><br><br>Changes Silver Sonic\\\'s sprite for a metallic flicky using the then-just-released LOst Library.',1249397994,4,1227,222,'Sonic 2 - Unnamed Hack.png','Sonic 2 - Unnamed Hack.rar','5.0','New GFX',1),(22,'Sonic 2: Simple Harmless ASM Hack','Aurochs','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Simple hack that changes the way Super Sonic works. Early in development.\r\nRead the readme for all the changes.',1249397145,4,1357,239,'','Sonic 2 - Sonic 2: Simple Harmless ASM Hack.rar','7.0','ASM Code',1),(24,'Sonic 1 Plus v0.1','Hivebrain','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Hack that adds a number of extra features like spindash, specific shields, a continue feature and more. Also includes a new level, Jungle Zone, which is a remake of the original 8-bit version of Sonic 1.',1249397324,1,4132,553,'Sonic 1 - Sonic 1 Plus v0.1.png','Sonic 1 - Sonic 1 Plus v0.1.rar','9.0','New Levels\r\nNew GFX\r\nASM Code\r\nNew Features',1),(25,'Knuckles in Sonic 1 - Revision 01','Stealth','<b><i>LAST RELEASE</b>: Final</i><br><br>After the much-anticipated release of SonED2, Stealth shocks the community once again with this gem of a hack - Knuckles in Sonic 1. The name says it all and even more: this includes gliding, climbing and spindashing!<br><br>A few days after the release of this hack, Stealth released another version - dubbed \\\"revision 01\\\" - that fixes a couple of bugs and sports a completely new feature (only accessible by a code); Read the end of the readme for further information, as it is worth a try.',1249397438,1,4802,685,'Sonic 1 - Knuckles in Sonic 1 - Revision 01.png','Sonic 1 - Knuckles in Sonic 1 - Revision 01.rar','10','Sprites\r\nASM Code\r\nNew Features',1),(26,'Tails in Sonic 1 v1.5','drx & Puto','<b><i>LAST RELEASE</b>: Final(?)</i><br><br>Tails in Sonic 1. It says everything. It flies, it spindashes, there\\\'s no sign of Sonic in the game. This is an update by Puto, which fixes alot of bugs.',1249397505,1,2316,354,'Sonic 1 - Tails in Sonic 1 v1.5.png','Sonic 1 - Tails in Sonic 1 v1.5.rar','9.0','Sprites\r\nASM Code\r\nNew Features',1),(27,'Sonic 1 Alpha Hoax','drx','<b><i>LAST RELEASE</b>: Final</i><br><br>Uploaded upon request, this hack was made during drx\\\'s disassembling of the Sonic 1 ROM. There is no title screen, has purple flowers in Green Hill Zone, among other things that make the hack seem like an early prototype.',1249692781,1,1951,362,'Sonic 1 - Sonic 1 Alpha Hoax.png','Sonic 1 - Sonic 1 Alpha Hoax.rar','7.5','Palettes\r\nASM Code',1),(29,'Sonic in Tails speed highway','Dude','<b><i>LAST RELEASE</b>: Final</i><br><br>This is Sonic\\\'s object and camera files swapped out for Tails\\\', with slight modifications made so that the level is completable.',1249397586,25,5702,999,'Sonic Adventure DX - Sonic in Tails speed highway.png','Sonic Adventure DX - Sonic in Tails speed highway.rar','7.0','New Features',1),(30,'Advanced Sound Test','drx','<b><i>LAST RELEASE</b>: Final</i><br><br>Enables you to play all tunes with Remix and Bells effects and change the tempo, using a neat menu.',1249397622,27,2143,420,'Columns - Advanced Sound Test.png','Columns - Advanced Sound Test.rar','','New Features',1),(38,'Sonic in Chaotix','JJFTails','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Using a mixture between KojiChao\\\'s awesome sprites, and Crackers sprites, JJFTails was able to successfully port Sonic to Chaotix.',1249397665,14,5182,734,'Knuckles Chaotix - Sonic in Chaotix.png','Knuckles Chaotix - Sonic in Chaotix.rar','8.0','Graphical Hack\r\nText Hack',1),(41,'Sonic in Chaotix R2','JJFTails','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Using a mixture between KojiChao\\\'s awesome sprites, and Crackers sprites, JJFTails was able to successfully port Sonic to Chaotix. This is Revision 2, with various bugfixes,   special stage sprites, new shaded sprites, and other changes.',1249397654,14,6648,912,'Knuckles Chaotix - Sonic in Chaotix R2.png','Knuckles Chaotix - Sonic in Chaotix R2.rar','8.5','Graphical Hack\r\nText Hack',1),(35,'First Time Out - 60% Version','LocalH','LocalH\\\'s first Megadrive demo.  LocalH implemented the Sonic 1 sound driver in this demo (with a nice tune, btw). Worth seeing.\r\n\r\nKeep in mind, this is a 60% version, it\\\'ll be completed in few weeks.',1143692359,29,2400,482,'LocalH/First Time Out - 60% Version.png','LocalH/First Time Out - 60% Version.rar','','Music using Sonic 1 sound driver\r\nScrolling text using the sine function\r\nRasters',2),(36,'Hacking CulT Demo SH','drx','A demo featuring the Hacking CulT logo. It has a nice Shadow/Highlight effect and a \\\'ripple\\\' effect made using HScrolling. Hope you like the song.',1143692437,30,2387,411,'drx/Hacking CulT Demo SH.png','drx/Hacking CulT Demo SH.rar','','7-color images\r\nHScroll\r\nShadow/Highlight + Sprites\r\nSound Driver + GYM Player\r\n6 FM Channels\r\n2 PSG Channels',2),(37,'Tomarken Tribute','LocalH','A tribute demo to Peter Tomarken (the host of the 80\\\'s game show Press Your Luck), who died in a plane crash along with his wife. LocalH was a huge PYL fan, so he made this tribute demo.',1143693308,29,1945,394,'LocalH/Tomarken Tribute.png','LocalH/Tomarken Tribute.rar','','Sprites\r\nHScrolling 16-color image',2),(42,'Sonic 1 Megamix v4.0b','Team Megamix','Play with Sonic, Shadow, Mighty, Tails, and Knuckles in this high speed hack of Sonic 1. All the music has been changed, as well as the palettes. There is a new layout, and a bunch of ASM changes. Version 4.0b shows the game ported to the Sega CD, and introduces several new features. The ISO linked here is for US Sega CDs.',1249653005,1,7470,1050,'Sonic 1 - Sonic 1 Megamix v2.0.png','Sonic 1 - Sonic 1 Megamix v4.0b.rar','9.5','Palette\r\nMusic\r\nLevel Layout\r\nSprites\r\nNew Features\r\nASM Code',1),(43,'Sonic 2 SMTP','SMTP','<b><i>LAST RELEASE</b>: Outdated</i><br><br>Fun level layouts make this hack worthy of a play.',1249397728,4,1671,292,'Sonic 2 - Sonic 2 SMTP.png','Sonic 2 - Sonic 2 SMTP.rar','8.0','Palette\r\nLevel Layout\r\nASM Code',1),(44,'Sonic 1 Beta Remake v1.03B','Mistergambit','<b><i>LAST RELEASE</b>: Final(?)</i><br><br>This hack aims to be the Sonic 1 Beta that we always wanted. ',1249397762,1,2113,366,'Sonic 1 - Sonic 1 Beta Remake v1.03B.png','Sonic 1 - Sonic 1 Beta Remake v1.03B.rar','9.0','New GFX\r\nLevel Layouts\r\nEdited Music\r\nASM Code',1),(45,'Sonic - The Lost Land','Shadowfire','<b><i>LAST RELEASE</b>: Outdated</i><br><br>This is the starting hack in the line up of Lost Land hacks. ',1249397782,1,3341,480,'Sonic 1 - Sonic - The Lost Land.png','Sonic 1 - Sonic - The Lost Land.rar','8.0','Palette\r\nLevel Layout\r\nMusic\r\nSprites\r\nNew GFX\r\nASM Code',1),(46,'Sonic - The Lost Land 2','Shadowfire','<b><i>LAST RELEASE</b>: Outdated</i><br><br>This is the second hack in the line up of Lost Land hacks.',1249397825,4,1964,325,'Sonic 2 - Sonic - The Lost Land 2.png','Sonic 2 - Sonic - The Lost Land 2.rar','7.0','Palette\r\nSprites\r\nASM Code',1),(47,'Sonic 2 : The Cracko Coronicals','Mike','<b><i>LAST RELEASE</b>: Outdated</i><br><br>What is this I don\\\'t even.',1249748628,4,1323,264,'Sonic 2 - Sonic 2 : The Cracko Coronicals.png','Sonic 2 - Sonic 2:The Cracko Coronicals.rar','','Pallete\r\nMusic\r\nLevel Order\r\nLevel Layout',1),(48,'Robotnik\\\'s Revenge','ColinC10','A run of all the bosses in Sonic 1 and Sonic 2, all in one huge Death Egg Zone. Try to beat the clock or see how far you can go without dying three times and play as either Sonic or Tails.',1249748701,4,1336,225,'Sonic 2 - Robotnik.png','Sonic 2 - Robotnik\\\'s Revenge.rar','','ASM Hack',1),(49,'Sonic the Hedgehog: The Harder Levels Project','Eduardo Knuckles','A project to make the levels of Sonic 1 extremely difficult. Just play it for yourself. Features new art and music ports.',1249693347,1,1565,295,'Sonic 1 - Sonic the Hedgehog: The Harder Levels Project.png','Sonic 1 - Sonic the Hedgehog: The Harder Levels Project.rar','','Level Edits\r\nNew Art\r\nMusic Ports',1),(50,'soniNeko','nineko','This hack has two main features: a one-act Good Morning Zone, and an entirely new soundtrack.',1249693818,1,730,135,'Sonic 1 - soniNeko.png','Sonic 1 - soniNeko.rar','','New Music\r\nNew Palettes\r\nNew Zone',1),(51,'Atomic Sonic','Yago','A legend among hacks, this hack\\\'s primary feature: everything is broken. Featuring rapidly drawn art!',1249694416,1,592,165,'Sonic 1 - Atomic Sonic.png','Sonic 1 - Atomic Sonic.rar','','ASM Hack\r\nNew Art\r\nMusic Ports',1),(52,'OMG THE RED RINGS','Fiz','This hack replaces all rings and monitors with bouncing red rings that kill you on touch. Good luck!',1249694583,1,109,16,'Sonic 1 - OMG THE RED RINGS.png','Sonic 1 - OMG THE RED RINGS.rar','','ASM Edits',1),(53,'Sonic for MegaCD','Stealth','A proof-of-concept showing Green Hill Zone and Emerald Hill Zone running on the Sega CD, where you can play as Sonic, Tails, or Knuckles. The ISO linked here is for US Sega CDs.',1249652886,1,608,89,'','Sonic 1 - Sonic for MegaCD.rar','','ASM Edits',1),(54,'Sonic 1 - Return to the Origin','carretero','This hack features Sonic running each level backwards.',1249694763,1,1124,183,'Sonic 1 - Sonic 1 - Return to the Origin.png','Sonic 1 - Sonic 1 - Return to the Origin.rar','','ASM Edits\r\nLevel Edits',1),(55,'Sonic 1 Mouse','Cinossu','Grab that Sega Mouse or Sega Mega Mouse you got with Art Alive or Wacky Worlds, respectively, and get ready to play as Sonic in this control system mod. Hint: Kega Fusion also has mouse support.',1249686772,1,2102,312,'','Sonic 1 - Sonic 1 Mouse.rar','','ASM Edits',1),(56,'Sonic 2: S3 Edition','Alrightyman','Quite an impressive one here. You\\\'ve got many of Sonic 3\\\'s features in Sonic 2: the saving, the level transitions, the new Sonic sprites, the flying Tails, the elemental shields, the minibosses (but only in EHZ1), and so much more!',1249747268,4,230,32,'Sonic 2 - Sonic 2: S3 Edition.png','Sonic 2 - Sonic 2: S3 Edition.rar','','ASM Edits\r\nArt Edits',1),(57,'Some generic conceptions','qiuu','Some simple ideas from one of our resident hacking experts.',1249749205,4,224,37,'Sonic 2 - Some generic conceptions.png','Sonic 2 - Some generic conceptions.rar','','ASM Edits\r\nLevel Edits\r\nArt Edits',1),(59,'Sonic CD++','qiuu & snkenjoi','Adds a Sonic 2-style spindash, jump dash, curl into a ball in midair (think Sonic Triple Trouble), and homing attack to Sonic CD. The ISO here is for US Sega CDs and is set for the US soundtrack.',1251156708,12,1079,222,'Sonic CD - Sonic CD++.png','Sonic CD - Sonic CD++.rar','','ASM Edits',1),(60,'Sonic 2 Headache','snkenjoi','Oh dear Lord.',1249753627,4,644,109,'Sonic 2 - Sonic 2 Headache.png','Sonic 2 - Sonic 2 Headache.rar','','ASM Edits',1),(61,'Sonic 3 & Knuckles Hadouken','snkenjoi','By the time you read the title or saw the image, you probably clicked the Download button already, and probably have the ROM in your emulator by the time you finish this sentence.',1249912125,8,790,110,'Sonic 3 & Knuckles - Sonic 3 & Knuckles Hadouken.png','Sonic 3 & Knuckles - Sonic 3 & Knuckles Hadouken.rar','','ASM Edits\r\nArt Edits',1),(62,'Atomic Sonic in Sonic 2','Yago & snkenjoi','Well it isn\\\'t exactly Atomic Sonic 2, but meh.',1249912294,4,153,26,'Sonic 2 - Atomic Sonic in Sonic 2.png','Sonic 2 - Atomic Sonic in Sonic 2.rar','','Art Edits',1),(63,'Sonic 3 & Knuckles Peel-out','snkenjoi','Be sure to do it underwater for extra fun!',1249913674,8,1276,251,'Sonic 3 & Knuckles - Sonic 3 & Knuckles Peel-out.png','Sonic 3 & Knuckles - Sonic 3 & Knuckles Peel-out.rar','','ASM Edits\r\nArt Edits',1),(64,'Sonic 2: Sonic 1 Sprites','snkenjoi','In case you really hate the Sonic 2 sprites.',1249914584,4,140,29,'Sonic 2 - Sonic 2: Sonic 1 Sprites.png','Sonic 2 - Sonic 2: Sonic 1 Sprites.rar','','Art Edits',1),(65,'ASCII Emperor','snkenjoi','Fear it.',1249915096,4,648,119,'Sonic 2 - ASCII Emperor.png','Sonic 2 - ASCII Emperor.rar','','ASM Edits\r\nArt Edits',1),(66,'Sonic CD FMV Edit','blitx','An impressive feat, this hack changes the intro FMV to something rather interesting.',1249915475,12,1047,173,'','Sonic CD - Sonic CD FMV Edit.rar','','FMV Edits',1),(67,'Sonic 2 Rape','snkenjoi','The best hack ever.',1251156423,4,335,103,'Sonic 2 - Sonic 2 Rape.png','Sonic 2 - Sonic 2 Rape.rar','','ASM Edits',1);

--
-- Table structure for table `cult_logged`
--

CREATE TABLE `cult_logged` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(6) DEFAULT NULL,
  `user_ip` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=124 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_logged`
--

INSERT INTO `cult_logged` VALUES (123,1,'62.87.129.13'),(46,2,'84.69.17.206'),(34,3,'147.197.250.16'),(83,4,'80.58.205.32'),(69,5,'80.170.80.48'),(68,7,'80.3.128.4'),(115,8,'96.21.27.220'),(20,9,'62.252.128.19'),(54,13,'68.163.198.224'),(71,15,'200.153.133.219'),(109,16,'75.34.51.85'),(113,17,'24.215.76.226'),(110,6,'82.21.228.79'),(103,10,'69.207.186.208'),(114,18,'93.36.195.230'),(108,19,'98.224.183.13'),(122,20,'129.49.100.174');

--
-- Table structure for table `cult_members`
--

CREATE TABLE `cult_members` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `nick` varchar(255) DEFAULT NULL,
  `image` varchar(255) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `auth` text,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_members`
--

INSERT INTO `cult_members` VALUES (1,'drx','./drx.gif','drxisanotaku',',1337,'),(2,'Overlord','http://www.hacking-cult.org//html/img/1135980899.png','v93gf8943',',1337,'),(3,'STC-Fan','http://stc.hacking-cult.org/junk/avatars/ozenda_advert_guy_mini.jpg','sa08u4f329m4',',2/19,5,,'),(4,'Ambil','http://i5.photobucket.com/albums/y163/Ambil/avatares/nights4.gif','guruceta',',5,,'),(5,'Sonic Hachelle-Bee','http://home.tele2.fr/s2long/screenshots/avatar.gif','asdf123',',2,5,'),(6,'StephenUK','http://stephenuk.digibase.ca/My%20Avatar.JPG','ffmaster',',2,1,5,,'),(7,'Hivebrain','http://img.photobucket.com/albums/v366/hive/sparky.gif','oranges1qaz',',1337,'),(8,'Gunner112k','./gunner.png','123212',',1337,'),(9,'OrdosAlpha','http://homepage.ntlworld.com/ordosalpha/dizzy.gif','arrakis',',1337,'),(10,'Tweaker','','hj634rhj634r',',2/24,5,1,'),(11,'OrdosAlpha','','12345',',1337,'),(12,'Heran_Bago','','koushi3',',2/14,5,'),(13,'Dude','','sparkmoon',',2/25,1,5,'),(14,'mkhacking','','z83hwx94b$-s',',2/28,1/28,5,'),(15,'Erik JS','','asdf',',3/66,5,,,'),(16,'JJFTails','http://www.hacking-cult.org//html/img/1161973017.gif','joshiscool',',1,5,3,,'),(17,'JcFerggy','http://img104.imageshack.us/img104/2854/jcferggyin6.gif','multisync',',1,5,'),(18,'nineko','http://digilander.iol.it/projectchaos/neko.gif','1234',',5,3,,'),(19,'mikesite','','lol',',1/47,'),(20,'pietro10','http://www.knuckleschaotix.info/mightdrunk.gif','8C000048l',',1,5,,');

--
-- Table structure for table `cult_news`
--

CREATE TABLE `cult_news` (
  `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
  `author_id` int(5) unsigned NOT NULL DEFAULT '0',
  `date` varchar(20) NOT NULL DEFAULT '',
  `title` varchar(50) DEFAULT NULL,
  `news` text,
  UNIQUE KEY `NewIndex` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=51 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_news`
--

INSERT INTO `cult_news` VALUES (1,1,'1121869273','Reloaded','Come get sssooooome.\r\n\r\nI\\\'ve totally redesigned the site, ported it to SQL and bunch of other stuff, it\\\'s up to you if you find it all.\r\n\r\nAs I said on the previous news system, we\\\'re changing our site profile. We\\\'re soon extending to other games, as Sonic games are researched to death. \r\n\r\nWhy did I do all this? Now I reveal my secr3t pl4n. \r\n\r\nI\\\'ve made a user system, with all leet wikipedia-style content management system etc. So anybody can add stuff to the site without my help. So if you want to get hosted, post on the forums, and you surely will.\r\n\r\nAdding stuff to the website now is easier than ever, so think about it. You get pro hosting and shit like that. My goal is to concentrate all Sonic-related projects here.\r\n\r\nOne more thing. Teh moneh. I need money. I found a source of money... but I\\\'m not sure I want to get it from this source. It may be not worth it. But if everything else fails, I might give it a go.\r\n\r\nWe kick your ass and you know it.'),(2,1,'1121921345','Chaotix chars - format cracked','I\\\'m going to release the format used for Knuckles Chaotix character art in few hours. But before that, look at this script. It builds PNG files in real time from a real Knuckles Chaotix ROM, depending on what offset or palette you specify. Here\\\'s how you use it:\r\n\r\nhttp://www.hacking-cult.org/chaotix/?offid=XXX&patid=YYY&palid=ZZZ\r\n\r\nXXX - Offset index. The 32x VDP patterns in Chaotix are stored in an offset array. Putting 0-7 will show character art. Putting further values will probably show something different =P\r\n\r\nYYY - Pattern index. The patterns are divided into sections called frames =P This index is the frame number\r\n\r\nZZZ - Palette offset (hex)\r\n\r\nYou can skip those values. The script will assume Mighty\\\'s values.\r\n\r\nExamples:\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/\\\'>Mighty</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=7&paloff=2292Dc\\\'>Espio</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=4&paloff=22925c\\\'>Vector</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=1&offid=1\\\'>The famous Wechnia</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=1&offid=1&paloff=22923E\\\'>Wechnia with Knuckles\\\' palettes</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=2&paloff=22923E\\\'>Knuckles</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=1&offid=3&paloff=22927e\\\'>Charmy the Bee</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=5&paloff=2292A2\\\'>Bomb</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=6&paloff=2292be\\\'>Heavy</a>\r\n<a href=\\\'http://www.hacking-cult.org/chaotix/?patid=0&offid=7&paloff=2292be\\\'>Espio looks awesome in Heavy\\\'s palette</a>\r\n'),(3,1,'1121928261','More Chaotix goodness','Format explained in the Chaotix Section.'),(4,1,'1121960882','68k Machine Code reference','Check out our new hosted site - Ambil\\\'s hax0ring page, which contains an awesome 68k machine code reference, which will be a comprehensive guide once it\\\'s completed! =)'),(5,4,'1121961210','Hai2us','Yes, drx gave me a few capabilities here hehehe. If you see in the left, there\\\'s a link to my ASM-to-hex code reference, that will surely become a hot issue in the incoming days. Hope you find it interesting.\r\n\r\nThank you drx for everything. ;)'),(6,7,'1122415402','LocalH dumps Sonic 3 EPROM','LocalH has dumped his \\\'beta\\\' copy of Sonic 3, which is stored on a special re-writable EPROM cartridge. Unfortunately, the ROM is identical to the standard copy of Sonic 3, thus ending years of idle speculation.'),(7,1,'1124370275','We\\\'re baaaack','Thanks to generosity of Sazpaimon of the Sonic CulT, we now have an all shiny 5GB server =)\r\n\r\nSo yeah, everybody, who had an FTP account should PM me with new user/pass.\r\n\r\nAlso, I fixed the menu a bit.\r\n\r\n<i><font size=\\\"1\\\">And to celebrate the reopening, the hacks database is now IPS-free. That\\\'s right, no more patching hassles - just extract and play! --Gunner112k</font></i>'),(8,8,'1124423563','Utilities Section Up-to-date','I just put a bunch of new utilities up and updated some that were old and outdated. Take a look. :)'),(9,1,'1125094197','Welcome to the family =)','Let me welcome:\r\n\r\n<a href=\\\"http://stc.hacking-cult.org/gd-rom_stuff/\\\">STC\\\'s Hacking Shed</a> - contains only GD-Rom ripping guide. Hopefully STC can put his MD overclocking stuff there soon, too.\r\n\r\n<a href=\\\"http://segacon.hacking-cult.org/\\\">Segacon</a> - A utility that allows you to play demos on real hardware by a modified MoD\\\'s cord! By jfftails35 :)\r\n\r\nAlso, Gunner added an about page, mainly for google. And I fixed all the links so they contain www.hacking-cult.org, not just hacking-cult.org. If you could update your links, I\\\'d appreciate it.\r\n\r\nAlso, I edited the \\\'Get hosted\\\' page. Get hosted here! Anyone can.\r\n\r\nVery much is happenning on CulT recently. I\\\'ll reveal more stuff soon.'),(10,4,'1125099786','Updates...','Version 1.1 of my 68k machine code reference is up. Check hosted links in the left menu.\r\n\r\nI have added most of the instructions remaining, such as those \\\"bit operations\\\". More examples have been added to the most used instructions (such as move, add, and the logical operations). To finish with, I corrected a few typos.\r\n\r\nNext version will include descriptions for each instruction and example.'),(11,8,'1127349032','We\\\'re back again','Our server got a DDoS and we were down for almost three weeks. Let\\\'s hope we won\\\'t have major downtime like this anytime soon.\r\n\r\nIn other news, if you don\\\'t frequent the SWS2B community, you may not be aware that drx left us again for personal reasons. He won\\\'t back anytime soon, which is a real bummer to all of us. I and the rest of the staff will take over his duties for the time being.'),(12,8,'1127621332','Small Update','Two things:<br><br>1: I updated Hivebrain\\\'s Sonic 1 disassembly to the June 2005 version.<br>2: I added Stealth\\\'s revolutionary Knuckles in Sonic 1 in the hacks database.<br><br>Check them out.'),(13,1,'1128030576','Hi2u','a/s/l.\r\n\r\nA story.\r\n\r\nThere are two people - the collector and the messenger.\r\n\r\nBack in 2000 or 2001, I met a guy (the messenger) who was selling some stuff that had a nifty name and had \\\'32x\\\' in it, so I bought it (It was the 32x dev kit soft, I didn\\\'t know what it was for then). I exchanged numbers with the guy. I got my mobile stolen (with his number) later. I forgot about him.\r\n\r\nBack to 2005.\r\n\r\nI get a mysterious call from an unknown guy (I don\\\'t usually get mobile calls, as I keep my number secret =) ). I called back. It was the messenger.\r\n\r\nHe said he remembered our talk about Sonic and that I was very passionate about Sonic games. He also said, that he met a guy (the collector), who owns a lot of prototypes. The messenger will help me contact the collector.\r\n\r\nDetails about the collector: he\\\'s quite rich from what I\\\'ve been told. So he probably doesn\\\'t want money. Maybe trade? I have no idea. He doesn\\\'t own a lot of Megadrive prototypes, but he got something Sonic-ish from some russian faggots. I asked about the details of the game, but the messenger said he wouldn\\\'t know.\r\n\r\nSummary: it\\\'s most probably some russian bootleg or something. But it\\\'s worth a try. If this collector guy is really a collector, he wouldn\\\'t be stupid enough to not differentiate from a pirate and a prototype.\r\n\r\nSo when I\\\'m out of debt, I\\\'m going to go Warsaw (300 km from my current \\\'place\\\') and \r\nvisit this guy. Wish me luck.\r\n\r\nPS. I\\\'m homeless, so the support is currently frozen. For everything related to Hacking CulT, contact our ninja Gunner.'),(14,3,'1129287006','Big fat update to my... erm, site','I finally un-lazified myself the other day and sorted out a proper index page. So you no longer have to type in [directory name xyz] to get to any of my site contents. In future, just use this link:\r\n\r\n<a href=http://stc.hacking-cult.org>http://stc.hacking-cult.org</a>\r\n\r\n<strike>(yes, I can\\\'t actually the edit the link to this under the \\\"Hosted\\\" sidebar, shaddup =P)</strike> <font size=\\\"1\\\"><i>There, fixed it for you --Gunner112k</i>'),(15,1,'1132350785','Well, fuck','<a href=\\\"http://forums.hacking-cult.org/index.php?showtopic=122\\\">http://forums.hacking-cult.org/index.php?showtopic=122</a>\r\n\r\nAnd I\\\'ll be back soon.'),(16,1,'1133964639','Tails ported... again :)','After porting Tails to Sonic 1 + Sonic & Knuckles (Sonic Special Stages - see hacks section), I made something bigger - ported Tails to Sonic 1.\r\n\r\nDownloadable in our hacks section.\r\n\r\n<b>For more info</b>, go to the <a href=\\\"http://forums.hacking-cult.org/index.php?act=ST&f=1&t=132\\\"\\\"\\\">forums topic</a>.\r\n\r\nHave fun.\r\n\r\n\r\n\r\n<center>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_000.png\\\"><br>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_001.png\\\"><br>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_002.png\\\"><br>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_003.png\\\"><br>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_004.png\\\"><br>\r\n<img src=\\\"http://www.hacking-cult.org/html/Tails in Sonic 1_005.png\\\"><br>\r\n</center>'),(17,1,'1134343992','Couldn\\\'t wait any longer','So here you go. <a href=\\\"http://www.hacking-cult.org/?r/4\\\">The awesome Sonic 2 guide by StephenUK and SHB</a>. \r\n\r\nOn a small note, I uploaded the S2 Rev00 disassembly as well as the differences between Rev00 and Rev01.\r\n\r\nBtw, there will be a v1.1 of Tails in Sonic 1. With fixed flying, tails and more!'),(18,5,'1134782860','SCHG updated by drx','Thanks drx for the update.\r\n\r\nThis \\\"New SCHG\\\" isn\\\'t quarter finished yet (it still very poor compared to what this was before in HTML). At least, you can see some nice updates.\r\n\r\nMe and Stephen spend a lot of time updating the guide. Now, some sections are corrected and even more readable. I personnally made huge tables to make things easier to read and understand, and the information was rewritten entirely from scratch.\r\n\r\nExpect new updates coming soon, once we have more time.\r\n\r\nAnd thanks for all drx. :)'),(19,1,'1135060148','Guess the game :D','Small contest.\r\n\r\ndrx found a new compression and is gonna crack it soon and release a decompressor + compressor.\r\n\r\nWhich game uses this compression and which compression is it?\r\n\r\nHint: This game\\\'s name begins on S and is rarely hacked :P'),(20,1,'1135269423','Bigass update','Well, maybe not so bigass, but anyway.\r\n\r\n1) Fixes - fixed screenshots, fixed 68k asm commented source codes - they\\\'re now shown as plain text\r\n\r\n\r\n2) Tails in S1 v1.1 - released. fixed flying, added swimming and tired animations. left the graphic things.\r\n\r\n<a href=\\\"http://www.hacking-cult.org/?hacks/1\\\">Get it at the hacks section</a>\r\n<a href=\\\"http://forums.hacking-cult.org/index.php?showtopic=132\\\">Forums topic</a>\r\n\r\n\r\n3) Added <a href=\\\"http://www.hacking-cult.org/?r/18\\\">two commented source codes</a>:\r\nWav Player v1.0 - plays wav files\r\nFM Song Player - I especially recommend reading this one carefully. Covers writing to FM registers and a test song, using a custom song format, etc etc. (btw, I chose this song, because it was the easiest =P)\r\n\r\n4) We moved on a new server. And lost all the ftp accounts (only the passwords, not the files! =P). I think it\\\'ll be best to PM them to me on forums, in case of losing them again =D\r\n\r\nHave fun.\r\n\r\nPS. Stephen guessed right =D'),(21,2,'1135980567','#hacking !','We now have our very own IRC channel on the Sonic CulT irc server! Come on in and join us at irc.sonic-cult.org , channel #hacking, or click the below link:\r\n\r\n<a href=irc://irc.sonic-cult.org/hacking>irc://irc.sonic-cult.org/hacking</a>'),(22,1,'1136129322','Happy 2006!','Happy new year =) \r\n\r\nI hope the 2006 will be even better than 2005 for our community.\r\n\r\nJust a small update - added the legendary Sega2f document, the official information about Sega Megadrive and the 32x SDK - official dev kit for 32x programmers. Both can be found in 68k section.'),(23,1,'1137085745','Afk','I\\\'m going to France for a week. Should you have any concerns, bug Gunner. I have some presents for you when I\\\'ll come back.'),(24,1,'1137940264','Guess who\\\'s back...','...back again.\r\n\r\nWith fun things.\r\n\r\nWhile in France, I was bored as hell. So one time, I was looking on my laptop\\\'s HDD and found Sonic Spinball. I disassembled it etc - and to my horror and amazement - it was either programmed in C, or it was very neatly programmed, to imitate the C-style functions. You know what I mean - using stack instead of registers. That frees a lot of register space :) After 15 minutes, I found some nice compression format, which I just HAD to crack =P So I did. And wrote a decompressor. Which was working for the first time, just after writing all the code!\r\n\r\nAnyway, if you skip stupid, lenghty stories like that - here it is:\r\n\r\n<a href=\\\"http://www.hacking-cult.org/download/SSCDec.rar\\\">drx\\\' Sonic Spinball Compression Decompressor 1.0</a> (also in the utilities section).\r\n\r\nSo yeah, another compression format cracked. I might program a compressor, if ther will be need for that. Also, I may release the pseudo-code and things like that I made when I was cracking it. The program loads the Sonic Spinball offsets when you load the SS ROM as the source. Duh.\r\n\r\nAlso, it narrows the number of decompressors I have to make to 3 - two S3D compression formats, and this:\r\n\r\n<img src=\\\"./html/c3au-prev.png\\\">\r\n\r\n=)\r\n\r\nOn a side note, I\\\'m proud to host the revamped Bart Trzynadlowski\\\'s Home Page, a very valuable site with many Genesis and Saturn infos. You should be ashamed you don\\\'t know it already!\r\n\r\nBtw - Gunner added the Sonic 1 Beta Hoax with leaping that was requested =)'),(25,13,'1138497148','SADX section added','drx rang me up awhile ago and asked for me to put up some sadx stuff on his site. Not wanting to say no to someone who is badass, I decided to share what I have learned. Enjoy'),(26,13,'1138592985','SADX hack added','I whipped up a quick hack that puts sonic in tails\\\' speed highway in SADX, and made some SMALL modifications that make the level playable. Its wicked hard, but IS finishable.'),(27,1,'1138597101','Help Hacking CulT!','Why don\\\'t you help Hacking CulT?\r\n\r\n*** Edit: since PayPal works only send-only in Poland, you can\\\'t make donations (nobody did anyway)\r\n\r\nI\\\'ll use the money mostly on the website costs and Genesis development.\r\n\r\nAlso, good news - I made a SSC compressor (which beats Sega\\\'s btw), but due to its slowness (30 seconds!), you\\\'ll have to wait for a release until I get it optimized.'),(28,1,'1139182550','A Columns hack','Something new. A Columns hack =P I made this on djbrayster\\\'s and Borisz\\\' request. It\\\'s an advanced sound test, which should help music ripping. Read the readme file for details.'),(29,1,'1139849825','Explanation','Lack of updates recently, huh? I decided to stop being lazy and I actually made a plot (mwahahaha). \r\n\r\nIf I succeed, you\\\'ll be happy =P But the thing is, this takes all my time, so there won\\\'t be any updates soon, just some ocassional stuff.\r\n\r\nBtw, if the other Hacking Culters weren\\\'t lazy and actually did something, you\\\'d have your updates :P'),(30,8,'1141538599','Hacks database - now with 100% more 1337','Thanks to our coding ninja and webmaster drx, we now have a prettier template for our hacks database. Everything is set up neatly to fit our needs. If I left a mistake somewhere, let me know.\r\n\r\nThank you.'),(31,6,'1142187920','Small Sonic 2 Guide Update','I\\\'ve made a small update to the Sonic 2 Hacking Guide. So far, i\\\'ve just added information on editing object and character mappings, but when I get a bit more time i\\\'ll add some more.\r\n\r\nLet me know what information you want, and i\\\'ll see if I can make that info available soon.'),(39,7,'1145322231','HivePal Beta v0.2','I\\\'ve released a new version of my Megadrive pallet editor. Get it from the Utilities page.\r\n\r\n- Added pallet browser.\r\n- Added ability for user to add support for more games.\r\n- Added copy/paste feature.\r\n- Fixed a bug in the 512-colour menu.'),(38,1,'1144489989','The mysterious SVP.','I decided to move my lazy ass and <a href=\\\"http://www.hacking-cult.org/?r/31\\\">document the SVP chip a bit</a>. If you don\\\'t know what the hell is SVP, it\\\'s the IC that was used in Virtua Racing to improve the graphics (polygons etc.). Nobody has emulated it so far. I hope this helps.'),(40,1,'1150351536','Baaack','Sorry about the downtime. What was it, 2 months? The hosted people were back earlier, but I was kinda too busy to put Hacking CulT back... But here it is. My heart is broken that I\'m not back with some awesome shit, but I\'m on a trip to the US. And I must say I\'m enjoying it. I\'ll be back in July.\r\n\r\nIn other news, <a href=\'http://www.hidden-palace.org/\'>I started a new website</a>. Hope you\'ll like it.\r\n\r\nPS. We\'ve got a new server. 100mbit, lots of webspace etc etc. I think it\'s a bit faster than the old one.'),(41,1,'1152224630','A small fix :P','I fixed the hacks and demos sections. Thanks for all who reported the bugs.'),(42,1,'1153835598','Russians invade CulT','I hunted down a nice russian guy (shame he doesn\'t speak english). Check his awesome <a href=\"http://umk3.hacking-cult.org/\">UMK3 hack</a>. It features fighters from other games. While it wouldn\'t be playable on the real machine with some real chip juggling, it\'s still worth a shot on the emulator.'),(43,1,'1154037217','A working Chaotix Art Editor.','At last.\r\n\r\nJJFTails done what I should have ages ago and big kudos to him for that. Check out his Chaotix Art Editor in the utils section.\r\n\r\nI would also like to use this newspost to remind some people that ROM hacking is about having fun and learning new things, not being envious, nor aggressive about your/others work. It\'s a hobby, and it doesn\'t matter how much ASM can a person hack or how awesome his graphics are, it\'s the work, progress, and most importantly, fun, that matters. \r\n\r\nTo cut a long story short: hacking is supposed to be fun, not a subject of stupid flamewars etc. I hope you agree with me on that matter.'),(44,1,'1158072177','Feel 1.0','<center><img src=\"./ristar/feel1.0_s.png\"></center>\r\n\r\nFeel 1.0 released. Lets you edit levels in Ristar and view other neat stuff. Grab it from the utilities section.\r\n\r\nWhile hacking Ristar, I had to crack a compression format used to compress nearly everything in the game, so I cracked it and called the format the \'Star\' compression. The decompressor I wrote is in the utilities section.\r\n\r\nI also upgraded the hacks section code a while ago, fixed the score overflow bug and added some other stuff. \r\n\r\nNext time, when you find a loophole, please report it to me instead of ruining as much as you can :P'),(45,1,'1158774174','ASM Lessons?','If you\'re against selling knowledge - don\'t read this.\r\n\r\nWell I decided to do some ASM lessons, since it would be nice to pay the bills for the server stuff etc.\r\n\r\nMy offer - $50 for 4 lessons (each lasts 1 hours, though if it\'ll take longer, I won\'t tell you to fuck off). There are several people who already agreed, so that\'s why I\'m asking.\r\n\r\nSome details - you pay ONLY after the 4 lessons will be completed. So yea, it\'s pretty safe. Not like I\'m gonna run away with the money or something.\r\n\r\nI\'ll be doing the lessons on Sunday (preferably evenings GMT - around midday for you Americans). Though I could try to fit something into Saturdays (but I don\'t promise anything).\r\n\r\nSo yea, if you\'re interested, drop me an email at <b>thedrx@gmail.com</b> or post a comment here with your email and we\'ll fix something for you.\r\n\r\nPS. Theoritically, I could do free lessons, but there are several cons - no motivation (I\'m sorry, but money is a good motivator), lack of invididual care (I\'d have to make grouped lessons) and stuff like that. I wish I could teach people in person - I really care about the people I teach.\r\n\r\nSo while it might look like I\'m money thirsty, there is just no possibility.\r\n\r\nFor all you lacking funds, I plan to revise my ASM guides somewhere in the future, and add some new stuff, so don\'t fret.'),(46,16,'1161971282','Sonic in Chaotix: by JJFTails <b>(Update: R2)</b>','<img src=\"http://www.hacking-cult.org/hacks/Knuckles%20Chaotix%20-%20Sonic%20in%20Chaotix%20R2.png\">\r\n\r\nBecause I have ported Chaoxed to C++ and because of some of Koji\'s awesome art, I was able to port Sonic to Chaotix. \r\n\r\nEverything was pretty much perfectly ported except for the combi catcher sprite. I still cannot find it\'s palette. I have not ported the sprites for the special stages either, simply because there aren\'t any out there. \r\n\r\nI give all art credit to KojiChao and the sprites in Crackers. SGR was also a very big help for beta-testing. Expect a new release with Special Stage sprites and other art fixes in the near future.\r\n\r\nPick up the hack in the \'Hacks\' section under \'Knuckles Chaotix\' hacks.\r\n\r\n<b>*** Update: Revision 2 has been released! ***</b> \r\n\r\n- Special Stage Art (from Sonic CD and SGR)\r\n- Overall New and Better Shaded Sprites (by KojiChao)\r\n- Combi Catcher sprite now uses the right Palette\r\n- Fixed up transparent pixels on Sonic on Title Screen\r\n- Title Card art now contains \"Sonic\" instead of \"Mighty\"\r\n- Fixed shifted lines of art for \"Mega Monitor\"'),(47,1,'1164895143','Nemesis is back!','Undoubtly the biggest hacking ninja to ever touch a Megadrive, Nemesis, is alive, and kicking.\r\n\r\nHe made a small prog to search for all Kosinski compressed data within a ROM, check it out in the utilities section.'),(48,1,'1165126541','S2 Nick Arcade disassembly','A while ago I traced down, bought and dumped a pretty early Sonic 2 prototype that was on the Nick Arcade show (<a href=\"http://www.hidden-palace.org/?news/c/9\">more details for the slow</a>).\r\n\r\nWell, I\'ve made a disassembly of it already, because I just couldn\'t wait to rip it apart. Enjoy.'),(49,17,'1180294665','Hack Archive Update','Drx has asked me to help update the hack archive, so expect some changes soon. It might take me a bit since I\\\'m also studying for my exams, so give me a few weeks.'),(50,1,'1190658853','GEMS','I released the GEMS development kit <a href=\\\"http://www.hidden-palace.org/?news/c/13\\\">here</a>. Have fun!\r\n\r\nIn other news, Nineko has released his xm2smps utility. Grab it in the utilities section.');

--
-- Table structure for table `cult_sections`
--

CREATE TABLE `cult_sections` (
  `id` int(9) unsigned NOT NULL AUTO_INCREMENT,
  `section_type` int(4) DEFAULT NULL,
  `section_title` varchar(255) DEFAULT NULL,
  `section_content` text,
  `parent_section` int(9) DEFAULT NULL,
  `section_order` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=112 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cult_sections`
--

INSERT INTO `cult_sections` VALUES (1,1,'ASM Guide',NULL,18,2),(2,2,'Basics','Genesis has one CPU called 68000 (68k for short). It understands a set\r\nof 16-bit instructions, which are called machine code (like 4E75, 31FC\r\netc.). But programming in hexes isn\'t very easy (well, it\'s not\r\nimpossible... few years ago I programmed only using machine code =P),\r\nso nifty programmers made the assembly language. There is a program\r\n(assembler) which assembles this to machine code. Assembly is a bit\r\nmore humanized. It\'s not BASIC, but it\'s not hard. I will try to make\r\nyou understand this. I can\'t guarantee that it will be interesting =P<br><br>\r\nGenesis has 64kb of RAM. You can store everything there. There is a VDP\r\n(graphics CPU) which controls graphics =P It has 64k of RAM (called\r\nVRAM - Video RAM), which can store patterns, sprites atributes, scroll\r\ndata etc.<br><br>\r\n\r\nHere\'s a map of 68k memory:<br><br>\r\n\r\n<span style=\"font-family: lucida console; font-size: 12px;\">\r\n<span class=\"offset\">$000000-$3FFFFF</span> - ROM<br>\r\n<span class=\"offset\">$400000-$9FFFFF</span> - Unused<br>\r\n\r\n<span class=\"offset\">$A00000-$A0FFFF</span> - Z80<br>\r\n<span class=\"offset\">$A10000-$A1001F</span> - I/O<br>\r\n<span class=\"offset\">$A10020-$BFFFFF</span> - Miscellaneous<br>\r\n<span class=\"offset\">$C00000-$C0001F</span> - VDP<br>\r\n<span class=\"offset\">$C00020-$DFFFFF</span> - VDP mirrors<br>\r\n\r\n<span class=\"offset\">$E00000-$FFFFFF</span> - RAM (it repeats each $10000, so $E00000 is the same as $E20000 and $FF0000. Most games use $FF0000-$FFFFFF)</span><br><br>\r\nThere are three data types. Byte, word (2 bytes) and longword (4\r\nbytes). There is no unsigned or signed types like in C, because each\r\ndata type can be treated as unsigned or signed. There are 16 registers\r\nwhich store temporary data (kinda like variables). Each one is a\r\nlongword. There\'s 8 data registers called D0-D7 and 8 address registers\r\n(A0-A7). You should use A0 to A6, because A7 is the stack pointer (I\'ll\r\ntell you about it later). Hey, but what\'s the difference between\r\naddress and data registers? Data registers store data, and address\r\nregisters usually store <u>pointers</u> to some location in RAM. For example, address registers can be incremented or decremented.<br><br>\r\n68000 stores data in Big Endian way. So longword $12345678 is stored\r\n$12,$34,$56,$78 in memory, compared to Little Endian $78,$56,$34,$12.\r\nx86 and Z80 use Little Endian. Z80 is for the music stuff... (x86 is\r\nthe CPU in your PC)<br><br>\r\n\r\nDon\'t worry if you don\'t get something or you forget all this stuff. You will get used to it.',1,1),(3,1,'Genesis informations','',18,3),(5,1,'Useful subroutines',NULL,18,4),(6,2,'Let\'s start','Ok, you need some stuff first. You have to download <b>SNASM68k</b> from our downloads section and a <b>Sonic 1 disassembly</b>\r\n(I suggest you download my disasm because I will refer to its labels).\r\nNow open the Sonic 1 disassembly in notepad. Many lines isn\'t there? =P<br><br>\r\n\r\nComments are marked by <b>;</b> or <b>*</b>. The game code starts with label <b>\'Entrypoint:\'</b>.<br><br>\r\n\r\nOk, let\'s start with the most interesting part of programming, programming XD. Ok, first command, <b>MOVE</b>.\r\nThis command moves some data (constants, registers, RAM) into either\r\nanother register or RAM location. JohnnyUK nicely called it \'copying\'.<br><br>\r\n\r\n<pre class=\"68k\">Syntax: <b>move source,destination</b>\r\n\r\nExapmles:\r\n	move.w	#2,($FFFFFE10).w\r\n	move	(a6),d3\r\n	move.b	($FFFFFE12).w,(a5)+</pre><br><br>\r\n\r\nLooks complicated? Don\'t worry, I\'ll explain everything =) First, why <b>.w, .b</b>? If you use it, you will specify the data length being copied. If you don\'t the assembler will probably choose <b>.l</b>. <b>.b</b> is <b>byte</b>, <b>.w</b> is <b>word</b> and <b>.l</b> - <b>longword</b>.<br><br>\r\n\r\nFor example:<br><br>\r\n\r\n<pre class=\"68k\">move.b	#1,($FFFFFE10).w\r\n\r\nbefore - FFFFFE10: 05 06 07 08\r\nafter  - FFFFFE10: 01 06 07 08\r\n\r\nmove.w	#1,($FFFFFE10).w\r\n\r\nbefore - FFFFFE10: 05 06 07 08\r\nafter  - FFFFFE10: 00 01 07 08\r\n\r\nmove.l	#1,($FFFFFE10).w\r\n\r\nbefore - FFFFFE10: 05 06 07 08\r\nafter  - FFFFFE10: 00 00 00 01\r\n</pre>\r\n\r\nI hope you get it =P Now, <b>#x</b> is a immediate value (a number, constant etc =P). Examples:<br><br>\r\n\r\n<b>#5</b> - decimal 5<br>\r\n\r\n<b>#$20</b> (hex) - decimal 32<br>\r\n<b>#%1001</b> (binary) - decimal 9<br>\r\n<b>#@777</b> (octal) - decimal 511<br>\r\n<b>#\'SEGA\'</b> - ascii text (remember, this can be tricky. 1 letter - use <b>.b</b>, 2 letters - use <b>.w</b>, 4 letters - use <b>.l</b>)<br><br>\r\n\r\n<b>($FFFFFE10).w</b> is an absolute address. Locations in ram <u>HAVE TO</u> be <b>.w</b>. ROM addresses usually are <b>.l</b>. Some programmers (forgot the name of the game...) use <b>.w</b>\r\nfor short ROM addresses, but that can cause serious bugs. Remember,\r\nnever write anything to a ROM address ;) (real Genesis will crash)<br><br>\r\n\r\nExamples:<br><br>\r\n\r\n<pre class=\"68k\">move.b	#1,($FFFFFE12).w</pre>\r\n\r\nmoves 1 (byte) to $FFFFFE12 in RAM (lives in Sonic 1)\r\n\r\n<pre class=\"68k\">move.l	($12346).l,d0</pre>\r\n\r\nmoves a longword from address $12346 in ROM to data register d0.\r\n<pre class=\"68k\">move.w	(a0)+,d0</pre>\r\n\r\nmoves a word from the location at A0 to d0, increments a0 by 2 (length of word) after that.<br><br>\r\nI\'ll explain the registers now (already told about it before, but let\'s\r\nrevise XD). There are 16 registers - 8 data registers and 8 address\r\nregisters. All registers are longwords. Data registers are called <b>d0-d7</b> and can store any data. Address registers usually store <u>pointers</u> to some location in ROM or RAM, but they can also be used for data. Address registers are <b>a0-a7</b>, but don\'t use <b>a7</b> because it\'s the stack pointer (I\'ll explain later). Registers are a nice way of storing temporary data. Eg.<br><br>\r\n\r\n<pre class=\"68k\">move.b	($FFFFFE12).w,d0 ;copy value at $FFFFFE12 to d0 (this is a comment =P)\r\nmove.b	d0,($FFFFFE13).w ;move d0 to $FFFFFE13\r\n</pre>\r\n\r\nOf course this could be done with:\r\n\r\n<pre class=\"68k\">move.b	($FFFFFE12).w,($FFFFFE13).w</pre>\r\n\r\nbut this is an example =P The biggest reason why use registers is that you can modify them without modifying the source, eg.<br><br>\r\n\r\n<pre class=\"68k\">move.b	($FFFFFE12),d0	;copy $FFFFFE12 to d0\r\nadd.b	#2,d0		;add 2 to d0\r\n;do something with d0</pre>\r\n\r\nWe have a new command, ADD. It adds a number to a register or a place in ram.<br><br>\r\n\r\n<pre class=\"68k\">Syntax: <b>add source,destination</b>\r\n\r\nExamples:	add.b	#2,($FFFFFE12).w	;increment $FFFFFE12 by 2\r\n		add.l	(a0),a0			;increment a0 by value at a0\r\n		add	d0,d0			;add d0 to d0 (d0 = d0 * 2)\r\n</pre>\r\n\r\nWhat is the difference between <b>a0</b> and <b>(a0)</b>?<br><br>\r\n\r\n<b>a0</b> is the address, only a number. And <b>(a0)</b> is the value at this address. Have a look at this:\r\n\r\n\r\n<pre class=\"68k\">$FFFFFE12: 01	;some value in ram\r\na0: $FFFFFE12	;address\r\n(a0): 01	;value at address $FFFFFE12</pre>\r\n\r\nYou can postincrement or predecreament address registers:<br><br>\r\n<pre class=\"68k\">;a0 is incremented by 1 (length of byte) after the instruction\r\n		move.b	(a0)+,d0\r\n\r\n;a0 is decremented by 2 (length of word) before the instruction\r\n		move.w	-(a0),d0\r\n</pre>\r\n\r\nExapmle:<br><br>\r\n<pre class=\"68k\">move.l	(a0)+,d0\r\n\r\nbefore: a0: $00012345\r\n        d0: $00000000\r\n$000012345: $FFFFFFFF\r\n\r\nafter:  a0: $00012349\r\n        d0: $FFFFFFFF\r\n$000012345: $FFFFFFFF</pre>\r\n\r\nHope you understand =)<br><br>\r\n\r\nNow, the opposite of adding is substracting. You do it using SUB instruction.<br><br>\r\n\r\nExapmles:<br><br>\r\n<pre class=\"68k\">		sub	#5,a0\r\n		sub.w	(a0),($FFFFFE12).w\r\n		sub.b	d0,d1\r\n</pre>\r\n\r\nThat would be the end of this chapter. In next lesson we\'ll learn about <b>LEA</b>,\r\nlabels, comparing and branching depending on the results (like\r\nif...else). It\'s about 3 am and I\'m a bit tired. If you don\'t\r\nunderstand something or you have any questions, ask on the forums =)\r\n',1,2),(27,2,'Reading the joypads','<pre class=\\\"68k\\\">\r\n;---------------------------------------\r\n;\r\n; Two subroutines:\r\n;\r\n; * InitJoypads - inits the joypads and the extra port\r\n;\r\n; * ReadJoypads - reads both joypads\r\n;   After executing it, you will have:\r\n;\r\n;   $FFFFF0 - Current pressed state of joypad 1\r\n;   $FFFFF1 - Current holded state of joypad 1\r\n;   $FFFFF2 - Current pressed state of joypad 2\r\n;   $FFFFF3 - Current holded state of joypad 2\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;        [www.bluehedgehog.org]\r\n;        [www.shadowsoft-games.com]\r\n;\r\n;---------------------------------------\r\n\r\nInitJoypads:\r\n\r\n		move.w	#$100,($A11100).l	;halt the z80\r\n\r\nwait_for_z80:\r\n',5,1),(76,2,'Metropolis zone warp tubes','<h2>Metropolis zone warp tubes:</h2>\r\n*Submitted by Rika Chou on May 26 2005.*\r\n\r\n<h3>Warp tubes coordinates:</h3>\r\nEach warp tubes of Metropolis zone have a set of coordinates programmed into the ROM file. In order to change these coordinates, to make another warp tube, you have to edit the followings:\r\n\r\nObject ID: 67\r\nObject program address: $2715C\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Act</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Object ID</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Address</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Number of bytes long</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Coordinates</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"3\\\" align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">67 00</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2740E</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">07A8 0270\r\n0750 0270\r\n0740 0280\r\n0740 03E0\r\n0750 03F0\r\n07A8 03F0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 01</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27426</td><td align=\\\"center\\\" valign=\\\"middle\\\">0008</td><td align=\\\"center\\\" valign=\\\"middle\\\">0C58 05F0\r\n0E28 05F0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 02</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27430</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">1828 06B0\r\n17D0 06B0\r\n17C0 06C0\r\n17C0 07E0\r\n17B0 07F0\r\n1758 07F0</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">67 03</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2744A</td><td align=\\\"center\\\" valign=\\\"middle\\\">0008</td><td align=\\\"center\\\" valign=\\\"middle\\\">05D8 0370\r\n0780 0370</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 04</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27454</td><td align=\\\"center\\\" valign=\\\"middle\\\">0008</td><td align=\\\"center\\\" valign=\\\"middle\\\">05D8 05F0\r\n0700 05F0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 05</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2745E</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">0BD8 01F0\r\n0C30 01F0\r\n0C40 01E0\r\n0C40 00C0\r\n0C50 00B0\r\n0CA8 00B0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 06</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27478</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">1728 0330\r\n15D0 0330\r\n15C0 0320\r\n15C0 0240\r\n15D0 0230\r\n1628 0230</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"6\\\" align=\\\"center\\\" valign=\\\"middle\\\">Act 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">67 07</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27492</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">06D8 01F0\r\n0730 01F0\r\n0740 01E0\r\n0740 0100\r\n0750 00F0\r\n07A8 00F0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 08</td><td align=\\\"center\\\" valign=\\\"middle\\\">$274AC</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">07D8 0330\r\n0828 0330\r\n0840 0340\r\n0840 0458\r\n0828 0470\r\n07D8 0470</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 09</td><td align=\\\"center\\\" valign=\\\"middle\\\">$274C6</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">0FD8 03B0\r\n1028 03B0\r\n1040 0398\r\n1040 02C4\r\n1058 02B0\r\n10A8 02B0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 0A</td><td align=\\\"center\\\" valign=\\\"middle\\\">$274E0</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">0FD8 04B0\r\n1028 04B0\r\n1040 04C0\r\n1040 05D8\r\n1058 05F0\r\n10A8 05F0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 0B</td><td align=\\\"center\\\" valign=\\\"middle\\\">$274FA</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">2058 0430\r\n20A8 0430\r\n20C0 0418\r\n20C0 02C0\r\n20D0 02B0\r\n2128 02B0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">67 0C</td><td align=\\\"center\\\" valign=\\\"middle\\\">$27514</td><td align=\\\"center\\\" valign=\\\"middle\\\">0018</td><td align=\\\"center\\\" valign=\\\"middle\\\">2328 05B0\r\n22D0 05B0\r\n22C0 05A0\r\n22C0 04C0\r\n22D0 04B0\r\n2328 04B0</td></tr></tbody></table>',66,2),(16,2,'Compares, branches...','Yay, finally got some time to write another lesson (it\'s almost 12pm).\r\nAnyway, we\'ll learn about compares, branches and subroutines. But\r\nfirst, here\'s some additional info to the previous lesson:<br><br>\r\n\r\nThere are few types of <b>MOVE</b>. There\'s <b>MOVEA</b>, <b>MOVEM</b>, <b>MOVEP</b> and <b>MOVEQ</b>. Usually the compiler chooses the right one, but you sometimes have to choose the correct one (assemblers aren\'t very smart ;).<br><br> \r\n\r\n\r\n<b>MOVEA</b> moves an address into an address register. The syntax:<br><br>\r\n\r\n<pre class=\"68k\">	movea	address,a0-a7</pre>\r\n\r\nAs I said before, don\'t use <b>a7</b>. Just wait =) The address is an effective address (can be a register, immediate value etc.) Here are some examples:\r\n<pre class=\"68k\">        movea    #$12346,a0     ;moves address $12346 to a0\r\n        movea   -(a1),a5        ;moves address at value at pointer\r\n                                ;in a1 to a5, decrements a1 before instruction\r\n        movea   d0,a3           ;moves d0 to a3</pre>\r\n\r\nI\'ll introduce the labels now :) Remember BASIC and goto function? Labels are similiar:<br><br>\r\n\r\n<pre class=\"68k\">	somecode\r\n	\r\n	bra	Label\r\n\r\n	somecode\r\n\r\nLabel:\r\n	somecode</pre>\r\n\r\n\r\n<b>BRA</b> goes (jumps) to a label. <b>Bcc</b> instructions can branch on certain conditions, but they can be made with the <b>CMP</b> instruction. This means a bunch of new instructions ;) Here\'s the example code:\r\n<pre class=\"68k\">	game code\r\n	game code\r\n\r\n	bsr	LifesSub\r\n\r\n	game code\r\n	game code\r\n\r\n\r\nLifesSub:\r\n	cmp.w	#$0102,($FFFFFE10).w\r\n	bne	TheLevelIsNot0102\r\n	add.b	#1,($FFFFFE12).w\r\nTheLevelIsNot0102:\r\n	rts</pre>\r\n\r\n\r\nOh my, so many new things. We created <b>label \'LifesSub\'</b>. It\'s called by <b>BSR</b>, what\'s that? <b>BSR</b> means <b>Branch to SubRoutine</b>.\r\nSubroutines are like functions in C (or other programming languages).\r\nYou can call them whenever you want. There is one important thing\r\nthough, after the end of subroutine you <u>have to</u> put <b>rts</b>, which returns to the state before subroutine calling. Example:\r\n\r\n<pre class=\"68k\">	bsr	Foo\r\n	bsr	Foo\r\n	bsr	Foo\r\n\r\n	...\r\n\r\n\r\nFoo:\r\n\r\n	code\r\n\r\n	rts</pre>\r\n\r\nNow, when Genny sees <b>BSR</b> (8 or 16 bit instruction, relative address) or <b>JSR</b> (32 bit absolute address, I\'ll tell about it later), it copies the next insruction <b>PC</b>\r\n(Program Counter - register which stores info about the current\r\ninstruction location in ROM, like where the code is now, it\'s hard to\r\nexplain ;) state to <b>stack</b>.<br>I promised before that I\'ll tell you what the hell <b>stack</b> is. <b>Stack</b> is a reserved section in <b>RAM</b> (CAN be in SRAM, but it isn\'t tested yet ;) for temporary things, like our <b>PC</b> state. Now you see why <b>RTS</b> is important. <b>RTS</b> copies the <b>PC</b> state back from <b>stack</b>.<br><br> \r\n\r\n\r\nSo, what\'s the <b>CMP</b> thingy? It COMPARES two values. It\'s not exactly if...else statement like in C. <b>BNE</b> means <b>\'Branch if Not Equal\'</b>. So if <b>$FFFFFE10</b> (level) isn\'t <b>$0102</b> (these two values are the same, equal), it branches. If it isn\'t, it doesn\'t. Simple, huh? There are many <b>Bcc</b> instructions, one of them being <b>BEQ</b> (<b>Branch if EQual</b>) which works opposite to <b>BNE</b>. I mentioned <b>JSR</b> some lines before. It is like <b>BSR</b>,\r\nbut it doesn\'t branch, but jumps to a subroutine. What\'s the\r\ndifference? Branch instruction is small (1 byte if branch is between\r\n-127...127 and 2 bytes if it\'s between -32 768...32 768) but it\'s\r\nlimited. Some games like Sonic 3 &amp; Knuckles use RAM for... code.\r\nYeah, small parts of code that can be edited at any time. You can\'t\r\nbranch to RAM, that\'s first. Second, the limitation. $8000 back or\r\nforth is not very big. There\'s the JSR. The instruction is longer (4 or\r\n6 bytes, depending on the type), but it\'s an absolute address (you can\r\nmake a relative <b>jsr</b> insruction, but I\'ve already told enough\r\nnew things today...), so you can jump to any address in 68000 memory.\r\nFor 68k memory map, see additional info. Examples:\r\n\r\n<pre class=\"68k\">	jsr	$FFFFFFF0\r\n	jsr	Label\r\n	jsr	a0</pre>\r\n\r\nThe absolute equivalent of <b>BRA</b> is <b>JMP</b>, which jumps to an absolute address without puting the PC on the stack.<br><br> \r\n\r\nThe last two things we\'re gonna learn today are <b>MOVEQ</b> and <b>MOVEM.</b> \r\n\r\n\r\n<b>MOVEQ</b> is similar to <b>MOVE</b>, but it means <b>MOVE Quick</b>. It\'s a faster (and smaller - 1 byte) instruction. You can only move 1 byte. Example:\r\n<pre class=\"68k\">	moveq	#0,d0</pre>\r\nClears <u>ENTIRE</u> <b>d0</b>, because when you <b>moveq</b> into a register, it sets the <u>ENTIRE</u> register.<br><br>\r\n\r\nIt clears the register! <b>Move.l</b> would take 6 bytes (hey, in old times space was worth more than gold), when <b>moveq </b> only 1.<br>\r\nYou can also use <b>ADDQ</b> and <b>SUBQ</b> (they can also change values in ram)<br><br>\r\n\r\nNow, the last thing. <b>MOVEM</b> (<b>MOVE Multiple</b>).\r\nIt can copy more than one register to a location in RAM or in reverse\r\n(RAM to more than one register). As I said before A7 is the stack\r\npointer. So you can use stack, too! The reason why <b>MOVEM</b> was\r\ncreated are subroutines. Subroutines are called in many different\r\nplaces in ROM. And subroutines often use registers. Now if you don\'t\r\nwant to change some important registers inside a subroutine, you should\r\nbackup these registers before the subroutine and copy them back after.\r\nDon\'t get it? Look at the example:<br><br>\r\n<pre class=\"68k\">	move.b	#$10,d0\r\n	bsr	Subroutine\r\n	move.b	d0,d1\r\n\r\n	...\r\n\r\nSubroutine:\r\n\r\n	...\r\n\r\n	moveq	#0,d0\r\n\r\n	...\r\n\r\n	rts\r\n</pre>\r\n\r\nTake a look at that code. We set <b>d0</b> to <b>$10</b>, then the subroutine clears <b>d0</b>. After the subroutine, we move <b>d0</b> to <b>d1</b>. That\'s not exactly what we wanted (it\'ll set d1 to 0, we wanted it to be <b>$10</b>). To fix that we can use movem:<pre class=\"68k\">\r\n\r\n	move.b	#$10,d0\r\n	bsr	MovemSub\r\n	move.b	d0,d1\r\n\r\n	...\r\n\r\nMovemSub:\r\n\r\n	movem	d0-d2,-(sp)\r\n\r\n	...\r\n\r\n	moveq	#0,d0\r\n\r\n	...\r\n\r\n	movem	(sp)+,d0-d2\r\n	rts</pre>\r\n\r\nNow it\'ll work! the <b>SP</b> is the <b>stack pointer</b>. You could use <b>A7</b> (it\'s the same), but I use <b>sp</b>. We decremented <b>sp</b>, because if we didn\'t, we would change some important data in <b>SP</b>. and after that, we increment <b>SP</b> back to its state. The register list can be different. Eg.<br><br>\r\n\r\n<pre class=\"68k\">d0-d5 - d0, d1, d2, d3, d4, d5\r\na5-a6 - a5, a6\r\nd1-d3/d6-d7 - d1, d2, d3, d6, d7\r\nd6-a1/a5-a6 - d6, d7, a0, a1, a5, a6</pre>\r\n\r\nThere are many different possibilites... If you don\'t understand <b>MOVEM</b>,\r\njust skip it, and come back to it when you will know more about ASM. It\r\ntook me 4 tries to understand that thing XD (and I didn\'t have any\r\nnifty guides *shot*)<br><br>\r\n\r\nThat\'s all folks! In next lesson I\'ll introduce some more <b>Bcc</b> instructions and maybe some bit operations? G\'night.',1,3),(17,2,'Logical operations','Before we start with logical operations, I will show some more <b>Bcc</b>\r\ninstructions as I promised. Apart from data registers, address\r\nregisters and program counter, there\'s an another register (last one, I\r\npromise) called <b>SR</b> (<b>status register</b>). We are now only interested in 5 bits of it, named <b>CCR</b> (<b>flag register</b>). Everything moved to CCR will be copied in the lower byte of <b>SR</b> (this works in reverse). Anyway, <b>CCR</b>\r\n\r\nconsists of 5 bits, which are flags. These flags are set or cleared\r\nwhen certain thing is being done with registers, or an instruction is\r\ncalled. These flags are:<br><br>\r\n\r\n- <b>C Flag</b> (<b>carry</b>) - 9th bit of adding, shifting and bit rotation.<br><br>\r\n\r\n- <b>V Flag</b> (<b>overflow</b>) - It\'ll be set when result can\'t be represented. Eg. when you add <b>$01 (byte)</b> to <b>$7F (byte)</b>, the result is <b>$80</b> and <b>V flag</b> will be set<br><br>\r\n\r\n- <b>Z Flag</b> (<b>zero</b>) - Will be set when the result is zero.<br><br>\r\n\r\n- <b>N Flag</b> (<b>negative</b>) - Will be set if the highest bit of result is set (in two complement it\'s the sign bit, so the signed negative)<br><br>\r\n\r\n- <b>X Flag</b> (<b>extended</b>) - A copy of <b>C flag</b>.<br><br>\r\n\r\nBut what these things have to do with <b>CMP</b> and <b>Bcc</b>? In C, this code:\r\n\r\nsomething == 1\r\n\r\nwill return 1 if it\'s true. Now, when you compare two values, <b>Z flag</b> is set when they are the same or is cleared when they\'re different. <b>BEQ</b> branches if <b>Z flag</b> is set and <b>BNE</b> will branch if <b>Z flag</b> is cleared. So... <b>BEQ</b> and <b>BNE</b> can be used not only when comparing two values. Look at that example:<br><br>\r\n\r\n<pre class=\"68k\">	moveq	#0,d0\r\n	beq	zflagisset\r\n	rts\r\nzflagisset:</pre>\r\n\r\nIt will branch, because the result of setting <b>d0</b> to <b>0</b> is <b>0</b> and <b>Z flag</b> is set. And <b>BEQ</b> branches if <b>Z flag</b> is set. This comes in handy if you want to test if a number is null or not. Here\'s a list of <b>Bcc</b> instructions:<br><br>\r\n\r\n<pre class=\"68k\">instr	conditions				flags required\r\n\r\nBEQ	Branch if equal				Z = 1\r\nBNE	Branch if not equal			Z = 0\r\n\r\nBGE	Branch if greater or equal (signed)		N = V\r\nBGT	Branch if greater than (signed)		N = V, Z=0\r\nBLT	Branch if lesser than (signed)		N != V, Z=0\r\nBLE	Branch if lesser or equal (signed)		N != V\r\n\r\nBHI	Branch if higher than (unsigned)		C = 0, Z = 0\r\nBHS	Branch if higher or same as (unsigned)	C = 0 OR Z = 1\r\nBLO	Branch if lower than (unsigned)		C = 1, Z = 0\r\nBLS	Branch if lower or same as			C = 1 OR Z = 1\r\n\r\nBCC	Branch if carry clear			C = 0\r\nBCS	Branch if carry set			C = 1\r\nBVC	Branch if overflow clear			V = 0\r\nBVS	Branch if overflow clear			V = 1\r\nBPL	Branch if plus				N = 0\r\nBMI	Branch if minus				N = 1\r\n\r\nBRA	Branch Always\r\n\r\n= means equal, != means not equal =P</pre>\r\n\r\n\r\nEnough of these branches, let\'s learn about bits...<br><br>\r\nI really hope you know what bits and bytes are. If you don\'t, a byte\r\nconsists of 8 bits, which can be either 1 (set) or 0 (cleared). Number\r\n7 is 111 binary. You can do fun stuff with bits. Eg. the keys pressed\r\non joypad are all stored in one byte. Each bit of this byte represents\r\na key:\r\n<pre class=\"68k\">7 6 5 4 3 2 1 0\r\n\r\nS A C B R L D U</pre>\r\n\r\nThe lowest bit is up, bit 1 is down etc...<br><br>\r\n\r\nNow if you want to know if <b>B</b> is pressed, what should you do? You should use the <b>AND</b> instruction.<br><br> \r\n\r\n\r\n<b>AND</b> operation compares all bits of two values and sets a bit in\r\na new one if this bit was set in both of the values. I\'m not an expert\r\nof logical operations so you can laugh =P Example:<br><br>\r\n<pre class=\"68k\">Value 1: 10101100\r\nValue 2: 11001010\r\n         --------\r\nResult:  10001000</pre>\r\n\r\nTake a look at this code:<br><br>\r\n<pre class=\"68k\">	move.b	($FFFFF604).w,d0	;$FFFFF604 is the joypad output in Sonic 1\r\n	and.b	#$10,d0			;you could use #%00010000\r\n	beq	Bnotpressed</pre>\r\n\r\nImagine we press <b>B</b>, <b>Up</b> and <b>Start</b>. <b>And</b> instruction will look like that:<br><br>\r\n\r\n<pre class=\"68k\">         SACBRLDU\r\nValue 1: 10010001 (keys pressed)\r\nValue 2: 00010000 (and)\r\n         --------\r\nResult:  00010000</pre><br><br>\r\n\r\nThe result is not zero so it won\'t branch! Nifty, isn\'t it? There are other:<br><br>\r\n<pre class=\"68k\">	or.b	#$8,d0</pre>\r\n\r\n<b>OR</b> sets the result bit if value 1 bit OR value 2 bit is set.<br><br>\r\n<pre class=\"68k\">Value 1: 00100100\r\nValue 2: 00001000\r\n         --------\r\nResult:  00101100</pre>\r\n\r\nNext:<br><br>\r\n<pre class=\"68k\">	eor.b	#$24,d0</pre>\r\n\r\n<b>EOR</b> sets the result bit if one and <u>ONLY</u> one bit is set in value bits (like x86 <b>xor</b>).<br><br>\r\n<pre class=\"68k\">Value 1: 00101110\r\nValue 2: 00010100\r\n         --------\r\nResult:  00111010\r\n</pre>\r\n\r\nAnd next:<br><br>\r\n<pre class=\"68k\">	not.b	d0</pre>\r\n\r\n<b>NOT</b> clears the bit if it was set and sets the bit if it was cleared. (changes all bits)\r\n<pre class=\"68k\">Before:  01001001\r\nAfter:   10110110</pre>\r\nAnd now on with bit shifting. This operation moves bits by an ammount\r\nto the right or to the left. Eg. we\'ll shift a value 3 times to the\r\nright:<br><br>\r\n<pre class=\"68k\">Before:  00101000\r\nAfter:   &gt;&gt;&gt;00101000</pre>\r\n\r\nSo after this it\'ll be:<br><br>\r\n<pre class=\"68k\">         00000101</pre>\r\nBit shifting is fun because one shift to the left multiples a number by\r\n2 and one shift to the right divides it by 2. The instructions:<br><br>\r\n<pre class=\"68k\">	lsl.b	#3,d0\r\n	lsr.b	#2,d1</pre>\r\n\r\n<b>LSL</b> shifts x bits to the left, <b>LSR</b> shifts x bits to the right. There\'s also bit rotating:<br><br>\r\n\r\n<pre class=\"68k\">	rol.b	#1,d0</pre>\r\n\r\nIt\'ll rotate a number one bit to the left:<br><br>\r\n<pre class=\"68k\">Before:  10101010\r\nAfter:  10101010\r\n        |-------^\r\n\r\n         01010101</pre>\r\n\r\nIt works the same to the right. The last part of bits:<br><br>\r\n<pre class=\"68k\">	bset	#1,d0	;sets bit 1 of d0\r\n	bclr	#2,d1	;clears bit 2 of d1\r\n	bchg	#3,d2	;changes bit 3 of d2 (like not)\r\n	btst	#6,d0	;test if bit 6 of d0 is set, sets \r\n			;z flag if it\'s cleared else clears z flag</pre>\r\n\r\nhomework:<br><br>\r\n\r\n<pre class=\"68k\">	move.b	#$4,d0\r\n	or.b	#$1,d0\r\n	eor.b	#$2,d0\r\n	lsl.b	#1,d0\r\n	ror.b	#2,d0\r\n	btst	#7,d0\r\n	bne	branch\r\n	rts\r\nbranch:</pre>\r\n\r\nNow your homework is to guess if it is going to branch or not. Bit operations are boring at first but you\'ll get used to them...\r\n<br>',1,4),(18,2,'Editing the game code','In this chapter we\'ll learn how to search for wanted code and edit it.\r\nBut before that, I\'ll show some arithmetic and data functions.<br><br>\r\n\r\nFirst, the <b>LEA</b> (<b>Load Effective Address</b>) instruction. It loads an effective address into an address register. You should use this instead of <b>MOVEA</b>. Examples:\r\n<pre class=\"68k\">	lea	($FFFFFE10).w,a1\r\n	lea	($12345).l,a2\r\n	lea	(Label).l,a3\r\n	lea	4(a0),a4\r\n	lea	4(pc),a5</pre>\r\n\r\n<b>lea 4(a0),a4</b> loads the value at <b>a0 + 4</b> into <b>a4</b>. <b>lea 4(pc),a5</b> loads <b>PC + 4</b> into <b>a5</b>.<br><br> \r\n\r\n\r\nYou can multiply and divide in 68k (which I didn\'t know for years, really XD). There are 4 instructions for it: <b>DIVS</b> (<b>DIVide Signed</b>), <b>DIVU</b> (<b>DIVide Unsigned</b>), <b>MULS</b> (<b>MULtiply Signed</b>), <b>MULU</b> (<b>MULtiply unsigned</b>). Examples:<br><br>\r\n\r\n<pre class=\"68k\">	divu	#5,d0	;divide d0 value by 5 (unsigned)\r\n	divs	d1,d2	;divide d2 value by d1 value (signed)\r\n	mulu	#3,d3	;multiply d3 value by 3 (unsigned)\r\n	muls	d3,d0	;multiply d0 value by d3 value (signed)</pre><br><br>\r\n\r\nAs you know or not, unsigned <b>$FE</b> is <b>$FE</b> and signed <b>$FE</b> is <b>-$2</b>. There\'s a difference between multiplying by <b>$FE</b> and <b>-$2</b>:\r\n\r\n<pre class=\"68k\">	moveq	#4,d0\r\n	move.l	d0,d1\r\n	mulu	#-$2,d0	; d0 = $4 * $FE, d0 = $3F8\r\n	muls	#-$2,d1	; d1 = $4 * -$2, d1 = -$8 ($F8)</pre><br><br>\r\n\r\nAs you can see there is a difference. The last three instructions are different from the ones you have seen already. <b>NOP</b> does nothing. It really doesn\'t XD. It is used to make <b><u>VERY</u></b> small delays, to let hardware parts to act. Example (it doesn\'t do anything):<br><br>\r\n<pre class=\"68k\">	move.w	#4,d0\r\n	nop		;it really does nothing =P\r\n	moveq	#0,d0</pre>\r\n\r\nThe second instruction is <b>ILLEGAL</b>.\r\nIt\'s not a real instruction, it\'s just a random word (depending on the\r\nassembler, normally TAS.B something) that will cause an illegal\r\ninstruction interrupt (interrupts will be covered later).<br><br>\r\n\r\nAnd the last one, <b>DC</b>. This instruction is to store data in ROM. Can be used as <b>DC.B</b>, <b>DC.W</b> and <b>DC.L</b>. I\'ll better show an example:<br><br>\r\n<pre class=\"68k\">	dc.b	$12,$24,$31,$21,$21,$31,$31,$12\r\n;this will store $1224312121313112 in ROM.\r\n\r\n	dc.w	$0EEE, $0CCC, $0AAA, $0888, $0666, $0444, $0222, $0000\r\n;a random palette ;)\r\n\r\n	dc.l	$1,$123141,$14144144\r\n\r\n	dc.w	%1110,1000</pre>\r\n\r\nThe possibilities are endless. Here\'s our first real example:<br><br>\r\n\r\n<pre class=\"68k\">	lea	(Palette_Sega).l,a0\r\n	lea	($FFFFFA80).w,a1\r\n	move.w	(a0)+,(a1)+\r\n	rts\r\n\r\nPalette_Sega:	dc.w  $EEE, $EEA, $EE4,	$EC0\r\n		dc.w  $EE4, $EEA, $EEC,	$EEA\r\n		dc.w  $EEA, $EEA, $EEA,	$EEA\r\n		dc.w  $EEC, $EEA, $EE4,	$EC0\r\n		dc.w  $EC0, $EC0, $EEC,	$EEA\r\n		dc.w  $EE4, $EC0, $EA0,	$E60\r\n		dc.w  $EEA, $EE4, $EC0,	$EA0\r\n		dc.w  $E80, $E00</pre>\r\n\r\nIt loads the palette address to <b>a0</b> and the palette address in ram to <b>a1</b>. Copies first color/colour <b>(a0)</b> to the first color in ram, then increments <b>a0</b> and <b>a1</b>. This really works =)<br><br>\r\n\r\nNow what I promised - editing the code in the game. Open the <b>Sonic 1 disassembly</b>. Search it for <b>label \'PlayLevel:\'</b>. There\'s a bunch of variable settings (a list of RAM variables is in <b>Guides&gt;Sonic 1&gt;RAM</b>).\r\nI commented some stuff there. The thing we are interested in is editing\r\nthe lives count. The RAM location that stores lifes is <b>$FFFFFE12</b>. Change it to <b>4</b>.\r\nNow, how do we assemble our edited code? I made a batch program which\r\nassembles a code using SNASM68K. Call it \'asm.bat\' or something and put\r\nthis in there:<br><br>\r\n<pre class=\"68k\">@echo off\r\necho asm.bat by drx\r\n\r\nif \"%1\"==\"\" goto noinput\r\n\r\nsnasm68k.exe -emax 0 -p -o ae- %1.asm, %1.bin\r\ngoto end\r\n\r\n:noinput\r\n\r\nset /p input=  Input asm file   \r\nset /p output= Output bin file   \r\n\r\nsnasm68k.exe -emax 0 -p -o ae- %input%, %output%\r\n\r\n:end</pre>\r\n\r\nThere are two options of using it:<br><br>\r\n1) Open it normally, type the input asm file and the output bin file\r\nand it will assemble it\r\n2) Go to the command line, type \'asm FILE\' (without the quotes) and\r\nit\'ll assemble FILE.asm to FILE.bin (it\'ll show the errors and the\r\nwindow won\'t disappear in Win XP...)<br><br>\r\n\r\nNow open the assembled file in an emulator. If you made it correctly, you should have 4 lives.<br><br>\r\n\r\nFew things that are different in disasm from what I said before:<br><br>\r\n\r\n1) <b>Bcc.s</b> or <b>Bcc.w</b> - this is wrong. You shouldn\'t use this, assembler will choose the correct one. <b>.s</b> is a one byte branch (-127..127) and <b>.w</b> is a two bytes branch (-32767..32767).<br><br>\r\n\r\n2) There are instructions like <b>CMPI</b>, <b>CMPA</b>, <b>ADDA</b>, <b>ADDI</b> etc. That are just different types of the same instruction, you should just use <b>CMP</b> or <b>ADD</b> and the assembler will choose the correct one. The exception is <b>MOVEM</b>, <b>MOVEQ</b>, <b>ADDQ</b>, <b>xQ</b> etc.<br><br>\r\n\r\nIf you understand 90% of what has been written here, then it\'s good.\r\nHell, if you understand 20% of it, it\'s good XD. Assembler is not easy,\r\nand a smallest error can ruin all your work.<br><br>\r\n\r\n<i>\"50% of the time spent programming an assembly language is correcting bugs.\"</i> - an assembly programmer XD<br><br>\r\n\r\nThe more time you spend on it, the better you are at fixing those bugs XD<br><br>\r\n\r\nThe most common bugs:<br><br>\r\n\r\n1) You MUST put a <b>#</b> before an immediate value (<b>move.b #1,d0</b>) If you won\'t, this will be treated as an address.<br>\r\n\r\n2) When you move a longword into <b>d0</b>, then a byte, the upper bytes still are there! To clear <b>d0</b> use <b>moveq #0,d0</b> or <b>clr.l d0</b><br>\r\n3) This is the most annoying bug ever. <b>PC</b> must be <u>ALWAYS</u>\r\n\r\neven. if you insert one byte somewhere, the code after it will be all\r\nin odd addresses and the Genesis will crash. Also, try to load even ROM\r\naddresses into address registers, because that can be nasty, too. The\r\nbest method to make sure an address will be always even is to put this\r\nbefore it:<br><br>\r\n<pre class=\"68k\">	align $2</pre>\r\n	\r\nor this:<br><br>\r\n<pre class=\"68k\">	even</pre>\r\nThis will make it always even. But remember, don\'t put it between the\r\ncode, or it\'ll give you an illegal operation (it SHOULDN\'T, because the\r\n<b>PC</b> is always even but...)<br><br>\r\n\r\nYou can align as many bytes as you want, eg putting this at the end will make the output rom size be a multiplication of <b>$80000</b>:<br><br>\r\n<pre class=\"68k\">	align $80000</pre>\r\nWith the knowledge you have (I hope you do) you should be able to find\r\nand edit the basic things like lives. Remember, the best method to\r\nlearn is to discover everything on your own. Don\'t rely only on my\r\nguides, be creative =)<br><br>\r\n\r\nNext chapter will cover loops and arrays (not C-like arrays...). Have fun.',1,5),(19,2,'Loops & arrays','Loops in 68k are very limited... Forget about <b>while</b>- or <b>for</b>-like loops ;) For loops, you use <b>DBcc</b>. Usually, programmers just use <b>DBF</b> or <b>DBRA</b>\r\n(which mean the same). First operand is a data register that will be\r\ndecremented and the second one is a label where to loop if this data\r\nregister isn\'t -1. Example:<br><br>\r\n\r\n<pre class=\"68k\">	lea	($1234).l,a0\r\n	lea	($FFFF1234).w,a1\r\n	moveq	#7,d0\r\nLoop:\r\n	move.w	(a0)+,(a1)+\r\n	dbf	d0,Loop</pre>\r\n\r\nThis example will go back to the Loop label 8 times (<b>d0 + 1</b>). It\'s not that hard... I won\'t show the other <b>DBcc</b> instructions because they are practically useless. Maybe later, when I\'ll write an instruction list...<br><br>\r\nSecond part of this chapter will be arrays. Well, I call them arrays,\r\nbut they really aren\'t. Those are just sets of bytes, words, longwords\r\nthat are readed depending on some variable. For instance, we want to\r\nload a different music depending on the current level:<br><br>\r\n<pre class=\"68k\">	moveq	#0,d0			;clear d0\r\n	move.b	($FFFFFE10).w,d0	;move level to d0 (00 - GHZ, 01 - LZ etc)\r\n	lea	(MusicArray).l,a0	;load the music values array into a0\r\n	move.b	(a0,d0.w),d0		;see the explanation\r\n	rts\r\n\r\nMusicArray:\r\n	dc.b	$81,$82,$83,$84,$85,$86</pre>\r\n\r\nI thought 5 damn minutes about how should I explain this XD. The <b>move.b (a0,d0.w),d0</b> instruction moves a byte at <b>a0 + d0</b> to <b>d0</b>. Let\'s examine 3 possibilities (GHZ - 00, LZ - 01, MZ - 02)\r\n\r\n<pre class=\"68k\">GHZ:\r\n\r\n	d0 = 00\r\n	a0 = $1234\r\n\r\nmove.b	(a0,d0.w),d0\r\n\r\n	d0 = (a0 + d0)\r\n	d0 = ($1234 + 0)\r\n	d0 = ($1234)\r\n	d0 = $81\r\n\r\nLZ:\r\n\r\n	d0 = 01\r\n	a0 = $1234\r\n\r\nmove.b	(a0,d0.w),d0\r\n\r\n	d0 = (a0 + d0)\r\n	d0 = ($1234 + 01)\r\n	d0 = ($1235)\r\n	d0 = $82\r\n\r\nMZ:\r\n\r\n	d0 = 02\r\n	a0 = $1234\r\n\r\nmove.b	(a0,d0.w),d0\r\n\r\n	d0 = (a0 + d0)\r\n	d0 = ($1234 + 02)\r\n	d0 = ($1236)\r\n	d0 = $83</pre>\r\nI hope you get it... This chapter was short but very important, so if\r\nyou don\'t understand something, read it 10 times =P And you can always\r\nask on the forums.\r\n',1,6),(20,2,'68000 memory map','<pre class=\"68k\"><span class=\"offset\">$000000-$3FFFFF</span> - ROM\r\n<span class=\"offset\">$400000-$9FFFFF</span> - Unused\r\n<span class=\"offset\">$A00000-$A0FFFF</span> - Z80\r\n<span class=\"offset\">$A10000-$A1001F</span> - I/O\r\n<span class=\"offset\">$A10020-$BFFFFF</span> - Miscellaneous\r\n\r\n<span class=\"offset\">$C00000-$C0001F</span> - VDP\r\n<span class=\"offset\">$C00020-$DFFFFF</span> - VDP mirrors\r\n<span class=\"offset\">$E00000-$FFFFFF</span> - RAM (it repeats each $10000, so $E00000\r\nis the same as $E20000 and $FF0000. Most games use $FF0000-$FFFFFF)</pre>',3,1),(21,2,'ROM header','<pre class=\"68k\">$000-$0FF - Vectors\r\n  \r\n      $00 - Stack pointer\r\n      $04 - Code start\r\n      $08 - Bus error  \r\n      $0C - Address error \r\n      $10 - Illegal instruction \r\n      $14 - Divistion by zero\r\n      $18 - CHK exception\r\n      $1C - TRAPV exception \r\n      $20 - Privilege violation \r\n      $24 - TRACE exeption  \r\n      $28 - LINE 1010 EMULATOR  \r\n      $2C - LINE 1111 EMULATOR  \r\n      $30-$5F - Reserved by Motorola  \r\n      $60 - Spurious exception \r\n      $64 - Interrupt request level 1  \r\n      $68 - Interrupt request level 2  \r\n      $6C - Interrupt request level 3  \r\n      $70 - Interrupt request level 4 (VDP interrupt / Horizontal blank)  \r\n      $74 - Interrupt request level 5  \r\n      $78 - Interrupt request level 6 (Vertical blank)  \r\n      $7C - Interrupt request level 7  \r\n      $80 - TRAP #00 exception  \r\n      $84 - TRAP #01 exception  \r\n      $88 - TRAP #02 exception  \r\n      $8C - TRAP #03 exception  \r\n      $90 - TRAP #04 exception  \r\n      $94 - TRAP #05 exception  \r\n      $98 - TRAP #06 exception  \r\n      $9C - TRAP #07 exception  \r\n      $A0 - TRAP #08 exception  \r\n      $A4 - TRAP #09 exception  \r\n      $A8 - TRAP #10 exception  \r\n      $AC - TRAP #11 exception  \r\n      $B0 - TRAP #12 exception  \r\n      $B4 - TRAP #13 exception  \r\n      $B8 - TRAP #14 exception  \r\n      $BC - TRAP #15 exception  \r\n      $C0-$FF - Reserved by Motorola\r\n\r\n$100-$10F - Console name (usually \'SEGA MEGA DRIVE \' or \'SEGA GENESIS    \')\r\n$110-$11F - Release date (usually \'(C)XXXX YYYY.MMM\' \r\n            where XXXX is the company code, YYYY is the year and MMM - month)\r\n$120-$14F - Domestic name\r\n$150-$17F - International name\r\n$180-$18D - Version (\'XX YYYYYYYYYYYY\' where XX is the game type and YY the game code)\r\n$18E-$18F - Checksum (for info how to calculate checksum go <a href=\"?guides/68k/a3\">HERE</a>)\r\n$190-$19F - I/O support\r\n$1A0-$1A3 - ROM start \r\n$1A4-$1A7 - ROM end\r\n$1A8-$1AB - RAM start (usually $00FF0000)\r\n$1AC-$1AF - RAM end (usually $00FFFFFF)\r\n$1B0-$1B2 - \'RA\' and $F8 enables SRAM.\r\n$1B3      - unused ($20)\r\n$1B4-$1B7 - SRAM start (default $00200000)\r\n$1B8-$1BB - SRAM end (default $0020FFFF)\r\n$1BC-$1FF - Notes (unused)</pre>',3,2),(22,2,'Genesis security','<span class=\"section\">Control code</span><br><br>\r\nModels &gt;= 2 of Mega Drive / Genesis have a requirement of putting\r\n\'SEGA\' to ($A14000).l . Here\'s the code that will fix it (put it in the\r\ninit section)\r\n<pre class=\"68k\">		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;skip if smd model = 1\r\n		move.l	#\'SEGA\',($A14000).l\r\n\r\nSkipSecurity:   \r\n</pre><br><br><br>\r\n\r\n<span class=\"section\">Checksum</span><br><br>Checksum is a word in ROM\r\nheader that is calculated while compiling (in SEGA). While hacking, you\r\nprobably encountered problems like red screen or \'WRONG CHECKSUM\'. If\r\nyou\'re asm hacking a rom, you have to find the checking routine and\r\ndelete it. The routine is:\r\n<pre class=\"68k\">		movea.l	#$200,a0\r\n		movea.l	#$7FFFF,a1	; ROM End\r\n		move.l	(a1),d0\r\n		moveq	#0,d1\r\n\r\nloop:\r\n		add.w	(a0)+,d1\r\n		cmp.l	a0,d0\r\n		bcc.s	loop\r\n		movea.l	#$18E,a1	; Checksum\r\n		cmp.w	(a1),d1\r\n		bne.w	WrongChecksum\r\n</pre>So to fix it, delete the \'bne WrongChecksum\'. Depends on the rom,\r\nbut usually the routine is exactly like that, because that\'s what\'s in\r\nthe Mega Drive tech docs (by SEGA =P). But if you\'re hacking in a hex\r\neditor, you have to either calculate the checksum yourself or get a\r\ncalculator. To calculate the checksum you do the following:<br><br>\r\n\r\n1. Start at $200<br>\r\n2. Add a word to the checksum (ignore the upper bits)<br>\r\n3. Increment the offset<br>\r\n4. If offset &lt; rom end, go to 2<br>\r\n5. Here\'s your checksum =)',3,3),(23,2,'I/O ports','<span class=\"section\">I/O</span><br><br>\r\nRegisters<br><br>\r\n<table cellpadding=\"4\">\r\n<tbody><tr><th>Address</th><th>Description</th></tr>\r\n<tr><td>$A10001</td><td>Version</td></tr>\r\n<tr><td>$A10003</td><td>Port A data</td></tr>\r\n\r\n<tr><td>$A10005</td><td>Port B data</td></tr>\r\n<tr><td>$A10007</td><td>Port C data</td></tr>\r\n<tr><td>$A10009</td><td>Port A control</td></tr>\r\n<tr><td>$A1000B</td><td>Port B control</td></tr>\r\n<tr><td>$A1000D</td><td>Port C control</td></tr>\r\n<tr><td>$A1000F</td><td>Port A TxData</td></tr>\r\n\r\n<tr><td>$A10011</td><td>Port A RxData</td></tr>\r\n<tr><td>$A10013</td><td>Port A serial control</td></tr>\r\n<tr><td>$A10015</td><td>Port B TxData</td></tr>\r\n<tr><td>$A10017</td><td>Port B RxData</td></tr>\r\n<tr><td>$A10019</td><td>Port B serial control</td></tr>\r\n<tr><td>$A1001B</td><td>Port C TxData</td></tr>\r\n\r\n<tr><td>$A1001D</td><td>Port C RxData</td></tr>\r\n<tr><td>$A1001F</td><td>Port C serial control</td></tr>\r\n</tbody></table><br><br>\r\nReading even addresses returns the same as odd ones so you can use both $A10000 and $A10001.<br><br><br>\r\n<span class=\"section\">$a10001 - version register</span><br><br>\r\nReading version register returns a byte:<br><br>\r\n<span class=\"offset\">Bit 7</span> - Export bit. 1 if export (USA, Europe, etc.), 0 if domestic (Japan)<br>\r\n\r\n<span class=\"offset\">Bit 6</span> - Video type. 1 if PAL, 0 if NTSC<br>\r\n<span class=\"offset\">Bit 5</span> - 0 if Sega CD connected, 1 if not connected<br>\r\n<span class=\"offset\">Bit 4</span> - Unused (always 0)<br>\r\n<span class=\"offset\">Bits 3-0</span> - 0 - MegaDrive 1 / Genesis 1, 1 - newer. Newer have additional security hardware.<br><br><br>\r\n\r\n<span class=\"section\">$a10003-7 - data registers</span><br><br>\r\nReading a data register returns the state of all pins:<br><br>\r\n<span class=\"offset\">Bit 7</span> - Unused<br>\r\n<span class=\"offset\">Bit 6</span> - TH pin<br>\r\n<span class=\"offset\">Bit 5</span> - TR pin<br>\r\n<span class=\"offset\">Bit 4</span> - TL pin<br>\r\n\r\n<span class=\"offset\">Bit 3</span> - Data 3 pin<br>\r\n<span class=\"offset\">Bit 2</span> - Data 2 pin<br>\r\n<span class=\"offset\">Bit 1</span> - Data 1 pin<br>\r\n<span class=\"offset\">Bit 0</span> - Data 0 pin<br><br><br>\r\n<span class=\"section\">Reading joypads</span><br><br>\r\n\r\nHere\'s the code:<br><br>\r\n<pre class=\"68k\">pads_read:\r\n\r\n		lea     ($FFFFFFF0).w,a0	;where the joypad states will be written\r\n		lea     ($A10003).l,a1	;first joypad data port\r\n		bsr.s   joypad_read	;do the first joypad\r\n		addq.w  #2,a1		;do the second joypad\r\njoypad_read:\r\n		move.b  #0,(a1)		;set the first part\r\n		nop     			;let the hardware parts act\r\n		nop     \r\n		move.b  (a1),d0		;move the lower byte to d0\r\n		lsl.b   #2,d0		;shift some stuff\r\n		andi.b  #$C0,d0		;exclude some dirty stuff\r\n		move.b  #$40,(a1)		;set the second part\r\n		nop     			;the delay\r\n		nop     \r\n		move.b  (a1),d1		;move the upper byte to d1\r\n		andi.b  #$3F,d1		;exclude some dirty stuff\r\n		or.b    d1,d0		;or d0 with d1\r\n		not.b   d0		;not d0\r\n		move.b  (a0),d1		;move the previous joypad state\r\n		eor.b   d0,d1		;eor previous state with current state\r\n					;(we get holded joypad state in d1)\r\n		move.b  d0,(a0)+		;move the pressed state to ram\r\n		and.b   d0,d1		;and stuff\r\n		move.b  d1,(a0)+		;move the holded state to ram\r\n		rts     \r\n</pre><br><br>\r\nAfter executing that code you will have:<br><br>\r\n<span class=\"offset\">$FFFFF0</span> - Current pressed state of joypad 1<br>\r\n<span class=\"offset\">$FFFFF1</span> - Current holded state of joypad 1<br>\r\n<span class=\"offset\">$FFFFF2</span> - Current pressed state of joypad 2<br>\r\n\r\n<span class=\"offset\">$FFFFF3</span> - Current holded state of joypad 2<br><br>\r\nThe joypad output format:<br><br>\r\n<span class=\"offset\">Bit 7</span> - Start<br>\r\n<span class=\"offset\">Bit 6</span> - A button<br>\r\n<span class=\"offset\">Bit 5</span> - C button<br>\r\n\r\n<span class=\"offset\">Bit 4</span> - B button<br>\r\n<span class=\"offset\">Bit 3</span> - Right<br>\r\n<span class=\"offset\">Bit 2</span> - Left<br>\r\n<span class=\"offset\">Bit 1</span> - Down<br>\r\n<span class=\"offset\">Bit 0</span> - Up<br><br>',3,4),(24,2,'VDP','<span class=\"section\">VDP</span><br><br>\r\nPorts:<br><br>\r\n<table cellpadding=\"4\">\r\n<tbody><tr><th>Address</th><th>Description</th></tr>\r\n<tr><td>$C00000</td><td>Data port</td></tr>\r\n<tr><td>$C00002</td><td>Data port (mirror)</td></tr>\r\n\r\n<tr><td>$C00004</td><td>Control port</td></tr>\r\n<tr><td>$C00006</td><td>Control port (mirror)</td></tr>\r\n<tr><td>$C00008</td><td>HV counter</td></tr>\r\n<tr><td>$C0000A</td><td>HV counter (mirror)</td></tr>\r\n<tr><td>$C0000C</td><td>HV counter (mirror)</td></tr>\r\n<tr><td>$C0000E</td><td>HV counter (mirror)</td></tr>\r\n\r\n<tr><td>$C00011</td><td>SN76489 PSG</td></tr>\r\n<tr><td>$C00013</td><td>SN76489 PSG (mirror)</td></tr>\r\n<tr><td>$C00015</td><td>SN76489 PSG (mirror)</td></tr>\r\n<tr><td>$C00017</td><td>SN76489 PSG (mirror)</td></tr>\r\n<tr><td>$C00018</td><td>Unused</td></tr>\r\n<tr><td>$C0001A</td><td>Unused</td></tr>\r\n\r\n<tr><td>$C0001C</td><td>Unused</td></tr>\r\n<tr><td>$C0001F</td><td>Unused</td></tr>\r\n</tbody></table><br><br><br>\r\n<span class=\"section\">Data port</span><br><br>\r\nHere, you write data after programming the control port.<br><br><br>\r\n\r\n<span class=\"section\">Control port</span><br><br>\r\nReading the control port returns a status word:<br><br>\r\n<span class=\"offset\">Bit 15</span> - Always 0<br>\r\n\r\n<span class=\"offset\">Bit 14</span> - Always 0<br>\r\n<span class=\"offset\">Bit 13</span> - Always 1<br>\r\n<span class=\"offset\">Bit 12</span> - Always 1<br>\r\n<span class=\"offset\">Bit 11</span> - Always 0<br>\r\n<span class=\"offset\">Bit 10</span> - Always 1<br>\r\n\r\n<span class=\"offset\">Bit 9</span> - FIFO empty<br>\r\n<span class=\"offset\">Bit 8</span> - FIFO full<br>\r\n<span class=\"offset\">Bit 7</span> - V blank pending<br>\r\n<span class=\"offset\">Bit 6</span> - Sprite overflow<br>\r\n<span class=\"offset\">Bit 5</span> - Sprite collision<br>\r\n\r\n<span class=\"offset\">Bit 4</span> - Odd frame<br>\r\n<span class=\"offset\">Bit 3</span> - Vertical blanking<br>\r\n<span class=\"offset\">Bit 2</span> - Horizontal blanking<br>\r\n<span class=\"offset\">Bit 1</span> - DMA in process<br>\r\n<span class=\"offset\">Bit 0</span> - PAL mode flag (1 for PAL, 0 for not PAL)\r\n\r\n<br><br><br>\r\n\r\n<span class=\"section\">Accessing VDP RAM</span><br><br>\r\nYou can access VDP RAM writing a 32-bit command to control port then reading/writing to the data port. Here\'s the command:<br><br>\r\n<pre class=\"68k\">\r\n    CD1 CD0 A13 A12 A11 A10 A09 A08     (D31-D24)\r\n    A07 A06 A05 A04 A03 A02 A01 A00     (D23-D16)\r\n     ?   ?   ?   ?   ?   ?   ?   ?      (D15-D8)\r\n    CD5 CD4 CD3 CD2  ?   ?  A15 A14     (D7-D0)\r\n\r\n</pre>\r\n\r\n<span class=\"offset\">A00-A15</span> - address<br>\r\n<span class=\"offset\">CD0-CD3</span> - code<br>\r\n\r\n<span class=\"offset\">CD4</span> - 1 if VRAM copy DMA mode. 0 otherwise.<br>\r\n<span class=\"offset\">CD5</span> - DMA operation<br><br>\r\n\r\nBits CD3-CD0:<br>\r\n<span class=\"offset\">0000</span> - VRAM read<br>\r\n<span class=\"offset\">0001</span> - VRAM write<br>\r\n\r\n<span class=\"offset\">0011</span> - CRAM write<br>\r\n<span class=\"offset\">0100</span> - VSRAM read<br>\r\n<span class=\"offset\">0101</span> - VSRAM write<br>\r\n<span class=\"offset\">1000</span> - CRAM read<br><br>\r\nExample:<br><br>\r\n\r\n<pre class=\"68k\">	move.l	#$C0000000,($c00004).l	;program the control register\r\n	move.w	#$0EEE,($c00000).l		;move colo(u)r EEE to CRAM\r\n</pre>\r\n<br>\r\n<span class=\"section\">Programming VDP registers</span><br><br>\r\nVDP has 23 registers that can be programmed writing a 16-bit command to the control port:<br><br>\r\n<pre class=\"68k\">\r\n     1   0   ?  R04 R03 R02 R01 R00     (D15-D8)\r\n    D07 D06 D05 D04 D03 D02 D01 D00     (D7-D0)\r\n\r\n</pre>\r\n<span class=\"offset\">R04-R00</span> - register<br>\r\n<span class=\"offset\">D07-D00</span> - data<br><br>\r\n\r\nExample:<br><br>\r\n<pre class=\"68k\">	;set the border colo(u)r to palette $1, colo(u)r $2\r\n	move.w	#$8712,($c00004).l\r\n</pre>\r\n\r\nRegisters can be also set by writing a 32-bit command (2 registers at a time):<br><br>\r\n<pre class=\"68k\">	;set the border color to palette $1, color $2\r\n	;and set the VDP auto increment data to $2\r\n	move.l	#$87128F02,($c00004).l\r\n</pre>\r\n\r\nList of registers:<br><br>\r\n<table cellpadding=\"4\">\r\n<tbody><tr><th>Register</th><th>Name</th><th>Description</th></tr>\r\n\r\n<tr><td align=\"center\">$00</td><td>Mode Set Register No.&nbsp;1</td><td>\r\n<span class=\"offset\">Bits 7-5</span> - unused<br>\r\n<span class=\"offset\">Bit 4</span> - H interrupts enable<br>\r\n<span class=\"offset\">Bit 3</span> - 1 = invalid display<br>\r\n<span class=\"offset\">Bit 2</span> - 1 = 8 colour mode (only bits 1, 5 and 9 of colours are displayed)<br>\r\n\r\n<span class=\"offset\">Bit 1</span> - 1 = HV counter latch enable<br>\r\n<span class=\"offset\">Bit 0</span> - 1 = disable display<br>\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$01</td><td>Mode Set Register No.&nbsp;2</td><td>\r\n<span class=\"offset\">Bit 7</span> - TMS9918 / Genesis display select<br>\r\n\r\n<span class=\"offset\">Bit 6</span> - 1 = display enabled, 0 = fill the screen with backdrop colour (border colour)<br>\r\n<span class=\"offset\">Bit 5</span> - V interrupts enable<br>\r\n<span class=\"offset\">Bit 4</span> - DMA enable<br>\r\n<span class=\"offset\">Bit 3</span> - 1 = PAL (240 lines), 0 = NTSC (224 lines)<br>\r\n<span class=\"offset\">Bit 2</span> - SMS / Genesis display select<br>\r\n\r\n<span class=\"offset\">Bit 1</span> - 1 = HV counter latch enable<br>\r\n<span class=\"offset\">Bit 0</span> - 1 = disable display<br>\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$02</td><td>VRAM Address for Scroll A</td><td>\r\n\r\nBits 5-3 of this register correspond to bits A15-A13 of the name table\r\n address for plane A.\r\n\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$03</td><td>VRAM Address for Window</td><td>\r\n\r\nBits 5-1 of this register correspond to bits A15-A11 of the name table\r\n address for the window.\r\n\r\n In 40-cell mode, A11 is always forced to zero.\r\n\r\n</td></tr>\r\n<tr><td align=\"center\">$04</td><td>VRAM Address for Scroll B</td><td>\r\n\r\nBits 2-0 of this register correspond to bits A15-A11 of the name table\r\n address for plane B.\r\n\r\n\r\n</td></tr>\r\n<tr><td align=\"center\">$05</td><td>VRAM Address for Sprite Attributes</td><td>\r\n\r\n Bits 6-0 of this register correspond to bits A15-A09 of the sprite\r\n attribute table.\r\n\r\n In 40-cell mode, A09 is always forced to zero.\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$06</td><td>Unused</td><td>\r\n\r\n(Used by Master System)\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$07</td><td>Backdrop colour</td><td>\r\n\r\n<span class=\"offset\">Bits 5-4</span> - palette line in CRAM<br>\r\n\r\n<span class=\"offset\">Bits 3-0</span> - colour<br>\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$08</td><td>Unused</td><td>\r\n\r\n(Used by Master System)\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$09</td><td>Unused</td><td>\r\n\r\n(Used by Master System)\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$0A</td><td>H interrupt register</td><td>\r\n\r\nValue that will be loaded in the counter.\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$0B</td><td>Mode Set Register No.&nbsp;3</td><td>\r\n<span class=\"offset\">Bits 7-4</span> - unused<br>\r\n\r\n<span class=\"offset\">Bit 3</span> - 1 = external interrupts enable<br>\r\n<span class=\"offset\">Bit 2</span> - 1 = 2-cell column based vertical scrolling, 0 = full screen vertical scrolling<br>\r\n<span class=\"offset\">Bits 1-0</span> -\r\n<pre>  0 0    - Full screen scroll\r\n  0 1    - Line scroll\r\n  1 0    - Cell scroll\r\n  1 1    - Line scroll</pre>\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$0C</td><td>Mode Set Register No.&nbsp;4</td><td>\r\n<span class=\"offset\">Bit 6-4</span> - unused<br>\r\n<span class=\"offset\">Bit 3</span> - ???<br>\r\n<span class=\"offset\">Bits 2-1</span> - \r\n<pre>  0 0   - No interlace\r\n  0 1   - Interlace (normal resolution)\r\n  1 0   - No interlace\r\n  1 1   - Interlace (double resolution</pre>\r\n\r\n\r\n<span class=\"offset\">Bits 0,7</span> -\r\n<pre>  0 0    - 32 cells display\r\n  0 1    - 40 cells display (the display is weird a bit)\r\n  1 0    - invalid setting\r\n  1 1    - 40 cells display</pre>\r\n\r\n</td></tr>\r\n<tr><td align=\"center\">$0D</td><td>VRAM Address for Horizontal Scroll</td><td>\r\n\r\nBits 2-0 of this register correspond to bits A15-A11 of the name table\r\n address for plane B.\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$0E</td><td>Unused</td><td>\r\n\r\n---\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$0F</td><td>Auto Increment Data</td><td>\r\n\r\nValue to be added VDP address register after each read/write to the data port.\r\n\r\n</td></tr>\r\n\r\n\r\n<tr><td align=\"center\">$10</td><td>Scroll Size</td><td>\r\n\r\n<span class=\"offset\">Bit 7-6</span> - unused<br>\r\n<span class=\"offset\">Bit 5-4</span> - Vertical Scroll Size (same as horizontal)<br>\r\n<span class=\"offset\">Bit 3-2</span> - unused<br>\r\n<span class=\"offset\">Bit 1-0</span> - Horizontal Scroll Size:<br>\r\n\r\n<pre>  0 0    - 32 cells\r\n  0 1    - 64 cells\r\n  1 0    - invalid setting\r\n  1 1    - 128 cells</pre>\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$11</td><td>Window Horizontal Position</td><td>\r\n\r\nWell, I don\'t recommend setting it to something different than $00, because I haven\'t cracked this register fully yet.\r\n\r\n\r\n</td></tr>\r\n<tr><td align=\"center\">$12</td><td>Window Vertical Position</td><td>\r\n\r\nSame as above\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$13</td><td>DMA Length Bits 7-0</td><td>\r\n\r\nBits 7-0 of DMA length.\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$14</td><td>DMA Length Bits 15-8</td><td>\r\n\r\nBits 15-8 of DMA length.\r\n\r\n\r\n</td></tr>\r\n<tr><td align=\"center\">$15</td><td>DMA Source Address Bits 7-0</td><td>\r\n\r\nBits 7-0 of DMA source address.\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$16</td><td>DMA Source Address Bits 15-8</td><td>\r\n\r\nBits 15-8 of DMA source address.\r\n\r\n\r\n</td></tr>\r\n\r\n<tr><td align=\"center\">$17</td><td>DMA Type</td><td>\r\n\r\n<span class=\"offset\">Bit 7</span> - depends.<br><br>\r\n\r\nIf <span class=\"offset\">bit 7</span> is 0:<br>\r\n- DMA type is Memory to VRAM (68k memory to VRAM)<br>\r\n- <span class=\"offset\">bits 6-0</span> become bits 22-16 of DMA source address<br>\r\n- the whole DMA source address has to be shifted to the right by one bit<br><br>\r\n\r\nIf <span class=\"offset\">bit 7</span> is 1:<br>\r\n\r\n- DMA type is VRAM fill (if <span class=\"offset\">bit 6</span> = 0) or VRAM to VRAM copy (if <span class=\"offset\">bit 6</span> = 1)<br>\r\n- Only bits of registers $15 and $16 are taken into account, <span class=\"offset\">bits 5-0</span> of this registers are ignored (I\'m not sure, haven\'t tested this yet)<br>\r\n  \r\n</td></tr>\r\n</tbody></table>',3,5),(25,2,'DMA','<span class=\"section\">Overview</span><br><br>\r\nWhat\'s DMA? DMA stands for Direct Memory Access. There are 3 types of\r\nDMA: 68k memory to VDP memory copy, VDP memory to VDP memory copy, VDP\r\nmemory fill.<br><br><br>\r\n\r\n\r\n<span class=\"section\">68k to VDP copy</span><br><br>\r\nIt\'s used to copy data from 68000 memory (meaning ROM, SRAM, RAM etc.,\r\nall 68k memory =P) to VDP memory (Video RAM, Vertical Scroll RAM or\r\nColor RAM). Remember to set the auto increment register ($F) to $2\r\nbefore doing this. First, you need to specify the DMA length using\r\nregisters $13 and $14:<br><br>\r\n\r\n<pre>$13: L07 L06 L05 L04 L03 L02 L01 L00\r\n$14: L15 L14 L13 L12 L11 L10 L08 L08\r\n</pre>\r\n\r\nLength = number of bytes transferred / 2 (or &gt;&gt;1)<br><br>\r\n\r\nNext, you need to specify the source address (in 68k). Here\'s how you should set registers $15-$17:<br><br>\r\n\r\n<pre>$15: S08 S07 S06 S05 S04 S03 S02 S01\r\n$16: S16 S15 S14 S13 S12 S11 S10 S09\r\n$17:  0  S23 S22 S21 S20 S19 S18 S17\r\n</pre>\r\n\r\nThe source address is also shifted to the right by one (divided by 2).<br><br>\r\n\r\nNow, to begin the DMA, you write a longword command to the control port:<br><br>\r\n\r\n<pre>Bits 31-24:  CD1 CD0 A13 A12 A11 A10 A09 A08\r\nBits 23-16:  A07 A06 A05 A04 A03 A02 A01 A00\r\nBits 15-08:   0   0   0   0   0   0   0   0 \r\nBits 07-00:   1   0   0  CD2  0   0  A15 A14\r\n</pre>\r\n\r\nA15-A00 is the destination address in VRAM, VSRAM or CRAM.<br><br>\r\nCD2-CD0:<br><br>\r\n001 - VRAM<br>\r\n011 - CRAM<br>\r\n101 - VSRAM<br><br>\r\n\r\nAfter doing the above, the DMA will start and until it\'s done, 68000 will be frozen. For the lazy, the code:<br><br>\r\n\r\n<pre class=\"68k\">;length = length (original, not shifted)\r\n;source = source addr (not shifted)\r\n;dest = destination addr\r\n;x = %001 if VRAM, %011 if CRAM, %101 if VSRAM\r\n;\r\n;btw, you can just write it like that:\r\n\r\nlength = $100	;etc.\r\n\r\n		move.w	#$9400+(((length)&amp;$FF00)&gt;&gt;9),($C00004).l\r\n		move.w	#$9300+(((length)&amp;$FF)&gt;&gt;1),($C00004).l\r\n		\r\n		move.w	#$9600+(((source&gt;&gt;1)&amp;$FF00)&gt;&gt;8),($C00004).l\r\n		move.w	#$9500+((source&gt;&gt;1)&amp;$FF),($C00004).l\r\n		move.w	#$9700+((((source&gt;&gt;1)&amp;$FF0000)&gt;&gt;16)&amp;$7F),($C00004).l\r\n\r\nmove.l	#($80+((dest&amp;$3FFF)&lt;&lt;16)+((dest&amp;$4000)&gt;&gt;14)+((x&amp;$4)&lt;&lt;2)+((x&amp;$3)&lt;&lt;30)),($C00004).l\r\n\r\n\r\n</pre>\r\n\r\nIf you\'re too lazy to even do that, use the calculator...\r\n\r\n<br><br><br>\r\n<span class=\"section\">VRAM copy</span><br><br>\r\nThis DMA is used to copy VRAM to VRAM. <br><br>\r\nNote: auto increment register ($F) has to be set to $01 before the DMA.<br><br>\r\nRegister $14 contains the higher 8 bits of fill length (shifted by one\r\nto the right), register $13 contains the lower 8 bits. Registers $16\r\nand $15 are the source address in VRAM. Register $17 has to be set to\r\n$C0. The DMA is started when this command is written to the\r\nVDP:<br><br>\r\n<pre>Bits 31-24:  0   0  A13 A12 A11 A10 A09 A08\r\nBits 23-16: A07 A06 A05 A04 A03 A02 A01 A00\r\nBits 15-08:  ?   ?   ?   ?   ?   ?   ?   ?\r\nBits 07-00:  1   1   0   0   ?   ?  A15 A14\r\n</pre>\r\nA15-A00 - Destination address in VRAM\r\n<br><br>\r\nThe code for the lazy:<br><br>\r\n\r\n<pre class=\"68k\">		move.w	#$8F01,($C00004).l\r\n		\r\n		move.w	#$9400+(((copylength)&amp;$FF00)&gt;&gt;9),($C00004).l\r\n		move.w	#$9300+(((copylength)&amp;$FF)&gt;&gt;1),($C00004).l\r\n		\r\n		move.w	#$9600+(((src)&amp;$FF00)&gt;&gt;8),($C00004).l\r\n		move.w	#$9500+((src)&amp;$FF),($C00004).l\r\n		\r\n		move.w	#$97C0,($C00004).l\r\n		\r\n		move.l	#($C0+((dest&amp;$3FFF)&lt;&lt;16)+((dest&amp;$4000)&gt;&gt;14)),($C00004).l\r\n		\r\n		move.w	#$8F02,($C00004).l</pre>\r\n		\r\n<span class=\"section\">VRAM fill</span><br><br>\r\n\r\nIf you dreamed about filling VRAM with a random word, VRAM fill is for you. It fills VRAM with a specified byte:<br><br>\r\nRegisters $14, $13 - how many bytes to fill<br>\r\nRegister $17 - #$80<br>\r\nRegister $F - #$01<br><br>\r\nAfter setting the registers, you have to write a command to the VDP:<br><br>\r\n<pre>Bits 31-24:  0   1  A13 A12 A11 A10 A09 A08\r\nBits 23-16: A07 A06 A05 A04 A03 A02 A01 A00\r\nBits 15-08:  ?   ?   ?   ?   ?   ?   ?   ? \r\nBits 07-00:  1   0   0   0   ?   ?  A15 A14\r\n</pre>\r\n<br><br>\r\nA15-A00 - the address in VRAM where the fill will start<br><br>\r\nFinally, you have to write a word to the <b>data port</b> ($C00000). First byte is the byte that will be copied everywhere, the\r\nother byte is written to the address (only once).<br><br>\r\n\r\nThe code:<br><br>\r\n<pre class=\"68k\">		move.w	#$8F01,($C00004).l\r\n		\r\n		move.w	#$9400+(((length)&amp;$FF00)&gt;&gt;9),($C00004).l\r\n		move.w	#$9300+(((length)&amp;$FF)&gt;&gt;1),($C00004).l\r\n		\r\n		move.w	#$9780,($C00004).l\r\n		\r\n		move.l	#($40000080+((addr&amp;$3FFF)&lt;&lt;16)+((addr&amp;$4000)&gt;&gt;14)),($C00004).l\r\n		\r\n		move.w	#$xx00,($C00000).l\r\n		\r\n		move.w	#$8F02,($C00004).l\r\n</pre>\r\n\r\nThat\'s all folks. If you have problems with calculating all the stuff, use the calculator.',3,6),(26,3,'VDP programming calculator','?vdp',3,7),(28,2,'PSG subroutines',';---------------------------------------\r\n;\r\n; PSG subroutines:\r\n;\r\n; * ResetPSG - Reset the PSG\r\n;\r\n; * SetPSGFreq - Set the frequency of a channel\r\n;\r\n; * SetPSGVol - Set the volume of a channel\r\n;\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;        [www.bluehedgehog.org]\r\n;        [www.shadowsoft-games.com]\r\n;\r\n;---------------------------------------\r\n\r\n\r\nResetPSG:\r\n\r\n\r\n		move.b	#$9F,($C00011).l	;set channel 1 volume to 0\r\n		move.b	#$BF,($C00011).l	;set channel 2 volume to 0\r\n		move.b	#$DF,($C00011).l	;set channel 3 volume to 0\r\n		move.b	#$FF,($C00011).l	;set noise volume to 0\r\n		\r\n		rts\r\n				\r\n;---------------------\r\n; Set frequency\r\n;\r\n; d0 - frequency (0-$3ff)\r\n; d1 - channel (0, 1, 2)\r\n;---------------------		\r\nSetPSGFreq:\r\n\r\n		move.b	d0,d2\r\n		and.b	#$F,d2\r\n		add.b	#$80,d2\r\n		and.b	#$3,d1\r\n		lsl.b	#$5,d1\r\n		or.b	d1,d2\r\n		move.b	d2,($C00011).l	;$80+channel<<5+(freq&$f)\r\n		lsr.w	#$4,d0\r\n		move.b	d0,($C00011).l	;freq>>4\r\n		rts\r\n		\r\n;---------------------\r\n; Set volume\r\n;\r\n; d0 - volume (0-$f)\r\n; d1 - channel (0, 1, 2, 3)\r\n;---------------------			\r\nSetPSGVol:\r\n		and.b	#$F,d0\r\n		and.b	#$3,d1\r\n		moveq	#0,d2\r\n		move.b	#$F,d2\r\n		sub.b	d0,d2\r\n		add.b	#$90,d2\r\n		lsl.b	#$5,d1\r\n		or.b	d1,d2\r\n		move.b	d2,($C00011).l	;$90+channel<<5+($f-vol)\r\n		rts\r\n',5,2),(29,1,'Commented code',NULL,18,5),(30,2,'Code template',';---------------------------------------\r\n;\r\n; Sega Mega Drive code template v1.0\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;        [www.bluehedgehog.org]\r\n;        [www.shadowsoft-games.com]\r\n;\r\n; Inits Z80, PSG, VDP, RAM and does the security stuff\r\n; You put your code under label Main\r\n;\r\n;---------------------------------------\r\n\r\n\r\nVectors:	dc.l $FFFE00,	Entrypoint,	Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l HBlank,	Error,		VBlank,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\nHeader:		dc.b \'SEGA MEGA DRIVE \' ; Console name\r\n		dc.b \'(C) DRX 2004.NOV\' ; Copyright/Date\r\nDomesticName:	dc.b \'Code template by drx - www.hacking-cult.org     \' ; Domestic Name\r\n		dc.b \'Code template by drx - www.hacking-cult.org     \' ; International Name\r\n		dc.b \'GM 00000000-00\'   ; Version\r\nChecksum:	dc.w $1337\r\n					; Checksum\r\n		dc.b \'J               \' ; I/O Support\r\nRomStartLoc:	dc.l 0			; ROM Start\r\nRomEndLoc:	dc.l RomEnd\r\n					; ROM End\r\nRamStartLoc:	dc.l $FF0000		; RAM Start\r\nRamEndLoc:	dc.l $FFFFFF		; RAM End\r\n\r\n		dc.b $20,$20,$20,$20	; \'RA\',$F8,$20 if SRAM = on\r\n		\r\nSramStart:	dc.l $20202020		; $200000 if SRAM = on\r\nSramEnd:	dc.l $20202020		; $20xxxx if SRAM = on\r\n		\r\n		dc.b \'                                              \' ; Notes\r\n		dc.b \'      \'\r\n		dc.b \'JUE             \' ; Country\r\n\r\n;---------------------\r\n; Code start\r\n;---------------------\r\n		\r\nEntrypoint:\r\n\r\n		tst.l	($A10008).l		;Test Port A control\r\n		bne	PortA_Ok\r\n\r\n		tst.w	($A1000C).l		;Test Port C control\r\n\r\nPortA_Ok:\r\n		bne	SkipSetup\r\n\r\n		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;if the smd/gen model is 1, skip the security\r\n		move.l	#\'SEGA\',($A14000).l\r\n\r\nSkipSecurity:   \r\n\r\n		move.w	($C00004).l,d0		;test if VDP works\r\n\r\n		moveq	#0,d0\r\n		movea.l	d0,a6\r\n		move	a6,usp			;set usp to $0\r\n		\r\n;---------------------\r\n; Setup VDP registers\r\n;---------------------\r\n		lea	(VDPSetupArray),a0\r\n		move.w	#(VDPSetupArrayEnd-VDPSetupArray)/2,d1	;$18 VDP registers\r\n		\r\nVDPSetupLoop:\r\n		move.w	(a0)+,($C00004).l\r\n		dbf	d1,VDPSetupLoop\r\n		\r\n		\r\n		move.l	#$40000080,($C00004).l\r\n		move.w	#0,($C00000).l		;clean the screen\r\n	\r\n	\r\n;---------------------\r\n; Init the Z80\r\n;---------------------	\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Init),a0\r\n		lea	($A00000).l,a1\r\n		move.w	#Z80InitEnd-Z80Init,d1\r\n		\r\nInitZ80:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,InitZ80\r\n		\r\n		move.w	#0,($A11200).l\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n		move.w	#$100,($A11200).l\r\n		\r\n	\r\n;---------------------\r\n; Reset the RAM\r\n;---------------------	\r\n\r\n		lea	($FFFF0000).l,a0\r\n		move.w	#$3fff,d1\r\n		\r\nClearRAM:\r\n		move.l	#0,(a0)+\r\n		dbf	d1,ClearRAM\r\n		\r\n		\r\n;---------------------\r\n; VDP again\r\n;---------------------			\r\n		\r\n		move.w	#$8174,($C00004).l\r\n		move.w	#$8F02,($C00004).l\r\n		\r\n		\r\n;---------------------\r\n; Clear the CRAM\r\n;---------------------	\r\n\r\n		move.l	#$C0000000,($C00004).l	;Set VDP ctrl to CRAM write\r\n		move.w	#$3f,d1\r\n		\r\nClearCRAM:\r\n		move.w	#0,($C00000).l\r\n		dbf	d1,ClearCRAM\r\n		\r\n			\r\n;---------------------\r\n; Clear the VDP stuff\r\n;---------------------		\r\n\r\n		move.l	#$40000010,($C00004).l\r\n		move.w	#$13,d1\r\n		\r\nClearStuff:\r\n		move.l	#0,($C00000).l\r\n		dbf	d1,ClearStuff\r\n		\r\n\r\n;---------------------\r\n; Init the PSG\r\n;---------------------	\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		\r\n		move.w	#0,($A11200).l\r\n		\r\n		\r\n;---------------------\r\n; Load the z80 driver\r\n;---------------------\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80a:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80a		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Driver),a0\r\n		lea	($A00000).l,a1\r\n		move.W	#Z80DriverEnd-Z80Driver,d1\r\n		\r\nLoadZ80Driver:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,LoadZ80Driver\r\n		\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n	\r\n;---------------------\r\n; Clear the registers\r\n; and set the SR\r\n;---------------------	\r\n\r\n		movem.l	($FF0000).l,d0-a6	\r\n		lea	($FFFE00).l,a7\r\n		move	#$2700,sr\r\n\r\nSkipSetup:	\r\n\r\n	\r\n;-----------------------\r\n; Here starts your code\r\n;-----------------------\r\nMain:\r\n\r\n\r\n		rts\r\n		\r\n		\r\n;---------------------\r\n; Error exceptions\r\n;---------------------\r\n\r\nError:\r\n		rte\r\n		\r\n;---------------------\r\n; Horizontal Blank\r\n;---------------------\r\nHBlank:\r\n\r\n		rte\r\n				\r\n;---------------------\r\n; Vertical Blank\r\n;---------------------\r\nVBlank:\r\n\r\n		rte\r\n\r\n;---------------------\r\n; VDP registers array\r\n;---------------------\r\n\r\nVDPSetupArray:\r\n		dc.w	$8004	;9-bit palette = 1 (otherwise would be 3-bit), HBlank = 0\r\n		dc.w	$8134	;Genesis display = 1, DMA = 1, VBlank = 1, display = 0\r\n		dc.w	$8230	;Scroll A - $C000\r\n		dc.w	$8338	;Window   - $E000\r\n		dc.w	$8407	;Scroll B - $E000\r\n		dc.w	$857c	;Sprites  - $F800\r\n		dc.w	$8600	;Unused\r\n		dc.w	$8700	;Backdrop color - $00\r\n		dc.w	$8800	;Unused\r\n		dc.w	$8900	;Unused\r\n		dc.w	$8A00	;H Interrupt register\r\n		dc.w	$8B00	;Full screen scroll, no external interrupts\r\n		dc.w	$8C81	;40 cells display\r\n		dc.w	$8D3F	;H Scroll - $FC00\r\n		dc.w	$8E00	;Unused\r\n		dc.w	$8F02	;VDP auto increment\r\n		dc.w	$9001	;64 cells scroll\r\n		dc.w	$9100	;Window H position\r\n		dc.w	$9200	;Window V position\r\n		dc.w	$93FF	;DMA stuff (off)\r\n		dc.w	$94FF	;DMA stuff (off)\r\n		dc.w	$9500	;DMA stuff (off)\r\n		dc.w	$9600	;DMA stuff (off)\r\n		dc.w	$9780	;DMA stuff (off)\r\nVDPSetupArrayEnd:\r\n\r\n\r\n;---------------------\r\n; Z80 init code\r\n;---------------------\r\n\r\nZ80Init:\r\n	dc.w	$af01, $d91f, $1127, $0021, $2600, $f977 \r\n	dc.w    $edb0, $dde1, $fde1, $ed47, $ed4f, $d1e1                                   \r\n	dc.w    $f108, $d9c1, $d1e1, $f1f9, $f3ed, $5636\r\n	dc.w	$e9e9 \r\nZ80InitEnd:\r\n\r\n;---------------------\r\n; Music driver (z80)\r\n;---------------------		\r\n\r\nZ80Driver:\r\n		dc.b	$c3,$46,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r\n		dc.b	$00,$00,$00,$00,$00,$f3,$ed,$56,$31,$00,$20,$3a,$39,$00,$b7,$ca,$4c,$00,$21,$3a,$00,$11,$40,$00,$01,$06,$00,$ed,$b0,$3e,$00,$32,$39,$00,$3e,$b4,$32,$02,$40,$3e,$c0,$32,$03,$40,$3e,$2b,$32,$00,$40,$3e,$80,$32,$01,$40,$3a,$43,$00,$4f,$3a,$44,$00,$47,$3e,$06,$3d\r\n		dc.b	$c2,$81,$00,$21,$00,$60,$3a,$41,$00,$07,$77,$3a,$42,$00,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$3a,$40,$00,$6f,$3a,$41,$00,$f6,$80,$67,$3e,$2a,$32,$00,$40,$7e,$32,$01,$40,$21,$40,$00,$7e,$c6,$01,$77,$23,$7e,$ce,$00,$77,$23,$7e,$ce,$00,$77\r\n		dc.b	$3a,$39,$00,$b7,$c2,$4c,$00,$0b,$78,$b1,$c2,$7f,$00,$3a,$45,$00,$b7,$ca,$4c,$00,$3d,$3a,$45,$00,$06,$ff,$0e,$ff,$c3,$7f,$00\r\nZ80DriverEnd:\r\n\r\n\r\nRomEnd:\r\n',29,1),(31,2,'PSG test using all 3 channels',';---------------------------------------\r\n;\r\n; PSG test v1.0\r\n;\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;\r\n;---------------------------------------\r\n\r\n\r\nVectors:	dc.l $FFFE00,	Entrypoint,	Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l HBlank,	Error,		VBlank,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\nHeader:		dc.b \'SEGA MEGA DRIVE \' ; Console name\r\n		dc.b \'(C) DRX 2004.NOV\' ; Copyright/Date\r\nDomesticName:	dc.b \'PSG test by drx - www.hacking-cult.org          \' ; Domestic Name\r\n		dc.b \'PSG test by drx - www.hacking-cult.org          \' ; International Name\r\n		dc.b \'GM 00000000-00\'   ; Version\r\nChecksum:	dc.w $1337\r\n					; Checksum\r\n		dc.b \'J               \' ; I/O Support\r\nRomStartLoc:	dc.l 0			; ROM Start\r\nRomEndLoc:	dc.l RomEnd\r\n					; ROM End\r\nRamStartLoc:	dc.l $FF0000		; RAM Start\r\nRamEndLoc:	dc.l $FFFFFF		; RAM End\r\n\r\n		dc.b $20,$20,$20,$20	; \'RA\',$F8,$20 if SRAM = on\r\n		\r\nSramStart:	dc.l $20202020		; $200000 if SRAM = on\r\nSramEnd:	dc.l $20202020		; $20xxxx if SRAM = on\r\n		\r\n		dc.b \'                                              \' ; Notes\r\n		dc.b \'      \'\r\n		dc.b \'JUE             \' ; Country\r\n\r\n;---------------------\r\n; Code start\r\n;---------------------\r\n		\r\nEntrypoint:\r\n\r\n		tst.l	($A10008).l		;Test Port A control\r\n		bne	PortA_Ok\r\n\r\n		tst.w	($A1000C).l		;Test Port C control\r\n\r\nPortA_Ok:\r\n		bne	SkipSetup\r\n\r\n		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;if the smd/gen model is 1, skip the security\r\n		move.l	#\'SEGA\',($A14000).l\r\n\r\nSkipSecurity:   \r\n\r\n		move.w	($C00004).l,d0		;test if VDP works\r\n\r\n		moveq	#0,d0\r\n		movea.l	d0,a6\r\n		move	a6,usp			;set usp to $0\r\n		\r\n;---------------------\r\n; Setup VDP registers\r\n;---------------------\r\n		lea	(VDPSetupArray),a0\r\n		move.w	#(VDPSetupArrayEnd-VDPSetupArray)/2,d1	;$18 VDP registers\r\n		\r\nVDPSetupLoop:\r\n		move.w	(a0)+,($C00004).l\r\n		dbf	d1,VDPSetupLoop\r\n		\r\n		\r\n		move.l	#$40000080,($C00004).l\r\n		move.w	#0,($C00000).l		;clean the screen\r\n	\r\n	\r\n;---------------------\r\n; Init the Z80\r\n;---------------------	\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Init),a0\r\n		lea	($A00000).l,a1\r\n		move.w	#Z80InitEnd-Z80Init,d1\r\n		\r\nInitZ80:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,InitZ80\r\n		\r\n		move.w	#0,($A11200).l\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n		move.w	#$100,($A11200).l\r\n		\r\n	\r\n;---------------------\r\n; Reset the RAM\r\n;---------------------	\r\n\r\n		lea	($FFFF0000).l,a0\r\n		move.w	#$3fff,d1\r\n		\r\nClearRAM:\r\n		move.l	#0,(a0)+\r\n		dbf	d1,ClearRAM\r\n		\r\n		\r\n;---------------------\r\n; VDP again\r\n;---------------------			\r\n		\r\n		move.w	#$8174,($C00004).l\r\n		move.w	#$8F02,($C00004).l\r\n		\r\n		\r\n;---------------------\r\n; Clear the CRAM\r\n;---------------------	\r\n\r\n		move.l	#$C0000000,($C00004).l	;Set VDP ctrl to CRAM write\r\n		move.w	#$3f,d1\r\n		\r\nClearCRAM:\r\n		move.w	#0,($C00000).l\r\n		dbf	d1,ClearCRAM\r\n		\r\n			\r\n;---------------------\r\n; Clear the VDP stuff\r\n;---------------------		\r\n\r\n		move.l	#$40000010,($C00004).l\r\n		move.w	#$13,d1\r\n		\r\nClearStuff:\r\n		move.l	#0,($C00000).l\r\n		dbf	d1,ClearStuff\r\n		\r\n\r\n;---------------------\r\n; Init the PSG\r\n;---------------------	\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		\r\n		move.w	#0,($A11200).l\r\n		\r\n		\r\n;---------------------\r\n; Load the z80 driver\r\n;---------------------\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80a:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80a		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Driver),a0\r\n		lea	($A00000).l,a1\r\n		move.W	#Z80DriverEnd-Z80Driver,d1\r\n		\r\nLoadZ80Driver:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,LoadZ80Driver\r\n		\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n	\r\n;---------------------\r\n; Clear the registers\r\n; and set the SR\r\n;---------------------	\r\n\r\n		movem.l	($FF0000).l,d0-a6	\r\n		lea	($FFFE00).l,a7\r\n		move	#$2700,sr\r\n\r\nSkipSetup:	\r\n\r\n	\r\n;-----------------------\r\n; Here starts your code\r\n;-----------------------\r\nMain:\r\n\r\n		move.b	#10,d0\r\n		move.b	#0,d1\r\n		jsr	SetVol\r\n		\r\n		move.b	#10,d0\r\n		move.b	#1,d1\r\n		jsr	SetVol\r\n				\r\n		move.b	#10,d0\r\n		move.b	#2,d1\r\n		jsr	SetVol\r\n		\r\n		move.w	#$3ff,d7\r\nFreqLoop:\r\n		move.w	d7,d0\r\n		move.b	#0,d1\r\n		jsr	SetFreq\r\n		\r\n		move.w	#$3ff,d0\r\n		sub.w	d7,d0\r\n		move.b	#1,d1\r\n		jsr	SetFreq\r\n		\r\n		move.w	d7,d0\r\n		and.w	#$10,d0\r\n		lsl.w	#4,d0\r\n		move.b	#2,d1\r\n		jsr	SetFreq\r\n		\r\n		move.b	#1,d0\r\n		jsr	Sleep\r\n		\r\n		dbf	d7,FreqLoop\r\n		\r\n\r\n		jsr	ResetPSG\r\n\r\nLoop:\r\n		bra	Loop\r\n		rts\r\n		\r\nResetPSG:\r\n\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		rts\r\n				\r\n;---------------------\r\n; Set frequency\r\n;\r\n; d0 - frequency (0-$3ff)\r\n; d1 - channel (0, 1, 2)\r\n;---------------------		\r\nSetFreq:\r\n\r\n		move.b	d0,d2\r\n		and.b	#$F,d2\r\n		add.b	#$80,d2\r\n		and.b	#$3,d1\r\n		lsl.b	#$5,d1\r\n		or.b	d1,d2\r\n		move.b	d2,($C00011).l	;$80+channel<<5+(freq&$f)\r\n		lsr.w	#$4,d0\r\n		move.b	d0,($C00011).l	;freq>>4\r\n		rts\r\n		\r\n;---------------------\r\n; Set volume\r\n;\r\n; d0 - volume (0-$f)\r\n; d1 - channel (0, 1, 2, 3)\r\n;---------------------			\r\nSetVol:\r\n		and.b	#$F,d0\r\n		and.b	#$3,d1\r\n		moveq	#0,d2\r\n		move.b	#$F,d2\r\n		sub.b	d0,d2\r\n		add.b	#$90,d2\r\n		lsl.b	#$5,d1\r\n		or.b	d1,d2\r\n		move.b	d2,($C00011).l	;$90+channel<<5+($f-vol)\r\n		rts\r\n		\r\n\r\n;---------------------\r\n; Sleep\r\n;\r\n; d0 - sleep time (ms)\r\n;---------------------\r\n\r\nSleep:\r\n		move.l	#4193,d1\r\n	\r\nms:\r\n		sub.l	#1,d1\r\n		bne	ms\r\n		\r\n		sub.l	#1,d0\r\n		bne	Sleep\r\n		\r\n		rts\r\n\r\n\r\n;---------------------\r\n; Error exceptions\r\n;---------------------\r\n\r\nError:\r\n		rte\r\n		\r\n;---------------------\r\n; Horizontal Blank\r\n;---------------------\r\nHBlank:\r\n\r\n		rte\r\n				\r\n;---------------------\r\n; Vertical Blank\r\n;---------------------\r\nVBlank:\r\n\r\n\r\n		rte\r\n\r\n;---------------------\r\n; VDP registers array\r\n;---------------------\r\n\r\nVDPSetupArray:\r\n		dc.w	$8004	;9-bit palette = 1 (otherwise would be 3-bit), HBlank = 0\r\n		dc.w	$8134	;Genesis display = 1, DMA = 1, VBlank = 1, display = 0\r\n		dc.w	$8230	;Scroll A - $C000\r\n		dc.w	$8338	;Window   - $E000\r\n		dc.w	$8407	;Scroll B - $E000\r\n		dc.w	$857c	;Sprites  - $F800\r\n		dc.w	$8600	;Unused\r\n		dc.w	$8700	;Backdrop color - $00\r\n		dc.w	$8800	;Unused\r\n		dc.w	$8900	;Unused\r\n		dc.w	$8A10	;H Interrupt register\r\n		dc.w	$8B00	;Full screen scroll, no external interrupts\r\n		dc.w	$8C81	;40 cells display\r\n		dc.w	$8D3F	;H Scroll - $FC00\r\n		dc.w	$8E00	;Unused\r\n		dc.w	$8F02	;VDP auto increment\r\n		dc.w	$9001	;64 cells scroll\r\n		dc.w	$9100	;Window H position\r\n		dc.w	$9200	;Window V position\r\n		dc.w	$93FF	;DMA stuff (off)\r\n		dc.w	$94FF	;DMA stuff (off)\r\n		dc.w	$9500	;DMA stuff (off)\r\n		dc.w	$9600	;DMA stuff (off)\r\n		dc.w	$9780	;DMA stuff (off)\r\nVDPSetupArrayEnd:\r\n\r\n\r\n;---------------------\r\n; Z80 init code\r\n;---------------------\r\n\r\nZ80Init:\r\n	dc.w	$af01, $d91f, $1127, $0021, $2600, $f977 \r\n	dc.w    $edb0, $dde1, $fde1, $ed47, $ed4f, $d1e1                                   \r\n	dc.w    $f108, $d9c1, $d1e1, $f1f9, $f3ed, $5636\r\n	dc.w	$e9e9 \r\nZ80InitEnd:\r\n\r\n;---------------------\r\n; Music driver (z80)\r\n;---------------------		\r\n\r\nZ80Driver:\r\n		dc.b	$c3,$46,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r\n		dc.b	$00,$00,$00,$00,$00,$f3,$ed,$56,$31,$00,$20,$3a,$39,$00,$b7,$ca,$4c,$00,$21,$3a,$00,$11,$40,$00,$01,$06,$00,$ed,$b0,$3e,$00,$32,$39,$00,$3e,$b4,$32,$02,$40,$3e,$c0,$32,$03,$40,$3e,$2b,$32,$00,$40,$3e,$80,$32,$01,$40,$3a,$43,$00,$4f,$3a,$44,$00,$47,$3e,$06,$3d\r\n		dc.b	$c2,$81,$00,$21,$00,$60,$3a,$41,$00,$07,$77,$3a,$42,$00,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$3a,$40,$00,$6f,$3a,$41,$00,$f6,$80,$67,$3e,$2a,$32,$00,$40,$7e,$32,$01,$40,$21,$40,$00,$7e,$c6,$01,$77,$23,$7e,$ce,$00,$77,$23,$7e,$ce,$00,$77\r\n		dc.b	$3a,$39,$00,$b7,$c2,$4c,$00,$0b,$78,$b1,$c2,$7f,$00,$3a,$45,$00,$b7,$ca,$4c,$00,$3d,$3a,$45,$00,$06,$ff,$0e,$ff,$c3,$7f,$00\r\nZ80DriverEnd:\r\n\r\n\r\nRomEnd:\r\n',29,2),(32,2,'SRAM test',';---------------------------------------\r\n;\r\n; SRAM test\r\n;\r\n; Shows how many times you have played the rom\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;\r\n;---------------------------------------\r\n\r\n\r\nVectors:	dc.l $FFFE00,	Entrypoint,	Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l HBlank,	Error,		VBlank,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\nHeader:		dc.b \'SEGA MEGA DRIVE \' ; Console name\r\n		dc.b \'(C) DRX 2004.NOV\' ; Copyright/Date\r\nDomesticName:	dc.b \'SRAM test by drx - www.hacking-cult.org         \' ; Domestic Name\r\n		dc.b \'SRAM test by drx - www.hacking-cult.org         \' ; International Name\r\n		dc.b \'GM 00000000-00\'   ; Version\r\nChecksum:	dc.w $1337\r\n					; Checksum\r\n		dc.b \'J               \' ; I/O Support\r\nRomStartLoc:	dc.l 0			; ROM Start\r\nRomEndLoc:	dc.l RomEnd\r\n					; ROM End\r\nRamStartLoc:	dc.l $FF0000		; RAM Start\r\nRamEndLoc:	dc.l $FFFFFF		; RAM End\r\n\r\n		dc.b \'RA\',$F8,$20	; \'RA\',$F8,$20 if SRAM = on\r\n		\r\nSramStart:	dc.l $200000		; $200000 if SRAM = on\r\nSramEnd:	dc.l $20FFFF		; $20xxxx if SRAM = on\r\n		\r\n		dc.b \'                                              \' ; Notes\r\n		dc.b \'      \'\r\n		dc.b \'JUE             \' ; Country\r\n\r\n;---------------------\r\n; Code start\r\n;---------------------\r\n		\r\nEntrypoint:\r\n\r\n		tst.l	($A10008).l		;Test Port A control\r\n		bne	PortA_Ok\r\n\r\n		tst.w	($A1000C).l		;Test Port C control\r\n\r\nPortA_Ok:\r\n		bne	SkipSetup\r\n\r\n		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;if the smd/gen model is 1, skip the security\r\n		move.l	#\'SEGA\',($A14000).l\r\n\r\nSkipSecurity:   \r\n\r\n		move.w	($C00004).l,d0		;test if VDP works\r\n\r\n		moveq	#0,d0\r\n		movea.l	d0,a6\r\n		move	a6,usp			;set usp to $0\r\n		\r\n;---------------------\r\n; Setup VDP registers\r\n;---------------------\r\n		lea	(VDPSetupArray),a0\r\n		move.w	#(VDPSetupArrayEnd-VDPSetupArray)/2,d1	;$18 VDP registers\r\n		\r\nVDPSetupLoop:\r\n		move.w	(a0)+,($C00004).l\r\n		dbf	d1,VDPSetupLoop\r\n		\r\n		\r\n		move.l	#$40000080,($C00004).l\r\n		move.w	#0,($C00000).l		;clean the screen\r\n	\r\n	\r\n;---------------------\r\n; Init the Z80\r\n;---------------------	\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Init),a0\r\n		lea	($A00000).l,a1\r\n		move.w	#Z80InitEnd-Z80Init,d1\r\n		\r\nInitZ80:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,InitZ80\r\n		\r\n		move.w	#0,($A11200).l\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n		move.w	#$100,($A11200).l\r\n		\r\n	\r\n;---------------------\r\n; Reset the RAM\r\n;---------------------	\r\n\r\n		lea	($FFFF0000).l,a0\r\n		move.w	#$3fff,d1\r\n		\r\nClearRAM:\r\n		move.l	#0,(a0)+\r\n		dbf	d1,ClearRAM\r\n		\r\n		\r\n;---------------------\r\n; VDP again\r\n;---------------------			\r\n		\r\n		move.w	#$8174,($C00004).l\r\n		move.w	#$8F02,($C00004).l\r\n		\r\n		\r\n;---------------------\r\n; Clear the CRAM\r\n;---------------------	\r\n\r\n		move.l	#$C0000000,($C00004).l	;Set VDP ctrl to CRAM write\r\n		move.w	#$3f,d1\r\n		\r\nClearCRAM:\r\n		move.w	#0,($C00000).l\r\n		dbf	d1,ClearCRAM\r\n		\r\n			\r\n;---------------------\r\n; Clear the VDP stuff\r\n;---------------------		\r\n\r\n		move.l	#$40000010,($C00004).l\r\n		move.w	#$13,d1\r\n		\r\nClearStuff:\r\n		move.l	#0,($C00000).l\r\n		dbf	d1,ClearStuff\r\n		\r\n\r\n;---------------------\r\n; Init the PSG\r\n;---------------------	\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		\r\n		move.w	#0,($A11200).l\r\n		\r\n		\r\n;---------------------\r\n; Load the z80 driver\r\n;---------------------\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80a:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80a		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Driver),a0\r\n		lea	($A00000).l,a1\r\n		move.W	#Z80DriverEnd-Z80Driver,d1\r\n		\r\nLoadZ80Driver:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,LoadZ80Driver\r\n		\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n	\r\n;---------------------\r\n; Clear the registers\r\n; and set the SR\r\n;---------------------	\r\n\r\n		movem.l	($FF0000).l,d0-a6	\r\n		lea	($FFFE00).l,a7\r\n		move	#$2700,sr\r\n\r\nSkipSetup:	\r\n\r\n	\r\n;-----------------------\r\n; Here starts your code\r\n;-----------------------\r\nMain:\r\n\r\n		add.l	#1,($200000).l		\r\n		\r\n		lea	(Font),a0\r\n		move.l	#$F0,d0\r\n		move.l	#0,d1\r\n		jsr	Load1bpp\r\n		\r\n		move.l	#$C0000000,($C00004).l\r\n		move.w	#$0,($C00000).l	\r\n		move.w	#$EEE,($C00000).l\r\n				\r\n		move.l	#$60000003,($C00004).l\r\n		lea	(Test),a0\r\n		jsr	Print\r\n		\r\n		move.l	($200000).l,d0\r\n		jsr	PrintLong\r\n		\r\n		jsr	Print\r\n\r\n				\r\nEnd:\r\n		bra	End\r\n		rts\r\n		\r\nTest:		dc.b	\'You have opened this ROM $\',0\r\n		dc.b	\' times\',0\r\n	\r\n		even\r\n		\r\nPrintLong:\r\n		movem	d0-d3,-(sp)\r\n		move.l	d0,d1\r\n		move.w	#7,d2\r\n		\r\nPrintLongLoop:\r\n		move.b	d1,d3\r\n		and.w	#$F,d3\r\n		cmp.b	#$A,d3\r\n		blt	NoAdd\r\n		add.b	#$7,d3	\r\nNoAdd:\r\n		add.b	#$30,d3\r\n		move.w	d3,-(sp)\r\n		lsr.l	#4,d1\r\n		dbf	d2,PrintLongLoop\r\n		\r\n		move.w	#7,d2\r\n		\r\nPrintLongLoop2:\r\n		move.w	(sp)+,($C00000).l\r\n		dbf	d2,PrintLongLoop2\r\n		movem	(sp)+,d0-d3\r\n		rts\r\n	\r\nPrint:\r\n		move.l	d0,-(sp)\r\n		moveq	#0,d0\r\n		\r\nLoopy:\r\n		move.b	(a0)+,d0\r\n		beq	Die\r\n		\r\n		move.w	d0,($C00000).l\r\n		bra	Loopy\r\n		\r\nDie:\r\n		move.l	(sp)+,d0\r\n		rts	\r\n		\r\n		rts\r\n				\r\n			\r\nLoad1bpp:				; CODE XREF: ROM:000028A2p\r\n		move	#$2700,sr\r\n		move.w	#$8F02,($C00004).l\r\n		lsl.l	#2,d1\r\n		lsr.w	#2,d1\r\n		swap	d1\r\n		addi.l	#$40000000,d1\r\n		move.l	d1,($C00004).l\r\n		lsl.l	#3,d0\r\n		subi.l	#1,d0\r\n		clr.l	d1\r\n		clr.l	d2\r\n		move.l	#1,d3\r\n		move.l	#3,d4\r\n		move.b	(a0)+,d1\r\n\r\nloc_1FC6:				; CODE XREF: sub_1F8E+46j sub_1F8E+58j ...\r\n		lsl.w	#4,d2\r\n		move.b	d1,d1\r\n		bmi.w	loc_1FFC\r\n		addi.w	#0,d2\r\n\r\nloc_1FD2:				; CODE XREF: sub_1F8E+72j\r\n		lsl.b	#1,d1\r\n		dbf	d4,loc_1FC6\r\n		move.w	d2,($C00000).l\r\n		clr.l	d2\r\n		move.l	#3,d4\r\n		dbf	d3,loc_1FC6\r\n		move.l	#1,d3\r\n		move.b	(a0)+,d1\r\n		dbf	d0,loc_1FC6\r\n		move	#$2300,sr\r\n		rts	\r\n; &#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;&#1060;\r\n\r\nloc_1FFC:				; CODE XREF: sub_1F8E+3Cj\r\n		addi.w	#1,d2\r\n		bra.w	loc_1FD2\r\n	\r\n			\r\n\r\n\r\n		rts\r\n		\r\n		\r\n;---------------------\r\n; Error exceptions\r\n;---------------------\r\n\r\nError:\r\n		rte\r\n		\r\n;---------------------\r\n; Horizontal Blank\r\n;---------------------\r\nHBlank:\r\n\r\n		rte\r\n				\r\n;---------------------\r\n; Vertical Blank\r\n;---------------------\r\nVBlank:\r\n\r\n		rte\r\n\r\n;---------------------\r\n; VDP registers array\r\n;---------------------\r\n\r\nVDPSetupArray:\r\n		dc.w	$8004\r\n		dc.w	$8134\r\n		dc.w	$8230\r\n		dc.w	$8338\r\n		dc.w	$8407\r\n		dc.w	$857c\r\n		dc.w	$8600\r\n		dc.w	$8700\r\n		dc.w	$8800\r\n		dc.w	$8900\r\n		dc.w	$8A00\r\n		dc.w	$8B00\r\n		dc.w	$8C81\r\n		dc.w	$8D3F\r\n		dc.w	$8E00\r\n		dc.w	$8F02\r\n		dc.w	$9001\r\n		dc.w	$9100\r\n		dc.w	$9200\r\n		dc.w	$93FF\r\n		dc.w	$94FF\r\n		dc.w	$9500\r\n		dc.w	$9600\r\n		dc.w	$9780\r\nVDPSetupArrayEnd:\r\n\r\n\r\n;---------------------\r\n; Z80 init code\r\n;---------------------\r\n\r\nZ80Init:\r\n	dc.w	$af01, $d91f, $1127, $0021, $2600, $f977 \r\n	dc.w    $edb0, $dde1, $fde1, $ed47, $ed4f, $d1e1                                   \r\n	dc.w    $f108, $d9c1, $d1e1, $f1f9, $f3ed, $5636\r\n	dc.w	$e9e9 \r\nZ80InitEnd:\r\n\r\n;---------------------\r\n; Music driver (z80)\r\n;---------------------		\r\n\r\nZ80Driver:\r\n		dc.b	$c3,$46,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r\n		dc.b	$00,$00,$00,$00,$00,$f3,$ed,$56,$31,$00,$20,$3a,$39,$00,$b7,$ca,$4c,$00,$21,$3a,$00,$11,$40,$00,$01,$06,$00,$ed,$b0,$3e,$00,$32,$39,$00,$3e,$b4,$32,$02,$40,$3e,$c0,$32,$03,$40,$3e,$2b,$32,$00,$40,$3e,$80,$32,$01,$40,$3a,$43,$00,$4f,$3a,$44,$00,$47,$3e,$06,$3d\r\n		dc.b	$c2,$81,$00,$21,$00,$60,$3a,$41,$00,$07,$77,$3a,$42,$00,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$3a,$40,$00,$6f,$3a,$41,$00,$f6,$80,$67,$3e,$2a,$32,$00,$40,$7e,$32,$01,$40,$21,$40,$00,$7e,$c6,$01,$77,$23,$7e,$ce,$00,$77,$23,$7e,$ce,$00,$77\r\n		dc.b	$3a,$39,$00,$b7,$c2,$4c,$00,$0b,$78,$b1,$c2,$7f,$00,$3a,$45,$00,$b7,$ca,$4c,$00,$3d,$3a,$45,$00,$06,$ff,$0e,$ff,$c3,$7f,$00\r\nZ80DriverEnd:\r\n\r\nFont:\r\n		dc.b   0,  0,  0,  0,  0,  0,  0,  0,$7E,$81,$A5,$81,$BD,$99,$81,$7E,$7E,$FF,$DB,$FF,$C3,$E7,$FF,$7E,$6C,$FE,$FE,$FE,$7C,$38,$10,  0,$10,$38,$7C,$FE,$7C,$38,$10,  0,$38,$7C,$38,$FE,$FE,$7C,$38,$7C,$10,$10,$38,$7C,$FE,$7C,$38,$7C,  0,  0,$18,$3C,$3C,$18,  0,  0; 0\r\n		dc.b $FF,$FF,$E7,$C3,$C3,$E7,$FF,$FF,  0,$3C,$66,$42,$42,$66,$3C,  0,$FF,$C3,$99,$BD,$BD,$99,$C3,$FF, $F,  7, $F,$7D,$CC,$CC,$CC,$78,$3C,$66,$66,$66,$3C,$18,$7E,$18,$3F,$33,$3F,$30,$30,$70,$F0,$E0,$7F,$63,$7F,$63,$63,$67,$E6,$C0,$99,$5A,$3C,$E7,$E7,$3C,$5A,$99; 64\r\n		dc.b $80,$E0,$F8,$FE,$F8,$E0,$80,  0,  2, $E,$3E,$FE,$3E, $E,  2,  0,$18,$3C,$7E,$18,$18,$7E,$3C,$18,$66,$66,$66,$66,$66,  0,$66,  0,$7F,$DB,$DB,$7B,$1B,$1B,$1B,  0,$3E,$63,$38,$6C,$6C,$38,$CC,$78,  0,  0,  0,  0,$7E,$7E,$7E,  0,$18,$3C,$7E,$18,$7E,$3C,$18,$FF; 128\r\n		dc.b $18,$3C,$7E,$18,$18,$18,$18,  0,$18,$18,$18,$18,$7E,$3C,$18,  0,  0,$18, $C,$FE, $C,$18,  0,  0,  0,$30,$60,$FE,$60,$30,  0,  0,  0,  0,$C0,$C0,$C0,$FE,  0,  0,  0,$24,$66,$FF,$66,$24,  0,  0,  0,$18,$3C,$7E,$FF,$FF,  0,  0,  0,$FF,$FF,$7E,$3C,$18,  0,  0; 192\r\n		dc.b   0,  0,  0,  0,  0,  0,  0,  0,$30,$30,$30,$30,$30,  0,$30,  0,$6C,$6C,$6C,  0,  0,  0,  0,  0,$6C,$6C,$FE,$6C,$FE,$6C,$6C,  0,$30,$7C,$C0,$78, $C,$F8,$30,  0,  0,$C6,$CC,$18,$30,$66,$C6,  0,$38,$6C,$38,$76,$DC,$CC,$76,  0,$60,$60,$C0,  0,  0,  0,  0,  0; 256\r\n		dc.b $18,$30,$60,$60,$60,$30,$18,  0,$60,$30,$18,$18,$18,$30,$60,  0,  0,$66,$3C,$FF,$3C,$66,  0,  0,  0,$30,$30,$FC,$30,$30,  0,  0,  0,  0,  0,  0,  0,$30,$30,$60,  0,  0,  0,$FC,  0,  0,  0,  0,  0,  0,  0,  0,  0,$30,$30,  0,  6, $C,$18,$30,$60,$C0,$80,  0; 320\r\n		dc.b $7C,$C6,$CE,$DE,$F6,$E6,$7C,  0,$30,$70,$30,$30,$30,$30,$FC,  0,$78,$CC, $C,$38,$60,$CC,$FC,  0,$78,$CC, $C,$38, $C,$CC,$78,  0,$1C,$3C,$6C,$CC,$FE, $C,$1E,  0,$FC,$C0,$F8, $C, $C,$CC,$78,  0,$38,$60,$C0,$F8,$CC,$CC,$78,  0,$FC,$CC, $C,$18,$30,$30,$30,  0; 384\r\n		dc.b $78,$CC,$CC,$78,$CC,$CC,$78,  0,$78,$CC,$CC,$7C, $C,$18,$70,  0,  0,$30,$30,  0,  0,$30,$30,  0,  0,$30,$30,  0,  0,$30,$30,$60,$18,$30,$60,$C0,$60,$30,$18,  0,  0,  0,$FC,  0,  0,$FC,  0,  0,$60,$30,$18, $C,$18,$30,$60,  0,$78,$CC, $C,$18,$30,  0,$30,  0; 448\r\n		dc.b $7C,$C6,$DE,$DE,$DE,$C0,$78,  0,$30,$78,$CC,$CC,$FC,$CC,$CC,  0,$FC,$66,$66,$7C,$66,$66,$FC,  0,$3C,$66,$C0,$C0,$C0,$66,$3C,  0,$F8,$6C,$66,$66,$66,$6C,$F8,  0,$7E,$60,$60,$78,$60,$60,$7E,  0,$7E,$60,$60,$78,$60,$60,$60,  0,$3C,$66,$C0,$C0,$CE,$66,$3E,  0; 512\r\n		dc.b $CC,$CC,$CC,$FC,$CC,$CC,$CC,  0,$78,$30,$30,$30,$30,$30,$78,  0,$1E, $C, $C, $C,$CC,$CC,$78,  0,$E6,$66,$6C,$78,$6C,$66,$E6,  0,$60,$60,$60,$60,$60,$60,$7E,  0,$C6,$EE,$FE,$FE,$D6,$C6,$C6,  0,$C6,$E6,$F6,$DE,$CE,$C6,$C6,  0,$38,$6C,$C6,$C6,$C6,$6C,$38,  0; 576\r\n		dc.b $FC,$66,$66,$7C,$60,$60,$F0,  0,$78,$CC,$CC,$CC,$DC,$78,$1C,  0,$FC,$66,$66,$7C,$6C,$66,$E6,  0,$78,$CC,$E0,$78,$1C,$CC,$78,  0,$FC,$30,$30,$30,$30,$30,$30,  0,$CC,$CC,$CC,$CC,$CC,$CC,$FC,  0,$CC,$CC,$CC,$CC,$CC,$78,$30,  0,$C6,$C6,$C6,$D6,$FE,$EE,$C6,  0; 640\r\n		dc.b $C6,$C6,$6C,$38,$38,$6C,$C6,  0,$CC,$CC,$CC,$78,$30,$30,$78,  0,$FE,  6, $C,$18,$30,$60,$FE,  0,$78,$60,$60,$60,$60,$60,$78,  0,$C0,$60,$30,$18, $C,  6,  2,  0,$78,$18,$18,$18,$18,$18,$78,  0,$10,$38,$6C,$C6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,$FF; 704\r\n		dc.b $30,$30,$18,  0,  0,  0,  0,  0,  0,  0,$78, $C,$7C,$CC,$76,  0,$E0,$60,$60,$7C,$66,$66,$DC,  0,  0,  0,$78,$CC,$C0,$CC,$78,  0,$1C, $C, $C,$7C,$CC,$CC,$76,  0,  0,  0,$78,$CC,$FC,$C0,$78,  0,$38,$6C,$60,$F0,$60,$60,$F0,  0,  0,  0,$76,$CC,$CC,$7C, $C,$F8; 768\r\n		dc.b $E0,$60,$6C,$76,$66,$66,$E6,  0,$30,  0,$70,$30,$30,$30,$78,  0, $C,  0, $C, $C, $C,$CC,$CC,$78,$E0,$60,$66,$6C,$78,$6C,$E6,  0,$70,$30,$30,$30,$30,$30,$78,  0,  0,  0,$CC,$FE,$FE,$D6,$C6,  0,  0,  0,$F8,$CC,$CC,$CC,$CC,  0,  0,  0,$78,$CC,$CC,$CC,$78,  0; 832\r\n		dc.b   0,  0,$DC,$66,$66,$7C,$60,$F0,  0,  0,$76,$CC,$CC,$7C, $C,$1E,  0,  0,$DC,$76,$66,$60,$F0,  0,  0,  0,$7C,$C0,$78, $C,$F8,  0,$10,$30,$7C,$30,$30,$34,$18,  0,  0,  0,$CC,$CC,$CC,$CC,$76,  0,  0,  0,$CC,$CC,$CC,$78,$30,  0,  0,  0,$C6,$D6,$FE,$FE,$6C,  0; 896\r\n		dc.b   0,  0,$C6,$6C,$38,$6C,$C6,  0,  0,  0,$CC,$CC,$CC,$7C, $C,$F8,  0,  0,$FC,$98,$30,$64,$FC,  0,$1C,$30,$30,$E0,$30,$30,$1C,  0,$18,$18,$18,  0,$18,$18,$18,  0,$E0,$30,$30,$1C,$30,$30,$E0,  0,$76,$DC,  0,  0,  0,  0,  0,  0,  0,$10,$38,$6C,$C6,$FE,  0,  0; 960\r\n		dc.b $3C,$66,$C0,$C0,$66,$3C,  8,$18,$28,  0,$CC,$CC,$CC,$CC,$76,  0,  8,$10,$78,$CC,$FC,$C0,$78,  0,$10,$28,$78, $C,$7C,$CC,$76,  0,$28,  0,$78, $C,$7C,$CC,$76,  0,$20,$10,$78, $C,$7C,$CC,$76,  0,$18,$18,$78, $C,$7C,$CC,$76,  0,  0,$78,$CC,$C0,$CC,$78,$10,$30; 1024\r\n		dc.b $10,$28,$78,$CC,$FC,$C0,$78,  0,$28,  0,$78,$CC,$FC,$C0,$78,  0,$20,$10,$78,$CC,$FC,$C0,$78,  0,$28,  0,$70,$30,$30,$30,$78,  0,$10,$28,$70,$30,$30,$30,$78,  0,$10,  8,$70,$30,$30,$30,$78,  0,$28,$30,$78,$CC,$FC,$CC,$CC,  0,$30,$48,$30,$CC,$FC,$CC,$CC,  0; 1088\r\n		dc.b   8,$10,$7E,$60,$78,$60,$7E,  0,  0,  0,$6C,$12,$7E,$90,$7E,  0,$3E,$50,$90,$9C,$F0,$90,$9E,  0,$10,$28,$78,$CC,$CC,$CC,$78,  0,$28,  0,$78,$CC,$CC,$CC,$78,  0,$20,$10,$78,$CC,$CC,$CC,$78,  0,$10,$28,$CC,$CC,$CC,$CC,$76,  0,$20,$10,$CC,$CC,$CC,$CC,$76,  0; 1152\r\n		dc.b $28,  0,$CC,$CC,$CC,$7C, $C,$F8,$28,$7C,$C6,$C6,$C6,$C6,$7C,  0,$28,$C6,$C6,$C6,$C6,$C6,$7C,  0,  0,$10,$78,$CC,$C0,$CC,$78,$10,$38,$44,$40,$F0,$40,$40,$FE,  0,$C3,$66,$3C,$7E,$18,$7E,$18,  0,$FC,$66,$66,$7C,$60,$60,$F0,  0,$1C,$30,$FC,$30,$30,$30,$30,$E0; 1216\r\n		dc.b   8,$10,$78, $C,$7C,$CC,$76,  0,$10,$20,$70,$30,$30,$30,$78,  0,$10,$20,$78,$CC,$CC,$CC,$78,  0,$10,$20,$CC,$CC,$CC,$CC,$76,  0,$32,$4C,$F8,$CC,$CC,$CC,$CC,  0,$32,$4C,$C6,$E6,$D6,$CE,$C6,  0,  0,$38, $C,$3C,$6C,$36,  0,  0,  0,$38,$44,$44,$38,  0,  0,  0; 1280\r\n		dc.b $18,  0,$18,$30,$60,$66,$3C,  0,  0,  0,$FE,$80,$80,  0,  0,  0,  0,  0,$FE,  2,  2,  0,  0,  0,$42,$44,$48,$56,$29,$46,$88,$1F,$42,$44,$48,$56,$2A,$5F,$82,  7,$30,  0,$30,$30,$30,$30,$30,  0,  0,$24,$48,$90,$48,$24,  0,  0,  0,$48,$24,$12,$24,$48,  0,  0; 1344\r\n		dc.b $88,$22,$88,$22,$88,  0,$88,$22,$AA,$55,$AA,$55,$AA,  0,$AA,$55,$77,$DD,$77,$DD,$77,$FF,$77,$DD,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$F0,$10,$10,$10,$10,$10,$10,$F0,$10,$F0,$10,$10,$10,$28,$28,$28,$E8,$28,$28,$28,$28,  0,  0,  0,$F8,$28,$28,$28,$28; 1408\r\n		dc.b   0,  0,$F0,$10,$F0,$10,$10,$10,$28,$28,$E8,  8,$E8,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,  0,  0,$F8,  8,$E8,$28,$28,$28,$28,$28,$E8,  8,$F8,  0,  0,  0,$28,$28,$28,$F8,  0,  0,  0,  0,$10,$10,$F0,$10,$F0,  0,  0,  0,  0,  0,  0,$F0,$10,$10,$10,$10; 1472\r\n		dc.b $10,$10,$10,$1F,  0,  0,  0,  0,$10,$10,$10,$FF,  0,  0,  0,  0,  0,  0,  0,$FF,$10,$10,$10,$10,$10,$10,$10,$1F,$10,$10,$10,$10,  0,  0,  0,$FF,  0,  0,  0,  0,$10,$10,$10,$FF,$10,$10,$10,$10,$10,$10,$1F,$10,$1F,$10,$10,$10,$28,$28,$28,$2F,$28,$28,$28,$28; 1536\r\n		dc.b $28,$28,$2F,$20,$3F,  0,  0,  0,  0,  0,$3F,$20,$2F,$28,$28,$28,$28,$28,$EF,  0,$FF,  0,  0,  0,  0,  0,$FF,  0,$EF,$28,$28,$28,$28,$28,$2F,$20,$2F,$28,$28,$28,  0,  0,$FF,  0,$FF,  0,  0,  0,$28,$28,$EF,  0,$EF,$28,$28,$28,$10,$10,$FF,  0,$FF,  0,  0,  0; 1600\r\n		dc.b $28,$28,$28,$FF,  0,  0,  0,  0,  0,  0,$FF,  0,$FF,$10,$10,$10,  0,  0,  0,$FF,$28,$28,$28,$28,$28,$28,$28,$3F,  0,  0,  0,  0,$10,$10,$1F,$10,$1F,  0,  0,  0,  0,  0,$1F,$10,$1F,$10,$10,$10,  0,  0,  0,$3F,$28,$28,$28,$28,$28,$28,$28,$FF,$28,$28,$28,$28; 1664\r\n		dc.b $10,$10,$FF,$10,$FF,$10,$10,$10,$10,$10,$10,$F0,  0,  0,  0,  0,  0,  0,  0,$1F,$10,$10,$10,$10,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,  0,  0,  0,  0,$FF,$FF,$FF,$FF,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0, $F, $F, $F, $F, $F, $F, $F, $F,$FF,$FF,$FF,$FF,  0,  0,  0,  0; 1728\r\n		dc.b   0,  0,  0,$72,$8C,$88,$3A,  0,$30,$48,$48,$7C,$42,$42,$DC,  0,  0,  0,$FE,$42,$40,$40,$E0,  0,  0,  0,$FE,$44,$44,$44,$EE,  0,$FE,$42,$20,$10,$20,$42,$FE,  0,  0,  0,  0,$3E,$44,$44,$38,  0,  0,  0,$CC,$44,$44,$44,$7A,$40,  0,  0,$7C,$10,$10,$10,$1C,  0; 1792\r\n		dc.b   0,$10,$7C,$92,$92,$7C,$10,  0,  0,  0,$7C,$82,$BA,$82,$7C,  0,  0,$7C,$82,$82,$6C,$28,$EE,  0,  0,$7C,$20,$38,$44,$44,$38,  0,  0,  0,$6C,$92,$92,$6C,  0,  0,  0,  0,$4C,$92,$92,$7C,$10,  0,  0,  0,$3C,$40,$30,$40,$3C,  0,  0,  0,$3C,$42,$42,$42,$42,  0; 1856\r\n		dc.b   0		; 1920\r\n\r\nRomEnd:\r\n',29,3),(33,4,NULL,'<b style=\\\'color: #ff0000\\\'>Please note: this guide has been written in 2003-2004, when I was learning the intricacies of Megadrive programming. As a result, there are some errors in some pages and in some sample source code. I advise caution when using this guide. Also, my English language... prowess wasn\\\'t that great back then so forgive the bad grammar.\r\n\r\nSomewhere on my to-do list is a complete rewrite of this section and a much better MD reference, but until then, I\\\'m keeping this online. And for nostalgia, of course. <i>(Note added in 2009)</i></b>\r\n\r\nWelcome to my 68k programming guide. You will learn about the basics (adding, substracting etc.) as well as more exciting things, like editing objects in Sonic engine or even programming your own ones =P\r\n\r\n<b>REMEMBER:</b> If you don\\\'t understand something, you are lost, you have comments or you\\\'ve seen some errors (hmmm =P), post it on the forums. I\\\'ll not only help you, but I\\\'ll improve and make my guides better (I know they aren\\\'t great XD). And one note: Don\\\'t worry if you don\\\'t understand something, it\\\'s not the end of the world. This is assembly, it\\\'s not easy...\r\n\r\nHave fun =)',18,1),(34,4,NULL,'More to come...\r\n\r\nEveryting is &copy; me, so please just tell me if you want to copy/steal/whatever anything from here. Thanks in advance.\r\n\r\nThanks to:\r\n- <a href=\"http://cgfm2.emuviews.com\">Charles MacDonald</a> (great docs),\r\n- <a href=\"http://www.trzy.org/\">Bart Trzynadlowski</a> (great 68k disassembler),\r\n- Jimmy Mardell (an old 68k guide),\r\n- <a href=\"http://gens.consolemul.com/\">St?phane Dallongeville</a> (great smd emu)',18,7),(79,2,'Lost sprites of Sonic 2 Beta','<h2>Lost sprites of Sonic 2 Beta:</h2>\r\n*Submitted by Sonic Hachelle-Bee on June 26 2005.*\r\n\r\n<h3>Restore the lost badnicks from Sonic 2 Beta:</h3>\r\nHere, I will explain how to restore the lost sprites from Sonic 2 Beta to Sonic 2 Final or Sonic 2 & Knuckles.\r\nInstead of using the Esrael patch to restore them (as usual), I will explain how to make that task manually with only an hex editor.\r\nWe will restore the batbot, the dinobot, the trycerobot, the crocobot, and the snailbot sprites.\r\n\r\n<h4>The sprites code pointer table:</h4>\r\nIn both Sonic 2 Beta and Sonic 2 Final, you have a sprites code pointer table where all pointers for the code of each sprite are stored in a certain order.\r\n\r\nSonic 2 Beta sprites code pointer table: $D01A\r\nSonic 2 Final sprites code pointer table: $1600C\r\nSonic 2 & Knuckles sprites code pointer table: $3128FA\r\n\r\nThis huge table start with a first pointer of 4 bytes. This is the absolute address for the sprite ID $00 code. This is the Sonic sprite. Then, the second pointer of 4 bytes is the absolute address for the sprite ID $01 code, and that\'s the Tails sprite. Then, for each sprite ID, you have a pointer in order to jump to the right object code.\r\n\r\nSeveral pointers in this table refers to nothing (the end of the table at $1637C). It\'s said that they are leftovers of some sprites you can see in earlier versions of Sonic 2. We will use these pointers to create our new sprites. As Sonic 2 Beta, and as Esrael patch, we will do this:\r\n\r\nThe batbot is ID $4C.\r\nThe trycerobot is ID $4D.\r\nThe crocobot is ID $4E.\r\nThe dinobot is ID $4F.\r\nThe snailbot is ID $62.\r\n\r\nAll these sprites ID are usually empty, and we will use them for our sprites.\r\n\r\nFor example, in Sonic 2 Final, the pointer that jumps to the batbot code is at $16138 and it\'s currently 00 01 63 7C (empty). The one for the trycerobot is next, and it\'s again 00 01 63 7C. You will have to change these pointers at the end, once you have your objects code in the ROM file.\r\n\r\n<h4>Lost sprites code:</h4>\r\nYou have, for each sprite, to copy their code from Sonic 2 Beta and paste it somewhere in the Sonic 2 Final or Sonic 2 & Knuckles ROM file. Here is the addresses where to copy these sprites from the Sonic 2 Beta ROM file:\r\n\r\nFor the most lazy ones, I have done that boring part for you: <a href=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Sonic2-001.zip\">click here</a> for Sonic 2 or <a href=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Sonic2-002.zip\">here</a> for Sonic 2 & Knuckles.\r\n\r\nBatbot: $1EE68 - $1F2EE\r\nTrycerobot: $1D984 - $1DC52\r\nCrocobot: $1F2F0 - $1F5E8\r\nDinobot: $1DEAC - $1E00E\r\nSnailbot: $1F6E8 - $1F99C and $1EAF2 - $1EB8C\r\nFor the snailbot, paste the second part (animated fire) after the first (main) part. The result is $34E bytes in size.\r\n\r\nNow, you can change your pointers in the sprites code pointer table to jump at each objects code.\r\n\r\n<h4>Pointers to fix in each objects code:</h4>\r\nNow that you copied the sprites codes from Sonic 2 Beta, we need to change some pointers into them. That\'s right, every pointer in the sprites codes are wrong and have to be updated to the right addresses from the final version of Sonic 2. This way, the game will use the right routines of Sonic 2 Final in replacement. In order to see where are these pointers to change, we will say that every sprite code start at address $0.\r\n\r\nThis is an extremely boring part, and then, for the most lazy ones, if you previously downloaded the zip archive to get the sprites codes, you will be happy to see that most pointers are already fixed! Some others however need to be fixed manually, because they are relative to the place you pasted the code. Just fix the pointers listed in <span style=\"color: rgb(68, 102, 68);\">green</span> color below.\r\n\r\n<table style=\"text-align: left; width: 100%;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Sprite</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Address of the pointer to fix</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Pointer to fix</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">New pointer</td></tr><tr><td style=\"background-color: rgb(0, 34, 0);\" align=\"center\" valign=\"middle\">Sonic 2</td><td style=\"background-color: rgb(0, 34, 0);\" align=\"center\" valign=\"middle\">Sonic 2 & Knuckles</td></tr><tr><td colspan=\"1\" rowspan=\"9\" align=\"center\" valign=\"middle\">Batbot</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$14</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">21 7C 00 01 F1 06</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $29E<br>Data at this address: 00 1E 00 40 00 62 ...</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$64</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 F0 D2</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $26A<br>Data at this address: 00 08 00 0C 00 1B ...</td></tr><tr><td align=\"center\" valign=\"middle\">$7C</td><td align=\"center\" valign=\"middle\">4E B9 00 00 32 0A</td><td align=\"center\" valign=\"middle\">4E B9 00 00 33 B6</td><td align=\"center\" valign=\"middle\">4E B9 00 30 2F 10</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$D0</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 F0 D2</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $26A<br>Data at this address: 00 08 00 0C 00 1B ...</td></tr><tr><td align=\"center\" valign=\"middle\">$1C2</td><td align=\"center\" valign=\"middle\">4E B9 00 00 32 0A</td><td align=\"center\" valign=\"middle\">4E B9 00 00 33 B6</td><td align=\"center\" valign=\"middle\">4E B9 00 30 2F 10</td></tr><tr><td align=\"center\" valign=\"middle\">$1EC</td><td align=\"center\" valign=\"middle\">4E B9 00 00 31 E4</td><td align=\"center\" valign=\"middle\">4E B9 00 00 33 90</td><td align=\"center\" valign=\"middle\">4E B9 00 30 2E EA</td></tr><tr><td align=\"center\" valign=\"middle\">$474</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 A0</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 D2</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C C0</td></tr><tr><td align=\"center\" valign=\"middle\">$47A</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D4 12</td><td align=\"center\" valign=\"middle\">4E F9 00 01 65 44</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D D0</td></tr><tr><td align=\"center\" valign=\"middle\">$480</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 7A</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 AC</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 9A</td></tr><tr><td colspan=\"1\" rowspan=\"7\" align=\"center\" valign=\"middle\">Trycerobot</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$12</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">21 7C 00 01 DA EE</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $16A<br>Data at this address: 00 10 00 3A 00 64 ...</td></tr><tr><td align=\"center\" valign=\"middle\">$48</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$70</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 DA D2</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $14E<br>Data at this address: 00 06 00 14 00 17 ...</td></tr><tr><td align=\"center\" valign=\"middle\">$AE</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td align=\"center\" valign=\"middle\">$2BC</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 A0</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 D2</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C C0</td></tr><tr><td align=\"center\" valign=\"middle\">$2C2</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D4 12</td><td align=\"center\" valign=\"middle\">4E F9 00 01 65 44</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D D0</td></tr><tr><td align=\"center\" valign=\"middle\">$2C8</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 4E</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 80</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 6E</td></tr><tr><td colspan=\"1\" rowspan=\"8\" align=\"center\" valign=\"middle\">Crocobot</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$12</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">21 7C 00 01 F4 20</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $130<br>Data at this address: 00 18 00 3A 00 5C ...</td></tr><tr><td align=\"center\" valign=\"middle\">$48</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$70</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 F4 06</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $116<br>Data at this address: 00 06 00 0E 00 11 ...</td></tr><tr><td align=\"center\" valign=\"middle\">$AE</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td align=\"center\" valign=\"middle\">$2E0</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 A0</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 D2</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C C0</td></tr><tr><td align=\"center\" valign=\"middle\">$2E6</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D4 12</td><td align=\"center\" valign=\"middle\">4E F9 00 01 65 44</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D D0</td></tr><tr><td align=\"center\" valign=\"middle\">$2EC</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 4E</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 80</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 6E</td></tr><tr><td align=\"center\" valign=\"middle\">$2F2</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 7A</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 AC</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 9A</td></tr><tr><td colspan=\"1\" rowspan=\"9\" align=\"center\" valign=\"middle\">Dinobot</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$14</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">21 7C 00 01 DF CA</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $11E<br>Data at this address: 00 06 00 10 00 1A ...</td></tr><tr><td align=\"center\" valign=\"middle\">$4A</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$78</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 DF BC</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $110<br>Data at this address: 00 04 00 07 09 01 ...</td></tr><tr><td align=\"center\" valign=\"middle\">$DC</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td align=\"center\" valign=\"middle\">$144</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D3 C2</td><td align=\"center\" valign=\"middle\">4E F9 00 01 64 F4</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D 80</td></tr><tr><td align=\"center\" valign=\"middle\">$14A</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D3 B4</td><td align=\"center\" valign=\"middle\">4E F9 00 01 64 E6</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D 72</td></tr><tr><td align=\"center\" valign=\"middle\">$150</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D4 12</td><td align=\"center\" valign=\"middle\">4E F9 00 01 65 44</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D D0</td></tr><tr><td align=\"center\" valign=\"middle\">$156</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 4E</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 80</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 6E</td></tr><tr><td align=\"center\" valign=\"middle\">$15C</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 7A</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 AC</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 9A</td></tr><tr><td colspan=\"1\" rowspan=\"15\" align=\"center\" valign=\"middle\">Snailbot</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$18</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">21 7C 00 01 F9 38</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $250<br>Data at this address: 00 06 00 18 00 2A ...</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$60</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">23 7C 00 01 F9 38</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $250<br>Data at this address: 00 06 00 18 00 2A ...</td></tr><tr><td align=\"center\" valign=\"middle\">$C0</td><td align=\"center\" valign=\"middle\">4E B9 00 01 38 98</td><td align=\"center\" valign=\"middle\">4E B9 00 01 ED FA</td><td align=\"center\" valign=\"middle\">4E B9 00 31 91 02</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$D6</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 F9 2C</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $244<br>Data at this address: 00 04 00 08 05 00 ...</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$F2</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 F9 2C</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $244<br>Data at this address: 00 04 00 08 05 00 ...</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$156</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">23 7C 00 01 EB 0E</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $2D0<br>Data at this address: 00 0E 00 20 00 3A ...</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$1D6</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">43 F9 00 01 EA F2</td><td style=\"background-color: rgb(34, 68, 34);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Sprite code internal pointer<br>Must jump to $2B4<br>Data at this address: 00 08 00 0B 00 0F ...</td></tr><tr><td align=\"center\" valign=\"middle\">$284</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D3 B4</td><td align=\"center\" valign=\"middle\">4E F9 00 01 64 E6</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D 72</td></tr><tr><td align=\"center\" valign=\"middle\">$28A</td><td align=\"center\" valign=\"middle\">4E F9 00 00 E7 88</td><td align=\"center\" valign=\"middle\">4E F9 00 01 7F FA</td><td align=\"center\" valign=\"middle\">4E F9 00 31 3D 8E</td></tr><tr><td align=\"center\" valign=\"middle\">$290</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D4 12</td><td align=\"center\" valign=\"middle\">4E F9 00 01 65 44</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D D0</td></tr><tr><td align=\"center\" valign=\"middle\">$296</td><td align=\"center\" valign=\"middle\">4E F9 00 00 DC 4C</td><td align=\"center\" valign=\"middle\">4E F9 00 01 6D 8A</td><td align=\"center\" valign=\"middle\">4E F9 00 21 6D 8A</td></tr><tr><td align=\"center\" valign=\"middle\">$29C</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D3 40</td><td align=\"center\" valign=\"middle\">4E F9 00 01 64 72</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2D 44</td></tr><tr><td align=\"center\" valign=\"middle\">$2A2</td><td align=\"center\" valign=\"middle\">4E F9 00 00 DC 30</td><td align=\"center\" valign=\"middle\">4E F9 00 01 6D 6E</td><td align=\"center\" valign=\"middle\">4E F9 00 21 6D 6E</td></tr><tr><td align=\"center\" valign=\"middle\">$2A8</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 4E</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 80</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 6E</td></tr><tr><td align=\"center\" valign=\"middle\">$2AE</td><td align=\"center\" valign=\"middle\">4E F9 00 00 D2 7A</td><td align=\"center\" valign=\"middle\">4E F9 00 01 63 AC</td><td align=\"center\" valign=\"middle\">4E F9 00 31 2C 9A</td></tr></tbody></table>\r\n\r\n<h4>Pallet and VRAM position to fix for each object code:</h4>\r\nNow, we need to fix their respective pallet line to use and VRAM position where the graphics will be loaded. Again, we will change something in the sprites codes.\r\n\r\nAll sprites that need a pallet and graphics have a 2 bytes value loaded into a register. This 2 bytes value tells the pallet line to use and the VRAM position for the graphics:\r\n\r\nPV VV\r\n\r\nP - Pallet line to use (0, 1, 2 or 3).\r\nV - VRAM location where to load graphics. Actually, to obtain the exact 4 nybbles address, you have to take these 3 nybbles and multiply them by $20.\r\n\r\nHopefully, I have once again fixed all that myself in the files that are in the zip archive. You just have to pay attention on one thing listed in <span style=\"color: rgb(68, 102, 68);\">green</span> color, because for some odd reasons, some emulators won\'t display the sprite of the snailbot properly, while others will.\r\n\r\nHere is where and how to change everything for our sprites. Notice how the snailbot has 3 different parts (shell, body, and the animated fire):\r\n\r\n<table style=\"text-align: left; width: 100%;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Sprite</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Address of the string to fix</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Initial string value</td><td style=\"background-color: rgb(0, 34, 0);\" colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">New string value</td></tr><tr><td style=\"background-color: rgb(0, 34, 0);\" align=\"center\" valign=\"middle\">Sonic 2</td><td style=\"background-color: rgb(0, 34, 0);\" align=\"center\" valign=\"middle\">Sonic 2 & Knuckles</td></tr><tr><td colspan=\"1\" rowspan=\"1\" align=\"center\" valign=\"middle\">Batbot</td><td align=\"center\" valign=\"middle\">$1C</td><td align=\"center\" valign=\"middle\">31 7C 25 30</td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">31 7C 23 B2<br></td></tr><tr><td colspan=\"1\" rowspan=\"1\" align=\"center\" valign=\"middle\">Trycerobot</td><td align=\"center\" valign=\"middle\">$1A</td><td align=\"center\" valign=\"middle\">31 7C 23 C4</td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">31 7C 23 A0<br></td></tr><tr><td align=\"center\" valign=\"middle\">Crocobot</td><td align=\"center\" valign=\"middle\">$1A</td><td align=\"center\" valign=\"middle\">31 7C 23 00<br></td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">31 7C 25 00</td></tr><tr><td colspan=\"1\" rowspan=\"1\" align=\"center\" valign=\"middle\">Dinobot</td><td align=\"center\" valign=\"middle\">$1C</td><td align=\"center\" valign=\"middle\">31 7C 05 00</td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">Nothing to change here<br></td></tr><tr><td colspan=\"1\" rowspan=\"3\" align=\"center\" valign=\"middle\">Snailbot</td><td align=\"center\" valign=\"middle\">$20 (body)</td><td align=\"center\" valign=\"middle\">31 7C 04 02</td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">31 7C 05 4E</td></tr><tr><td align=\"center\" valign=\"middle\">$68 (shell)</td><td align=\"center\" valign=\"middle\">33 7C 24 02</td><td colspan=\"2\" rowspan=\"1\" align=\"center\" valign=\"middle\">33 7C 25 4E</td></tr><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">$15E (animated fire)</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">33 7C 03 E6</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">33 7C 03 D2</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">General case:<br>33 7C 03 D2<br>With some emulators:<br>33 7C 07 A4</td></tr></tbody></table>\r\n\r\n<h4>Sprites graphics and pattern load cues:</h4>\r\nNow that we tell the game which pallet line to use and where are located the graphics to load from the VRAM, we have to actually load these graphics in VRAM, by decompressing what\'s already in the ROM file in Nemesis format. In order to make that, we will use the pattern load cues of the Sonic engine: they will do the work done for you.\r\n\r\nFirst, we have to find the original graphics (compressed in Nemesis format) in the Sonic 2 Beta ROM file, and copy them into Sonic 2 Final (or Sonic 2 & Knuckles). Here are the locations for each sprite:\r\n\r\nBatbot: $7A6A2\r\nTrycerobot: $7AD18\r\nCrocobot: $7A11A\r\nDinobot: $7B114\r\nSnailbot: $7C514\r\n\r\nFor the most lazy ones (and because it\'s faster), here is the archive that contains all these graphics: <a href=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Sonic2-003.zip\">click here</a>.\r\n\r\nNow, all you need to do is to edit the pattern load cues of the levels in which you want the sprites to appear. <a href=\"http://www.hacking-cult.org/?r/4/63\">Here</a> is the article that explains how things works. You have the graphics absolute addresses (it\'s the one where you pasted the graphics in Sonic 2 Final or Sonic 2 & Knuckles). Now, you need the VRAM position where to load these graphics in VRAM. Accordingly to every fixes we have done before, here is the VRAM position where to load the graphics for each sprite, in order to display them correctly on screen:\r\n\r\nBatbot: $7640\r\nTrycerobot: $7400\r\nCrocobot: $A000\r\nDinobot: $A000\r\nSnailbot: $7A40\r\nThe wasp graphics must be loaded just before it, for the animated fire.\r\n\r\n<h4>Specific case for the snailbot:</h4>\r\nThe snailbot is a more complex sprite than the others as you can see. There is another thing to do if you want your sprite to display on screen. Actually, the old sprite ID for the snailbot of Sonic 2 Beta is $54 and not $62. Because of this, we will have to change directly some extra bytes in the sprite code. If you have previously downloaded the archive, then there is no further problem for you, you have finished. Else, here is the addresses where to change these bytes in the snailbot sprite code:\r\n\r\n<table style=\"text-align: left; width: 100%;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">Address of the byte to change</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">Previous data</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">New data</td></tr><tr><td align=\"center\" valign=\"middle\">$54</td><td align=\"center\" valign=\"middle\">13 7C 00 54</td><td align=\"center\" valign=\"middle\">13 7C 00 62</td></tr><tr><td align=\"center\" valign=\"middle\">$14A</td><td align=\"center\" valign=\"middle\">13 7C 00 54</td><td align=\"center\" valign=\"middle\">13 7C 00 62</td></tr><tr><td align=\"center\" valign=\"middle\">$1A6</td><td align=\"center\" valign=\"middle\">0C 11 00 54</td><td align=\"center\" valign=\"middle\">0C 11 00 62</td></tr><tr><td align=\"center\" valign=\"middle\">$220</td><td align=\"center\" valign=\"middle\">0C 11 00 54</td><td align=\"center\" valign=\"middle\">0C 11 00 62</td></tr></tbody></table>\r\n\r\nThis put an end of this dreadful tutorial. Phew! ^_^',66,1),(37,1,'Art editing',NULL,14,2),(38,2,'Chaotix 32x art format','<b>Header:</b>\r\n0x00 (word) - X start of the art\r\n0x02 (word) - X end of the art (shifted right by 2, substracted by one) - x2=(end>>2)-1\r\n0x04 (word) - Y start\r\n0x06 (word) - Y end\r\n\r\nNow, until the counter reaches the final line, the following is looped:\r\nHeader:\r\n0x00 (byte) - X start of the line\r\n0x01 (byte) - length of the line (shifted right by 2)\r\n0x02 (word) - line number\r\n\r\nAfter that, there are bytes. Each byte corresponds to one pixel. The SH2 code adds $13 (or something different, depending on the need) to each byte. That final value points to a CRAM color. Simple as that.\r\n\r\nThe art should end with a 0x0000 at an even address.',37,1),(39,4,NULL,'Exploring Knuckles Chaotix... The least hacked game of all Sonic games. And probably the most difficult to hack. That\\\'s why I\\\'m doing this.',14,1),(40,3,'Chaotix 32x Art Viewer','./chaotix/',37,2),(41,4,NULL,'\r\n\r\n\r\n<b>Quick guide to Art Viewer:</b>\r\n\r\nhttp://www.hacking-cult.org/chaotix/?offid=XXX&patid=YYY&palid=ZZZ\r\n\r\nXXX - Offset index. The 32x VDP patterns in Chaotix are stored in\r\nan offset array. Putting 0-7 will show character art. Putting further\r\nvalues will probably show something different =P\r\n\r\nYYY - Pattern index. The patterns are divided into sections called frames =P This index is the frame number\r\n\r\nZZZ - Palette offset (hex)\r\n\r\nYou can skip those values. The script will assume Mighty\\\'s values.\r\n\r\nExamples:\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/\\\">Mighty</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&amp;offid=7&amp;paloff=2292Dc\\\">Espio</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&amp;offid=4&amp;paloff=22925c\\\">Vector</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=1&amp;offid=1\\\">The famous Wechnia</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=1&amp;offid=1&amp;paloff=22923E\\\">Wechnia with Knuckles\\\' palettes</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&amp;offid=2&amp;paloff=22923E\\\">Knuckles</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=1&amp;offid=3&amp;paloff=22927e\\\">Charmy the Bee</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&amp;offid=5&amp;paloff=2292A2\\\">Bomb</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&amp;offid=6&amp;paloff=2292be\\\">Heavy</a>\r\n<a href=\\\"http://www.hacking-cult.org/chaotix/?patid=0&offid=7&paloff=2292be\\\">Espio looks awesome in Heavy\\\'s palette</a>\r\n',14,3),(42,4,NULL,'delete this text after you add some content',20,1),(43,4,NULL,'delete this text after you add some content',1,1),(44,4,NULL,'delete this text after you add some content',12,1),(45,4,NULL,'delete this text after you add some content',3,1),(47,4,NULL,'delete this text after you add some content',7,1),(48,4,NULL,'delete this text after you add some content',8,1),(49,4,NULL,'delete this text after you add some content',21,1),(50,4,NULL,'delete this text after you add some content',10,1),(51,4,NULL,'delete this text after you add some content',22,1),(52,4,NULL,'test',23,1),(54,1,'Art and graphics editing',NULL,4,2),(57,2,'Palletes and palletes addresses','<h2>Palletes and palletes addresses:</h2>\r\n*Submitted by Weird Person on May 21 2005.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\n<h3>The pallete format:</h3>\r\nHere are my notes about how palletes work on Sega Genesis, and where are the palletes in the Sonic 2 ROM.\r\n\r\nFirst, what is a pallete? A pallete for the Genesis means 64 colors or 4 lines of 16 colors each. Each color is represented by a word in the ROM file. It\\\'s easy to understand it, look at the following word in bits:\r\n\r\n0000 <font color=\\\"blue\\\">BBB</font>0 <font color=\\\"green\\\">GGG</font>0 <font color=\\\"red\\\">RRR</font>0\r\n\r\nThe \\\"B\\\" means the <span style=\\\"color: rgb(0, 0, 255);\\\">blue</span> intense.\r\nThe \\\"G\\\" means the <span style=\\\"color: rgb(0, 128, 0);\\\">green</span> intense.\r\nThe \\\"R\\\" means the <span style=\\\"color: rgb(255, 0, 0);\\\">red</span> intense.\r\n\r\nWhat that means? For example, if you want the lighter red, you will have to have no blue intense, and no green intense, but you will need the red intense. So, the word will have to be the following:\r\n\r\n0<font color=\\\"blue\\\">0</font><font color=\\\"green\\\">0</font><font color=\\\"red\\\">E</font>\r\n\r\nWith this word, you get the lighter red possible.\r\n\r\nIf the color value is high, the color will be lighter. If the color value is low, the color will be darker.\r\n\r\nFor example, if you want a purple color, you will need to mix some blue with red. Look:\r\n\r\n0<font color=\\\"blue\\\">E</font><font color=\\\"green\\\">0</font><font color=\\\"red\\\">E</font>\r\n\r\nThe color above is the lighter purple.\r\n\r\nWhile editing colors with your favourite hex editor, you don\\\'t need really to convert your color values in bits first. You can edit directly the hex value, but only even values are accepted from 0 to E. Another thing: the first nybble is usually 0. You can write anything else for this nybble, this won\\\'t change anything at all.\r\n\r\n<h3>The pallete addresses:</h3>\r\nThere is an offset index for most pallets in the game. It\\\'s located at $2782.\r\n\r\nFor each pallet, you have 4 bytes for the absolute address in the ROM, 2 bytes for the address in RAM (where to load the pallet) and 2 bytes for the number of colors to load in this RAM address.\r\n\r\nNow, see the offsets for each pallet, and for what each pallet is used for:\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"> <tbody><tr>  <td style=\\\"background-color: rgb(034, 068, 034);\\\" align=\\\"center\\\" valign=\\\"middle\\\">ID</td><td style=\\\"background-color: rgb(034, 068, 034);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pallet absolute address</td>  <td style=\\\"background-color: rgb(034, 068, 034);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Number of colors</td>  <td style=\\\"background-color: rgb(034, 068, 034);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Description</td></tr><tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2246</td><td align=\\\"center\\\" valign=\\\"middle\\\">24 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Sonic to Super Sonic fading pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2276</td><td align=\\\"center\\\" valign=\\\"middle\\\">40 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Super Sonic rotating pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2346</td><td align=\\\"center\\\" valign=\\\"middle\\\">24 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Sonic to Super Sonic underwater fading pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2376</td><td align=\\\"center\\\" valign=\\\"middle\\\">40 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Super Sonic underwater rotating pallet</td></tr> <tr>  <td align=\\\"center\\\" valign=\\\"middle\\\">00</td><td align=\\\"center\\\" valign=\\\"middle\\\">$28C2</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">Sega logo pallet</td></tr><tr>  <td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$28E2</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">Sega logo \\\"SEGA\\\" pallet</td></tr><tr>  <td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2902</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">Sega logo \\\"Sonic\\\" pallet</td></tr><tr>  <td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$2922</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td>  <td align=\\\"center\\\" valign=\\\"middle\\\">Sega logo pallet (unused?)</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">01</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2942</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Title screen \\\"Tails\\\" pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">03</td><td align=\\\"center\\\" valign=\\\"middle\\\">$29E2</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Sonic and Tails pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">04</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2A22</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Emerald Hill zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">06</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2A82</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Wood zone pallet (unused)</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">08</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2AE2</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Metropolis zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">0A</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2B42</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Wing Fortress zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">0B</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2BA2</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Hill Top zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">0C</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2C02</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Hidden Palace zone pallet (unused)</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">0E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2CE2</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Oil Ocean zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">0F</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2D42</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Mystic Cave zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">10</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2DA2</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Casino Night zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">11</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2E02</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Chemical Plant zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">12</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2EE2</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Death Egg zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">13</td><td align=\\\"center\\\" valign=\\\"middle\\\">$2F42</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Aquatic Ruin zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">14</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3022</td><td align=\\\"center\\\" valign=\\\"middle\\\">48 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Sky Chase zone pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">18</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3162</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Main Special Stage pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$3182</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Special Stage \\\"Sonic\\\" pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$31A2</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Special Stage \\\"Tails\\\" pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">1B</td><td align=\\\"center\\\" valign=\\\"middle\\\">$31C2</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">1st Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">1C</td><td align=\\\"center\\\" valign=\\\"middle\\\">$31E2</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">2nd Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">1D</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3202</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">3rd Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">1E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3222</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">4th Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">1F</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3242</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">5th Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">20</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3262</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">6th Special Stage pallet</td></tr> <tr><td align=\\\"center\\\" valign=\\\"middle\\\">21</td><td align=\\\"center\\\" valign=\\\"middle\\\">$3282</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">7th Special Stage pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$133EC</td><td align=\\\"center\\\" valign=\\\"middle\\\">16 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Title screen \\\"Sonic\\\" pallet</td></tr> <tr><td></td><td align=\\\"center\\\" valign=\\\"middle\\\">$1340C</td><td align=\\\"center\\\" valign=\\\"middle\\\">32 colors</td><td align=\\\"center\\\" valign=\\\"middle\\\">Title screen pallet</td></tr></tbody></table>\r\n\r\nMore pallets will be added soon...',54,1),(59,2,'Pattern Load Cues','I\\\'ll try to explain it as simply as i can, although it\\\'s not too complicated anyway. The only complications that can occur, are the overwriting of other data, due to a crossover in VRAM addresses. This is all really based on trial and error.\r\n\r\n*Credit to Rika Chou for this info, submitted by StephenUK*\r\n\r\nTo edit pattern load cues:\r\n\r\nGo to $042736. Here you will see:\r\n\r\n<font color=#00FF00>0005</font> <font color=#ff0000>000F 02D6</font> <font color=#0000FF>73C0</font> <font color=#ff0000>000F 052A</font> <font color=#0000FF>76C0</font> <font color=#ff0000>000F 0160</font> <font color=#0000FF>77C0</font> <font color=#ff0000>0008 316A</font> <font color=#0000FF>7A40</font> <font color=#ff0000>0008 A87A</font> <font color=#0000FF>7DC0</font> <font color=#ff0000>0008 39EA</font> <font color=#0000FF>8280</font>\r\n\r\nThis is the first set of load cues used for EHZ.\r\n\r\nGREEN = NUMBER OF LOAD CUES\r\nRED = ART ADDRESS\r\nBLUE = VRAM ADDRESS\r\n\r\nThe \\\"0005\\\" is simply how many pattern load cues there are in this group. In this case, it\\\'s 6. (0,1,2,3,4,5)\r\n\r\nThe \\\"000F 02D6 73C0\\\" is the first load cue. The \\\"000F 02D6\\\" is the address of the art tiles to load. The \\\"73C0\\\" is the location in the VRAM where you want to load this art.\r\n\r\nSo, for example, when you see \\\"000F 02D6 73C0\\\" it means it will load EHZ waterfall tiles to 73C0 in the VRAM.\r\n\r\nThat\\\'s the best way that I can explain it. Just make sure that you don\\\'t cross over any of the VRAM locations, otherwise the patterns won\\\'t load.',58,1),(64,1,'Mapping and level layout editing',NULL,4,3),(65,1,'Text editing',NULL,4,5),(66,1,'Sprites and technical editing',NULL,4,4),(67,1,'Music editing',NULL,4,6),(68,1,'Miscellaneous',NULL,4,7),(80,2,'The Sonic music hacking guide','<h2>The Sonic music hacking guide:</h2>\r\n*Created by Tweaker on May 25 2005.*\r\n*Thanks to Saxman and fuzzbuzz.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\nThis guide will teach, even the complete clueless individual, how to edit the music in the Sonic the Hedgehog games for the Sega Mega Drive. Be warned however: you must have at least basic hex knowledge. If you have no idea what hex is, then I suggest you steer clear of this guide and figure things out first.\r\n\r\n<h3>Update history:</h3>\r\nMarch 29 2005: Initial release.\r\n\r\nApril 22 2005: Updated Chaotix info. Also added explanation on Sonic 2 Final pointer format and corrected a few bits of incorrect info. Turns out you CAN use 6 FM channels and the DAC at the same time, thanks to the music engine.\r\n\r\nMay 24 2005: Updated with even more Sonic 2 Final info. Also added music pointer locations for Ristar and Micheal Jackson\\\'s Moonwalker.\r\n\r\n<h3>Pointer format:</h3>\r\nFirst off, what is a pointer? Well, a pointer is a set of hexadecimal values that point to a location in the ROM (or, in other cases, RAM. More advanced stuff there though). There are different types of pointers.\r\n\r\nSome are part of an offset index. These kinds of data pointers are usually 16-bits (2 bytes) long and are determined by adding the pointer value to the current location in the ROM (program counter). So if one offset index added to $80000, and a pointer read $0890, then it is reading offset $80890, which would be the location of the data it is looking for.\r\n\r\nOther pointers are very basic. 32-bit pointers are the easiest to deal with. They are big endian when dealing with the Megadrive and define the exact location using four bytes. So let\\\'s use the previous example. Our location was $80890. The pointer appears as \\\"00 08 08 90\\\". Couldn\\\'t be any simpler.\r\n\r\nThe pointer format in the Sonic games music differs from game to game. I will list the pointer format for each incarnation of the music engine. Follow along.\r\n\r\n<h4>Sonic 1, Ristar, and Moonwalker:</h4>\r\nThese pointers are relatively easy to deal with. These pointers are like the offset index pointers talked about earlier. They are relative 16-bit pointers that add the pointer value to the current location in the ROM. Here is an example:\r\n\r\nLet\\\'s say that the music data started at $EC000. Now, our voice pointer says $0180. So, from $EC000 we add $180 to the value, making the location of the voice data at $EC180. You see? That is simple. There are some other things to note about these pointers that I will mention later that have to do with coordination flags.\r\n\r\n<h4>Sonic 2 Beta, 3, Crackers, Chaotix and 3D:</h4>\r\nThese pointers are also pretty easy to deal with, once you understand their format. These pointers are also 16-bit, but they are absolute pointers. This means that they add to a specified location, which is usually even. Now, what you must understand is that these pointers are little endian, because the sound driver runs on the Z80. Little endian simply means that the bytes are swapped. A good example would be if a location was $8180 (big endian) for voice data, the pointer would read $8081 (little endian). This may seem confusing at first, but I will explain further.\r\n\r\nYou see, these pointers always read \\\"8000\\\", regardless of the starting location. So if the starting location of the music was $C0000 for one song, and the starting location of another was $C8000, the resulting pointer would still be $0080. You see, 8000 bytes is one music bank. So when 8000 bytes are used up by the first bank of music data, the second set of music pointers will add to that second bank location. So if the first bank\\\'s location was $C0000, and the second was $C8000, then the first set of pointers would add to $C0000, and the second to $C8000. Not too complicated. So lets break things down now.\r\n\r\nLets say the voice pointer for one song was $F289. Since these are little endian, swap the bytes. This makes $89F2. Now, lets say that the current bank adds to $C8000. So we can deduce that the location of the voice data is $C89F2. You get it now? It is easier to find things with these pointers, but it becomes a bit of a problem if you are porting music, since you have to either put the music in its \\\"original\\\" location or fix all the pointers in the song.\r\n\r\n<h4>Sonic 2 Final:</h4>\r\nAll pointers add to a certain constant, including those in coordination flags. This constant is $1380. With these pointers, $1380 acts as zero. So lets say that the voice pointer reads $1915. Since $1380 is zero, we would subtract 1380 from 1915 and we get the distance away from the beginning of the song that the voice data is. Essentially the pointers in Sonic 2 Beta, but with a different constant. Note that each song is treated as it\\\'s own bank, and the beginning of the song is the beginning of the bank, while the end of the song is the end of the bank.\r\n\r\nExceptions: Credits music is uncompressed, unlike all the other musics. Uses the S2B pointer format. So do the pointers to the music data itself at $F8000.\r\n\r\n<h3>Header format:</h3>\r\n<h4>Sonic 1, Sonic 2, Sonic 3, Sonic & Knuckles, Sonic 3D Blast, and Sonic Crackers:</h4>\r\nAll pointers in this section differ according to the game you are hacking. Remember, relative for Sonic 1, Ristar, and Moonwalker, and absolute little endian for the others. The music header format listed is a universal format used in all the major Megadrive Sonic games, including Sonic 1, Sonic 2, Sonic 3, Sonic & Knuckles, Sonic 3D Blast, and Sonic Crackers.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Bytes position</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Description</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">00 &amp; 01</td><td align=\\\"center\\\" valign=\\\"middle\\\">Voice pointer. This points to the location of the voice data, or instruments in the song.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">02 &amp; 03</td><td align=\\\"center\\\" valign=\\\"middle\\\">Channel setup. This is usually 0603, and means there are 5 FM channels, 1 DAC, and 3 PSG channels. Changing these bytes will either make the header larger or smaller, depending on what you change them to. If you want to use the 6th FM channel, the 6th FM channel will be located after the 5th FM channel modifier. The same applies if you decide to use the 4th PSG channel. It will be located right after the two redundant bytes after the 3rd PSG modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">04 &amp; 05</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tempo modifier. First byte is the dividing timing, and the second is the main tempo modifier. Change the second byte to make the music faster or slower.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">06 &amp; 07</td><td align=\\\"center\\\" valign=\\\"middle\\\">DAC pointer. This points to the drums you hear in the music. In Chaotix, this points to the PWM channel used instead of the DAC channel. Treat them as the same for now.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0A &amp; 0B</td><td align=\\\"center\\\" valign=\\\"middle\\\">Dunno. They seem to be redundant.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0C &amp; 0D</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 1 pointer. It points to FM channel 1.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0E &amp; 0F</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 1 modifier. First byte modifies pitch,\r\nand second byte modifies volume (same for all).</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">10 &amp; 11</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 2 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">12 &amp; 13</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 2 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">14 &amp; 15</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">16 &amp; 17</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 3 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">18 &amp; 19</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 4 pointer. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1A &amp; 1B</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 4 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1C &amp; 1D</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 5 pointer. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1E &amp; 1F</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 5 modifier. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">20 &amp; 21</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 1 pointer. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">22 &amp; 23</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 1 modifier. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">24 &amp; 25</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">26 &amp; 27</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 2 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">28 &amp; 29</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 2 modifier. </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2A &amp; 2B</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2C &amp; 2D</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2E &amp; 2F</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 3 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">30 &amp; 31</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr></tbody></table>\r\n\r\n<h4>Knuckles Chaotix:</h4>\r\nIn Knuckles Chaotix, this format is slightly different to accomodate to the 32x\\\'s hardware. I have listed it below.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(32, 64, 32);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Bytes position</td><td style=\\\"background-color: rgb(32, 64, 32);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Description</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">00 & 01</td><td align=\\\"center\\\" valign=\\\"middle\\\">Voice pointer. This points to the location of the voice data, or instruments in the song.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">02 & 03</td><td align=\\\"center\\\" valign=\\\"middle\\\">Channel setup. This is usually 0603, and means there are 6 FM channels, and 3 PSG channels. Changing these bytes will either make the header larger or smaller, depending on what you change them to. If you decide to use the 4th PSG channel, It will be located right after the redundant two bytes after the PSG 3 modifier. Following that will be the PWM pointers.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">04 & 05</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tempo modifier. First byte is the dividing timing, and the second is the main tempo modifier. Change the second byte to make the music faster or slower.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">06 & 07</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 1 pointer. It points to FM channel 1.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">08 & 09</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 1 modifier. First byte modifies pitch, and second byte modifies volume (same for all).</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0A & 0B</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 2 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0C & 0D</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 2 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0E & 0F</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">10 & 11</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 3 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">12 & 13</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 4 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">14 & 15</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 4 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">16 & 17</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 5 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">18 & 19</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 5 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1A & 1B</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 6 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1C & 1D</td><td align=\\\"center\\\" valign=\\\"middle\\\">FM channel 6 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1E & 1F</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 1 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">20 & 21</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 1 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">22 & 23</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">24 & 25</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 2 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">26 & 27</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 2 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">28 & 29</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2A & 2B</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2C & 2D</td><td align=\\\"center\\\" valign=\\\"middle\\\">PSG channel 3 modifier.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2E & 2F</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">30 & 31</td><td align=\\\"center\\\" valign=\\\"middle\\\">PWM channel 1 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">32 & 33</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">34 & 35</td><td align=\\\"center\\\" valign=\\\"middle\\\">PWM channel 2 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">36 & 37</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">38 & 39</td><td align=\\\"center\\\" valign=\\\"middle\\\">PWM channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">3A & 3B</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">3C & 3D</td><td align=\\\"center\\\" valign=\\\"middle\\\">PWM channel 3 pointer.</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">3E & 3F</td><td align=\\\"center\\\" valign=\\\"middle\\\">Redundant. Does nothing.</td></tr></tbody></table>\r\n\r\nUnderstanding the header is essential for editing music. This is the basis of basic music editing, such as pitch and tempo editing. Once you understand the pointers and the header, then you are ready to start learning more advanced things.\r\n\r\n<h3>Voice editing:</h3>\r\nVoices are the instruments that you hear playing in the music throught the FM channels. To edit them correctly, you need to know FM synthesis. Voice swapping is easy enough though. A voice is 19 hex bytes, and has no header. It is raw data that gives info to the YM2612 FM chip in the Megadrive to give the desired sound output. The format of a voice is as follows.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(32, 64, 32);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Bytes position</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" style=\\\"background-color: rgb(32, 64, 32);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Description</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">00</td><td align=\\\"center\\\" valign=\\\"middle\\\">Next 3 bits - Feedback</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 3 bits - Algorithm</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">01</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - Detune of operator 4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Coarse-frequency of operator 4</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">02</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - Detune of operator 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Coarse-frequency of operator 3</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">03</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - Detune of operator 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Coarse-frequency of operator 2</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">04</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - Detune of operator 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Coarse-frequency of operator 1</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">05</td><td align=\\\"center\\\" valign=\\\"middle\\\">Upper 2 bits - [RS] of operator 4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - Attack rate [AR] of operator 4</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">06</td><td align=\\\"center\\\" valign=\\\"middle\\\">Upper 2 bits - [RS] of operator 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - Attack rate [AR] of operator 3</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">07</td><td align=\\\"center\\\" valign=\\\"middle\\\">Upper 2 bits - [RS] of operator 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - Attack rate [AR] of operator 2</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">08</td><td align=\\\"center\\\" valign=\\\"middle\\\">Upper 2 bits - [RS] of operator 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - Attack rate [AR] of operator 1</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">09</td><td align=\\\"center\\\" valign=\\\"middle\\\">[AM] of operator 4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - First decay rate [D1R] of operator 4</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0A</td><td align=\\\"center\\\" valign=\\\"middle\\\">[AM] of operator 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - First decay rate [D1R] of operator 3</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0B</td><td align=\\\"center\\\" valign=\\\"middle\\\">[AM] of operator 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - First decay rate [D1R] of operator 2</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0C</td><td align=\\\"center\\\" valign=\\\"middle\\\">[AM] of operator 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Lower 5 bits - First decay rate [D1R] of operator 1</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0D</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Second decay rate [D2R] of operator 4 (00-14) </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0E</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Second decay rate [D2R] of operator 3 (00-14) </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0F</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Second decay rate [D2R] of operator 2 (00-14) </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">10</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Second decay rate [D2R] of operator 1 (00-14) </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">11</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - First decay level [D1L] of operator 4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Release rate [RR] of operator 4</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">12</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - First decay level [D1L] of operator 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Release rate [RR] of operator 3</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">13</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - First decay level [D1L] of operator 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Release rate [RR] of operator 2</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">14</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left nyble - First decay level [D1L] of operator 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right nyble - Release rate [RR] of operator 1</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">15</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Output level of operator 4 </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">16</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Output level of operator 3 </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">17</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Output level of operator 2 </td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">18</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Output level of operator 1 </td></tr></tbody></table>\r\n\r\nSo to swap voices, select the voice you want and copy those 19 hex bytes onto another voice to hear your changes in game.\r\n\r\n<h3>Note editing:</h3>\r\nThe way the music is set up in the Sonic games is similar to how music is structured in a MIDI file. Here are some values that will help you directly edit notation data in the music.\r\n\r\n00 -&gt; 7F: Note duration (how long a note is held for).\r\n80 -&gt; DF: Notes (80 is a rest).\r\nE0 -&gt; FF: Coordination flags.\r\n\r\nNow, the DAC channel uses values starting with 81 (as with FM and PSG, 80 is used as a rest) to define the DAC drum sample that is played. Here are the sample definitions for a few games. Expect this section to be updated with more soon.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Game</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Notes</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"7\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sonic 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">81</td><td align=\\\"center\\\" valign=\\\"middle\\\">Kick</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">82</td><td align=\\\"center\\\" valign=\\\"middle\\\">Snare</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">83</td><td align=\\\"center\\\" valign=\\\"middle\\\">Timpani</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">84</td><td align=\\\"center\\\" valign=\\\"middle\\\">Noise</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">85</td><td align=\\\"center\\\" valign=\\\"middle\\\">Noise</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">86</td><td align=\\\"center\\\" valign=\\\"middle\\\">Silent</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">87 or higher</td><td align=\\\"center\\\" valign=\\\"middle\\\">Sega sound</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"6\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sonic 2 Beta</td><td align=\\\"center\\\" valign=\\\"middle\\\">81</td><td align=\\\"center\\\" valign=\\\"middle\\\">Kick</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">82</td><td align=\\\"center\\\" valign=\\\"middle\\\">Snare</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">83</td><td align=\\\"center\\\" valign=\\\"middle\\\">Clap</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">84</td><td align=\\\"center\\\" valign=\\\"middle\\\">Scratch</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">85</td><td align=\\\"center\\\" valign=\\\"middle\\\">Timpani</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">86</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tom</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"9\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sonic 2 Final</td><td align=\\\"center\\\" valign=\\\"middle\\\">81</td><td align=\\\"center\\\" valign=\\\"middle\\\">Kick</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">82</td><td align=\\\"center\\\" valign=\\\"middle\\\">Snare</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">83</td><td align=\\\"center\\\" valign=\\\"middle\\\">Clap</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">84</td><td align=\\\"center\\\" valign=\\\"middle\\\">Scratch</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">85</td><td align=\\\"center\\\" valign=\\\"middle\\\">Timpani</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">86 to 8A</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tom variations</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">8A to 8E</td><td align=\\\"center\\\" valign=\\\"middle\\\">Timpani variations</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">8F</td><td align=\\\"center\\\" valign=\\\"middle\\\">Clap copy</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">91</td><td align=\\\"center\\\" valign=\\\"middle\\\">Bongo</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"8\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sonic Crackers</td><td align=\\\"center\\\" valign=\\\"middle\\\">81</td><td align=\\\"center\\\" valign=\\\"middle\\\">Kick</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">82</td><td align=\\\"center\\\" valign=\\\"middle\\\">Snare</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">83</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tom</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">84</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tom</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">85</td><td align=\\\"center\\\" valign=\\\"middle\\\">Tom</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">86</td><td align=\\\"center\\\" valign=\\\"middle\\\">Voice sample: \\\"Let\\\'s go!\\\"</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">87</td><td align=\\\"center\\\" valign=\\\"middle\\\">Voice sample: \\\"Hey!\\\"</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">88</td><td align=\\\"center\\\" valign=\\\"middle\\\">Beep/screech</td></tr></tbody></table>\r\n\r\nFor DAC samples, any value beyond 86 in Sonic 2 will contain variations of Tom up to value 8A. 8A starts variations of Timpani, which goes up to around 8F, which is a copy of the clap. I forget what 90 is, but 91 is a bongo, used in MCZ 2P music. This bongo is not in Sonic 2 Beta.\r\n\r\nThe Timpani definitions are the same for both Sonic 1 and 2, so go wild.\r\n\r\n<h3>Coordination flags:</h3>\r\nCoordination flags alter the music in real time. They are what tell the game to jump from one part of the song to another and to set up the channels. They are also what makes the music loop in the games. They are complicated, and it is recommended that you understand the YM2612 more before messing with them.\r\n\r\nThe coordination flags differ from game to game. They are the same in Sonic 1 and 2, but different in the others. For now, I will only give the flags for Sonic 1 and 2. Not all of them are known, but a majority are.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Coordination flag</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Description</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E0xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">xx - Value\r\nTable of each bit\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Bit 7</td><td align=\\\"center\\\" valign=\\\"middle\\\">Left channel status</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Bit 6</td><td align=\\\"center\\\" valign=\\\"middle\\\">Right channel status</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Bit 5 and 4</td><td align=\\\"center\\\" valign=\\\"middle\\\">AMS</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Bit 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Always 0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Bit 2, 1 and 0</td><td align=\\\"center\\\" valign=\\\"middle\\\">FMS</td></tr></tbody></table></td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E6xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">xx - Signed value\r\nChange channel volume with xx</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E7xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Prevent next note from attacking</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E8xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Set note fill amount to xx</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E9xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Add xx to channel key</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">EAxx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Set music tempo to xx</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">EBxx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Change tempo modifier to xx for all channels</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">ECxx</td><td align=\\\"center\\\" valign=\\\"middle\\\">xx - Signed value\r\nChange channel volume by xx</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">EE</td><td align=\\\"center\\\" valign=\\\"middle\\\">Something with voice selection</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">EFxx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Set voice selection to xx</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F0wwxxyyzz</td><td align=\\\"center\\\" valign=\\\"middle\\\">Modulation\r\nTable of each character\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td align=\\\"center\\\" valign=\\\"middle\\\">ww</td><td align=\\\"center\\\" valign=\\\"middle\\\">Wait for ww period of time before modulation starts</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Modulation speed</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">yy</td><td align=\\\"center\\\" valign=\\\"middle\\\">Modulation change per modulation step</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">zz</td><td align=\\\"center\\\" valign=\\\"middle\\\">Number of steps in modulation</td></tr></tbody></table></td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Turn on modulation</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Stop the track</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Turn off modulation</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F5xx</td><td align=\\\"center\\\" valign=\\\"middle\\\">Store xx into the voice storage</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F6yyyy</td><td align=\\\"center\\\" valign=\\\"middle\\\">Jump to position yyyy</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F7xxyyyy</td><td align=\\\"center\\\" valign=\\\"middle\\\">Repeat xx times at position yyyy before moving on</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F8yyyy</td><td align=\\\"center\\\" valign=\\\"middle\\\">Jump to sub-position yyyy (keep previous position in memory for returning)</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">F9</td><td align=\\\"center\\\" valign=\\\"middle\\\">Return from sub-position</td></tr></tbody></table>\r\n\r\nNow, you will notice that some of these flags speak of a signed value. Signed values have the capability to be positive or negative. What makes a hexadecimal value signed? Bit number 7, the first bit on the left, will be 1 for negative and 0 for positive. So, a hexadecimal value that is between 00 and 7F is positive, and values between 80 and FF are negative. Here\\\'s an example:\r\n\r\nLet\\\'s say that you wanted to go back 9 bytes to locate some music data in Sonic 1. Sonic 1 uses relative pointers, so let\\\'s use a signed value. With signed bytes, 0000 is the lowest value you can have. So FFFF would be -1, FFFE would be -2, etc. Signed values are used to locate data before the current location. So if I wanted to locate data that was 9 bytes back from my current location, I would take 0000 and subtract 9 bytes in hex from it. This leaves me with FFF7. If you wanted to go forward 9 bytes, you would take 0000 and add 9 to it (while keeping it 16-bit), which would be 0009. This is confusing, and kinda advanced, but if you plan on learning 68k ASM at all, it\\\'s something you have to know.\r\n\r\n<h3>Game specifics:</h3>\r\n<h4>Sonic 2:</h4>\r\n<span style=\\\"font-weight: bold;\\\">Master Playlist:</span>\r\nSonic 2 has a special Master playlist that defines what music ID plays in what slot. All values for music subtract 1 from the value. So to change Track 81 to Track 82, change 80 to 81. 80 is 81, 81 is 82, etc. These values go up to slot 9F, or 1F in the final version of the game. The locations are as follows.\r\n\r\nMaster Playlist in Sonic 2 Beta: $ECE9F\r\nMaster Playlist in Sonic 2 Final: $ECF36\r\n\r\nAs said before, track 81 is represented by 80, 82 is reresented by 81, etc. If you see an FF, skip it and move on to the next byte. This master playlist is only in Sonic 2 as far as I know. If I find it in any other games, I will update this section.\r\n\r\n<span style=\\\"font-weight: bold;\\\">Music Compression:</span>\r\nIn Sonic 2 Final, there is a compression applied to all music data in the game except for the credits. This format has been dubbed the Saxman compression, named after the person who cracked the format. I will not note how to manually decompress this format -- Refer to Saxman\\\'s hacking guide to do so. The music can be decompressed by using Magus\\\' Sega Data Compressor. Refer to the pointer format to edit the music properly.\r\n\r\n<h3>Music locations:</h3>\r\nNow that you know all the basics, you can start editing music. Here are some locations for various games that will help. You can use the music pointers to locate the music data for now, but I may document the locations of each individual track in the future.\r\n\r\n<h4>Sonic 1:</h4>\r\nMusic Pointers: $71A9C\r\nSound Effect Pointers: $78B44\r\n\r\n<h4>Sonic 2 Beta:</h4>\r\nMusic Pointers (These add to $F0000, for 98 -&gt; 9F): $F0000\r\nMusic Pointers (These add to $F8000): $F8000\r\n\r\n<h4>Sonic 2 Final:</h4>\r\nMusic Pointers (These add to $F8000): $F8000\r\nMusic Pointers (These add to $F8000 and are for 98 -&gt; 9F, excluding continue): $F802A\r\nContinue music pointer (This adds to $F0000): $F0000\r\nSound Effect Pointers (These add to $F8000): $FEE91\r\n\r\n<h4>Sonic Crackers:</h4>\r\nMusic Pointers: $0633F\r\nTrack 81: $10000\r\nTrack 82: $1088C\r\nTrack 83: $10BDA\r\nTrack 84: $11210\r\nTrack 85: $1172B\r\nTrack 86: $11B10\r\n\r\n<h4>Sonic 3:</h4>\r\nMusic Pointers (These add to $C8000): $E761A\r\nMusic Pointers (These add to $D0000): $E762E\r\nMusic Pointers (These add to $D8000): $E7652\r\n\r\n<h4>Sonic 3D:</h4>\r\nMusic Pointers (These add to $C0000): $D3233\r\nMusic Pointers (These add to $C8000): $D3245\r\nMusic Pointers (These add to $D0000): $D325D\r\nSound Effect Pointers (These add to $D8000): $D3297\r\n\r\n<h4>Knuckles Chaotix:</h4>\r\nMusic pointers (These add to $40000): $76AE9\r\nMusic pointers (These add to $48000): $76B05\r\nMusic pointers (These add to $50000): $76B33\r\n\r\n<h4>Sonic & Knuckles:</h4>\r\nMusic Pointers: $F793E\r\n\r\nSpecifics...\r\nThese add to $2C8000:\r\n01 - 8000 - AIZ1\r\n02 - 9B6D - AIZ2\r\n03 - B0BC - HZ1\r\n04 - C0C6 - HZ2\r\n05 - D364 - MGZ1\r\n06 - D97B - MGZ2\r\n07 - E48F - CNZ1\r\n08 - DDA9 - CNZ2\r\n\r\nThese add to $E8000:\r\n09 - 8000 - FBZ1\r\n0A - 8597 - FBZ2\r\n\r\nThese add to $2D0000:\r\n0B - 86AA - IZ1\r\n0C - 8000 - IZ2\r\n0D - 9345 - LBZ1\r\n0E - 8DC8 - LBZ2\r\n\r\nThese add to $E8000:\r\n0F - 8AFF - MHZ1\r\n10 - 9106 - MHZ2\r\n11 - 9688 - SZ1\r\n12 - 9CF2 - SZ2\r\n13 - A2E5 - LRZ1\r\n14 - ACF3 - LRZ2\r\n15 - BE80 - SSZ\r\n16 - C2B4 - DEZ1\r\n17 - C79F - DEZ2\r\n18 - CBB1 - Act 1 boss\r\n19 - CEE1 - Robotnik boss\r\n1A - D3DD - TDZ\r\n1B - DCC0 - Rolling jump bonus stage\r\n1C - E223 - Special stage\r\n1D - EABB - Slot machine bonus stage\r\n\r\nThis adds to $2D8000:\r\n1E - 8AE8 - Gum ball machine bonus stage\r\n\r\nThis adds to $E8000:\r\n1F - F5A3 - Knuckles theme\r\n\r\nThese add to $2D8000:\r\n20 - 99F7 - Azure Lake\r\n21 - A4FD - Baloon Park\r\n22 - B0EC - Desert Palace\r\n23 - C324 - Chrome Gadget\r\n24 - DA47 - Endless Mine\r\n\r\nThis adds to $E8000:\r\n25 - F88E - Title\r\n\r\nThis adds to $2D8000:\r\n26 - E587 - Sonic 3 credits\r\n\r\nThese add to $E0000:\r\n27 - DD4B - Game/Time over\r\n28 - DFA6 - Continue\r\n29 - E3C0 - Bonus screen\r\n\r\nThese add to $E8000:\r\n2A - FD4B - Extra life\r\n2B - FE75 - Chaos Emerald\r\n\r\nThis adds to $E0000:\r\n2C - E574 - Invincible\r\n\r\nThis adds to $2D8000:\r\n2D - F5E4 - Competition menu\r\n\r\nThis adds to $E8000:\r\n2E - CBB1 - Act 1 boss (same as 18)\r\n\r\nThese add to $E0000:\r\n2F - E7AF - Menu\r\n30 - F74C - Final boss\r\n\r\nThis adds to $2D8000:\r\n31 - FABE - Sonic 3 countdown\r\n\r\nThese add $E0000:\r\n32 - FCDE - Sonic & Knuckles outro\r\nDC - C104 - Sonic & Knuckles credits\r\n\r\n<h4>Ristar:</h4>\r\nMusic Pointers (32-bit): $C852A\r\n\r\nMusic Locations:\r\n$CDBF4 - Flora 1 [shooting ristar]\r\n$CEA0E - Scorch 1 [busy flare]\r\n$CF6B6 - Flora 2 bgm [dancing leaves]\r\n$D05F6 - Pre boss [concentration]\r\n$D0774 - Sonata 1 (initial bgm) [intension]\r\n$D0AC6 - Sonata 1 (1st metronome)\r\n$D0E7C - Sonata 1 (2nd metronome)\r\n$D1218 - Sonata 1 (final metronome)\r\n$D1520 - Sonata 2 [on parade]\r\n$D1E88 - Automaton 2 [lock up]\r\n$D2C38 - Freon 1 [ring rink]\r\n$D36DC - Undertow 2 [break silence]\r\n$D4346 - Boss [crazy kings]\r\n$D4DBE - Scorch 2 [under magma]\r\n$D5A0A - Undertow 1 [splash down]\r\n$D6752 - Freon 2 [ice scream]\r\n$D732C - Ending 2 [next cruise]\r\n$D7E4E - Sonata 1 (mini boss) [du di du da]\r\n$D81E8 - Intro 1 [ebony force]\r\n$D858C - Bonus [ready...GO!]\r\n$D8D80 - Intro 2/ Title [pray pray play!]\r\n$D97EC - Bonus (preview) [formation lap]\r\n$D997A - Continue screen\r\n$D9CFC - Greedy [theme of kaiser]\r\n$DAA66 - Automaton 1 [crying world]\r\n$DAFB2 - Ending 1 [star humming]\r\n$DC422 - Sonata 1 (initial bgm) [intension] *MID ROUND??*\r\n$DC69A - round clear 2 [beyond space]\r\n$DCF66 - round clear 1 [lets go]\r\n$DD240 - area clear [go ahead]\r\n$DD5C8 - game over [game over .. fuu]\r\n$DD7EC - defeated Greedy, before imploding cutscene\r\n$DD978 - Sonata 1 (mini boss 3 note intro)\r\n$DDA1E - \\\"Sega\\\" music\r\n\r\n<h4>MJ\\\'s Moonwalker:</h4>\r\nMusic Pointers (32-bit): $600A4',67,1),(70,2,'Collision array and collision index','<h2>Collision array and collision index:</h2>\r\n*Posted by JoseTheBest.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\nEach sonic game (S1/S2/S3/S&K) has a \"main\" collision data (usually called collision array), where all the collision blocks used in the game are defined. Then, the collision data for each level just use the possible blocks in the collision array, but that\'s something that we\'ll see later. For now, let\'s look on the collision array.\r\n\r\n<h3>The collision array:</h3>\r\nFirst, you have to know that the collision blocks are directly applied to the 16x16 tiles of each zone, meaning that each collision block is always 16x16 pixels.\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-001.png\">\r\n\r\nThis is basically the table representing a collision block. You probably have noticed that the system looks like X and Y positions. Well, actually, this is even more simple than that. Each block uses 16 ($F) bytes. There isn\'t any special format in the collision array: the first 16 bytes, the first collision block; the next 16 bytes the second, and so on. But let\'s look what that 16 bytes mean.\r\n\r\nThe X position in the table, is just the position of the actual byte. The value of that byte means the Y position. It always create a solid column below the position. In the table, green numbers mean Y value, and blue numbers mean the byte position (or X value) (for now, ignore the grey numbers). For example, if we have this:\r\n\r\n00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r\n\r\nThat will create a column in the second position with altitude of 3. Here is a representation of the position:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-002.png\">\r\n\r\nAnd because we said that it creates a column below the position, the result in game will be this:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-003.png\">\r\n\r\nAlso, as you can see, a value of 00 create nothing.\r\n\r\nAnother example more complex this time:\r\n\r\n04 05 05 06 06 07 08 08-09 0A 0A 0B 0C 0D 0D 0E\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-004.png\">\r\n\r\nRed boxes mean that these are the actual value of each byte.\r\n\r\nReader: \"Okay, and what\'s about the grey numbers that we have saw before?\"\r\n\r\nThey work like Y positions, but instead of creating a \"normal\" solid column, it creates one \"inverted\".\r\n\r\nFor example:\r\n\r\n00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00\r\n\r\nThe position in the table is:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-005.png\">\r\n\r\nAnd it creates an inverted column:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-006.png\">\r\n\r\nThat will create the collision, but you have to set to that block the slope effect. This is where the angle data comes. Each byte of this data correspond to one collision block. If the byte is the first, it will take effect on the first collision block in the array. If this is the second, the second block, and so on. The format is simple. To represent the slope just create two imaginary lines. The first nyble of the byte is a point in the left line, and the second in the right line. If you create a line between these points, you will have a representation of the slope. Let\'s look an example:\r\n\r\nBlock collision number 04 of Sonic 1:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-007.png\">\r\n\r\nNow we go to the 4th byte in the angle data in Sonic 1 (see below). It says 90. 9 will be the first point and 0 the second. Here is a representation about that:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Collisions/CollisionFormat-008.png\">\r\n\r\nThat\'s all about the collision block format and the collision array.\r\n\r\n<u>The collision blocks reference for Sonic 2:</u>\r\n\r\nHere is just a link to see all collision blocks of Sonic 2:\r\n<a href=\"http://hacking-cult.org/?r/4/69\">Sonic 2 collision blocks reference</a>\r\n\r\n<h3>The collision index:</h3>\r\nInstead of using directly the data like in the collision array, each byte of the collision index represents one block from the collision array, and is directly related to the 16x16 tile position. It\'s easy. If a byte is 00, it means that it will use the first collision block in the collision array (first 16 bytes). If it\'s 01, it will use the second,...etc.\r\n\r\nReader: \"But how the game knows which 16x16 tile use that collision?\"\r\n\r\nAgain very simple. The position of the byte in the collision index, is the position of the tile. I mean, if you use 00 in the first position of the collision index of a level, it will use the block\r\ncollision 00 for the first 16x16 tile defined for this level. If it\'s the second position, the second 16x16 tile. And it continues like that.\r\n\r\n<h3>Useful addresses:</h3>\r\nNow some more info that you maybe want:\r\n\r\n\r\n<u>Collision Arrays :</u>\r\n\r\n<u>Sonic 1 (US version) :</u>\r\nPrimary collision array: $62A00\r\nSecondary collision array: $63A00\r\nAngle/curve array: $62900\r\n\r\n<u>Sonic 2 :</u>\r\nCollision array: $42E50\r\nAngle/curve array: $42D50\r\n\r\n<u>Sonic 3 :</u>\r\nCollision array: $706A0\r\n\r\n<u>Sonic & Knuckles :</u>\r\nCollision array: $96100\r\n\r\n\r\n<u>Collision Indexes :</u>\r\n\r\n<u>Sonic 1 (US version) :</u>\r\nGHZ : $64A00\r\nLZ : $64B9A\r\nMZ : $64C62\r\nSLZ : $64DF2\r\nSYZ : $64FE6\r\nSBZ : $651DA\r\n\r\n<u>Sonic 2 (Note: Data compressed with Kosinski format) :\r\n</u>Offset index for primary collision indexes: $49E8\r\nOffset index for secondary collision indexes: $4A2C\r\nEHZ and HTZ primary : $44E50\r\nEHZ and HTZ secondary : $44F40\r\nMZ : $45040\r\nOOZ : $45100\r\nMCZ : $45200\r\nCNZ primary : $452A0\r\nCNZ secondary : $45330\r\nCPZ and DEZ primary : $453C0\r\nCPZ and DEZ secondary : $454E0\r\nARZ primary : $45610\r\nARZ secondary : $45760\r\nWFZ and SCZ primary : $458C0\r\nWFZ and SCZ secondary : $459A0',64,1),(71,2,'Sprites and objects placement','<h2>Sprites and objects placement:</h2>\r\n*Posted by Weird Person on May 21 2005.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\n<h3>The sprites coordinates:</h3>\r\nBy making your sprites and objects placement with an hex editor, you see in run-time, how your sprites and objects will work in the game.\r\n\r\nEnter the game in debug mode. There are many hexadecimal values, right?\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Sprites/spritesplacement-001.png\">\r\n\r\nPiece of cake, right? Let\'s go to place our objects now!\r\n\r\nBefore I say everything, let\'s make a little exercise:\r\n\r\nLook at this screenshot:\r\n\r\n<img src=\"http://www.sonicresearch.org/s2long/Miscellaneous/Sonic/SCHG/HackingCulT/Sprites/spritesplacement-002.png\">\r\n\r\nAs you can see, the object is at $0228 (X coordinate) and $027D (Y coordinate).\r\n\r\n<h3>The sprites placement format:</h3>\r\nFor each sprite defined, it takes 6 bytes. There is a format:\r\n\r\nXXXX FYYY TTSS\r\n\r\nX: X coordinate of the object.\r\nY: Y coordinate of the object.\r\nT: Object type, or object ID.\r\nS: Object subparameter.\r\nF: Sprite flag. The first nybble of the Y coordinate is always 0. Then, this nybble is used for something else. The sprite flag tells the initial direction of the sprite, and if the sprite respawns after being destroyed or not (usually, badnicks and monitors won\'t respawn). Here is a small table of values:\r\n\r\n<table style=\"text-align: left; width: 100%;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"background-color: rgb(034, 068, 034);\" align=\"center\" valign=\"middle\">Sprite flag</td><td style=\"background-color: rgb(034, 068, 034);\" align=\"center\" valign=\"middle\">Effect on the sprite</td></tr><tr><td align=\"center\" valign=\"middle\">0</td><td align=\"center\" valign=\"middle\">Normal</td></tr><tr><td align=\"center\" valign=\"middle\">2</td><td align=\"center\" valign=\"middle\">Horizontal flip</td></tr><tr><td align=\"center\" valign=\"middle\">4</td><td align=\"center\" valign=\"middle\">Vertical flip</td></tr><tr><td align=\"center\" valign=\"middle\">6</td><td align=\"center\" valign=\"middle\">Horizontal and vertical flip</td></tr><tr><td align=\"center\" valign=\"middle\">8</td><td align=\"center\" valign=\"middle\">Normal without respawn</td></tr><tr><td align=\"center\" valign=\"middle\">A</td><td align=\"center\" valign=\"middle\">Horizontal flip without respawn</td></tr><tr><td align=\"center\" valign=\"middle\">C</td><td align=\"center\" valign=\"middle\">Vertical flip without respawn</td></tr><tr><td align=\"center\" valign=\"middle\">E</td><td align=\"center\" valign=\"middle\">Horizontal and vertical flip without respawn</td></tr></tbody></table>\r\n\r\nReader: \"What we have to do now?\"\r\nNow, we have to write these 6 bytes somewhere in the ROM. Each act of the game own a huge list where all sprites placement are stored. For Emerald Hill zone, this huge list of sprites begins at $E684A. Each 6 bytes is a new sprite. At the end of the list, you have FF FF 00 00 written.\r\n\r\nAs an example, let\'s take our red spring above. You can replace the first sprite (a coconut) by our spring by writing this:\r\n\r\n02 28 02 7D 41 04\r\n\r\n0228 is our X coordinate. 027D is our Y coordinate. 41 04 is a red spring facing up.\r\nLet\'s take another example with a ring monitor:\r\n\r\n02 28 82 7D 26 04\r\n\r\nAt the same place, a ring monitor should appear. Break it and go away. Then go back and verify that the monitor still broken. The sprite flag (8) disable the ability of the sprite to be respawned after being destroyed! Simple enough, isn\'t it?\r\n\r\nOf course, you will want to place other sprites and objects. Here is a list of some objects you can place in every level (without having any graphical glitches):\r\n<a href=\"http://www.hacking-cult.org/?r/4/72\">Sprites and objects reference</a>\r\n\r\n<h3>Sprites and objects addresses:</h3>\r\nNow, here is the list of every addresses for every level, where to find the list of objects.\r\nThere is an offset index for each level (2 bytes for an act) located at $E6800.\r\n\r\n<table style=\"text-align: left; width: 100%;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">Level</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">Act</td><td style=\"background-color: rgb(34, 68, 34);\" align=\"center\" valign=\"middle\">Address for the list of sprites</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Emerald Hill zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E684A</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E6B7A</td></tr><tr><td colspan=\"1\" rowspan=\"3\" align=\"center\" valign=\"middle\">Metropolis zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E6F34</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E73C0</td></tr><tr><td align=\"center\" valign=\"middle\">Act 3</td><td align=\"center\" valign=\"middle\">$E78EE</td></tr><tr><td colspan=\"1\" rowspan=\"1\" align=\"center\" valign=\"middle\">Wing Fortress zone</td><td align=\"center\" valign=\"middle\"></td><td align=\"center\" valign=\"middle\">$E7F48</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Hill Top zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E8302</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E8668</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Hidden Palace zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E8C80</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E8D94 (empty)</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Oil Ocean zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E8DA0</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E9214</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Mystic Cave zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E968E</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$E99A0</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Casino Night zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$E9D1E</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$EA3D8</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Chemical Plant zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$EA9D2</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$EAD6E</td></tr><tr><td align=\"center\" valign=\"middle\">Death Egg zone</td><td align=\"center\" valign=\"middle\"></td><td align=\"center\" valign=\"middle\">$EB230</td></tr><tr><td colspan=\"1\" rowspan=\"2\" align=\"center\" valign=\"middle\">Aquatic Ruin zone</td><td align=\"center\" valign=\"middle\">Act 1</td><td align=\"center\" valign=\"middle\">$EB25A</td></tr><tr><td align=\"center\" valign=\"middle\">Act 2</td><td align=\"center\" valign=\"middle\">$EB6A4</td></tr><tr><td align=\"center\" valign=\"middle\">Sky Chase zone</td><td align=\"center\" valign=\"middle\"></td><td align=\"center\" valign=\"middle\">$EBBDE</td></tr><tr><td align=\"center\" valign=\"middle\">Unused space that you can use</td><td align=\"center\" valign=\"middle\"></td><td align=\"center\" valign=\"middle\">$EBD48 to $EBFFF</td></tr></tbody></table>',64,2),(72,2,'Sprites and objects reference','<h2>Sprites and objects reference:</h2>\r\n*Submitted by Weird Person on May 21 2005.*\r\n*Updated on May 26 2005.*\r\n*Table and advices by Sonic Hachelle-Bee*\r\n\r\nHere, you have a table of some of the sprites that you can use in the game. Each sprite have it\\\'s own ID, defined by the sprites table located at $1600C. This sprites table is a huge offset index that, for each ID (4 bytes for an ID), define the address where the program of the sprite is.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(0, 34, 0);\\\"></td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Object description</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Advices</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Object ID</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Object subparameter first number</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" rowspan=\\\"1\\\" colspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Object subparameter second number</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"21\\\" style=\\\"vertical-align: middle; text-align: center; background-color: rgb(34, 68, 34);\\\">Miscellaneous</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"11\\\" align=\\\"center\\\" valign=\\\"middle\\\">Monitor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"11\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"11\\\" align=\\\"center\\\" valign=\\\"middle\\\">26</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"11\\\" align=\\\"center\\\" valign=\\\"middle\\\">0 </td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Blank monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sonic extra life monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Tails extra life monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Robotnik monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Super ring monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Super sneakers monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">5</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Shield monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Invincibility monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Teleport monitor (switch Sonic and Tails position)</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Random monitor (only in 2 players game)</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Broken monitor</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spikes</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">36</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">One to four set of spikes</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0 to 3</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Static spikes</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spikes moving up and down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"5\\\" style=\\\"vertical-align: middle; text-align: center; background-color: rgb(68, 102, 68);\\\">Normal spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"5\\\" align=\\\"center\\\" valign=\\\"middle\\\">Use side 2 and strait springs (nicer)</td><td colspan=\\\"1\\\" rowspan=\\\"5\\\" style=\\\"vertical-align: middle; text-align: center; background-color: rgb(68, 102, 68);\\\">41</td><td style=\\\"vertical-align: middle; text-align: center; background-color: rgb(34, 68, 34);\\\">Up spring</td><td style=\\\"vertical-align: middle; text-align: center; background-color: rgb(34, 68, 34);\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"5\\\" align=\\\"center\\\" valign=\\\"middle\\\"><table style=\\\"text-align: left; background-color: rgb(68, 102, 68); width: 100%; height: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td colspan=\\\"1\\\" rowspan=\\\"4\\\" style=\\\"vertical-align: middle; text-align: center;\\\">Spring side 1</td><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Red spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" style=\\\"vertical-align: middle; text-align: center;\\\">Yellow spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spring side 2</td><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Red spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">5</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Yellow spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">7</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spring side 3</td><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Red spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">9</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Yellow spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">A</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">B</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spring side 4</td><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Red spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">C</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">D</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Yellow spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">Strait spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">E</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Spin spring</td><td align=\\\"center\\\" valign=\\\"middle\\\">F</td></tr></tbody></table>Spring various parameters table</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Right spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Down spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Diagonal up right spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Diagonal down right spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Starpost</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">79</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">The order they come while playing</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1 to 9</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Animal container</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Place it exactly on the middle of the screen (nicer)</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3E</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">End level sign</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Don\\\'t place it exactly on the middle of the screen (nicer)</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"11\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Emerald Hill zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pirahna</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">5C</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"5\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wood bridge</td><td colspan=\\\"1\\\" rowspan=\\\"5\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td colspan=\\\"1\\\" rowspan=\\\"5\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">11</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8 blocks bridge</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">10 blocks bridge</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">12 blocks bridge</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">C</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">14 blocks bridge</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">E</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" rowspan=\\\"1\\\" colspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">16 blocks bridge</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Coconut</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">9D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">E</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wasp</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">4B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">EHZ floating platform</td><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">18</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"3\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Static</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left and right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"13\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Chemical Plant zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spider</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A7</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spiny on floor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A5</td><td colspan=\\\"2\\\" rowspan=\\\"1\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spiny on wall</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A6</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">CPZ floating platform</td><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td colspan=\\\"1\\\" rowspan=\\\"3\\\" style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">19</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"3\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left and right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down slowly</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down quickly</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Blue worm</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">5</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Weak spring covering pipes</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wheel spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">One way barrier</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wheel platform moving left and right</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">CPZ breakable cork</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">32</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rotating yellow blocks</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">6B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"11\\\" style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Aquatic Ruin zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Hidden grounder</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Grounder</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8E</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Chop chop fish</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">91</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rotating platforms</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">83</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Small bubbles</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">24</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Falling pillar</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">23</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">ARZ floating platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">18</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left and right</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">A</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rising pillar</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Leave object respawn enabled</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Arrow launcher</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">22</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">ARZ collapsing platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Leave object respawn enabled</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1F</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"13\\\" align=\\\"center\\\" valign=\\\"middle\\\">Casino Night zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Star bumper</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">44</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pinball flipper</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">86</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Green weak flipper</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Orange strong flipper</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Conveyor belt</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Transparent sprite that makes the character to move from left to right automatically</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">72</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Slot machine</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">D6</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">100 points</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pictures</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Blue block</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">D4</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left and right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Green snake platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">D2</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Charge spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">85</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Up spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Diagonal up right spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Blue bumper</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">D7</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Static</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left to right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Hill Top zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">HTZ breakable stone</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">32</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"10\\\" align=\\\"center\\\" valign=\\\"middle\\\">Mystic Cave zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">MCZ collapsing platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Leave object respawn enabled</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1F</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Smasher</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Crawlton</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">76</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">MCZ vine moving 160 pixels up</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">80</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Vine opening vertical bridge</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7F</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Vine opening horizontal bridge</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">77</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Flasher</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A3</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">C</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">MCZ floating platform moving left and right</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spiky moving stairs</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">76</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Three wooden rotating blocks</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">6A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"11\\\" align=\\\"center\\\" valign=\\\"middle\\\">Oil Ocean zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Octopus</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">4A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Green platform over fire</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">33</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Fan pulling the character</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">3F</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pull to left</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pull to up</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">8</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Seahorse</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">50</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Elevator</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">19</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Cannon</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">48</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pointing to up that trows to right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pointing to right that trows to down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pointing to down that trows to left</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Pointing to left that trows to up</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spiky ring moving left and right</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">43</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"18\\\" align=\\\"center\\\" valign=\\\"middle\\\">Metropolis zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spear block</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">68</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">First spear to right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">First spear to down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">First spear to left</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">First spear to up</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">3</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Nut</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">69</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Slicer</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A1</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Exploding star</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">A4</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">E</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wall of diagonal yellow springs</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">66</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Spear</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">6D</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Block of lava</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Invisible block</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">31</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Small block</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Huge block</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Conveyor belt</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Transparent sprite that makes the character to move from left to right automatically</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">72</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">MZ floating platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">6B</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"4\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving left and right</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Moving up and down</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Fall when you stand on it</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">5</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Fall automatically</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">7</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rotating gear</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">70</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Steam spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">42</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"3\\\" align=\\\"center\\\" valign=\\\"middle\\\">Sky Chase zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Mechanic eagle</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">AC</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Nebula</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">99</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Turtloids</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">9A</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"13\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wing Fortress zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Huge laser beam</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">B9</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">7</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">WFZ pull up&nbsp;hang chain</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">80</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">160 pixels up</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">96 pixels up</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Breakable panels</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">C1</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">2</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Chicken</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Disable object respawn</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">AE</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Ball cannon</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">B8</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">7</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rising platforms</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">BD</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">7</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">E</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Rotating floating platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">B6</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Propellor that makes the character float</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">B5</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Solid diagonal conveyor belt</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">72</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Starting block trowing the character</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">C0</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">1</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Appearing and disappearing platform</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">BE</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">9</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">0</td></tr><tr><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Vertical propellor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">B4</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">4</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Death Egg zone</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Running Robotnik</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">No</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" align=\\\"center\\\" valign=\\\"middle\\\">C6</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">A</td><td style=\\\"background-color: rgb(68, 102, 68);\\\" colspan=\\\"2\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">6</td></tr></tbody></table>',64,3),(73,2,'Rings placement','<h2>Rings placement:</h2>\r\n*By Sonic Hachelle-Bee on May 16 2005.*\r\n\r\n<h3>Advices about rings placement:</h3>\r\nHere, I will tell you some advices to make your rings placement looking good in the game, as a real Sonic game.\r\n\r\nFirst, keep in mind that in a row or column of rings, usually, rings are separated by 24 pixels each other. Rings are usually 12 pixels up the floor, or only 6 pixels up the floor if you are going fast at this location (loops or springs). In addition, rings are also placed 8 pixels besides a wall. To make your rings placement even better, they mustn\\\'t enter in collision with a badnick, and you must put 3 rings (or sometimes 4) at the beginning of every act, so that you can see them before the title card disappear entirely: this only to have a good start.\r\n\r\n<h3>Rings placement format:</h3>\r\nRings placement works almost exactly the same as sprites placement:\r\n\r\nXXXX FYYY\r\n\r\nX: X coordinate of the ring.\r\nY: Y coordinate of the ring.\r\nF: Ring flag.\r\n\r\nIn the rings placement, you don\\\'t need to write the object type. Only write the coordinates (4 bytes) and write the number of rings you want to be placed after this coordinate in game: usually, the first nybble of the Y coordinate is 0. This nybble is used as a flag for sprites placement. Here, this nybble will define how many rings to display in a row or column, separated by 24 pixels each other. For example, writing 1 instead of 0 will place one ring at the specified coordinate, and another 24 pixels to the right, on the same row. Here is what each number do:\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Ring flag</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Effect on screen</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">0</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place one ring</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">1</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 2 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">2</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 3 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">3</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 4 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">4</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 5 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">5</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 6 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">6</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 7 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">7</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 8 rings on the same row</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">8</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place one ring</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">9</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 2 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">A</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 3 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">B</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 4 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">C</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 5 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">D</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 6 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">E</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 7 rings on the same column</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">F</td><td align=\\\"center\\\" valign=\\\"middle\\\">Place 8 rings on the same column</td></tr></tbody></table>\r\n\r\nThis way, you can place a large amount of rings without too much work. You haven\\\'t to place them one by one. As for sprites, for each act of the game, there is a huge list in the ROM file where every rings placement are stored. Each 4 bytes is a new set of rings. At the end of the list, you have FF FF written.\r\n\r\nOne last thing, you can only place no more than 256 rings in the same act. This is for the perfect counter that takes only a one byte value in RAM. One more and the game will crash.\r\n\r\n<h3>Rings addresses:</h3>\r\nAs sprites placement, rings placement have their own lists.\r\nThere is an offset index for each level (2 bytes for an act) located at $E4300.\r\n\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Level</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Act</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Address for the list of rings</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Emerald Hill zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E4344</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E456A</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"3\\\" align=\\\"center\\\" valign=\\\"middle\\\">Metropolis zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E47B8</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E4A2A</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 3</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E4C48</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"1\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wing Fortress zone</td><td align=\\\"center\\\" valign=\\\"middle\\\"></td><td align=\\\"center\\\" valign=\\\"middle\\\">$E6154</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Hill Top zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E4D74</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E4EAA</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Hidden Palace zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E50E8</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E525A (empty)</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Oil Ocean zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5260</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5422</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Mystic Cave zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5598</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E570E</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Casino Night zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5944</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5B7E</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Chemical Plant zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5E2C</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E5F9E</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Death Egg zone</td><td align=\\\"center\\\" valign=\\\"middle\\\"></td><td align=\\\"center\\\" valign=\\\"middle\\\">$E6150</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Aquatic Ruin zone</td><td align=\\\"center\\\" valign=\\\"middle\\\">Act 1</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E6294</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Act 2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$E642E</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Sky Chase zone</td><td align=\\\"center\\\" valign=\\\"middle\\\"></td><td align=\\\"center\\\" valign=\\\"middle\\\">$E6684</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Unused space that you can use</td><td align=\\\"center\\\" valign=\\\"middle\\\"></td><td align=\\\"center\\\" valign=\\\"middle\\\">$E66D8 to $E67FF</td></tr></tbody></table>',64,4),(78,2,'HUD texts (SCORE-TIME-RINGS)','<h2>HUD texts (SCORE-TIME-RINGS):</h2>\r\n*Submitted by Guifrog on May 19 2005.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\n<h3>HUD texts format:</h3>\r\nThis part will make you able to edit things like the actions of the SCORE and the TIME & RINGS mappings, when you have little time or no rings in a level, where they will be located when flashing, etc.\r\n\r\nThe format for the texts is the following:\r\n\r\nYY NN RR GG ?? ?? ?? XX\r\n\r\nYY: The Y (or vertical) position on the screen.\r\nNN: How many sprites on the current object won\\\'t flash.\r\nRR: Red flash.\r\nGG: Graphics read position. Usually \\\"00\\\", to read the mappings from the beginning.\r\nXX: The X (horizontal) position on the screen.\r\n??: Unknown.\r\n\r\nFor the red flash, you can input several values, 8x8 in hex. Examples: if the mappings you are editing are for the TIME red flash (second frame of TIME, appears when you have little time in the level), you can input a \\\"08\\\" for mirroring the text while flashing, \\\"10\\\" for flipping, \\\"18\\\" for flip/mirroring, \\\"20\\\" to disable the flash. You can also input other values that will cause many interesting effects, like doing all of these with flash disabled (\\\"28\\\", \\\"30\\\", \\\"38\\\", \\\"40\\\") and so on.\r\n\r\nIf you want the TIME & RINGS to disappear instead of flashing when Sonic or Tails have no rings or little time, you can randomicly input values for all the bytes that compose this format for HUD editing, in the TIME & RINGS second frames (\\\"flashing\\\" frames, no rings/little time) offsets, of course.\r\n\r\n<h3>HUD texts addresses:</h3>\r\nNow, here is the addresses where you will be able to edit all these texts properly:\r\n\r\n<h4>One player game:</h4>\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Condition</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">SCOR</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Exxx</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">xxx0</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">TIME</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">x:xx</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">RING</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">S</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">xxxx</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Player picture</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Player name and lives</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Normal</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AA4</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AAC</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AB4</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40ABC</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AC4</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40ACC</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AD4</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40ADC</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AE4</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AEC</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">No rings</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AF6</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40AFE</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B06</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B0E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B16</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B1E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B26</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B2E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B36</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B3E</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Out of time</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B48</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B50</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B58</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B60</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B68</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B70</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B78</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B80</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B88</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B90</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">No rings and out of time</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40B9A</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BA2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BAA</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BB2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BBA</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BC2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BCA</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BD2</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BDA</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BE2</td></tr></tbody></table>\r\n\r\n<h4>Two players game:</h4>\r\n<table style=\\\"text-align: left; width: 100%;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">Condition</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">TIME</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">RING</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" valign=\\\"middle\\\">S</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Normal</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40BF8</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C00</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C08</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">No rings</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C12</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C1A</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C22</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">Out of time</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C2C</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C34</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C3C</td></tr><tr><td align=\\\"center\\\" valign=\\\"middle\\\">No rings and out of time</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C46</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C4E</td><td align=\\\"center\\\" valign=\\\"middle\\\">$40C56</td></tr></tbody></table>',65,1),(81,2,'Sprites and objects sound effects','<h2>Sprites and objects sound effects:</h2>\r\n*By Weird Person on May 29 2005.*\r\n*Corrected by Sonic Hachelle-Bee.*\r\n\r\n<h3>Sound effects changes:</h3>\r\nHere, I will explain how to change the sound effect of a sprite and/or an object. You only have to change a byte value in the ROM file, located into the sprite code in which you want to change the sound effect. Notice that changing this sound effect will affect every sprite: if you change the \\\"ring\\\" sound for a ring, all rings will have the new sound.\r\n\r\nThis byte to change is quite easy to understand. As every music and sound, the best way is to go in the Sound test and take note the ID number of the sound you want. Then, you only have to report this number into the ROM file at the right specified address:\r\n\r\n<table style=\\\"text-align: left; width: 450px; height: 420px;\\\" border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\"><tbody><tr><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" valign=\\\"middle\\\"></td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" align=\\\"middle\\\">Object description</td><td style=\\\"background-color: rgb(0, 34, 0);\\\" align=\\\"center\\\" align=\\\"middle\\\">Sound address</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"6\\\" align=\\\"center\\\" valign=\\\"middle\\\">Miscellaneous</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Shield monitor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$12A37</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Ring monitor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$129CD</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Invincibility monitor</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$12A81</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Starpost</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$1F191</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Up spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$18A69</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Right spring</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$18BBF</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"2\\\" style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Chemical Plant zone</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Speed booster</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$223DB</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Blue worm (3x)</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$224EA</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Aquatic Ruin zone</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Arrow launcher</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$257B7</td></tr><tr><td colspan=\\\"1\\\" rowspan=\\\"7\\\" style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Casino Night zone</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Star bumper</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$1F7F5</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Slot machine</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2BE1F</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">100 points cage</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2BE6B</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Blue bumper</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2C577</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Green flipper</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2B30B</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Orange flipper</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2B3BF</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Up impulse spring</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$2AE4F</td></tr><tr><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Hill Top zone</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Diagonal lift</td><td style=\\\"background-color: rgb(34, 68, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$21E75</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" colspan=\\\"1\\\" rowspan=\\\"2\\\" align=\\\"center\\\" valign=\\\"middle\\\">Wing Fortress zone</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Propellor (infinity)</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$3B3A3</td></tr><tr><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">Boss laser beam</td><td style=\\\"background-color: rgb(34, 51, 34);\\\" align=\\\"center\\\" align=\\\"middle\\\">$3CC0F</td></tr></tbody></table>',67,2),(82,4,NULL,'<b>Sonic Community Hacking Guide: Sonic the Hedgehog 2</b>\r\nby the awesome Sonic Hachelle-Bee and StephenUK',4,1),(85,3,'Sonic 2 Rev 00 disassembly (by drx)','http://www.hacking-cult.org/download/s2rev00.rar',84,2),(84,1,'<br><br>Rev 00 research',NULL,4,8),(86,2,'Differences between rev00 and rev01','On a small note, I made a few discoveries regarding the unused bg scrolling while exploring the differences between these two revisions. They are:\r\n\r\n\r\n1) These bg prove that 09Z was worked on.\r\n2) This proves there was a later Wood Zone than we have in our beta [the scrolling bg is missing in beta, ALSO, it would 100k ugly with the current beta bg!\r\n3) I found by mistake, that in beta, WZ is SCROLLING! The code for the scrolling doesn\\\'t work, but 100k at the debug camera coords :D Imagine the later WZ...\r\n\r\n\r\nNow, with the differences:\r\n\r\nSonic 2 Rev 00 and Rev 01 differences.\r\n\r\nI covered *ALL* differences, so stfu about pigs in CNZ etc.\r\n\r\nI\\\'m skipping the different jump/branch absolute addresses, for obvious reasons.\r\n\r\nrev00/rev01\r\n\r\n0x180/0x180 - Game serial (GM 00001051-00 - rev 00, GM 00001051-01 - rev 01)\r\n0x18e/0x18e - Checksum (obviously)\r\n\r\n====================\r\n\r\n0x306/0x306 - The following code was deleted in Rev 01:\r\n\r\nloc_306:\r\nmove.w  ($C00004).l,d1\r\nbtst    #1,d1\r\nbne.s   loc_306\r\n\r\n====================\r\n\r\n0xc28a/0xc296 - This is the background scrolling offset index. In Rev 01, some levels were cut off:\r\n\r\nWood_Zone_BG:\r\nasr.w   #2,d0\r\naddi.w  #$400,d0\r\nmove.w  d0,($FFFFEE0C).w\r\nasr.w   #3,d1\r\nmove.w  d1,($FFFFEE08).w\r\nrts    \r\n\r\nand HPZ:\r\n\r\nHidden_Palace_Zone_BG:\r\nasr.w   #1,d0\r\nmove.w  d0,($FFFFEE0C).w\r\nclr.l   ($FFFFEE08).w\r\nrts    \r\n\r\nThis BG isn\\\'t linked with the ROM in the offset index. I wonder if I could get it to work in some zone...\r\nEdit: This is actually level 09.\r\n\r\nUnknown_Zone_BG:\r\nasl.l   #4,d0\r\nmove.l  d0,d2\r\nasl.l   #1,d0\r\nadd.l   d2,d0\r\nasr.l   #8,d0\r\naddq.w  #1,d0\r\nmove.w  d0,($FFFFEE0C).w\r\nclr.l   ($FFFFEE08).w\r\n\r\n\r\n====================\r\n\r\n0x2ad7a/0x2ad78 - a bugfix in rev 01 (fixes the code for a vertical/diagonal spring from CNZ that you hold down jump on to pull back further). this code was inserted in rev 01:\r\n0x2af72/0x2af7a - the same bug fix, for the second time, in a different part of the code\r\n\r\nUpdate: the code somehow disables the spring code when you\\\'re dead. Tested in both Rev 00 and Rev 01, we haven\\\'t found the difference.\r\n\r\nBasically, the code is like:\r\n\r\nif (Sonic/Tails == dead) dont_spring;\r\n\r\nlocret_2AD78:\r\nrts  \r\n \r\nloc_2AD7A:\r\n\r\ncmpi.b  #4,$24(a1)\r\nbcc.s   locret_2AD78\r\n\r\n\r\nand the second bugfix:\r\n\r\nlocret_2AF78:\r\n\r\nrts    \r\n\r\nloc_2AF7A:\r\ncmpi.b  #4,$24(a1)\r\nbcc.s   locret_2AF78\r\n\r\n\r\n====================\r\n\r\n0x12000/0x11fd4 - A bugfix in Ring Object in Rev 01. Prevents from flagging (flagging is in the later, unedited code), that player got the 100 and 200 rings 1up, when he actually didn\\\'t get it (because of the lives overflow).\r\n\r\nthis code:\r\n------------\r\ncmpi.w  #999,($FFFFFE20).w;check if lives == 999\r\nbcc.s   lives_overflow;if lives >= 999, branch (skip changing the counter)\r\naddq.w  #1,($FFFFFE20).w;add 1 to lives counter\r\n\r\nlives_overflow:\r\nori.b   #1,($FFFFFE1D).w;some flag setting\r\nmove.w  #$B5,d0  ;set the 1up sound\r\n\r\n------------\r\n\r\nis changed to this: (I even commented it)\r\n------------\r\nloc_11FD4:\r\n\r\nmove.w  #$B5,d0  ;set the sound to 1up\r\ncmpi.w  #999,($FFFFFE20).w;check if lives == 999\r\nbcc.s   loc_12016 ;if lives >= 999, branch (skip adding to the counter etc.)\r\naddq.w  #1,($FFFFFE20).w;add one life to the counter\r\nori.b   #1,($FFFFFE1D).w;some flag setting\r\n\r\n------------\r\n\r\n====================\r\n\r\n0x12998/0x1296c - a bugfix in Super Ring Monitor in rev 01, that fixes the overflow of rings in rev 00.\r\n\r\nthis code:\r\n------------\r\nlea  ($FFFFFE20).w,a2\r\nlea  ($FFFFFE1D).w,a3\r\nlea  ($FFFFFE1B).w,a4\r\n\r\ncmpa.w  #$B000,a1\r\nbeq.s   Player_who_hit_the_monitor_is_Sonic\r\n\r\nlea     ($FFFFFED0).w,a2\r\nlea     ($FFFFFEC9).w,a3\r\nlea     ($FFFFFEC7).w,a4\r\n\r\nPlayer_who_hit_the_monitor_is_Sonic:\r\naddi.w  #10,(a2)\r\n------------\r\n\r\nis changed to this:\r\n\r\n------------\r\n lea ($FFFFFE20).w,a2\r\n lea ($FFFFFE1D).w,a3\r\n lea ($FFFFFE1B).w,a4\r\n lea ($FFFFFEF0).w,a5\r\n cmpa.w #$B000,a1\r\n beq.s Player_who_hit_the_monitor_is_Sonic\r\n lea ($FFFFFED0).w,a2\r\n lea ($FFFFFEC9).w,a3\r\n lea ($FFFFFEC7).w,a4\r\n lea ($FFFFFEF2).w,a5\r\n\r\nPlayer_who_hit_the_monitor_is_Sonic:\r\n addi.w #10,(a5)\r\n cmpi.w #999,(a5)\r\n bcs.s loc_129A0\r\n move.w #999,(a5)\r\n\r\nloc_129A0:\r\n addi.w #10,(a2)\r\n cmpi.w #999,(a2)\r\n bcs.s loc_129AE\r\n move.w #999,(a2)\r\n------------\r\n\r\nSo yeah, when you hit the Super Ring monitor with 999 rings, you overflow that in Rev 00. Also, Rev 01 adds an invisible copy of the rings value.\r\nRattle made pix of that:\r\n<a href=\\\"http://img195.imageshack.us/img195/1487/sonic2revision000054ng.jpg\\\" target=\\\"_blank\\\">http://img195.imageshack.us/img195/1487/so...ion000054ng.jpg</a>\r\n<a href=\\\"http://img195.imageshack.us/img195/3393/sonic2revision000064as.jpg\\\" target=\\\"_blank\\\">http://img195.imageshack.us/img195/3393/so...ion000064as.jpg</a>\r\n\r\n====================\r\n\r\n0x16634/0x16634 - this another bugfix changes this (in Rev 00): (btw, the loc_x are the Rev 01 locations)\r\n\r\ntst.b   (a0)\r\nbeq.w   loc_1671C\r\ntst.l   4(a0)\r\nbeq.w   loc_1671C\r\n\r\nto this (in Rev 01):\r\n\r\ntst.b   (a0)\r\nbeq.w   loc_166F2\r\n\r\nThis has something to do with dynamic level building. I have no idea what it does though =P\r\n\r\nfew bytes after this, there\\\'s another branch (bne). It was slightly changed in Rev 01:\r\n\r\nRev 00:\r\n bne.w loc_16724\r\nRev 01:\r\n bne.w loc_1671C\r\n\r\n====================\r\n\r\n0x16724/0x1671C - uh, no idea what it does. In Rev 01, the following code was removed:\r\n\r\nmove.w (1).w,d0\r\nbra.s loc_166F2\r\nloc_16724:\r\n\r\n====================\r\n\r\nDeleted/inserted NOPs (4e71):\r\n\r\n0xe5bc/0xe5e6 - one NOP deleted in Rev 01\r\n0x16f80/0x16f72 - one NOP inserted in Rev 01\r\n\r\n====================\r\n\r\n0x1ccfe/0x1ccec - another bugfix in Rev 01. This time fixes Tails\\\' code. This code (note: loc_x are Rev 01 locations):\r\n\r\nloc_1CCEC:\r\ntst.b   ($FFFFFE1A).w\r\nbne.s   loc_1CD38\r\n\r\nis changed to:\r\n\r\nloc_1CCEC:\r\ntst.b   ($FFFFFE1A).w\r\nbeq.s   loc_1CD0E\r\ntst.b   ($FFFFFECC).w\r\nbeq.s   loc_1CD38\r\nmove.w  #0,$3A(a0)\r\nclr.b   ($FFFFFE1E).w\r\nclr.b   ($FFFFFECA).w\r\nmove.b  #8,$24(a0)\r\nrts    \r\n\r\n\r\n====================\r\n\r\n0x20f54/0x20f64 - this code was deleted in Rev 01:\r\n\r\nloc_20f54:\r\ntst.w ($FFFFFE08).w\r\nbeq.s locret_20F64\r\njmp  sub_164F4\r\n\r\nbtw, few bytes higher, a reference to loc_20f54 was changed to locret_20F64:\r\n\r\nRev 00:\r\n bne.s loc_20f54\r\n\r\nRev 01:\r\n bne.s locret_20F64\r\n \r\n====================\r\n\r\n0x27144/0x27148 - this code:\r\n\r\njmp_164F4:\r\njmp     sub_164F4\r\n\r\nloc_27148:\r\njmp     loc_164E6\r\n\r\n\r\nis changed to this:\r\n\r\nloc_27148:\r\njmp     loc_164E6\r\n\r\nIn Rev 01 .Also, few jumps further, there is a 0x0000 word which is added in Rev 01.\r\n\r\n====================\r\n\r\n0x26ff0/0x26ff4 - this code:\r\n\r\n-----------\r\n bsr.s loc_2704c\r\nloc_26FF6:\r\n movem.l (sp)+,d1-d4\r\n lea ($FFFFB040).w,a1\r\n moveq #4,d6\r\n bsr.w loc_27154\r\n cmpi.b #1,d4\r\n bne.s loc_2702C\r\n btst #1,$22(a1)\r\n beq.s loc_2702C\r\n move.b $22(a0),d1\r\n move.w 8(a0),d0\r\n sub.w 8(a1),d0\r\n bcs.s loc_27024\r\n eori.b #1,d1\r\n\r\nloc_27024:\r\n andi.b #1,d1\r\n bne.s loc_2702C\r\n bsr.s loc_2704c\r\n\r\nloc_2702C:\r\n move.w 8(a0),d0\r\n andi.w #-$80,d0\r\n sub.w ($FFFFF7DA).w,d0\r\n cmpi.w #$280,d0\r\n bhi.w loc_27148\r\n tst.w ($FFFFFE08).w\r\n\r\nloc_27042:\r\n beq  fe08_null\r\n bsr.w jmp_164F4\r\nfe08_null:\r\n rts\r\n\r\n-----------\r\n\r\nis changed to this:\r\n\r\n-----------\r\n bsr.s loc_27042\r\nloc_26FF6:\r\n movem.l (sp)+,d1-d4\r\n lea ($FFFFB040).w,a1\r\n moveq #4,d6\r\n bsr.w loc_27154\r\n cmpi.b #1,d4\r\n bne.s loc_2702C\r\n btst #1,$22(a1)\r\n beq.s loc_2702C\r\n move.b $22(a0),d1\r\n move.w 8(a0),d0\r\n sub.w 8(a1),d0\r\n bcs.s loc_27024\r\n eori.b #1,d1\r\n\r\nloc_27024:\r\n andi.b #1,d1\r\n bne.s loc_2702C\r\n bsr.s loc_27042\r\n\r\nloc_2702C:\r\n move.w 8(a0),d0\r\n andi.w #-$80,d0\r\n sub.w ($FFFFF7DA).w,d0\r\n cmpi.w #$280,d0\r\n bhi.w loc_27148\r\n rts\r\n\r\nloc_27042:\r\n cmpi.b #4,$24(a1)\r\n bcs.s loc_2704C\r\n rts\r\n-----------\r\n\r\n====================\r\n\r\n0x42d26/0x42d36 - Pattern Load Cue $3a had doubled patterns, which wasted space. This was fixed in Rev 01. This code:\r\n\r\nPLC_3A:\r\n dc.w 3\r\n dc.l ArtNem_7D22C\r\n dc.w $B000\r\n dc.l ArtNem_7E86A\r\n dc.w $B600\r\n dc.l ArtNem_7C2F2\r\n dc.w $BE80\r\n dc.l ArtNem_7EEBE\r\n dc.w $A800\r\n dc.l ArtNem_7C2F2\r\n dc.w $BE80\r\n dc.l ArtNem_7EEBE\r\n dc.w $A800\r\n dc.l $0\r\n \r\nwas changed tO:\r\n\r\nPLC_3A:\r\n dc.w 3\r\n dc.l ArtNem_7D22C\r\n dc.w $B000\r\n dc.l ArtNem_7E86A\r\n dc.w $B600\r\n dc.l ArtNem_7C2F2\r\n dc.w $BE80\r\n dc.l ArtNem_7EEBE\r\n dc.w $A800\r\n \r\n====================\r\n\r\n0x12aee/0x12ae2 - bugfix, clearing Sonic and Tails animations on some ocassion (in routine #9, btw). Anyway, this code was inserted:\r\n\r\nmove.b  #0,($FFFFB01A).w\r\nmove.b  #0,($FFFFB05A).w\r\n\r\n====================\r\n\r\n0xbaee/0xbafa - changes the typo in credits (in Rev 00 it says Tohmas - Rev 01 fixes it to Thomas)\r\n\r\n====================\r\n\r\nUpdate: this is probably music changes\r\n\r\n0x180b4/0x180a8 - slight change. I don\\\'t know what it does.\r\n\r\nRev 00: 0x05 B4 24 18 86 00 05 B8 82 E8 44 00 06 2C 86 A8 44 00 06 48 02 60\r\nRev 01: 0x05 B0 24 10 86 00 05 B8 82 E8 44 00 06 2C 86 A8 44 00 06 38 03 0C\r\n\r\n0x1841b/0x1840f - another change in this chunk of data\r\n\r\nRev 00: 0x40\r\nRev 01: 0x50\r\n\r\n0x184b7/0x184ab:\r\nR00: 0x60\r\nR01: 0x40\r\n\r\n0x184f3/0x184e7:\r\nR00: 0x60\r\nR01: 0x40\r\n\r\n0x186a3/0x18697:\r\nR00: 0xC0 87 D0 C8 AC 16 E0 03 00 74 33\r\nR01: 0xE0 03 00 74 33 16 E0 87 D0 C8 AC\r\n\r\n0x187e7/0x187db:\r\nR00: 0x70 03 90 84 00 21 A5 04 44 85 81 21 B0 81 70 C8 AC 22 80 02 C0 03 D0 22 F8 02 F0 03 52 23 18 03 6C 86 00 23 50 02 8C D6 00 23 5C\r\nR01: 0x20 81 70 C8 AC 21 70 03 90 84 00 21 A5 04 44 85 81 22 80 02 C0 03 D0 22 F8 02 F0 03 52 23 48 03 70 86 00 23 50 02 8C D6 00 23 90\r\n\r\n====================\r\n\r\nThe last one. Yay. Object placement changes:\r\n\r\nThe format is X (2 bytes), Y (2 bytes), object (2 bytes)\r\n\r\nEHZ2\r\n-----\r\nRev00: $1A08, $0380, $030A\r\nRev01: $19F8, $0328, $030A\r\n\r\nThe $030a object is a collision switch. I have no idea why Sega changed it though. As Gunner112k said: \\\"The first thing I tried to do in this ROM is to go to EHZ Act 2 and go to that fucking secret wall that has been haunting my life forever. IT WORKED.\r\n\r\n(I never told people about that, but in the rev 01 ROM you could never get through that secret wall, and I originally owned 2 Sonic 2 carts, one that you could get through and one that you couldn\\\'t. So that means I had this rev 00 for so long.)\\\"\r\n\r\n\r\nWFZ1\r\n-----\r\nRev00: $0A79, $0368, $7901\r\nRev01: $0A79, $8368, $7901\r\n\r\nRev00: $17F1, $062C, $7902\r\nRev01: $17F1, $862C, $7902\r\n\r\nRev00: $282E, $0428, $7903\r\nRev01: $282E, $8428, $7903\r\n\r\nThey\\\'re lampposts. I don\\\'t know why the changed the Y coords, though.\r\n\r\n\r\nCNZ1\r\n-----\r\nRev00: $2840, $0688, $0D00\r\nRev01: $2840, $0684, $0D00\r\n\r\nThe sign post in CNZ1 was moved a bit too far down.\r\n\r\n\r\nCNZ2\r\n-----\r\nRev00: $2740, $0668, $0D00\r\nRev01: $2740, $0664, $0D00\r\n\r\n\r\n====================',84,1),(87,2,'Wav Player v1.0',';---------------------------------------\r\n;\r\n; Wav Player v1.0\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;        [www.bluehedgehog.org]\r\n;\r\n; Plays the sound.wav wav sound.\r\n;\r\n;---------------------------------------\r\n\r\n\r\nVectors:	dc.l $FFFE00,	Entrypoint,	Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l HBlank,	Error,		VBlank,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\nHeader:		dc.b \\\'SEGA MEGA DRIVE \\\' ; Console name\r\n		dc.b \\\'(C) DRX 2004.NOV\\\' ; Copyright/Date\r\nDomesticName:	dc.b \\\'Code template by drx - www.hacking-cult.org     \\\' ; Domestic Name\r\n		dc.b \\\'Code template by drx - www.hacking-cult.org     \\\' ; International Name\r\n		dc.b \\\'GM 00000000-00\\\'   ; Version\r\nChecksum:	dc.w $1337\r\n					; Checksum\r\n		dc.b \\\'J               \\\' ; I/O Support\r\nRomStartLoc:	dc.l 0			; ROM Start\r\nRomEndLoc:	dc.l RomEnd\r\n					; ROM End\r\nRamStartLoc:	dc.l $FF0000		; RAM Start\r\nRamEndLoc:	dc.l $FFFFFF		; RAM End\r\n\r\n		dc.b $20,$20,$20,$20	; \\\'RA\\\',$F8,$20 if SRAM = on\r\n		\r\nSramStart:	dc.l $20202020		; $200000 if SRAM = on\r\nSramEnd:	dc.l $20202020		; $20xxxx if SRAM = on\r\n		\r\n		dc.b \\\'                                              \\\' ; Notes\r\n		dc.b \\\'      \\\'\r\n		dc.b \\\'JUE             \\\' ; Country\r\n\r\n;---------------------\r\n; Code start\r\n;---------------------\r\n		\r\nEntrypoint:\r\n\r\n		tst.l	($A10008).l		;Test Port A control\r\n		bne	PortA_Ok\r\n\r\n		tst.w	($A1000C).l		;Test Port C control\r\n\r\nPortA_Ok:\r\n		bne	SkipSetup\r\n\r\n		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;if the smd/gen model is 1, skip the security\r\n		move.l	#\\\'SEGA\\\',($A14000).l\r\n\r\nSkipSecurity:   \r\n\r\n		move.w	($C00004).l,d0		;test if VDP works\r\n\r\n		moveq	#0,d0\r\n		movea.l	d0,a6\r\n		move	a6,usp			;set usp to $0\r\n		\r\n;---------------------\r\n; Setup VDP registers\r\n;---------------------\r\n		lea	(VDPSetupArray),a0\r\n		move.w	#(VDPSetupArrayEnd-VDPSetupArray)/2,d1	;$18 VDP registers\r\n		\r\nVDPSetupLoop:\r\n		move.w	(a0)+,($C00004).l\r\n		dbf	d1,VDPSetupLoop\r\n		\r\n		\r\n		move.l	#$40000080,($C00004).l\r\n		move.w	#0,($C00000).l		;clean the screen\r\n	\r\n	\r\n;---------------------\r\n; Init the Z80\r\n;---------------------	\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Init),a0\r\n		lea	($A00000).l,a1\r\n		move.w	#Z80InitEnd-Z80Init,d1\r\n		\r\nInitZ80:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,InitZ80\r\n		\r\n		move.w	#0,($A11200).l\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n		move.w	#$100,($A11200).l\r\n		\r\n	\r\n;---------------------\r\n; Reset the RAM\r\n;---------------------	\r\n\r\n		lea	($FFFF0000).l,a0\r\n		move.w	#$3fff,d1\r\n		\r\nClearRAM:\r\n		move.l	#0,(a0)+\r\n		dbf	d1,ClearRAM\r\n		\r\n		\r\n;---------------------\r\n; VDP again\r\n;---------------------			\r\n		\r\n		move.w	#$8174,($C00004).l\r\n		move.w	#$8F02,($C00004).l\r\n		\r\n		\r\n;---------------------\r\n; Clear the CRAM\r\n;---------------------	\r\n\r\n		move.l	#$C0000000,($C00004).l	;Set VDP ctrl to CRAM write\r\n		move.w	#$3f,d1\r\n		\r\nClearCRAM:\r\n		move.w	#0,($C00000).l\r\n		dbf	d1,ClearCRAM\r\n		\r\n			\r\n;---------------------\r\n; Clear the VDP stuff\r\n;---------------------		\r\n\r\n		move.l	#$40000010,($C00004).l\r\n		move.w	#$13,d1\r\n		\r\nClearStuff:\r\n		move.l	#0,($C00000).l\r\n		dbf	d1,ClearStuff\r\n		\r\n\r\n;---------------------\r\n; Init the PSG\r\n;---------------------	\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		\r\n		move.w	#0,($A11200).l\r\n		\r\n		\r\n;---------------------\r\n; Load the z80 driver\r\n;---------------------\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80a:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80a		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Driver),a0\r\n		lea	($A00000).l,a1\r\n		move.W	#Z80DriverEnd-Z80Driver,d1\r\n		\r\nLoadZ80Driver:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,LoadZ80Driver\r\n		\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n	\r\n;---------------------\r\n; Clear the registers\r\n; and set the SR\r\n;---------------------	\r\n\r\n		movem.l	($FF0000).l,d0-a6	\r\n		lea	($FFFE00).l,a7\r\n		move	#$2700,sr\r\n\r\nSkipSetup:	\r\n\r\n	\r\n;-----------------------\r\n; Here starts your code\r\n;-----------------------\r\nMain:\r\n\r\n;\r\n;ok, so we have to stop the z80 in order to set up the variables\r\n;\r\n		\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		\r\n;		\r\n; loops until z80 is halted\r\n;		\r\nWaitforz80b:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80b		;Wait for z80 to halt\r\n		\r\n\r\n;\r\n;in our sound driver, $39 is the on/off variable\r\n;\r\n		move.b	#1,($a00039).l		;turn the wav playing script on\r\n\r\n;		\r\n;we have to bitshift the wav address a bit, because Z80 is little endian, compared to 68k (big endian)\r\n;\r\n;data: 		$12345678\r\n;big endian: 	$12345678\r\n;little endian:	$78563412\r\n;\r\n		move.b	#((SoundStart&0xFF0000)>>16),($a0003c).l	;addr - $__xxxx\r\n		move.b	#((SoundStart&0xFF00)>>8),($a0003b).l		;addr - $xx__xx\r\n		move.b	#(SoundStart&0xFF),($a0003a).l			;addr - $xxxx__\r\n		\r\n;		\r\n; set up the wav length (number of bytes played)\r\n;		\r\n		move.w	#SoundEnd-SoundStart,($a00043).l	;wav length\r\n\r\n;\r\n; now we can start te z80 after changing the variables\r\n;\r\n		move.w	#$0,($A11100).l		;Start the Z80\r\n		\r\n;		\r\n; the infinite loop will occur now, and the z80 will work in the background (z80 and 68k work simultaneously [spelling... :P])\r\n;\r\n		dc.w	$60fe			;infinite loop (bra $-2)\r\n\r\n		rts\r\n		\r\n		\r\n;---------------------\r\n; Error exceptions\r\n;---------------------\r\n\r\nError:\r\n		rte\r\n		\r\n;---------------------\r\n; Horizontal Blank\r\n;---------------------\r\nHBlank:\r\n\r\n		rte\r\n				\r\n;---------------------\r\n; Vertical Blank\r\n;---------------------\r\nVBlank:\r\n\r\n		rte\r\n\r\n;---------------------\r\n; VDP registers array\r\n;---------------------\r\n\r\nVDPSetupArray:\r\n		dc.w	$8004	;9-bit palette = 1 (otherwise would be 3-bit), HBlank = 0\r\n		dc.w	$8134	;Genesis display = 1, DMA = 1, VBlank = 1, display = 0\r\n		dc.w	$8230	;Scroll A - $C000\r\n		dc.w	$8338	;Window   - $E000\r\n		dc.w	$8407	;Scroll B - $E000\r\n		dc.w	$857c	;Sprites  - $F800\r\n		dc.w	$8600	;Unused\r\n		dc.w	$8700	;Backdrop color - $00\r\n		dc.w	$8800	;Unused\r\n		dc.w	$8900	;Unused\r\n		dc.w	$8A00	;H Interrupt register\r\n		dc.w	$8B00	;Full screen scroll, no external interrupts\r\n		dc.w	$8C81	;40 cells display\r\n		dc.w	$8D3F	;H Scroll - $FC00\r\n		dc.w	$8E00	;Unused\r\n		dc.w	$8F02	;VDP auto increment\r\n		dc.w	$9001	;64 cells scroll\r\n		dc.w	$9100	;Window H position\r\n		dc.w	$9200	;Window V position\r\n		dc.w	$93FF	;DMA stuff (off)\r\n		dc.w	$94FF	;DMA stuff (off)\r\n		dc.w	$9500	;DMA stuff (off)\r\n		dc.w	$9600	;DMA stuff (off)\r\n		dc.w	$9780	;DMA stuff (off)\r\nVDPSetupArrayEnd:\r\n\r\n\r\n;---------------------\r\n; Z80 init code\r\n;---------------------\r\n\r\nZ80Init:\r\n	dc.w	$af01, $d91f, $1127, $0021, $2600, $f977 \r\n	dc.w    $edb0, $dde1, $fde1, $ed47, $ed4f, $d1e1                                   \r\n	dc.w    $f108, $d9c1, $d1e1, $f1f9, $f3ed, $5636\r\n	dc.w	$e9e9 \r\nZ80InitEnd:\r\n\r\n;---------------------\r\n; Music driver (z80)\r\n;---------------------		\r\n\r\nZ80Driver:\r\n		dc.b	$c3,$46,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r\n		dc.b	$00,$00,$00,$00,$00,$f3,$ed,$56,$31,$00,$20,$3a,$39,$00,$b7,$ca,$4c,$00,$21,$3a,$00,$11,$40,$00,$01,$06,$00,$ed,$b0,$3e,$00,$32,$39,$00,$3e,$b4,$32,$02,$40,$3e,$c0,$32,$03,$40,$3e,$2b,$32,$00,$40,$3e,$80,$32,$01,$40,$3a,$43,$00,$4f,$3a,$44,$00,$47,$3e,$06,$3d\r\n		dc.b	$c2,$81,$00,$21,$00,$60,$3a,$41,$00,$07,$77,$3a,$42,$00,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$3a,$40,$00,$6f,$3a,$41,$00,$f6,$80,$67,$3e,$2a,$32,$00,$40,$7e,$32,$01,$40,$21,$40,$00,$7e,$c6,$01,$77,$23,$7e,$ce,$00,$77,$23,$7e,$ce,$00,$77\r\n		dc.b	$3a,$39,$00,$b7,$c2,$4c,$00,$0b,$78,$b1,$c2,$7f,$00,$3a,$45,$00,$b7,$ca,$4c,$00,$3d,$3a,$45,$00,$06,$ff,$0e,$ff,$c3,$7f,$00\r\nZ80DriverEnd:\r\n\r\n\r\nSoundStart:\r\n		incbin	sound.wav\r\nSoundEnd:\r\n\r\nRomEnd:\r\n',29,4),(88,2,'FM Song Player',';---------------------------------------\r\n;\r\n; FM Song Player\r\n;\r\n; by drx [www.hacking-cult.org]\r\n;        [www.bluehedgehog.org]\r\n;\r\n; Plays some Beethoven using the Megadrive FM Chip, accessed by 68k\r\n; Features its own song format\r\n;\r\n;---------------------------------------\r\n\r\n\r\nVectors:	dc.l $FFFE00,	Entrypoint,	Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l HBlank,	Error,		VBlank,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\n		dc.l Error,	Error,		Error,	Error\r\nHeader:		dc.b \\\'SEGA MEGA DRIVE \\\' ; Console name\r\n		dc.b \\\'(C) DRX 2004.NOV\\\' ; Copyright/Date\r\nDomesticName:	dc.b \\\'FM Song Player by drx - www.hacking-cult.org    \\\' ; Domestic Name\r\n		dc.b \\\'FM Song Player by drx - www.hacking-cult.org    \\\' ; International Name\r\n		dc.b \\\'GM 00000000-00\\\'   ; Version\r\nChecksum:	dc.w $1337\r\n					; Checksum\r\n		dc.b \\\'J               \\\' ; I/O Support\r\nRomStartLoc:	dc.l 0			; ROM Start\r\nRomEndLoc:	dc.l RomEnd\r\n					; ROM End\r\nRamStartLoc:	dc.l $FF0000		; RAM Start\r\nRamEndLoc:	dc.l $FFFFFF		; RAM End\r\n\r\n		dc.b $20,$20,$20,$20	; \\\'RA\\\',$F8,$20 if SRAM = on\r\n		\r\nSramStart:	dc.l $20202020		; $200000 if SRAM = on\r\nSramEnd:	dc.l $20202020		; $20xxxx if SRAM = on\r\n		\r\n		dc.b \\\'                                              \\\' ; Notes\r\n		dc.b \\\'      \\\'\r\n		dc.b \\\'JUE             \\\' ; Country\r\n\r\n;---------------------\r\n; Code start\r\n;---------------------\r\n		\r\nEntrypoint:\r\n\r\n		tst.l	($A10008).l		;Test Port A control\r\n		bne	PortA_Ok\r\n\r\n		tst.w	($A1000C).l		;Test Port C control\r\n\r\nPortA_Ok:\r\n		bne	SkipSetup\r\n\r\n		move.b	($A10001).l,d0		;version\r\n		andi.b	#$F,d0\r\n		beq	SkipSecurity		;if the smd/gen model is 1, skip the security\r\n		move.l	#\\\'SEGA\\\',($A14000).l\r\n\r\nSkipSecurity:   \r\n\r\n		move.w	($C00004).l,d0		;test if VDP works\r\n\r\n		moveq	#0,d0\r\n		movea.l	d0,a6\r\n		move	a6,usp			;set usp to $0\r\n		\r\n;---------------------\r\n; Setup VDP registers\r\n;---------------------\r\n		lea	(VDPSetupArray),a0\r\n		move.w	#(VDPSetupArrayEnd-VDPSetupArray)/2,d1	;$18 VDP registers\r\n		\r\nVDPSetupLoop:\r\n		move.w	(a0)+,($C00004).l\r\n		dbf	d1,VDPSetupLoop\r\n		\r\n		\r\n		move.l	#$40000080,($C00004).l\r\n		move.w	#0,($C00000).l		;clean the screen\r\n	\r\n	\r\n;---------------------\r\n; Init the Z80\r\n;---------------------	\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Init),a0\r\n		lea	($A00000).l,a1\r\n		move.w	#Z80InitEnd-Z80Init,d1\r\n		\r\nInitZ80:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,InitZ80\r\n		\r\n		move.w	#0,($A11200).l\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n		move.w	#$100,($A11200).l\r\n		\r\n	\r\n;---------------------\r\n; Reset the RAM\r\n;---------------------	\r\n\r\n		lea	($FFFF0000).l,a0\r\n		move.w	#$3fff,d1\r\n		\r\nClearRAM:\r\n		move.l	#0,(a0)+\r\n		dbf	d1,ClearRAM\r\n		\r\n		\r\n;---------------------\r\n; VDP again\r\n;---------------------			\r\n		\r\n		move.w	#$8174,($C00004).l\r\n		move.w	#$8F02,($C00004).l\r\n		\r\n		\r\n;---------------------\r\n; Clear the CRAM\r\n;---------------------	\r\n\r\n		move.l	#$C0000000,($C00004).l	;Set VDP ctrl to CRAM write\r\n		move.w	#$3f,d1\r\n		\r\nClearCRAM:\r\n		move.w	#0,($C00000).l\r\n		dbf	d1,ClearCRAM\r\n		\r\n			\r\n;---------------------\r\n; Clear the VDP stuff\r\n;---------------------		\r\n\r\n		move.l	#$40000010,($C00004).l\r\n		move.w	#$13,d1\r\n		\r\nClearStuff:\r\n		move.l	#0,($C00000).l\r\n		dbf	d1,ClearStuff\r\n		\r\n\r\n;---------------------\r\n; Init the PSG\r\n;---------------------	\r\n\r\n		move.b	#$9F,($C00011).l\r\n		move.b	#$BF,($C00011).l\r\n		move.b	#$DF,($C00011).l\r\n		move.b	#$FF,($C00011).l\r\n		\r\n		\r\n		move.w	#0,($A11200).l\r\n		\r\n		\r\n;---------------------\r\n; Load the z80 driver\r\n;---------------------\r\n\r\n		move.w	#$100,($A11100).l	;Stop the Z80\r\n		move.w	#$100,($A11200).l	;Reset the Z80\r\n		\r\nWaitforz80a:\r\n		btst	#0,($A11100).l\r\n		bne	Waitforz80a		;Wait for z80 to halt\r\n		\r\n		lea	(Z80Driver),a0\r\n		lea	($A00000).l,a1\r\n		move.W	#Z80DriverEnd-Z80Driver,d1\r\n		\r\nLoadZ80Driver:\r\n		move.b	(a0)+,(a1)+\r\n		dbf	d1,LoadZ80Driver\r\n		\r\n		move.w	#0,($A11100).l		;Start the Z80\r\n	\r\n;---------------------\r\n; Clear the registers\r\n; and set the SR\r\n;---------------------	\r\n\r\n		movem.l	($FF0000).l,d0-a6	\r\n		lea	($FFFE00).l,a7\r\n		move	#$2700,sr\r\n\r\nSkipSetup:	\r\n\r\n	\r\n;-----------------------\r\n; Here starts your code\r\n;-----------------------\r\nMain:\r\n \r\n;\r\n; Stop the Z80 (Z80 and 68k cannot access FM at the same time)\r\n;\r\n		move.w	#$100,($A11100).l\r\n		\r\n;\r\n; Setup FM registers\r\n;\r\n		lea	(FMRegArray),a0\r\n		move.l	#(FMRegArrayEnd-FMRegArray)/2,d7	;number of registers (simple math :P)\r\n		\r\nFMRegLoop:\r\n		move.b	(a0)+,d0\r\n		move.b	(a0)+,d1\r\n		bsr	RegisterWrite		;write to a FM register\r\n		dbf	d7,FMRegLoop		;loop until all registers are written to the FM memory\r\n\r\n\r\n;\r\n; Song playing loop\r\n;			\r\n		move.w	#((SongEnd-Song)/3)-1,d4	;number of notes (simple math again =P)\r\n		lea	(Song).l,a1\r\n\r\nPlaySong:\r\n		move.b	(a1)+,d0	;load the note\r\n		move.b	(a1)+,d1	;load the octave\r\n		move.l	#$80,d2		;the length of the full note (in unidentified time ammount thingy - let\\\'s call it ms from now on :P)\r\n		move.b	(a1)+,d3	;load the note type\r\n		bpl	noL		;if it\\\'s positive (bit 7 is 1 [$80]), branch\r\n		\r\n		add.l	#$40,d2		;if this flag is set (didn\\\'t branch), add 0.5 of the previous note length\r\n			\r\nnoL:\r\n		andi.b	#$7f,d3		;strip out the $80 flag\r\n		lsr.l	d3,d2		;shift the length to the right x times - x = d3\r\n		bsr	PlayNote	;branch to the PlayNote subroutine\r\n		\r\n		dbf	d4,PlaySong	;loop, until the song ends\r\n		\r\n		move.w	#$0,($A11100).l	;now we have finished working with the FM, so we can start the Z80\r\n\r\n		dc.w	$60fe			;infinite loop (bra $-2)\r\n\r\n		rts\r\n\r\n\r\n;-----------------------\r\n; Play a note\r\n;\r\n; Input:\r\n;  d0.b - note (1-12)\r\n;  d1.b - octave (1-7)\r\n;  d2.l - note duration (in ms)\r\n;-----------------------\r\nPlayNote:\r\n\r\n		move.l	d2,-(sp)	;let\\\'s store the note duration on the stack for now\r\n		\r\n		lea	(NoteArray).l,a0\r\n\r\n;\r\n; There are registers ($a0, $a4), which store the frequency. The frequencies are 14-bit values and the format is:\r\n;\r\n;  00aa abbb bbbb bbbb\r\n;\r\n;  a - octave (1-7)\r\n;  b - note inside the octave\r\n;\r\n\r\n;\r\n; First, the note. We have a note frequency array and we have to convert our input from 1-12 to those frequencies\r\n;	\r\n		sub.b	#1,d0		;we have to substract 1 from d0, because the array starts from 0, not 1\r\n		bmi	NoSound		;if the result is negative ($80-$ff), we get no sound - the d0 was 00 (pause) or smaller before the substraction\r\n		add.b	d0,d0		;multiply the result by 2		\r\n		andi.w	#$ff,d0		;strip the higher byte of word\r\n		move.w	(a0,d0.w),d3	;the array magic\r\n\r\n;\r\n; now we have to shift the octave to the left and add it to the note\r\n;\r\n		andi.l	#$7,d1		;strip out unneeded stuff (you don\\\'t HAVE TO do it, but it\\\'s safer sometimes)	\r\n		lsl.w	#8,d1		;\r\n		lsl.w	#3,d1		; shift 8+3=11 bits\r\n		\r\n		add.w	d1,d3		; add the octave to the note\r\n\r\n;\r\n; now, the register $a4 stores the higher byte of the frequency, the $a0 stores the lower byte. easy\r\n;		\r\n		move.w	d3,d1\r\n		lsr.w	#8,d1		;shift the higher byte to the lower byte\r\n		move.b	#$a4,d0		;register number\r\n		bsr	RegisterWrite\r\n		\r\n		move.w	d3,d1\r\n		andi.w	#$ff,d1		;strip out the higher byte (leave only the lower byte)\r\n		move.b	#$a0,d0		;lower freq register\r\n		\r\n		bsr	RegisterWrite	;no idea what this does, really *shot*\r\n		\r\n		move.b	#$28,d0		;key register\r\n		move.b	#$f0,d1		;turn our channel on (the note starts playing)\r\n		bsr	RegisterWrite	;no need to comment this 1234 times\r\n\r\nNoSound:\r\n		move.l	(sp)+,d0	;take our note duration back from stack\r\n		bsr	Sleep		;the strange sleep function, which \\\'sleeps\\\' for unknown time :P the only thing known is that, if d0 rises, the sleep length rises =P\r\n		\r\n		move.b	#$28,d0		;key register\r\n		move.b	#$00,d1		;after playing the note for some time, let\\\'s turn the channel off :P\r\n		bsr	RegisterWrite\r\n		\r\n		rts\r\n\r\n;\r\n; Frequencies for all 12 notes (C, C#, D, etc.)\r\n;\r\nNoteArray:\r\n		dc.w	617,	653,	692, 	733\r\n		dc.w	777,	823,	872,	924\r\n		dc.w	979,	1037,	1099,	1164\r\n\r\n;-----------------------\r\n; Write to FM register\r\n;\r\n; Input:\r\n;  d0.b - register\r\n;  d1.b - data\r\n;-----------------------\r\n\r\nRegisterWrite:\r\n		move.b	($A04000).l,d2		;the status register. it could be actually anything from $a04000 to $a04003 (yeah, wide range =P)\r\n		btst	#7,d2			;check the BUSY bit\r\n		bne.s	RegisterWrite		;if FM is busy, wait (loop)\r\n		move.b	d0,($A04000).l		;if it\\\'s not, write our register number to the \\\'control\\\' address 1\r\n		nop     			;let\\\'s wait (=P)\r\n		nop     \r\n		nop\r\n		\r\nRegisterWrite_Loop2:\r\n		move.b	($A04000).l,d2		;we have to wait again, to write the data now\r\n		btst	#7,d2\r\n		bne.s	RegisterWrite_Loop2\r\n		move.b	d1,($A04001).l		;write our data to the \\\'data\\\' address 1 (ie. to our register)\r\n		rts   				\r\n;\r\n; ok, why address 1?\r\n;  because there is also address 2, which is only for channels 3-6 :P\r\n;	\r\n\r\n;---------------------\r\n; Sleep\r\n;\r\n; d0.l - sleep time (ms)\r\n;---------------------	\r\nSleep:\r\n		move.l	#4193,d1\r\n	\r\nms:\r\n		sub.l	#1,d1\r\n		bne	ms\r\n		\r\n		sub.l	#1,d0\r\n		bne	Sleep\r\n		\r\n		rts		\r\n		\r\n;---------------------\r\n; Error exceptions\r\n;---------------------\r\n\r\nError:\r\n		rte\r\n		\r\n;---------------------\r\n; Horizontal Blank\r\n;---------------------\r\nHBlank:\r\n\r\n		rte\r\n				\r\n;---------------------\r\n; Vertical Blank\r\n;---------------------\r\nVBlank:\r\n\r\n		rte\r\n\r\n;---------------------\r\n; Note constants\r\n;---------------------\r\n\r\nP	= $00\r\nC	= $01\r\nCP	= $02\r\nD	= $03\r\nDP	= $04\r\nE	= $05\r\nF	= $06\r\nFP	= $07\r\nG	= $08\r\nGP	= $09\r\nA	= $0a\r\nAP	= $0b\r\nH	= $0c\r\n\r\nL	= $80	;lengths the note duration by 0.5\r\n\r\n;---------------------\r\n; My little song format\r\n;\r\n;  1st value - note\r\n;   00 - pause\r\n;   01 - C	02 - C#\r\n;   03 - D	04 - D#\r\n;   05 - E\r\n;   06 - F	07 - F#\r\n;   08 - G	09 - G#\r\n;   0a - A	0b - A# ;this is probably something different, I suck at this =PPP\r\n;   0c - H\r\n;\r\n;  2nd value - octave (1-7)\r\n;  3rd value - duration\r\n;   00 - full note\r\n;   01 - half\r\n;   02 - quarter\r\n;   03 - eight\r\n;   04 - sixtienth\r\n;\r\n;---------------------\r\n\r\nSong:\r\n\r\n		dc.b	E, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	E, $04, $02|L\r\n		dc.b	D, $04, $03\r\n		dc.b	D, $04, $01\r\n		\r\n		dc.b	E, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02|L\r\n		dc.b	C, $04, $03\r\n		dc.b	C, $04, $01\r\n		\r\n		dc.b	D, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $03\r\n		dc.b	F, $04, $03\r\n		dc.b	E, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $03\r\n		dc.b	F, $04, $03\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	G, $03, $01\r\n		\r\n		dc.b	E, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	G, $04, $02\r\n		dc.b	F, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	C, $04, $02\r\n		dc.b	D, $04, $02\r\n		dc.b	E, $04, $02\r\n		dc.b	D, $04, $02|L\r\n		dc.b	C, $04, $03\r\n		dc.b	C, $04, $01\r\n				\r\n		\r\n\r\nSongEnd:\r\n\r\n\r\n;---------------------\r\n; FM registers array\r\n;\r\n;  1st value - register\r\n;  2nd value - data\r\n;---------------------\r\n\r\nFMRegArray:\r\n		dc.b	$22, $00	; LFO off\r\n		dc.b	$27, $00	; Channel 3 mode normal\r\n		\r\n		dc.b	$28, $00	; All channels off\r\n		dc.b	$28, $01	;\r\n		dc.b	$28, $02	;\r\n		dc.b	$28, $04	;	\r\n		dc.b	$28, $05	;\r\n		dc.b	$28, $06	;\r\n		\r\n		dc.b	$2B, $00	; DAC off\r\n		\r\n		dc.b	$30, $71	; DT1/MUL\r\n		dc.b	$34, $0d	;\r\n		dc.b	$38, $33	;	\r\n		dc.b	$3c, $01	;\r\n		\r\n		dc.b	$40, $23	; Total Level\r\n		dc.b	$44, $2d	;\r\n		dc.b	$48, $26	;\r\n		dc.b	$4c, $00	;\r\n		\r\n		dc.b	$50, $5f	; RS/AR\r\n		dc.b	$54, $99	;\r\n		dc.b	$58, $5f	;\r\n		dc.b	$5c, $94	;\r\n		\r\n		dc.b	$60, $05	; AM/DIR\r\n		dc.b	$64, $05	;\r\n		dc.b	$68, $05	;\r\n		dc.b	$6c, $07	;\r\n		\r\n		dc.b	$70, $02	; D2R\r\n		dc.b	$74, $02	;	\r\n		dc.b	$78, $02	;\r\n		dc.b	$7c, $02	;\r\n		\r\n		dc.b	$80, $11	; D1L/RR\r\n		dc.b	$84, $11	;\r\n		dc.b	$88, $11	;\r\n		dc.b	$8c, $A6	;\r\n		\r\n		dc.b	$90, $00	; Proprietary\r\n		dc.b	$94, $00	;\r\n		dc.b	$98, $00	;\r\n		dc.b	$9c, $00	;\r\n		\r\n		dc.b	$b0, $32	; Feedback/algorithm\r\n		dc.b	$b4, $c0	; Both speakers on\r\n		\r\n		dc.b	$28, $00	; Key off\r\nFMRegArrayEnd:\r\n\r\n\r\n;---------------------\r\n; VDP registers array\r\n;---------------------\r\n\r\nVDPSetupArray:\r\n		dc.w	$8004	;9-bit palette = 1 (otherwise would be 3-bit), HBlank = 0\r\n		dc.w	$8134	;Genesis display = 1, DMA = 1, VBlank = 1, display = 0\r\n		dc.w	$8230	;Scroll A - $C000\r\n		dc.w	$8338	;Window   - $E000\r\n		dc.w	$8407	;Scroll B - $E000\r\n		dc.w	$857c	;Sprites  - $F800\r\n		dc.w	$8600	;Unused\r\n		dc.w	$8700	;Backdrop color - $00\r\n		dc.w	$8800	;Unused\r\n		dc.w	$8900	;Unused\r\n		dc.w	$8A00	;H Interrupt register\r\n		dc.w	$8B00	;Full screen scroll, no external interrupts\r\n		dc.w	$8C81	;40 cells display\r\n		dc.w	$8D3F	;H Scroll - $FC00\r\n		dc.w	$8E00	;Unused\r\n		dc.w	$8F02	;VDP auto increment\r\n		dc.w	$9001	;64 cells scroll\r\n		dc.w	$9100	;Window H position\r\n		dc.w	$9200	;Window V position\r\n		dc.w	$93FF	;DMA stuff (off)\r\n		dc.w	$94FF	;DMA stuff (off)\r\n		dc.w	$9500	;DMA stuff (off)\r\n		dc.w	$9600	;DMA stuff (off)\r\n		dc.w	$9780	;DMA stuff (off)\r\nVDPSetupArrayEnd:\r\n\r\n\r\n;---------------------\r\n; Z80 init code\r\n;---------------------\r\n\r\nZ80Init:\r\n	dc.w	$af01, $d91f, $1127, $0021, $2600, $f977 \r\n	dc.w    $edb0, $dde1, $fde1, $ed47, $ed4f, $d1e1                                   \r\n	dc.w    $f108, $d9c1, $d1e1, $f1f9, $f3ed, $5636\r\n	dc.w	$e9e9 \r\nZ80InitEnd:\r\n\r\n;---------------------\r\n; Music driver (z80)\r\n;---------------------		\r\n\r\nZ80Driver:\r\n		dc.b	$c3,$46,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00\r\n		dc.b	$00,$00,$00,$00,$00,$f3,$ed,$56,$31,$00,$20,$3a,$39,$00,$b7,$ca,$4c,$00,$21,$3a,$00,$11,$40,$00,$01,$06,$00,$ed,$b0,$3e,$00,$32,$39,$00,$3e,$b4,$32,$02,$40,$3e,$c0,$32,$03,$40,$3e,$2b,$32,$00,$40,$3e,$80,$32,$01,$40,$3a,$43,$00,$4f,$3a,$44,$00,$47,$3e,$06,$3d\r\n		dc.b	$c2,$81,$00,$21,$00,$60,$3a,$41,$00,$07,$77,$3a,$42,$00,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$0f,$77,$3a,$40,$00,$6f,$3a,$41,$00,$f6,$80,$67,$3e,$2a,$32,$00,$40,$7e,$32,$01,$40,$21,$40,$00,$7e,$c6,$01,$77,$23,$7e,$ce,$00,$77,$23,$7e,$ce,$00,$77\r\n		dc.b	$3a,$39,$00,$b7,$c2,$4c,$00,$0b,$78,$b1,$c2,$7f,$00,$3a,$45,$00,$b7,$ca,$4c,$00,$3d,$3a,$45,$00,$06,$ff,$0e,$ff,$c3,$7f,$00\r\nZ80DriverEnd:\r\n\r\n\r\n\r\nRomEnd:\r\n',29,5),(89,1,'Documents',NULL,18,6),(90,3,'Sega2f - Sega\\\'s official docs about Sega Mega Drive, fixed by Nemesis','./download/sega2f.rar',89,2),(91,3,'32x SDK - official 32x dev kit for 32x developers - sample sources, debuggers etc.','./download/32x-sdk.rar',89,1),(94,2,'Format','Part 1 : The Format\r\n\r\nAll objects are stored in binary files in the game\\\'s /system dir. ALL object files start with \\\"set\\\" and the number/letter code afterward, which I will touch upon later.\r\n\r\nHere\\\'s the outline of the format.\r\n\r\n// Block 1 : The header\r\n// The file is split into \\\"object definition\\\" blocks, each totaling $20 (0x20/32 dec) bytes\r\n// The header simply states how many blocks are to be read. This is an important\r\n// Value, and is quite versatile.\r\nlongword objectnum; // Defines howmany blocks to read\r\nvoid null; // Covers the reast over the header, 28($1C) bytes long, and fills the restt\r\n// of the block (thanks to Sintendo for pointing a mistake in this - drx)\r\n\r\n// Part 2 : Definitions\r\n// Each \\\"block\\\" ($20/32 dec bytes afterward) defines all of the properties for ONE\r\n// object that is to be placed in the level.\r\nbyte type; // Determines what kind of object to place\r\nbyte null; // nothing\r\nbyte null; // nothing\r\nbyte xrot; // Object\\\'s x-rotation\r\nbyte null; // nothing\r\nbyte yrot; // Object\\\'s y-rotation\r\nbyte null; // Nothing\r\nbyte zrot; // Object\\\'s z-rotation\r\nfloat xpos; // Object\\\'s x-position\r\nfloat ypos; // Object\\\'s Y-position\r\nfloat zpos; // Object\\\'s Z-position\r\nfloat attrib1; // Misc. attribute/flag. Dependant on type;\r\nfloat attrib2; // Misc. attribute/flag. Dependant on type;\r\nfloat attrib3; // Misc. attribute/flag. Dependant on type;\r\n\r\nPart 3 : Tricks\r\nThe objectnum value is quite actually quite versatile, contrary to what one may think. Remember, the game will ONLY read how many objects you tell it to. So you can decrease the number, and objects will be removed (in inverse order, starting with last object first), without having to delete the data. You can utilize this to test and see where an object file is crashing, or add text/data to the end of the file, either to store old builds, or just add an easter egg for the more technically inclined user.\r\n\r\nPart 4 : Getting values\r\nWhile typing in random numbers is GREAT if you\\\'re a masochist, most of us normal developers prefer to get their numbers from the game itself. There are 2 ways to do this. The first, and easiest, is to become acquainted with a memory editing/viewing package (read : I use cheat engine for this), and refrence the adresses :\r\n\r\n03B2CAB0 (x-position of character)\r\n03B2CAB4 (y-position of character)\r\n03B2CAB8 (z-position of character)\r\n(all floats)\r\n\r\nThese adresses will always display the user\\\'s current position in a level.\r\n\r\nAnother method I\\\'m looking into, is ripping an obj file from either the DC geometry file, and finding the coordinates in a model editor, or doing the same, but from sonic.exe\r\nOne last thing you\\\'ll need before you can sucessfully edit a file, is a list of availiable/working object types.\r\n\r\nPart 5 : Final tips\r\nBefore I close, I\\\'d like to touch upon 2 final topics. One being the filenaming system the game uses, and the other being a short list of universal object types.\r\nIn SA, filenames work in a fashion much like ths one :\r\ntype/level/character.extension\r\n\r\nTypes documented :\r\n\r\nCAM - Camera binary\r\nSET - Object binary\r\n\r\nLevels : Action Stages are numbered with the appropriate segment (level part) following suit immediately afterward. ALL FILENAME NUMBERS ARE DECIMAL VALUES. No matter how used you are to using hex values to designate levels during memory editing, the filenames are always decimal. No exceptions.\r\nOther levels (boss, adv, etc) are actually given a name, instead of being numbered.\r\n\r\nThe character designations are one letter, as follows :\r\nA- Amy\r\nB - Big\r\nE - E102 Gamma\r\nK - Knucles\r\nM - Tails\r\nS - Sonic\r\n\r\nAnd the final thing for this guide, is the universal (or close to it) object types. These are USUALLY universal, but technically still level-specific. They\\\'re just the same for damn near all the levels. BUT, they are different (as proven by the final boss\\\' object set)\r\nSaid common types are as follows :\r\n\r\n00. Ring\r\n01. Spring\r\n02. Spring\r\n03. Dash Panel\r\n04. Spinning Spike Ball + Chain\r\n05. Falling Spike Ball\r\n06. Spikes\r\n07. Nothing\r\n08. Egg prison\r\n09. Switch\r\n0A. Plant\r\n0B. Dash hoop ',93,3),(93,1,'Object Editing',NULL,25,1),(95,2,'How to Add Rings to a Level','You will need :\r\n- Sonic Adventure\r\n- Hex Workshop\r\n- Cheat Engine\r\n\r\nFirst step is picking a level. To do this, you need to find the level\\\'s number.\r\n\r\nEmerald Coast - 01\r\nWindy Valley - 02\r\nSpeed Highway - 04\r\nRed Mountain - 05\r\nLost World - 07\r\nIce Cap - 08\r\n\r\nFor this example, I\\\'ll be using Emerald Coast part 1. Open up SET0100S.BIN. Open up Cheat Engine and open up Hex Workshop.\r\n\r\nAdd these addresses in Cheat Engine. All are Floats\r\nSonic X - 03B2CAB0\r\nSonic Y - 03B2CAB4\r\nSonic Z - 03B2CAB8\r\n\r\nSave the file as sonic.ct Start Sonic.exe. Open the process with Cheat Engine.\r\n\r\nThis where I decided to start adding rings. You can add them wherever you want. After I go to the location, I look at the numbers cheat engine is giving me.\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC1.png\\\">\r\n\r\nGo back to hex workshop, and go to Options -> Prefrences. Set the Bytes/row to 32. Now, go to the end of the file and click Edit -> Insert (ctrl + ins) and punch the number 20 in the box (make sure hex is checked). \\\"Fill with Byte\\\" should be set to 0. Now you\\\'ll see a line of 00\\\'s at the bottom of the file in red. This is a Good Thing.\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex1.png\\\">\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex2.png\\\">\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex3.png\\\">\r\n\r\nGo back to the TOP of the file\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex4.png\\\">\r\n\r\nThe top number changes the NUMBER OF OBJECTS the game will load.\r\n\r\nSave the file (Make a backup if you\\\'re smarter than me) and re-load Emerald Coast. Go back to the place you were before aaaaannd...\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC2.png\\\">\r\n\r\nHOLY SHIT THERE\\\'S A RING THERE! WHERE I WAS JUST STANDING! Well, thats the problem. it is EXACTLY where you were standing. Rings generally hover ABOVE the ground, not in it. Go back to the step where you did the \\\"Sonic Y\\\" Value, and bump the number up by about 10, maybe 15. In this case, I changed the number from \\\"30\\\" to \\\"40\\\" Here\\\'s what I got :\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC3.png\\\">\r\n\r\nOne last tip : Since you set the byes per line in Hex Workshop to \\\"32\\\", each line of hex is ONE object.',93,1),(96,2,'How to Add a Dash Panel','So you can add rings now. Sexy. Now we\\\'re gonna speed up a little and add a Dash Panel into a level. Like before, open up SET0100S.BIN, and go to the end of the file. Add the row of zeroes like you did last time. Go into emerald coast\\\'s first segment and find a spot for a dash panel.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC2_1.png\\\">\r\n\r\nNow, we\\\'ll repeat everything like last time. Put the numbers cheat engine gives you into Hex workshop.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex2_1.png\\\">\r\n\r\nThere, we\\\'ve given the object a location. Remember to use the float box when putting these things in. Go to the top of the file and add one like you did before so the game picks up the new object. Save the file and load up the game.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC2_2.png\\\">\r\n\r\nWell, its in the place we want, but its a ring. Not what we want. Lets fix this by going back into hex and changing a byte.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex2_2.png\\\">\r\n\r\nSo now we\\\'ve changed it into a dash panel. Save the file and reload EC.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC2_3.png\\\">\r\n\r\nWell, its a dash panel and lucky us its facing towards that spring. But we wanna be devious and make it go the OTHER way. More hex is involved here. Rotation is on a scale of 0 to 255.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/hex2_3.png\\\">\r\n\r\nThats the rotation value that determines wich way something is looking at. Try random numbers until you get what you want. Rotation isn\\\'t very well documented but it is still necessary.\r\n\r\n<img src=\\\"http://jamesseph.phpwebhosting.com/dude/Howto/EC2_4.png\\\">\r\n\r\nWell there is your deviously placed Dash panel. Enjoy',93,2),(100,4,NULL,'I decided to document the Sega\\\'s SVP Chip. While many believe it\\\'s an SH1 or SH2, it\\\'s a Samsung SSP1601. I hope it\\\'ll help someone emulate the chip.\r\n\r\nUnfortunately, I didn\\\'t find the instruction set yet.\r\n\r\nPlease contact me if you have more information on this mysterious IC.',31,1),(101,1,'The documentation',NULL,31,2),(102,2,'Official chip description','According to the manual:\r\n\r\nSamsung is a pioneer in the DSP core approach, which is a high performing and flexible family of DSP core based ASDSP (Application Specifics Digital Signal Processor). The DSP core architecture and instruction set are designed simplicity and flexibility. The DSP core contains only the most essential DSP function blocks. Because all internal buses are accessible externally. The ASDSP is an application specifics integrated sircuit that incorporates a programmable digital signal processor core. The ASDSP approach allows the system designer to integrate a programmable dsp core, interface logic, peripheral, extra memory into a single integrated circuit. Typically, the custom circuitry on a ASDSP is implemented either in standard cell or gate array. All methods used samsung process by 0.8um double metal CMOS technology.\r\n\r\nThe SSP1601 uses 0.8um CMOS technology (CSP4H) and can perform up to 25 MHz at 5V. The SSP1601 DSP cores have the following on-chip functions:\r\n\r\n<li> two independent high-speed RAM banks\r\n<li> a 16x16 multiply unit\r\n<li> an 32-bit ALU\r\n<li> RAM address pointers\r\n<li> a status register\r\n<li> a program control unit\r\n<li> an external bus control unit\r\n\r\nThe DSP core can address up to 64K-word of external ROM over an external data bus. The actual size of the external ROM area used depends upon the requirements of the individual application. The SSP1601 has five 16-bit buses and one 32-bit bus:\r\n\r\n<li> program address (PA) bus\r\n<li> program data (PD) bus\r\n<li> multiplier (M) bus\r\n<li> external (EXT) bus\r\n<li> subsidiary (S) bus\r\n<li> data (D) bus.\r\n\r\nMPYA instructions (add, load, multiply, and modify RAM address pointer) are executed efficiently within one machine cycle. The condition flags in the status register (ST) are set or cleared by the corresponding ALU operations. Values for the status register control bits are loaded by application software or through the I/O pins USR0, USR1, ST5 and ST6.\r\n\r\nThe system stack has six hardware levels and operates using Push and Pop operations. The pins EA[2:0], ESB and R/WB are used to control the EXT bus, and the RESB, INT0, INT1, INT2 and SS pins are used to control system functions.',101,1),(103,2,'List of features','According to the manual, SSP1601 has these features:\r\n\r\n<li> 16-bit fixed point arithmetic\r\n<li> ACC + A x B -> ACC; MAC operation in 40ns using pipelined multiplier\r\n<li> 16x16-bit pipelined multiply with 32-bit output\r\n<li> 32-bit ALU operation\r\n<li> 512-word data RAM; RAM0, RAM1\r\n<li> Eight 8-bit RAM point registers:\r\n\r\nR0 ~ R3 for RAM0\r\nR4 ~ R7 for RAM1\r\n\r\n<li> RAM pointer registers for easy circular buffer operation\r\n<li> Simple instruction set\r\n<li> User defined I/Os\r\n<li> Up to 64K word Program Memory which can be readable and writable\r\n<li> SSP1601 EVA Chip (additional) has two 256-word SRAM for each RAM bank\r\n<li> 25 MIPS @ 5.0 Volt\r\n<li> 68-pin PLCC (evaluation version\r\n<li> 0.8um double metal CMOS (CSP4H)\r\n<li> Excepted core size (except PAD, Data RAM): 3600um x 2400um',101,2),(104,2,'Design tools','Unfortunately, I wasn\\\'t able to find the design tools pack for the SSP1601, but I confirmed a list of tools that were bundled with the chip, so if anyone finds it, contact me. The tools were:\r\n\r\n<b>Software tools - DOS</b>\r\n<li> MASM1601 - Macro assembler\r\n<li> LNK1601 - Linker\r\n<li> RSP1601 - ROM Splitter\r\n<li> SIM1601 - Simulator\r\n\r\n<b>Hardware tools - DOS</b>\r\n<li> SDE1601 - Real-time emulator\r\n<li> SDAP1601 - Algorithm Developement Board\r\n\r\n<b>Design tools - UNIX</b>\r\n<li> Verilog model\r\n<li> Macrocells dedicated to the DSP core to build user\\\'s applications\r\n<li> Standard cell library, I/O library and Data Path generator\r\n<li> Memory Generator (ROM, RAM)\r\n\r\n',101,3),(111,3,'Pin layout','http://www.hacking-cult.org/images/svp2.png',109,2),(107,2,'Pin layout - explained','<table width=\\\'90%\\\' cellspacing=\\\'0\\\'><tr style=\\\'background-color: #224422\\\' style=\\\'padding-left: 5px; padding-right: 5px; text-align: center;\\\'><th>Name</th><th>Number</th><th>I/O</th><th>Description</th></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>CK1</center></td><td><center>51</center></td><td><center>I</center></td><td>Clock</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>PH10B</center></td><td><center>52</center></td><td><center>O</center></td><td>Internal clock output<br>Inverted output of PH1 generated from CK1</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>RESB</center></td><td><center>50</center></td><td><center>I</center></td><td>Asynchronous step<br>Effective when SK1 is rising</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>SS</center></td><td><center>53</center></td><td><center>I</center></td><td>Asynchronous single step<br>Effective when CK1 of a cycle is rising</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>INT0<br>INT1<br>INT2</center></td><td><center>56<br>57<br>58</center></td><td><center>I</center></td><td>Interrupt request 0<br>Interrupt request 1<br>Interrupt request 2</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>PA0-PA15</center></td><td><center>27-35 & 37-43</center></td><td><center>O</center></td><td>Program address</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>PD0-PD15</center></td><td><center>11-26</center></td><td><center>I/O</center></td><td>Program data</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>EXT0-EXT15</center></td><td><center>1-9 & 61-68</center></td><td><center>I/O</center></td><td>External data bus</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>EA0-EA2</center></td><td><center>44-46</center></td><td><center>O</center></td><td>External register address</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>ESB</center></td><td><center>47</center></td><td><center>O</center></td><td>External data strobe</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>R/WB</center></td><td><center>48</center></td><td><center>O</center></td><td>Read/write timing signal for EXT bus</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>USR0<br>USR1</center></td><td><center>54<br>55</center></td><td><center>I</center></td><td>User input 0<br>User input 1</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>VDD</center></td><td><center>36, 49</center></td><td><center>I</center></td><td>+5 Volt</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>VSS</center></td><td><center>&nbsp;</center></td><td><center>I</center></td><td>GND</td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td><center>ST5<br>ST6</center></td><td><center>59<br>60</center></td><td><center>O</center></td><td>User output 0<br>User output 1</td></tr></table>',101,4),(109,1,'Images',NULL,31,3),(110,3,'Block diagram','http://www.hacking-cult.org/images/svp1.png',109,1),(108,2,'Electrical characteristics','<b>Absolute Maximum Ratings</b>\r\n\r\n<table width=\\\'90%\\\' cellspacing=\\\'0\\\'><tr style=\\\'background-color: #224422\\\' style=\\\'padding-left: 5px; padding-right: 5px; text-align: center;\\\'><th>Characteristics</th><th>Symbol</th><th>Value</th><th>Unit</th></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>V<sub>DD</sub> to V<sub>SS</sub></td><td><center>V<sub>DD</sub></center></td><td><center>0.7</center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Input voltage</td><td><center>V<sub>I</sub></center></td><td><center>V<sub>DD</sub> + 0.5 to - 0.5</center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Output voltage</td><td><center>V<sub>O</sub></center></td><td><center>V<sub>DD</sub> + 0.5 to - 0.5</center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Storage temperature</td><td><center>T<sub>STG</sub></center></td><td><center>-65 to +150</center></td><td><center><sup>o</sup>C</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Lead temperature (soldering)</td><td><center>T<sub>L</sub></center></td><td><center>Less than 300</center></td><td><center><sup>o</sup>C</center></td></tr></table>\r\n\r\n\r\n<b>DC Characteristics</b>\r\n\r\n<table width=\\\'90%\\\' cellspacing=\\\'0\\\'><tr style=\\\'background-color: #224422\\\' style=\\\'padding-left: 5px; padding-right: 5px; text-align: center;\\\'><th>Characteristics</th><th>Symbol</th><th>Condition</th><th>Min</th><th>Typ</th><th>Max</th><th>Unit</th></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Operating current</td><td><center>I<sub>DD</sub></center></td><td><center>CK = 25 MHz</center></td><td><center></center></td><td><center>40</center></td><td><center></center></td><td><center>mA</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Input voltage high</td><td><center>V<sub>IH</sub></center></td><td><center></center></td><td><center>0.9V<sub>DD</sub></center></td><td><center></center></td><td><center></center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Input voltage low</td><td><center>V<sub>IL</sub></center></td><td><center></center></td><td><center></center></td><td><center></center></td><td><center>0.1V<sub>DD</sub></center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Input leakage current</td><td><center>I<sub>I</sub></center></td><td><center></center></td><td><center></center></td><td><center>1</center></td><td><center></center></td><td><center>&micro;A</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Output voltage high</td><td><center>V<sub>OH</sub></center></td><td><center>I<sub>OH</sub> = -100 &micro;A</center></td><td><center>V<sub>DD</sub>=0.2</center></td><td><center></center></td><td><center></center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Output voltage low</td><td><center>V<sub>OL</sub></center></td><td><center>I<sub>OL</sub> = 0.5 mA</center></td><td><center></center></td><td><center></center></td><td><center>0.5</center></td><td><center>V</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Output current in high<br>impedance stage</td><td><center>I<sub>OZ</sub></center></td><td><center></center></td><td><center></center></td><td><center></center></td><td><center>5</center></td><td><center>&micro;A</center></td></tr></table>\r\n\r\n\r\n<b>AC Characteristics</b>\r\n\r\n<table width=\\\'90%\\\' cellspacing=\\\'0\\\'><tr style=\\\'background-color: #224422\\\' style=\\\'padding-left: 5px; padding-right: 5px; text-align: center;\\\'><th>AC Characteristics</th><th>Symbol</th><th>Min</th><th>Typ</th><th>Max</th><th>Unit</th></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Clock cycle time</td><td><center>T<sub>CY</sub></center></td><td><center>1000</center></td><td><center>40</center></td><td><center></center></td><td rowspan=\\\"15\\\"><center>ns</center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>Clock pulse width</td><td><center>P<sub>WW</sub></center></td><td><center>16</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EA, R/WB delay from CK1</td><td><center>E<sub>AD</sub></center></td><td><center></center></td><td><center>8</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT pre-charge delay from CK1</td><td><center>T<sub>1P</sub></center></td><td><center></center></td><td><center>10</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT floating delay from CK1</td><td><center>T<sub>1F</sub></center></td><td><center></center></td><td><center>10</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT data output delay from CK1</td><td><center>T<sub>RD</sub></center></td><td><center></center></td><td><center>14</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT data output hold from CK1</td><td><center>T<sub>XH</sub></center></td><td><center>6</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT data input setup time</td><td><center>T<sub>XRS</sub></center></td><td><center>4</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>EXT data input hold time</td><td><center>T<sub>XRH</sub></center></td><td><center>6</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>ESB delay time</td><td><center>T<sub>EWRD</sub></center></td><td><center></center></td><td><center>6</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>PA delay from CK1</td><td><center>T<sub>PAD</sub></center></td><td><center></center></td><td><center>6</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>PD input setup time</td><td><center>T<sub>PDS</sub></center></td><td><center></center></td><td><center>4</center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>PD input hold time</td><td><center>T<sub>PDH</sub></center></td><td><center>6</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>SS setup time</td><td><center>T<sub>CTLS</sub></center></td><td><center>2.5</center></td><td><center></center></td><td><center></center></td></tr><tr style=\\\'background-color: #002200\\\' style=\\\'padding-left: 5px; padding-right:5px;\\\'><td>SS hold time</td><td><center>T<sub>CTLH</sub></center></td><td><center>6</center></td><td><center></center></td><td><center></center></td></tr></table>',101,5);
