Chciałem się podzielić pewnym spostrzeżeniem.
Nie odkryłem może niczego nowego, ale okazuje się że mając potrzebę wykonania takiego działania:
Y=X/(2^N-1)można z powodzeniem zastosować takie przybliżenie:
Y=round(X+X/2^N)/2^NMnie zaoszczędziło to iteracji z dzieleniem dzięki czemu działanie Y=X/63 wykonuje się nie dwie linie CPU, a około jednej.
Edit: Na końcu przydaje się round (uzupełniłem).
Edit 2: A jakby ktoś chciał kawałek kodu, oto:
  lda value
  sta div64l
  lda #0
  sta div64h
  lda value+1
  asl div64l
  rol
  rol div64h
  asl div64l
  rol
  rol div64h
  adc value
  sta div64l
div64h = *+1
  lda #
  adc value+1
  asl div64l
  rol
  asl div64l
  adc #0value to 16-bit wartość wejściowa, w .A jest 8-bit wynik. Przedtem kod wyglądał tak:
  lda value
  sta result
  lda value+1
  ldx #8
?div:
  cmp #63
  scc
  sbc #63
  rol result
  rol
  dex
  bne ?div
result = *+1
  lda #Obydwa kawałki kodu dzielą jeszcze wynik przez 2 (taką akurat miałem potrzebę).
niewiedza buduje, wiedza rujnuje
