- //// song = 18 positions 
-   
- //// imported 
- PROC halt FORWARD(); 
- PROC border FORWARD(BYTE col); 
- FUNC BYTE random FORWARD(); 
-   
- PROC pokenet FORWARD(BYTE row, BYTE col, BYTE data); 
- FUNC BYTE peeknet FORWARD(BYTE row, BYTE col); 
- PROC pokenetcolor FORWARD(BYTE row, BYTE col, BYTE data); 
- FUNC BYTE peeknetcolor FORWARD(BYTE row, BYTE col); 
- PROC testcube FORWARD(); 
- PROC cubecolumn FORWARD(); 
- FUNC BYTE getayreg FORWARD(BYTE reg); 
- PROC decay FORWARD(); 
- PROC clearnet FORWARD(); 
- PROC drawcubetexture FORWARD(); 
- PROC jumpay FORWARD(BYTE tonereg, BYTE volreg, BYTE mask); 
-   
- PROC prch FORWARD(UINT addr, CHAR c); 
-   
- EXTERN UINT _timer; 
-   
- //// 
-   
- VAR UINT _wastimer; 
- VAR UINT _curtimer; 
- VAR UINT _logicframes; 
- VAR UINT _textlogicframes; 
-   
- VAR BOOL _frameready; 
-   
- CONST BYTE _wid = 0x20; 
- CONST BYTE _hgt = 0x18; 
- CONST BYTE _scrhgt = 0x14; 
-   
- CONST BYTE _netwid = 0x20; 
- CONST BYTE _nethgt = 0x20; 
-   
- VAR PBYTE _net; 
- CONST BYTE _net35[768]; 
- CONST BYTE _nettort[768]; 
- /**= { 
- 0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,B-L,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,LLL,0x4,BBB,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6, 
- 0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x4,0x3,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x4,0x2,0x2,0x2,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x4,0x1,0x1,0x1,0x1,0x1,0x4,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x0,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6, 
- 0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,LLL,0x4,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x4,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,LLL,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6, 
- 0x0,0x0,0x0,0x0,0x0,0x0,T-L,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x4,TTT,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x4,TTT,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x4,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x0,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6, 
- 0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x4,0x7,0x7,0x7,0x7,0x7,0x4,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x4,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6, 
- 0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1, 
- 0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2, 
- 0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3, 
- 0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6 
- }; 
- */ 
- CONST UINT _netaddr = 0xd000; //запорчено ещё 256 байт ниже 
- //CONST UINT _net2addr = 0xd040; 
- CONST UINT _netcoloraddr = 0xd080; 
- CONST UINT _attrbuf = 0xf000; 
- CONST UINT _attrbuf2 = 0xf300; 
-   
- VAR UINT _curattrbuf; 
- VAR UINT _readyattrbuf; 
-   
- CONST BYTE _clBlue = 0x01; 
- CONST BYTE _clRed = 0x05; 
-   
- VAR UINT _position; 
- VAR UINT _tact; 
- VAR UINT _quarter; 
- VAR BYTE _noteintact; 
- VAR BYTE _noteinquarter; 
-   
- VAR BYTE _jump; 
- VAR BYTE _jumptime; 
- VAR BYTE _row; 
- VAR BYTE _picrow; 
- VAR BYTE _col; 
- //VAR BYTE _curhgt; 
- //VAR BOOL _backslash; 
- //VAR BOOL _rowstep; 
- //VAR BYTE _curcolor; 
- //VAR BYTE _oldcolor; 
- //VAR BYTE _y; 
- VAR UINT _addr; 
-   
- VAR BYTE _stage; 
- VAR BYTE _wasstage; 
-   
- VAR BYTE _dotext; 
-   
- CONST PCHAR _text = 
- "It's a boy!!!                   " 
- "                       Ho-ho!   " 
- "        Hello, LVD!             " 
- "                                " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- " ALONE CODER, SAND, NQ & others " 
- "       WISH U ALL DA BEST!      " 
- "    b  happy, don't  worry      " 
- "          und HBD!!             " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- " This iz the first demo made in " 
- "            NedoLang            " 
- "da  programming  system         " 
- "            of  da  future ;)   " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "        okay                    " 
- "    some     wishes             " 
- "          right       now       " 
- "                 !!!            " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "SAND/MAYhEM:\n" 
- "Ну что!  С  Днюшечкой,   Бро!!! " 
- "Ты  стал   уже  совсем  большой " 
- " и сам знаешь,  что тебе нужно! " 
-   
- " Вот именно этого тебе и желаю!!" 
- "А от себя  лично  пожелаю  тебе " 
- "стандартный  набор   из счастья," 
- "успехов, здоровья и, конечно же," 
-   
- " какую-нибудь дельную хрень типа" 
- "лазерного   мешка    или  робота" 
- "   |   | на  батарейках,  |   | " 
- " | чтоб  пиликал  и   катался!  " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "NQ/SKRJU:                       " 
- "Вадя,   пишу  тебе  из  вот этих" 
- "своих  жарких  югов  в эту  твою" 
- "Москву!  Тебе   и твоим близким," 
-   
- "чтобы  хорошо  было  и  все друг" 
- "другу  улыбались  и  радовались," 
- "потому  что  хорошие люди вокруг" 
- "и  ничего  не  болит ни  у кого," 
-   
- "а один  лишь достаток и радость," 
- "  | вот  такая |   |   |   |   |" 
- "           прошивка-установка!  " 
- "  |   ! ! !|   |   |   |   |   |" 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "ALONE CODER/Conscience:         " 
- "   Желаю,    чтобы    схемы     " 
- "всегда  разводились  с  первой  " 
- "             попытки,           "  
-   
- "cигналы всегда успевали вовремя," 
- "эффекты кодились  самые быстрые,"  
- "а  пакер  паковал  круче  всех! "  
- "   |   |   |   | ...            " 
-   
- "    ...            И на всё это " 
- "хватало времени до, после       " 
- "              и вместо работы :)" 
- "     ! ! !                      " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "LOUISA/Conscience:              " 
- "Поздравляю тебя с днём рождения," 
- "     наш   дорогой   LVD!    :) " 
- "  Всего самого расчудесного  и  " 
-   
- " привлекательного!   Счастья,   " 
- "     здоровья и всего того, что " 
- "пожелаешь  сам!  Достатка       " 
- "    финансов, творческих идей   " 
-   
- "и  времени  на  их  исполнение! " 
- "Ах да, карапузиков в твой дом!:)" 
- "                 Ура!           " 
- "           ! ! !                " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "HIPPIMAN/Conscience:            " 
- " Я тоже  хочу  присоединиться  к" 
- "   всеобщим    поздравлениям.   " 
- " Не, ну  а  как  не  поздравить " 
-   
- " человека, который  даровал миру" 
- " |   |   | BASECONF!  |   |   | " 
- " Вадим,   всяческих благ  тебе, " 
- "  здоровья  и  побольше денег.  " 
-   
- "Денег столько, чтобы у тебя было" 
- " побольше свободного  времени и " 
- "ты мог посвятить  его творчеству" 
- "и  новым  разработкам,  которыми" 
-   
- " |   радовал  бы  уже  нас,|   |" 
- " | простых любителей Спекки :)  " 
- " |   |   |  ! ! ! |   |   |   | " 
- "   |   |   |   |   |   |   |   |" 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "FYREX/MhM:                      " 
- "        Всего наилучшего!       "  
- "   И поддерживай отечественную  "  
- "          демосцену ! )         " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "DIMON\"ШМЕЛЕ\"MEDVED-ER:          " 
- "Сколково, инновации... руссиано " 
- "            ...                 " 
- "      НAHOтехнологии, знаете ли!" 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "-HBD---#-----#---#--###---------" 
- "-------#-----#---#--#--#--------" 
- "-------#------#-#---#---#-------" 
- "-------#####---#----####----!!!-" 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "idea .... ALONE CODER & SAND/MhM" 
- "kodes .............. ALONE CODER" 
- "soundtrakk ............ NQ/SKRJU" 
- "some gfx, etc ......... SAND/MhM" 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
-   
- "                                " 
- "                                " 
- "                                " 
- "          read  again?!         " 
-   
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- "   |   |   |   |   |   |   |   |" 
- ; 
- //" Und now play-on da Allegrowa's " 
- //"song  'S Dnem Rozhdenija!' )))))" 
- //"  start  dancin' and boozein'   " 
- //"make volumemax! komon! doit now!" 
-   
-   
- /** 
- PROC pokenet(BYTE _row, BYTE _col, BYTE data) 
- { 
-   POKE *(PBYTE)(_netaddr + ((UINT)_row<<8) + (UINT)_col) = data; 
- } 
-   
- FUNC BYTE peeknet(BYTE _row, BYTE _col) 
- { 
-   RETURN *(PBYTE)(_netaddr + ((UINT)_row<<8) + (UINT)_col); 
- } 
-   
- PROC pokenetcolor(BYTE _row, BYTE _col, BYTE data) 
- { 
-   POKE *(PBYTE)(_netcoloraddr + ((UINT)_row<<8) + (UINT)_col) = data; 
- } 
-   
- FUNC BYTE peeknetcolor(BYTE _row, BYTE _col) 
- { 
-   RETURN *(PBYTE)(_netcoloraddr + ((UINT)_row<<8) + (UINT)_col); 
- } 
- */ 
- /** 
- PROC testcube() 
- { 
- VAR BYTE hgt; 
-   
-       //определяем цвет и двигаем _row (_col) 
-       //если hgt==_curhgt, то пол и _row++ (_col--) 
-       //если hgt>_curhgt, то стена 
-       //если hgt<_curhgt, то _row++ (_col--) и крутимся 
-       //_row,_col указывают на то, что мы видим в этой клетке, или на яму 
-         IF (_rowstep != _backslash) { //чётность не соответствует, так что границы не будет 
-           _curcolor = _oldcolor; 
-           //_curhgt++; 
-         }ELSE { //чётность соответствует 
-   
-          invisloop: 
-           IF (_rowstep) { // \ - пересечение _row, дальше идём по _col 
-             hgt = peeknet(_row, _col); 
-             IF (hgt==_curhgt) { //пол (только при правильной чётности!) 
-               IF (_rowstep==_backslash) { 
-                 _curcolor = peeknetcolor(_row, _col); //clWhite; //новый наравне 
-                 DEC _col; 
-                 _rowstep = !_rowstep; 
-               }ELSE { 
-                 IF (_oldcolor != _clBlue) _curcolor = _clRed; //новый выше 
-               }; 
-             }ELSE IF (hgt>_curhgt) { //стена пересечение _row 
-               IF (_oldcolor != _clBlue) _curcolor = _clRed; //новый выше 
-               IF (_rowstep==_backslash) INC _curhgt; 
-               //теперь чётность _rowstep может не соответствовать _backslash! 
-             }ELSE { //яма 
-               DEC _col; 
-               _rowstep = !_rowstep; 
-               IF (_rowstep==_backslash) { 
-                 DEC _curhgt; 
-               }; 
-               goto invisloop; 
-             }; 
-           }ELSE { // / - пересечение _col, дальше идём по _row 
-             hgt = peeknet(_row, _col); 
-             IF (hgt==_curhgt) { //пол (только при правильной чётности!) 
-               IF (_rowstep==_backslash) { 
-                 _curcolor = peeknetcolor(_row, _col); //clWhite; //новый наравне 
-                 INC _row; 
-                 _rowstep = !_rowstep; 
-               }ELSE { 
-                 IF (_oldcolor != _clRed) _curcolor = _clBlue; //новый выше 
-               }; 
-             }ELSE IF (hgt>_curhgt) { //стена пересечение _col 
-               IF (_oldcolor != _clRed) _curcolor = _clBlue; //новый выше 
-               IF (_rowstep==_backslash) INC _curhgt; 
-               //теперь чётность _rowstep может не соответствовать _backslash! 
-             }ELSE { //яма 
-               INC _row; 
-               _rowstep = !_rowstep; 
-               IF (_rowstep==_backslash) { 
-                 DEC _curhgt; 
-               }; 
-               goto invisloop; 
-             }; 
-           }; //!_rowstep 
-   
-         }; //_rowstep==_backslash 
- } 
- */ 
- /** 
- PROC cubecolumn() 
- { 
- VAR BYTE b; 
-     _curhgt = 0x00; 
-     _backslash = (((BYTE)_addr&0x02)==0x00); //_backslash - пересечение _row 
-     _rowstep = _backslash; 
-     _oldcolor = 0x07; 
-     _y = _hgt; 
-     REPEAT { 
-       testcube(); 
-       //_row,_col указывают на то, что мы видим в следующей клетке, или на яму 
-       //чётность _rowstep должна соответствовать _backslash, кроме случая, когда нашли стену 
-   
-       //рисуем цвет 
-       IF (_y <= _scrhgt) { 
-         b = (_curcolor<<0x03) + _oldcolor; 
-         POKE *(PBYTE)(_addr) = b; 
-         POKE *(PBYTE)(_addr+1) = b; 
-       }; 
-       _addr = _addr - 0x0020; 
-       _oldcolor = _curcolor; 
-       _backslash = !_backslash; //привязано к "y" 
-       DEC _y; 
-     }UNTIL (_y == 0x00); 
- } 
- */ 
- PROC fillworm() 
- { 
-       _picrow = 0x04/**0x00*/; 
-       WHILE (_row < 0x15) { 
-         pokenet(_row, _col, 0x01); 
-         pokenetcolor(_row, _col, _net[((UINT)_picrow<<5)+ (UINT)_col + 31]); 
-         INC _row; 
-         INC _picrow; 
-       }; 
- }; 
-   
- PROC fillwormforth() 
- { 
-       _picrow = 0x00; 
-       WHILE (_row < 0x15) { 
-         pokenet(_row, _col, 0x01); 
-         pokenetcolor(_row, _col, _net[((UINT)_picrow<<5)+ (UINT)_col + 31]); 
-         INC _row; 
-         INC _picrow; 
-       }; 
- }; 
-   
- PROC fillwormback() 
- { 
-       _picrow = 0x13; 
-       WHILE (_row != 0xff) { 
-         pokenet(_row, _col, 0x01); 
-         pokenetcolor(_row, _col, _net[((UINT)_picrow<<5)+ (UINT)_col + 31]); 
-         DEC _row; 
-         DEC _picrow; 
-       }; 
- }; 
-   
- PROC clearworm() 
- { 
-       _row = 0x01; 
-       WHILE (_row < 0x16) { 
-         pokenet(_row, _col, 0x00); 
-         pokenetcolor(_row, _col, 0x00); 
-         INC _row; 
-       }; 
- }; 
-   
- PROC unfillworm() 
- { 
- VAR BYTE c; 
- VAR BYTE cnew; 
- VAR BYTE h; 
- VAR BYTE hnew; 
-       _row = 0x00; 
-       h = 0x00; 
-       c = 0x00; 
-       WHILE (_row < 0x16) { 
-         hnew = peeknet(_row, _col); 
-         cnew = peeknetcolor(_row, _col) 
-         pokenet(_row, _col, h); 
-         pokenetcolor(_row, _col, c); 
-         h = hnew; 
-         c = cnew; 
-         INC _row; 
-       }; 
- }; 
-   
- PROC unfillwormback() 
- { 
- VAR BYTE c; 
- VAR BYTE cnew; 
- VAR BYTE h; 
- VAR BYTE hnew; 
-       _row = 0x16; 
-       h = 0x00; 
-       c = 0x00; 
-       WHILE (_row != 0xff) { 
-         hnew = peeknet(_row, _col); 
-         cnew = peeknetcolor(_row, _col) 
-         pokenet(_row, _col, h); 
-         pokenetcolor(_row, _col, c); 
-         h = hnew; 
-         c = cnew; 
-         DEC _row; 
-       }; 
- }; 
- /** 
- PROC jumpay(BYTE tonereg, BYTE volreg, BYTE mask) 
- { 
- VAR UINT frq; 
- VAR BYTE vol; 
- VAR INT x; 
- VAR BYTE y; 
- VAR BYTE hgt; 
-   frq = (UINT)getayreg(tonereg) + ((UINT)getayreg(tonereg+0x01)<<8); 
-   IF ((getayreg(0x07)&mask)!=mask) { 
-     vol = getayreg(volreg); 
-     IF       (vol>=0x10) {vol = 0x04; 
-     }ELSE IF (vol==0x0f) {vol = 0x06; 
-     }ELSE IF (vol==0x0e) {vol = 0x05; 
-     }ELSE IF (vol==0x0d) {vol = 0x04; 
-     }ELSE IF (vol==0x0c) {vol = 0x03; 
-     }ELSE IF (vol==0x0b) {vol = 0x02; 
-     }ELSE IF (vol>=0x09) {vol = 0x01; 
-     }ELSE vol = 0x00; 
-   }ELSE vol = 0x00; 
-   IF (volreg!=0x09) vol = vol + vol; //low center, high left&right 
-   frq = frq + 8; //против бесконечного цикла 
-   y = 0x02; 
-   WHILE (frq < 1000) { 
-     frq = frq + (frq >> 2); 
-     INC y; 
-   }; 
-   IF (volreg == 0x08) { 
-     x = - (INT)(y>>0x02); 
-   }ELSE IF (volreg == 0x0a) { 
-     x = (INT)(y>>0x02); 
-   }ELSE x = -0; 
-   _row = (BYTE)((INT)y + x); 
-   //IF ((_row<0x02)||(_row>=0x40)) _row = 0x02; 
-   _col = 0x19 - (BYTE)((INT)y - x); 
-   //IF ((_col<0x02)||(_col>=0x40)) _col = 0x02; 
-   hgt = peeknet(_row, _col); 
-   IF (hgt < vol) { 
-     pokenet(_row, _col+0x40, vol); 
-   }; //ELSE pokenet(_row, _col, hgt-0x01); 
- } 
- */ 
- PROC demo() 
- { 
- VAR PCHAR ptxt; 
- VAR CHAR c; 
- VAR UINT scrtxt; 
- VAR UINT addry; 
- VAR UINT addr; 
- VAR UINT addrbase; 
- VAR BYTE x; 
- VAR BYTE y; 
- VAR BYTE suby; 
- VAR BYTE b; 
- VAR UINT w; 
- VAR BYTE hgt; 
- VAR BOOL cleared; 
-   
-   _readyattrbuf = _attrbuf; 
-    
-   _wastimer = _timer; 
- //  border(0x00); 
- /** 
-   y = 0x00; 
-   WHILE (y < _scrhgt) { 
-     x = 0x00; 
-     WHILE (x < _wid) { 
-       addr = _attrbuf + ((UINT)y<<5) + (UINT)x; 
-       POKE *(PBYTE)(addr) = 0x00; 
-       INC x; 
-     }; 
-     INC y; 
-   }; 
-   WHILE (y < _hgt) { 
-     x = 0x00; 
-     WHILE (x < _wid) { 
-       addr = _attrbuf + ((UINT)y<<5) + (UINT)x; 
-       POKE *(PBYTE)(addr) = 0x07; 
-       INC x; 
-     }; 
-     INC y; 
-   }; 
- */ 
- /** 
-   addr = _netaddr; 
-   _row = 0x00; 
-   WHILE (_row < _nethgt) { 
-     _col = 0x00; 
-     WHILE (_col < _netwid) { 
-       pokenet(_row, _col, random()&0x03); 
-       pokenetcolor(_row, _col, (_row&0x07)|0x04); 
-       INC _col; 
-     }; 
-     INC _row; 
-   }; 
- */ 
- //draw cube texture   
-   //drawcubetexture(); 
- /** 
-   addr = 0x4000; 
-   y = 0x00; 
-   WHILE (y < _scrhgt) { 
-     addry = 0x4000 + ((UINT)y<<5)&0x00e0 + ((UINT)y<<8)&0x1800; 
-     x = 0x00; 
-     WHILE (x < _wid) { 
-       addr = addry + (UINT)x; 
-       IF ((((x>>0x01)^y)&0x01) == 0x00) { 
-         w = 0x0001; 
-         suby = 0x00; 
-         WHILE (suby < 0x08) { 
-           POKE *(PBYTE)(addr) = (BYTE)(w>>8); 
-           POKE *(PBYTE)(addr+1) = (BYTE)w; 
-           w = (w<<2) + 0x0003; 
-           addr = addr + 0x0100; 
-           INC suby; 
-         }; 
-       }ELSE { 
-         w = 0x8000; 
-         suby = 0x00; 
-         WHILE (suby < 0x08) { 
-           POKE *(PBYTE)(addr) = (BYTE)(w>>8); 
-           POKE *(PBYTE)(addr+1) = (BYTE)w; 
-           w = (w>>2) + 0xc000; 
-           addr = addr + 0x0100; 
-           INC suby; 
-         }; 
-       }; 
-       x = x + 0x02; 
-     }; 
-     INC y; 
-   }; 
- */ 
-   scrtxt = 0x5080; 
-   ptxt = _text; 
-   _dotext = 0x00; 
-   
- //  _frameready = +FALSE; 
-    
-   cleared = +TRUE; 
-    
-   _jumptime = 0x00; 
-    
-   _net = _net35; 
-   
-   _stage = 0x00; 
-   
- loop: 
-    
-   //halter(); 
-   
-   IF (!_frameready) { 
-     x = 0x00; 
-     _curattrbuf = _attrbuf + _attrbuf2 - _readyattrbuf; 
-     addrbase = _curattrbuf + ((UINT)(_scrhgt-0x01)<<5); 
-     IF (_jumptime!=0x00) {_jump = 0x01; 
-     }ELSE _jump = 0x00; 
-     WHILE (x < _wid) { 
-       _col = 0x12 + (x>>0x02) + _jump; 
-       _row = (x>>0x02) - _jump; //0 
-       _addr = addrbase + (UINT)x; 
-       cubecolumn(); 
-       x = x + 0x02; 
-     }; 
-     IF (_jumptime!=0x00) DEC _jumptime; 
-     _frameready = +TRUE; 
-     _readyattrbuf = _curattrbuf; 
-   }; 
-    
-   _curtimer = _timer; //однократное чтение гарантирует синхронность 
-   _logicframes = _curtimer - _wastimer; 
-   _textlogicframes = _curtimer - _wastimer; 
-   WHILE (_logicframes != 0) { 
-     _wasstage = _stage; 
-     _quarter = _wastimer / 12; 
-     _tact = _quarter >> 2; 
-     _position = _tact >> 2; 
-     _stage = (BYTE)(_position - (_position/18)*18);//(_tact >> 2)&0x0f; //song = 18 positions 
-     _noteintact = (BYTE)(_wastimer - (_tact * 48)); //max 47 
-     _noteinquarter = (BYTE)(_wastimer - (_quarter * 12)); //max 11 
-     IF (_stage == 0x00) { //очистка колбасками 
-   
-       IF (cleared) { 
-         _row = 0x00; 
-         WHILE (_row < _nethgt) { 
-           _col = 0x00; 
-           WHILE (_col < _netwid) { 
-             pokenet(_row, _col, 0x01); 
-             INC _col; 
-           }; 
-           INC _row; 
-         }; 
-         cleared = +FALSE; 
-         _col = 0x06;  
-         clearworm(); 
-         _col = 0x07;  
-         clearworm(); 
-         IF (_net == _net35) {_net = _nettort; 
-         }ELSE _net = _net35; 
-       }; 
-       _col = 0x08 + ((BYTE)_quarter & 0x0f);  
-       IF ((_col&0x01)==0x00) { 
-         _row = 0x0b - (_noteinquarter & 0x0f); 
-         unfillworm(); 
-         unfillworm(); 
-       }ELSE { 
-         _row = 0x08 + (_noteinquarter & 0x0f); 
-         unfillwormback(); 
-         unfillwormback(); 
-       }; 
-        
-     }ELSE IF (_stage < 0x04) { //очистка и заполнение кубиками 
-       IF (!cleared) { 
-         clearnet(); 
-         cleared = +TRUE; 
-       }; 
-       IF ((_noteinquarter == 0x00)&&(((BYTE)_quarter&0x01)==0x00)) { 
-         badrnd: 
-         x = (random()&0x07) + 0x01;// + 0x01; // + (random()&0x01); //0x00..0x10 
-         y = (random()&0x07) + 0x01;// + 0x08; //0x08..0x18 
-         _row = 0x00 + y + x; // + random()&0x01; 
-         _col = 0x0f - y + x + random()&0x01; 
-         IF (peeknet(_row, _col) == 0x01) goto badrnd; 
-         IF (peeknet(_row+0x01, _col) == 0x01) goto badrnd; 
-         IF (peeknet(_row, _col+0x01) == 0x01) goto badrnd; 
-         IF (peeknet(_row-0x01, _col) == 0x01) goto badrnd; 
-         IF (peeknet(_row, _col-0x01) == 0x01) goto badrnd; 
-         pokenet(_row, _col, 0x01); 
-         pokenetcolor(_row, _col, 0x07); 
-       }; 
-     }ELSE IF (_stage == 0x04) { //медленное заполнение колбасками 
-       //pokenet(0x0a, 0x07, 0x01); //top left 
-       //pokenetcolor(0x0a, 0x07, _netpic[((UINT)0x0a<<5)+ (UINT)0x07]); 
-       IF (_wasstage != _stage) { 
-         _col = 0x06;  
-         _row = 0x04/**0x00*/; 
-         fillworm(); 
-         _col = 0x07;  
-         _row = 0x04/**0x00*/; 
-         fillworm(); 
-       }; 
-       _col = 0x08 + ((BYTE)_tact & 0x03);  
-       _row = 0x0f/**0x0b*/ - ((_noteintact>>0x2) & 0x0f); 
-       fillworm(); 
-     }ELSE IF (_stage == 0x05) { //быстрое дозаполнение колбасками 
-       _col = 0x08 + 0x04 + ((BYTE)_quarter & 0x0f);  
-       IF ((_col&0x01)==0x00) { 
-         _row = 0x0b - (_noteinquarter & 0x0f); 
-         fillwormforth(); 
-       }ELSE { 
-         _row = 0x08 + (_noteinquarter & 0x0f); 
-         fillwormback(); 
-       }; 
-       cleared = +TRUE; 
-     }ELSE IF (_stage < 0x08) { //прыгающая доска 
-       IF (cleared) { 
-         _row = 0xff; 
-         WHILE (_row != _nethgt) { 
-           _col = 0x00; 
-           WHILE (_col != _netwid) { 
-             pokenet(_row, _col, 0x01); 
-             IF (_row == 0xff) pokenetcolor(_row, _col, 0x04); 
-             INC _col; 
-           }; 
-           INC _row; 
-         }; 
-         cleared = +FALSE; 
-       }; 
-       IF ((_noteinquarter == 0x00)&&(((BYTE)_quarter&0x01)==0x00)) { 
-         _jumptime = 0x04; 
-       }; 
-     }ELSE IF (_stage < 0x0a) { //заваливание квадратами 
-         x = (random()&0x0f) + 0x01;// + 0x01; // + (random()&0x01); //0x00..0x10 
-         y = (random()&0x0f) + 0x00;// + 0x08; //0x08..0x18 
-         _row = 0x00 + y + x; 
-         _col = 0x10 - y + x; 
-         hgt = peeknet(_row, _col); 
-         IF ((random()&0x01) == 0x00) { 
-           IF (hgt!=0x00) DEC hgt; 
-         }ELSE INC hgt; 
-         pokenet(_row, _col, hgt); 
-         pokenet(_row+0x01, _col, hgt); 
-         pokenet(_row, _col+0x01, hgt); 
-         pokenet(_row+0x01, _col+0x01, hgt); 
-     }ELSE /**IF (_stage < 0x0f)*/ { //анализатор музыки 
-   
-       IF (!cleared) { 
-         _row = 0x00; 
-         WHILE (_row < _nethgt) { 
-           _col = 0x00; 
-           WHILE (_col < _netwid) { 
-             pokenet(_row, _col+0x40, 0x01); 
-             pokenet(_row, _col+0xc0, 0x01); 
-             INC _col; 
-           }; 
-           INC _row; 
-         }; 
-         cleared = +TRUE; 
-       }; 
- /** 
-   _row = 0x01; 
-   WHILE (_row < 0x13) { 
-     _col = 0x04; 
-     WHILE (_col < 0x18) { 
-       hgt = peeknet(_row, _col)+0x01; 
-       IF       (hgt < peeknet(_row+0x01, _col)) {pokenet(_row, _col+0x40, hgt); 
-       }ELSE IF (hgt < peeknet(_row, _col-0x01)) {pokenet(_row, _col+0x40, hgt); 
-   
-       }ELSE IF (hgt < peeknet(_row-0x01, _col)) { pokenet(_row, _col+0x40, hgt); 
-       }ELSE IF (hgt < peeknet(_row, _col+0x01)) { pokenet(_row, _col+0x40, hgt); 
-       //}ELSE IF (hgt == peeknet(_row+0x01, _col)) { 
-       //}ELSE IF (hgt == peeknet(_row, _col-0x01)) { 
-       }ELSE IF (hgt != 0x01) {pokenet(_row, _col+0x40, hgt-0x02); 
-       }ELSE pokenet(_row, _col+0x40, hgt-0x01); 
-       INC _col; 
-     }; 
-     INC _row; 
-   }; 
-      
-   _row = 0x01; 
-   WHILE (_row < 0x13) { 
-     _col = 0x04; 
-     WHILE (_col < 0x18) { 
-       pokenet(_row, _col, peeknet(_row, _col+0x40)); 
-       INC _col; 
-     }; 
-     INC _row; 
-   }; 
- */ 
-       jumpay(0x00, 0x08, /**mask*/0x09); 
-       jumpay(0x02, 0x09, /**mask*/0x12); 
-       jumpay(0x04, 0x0a, /**mask*/0x24); 
-       IF ((_noteinquarter&0x01) == 0x00) { 
-         decay(); 
-         goto quitlogic; 
-       }; 
-     }; 
-    
-      
-     INC _wastimer; 
-     DEC _logicframes; 
-     //_logicframes = 0; 
-   }; 
- quitlogic: 
-   _wastimer = _curtimer; 
-   
-   WHILE (_textlogicframes != 0) { 
-     INC _dotext; 
-     IF ((_dotext&0x03) == 0x00) { 
-   REPEAT { 
-     c = *(PCHAR)ptxt; 
-     IF (c == '\n') { 
-       scrtxt = (scrtxt&0xffe0) + 0x0020; 
-     }ELSE IF (c == '|') { 
-       prch(scrtxt, ' '); 
-       INC scrtxt; 
-     }ELSE { 
-       prch(scrtxt, c); 
-       INC scrtxt; 
-     }; 
-     IF (scrtxt >= 0x5100) scrtxt = 0x5080; 
-     INC ptxt; IF (*(PCHAR)ptxt == '\0') ptxt = _text; 
-   }UNTIL (c != ' '); 
-     }; 
-     DEC _textlogicframes; 
-   }; 
-    
-   goto loop; 
- } 
-