User Tools

Site Tools


base:multiplication_with_a_constant

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:multiplication_with_a_constant [2015-04-17 04:33]
127.0.0.1 external edit
base:multiplication_with_a_constant [2020-03-30 22:27] (current)
tww
Line 14: Line 14:
   adc $2 ; Add the two results together   adc $2 ; Add the two results together
 </​code>​ </​code>​
 +
 +----
 +
 +EDIT: The above is based on 8*A + 2*A. This routine would not allow any higher number than A = 25 as it would overflow (8 * 26) + (2 * 26) = 208 + 52 = 262 (However 25 fits perfectly f.ex. when you'd want to calculate a character line based on Y).
 +
 +With this in mind, you can do 2*A + 8*A which saves you the asl $2. Also as long as A cannot be higher than 25, the upper 4 bits (high nybble) will always be #%0000. This means that the asl instructions will never set carry and the clc can be dropped.
 +
 +This gives the following code to multiply A with 10 (assuming A is less than 25):
 +
 +<​code>​
 +    asl      // Multiply A with 2
 +    sta $2   // Store A * 2 for later
 +    asl      // Multiply A with 4
 +    asl      // Multiply A with 8
 +    adc $2   // Add A * 8 + A * 2
 +</​code>​
 +(12 cycles / 7 bytes) vs (17 cycles / 10 bytes)
 +
 +----
  
 You may also use a table, which is even faster, but would take up more space. You may also use a table, which is even faster, but would take up more space.
base/multiplication_with_a_constant.1429237983.txt.gz ยท Last modified: 2015-04-17 04:33 by 127.0.0.1