PDA

Просмотр полной версии : монолоадер.



Sinus
04.02.2006, 20:13
в ощем чую я что запарил всех своими вопросами, но срочняк надо.
как там чё надо в бейсике крутить и по каким адресам туда код запихивать, чтоб монолоадер склепать?

типа

10 CLEAR VAL "xxxx": RAND USR VAL "fz_kakoj_adres": REM yyyy_probelov_chtob_zapihat_code

вот вы мне этот "фз какой адрес" и скажите ;)

SMT
04.02.2006, 21:09
млин, а зайти в отладчик и поискать адрес строки "yyyy_probelov_chtob_zapihat_code" лениво?

breeze
05.02.2006, 00:21
млин, а зайти в отладчик и поискать адрес строки "yyyy_probelov_chtob_zapihat_code" лениво?

Насколько я помню AlCo вместе с аласмом распространял хрень которая при компиляции и делала монолоадер! :rolleyes:

Sinus
05.02.2006, 00:43
SMT: было б не лениво, не спрашивал бы ;)
breeze: аласм у меня ещё от Capry, а искать алковский аласм... уж прощё в сталкере адрес вычислить ^_~

Vitamin
05.02.2006, 01:12
10 rem monoloader_code_and other fignja
20 clear val "25656":border not pi:paper not pi:ink val "7":randomize usr val "23810"

по памяти нафигачил %)

Sinus
05.02.2006, 01:43
сёнькс ^_~
однако я уже успел пересилить себя и посмотреть в сталкере ;)

зы. кста меньше места будет занимать мой вариант, когда CLEAR: R/U : REM
а всякие бордеры и паперы во вторичном загрузчике проставлять.

но всё равно сенькс.

Wlodek
05.02.2006, 09:01
http://trd.speccy.cz/press/nicron/NICRON23.ZIP
Nicron 23, рубрика "Учимся ассемблеру".

Sinus
05.02.2006, 13:55
Wlodek: ну там чутка совсем не то что я спрашивал, но всё равно сенькс.

goodboy
05.02.2006, 14:09
1 rem программа
2 clear xxxxx:go to usr 23872

если код загружать из бейсика или trdos надо учитывать размер буфера - 257 байтов.
randomize usr 15619:rem load "xxx" code 24129, после загрузки всё сдвинется на своё место

Sinus
05.02.2006, 22:55
короче ещё 5 мессаг назад сделал сам.
но всё равно всем спасибо.

fk0
06.02.2006, 11:44
как там чё надо в бейсике крутить и по каким адресам туда код запихивать, чтоб монолоадер склепать?


Адрес определяется самим бейсиком и зависит от наличия TR-DOS, interface-1 и других фич.



10 CLEAR VAL "xxxx": RAND USR VAL "fz_kakoj_adres": REM yyyy_probelov_chtob_zapihat_code
вот вы мне этот "фз какой адрес" и скажите ;)

МОЧИТЬ В СОРТИРЕ, таких кодеров. Догадайся за что.

Монолоадер обязан:

* являться ОДНИМ бейсик файлом. Не "склеенном" в коммандере.
Полноценным бейсиком. Чтоб одним LOAD "" загружаться в
память.

* загружаться на любой спектрум-совместимой платформе.
а не исключительно пентагон-скорпион-трдос.

Иначе смысла в его монолитности -- нуль.

Как примерно устроен грамотный монолоадер можешь почитать
по ссылке: http://groups.google.com/group/fido7.zx.spectrum/browse_frm/thread/542cbe0e50bdca83/cc19060deec4a106?lnk=st&q=fido7.zx.spectrum+Frolov+JP+1eb7&rnum=2#cc19060deec4a106

НИ ОДНОГО АБСОЛЮТНОГО АДРЕСА. НИКАКИХ СКЛЕИВАНИЙ.
И ДОЗАГРУЗОК ЧЕРЕЗ ТР-ДОС. Программа прячется в REM строке
программы ЦЕЛИКОМ. После загрузки программа распаковывается
или перемещается куда нужно и устанавливается CLEAR.

fk0
06.02.2006, 11:46
20 clear val "25656":border not piaper not pi:ink val "7":randomize usr val "23810"

МОЧИТЬ В СОРТИРЕ!

fk0
06.02.2006, 11:47
а всякие бордеры и паперы во вторичном загрузчике роставлять.

За вторичный загрузчик -- МОЧИТЬ В СОРТИРЕ!

Wlodek
06.02.2006, 12:09
Единственное, в чём есть капля смысла в предложении fk0, это проверять наличие других интерфейсов и не стартовать вторичный загрузчик с абсолютного адреса 23872, так как при наличии дополнительных интерфейсов этот адрес может сместиться выше. Но покажите мне хоть один такой комп на просторах xUSSR. А для "зарубежных друзей" давно уже делаются tap-версии.
А смысла запихивать всё в один REM нет вообще, мы не выигрываем ни в чём, а проигрываем в том, что не можем поставить CLEAR ниже, чем это позволит вся бейсик-программа, грузящаяся сразу, в то время как при наличии вторичного загрузчика вполне можно поставить CLEAR хоть 24499 и грузить потом ещё 40 килобайт выше области стека.

Sinus
06.02.2006, 12:18
* являться ОДНИМ бейсик файлом. Не "склеенном" в коммандере.
Полноценным бейсиком. Чтоб одним LOAD "" загружаться в
память.


МОЧИТЬ! ибо в REM ты не запихнёшь 200кб кода!



* загружаться на любой спектрум-совместимой платформе.
а не исключительно пентагон-скорпион-трдос.


МОЧИТЬ! ибо на моём байт-48 по любому не загрузиться!!!



Иначе смысла в его монолитности -- нуль.




Как примерно устроен грамотный монолоадер можешь почитать
по ссылке: http://groups.google.com/group/fido7.zx.spectrum/browse_frm/thread/542cbe0e50bdca83/cc19060deec4a106?lnk=st&q=fido7.zx.spectrum+Frolov+JP+1eb7&rnum=2#cc19060deec4a106


МОЧИТЬ!! ибо



* загружаться на любой спектрум-совместимой платформе.
а не исключительно пентагон-скорпион-трдос


не загрузиться на +D и на моём байт-48 с кассеты!



НИ ОДНОГО АБСОЛЮТНОГО АДРЕСА. НИКАКИХ СКЛЕИВАНИЙ.
И ДОЗАГРУЗОК ЧЕРЕЗ ТР-ДОС. Программа прячется в REM строке
программы ЦЕЛИКОМ. После загрузки программа распаковывается
или перемещается куда нужно и устанавливается CLEAR.


ну что ж... после таких громких высказываний могу только пожелать удачи.

ибо это наводит на мысь что никаких серьёзных программ тебе писать не доводилось.

Strunov
07.02.2006, 14:11
А все таки, есть ли способ, если программа не очень большая (кил 10),
засунуть ее в REM строку всю и передать ей управление так, чтобы работало на любом Spectrum совместимом компе, с любыми подключеными девайсами?????
:confused:

Sinus
07.02.2006, 15:16
да.
когда загружается бейсик, вычисляешь адрес начала бейсика (PROG вроде или ещё что там, помнил бы сам- не спрашивал бы ;) )
прибавляешь туда смещение от начала бейсика до твоих кодов
и далее:



di
ld a,201 ; ret
ld (#9000),a
call #9000
lbs dec sp
dec sp
pop hl
ld de,lbe-lbs
add hl,de
ld de,#9000
ld bc,pre-prs
ldir
jp #9000
lbe
disp #9000
prs ld sp,#9000
....
.. your programm ..
....
pre


не зависин ни от ПЗУ ни от подключённых девайсов... вааще ^_~
только может надо будет не в #9000 а повыше пихать прогу.

да, после старта проги прерывания желательно переопределить и ПЗУ вааще не пользоваться.

тогда 100% везде будет работать.

зы. а оно надо? в нашем TR-DOS-ном мире ?

Wlodek
07.02.2006, 15:25
А все таки, есть ли способ, если программа не очень большая (кил 10),
засунуть ее в REM строку всю и передать ей управление так, чтобы работало на любом Spectrum совместимом компе, с любыми подключеными девайсами?????


(23635) PROG

Соответственно, считываешь слово с этого адреса (PEEK 23635 + 256*PEEK 23636). В компе с TR DOS будет 23867, а первый байт после REM - по адресу 23872. Если есть ещё интерфейсы, PROG будет указывать на более высокий адрес.