2016-04-29 5 views
-1

Я работаю над эмулятором Chip-8 на C, имея в виду, чтобы он был как кросс-платформенный и как можно мал для совместимости со встроенными системами и системами с низкими спецификациями (и бросить вызов самому себе), что означает возможность использовать SDL, ncurses (когда я добираюсь до этого) и что-то еще. Таким образом, я использовал unsigned chars вместо ints или unsigned ints, и я использовал «typedef unsigned char byte», чтобы сделать его более удобным. Я трачу свое время, даже с целью идеально сделать его совместимым с очень маленькими системами или просто использовать «typedef unsigned int byte» достаточно, не жертвуя производительностью?Полезность неподписанного символа в встроенных системах в C

+0

Я не знаю о Chip-8, но googling Я читал, что это 8 бит. Предположим, что тип int имеет размер одного байта и char тоже, безразлично использовать 'typedef unsigned int' или' typedef unsigned char'. Они имеют такой же эффект. – ViniciusArruda

+0

Да, Chip-8 - это 8-битный язык, но моя проблема была меньше с самим интерпретатором/эмулятором и больше с хост-системой. Итак, размер int изменится с помощью системы, скомпилированной в/для? – eggbertx

+0

попробуйте распечатать sizeof (int). для этого компилятора может быть 1 байт для этой цели, это своего рода идея типа переменной int, она варьируется в зависимости от цели (более или нежели char или long). –

ответ

1

Вы должны просто отделить интерпретатор от привязок io.

Только переводчик должен быть 8-битным портативным.

Каждая целевая платформа будет иметь различный набор технологий, доступных для ввода-вывода.

SDL или curses предоставят вам некоторую мобильность между платформами * nix и windows, но если они доступны, вы, вероятно, будете иметь 32 бита целых чисел, возможно, придется иметь дело с 16 битами. Но, конечно, не с 8-битными целыми числами.

С другой стороны, имея дело с 8-битными и 16-битными голографическими процессорами, вы, вероятно, просто подключите свой проект непосредственно к графическому драйверу.

+0

Он использует 8 бит в основном для работы с самим набором инструкций. Итак, следует ли использовать или использовать только 8-битные целые числа с набором команд/cpu struct и регулярными неподписанными ints для всего остального? – eggbertx

+0

Да, если у вас нет конкретной 8-битной цели. Все живое составляет не менее 32 бит, за исключением некоторых популярных 16-битных контроллеров pic и avr, которые стоят так же, как и их 32-битные эволюции. – xvan

+0

В идеале я хочу, чтобы он был совместим с каждой системой по-человечески. Опять же, для вызова, поэтому я начал с 8-битных целых чисел, и почему я включил возможность ncurses в качестве альтернативы SDL – eggbertx

0

У вас есть основная идея, но не решение. В современном C мы имеем тип в stdint.h.

Это тип, который вы должны использовать, что означает, что вы говорите компилятору: «Мне не нужно больше 8 байтов для этого целого, но не стесняйтесь использовать больший размер, если это повышает производительность».

+0

Но не будет ли причиной проблемы сопоставимости при построении чего-то вроде DOS? – eggbertx

+0

@Josh Почему вы строите DOS? Нет, это не вызовет каких-либо проблем с совместимостью, это красота типов stdint.Хотя, поскольку вы не знаете, насколько велико целое число, вы должны рассматривать его как 'uint8_t' при рассмотрении неявных рекламных акций типа. – Lundin

Смежные вопросы