| Вопросы по CHIP-8 |
|
Gaploid
| Дата: Пятница, 20.08.2010, 15:45 | Сообщение # 1 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
Всем привет. Вот не могу равнодушно смотреть на работы Макса и ВертиХВОСТа Читаю потихонько статью, команды переведенные ВертиХВОСТом (спасибо, кстати :)) и конечно разбираю исходники. Далеко уйти не смог. Разобрался с памятью, ну почти. Сейчас остановился на регистрах. Здесь и появилась первая проблема. Перечитав несколько раз статью, я так и не понял зачем они нужны и за что отвеают. Просветите?
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
WertyXBOCT
| Дата: Пятница, 20.08.2010, 16:26 | Сообщение # 2 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Если с АСМ не знаком, то нужно объяснять много:). Регистры это как бы переменные. Просто помимо собственно функции хранения информации, у них еще есть обязанности. Как видел, там частенько функции берут информацию из определенного регистра, или возвращают в опеределенный регистр. Правда, для чип8, этот регистр под номером 15, в асме же все регистры так или иначе задействованны.
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
SRes
| Дата: Пятница, 20.08.2010, 16:33 | Сообщение # 3 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
|
Это переменные физически расположенные в памяти процессора, к ним быстрее обращаться, чем к оперативной памяти. Но в эмуляторе они все равно в оперативке. Эх... А про меня забыли :(
Velociped Inc.
|
| |
| | |
|
Gaploid
| Дата: Пятница, 20.08.2010, 18:57 | Сообщение # 4 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
WertyXBOCT, SRes, Спасибо! Я когда начал разберать команды, заметил, что это похоже на оперативку, только меньше Quote Эх... А про меня забыли :( Извини, не понимаю о чем ты А вот и второй вопрос. У вас (WertyXBOCT,-MaX-) в исходниках есть стеки, поясните, зачем они нужны? Я сейчас попробую сам, так же как и с регистрами, но не знаю, даст ли это результат. П.С. Реализовал все команды кроме функций связаных с рисованием и вводом  Конечно без исходников пришлось бы очень долго разбираться. Отдельное спасибо за них
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
Сообщение отредактировал Gaploid - Пятница, 20.08.2010, 18:59 |
| |
| | |
|
-MaX-
| Дата: Пятница, 20.08.2010, 19:40 | Сообщение # 5 |
Сказал что-то
Группа: Пользователь
Сообщений: 48
Статус: Offline
|
Gaploid, при вызове подпрограммы эмулятор сохраняет текущий адрес памяти в стеке и переходит к подпрограмме, а при выходе из подпрограммы читает адрес из стека(при этом он автоматически стирается) и переходит по нему обратно к программе. Вот как-то так Добавлено (20.08.2010, 19:40) --------------------------------------------- Quote (SRes) Эх... А про меня забыли :( По производительности твой эмулятор всегда будет впереди всех
No Money, No Time, No Girl, No Job - NO PROBLEM!!!
|
| |
| | |
|
Ang3L
| Дата: Суббота, 21.08.2010, 00:29 | Сообщение # 6 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (Gaploid) в исходниках есть стеки, поясните, зачем они нужны? Потому что работа кода происходит по принципу стека. Зашли в main - положили в стек, зашли в функцию положили в стек (оказались в main()->func()), вышли из функций, удалили голову оказались снова в main и т.д. с любой вложенностью. Так же, из реальных примеров, стеки можно использовать для реализаций команды undo.
Blogpost
|
| |
| | |
|
Gaploid
| Дата: Суббота, 21.08.2010, 10:08 | Сообщение # 7 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
-MaX-, Ang3L, Спасибо  Я начинаю по немногу понимать как работает эта железка  Кстати, вчерашний вечер, и сегодняшнее утро, ушли на вылавливание бага, теперь у меня компилируется MAZE! Я так рад) Не большой вопрос по самой приставке, как я понял, команды (типа синтаксис) хранится в HEX, а все данные в памяти в DEC? И кстати, -MaX-, в некоторых играх, у тебя не работают кнопки, а в "TANKS" перепутана кнопка вврех и вниз хД
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
-MaX-
| Дата: Суббота, 21.08.2010, 10:20 | Сообщение # 8 |
Сказал что-то
Группа: Пользователь
Сообщений: 48
Статус: Offline
|
Quote (Gaploid) Не большой вопрос по самой приставке, как я понял, команды (типа синтаксис) хранится в HEX, а все данные в памяти в DEC? И кстати, -MaX-, в некоторых играх, у тебя не работают кнопки, а в "TANKS" перепутана кнопка вврех и вниз хД Неважно в чём хранить при работе всё равно придётся переводить DEC в HEX, а HEX в DEC. Лично у меня в памяти данные в HEX, а в регистрах DEC мне показалось так удобнее. Да я заметил, вопрос в том почему так
No Money, No Time, No Girl, No Job - NO PROBLEM!!!
|
| |
| | |
|
SRes
| Дата: Суббота, 21.08.2010, 10:32 | Сообщение # 9 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
|
Gaploid, Это системы счисления, они не являются разными, все равно это одно и тоже число, 15 DEC == F HEX == 1111 BIN == 17 OCT. Да что за ошибка ! Компилировать - это значит преобразовывать исходный код в исполняемый (ехе), это не значит интерпретировать - выполнять исходный код локально в программе. В твоем же случае ты интерпретируешь, не компилируешь.
Velociped Inc.
|
| |
| | |
|
Gaploid
| Дата: Суббота, 21.08.2010, 16:34 | Сообщение # 10 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
Всем спасибо, теперь нужно разобраться с самым сложным, отрисовка дисплея... Quote Компилировать - это значит преобразовывать исходный код в исполняемый (ехе), это не значит интерпретировать - выполнять исходный код локально в программе. В твоем же случае ты интерпретируешь, не компилируешь. Спасибо, учту  Добавлено (21.08.2010, 16:34) --------------------------------------------- Ех, вроде работает. Только багов еще много. Мой хоть очень похож на эмулятор Макса, глюков в нем на мног больше. Нужно еще сделать свою функцию BIT и отрисовки дисплея. И еще кое что интересное, на что я временно забил
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
Ang3L
| Дата: Суббота, 21.08.2010, 16:51 | Сообщение # 11 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (Gaploid) Не большой вопрос по самой приставке, как я понял, команды (типа синтаксис) хранится в HEX, а все данные в памяти в DEC? Это не вопрос по приставке, а общий вопрос по компьютерам в целом. Компьютеры (в большинстве своём) работают в двоичном исчислении (BIN - 0/1), то все данные на компьютере (в RAM, на винчестере и т.д.) хранятся тоже в двоичном варианте, т.к. он понимает только их. Но нам не удобно работать в двоичном исчислении, поэтому хотя в памяти хранятся всё равно в HEX'е (16ричный вариант), отображается всё в десятичном. Потому что нам так удобнее. Сравни: speed = 15; или speed = 0x0F; Нам удобнее левый вариант, но компьютеру, при выполнении, подставляется правый вариант. Это можно увидеть в отладчиках, там можно посмотреть память как в BIN'е, так и в HEX'е (из двоичных нам удобнее HEX, т.к. запись становиться гораздо короче, точнее в 4 раза (log216). FACE8Dh или 111110101100111010001101b).
Blogpost
|
| |
| | |
|
Gaploid
| Дата: Воскресенье, 22.08.2010, 11:04 | Сообщение # 12 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
Ang3L, Ты как всегда объясняеш самым доступным языком, спасибо Вобщем мой эмулятор захлебнулся в своих багах, переписываю. Сейчас остановился на функции отрисовки дисплея, может кто то объяснит вот это Quote "Рисуется спрайт с координатами VX,VY. Его ширина составляет 8 пикселей, а высота задается N. Каждая строка из 8 пикселей, побитово считывается из памяти по адресу I; Адрес I не меняет свое значение, после выполнения инструкции. Как указано выше (где?), VF принимает значение 1, если какой нибудь из экранных пикселей сменил значение с ЕСТЬ на ПУСТО, когда спрайт был нарисован. И 0, если этого не произошло." Буду благодарен
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
SRes
| Дата: Воскресенье, 22.08.2010, 11:15 | Сообщение # 13 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
|
Байт состоит из 8ми битов. Т.е. 0000 0000 Спрайт в чипе может быть от 1 до 15 высотой. И выглядит он примерно так (ширина 8 не случайно, а потому-что в байте 8 бит) Code 1111 0000 0111 1000 0011 1100 0001 1110 0000 1111 Некое подобие лесенки, а в ЧИПе это - спрайт, собственно 1 значит что квадрат зарисован, 0 что нет. Надо по одному биту отрисовывать... Короче сложно объяснить.
Velociped Inc.
|
| |
| | |
|
Gaploid
| Дата: Воскресенье, 22.08.2010, 20:48 | Сообщение # 14 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
Спасибо, я что-то вроде этого и пытаюсь сделать. Вот, гляньте Code var VX,VY,H,i,j,tmp; VX = argument0 VY = argument1 H = argument2
register[15] = 0
surface_set_target(Screen) for(i=0 i<H i+=1) { tmp = memory[register_i+i] for(j=0 j<8 j+=1) { if real(string_char_at(BIT(tmp),j+1)) == 1 { draw_set_color(c_white) if surface_getpixel(Screen,VX+i,VY+j) != c_black { register[15] = 1 draw_set_color(c_black) } draw_point(VX+j,VY+i) } } } surface_reset_target() Это я смотрел как у ВертиХвоста сделано, плюс ГМЛскриптс, плюс эмулятор Макса. Что-то рисуется, только не там где надо и не то, что нужно  Добавлено (22.08.2010, 20:48) --------------------------------------------- Кто нибудь знает решение проблемы?
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
WertyXBOCT
| Дата: Воскресенье, 22.08.2010, 21:26 | Сообщение # 15 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
А что делает функция BIT, выложи текст ее. А что не так? Насчет перепутанного управления. Скорее всего оно по умолчанию такое, так что эмулятор не виноват.
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Gaploid
| Дата: Понедельник, 23.08.2010, 09:42 | Сообщение # 16 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
BIT, переводит Decimal в BIT Code /* ** Usage: ** dec_to_bin(dec) ** ** Arguments: ** dec a non-negative integer ** ** Returns: ** a string of binary digits, one bit per character ** ** GMLscripts.com */ { var dec,bin; dec = argument0; if (dec) bin = "" else bin="0"; while (dec) { bin = string_char_at("01",(dec & 1) + 1) + bin; dec = dec >> 1; } return bin; } Все  Рисуются какте то квадраты, с полоской.
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 23.08.2010, 10:19 | Сообщение # 17 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
попробуй пошагово просмотреть все что там делается внутри кода. Я тоже мноооого мучался с рисованием :).
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
SRes
| Дата: Понедельник, 23.08.2010, 10:26 | Сообщение # 18 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
|
А я делал при помощи логического И, Code a = 1000 0000; b = SPRITE & a; if ( b != 0) { draw_pixel() } А вообще в моем исходнике на асме это так выглядит : Code mov ebx, 128d ; 1000 0000 and eax, ebx ; eax & ebx ; В eax байт спрайта shr ebx, 1 ; Сдвигаем ebx на 1 бит влево (0100 0000, потом дальше) cmp eax, 0 ; Сравниваем eax с нулем je _noBit ; jump equal (прыжок если eax == 0) ; тут рисуем бит _noBit: Офк вырезал 90% кода, но сама суть.
Velociped Inc.
|
| |
| | |
|
Gaploid
| Дата: Понедельник, 23.08.2010, 16:58 | Сообщение # 19 |
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
|
WertyXBOCT, Ладно, будем думать SRes, УЖжоС! Добавлено (23.08.2010, 16:57) --------------------------------------------- хех, проблема была на поверхности MAZE работает, есть маленький глюк, надеюсь вы поможете исправить. Гляньте исходник, там первая левая полоса не рисуется! П.С. Отрисовка сетки с альфой, дает некую объемность квадратикам на экране... Быть может возрадим платформу Добавлено (23.08.2010, 16:58) --------------------------------------------- Блин, исходник http://rghost.ru/2419349
Заходите! Gaploid aka Bizunow aka Илья aka crim :)
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 23.08.2010, 19:38 | Сообщение # 20 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
У меня та же фигня была, я просто координату отнимал на один во время отрисовки  ахах
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| |
|
|