PC-01 Lviv

It is currently 28 Mar 2024, 21:33

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
Author Message
PostPosted: 03 May 2021, 02:38 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
Зорко, все говорит о том, что ты не писал динамических игрушек для КР580!
Для Спека писал.
Quote:
Ну ты ж прекрасно знаешь и понимаешь что в данном, конкретном случае по кр580 ну я ж прав! Ну 2,5мГц КР580, это ж не 2,5гГц, что то всё незаметно будет, и даже не 250мГц кр580-й и даже не 25мГц
Давай не будем! :-) знаю что говорю! Это не обсырательство!
Си вообще для КР580 подходит плохо. В Си вообще нет байтовых вычислений. Они там сразу двухбайтовые. И что теперь делать? Ну юзай PL/M тогда. Или Cowgol. Там есть.
Quote:
Вот сделаешь как я просил у тебя будет "железный отмаз" - чё не нравиться как работает в конструкциях оберона, - набахкай в кодах! Какие проблемы то?!" да и если такое будет я и сам буду понимать что "обсирать" как ты выражается нечего!
Ответ стандартный. Тебе надо - ты и бахкай. А зачем тебе вообще Си или Оберон? Пиши на асме/МАДЛе. И будет тебе счастье и красивый эффективный выхлоп от ручного кодирования.

Раз уж взял язык высокого уровня, притом не очень ложащийся на K580, притом в компиляторе zcc многих оптимизаций, которые могли бы быть, просто нету, и заставляешь меня эту ситуацию исправлять. Мне вообще-то это неинтересно. Я лучше подожду пока разовьют zcc, а если этого не сделают, значит нафиг оно им не надо.
Quote:
ТАК ВЛИЯЕШЬ НА НИХ ИЛИ ЖЕ НЕ ВЛИЯЕШЬ ?
Ты тоже можешь влиять, но осторожно. Луну тебе с неба они доставать не полезут. Но немного навстречу пойти могут.
Quote:
Если же влияешь, то чего ты выгораживаешь ИХ передо МНОЮ ? Скажи им, про "народный гнев" :-)
Чхали энтузиасты, которые и копейки за свою трудную работу не увидели, на народный гнев от неблагодарных юзеров. Ааа, ты благодарный юзер? Ну не знаю, не знаю.
Quote:
Var ArrConstDATALEVELS:array[0..2000] of Byte=($00,$01 ... $39,$A5,$2F,$7B);
Code:
TYPE
  Color = SYSTEM.BYTE;
  Palette = ARRAY 16 OF Color;
CONST
  Colors = Palette(
    0, 0B0H, 000H, 0B0H, 000H, 0B0H, 0B0H, 0B0H,
    0, 0FFH, 000H, 0FFH, 000H, 0FFH, 0FFH, 0FFH
  );
Quote:
Т.е. это приравнивается к m1:JMP m1 ? может быть в любом месте в таком виде и без параметров и солько хочеш раз ?
Да.
Quote:
Что с типом String ? String[255] LongString ? или как в обероне делается то ?
Code:
VAR string: ARRAY 256 OF CHAR;
Quote:
Максимальная длина LongString ? Такая как в дельфи, - 2 гига, да ?
На сколько хватит памяти.
Quote:
и есть ли процедуры обрабатывающие подобное S:=S+'sdfsdf' ? Length ? Copy ? Pos ?
Что-то есть в SYSTEM.c, написанное на Си. Но для K580 лучше переписать на асм. Я этого ещё не сделал, я вообще даже ещё не понял как быстрее всего выводить графику. На Z80 есть LDI и ещё много других хороших команд.
Quote:
PChar не предлагать! :) Терпеть их не могу! :) Может потому что пользоваться не умею им!
А вообще, просто скажи, есть ли PChar ?
Есть. POINTER TO ARRAY [notag] OF CHAR.
Динамических строк a la Turbo Pascal / Delphi в Обероне нет. Для простоты. Но эмулировать работу с ними всё-таки можно через динамическую память. Которую на K580 лучше не юзать.
Quote:
Если ты реализуешь, все что связано с асмеблером, который видимо не только в ПК-01 работать будет?!
Думаю это и другие любители ретро-машин оценят! У меня будут грандиозные планы на твою диковинку...
Я же показал как делать асм-вставки в Оберон-код. Этого недостаточно будет? :) Ну, про флажки моделей вызова я думал, чтобы их в Оберон протащить. Но это настолько усложнит и интерфейсы, и другие вещи, что я не решился. Оберон даёт абстрактное понимание куска кода - процедура. А различные тонкости, которые мы так любим, он старается вообще не выпячивать. Это идеология такая, так специально сделано. Поэтому, например, нет флажка inline для процедур, потому что для работы логики самой процедуры это не имеет значения - заинлайнится (развернётся тело самой процедуры вместо её вызова) ли она, или нет. Считается, что этот низкоуровневый вопрос должен решить сам компилятор. И так устроен весь Оберон. Всё нехорошее и опасное из него вынесено в SYSTEM, который не является частью языка.
Quote:
и далее я преставляю себе так. Пытаюсь писать код какой-то, выкладываю черновик, вопросы, ты расматриваешь черновик, может в примеры годится откоректированный, отпишеш мне о том как более коректно применять какие конструкции, ошибки применения типа BYTE INT8 ( ну это видимо в примерах будет)..
если чего добавляешь в свой архив на https://github.com/Oleg-N-Cher/K580Dev/, кидай обязательно ссылку когда у тебя обновлено хоть что-то и т.д.
Ну, на гитхаб и подписаться можно, если зарегаться там. Тогда тебе будут приходить уведомления об интересующем тебя проекте, на которые ты подписался.

Хорошо, постараюсь помогать. Но я не обещаю, что в ближайшее время всё брошу и буду кодить под Львов. Хотя конечно было бы интересно.
Quote:
Далее по ходу проб не мешало бы будет поделать примеры соответвенно названые, коротко и хорошо описанные! Например, ReadKey.mod - короткая программа по обработке, клавиш и вывод кода на екран! WriteSprite.mod, Delay.mod и т.д.
Про примеры согласен, надо добавить.
Да и посмотри на примеры в подсистеме ZXDev. Там, кстати, можешь подсмотреть приёмы кодинга на Обероне.
Quote:
"Диковинка" эта мне пришлась по душе! [/color]
Спасибо. Я старался. Не всё идеально, но, как правило, всегда можно что-то подправить. В т.ч. и в плане оптимизации.

Кстати, ты спрашивал про пресловутые проблемы с адресным пространством. В Спеке 128 страницы памяти размещаются с #C000 и перещёлкиваются записью в порт. Так что Львов не очень уникален, к определённым областям памяти часто привязывались.

Можно поискать как задать в zcc начало кода и корректировать хотя бы так пока. (насколько я понял, во Львове всегда весь объём памяти, так что можно стартовать код с адреса #4000, а по мере разрастания снижать адрес, но следя, чтобы графические подпрограммы не опускались ниже, чем требуется.


Top
   
PostPosted: 03 May 2021, 03:08 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Скорректированный вариант:
Code:
MODULE AsmTest; (*$MAIN*) IMPORT SYSTEM;

PROCEDURE Border (color: SYSTEM.BYTE);
BEGIN (*@
  #asm
        POP  DE           ; Снимаем адрес возврата
        POP  HL           ; Параметр color (он двухбайтовый, так решил zcc)
        PUSH HL           ; Возвращаем color обратно
        PUSH DE           ; Адрес возврата обратно
        LD   A, L         ; Вот это color, он в младшем байте. LD это аналог MOV (и MVI тоже)
        LD   (0xBE38), A  ; BORDER
        CALL 0xF836       ; CLS
  #endasm
*)
END Border;

BEGIN
  Border(25);
  LOOP END
END AsmTest.
Quote:
color куда передается ? в HL? - ну это только догадки мои!
А далее мнемоника мне не очень-то понятна что такое EX ?
EX (SP), HL это SPHL.
Quote:
что такое LD ? ну тоже можна догадаться, но лучше чтобы все это хоть как-то мало-мальски документировано было!
Это стандартный документированный ассемблер Z80. Документации по нему вагон. Я тебе писал, что эти мнемоники решили использовать в команде z88dk. Я на это не влияю.
Quote:
Самое то главное не забывай! Это "направить" компиляцию в нужное место (как правило $8000 -$BFFF)! Вот в чем весь сыр-бор! И не только код но и массив данных спрайтов! Поэтому может все таки мой нужно реализовывать!
С ORG вообще никак не получится. zcc его не реализует.
Quote:
Использование другого редактора.
Попробуй освоить редактор Sublime с подсветкой от Лёши Большакова.
Quote:
Редактора Дельфи7. Можно ли как-то? Как именно ?
Ну а по XDevLite.exe Module.pas запускается? Подсветка работает? Так а что ещё тебе нужно. Компилировать с ком. строки? Это не реализовано. Вообще XDevLite просто оболочка. Хочешь транслировать батником Оберон в Си - такая возможность есть. Надо использовать транслятор Оберона для командной строки. И потом вызывать батник, реализующий запуск zcc и компиляцию сишника в бинарь.
Quote:
Были случаи, что при компиляции через C:\XDev\XDevLite.exe, мелькали какие-то надписи, то ли про ошибки, то ли просто некритичные ошибки, но в консольном окне расмотреть не успевалось мной, оно исчезало и проект запускался. Может где-то можна паузу поставить ? пусть даже обязательную.
В Obj/Модуль.bat прописать SET Pause=TRUE

Да, похоже на ошибки с уровня Си. Ты пойми, что всё делается только под задачу и её текущие нужды. Недоделано настолько много всего, что это капец. Но столько времени и сил нет, чтобы делать всё. Тем более, поддерживать всё в рабочем состоянии. Так что посильно делаю, что могу, и претензии не принимаются.
Quote:
а вот Lvov4.Mod то у меня не компилирует :-(
Не пересобрана библиотека Timer. Открой Lib/Mod/Timer.Mod да и нажми F12.
В репе уже исправил, в смысле, добавил Lib/Sym/Timer.sym
Quote:
И по поводу
C:\XDev\K580Dev\Mod\Lvov
C:\XDev\K580Dev\Mod\RK86
так а почему именно ТОЛЬКО Lvov и RK86 ?
если бы всех компом можна бы было понять!
или же только Львов - можна понять
В какой-то момент я решил не создавать сто подсистем для каждой платформы на K580, а свести все их в одну. РК-шка там главная, поэтому под неё настроена компиляция по умолчанию. А для Львова надо в одноимённом с модулем батнике прописать SET FileExt=lvt
Quote:
DemoLvov.Mod в
C:\XDev\K580Dev\Mod\Lvov\
C:\XDevProg\
не работает! Ошибка та что и на срине!
Внимательно посмотри как устроены Compile.bat и Build.bat в FoxHunt - этот проект работает из произвольной папки. А внутри подсистемы в батниках прописаны относительные пути к подсистеме. В этом и проблема.
Quote:
Перенес C:\XDev\K580Dev\ в "сторону,
распаковал K580Dev-94fba1b268cf33172c1b75dee060795d75a1860b.zip
ВСЕ ТОЖЕ САМОЕ!
DemoLvov.Mod - работает!
Empty.Mod, Hello.Mod - для РК86 - тоже работает!
Lvov4.Mod, TestTimer.Mod - не работает!
А здесь, возможно, не хватает символьных файлов. Их надо скопировать из K580Dev/Lib/Sym в папку с твоим проектом (в Project/Lib/Sym или в Project/Sym)

Сорри за это неудобство, но как сделать лучше - я пока не придумал. Надо чтобы транслятор Оберона знал из какой подсистемы брать символьники, а подсистем может быть много. А если у нас произвольная папка, то он не знает с какой подсистемой её связать.


Top
   
PostPosted: 03 May 2021, 10:10 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Спасибо за информацию. Буду все потихоньку рассматривать и вникать!
А самая существенная фраза из всего написанного
Quote:
ORG даже в асм-вставке задать нельзя.
Это называется, - НУ ВОТ И "ПРИПЛЫЛИ"!
А ты мне про какие-то описания и документации Оберона почитать....
что толку то?!.. если самого основного ТОГО ЧЕГО НУЖНО нет!
Попытаюсь конечно рассмотреть и использовать SYSTEM.PUT(adr, num), может
в Lvov.c чего-то "нагородить", а там время покажет!


Top
   
PostPosted: 03 May 2021, 11:04 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
А вот еще одна, совсем уж "весёлая" фраза...
Quote:
Раз уж взял язык высокого уровня, притом не очень ложащийся на K580, притом в компиляторе zcc многих оптимизаций, которые могли бы быть, просто нету, и заставляешь меня эту ситуацию исправлять. Мне вообще-то это неинтересно. Я лучше подожду пока разовьют zcc, а если этого не сделают, значит нафиг оно им не надо.
которую понимай как хочеш!

Попытаюсь разложить все "по полкам"....
Зорко, предлагает/проталкивает свою "диковинку" тут на форуме, для того, чтобы её использовали для K580 но она "не очень ложащийся на K580",
"многих оптимизаций просто нету, заставляешь меня эту ситуацию исправлять",
"Мне вообще-то это неинтересно",
"Я лучше подожду пока разовьют zcc, а если этого не сделают, значит нафиг оно им не надо."

та-а-а-а-ак...
А действительно! Зачем я человека заставляю исправлять ситуацию ?! Извиняюсь!
Вот правда когда он изначально (в первом сообщении) предлагал свою диковинку, он не рассказывал что "не очень ложащийся на K580" и не говорил что ему не интересно ситуацию исправлять! Поэтому... что я могу тут сказать....

Далее...
"подожду пока разовьют zcc" -

действительно! Может и мне пока подождать, что кто-то, что-то разовьет в какую-то сторону, а там видно будет!

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

Давай-ка дружок, с этим всем наверное возьмём таймаут! Я конечно еще "побрыкаюсь", на тему "как и для чего это можна использовать", скорее всего "разплююсь" очередной раз, и заброшу! Если не навсегда, то надолго! Вернусь-ка я к своему МАДЛу, там хоть я знаю как мне с ним быть, развивать и т.д. А то, что он и нафиг никому не нужен, никому печалей (да и мне тоже) никаких не должно быть! Это все таки моё увлечение! К слову, чего там о моём МАДЛ говорить, похоже, что Оберон и K580Dev, z88dk тоже не очень-то кому-то нужна!... уж не знаю с чем это связано!... но это уже, как говориться, - не моего ума дело то!
Чего мне мучать то себя, Зорко, разработчиков z88dk, может еще кого-то?!

"Раз уж взял язык высокого уровня" - Ну как взял, так и брошу!
Успехов!


Top
   
PostPosted: 03 May 2021, 11:28 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Quote:
Не пересобрана библиотека Timer. Открой Lib/Mod/Timer.Mod да и нажми F12.
В репе уже исправил, в смысле, добавил Lib/Sym/Timer.sym
ImageImage

Та задрала меня эта вся "веселуха"! Ну ей Богу!
Даже и не припоминаю, чтобы когда-то с чем-то у меня было что-то подобное!
Причём на каждом шагу!


Top
   
PostPosted: 03 May 2021, 11:45 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
У меня тоже такое же недавно было. Уже не помню как починил. Скорее, в батнике что-то поправил. Перекачай K580Dev. И, ей богу, переставай уже ныть из-за каждой трудности.

Ты, как немного программист, должен понимать, что автоматическая трансляция с ЯВУ в машинный код даёт свои накладные расходы. Ну вот нету до сих пор у нас идеального искусственного интеллекта и компилятора на его базе. Проц 8080 спроектирован в то время, когда о языках высокого уровня не очень думали. Это уже потом старались напихать таких процессорных команд, чтобы было проще транслировать. Но я так понимаю тебе нужен совсем низкий уровень, а ты хватаешь более высокий и плюёшься. Зачем ты так делаешь?

Мне интересна переносимость игр между разными непохожими платформами. Мне ассемблер подойдёт только под капотом. А МАДЛ по этой причине не подойдёт вообще. Но я ж его не обсираю?

По поводу ORG. Ну не принято на ЯВУ таким баловаться. Сделай себе пустой модуль размером 16 Кб. Или два размером по 8. Или 4 размером по 4. И подключай их, чтобы сбить адрес размещения библиотек повыше. Тут только так можно. Или же подыми документацию на zcc и попытайся найти каким ключиком задаётся стартовый адрес. Или вообще изучи подсистему K580Dev. Ты задаёшь такие вопросы, что закрадывается подозрение, что ты вообще много чего не увидел и не понял, в т.ч. и по языку. Ну я ж тебе не нянька. Хочешь пользоваться - пользуйся. Я помогаю как могу. Но все твои хотелки я тебе не обещал.

И кстати. Если есть что-то наиболее похожее на Delphi, но для K580 - то это именно XDev. Вот какой есть. Хорошая новость: его можно улучшать.


Top
   
PostPosted: 04 May 2021, 18:42 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Удалось научить подсистему K580Dev собирать бинарь с заданного адреса. Для этого предусмотрена опция CodeAdr. Добавлен пример Zelya для вывода красного квадратика.

Вопрос по примеру. Здесь Zelya переключается на экранную память:
Code:
	MVI a, 0
	OUT 0C2h
После чего вызывает очистку экрана подпрограммой ПЗУ:
Code:
	MVI a, 0
	STA 0BE38h
	CALL 0EBBCh
Мне до сих пор казалось, что вызов ПЗУ сам включает экранную память, после чего делает то, что ему нужно и отключает обратно. Но как это работает на самом деле? Подпрограмма сама запоминает какая страница памяти активна и восстанавливает после работы с экраном её же?

Ещё хорошая новость. Оказалось, что zcc понимает мнемоники 8080. Т.е. вот такое работает:
Code:
MODULE DemoSprt; (*$MAIN*)
IMPORT SYSTEM;

(* https://www.old-games.ru/forum/threads/assembler-i8080-uroki-praktika-pk-01.50209/ *)

BEGIN (*@
  #asm
        XRA  A
        OUT  (0xC2), A
        STA  0xBE38
        CALL 0xEBBC
        LXI  H, 0x5010
        LXI  D, 63
        MVI  A, 8
CELL:   MVI  M, 255
        INX  H
        MVI  M, 255
        DAD  D
        DCR  A
        JNZ  CELL
        HLT
  #endasm
*)
END DemoSprt.
Есть некоторые синтаксические особенности, в частности, в OUT пришлось номер порта брать в скобочки, но это мелочи.

Ещё новость, не знаю уж хорошая или не очень: zcc разрешает директиву ORG во встроенном асме. Но как этим пользоваться - пока не разобрался.
Code:
(*@
  #asm
        ORG 8000h
  #endasm
*)


Top
   
PostPosted: 06 May 2021, 19:22 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Quote:
Удалось научить подсистему K580Dev собирать бинарь с заданного адреса. Для этого предусмотрена опция CodeAdr. Добавлен пример Zelya для вывода красного квадратика.

Вопрос по примеру. Здесь Zelya переключается на экранную память:
Code:
	MVI a, 0
	OUT 0C2h
После чего вызывает очистку экрана подпрограммой ПЗУ:
Code:
	MVI a, 0
	STA 0BE38h
	CALL 0EBBCh
Мне до сих пор казалось, что вызов ПЗУ сам включает экранную память, после чего делает то, что ему нужно и отключает обратно. Но как это работает на самом деле? Подпрограмма сама запоминает какая страница памяти активна и восстанавливает после работы с экраном её же?
Из документации:
Quote:
2.6.4 Заполнение экранного ОЗУ кодом.
Точка входа $EBBC ( 60348 ) ( FillScrRAM ).
Входной параметр: ( BORDER ) ( $BE39 ) ( 48697 ) : Код заполнения.
Выполняется заполнение экранного ОЗУ указанным кодом.
Внимание !
Перед обращением к подпрограммам 2.6.4, 2.6.5 и 2.6.6 необ-
ходимо подключить экранное ОЗУ к шинам МП ( см. выше ), после
обращения,- отключить.
Есть такая штука мною созданая
Справочник ПЗУ-ПК-01 в HTML
viewtopic.php?f=8&t=376&start=15#p5116
там еще и код ВСЕГО ЧТО ХОЧЕШЬ можешь посмотреть
Code:
$EBBC/60348|FillScrRAM:  LXI H, $4000    {d4000}
$EBBF/60351|             LXI B, $40FF    {d40FF}
$EBC2/60354|             LDA $BE38    {dBE38}
$EBC5/60357|             MOV E,A
$EBC6/60358|jEBC6:       MOV M,E
$EBC7/60359|             INX H
$EBC8/60360|             DCX B
$EBC9/60361|             MOV A,B
$EBCA/60362|             CPI $00
$EBCC/60364|             JNZ $EBC6    {jEBC6}
$EBCF/60367|             RET



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

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