Вопросы по CHIP-8 - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы по CHIP-8 (Не бейте сильно...)
Вопросы по CHIP-8
Gaploid Дата: Пятница, 20.08.2010, 15:45 | Сообщение # 1
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
Всем привет. Вот не могу равнодушно смотреть на работы Макса и ВертиХВОСТа smile
Читаю потихонько статью, команды переведенные ВертиХВОСТом (спасибо, кстати :)) и конечно разбираю исходники.
Далеко уйти не смог. Разобрался с памятью, ну почти. Сейчас остановился на регистрах. Здесь и появилась первая проблема. Перечитав несколько раз статью, я так и не понял зачем они нужны и за что отвеают. Просветите?



Заходите!
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, Спасибо! Я когда начал разберать команды, заметил, что это похоже на оперативку, только меньше smile
Quote
Эх... А про меня забыли :(

Извини, не понимаю о чем ты sad
А вот и второй вопрос. У вас (WertyXBOCT,-MaX-) в исходниках есть стеки, поясните, зачем они нужны? Я сейчас попробую сам, так же как и с регистрами, но не знаю, даст ли это результат.
П.С. Реализовал все команды кроме функций связаных с рисованием и вводом smile Конечно без исходников пришлось бы очень долго разбираться. Отдельное спасибо за них smile



Заходите!
Gaploid aka Bizunow aka Илья aka crim :)


Сообщение отредактировал Gaploid - Пятница, 20.08.2010, 18:59
 
-MaX- Дата: Пятница, 20.08.2010, 19:40 | Сообщение # 5
Сказал что-то
Группа: Пользователь
Сообщений: 48
Статус: Offline
Gaploid, при вызове подпрограммы эмулятор сохраняет текущий адрес памяти в стеке и переходит к подпрограмме, а при выходе из подпрограммы читает адрес из стека(при этом он автоматически стирается) и переходит по нему обратно к программе.

Вот как-то так smile

Добавлено (20.08.2010, 19:40)
---------------------------------------------

Quote (SRes)
Эх... А про меня забыли :(

По производительности твой эмулятор всегда будет впереди всех wink


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, Спасибо smile Я начинаю по немногу понимать как работает эта железка smile Кстати, вчерашний вечер, и сегодняшнее утро, ушли на вылавливание бага, теперь у меня компилируется 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.
Quote
компилируется

Да что за ошибка ! Компилировать - это значит преобразовывать исходный код в исполняемый (ехе), это не значит интерпретировать - выполнять исходный код локально в программе. В твоем же случае ты интерпретируешь, не компилируешь.


Velociped Inc.
 
Gaploid Дата: Суббота, 21.08.2010, 16:34 | Сообщение # 10
Разговорчивый
Группа: Пользователь
Сообщений: 116
Статус: Offline
Всем спасибо, теперь нужно разобраться с самым сложным, отрисовка дисплея...
Quote
Компилировать - это значит преобразовывать исходный код в исполняемый (ехе), это не значит интерпретировать - выполнять исходный код локально в программе. В твоем же случае ты интерпретируешь, не компилируешь.

Спасибо, учту smile

Добавлено (21.08.2010, 16:34)
---------------------------------------------
Ех, вроде работает. Только багов еще много. Мой хоть очень похож на эмулятор Макса, глюков в нем на мног больше. Нужно еще сделать свою функцию BIT и отрисовки дисплея. И еще кое что интересное, на что я временно забил smile




Заходите!
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, Ты как всегда объясняеш самым доступным языком, спасибо smile
Вобщем мой эмулятор захлебнулся в своих багах, переписываю. Сейчас остановился на функции отрисовки дисплея, может кто то объяснит вот это
Quote
"Рисуется спрайт с координатами VX,VY. Его ширина составляет 8 пикселей, а высота задается N. Каждая строка из 8 пикселей, побитово считывается из памяти по адресу I; Адрес I не меняет свое значение, после выполнения инструкции. Как указано выше (где?), VF принимает значение 1, если какой нибудь из экранных пикселей сменил значение с ЕСТЬ на ПУСТО, когда спрайт был нарисован. И 0, если этого не произошло."

Буду благодарен smile



Заходите!
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()

Это я смотрел как у ВертиХвоста сделано, плюс ГМЛскриптс, плюс эмулятор Макса. Что-то рисуется, только не там где надо и не то, что нужно sad

Добавлено (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 smile
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;
}

Quote
А что не так

Все sad Рисуются какте то квадраты, с полоской.



Заходите!
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, Ладно, будем думать smile
SRes, УЖжоС!

Добавлено (23.08.2010, 16:57)
---------------------------------------------
хех, проблема была на поверхности smile 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
У меня та же фигня была, я просто координату отнимал на один во время отрисовки smile ахах


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы по CHIP-8 (Не бейте сильно...)
Страница 1 из 212»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход