Или такой еще вопрос, при сохранении через оператор SAVE там каким принципом идет выгрузка контрольной суммы? Может быть через этот оператор есть какие-то лазейки?
Вид для печати
Или такой еще вопрос, при сохранении через оператор SAVE там каким принципом идет выгрузка контрольной суммы? Может быть через этот оператор есть какие-то лазейки?
SAVE разве считает контрольную сумму? В заголовке такого поля нет.
Контрольная сумма пишется в блок последним байтом после массива данных. Алгоритм так себе -- XOR всех байт и дополнительно константы FF. Может быть, через USR и можно как-то воспользоваться этой процедурой, не знаю. По мне, проще уж своё в машкодах написать, чем так мучиться.
JeRrS, Если очень хочется в бейсике, то XOR можно взять отсюда.
Вписав в цикле : LET k=FN X(k,peek(i))
Хорошо, может быть что именно в бейсике не особо то и нужно, если есть какой-то код, который можно вызвать через randomize usr при вызове которого я бы указал start и length в памяти где нужно произвести расчет контрольной суммы?
С передачей параметров видится что-то типа такого:
в нулевой строке после рем процедура подсчета контрольной суммыКод:0 REM ........
10 POKE (6+256*PEEK(23636)+PEEK(23635),Start-INT(Start/256)*256
20 POKE (7+256*PEEK(23636)+PEEK(23635),INT(Start/256)
30 POKE (9+256*PEEK(23636)+PEEK(23635),Start-INT(Lenght/256)*256
40 POKE (10+256*PEEK(23636)+PEEK(23635),INT (Lenght/256)
50 LET CRC = INT USR (5+256*PEEK(23636)+PEEK(23635)
Код:ld hl,0 ;тут будет адрес начала
ld bc,0 ;тут длина блока
.... ;сам алгоритм (регистры IY и I не должны портится)
на выходе в регистре BC должен быть результат
Алгоритм (втупую):
Может и накосячил где. ;)Код:ld a,255
loop: ld d,(hl)
xor d
inc hl
dec bc
ld e,a
ld a,b
or c
ld a,e
jr nz,loop
ld c,a
ret
Упаковал всё, что сказали предыдущие два товарища, в одну строку, в определяемую функцию. Строка 1 должна быть первой в программе.
Вызывать функцию надо так: FN x(start,length)
В 10-й строке CLEAR для прикола. Чтобы было очевидно куда можно писать CLEAR.
В 20-й строке пример вызова функции, для подсчёта контрольной суммы экрана. В данном виде пустого, ответ должен получиться 255.
Reobne, О - Отлично) то что нужно. Я правильно понимаю что я ограничен тем что нельзя заполнять данные свыше чем 65000?