PC-01 Lviv

It is currently 23 Apr 2024, 12:13

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 53 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
PostPosted: 02 May 2021, 01:00 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Зорко, что такое "LOOP" как его применять ?
и как на Обероне будет "не_равно" ?
т.е (><) (<>) такое не работает


Top
   
PostPosted: 02 May 2021, 02:06 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
Зорко, что такое "LOOP" как его применять ?
Вечный цикл с выходом по EXIT. Может быть вложенным.[/quote]
Quote:
и как на Обероне будет "не_равно" ?
т.е (><) (<>) такое не работает
#
Quote:
Т.е. если я туда добавлю, то оно подхватит при компиляции тот файлик ? ну он не для просмотра только, он участвует ?
Подхватит если открыть Lib/Mod/*.Def и пересобрать библиотечный модуль по F12.
Quote:
какого черта за каждым (А+В) или (А=В) выполнять какие-то процедуры проверок типа или его границ ?! - НУ ЭТО Ж КР580 все таки...
А с чего ты взял что там какие-то процедуры проверок за каждым (А+В) или (А=В) ?
Quote:
а в обероне есть такое как директивы ? типа в дельфи {$I-} {$I+}
может это отлючить можна те дописки пройедур на проверки типа, пределов его ?
Директив в описании Оберона как таковых нет, но в некоторых реализациях есть. Ты про (*$MAIN*) спрашивал, так вот это и есть директива. Но это крайняя мера и моя отсебятина, это направление мы развивать не будем.

Но ты сначала определись с претензией, чтобы говорить предметно. А то тебе кажется, что там какие-то проверки, а их на самом деле нет. Я понимаю, что ты заглядывал в код, но всё это произведение zcc. Я на это не влияю.
Quote:
в дельфи помоему всякое (редко пользовался) {$R-} -помому проверки границ масивов отключает и т.д.
Для проверок границ есть опция трансляции -i (в Ofront+.par).
Quote:
что кроме Lvov.c куда-то еще надо вставлять типа в Lvov.h ? или тут такого нет ?
Да, есть такая дурня. А в XDev и в .Def тоже. Оберон-уровень.


Top
   
PostPosted: 02 May 2021, 02:19 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
да если бы ты сделал асм-вставки (кр580) в оберон то цены бы не было бы твоей диковинке!
Давай помозгуем, разрешит ли это zcc.
В SDCC это удалось сделать при помощи конструкции __asm__(команда). В zcc такого нет, но есть #asm #endasm. Наверно не получится. zcc не даст передать произвольную команду строчным литералом.

Если вдруг получится, я отпишусь. Но надежды мало. Это нештатная сишная фича, есть мало где.

В любом случае, смотри как выглядит это с SDCC:
Code:
MODULE AsmTest;
IMPORT Asm;

PROCEDURE Border (color: INT8);
BEGIN
  Asm.Code("POP  BC    ");
  Asm.Code("POP  DE    ");
  Asm.Code("POP  HL    ");
  Asm.Code("PUSH HL    ");
  Asm.Code("PUSH DE    ");
  Asm.Code("PUSH BC    ");
  Asm.Code("LD   A,L   ");
  Asm.Code("CALL 0x229B");
END Border;

BEGIN (*$MAIN*)
  Border(2);
END AsmTest.
Ты первый пойдёшь плеваться на то, что каждую строку надо предварять Asm.Code.

Но можно и по-другому. Вот так:
Code:
MODULE AsmTest; (*$MAIN*) IMPORT SYSTEM;

PROCEDURE Border (color: SYSTEM.BYTE);
BEGIN (*@
  #asm
        POP  HL
        EX   (SP), HL
        LD   A, L
        LD   (0xBE38), A  ; BORDER
        CALL 0xF836       ; CLS
  #endasm
*)
END Border;

BEGIN
  Border(25);
  LOOP END
END AsmTest.


Top
   
PostPosted: 02 May 2021, 09:49 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Quote:
Ты первый пойдёшь плеваться на то, что каждую строку надо предварять Asm.Code.
Зорко та ты о чём ?! Кто будет плевать на возможность асм-вставок, в любом виде?!
вот смотри, и все что можна с этого реализуй в первую очередь! Точно будет плюс в карму! :-) Еще больший плюс чем от моих "простыней" :-)
Вот если бы ты не поленился скачать посмотреть (ПРОСТО ПОСМОТРЕТЬ) как мой мадл устроен ты такое мне не говорил бы (пойдёшь плеваться)... ну та ладно...
Итак,
нужна процедура типа MEM(Addr:word,B:Byte); Которая будет добавлять байт в конкретный адрес памяти-Львова. Адрес ОБЯЗАТЕЛЬНО НУЖНО УКАЗЫВАТЬ, ну это ж пользователя проблемы если он не туда полезет (не в тот адрес). Твоя диковинка всегда ж с нуля компилит ?! Т.е мне достаточно знать что смело могу процедуру спрайта устанавливать подальше $8000 и код компилятора его долго еще "не заденет" если я начну новую программу. Далее я его переставлю подальше, скажем $B000 или еще куда, ну не такой я уж и дурной, что не пойму когда его код компилятора задел мой код! Тем более буду знать же это и соответственно учитывать такое!

Далее,
нужно так как и в мадле из документации к мадлу
Quote:
procedure SetAddrRAM(e:Cardinal);{CodeProc=1#}
Задается адрес куда будет компилироваться дальнейший поток кода.
Если адрес более 49151, выдается соответствующая ошибка.
Также выдается ошибка если в данный адрес уже было компилирование.
Quote:
Если адрес более 49151, выдается соответствующая ошибка.
Также выдается ошибка если в данный адрес уже было компилирование.
НУ ЭТО МОЖЕШЬ НЕ РЕАЛИЗОВЫВАТЬ! НАФИГ НАДО!
Code:
Procedure ComA(COM:Cardinal);{CodeProc=9#}
Procedure ComB(COM,Value:Cardinal);{CodeProc=10#}
Procedure ComC(COM,Value:Cardinal);{CodeProc=11#}
Процедурами ComA, ComB, ComC Обрабатываться процедуры-команды-КР580, соответственно однобайтовые, двухбайтовые и трехбайтовые.
В принципе пользователь может ими пользоваться, вот только следует учесть
тот факт, что в них нет проверки на ошибки и их нужно использовать только
правильно, т.е. недопустимо "путанное" использование этих процедур.
Процедура ComА исключительно для однобайтовых кодов команд-КР580 (COM).
Процедура ComB исключительно для двубайтовых кодов команд-КР580 (COM), где 
Value должно быть в пределах 0..255.
Процедура ComC исключительно для трехбайтовых кодов команд-КР580 (COM), где 
Value должно быть в пределах 0..65535.
В случае неправильного использования процедур, результирующий код будет
неправильным и при этом выдача ошибки не будет.
Пример использования процедур некоторыми процедурами-командами-КР580.
Однобайтовая: {40}Procedure MovBB;begin A($40);end;
Двухбайтовая: {06}Procedure MviB(e:Cardinal);begin B($06,e);end;
Трехбайтовая: {01}Procedure LxiBC(e:Cardinal);begin C($01,e);end;
В файле uMD00u.pas, таких примеров много. :-)
Понятное деле что в процедурах ComA, ComB, ComC идет автоматическая приплюсовка
Addr:=Addr+1; Addr:=Addr+2;Addr:=Addr+3;

Далее на этих командах базируються команды-в-виде-процедур
вот так вот:
Quote:
{1 и двух байтовые}
{03}Procedure InxBC;Begin ComA($03);end;
.............
{2E}Procedure MviL(e:Cardinal);Begin ComB($2E,e);end;
......
{трехбайтовые}
{01}Procedure LxiBC(e:Cardinal);Overload;Begin ComC($01,e); end;
......
Все это есть в мадле в файле uMD00u.pas, как говориться бери та перепилюй, путём "заменить все" на соответствующие конструкции Си.
А если влом, то реализуй всего лишь три команды одно- двух- трех- байтовую для примера и кинь мне, остальное попробую сам!

Если же команды будут соответвовать uMD00u.pas то доточить декомпилятор мадла на мне эти всякие "Asm.Code" раз плюнуть!

Ты понимаешь, я ж могу писать мадлом с метками а не прямыми адресами нужные мне процедуры спрайтов или еще чего.. далее привязываю к адресу в памяти процедурой SetAddrRAM в мадле компилирую, далее декомпилирую что в командах будут не метки а четкие адреса!
И далее копирую просто в процедуру оберона и вставляю! Это ж все разово на какую-то данную програму делается! В том смысле что раз МАДЛ использовать для нужных процедур и раз вставить в оберон имеено то что нужно на асме-кр580 для данной конкретной программы-писаной-на-обероне ! Декомпилятор "подточенный под оберон все сделает как надо только в процедуру вставить нужно будет! Вот подумаю хорошенько над этим всем! прокурти как это выглядеть будет! посмотри uMD00u.pas!
Метки в трехбайтовых командах-асма-в-обероне не нужны! по четким числам(адресам) делай. далее я сам! главное SetAddrRAM и далее код и все будет впорядке!


Top
   
PostPosted: 02 May 2021, 10:04 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Доп. Да и еще -
не забудь же возможность вызывать те подпрограммы с оберона
Например, код то я вбил! А как вызывать его процедурой оберона, как писать то мне ту процедуру
Procedure Sprite(X1.... Y1.... Adr1...);
Begin
CallLV($8000); - типа вот так CallLV потому что Call уже используется для добаления кода
end;
ну а параметры в процедуре или надо знать в какие регистры-кр580 они сразу попадают или тоже как-то надо типа
рег HL=Adr1
рег A=X1
и т.д.


Top
   
PostPosted: 02 May 2021, 10:19 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
ДОП. Ах да! "Забирать" то данные из асм-кр580 регистров или же какой-то ячейки памяти в оберон-данные то тоже нужно в случае
Funciton ReadKey:Byte; (или ReadKey:Word;)
Begin
CallLV(...)
В лучшем случае из регистров хотябы из А , HL
ReadKey:=GetRgA; // забираем из регистра А
ReadKey:=GetRgHL
ну или в крайнем случае из памяти
ReadKey:=memB[....] // B - байт забираю
ReadKey:=memW[....] // W - ворд забираю
end;

Ну короче продумай. Я пока не буду ничего делать косаемое Lvov.c пока не дождусь ответа от тебя. А что касаемо Lvov.c то наверное если можна до сделаю новый LvovS.c например и делать там свое чтобы не путалось с твоим! Можна ж так будет ? и подключать процедуры через LvovS.MyProc ?


Top
   
PostPosted: 02 May 2021, 11:20 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Quote:
Но ты сначала определись с претензией, чтобы говорить предметно. А то тебе кажется, что там какие-то проверки, а их на самом деле нет. Я понимаю, что ты заглядывал в код, но всё это произведение zcc. Я на это не влияю.
Зорко, все говорит о том, что ты не писал динамических игрушек для КР580! ИМЕННО ДИНАМИЧЕСКИХ! А Я ПИСАЛ!
Так вот
игра "Лабиринт" поле 30х30 (могу уже и ошибаться в чем-то, может 31х31, забыл, не суть важно)
нужно вывести конкретный спрайт 8х8 в конкретную область памяти
$4000{смещение видеопамяти}+(X*8)+(Y*512) так вот:
вот это умножение на 512 мне пришлось делать таблицей для Y=0..31, потому что каждый раз высчитывая (Y*512) , быстродействие падало ужас как!
Не веришь ? - ПРОВЕРЬ! Таблицу умножения на 8, вроде не делал хотя не вспомню уже!

Если бы те процедуры были просто как мусор какой-то, - я бы ничего не сказал! А так они задействованы в коде да еще и так часто, да еще и с такими как А=В или А+В. Если бы было хотя бы умножение, то можно бы было понять!

Зорко, ну давай на этом не разводить полемики какой-то! Ну ты ж прекрасно знаешь и понимаешь что в данном, конкретном случае по кр580 ну я ж прав! Ну 2,5мГц КР580, это ж не 2,5гГц, что то всё незаметно будет, и даже не 250мГц кр580-й и даже не 25мГц
Давай не будем! :-) знаю что говорю! Это не обсырательство!
Вот сделаешь как я просил у тебя будет "железный отмаз" - чё не нравиться как работает в конструкциях оберона, - набахкай в кодах! Какие проблемы то?!" да и если такое будет я и сам буду понимать что "обсирать" как ты выражается нечего!
Quote:
А то тебе кажется, что там какие-то проверки, а их на самом деле нет.
Мне не важно что то такое и зачем, у меня глаз намыленый асмом-кр580 и я прекрасно понимаю как оно должно выглядеть! и если даже делать "погрешность" на то что то все таки компилятор, а не "ручная "лепка" командами кр-580", то по-моему слишком большая то "погрешность"! Сомневаюсь что в паскалях и дельфи такая погрешность компиляторов с "прямым" асмом! (в процентном соотношении я конечно имею виду к быстродействию к конкретной данной машины)!
но давай не будем!.. :-)
Quote:
Я понимаю, что ты заглядывал в код, но всё это произведение zcc. Я на это не влияю.
А тут очень интересный момент. Ты меня, когда мы ссорились, упрекнул меня, что разработчики для меня старались 32битку выпустили, а я такая "свинья" лишь бы обгадить... :-) ну дело не в том!
тут возникает вопрос - ТАК ВЛИЯЕШЬ НА НИХ ИЛИ ЖЕ НЕ ВЛИЯЕШЬ ?
Если же влияешь, то чего ты выгораживаешь ИХ передо МНОЮ ? Скажи им, про "народный гнев" :-) пусть даже этот "народный" из одного человека, т.е меня состоит, - но этому есть место! Ведь они компилятор пишут для КР580 ?! Не для 32-64 биток же пишут с 3 гГц?!
Мой "гнев" вполне обоснован! А ты себя "успокаиваешь" тем, что я просто злобный завистливый троль которому лишь бы кого обгадить, потому что оберон лучше его мадла! :-) Вопрос к тебе - А ДЕЙСТВИТЕЛЬНО ЛИ У ТЕБЕ ВЫБРАНА ПРАВИЛЬНАЯ ТАКТИКА ПОВЕДЕНИЯ В ДАННОМ СЛУЧАЕ ?!
Если же это неправильное применения конструкций или же BYTE надо, вместо INT8, то тут другое дело! Но это уже другая и тема..
закругляюсь а то опять скажешь "простыней" я понаписывал... :-) да просто получается так почему-то! :-)


Top
   
PostPosted: 02 May 2021, 12:28 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
На будущее.
Есть потребность вот таком
Quote:
Var ArrConstDATALEVELS:array[0..2000] of Byte=($00,$01 ... $39,$A5,$2F,$7B);
т.е. инициализированный масив констант и/или переменных
или как оно в обероне то делается если база уровней например...
Quote:
Зорко, что такое "LOOP" как его применять ?
Вечный цикл с выходом по EXIT. Может быть вложенным.
Т.е. это приравнивается к m1:JMP m1 ? может быть в любом месте в таком виде и без параметров и солько хочеш раз ? (а то я подумал что это часть какой-то конструкции цикла где еще как-то Begin end должен "лепится" к ней. :-) Ну типа Repeat until или что-то в этом роде.

Что с типом String ? String[255] LongString ? или как в обероне делается то ?
Максимальная длина LongString ? Такая как в дельфи, - 2 гига, да ?
и есть ли процедуры обрабатывающие подобное S:=S+'sdfsdf' ? Length ? Copy ? Pos ?
PChar не предлагать! :) Терпеть их не могу! :) Может потому что пользоваться не умею им!
А вообще, просто скажи, есть ли PChar ?

# - ага, понятно "не равно", спасибо! Не забывать бы! А то в Дельфи оно другое значение!

===============
Если ты реализуешь, все что связано с асмеблером, который видимо не только в ПК-01 работать будет?!
Думаю это и другие любители ретро-машин оценят! У меня будут грандиозные планы на твою диковинку...

и далее я преставляю себе так. Пытаюсь писать код какой-то, выкладываю черновик, вопросы, ты расматриваешь черновик, может в примеры годится откоректированный, отпишеш мне о том как более коректно применять какие конструкции, ошибки применения типа BYTE INT8 ( ну это видимо в примерах будет)..
если чего добавляешь в свой архив на https://github.com/Oleg-N-Cher/K580Dev/, кидай обязательно ссылку когда у тебя обновлено хоть что-то и т.д.

Далее по ходу проб не мешало бы будет поделать примеры соответвенно названые, коротко и хорошо описанные! Например, ReadKey.mod - короткая программа по обработке, клавиш и вывод кода на екран! WriteSprite.mod, Delay.mod и т.д. Понимаешь, считаю что вот таким короткими файлами лучше всего находить что-то нужное в данный момент! Не я ж один пользуюсь FAR Manager(или чем-то подобным), - навёл на файл в ФМ, и по F3(F4) "бахнул" и все как на ладони! Класно если пример в екран ФМ вмещаться будет. - короткий и ясный! Да и поиск по файлу, по каталогу где эти файлы...
А ты меня PDF-ками тролил... :-) Но то ты уж сам! если так уж PDFки любишь ! :-)

та короче... сработаемся! :-) Не ты, не я не идиоты и думаю это уже нам обоим понятно! :-)
--------
И самый главный момент. На улице весна-лето. Естественно я могу исчезнуть из интернета по разным причинам! И не появляться на форум днями, неделями, а может и месяцами! Но это не означает что я забросил это! Во всяком случае навсегда! Рано или поздно явлюсь и буду заниматься!
"Диковинка" эта мне пришлась по душе!


Top
   
PostPosted: 02 May 2021, 12:53 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
ну вот расматриваю... и думаю...
Code:
PROCEDURE Border (color: SYSTEM.BYTE);
BEGIN @
  #asm
        POP  HL
        EX   (SP), HL
        LD   A, L
        LD   (0xBE38), A  ; BORDER
        CALL 0xF836       ; CLS
  #endasm
END Border;
Ну классный вариант! Да и первый пойдет!
Смотри сам!
Вот только в этом вариате, нюансы есть.
мне ж надо понимать куда какие параметры передаются!
color куда передается ? в HL? - ну это только догадки мои!
А далее мнемоника мне не очень-то понятна что такое EX ? что такое LD ? ну тоже можна догадаться, но лучше чтобы все это хоть как-то мало-мальски документировано было!
Самое то главное не забывай! Это "направить" компиляцию в нужное место (как правило $8000 -$BFFF)! Вот в чем весь сыр-бор! И не только код но и массив данных спрайтов! Поэтому может все таки мой нужно реализовывать!
с SetAddrRAM ! А то глядиш, фигня получится, хоть и асм вставки есть!


Top
   
PostPosted: 02 May 2021, 14:14 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Использование другого редактора.
Редактора Дельфи7. Можно ли как-то? Как именно ?
Вот смотри внимательно для начала скрин
ImageImage
это так программа на Обероне выглядит в моих любимых Дельфях к которым я привык.
К хорошему (редактору с подсветкой, хоть для оберона она не всегда и правильная по самим цветам (REPEAT END красным), но все таки) привыкаешь быстро. И очень сложно от этого отказываться.
То что DemoLvov.Mod может быть переименован в DemoLvov.pas, это очень хорошо, компилирутся.
создаю в дельфях программу буквально вот такую вот
Code:
program Project1;
uses windows;
begin
WinExec('StartXDev.bat',SW_HIDE);
end.
Далее окрываю НЕ ПРИКРЕПЛЯЯ к проекту дельфи, проект оберона и пишу в нем из среды дельфи.
Главное не забывать сохранять проект, это я помню, уже в привычке, я такое с паскалем "проварачивал" из среды дельфи.
Далее нажимаю привычную себе F9 и запускается StartXDev.bat для компиляции проекта оберона.
Вопрос1. Что должно быть прописано в бат-файле StartXDev.bat чтобы оно так работало ?
Вопрос2. Были случаи, что при компиляции через C:\XDev\XDevLite.exe, мелькали какие-то надписи, то ли про ошибки, то ли просто некритичные ошибки, но в консольном окне расмотреть не успевалось мной, оно исчезало и проект запускался. Может где-то можна паузу поставить ? пусть даже обязательную.


Top
   
PostPosted: 02 May 2021, 14:46 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Распаковал твой архив, который K580Dev-94fba1b268cf33172c1b75dee060795d75a1860b.zip.
Поверх!
Но

ImageImage

а вот Lvov4.Mod то у меня не компилирует :-(


Top
   
PostPosted: 02 May 2021, 15:03 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Слушай, ты C:\XDev\K580Dev\Mod\ сортировал бы как-то что ли...
например
C:\XDev\K580Dev\Mod\Lvov
C:\XDev\K580Dev\Mod\RK86
а то они в перемешку не удобно как-то!
или работать не будут в каталогах ?
Кстати создавал каталог
C:\XDevProg\
перенес мод - не работал!
Хотя переменные среды прописаны
вот это точно правильно написано ?
Quote:
Если вы планируете работать с проектами вне папки C:\XDev\ то также
необходимо прописать
в "Имя переменной:" - "XDev" (без кавычек)
в "Значение переменной:" - "C:\XDev\" (без кавычек)
или все таки C:\XDev\K580Dev\ нужно ?


И по поводу
C:\XDev\K580Dev\Mod\Lvov
C:\XDev\K580Dev\Mod\RK86
так а почему именно ТОЛЬКО Lvov и RK86 ?
если бы всех компом можна бы было понять!
или же только Львов - можна понять


Top
   
PostPosted: 02 May 2021, 15:06 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
DemoLvov.Mod в
C:\XDev\K580Dev\Mod\Lvov\
C:\XDevProg\
не работает! Ошибка та что и на срине!


Top
   
PostPosted: 02 May 2021, 15:28 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Перенес C:\XDev\K580Dev\ в "сторону,
распаковал K580Dev-94fba1b268cf33172c1b75dee060795d75a1860b.zip
ВСЕ ТОЖЕ САМОЕ!
DemoLvov.Mod - работает!
Empty.Mod, Hello.Mod - для РК86 - тоже работает!
Lvov4.Mod, TestTimer.Mod - не работает!


Top
   
PostPosted: 03 May 2021, 02:08 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
Вот если бы ты не поленился скачать посмотреть (ПРОСТО ПОСМОТРЕТЬ) как мой мадл устроен
Да я знаю что такое макроассемблер. Ну пусть с очень навороченными макросами. Так это ты ещё Форт не видел. В нём такие вещи, которые ты сделал в МАДЛе для задания спрайтов, можно добавлять на лету.
Quote:
нужна процедура типа MEM(Addr:word,B:Byte); Которая будет добавлять байт в конкретный адрес памяти-Львова. Адрес ОБЯЗАТЕЛЬНО НУЖНО УКАЗЫВАТЬ, ну это ж пользователя проблемы если он не туда полезет (не в тот адрес).
SYSTEM.PUT(adr, num).

Для байта: SYSTEM.PUT(adr, 0).
Для слова: SYSTEM.PUT(adr, LONG(0)).

Есть ещё SYSTEM.GET

Ты вообще описание Оберона читал хотя бы бегло?
Quote:
Твоя диковинка всегда ж с нуля компилит ?!
На самом деле не факт. Но это уровень zcc. Надо выяснить как задать адрес компиляции, скорее всего, его задать можно какой-то опцией командной строки.
Quote:
Т.е мне достаточно знать что смело могу процедуру спрайта устанавливать подальше $8000 и код компилятора его долго еще "не заденет" если я начну новую программу. Далее я его переставлю подальше, скажем $B000 или еще куда, ну не такой я уж и дурной, что не пойму когда его код компилятора задел мой код! Тем более буду знать же это и соответственно учитывать такое!
Да. Эту проблему надо решить. Буду думать.
Quote:
procedure SetAddrRAM(e:Cardinal);{CodeProc=1#}
Задается адрес куда будет компилироваться дальнейший поток кода.
См. выше. ORG даже в асм-вставке задать нельзя.
Quote:
Procedure ComA(COM:Cardinal);{CodeProc=9#}
Procedure ComB(COM,Value:Cardinal);{CodeProc=10#}
Procedure ComC(COM,Value:Cardinal);{CodeProc=11#}
Для SDCC я такое делал (см. модуль Asm). Но в SDCC есть __asm__, а в zcc его аналога нет. Вернее, я не уверен, что решётку (#) съест. Ну да это тонкости Си - диграфы, триграфы, решётка служебный символ, короче.

А чем тебе встроенный асм не зашёл? Разве числами писать машкод лучше, чем прямо мнемониками?
Quote:
Пример использования процедур некоторыми процедурами-командами-КР580.
Однобайтовая: {40}Procedure MovBB;begin A($40);end;
Двухбайтовая: {06}Procedure MviB(e:Cardinal);begin B($06,e);end;
Трехбайтовая: {01}Procedure LxiBC(e:Cardinal);begin C($01,e);end;
Вот такое бы ты смог сделать с SDCC. Можно наверно запросить эту фичу у z88dk'шников, но я не уверен, что им это понравится.

Смотри, с SDCC даже вот так можно:
Code:
MODULE TestCalc;
IMPORT b := Basic, c := CalcZX;

BEGIN (*$MAIN*)
  b.Init;
  c.PushWord(1000); (* 1000 *)
  c.PushByte(24);   (*   24 *)
  c.Begin;
  c.add;            (*    + *)
  c.pi_div_2;       (* PI/2 *)
  c.duplicate;      (*  DUP *)
  c.add;            (*    + *)
  c.add;            (*    + *)
  c.End;
  b.PRSTR("1000 + 24 + PI = ");
  c.Print_PopReal();
  b.Quit
END TestCalc.
Всё это компилится в байтики, а не в вызовы, как и твой МАДЛ.
Quote:
Метки в трехбайтовых командах-асма-в-обероне не нужны!
Да можешь метки юзать во встроенном асме спокойно, какие проблемы.
Quote:
ДОП. Ах да! "Забирать" то данные из асм-кр580 регистров или же какой-то ячейки памяти в оберон-данные то тоже нужно в случае
Funciton ReadKey:Byte; (или ReadKey:Word;)
Begin
CallLV(...)
В лучшем случае из регистров хотябы из А , HL

[...]

Ну короче продумай.
Всё уже продумано и сделано авторами zcc. Есть пара моделей передачи параметров - в регистре и в стеке со снятием внутри процедуры. Из вставки на асме мы не можем этого юзать. Надо писать в обёртке Си - так, как в Lib/C/*.c

А из асм-вставки в Оберон-процедуре (без обёртки в Си) мы можем юзать только стандартную сишную модель передачи параметров (в стеке без снятия внутри процедуры).

Результаты функций всегда передаются в L (байт) или HL (слово). Или DE:HL (двойное слово).


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 53 posts ]  Go to page Previous 1 2 3 4 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited