Формат записи программы Апогея БК-01 на магнитофон

Всем привет. Что-то нашло на меня, и я, полный сил и уверенности в себе, решил разобраться с апогеем. Первым делом возник вопрос с эмулятором. Мне посоветовали Emu80, в котором находятся аж сразу несколько эмуляторов советских ПЭВМ — Апогей БК-01, Партнер, ЮТ-88, Радио-86РК, Микроша и другие.

После первого запуска апогея я запустил демку моего друга Kakos_nonos — «This Is Apogey 2». Файл успешно считался при помощи использования команды «I», но Какос не любит считать контрольные суммы, поэтому после её проверки появился вопросик. Само видео запуска вы можете лицезреть ниже.



Но это ещё далеко не всё!

Я решил разобрать структуру .RKA файла, из которого происходит чтение командой «I».
Всё оказалось намного проще всем знакомого .trd-шника, а именно:

Ахтунг! Разбирать я все буду на Wct, потому что я уже привык.
Таблицу команд для Апогея БК-01 вы можете найти здесь.
Я вас предупредил.

Для сборки файла можно использовать онлайн компилятор — просто вставьте код программы и нажмите "Build project". :)

В самом начале файла идут два байта, содержащие начальный адрес программы, а после них ещё два байта, которые содержат уже конечный адрес нашей программы:


Aa AA    // Начальный адрес
Aa BC    // Конечный адрес


Далее идёт код. Я уже успел написать программу, которая выводит «WCT ONE LOVE» на экран. Вот она:


Cb AH AA	// Помещение адреса строки в HL
Mn BI OI	// Вызов функции печати строки из HL, 
                // полный список функций можно найти в таблице (см. приложение)
Hg		// Завершение работы программы (halt), также имеется в таблице

"WCT" Ca "ONE" Ca "LOVE" Aa	// Сам текст, где "Ca" = пробел, 
				// "Aa" - завершение строки


Далее идёт объявление о конце программы и «синхробайт»:


Aa aa		// Конец программы (нули)
Pg		// Синхробайт (ага, тот самый)


Ну а потом идёт контрольная сумма, которая равна двум байтам и может быть любой (влияет только на появление вопросика после считывания программы из файла).

После долгожданного запуска программы мы можем увидеть, как апогей вывел наш текст на дисплей:



Все довольны, аплодисменты, занавес.

В скором времени я напишу ещё одну статью про Апогей БК-01, а пока — Спасибо за внимание, до скорой встречи, до свидания :)

--
Приложение.

Таблица — http://wctsite.tk/table/apogee.
Онлайн компилятор — http://build.wctsite.tk.
Спасибо Kakos_nonos за инструктаж по апогею :)

13 комментариев

avatar
В тред призывается DDp, чтоб выдать фуцк :-)
avatar
, просвяти, как мне контрольную сумму считать? :)
avatar
Фуцк Mihip-у за не правильную (не подсчитанную) контрольную сумму ;)
Как её считать? Очень просто! Вот, процедурка для i8080
// процедура подсчёта контрольной суммы Радио-86РК/Апогей/Партнёр/Специалист (версия для i8080/Z80)
// вх:  HL - указатель на начало буфера
//      DE - указатель на конец буфера
// вых: BC - контрольная сумма
AB AA AA        // очищаем BC (здесь будет КС)
HP IB EO        // обновляем с мл.байт КС
OF              // сохранение флагов
MN CC AA        // 1я проверка на конец блока
MK BN AA        // да, конец
OB              // восстановление флагов
HI IP EH        // обновляем с ст.байт КС
MN BH AA        // 2я проверка на конец блока и инкремент указателя
MD AD AA        // на начало цикла

// сравнение HL и DE,
// если равны, то выход из процедура вызвавшей эту,
// иначе инкремент HL
MN CC AA
MC CA AA
DD DD MJ

CD MJ

// сравнение HL и DE
HM LK MA
HN LL MJ

Неужели не понятно?!
Хм… oк, тогда для i8086
// процедура подсчёта контрольной суммы Радио-86РК/Апогей/Партнёр/Специалист (версия для i8086)
// вх:  di - указатель на начало буфера
//      cx - количество байт
// вых: bx - контрольная сумма
LL AA AA        // очищаем bx (здесь будет КС)
EJ HE AJ        // это случай, когда cx=1
IK AF           // байт из буфера
EH              // инкремент указателя
IK PA           // копируем в старший
AD NI           // складываем
PC OH           // если не последний байт, на начало цикла
IK AF           // последний байт
AC NI           // складываем
MD              // выход из процедуры


— — — Если серьёзно, то присоединюсь к introspec-у и заминусую пост потому_что_он_про_Wct
avatar
Предлагаю не останавливаться на достигнутом, и тексты самих постов писать так же, как и код. Всем читателям будет очень полезно.
avatar
У меня предложение ещё проще. Если ты не заметил, все местные авторы прячут посты длиннее пары абзацев под кат, чтобы люди могли сами решить, хотят ли они читать твою простыню или не хотят. Выкладывание вот такой простыни — неуважение к читателям. Поэтому, будь добр, спрячь простыню под кат, начиная, допустим, с «но это ещё далеко не всё».
avatar
Да, забыл, по традиции, я минусую этот пост потому что он про Wct.
avatar
Я, вот, попробовал «онлайн-откомилить», и как-то странно, что он компилит любой текст, кириллицу, латиницу и да же японские иероглифы, и какую бы белиберду я не набивал, всегда в результате «Успешная компиляция». А вообще вариант не успешной компиляции возможен?
Чувствую себя супер-кодером на Wct, ни одной ошибки не допускаю. =)
avatar
Вставляем: «Ахтунг! Разбирать я все буду на Wct, потому что я уже привык.
Таблицу команд для Апогея БК-01 вы можете найти здесь.
Я вас предупредил.»

Успешная компиляция, можно скачать бинарник.
супер!
avatar
Автор не отличает код от кодировки. С кодом ошибится бы было возможно, но перекодировка — срабатывает, разумеется, всегда.
Это одна из причин, по которой я минусую и буду продолжать минусовать посты про Wct.
avatar
ld hl,0007
call #f818
halt

нафиг это «транслировать» в Cb AH AA Mn BI OIHg
  • VBI
  • +4
avatar
Mihip, да бросай ты уже этот бред
  • VBI
  • +2
avatar
Держи вот две ссылки.
Обе с приколом, но!
avatar
Вот когда Wct дорастёт до таких высот обобщения, даже придётся заплюсовать: m.habrahabr.ru/post/116301/comments/#comment_3773449
avatar
анекдот про эту тему михипа:

Пришел студент экзамен по биологии сдавать, а знает только один билет — про блох. Ну зашел он в аудиторию, взял билет, читает — «блохи» (УЕS!).
Он начинает:
— Блохи — насекомые, которые живут в шерсти животных, имеют длинный, острый хоботок, которым протыкают кожу и пьют кровь. Блохи имеют длинные ноги, за счет которых хорошо прыгают…
Ему зачли билет, сказали взять другой. Берет — «собаки». Он начинает:
— Собаки — животные разряда млекопитающих, они имеют 4 лапы и хвост, которые покрыты шерстью. А в шерсти наверняка живут блохи, а блохи — это…
Экзаменаторы подумали, заставляют еще один билет брать… Он берет — «кошки». Студент опять:
— Кошки — это животные, которые имеют 4 ноги, длинные усы и хвост. Также имеется волосяной покров, в котором наверняка есть блохи, а блохи — это…
Экзаменаторы в дауне… Самый главный не растерялся и говорит:
— Юноша, а что вы можете сказать нам про рыб?
Студент:
— Рыбы — это животные, тело которых покрыто чешуей. Ну а если бы они имели шерсть, то там точно водились бы блохи. А блохи — это…
  • VBI
  • +7
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.