ZXNet эхоконференция «code.zx»


тема: Fwd: некоторые полезные функции



от: Kirill Frolov
кому: Kirill Frolov
дата: 06 Jul 2003
- --- begin of forward --- From: Kirill Frolov Newsgroups: zxnet.code Subject: некоторые полезные функции Date: Sun, 6 Jul 2003 08:07:24 +0000 (UTC) Hемедленно нажми на RESET, All! Hекоторыми спектрумистами задавался вопрос о генерации случайных чисел и таблично рассчёте CRC... Общие замечания касающиеся всех представленных функций. ---------------------------------- Любые функции, если это не оговорено специально, не гарантируют сохранность любых регистров микропроцессора кроме регистров I и IY. Функции отмеченные как безопасные для C компилятора гаран- тируют сохранность регистра IX. Все функции, если это не оговорено специально, являются реентрантными, иначе говоря позволяют вложенные или рекурсивные вызовы, и не используют статических переменных или самомодифици- рующегося кода. Все переменные выделя- ются на стеке. Функции преобразования чисел: ------------------------------ htoa Функция записывает безнаковое число заданное в регистре A в строку заданную регистром HL в шестнадцатеричной системе счисления. Будет записано 2 цифры (ведущий ноль присутст- вует) и символ с кодом 0 закан- чивающий строку. По завершению функции регистр HL будет ука- зывать на последний символ стро- ки (завершающий 0). wtoa Функция записывает беззнаковое число заданное в регистре BC в строку заданную регистром HL в десятичной системе счисления. Ведущие нули не записываются. Может быть записано до 6-и байт, включая символ с кодом 0 закан- чивающий строку. В регистре HL возвращается указатель на после- дний символ строки (код 0). Функции pаботы со стpоками: ------------------------------ strglob Функция осуществляет сравнение строки заданной регистром HL с строкой маски заданной реги- стром DE. В случае, если строка соответствует маске флаг Z будет установлен. Маска может состоять из любых символов (кроме символа с кодом 0). Hекоторые символы интерпретируются особым образом: * -- означает любое число любых символов. ? -- означает один любой символ. Математические функции: ------------------------------ mul Функция перемножает беззна- ковые 16-разрядные числа задан- ные в регистрах DE и BC, и поме- щает результат в регистры DE и HL. В регистре DE хранятся стар- шие биты результата. Функция вы- полняется примерно за 800 тактов процессора. Смотри также описа- ние функции amul. amul Функция перемножает беззнако- вые числа заданные в регистрах A и DE и прибавляет результат к содержимому регистра HL. Функция выполняется быстрей чем mul, примерно за 350 тактов и может быть использована для доступа к элементам массивов. В том слу- чае если размеры элементов или размерности массивов кратны 2^n или являются константами может быть выгодней использовать более другие способы ускоренного умно- жения. В случае, если требуется более быстрый доступ к элементам массивов с произвольным размером элемента или размерностью может быть целесообразным использовать массивы Айлифа. div Функция делит число заданное в регистре HL на число заданное в регистре BC, результат поме- щается в регистр HL, а остаток в регистр DE. В случае деления на 0 в регистре HL записывается ноль, а в регистре DE значение делимого. Функция выполняется примерно за 900 тактов. sqrt Функция вычисляет целочис- ленное значение квадратного кор- ня от беззнакового числа задан- ного в регистре HL, результат возвращается в регистре A. w2bcd Функция конвертирует беззнако- вое 16-разрядное число в двоич- но-десятичный формат. Аргумент задается в регистре HL, резуль- тат возвращается в регистрах D, E и C. Старшие биты результа- та содержатся в регистре D, млад- шие в регистре C. randn Функция возвращает псевдослу- чайное число в заданном диапазо- не. Минимальное значение возвра- щаемого случайного числа -- 0. Максимальное всегда меньше числа заданного в регистр DE. Резуль- тат возвращается в регистре HL. Смотри также описание функции rand. rand Функция возвращает беззнаковое псевдослучайное число в регистре HL. Возвращаемое число находится в диапазоне 0..65535. Функция выполняется несколько быстрей функции randn. Выполнение функ- ции rand по времени примерно равно 3-м вызовам фунцкии mul, в то время как время выполнения функции randn сопоставимо с 4-мя вызовами функции mul. srand Функция устанавливает генера- тор случайных чисел. При устано- вке генератора одним значением генерируемая последовательность псевдослучайных чисел будет всегда повторяться. Функции рассчетя контрольных кодов: ------------------------------------- flatcher Функция рассчитывает значения кода Флетчера. В регистре IX передается указатель на область памяти, по содержимому которой будет произведен рассчет. В ре- гистре BC передается размер области памяти в байтах. В регистрах HL и DE возвраща- ются значения 16-разрядного кода Флетчера. Это не слишком удачная функция для контроля целостности данных, но работает быстрей функций рассчета КЦК. crc16_init Функция инициализирует таблицу для быстрого подсчета 16-разряд- ного циклического избыточного кода (ЦИК) функцией crc16_fast. В регистре de передается адрес памяти размером 512 байт для сохранения рассчитанной таблицы. В регистре BC указывается порож- дающий многочлен ЦИК. В телеком- муникационных протоколах исполь- зуется рекомендованное МККТТ значение: #1021. crc16_fast Функция рассчитывает значение ЦИК для области памяти с началь- ным адресом заданным в регистре IX и длиной в байтах заданной в регистре BC. В регистре DE пере- дается адрес таблицы предвари- тельно рассчитанной с помощю функции crc16_init. В регистре HL указывается начальное значе- ние ЦИК. Результат рассчется возвращается в регистре HL. crc16 Функция рассчитывает значение ЦИК для области памяти с началь- ным адресом заданным в регистре IX и длиной в байтах заданной в регистре BC. В регистре DE ука- зывается порождающий многочлен ЦИК. В регистре HL задается на- чальное значение ЦИК. Результат рассчета возвращается в реги- стре HL. В качестве порождающего ЦИК многочлена в телекоммуни кационных протоколах использует- ся рекомендуемое МККТТ значение #1021. Результат работы данной функ- ции полностью аналогичен выпол- нению функции crc16_fast, однако эта функция не использует зара- нее рассчитанную таблицу и время ее работы значительно больше. Рекомендуется использовать функ- ции crc16_init и crc16_fast, если требуется вести подсчет ЦИК больших объемов данных.

