в полученном снапшоте с адреса 0x5c00 - мусор ( системные переменные и какой-то загрузчик? а зачем? )Код:device zxspectrum128
org 0x6000
start
savesna "output.sna", start
Вид для печати
в полученном снапшоте с адреса 0x5c00 - мусор ( системные переменные и какой-то загрузчик? а зачем? )Код:device zxspectrum128
org 0x6000
start
savesna "output.sna", start
Писание чего-либо в скобках дает лишний ноль:
ld a, (1+2)
Результате дает #3e, 3, 0
Зачем?
До кучи вопрос - а округлять как? Скажем мне надо из #0124 получить #02. Ну или целочисленно поделить на 256.
Проверил, такого результата не бывает. Возможно два варианта:
3e,NN - ld a, N
3a,NN,NN - ld a, (N)
Судя по всему, признаком первой команды для компилятора является отсутствие внешних скобок, хотя возможно, что есть какие-то нюансы.
Можно как предлагает Vitamin, но возникнет сложность с адресами, большими чем #ff00 - результат не влезет в байт. Тут можно обрезать результат , используя and или mod, но проще через оператор high - high (addr + 255).
Целочисленно поделить на 256 - high N.
Что меня смутило в документации SjAsMPlus'а, так это опраторы сдвига:
x>>y shift right signed
x>>>y shift right unsigned
В чем состоит суть signed сдвига? Не меняется старший бит или что? Я этого не заметил. Назовите значение, на котором эти операторы будут работать по-разному.
Везде, где установлен старший бит.
Например:
0x8000 - это 32768 для беззнаков и -32768 для знаковых
Делаем сдвиг к младшим разрядам (делим на 2) двумя способами:
беззнаково- получаем 0x4000- 16384 в обоих нотациях, что неверно для знаковых
знаково- получаем 0xc000- 49152 для беззнака, что неправильно и -16384 для знаковых, что правильно :)
Ладно, ага. Спасибо. У меня тупилово-режим включился.
2Aprisobal
наскока реально имплементировать нечто похожее в макросах?
имеется ввиду ##.Код:#include <iostream>
#define MY_MACRO( arg ) arg##_test();
void ff_test()
{
std::cout << "ff_test";
}
void main()
{
MY_MACRO( ff );
}