#python #arrays #emulation
#python #массивы #эмуляция
Вопрос:
Я начинаю создавать эмулятор, и я инициализировал 4096 байт ОЗУ в Python как: memory = [0] * 4096
. Теперь у меня есть массив шестнадцатеричных значений, которые мне нужно сохранить в 0x50 (80-е значение в массиве). Как я смогу вставить свой список значений в 0x50? Спасибо!
Редактировать:
Поняв, что я не включил достаточно информации, вот часть моего кода:
memory[80] = [0xF0, 0x90, 0x90, 0x90, 0xF0,
0x20, 0x60, 0x20, 0x20, 0x70,
0xF0, 0x10, 0xF0, 0x80, 0xF0,
0xF0, 0x10, 0xF0, 0x10, 0xF0,
0x90, 0x90, 0xF0, 0x10, 0x10,
0xF0, 0x80, 0xF0, 0x10, 0xF0,
0xF0, 0x80, 0xF0, 0x90, 0xF0,
0xF0, 0x10, 0x20, 0x40, 0x40,
0xF0, 0x90, 0xF0, 0x90, 0xF0,
0xF0, 0x90, 0xF0, 0x10, 0xF0,
0xF0, 0x90, 0xF0, 0x90, 0x90,
0xE0, 0x90, 0xE0, 0x90, 0xE0,
0xF0, 0x80, 0x80, 0x80, 0xF0,
0xE0, 0x90, 0x90, 0x90, 0xE0,
0xF0, 0x80, 0xF0, 0x80, 0xF0,
0xF0, 0x80, 0xF0, 0x80, 0x80]
Что я сделал, так это добавил 80 внутри скобок, и после распечатки массива кажется, что он печатается с 80-м значением. Это то, что я хочу, но я все еще не уверен, удовлетворит ли сохранение моих значений в 80-м члене в массиве начальному местоположению памяти 0x50, которое мне нужно для моего эмулятора. Итак, теперь я предполагаю, что мой вопрос заключается в том, имеет ли Python дело с расположением шестнадцатеричных значений внутри массивов.
Комментарии:
1.
[0]
значительно больше одного байта, хотя, конечно, если вы просто хотите использовать список для имитации памяти, это нормально.2. Как выглядят ваши «шестнадцатеричные значения» и что вы пробовали? Установка элемента массива с определенным индексом должна быть очевидной, если вы знаете, что такое массивы,
Ответ №1:
Что делает ваш код, так это записывает список в 80-е место памяти.
Если вы планируете выполнять этот тип присваивания один раз, сделайте это:
memory[80:160] = [0xF0, 0x90, 0x90, 0x90, 0xF0,
0x20, 0x60, 0x20, 0x20, 0x70,
0xF0, 0x10, 0xF0, 0x80, 0xF0,
0xF0, 0x10, 0xF0, 0x10, 0xF0,
0x90, 0x90, 0xF0, 0x10, 0x10,
0xF0, 0x80, 0xF0, 0x10, 0xF0,
0xF0, 0x80, 0xF0, 0x90, 0xF0,
0xF0, 0x10, 0x20, 0x40, 0x40,
0xF0, 0x90, 0xF0, 0x90, 0xF0,
0xF0, 0x90, 0xF0, 0x10, 0xF0,
0xF0, 0x90, 0xF0, 0x90, 0x90,
0xE0, 0x90, 0xE0, 0x90, 0xE0,
0xF0, 0x80, 0x80, 0x80, 0xF0,
0xE0, 0x90, 0x90, 0x90, 0xE0,
0xF0, 0x80, 0xF0, 0x80, 0xF0,
0xF0, 0x80, 0xF0, 0x80, 0x80]
где первое — это начальная позиция, а второе — начальная позиция длина добавленной памяти.
Но если вы планируете часто делать подобные вещи, вероятно, хорошей идеей будет использовать функцию, подобную этой:
def insert(pos, l):
global memory
memory[pos:pos len(l)] = l