Created
December 6, 2010 20:48
-
-
Save thebird/730917 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
INCLUDE 'derivative.inc' | |
XREF MCU_init | |
XDEF Entry, _Startup, main | |
ORG $2000 | |
ValueA ds.b 1 | |
ValueB ds.b 1 | |
ValueC ds.b 1 | |
ValueA2 ds.b 1 | |
ValueB2 ds.b 1 | |
ValueC2 ds.b 1 | |
ORG $2020 | |
err ds.b 1 | |
err1 ds.b 1 | |
err2 ds.b 1 | |
root11 ds.b 2 | |
root12 ds.b 2 | |
root21 ds.b 2 | |
root22 ds.b 2 | |
MY_EXTENDED_RAM: SECTION | |
Root1 | |
Root2 | |
MyCode: SECTION | |
main: | |
_Startup: | |
Entry: | |
LDS #$3600 ; initialize the stack pointer | |
LDAA ValueA | |
PSHA | |
LDAA #0 | |
PSHA | |
LDAA ValueB | |
PSHA | |
LDAA #0 | |
PSHA | |
LDAA ValueC | |
PSHA | |
LDAA #0 | |
PSHA | |
JSR quad | |
LDAA err | |
STAA err1 | |
PULY | |
PULX | |
STY root11 | |
STX root12 | |
LDAA ValueA2 | |
PSHA | |
LDAA #0 | |
PSHA | |
LDAA ValueB2 | |
PSHA | |
LDAA #0 | |
PSHA | |
LDAA ValueC2 | |
PSHA | |
LDAA #0 | |
PSHA | |
JSR quad | |
LDAA err | |
STAA err2 | |
PULY | |
PULX | |
STY root21 | |
STX root22 | |
SWI | |
quad LEAS 2,SP ; remove reference from stack | |
LDAA #0 ; load 0 into A | |
LDAB 5,SP ; load inputA from stack into B | |
CBA ; compare A and B | |
LBEQ errorFlag ; if A=0 then run errorFlag | |
LDAA 3,SP ; load inputB from stack intp A | |
LDAB 3,SP ; load inputB from stack into B | |
MUL ; inputB * inputB | |
PSHD ; push D on stack | |
LDD 6,SP ; load inputA from stack into D | |
LDY 2,SP ; load inputC from stack into Y | |
EMULS ; inputA * inputC | |
LDY #4 ; load 4 into accum Y | |
EMULS ; result of last EMULS * 4 | |
PSHD ; push D on stack | |
LDD 2,SP ; load D with B^2 | |
SUBD 0,SP ; B^2 - 4AC | |
BEQ oneRoot ; if equal | |
BMI errorFlag ; if negative | |
BNE twoRoots ; if not equal and positive | |
oneRoot NEG 9,SP ; negate inputA from stack | |
BPL nonNeg ; if inputA is neg the goto nonNeg | |
LDD 10,SP ; load inputA from stack into D | |
LDY #2 ; load 2 into Y | |
EMULS ; multiply A*2 | |
PSHD ; push result on stack | |
LDD 10,SP ; load inputB from stack into D | |
LDAA #$FF ; load $FF into A | |
LDX 0,SP ; load A*2 into X | |
IDIVS ; divide D by X and store in D | |
BRA endOneRoot | |
nonNeg LDD 10,SP ; load inputA from stack into D | |
LDY #2 ; load 2 into Y | |
EMULS ; multiply A*2 | |
PSHD ; push result on stack | |
LDD 10,SP ; load inputB from stack into D | |
LDAA #$00 ; load 0 into A | |
LDX 0,SP ; load A*2 into X | |
IDIVS ; divide D by X and store in D | |
BRA endOneRoot | |
endOneRoot MOVB #$00,err | |
LDAA err | |
LEAS 6,SP | |
PULY | |
PSHA | |
PSHX | |
PSHY | |
RTS | |
twoRoots JSR sqrt ; get sqrt of D | |
PSHD ; push D to stack | |
LDAB 11,SP ; load inputB from stack into B | |
NEGB ; negate B | |
ADDB 1,SP ; -B + sqrt | |
PSHD ; push result to stack | |
LDD 14,SP ; load inputA from stack into D | |
LDY #2 ; load 2 into Y | |
EMULS ; A * 2 | |
PSHD ; push result to stack | |
LDAB 3,SP ; load -B + sqrt from stack into B | |
SEX B,D ; add 00 to beginning of B | |
LDX 0,SP ; load 2A from stack into X | |
IDIVS ; divide D by x | |
PSHX ; push root 1 on stack | |
LDAB 17,SP ; load inputB from stack into B | |
NEGB ; negate B | |
SUBB 7,SP ; -B - sqrt | |
PSHD ; push result to stack | |
LDD 20,SP ; load inputA from stack into D | |
LDY #2 ; load 2 into Y | |
EMULS ; A * 2 | |
PSHD ; push result to stack | |
LDAB 3,SP ; load -B - sqrt from stack into B | |
SEX B,D ; add 00 to beginning of B | |
LDX 0,SP ; load 2A from stack into X | |
IDIVS ; divide D by x | |
MOVB #$00,err ; flag success | |
LEAS 4,SP ; clear unused stack info | |
PULY ; pull root1 into Y | |
LEAS 10,SP ; clear unused stack info | |
PULD | |
PSHX ; push root2 onto stack | |
PSHY ; push root1 onto stack | |
PSHD | |
RTS | |
sqrt PSHD | |
LDD #0 | |
PSHD | |
sqrtloop CPD 2,SP | |
BHI donesqrt | |
ADDD 0,SP | |
INC 1,SP | |
ADDD 0,SP | |
BRA sqrtloop | |
donesqrt PULD | |
DECB | |
LEAS 2,SP | |
RTS | |
errorFlag LEAS 4,SP | |
MOVB #$FF,err | |
RTS | |
end SWI |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment