PDA

Просмотр полной версии : Пакет для i8080: WinAsm Studio + fasm g



shoorick
22.07.2016, 02:49
В продолжение темы (http://zx-pk.ru/threads/26144-assembler-dlya-8080.html)...

Предлагаю пакет для быстрой разработки приложений для ПК "Специалист" и всех остальных. :)

Пакет сразу же работоспособен после распаковки на диск С: , хотя я его все-таки урезал, удалив эмуляторы уменьшения размера для... (Подробности см. ниже). Т.е., после распаковки можно запустить внутри winasm.exe, нажать Ctrl+O, открыть проект с примером и его скомпилировать нажатием Ctrl+Enter и сразу же выполнить в подключенном эмуляторе, не забывая нажать G<Enter>. Для создания нового проекта можно нажать Ctrl+N, Нажать ОК и сразу же получить новый проект на шаблоне "хеловорлда".

Содержит:

WinAsm Studio (winasm.net)
Обычная IDE для ассемблера, отличается от других тем, что я ее допилил под fasm и под себя, поэтому другими не пользуюсь. :)
Имеет свои плюсы и минусы, неидеальна, но всех хотелок все равно никогда не реализуешь, зато имеет мощный механизм клепания проектов, шаблонов, и т.п., что удобно.
На сайте есть справки и по студии, и по моим надстройкам - всего здесь не опишешь.
fasm g (http://flatassembler.net)Эээ... Собственно, ассемблер... Но я бы сказал о нём так: это не просто ассемблер, а мощный генератор чего-либо бинарного, с внутренним языком, позволяющим писать ассемблеры. Т.е. синтаксис команд целевого ассемблера полностью описывается внешними макросами. Кроме того, имеет возможность обрабатывать полученные бинарные данные целиком и по частям, на чем, в частности, основаны разные фичи: вывод в формате intel hex, преобразование строк из ср1251 в кои-7, подсчет контрольной суммы для rks. Этим же механизмом можно в конце вообще из полученного файла сгенерировать WAV для загрузки через магнитофонный вход, но я пока на это не пошел :)
ЭмуляторыНе содержит, но!...
Содержит папки для них (или от них): Emu и Emu80. Раньше я пользовался Emu, но под вайном он работать отказался, и я перешел на Emu80. Проекты настроены на него, но выбирать эмулятор в свойствах проекта очень легко. Достаточно распаковать их в соответствующие папки (учитывая то, что в них уже есть) - и можно ими пользоваться. Если эмулятор уже установлен где-то, можно просто перенаправить его метку на реальный путь в менеджере эмуляторов.
Шаблоны и примерыПапка projects содержит проекты-примеры. Проект - это папка с фалом настроек проекта *.wap, исходниками и готовым файлом. Новые проекты по умолчанию помещаются сюда же.
Папка winasm/templates содержит папки-категории шаблонов, а в них находятся собственно шаблоны. Шаблоны - это те же проекты, только используемые как шаблоны (пардон за тавтологию)
Другие процессорыДополнительно добавлено поддержку, шаблоны и примеры для і8048 и і8051 (эмулятор для них не определен).
В примере і8048 использован switch.inc, в результате на выходе генерируется вместо бинарника текст, удобный для программирования ПЗУ тумблерами: я его применил для 556РТ4. (Чтобы получить бинарник, нужно просто этот инклуд закомментиь).
Добавлена подсветка синтаксиса для Z80, но макросы для него я не включил в пакет, так как их автор промолчал на мой вопрос. Но зато внутри есть пример, в котором можно узнать где что нужно взять ;)
Есть также на форуме макросы для МОС6502, но для меня это незнакомый зверь.
Есть на форуме вроде бы и для PIC... Есть для AVR, но там оказалось не все так просто в реальном проекте...
В общем, думаю, среднему программеру по силам написать и самому для любого процессора.

Фичи:
- Содержит макросы для генерирования заголовков и контрольной суммы для rks и rk.
- Содержит макрос, который автоматически конвертирует строку из ср1251 в кои7
- Содержит пример с готовым ввводом/выводом для начинающих
- Содержит небольшую библиотеку полезных функций, которые использованы в примерах

Пробуйте :) Спрашивайте :)
-------------------------------------
добавил обновленную библиотечку

b2m
22.07.2016, 09:58
Раньше я пользовался Emu, но под вайном он работать отказался
У меня под wine 1.9.14 всё вроде работает. Нужно только при помощи winetricks установить mfc42.

shoorick
22.07.2016, 11:37
попробую :) выпадала ошибка в другой делеляке, я ее подсовывал, эмулятор заводился, но в окне была размазня

Kakos_nonos
22.07.2016, 19:52
Спасибо, посмотрю. Я раньше пользовался набором, содержащим программы для MS-DOS, поэтому он не запускался на 64-разрядных компьютерах.

shoorick
22.07.2016, 22:39
Нужно только при помощи winetricks установить mfc42.
Ура! Заработало! только еще установил msvcirt - а раньше я ее просто "подкладывал" :roll:

shoorick
18.08.2016, 10:58
Встретил пожелание сассемблировать TINYBASIC, но уже не вижу этот пост :)
В общем, стянул вариант отсюда (http://www.nicholson.com/rhn/files/tinybasic.tar.Z), скормил fasm g и встретил таки проблемы:
- метки без двоеточия
- восьмеричные числа с Q на конце
- метки с двоеточием перед EQU
- метка LOAD конфликтует с зарезервированным словом

решено:
- двоеточия перед EQU убрал (их там пяток)
- LOAD переименовал в XLOAD

по первым двум вопросам связался с автором, который предложил решения:
добавил символ "Q" как признак восьмеричных чисел в новую версию (http://flatassembler.net/download.php) ассемблера,
а также привел пример макро-кода, позволяет использовать метки без двоеточий перед командами

iterate instruction, \
XCHG,PCHL,XTHL,SPHL, RLC, RRC, RAL, RAR, DAA, CMA, STC, CMC, \
NOP, RET, RIM, SIM, HLT, EI, DI, INX, DCX, DAD,STAX,LDAX, \
PUSH, POP, INR, DCR, ADD, ADC, SUB, SBB, ANA, XRA, ORA, CMP, \
CALL,SHLD,LHLD, JMP, STA, LDA, IN, OUT, LXI, MVI, MOV, RST, \
JC, JNC, JZ, JNZ, JP, JPO, JM, JPE, \
CC, CNC, CZ, CNZ, CP, CPO, CM, CPE, \
RC, RNC, RZ, RNZ, RP, RPO, RM, RPE, \
ADI, ACI, SUI, SBI, ANI, XRI, ORI, CPI, DS
struc instruction? args&
.: instruction args
end struc
end iterate -- я его у себя оформил в виде отдельного инклуда

кстати, в документации (http://flatassembler.net/docs.php?article=fasmg_manual#9) есть подобный пример и для отдельностоящих меток

struc ? def::&
. def
end struc

Ewgeny7
18.08.2016, 13:58
добавил символ "Q" как признак восьмеричных чисел в новую версию ассемблера
Воть... Народ любит, когда его дружески попинывают :)

shoorick
18.08.2016, 16:25
инструмент в процессе развития :)

по поводу
LABEL: EQU VALUE
он мне тоже прислал код:

struc ? def&
match : =equ? value, def
. = value
else
. def
end match
end struc

-- если вставить и его, то двоеточия у меток перед EQU убирать не нужно

*******
Обнаружил в пакете мелкую ошибку: В шаблоне HELLOSPEC в строчке с HELLO в конце ноль нужно поставить.
В эмуляторе несущественно, в реале после старта в памяти мусор.
(Это было две строчки подряд, вторую удалил, а поправить забыл)

shoorick
02.09.2016, 10:51
Целочисленный Лунолет-2 (усложненно/упрощенный по сравнению с версией ПМК)
Новый пример! Для ассемблирования потребуется обновленная библиотека из первого поста.
Маневры не вводятся, вместо этого ежесекундно* рассчитываются новые параметры.
Превышение скоростей чревато влиянием неизвестных законов физики!**
При ударе об поверхность высота и скорость просто обнуляются.
Управление***:
Пробел: включить двигатель
Пробел с шифтом: выключить двигатель
Стрелки влево/вправо: поворот корабля
Стрелки вверх/вниз: управление тягой
Стрелки с шифтом: плавное изменение
Ну и бородатое: Мягкой посадки! ;)
--------
*по версии автора
**у меня не было
***немного туповатое

--------
заменил библиотечку в первом посте: нашел ошибку в mmul

shoorick
06.09.2016, 07:57
В fasmg обратная косая черта объединяет текущую строку со следующей.
Но если нужно ассемблировать программу, в которой наоборот: в одну строку записаны несколько команд, то это можно организовать при помощи макроса, который Томаш любезно предоставил:

macro recursive_split line&
match first \ rest, line
first
recursive_split rest
else
line
end match
end macro
;-----------------------------------------------------------------------
macro ? line&
recursive_split line
end macro
его нужно разместить в начале программы, после чего можно писать так:

lxi h,hello\ call 0C818h\ jmp 0C800h
hello:
dr 10,"HELLO!",0
при желании можно использовать и другой символ для разбиения строки на части.

shoorick
09.09.2016, 15:33
Дорабатываю библиотечку (см. первый пост)...
Естественно, не все проверялось, а кое-что не проверялось вообще, так что атомными станциями пока не управляйте!

Добавил несколько "расширенных команд" в роде movx h,b - заменяется на mov h,b / mov l,c (запарили механические ошибки).
Допиливаю набор для работы с дофигабайтными числами: не претендую, но кое-что меня радует ;) попробовать можно на примере в аттаче
(64 бит)
58179

mvg
25.02.2017, 10:34
Благодарю за студию! Давно хотел вспомнить молодость, сдерживало отсутствие нормальных инструментов ;)
В данный момент откопал свои тетрадки конца 80х (тогда активно писал игры для партнера 01.01) - пробую набить и оживить.
По студии есть ряд вопросов(уж больно на пакет микрон не похоже ;)).
К примеру не разобрался как включить в проект бинарный файл...

barsik
25.02.2017, 23:51
Встретил пожелание ассемблировать TINY BASIC
Меня заинтересовал исходник из приведённой ссылки. Давно хотел узнать как устроен TINY BASIC, т.к имею бейсик AC1 производный от него, в виде кодов, и сам когда-то написал свой TINY BASIC, хотя далеко не такой компактный. Cкачал этот исходник и хотел странслировать. Но он оказался в неприемлемом виде. Непонятно для какого ассемблера (метки без двоеточий, куча ORG вместо .phase) и к тому же с 3-мя ошибками. Пришлось потратить пару часов на приведение этого исходника в нормальный вид. Предположительно его дизассемблировали на DEC кросс-ассемблере, т.к символьные константы там оказались 8-миричными, отчего пришлось с помощью калькулятора переводить их в HEX- и ASCII- вид.

Чтобы кому-нибудь не пришлось тратить время, чтобы сделать то же самое, выкладываю нормальный исходник. Также сделал версию этого бейсика для ОРИОНА с хранением файлов в квазидиске. Позже собираюсь сделать версии для РК86 и ИРИШИ с вводом/выводом на МГ.

Согласно Wiki в 70-х были написаны десятки реализаций TINY BASIC-а, но эта версия, опубликованная в мае 1976 в 'Dr.Dobbs Journal' считается самой компактной (в оригинале 1850 байт), хотя и не самой быстрой. Удобно, что есть подробные комментарии, - попробую разобраться в идеях бейсика и когда-нибудь выложу версию с комментариями на русском. Кроме того хочу сделать русский ДОК (в сети есть описания, но они на английском). Т.к TINY BASIC стоял на десятках ЭВМ из 70-х (и есть версии для всех CPU, даже 4004 и 8008), то даже сейчас в сети без труда нашёл десяток примитивных игр на нём (есть даже PACMAN), что позволяет пополнить ПО отечественных 8-ми разрядок.

Также прилагаю использованную программу для исправления исходников.

PS: Извиняюсь у автора темы за отход от темы. Когда открою свою тему по бейсику, удалю это сообщение из Вашей темы.

shoorick
26.02.2017, 01:25
как включить в проект бинарный файл

file "binary.bin"
если файл лежит в папке проекта, или указать имя вместе с путем

mvg
26.02.2017, 08:49
Благодарю!!!
Продолжаю оживление древней программы ;) Как будет что то смотрибельное - выложу

mvg
01.03.2017, 15:00
Как и обещал - первый опыт есть
http://zx-pk.ru/threads/27445-quot-novye-quot-igry-dlya-rk-sovmestimykh.html
shoorick-у ОСОБАЯ благодарность за студию !

shoorick
01.03.2017, 22:03
спасибо Томашу за нормальный ассемблер! ;)
у меня работа была в основном механическая :)

mvg
02.03.2017, 13:19
Ассемблеров я встречал немало. но там были бубны с батниками да командными строками, +проблемы с 64 битной виндой. а тут все и сразу! ИДЕАЛЬНО для такого лентяя как я ;)

Xrust
17.07.2017, 22:52
Никак не получается зарегистрироваться на winasm.net. Или я дурак, или лыжи не едут. Помогите связаться с админом, кто там зарегистрирован или Winasm-ом поделитесь плиз...

shoorick
19.07.2017, 00:05
там была злостная атака клонов, поэтому сейчас регистрация отключена. я посмотрю что можно сделать в ближайшее время.

shoorick
19.07.2017, 22:08
регистрацию включил, но что-то там негаразды какие-то, некогда разбираться. если опять попрут демоны - придется опять заблокировать, так что, регистрируйтесь. если че не так - сигнализируйте.

=============================================

вопщем, поперло незамедлительно :(
я опять поставил бан... пишите мне в личку ник/мыло/пароль - я зарегистрирую изнутри.

я не очень шарю в настройках форумов, а хозяин его запустил...

norduk
20.11.2017, 13:07
Вопрос от чайника: распаковал, сконфигурил пути до fasm и проектов. Ассемблирую, запускаю hello.rk. Выдаёт:
https://www.screencast.com/t/xUi5igZApwuC
Я закидываю emu80 (4 версии) в \spec\Emu80\, аккуратно прописываю путь
https://www.screencast.com/t/j0HBmbVp
Жму Apply, Close

Всё запускается.
Жму "Выполнить" повторно и ситуация повторяется, снова говорит, что не указан путь к эмулятору и не хочу ли я его указать.

Это первый вопрос)

2) Как запустить emu80 с открытым окном debug? А точнее, как вообще со всем этим конструктором отлаживаться? Чтобы и дебаг в эмуляторе и программа не запускалась, а только загрузилась в память и т.д.

shoorick
20.11.2017, 13:27
1) нет ли проблем с правами, антивирусами или других при записи файла WinAsm\AddIns\WAAddIns.Ini?
в нем должны быть такие секции с путями к эмуляторам:

[HOST]
EMU=%ASMHOME%\Emu\EMU.exe
EMU80=C:\spec\Emu80\Emu80SDL.exe
sz89S52=D:\Home\MCU\sz89S52\sw52com.cmd
[HOST Debug]
EMU=%ASMHOME%\Emu\EMU.exe
EMU80=C:\spec\Emu80\Emu80SDL.exe
sz89S52=D:\Home\MCU\sz89S52\sw52com.cmd
Может, нужно указывать совместимость (под виндой >7 работу не проверял)?

2) не знаю, я использовал отладчик DP, дописанный к монитору.

b2m
20.11.2017, 15:35
Как запустить emu80 с открытым окном debug? А точнее, как вообще со всем этим конструктором отлаживаться? Чтобы и дебаг в эмуляторе и программа не запускалась, а только загрузилась в память и т.д.
Не знаю как в emu80, а в моём можно делать так:
1. Чтобы программа не запускалась, нужно в файле EMU.ext найти расширение файла, который будет запускаться (например для Специалиста - rks), и добавить в найденную секцию cmd[0].start=no, например так:

rks : loader {
config="Specialist"
skip="D9D9D9*E6"
loadaddr=lowendian
cmd[0].start=no
}

Кстати, об этом писал shoorick в файле docs\spec_emu.txt

2. Чтобы эмулятор запустился с открытым отладчиком, нужно добавить параметр командной строки /d (в WinAsm Studio в свойствах проекта, закладка Run/Debug). Но смысла особого в этом нет, т.к. отладчик-то откроется, а код биоса ещё не будет выполнен. Но плюс тут есть, можно нажать F5, код биоса выполнится, а вернуться в отладчик можно будет простым нажатием клавиши Pause/Break (которая до запуска отладчика используется как пауза). Если отладчик не запускать из командной строки, его можно вызвать через меню - тут дело вкуса.

- - - Добавлено - - -

Я тут подумал: надо будет добавить параметр командной строки, чтобы устанавливать точки останова. Или как просили, сохранять их во внешнем файле: тогда установив точку на начало программы один раз, отладчик будет открываться автоматически после запуска программы (при этом код биоса уже будет выполнен).

P.S. Прошу прощения за дезинформацию по поводу mode=1

b2m
21.11.2017, 00:42
Обновил эмулятор, добавил параметр командной строки /brk xxxx
Использовать, например, так:
EMU.exe /brk F800
EMU.exe /brk 0000,1234,C000 (адреса обязательно через запятую и без пробелов)

Вариант с сохранением в файле:
EMU.exe /brk @mybreakpoints.txt

shoorick
21.11.2017, 13:18
а формат mybreakpoints.txt ? одна строка через запятую? или можно в столбик?

и это, обязательны ли ведущие нули?

++++++++++++++++

вот макрос, автоматически создающий точки останова для отладки, но отладчик ЕМУ почему-то каждый раз у меня останавливался в самом начале программы (после нажатия G).

для компиляции может понадобиться свежий фасм джи, а также нужен shownum.inc (вроде бы им комплектовал, если нету - прицеплю)

++++++++++++++++
кстати, проверил на винде 8.1 - все эмулируется и настраивается, только что перенес с предыдущей машины, где вин 7

b2m
21.11.2017, 16:13
а формат mybreakpoints.txt ?
Имя файла произвольное :)
Я не стал заморачиваться, просто hex-числа через запятую. В столбик нельзя. Но если очень хочется, то можно :) Только запятую в начале строки (начиная со второй) ставить надо будет. Текст просто делится запятыми, потом strtoul(s,0,16).
Только зачем тебе этот формат? После установки/снятия бряка в отладчике файл всё равно перезапишется.

- - - Добавлено - - -

Вечером багфикс будет. Выяснилось, что с некоторых пор, код биоса не всегда задуманное число миллисекунд выполняется. Я как-то даже не обращал на это внимания. Сейчас, когда грузится .rks, биос даже не доходит до чтения с магнитофона и кажется, что .rks сразу стартует. Но если исправить эту ошибку, будет выскакивать окно с запросом файла для чтения.

Запуская твоё демо был обескуражен нестабильной его работой. Оказалось, программа не устанавливает стек. А биос во время очистки экрана как раз стеком для заливки пользуется. И если эмулятор неожиданно прыгает на запуск загруженной программы, получается фигня. До сих пор не замечал этого глюка, т.к. большинство программ устанавливают стек. Вобщем, загрузку .rks править надо.

- - - Добавлено - - -


но отладчик ЕМУ почему-то каждый раз у меня останавливался в самом начале программы (после нажатия G).
Не надо в столбик. Сделай в одну строку через запятую.
Если в файле такой текст:

2,
B,
то после того, как я поделю на токены, будет три токена: "2", "\r\nB" и "\r\n". Угадай в какие числа переведёт их strtoul (последнее будет явно нулём) :)

- - - Добавлено - - -


для компиляции может понадобиться свежий фасм джи
Да, тот что из архива не понимает virtual at 0 as 'brk'.
shownum.inc есть, а listing.inc отсутствует.

shoorick
21.11.2017, 17:37
ок.
изменил выходной формат... см. DEBUG.brk
просьба проверить чё не так: у меня отладчик запускается на адресе 0, а после нажатия Ф5 прет до конца.

listing можно закомментить

b2m
21.11.2017, 18:18
просьба проверить чё не так
В командной строке %asm_name% не заменяется, файл с бряками так и называется "%asm_name%.brk" (по крайней мере под убунтой, под виндой вечером позырю).

