Лингвофорум

Уроки => Уроки по языкам => Тема начата: Alone Coder от октября 8, 2011, 00:50

Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 8, 2011, 00:50
Могу предложить уроки ассемблера для Z80.
Название: Ассемблер для Z80
Отправлено: RawonaM от октября 8, 2011, 09:54
Цитата: Alone Coder от октября  8, 2011, 00:50
Могу предложить уроки ассемблера для Z80.
Я за.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 8, 2011, 10:43
Цитата: Alone Coder от октября  8, 2011, 00:50
Могу предложить уроки ассемблера для Z80.
Я тоже за.

Но вы сферический ассемблер в вакууме будете описывать, или в контексте спектрума?

Второе было бы интереснее. Сам ассемблер, по моим впечатлениям, простой. Зато сложно заставить его работать на эмуляторе. Когда я игрался с эмулятором xspect, в конце концов, сделал через зад так: вывод z80asm перенаправлял через od и sed, чтобы сделать код через запятую, приписывал к бейсиковому файлу в массиве, а потом бейсиковый файл пропускал через zmakebas. Оно, конечно, работало, но... :-[

Offtop
Правда, потом я написал велосипед, который к любому файлу добавляет заголовок tap-формата и чексумму, но на этом мой интерес был иссяк, так что я даже не попробовал загружать таким образом ассемблерный код. На картинках работало.

Поэтому, пожалуйста, заодно описывайте, как все это запустить на эмуляторе, и хотя бы минимум дополнительной информации (в какую память можно писать, etc.). Или хотя бы ссылки давайте.
Название: Ассемблер для Z80
Отправлено: Leo от октября 8, 2011, 18:10
Цитата: Alone Coder от октября  8, 2011, 00:50
Могу предложить уроки ассемблера для Z80.

А Алгол60 сможете ?
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 8, 2011, 22:23
Цитата: Demetrius от октября  8, 2011, 10:43
Второе было бы интереснее. Сам ассемблер, по моим впечатлениям, простой. Зато сложно заставить его работать на эмуляторе. Когда я игрался с эмулятором xspect, в конце концов, сделал через зад так: вывод z80asm перенаправлял через od и sed, чтобы сделать код через запятую, приписывал к бейсиковому файлу в массиве, а потом бейсиковый файл пропускал через zmakebas. Оно, конечно, работало, но...
Я использую Alasm. Он нативный. И под него есть автоматические сшивалки и куча выложенных сорцов.
Для кросс-разработки обычно юзают SjASMPlus, под него разные сшивалки тоже написаны.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 8, 2011, 23:16
Цитата: Alone Coder от октября  8, 2011, 22:23
Я использую Alasm. Он нативный. И под него есть автоматические сшивалки и куча выложенных сорцов.
Я пока что с TR-DOS не разбирался, я только касеты эмулирую. :-[

Формат TAP, кстати, мне понравился. Никаких сшивалок не нужно, достаточно банальной конкатенации двух файлов.

Ну а готовые исходники мне не нужны, у меня же цель не что-то написать, а побаловаться для себя.

ЦитироватьДля кросс-разработки обычно юзают SjASMPlus, под него разные сшивалки тоже написаны.
Гм. Я попробую (сейчас не могу, ибо с телефона), но, IMHO, «встроенный язык Lua» и «многофайловый вывод» в ассемблере—это вопиющее преступление против Unix-way'а.

Такое впечатление, что разработчики включили туда еще и функции make/ant-подобных программ. :no:




Кстати, я не понял, sla и srl сдвигают только по 1 биту, или как?

z80asm спокойно скомпилировал строки srl a, 5 и sla a, 5, но оно не работало. Заменил пятью вызовали srl a и sla a—стало работать нормально. :what:
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 8, 2011, 23:33
Цитата: Demetrius от октября  8, 2011, 23:16
Кстати, я не понял, sla и srl сдвигают только по 1 биту, или как?
По 1 биту.
Кстати, sla a не нужно, есть же add a,a.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 8, 2011, 23:52
Цитата: Alone Coder от октября  8, 2011, 23:33
Цитата: Demetrius от октября  8, 2011, 23:16
Кстати, я не понял, sla и srl сдвигают только по 1 биту, или как?
По 1 биту.
А, понял. Это ошибка z80asm. Он sla a и sla a, 5 компилирует в одно и то же. Да, надо брать другой ассемблер. :srch:

ЦитироватьКстати, sla a не нужно, есть же add a,a.
Действительно, вдвое короче. :what:

Вообще, я все это нагородил, чтобы умножить a на 32 и сложить его с hl. Я сделал h += a >> 2, l += a << 5 (а также добавил jp c, icrease_h на случай переполнения). Как это лучше сделать?
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 9, 2011, 00:00
Если a=0..7, то
rrca
rrca
rrca
add a,l
ld l,a
adc a,h
sub l
ld h,a
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 9, 2011, 00:06
Цитата: Alone Coder от октября  9, 2011, 00:00
Если a=0..7, то...
Я помедитирую над этим кодом, но он у меня не подойдет. По hl хранится шрифт с иероглифами, а их будет где-то штук 30.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 9, 2011, 00:22
Цитата: Alone Coder от октября  9, 2011, 00:00
adc a,h
sub l
ld h,a
Элегантно-то как. :what: Занимают столько же, сколько один jp c, label.


Думаю, я могу обойтись и без этих трех байтов, если выравнять адрес в hl по 32-битной границе... :what:
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 9, 2011, 00:36
Цитата: Demetrius от октября  9, 2011, 00:06
По hl хранится шрифт с иероглифами, а их будет где-то штук 30.
Тогда
ex de,hl
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,de
Название: Ассемблер для Z80
Отправлено: Bhudh от октября 9, 2011, 01:29
Чё-т я не поел. Уроки по асму прям здесь начались?
Название: Ассемблер для Z80
Отправлено: Тайльнемер от октября 10, 2011, 12:54
Цитата: Alone Coder от октября  9, 2011, 00:36
Цитата: Demetrius от октября  9, 2011, 00:06
По hl хранится шрифт с иероглифами, а их будет где-то штук 30.
Тогда
ex de,hl
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,de
А если так:
add a,a
add a,a
add a,a
ex de,hl
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,de
Название: Ассемблер для Z80
Отправлено: Triton от октября 10, 2011, 12:55
Ностальгия...
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 10, 2011, 15:21
Цитата: Bhudh от октября  9, 2011, 01:29
Чё-т я не поел. Уроки по асму прям здесь начались?
Не уроки, а вопросы, десу же.
Название: Ассемблер для Z80
Отправлено: Drundia от октября 10, 2011, 15:35
Ух, давайте игры писать под эмуляторы  :D
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 10, 2011, 15:51
Цитата: Drundia от октября 10, 2011, 15:35
Ух, давайте игры писать под эмуляторы  :D
Почему нет? Давайте напишем игру «Лехослав против фриков»! ;D

Но мне до игр далеко. Я пока что хочу написать программу, которой вводишь время, а она выводит его чтение на кантонском иероглифами. Типа вводишь «10:20», а она выдаёт «sahp dím sei go jih», вводишь «10:21» — выдаёт «sahp dím yih-sahp yāt fān».

Offtop
Кроме того, мне ещё нужно доделать свою игру для мобильных телефонов. Мне там немного осталось, но лень...
Название: Ассемблер для Z80
Отправлено: RawonaM от октября 10, 2011, 15:58
Цитата: Demetrius от октября 10, 2011, 15:51
Но мне до игр далеко. Я пока что хочу написать программу, которой вводишь время, а она выводит его чтение на кантонском иероглифами. Типа вводишь «10:20», а она выдаёт «sahp dím sei go jih», вводишь «10:21» — выдаёт «sahp dím yih-sahp yāt fān».
Это очень просто. Когда напишите, дайте мне код, я добавлю в бот считающий до миллиона, будет на кантонском тоже считать.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 10, 2011, 16:46
Цитата: RawonaM от октября 10, 2011, 15:58
Цитата: Demetrius от октября 10, 2011, 15:51
Но мне до игр далеко. Я пока что хочу написать программу, которой вводишь время, а она выводит его чтение на кантонском иероглифами. Типа вводишь «10:20», а она выдаёт «sahp dím sei go jih», вводишь «10:21» — выдаёт «sahp dím yih-sahp yāt fān».
Это очень просто.
Ага, Вам может и просто, а мне интересно поразбираться, как там с экраном, с клавиатурой работать, etc.

Меня один этот их экран добивает. Сначала записывается первая строка экрана, потом восьмая, потом шестнадцатая...  :uzhos: Я понимаю, зачем так сделали, но от того не легче.

ЦитироватьКогда напишите, дайте мне код, я добавлю в бот считающий до миллиона, будет на кантонском тоже считать.
Там счёт нужен только до 60, там основной прикол в других единицах (Вы заметили, что «10:20» — «sahp dím sei go jih» (10 часов 4 пятиминутки), вводишь «10:21» — выдаёт «sahp dím yih-sahp yāt fān» (десять часов 21 минута)?

Может, Вам для бота проще на яваскрипте? Вот, я побыстрому наваял, во вложении. Впрочем, пока что не вставляйте в бота, мне ещё надо с грамматическим справочником сверится. Если честно, я с такими большими числами не очень дружу...
Название: Ассемблер для Z80
Отправлено: jvarg от октября 10, 2011, 17:04
Батя как-то откуда-то притащил "Атари".

Всего с одной кассетой в качестве ПО.

Пришлось осваивать ассемблер, и самому писать программы. Научился.

Заодно и польский язык освоил по журналу "байтек" (у них "атари" был как у нас спектрум).
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 10, 2011, 17:52
Название: Ассемблер для Z80
Отправлено: orang_baik от октября 10, 2011, 17:58
Для чего в жизни может пригодиться этот ассемблер? Или просто для развлечения?
Название: Ассемблер для Z80
Отправлено: jvarg от октября 10, 2011, 18:06
Цитата: orang_baik от октября 10, 2011, 17:58
Для чего в жизни может пригодиться этот ассемблер? Или просто для развлечения?

Для развития логического мышления.
Название: Ассемблер для Z80
Отправлено: orang_baik от октября 10, 2011, 18:07
Цитата: jvarg от октября 10, 2011, 18:06
Цитата: orang_baik от октября 10, 2011, 17:58
Для чего в жизни может пригодиться этот ассемблер? Или просто для развлечения?

Для развития логического мышления.
Он чем-то принципиально отличается от ассемблеров для других процессоров? Я просто не в курсе?
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 10, 2011, 18:10
Там 28 регистров, и все они неравноправны. Так что можно жонглировать ими долго, пока не найдёшь самое эффективное решение.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 10, 2011, 18:16
Цитата: orang_baik от октября 10, 2011, 18:07
Цитата: jvarg от октября 10, 2011, 18:06
Цитата: orang_baik от октября 10, 2011, 17:58
Для чего в жизни может пригодиться этот ассемблер? Или просто для развлечения?

Для развития логического мышления.
Он чем-то принципиально отличается от ассемблеров для других процессоров? Я просто не в курсе?

Нет, я говорил о полезности ассемблеров вообще.
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 10, 2011, 20:31
Цитата: orang_baik от октября 10, 2011, 17:58
Для чего в жизни может пригодиться этот ассемблер? Или просто для развлечения?
Для развлечения. Вообще, сфера применения ассемблера очень мала... :'(
Название: Ассемблер для Z80
Отправлено: sasza от октября 10, 2011, 21:45
Цитата: orang_baik от октября 10, 2011, 18:07
Он чем-то принципиально отличается от ассемблеров для других процессоров? Я просто не в курсе?
От ассемблера 8080 отличается мнемоникой и расширенным набором команд.

В начале 90-х, когда спаял Синклер, купил книжку по ассемблеру для Z80 (в мягкой обложке). Пользовался, по-моему, Zeus-ом и ещё каким-то ассемблером, поддерживающим макросы. Самое крупное, что написал - игрушку Минёр. Правда, использовал чью-то оконную библиотеку (там и менюшки красивые были, и мышиный курсор). Вышло в районе 2  KB, и работал шустрее, чем виндовский на 386-м.
Название: Ассемблер для Z80
Отправлено: maristo от октября 10, 2011, 21:53
Цитироватьработал шустрее, чем виндовский на 386-м.

Конечно быстрее, без винды ведь. :D
Название: Ассемблер для Z80
Отправлено: arseniiv от октября 10, 2011, 22:04
Offtop
Demetri, игра «Ліхозлав против фриков»? А что! Может, кто-то захочет вообще любую игру по ЛФ сделать? Правда, я не умею рендерить даже 2D. Картинки могу рисовать в GIMPе. Музыку писать. Времени только мало.
Название: Ассемблер для Z80
Отправлено: Triton от октября 11, 2011, 05:32
Цитата: Alone Coder от октября 10, 2011, 18:10
Там 28 регистров, и все они неравноправны. Так что можно жонглировать ими долго, пока не найдёшь самое эффективное решение.
:fp:
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 11, 2011, 10:08
Цитата: RawonaM от октября 10, 2011, 15:58
Когда напишите, дайте мне код, я добавлю в бот считающий до миллиона, будет на кантонском тоже считать.
Вот готовый счёт на кантонском на JavaScript. Там была только ошибка с léuhng, теперь всё в порядке. Могу ещё иероглифами сделать, но тогда это будет просто китайский, а не кантонский. ;D

Этот код всегда использует полные формы (тридцать будет sāam-sahp, а не sā'ah). Потом можно будет сделать и с редуцированными, но я не уверен относительно их(как редуцировать 50? Ńg'ah?)
Название: Ассемблер для Z80
Отправлено: Bhudh от октября 11, 2011, 10:25
Цитироватьspan.rigth
Штоэта?
Название: Ассемблер для Z80
Отправлено: RawonaM от октября 11, 2011, 10:46
Цитата: Demetrius от октября 11, 2011, 10:08
Вот готовый счёт на кантонском на JavaScript.
Добавил :)
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 11, 2011, 19:53
Цитата: Bhudh от октября 11, 2011, 10:25
Цитироватьspan.rigth
Штоэта?
Все теги span с классом right (то есть <span class="right"). По-хорошему, right здесь избыточен, так как у меня только два объекта span и оба с классом right.

У span'ов нет никакой семантики (кроме того, что это текстовый объект; в этом плане они противопоставлены div'ам, единственная семантика которых—то, что это блочный объект), поэтому они идеально подходят для оформлений, которые не несут никакой смысловой нагрузки.

Цитата: RawonaM от октября 11, 2011, 10:46
Цитата: Demetrius от октября 11, 2011, 10:08
Вот готовый счёт на кантонском на JavaScript.
Добавил :)
Спасибо. :yes:
Название: Ассемблер для Z80
Отправлено: Bhudh от октября 11, 2011, 22:36
Цитата: Demetrius от Все теги span с классом right (то есть <span class="right"). По-хорошему, right здесь избыточен, так как у меня только два объекта span и оба с классом right.
Цитата: Bhudh от
Цитироватьspan.rigth
Название: Ассемблер для Z80
Отправлено: mnashe от октября 11, 2011, 23:10
Цитата: jvarg от октября 10, 2011, 18:16
Нет, я говорил о полезности ассемблеров вообще.
Посчитал, сколько строк на ассемблере в моей программе, которой я постоянно пользуюсь, — 38 тысяч, не считая .inc файлов.
Из них 10–15% написано было когда-то на паскале (не мной), а я оптимизировал результат работы дизассемблера.
Остальное я писал изначально на ассемблере.
Это ядро программы; остальное написано на макро-языке.
В компиляторе (этого макро-языка в байт-код) более 7 тысяч строк, но там оптимизированного дизассемблера почти столько же, сколько написанного изначально, а некоторая часть даже оставлена нетронутой.
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 12, 2011, 12:08
Цитата: mnashe от октября 11, 2011, 23:10
Посчитал, сколько строк на ассемблере в моей программе, которой я постоянно пользуюсь, — 38 тысяч, не считая .inc файлов.
Что она делает??? O.o
Название: Ассемблер для Z80
Отправлено: mnashe от октября 12, 2011, 12:15
Цитата: Alone Coder от октября 12, 2011, 12:08
Что она делает?
Основные функции: текстовый редактор и file-manager / оболочка к системе.
А вокруг этого очень много всякого.
Например, перевод дат из еврейского или григорианского календаря в номер дня и обратно — тоже функции на ассемблере. Программа-календарь, написанная на макро-языке, использует эти функции.
В общем, я фанат ассемблера.
Даже под Windows писал на ассемблере.
Название: Ассемблер для Z80
Отправлено: mnashe от октября 12, 2011, 12:24
Посчитал, сколько строк на макроязыке в основном пакете программы (не считая всяких отдельных специальных утилит и большой программы для школьного офиса).
42 тысячи.
Учитывая разницу в длине строк, это всё-таки намного больше, чем ассемблерное ядро программы.
Название: Ассемблер для Z80
Отправлено: Тайльнемер от октября 12, 2011, 12:31
Цитата: mnashe от октября 12, 2011, 12:15
Основные функции: текстовый редактор и file-manager / оболочка к системе.
А вокруг этого очень много всякого.
Например, перевод дат из еврейского или григорианского календаря в номер дня и обратно — тоже функции на ассемблере. Программа-календарь, написанная на макро-языке, использует эти функции.
А почему именно на ассемблере?
Название: Ассемблер для Z80
Отправлено: mnashe от октября 12, 2011, 12:51
Цитата: Тайльнемер от октября 12, 2011, 12:31
А почему именно на ассемблере?
Мой личный бзик. Даже два:

1. Мне тяжело начинать что-нибудь, я больше приспособлен для совершенствования имеющегося.
Мне дали программу Multi-Edit (1987 года), она мне понравилась, но почти никакой информации по ней не было, и мне хотелось её улучшить. Сначала я делал небольшие заплатки debug'ом (это очень легко — тогдашние компиляторы делали дико раздутый код); потом дизассемблировал целиком и стал переписывать и добавлять. Сейчас изначальный код составляет лишь незначительную часть программы.
Для байт-кода я тоже написал декомпилятор, так что получил «исходники» (без имён переменных, конечно) всех их макрей. Но нынешний байт-код уже давно несовместим со старым, тот был страшно неэффективен. Функций в нём было раз в 50 меньше, а места они занимали больше.

2. Мне нравится работать с мелкими деталями, оттачивать алгоритм и его реализацию на низком уровне.
В общем, и то, и то — очень по-девски ;)
Название: Ассемблер для Z80
Отправлено: Dana от октября 12, 2011, 15:12
Цитата: mnashe от октября 12, 2011, 12:15
В общем, я фанат ассемблера.
:+1:
:UU:
Название: Ассемблер для Z80
Отправлено: Тайльнемер от октября 12, 2011, 18:17
Так что? Будут уроки?
Название: Ассемблер для Z80
Отправлено: arseniiv от октября 12, 2011, 19:13
Цитата: Dana от октября 12, 2011, 15:12
:+1:
:UU:
:o Вы разорвали ((a:b:_) :+ (Just (l,_))).
Название: Ассемблер для Z80
Отправлено: jvarg от октября 12, 2011, 20:41
Цитата: Dana от октября 12, 2011, 15:12
Цитата: mnashe от октября 12, 2011, 12:15
В общем, я фанат ассемблера.
:+1:
:UU:

Дана, а вы ассемблер ни с чем другим не путаете?

Ваше горячее приветствие  ассемблера меня пугает...
Название: Ассемблер для Z80
Отправлено: Dana от октября 13, 2011, 03:49
Цитата: jvarg от октября 12, 2011, 20:41
Дана, а вы ассемблер ни с чем другим не путаете?

Ваше горячее приветствие  ассемблера меня пугает...
Нет, ассемблер тот самый.
Но только для архитектуры x86. О Z80 я вообще понятия не имею. Вот буду уроки, познакомлюсь.

А чем пугает?
Название: Ассемблер для Z80
Отправлено: Demetrius от октября 13, 2011, 10:00
Цитата: Bhudh от октября 11, 2011, 22:36
Цитата: Demetrius от Все теги span с классом right (то есть <span class="right"). По-хорошему, right здесь избыточен, так как у меня только два объекта span и оба с классом right.
Цитата: Bhudh от
Цитироватьspan.rigth
:donno:
Значит, это не нужно́ было, раз и без него работает.
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 21:48
Цитата: arseniiv от октября 12, 2011, 19:13
((a:b:_) :+ (Just (l,_))).
Мечтаю об асме с лисп-подобным синтаксисом. Правда, меня больше интересует либо x86, либо JVM.
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 13, 2011, 21:50
Цитата: Python от октября 13, 2011, 21:48
Мечтаю об асме с лисп-подобным синтаксисом.
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.
Название: Ассемблер для Z80
Отправлено: orang_baik от октября 13, 2011, 21:52
Цитата: Alone Coder от октября 13, 2011, 21:50
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.
Функции вызываются в произвольном порядке?
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 13, 2011, 21:52
В лиспе - да.
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 21:58
Цитата: Alone Coder от октября 13, 2011, 21:50
Цитата: Python от октября 13, 2011, 21:48
Мечтаю об асме с лисп-подобным синтаксисом.
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.
1) S-expressions пригодны для записи чего-угодно (в т.ч. и императивного языка с четким следованием команд). А вот лиспоидные макросы в ассемблере пригодились бы.
2) Команду можно рассматривать как функцию, получающую на входе старое состояние системы и возвращающую новое.
3) В известных мне диалектах лиспа присутствуют функции с побочным действием, последовательность выполнения которых при работе программы не изменяется произвольным образом.
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 13, 2011, 22:02
Цитата: Python от октября 13, 2011, 21:58
А вот лиспоидные макросы в ассемблере пригодились бы.
Приведите пример задачи.

Цитата: Python от октября 13, 2011, 21:58
Команду можно рассматривать как функцию, получающую на входе старое состояние системы и возвращающую новое.
Тогда программа будет выглядеть как (cmdN ... (cmd2 (cmd1state)))..). Удобно шопесец. Главное наглядно!
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 22:12
Цитата: Alone Coder от октября 13, 2011, 22:02
Тогда программа будет выглядеть как (cmdN ... (cmd2 (cmd1state)))..). Удобно шопесец. Главное наглядно!
Ну зачем так грубо? Можно ведь и (reduce #(apply %2 %1) state [cmd1 cmd2 cmd3 ... cmdN])
Название: Ассемблер для Z80
Отправлено: mnashe от октября 13, 2011, 22:24
Цитата: Dana от октября 13, 2011, 03:49
Но только для архитектуры x86. О Z80 я вообще понятия не имею.
:+1:
Ещё я в своё время знакомился с ассемблером для PDP-11 (кажется,  так оно называлось), у меня даже сохранилась тетрадка, куда я это переписывал; но воспользоваться не довелось: я вскоре уехал оттуда, а вся эта платформа потеряла актуальность.
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 22:47
Цитата: Alone Coder от октября 13, 2011, 22:02
Цитата: Python от октября 13, 2011, 21:58
А вот лиспоидные макросы в ассемблере пригодились бы.
Приведите пример задачи.
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 13, 2011, 22:55
Цитата: Python от октября 13, 2011, 22:47
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
Это делается и на обычных макросах, только это жирные макросы. Влом писать. Особенно если учесть, что это не нужно. В асме параметры передают в регистрах, а не через стек.
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 23:00
Цитата: Alone Coder от октября 13, 2011, 22:55
Цитата: Python от октября 13, 2011, 22:47
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
Это делается и на обычных макросах, только это жирные макросы. Влом писать. Особенно если учесть, что это не нужно. В асме параметры передают в регистрах, а не через стек.
Почему же, из асма можно вызвать функцию из сишной библиотеки, которой аргументы передаются описанным выше способом. Если оформить это в виде макроса, то лучше и не начинать — получится что-то жирное и глючное.
Название: Ассемблер для Z80
Отправлено: arseniiv от октября 13, 2011, 23:02
А у меня был не Лисп.
Название: Ассемблер для Z80
Отправлено: Python от октября 13, 2011, 23:29
Цитата: arseniiv от октября 13, 2011, 23:02
А у меня был не Лисп.
Знаю. Но такое скопление скобок невольно вызывает мысли...
Название: Ассемблер для Z80
Отправлено: Тайльнемер от октября 14, 2011, 04:58
Цитата: Python от октября 13, 2011, 21:48
Мечтаю об асме с лисп-подобным синтаксисом.
(wiki/en) Lisp_machine (http://en.wikipedia.org/wiki/Lisp_machine)
Название: Ассемблер для Z80
Отправлено: Python от октября 14, 2011, 05:57
Цитата: Тайльнемер от октября 14, 2011, 04:58
Цитата: Python от октября 13, 2011, 21:48
Мечтаю об асме с лисп-подобным синтаксисом.
(wiki/en) Lisp_machine (http://en.wikipedia.org/wiki/Lisp_machine)
Вымерли в 80-х :(
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 11:47
Цитата: Python от октября 13, 2011, 22:47
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние.
Угу, только это лишние байты, что при тогдашних объемах памяти и быстродействии имело огромное значение.

Для тогдашних маленьких машин были и компиляторы высокоуровневых языков, однако именно потому для создания практических программ и использовался, в основном, ассемблер, что он позволял сократить объем программы даже на таких мелочах, как передача параметров через стек.
Название: Ассемблер для Z80
Отправлено: Python от октября 14, 2011, 13:42
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 16:25
Цитата: Python от октября 14, 2011, 13:42
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.
Смотря для какой архитектуры.

У вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве. У Z80, ЕМНИП, тоже. Так что вывод на внешнее устройство ничем не отличался от обычной записи данных в память.

Когда через порты, или прерывания - тогда да, на ассемблере - геморно.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 16:37
Цитата: Alone Coder от октября 10, 2011, 18:10
Там 28 регистров, и все они неравноправны. Так что можно жонглировать ими долго, пока не найдёшь самое эффективное решение.
Кстати, для быстрого обучения ассемблеру это не всегда плюс. У меня самый большой практический опыт программирования на АСМ для Атари. Там был вообще, фактически, один регистр, и ничего.
Название: Ассемблер для Z80
Отправлено: Python от октября 14, 2011, 16:47
ЦитироватьУ вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве. У Z80, ЕМНИП, тоже. Так что вывод на внешнее устройство ничем не отличался от обычной записи данных в память.
Т.е., аналога обычных функций ввода/вывода не было вообще? В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 17:21
Цитата: Python от октября 14, 2011, 16:47
Т.е., аналога обычных функций ввода/вывода не было вообще?
В PDP-11 и моем Атари - нет. Даже команд процессора типа IN и OUT не было. Просто, к примеру, каждый символ или пиксель экрана соответсвует байтику в определенной области памяти. Что бы вывести символ (в текстовом режиме), нужно просто записать его код по нужному адресу. В графическом режиме аналогично с пикселями.

Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 17:26
Цитата: Python от октября 14, 2011, 16:47
В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
Ну так ДОС этим косил под Юникс. А вообще там тоже без проблем через память адресовалось, только Майкрософт этого категорически не рекомендовал делать.
Название: Ассемблер для Z80
Отправлено: sasza от октября 14, 2011, 17:32
Просто такова была реализация конкретных компьютеров. В Синклере под видеопамять тоже использовалось около 7 КБ общего адресного пространства, но это совсем не значит, что у Z80 нет команд ввода/вывода.
Название: Ассемблер для Z80
Отправлено: RawonaM от октября 14, 2011, 17:33
Цитата: jvarg от октября 14, 2011, 17:21
Цитата: Python от октября 14, 2011, 16:47Т.е., аналога обычных функций ввода/вывода не было вообще?
В PDP-11 и моем Атари - нет. Даже команд процессора типа IN и OUT не было. Просто, к примеру, каждый символ или пиксель экрана соответсвует байтику в определенной области памяти. Что бы вывести символ (в текстовом режиме), нужно просто записать его код по нужному адресу. В графическом режиме аналогично с пикселями.
В ДОСе на х86 точно так же доступна графическая память через общее пространство. Ничего особистого в этом нет.
Название: Ассемблер для Z80
Отправлено: RawonaM от октября 14, 2011, 17:35
Цитата: jvarg от октября 14, 2011, 17:21
Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Собственно, не понял как это упрощает. Может я недопонял о чем речь.
Название: Ассемблер для Z80
Отправлено: Python от октября 14, 2011, 17:35
Цитата: jvarg от октября 14, 2011, 17:26
Цитата: Python от октября 14, 2011, 16:47
В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
Ну так ДОС этим косил под Юникс. А вообще там тоже без проблем через память адресовалось, только Майкрософт этого категорически не рекомендовал делать.
Это имеет смысл не во всех случаях. Во многих случаях удобнее работать с потоками, которые можно перенаправлять в файл или другое устройство вывода. С видеобуфером экрана это уже сложнее сделать.
Название: Ассемблер для Z80
Отправлено: mnashe от октября 14, 2011, 17:43
Цитата: jvarg от октября 14, 2011, 17:21
В PDP-11 и моем Атари - нет. Даже команд процессора типа IN и OUT не было. Просто, к примеру, каждый символ или пиксель экрана соответсвует байтику в определенной области памяти. Что бы вывести символ (в текстовом режиме), нужно просто записать его код по нужному адресу. В графическом режиме аналогично с пикселями.
То же самое с экранной памятью на PC. Но на PDP-11 этот принцип распространялся гораздо шире. Там и слова состояния устройств имели адрес в памяти, не говоря уже о данных устройств ввода-вывода. Удобнее.

Цитата: jvarg от октября 14, 2011, 17:21
Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Об этом тогда не думали: слишком дорогой была память.
Сколько неудобств доставило потом это расточительство... Фактически, я до сих пор от него страдаю. Переписывать всю свою программу под Windows мне некогда; думал переписать её под XMS, но и на это времени не нашёл. В итоге приходится ютиться в 500–600 kB ОЗУ, имея в компьютере в 3000 раз больше!
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 17:47
Цитата: Python от октября 14, 2011, 17:35
Это имеет смысл не во всех случаях.
Разумеется. Но потоковый ввод-вывод это уже функция операционки, а на первых микрокомпьютерах программы, чаще всего, работали с устройствами напрямую.

Поэтому там было два выхода (зависело от аппаратной части, а не от всяких там ДОСов и т.д.) :
1) Устройства отображаются на адресное пространство;
2) Устройства работают через порты.

В первом случае легко программировать, но меньше оперативной памяти остается под саму программу. Во втором случае, соответственно - наоборот.

Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 17:55
Цитата: RawonaM от октября 14, 2011, 17:35
Цитата: jvarg от октября 14, 2011, 17:21
Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Собственно, не понял как это упрощает. Может я недопонял о чем речь.
Это упрощает именно на ассемблере. Что бы вывести строку на экран, нужно просто скопировать область памяти с исходной строкой в экранную область. Если это делать через порты - это уже куда сложней.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 14, 2011, 17:57
Цитата: sasza от октября 14, 2011, 17:32
Просто такова была реализация конкретных компьютеров.

Так я и написал в ответ на это:

Цитата: Python от октября 14, 2011, 13:42
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.

Вот это:

Цитата: jvarg от октября 14, 2011, 16:25
Смотря для какой архитектуры.

Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 14, 2011, 22:56
Цитата: jvarg от октября 14, 2011, 16:25
У вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве. У Z80, ЕМНИП, тоже.
У Z80 команды IN, OUT, INI, OUTI, INIR, OTIR.
А для извращенцев ещё IND, OUTD, INDR, OTDR.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 15, 2011, 06:38
Да, насчет Z80 я ошибся. Но я там написал ЕМНИП.
Название: Ассемблер для Z80
Отправлено: jvarg от октября 16, 2011, 18:04
Цитата: Alone Coder от октября 14, 2011, 22:56
А для извращенцев ещё IND, OUTD, INDR, OTD
Я теперь даже знаю имя этих извращенцев :)
Название: Ассемблер для Z80
Отправлено: mnashe от октября 16, 2011, 21:52
Ассемблер vs. оптимизирующие компиляторы (http://lingvoforum.net/index.php/topic,39562.0.html)
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 16, 2011, 21:58
Самой грамотной системой на Z80 мне кажется MSX. Там прерывания снимаются вручную чтением порта устройства, так что прерываний может быть неограниченное количество при отсутствии контроллера прерываний как такового (в Z80 его нет).
К тому же, на MSX есть 4 окна проецирования памяти по 16 КБ (в Z80 нет сегментов). Из Спектрумов такое только на ATM Turbo 2 и ZX Evolution. Самая большая проблема на Z80 - работа с массивами больше 16 КБ. Можно, конечно, сделать хитрую обвязку, которая реализует сегментную адресацию (как на Спринтере).
Название: Ассемблер для Z80
Отправлено: sasza от октября 16, 2011, 22:52
Цитата: Alone Coder от октября 16, 2011, 21:58
Из Спектрумов такое только на ATM Turbo 2 и ZX Evolution.
Был ещё один подобный гибрид со страничной памятью - Profi. А ATM с дисководом и 512 КБ памяти я себе спаял, но в режиме CP/M почти не работал, так что эта память практически не использовалась.
Название: Ассемблер для Z80
Отправлено: Alone Coder от октября 16, 2011, 22:54
На Profi в окне 0 могла стоять только одна страница ОЗУ, в окнах 1 и 2 только по одной из двух возможных (для работы с расширенным экраном). На АТМ2 любые.
Название: Ассемблер для Z80
Отправлено: trilirium от апреля 2, 2012, 19:49
Цитата: jvarg от октября 14, 2011, 16:25
Цитата: Python от октября 14, 2011, 13:42
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.
Смотря для какой архитектуры.

У вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве.

Верно.

Цитата: jvarg от октября 14, 2011, 16:25У Z80, ЕМНИП, тоже. Так что вывод на внешнее устройство ничем не отличался от обычной записи данных в память.

Нет. В Z80 -- собственное пространство ввода-вывода, и нужны специальные инструкции (разные виды in и out).
Хотя технически -- шина адресов и данных одна и та же. И обмен с устройствами отличается от обмена с памятью только установкой какой-то линии на шине (кажется. IOREQ...)
Название: Ассемблер для Z80
Отправлено: Alone Coder от апреля 2, 2012, 20:10
/IORQ.
Название: Ассемблер для Z80
Отправлено: trilirium от апреля 2, 2012, 20:32
Цитата: Alone Coder от апреля  2, 2012, 20:10
/IORQ.

Ага, кажется так  ;)

(Впрочем, я только сейчас заметил, что тема мертва несколько месяцев. Похоже, обещанных уроков здесь так и не будет. А жаль!    :( :( )
Название: Ассемблер для Z80
Отправлено: Alone Coder от апреля 3, 2012, 18:46
Уроки были в ZX-Guide :)
Название: Ассемблер для Z80
Отправлено: trilirium от апреля 4, 2012, 11:21
А ZX-Guide -- это где? Можно ссылочку??

(Кстати, вообще, приятно удивлен, что здесь в принципе обсуждаются языки программирования. Возникло даже желание написать кое-что самому. ;)
Название: Ассемблер для Z80
Отправлено: isa_shi от апреля 22, 2014, 11:58
Offtop
Z-80 рулит!
Название: Ассемблер для Z80
Отправлено: Alone Coder от апреля 26, 2014, 13:26
Цитата: trilirium от апреля  4, 2012, 11:21
А ZX-Guide -- это где? Можно ссылочку??
http://zxdn.narod.ru/coding/zg14asmt.txt
Название: Ассемблер для Z80
Отправлено: Варя Красавец от апреля 27, 2014, 13:31
Цитата: Alone Coder от апреля 26, 2014, 13:26
Цитата: trilirium от апреля  4, 2012, 11:21
А ZX-Guide -- это где? Можно ссылочку??
http://zxdn.narod.ru/coding/zg14asmt.txt
Ой спасибочки!  :=