Терзают смутные сомнения, что тут БК сам с собой разговаривает...
Вид для печати
Терзают смутные сомнения, что тут БК сам с собой разговаривает...
Возможности, в нем заложенные
Сразу-то нахрен?
Паскаль в очумелых ручках привыкших к бейсику вмиг перестает быть структурным без всяких GOTO :v2_laugh:
Стал уже давно
А сморозивший - прикроется высокопарными фразами :rolleyes:
Вот я и спрашиваю: ну при чем тут Спектрум? Внешние железки, чтобы что-то скомпилировать (а то и чтоб запустить)
Твой паскаль умеет компилировать полноценные программы для работы на обычном Спеке БЕЗ наворотов?
Впрочем, даже в этом случае лучше подыскать песюковый кросс-компилер
...и Спек в CP/M режиме переставал быть Спеком, что и требовалось доказать
Ту же самую? Нет, не перестало :D
*терпеливо* Да о том же, что ты очень сильно переоцениваешь
в отрыве от современности :v2_dizzy_grandfathe
И еще желательней - не на Спектруме
Fgsfds... это к чему вообще? Предлагаешь начинающим начинать с отладки сложных алгоритмов? :v2_wacko:
После бейсика очень многое кажется НЕМЫСЛИМЫМ :v2_laugh:
Отрицательному - это во-вторых :v2_tong2:
Не вали с больной головы на здоровую
Это ты здесь начал плакать о косинусах и высасывать из пальца мнимые мегатрудности
умникам следовало бы знать, что это не баг бейсика! это фича вообще, глобальная. этим не только калькуляторы страдают (а особенно примитивные!!!), это вообще везде такой "баг". учи математику, знаток:)
и да. будь добр, покажи-ка свои поделочки на асме для спека? посмотрим, как ты круто управляешься с асмом. а то балаболить-то мы все горазды.
Меня вообще удивляет, как можно шесть страниц "меряться сингулярностями" и "жонглировать какашками"?! Было произнесено много "громких" слов, перечисленна масса "доводов" в пользу "верного и единственного" подхода в програмировании. Из всего этого, полезного, для себя я не увидел. Извиняюсь за копипасту, но, по-существу..
Скрытый текст
процесс работы компьютера заключается в выполнении программы, то есть набора вполне определённых команд во вполне определённом порядке. Машинный вид команды, состоящий из нулей и единиц, указывает, какое именно действие должен выполнить центральный процессор. Значит, чтобы задать компьютеру последовательность действий, которые он должен выполнить, нужно задать последовательность двоичных кодов соответствующих команд. Программы в машинных кодах состоят из тысячи команд. Писать такие программы - занятие сложное и утомительное. Программист должен помнить комбинацию нулей и единиц двоичного кода каждой программы, а также двоичные коды адресов данных, используемых при её выполнении. Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ, - языки программирования.
Имеется много различных языков программирования. Вообще-то для решения большинства задач можно использовать любой из них. Опытные программисты знают, какой язык лучше использовать для решения каждой конкретной задачи, так как каждый из языков имеет свои возможности, ориентацию на определённые типы задач, свой способ описания понятий и объектов, используемых при решении задач.
Всё множество языков программирования можно разделить на две группы: языки низкого уровня и языки высокого уровня.
К языкам низкого уровня относятся языки ассемблера (от англ. to assemble - собирать, компоновать). В языке ассемблера используются символьные обозначения команд, которые легко понятны и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, используемых при выполнении команды, - символьные имена этих данных, выбранные программистом. Иногда язык ассемблера называют мнемокодом или автокодом.
Большинство программистов пользуются для составления программ языками высокого уровня. Как и обычный человеческий язык, такой язык имеет свой алфавит - множество символов, используемых в языке. Из этих символов составляются так называемые ключевые слова языка. Каждое из ключевых слов выполняет свою функцию, так же как в привычном нам языке нам языке слова, составленные из букв алфавита данного языка, могут выполнять функции разных частей речи. Ключевые слова связываются друг с другом в предложения по определённым синтаксическим правилам языка. Каждое предложение определяет некоторую последовательность действий, которые должен выполнить компьютер.
Язык высокого уровня выполняет роль посредника между человеком и компьютером, позволяя человеку общаться с компьютером более привычным для человека способом. Часто такой язык помогает выбрать правильный метод решения задачи.
Перед тем как писать программу на языке высокого уровня, программист должен составить алгоритм решения задачи, то есть пошаговый план действий, который нужно выполнить для решения этой задачи. Поэтому языки, требующие предварительного составления алгоритма, часто называют алгоритмическими языками.[свернуть]
Каждый сам выбирает - строить ли ему "конуру из бетонных блоков" или "вырезать дом в скале"..
Бугога! Стало быть, явная ошибка в первом же знаке после запятой при расчетах с внутренним двоичным представлением вещественных чисел это "глобальная фича"? Математику здесь нужно явно учить тебе :v2_laugh:
Поищи по форуму, все лежит, что счел нужным выложить
Кстати, как насчет твоих поделок на синклер-бейсике?
Только не забудь убрать из них расово неверный инпут с инкеем :v2_devil:
А по существу - эмулятор плюс кросс-ассемблер это нынче сразу целый завод железобетонных конструкций с ультразвуковым контролем качества по сравнению с кустарными шлакоблоками синклер-бейсика. Кое-кто здесь до сих пор не может понять, что предмет дискуссии - преимущества и недостатки определенных средств разработки в определенное время, а не сферобейсики в синклервакууме.
Отвечаю, хоть и несколько запоздало (у вас тут дискуссия уже далеко зашла). По Вашим, Barmaley_m, ответам вижу полное непонимание написания программы на ассемблере. Все время проекция оного с метода написания на бейсике. Я ж написал, что принцип одинаков. Но нельзя понимать это буквально. Одинаков подход к написанию, но методы отладки и использования дополнительных процедур разные. Итак, по порядку:
Во первых, я не имел ввиду написание программы на асме в магнитофонном варианте, хотя и так я писал года до 1994-го. В Gens3 потом в 4-м. И ещё в Zeus. Сохранял на кассету текст перед компиляцией и запуском. Да. Думать приходилось сильнее, а не тут же жать на кнопку запуска. Я далее это поясню.
Совершенно несогласен. Во первых, в отладчиках (под которыми предполагается отлаживать программу которую мы пишем) есть режим эмуляции кода. Есть точки останова. Хотя я в 1992-1994гг ими не пользовался, а пользовался (как тут уже писали) монитором прошивки "турбо-90", вывел себе проводок от 17-й ноги Z80 и быстро проводил проводком по радиатору БП. Комп вылетал в монитор. Вот вам и прерывание. Да, иногда все напрочь висло (о этом случае я писал в Ревюшке'93), но это не смертельно. А вот с бейсиком беда. остановить его мы можем (хотя используя несложный прием мы это можем отключить), но как посмотреть состояние программы? Нужно проверять значения всех переменных (глобальных) вводя кучу команд... Сложнее чем в отладчике.
Вот тут вообще не понял. С моей т.з. в этом отношении и бейсик и асм одинаковы. Ведь как пишется программа? Мы продумываем структуру, блоки, их взаимосвязь, а потом уже начинаем реализовывать задуманное. Грубо говоря приводя программу к структурированному виду, когда вся программа это иерархическая система "черных ящиков". У каждого ящика есть вход и выход. Нам надо реализовать функционал, потом о реализации можно забыть. Важно что бы ящик делал то, что нам надо. Делаем "внутренности" раскладывая сложные алгоритмы в набор более простых, вернее пишется скорее всего наоборот (уже когда структура программы проработана) пишем сначала базовые процедурки, потом на их основе более сложные и т.д. В бейсике процесс написания абсолютно аналогичен. И в паскале также. Предвижу возражения, что дескать "мы так не писали, писали как получится". В том то и дело, что если делать так, то ничего серьезного не напишешь. Это обычная тактика новичков, кто учится программировать. Бейсик для этого и предназначен, но и на нем можно писать так как я описал выше.
Тут согласен, но отчасти. Разборщик выражений в бейсике логической ошибки в программе не увидит и будет сидеть начинающий проггер и тупить над программой, а ошибка может быть и в алгоритме вычислений и в логике, да где угодно. А в асме без библиотки арифметических функций делать нечего. Нужен набор процедур, или самописный (что лучше всего, сначала писать их, учить асм, учить команды проца) или чей-то. Здесь ещё хочу сказать, что нужны базовые знания по программированию, в области арифметики. Т.е. точное представление двоичной и шестнадцатеричных систем исчисление, представлять себе деление, вычитание, сравнение, умножение, деление чисел. Знать алгоритмы быстрого деления и умножения сдвигом. В бейсике это не нужно, но знать программисту это всё равно надо. Такое мое мнение.
Можно пользоваться подпрограммами ZX-Basic, или опять же иметь свои наработки. Это полезней со всех сторон. Необходимо понимать как работает машина. Начинающие писать на бейсике этого сознательно лишаются. Они изучают некую абстрактную бейсик-машину. Со своим экраном, клавой и памятью в виде переменных и массивов. С одной стороны в этом и был смысл бейсика, абстрагировать обучающихся от железа, что бы они учили процедурное программирование. Но в этом и грабли на будущее. Т.е. зацикливаться на чем то одном не надо. Пописал человек 2-3 месяца на бейсике, более-менее изучил его и надо двигаться далее. Изучать в первую очередь архитектуру машины, основы программирования на асме (то что я выше описывал) и примерно через полгода уже можно приступать к написанию первых процедур. И уже позднее программ. Т.е. смысл сказанного мной таков. Имея знания о архитектуре компа, имея опыт написания программ процесс написания на бейсике и на асме будет похож. Примерно как снимать очень дорогой камерой изменяя и контролируя несколько десятков параметров и телефоном, нажимая на одну кнопку. Получаем и соотв. результаты.
Нужно не только изучать сам бейсик или асм, а изучать программирование, архитектуры проца, конкретной машины, видоподсистемы. Представлять себе как можно реализовать алгоритмически аркадную игру (типа Exolon, R-Type, River Raid, Crazy Cars). Как написать движок. И уже потом можно браться за инструмент. Бейсик, Паскаль, Си или асм. Есть примеры игр совершенно другого плана, изометрия, 3D (Dark Side и прочие), адвентюры с графикой и без и т.д. И каждый тип имеет свой движок, свои особенности. Не зная их, не понимая даже при идеальном знании Паскаля или Си игру не напишешь. Поэтому вопрос заданный в теме мне не понятен. Вернее понятен, что автор некорректно поставил вопрос из-за не понимания вопросы программирования игр вообще.
А ещё хотелось бы сказать, что проблемы освоения асма, паксаля или Си возникали ранее у тех, кто начинал с бейсика из-за скомканности обучения всему что связано с компьютерами. То кидаются в сторону алгоритмов, то учим бейсик, то устройство компа обзорно. В этом проблема. Масса отрывочных сведений, мало связанных между собой. Человеку который видит это всё впервые сложно усвоить всю инфу и адекватно её воспринять. Однобокое, неполное понимание в дальнейшем создает проблемы. Некоторые люди в упор не воспринимают hex числа, при том пишут программы на асме. Вот вам привет из zx-бейсике (в других реализациях бейсика hex числа есть). Т.е. если изучать всё планомерно и последовательно, что из себя представляет компьютер и с чем его едят, то и проблем будет меньше.
бред несешь. разберись вот как раз с "внутренним двоичным представлением вещественных чисел".
мы разговариваем не по форуму, а конкретно в этой теме, выложи ссылки на свой софт. или ты слить решил по тихому?
забавно это читать:) тов. Barmaley_m более чем в адеквате:) и про асм знает не по наслышке:) просто рассуждает не только смотря на свой личный опыт.
вводя команды типа LIST, PRINT, ты нажимаешь несколько кнопок. для того чтобы в отладчике посмотреть содержимое памяти или код, ты точно так же нажимаешь несколько кнопок.
только вот досада: хочешь ты посмотреть переменные A,B,C и строку D$, в бейсике ты так и пишешь: PRINT A,B,C,D$ - получаешь значение переменных в остановленный момент. а что ты делаешь в асме? для начала тебе надо знать адрес твоих переменных. где ты его берешь? ищешь кусок кода с этим адресом? или наугад среди кучи данных (по т.н. eyecatcher), зная что вслед за чем лежит? или открываешь листинг асма и ищешь там свою переменную? не слишком ли???
далее, нашел ты переменную, 2 байта, а там D5 38. ЭТО СКОЛЬКО???
вы будете дальше настаивать на удобстве дебаггера??
и в этом кроется ошибка в ваших рассуждениях:) новичок так не делает никогда! он просто не умеет продумывать структуру, не понимает никаких черных ящиков. потому он и новичок. а теперь представь, что человек этого не умеет и переосознай:)
если человек си или паскалем хоть как-то вынужденно начинает программу структурировать, то в асме руки полностью развязаны и просто так он этого делать ни за что не будет. а в современных ЯВУ как раз идет тенденция связывания рук, чтобы нельзя было делать всё что в голову взбредет.
правильно! новичку их сначала тока надо где-то взять, потом РАЗОБРАТЬСЯ как их использовать (это для вас сейчас это просто!), а потом юзать.
а писать такое новичку - да большинство нахрен пошлет программирование сразу, т.к. результата не будет ну очень долгое время.
это ты хочешь предложить новичку?:))))) я подозреваю что этого даже монстр асма Lethargeek не знает... бейсик (и любой алгоритмический язык) тем и хорош, что ты заморачиваешься только с алгоритмом, но не с борьбой с машиной.
нехватку регистров в асме уже никто не помнит? память короткая?:) ах да, у Lethargeek особый ламерский метод складывать все в память...
нет здесь граблей. направления в программировании бывают разные и не стоит всех заставлять проходить свой путь. если ты системщик - тебе полезно знать то, о чем ты пишешь - алгоритмы деления, умножения, как работает комп. если же ты прикладник - в гробу видал все эти премудрости, твоя задача - решать поставленную задачу ЛЮБЫМИ методами. есть невероятное количество людей, никогда не изучавших асм, но делающих такие вещи, которые мы тут все вместе взятые можем не асилить. само по себе программирование - ничто и никому не нужно, оно становится значимым только в применении к какой-то области. и именно программированию учиться лучше точно не на асме. асм нынче вообще мало кому нужен.
вот здесь вряд ли бы кто стал спорить, все верно.
не соглашусь. пишут так потому что тупо привычка считать в десятичной системе. сложно обычному человеку вообще понимать другую систему.
если писать все на асме, максимально продумывая, то винда и все остальное будет просто летать, даже на древних компах! и не глючить! ибо писавший будет досконально знать что и как он сделал. хехе:) но в реальном мире - это УТОПИЯ! это не реально ни на 0.001%. просто жизни не хватит и людей.
Лол, с каким? С тем, в котором 1/2<>0.5? Уймись уже, балаболка!
Или мне тебе напомнить алгоритм деления в столбик для первоклашек? :v2_dizzy_facepalm:
Чтобы ты сумел поделить пятерку на десятку в двоичном коде
сосчитав на пальцах, сколько битов нужно для вычислений
Ты УЖЕ слил по-тихому, даже слова не сказав о своих поделках на бейсике :v2_dizzy_stop:
Лично я обычно нажимаю Step или Step Over и вижу все :cool:
Кстати, как на бейсике организовать обычную трассировку?
Или как следить за ходом прорисовки, не потеряв саму прорисовку?
Будешь дальше настаивать на удобстве отладки ручками под бейсиком?
Вот досада: хочешь посмотреть переменные в ЛЮБОЙ момент - и не можешь :v2_tong2:
Кинуть в калькулятор или просто кликнуть кнопочку decimal так трудно? :rolleyes:
Кстати, перед этим не мешает для начала определиться, нужно ли оно вообще в десятичном виде
Судя по его постам в других ветках я в курсе, но тут какие-то неуместные сравнения.
Если честно, то никогда глубоко не отлаживал своих программ. Всегда "отладку" делал в уме, смотря на текст программы. И уж если совсем затык (было пару раз) то уже пользуюсь отладчиком. А вообще переменные можно держать в одном месте. Да и для отладки конкретного участка не надо их смотреть десятками.
Это 38D5, если переменная 16 бит. Мне совершенно не важно сколько это в десятичной системе.
Есть. Сам через такое прошёл. Умея программировать на basic очень трудно понять "как же работает комп". Если нет описания архитектуры от общего к частному и наоборот от простого к сложному. Когда нет описаний как работает скелет программы которая гоняет спрайты по экрану zx-spectrum. Как она отрабатывает логику. Не зная этого новичек пишет дикие проги на бейсике. Ужасающие по своей безграмотности. Многие, кстати, перейдя потом в маш.код, ассемблер, многое принесли из тех ужасов бейсика.
Как раз я и предлагаю идти не моим путем, а более другим :-) более коротким и эффективным. А то что направления бывают разные я в курсе. Можно только 3D графикой заниматься и не знать про аппаратуру вообще ничего (мы говорим в разрезе ZX-Spectrum и подобных машин, а не современных монстров), но знать при этом как же "работает комп" всё же полезно. Сколько я видел программистов, учившихся в свое время на ПОВТ'е и которые совершенно не представляли, зачем нужен проц, что такое прерывания, как обменивается программа с внешним миром данными и прочее. При этом они писали базы данных простейшие, используя для сортировки метод "пузырька" и ни секунды не сомневались что они и есть программисты....
Ещё пример где-то прочитал не помню уже, что программистка одна сдавала программу на паскале, писала на роботрон 1715, в TP 3.0 некую базу данных, так вот, у неё при выводе результата были всполохи символов искореженных, она всё не могла от них отделаться а потом плюнула и всё списала на неисправность компа, а между тем причина была в том, что луч пробегал во время вывода символов. Он ж "реальный" программист, зачем ей знать такие тонкости....
Вот представь - Нет! Никогда у меня не было случаев, что бы регистров не хватало, что капец. Нет, конечно бывает, что для красивой и быстрой реализации нужен ещё один 8-и или 16-и битный регистр. Приходится извращаться, но это очень редко бывает. По первости, когда я пришёл из бейсика это было нормой. Я вообще не понимал как можно при таком малом кол-ве регистров хоть что-то писать. Почему так думал? Да потому что работал шаблон мышления - регистры это почти переменные бейсика, только своеобразные. А это ведь не так! Вообще не так! И таких вот шаблонов (у меня по крайней мере была) куча. О этих граблях я и писал. Конечно, если человек всю жизнь будет писать алгоритмы на лиспе или прологе то все вышеописанное ему ни к чему. Но я то думал, что мы говорим о спектруме. О программировании под него. Или нет?
Да это понятно. Много раз уже это сказано.
Я как предлагал выше? Сначала изучаем двоичную и 16-и ричную системы. И не так что "аааа, да понятно всё" и забыли вопрос. Сколько я людей ловил на том, что реально они не понимают. Нужно кристальной чистоты понимание и уже потом двигаться дальше. Это как если мы толком не одели коньки то учиться кататься бесполезно.
---------- Post added at 15:00 ---------- Previous post was at 14:51 ----------
Это почти слово в слово говорил и я и другие люди мне, когда такой вопрос обсуждали ещё лет 10 назад. Так оно. Хоть все и не реально на асме написать, но побольше чем сейчас - вполне реально, а то сейчас даже драйверы для видях пишут на Си. И получаем кривоту кривейшую. Не раз уже встречал случаи когда производитель так и не избавлялся от фатальных ошибок, бросал продукт и начинал "новую версию".
Напоминаю, мы о спектруме говорим, а не о ПЦ.
сам подучи.
10 LET a=1/2
20 LET b=5/10
30 LET c=0.5
40 IF a=b THEN PRINT "a=b"
50 IF c=b THEN PRINT "c=b"
60 IF c=a THEN PRINT "c=a"
что же, интересно, напечатается? А??? балабол хренов.
слил? молодец:) стрелы не переводи, спрашивал я тебя, т.к. это ты кидаешь понты о своей крутости в асме и умению пользоваться дебаггером. вот и покажи, чего ты добился. а уже потом мы решим про мой (или не мой) бейсик.
ну это только потому что ты долбан. объясняю: глюк может возникать на N-ной секунде/минуте/часе, а не сразу. ты все это время жмешь Step? БАЛАБОЛ!!! мы все эти методы знаем отлично, как и отладчик в анриле, и понтануться асмовскими работами можем гораздо гораздее, но понтуешься тут ты - у тебя почему-то все легко и просто. наверное потому что ничего серьезного-то и не делал. покажи свой код!
пример выдуман из ничего. могу на такое ответить - поставлю паузу в цикл. устроит? меня устроит. как начнет неправильно рисовать - остановлю и все посмотрю.
ты идиот:) нет смысла их смотреть в ЛЮБОЙ момент:)
где ты ее кликнешь? в анриле? БАЛАБОЛ!
калькулятор - лишнее действие. бейсик побеждает. и ты про нахождение адреса не сказал.
и вот лежит у тебя 50 переменных. ты даже знаешь их порядок. и каждый раз ты будешь вычислять смещение относительно чего-то... а после изменения проги адреса поплывут... в бейсике этой проблемы нет в принципе!
ах, ну конечно не важно, если только тебе вообще не интересно о чем это. а за каждой переменной имеется какой-то физический смысл! и иногда нужно оценить что-то в принятых физических величинах! если ты считал количество оставшихся свободных тактов за прерывание, число 38D5 тебе много скажет?
при программировании на бейсике (даже создании игры!!!) такой задачи не стоит вообще никогда!!! не придумывайте!
1. потому что он новичок, так положено.
2. ты правда думаешь, что начав с асма он будет писать как-то иначе??? не будет! он не знает как надо, и язык тут не при чем.
видишь, полезно, но абсолютно не обязательно.
они и были программисты, просто не такие как ты:)
ты уверен, что это была работа с бд, а не текстовая демо/интра? :)))))) просто в таких задачах таких проблем не бывает! на выдумку похоже, ибо чтобы увидеть луч - надо постоянно что-то менять.
имхо, конечно, но асм имеет смысл тогда, когда нужна скорость. а скорости не будет, если постоянно писать/читать память, чтобы всегда хватало регистров. так что такими методами программинга вы делаете УГ, а не нормальный ассемблерный код. это мое мнение.
ну, как на информатике:) и после этого все начинают ее ненавидеть.
зато я знаю много людей, которые не зная как работает комп, пишут программы для работы с сетью, с базами данных и т.д. даже 3д-игры!!! ОНИ ПРЕКРАСНО ДЕЛАЮТ СВОЮ РАБОТУ! а то, что вы хотите навязать им свои познания в системах счисления, в том как работает комп - это ваша беда.
да нет, не реально. никто такого темпа не выдержит. только Lethargeek выдержит, но у него тормозящий *****код и он ошибок сделает больше чем на си.
Лучше так:
Ты? Да :v2_tong2:Код:10 IF 1/2<>0.5 THEN PRINT "psb dolban"
RUN
psb dolban
0 OK, 10:2
Не гони. Я как раз писал, что ленив, небрежен и неусидчив. Потому и выбрал асм+эмуль :v2_devil:
А ведь там написано про Step Over... но долбаны же не дочитывают полстрочки :rolleyes:
Ахахах... и все это время стучишь по кнопке? :v2_laugh:
Кстати, паузы поставить придется ручками в тормозном редакторе
Да ну? Вот отлаживает новичок, например, питона. И тут опа: змейка хвост отбросила и дальше ползет обрубком. Ичоделать? Куды паузу-то ставить?
Например в СПИНе :v2_tong2: правда, и там тоже не пригодилось
Бейсик PRINT verylongbutselfdescriptivevariablename - куча кнопочек
Калькулятор - копипаста или нумпад
Бейсик всасывает, причмокивая
Уважаемые Lethargeek и psb,
я,конечно, извиняюсь, что вмешиваюсь,
но вашу бы энергию да в полезное дело....
На спектруме? или где? На ПЦ все разбито по уровням. Мощность проца позволяет. Операционка написана до них. Все сетевые сервисы, транспорт, всё готово. Они пишут на ЯВУ различных, даже в плане видеовывода для них и там все подготовлено, даже библиотки и годы наработк готовы. Любые прачки и домохозяки могут программить. Ессно они не знают как работает комп. Но мы не о них говорим.
да, мы пытаемся говорить о том, что не обязательно нужны все эти знания.Цитата:
Любые прачки и домохозяки могут программить. Ессно они не знают как работает комп. Но мы не о них говорим.
---------- Post added at 17:03 ---------- Previous post was at 16:50 ----------
умыл, но все равно это не правильно идеологически. так делать НЕЛЬЗЯ, хоть на бейсике, хоть на асме. сделал как нельзя и получил хрень - молодец, ССЗБ.
ну так и покажи, чего добился своим выбором. застеснялся что ли?
если проявляется через секунды-минуты - это не имеет значения
не надо стучать!
а тебе бряки поставить в неудобном дебаггере:)
одинаково.
и где ты видишь здесь ЛЮБОЙ момент? он вполне конкретный, и как раз может далеко не сразу проявиться, так что твои Step Over пролетают. а раз пролетают - вы оказываетесь в одинаковых условиях.
ты уже определись в чем ты там пишешь. а то запрыгал...
бред. PRINT А :)
а у тебя нумпад с буквами? или сбалаболил опять?
не боись, полезное дело делается, лично у меня, а вот на полезные дела Lethargeek я бы поглядел.
так ведь часто именно это и надо бизнесу! т.е. есть задача, и эта задача идеально решается (пусть *****кодом, глюками, но быстро).
я считаю надо дать человеку сначала что-то сделать, чтобы как можно быстрее была обратная связь, а потом уже он пусть решает, его это или не его. если его и ему хочется вкурить во все это дело - пожалуйста, пусть все детально изучает и будет мощным спецом. большинству же "компьютерщиков" (в т.ч. программистов) этого и не надо.
согласен полностью:) только ведь у кого какая стратегия... многих это почему-то устраивает (и это можно понять, когда бабки интересуют в первую очередь).
Ну я ж и говорю- устраивает в начале, когда индусы-аутсорсеры предлагают свои услуги. А когда потом считаются затраты на поддержку/переделывание- это не нравится, но уже ничего не сделаешь.
http://insidecpp.ru/antipatterns/lava_flow/
Я специально, раз ты решил сделать из этого бага большую проблему, поизучал, как он проявляется.
Он проявляется только в экзотических случаях, когда некто специально желает проверить бейсик на предмет безглючности и сравнивает значения заведомо тождественных выражений. Если присвоить 0.5 и 1/2 переменным и потом их сравнить - результат будет правильный. Поэтому можно обоснованно считать, что этот баг практических препятствий к написанию программ на бейсике не представляет и в реальных (не надуманных) условиях не проявляется. В частности, я ни разу сам на него не напоролся, программируя на спектрумовском бейсике, да и о том, чтобы кто-то напоролся - тоже не слышал. А даже если это когда-то с кем-то произошло - то последствия заведомо не превышали последствия от глюка собственной программы на ассемблере.
Те, кто нашел этот глюк первыми (Ян Логан и Френк о хара) - они его нашли не случайно напоровшись, а детально анализируя код бейсика.
А чего ты ждешь от новичка, "Лучшей игры-2011" что ли?
Мой сапер отрабатывает нажатие клавиши "открыть квадрат" менее, чем за секунду. Собственно, там и делать-то ничего не надо, откуда взяться тормозам? А даже если программа тратит 2-3 секунды - то от этого играбельность "сапера" не зависит, так как человек тратит большее время на обдумывание следующего хода.
Так что, по кусочкам пишешь программу, а потом сидишь и сравниваешь, правильно ли ассемблер ее компилировал? А потом еще раз, скомпилировал ли он правильно всю программу, потому что ведь по кусочкам могло сработать правильно, а всю - с ошибкой.
Посмотри дизассемблер ПЗУ от Логана и О'Хары - какого размера там подпрограмма RST 16. Своя программа, конечно, может быть и короче, но добрых 100 строк она может занять в зависимости от функциональности.
А какие критерии? Где определено, что такое "заигрываться с регистрами"? И что, тогда точно не будет порчи памяти?
PRINT AT x,y;c$. Причем обращаю внимание: обращение к переменным x и y - это прямая (абсолютная), а не косвенная адресация. Неверные или даже специально злоумышленно подобранные значения переменных не могут привести к порче программы или ее данных. Теперь твой ход. Пожалуйста то же самое, без косвенной адресации, на ассемблере.
Собственно говоря, на бейсике нет необходимости решение указанной задачи реализовывать в виде подпрограммы, поскольку задача решается одной командой. Поэтому вместо присвоения переменным значений и вызова подпрограммы целесообразнее просто подставить команду PRINT AT в то место программы, где нужно вывести символ.
Тут явно тебе надо учиться, а не мне, поскольку именно ты демонстрируешь неправильное понимание этого термина (или намеренно употребляешь его неправильно в надежде, что остальные не разберутся). А доказательств ты не предъявил, так и запишем. Попытался стрелки перевести, не вышло.
Погроммистом я себя никогда не называл. Это твои домыслы. Что это за жаргон? "Погроммист", "напейсать"? Ты часом не антисемит?
Мы вроде говорили о более-менее ощутимых результатах от выполнения этих команд. А от "колонки свежевыученных" вряд ли даже буква на экране появится.
Я усмотрел из твоих ответов другим пользователям, что речь шла о некой прошивке "Турбо-90". Ну-ну. Только как после этого твой компьютер можно назвать Спектрумом, если быть столь же придирчивым в этом вопросе, как ты в вопросе о CP/M?
Ты стрелки-то не переводи. От того, могу ли я привести корову, не должна зависеть твоя способность доказать свои слова, что сможешь с ней справиться. Так что, если собираешься доказывать - проблема поиска коровы и учебника ложится тоже на тебя.
Это ты привел пример непосредственной адресации, когда обрабатываемая информация присутствует в самой команде. Пример на ассемблере - XOR 3. На бейсике аналогом непосредственной адресации является использование констант, вроде тех, что в твоем примере.
Когда же вместо обрабатываемой информации в команде присутствует ее адрес - то такая адресация называется прямой, или абсолютной. Пример на ассемблере - LD (VarX),A где VarX - константа. Тут адрес назначения (но не обрабатываемая информация) присутствует в самой команде. Аналог бейсика - LET x=a. В обоих случаях кроме переменной VarX, другая информация в памяти не может быть затронута.
А косвенная адресация - это, как я уже говрил, LD (HL),A. Без такой адресации в ассемблере немыслимо создание сколько-нибудь сложных программ, но именно эта адресация является самой "опасной", так как в случае неверного (по ошибке или умышленно) значения HL любая область памяти может быть испорчена (по меньшей мере, в пределах подключенных в данный момент страниц).
Да нет, потенциальная порча текста программы и данных в произвольном месте никуда не ушла с приходом эмуляторов. Похожие проблемы имели бы место на бейсике, если бы там неаккуратная работа с переменными приводила бы к порче текста программы.
Данный прием тоже не снимает проблемы порчи текста программы и данных в произвольном месте.
Вот пускай и пишет, бейсик в помощь. Моя первая игрушка (называлась "Устный счет") использовала умножение. С теми знаниями, которыми я тогда обладал (еще не выучил ни циклов, ни GOSUB) на ассемблере такое бы не получилось. И вообще ничего бы не получилось, никакой игры. А у меня получилась игра. Простая, примитивная, но своя.
Ты привел отдельно взятое сложение вне контекста какой-либо игрушки, если что.
В программах на бейсике одиночные и даже в коротких циклах сложения не представляют никаких проблем. Взять тот же "Сапер". Ну не всегда нужна скорость. Иногда человек является фактором, делающим быстродействие излишним. Поиграй-ка в Sea Dragon на уровне Admiral :)
На бейсике тоже надо, но еще до такого изучения человек может уже быть в состоянии написать свою игру на бейсике. То же касается ПМК, между прочим. Функции ввода и вывода тебе на нем чай не приходилось самому реализовывать.
Да не всем, в том-то и дело! Не каждый может даже "какашечную" игру на бейсике или еще чем-то написать. Этому надо учиться. Долго и постепенно.
А много ли из этого кода используется в твоих программах последних лет?
Не сразу. Он может многое дать прежде, чем станет ненужным.
Странный способ. От его применения мне (да и остальным скорее всего) не стало ясно, что же я должен был увидеть.
Не волнуйся, не разочарует. Альпинисты начинающие ведь тоже на Эверест сразу не лазают. Начинают с мест попроще, и радости от покорения таких "невысоких" вершин у них не меньше. Потому что одно дело - когда кто-то, а другое дело - когда сам.
Ну вот, ты признал, что косинусы в играх на Спектруме все же встречаются. Почему тогда, с твоей точки зрения, является бесполезным их изучение?
Кроме того, вычислять косинусы не всегда нужно во время работы игры (или демы), иногда их можно вычислить заранее и хранить в таблице. Так вот, а как и на чем готовить такую таблицу? Бейсик предоставляет отличную возможность для этого, поэтому изучение косинусов и арифметики вообще в бейсике может сослужить программисту хорошую службу.
Этот весь аргумент сводится к показыванию языка, которое ты совершил в конце фразы. Покажи мне на того, кто что-то делал и у кого нет неудачных проектов?
Тролль по следующим причинам. Если вывод сообщения на экран на ассемблере ты сводишь к одному вызову "CALL PRINT", то с тем же успехом написание всей игры можно свести к "CALL GAME"! Но то же можно и на бейсике, оператором RUN! Набрал - и сразу игра запускается! Вот, оказывается, как просто игры-то писать!
Ты хочешь меня лично оскорбить, назвав жертвой бейсика? Очень показательно, ведь я в твой адрес подобных саркастических замечаний не отпускал. Но переход на личности - это верный признак отсутствия аргументов по существу :)
"Отлаженные нормальные процедуры" надо сначала написать, а делать это приходится для всех, даже самых элементарных задач, вроде ввода и вывода. В бейсике хотя бы эти задачи уже решены средствами языка. Во-вторых, даже самые красивые и отлаженные процедуры библиотечного качества - даже они иногда могут привести к сбою и потере информации в случае редко проявляющего себя глюка или неправильного использования. Поэтому полностью абстрагироваться от процедур в любом проекте не получится. Бейсик позволяет не писать и не отлаживать те процедуры, которые реализованы встроенными в него средствами. В этом его сила.
А написанию игр это помогает? Или просто с косинусами не бегать помогает? Как эта твоя фраза относится вообще к теме? Опять аргумент в стиле "показать язык"?
Попытка оскорбления вновь свидетельствует об отсутствии аргументов. А далее по тексту ты признаешь, что уверенности нет, что вредные привычки не будут сформированы программированием на ассемблере вместо бейсика. Имеешь лишь надежду. Ну вот и отлично. Что и требовалось доказать.
Аргумент в стиле: "сам дурак". По существу ответить нечего? Предлагаешь начать обучение программированию с написания длинных программ, вместо коротких?
Ты, наверно, чрезмерно (может быть принципиально) пренебрегал бейсиком, чтобы считать, что UDG-графика - это единственное, что на нем можно сделать. Уверяю тебя, это не так. Расширь свой кругозор.
---------- Post added at 23:12 ---------- Previous post was at 22:46 ----------
Не дави, здесь ему есть что показать. Сделал более быстрый движок, чем авторский, для отображения ландшафта в игре Sea Dragon. Это более чем достойно уважения.
Я сам особо не писал игры, однако имею некоторый опыт программирования на Бейсике, Паскале и Ассемблере. В основном решал насущные прикладные задачи.
Однако если бы взялся писать игру, держался бы следующей концепции.
1. Задумка, сюжет, основная идея.
2. Графика.
3. Движок, если графика будет в игре подвижная.
4. Логика (искусственный интеллект).
5. Интерфейс.
От первого пункта зависит очень многое, наверное 80% успеха. Ведь даже при бедной графике, но при хорошей задумке можно получить шедевр!!! Но, возможно, для пробы пера игра должна быть простой и неизащренной в плане сюжета.
Графика обычно создается при помощи какого-либо графического редактора, например для Спектрума, это может быть Артстудио. Вполне можно разрисовать экраны, здесь же прикинут объем ОЗУ под это дело, предусмотреть архивацию. Если будет подвижная графика, прорисовать спрайты.
Для движения спрайтов необходим движок, его лучше писать на Ассемблере, но, в принципе, можно даже на Бейсике. Есть специализированный для этих целей Бейсик, так называемый Лазер Бейсик.
Логику можно писать на чем угодно - это уже не так принципиально.
Но вообще для Спектрума лучше всего использовать Ассемблер, так как это позволит более полно использовать возможности машины.
В школе ребята успешно писали экономические стротегии на обычном штатном бейсике. Игры были довольно играбельны. Но из всего перечисленного там был только искусственный интеллект и интерфейс.
Странно, что они ленились использовать хотя бы стандартную графику пользователя для оформления...
Не тупи! СМЫСЛ команды - обращение к экрану, не к переменным!
Покажи-ка нам тут "прямое (абсолютное)" обращение К ЭКРАНУ
ГДЕ ты здесь увидел хотя бы НЕПОСРЕДСТВЕННО указанные КООРДИНАТЫ?
Именно сами значения, а не ССЫЛКИ на них через переменные, ась?
(уж молчу про реальный экранный адрес, чтоб не портить аналогию)
АДРЕС - это НЕ "обрабатываемая информация"
Непосредственным параметром в рамках аналогии может быть лишь явно заданный символ
Ё-моё :v2_dizzy_facepalm: Если ты считаешь "PRINT AT x,y;c$" аналогом прямой адресации, то поведай мне, в какую же из двух цифровых переменных ПРЯМО перешлется символьное значение c$ - в X, в Y, или в обе сразу? :v2_laugh: Или все же символ (или его образ) должен (в том или ином виде) попасть не в сами переменные, а в некую область памяти, КОСВЕННО адресуемую данными переменными?
Комментировать остаток не вижу смысла, пока азов не поймешь
более чем? для новичка - безусловно, но ведь он не новичок?
и что мы видим в том коде скроллера?
1. жесткая манипуляция со стеком
2. прога пишет в область самой себя (меняет адреса в опкодах)
3. все жесточайше раскранчено в памяти
и после этого он нам впаривает про какую-то структурность и правила хорошего тона в программировании? про ассемблер для новичков? про то, что у него все макросами сделано и проверяются границы, чтобы лишнего не записать?
толстый жирный троллище!
путаешь непосредственную и прямую адресацию. непосредственная - число, прямая - переменная, типа как Х.
говорю же, толстый жирный троллище!
Цитата:
Непосредственная адресация
В команде содержится НЕ АДРЕС операнда, а непосредственно САМ ОПЕРАНД.
Цитата:
Прямая адресация
АДРЕС указывается непосредственно в виде некоторого ЗНАЧЕНИЯ,
http://ru.wikipedia.org/wiki/Методы_адресацииЦитата:
Косвенная адресация
Адресный код команды в этом случае УКАЗЫВАЕТ адрес ячейки памяти, В КОТОРОЙ находится адрес операнда или команды.
Lethargeek, в вики-то правильно написано, а ты тупишь:)
Ну наконец-то ты соизволил почитать матчасть. В этом свете посмотри на свое предыдущее сообщение и найди, где ты ошибался.
Успокойся, не надо паники. Команда PRINT AT x,y;c$ не производит запись в переменные x и y и c$. Она производит считывание из этих переменных. Адресация (любая) применяется ведь не только для записи, но и для считывания, правильно? В ассемблере для этих целей используются команды вида LD A,(VarX).
Что же касается собственно печати на экран - то для программиста на бейсике неважно, как она реализуется. Печать может проходить не путем записи в экранную область, а путем вывода символов на принтер или на терминал. Программисту на бейсике не нужно заботиться о таких деталях реализации. Его изолирует от этих деталей слой абстракции, предоставляемый бейсиком.
В случае неправильных значений во всех трех указанных переменных максимум что может произойти плохого - это порча содержимого экрана. Но уж никак не порча программы или содержимого переменных.
Ты сейчас углубляешься в реализацию команды PRINT AT самим бейсиком. Но с точки зрения программиста на бейсике вся эта команда выполняется как одно целое. И последствия ее выполнения вполне четко ограничены, что никак не могут испортить программу или ее переменные. Мы с тобой знаем, что печать производится путем записи в экранную область, но начиная программировать на бейсике, нет необходимости даже понимать, что такое экранная область, как она устроена и где находится.
Если проводить аналогию с ассемблером - то допустим, мы выполняем команду LD (VarX),A. Эта команда использует прямую адресацию, поэтому не может изменить содержимое памяти где-либо, кроме адреса VarX. Но это только с точки зрения программиста данная команда выполняется как одно целое и имеет конкретные последствия. С точки зрения разработчика процессора, эта команда выполняется за много шагов. Сначала адрес VarX считывается из памяти и помещается во внутренний буферный регистр Z80 (MEMPTR), а потом во время записи в память процессор ставит на шину адреса содержимое этого регистра. То есть внутри процессора имеет место нечто, подобное косвенной адресации. Но для программиста это неважно до тех пор, пока процессор не вышел из строя.
Я надеюсь, ты не предлагаешь начинающим программистам на ассемблере изучать, как устроен процессор и как он выполняет "элементарные" команды?
Сам же понимаешь, что без всех этих трюков так быстро не получилось бы. Это высший пилотаж. Но это не исключает, что Lethargeek может писать на ассемблере и соблюдая хороший тон и пытаясь реализовать структурность средствами ассемблера. Хотя хорошую игру так тоже не напишешь. Медленно будет.
Молодец, хорошо подметил! Ведь если, программируя на ассемблере, пытаться соблюдать хороший стиль всеми этими способами - то будет медленно, и игра мирового класса все равно не получится.
---------- Post added at 13:56 ---------- Previous post was at 13:49 ----------
Кажется, тролли начинают сбегаться на огонек.
НЕТ. Это ТЫ "углубляешься в реализацию команды PRINT AT самим бейсиком". Я как раз рассматриваю ее "как одно целое". И вот в качестве единого целого на самом высоком уровне данная команда КОСВЕННО адресуется именно К ЭКРАНУ, а не к вспомогательным переменным. Повторяю: покажи мне, ГДЕ в команде "PRINT AT X,Y;c$" АДРЕС ЭКРАНА (я согласен даже "адресом" считать не реальный экранный адрес, а хотя бы координаты) указан в виде ЗНАЧЕНИЯ, а не ССЫЛОК на значение?
---------- Post added at 14:03 ---------- Previous post was at 13:58 ----------
Ты не поверишь, но в исходнике у меня сплошные макросы и короткие процедурки
ace210 не даст соврать ;)
Все равно получится лучше, чем на бейсике :v2_tong2:
---------- Post added at 14:08 ---------- Previous post was at 14:03 ----------
главно что косвенно ;)
Ты предлагаешь экран рассматривать как массив? Ну хорошо, пусть будет так. С этой точки зрения команда PRINT AT x,y действительно обращается к этому массиву с помощью аналога косвенной адресации.
Хорошо, я согласен на бейсике поставить ограничение на произвольность координат. Пусть координаты будут фиксированные. Произвольное сообщение можно напечатать в них на бейсике одной командой без использования каких-либо аналогов косвенной адресации. Попробуй составь для тех же целей на ассемблере приемлемых размеров программу без косвенной адресации.
А вот в этом можно усомниться. Откуда у тебя такая уверенность?
Рыбак рыбака видит издалека!
именно что!
ассемблер на спектруме наоборот поощряет писать так, как "не правильно" :)
нет в бейсике никаких ссылок! всюду подмены понятий!
AT 10,20 на псевдокоде можно было бы записать так:
LD BC,#0a14
а AT x,y так:
LD BC,(XY)
или
LD B,(Y)
LD C,(X)
где здесь косвенная адресация??? вижу только прямую. а вот для вывода буквы на экран тебе сразу же говорили, что без косвенной никак!
я-то поверю, только далеко не каждый опытный в них легко вкурит, вот это факт. но разговор был не о том.
Да хоть бы и произвольные :rolleyes: Если уж "гуру кодинга" так буквально-узко понимают косвенность адресации, давай так: я за пару дней напишу "безопасную" процедурку вывода заданного символа в произвольную позицию на экране без единой "косвенной" команды "LD (reg),reg/val" и распечатаю с ее помощью короткое сообщение. Вы тогда (вместе с psb, чтоб уж сразу двух (кен)гуру одним ударом) публично покаетесь, признаете мою правоту, поставите в подпись текст "Бейсик вреден. Начинать на Спектруме надо сразу же с ассемблера", и советовать всем будете то же самое. Ежели не справлюсь - сам публично покаюсь, посыплю голову пеплом и поставлю в подпись текст, что круче бейсика в мире нету. :p
Ну, согласны? Жду официальных ответов. :v2_devil:
Давайте просто на перегонки, один пишет фразу на экран на бейсике, другой на асме и кто быстрее.
да-да, а на уровне транзисторов вообще никакой адресации нет. не надо в крайности бросаться, да?
ну дайте и мне шмякнуть что-нибудь :)
Lethargeek, а я могу написать программу на ассемблере (любом менее более нормальном спековском ассемблере, думаю даже GENS прокатит), которая выводит надписть (правда фиксированную надпись и по фиксированным координатам) вообще без комманд LD!
upd:
даже два варианта, один немного читерский (так как там будет использоваться косвенно-регистровая адресация (не знаю точно как по-русски, в вики какая-то фигня написана; по англицки - register indirect)), второй - абсолютно без читов.