Просмотр полной версии : проблема с tobos и спрайтами.
Добрый день, у меня такой вопрос:
С помощью арт студио можно создать спрайты 8х8 ,потом сохранить на диске файл.
Потом загрузить его в бейсике, набрать poke 23607,250 и вместо стандартных символов появятся мои спрайты. Вернуться обратно можно poke 23607,60.
Всё работает. Спрайты хранятся в памяти, начиная с адреса 64255 вроде.
Но мне ещё надо использовать программу tobos,а он хранится с адреса 53000 длинной 12536 байт. 53000+12536=65536. Т.е. я уничтожу спрайты, или наоборот. Короче эти две вещи не совместимы ?
Что можно придумать ? Мне нужно пользоваться спрайтами и использовать скомпилированную программу. Может компилятор другой использовать? Во время исполнения скомпилированной программы компилятор должен находиться в памяти ЭВМ, может есть другой, присутствие которого не обязательна ?
(у меня программа, после загрузки всех этих блоков, вроде бы всё работает, но начинаю писать её дальше, с бейсиком происходят чудеса, то внизу ошибку пишет не понятную, то вообще зависает, то цветные кубики, а команду stop вообще не видит . Если внизу запускаю скомпилированную программу rand usr 40000,то она выполняется нормально, если вставляю её в строчку 10 rand usr 40000 и запускаю run enter ,то всё зависает. )
Спасибо.
null_device
20.10.2011, 11:12
может есть другой, присутствие которого не обязательна
Mcoder2 от Евдокимова (http://zx-pk.ru/attachment.php?attachmentid=15315&d=1262794333), для работы скомпилированной программы сам компилятор в памяти не нужен. НО он целочисленный и "не понимает" многие операторы бейсика.
---------- Post added at 15:12 ---------- Previous post was at 15:11 ----------
Короче эти две вещи не совместимы
Грузите спрайты по другому адресу: "ниже" скомпилированной программы или "выше" кодов компилятора (мне кажется, он "сверху" не впритык, фонт UDG не затирает). ТОБОС стирает данные между концом скомпилированной программы и началом блока кодов компилятора.
спрайты принтом выводишь?я игры в тобосе писал.надо вспомнить..
null_device
20.10.2011, 11:19
ошибку пишет не понятную
Какую конкретно?
команду stop вообще не видит
Она не "распознается" компилятором как ограничитель конца программы. По-моему он ее воспринимет как выход из компилированной программы.
делал вроде так:
в 30000 шрифт,компилим в 40000
1pap0:bord0:goto3
2rand usr tobos:rand usr 40000:stop
3далее твоя прога
тестируешь гоуто 2.
шрифт грузишь отдельно потом все сохраняй в z80.
---------- Post added at 10:30 ---------- Previous post was at 10:27 ----------
а ну и poke 23606,48 23607,116
null_device
20.10.2011, 11:50
начинаю писать её дальше, с бейсиком происходят чудеса
Видимо нехватает пямяти? RAMTOP ведь "опускаете" до 39999?!
При написании программы делайте так:
1. Поднимаете RAMTOP на максимально возможное значение, командой clear n.
2. Пишете программу до определенного момента.. в саму программу добавляете строки:
rem: border usr 15619: rem: save "prog" сохраняемся
rem:clear n: border usr 15619: rem: load "compil" code загрузка компилятора
rem: border usr 15619: rem: load "graph" code загрузка графики
rem: randomize usr 53100 запуск компилятора
rem:clear n: border usr 15619: rem: save "code" code n+1, m запись скомпилированной программы
ремарка нужна, для запуска в командной строке и чтобы строка не обрабатывалась компилятром
3. Потом, выполняете каждую строку по очереди (удаляя команду rem, в начале строки).
----
Можно пользоваться приемом - до компиляции размещать графику вверху памяти. А перед компиляцией "пересчитать графику" под нижние адреса, там, где сейчас находится бейсик-программа. Ну, и компилировать программу "впритык" - первый раз узнаем длину получившейся программы, а второй раз, поднимем ramtop, чтобы конец скомпилированной программы был в районе ~52000-53000.
---------- Post added at 15:50 ---------- Previous post was at 15:42 ----------
он хранится с адреса 53000 длинной 12536 байт
Кодовый блок компилятора TOBOS, начинается с 53100 и имеет длину 12268, т.е. заканчивается в районе 65368. Сверху есть свободных 168 байт.
у меня влезало все вроде.завтра игры покажу. считаю самый быстрый (кроме целочисленных) и "добрый" компилятор (инерпретатор?).
Просто грузи шрифт в 32768 (до программы tobos) , потом poke 23607,127 (или 128 какое-то правильное)
а 23606 по умолчанию "ноль" же?
null_device
20.10.2011, 13:17
а 23606 по умолчанию "ноль" же?
23606\07 => 0\60
23606\07 => 0\60
Пипец) Минуту расшифровывал запись)
null_device
20.10.2011, 15:23
:) Мне казалось, это своего рода, "стандартная" запись для значения сисемных переменных (перечисление через дробь, если "адресов" больше одного). Содержимое ячеек, тоже записано через дробь.. ;)
----
у меня влезало все вроде.завтра игры покажу
Выкладывал на форуме пре-релиз карточной игры Червы, ссылку убрал из-за одной ошибки в логике скомпилированной программы (если кому интересно, можете попробовать ее найти) и мелких "ограничениях" присущих "сырой" программе.
Исправить проблематично - не могу найти дискету с "исходниками". Проще написать этот блок с нуля, или полностью "переработать" игру.
"Кастрированная" версия, также есть на WoS и VT (кем-то убран бейсик файл для 128К машин).
Программа писалась под особенности Tobos FP. Содержит два скомпилированных кодовых блока, работающих "по очереди" и кодовые блоки, также загружаемые по очереди.
При этом, как уже писалось раньше на этапе отладки графику располагал на месте компилятора, а на "финальном" этапе изменил все значения для переключения фонтов на "низкие" адреса.
----
И, наверное, самое последнее - писать программы лучше в режиме 48К (или на "чисто" 48К бейсике). Ибо, "128 интерпритатор" сплошное недоразумение - от большинства "only 48" способов защиты бесик-программ \ "финтов" на уровне недокументированных особенностей интерпритатора, машину "пучит".
Спасибо всем за помощь.
Вот выкладываю файл.
"1"-Это файл картинки (хранится с адреса 30000 длинна 1024) , первая цифра обозначает цвет (peek 30000 paper,ink,flush,bright) ,вторая peek 30001, код символа,и так далее. Заранее рисую ,сохраняю последовательность ,а потом также вывожу на экран с помощью команды print at x,y;shr peek i
"mer1"-спрайты созданные в art studio
"load ur"-скомпилированная программа рисует картинку из "1"
"tobs"-TOBOS ,чтобы работала программа "load ur"
"m2" и "start" -две из несколько десятков попыток запустить всю эту хрень выше .
файл mm3 это программа для рисования уровней (просто так выкладываю, там ошибки есть)
файл program -это то над чем я мучаюсь.
полная программа для рисования уровней.
В описании ошибка,управление не L D а L K
Запускаем ARTabc жмём "9" загружаем спрайты "mer1"
null_device
22.10.2011, 13:05
файл program -это то над чем я мучаюсь.
Программы m2 и START были мною слегка "видоизменены". Первая была заново скомпилирована (хотя, можно было этого не делать - старая версия и так работала), а во второй был изменен порядок загрузки файлов.. т.к. при загрузке компилятора последним "портится" ранее загруженная графика. ;)
----
Кстати.. почему-то возникли проблемы с образом диска. Unreal загружал файлы из образа неправильно (одни нули), хотя заголовок и содержимое файлов было "видно" в BV. Помогло, копирование файлов на другой образ. :)
женя999, типа игры в пример тебе на тобосе
Вот ещё проблема. Пишу программу,и вдруг начинает выскакивать ошибка после запуска. В одной из строчек (9999) ,двоеточие изменяется на "b" . Что происходит?
Эмулятор spectaculator.
В эмуляторе emuzwin вобще эта программа зависает постоянно,а иногда всё работает,сохраняю её,через определённое время запускаю,а она виснет,сбрасывается,хотя перед сохранением работала.
женя999, Смотри какие poke у тебя еще делаются
null_device
24.10.2011, 16:50
вдруг начинает выскакивать ошибка после запуска
Что происходит?
В самой программе (бейсик или код) не призводится изменение значений ячеек, в области расположения бейсик программы (например, оператором poke)?
Ну и не помешал бы образ эмулятора или снапшот..
null_device
26.10.2011, 12:07
AER, такой вопрос: не в курсе, чем отличаются "моя" и "ваша" версия компиляторов? Ну, кроме, версии (и, как следствие различия в ~280 точках кода компилятора)..
незнаю ниче. какая "ваша" и какая "наша".
null_device
03.11.2011, 21:05
Судя по надписи, выводимой в процессе компиляции - в образе приложенном мною, используется "первая" версия. Компилятор из вашего архива выдает надпись, что компилятор версии 2.0.. Кроме этого, код компилятора различается еще в некоторых местах. Думал, может вы знаете, в чем отличия - я, после компиляции, особой разницы не ощутил. ;)
кстати,там еще какието команды вроде можно подавать в тексте,типа непроверка ошибок,и чет такое..замедление/ускорение.. или гоню..
null_device
05.11.2011, 10:51
там еще какието команды вроде можно подавать в тексте,типа непроверка ошибок,и чет такое..замедление/ускорение..
Через poke.. "Команды" компилятора в тексте программы тобос не поддерживает. :)
Компилятор Tobos FP представляет собой достаточно гибкое программное средство, позволяющее выбирать различные режимы компиляции в зависимости от условий. Стандартный режим компиляции, задаваемый по умолчанию, более всего удобен для предварительной отладки небольших (до 13 килобайт) программ. Для готовых отлаженных программ удобно применять режим трансляции с сокращенным форматом вывода сообщений об ошибках (без указания номера ошибочной строки в исходном тексте). Это позволяет несколько сократить объем скомпилированной программы и ускорить ее работу. Режим включается оператором РОКЕ 53252.0, а выключается — РОКЕ 53252,55.
Для обработки больших программ может оказаться полезным режим компиляции с уничтожением исходного текста и размещением на его месте кодов скомпилированной программы. Включается режим оператором РОКЕ 53240,0, а выключается — РОКЕ 53240,55.
Кроме того, при компиляции очень больших программ может помочь справиться с неизбежными проблемами рациональное распределение памяти компьютера. Для того чтобы оптимально использовать память, необходимо знать несколько собственных системных переменных Tobos FP.
Ячейки 58112/13 содержат адрес размещения скомпилированной программы для режима компиляции без уничтожения исходного текста программы. Если обе ячейки содержат нули, то код размещается традиционно по адресу RAMTOP+1, если же нет, то по адресу РЕЕК 58112+256*РЕЕК 58113.
Ячейки 55631/32 содержат адрес размещения скомпилированной программы для режима трансляции с уничтожением исходного текста. Изначально эти ячейки содержат адрес 24000 для магнитофонной версии компилятора и 24100 для его дисковой версии.
Более подробно это описано в книге Диалекты Бейсика для ZX-Spectrum (http://vtrdos.ru/book/DIALECT.ZIP)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot