какой формат файла rks?
вроде гдето видел
есть утилита для пересчета crc файла?
Вложение 64780
Вид для печати
какой формат файла rks?
вроде гдето видел
есть утилита для пересчета crc файла?
Вложение 64780
Откуда этот файл? В нем заголовок неправильный: 3 байт должен быть 81, а не 01 - это старший байт конечного адреса
Контрольная сумма файла DF3A, нужно последние 00 00 поменять на 3A DF.
Процедуру подсчет КС вот только на днях приводил:
http://zx-pk.ru/threads/6505-radio-8...l=1#post955672
Либо из Монитора пересохранить.
Ваш файл не грузится потому что Вы конечный адрес указали меньше начального 8000...014С, а надо 8000...814F. Во вложении правильный файл и с контрольной суммой. Если КС нет или она неверная, то грузить можно только по сбросу, т.к тогда КС не контролируется. Симпатичная картинка.
Распространённых форматов эмуляторов есть всего два - с именем и без имени. Они выводятся по O и W, а вводятся по I и R, соответственно.
А, если Вы применяете ленинградский монитор, то доступен еще формат РК86 (загрузка по Y), формат ОРИОНА (загрузка по @), формат ZX-Spectrum (загрузка по J), а также в формате MSX (после НР+F3). Естественно, в эмуляторе для форматов отличных от двухфазного, конфиг эмулятора д.быть соответственно настроен (указаны точки перехвата МГ-подпрограмм).
Итак формат без имени:
256 байтов 00 (пилотон)
E6 синхробайт
Нач.адрес (младший, старший)
Кон.адрес (младший, старший)
Сам файл длиной кон.адрес минус нач.адрес +1
Контрольная сумма (младший, старший)
Формат с именем:
256 байтов 00 (пилотон)
E6 синхробайт
D9, D9, D9 - признак формата с именем
до 17 байтов имени, но последний всегда 0
768 байтов 00 (второй пилотон)
E6 синхробайт
Нач.адрес (младший, старший)
Кон.адрес (младший, старший)
Сам файл длиной кон.адрес минус нач.адрес +1
Контрольная сумма (младший, старший)
Как видите, формат с именем отличается только наличием заголовка с именем. Потому второй пилотон специально сделан долгим, и если для файла с именем нажать на сброс во время второго пилотона, то можно ввести файл с именем с автоматическим запуском по окончании ввода (а также загрузить по директиве R).
В формате для эмулятора начальные байты, а именно первый пилотон и байт Е6 откинули. Пилотон не нужен, а вот байт E6 откинули зря, он нужен, потому, что его наличие позволяет слеплять блоки многоблочных программ в один файл простым слиянием. Таким и был формат GAM в эмуляторе Дёмина (он отличается от формата RK? только наличием лидирующего байта E6).
Эмуляторы EMU и EMU80 понимают формат GAM и даже если в формате RKS оставить лидирующий байт E6, то эмуляторы всё-равно загрузят верно. Т.е эти эмуляторы лидирующий E6 всегда отбрасывают. Это не вредит потому что в РК и ОРИОНЕ на адрес E6xx ничего не грузится, а для Специалиста нет программ грузящихся на адрес xxE6, начальные адреса всех программ кратны xx00.
На реальных кассетах использовался формат с именем, но для эмуляторов сочли его ненужным (т.к имя есть у файла Windows), потому для эмуляторов для файлов в виде кодов больше используется формат без имени, а для файлов в виде WAV используется формат с именем.
К сожалению, у авторов эмуляторов не хватило фантазии придумать разные расширения для разных форматов. Причём при попытке загрузить по I файл предназначенный для ввода по R, происходит завис. Потому такая путаница очень раздражает при эксплуатации эмуляторов (что в очередной раз доказывает, что если хочешь иметь удобный эмулятор, то сделай сам). Для сокращения путаницы я использую для формата с именем расширение 'RKS', а без имени - 'rks'. Кстати, если использовать эмулятор EMU80, то в конфиге можно задать типы файлов с которыми будет работать эмулятор.
Кстати, при ленинградском мониторе (в отличие от орловского), можно загрузить любой блок в двухфазке с любой скоростью и от любого компьютера, если указать начальный и конечный адреса. Например, ввести R1000,8F00 и по бегущему счётчику узнать конечный адрес загрузки. Можно проще - R1000 (неуказанный второй параметр принимается нулём). При этом с указанного адреса введутся все байты следующие сразу за байтом E6.
Теперь как подгонять КС блока.
К сожалению, хотя на Си написать это совсем несложно, конвертора DAT-файла кодов программы в формат RK? для Windows до сих пор никто не удосужился написать. Причём это должна быть программа работающая с командной строкой, тогда достаточно включить её запуск BAT-файлом сразу после трансляции, но перед стартом эмулятора.
Если Вы используете в эмуляторе ленинградский монитор, то не проблема подставить КС вручную с помощью редактора UltraEdit в HEX-режиме. Для этого файл грузят (по I или по R - без разницы). Ленинградский монитор подсчитывает и выводит контрольную сумму введённого блока (а орловский монитор выводит только надпись "ОШИБКА"). Достаточно посмотреть эту сумму и вручную подставить в конце файла или задать в исходнике.
- - - Добавлено - - -
Код:.
.Z80
aseg
ORG 100H
KS EQU 0EEEEH
RABADR EQU 8000H
defb 0D9H,0D9H,0D9H
defb 'DEMO игры ELITE',0
DS 256 - ($-100H)
defb 0E6H
DW RABADR, RABADR+LENGTH -1
.phase RABADR
. . . . тело самой программы . . . . .
ZZZ aset $ and 0FH
if ZZZ ne 0
rept 10H-ZZZ
defb 255
endm
endif
LENGTH EQU $-RABADR
DW KS
.dephase
END
Вот так я оформляю программу транслируемую для Специалиста в макроассемблере М80 от Microsoft. Запускаю трансляцию, линковку и запуск странслированной программы в эмуляторе BAT-файлом, так что закончив набор текста, просто запускаю BAT-файл (можно прямо из UltraEdit, там есть такие возможности, т.е можно обойтись и без BAT-файла) и через секунду уже в эмуляторе, проверяю программу, для чего нажимаю НР+F9 (для прерывания загрузки по сбросу), затем I для ввода RKS файла.
Пока программа отлаживается, я не обращаю внимания на KS, а когда программа отлажена, то остаётся только посмотреть выводимую КС при вводе и подставить её в исходник вместо константы KS и ещё раз странслировать. Потому меня проблема из-за того, что ассемблер не умеет сам считать и подставлять КС в объектный код, не волнует. А вообще в ассемблере такая функция была бы полезной.
Кстати, для написания программ для 8-ми разрядок нет альтернативы макроассемблеру M80 и текстовому редактору UltraEdit, - всё остальное гораздо хуже.
Подо что эта программа? У меня на эмуляторе не работает.
barsik, откуда я должен был узнать структуру файла .RKx?
все что я знаю получено анализом имеющихся образов кассетных файлов
а там все грузится по адресу 0 и второе слово получается вот такое вот.
про crc я в курсе но формул не знаю да и нет у меня такой функции в sjasm.
Я запускал в эмуляторе EMU80 с указанием CPU КР580. Может быть для Вашего эмулятора мешает первый байт E6, удалите его. А вообще попадаются файлы у которых первый байт E6. Потому лучше сделать как сделали авторы других эмуляторов, - всегда игнорируйте лидирующий байт E6, это синхробайт.
Убрал 0xE6. Как я его не заметил.
На самом деле, этот байт в образ пихать не надо, раз его нет в большинстве образов.
Да и контрольная сумма излишня. Тем более, что стандартному загрузчику она не нужна.
Согласен, кто к чему привык, то и лучше.
Хотя без некоторых свойств в макроассемблере (например, .phase) программировать сложнее. Кстати, на M80 можно в одной и той же программе писать кусок кода на Z80 (после оператора .Z80), а другой кусок кода на ассемблере 6502 (после оператора .6502), что удобно, если в ЭВМ, как в Apple-II, стоят сразу два программно переключаемых процессора.
В мониторе Специалиста есть директива K<нач.адр>,<кон.адр>, считающая КС (по подпрограмме F82A в РК86). Так что после ввода, зная адреса загрузки, этой директивой можно сосчитать КС.
А зачем Вам считать КС?
КС нужна только, если использовать орловский монитор, т.к с ним не знаешь адрес загрузки блока, т.к этот монитор не выводит адреса при неверной КС, но если и так знаешь адрес загрузки блока (чтобы ввести команду Gaddr<ВК>), то и это неважно. Используйте автостартовость монитора Специалиста по сбросу, где КС не контролируется.
А чтобы начать отладку встроенным отладчиком эмулятора, используйте эмулятор EMU80, задав в конфиге выход в отладчик по команде HALT. В нужном месте программы ставите HALT и сразу по старту программы оказываетесь в нужном для отладки месте (нажимаете U, чтобы пройти HALT) и далее шагаете по шагам нажимая F7 или F8.
Можно HALT и не использовать, но тогда надо по листингу трансляции смотреть адрес, где нужен останов и перед запуском программы выйти по АЛТ-D в отладчик, набрать A, затем нужный адрес, перейти туда и с помощью клавиши F5 поставить там стоп точку. Потому для ускорения проще вставить HALT при трансляции. Но чтобы вылет в отладчик по HALT срабатывал, поставьте в конце конфига для Специалиста строку:
cpu.debugOnHalt = yes
А кстати, я плохо понимаю ассемблер КР580, потому пишу в мнемониках Z80 и часто по привычке вставляю JR и другие Z80-команды, отчего в эмуляторе программы улетают и приходится много часов искать ошибку трассировкой. По счастью недавно Pyk ввёл в EMU80 возможность вылета в отладчик по недокументированной команде. Это здорово помогло. Так, что если Вы пишете на ассемблере Z80 для КР580, то Вам очень поможет такая строка в конфиге:
cpu.debugOnIllegalCmd = yes
Я не считаю КС в окончательной сборке, я просто смотрю в эмуляторе, что написано на экране после ввода (неважно по R или по I) и это число подставляю в исходник и снова транслирую. У меня при трансляции BAT-файлом результирующий файл копируется в подкаталог '...\EMU80\spec\PROGS\'.
Эмулятор EMU80 всегда при отладке загружен, из него выходить незачем (да и грузится он несколько секунд, что нервирует). После трансляции для ввода программы набираю R (или I) и нажимаю <ВК>. Контрольная сумма не волнует, потому что использую ленинградский монитор, а он выводит и адреса загрузки и реальную КС введённого блока по окончании загрузки. Если интересует могу поделиться конфигами Специалиста для EMU80 и EMU с прерываниями 50 Гц, дисководами, ROM-диском и ОЗУ в 1 мб.
Вообще-то, надо бы нацарапать программку, работающую из командной строки, которая считает КС файла в формате RKS без имени. Любой программист это напишет за 5 минут. Но я написать это могу только для MSDOS, т.к для Windows не программирую. Если кого-то это устроит (для прогона программ MSDOS надо иметь Win XP, не выше), то могу это сделать.
Раз уж речь зашла о Emu80, могу еще предложить грузить файлы через Alt-F3 (с автозапуском) или Alt-L (без автозапуска). КС при этом игнорируется.
Ну или drag-n-drop'ом файл бросать в окно эмулятора, что равносильно Alt-F3.
- - - Добавлено - - -
jerri, вот, кстати, готовый скрипт от vinxru для формирования rks-файла с подсчетом КС:
https://github.com/alemorf/retro/blo...s/-make-rks.js
Там же есть -compile.bat, из которого он вызывается...