А кто каким ассемблером пользуется для написания программ для этого компьютера? В детстве я использовал ASSM, который поставлялся на кассете с системными программами. При его запуске упоминался в качестве автора некий товарищ Карабутов. Неудобство состояло в том, что код исполнялся сразу и без вопросов, поэтому любой неверный шаг приводил к зависанию и утомительной загрузке с кассеты среды программирования. Тем не менее, с помощью этой программы можно было заглянуть внутрь игр, что-то даже своё наваять. Однако ассемблер там однопроходной, метки при любом телодвижении нужно править вручную - это ад и израиль!
В настоящее время пользуюсь следующей технологией для создания готовых wav-файлов, пригодных для загрузки на реале:
1. Исходник пишу в "Прекрасный ассемблер КР580ВМ80А" онлайн по адресу http://asdasd.rpg.fi/~svo/i8080/ Туда же можно закидывать текстовые исходники, написанные в чём угодно, хоть в блокноте. В сравнении с ASSM - счастье просто! Результаты творческих изысканий отражаются справа в окне "на лету". Результатом работы является бинарник, который можно смело внедрять в память ПК8000 и запускать на выполнение.
2. В эмуляторе emu загружаю пакет ASSM командой bload"ASSM",r и для удобства сохраняю это состояние, чтобы одним кликом сразу попадать в ASSM. На реале эта процедура занимает несколько минут: поиск на кассете, загрузка, ошибки загрузки, если плохой магнитофон и т.д.
3. Находясь в ASSM внутри emu выбираю пункт меню View/Start Debugger. Далее в открывшемся окне Ctrl+L (загрузить бинарник), указываю адрес в который грузить содержимое бинарника. Этот адрес является тем же адресом, который указывается директивой .org в "Прекрасном". После выполнения загрузки директивой ASSM-a G - запускаю на выполнение загруженный фрагмент кода.
4. Чтобы загрузить этот код в реальный ПК8000, использую директиву ASSM-а W ИмяФайла АдресНачала АдресКонца АдресЗапуска. Например W TEST01 4000 4100 4002. Не забываю при этом перед нажатием Enter включить кнопку "Record/Stop" на панели эмулятора emu и выбираю соответствующий wav файл, готовый для загрузки.
5. Если не нужен wav, а cas, то не использую команду "Record/Stop", директива W обрабатывается эмулятором и создаёт корректный cas.
Технология получилась вполне рабочая и проверена практикой, однако, несколько громоздкой. Может, у кого-то есть опыт или идеи, как проще пройти путь от текстового исходника до реального wav?
- - - Добавлено - - -
Ну и вдогонку, в качестве примера небольшой исходник, который в графическом режиме зажигает точку на экране в выбранной позиции, ждёт нажатия упр-стоп и выходит в ASSM. На реале в Бейсик.
Код:;ПК8000 ;Прекрасный ассемблер КР580ВМ80А ;http://asdasd.rpg.fi/~svo/i8080/ ;Программа определяет адрес байта в массиве графики для графического курсора ;Массив графики располагается в адресах ОЗУ 0000h-17ffh ;Нумерация идёт по принципу знакомест 32х24. Знакоместо (0,0) имеет адреса ;0000h-0007h, (0,1) 0008h-000fh, (1,0) 0100h-0107h и т.д. ;в hl - искомый адрес видео озу, с - номер бита точки на которую указывает ;графический курсор. a - маска для операции с точкой (гашение/свечение) .binfile GraphCursor.bin .org 4000h ;начальный адрес программы в ОЗУ ;Чтение байта из видеоОЗУ. 004ah hl - адрес, a - байт VRAMRead equ 004ah ;Включение режима экрана. Точка входа в ПЗУ: 006Ah или 286Dh A=режим {0,1,2} Screen equ 286dh ;Опрос нажатия Упр+Стоп.3759h Если «Упр+Стоп», то флаг C:=1 CtrlBreak equ 3759h ;Возврат в СПА Exit equ 0ea8ah GraphCursor db 00h,00h ;координаты графического курсора x,y (0-255,0-191) Start: mvi a,02h ;выбор номера режима call Screen ;установка режима 2 ;модуль определения адреса искомого байта в видеоОЗУ lhld GraphCursor ;координаты курсора в привычной форме mov a,l ;взяли координату х ani 07h ;в аккумуляторе остаток от деления x/8 ;это - номер (положение) точки внутри байта в массиве графики inr a ;используется как счётчик при формировании маски mov c,a ;запоминаем его в регистре c mov a,l ;взяли повторно координату х ani 0f8h ;отбросили остаток от деления x/8 ;это - адрес нулевого байта соответствующего знакоместа mov l,a ;запоминаем его в регистре l mov a,h ;взяли координату y ani 07h ;остаток от деления x/8 - номер строки внутри знакоместа add l ;прибавили его к адресу нулевого байта знакоместа mov l,a ;младший полубайт адреса готов. mov a,h ;взяли координату y ani 0f8h ;отбросили остаток от деления y/8 rrc rrc rrc ;разделили нацело y/8 mov h,a ;старший полубайт адреса готов ;формируем в аккумуляторе маску для видеоОЗУ xra a ;инициализация маски. Записываем в аккумулятор 01h inr a loop01: rrc ;устанавливаем соответствующий бит маски dcr c ;номер бита, полученный ранее из координаты x jnz loop01 ;зажигаем точку на экране loop02: mov c,a ;зажигаем одну точку, не изменяя соседние маска в с call VRAMRead ;прочитали байт из массива графики ora c ;добавили точку к прочитанному mov m,a ;сохранили результат EventLoop: call CtrlBreak ;опрос клавиатуры jnc EventLoop mvi a,0h ;выбор номера режима call Screen ;установка режима 0 call Exit ;возврат в СПА




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
