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


тема: быстрое деление/умножение



от: Kirill Frolov
кому: All
дата: 23 Mar 2001
Hемедленно нажми на RESET, All!

Пытаюсь драйвер винта для ис-доса (и не только) сделать. А тут надо
CHS адресацию в LBA пересчитывать и обратно. Если из CHS в LBA то получается
два 16-битных умножения, а если из LBA в CHS то одно умножение и два 16-битных
деления с остатком. А если вспомнить сколько времени спек делит 16-битные
числа
то страшно становится подумать как же оно тормозить будет! Hа одно деление
уходит
только несколько тысяч тактов, да и на умножение не намного меньше. :-(

Можно провести оптимизацию:

; HLDE=LBA, HL'=трек DE'=секторов в треке

LD B, 4
L1 ЕX DE, HL
ADD HL, HL
EX DE, HL
ADC HL, HL
DJNZ L1
LD B, 28
EXX
LD HL, 0
LD DE, (HEADS*SECTORS)
EXX
L2 EX DE, HL
ADD HL, HL
EX DE, HL
ADC HL, HL
EXX
CCF
JR NC, L3
ADD HL, DE
L3 ADC HL, HL
EXX
DJNZ L2

Получается около 2-х тыс. тактов. :-( Hа ОДHУ операцию! :-(

Дизассемблером ещё не пытался смотреть -- неужели так каждый драйвер винта
тормозит? :-( )


* Originally in CODE.ZX
* Crossposted in ZX.SPECTRUM




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

Похожие статьи:
Четыре килобайта - Оптрону - два года.
Стихи - Программистам-эмигрантам.
Сатанизм - атано_философы и храм Сета.
От авторов - Вступительное слово.
My Amiga - Senat рассказывает о своей первой Амиге.

В этот день...   28 марта