от: Kirill Frolov
кому: Kirill Frolov
дата: 06 Jul 2003
- --- begin of forward --- From: Kirill Frolov Newsgroups: zxnet.code Subject: некоторые полезные функции Date: Sun, 6 Jul 2003 08:07:24 +0000 (UTC) [...пингвины..сожрали...] ifndef htoa ifused htoa ; a=0..FF, HL=str[3] -> hl=*0 htoa push af rra rra rra rra call nib2hex pop af nib2hex and #0f cp #0a sbc a, #69 daa ld (hl), a inc hl ld (hl), 0 ret endif endif ifndef strglob ifused strglob ; hl=string, de=mask -> Z strglob ld a, (de) or a jr nz, strglob_1 cpi ; end ret strglob_0 xor a inc a ret strglob_1 ld a, (hl) or a jr z, strglob_0 ; not equal ld a, (de) cp "?" jr z, strglob_q cp "*" jr z, strglob_a cp (hl) ret nz ; not equal strglob_q inc hl inc de jr strglob strglob_a inc hl push hl push de call strglob pop de pop hl ret z inc de jr strglob endif endif ifused wtoa ifndef wtoa ; функция записывает 16-разрядное беззнаковое число ; в десятичном виде, ведущие нули не отбрасываются. ; по адресу (hl) будет записано 5 цифр числа и ; символ с кодом 0 завершающий строку. ; (C) Kirill Frolov ; *hl = itoa(de) -> hl=указатель на завершающий 0. wtoa push hl ex de, hl call w2bcd pop hl ; d,e,c=bcd ld a, d or a jr nz, wtoa0 ld a, e and #f0 jr nz, wtoa1 ld a, e and #0f jr nz, wtoa2 ld a, c and #f0 jr nz, wtoa3 jr wtoa4 wtoa0 or #30 ld (hl), a inc hl wtoa1 ld (hl), e ld a, #33 rrd inc hl wtoa2 or #30 ld (hl), a inc hl wtoa3 ld (hl), c ld a, #33 rrd inc hl wtoa4 or #30 ld (hl), a inc hl ld (hl), 0 ret endif endif ifused randn ; Генератор случайных чисел, медленный ; (C) Kirill Frolov ~3000 takts. ; hl = random(0.. hl = случайное число 0..65535 ~2300 takts. rand ; randx = randx*1103515245 + 12345)>>16) & 077777) ld de, (randx+2) ld bc, #4e6d call mul push hl ld de, (randx) ld bc, #41c6 call mul pop de add hl, de push hl ld de, (randx) ld bc, #4e6d call mul ld bc, #3039 add hl, bc ld (randx), hl pop hl adc hl, de ld (randx+2), hl ret endif ifused srand ; Установка генератора случайных чисел ; de = инициирующее значение srand ld (randx), de ret endif ifused div ifndef div ; функция 16-разрядного беззнакового деления ; (C) Aleksey Malov aka Vivid ; little optimized by Vitaly Vidmirov ; hl = de/bc de = de%bc ~840 takts. ; hl = 0, de = de(dividend) if bc(divisor) == 0. div xor a ;меняем знак sub c ; у делителя ld c, a sbc a, b sub c ld b, a ld hl,0 ;обнулили новое делимое ld a,d ;сначала двигаем rla ;старший байт делимого ;t=18 REPT 8 rl l ; add hl,bc ; jr c,$+4 ;8 раз sbc hl,bc ; rla ; t=8*45=360 ENDR ld d,a ;ст. байт результата ld a,e ;теперь двигаем rla ;младший байт t=12 REPT 8 adc hl,hl ; add hl,bc ; jr c,$+4 ;8 раз sbc hl,bc ; rla ; t=8*52=416 ENDR ld e,a ;мл. байт результата ;hl-остаток от деления ;t=4 ex de, hl ret endif endif ifused mul ifndef mul ; функция беззнакового умножения 16-разрядных чисел ; (C) Kirill Frolov ; idea by Vasil Ivanov ; dehl=de*bc ~730t. mul ld hl, 0 ld a, c ld c, l ; 18 add a, a jr nc, $+4 add hl, de adc a, c ; 29 rept 7 add hl, hl rla jr nc, $+4 add hl, de adc a, c ; 40*7 309 endr ld c, a push hl ; 0chl ld hl, 0 ld a, b ld b, l ; 33 add a, a jr nc, $+4 add hl, de add a, b ; 29 rept 7 add hl, hl rla jr nc, $+4 add hl, de add a, b ; 40*7 309 endr ; ahl0 + 0cde = hlde pop de ld b, l ld l, h ld h, a ld a, d add a, b ld d, a ld b, 0 adc hl, bc ex de, hl ; 60 ret ; 729t. endif endif ifused amul ifndef amul ; функция 8-разрядного умножения с суммированием ; (C) Kirill Frolov ; hl = hl + a*de ~338 takts. amul add a, a jr nc, $+4 add hl, de adc a, c ; 39 rept 7 add hl, hl rla jr nc, $+4 add hl, de adc a, c ; 40*7 309 endr ret endif endif ifused sqrt ifndef sqrt ; функция вычисления квадратного корня 16-разрядных чисел ; (C) Aleksey Malov aka Vivid ; a = sqrt(hl) ~470 takts. sqrt xor a ;обнулили a ;-) ld de,64 ;этого требует алгоритм ; t=14 sla h ;берем два самых левых adc a,a ;бита аргумента sla h ; adc a,a ; jr z,$+4 ;если они не равны dec a ;нулю, то увеличиваем inc d ;результат ; t=39 REPT 3 sla h ;далее следуем adc a,a ;алгоритму извлечения sla h ;квадратного корня adc a,a ;"столбиком", только sla d ; ld c,d ;3 раза sli c ; cp c ; jr c,$+4 ; sub c ; inc d ; t=63*3=189 ENDR REPT 2 sla l ;проделываем похожую adc a,a ;операцию с sla l ;младшим байтом adc a,a ;аргумента sla d ; ld c,d ;2 раза sli c ; cp c ; jr c,$+4 ; sub c ; inc d ; t=63*2=126 ENDR ld h,a ; or a ;обнулили флаг переноса ; t=8 sbc hl,de ;теперь нам не хватает jr nc,$+3 ;одного регистра d для add hl,de ;выполнения последних ccf ;двух циклов, придется rl d ;использовать более add hl,hl ;медленные операции add hl,hl ;с регистровыми парами ; t=67 sbc hl,de ;и последний раз ccf ;выполняем расчеты, не ld a,d ;восстанавливая hl adc a,a ;в a-результат ; t=27 ret endif endif ifused w2bcd ifndef w2bcd ; функция переводит 16-разрядное беззнаковое ; двоичное число в двоично-десятичный формат ; (C) Kirill Frolov ; d,e,c = bin2bcd(hl) ~1330 takts. w2bcd ld b, 10h xor a ld c, a ld e, a ld d, a ; 23 w2bcd0 add hl, hl ; D,E,C=bcd digits ld a, c adc a, a daa ld c, a ld a, e adc a, a daa ld e, a ld a, d adc a, a daa ld d, a djnz w2bcd0 ; ~83 ~1328 ret endif endif ; Внимание! ; Все функции подсчета 16-разрядного ЦИК ; используют только сдвиг влево! ifused flatcher ; Функция подсчёта кода Флетчера ; (более быстрый, но менее эффективный чем CRC) ; (C) Kirill Frolov ; ix=данные, bc=размер, ; -> hl=код флетчера (A), de=(B), E&L=8bit code flatcher ld hl, 0 ld e, l ld d, h flatch0 ld a, b or c ex de, hl ret z ex de, hl ld a, (ix) inc ix add a, e ld e, a jr nc, $+3 inc d add hl, de dec bc jr flatch0 endif ifused crc16_init ; Функция инициализирующая таблицу CRC. ; (C) Kirill Frolov ; de=адрес рамещения таблицы (512 байт), ; bc=полином (0x1021 рекомендовано CCITT). crc16_init push ix ld xl, e inc d inc d ld xh, d ld e, c ld d, b ld c, 0 crc_i0 ld l, 0 ld h, c dec h ld b, 8 crc_i1 add hl, hl jr nc, crc_i2 ld a, l xor e ld l, a ld a, h xor d ld h, a crc_i2 djnz crc_i1 dec ix ld (ix+0), l dec xh ld (ix+0), h inc xh dec c jr nz, crc_i0 pop ix ret endif ifused crc16_fast ; быстрая (табличная) функция подсчёта CRC-16, ; требует инициализации функцией crc16_init ; (C) Kirill Frolov ; ix=*data, bc=size, ; de=таблица CRC, hl=начальное значение ; на выходе -> hl=подсчитанное значение crc16_fast push de exx pop de exx crc16f0 ld a, b or c ret z ld a, h xor (ix) inc ix exx ld l, a ld h, 0 adc hl, de ld a, (hl) inc h exx xor l ld h, a exx ld a, (hl) exx ld l, a dec bc jr crc16f0 endif ifused crc16 ; медленная функция подсчёта CRC-16 ; (C) Kirill Frolov ; ix=*data, bc=size ; de=полином (#1021), hl=начальное значение ; на выходе -> hl=подсчитанное значение crc16 crc16_0 ld a, b or c ret z ld a, (ix) inc ix xor h ld h, a ld a, 8 crc16_1 add hl, hl jr nc, crc16_2 exa ld a, l xor e ld l, a ld a, h xor d ld h, a exa crc16_2 dec a jr nz, crc16_1 dec bc jr crc16_0 endif - --- end of forward ---

от: Kirill Frolov
кому: Kirill Frolov
дата: 06 Jul 2003
- --- begin of forward --- From: Kirill Frolov Newsgroups: zxnet.code Subject: некоторые полезные функции Date: Sun, 6 Jul 2003 08:07:24 +0000 (UTC) [...пингвины..сожрали...] ifndef htoa ifused htoa ; a=0..FF, HL=str[3] -> hl=*0 htoa push af rra rra rra rra call nib2hex pop af nib2hex and #0f cp #0a sbc a, #69 daa ld (hl), a inc hl ld (hl), 0 ret endif endif ifndef strglob ifused strglob ; hl=string, de=mask -> Z strglob ld a, (de) or a jr nz, strglob_1 cpi ; end ret strglob_0 xor a inc a ret strglob_1 ld a, (hl) or a jr z, strglob_0 ; not equal ld a, (de) cp "?" jr z, strglob_q cp "*" jr z, strglob_a cp (hl) ret nz ; not equal strglob_q inc hl inc de jr strglob strglob_a inc hl push hl push de call strglob pop de pop hl ret z inc de jr strglob endif endif ifused wtoa ifndef wtoa ; функция записывает 16-разрядное беззнаковое число ; в десятичном виде, ведущие нули не отбрасываются. ; по адресу (hl) будет записано 5 цифр числа и ; символ с кодом 0 завершающий строку. ; (C) Kirill Frolov ; *hl = itoa(de) -> hl=указатель на завершающий 0. wtoa push hl ex de, hl call w2bcd pop hl ; d,e,c=bcd ld a, d or a jr nz, wtoa0 ld a, e and #f0 jr nz, wtoa1 ld a, e and #0f jr nz, wtoa2 ld a, c and #f0 jr nz, wtoa3 jr wtoa4 wtoa0 or #30 ld (hl), a inc hl wtoa1 ld (hl), e ld a, #33 rrd inc hl wtoa2 or #30 ld (hl), a inc hl wtoa3 ld (hl), c ld a, #33 rrd inc hl wtoa4 or #30 ld (hl), a inc hl ld (hl), 0 ret endif endif ifused randn ; Генератор случайных чисел, медленный ; (C) Kirill Frolov ~3000 takts. ; hl = random(0.. hl = случайное число 0..65535 ~2300 takts. rand ; randx = randx*1103515245 + 12345)>>16) & 077777) ld de, (randx+2) ld bc, #4e6d call mul push hl ld de, (randx) ld bc, #41c6 call mul pop de add hl, de push hl ld de, (randx) ld bc, #4e6d call mul ld bc, #3039 add hl, bc ld (randx), hl pop hl adc hl, de ld (randx+2), hl ret endif ifused srand ; Установка генератора случайных чисел ; de = инициирующее значение srand ld (randx), de ret endif ifused div ifndef div ; функция 16-разрядного беззнакового деления ; (C) Aleksey Malov aka Vivid ; little optimized by Vitaly Vidmirov ; hl = de/bc de = de%bc ~840 takts. ; hl = 0, de = de(dividend) if bc(divisor) == 0. div xor a ;меняем знак sub c ; у делителя ld c, a sbc a, b sub c ld b, a ld hl,0 ;обнулили новое делимое ld a,d ;сначала двигаем rla ;старший байт делимого ;t=18 REPT 8 rl l ; add hl,bc ; jr c,$+4 ;8 раз sbc hl,bc ; rla ; t=8*45=360 ENDR ld d,a ;ст. байт результата ld a,e ;теперь двигаем rla ;младший байт t=12 REPT 8 adc hl,hl ; add hl,bc ; jr c,$+4 ;8 раз sbc hl,bc ; rla ; t=8*52=416 ENDR ld e,a ;мл. байт результата ;hl-остаток от деления ;t=4 ex de, hl ret endif endif ifused mul ifndef mul ; функция беззнакового умножения 16-разрядных чисел ; (C) Kirill Frolov ; idea by Vasil Ivanov ; dehl=de*bc ~730t. mul ld hl, 0 ld a, c ld c, l ; 18 add a, a jr nc, $+4 add hl, de adc a, c ; 29 rept 7 add hl, hl rla jr nc, $+4 add hl, de adc a, c ; 40*7 309 endr ld c, a push hl ; 0chl ld hl, 0 ld a, b ld b, l ; 33 add a, a jr nc, $+4 add hl, de add a, b ; 29 rept 7 add hl, hl rla jr nc, $+4 add hl, de add a, b ; 40*7 309 endr ; ahl0 + 0cde = hlde pop de ld b, l ld l, h ld h, a ld a, d add a, b ld d, a ld b, 0 adc hl, bc ex de, hl ; 60 ret ; 729t. endif endif ifused amul ifndef amul ; функция 8-разрядного умножения с суммированием ; (C) Kirill Frolov ; hl = hl + a*de ~338 takts. amul add a, a jr nc, $+4 add hl, de adc a, c ; 39 rept 7 add hl, hl rla jr nc, $+4 add hl, de adc a, c ; 40*7 309 endr ret endif endif ifused sqrt ifndef sqrt ; функция вычисления квадратного корня 16-разрядных чисел ; (C) Aleksey Malov aka Vivid ; a = sqrt(hl) ~470 takts. sqrt xor a ;обнулили a ;-) ld de,64 ;этого требует алгоритм ; t=14 sla h ;берем два самых левых adc a,a ;бита аргумента sla h ; adc a,a ; jr z,$+4 ;если они не равны dec a ;нулю, то увеличиваем inc d ;результат ; t=39 REPT 3 sla h ;далее следуем adc a,a ;алгоритму извлечения sla h ;квадратного корня adc a,a ;"столбиком", только sla d ; ld c,d ;3 раза sli c ; cp c ; jr c,$+4 ; sub c ; inc d ; t=63*3=189 ENDR REPT 2 sla l ;проделываем похожую adc a,a ;операцию с sla l ;младшим байтом adc a,a ;аргумента sla d ; ld c,d ;2 раза sli c ; cp c ; jr c,$+4 ; sub c ; inc d ; t=63*2=126 ENDR ld h,a ; or a ;обнулили флаг переноса ; t=8 sbc hl,de ;теперь нам не хватает jr nc,$+3 ;одного регистра d для add hl,de ;выполнения последних ccf ;двух циклов, придется rl d ;использовать более add hl,hl ;медленные операции add hl,hl ;с регистровыми парами ; t=67 sbc hl,de ;и последний раз ccf ;выполняем расчеты, не ld a,d ;восстанавливая hl adc a,a ;в a-результат ; t=27 ret endif endif ifused w2bcd ifndef w2bcd ; функция переводит 16-разрядное беззнаковое ; двоичное число в двоично-десятичный формат ; (C) Kirill Frolov ; d,e,c = bin2bcd(hl) ~1330 takts. w2bcd ld b, 10h xor a ld c, a ld e, a ld d, a ; 23 w2bcd0 add hl, hl ; D,E,C=bcd digits ld a, c adc a, a daa ld c, a ld a, e adc a, a daa ld e, a ld a, d adc a, a daa ld d, a djnz w2bcd0 ; ~83 ~1328 ret endif endif ; Внимание! ; Все функции подсчета 16-разрядного ЦИК ; используют только сдвиг влево! ifused flatcher ; Функция подсчёта кода Флетчера ; (более быстрый, но менее эффективный чем CRC) ; (C) Kirill Frolov ; ix=данные, bc=размер, ; -> hl=код флетчера (A), de=(B), E&L=8bit code flatcher ld hl, 0 ld e, l ld d, h flatch0 ld a, b or c ex de, hl ret z ex de, hl ld a, (ix) inc ix add a, e ld e, a jr nc, $+3 inc d add hl, de dec bc jr flatch0 endif ifused crc16_init ; Функция инициализирующая таблицу CRC. ; (C) Kirill Frolov ; de=адрес рамещения таблицы (512 байт), ; bc=полином (0x1021 рекомендовано CCITT). crc16_init push ix ld xl, e inc d inc d ld xh, d ld e, c ld d, b ld c, 0 crc_i0 ld l, 0 ld h, c dec h ld b, 8 crc_i1 add hl, hl jr nc, crc_i2 ld a, l xor e ld l, a ld a, h xor d ld h, a crc_i2 djnz crc_i1 dec ix ld (ix+0), l dec xh ld (ix+0), h inc xh dec c jr nz, crc_i0 pop ix ret endif ifused crc16_fast ; быстрая (табличная) функция подсчёта CRC-16, ; требует инициализации функцией crc16_init ; (C) Kirill Frolov ; ix=*data, bc=size, ; de=таблица CRC, hl=начальное значение ; на выходе -> hl=подсчитанное значение crc16_fast push de exx pop de exx crc16f0 ld a, b or c ret z ld a, h xor (ix) inc ix exx ld l, a ld h, 0 adc hl, de ld a, (hl) inc h exx xor l ld h, a exx ld a, (hl) exx ld l, a dec bc jr crc16f0 endif ifused crc16 ; медленная функция подсчёта CRC-16 ; (C) Kirill Frolov ; ix=*data, bc=size ; de=полином (#1021), hl=начальное значение ; на выходе -> hl=подсчитанное значение crc16 crc16_0 ld a, b or c ret z ld a, (ix) inc ix xor h ld h, a ld a, 8 crc16_1 add hl, hl jr nc, crc16_2 exa ld a, l xor e ld l, a ld a, h xor d ld h, a exa crc16_2 dec a jr nz, crc16_1 dec bc jr crc16_0 endif - --- end of forward ---

от: Vlad Sotnikov
кому: Kirill Frolov
дата: 08 Jul 2003
Пpивет, Kirill! 06 июля 2003 года (а было тогда 12:08) Kirill Frolov в своем письме к Kirill Frolov писал: KF> Hекотоpыми спектpyмистами задавался вопpос о генеpации KF> слyчайных чисел и таблично pассчёте CRC... Hекотоpыми спектpyмистами :) Vega/ex-Style Group. <филфак-СПбГУ> FIDO: 2:5030/1512 ZXNET: 500:812/19 E-mail: vega56@mail.ru

от: Pavel Vasilyev
кому: Kirill Frolov
дата: 08 Jul 2003
Привет, Kirill! Воскресенье, 06 Июля 2003, в 12:09:19, Kirill Frolov -> Kirill Frolov. KF> ; функция переводит 16-разрядное беззнаковое KF> ; двоичное число в двоично-десятичный формат KF> ; (C) Kirill Frolov KF> ; d,e,c = bin2bcd(hl) ~1330 takts. KF> w2bcd KF> ld b, 10h KF> xor a KF> ld c, a KF> ld e, a KF> ld d, a ; 23 KF> w2bcd0 KF> add hl, hl ; D,E,C=bcd digits KF> ld a, c KF> adc a, a KF> daa KF> ld c, a KF> ld a, e KF> adc a, a KF> daa KF> ld e, a KF> ld a, d KF> adc a, a KF> daa KF> ld d, a KF> djnz w2bcd0 ; ~83 ~1328 KF> ret w2bcd ld bc,#1000: ld e,c w2bcd0 add hl,hl ld a,c: adc a,a: daa: ld c,a ld a,e: adc a,a: daa: ld e,a rl d: djnz w2bcd0 ret ; b=18 ; t=1043 Закрой за мной дверь, Kirill, я ухожу.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Премьера - Вступительная новелла к игре "MONSTER LAND".
Жертвы врачей - Мне был 21 год, я работал на севере. Соответственно, когда сидишь там месяц в окружении одних мужиков, нет ни секса, ничего.
Экспертиза - экспертная проработка стратегической игры "Theatre Europe".
Железяка - Чудо-сканер.
Demoscene - рассказ zOOm'a о Ческогом пати ShuCon'2004.

В этот день...   8 мая