;-------------------------------| ;Molar Mass Calculator vs. 1.2 | ; By: Adam King | ; (c) 1997 | ; kinger@discover-net.net | ;-------------------------------| xdef _main xdef _comment include "macros.h" include "tios.h" include "flib.h" ;############### Start of Code ############# _main: ;prog_code start: jsr flib::clr_scr ;starting crap SetFont #2 WriteStr #0,#1,#0,prog_header1 WriteStr #0,#11,#0,prog_header2 WriteStr #0,#21,#0,prog_header3 move.l #0,d0 move.l #0,d1 move.l #0,d2 move.l #0,d3 move.l #0,d4 move.l #0,d5 move.l #0,d6 move.l #0,d7 move.l #0,a0 move.l #0,a1 move.l #0,a2 move.l #0,a3 move.l #0,a4 move.l #0,a5 move.l #0,a6 move.l #0,temp ;d0= number of key ;d1= number of first char ;d2= number of second char ;d3= multiply by number ;d4= x position of molecule ;d5= multiply by number ;d6= actual molar mass of entire molecule ;d7= molar mass of element key_one: SetFont #1 jsr flib::idle_loop ;looks for key press, stores key value in d0 key_one_alt: cmp #13,d0 beq compute cmp #264,d0 beq exit move.l d0,d1 movem.l d0-d7/a0-a6,-(a7) WriteChar d3,#50,#1,d0 movem.l (a7)+,d0-d7/a0-a6 add #7,d3 key_two: jsr flib::idle_loop ;looks for key press, stores key value in d0 cmp #264,d0 beq exit cmp #13,d0 beq compute_one cmp #59,d0 blt key_two_number cmp #91,d0 blt key_caps move.l d0,d2 movem.l d0-d7/a0-a6,-(a7) WriteChar d3,#50,#1,d0 movem.l (a7)+,d0-d7/a0-a6 add #7,d3 bsr det_ele move.l d0,d7 jsr flib::idle_loop cmp #264,d0 beq exit cmp #13,d0 beq compute_two cmp #57,d0 bgt next_element_l cmp #47,d0 blt next_element_l bra number_do number_loop: jsr flib::idle_loop ;looks for key press, stores key value in d0 cmp #264,d0 beq exit cmp #13,d0 beq compute_number cmp #57,d0 bgt next_element_n cmp #47,d0 blt next_element_n number_do: movem.l d0-d7/a0-a6,-(a7) SetFont #0 movem.l (a7)+,d0-d7/a0-a6 movem.l d0-d7/a0-a6,-(a7) WriteChar d3,#55,#1,d0 movem.l (a7)+,d0-d7/a0-a6 sub #48,d0 add d0,d5 muls #10,d5 add #5,d3 bra number_loop key_two_number: move.l d0,d6 ;saves number move.l #0,d2 bsr det_ele move.l d0,d7 move.l d6,d0 ;restores number bra number_do key_caps: cmp #65,d0 blt key_one move.l d0,d6 ;saves Capitol move.l #0,d2 bsr det_ele move.l d0,d7 add.l d7,temp move.l d6,d0 ;restores Capitol bra key_one_alt next_element_l: add.l d7,temp move.l #0,d1 move.l #0,d2 move.l #0,d4 move.l #0,d5 move.l #0,d7 movem.l d0-d7/a0-a6,-(a7) SetFont #1 movem.l (a7)+,d0-d7/a0-a6 bra key_one_alt next_element_n: divu #10,d5 mulu d5,d7 add.l d7,temp movem.l d0-d7/a0-a6,-(a7) SetFont #1 movem.l (a7)+,d0-d7/a0-a6 movem.l d0-d7/a0-a6,-(a7) WriteChar d3,#50,#1,d0 movem.l (a7)+,d0-d7/a0-a6 move.l d0,d1 add #7,d3 move.l #0,d2 move.l #0,d4 move.l #0,d5 move.l #0,d7 bra key_two compute_number: divu #10,d5 mulu d5,d7 add.l d7,temp bra compute compute_one: move.l #0,d2 bsr det_ele move.l d0,d7 add.l d7,temp bra compute compute_two: add.l d7,temp compute: movem.l d0-d7/a0-a6,-(a7) SetFont #1 movem.l (a7)+,d0-d7/a0-a6 move.l temp,d3 bsr disp_dec jsr flib::idle_loop ;looks for key press, stores key value in d0 bra start ;################# "DET_ELE" ################### ; ==>Input<== ;d1= first char of element ;d2= second char of element ; ==>Output<== ;same as above ;d0= the Atomic Number of Element ;################################################ ;Numbers 0=48 through 9=57 ;Capitol Letters A=65 through Z=90 ;Lowercase Letters a=97 through z=122 det_ele: cmp #65,d1 beq element_A cmp #66,d1 beq element_B cmp #67,d1 beq element_C cmp #68,d1 beq element_D cmp #69,d1 beq element_E cmp #70,d1 beq element_F cmp #71,d1 beq element_G cmp #72,d1 beq element_H cmp #73,d1 beq element_I cmp #75,d1 beq element_K cmp #76,d1 beq element_L cmp #77,d1 beq element_M cmp #78,d1 beq element_N cmp #79,d1 beq element_O cmp #80,d1 beq element_P cmp #82,d1 beq element_R cmp #83,d1 beq element_S cmp #84,d1 beq element_T cmp #85,d1 beq element_U cmp #86,d1 beq element_V cmp #87,d1 beq element_W cmp #88,d1 beq element_X cmp #89,d1 beq element_Y cmp #90,d1 beq element_Z bra exit ;if it doesn't match it's out element_A: cmp #108,d2 beq an_Al cmp #114,d2 beq an_Ar cmp #115,d2 beq an_As cmp #103,d2 beq an_Ag cmp #117,d2 beq an_Au cmp #116,d2 beq an_At cmp #99,d2 beq an_Ac cmp #109,d2 beq an_Am bra exit element_B: cmp #97,d2 blt an_B cmp #101,d2 beq an_Be cmp #114,d2 beq an_Br cmp #97,d2 beq an_Ba cmp #105,d2 beq an_Bi cmp #107,d2 beq an_Bk bra exit element_C: cmp #97,d2 blt an_C cmp #108,d2 beq an_Cl cmp #97,d2 beq an_Ca cmp #114,d2 beq an_Cr cmp #111,d2 beq an_Co cmp #117,d2 beq an_Cu cmp #100,d2 beq an_Cd cmp #115,d2 beq an_Cs cmp #101,d2 beq an_Ce cmp #109,d2 beq an_Cm cmp #102,d2 beq an_Cf bra exit element_D: bra an_Dy element_E: cmp #117,d2 beq an_Eu cmp #114,d2 beq an_Er cmp #115,d2 beq an_Es bra exit element_F: cmp #97,d2 blt an_F cmp #101,d2 beq an_Fe cmp #114,d2 beq an_Fr cmp #109,d2 beq an_Fm bra exit element_G: cmp #97,d2 beq an_Ga cmp #101,d2 beq an_Ge cmp #100,d2 beq an_Gd bra exit element_H: cmp #97,d2 blt an_H cmp #101,d2 beq an_He cmp #102,d2 beq an_Hf cmp #103,d2 beq an_Hg cmp #97,d2 beq an_Ha cmp #115,d2 beq an_Hs cmp #111,d2 beq an_Ho bra exit element_I: cmp #97,d2 blt an_I cmp #114,d2 beq an_Ir cmp #110,d2 beq an_In bra exit element_K: cmp #97,d2 blt an_K cmp #114,d2 beq an_Kr bra exit element_L: cmp #105,d2 beq an_Li cmp #97,d2 beq an_La cmp #117,d2 beq an_Lu cmp #114,d2 beq an_Lr bra exit element_M: cmp #103,d2 beq an_Mg cmp #110,d2 beq an_Mn cmp #111,d2 beq an_Mo cmp #116,d2 beq an_Mt cmp #100,d2 beq an_Md bra exit element_N: cmp #97,d2 blt an_N cmp #101,d2 beq an_Ne cmp #97,d2 beq an_Na cmp #105,d2 beq an_Ni cmp #98,d2 beq an_Nb cmp #115,d2 beq an_Ns cmp #100,d2 beq an_Nd cmp #112,d2 beq an_Np cmp #111,d2 beq an_No bra exit element_O: cmp #97,d2 blt an_O cmp #115,d2 beq an_Os bra exit element_P: cmp #97,d2 blt an_P cmp #100,d2 beq an_Pd cmp #116,d2 beq an_Pt cmp #98,d2 beq an_Pb cmp #111,d2 beq an_Po cmp #114,d2 beq an_Pr cmp #109,d2 beq an_Pm cmp #97,d2 beq an_Pa cmp #117,d2 beq an_Pu bra exit element_R: cmp #98,d2 beq an_Rb cmp #117,d2 beq an_Ru cmp #104,d2 beq an_Rh cmp #101,d2 beq an_Re cmp #110,d2 beq an_Rn cmp #117,d2 beq an_Ru cmp #102,d2 beq an_Rf bra exit element_S: cmp #97,d2 blt an_S cmp #105,d2 beq an_Si cmp #101,d2 beq an_Se cmp #114,d2 beq an_Sr cmp #110,d2 beq an_Sn cmp #98,d2 beq an_Sb cmp #109,d2 beq an_Sm cmp #99,d2 beq an_Sc bra exit element_T: cmp #99,d2 beq an_Tc cmp #105,d2 beq an_Ti cmp #101,d2 beq an_Te cmp #97,d2 beq an_Ta cmp #108,d2 beq an_Tl cmp #98,d2 beq an_Tb cmp #109,d2 beq an_Tm cmp #104,d2 beq an_Th bra exit element_U: element_V: bra an_V element_W: bra an_W element_X: bra an_Xe element_Y; cmp #98,d2 beq an_Yb bra an_Y element_Z: cmp #110,d2 beq an_Zn bra an_Zr an_H: move.l #101,d0 bra exit an_He: move.l #400,d0 bra exit an_Li: move.l #694,d0 bra exit an_Be: move.l #901,d0 bra exit an_B: move.l #1081,d0 bra exit an_C: move.l #1201,d0 bra exit an_N: move.l #1401,d0 bra exit an_O: move.l #1600,d0 bra exit an_F: move.l #1900,d0 bra exit an_Ne: move.l #2018,d0 bra exit an_Na: move.l #2299,d0 bra exit an_Mg: move.l #2431,d0 bra exit an_Al: move.l #2698,d0 bra exit an_Si: move.l #2809,d0 bra exit an_P: move.l #3097,d0 bra exit an_S: move.l #3206,d0 bra exit an_Cl: move.l #3545,d0 bra exit an_Ar: move.l #3995,d0 bra exit an_K: move.l #3910,d0 bra exit an_Ca: move.l #4008,d0 bra exit an_Sc: move.l #4496,d0 bra exit an_Ti: move.l #4790,d0 bra exit an_V: move.l #5094,d0 bra exit an_Cr: move.l #5200,d0 bra exit an_Mn: move.l #5494,d0 bra exit an_Fe: move.l #5585,d0 bra exit an_Co: move.l #5893,d0 bra exit an_Ni: move.l #5870,d0 bra exit an_Cu: move.l #6355,d0 bra exit an_Zn: move.l #6538,d0 bra exit an_Ga: move.l #6972,d0 bra exit an_Ge: move.l #7259,d0 bra exit an_As: move.l #7492,d0 bra exit an_Se: move.l #7896,d0 bra exit an_Br: move.l #7990,d0 bra exit an_Kr: move.l #8380,d0 bra exit an_Rb: move.l #8547,d0 bra exit an_Sr: move.l #8762,d0 bra exit an_Y: move.l #8891,d0 bra exit an_Zr: move.l #9122,d0 bra exit an_Nb: move.l #9291,d0 bra exit an_Mo: move.l #9594,d0 bra exit an_Tc: move.l #9700,d0 bra exit an_Ru: move.l #10107,d0 bra exit an_Rh: move.l #10291,d0 bra exit an_Pd: move.l #10640,d0 bra exit an_Ag: move.l #10787,d0 bra exit an_Cd: move.l #11241,d0 bra exit an_In: move.l #11482,d0 bra exit an_Sn: move.l #11869,d0 bra exit an_Sb: move.l #12175,d0 bra exit an_Te: move.l #12760,d0 bra exit an_I: move.l #12690,d0 bra exit an_Xe: move.l #13130,d0 bra exit an_Cs: move.l #13291,d0 bra exit an_Ba: move.l #13733,d0 bra exit an_La: move.l #13891,d0 bra exit an_Ce: move.l #14012,d0 bra exit an_Pr: move.l #14091,d0 bra exit an_Nd: move.l #14424,d0 bra exit an_Pm: move.l #14700,d0 bra exit an_Sm: move.l #15040,d0 bra exit an_Eu: move.l #15196,d0 bra exit an_Gd: move.l #15725,d0 bra exit an_Tb: move.l #15893,d0 bra exit an_Dy: move.l #16250,d0 bra exit an_Ho: move.l #16493,d0 bra exit an_Er: move.l #16726,d0 bra exit an_Tm: move.l #16893,d0 bra exit an_Yb: move.l #17304,d0 bra exit an_Lu: move.l #17497,d0 bra exit an_Hf: move.l #17849,d0 bra exit an_Ta: move.l #18095,d0 bra exit an_W: move.l #18385,d0 bra exit an_Re: move.l #18621,d0 bra exit an_Os: move.l #19020,d0 bra exit an_Ir: move.l #19222,d0 bra exit an_Pt: move.l #19509,d0 bra exit an_Au: move.l #19697,d0 bra exit an_Hg: move.l #20059,d0 bra exit an_Tl: move.l #20437,d0 bra exit an_Pb: move.l #20720,d0 bra exit an_Bi: move.l #20898,d0 bra exit an_Po: move.l #20900,d0 bra exit an_At: move.l #21000,d0 bra exit an_Rn: move.l #22200,d0 bra exit an_Fr: move.l #22300,d0 bra exit an_Ra: move.l #22603,d0 bra exit an_Ac: move.l #22700,d0 bra exit an_Th: move.l #23204,d0 bra exit an_Pa: move.l #23104,d0 bra exit an_U: move.l #23803,d0 bra exit an_Np: move.l #23705,d0 bra exit an_Pu: move.l #24400,d0 bra exit an_Am: move.l #24300,d0 bra exit an_Cm: move.l #24700,d0 bra exit an_Bk: move.l #24700,d0 bra exit an_Cf: move.l #25100,d0 bra exit an_Es: move.l #25400,d0 bra exit an_Fm: move.l #25700,d0 bra exit an_Md: move.l #25800,d0 bra exit an_No: move.l #25900,d0 bra exit an_Lr: move.l #26000,d0 bra exit an_Rf: move.l #25900,d0 bra exit an_Ha: move.l #26100,d0 bra exit an_Sg: move.l #26300,d0 bra exit an_Ns: move.l #26200,d0 bra exit an_Hs: move.l #26400,d0 bra exit an_Mt: move.l #26600,d0 bra exit ;########################## End "DET_ELE" ####################### ;@@@@@@@@@@@@@@@@@@ "DISP_DEC" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| ; =>Input<= | ;d3= the number to be displayed | ;converts value in d3 into a string in word denominations at a0 | ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| disp_dec: movem.l d0-d7/a0-a6,-(a7) move.l #0,d6 move.l d3,d5 move.l #8,d7 move.l #230,d4 disp_loop: cmp #6,d7 beq put_dot divu #10,d5 ;divides value by 10 with the remainder in the upper 16bits of the register move.w d5,d6 ;saves the divided amount into d1 swap d5 ;swaps the upper and lower 16bits add #48,d5 movem.l d0-d7/a0-a6,-(a7) WriteChar d4,#50,#1,d5 movem.l (a7)+,d0-d7/a0-a6 sub.l #8,d4 move.l d6,d5 dbra d7,disp_loop ;now I print the number movem.l (a7)+,d0-d7/a0-a6 bra exit put_dot: movem.l d0-d7/a0-a6,-(a7) WriteChar d4,#50,#1,#46 movem.l (a7)+,d0-d7/a0-a6 sub #8,d4 sub #1,d7 bra disp_loop ;@@@@@@@@@@@@@@@@@@ END "DISP_DEC" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| exit: rts ;########## Data Section ############## _comment: dc.b "Molar Mass Calculator 2.0",0 prog_header1 dc.b " Molar Mass Calculator 1.0 ",0 prog_header2 dc.b " By: Adam King ",0 prog_header3 dc.b " kinger@discover-net.net ",0 temp dc.l 0 ;=========END FARGO PROGRAM=========== end