Напомните плиз, если мы делаем бейсик-тр-дос загрузчик, и игра требует CLEAR 24136 , то как вычислить предельный размер бейсик-загрузчика в байтах?
Вид для печати
Напомните плиз, если мы делаем бейсик-тр-дос загрузчик, и игра требует CLEAR 24136 , то как вычислить предельный размер бейсик-загрузчика в байтах?
Зайди в бейсик. Набей какую-нибудь строку. Из бейсика зайди в тр-дос, выполни ченибудь типа кат, лист. Вернись в бейсик и посмотри в отладчике адрес своей строки.
что за методы?
24575 хватает впритык.
а сделать загрузку через функцию 5 точки #3D13 никак?
а строчка будет по адресу $5D40 наверное.
Начало бейсик программы: 23635+112 байт переменных TR-DOS+256 байт при операциях работы с диском.
Выполнив команду PRINT 65536-USR 7962 выяснится, что свободного места для загрузчика остается, с гулькин нос.
creator, само собой - по памяти, указал адрес переменной, а не собственно адрес начала программы на бейсике.
Погодите, слишком много действий и чисел, непонятно откуда берущихся. Вот есть CLEAR 24136 , вот есть начало бейсика при активном тр-досе - 23867 , вычтя из первого второе получим 269 байт под загрузчик. Всё верно? Или я чего-то напутал?
Навстречу переменным бейсика, вниз растет стек. Так, что в сухом остатке, получается меньше.
Делаете CLEAR (сколько вам надо).
Заходите в TR-DOS и даете команду LIST, например. Выходите из TR-DOS.
Набираете PRINT 65536-USR 7962. Получаете число свободной памяти для "маневров", в байтах.
goodboy, +257 к чему?
269+257=526?
или
269-257=12?
- - - Добавлено - - -
Ну вот, так и знал, что всё сложно :)
А как всё-таки вычислить всё это? Я думал, что бац и вот я высчитал 269, а оказалось какие-то буфера тр-доса, стеки, космоса чёрные дыры :v2_wacko: Должна же быть какая-то нормальная формула, чтобы всё это наконец вычислить с точностью до байта.
Как всё запущено...
Ну в общем, если программа более 12 байт, то нельзя делать мой CLEAR 24136, пока не закончены обращения к тр-досу. Но а после загрузки сжатого хрумом блока куда-нибудь повыше, можно сделать CLEAR 24136, распаковать блок, и вот тогда 269 байт в моём распоряжении? Ах да, там ещё стек надвигается, надо понять насколько именно он надвигается и отнять это число от 269. Только вот как это понять? :D
Разгадка где-то близко...
Нехватало бы, если бы я этот свой блок грузил несжатым в 24137-65532,
но я ж его сожму хрумом, и загружу с адреса 30000 например. А потом сделаю CLEAR 24136, и распакую в 24137-65532. К тр-досу то я больше не буду обращаться. Но мне интересно, сколько байт я смогу потратить на бейсик-загрузчик.
- - - Добавлено - - -
Так как в моём случае, трдос пишет мне out of ram, то я решил просто зайти в трдос и по-быстрому выйти, беспалева, в таком случае PRINT 65536-USR 7962 выдаёт мне 128 байт (и 130 байт, если всё это проделывать из 48-ого режима). 128 как-то явно поменьше чем 269, куда 141 байт съелся?.. :v2_confu:
Подобные финты ушами, описаны в брошюрке Родионова.
- - - Добавлено - - -
На выполнение команд и хранение набранной строки, тоже тратится память.
print(peek 23627+256*peek23628)-(peek23635+256*peek23636)
Размер программы. Есть эмули, поддерживающие в редакторе бейсика copy-paste? :) Было бы удобно.
я делал в zxeditor - пишешь текст, копипастишь в прогу, сохраняешь.
BASIn же.
http://speccy.info/BASin
Да это я знаю. Я выразил хотелку, что мол круто было бы иметь эмуль, который умел бы copy-paste, ладно, просто paste, хотя бы в бейсик-редакторе.
- - - Добавлено - - -
Скажите лучше, как из бейсика узнать, прога запущена из 48 или из 128? Должны же быть какие-то отличия в каких-то переменных, которые можно считать PEEK и сразу понять, мы в 48 или в 128 режиме находимся.
К мастерам бейсика 48. Ищу дешевые способы организовать
- строковый массив со строками разной длины
- бинарный AND и сдвиг вправо
- бинарный XOR
Можно, например, XOR на основе печати псевдографики с OVER 1(см. вложение).
Предварительно псевдосимвол "A" можно обнулить, а ячейку 16384 сохранять и восстанавливать, а цвета сделать 8. И на экране будет почти ничего не заметно.
- - - Добавлено - - -
А вообще, USR-ом конечно проще. :)
считает, что 1 xor 3 == 0Цитата:
вроде как b AND(NOT a)
- - - Добавлено - - -
смущают дробные части и как себя поведет INT. впрочем, может без int.Цитата:
сдвиг суть деления
a>>1 a/2
a>>2 a/4
- - - Добавлено - - -
Через псевдографику как-то совсем для гурманов :) А через USR - можно подробнее?Цитата:
А вообще, USR-ом конечно проще
Бинарные операции, не Бейсик
http://i104.fastpic.ru/big/2018/0509...8156d3fe6f.png
Даже если не INT, а плавающая точка, то операций сдвиг не существует.
он нам не питон
https://image.ibb.co/dfYqPS/not.png
со спрайтами маешься? напиши процедуру на ассемблере и не страдай дурью.
Выводить спрайты на бейсике?
В 21 веке?
Кто я по-твоему, демосценер?
https://vignette.wikia.nocookie.net/...path-prefix=ru
кто-то должен проткнуть рукой лицо.
Ну да, и по 23681 ещё можно наверно. Но если у человека вместо 128 бейсика что-то другое зашито, то будет фейл. Значит надо пытаться переключить страницу, помещать байт куда-то в 49152-65535, потом пытаться переключать страницу обратно и смотреть peek'ом, есть байт или нет, если нет, то 128к.
- - - Добавлено - - -
А вот интересно, можно ли как-то из программы, запущенной в 128-ом режиме, выполнить оператор "SPECTRUM" и чтобы при этом выполнение программы не прервалось? Что-нибудь в системных переменных намутить, обработку ошибок или чего там, чтобы вместо выдачи "0 OK , 1:1" продолжилось выполнение программы со следующей строки.
Емнип, такой способ был описан в каком-то из последних спектрофонов.
null_device, "мой" способ как-то проще и короче, там, в спектрафоне, слишком сложно и длинно для меня ))