Sheet 1: Общая информация icon

Sheet 1: Общая информация




НазваниеSheet 1: Общая информация
Дата конвертации04.02.2013
Размер46.2 Kb.
ТипДокументы


Overview

Общая информация
CONVERT_Ассемблер6502
CONVERT_Турбо-бейсик


Sheet 1: Общая информация

Алгоритм расчета контрольной суммы диска Агат-7, Агат-9 штатными средствами копирования
Москва, 1999, Бончан И.В.








Средства стандартного копирования для ПЭВМ "Агат" в составе "ИКП" или файла программы "Copy" рассчитывают контрольную сумму дискет для двух типов дисководов: ЕС5323 и ЕС5088 одинаково. Замечу, однако что алгоритм расчета не тривиален и, по моему мнению, его в целом следует считать одной большой ошибкой, оставленной в целях совместимости.

Стандартная дискета для дисковода ЕС 5323.01 (FD-55, Teac) разбита на 3360 секторов (160 дорожек по 21 сектору) по 256 байт в каждом, что составляет 860 160 байт или 840 Кб.
Стандартная дискета для дисковода ЕС 5088.01 (Shugart) разбита на 560 секторов (35 дорожек по 16 секторов) по 256 байт в каждом, что составляет 143 360 байт или 140 Кб.
В целях уменьшения количества ошибок и простейшей верификации диска алгоритм расчета контрольной суммы сводился бы к сумме контрольных сумм всех секторов по модулю $FFFF (65536). Однако в "ИКП-Копирование" он вычисляется иначе:
1) вычисляется контрольная сумма всех секторов по модулю $FFFF;
2) производится преобразование значения WORD (2 байта) некоторой функцией.
Эта функция и есть, по сути, одна большая ошибка. Хотя некоторый смысл в ней, справедливости ради надо отметить, есть.

Итак, примем обозначения.
2 байта контрольной суммы обозначим за CHS (CHS-младший). CHS AS Word.
2 байта контрольной суммы на выходе программ обработки будут иметь вид CHSH,>CHS (целое, остаток).
В отдельных листах приведены листинги на ассемблере 6502 и турбо-бейсике.
Здесь изложу общий смысл.
Функция 2) задумывалась изначально как деление контрольной суммы на 100 и вывод ее в десятичной форме последовательно целое_остаток (так следует полагать если смотреть на код).
На практике.
1. Для чисел меньше 25600: так и происходит!, целое(CHS/100),остаток(CHS/100)
2. Для чисел больших чем 33023: целое(>CHS/100),остаток(>CHS/100)
3. Для остальных: 0,остаток (>CHS/100)
Подробности и прелести процесса вы можете увидеть в примере исходного текста на Ассемблере6502.
Для понимания, идентичный алгоритм с присущей Бейсику неуклюжестью при работе на низком уровне описан в отдельном листе.

^

Sheet 2: CONVERT_Ассемблер6502

Это и есть функция преобразования
Это фрагмент исходного текста из моей программы связи "Агат-PC", я использую именно такой алгоритм (ИКП) для формирования контрольной суммы образа
*=================================================

* Преобразование двухбайтовой суммы (ИКП)

*=================================================

* ВХОД: CHS DS 2 * WORD ><

*-------------------------------------------------

* ВЫХОД: CHSH,>^ CHS - КОТРОЛЬНАЯ СУММА

*=================================================

DSECT

CHSH DS 1

CHS DW 1

DEND







CONVERT:

LDA #00

STA CHSH Частное=0 (старший)
LDA >CHS Младший
COM3: CMP #100 Младший делим на 100
BCS COM1 меньше 100
DEC старший делим
BMI COM2 Ошибка!!! (1) как будто поделили
SEC

COM1: SBC #100 делим на 100
INC CHSH частное увеличили (результат)
BNE COM3 Ошибка!!! (2)
COM2: STA >CHS Записываем остаток от деления на 100
RTS




Ошибка 1 происходит из-за того, что при числах больших $80FF, мы вываливаемся из подпрограммы с результатом деления младшего байта на ноль, причем в CHSH находится целая часть частного, а в >CHS (младшем) - остаток от деления. (Выводится CHSH,>CHS)

Ошибка 1 происходит из-за того, что при числах больших $6400, целая часть результата от деления >$FF и переходя на очередной инкремент мы вываливаемся с целой частью равной нулю ($FF+1=0 по модулю $FF), в CHSH находится 0, а в >CHS (младшем) - малдший байт разницы CHS-25600 (т.е. $100 вычитаний 100). (Выводится 0,>CHS)




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



*=================================================

* Передача полного сектора

*=================================================

SB4:

LDA#FULL_SECT * Будет полный сектор
^ JSR SEND_BYTE * Для ускорения
LDY#0 * вся передача переписана
CLC * сюда, убраны все JSR
STY OTZV * и насколько возможно
^ SB1: STY TEMP_Y * стековые и буферные, все длинные
LDA (BUFR),Y * (более 5 тактов) операции
PHP * Выигрыш - порядка 5с на блок
^ LSR OPER_REG,X * TETRADA1

LDY STATE_REG,X

BPL *-3

^ STA DATA_REG,X

ORA#¤80

^ STA OPER_REG,X

LDY STATE_REG,X

BMI *-3

^ ASL A * TETRADA0

ASL A

ASL A

ASL A

^ LSR OPER_REG,X

LDY STATE_REG,X

BPL *-3

^ STA DATA_REG,X

ORA#¤80

^ STA OPER_REG,X

LDY STATE_REG,X

BMI *-3

^ LDY TEMP_Y

LDA (BUFR),Y

PLP

ADC OTZV Считаем
STA OTZV

INY

BNE SB1

LDA OTZV

CLC

ADC >CHS Добавляем в сумму образа (младший)
STA >CHS

BCC SBLA Переполнение
INC Увеличиваем старший
^ SBLA: LDA OTZV

SB3: JMP SEND_BYTE * CHS


^

Sheet 3: CONVERT_Турбо-бейсик

Это пример расчета контрольной суммы образа на турбо-бейсике.
Контрольная сумма входит в переменной CHSA, на выходе в десятичной системе целая часть частного - p$, дробная - k$
for s=1 to sects*traks * Read all sectors
gosub readsect * Sub reads 1 sector
next s
k=chsa-int(chsa/65536)*65536 'on abs ffffh * Round to word
if k=>25600 and k<=33023 then 'full loop 100h * check on error 1
k=k-25600
p=0
else
if k>33023 then '80ff bmi on first decrement * check on error 2
k=k-int(k/256)*256 'only right byte * round to byte
end if
p=int(k/100)
k=(k-p*100)
end if
k=k-int(k/256)*256 'only right byte * round to byte
p$=fntrim$(str$(p)) * strip white spaces
k$=fntrim$(str$(k)) * strip white spaces
if len(p$)=1 then p$="0"+p$ * add to 2 digits
if len(k$)=1 then k$="0"+k$ * add to 2 digits
? "Check_summ: ";p$;k$ * Print as 4 ch minimum



Добавить документ в свой блог или на сайт


Похожие:

Sheet 1: Общая информация iconSheet 1: общая информация

Sheet 1: Общая информация iconSheet 1: Общая информация
Стандартный образ дискет для дисковода ес 5323. 01 (fd-55, Teac) образуют 3360 секторов (160 дорожек по 21 сектору) по 256 байт в...

Sheet 1: Общая информация iconОбщая информация Название (по уставу)
Результаты самообследования и внешней экспертизы за 2010-2011 уч год. Общая характеристика оу

Sheet 1: Общая информация iconОбщая информация
Строительный адрес дома: г. Долгопрудный, мкрн. Хлебниково, ул. Госпитальная, владение 1 (жк клязьминский)

Sheet 1: Общая информация iconОбщая информация
Стоматологическая установка это гидроблок смонтированный с креслом. Принципиальная конструкция стоматологического кресла описывается...

Sheet 1: Общая информация iconОбщая информация по егэ
Освоение программы среднего образования в образовательном учреждении, имеющем государственную аккредитацию, завершается обязательной...

Sheet 1: Общая информация iconДокументы
1. /Уголовное право/ВОПРОСЫ К ЭКЗАМЕНУ ПО УГОЛОВНОМУ ПРАВУ 3 СЕМЕСТР.doc
2. /Уголовное...

Sheet 1: Общая информация icon1. Общая информация Общие сведения об организации Наименование организации
«Средняя общеобразовательная школа им. Кубати и Кабарда Кардановых» с п. Аушигер Черекского муниципального района кбр

Sheet 1: Общая информация iconОбщая характеристика предприятия 5 Общая характеристика горячего цеха

Sheet 1: Общая информация iconОтче т о деятельности Муниципального автономного дошкольного образовательного учреждения «Детский сад №7 компенсирующего вида» за 2010 год Информация об исполнении муниципального задания
...

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©libdocs.ru 2000-2013
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы