Так вот в том и прикол что в катринке можно Hsp задать, или POP сделать)))
Вид для печати
Бейсик ведь не даст слишком низко клир сделать.
А вот интересно, почему в бейсике нужно CLEAR <адрес кодового блока-1> а на ассемблере - LD SP,<адрес кодового блока> (то есть без "-1"). Давно вопрос этот в голове, а всё руки не доходят выяснить?
когда выполняется CLEAR xxxxx, интерпретатор по адресу xxxxx заносит байт #3e (это маркёр для стека Go-Sub),далее стек опускается ещё на еденицу.если дальше загрузить код по адресу xxxxx он этот байт естественно затрёт, что повлияет на работу GoSub/Return. в принципе если не использовать подпрограммы в бейсике про этот момент можно забыть.
Стек конечно нужно из машкода устанавливать. А из бейсика вроде ниже #5cf4 (без ТР-ДОСа) не установить. Да и то зависит есть бесик программа или нет.
Из всего этого следует что стек госуб действует по какому-то другому принципу. Иначе нафига "стек опускается ещё на еденицу"? Ведь асмовский PUSH сперва декрементирует SP, а потом пихает байт и так два раза. А госубом занимается видимо интерпритатор и "стек" там не совсем стек, а что-то с наворотами. Так или не так?
Именно так, там еще идет очистка 5 байт ниже Go-Sub. И изменение кое-каких переменных.
Посмотрел ПЗУ, там или #3С или #01 или #ff, если стек сделать #3FFF, то возврат по RET можно организовать в зависимости от ПЗУ использующемуся в данный момент. Например Бейсик 48 #xx3c Бейсик 128 #xx01, ТР-ДОС #xxff. Чем не поле для деятельности? xx первый байт картинки для тех кто не понял.
Так ведь бейсик не даст туда стек поставить, а коды юзать - это уже неинтересно, в кодах можно ещё и не того наворотить...
Вот если бы заставить бейсик ставить стек куда угодно в ПЗУ - тогда да! Это круть! Можно всяких замуток придумать. Даже самонастраивающихся на конкретное ПЗУ :)
Где-то ведь хранится значение для CLEAR?
Или не? Прямо в SP? Да ну чушь порю, какое SP, в пзу куча call и т.д. SP при первом прерывании ласты склеит (точней не SP а то, на что он там указывает).