да я и не спорю.
Вид для печати
В общем дело такое. Не до жиру - быть бы живым. Решил сделать по минимуму. Без всяких читов. Намедни как раз Слайдер дал мне процедуру пропуска секторов, чтобы можно было выбрать, какую часть грузить.
Структура планируется простейшая: блок с картинками и 3 блока кодов (1,2 и демо), ну и загрузчик на бейсике, который запускает кодовые процедуры, опрашивает клавиатуру и, в зависимости от INKEY$, покесами меняет количество загружаемых секторов (в процедуру загрузки), и в процедуру пропуска секторов подставляет нужное количество секторов.
Начал я тестить. Блок картинок грузится, все работает. Сразу за ним блок 1 части, тоже грузится. Попробовал процедуру пропуска секторов - 2 часть тоже грузится. Я воодушевился и стал делать финальный бейсик - загрузчик. В итоге только первую часть запустить можно))) Хотя до этого пробовал сырой вариант, там и вторая запускалась, глянул тот сырой вариант, там вторая грузится, а уже демо - нифига.
Короче сделать монолоадер который грузит 1-2 блока - получается. Больше - хрен. Ради любопытства пробовал делать пропуск секторов с помощью изменения POKE значений 23796/797, дык при попытке загрузки начинаются сплошные ошибки Disk error Return Abort Ignore - от этого я вообще офигел :eek_std:
А ТС не хочет сделать все на асме, не используя бейсик? Или желание сделать релиз любым способом сильнее желания познать всю силу асма?:)
да.
И всё ведь почти работает. В аттаче пример, который должен был работать, но в итоге работает еще хуже какой-то промежуточной версии, запускает только 1-ую часть. (С адреса 23872 - лоадер длинной 18 байт. С адреса 23890 - "пропускальщик секторов" длинной 21 байт. Со clear игрался как угодно, куда и как я её только не вставлял, дело не в clear.)
вместо 0 используй логическую конструкцию NOT PI.
картинки сжимай пакерами предназначенными для них
(они частенько оптимальней hrust`a)
и у тебя ошибка в пропускальщике
По моему дело не в том, что бейсик длинный, а в чем-то другом. А что касаемо длины, то никакие not pi и никакие bin не сравнятся с обычной переменной. Например border n. А потом в командной строке let n=0. not pi нервно курит в сторонке. А когда речь заходит о пятизначных числах, то выигрыш еще более очевиден. val "" курит. Правда clear и run обнуляет всё это дело, это надо учитывать. Но я пробовал и так и сяк, куда только не ставил clear, значит дело не в ней.
А какая ошибка в пропускальщике? Слайдер мне дал такой код пропускальщика:
эту процедуру я и использовал. Только в конце у меня не ret, а jp 23872. Ну чтобы когда пропускальщик отработал, запускался лоадер и грузил то что надо. По умолчанию у меня пропускальщик пропускает 104 сектора, это значение меняется poke, если надо грузить не вторую часть, а демо. И у меня сначала вроде даже работало, т.е. пропускальщик действительно пропускает 104 сектора. Но когда надо пропустить 202 сектора, то нихрена уже не работает. А более поздняя моя сборка даже 104 не хочет пропускать.Цитата:
ld b,кол-во секторов
call процедура
процедура:
ld de,(23796)
m1 inc e
ld a,e
cp 16
jr c,m2
inc d
ld e,0
m2 djnz m1
ld (23796),de
ret
Сам же лоадер, который сидит в 23872 такой:
Цитата:
DI
LD BC,#3505
LD DE,(23796)
LD HL,32768
CALL 15635
EI
JP 32768
Наворотил ты делов. Почему 104 и 202?
потому что:
грузится бейсик с кодом в рем. В рем сидит и лоадер и пропускальщик. Первым делом вызывается лоадер. Он тупо грузит блок с запакованными картинками. И распаковывает его, блок распаковывается и автостартует, показывая первую картинку (выбор части).
опрашивается клавиатура, если нажата любая клавиша кроме "2" или "0", то просто тупо вызывается лоадер, в котором предварительно, с помощью поке, меняется кол-во загружаемых секторов, ибо блок с картинками имеет одно кол-во секторов, а блок с первой частью игры - другое. Пропускать ничего не надо, ибо в этом случае загрузка идет строго по порядку, одно за другим.
Если же нажата клавиша "2", то в лоадере меняется количество загружаемых секторов.И в пропускальщике выставляется количество секторов, которое надо пропустить.Так как длина кодового блока первой части 104 сектора, а в пропускальщике уже по умолчанию стоит это число, то нифига не выставляется. А тупо вызывается пропускальщик, который потом передает управление лоадеру.
И только если нажата "0",то и в лоадере меняется кол-во секторов, и в пропускальщике меняется 104 на 202, ведь 104+98=202 (длина второй части)
если ты привел процедуру "пропускания" Сладера, то у тебя она неправильная:
нет
m2 djnz m1
http://i64.fastpic.ru/big/2015/0103/...4115eb25ad.gif
ZX_NOVOSIB, вот тебе еще один вариант.
о чем спор? Экономии места сразу видно дофига. опрос клавиатуры например.
хм, жесть.. а куда она, мать её за ногу, делась? Вот же она:
http://speccy1.mag.su/hov9k8.png
Sublime Text её проигнорировал? Или sjasmplus?
И как теперь её вставить?
---------- Post added at 14:14 ---------- Previous post was at 14:07 ----------
конечно я проверял. Ну ладно, щас еще раз проверил.
Сделал программу "1 BORDER NOT PI", сохранил на диск, она занимает 8 байт.
Прога "1 BORDER n" занимает 7 байт. А работают одинаково. В более длинных прогах выигрыш еще существеннее будет. Я уж молчу про случаи когда надо оперировать 5-ти значными числами.
---------- Post added at 14:18 ---------- Previous post was at 14:14 ----------
а как опрос на бейсике короче сделать?
вот три варианта
http://savepic.ru/6538254.pnghttp://savepic.ru/6530062.pnghttp://savepic.ru/6536206.png
http://savepic.ru/6522894.png
первый и третий по 13байт. где ты увидел экономию я не-понимаю.
длина бейсик программы и длина области занимаемой программой это разные вещи.
программа 1 border n без приписки в начале let n=0 нафиг никому не уперлась.
вообще, по теме экономии места для бейсика советую покурить первые выпуски zx-ревю, там применению конструкций типа border val "0", ink sgn pi и прочим clear 2e4 довольно много текста было посвящено.
Параметр Start. Goodboy правильно указал.
п.с. имхо, вместо того, чтобы вымучивать многострадальный загрузчик, уже который день, скрещенный с бейсиком, можно было давно почитать книгу и сделать все правильно на асме. А то получается, что ТС ни с асмом не дружит, ни с бейсиком, а коллектив дружно пытается помочь научиться писать монозагрузчики не по феншую:)
Дети малые:v2_dizzy_facepalm:
вместо вызовов и POKE получается хорошая экономия байт, надо лишь сообразить, где и какой адрес вызывать..Код:xor a:out (#FE),a -3 байта
далее
entry2:
ld b,NN+MM:jr e11
entry1:
ld b,NN
e11:
;тут skip секторов 0
entry0:
;тут загрузка части 0
Я думал что "длина бейсик программы" и "длина области занимаемой программой" - это одно и тоже. В чем разница? Как бейсик-программа1 может занимать на диске места мало, а в памяти много, а бейсик-программа2 на диске много, а в памяти мало? Не понимаю..
Вот эта программа что высчитывает?? "Длину программы", или "длину области занимаемой программой"? Кстати и она кажет, что border n занимает меньше (вместе с самой программой 70 байт), чем not pi (71 байт). Так что может гудбой и прав, но я пока не понимаю почему :)
http://speccy1.mag.su/qbhmww.png
http://speccy1.mag.su/0itiqp.png
---------- Post added at 16:50 ---------- Previous post was at 16:46 ----------
еще как уперлась. В моем примере на скринах, никакой "приписки в начале" нет, а она работает, окей кажет. И точно также, без приписки, будет и с диска работать.
Ты писалЯ поставил вместо пробела двоеточие, код стал 23 байта (вместо 21). Но по-прежнему нифига не работает. В аттаче версия с двоеточием. boot на диске присутствует и запускает то что нужно.Цитата:
для ужасма попробуй
m2:djnz m1
похоже у тебя инструкция на пробел отступает а ужасм ругается.
пробел давишь и загружается часть 1(или 0?)
---------- Post added at 14:46 ---------- Previous post was at 14:45 ----------
1,2,d - это части?
если в меню выбора части нажать пробел, то загрузится-запустится 1 часть (1). Вместо пробела можно нажать всё что угодно, кроме "2" и "0", ибо по 2 должен грузится файл "2", а по "0" - файл "d" (демка рекса, ну та, где нас учат как воевать)
после картинки выбора части, есть еще одна картинка, но там можно тупо жать любую клавишу, не обязательно пробел.
и да, 1,2,d - это части. А 0 - это запакованный блок с запакованными картинками.
---------- Post added at 17:56 ---------- Previous post was at 17:53 ----------
load - это лоадер 18 байт.
prop3 - "пропускальщик" 23 байт.
REX.free - бейсик-загрузчик, у которого в строке рем прячутся load и prop3
Да, как фразы, это одно и то-же.
Но если ты сохраняешь бейсик с переменными, то они тоже сохраняются. В итоге файл на диске получается: бейсик программа+бейсик переменные - больше чем просто бейсик программа.
А когда ты делаешь CLEAR, то переменные стираются, и получается выигрыш.
goodboy, мне показалось,тут решил, что ты пытаешься сэкономить место на диске. Вот я ему и ответил, что ты минимизируешь размер самой программы, чтобы сделать CLEAR с маленьким значением.
демо вылетает после загрузки, не знаю, где я намудрил.
Вообще, я противник подобных загрузчиков, проще крэктру сделать:)
упс, файл не прицепился..
не может такого быть :) Если мы делаем бейсик-программу, то она занимает в памяти какое-то место и переменные тоже занимают какое-то место. От того что мы сохраним на диск, ничего не изменится, останется тот же бейсик и те же переменные. Разве нет?
Вообще-то минимизируя размер самой программы (юзая переменные вместо чисел и вместо всяких not pi), я одновременно экономлю и место на диске)) Разве нет?)) Конечно первичная цель это минимизировать "размер самой программы", то, что она при этом еще и занимает меньше места на диске - это своего рода побочный эффект.Цитата:
А когда ты делаешь CLEAR, то переменные стираются, и получается выигрыш.
goodboy, мне показалось,тут решил, что ты пытаешься сэкономить место на диске. Вот я ему и ответил, что ты минимизируешь размер самой программы, чтобы сделать CLEAR с маленьким значением.
goodboy привел какие-то скрины, я привел свои скрины с программой которая никаким боком не относится к дисководу, и которая так же кажет, что "border n" занимает меньше места чем "border not pi". Кто из нас прав я так и не понял, поэтому, господа, давайте устроим тотализатор! Кто победит, NOVOSIB или goodboy? Молодость или опыт? Провинция или столица? :D
блин, вот это я мог бы и сам догадаться:v2_dizzy_facepalm:
щас попробую - отпишусь.
---------- Post added at 18:32 ---------- Previous post was at 18:30 ----------
блин, и что теперь делать? )) Сублиме текст и ужасасмплюс хреново работают? И что вместо них юзать тогда?