Важная информация

User Tag List

Показано с 1 по 10 из 10

Тема: ПК8000 - Ассемблер

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Member Аватар для scaraby
    Регистрация
    06.06.2015
    Адрес
    г. Раменское, Московская обл.
    Сообщений
    93
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ПК8000 - Ассемблер

    А кто каким ассемблером пользуется для написания программ для этого компьютера? В детстве я использовал 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	;возврат в СПА

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ассемблер для 48к на ленте
    от newart в разделе Программирование
    Ответов: 37
    Последнее: 20.09.2015, 22:48
  2. Переведите на ассемблер
    от Руслан в разделе Программирование
    Ответов: 2
    Последнее: 06.08.2012, 23:41
  3. Ассемблер 8080
    от Kakos_nonos в разделе Утилиты
    Ответов: 0
    Последнее: 21.09.2011, 23:35
  4. Ассемблер Z-80
    от sergey2b в разделе Пресса
    Ответов: 12
    Последнее: 11.07.2011, 23:41
  5. Изучаем Ассемблер с ААА!
    от Addison в разделе Для начинающих
    Ответов: 33
    Последнее: 08.07.2009, 00:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •