a=экран
x=(память) !!!
Вид для печати
a=экран
x=(память) !!!
ZEman, надо вычислять не только - в какую ячейку экрана писать, но и вычислять, откуда брать данные (а, они хранятся в таком же виде).
Вложение 58052Вложение 58053Вложение 58051
null_device, я именно это и пробую сделать.
goodboy, всё-равно что-то не то выходит.
ZEman, решение "в лоб" программы отрисовки предпоследней строки.
Пофиксил. Сделал как процедуру отрисовки, в виде подпрограммы.
null_device, отлично !
отрисовка прекрасно работает.
- - - Добавлено - - -
вот чёрт, у меня башка ща лопнет...
в памяти то хранится всёравно вся картинка (на 6912 байт), или её нижняя треть на 2048 байт.
а как чтобы сохранились только байты из этих 2 нижних строк и их можно было записать на ленту.
ZEman,
Вариант номер раз: сохраняем только нужные линии. Переносим в область памяти подряд данные с экрана и сохраняемся из этого "буфера". При загрузке проделываем обратное.
Вариант номер два: сохраняем нижнюю треть экрана целиком.
Вопрос в том, что вам нужно сохранять нижние строки экрана, или данные знакогенератора. Вы же вроде создаете генератор шрифта, а там данные хранятся несколько иначе чем данные на экране?
вот так я уже сделал UDG-editor
- - - Добавлено - - -
это можно сказать финальная версия, всё работает.
только можно сократить размер записываемого экрана.
добавил:
в архиве rararura files - догружаемые файлы для редактора.
шрифты, тексты, наборы udg символов, картинки для большого режима.
их можно любые использовать.
- - - Добавлено - - -
исправил пару ошибок и обновил отрисовку экрана.
БОЛЬШОЕ СПАСИБО ВСЕМ КТО ПОМОГАЛ МНЕ !
обновил UDG-editor.
добавил сдвиг символов (вниз или вправо), индикатор работы caps lock, улучшил текстовый редактор, исправил кучу мелких ошибок, объединил сохранения файлов и загрузки, добавил сетку в big mode и многое другое.
провёл довольно сильную оптимизацию программы.
скачать - смотрите вложение.
есть пара вопросов.
я несколько удивлён работой команды RND, это что ложная случайность или нет ?
например вот так работает RND:
запускаем редактор, три раза отвечаем нет "N", затем жмём на клавишу "В", попав в big mode жмём клавишу "*".
на экране случайным образом раскидаются различные символы.
но, к моему большому удивлению, закрыв эмулятор и повторив эти действия снова, в первый раз на экран выводится снова та-же комбинация символов.
потом уже выводятся другие символы, но в первый раз одно и то-же, где-то хранится эта случайность чтоли.
что за... как работает этот генератор случайных чисел (RND).
и ещё вопрос, что размещается по адресам начиная примерно с 65270 ?
Машинный стек, стек GO SUB, символы UDG.
SEED = (SEED + 1) * 75 % 65537 - 1, результат равен SEED / 65536. (% - остаток от деления). RND вычисляет значения циклически, поэтому при одинаковых входных данных (а SEED после сброса всегда равно 0) RND будет выдавать одинаковые последовательности. Оператор RANDOMIZE без параметров копирует в SEED байты из системного таймера, а поскольку от сброса до этого RANDOMIZE происходит случайное и не повторяющееся значение тиков, то можно сказать, что RANDOMIZE инициализирует цепочку значений случайным образом. Если же, наоборот, надо генерировать случайные, но одинаковые цепочки, можно выполнить RANDOMIZE n, где n - "номер" такой цепочки (новое значение SEED). Примерно так работает генератор островов в SIM CITY.
Сама по себе фенкция выдает псевдослучайные последовательности. Если перед этим использовалась RANDOMIZE n, будет сгенерирована одна и та же последовательность, а в переменной SEED будет лежать двухбайтовое представление числа n. Использование оператора без параметров, заносит туда двухбайтовое значение переменной FRAMES (младших байт).
- - - Добавлено - - -
В обычной машине, после перезагрузки, с 65367 лежит знакогенератор UDG. Под ним, от значения переменной RAMTOP, к младшим адресам двигается стек.