shoorick
21.11.2017, 18:27
ааа... могёт быть...
может, придется wafasm допиливать, тк в fasmg на сегодня можно только указать расширение для "параллельного" файла...

b2m
21.11.2017, 22:47
Пофиксил пару багов. С эмулятором с моего сайта .rks грузится теперь нормально. А вот если твой "патченный" монитор подсунуть, то ничего не грузит, т.к. теперь программа загружается самим биосом. Хотя есть для тебя вариант: вернуть строчки в EMU.ext как было, у тебя в docs\spec_emu.txt они есть.

Elvys
21.04.2018, 17:18
Всем привет!
Скачал winasm studio, пытаюсь освоить. Хелп, к сожалению, на английском.
В общем, есть непонятные моменты. При попытке создать окно проект вылезает окно с вариантами.
А где найти вариант вроде "создать 8-битное приложение не для виндовс и не для дос" ?
Потом, fasm, masm32 и прочие версии асмов, под которые заточена эта ide, мне не интересны.
Как заставить эту студию работать совместно с telemark assembler, ака tasm ?
Я нашел где прописать пути к папкам bin, lib, etc... но у tasm нет таких папок, а что лежит в аналогичных папках у masm32 и fasm я понятия не имею.
Пока winasm пишет в ответ на попытку компиляции "Ошибка выполнения: Не могу создать процесс."
Оно и понятно, ассемблера не подключено. Файлы, связанные с фасмом я удалил, ибо не нужно.
И еще, файлов в архиве winasm много, ну очень много. Но, ни в одной папке нету readme с кратким описанием, нафига тот или иной файл нужен, какое действие он там производит. Где можно найти список, какой файл что делает в этой студии ?
Хотелось бы знать, нужно оно мне или нет, а не копировать все не думая.
Вот к примеру список неведомой ереси:
MSDNL.dll
revolver.dll
shoo_deb.dll
fasthelp.dll
maximize.dll
wafasm.dll
И что это за библиотеки? Нужны ли они при использовании tasm или они с ним не работоспособны?

- - - Добавлено - - -

Еще "фичу" нашел. После того, как указал путь к папке с tasm, выяснил, что winasm не ищет в этой папке первый попавшийся исполнимый файл, а автоматически лепит к пути /ML и ключ \I. То есть, файл tasm.exe оно в принципе найти не может, нету у меня там папки ML. И ключ \I tasm тоже не поймет.
У меня вопрос, а какой смысл тогда в указании путей к каталогам самим пользователем? Если студия отсебятину к ним добавляет?

shoorick
21.04.2018, 18:18
Видимо, это базовая версия студии - она заточена под винду и масм. Отсебятина - это ключи для масм по умолчанию. Другие ассемблеры и прочее возможны через надстройку FASM Add-In - об этом там есть документация и на русском языке.

Лучше скачать готовый пакет Full package to support i8080/85+i8051+i8048 with fasm g (http://www.winasm.net/spec-fasm-g.html) - им сразу можно пользоваться для 8085 и т.п., но рекомендую обновить fasm g - уже много воды утекло.

Возможно использование и ассемблера телемарк. Для этого нужно взять любой проект для fasm g и в нем в настройках проекта изменить команду для компиляции чтобы использовался телемарк, сохранить, а затем использовать как шаблон.

Для большей переносимости лучше в настройках окружения студии добавить переменную среды с путем к ассемблеру, а в настройках проекта использовать эту переменную, но это необязательно.

Ewgeny7
21.04.2018, 18:51
Лучше скачать готовый пакет
Забыл добавить - после регистрации.

Elvys
21.04.2018, 19:00
Спасибо. А что за файл conspawn.exe?

- - - Добавлено - - -

Собственно, я и использовал сборку "все для поддержки 8085", только выкинул от туда "все лишнее" :v2_dizzy_facepalm:

shoorick
21.04.2018, 19:39
conspawn.exe - для того, чтобы в окно вывода попал весь вывод от вызываемого средства. некоторые ассемблеры часть или все выдают в stderr, и оно само собой не отлавливается, так что микрософт само этот файл как прокладку и предложило (вместе с исходником).

да, если проблемы с регистрацией - пишите в личку, зарегю. но вроде ее включали - сам там бываю раз в полгода...