PDA

Просмотр полной версии : Загрузка файлов с расширением <C>



Руслан
16.10.2011, 21:05
привет, напомните как из бейсика загрузить файлы по нужному мне адресу?

---------- Post added at 20:05 ---------- Previous post was at 20:05 ----------

файлы с дискеты

VNN_KCS
16.10.2011, 21:18
randomize usr 15619: rem: load "name" code <куда надо>.

tiboh
16.10.2011, 21:23
Перед этим сделать CLEAR <адрес кодового блока-1>.

Killer
16.10.2011, 21:26
Перед этим сделать CLEAR <адрес кодового блока-1>.
только не для картинки))) смешно поставить стек #3fff. Надо какнить приколоться, и замутить такой расклад.

Руслан
16.10.2011, 21:32
Перед этим сделать CLEAR <адрес кодового блока-1>.
ПОПОДРОБНЕЙ, Я ВСЕ ЗАБЫЛ

Killer
16.10.2011, 21:51
например код грузится 25000, КЛЕАР надо делать 24999.

SoftLight
16.10.2011, 22:01
Пишешь прямо в Basic что-то типа такого:


10 CLEAR 24499
20 RANDOMIZE USR 15619: REM: LOAD "code1" CODE 24500
30 RANDOMIZE USR 24500

Потом пишешь RUN и вуаля!

VNN_KCS
16.10.2011, 22:09
Перед этим сделать CLEAR <адрес кодового блока-1>.
Угу. И да, для картинок не прокатит.)

---------- Post added at 21:09 ---------- Previous post was at 21:07 ----------


Надо какнить приколоться, и замутить такой расклад.
Интересно, куда "прыгнешь" по ret? ;-) Надо хоть поглядеть.

Enigmatic
16.10.2011, 22:10
Если прога перемещаемая,то code при загрузке может-быть любой.

VNN_KCS
16.10.2011, 22:15
Да, такое часто бывает с упаковаными экранами. Грузить можно в любой адрес. Главное, чтоб в память и не выше стека.

Killer
16.10.2011, 22:31
Интересно, куда "прыгнешь" по ret? ;-) Надо хоть поглядеть.
Так вот в том и прикол что в катринке можно Hsp задать, или POP сделать)))

Destr
16.10.2011, 23:12
Так вот в том и прикол что в катринке можно Hsp задать, или POP сделать)))
Бейсик ведь не даст слишком низко клир сделать.


Перед этим сделать CLEAR <адрес кодового блока-1>
А вот интересно, почему в бейсике нужно CLEAR <адрес кодового блока-1> а на ассемблере - LD SP,<адрес кодового блока> (то есть без "-1"). Давно вопрос этот в голове, а всё руки не доходят выяснить?

VNN_KCS
16.10.2011, 23:26
Давно вопрос этот в голове, а всё руки не доходят выяснить?
Аналогично.

goodboy
17.10.2011, 01:04
А вот интересно, почему в бейсике нужно CLEAR <адрес кодового блока-1> а на ассемблере - LD SP,<адрес кодового блока> (то есть без "-1"). Давно вопрос этот в голове, а всё руки не доходят выяснить?

когда выполняется CLEAR xxxxx, интерпретатор по адресу xxxxx заносит байт #3e (это маркёр для стека Go-Sub),далее стек опускается ещё на еденицу.если дальше загрузить код по адресу xxxxx он этот байт естественно затрёт, что повлияет на работу GoSub/Return. в принципе если не использовать подпрограммы в бейсике про этот момент можно забыть.

Killer
17.10.2011, 16:38
Стек конечно нужно из машкода устанавливать. А из бейсика вроде ниже #5cf4 (без ТР-ДОСа) не установить. Да и то зависит есть бесик программа или нет.

Destr
17.10.2011, 20:07
когда выполняется CLEAR xxxxx, интерпретатор по адресу xxxxx заносит байт #3e (это маркёр для стека Go-Sub),далее стек опускается ещё на еденицу.если дальше загрузить код по адресу xxxxx он этот байт естественно затрёт, что повлияет на работу GoSub/Return. в принципе если не использовать подпрограммы в бейсике про этот момент можно забыть.
Из всего этого следует что стек госуб действует по какому-то другому принципу. Иначе нафига "стек опускается ещё на еденицу"? Ведь асмовский PUSH сперва декрементирует SP, а потом пихает байт и так два раза. А госубом занимается видимо интерпритатор и "стек" там не совсем стек, а что-то с наворотами. Так или не так?

Killer
17.10.2011, 20:10
Именно так, там еще идет очистка 5 байт ниже Go-Sub. И изменение кое-каких переменных.

Destr
17.10.2011, 20:12
Именно так, там еще идет очистка 5 байт ниже Go-Sub. И изменение кое-каких переменных.
Ясно, спасибо Вам и goodboy за разъяснения.

Killer
17.10.2011, 20:25
Посмотрел ПЗУ, там или #3С или #01 или #ff, если стек сделать #3FFF, то возврат по RET можно организовать в зависимости от ПЗУ использующемуся в данный момент. Например Бейсик 48 #xx3c Бейсик 128 #xx01, ТР-ДОС #xxff. Чем не поле для деятельности? xx первый байт картинки для тех кто не понял.

Destr
17.10.2011, 20:28
Так ведь бейсик не даст туда стек поставить, а коды юзать - это уже неинтересно, в кодах можно ещё и не того наворотить...
Вот если бы заставить бейсик ставить стек куда угодно в ПЗУ - тогда да! Это круть! Можно всяких замуток придумать. Даже самонастраивающихся на конкретное ПЗУ :)

Где-то ведь хранится значение для CLEAR?
Или не? Прямо в SP? Да ну чушь порю, какое SP, в пзу куча call и т.д. SP при первом прерывании ласты склеит (точней не SP а то, на что он там указывает).

Killer
17.10.2011, 20:31
Бейсик ниже переменных не установит. Надо кстати насчет ПЗУ поэксперементировать)))

Destr
17.10.2011, 20:38
А какое-нибудь "POKE адрес значения CLEAR, нужный адрес"?
Так чтоб после отработки команды и попытки вернутся со стека снималось что-то из пзу (а можно и и озу, допустим строки с REM к о д ы) и прыгало куда надо?

Т.е. интерпритатор сделал наше поке и пытается разобрать следующую команду. Но стек уже в другом месте и возврат идёт куда нам надо.

Так не выйдет? (понимаю что тут нужно хорошо знать ПЗУ, да и всё равно рыть придётся, но мысль вроде занятная :) )

P.S. Как вариант - отлавливать не обработчик команды а прерывание (они ведь никогда не выключаются при бэйсике?). Тогда после поке стека в пзу - следующий-же фрейм начнётся с нужного адреса (если к этому времени система не ресетнётся нафик :) )

Killer
17.10.2011, 20:47
А какое-нибудь "POKE адрес значения CLEAR, нужный адрес"?
Так чтоб после отработки команды и попытки вернутся со стека снималось что-то из пзу (а можно и и озу, допустим строки с REM к о д ы) и прыгало куда надо?

Т.е. интерпритатор сделал наше поке и пытается разобрать следующую команду. Но стек уже в другом месте и возврат идёт куда нам надо.

Так не выйдет? (понимаю что тут нужно хорошо знать ПЗУ, да и всё равно рыть придётся, но мысль вроде занятная :) )

В загрузчике SiLN4 есть ксорка с использованием ПЗУ и ретом в конце обработки, надо дизассемблер ПЗУ читать. Скорее всего чтото есть.

---------- Post added at 22:47 ---------- Previous post was at 22:45 ----------

В Бейсике прерывание обрабатываются по IM 1. Тут вряд ли что можно изменить, разве что подмену ПЗУ.

Destr
17.10.2011, 20:50
В Бейсике прерывание обрабатываются по IM 1. Тут вряд ли что можно изменить, разве что подмену ПЗУ.
Я наверное невнятно выразил идею.
В общем так.
Делаем поке которое переставляет стек в пзу.
Приходит прерывание (им 1), делает свои дела и потом у него ret.
А стек уже стоит где надо и PC прыгает куда задумали :)

Killer
17.10.2011, 20:56
Именно внятно, но по адресу #003c белиберда полная, надо вектор прерывания менять. Это в Бейсик 48. В Бейсике 128 #c300. Вылет гарантирован если там ничего нет. Но там хитрая связка Старт ПЗУ с 0.

Destr
17.10.2011, 20:57
#003c
А при чём тут он?

Killer
17.10.2011, 21:05
Вектор прерывания в бейсике 48 на этот адрес

Destr
17.10.2011, 21:09
Вектор прерывания в бейсике 48 на этот адрес
Так и бог с ним. Обработчик там есть. Пусть отработает и RET. А рет - уже куда нужно (стек-то уже там где надо, заранее выставлен POKE ).
В общем видимо нечего велосипед изобретать, подобный финт ушами использовали с переменной ERR SP (23613/14 IY+3 (#5C3D/3E)) чтоб на свою прогу прыгало прям из бейсика.