home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Esprit de Apple Corps
/
EDAC-2.iso
/
Graphics
/
Apps
/
Demos
/
GSMovie.Apr94
/
Multiply.asm
< prev
next >
Wrap
Assembly Source File
|
1994-05-05
|
68KB
|
3,962 lines
mcopy mult.macros
keep multiply2
***************************************************************
* Copyright 1993 - 1994
* Kenneth C. Richardson
* 1011 New Hope Street - 29B
* Norristown, PA 19401
***************************************************************
* You may use the following routines in your program but you
* must state that you are using the routines in your program.
* ie This program contains routines written by
* Kenneth C. Richardson - Copyright 1993 - 1994
*This routine also uses 6 Orca Macros so give credit to
*ByteWorks as well.
***************************************************************
***************************************************************
* C INTEGER SUBROUTINES IN THIS FILE - untested!!
***************************************************************
*
* Multiply16to16
* - unsigned multiply with NO error checking
* - use this routine only if you know what you are doing
*
* result parameter
* result - word size multiplication result
* input parameters
* word2 - second word to be multiplied
* word1 - first word to be multiplied
*
***************************************************************
*
* Multiply16to16Check
* - unsigned multiply with pinning of overflow values
* - this routine is slightly slower than the one above
*
* result parameter
* result - word size multiplication result
* input parameters
* word2 - second word to be multiplied
* word1 - first word to be multiplied
*
***************************************************************
*
* Multiply16to32
* - unsigned multiply
*
* result parameter
* result - multiplication result
* - pull high order word first
* input parameters
* word2 - second word to be multiplied
* word1 - first word to be multiplied
*
***************************************************************
*
* Multiply32to64
* - unsigned 32 bit by 32 bit multiply with 64 bit result
*
* result parameter
* result - multiplication result
* - pull high order words first
* input parameters
* longword2 - second word to be multiplied
* - push low order word first
* longword1 - first word to be multiplied
* - push low order word first
*
***************************************************************
*
* MultiArray16to16
* - this routine multiplies the number of array elements
* specified by the fourth parameter
*
* input parameters
*
* ResultArrayPtr LongWord Pointer
* Input2ArrayPtr LongWord Pointer
* Input1ArrayPtr Longword Pointer
* Values to Multiply Word
* - number of array elements to be multiplied
* no result Parameters
*
***************************************************************
*
* MultiArray16to16Check
* - this routine multiplies the number of array elements
* specified by the fourth parameter
* - this routine adds overflow checking to the above routine
*
* input parameters
*
* ResultArrayPtr LongWord Pointer
* Input2ArrayPtr LongWord Pointer
* Input1ArrayPtr Longword Pointer
* Values to Multiply Word
* - number of array elements to be multiplied
* no result Parameters
*
***************************************************************
*
* MultiArray16to32
*
* input parameters
* ResultArrayPtr LongWord
* Input2ArrayPtr Longword
* Input1ArrayPtr LongWord
* Values to Multiply Word
* No Output Parameters
*
***************************************************************
* Assembly Language Entry Points
*
***************************************************************
*
* MultiplyByTable entry
* - the A register contains the larger multiplier
* - the X register contains the other multiplier times 2 for
* the jump table
* - then perform a JSR (MultiplyByTable,x) instruction
* - the result will return in the accumulator
***************************************************************
*
* MultiplyBy entry
* ldx NumberPer1b ;direct page address
* jmp (MultiplyByTable,x)
*
* MultiplyBy2 entry
* ldx NumberPer2b ;direct page address
* jmp (MultiplyByTable,x)
*
*
***************************************************************
*
Multiply16to16 start
ShiftValue1 equ $00
ShiftValue2 equ $02
ShiftValue3 equ $04
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$08
tcd ;set up new direct page
lda ShiftValue1
cpa ShiftValue2
bcs SV1Higher ;When ShiftVal1>ShiftValue2 then
; ; ShiftValue1 stays in the A reg
asl A ;ShiftValue1 still in register
tax
ldx ShiftValue1
jsr (MultiplyTable,x)
bra Finish16By16
SV1Higher anop
lda ShiftValue2
asl A
tax
lda ShiftValue1
jsr (MultiplyTable,x)
Finish16by16 anop
sta ShiftValue3
MovePointersEtc anop
tsc
tcd
lda $04
sta $08
lda $02
sta $06
lda $00
sta $04 ;move return address
tsc ;only result remains on stack
clc
adc #$04
tcs
pld ;restore original direct page
rtl
END ;End Multiply16by16
***********************************************
Multiply16to16Check start
ShiftValue1 equ $00
ShiftValue2 equ $02
ShiftValue3 equ $04
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$08
tcd ;set up new direct page
lda ShiftValue1
cpa ShiftValue2
bcs SV1Higher ;When ShiftVal1>ShiftValue2 then
; ; ShiftValue1 goes in the X reg
; ; reverse of non checking code
cmp #256 ;if SV2>SV1>256 then certain overflow
bcs OverFlow16
lda ShiftValue2
asl A ;ShiftValue1 still in register
tax
cmp #$03
bcs DoNotUseTable
lda ShiftValue1
cpa >OverFlowTable,x ;contains min overflow values
bcs OverFlow16
DoNotUseTable anop
jsr (MultiplyTable,x)
bra Finish16by16
OverFlow16 anop
lda #$ffff
sta ShiftValue3
sec ;set for error checking
brl Finish16by16
SV1Higher anop
lda ShiftValue2
cmp #256
bcs OverFlow16
asl A
tax
bcs DoNotUseTable2
lda ShiftValue1
cmp >OverFlowTable,x ;contains min values overflow
bcs OverFlow16
lda ShiftValue1
cmp #256
bcs OverFlow16
DoNotUseTable2 anop
jsr (MultiplyTable,x)
Finish16by16 anop
clc ;no overflow error in multiplication
sta ShiftValue3
MovePointersEtc anop
tsc
tcd
lda $04
sta $08
lda $02
sta $06
lda $00
sta $04 ;move return address
tsc ;only result remains on stack
clc
adc #$04
tcs
pld ;restore original direct page
rtl
END ;finished Multiply16by16 with overflow
; checking
***********************************************
Multiply16to32 start
ShiftValue1 equ $00 ;work space for 8 by 8 mulitply
ShiftValue2 equ $02 ;work space for 8 by 8 mulitply
ShiftValue3 equ $04 ;work space for 8 by 8 mulitply
ShiftValue4 equ $06 ;stores fast multiply return address
ShiftValue5 equ $08 ;stores part of old direct page
ShiftValue6 equ $0a ;stores part of above and return address
ShiftValue7 equ $0c ;stores rest of return address
ShiftValue8 equ $0e ;Input Parameter1
ShiftValue9 equ $10 ;Input Parameter2
ShiftValue10 equ $12 ;Low Word of Result
ShiftValue11 equ $14 ;High Word of Result
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$06 ;added work space SV1,SV2,SV3
tcd ;set up new direct page
lda ShiftValue8
and #$00ff
asl A
;DO NOT bother to check for zero condition
; because jsr (multiplytable,x) is fast enough
; with a lda #$0000, & rts as the whole subroutine
;Why speed up one possibility when you slow
; down the other 255?
tax
lda ShiftValue9
and #$00ff
jsr (MultiplyTable,x)
sta ShiftValue10
lda ShiftValue8
xba
and #$00ff
asl A
tax
lda ShiftValue9
xba
and #$00ff
jsr (MultiplyTable,x)
sta ShiftValue9
lda ShiftValue8
and #$00ff
asl A
tax
lda ShiftValue9
xba
and #$00ff
jsr (MultiplyTable,x)
xba
tax
and #$ff00
clc
adc ShiftValue11
sta ShiftValue11
txa
and #$00ff
clc
adc ShiftValue10
sta ShiftValue10
lda ShiftValue8
xba
and #$00ff
asl A
tax
lda ShiftValue9
and #$00ff
jsr (MultiplyTable,x)
xba
tax
and #$ff00
clc
adc ShiftValue11
sta ShiftValue11
txa
and #$00ff
clc
adc ShiftValue10
sta ShiftValue10
lda ShiftValue7
sta ShiftValue9
lda ShiftValue6
sta ShiftValue8
lda ShiftValue5
sta ShiftValue7 ;move return address and original DP
tsc ;only result remains on stack
clc
adc #$04 ;move by number of input param bytes
tcs ;store new stack pointer
pld ;restore original direct page
rtl ;end subroutine
END
***********************************************
Multiply32to64 start
Storage8a10a equ $00 ;storage for later additions
Storage8a10b equ $02
Storage8a11a equ $04
Storage8a11b equ $06
Storage8b10a equ $08
Storage8b10b equ $0a
Storage8b11a equ $0c
Storage8b11b equ $0e
Storage9a10a equ $10
Storage9a10b equ $12
Storage9a11a equ $14
Storage9a11b equ $16
Storage9b10a equ $18
Storage9b10b equ $1a
Storage9b11a equ $1c
Storage9b11b equ $1e ;storage for later additions
ShiftValue1 equ $20 ;for 0 through 256 multiply table
ShiftValue2 equ $22 ; for 0 through 256 multiply table
ShiftValue3 equ $24 ; for 0 through 256 multiply table
ShiftValue4 equ $26 ;reserved for fast multiply return address
ShiftValue5 equ $28 ; reserved for return address
ShiftValue6 equ $2a ; reserved for return address
ShiftValue7 equ $2c ; reserved for return address
ShiftValue8 equ $2e ;low order word of 1st input parameter
ShiftValue9 equ $30 ; high order word of 1st input parameter
ShiftValue10 equ $32 ;low order word of 2nd input parameter
ShiftValue11 equ $34 ; high order word of 2nd input parameter
ShiftValue12 equ $36 ;lowest order word of result
ShiftValue13 equ $38 ; low-middle word of result
ShiftValue14 equ $3a ; high-middle word of result
ShiftValue15 equ $3c ; high order word of result
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$28 ;add work space for storage vals,& rts
tcd ;set up new direct page
lda ShiftValue8
and #$00ff ;highest order byte
asl A
tax
tay ;store for next multiplies
lda ShiftValue10
and #$00ff ;highest order byte
jsr (MultiplyTable,x)
sta Storage8a10a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue10
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8a10b
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8a11a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8a11b
***********
lda ShiftValue8
xba
and #$00ff ;highest order byte
asl A
tax
tay ;store for next multiplies
lda ShiftValue10
and #$00ff ;highest order byte
jsr (MultiplyTable,x)
sta Storage8b10a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue10
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8b10b
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8b11a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage8b11b
***********
lda ShiftValue9
and #$00ff ;highest order byte
asl A
tax
tay ;store for next multiplies
lda ShiftValue10
and #$00ff ;highest order byte
jsr (MultiplyTable,x)
sta Storage9a10a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue10
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9a10b
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9a11a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9a11b
***********
lda ShiftValue8
xba
and #$00ff ;highest order byte
asl A
tax
tay ;store for next multiplies
lda ShiftValue10
and #$00ff ;highest order byte
jsr (MultiplyTable,x)
sta Storage9b10a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue10
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9b10b
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9b11a
tyx ;retrieve stored value - low byte of ShiftValue8
lda ShiftValue11
xba
and #$00ff ;high order byte
jsr (MultiplyTable,x)
sta Storage9b11b
***********
;At this point each part of the 64 bit result is determined so addition
;must now be used to combine all 16 of the multiplications
********************************************************************
* word1 word2 word3 word4
* byte# 1 2 3 4 5 6 7 8
*
* result position name
* |SV12 |SV13 |SV14 |SV15
* | | | |
* temporary storage names
* 8a10a 8a10b 8a11a 8a11b
* 8b10a 8b10b 8b11a 8b11b
* 9a10a 9a10b 9a11a 9a11b
* 9b10a 9b10b 9b11a 9b11b
* | | | |
* |SV12 |SV13 |SV14 |SV15
********************************************************************
ldx #$0000 ;clear register to zero
lda Storage8a10a
sta ShiftValue12
clc
lda Storage8a11a
adc Storage8b10b
sta ShiftValue13
lda Storage8b11b
adc Storage9a11a
sta ShiftValue14
tax
adc Storage9b11b
sta ShiftValue15
clc
lda ShiftValue13
adc Storage9a10a
sta ShiftValue13
clc
lda ShiftValue14
adc Storage9b10b
sta ShiftValue14
bcc SkipIncrement1
inc ShiftValue15
clc
SkipIncrement1 anop
lda ShiftValue12+1 ;offset by a byte
adc Storage8a10b
bcc SkipIncrement2
inc ShiftValue13+1
clc
SkipIncrement2 anop
adc Storage8b10a
sta ShiftValue12+1
lda ShiftValue13+1
adc Storage8a11b
bcc SkipIncrement3
inc ShiftValue14+1
clc
SkipIncrement3 anop
adc Storage8b11a
bcc SkipIncrement4
inc ShiftValue14+1
clc
SkipIncrement4 anop
adc Storage9a10b
bcc SkipIncrement5
inc ShiftValue14+1
clc
SkipIncrement5 anop
adc Storage9b10a
sta ShiftValue13+1
lda ShiftValue14+1
adc Storage9a11b
bcc SkipIncrement6
inc ShiftValue15+1
clc
SkipIncrement6 anop
adc Storage9b11a
bcc SkipIncrement7
inc ShiftValue15+1
SkipIncrement7 anop
sta ShiftValue14+1
**
** Multiplication result now in result parameter of stack
**
lda ShiftValue7
sta ShiftValue11
lda ShiftValue6
sta ShiftValue10
lda ShiftValue5
sta ShiftValue9 ;move return address and original DP
tsc ;only result remains on stack
clc
adc #$08 ;move by number of input param bytes
tcs ;store new stack pointer
pld ;restore original direct page
rtl ;end subroutine
END
***********************************************
MultiArray16to16 start
* input parameters
*
* ResultArrayPtr LongWord
* Input1ArrayPtr Longword
* Input2ArrayPtr LongWord
* Values to Multiply Word
* No Output Parameters
ShiftValue1 equ $00
ShiftValue2 equ $02
ShiftValue3 equ $04
NegResult equ $06
* $08 thru $0f reserved by stack
ArraySize equ $10
Input2ArrayPtr equ $12
Input1ArrayPtr equ $16
ResultArrayPtr equ $1a
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$08
tcd ;set up new direct page
ldy #$0000 ;index for input and output arrays
LoopStart lda [Input2ArrayPtr],y
sta ShiftValue2
lda [Input1ArrayPtr],y
sta ShiftValue1
cpa ShiftValue2
bcs SV1Higher ;When ShiftVal1>ShiftValue2 then
; ; ShiftValue1 stays in the A reg
asl A ;ShiftValue1 still in register
tax
ldx ShiftValue1
jsr (MultiplyTable,x)
bra Finish16By16
SV1Higher anop
lda ShiftValue2
asl A
tax
lda ShiftValue1
jsr (MultiplyTable,x)
Finish16by16 anop
sta [ResultArrayPtr],y
cpy ArraySize
beq MovePointersEtc
iny
iny
brl LoopStart
MovePointersEtc anop
tsc
tcd
lda $04
sta $08
lda $02
sta $06
lda $00
sta $04 ;move return address
tsc ;only result remains on stack
clc
adc #$04
tcs
pld ;restore original direct page
rtl
END ;End Multiply16by16
***********************************************
MultiArray16to16Check start
* input parameters
* ResultArrayPtr LongWord
* Input1ArrayPtr Longword
* Input2ArrayPtr LongWord
* Values to Multiply Word
* No Output Parameters
ShiftValue1 equ $00
ShiftValue2 equ $02
ShiftValue3 equ $04
NegResult equ $06
* $08 thru $0f reserved by stack
ArraySize equ $10
Input1ArrayPtr equ $12
Input2ArrayPtr equ $16
ResultArrayPtr equ $1a
; set up new direct page
phd ;save original DP
tsc
sec
sbc #$08
tcd ;set up new direct page
ldy #$0000 ;index for input and output arrays
LoopStart lda [Input2ArrayPtr],y
sta ShiftValue2
lda [Input1ArrayPtr],y
lda ShiftValue1
cpa ShiftValue2
bcs SV1Higher ;When ShiftVal1>ShiftValue2 then
; ; ShiftValue1 goes in the X reg
; ; reverse of non checking code
cmp #256 ;if SV2>SV1>256 then certain overflow
bcs OverFlow16
lda ShiftValue2
asl A ;ShiftValue1 still in register
tax
cmp #$03
bcs DoNotUseTable
lda ShiftValue1
cpa >OverFlowTable,x ;contains min values overflow
bcs OverFlow16
DoNotUseTable anop
jsr (MultiplyTable,x)
bra Finish16by16
OverFlow16 anop
lda #$ffff
sta ShiftValue3
sec ;set for error checking
brl Finish16by16
SV1Higher anop
lda ShiftValue2
cmp #256
bcs OverFlow16
asl A
tax
bcs DoNotUseTable2
lda ShiftValue1
cmp >OverFlowTable,x ;contains min values overflow
bcs OverFlow16
lda ShiftValue1
cmp #256
bcs OverFlow16
DoNotUseTable2 anop
jsr (MultiplyTable,x)
Finish16by16 anop
sta [ResultArrayPtr],y
cpy ArraySize
beq MovePointersEtc
iny
iny
brl LoopStart
MovePointersEtc anop
tsc
tcd
lda $04
sta $08
lda $02
sta $06
lda $00
sta $04 ;move return address
tsc ;only result remains on stack
clc
adc #$04
tcs
pld ;restore original direct page
rtl
END ;finished Multiply16by16 with overflow
; checking
***********************************************
MultiArray16to32 start
* input parameters
* ResultArrayPtr LongWord
* Input1ArrayPtr Longword
* Input2ArrayPtr LongWord
* Values to Multiply Word
* No Output Parameters
ResultArrayPtr equ $1e
Input2ArrayPtr equ $1a
Input1ArrayPtr equ $16
ArraySize equ $14
* $0c thru $13 reserved by stack
ShiftValue10 equ $12 ;return address
ShiftValue9 equ $10 ;return address & direct page
ShiftValue8 equ $0e ;direct page & space for jsr (MultiplyTable,x)
ShiftValue7 equ $0c ;space for jsr (MultiplyTable,x)
NegResult equ $0a
ResultHigh equ $08
ResultLow equ $06
ShiftValue3 equ $04
ShiftValue2 equ $02
ShiftValue1 equ $00
; set up new direct page
ldy #$0000 ;initialize the Y index
phd ;save original DP
tsc
sec
sbc #$0c ;allocate work space from stack
tcd ;set up new direct page
StartOfLoop anop
lda [Input1ArrayPtr],y
and #$00ff
asl A ;DO NOT bother to check for zero condition
tax ; because jsr (multiplytable,x) is fast
; enough
lda [Input2ArrayPtr],y
and #$00ff ;Why speed up one possibility when you slow
; ; down the other 255?
jsr (MultiplyTable,x)
sta ResultLow
lda [Input1ArrayPtr],y
xba
and #$00ff
asl A
tax
lda [Input2ArrayPtr],y
xba
and #$00ff
jsr (MultiplyTable,x)
sta ResultHigh
lda [Input1ArrayPtr],y
and #$00ff
asl A
tax
lda [Input2ArrayPtr],y
xba
and #$00ff
jsr (MultiplyTable,x)
clc
adc ResultLow+1
sta ResultLow+1
bcc NoIncrementHere1
inc ResultHigh+1
NoIncrementHere1 anop
lda [Input1ArrayPtr],y
xba
and #$00ff
asl A
tax
lda [Input2ArrayPtr],y
and #$00ff
jsr (MultiplyTable,x)
clc
adc ResultLow+1
sta ResultLow+1
bcc NoIncrementHere2
inc ResultHigh+1
NoIncrementHere2 anop
** now save the answer into the indexed address
tyx
tya
asl A ;result array size 2X as large as input size
tay
lda ResultLow
sta [ResultArrayPtr],y
iny
lda ResultHigh
sta [ResultArrayPtr],y
txy ;increment loop
iny
cpy ArraySize
beq EndThisLoop
brl StartOfLoop
EndThisLoop anop
** now remove all input parameters from stack - no result remains on stack
pld ;restore orignal direct page
lda ShiftValue10
sta ResultArrayPtr+2
lda ShiftValue9
sta ResultArrayPtr ;move return address
tsc ;no result remains on stack
clc
adc #$0e ;move by number of input param bytes
tcs ;store new stack pointer
rtl ;end subroutine
END
***********************************************
OverFlowChecking start
OverFlowTable entry
dc i2'65535'
dc i2'65535'
dc i2'32768'
dc i2'21846'
dc i2'16384'
dc i2'13108'
dc i2'10923'
dc i2'9363'
dc i2'8192'
dc i2'7282'
dc i2'6554'
dc i2'5958'
dc i2'5462'
dc i2'5042'
dc i2'4682'
dc i2'4370'
dc i2'4096'
dc i2'3856'
dc i2'3641'
dc i2'3450'
dc i2'3277' ;20
dc i2'3121'
dc i2'2979'
dc i2'2850'
dc i2'2731'
dc i2'2622' ;
dc i2'2521'
dc i2'2428'
dc i2'2341'
dc i2'2260'
dc i2'2185' ;30
dc i2'2115'
dc i2'2048'
dc i2'1986'
dc i2'1928'
dc i2'1873' ;
dc i2'1821'
dc i2'1772'
dc i2'1725'
dc i2'1681'
dc i2'1639' ;40
dc i2'1599'
dc i2'1561'
dc i2'1525'
dc i2'1490'
dc i2'1457' ;
dc i2'1425'
dc i2'1395'
dc i2'1366'
dc i2'1338'
dc i2'1311' ;50
dc i2'1286'
dc i2'1261'
dc i2'1237'
dc i2'1214'
dc i2'1192' ;55
dc i2'1171'
dc i2'1150'
dc i2'1130'
dc i2'1111'
dc i2'1093' ;60
dc i2'1075'
dc i2'1058'
dc i2'1041'
dc i2'1024'
dc i2'1009' ;65
dc i2'993'
dc i2'979'
dc i2'964'
dc i2'950'
dc i2'937' 70
dc i2'924'
dc i2'911'
dc i2'898'
dc i2'886'
dc i2'874' ;75
dc i2'863'
dc i2'852'
dc i2'841'
dc i2'830'
dc i2'820' ;80
dc i2'810'
dc i2'800'
dc i2'790'
dc i2'781'
dc i2'772' ;85
dc i2'763'
dc i2'754'
dc i2'745'
dc i2'737'
dc i2'729' ;90
dc i2'721'
dc i2'713'
dc i2'705'
dc i2'698'
dc i2'690' ;95
dc i2'683'
dc i2'676'
dc i2'669'
dc i2'662'
dc i2'656' ;100
dc i2'649'
dc i2'643'
dc i2'637'
dc i2'631'
dc i2'625' ;105
dc i2'619'
dc i2'613'
dc i2'607'
dc i2'602'
dc i2'596' ;110
dc i2'591'
dc i2'586'
dc i2'580'
dc i2'575'
dc i2'570' ;115
dc i2'565'
dc i2'561'
dc i2'556'
dc i2'551'
dc i2'547' ;120
dc i2'542'
dc i2'538'
dc i2'533'
dc i2'529'
dc i2'525' ;125
dc i2'521'
dc i2'517'
dc i2'512'
dc i2'509'
dc i2'505' ;130
dc i2'501'
dc i2'497'
dc i2'493'
dc i2'490'
dc i2'486' ;135
dc i2'482'
dc i2'479'
dc i2'475'
dc i2'472'
dc i2'469' ;140
dc i2'465'
dc i2'462'
dc i2'459'
dc i2'456'
dc i2'452' ;145
dc i2'449'
dc i2'446'
dc i2'443'
dc i2'440'
dc i2'437' ;150
dc i2'435'
dc i2'432'
dc i2'429'
dc i2'426'
dc i2'423' ;155
dc i2'421'
dc i2'418'
dc i2'415'
dc i2'413'
dc i2'410' ;160
dc i2'408'
dc i2'405'
dc i2'403'
dc i2'400'
dc i2'398' ;165
dc i2'395'
dc i2'393'
dc i2'391'
dc i2'388'
dc i2'386' ;170
dc i2'384'
dc i2'382'
dc i2'379'
dc i2'377'
dc i2'375' ;175
dc i2'373'
dc i2'371'
dc i2'369'
dc i2'367'
dc i2'365' ;180
dc i2'363'
dc i2'361'
dc i2'359'
dc i2'357'
dc i2'355' ;185
dc i2'353'
dc i2'351'
dc i2'349'
dc i2'347'
dc i2'345' ;190
dc i2'344'
dc i2'342'
dc i2'340'
dc i2'338'
dc i2'337' ;195
dc i2'335'
dc i2'333'
dc i2'331'
dc i2'330'
dc i2'328' ;200
dc i2'327'
dc i2'325'
dc i2'323'
dc i2'322'
dc i2'320' ;205
dc i2'319'
dc i2'317'
dc i2'316'
dc i2'314'
dc i2'313' ;210
dc i2'311'
dc i2'310'
dc i2'308'
dc i2'307'
dc i2'305' ;215
dc i2'304'
dc i2'303'
dc i2'301'
dc i2'300'
dc i2'298' ;220
dc i2'297'
dc i2'296'
dc i2'294'
dc i2'293'
dc i2'292' ;225
dc i2'290'
dc i2'289'
dc i2'288'
dc i2'287'
dc i2'285' ;230
dc i2'284'
dc i2'283'
dc i2'282'
dc i2'281'
dc i2'279' ;235
dc i2'278'
dc i2'277'
dc i2'276'
dc i2'275'
dc i2'274' ;240
dc i2'272'
dc i2'271'
dc i2'270'
dc i2'269'
dc i2'268' ;245
dc i2'267'
dc i2'266'
dc i2'265'
dc i2'264'
dc i2'263' ;250
dc i2'262'
dc i2'261'
dc i2'260'
dc i2'259'
dc i2'258' ;255
dc i2'256'
dc i2'255'
END
***********************************************
*
* Number being multiplied is in A
* Number multiplying is in X
MultiplySub Start
* direct page equates for tween routine
ShiftValue1 equ $00
ShiftValue2 equ $02
ShiftValue3 equ $04
ShiftValue4 equ $06
ShiftValue5 equ $08
ShiftValue6 equ $0a
ShiftValue7 equ $0c
ShiftValue8 equ $0e
TempX equ $10 ;work space for registers X,Y, & A
TempY equ $12
TempA equ $14
TempA2 equ $16
firstframe equ $18 ;for direct indirect addressing of
secondframe equ $1c ; loaded frames and processed frames
processedframe equ $20 ;pointed to processed frame
tweenpallette equ $24 ;Pallette check box info from dialog
tweenSCRN equ $26 ;SCRN check box info from dialog
TweenNumber equ $28 ;number of frames to be created
SCRNSize equ $2a ;length of SHR info for dex loop
PalletteSize equ $2c ;length of pallette info for dex loop
NumberPer1 equ $2e ;percentage of first frame in picture
NumberPer2 equ $30 ;percentage of 2nd frame in picture
FilenameLength equ $32
SuffixLength equ $34
NumberAdd1 equ $36
NumberAdd2 equ $38
NumberResult equ $3a
NumberPer1b equ $42
NumberPer2b equ $44
;DO NOT USE TEMPY AS A VARIABLE IN THIS ROUTINE,
;THE ROUTINE THAT CALLS THIS ONE USES TEMPY
MultiplyBy entry
ldx NumberPer1b
jmp (MultiplyByTable,x)
MultiplyBy2 entry
ldx NumberPer2b
jmp (MultiplyByTable,x)
MultiplyByTable entry
dc i2'multi0'
dc i2'multi1'
dc i2'multi2a'
dc i2'multi3'
dc i2'multi4'
dc i2'multi5'
dc i2'multi6'
dc i2'multi7'
dc i2'multi8'
dc i2'multi9'
dc i2'multi10'
dc i2'multi11'
dc i2'multi12'
dc i2'multi13'
dc i2'multi14'
dc i2'multi15'
dc i2'multi16'
dc i2'multi17'
dc i2'multi18'
dc i2'multi19'
dc i2'multi20'
dc i2'multi21'
dc i2'multi22'
dc i2'multi23'
dc i2'multi24'
dc i2'multi25'
dc i2'multi26'
dc i2'multi27'
dc i2'multi28'
dc i2'multi29'
dc i2'multi30'
dc i2'multi31'
dc i2'multi32'
dc i2'multi33'
dc i2'multi34'
dc i2'multi35'
dc i2'multi36'
dc i2'multi37'
dc i2'multi38'
dc i2'multi39'
dc i2'multi40'
dc i2'multi41'
dc i2'multi42'
dc i2'multi43'
dc i2'multi44'
dc i2'multi45'
dc i2'multi46'
dc i2'multi47'
dc i2'multi48'
dc i2'multi49'
dc i2'multi50'
dc i2'multi51'
dc i2'multi52'
dc i2'multi53'
dc i2'multi54'
dc i2'multi55'
dc i2'multi56'
dc i2'multi57'
dc i2'multi58'
dc i2'multi59'
dc i2'multi60'
dc i2'multi61'
dc i2'multi62'
dc i2'multi63'
dc i2'multi64'
dc i2'multi65'
dc i2'multi66'
dc i2'multi67'
dc i2'multi68'
dc i2'multi69'
dc i2'multi70'
dc i2'multi71'
dc i2'multi72'
dc i2'multi73'
dc i2'multi74'
dc i2'multi75'
dc i2'multi76'
dc i2'multi77'
dc i2'multi78'
dc i2'multi79'
dc i2'multi80'
dc i2'multi81'
dc i2'multi82'
dc i2'multi83'
dc i2'multi84'
dc i2'multi85'
dc i2'multi86'
dc i2'multi87'
dc i2'multi88'
dc i2'multi89'
dc i2'multi90'
dc i2'multi91'
dc i2'multi92'
dc i2'multi93'
dc i2'multi94'
dc i2'multi95'
dc i2'multi96'
dc i2'multi97'
dc i2'multi98'
dc i2'multi99'
dc i2'multi100'
dc i2'multi101'
dc i2'multi102'
dc i2'multi103'
dc i2'multi104'
dc i2'multi105'
dc i2'multi106'
dc i2'multi107'
dc i2'multi108'
dc i2'multi109'
dc i2'multi110'
dc i2'multi111'
dc i2'multi112'
dc i2'multi113'
dc i2'multi114'
dc i2'multi115'
dc i2'multi116'
dc i2'multi117'
dc i2'multi118'
dc i2'multi119'
dc i2'multi120'
dc i2'multi121'
dc i2'multi122'
dc i2'multi123'
dc i2'multi124'
dc i2'multi125'
dc i2'multi126'
dc i2'multi127'
dc i2'multi128'
dc i2'multi129'
dc i2'multi130'
dc i2'multi131'
dc i2'multi132'
dc i2'multi133'
dc i2'multi134'
dc i2'multi135'
dc i2'multi136'
dc i2'multi137'
dc i2'multi138'
dc i2'multi139'
dc i2'multi140'
dc i2'multi141'
dc i2'multi142'
dc i2'multi143'
dc i2'multi144'
dc i2'multi145'
dc i2'multi146'
dc i2'multi147'
dc i2'multi148'
dc i2'multi149'
dc i2'multi150'
dc i2'multi151'
dc i2'multi152'
dc i2'multi153'
dc i2'multi154'
dc i2'multi155'
dc i2'multi156'
dc i2'multi157'
dc i2'multi158'
dc i2'multi159'
dc i2'multi160'
dc i2'multi161'
dc i2'multi162'
dc i2'multi163'
dc i2'multi164'
dc i2'multi165'
dc i2'multi166'
dc i2'multi167'
dc i2'multi168'
dc i2'multi169'
dc i2'multi170'
dc i2'multi171'
dc i2'multi172'
dc i2'multi173'
dc i2'multi174'
dc i2'multi175'
dc i2'multi176'
dc i2'multi177'
dc i2'multi178'
dc i2'multi179'
dc i2'multi180'
dc i2'multi181'
dc i2'multi182'
dc i2'multi183'
dc i2'multi184'
dc i2'multi185'
dc i2'multi186'
dc i2'multi187'
dc i2'multi188'
dc i2'multi189'
dc i2'multi190'
dc i2'multi191'
dc i2'multi192'
dc i2'multi193'
dc i2'multi194'
dc i2'multi195'
dc i2'multi196'
dc i2'multi197'
dc i2'multi198'
dc i2'multi199'
dc i2'multi200'
dc i2'multi201'
dc i2'multi202'
dc i2'multi203'
dc i2'multi204'
dc i2'multi205'
dc i2'multi206'
dc i2'multi207'
dc i2'multi208'
dc i2'multi209'
dc i2'multi210'
dc i2'multi211'
dc i2'multi212'
dc i2'multi213'
dc i2'multi214'
dc i2'multi215'
dc i2'multi216'
dc i2'multi217'
dc i2'multi218'
dc i2'multi219'
dc i2'multi220'
dc i2'multi221'
dc i2'multi222'
dc i2'multi223'
dc i2'multi224'
dc i2'multi225'
dc i2'multi226'
dc i2'multi227'
dc i2'multi228'
dc i2'multi229'
dc i2'multi230'
dc i2'multi231'
dc i2'multi232'
dc i2'multi233'
dc i2'multi234'
dc i2'multi235'
dc i2'multi236'
dc i2'multi237'
dc i2'multi238'
dc i2'multi239'
dc i2'multi240'
dc i2'multi241'
dc i2'multi242'
dc i2'multi243'
dc i2'multi244'
dc i2'multi245'
dc i2'multi246'
dc i2'multi247'
dc i2'multi248'
dc i2'multi249'
dc i2'multi250'
dc i2'multi251'
dc i2'multi252'
dc i2'multi253'
dc i2'multi254'
dc i2'multi255'
dc i2'multi256'
ShiftValue10 dc i2'0'
ShiftValue11 dc i2'0'
ShiftValue12 dc i2'0'
ShiftValue13 dc i2'0'
ShiftValue14 dc i2'0'
ShiftValue15 dc i2'0'
ShiftValue16 dc i2'0'
ShiftValue17 dc i2'0'
multi0 anop
lda #$0000
rts
multi1 anop
rts
multi256 xba
and #$ff00 ;5 cycles
rts
multi128 asl A
multi64 asl A
multi32 asl A
multi16 asl A
multi8 asl A
multi4 asl A
multi2a asl A ;2 cycles
rts
multi192 asl A
multi96 asl A
multi48 asl A
multi24 asl A
multi12 asl A
multi6 asl A
multi3 sta ShiftValue1
asl A
clc ;12 cycles
adc ShiftValue1
rts
multi160 asl A
multi80 asl A
multi40 asl A
multi20 asl A
multi10 asl A
multi5 sta ShiftValue1
asl A
asl A ;14 cycles
clc
adc ShiftValue1
rts
multi224 asl A
multi112 asl A
multi56 asl A
multi28 asl A
multi14 asl A
multi7 sta ShiftValue1
asl A
sta ShiftValue2 ;22 cycles
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi144 asl A
multi72 asl A
multi36 asl A
multi18 asl A
multi9 sta ShiftValue1
asl A
asl A ;16 cycles
asl A
clc
adc ShiftValue1
rts
multi176 asl A
multi88 asl A
multi44 asl A
multi22 asl A
multi11 sta ShiftValue1
asl A
sta ShiftValue2 ;24 cycles
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi208 asl A
multi104 asl A
multi52 asl A
multi26 asl A
multi13 sta ShiftValue1
asl A
asl A ;24 cycles
sta ShiftValue2
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi240 asl A
multi120 asl A
multi60 asl A
multi30 asl A
multi15 sta ShiftValue1
asl A
asl A ;20 cycles
asl A
asl A
sec
sbc ShiftValue1
rts
multi136 asl A
multi68 asl A
multi34 asl A
multi17 sta ShiftValue1
asl A
asl A ;18 cycles
asl A
asl A
clc
adc ShiftValue1
rts
multi152 asl A
multi76 asl A
multi38 asl A
multi19 sta ShiftValue1
asl A
sta ShiftValue2 ;26 cycles
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi168 asl A
multi84 asl A
multi42 asl A
multi21 sta ShiftValue1
asl A
asl A ;26 cycles
sta ShiftValue2
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi184 asl A
multi92 asl A
multi46 asl A
multi23 sta ShiftValue1
asl A
asl A ;28 cycles
asl A
sta ShiftValue2
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi200 asl A
multi100 asl A
multi50 asl A
multi25 sta ShiftValue1
asl A
asl A ;28 cycles
asl A
sta ShiftValue2
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi216 asl A
multi108 asl A
multi54 asl A
multi27 sta ShiftValue1 ;store initial value
asl A
asl A ;30 cycles
sta ShiftValue2
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi232 asl A
multi116 asl A
multi58 asl A
multi29 sta ShiftValue1 ;0001 1101
asl A
sta ShiftValue2 ;30 cycles
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi248 asl A
multi124 asl A
multi62 asl A
multi31 sta ShiftValue1 ;0001 1111
asl A
asl A ;22 cycles
asl A
asl A
asl A
sec
sbc ShiftValue1
rts
multi132 asl A
multi66 asl A
multi33 sta ShiftValue1 ;0010 0001
asl A
asl A ;20 cycles
asl A
asl A
asl A
clc
adc ShiftValue1
rts
multi140 asl A
multi70 asl A
multi35 sta ShiftValue1 ;0010 0011
asl A
sta ShiftValue2 ;28 cycles
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi148 asl A
multi74 asl A
multi37 sta ShiftValue1 ;0010 0101
asl A
asl A ;28 cycles
sta ShiftValue2
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi156 asl A
multi78 asl A
multi39 sta ShiftValue1 ;0010 0111
asl A
asl A ;30 cycles
asl A
sta ShiftValue2
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi164 asl A
multi82 asl A
multi41 sta ShiftValue1 ;0010 1001
asl A
asl A ;28 cycles
asl A
sta ShiftValue2
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi172 asl A
multi86 asl A
multi43 sta ShiftValue1
asl A
sta ShiftValue2 ;36 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi180 asl A
multi90 asl A
multi45 sta ShiftValue1 ;0010 1101
asl A
asl A ;36 cycles
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi188 asl A
multi94 asl A
multi47 sta ShiftValue1 ;0010 1111
asl A
asl A ;30 cycles
asl A
asl A
sta ShiftValue2
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi196 asl A
multi98 asl A
multi49 sta ShiftValue1 ;0011 0001
asl A
asl A ;28 cycles
asl A
asl A
sta ShiftValue2
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi204 asl A
multi102 asl A
multi51 sta ShiftValue1
asl A
sta ShiftValue2 ;36 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi212 asl A
multi106 asl A
multi53 sta ShiftValue1 ;0011 0101
asl A
asl A ;42 cycles
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi220 asl A
multi110 asl A
multi55 sta ShiftValue1 ;0011 0111
asl A
asl A ;38 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc Shiftvalue3
rts
multi228 asl A
multi114 asl A
multi57 sta ShiftValue1 ;0011 1001
asl A
asl A ;36 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc Shiftvalue3
rts
multi236 asl A
multi118 asl A
multi59 sta ShiftValue1 ;0011 1011
asl A ;64-5=59
asl A ;34 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi244 asl A
multi122 asl A
multi61 sta ShiftValue1 ;0011 1101
asl A ;64-2-1
sta ShiftValue2 ;34 cycles
asl A
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi252 asl A
multi126 asl A
multi63 sta ShiftValue1 ;0011 1111
asl A ;64-1
asl A ;24 cycles
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
rts
multi130 asl A
multi65 sta ShiftValue1 ;0100 0001
asl A ;64+1
asl A ;22 cycles
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
rts
multi134 asl A
multi67 sta ShiftValue1 ;0100 0011
asl A
sta ShiftValue2 ;30 cycles
asl A
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi138 asl A
multi69 sta ShiftValue1 ;0100 0101
asl A
asl A ;30 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi142 asl A
multi71 sta ShiftValue1 ;0100 0111
asl A
asl A ;32 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi146 asl A
multi73 sta ShiftValue1 ;0100 1001
asl A
asl A ;30 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi150 asl A
multi75 sta ShiftValue1 ;0100 1011
asl A
sta ShiftValue2 ;38 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi154 asl A
multi77 sta ShiftValue1 ;0100 1101
asl A
asl A ;38 cycles
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi158 asl A
multi79 sta ShiftValue1 ;0100 1111
asl A
asl A ;32 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi162 asl A
multi81 sta ShiftValue1 ;0101 0001
asl A
asl A ;30 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi166 asl A
multi83 sta ShiftValue1 ;0101 0011
asl A
sta ShiftValue2 ;38 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi170 asl A
multi85 sta ShiftValue1 ;0101 0101
asl A
asl A ;38 cycles
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi174 asl A
multi87 sta ShiftValue1 ;0101 0111
asl A
asl A ;40 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi178 asl A
multi89 sta ShiftValue1 ;0101 1001
asl A
asl A ;38 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi182 asl A
multi91 sta ShiftValue1 ;0101 1011
asl A ;96-5
asl A ;40 cycles
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
clc
adc ShiftValue3
rts
multi186 asl A
multi93 sta ShiftValue1 ;0101 1101
asl A ;96-3
sta ShiftValue2 ;40 cycles
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
clc
adc ShiftValue3
rts
multi190 asl A
multi95 sta ShiftValue1 ;0101 1111
asl A ;64+32-1
asl A ;32 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi194 asl A
multi97 sta ShiftValue1 ;0110 0001
asl A ;64+32+1
asl A ;30 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi198 asl A
multi99 sta ShiftValue1 ;0110 0011
asl A ;64+32+2+1
sta ShiftValue2 ;38 cycles
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi202 asl A
multi101 sta ShiftValue1 ;0110 0101
asl A ;64+32+4+1
asl A ;38 cycles
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi206 asl A
multi103 sta ShiftValue1 ;0110 0111
asl A ;64+32+8-1
asl A ;40 cycles
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi210 asl A
multi105 sta ShiftValue1 ;0110 1001
asl A ;64+32+8+1
asl A ;38 cycles
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi214 asl A
multi107 sta ShiftValue1 ;0110 1011
asl A ;128-16-4-1
asl A ;44 cycles
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
rts
multi218 asl A
multi109 sta ShiftValue1 ;0110 1101
asl A ;128-16-2-1
sta ShiftValue2 ;44
asl A
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
rts
multi222 asl A
multi111 sta ShiftValue1 ;0110 1111
asl A ;64+32-16-1
asl A ;40 cycles
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi226 asl A
multi113 sta ShiftValue1 ;0111 0001
asl A ;64+32+16+1
asl A ;38 cycles
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi230 asl A
multi115 sta ShiftValue1 ;0111 0011
asl A ;128-8-4-1
asl A
sta ShiftValue2 ;44 cycles
asl A
sta ShiftValue3
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
rts
multi234 asl A
multi117 sta ShiftValue1 ;0111 0101
asl A ;128-8-2-1
sta ShiftValue2 ;44 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
rts
multi238 asl A
multi119 sta ShiftValue1 ;0111 0111
asl A ;128-9
asl A ;34 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi242 asl A
multi121 sta ShiftValue1 ;0111 1001
asl A ;128-8+1
asl A ;34 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
sec
sbc ShiftValue2
rts
multi246 asl A
multi123 sta ShiftValue1 ;0111 1011
asl A ;128-4-1
asl A ;34 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
asl A
sec
adc ShiftValue1
sec
sbc ShiftValue2
rts
multi250 asl A
multi125 sta ShiftValue1 ;0111 1101
asl A ;128-2-1
sta ShiftValue2 ;34 cycles
asl A
asl A
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
sec
sbc ShiftValue2
rts
multi254 asl A
multi127 sta ShiftValue1 ;0111 1111
asl A ;128-1
asl A ;26 cycles
asl A
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
rts
multi129 sta ShiftValue1 ;1000 0001
asl A ;128+1
asl A ;24 cycles
asl A
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
rts
multi131 sta ShiftValue1 ;1000 0011
asl A ;128+3
sta ShiftValue2 ;32 cycles
asl A
asl A
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi133 sta ShiftValue1 ;1000 0101
asl A ;128+5
asl A ;32 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi135 sta ShiftValue1 ;1000 0111
asl A ;128+8-1
asl A ;34 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi137 sta ShiftValue1 ;1000 1001
asl A ;128+8+1
asl A ;32 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi139 sta ShiftValue1 ;1000 1011
asl A ;128+8+2+1
sta ShiftValue2 ;40 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi141 sta ShiftValue1 ;1000 1101
asl A ;128+8+2+1
asl A ;40 cycles
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi143 sta ShiftValue1 ;1000 1111
asl A ;128+16-1
asl A ;34 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi145 sta ShiftValue1 ;1001 0001
asl A ;128+16+1
asl A ;32 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi147 sta ShiftValue1 ;1001 0011
asl A ;128+16+3
sta ShiftValue2 ;40 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi149 sta ShiftValue1 ;1001 0101
asl A ;128+16+5
asl A
sta ShiftValue2 ;40 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi151 sta ShiftValue1 ;1001 0111
asl A ;128+16+8-1
asl A ;42 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi153 sta ShiftValue1 ;1001 1001
asl A ;128+16+8+1
asl A ;40 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi155 sta ShiftValue1 ;1001 1011
asl A ;128+16+8+3
tax
asl A ;50 cycles
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi157 sta ShiftValue1 ;1001 1101
asl A ;128+16+8+5
asl A ;50 cycles
tax
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi159 sta ShiftValue1 ;1001 1111
asl A ;128+32-1
asl A ;34 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi161 sta ShiftValue1 ;1010 0001
asl A ;128+32+1
asl A ;32 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi163 sta ShiftValue1 ;1010 0011
asl A ;128+32+3
sta ShiftValue2 ;38 cycles
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi165 sta ShiftValue1 ;1010 0101
asl A ;128+32+5
asl A
sta ShiftValue2 ;38 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi167 sta ShiftValue1 ;1010 0111
asl A ;128+32+8-1
asl A ;40 cycles
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi169 sta ShiftValue1 ;1010 1001
asl A ;128+32+8+1
asl A ;38 cycles
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi171 sta ShiftValue1 ;1010 1011
asl A ;128+32+8+3
tax
asl A ;48 cycles
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi173 sta ShiftValue1 ;1010 1101
asl A ;128+32+8+5
asl A ;48 cycles
tax
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi175 sta ShiftValue1 ;1010 1111
asl A ;128+32+16-1
asl A ;42 cycles
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi177 sta ShiftValue1 ;1011 0001
asl A ;128+32+16+1
asl A ;40 cycles
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi179 sta ShiftValue1 ;1011 0011
asl A ;128+32+16+3
tax
asl A ;50 cycles
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi181 sta ShiftValue1 ;1011 0101
asl A ;128+32+16+5
asl A ;50 cycles
tax
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi183 tax ;1011 0111
asl A ;128+32+16+8-1
asl A ;50 cycles
asl A
sta ShiftValue1
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
sec
sbc ShiftValue1
rts
multi185 tax ;1011 1001
asl A ;128+32+16+8+1
asl A ;50 cycles
asl A
sta ShiftValue1
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi187 sta ShiftValue1 ;1011 1011
asl A ;128+64-4-1
asl A ;42 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi189 sta ShiftValue1 ;1011 1011
asl A ;128+64-2-1
sta ShiftValue2
asl A ;42 cycles
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi191 sta ShiftValue1 ;1011 1111
asl A ;128+64-1
asl A ;34 cycles
asl A
asl A
asl A
asl A
sta ShiftValue2
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
multi193 sta ShiftValue1 ;1100 0001
asl A ;128+64+1
asl A ;32 cycles
asl A
asl A
asl A
asl A
sta ShiftValue2
asl A
clc
adc ShiftValue1
adc ShiftValue2
rts
multi195 sta ShiftValue1 ;1100 0011
asl A ;128+64+3
sta ShiftValue2 ;40 cycles
asl A
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi197 sta ShiftValue1 ;1100 0101
asl A ;128+64+5
asl A
sta ShiftValue2 ;40 cycles
asl A
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi199 sta ShiftValue1 ;1100 0111
asl A ;128+64+8-1
asl A
asl A
sta ShiftValue2 ;42 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi201 sta ShiftValue1 ;1100 1001
asl A ;128+64+8+1
asl A
asl A
sta ShiftValue2 ;40 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi203 sta ShiftValue1 ;1100 1011
asl A ;128+64+8+3
tax
asl A
asl A
sta ShiftValue2 ;50 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi205 sta ShiftValue1 ;1100 1101
asl A ;128+64+8+3
asl A
tax
asl A
sta ShiftValue2 ;50 cycles
asl A
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi207 sta ShiftValue1 ;1100 1111
asl A ;128+64+16-1
asl A
asl A
asl A
sta ShiftValue2 ;40 cycles
asl A
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi209 sta ShiftValue1 ;1101 0001
asl A ;128+64+16+1
asl A ;38 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi211 sta ShiftValue1 ;1101 0011
asl A ;128+64+16+3
tax
asl A ;48 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi213 sta ShiftValue1 ;1101 0101
asl A ;128+64+16+5
asl A ;48 cycles
tax
asl A
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi215 tax ;1101 0111
asl A ;128+64+16+8-1
asl A ;52 cycles
sta ShiftValue1
asl A
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
sec
sbc ShiftValue1
rts
multi217 tax ;1101 1001
asl A ;128+64+16+8+1
asl A ;50 cycles
sta ShiftValue1
asl A
asl A
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi219 tax ;1101 1011
asl A ;128+64+32-4-1
asl A ;54 cycles
sta ShiftValue1
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue2
adc ShiftValue3
sec
sbc ShiftValue1
stx ShiftValue1
sec
sbc ShiftValue1
rts
multi221 tax ;1101 1101
asl A ;128+64+32-2-1
sta ShiftValue1
asl A ;54 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue2
adc ShiftValue3
sec
sbc ShiftValue1
stx ShiftValue1
sec
sbc ShiftValue1
rts
multi223 sta ShiftValue1 ;1101 1111
asl A ;128+64+32-1
asl A ;42 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
sec
sbc ShiftValue1
clc
adc ShiftValue2
adc ShiftValue3
rts
multi225 sta ShiftValue1 ;1110 0001
asl A ;128+64+32+1
asl A ;40 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
rts
multi227 sta ShiftValue1 ;1110 0011
asl A ;128+64+32+3
tax
asl A ;50 cycles
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi229 sta ShiftValue1 ;1110 0101
asl A ;128+64+32+3
asl A ;50 cycles
tax
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi231 tax ;1110 0111
asl A ;128+64+32+8-1
asl A ;52 cycles
sta ShiftValue1
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
sec
sbc ShiftValue1
rts
multi233 tax ;1110 1001
asl A ;128+64+32+8+1
asl A ;50 cycles
sta ShiftValue1
asl A
asl A
asl A
sta ShiftValue2
asl A
sta ShiftValue3
asl A
clc
adc ShiftValue1
adc ShiftValue2
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi235 sta ShiftValue1 ;1110 1011
asl A ;128+128-16-4-1
asl A ;54 cycles
sta ShiftValue2
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
tax
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi237 sta ShiftValue1 ;1110 1101
asl A ;128+128-16-2-1
sta ShiftValue2
asl A ;54 cycles
asl A
asl A
sta ShiftValue3
asl A
asl A
asl A
tax
sec
sbc ShiftValue1
sec
sbc ShiftValue2
sec
sbc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi239 sta ShiftValue1 ;1110 1111
asl A ;128+128+16-1
asl A ;44 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue1
sec
sbc ShiftValue2
clc
adc ShiftValue3
rts
multi241 sta ShiftValue1 ;1111 0001
asl A ;128+128-16+1
asl A ;42 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue2
clc
adc ShiftValue1
adc ShiftValue3
rts
multi243 sta ShiftValue1 ;1111 0011
asl A ;128+128-16+3
tax
asl A ;52 cycles
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue2
clc
adc ShiftValue1
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi245 sta ShiftValue1 ;1111 0101
asl A ;128+128-16+5
asl A ;52 cycles
tax
asl A
asl A
sta ShiftValue2
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue2
clc
adc ShiftValue1
adc ShiftValue3
stx ShiftValue1
adc ShiftValue1
rts
multi247 sta ShiftValue1 ;1111 0111
asl A ;128+128-8-1
asl A ;44 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue2
sec
sbc ShiftValue1
clc
adc ShiftValue3
rts
multi249 sta ShiftValue1 ;1111 1001
asl A ;128+128-8+1
asl A ;42 cycles
asl A
sta ShiftValue2
asl A
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue2
clc
adc ShiftValue1
adc ShiftValue3
rts
multi251 sta ShiftValue1 ;1111 1011
asl A ;128+128-4-1
asl A ;44 cycles
sta ShiftValue2
asl A
asl A
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue1
sec
sbc ShiftValue2
clc
adc ShiftValue3
rts
multi253 sta ShiftValue1 ;1111 1101
asl A ;128+128-2-1
sta ShiftValue2
asl A ;44 cycles
asl A
asl A
asl A
asl A
asl A
sta ShiftValue3
sec
sbc ShiftValue1
sec
sbc ShiftValue2
clc
adc ShiftValue3
rts
multi255 sta ShiftValue1 ;1111 1101
asl A ;128+128-1
asl A ;34 cycles
asl A
asl A
asl A
asl A
asl A
sta ShiftValue2
sec
sbc ShiftValue1
clc
adc ShiftValue2
rts
END
***************************************************************
DivideBy Start
* direct page equates for tween routine
TempX equ $00 ;work space for registers X,Y, & A
TempY equ $02
TempA equ $04
TempA2 equ $06
firstframe equ $08 ;for direct indirect addressing of
secondframe equ $0c ; loaded frames and processed frames
processedframe equ $10 ;pointed to processed frame
tweenpallette equ $14 ;Pallette check box info from dialog
tweenSCRN equ $16 ;SCRN check box info from dialog
TweenNumber equ $18 ;number of frames to be created
SCRNSize equ $1a ;length of SHR info for dex loop
PalletteSize equ $1c ;length of pallette info for dex loop
NumberPer1 equ $1e ;percentage of first frame in picture
NumberPer2 equ $20 ;percentage of 2nd frame in picture
FilenameLength equ $22
SuffixLength equ $24
NumberAdd1 equ $26
NumberAdd2 equ $28
NumberResult equ $2a
DblTweenTotal equ $30
;DO NOT USE TEMPY AS A VARIABLE IN THIS ROUTINE,
;THE ROUTINE THAT CALLS THIS ONE USES TEMPY
ldx DblTweenTotal
jmp (DivideByTable,x)
DivideByTable anop
dc i2'DivideBy0'
dc i2'DivideBy1'
dc i2'DivideBy2'
dc i2'DivideBy3'
dc i2'DivideBy4'
dc i2'DivideBy5'
dc i2'DivideBy6'
dc i2'DivideBy7'
dc i2'DivideBy8'
dc i2'DivideBy9'
dc i2'DivideBy10'
dc i2'DivideBy11'
dc i2'DivideBy12'
dc i2'DivideBy13'
dc i2'DivideBy14'
dc i2'DivideBy15'
dc i2'DivideBy16'
dc i2'DivideBy17'
dc i2'DivideBy18'
dc i2'DivideBy19'
dc i2'DivideBy20'
dc i2'DivideBy21'
dc i2'DivideBy22'
dc i2'DivideBy23'
dc i2'DivideBy24'
dc i2'DivideBy25'
dc i2'DivideBy26'
dc i2'DivideBy27'
dc i2'DivideBy28'
dc i2'DivideBy29'
dc i2'DivideBy30'
dc i2'DivideBy31'
dc i2'DivideBy32'
DivideBy0 anop
lda #$ffff
rts
DivideBy1 anop
rts
DivideBy31 anop
tax
lsr A
lsr A
lsr A
lsr A
lsr A
sta TempA
txa
sec
sbc TempA
rts
DivideBy32 anop
lsr A
DivideBy16 anop
lsr A
DivideBy8 anop
lsr A
DivideBy4 anop
lsr A
DivideBy2 anop
lsr A
rts
DivideBy24 anop
lsr A
DivideBy12 anop
lsr A
DivideBy6 anop
lsr A
DivideBy3 anop
tax
lsr A
sta TempA
txa
clc
adc TempA
lsr TempA
sec
sbc TempA
lsr TempA
clc
adc TempA
lsr TempA
sec
sbc TempA
lsr TempA
clc
adc TempA
lsr A
lsr A
rts
SlowDivide anop
DIV2 TempA,TempA2
rts
DivideBy20 anop
lsr A
DivideBy5 anop
asl A
DivideBy10 anop
inc A
tax
lsr A
sta TempA
txa
sec
sbc TempA ;1 - 0.5 = 0.5
lsr TempA
sec
sbc TempA ;0.5 - .25 = .25
lsr TempA
sec
sbc TempA
lsr TempA
clc
adc TempA ;.25-.0625 = .1875
lsr TempA
lsr TempA
clc
adc TempA ;.1875+.015625
lsr A
rts
DivideBy28 anop
lsr A
DivideBy14 anop
lsr A
DivideBy7 anop
inc A
asl A
sta TempA
lsr TempA
sec
sbc TempA ;______ .5
lsr TempA
sec
sbc TempA ;______ .25
lsr TempA
lsr TempA
sec
sbc TempA ;______ 1/4 -1/16 -1/32 -1/128 -1/256
lsr TempA
sec
sbc TempA ;______ - 1/32
lsr TempA
lsr TempA
sec
sbc TempA ;______ - 1/128
lsr TempA
sec
sbc TempA ;______ - 1/256
lsr A
rts
DivideBy9 anop
asl A
DivideBy18 anop
lsr A
lsr A
tax
lsr A
sta TempA
txa
sec
sbc TempA
lsr TempA
lsr TempA
lsr TempA
lsr TempA
sec
sbc TempA
lsr TempA
sec
sbc TempA
lsr A
rts
DivideBy11 anop
asl A
DivideBy22 anop
lsr A
lsr A
tax
lsr A
sta TempA
txa
sec
sbc TempA ;1/8
lsr TempA
lsr TempA
sec
sbc TempA ;-1/32
lsr TempA
lsr TempA
lsr TempA
lsr TempA
sec
sbc TempA ;-1/512
lsr A
rts
DivideBy13 anop
asl A
DivideBy26 anop
tax
lsr A
sta TempA
txa
sec
sbc TempA
lsr TempA
clc
adc TempA
lsr TempA
sec
sbc TempA
lsr A
lsr A
lsr A
lsr A
rts
DivideBy30 anop
lsr A
DivideBy15 anop
lsr A
tax
lsr A
sta TempA
txa
sec
sbc TempA
lsr TempA
lsr TempA
sec
sbc TempA
lsr TempA
sec
sbc TempA
lsr TempA
sec
sbc TempA
lsr TempA
sec
sbc TempA
lsr A
rts
DivideBy17 anop
tax
lsr A
lsr A
lsr A
lsr A
sta TempA
txa
sec
sbc TempA
lsr A
lsr A
lsr A
lsr A
rts
DivideBy19 anop
tax
lsr A
lsr A
lsr A
sta TempA
txa
sec
sbc TempA
lsr A
lsr A
lsr A
lsr A
rts
DivideBy21 anop
jsr DivideBy7
jmp DivideBy3
DivideBy23 anop
tax
lsr A
lsr A
sta TempA
txa
sec
sbc TempA
lsr TempA
lsr TempA
sec
sbc TempA
lsr TempA
lsr TempA
clc
adc TempA
lsr A
lsr A
lsr A
lsr A
rts
DivideBy25 anop
jsr DivideBy5
jmp DivideBy5
DivideBy27 anop
jsr DivideBy9
jmp DivideBy3
DivideBy29 anop
tax
lsr A
lsr A
lsr A
lsr A
lsr A
sta TempA
txa
clc
adc TempA
jmp DivideBy28
END