При чем тут перевызов? И да, в данном контектсе это будет ф-ция делегат.
Ещё добавлю. Хорошо заниматься мультиплатформенностью на платформе, которая тянет .NET, JVM и DOSBox, с запущенной внутри Windows 95. А я целенаправленно решаю более трудную задачу - специально взял такие специфические платформы, которые требуют очень особого подхода при разработке, такие как Java micro edition, DOS с CGA-графикой, Спектрум и MSX. На них эмулятор Windows не запустишь, а значит подход к разработке должен быть нетривиальным. И конечно у моего решения есть недостатки. Но совсем не те, которые вы с denpopov'ым даже не трудитесь вербализовать. Вы эти проблемы мультиплатформенности полностью игнорируете и никаких решений вообще не предлагаете, ибо сильно зациклены на проце Z80 и наиболее качественном для него ручном кодировании. Ну занимайтесь. Или коробки спичечные коллекционируйте, это ваше дело. Но почему столько бешенства и слюны в мою сторону?
И XDev - не просто мощная среда. Это уникальная среда, вообще не имеющая аналогов, ибо объединяющая (или пытающаяся объединить) такие таргеты, которые никто до неё не пробовал объединить. А старинные они или нет - это неважно, в том смысле что если таргеты такие разномастные, то туда можно припилить вообще что угодно. И это так.
Так что наезды в стиле "мне эта нинада" меня никак не колышут. А за наезды в стиле "никому это нинада" буду тыкать носом в г-но, и, считаю, заслуженно. Потому что каждый вправе не только коллекционировать спичечные коробки, но и рассказывать об этом другим. И пусть, раз вам не нравится обсуждать в этой ветке вопросы ZXDev, её целью будет именно это тыкание, раз уж нет другой, более достойной цели.
Тут
---------- Post added at 20:13 ---------- Previous post was at 20:11 ----------
Конечно, неправильное использование инструментов- зло.
Проблема в том, что сторонний наблюдатель (оценивающий это самое везде где ни попадя) не всегда обладает полнотой информации и, соответственно, не может оценить нужность или не нужность агрегации, наследования или шаблонного программирования.
Другое дело, если сам автор внятно объяснить не может зачем он это сделал.
- Прогресс разработки игры Dark Woods
- Библиотека Wham: двухголосная музыка с шумовыми эффектами на бипер
- Буферизованный опрос клавиатуры
- Опрос управления от клавиатуры и джойстиков (QAOPSpace, Sinclair 1, 2 и Kempston Joystick)
- ZXDev + кириллица
- На ZXDev как на ZX-Basic + NewSupercode: игра «Звёздная война»
- Теоретическое обоснование подсистемы XDev/Pdp11Dev
- Реструктуризация подсистем WinDev и ZXDev
- Как подключить ресурсы (спрайты, шрифты, музыку). Константные массивы
Вот пример кода, к которому будет трудно придраться даже самому искушённому кодеру. Проделана конечно чёртова работа, но, раз сделанная, остаётся таковой. Это пример, неважно что маленький, того, как я представляю себе кодогенерацию ZXDev с ЯВУ, доступную кодеру на ZX-бейсике, даже не знающему Си и асма. Если сделать на это ставку и начать развивать, наполнять кодовую базу, то это будет неизмеримо круче, чем есть сейчас. Мне несколько обидно, что кто-то вместо того чтобы развивать это направление, упивается процессом кодинга на асме, который не претерпел особых изменений с 1985 года. И которому развиваться дальше в общем-то некуда.
Код:MODULE Durak; (** non-portable *)
IMPORT B := Basic;
(* ========================================================================== *)
PROCEDURE Main; (* Prepare title, init game data. *)
VAR
radius: INTEGER;
BEGIN (*$MAIN*)
B.Init;
(* Prepare screen & title, set up colors, write "WAIT...": *)
(* ------------------------------------------------------- *)
B.OVER(B.Off); B.FLASH(B.Off); B.INVERSE(B.Off); B.BRIGHT(B.Off);
B.PAPER(B.Black); B.INK(B.LightGray); B.BORDER(B.Black); B.CLS;
B.AT(21, 3); B.PRSTR("WAIT...");
(* Draw invisible circles & prepare drawing logotype "M": *)
(* ------------------------------------------------------ *)
B.INVERSE(B.Off); B.INK(B.Blue);
radius := 8;
REPEAT B.CIRCLE(121, 85, radius); INC(radius, 8) UNTIL radius = 72;
B.POKE(23112, B.Blue); (* Fix attrib for accuracy. *)
B.Quit;
END Main;
END Durak.
P.S. Да знаю что всё равно придерётесь, ну и фиг с вами. ;-)Код:; ---------------------------------
; Function Durak_Main
; ---------------------------------
_Durak_Main:
;Durak.c:16: Basic_Init();
DI
RES 4, 1(IY)
;Durak.c:17: Basic_OVER(0);
ld c,#0
call _Basic_OVER_ROM_fastcall
;Durak.c:18: Basic_FLASH(0);
ld c,#0
call _Basic_FLASH_fastcall
;Durak.c:19: Basic_INVERSE(0);
ld c,#0
call _Basic_INVERSE_ROM_fastcall
;Durak.c:20: Basic_BRIGHT(0);
ld c,#0
call _Basic_BRIGHT_fastcall
;Durak.c:21: Basic_PAPER(0);
ld c,#0
call _Basic_PAPER_fastcall
;Durak.c:22: Basic_INK(7);
ld c,#7
call _Basic_INK_fastcall
;Durak.c:23: Basic_BORDER(0);
xor a
call 0x229B
;Durak.c:24: Basic_CLS();
call _Basic_CLS_ZX
;Durak.c:25: Basic_AT(21, 3);
call _Basic_AT_ROM_fastcall
.db 21,3
;Durak.c:26: Basic_PRSTR((CHAR*)"WAIT...", (LONGINT)8);
call _Basic_PRSTR_C_ROM_fastcall
.ascii "WAIT..."
.db 0x00
;Durak.c:27: Basic_INVERSE(0);
ld c,#0
call _Basic_INVERSE_ROM_fastcall
;Durak.c:28: Basic_INK(1);
ld c,#1
call _Basic_INK_fastcall
;Durak.c:30: do {
ld de,#0x0008
00104$:
;Durak.c:31: Basic_CIRCLE(121, 85, radius);
push de
push de
ld hl,#0x5579
push hl
call _Basic_CIRCLE_DI
pop af
pop af
pop de
;Durak.c:32: radius += 8;
ld hl,#0x0008
add hl,de
ex de,hl
;Durak.c:33: } while (!(radius == 72));
ld a,e
sub a,#0x48
jr NZ,00104$
or a,d
jr NZ,00104$
;Durak.c:34: Basic_POKE(23112, 1);
ld hl,#0x5A48
ld (hl),#0x01
;Durak.c:35: Basic_Quit();
LD HL, #0x2758
EXX
LD IY, #0x5C3A
EI
ret
P.P.S. Видели исходники Exolon'a? Не переписать ли Exolon на Oberon? ;-)
1. Кодер ZX-basic-а не знает что такое "PROCEDURE","VAR","Main","INTEGER","BEGIN ","END","REPEAT","UNTIL","IMPORT","MODULE"
И что такое точка в выражениях вида "B.Init"
Поэтому надо честно говорить, что придется пролистать книжку про введение в оберон или объект паскаль, либо придётся задавать определённое количество "глупых" вопросов на форумах.
Если он знает Си, то число глупых вопросов сократится на 40%.
Если знает Паскаль или Дельфи, то на 80%, а об остальном можно будет догадаться самому. Но и догадываться это тоже интеллектуальный труд.
2. Неизвестно, есть ещё куда развиваться кодингу на асме (как науке) или нет. Возможно есть пути, которые не видны. Но я почти уверен, что понимание асма конкретным человеком, полезно развивать.
3. REPEAT UNTIL лучше не писать в одну строчку, тогда знающему Си будет проще догадаться, что эти слова - части одной структуры цикла.
Код:REPEAT
B.CIRCLE(121, 85, radius);
INC(radius, 8)
UNTIL radius = 72;
---------- Post added at 11:39 ---------- Previous post was at 11:35 ----------
4. И как ZX-basic-кодеру догадаться, что верхний "код" это то исходник на обероне, а нижний "код" это что получается на асме после компиляции. Блоки кодов лучше подписывать.
Мне сложно представить кодера на ZX-бейсике, который никогда не видел Hisoft Pascal'я или структурных версий бейсика типа BetaBasic и MegaBasic. И потом, кодер - он ведь кодер, а не блондинка.
А почему тебя это так напрягает?
Мне самому пришлось очень вдумчиво изучать низкоуровневый кодинг, а после него - не менее вдумчиво компонентный подход в Дельфи. Хотя теперь я не считаю это сложным. Но полезным считаю. Что предлагаю я? Изучить сбалансированный и компактный модульный язык, квинтэссенцию программных абстракций, уточнённых временем. Углубить знания в области написания батников (принцип пригодится для продвинутого использования любой ОС), присмотреться к Си. Многие здесь на форуме слышали что Си это круто, имеют смутное представление о Си и C++, но верят. И они же слышали, что Оберон это отстой. И тоже верят. А когда начинаешь говорить про достоинства Оберон-парадигмы - не верят.
То есть присутствует желание чтобы и ничего не читать, и ничего не узнавать, и чтобы жизнь была лёгкой и приятной, а всё само делалось, да? Но панацею я и не предлагаю. Абсолютно любая технология требует времени на её освоение. Нужно и книги читать, и на форумах глупые вопросы писать. А как же иначе. А Оберон не такой уж большой язык, он гораздо компактнее Си. И освоить его проще.
Я соглашаюсь. Но не менее важно уметь мыслить модульными категориями и абстракциями. Я читаю форум и понимаю, что у многих здешних лоу-левел кодеров отсутствуют знания о "большом" программировании, о том как устроена и работает большая программная система, как её поддерживать и дорабатывать. Очень многие не догадываются про системы контроля версий и их преимущества. Расти личностно программисту всегда есть куда. Почему они считают что асм важнее всего этого?
Опять отсылаю к HisoftPascal, Beta- и MegaBasic.
Ты обрати внимание, что многие zx-бейсик-кодеры вырастают до программирования в большом на всё тех же бейсико-подобных языках, имеющих все атрибуты структурных языков. При этом у них барьер в освоении Паскаля и Си, которые в общем-то отличаются только синтаксисом.
Я думаю, кодеры догадаются. Не блондинки.
Ну так уровень и следует повышать, обогащая свой опыт концепциями, проверенными временем. Чай процедуры-то теперь повсеместно есть. Ну или их "усовершенствование" - методы. Я за то, чтобы устаревшие средства из языка выводить, а фундаментальные вещи знать надо.
Reobne, теперь ты меня понимаешь? :)
Господа, можно ли средствами сишного препроцессора выкусить из строки кавычки? Т.е. превратить "str" в str
Это позволит использовать модуль Asm, разработанный Reobne для SDCC, также и с другими сишными компиляторами.
Да, я погуглил и тоже пришёл к выводу, что нельзя. Ну ничего, будем асм из Оберона вызывать поменьше, из Си побольше.
Kakos_nonos, вот. Не совсем то, что ты имел ввиду, но максимально приближённое к нему:
Также см.
Литературы по Оберону не так уж и мало. Советовать конкретно что-то одно - не могу. Нужно выбрать что-то подходящее для себя, потом другим советовать. Мне вот очень нравятся две книги:
- Eric W. Nikitin. Into the realms of Oberon (очень хорошая книга для начинающих; есть в торрент-раздаче)
По специфике «Oberon + ZX» материалов нет, только форум.
А можно в zxdev добавить язык c# или хотябы си? :)
Всё можно сделать, трудность в написании транслятора C# в Си (или в машкод Z80).
Поддержка языка Си в ZXDev есть.
Andrew771, пока твой кросс-Паскаль не достигнет хотя бы приблизительно вот такого качества кода - использовать его для практической разработки смысла не имеет, разве только чтобы потешить своё чувство "уря, Паскаль для ZX!". Впрочем, твоя фраза "а то уже пару людей попросило в личке" говорит о том, что этой паре людей гораздо важнее потешить данное чувство, чем получить хороший инструмент для разработки в лице среды ZXDev, язык которой хотя и слегка отличается от Паскаля, но несомненно в лучшую сторону.
это я знаю. Сам ругался на z88dk из-за этого. Он хорош, но выдает вообще неоптимизированный код. Я уже у себя запланировал оптимизацию по некоторым распространенным вещам.
Ясен перец, демо на Паскале/Обероне не напишешь, он только для написания игр и программ.
Ну и что. Даже если мне это одному нужно, я всё равно продолжаю писать. Всё-таки хобби. Я не хочу "перевернуть мир", а только удобный инструмент для быстрой разработки.
---------- Post added at 16:57 ---------- Previous post was at 16:47 ----------
кстати, будете смеяться, но вся эта дискуссия последних дней раззадорила меня на продолжение компилятора в новогодние каникулы, хотя я планировал заняться второй версией своей игры Euphoria 2D (там осталось доработок на несколько дней буквально, бОльшую часть уже сделал в течение года урывками).
А я просто на наглядном примере показываю вам на ваших же реакциях что выбор языка для разработки имеет все признаки религиозного культа. Здесь и свои заповеди, и свои пророки, и своя библия. И вера. Самое важное. Просто вера в то, что это язык [самый лучший, самый системный, самый подходящий для оптимизации и т.д.]. И твои реакции ничем не отличаются, Алекс. Я подчёркиваю: Оберон отличается от Паскаля незначительно. Но посмотри сколькие даже здесь тянут ручонку за Паскаль, напрочь игнорируя ZXDev и портя мне мотивацию. :v2_dizzy_otvyan:
Смайл с баннером "Отвянь" ты прислал как раз в момент, когда я осознал основные плюшки Оберона. Было бы о чем поговорить в позитивном ключе, но... Отвял. Перехожу в стан жестких критиков.
Алекс, а я ответил тебе на твои вопросы по Оберону в позитивном ключе до того как увидел твои соболезнования по поводу негатива в сторону кросс-паскаля. Я не против кросс-паскаля. Я желаю успехов этому проекту, но просто ищу ответ отчего более совершенный инструмент ZXDev, предлагающий уникальные возможности, отвергают в пользу менее совершенного и менее готового кросс-паскаля. Кроме того помните что написал Торвальдс Таненбауму по поводу Minix'а? "Дай возможность дорабатывать Minix другим людям под удобной лицензией, и половина моих претензий к нему отпадёт". А здесь тянут ручку не только за менее удачный инструмент, но ещё и за закрытый. Сам же Андрей хоть и вежливо выслушает вас, но сделает всё-равно по-своему. И что-то мне подсказывает, что и исходники не откроет. Так что ответ на мой вопрос "почему?" не лежит в области IT, но в психологии - рефлексы, реакции, подражание и т.д.
попову. предпочитаю ненависть равнодушию. его я ненавижу и в себе, и в других.
Уже столько негатива как вылили здесь на меня - ещё поискать. Всю тему загадили разговорами про что угодно. Алекс его просто не замечает. А тут, понимаешь, заело. Хотя вот же - все шансы, что кросс-Паскаль постигнет та же участь, что первый сишный компилер vinxru для i8080. Вы такой инструмент хотите? Наслаждайтесь.
Андрею предлагаю сделать две вещи для интереса. Не меняя ни единой строчки кода переименовать проект в кросс-Оберон и дать пару постов о достоинствах Оберона и курсе на него. И он огребёт все плюшки, которые огрёб я. И недоумение "зачем Оберон для Спека?" и всё прочее. Понятно, что Андрей не сделает такого. Он не будет отступать от линии Паскаля даже в сторону убирания лишних begin'ов. А я бунтарь. Мне не нравится сложившаяся ситуация в IT и все те мытарства, через которые приходится проходить программисту чтобы удержаться в струе. И я нашёл своё решение. Только наверно зря предлагаю его здесь, очень уж народ специфический. С кем было бы интересно поговорить - те молчат. А те, кому бы в жизни и руки не подал, влезают в разговор сходу. Грустно.
Олег, согласись что труды Андрея на спеке видны, а с твоей стороны только теоретические рассуждения.
Я свои труды на Спеке не прячу, и все выложил на WoS'е как смог. Если их кто-то не видел - я не виноват. Но речь сейчас не об играх/демках, а о средствах разработки.
Ну и что же. Предлагаете сейчас мне писать на чистом асме тогда? А если я не хочу? :) Это интерес такой - ЯВУ на Спеке. А интерес к асму в чистом виде падает. Новая генерация разработчиков не знает ни асма, ни Спека. Скоро новых игр для Спека на асме не будет. Скоро их вообще не будет новых для Спека. И тогда ваш интерес окажется неинтересным, а мой всё ещё интересным. Я тогда буду припиливать XDev к новой платформе, оставляя на плаву его дух.
Ну почему отпадает и у кого?
Так всё плохо, да?
http://img0.joyreactor.cc/pics/post/...р-59018.jpeg
С нового года у меня будет гораздо меньше времени на ZXDev. В информационной поддержке не отказываю - обращайтесь. Но бывать здесь регулярно не обещаю.
асм штука интересная. в зависимости от умений и компилятора можно извратиться очень и очень, вплоть до ООП:
компилятор - самый обычный, древнющий Microsoft M80.Код:Title Ball ~PSW SOFT~
; This is a demo part for the Profi Vision.
; Movable visible object - Ball...
maclib maclib.inc ; Hу это пpосто макpо библиотека...
include OBJECTS.INC ; Здесь макpики и опpеделения имен
; связанных с описанием и выделением
; стандаpтных объектов.
include EVENTS.INC ; Опpеделения имен и масок событий
include VIEWS.INC ; Опpеделения флагов и полей видимых
; элементов
cmEraseAllBalls equ 1251 ; Код события-команды на котоpое pеагиpуют
; все Ball и соотв. уничтожают себя...
DeltaX equ viSkip
DeltaY equ viSkip+1
TimeXY equ viSkip+2
SpeedXY equ viSkip+3
Char equ viSkip+4
BallSkip equ viSkip+5
Object tBall, tView##, BallSkip
Constructor Ball.Init
VirtualMethods <,Ball.Draw,Ball.HandleEvent,,,,,,,,,,,,>
EndObject
и т.д.
Я уже писал причину - Оберон лучше Паскаля, но Паскаль был первым, и намного более распространен среди простых смертных. Аналогия со звуковыми форматами ogg и mp3. Аналогия с Windows и Linux.