;Stars experimental ;Henrik Jönsson include "tios.h" include "util.h" include "gray4lib.h" xdef _main xdef _comment xdef _ti89 _main: clr.w tios::kb_vars+$1C jsr util::zap_screen bsr Stars jsr gray4lib::on jsr util::zap_screen M_Loop: bsr DrawPeriodic bra MainLoop Back2Main: cmp.w #265,d0 bne NotApps pea Menu1Shortcuts(pc) move.w #8,-(a7) move.w #40,-(a7) pea Menu1(pc) bsr Menu lea 12(a7),a7 cmp.w #9999,d0 beq MContM cmp.w #6,(cnum) bne NotQuit bra the_end NotQuit: cmp.w #0,(cnum) bne NotBrowseNames bsr BrowseNames NotBrowseNames: cmp.w #4,(cnum) bne NotStars jsr gray4lib::off jsr util::zap_screen bsr Stars jsr gray4lib::on NotStars: bra MContM NotApps: cmp.w #13,d0 bne NotEnter bsr ShowInfo NotEnter: MContM: cmp.w #264,d0 bne M_Loop bra the_end ;****** BrowseNames****** ;Browse the names BrowseNames: movem.l d0-d5/a0-a3,-(a7) move.l #1456,d0 ;110*13=1430+26 move.l d0,-(a7) jsr tios::HeapAlloc lea 4(a7),a7 tst.w d0 bne BrowseMemOk rts BrowseMemOk: move.w d0,handle1num tios::DEREF d0,a1 ;a1=pointer to the mem.! move.w #0,0(a1) move.w #109,2(a1) move.w #19,d0 lea Menu2Title(pc),a0 adda.l #20,a0 RepeatMoveTitle: move.b -(a0),4(a1,d0) dbra d0,RepeatMoveTitle move.w #13,24(a1) move.l a1,a3 move.w #109,d5 adda.l #26,a1 lea TheData(pc),a0 lea Menu2Sort(pc),a2 RepeatMoveNames: move.w #12,d1 clr.l d4 move.b (a2),d4 sub.b #1,d4 mulu (TheDataItemSize),d4 add.w #3,d4 adda.l #1,a2 RepeatMoveName: move.b 0(a0,d4),(a1)+ addq.w #1,d4 dbra d1,RepeatMoveName dbra d5,RepeatMoveNames pea Menu2Shortcuts(pc) move.w #8,-(a7) move.w #40,-(a7) pea (a3) bsr Menu lea 12(a7),a7 ; Free Allocated Memory move.w handle1num,-(a7) jsr tios::HeapFree lea 2(a7),a7 movem.l (a7)+,d0-d5/a0-a3 rts ;********* MainLoop ********* ;Handles user interface MainLoop: bsr WriteCurrentName bsr CopyScreen move.w #1,-(a7) bsr MarkCell lea 2(a7),a7 jsr util::idle_loop move.w #0,-(a7) bsr MarkCell lea 2(a7),a7 cmp.w #264,d0 beq Back2Main cmp.w #13,d0 beq Back2Main cmp.w #265,d0 beq Back2Main lea LookUpTable(pc),a0 move.w (TableX),d2 add.w (ActiveOffsX),d2 move.w (TableY),d3 add.w (ActiveOffsY),d3 move.w (TableX),(OldTX) move.w (TableY),(OldTY) Redo_Keys: cmp.w #337,d0 bne M_NotUp subq.w #1,(ActiveOffsY) M_NotUp: cmp.w #340,d0 bne M_NotDown addq.w #1,(ActiveOffsY) M_NotDown: cmp.w #344,d0 bne M_NotRight addq.w #1,(ActiveOffsX) M_NotRight: cmp.w #338,d0 bne M_NotLeft subq.w #1,(ActiveOffsX) M_NotLeft: cmp.w #4433,d0 bne M_NotUp2 move.w #337,d0 subq.w #4,(ActiveOffsY) M_NotUp2: cmp.w #4436,d0 bne M_NotDown2 move.w #340,d0 addq.w #4,(ActiveOffsY) M_NotDown2: cmp.w #4434,d0 bne M_NotLeft2 move.w #338,d0 subq.w #4,(ActiveOffsX) M_NotLeft2: cmp.w #4440,d0 bne M_NotRight2 move.w #338,d0 addq.w #4,(ActiveOffsX) M_NotRight2: cmp.w #16721,d0 bne M_NotTop sub.w #10,(ActiveOffsY) M_NotTop: cmp.w #16724,d0 bne M_NotBottom add.w #10,(ActiveOffsY) M_NotBottom: cmp.w #16728,d0 bne M_NotFR add.w #18,(ActiveOffsX) M_NotFR: cmp.w #16722,d0 bne M_NotFL sub.w #18,(ActiveOffsX) M_NotFL: move.w (ActiveOffsX),d2 add.w (TableX),d2 cmp.w #0,d2 bge M_Ok1 move.w #344,d0 bra Redo_Keys M_Ok1: cmp.w #18,d2 blt M_Ok2 move.w #338,d0 bra Redo_Keys M_Ok2: move.w (ActiveOffsY),d2 add.w (TableY),d2 cmp.w #0,d2 bge M_Ok3 move.w #340,d0 bra Redo_Keys M_Ok3: cmp.w #10,d2 blt M_Ok4 move.w #337,d0 bra Redo_Keys M_Ok4: bsr CalcCell tst.b 0(a0,d3) beq Redo_Keys ;Scroll the table? Repeat_TM cmp.w #2,(ActiveOffsX) bgt Not_TL cmp.w #0,(TableX) ble Not_TL addq.w #1,(ActiveOffsX) subq.w #1,(TableX) bra Repeat_TM Not_TL: cmp.w #1,(ActiveOffsY) bgt Not_TU cmp.w #0,(TableY) ble Not_TU addq.w #1,(ActiveOffsY) subq.w #1,(TableY) bra Repeat_TM Not_TU: cmp.w #8,(ActiveOffsX) blt Not_TR cmp.w #7,(TableX) bge Not_TR subq.w #1,(ActiveOffsX) addq.w #1,(TableX) bra Repeat_TM Not_TR: cmp.w #4,(ActiveOffsY) blt Not_TD cmp.w #4,(TableY) bge Not_TD subq.w #1,(ActiveOffsY) addq.w #1,(TableY) bra Repeat_TM Not_TD: move.w (TableX),d7 cmp.w (OldTX),d7 bne Update move.w (TableY),d7 cmp.w (OldTY),d7 bne Update bra NoUpdate Update: bsr DrawPeriodic NoUpdate: bra MainLoop ;********* CalcCell ********* ;Calculates offset number corresponding to current position ;Output:d3.w=cell number (0-179) CalcCell: move.w (TableY),d3 add.w (ActiveOffsY),d3 mulu #18,d3 add.w (TableX),d3 add.w (ActiveOffsX),d3 rts ;******* ShowInfo ******* ;Shows info on the currently selected element ShowInfo: movem.l d0-d3/a0-a1,-(a7) bsr CalcCell lea LookUpTable(pc),a0 clr.w d0 move.b 0(a0,d3),d0 move.w d0,d3 ; d3=atomic number move.w #160,(xoffs) move.w #0,(yoffs) lea tmpstring(pc),a0 move.w #0,d1 bsr NumToStr move.l a0,a1 bsr DrawBack subq.w #1,d3 mulu (TheDataItemSize),d3 lea TheData(pc),a0 move.w #0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 move.l a0,a1 move.w #4,-(a7) pea 0(a0,d3) move.w #2,-(a7) ;y move.w #176,-(a7) ;x jsr tios::DrawStrXY lea 8(a7),a7 clr.l d1 move.l 16(a1,d3),d0 move.b 20(a1,d3),d1 lea tmpstring(pc),a0 bsr NumToStr pea (a0) move.w #10,-(a7) ;y move.w #192,-(a7) ;x jsr tios::DrawStrXY lea 8(a7),a7 pea 3(a1,d3) move.w #2,-(a7) ;y move.w #189,-(a7) ;x jsr tios::DrawStrXY lea 8(a7),a7 pea MassStr(pc) move.w #10,-(a7) ;y move.w #162,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 move.w #40,(xoffs) move.w #14,(yoffs) bsr ScaleUp jsr util::idle_loop movem.l (a7)+,d0-d3/a0-a1 rts ;**** WriteCurrentName ****** ;Writes the name of the currently selected element at bottom WriteCurrentName movem.l d2-d3/a0,-(a7) move.w #1,-(a7) jsr tios::FontSetSys lea 2(a7),a7 bsr CalcCell lea LookUpTable(pc),a0 clr.w d2 move.b 0(a0,d3),d2 subq.w #1,d2 mulu (TheDataItemSize),d2 lea TheData(pc),a0 move.w #4,-(a7) pea 3(a0,d2) move.w #92,-(a7) ;y move.w #54,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 movem.l (a7)+,d2-d3/a0 rts ;******* DrawPeriodic ******* ;Draws the periodic table ;Input: None, uses the globals TableX,TableY DrawPeriodic: movem.l d0-d6,-(a7) jsr util::zap_screen move.w (TableY),d4 mulu #18,d4 add.w (TableX),d4 ; d4=Current Cell move.w #6,d3 ; ypos move.w #5,d1 ; yloop Y_Draw_Periodic: move.w #3,d2 ; xpos move.w #10,d0 ; xloop X_Draw_Periodic move.w d4,-(a7) move.w d3,-(a7) move.w d2,-(a7) bsr DrawCell lea 6(a7),a7 add.w #14,d2 addq.w #1,d4 dbra d0,X_Draw_Periodic addq.w #7,d4 add.w #14,d3 move.w #3,d2 dbra d1,Y_Draw_Periodic move.w #0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 move.w #4,-(a7) pea title_text(pc) move.w #0,-(a7) ;y move.w #0,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 movem.l (a7)+,d0-d6 rts ;***** Clear_pixel_plane0 ****** ;Clears a pixel in plane0 ;Input: word x,y Clear_pixel_plane0 movem.l d0-d1/a0,-(a7) move.l gray4lib::plane0,a0 move.w 4*4+2(a7),d0 ; y-coordinate lsl.w #1,d0 move.w d0,d1 lsl.w #4,d0 sub.w d1,d0 lea 0(a0,d0.w),a0 move.w 4*4+0(a7),d0 ; x-coordinate move.w d0,d1 lsr.w #3,d0 not.w d1 and.w #7,d1 bclr.b d1,0(a0,d0.w) movem.l (a7)+,d0-d1/a0 rts ;***** Set_pixel_plane0 ****** ;Sets a pixel in plane0 ;Input: word x,y Set_pixel_plane0 movem.l d0-d1/a0,-(a7) move.l gray4lib::plane0,a0 move.w 4*4+2(a7),d0 ; y-coordinate lsl.w #1,d0 move.w d0,d1 lsl.w #4,d0 sub.w d1,d0 lea 0(a0,d0.w),a0 move.w 4*4+0(a7),d0 ; x-coordinate move.w d0,d1 lsr.w #3,d0 not.w d1 and.w #7,d1 bset.b d1,0(a0,d0.w) movem.l (a7)+,d0-d1/a0 rts ;******* MarkCell ******** ;Marks/unmarks a cell at x,y ;Input: word Mark on = 1/off = 0 ;uses ActiveOffsX and ~Y MarkCell: movem.l d0-d5/a0,-(a7) move.w 28(a7),d5 move.w (ActiveOffsX),d4 ;x move.w (ActiveOffsY),d1 ;y mulu #14,d4 mulu #14,d1 addq.w #4,d4 addq.w #7,d1 move.w #12,d3 MarkLoopY: move.w #12,d2 MarkLoopX: move.w d1,-(a7) move.w d4,-(a7) jsr util::pixel_chg tst.w d5 bne MarkOn jsr util::find_pixel btst.b d0,(a0) bne MarkOn bsr Set_pixel_plane0 bra MarkOff MarkOff: bsr Clear_pixel_plane0 MarkOn: lea 4(a7),a7 addq.w #1,d4 dbra d2,MarkLoopX sub.w #13,d4 addq.w #1,d1 dbra d3,MarkLoopY movem.l (a7)+,d0-d5/a0 rts ;******** DrawCell ******** ;Draws one cell of the Periodic table ;Input: word offset x, offset y, cell num (0-179) DrawCell: movem.l d0-d7/a0,-(a7) move.w 40(a7),d6 ;xoffs move.w 42(a7),d2 ;yoffs move.w 44(a7),d3 ;cell num lea LookUpTable(pc),a0 ;Convert cell number to Atomic number move.b 0(a0,d3),d3 tst.b d3 beq BlankCell sub.b #1,d3 ;d3=Atomic number-1 move.w d6,d4 move.w d2,d5 add.w #14,d4 ;xr add.w #14,d5 ;yd move.w d5,-(a7) ;down y move.w d4,-(a7) ;right x move.w d2,-(a7) :up y move.w d6,-(a7) ;left x jsr util::erase_rect jsr util::frame_rect lea 8(a7),a7 addq.w #1,d6 addq.w #2,d2 move.w d2,d7 move.w d3,d5 ; Disp Text move.w #0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 move.w d5,d3 mulu (TheDataItemSize),d3 lea TheData(pc),a0 move.w #4,-(a7) pea 0(a0,d3) move.w d2,-(a7) ;y move.w d6,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 lea tmpstring(pc),a0 move.w d5,d0 addq.w #1,d0 move.w #0,d1 bsr NumToStr addq.w #6,d7 move.w #4,-(a7) pea (a0) move.w d7,-(a7) ;y move.w d6,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 bra DoneCell BlankCell: DoneCell: movem.l (a7)+,d0-d7/a0 rts ;******** CopyScreen ******** ;----- Copies plane1 to plane0 ------ CopyScreen: movem.l d0/a0-a1,-(a7) lea $4C00,a0 move.l gray4lib::plane0,a1 move.w #1499,d0 CopyLoop: move.w (a0)+,(a1)+ dbra d0,CopyLoop movem.l (a7)+,d0/a0-a1 rts ;********* NumToStr ******** ;--- Converts number to -- ;Input : d0.l = Number ; d1.b = comma position (ex: 12.3133 -> d1.b=4) ; d1=0 -> No comma ; a0 = pointer to a 10+1 byte output string ;Output a0 NumToStr: movem.l d0-d5,-(a7) move.b #1,d5 adda.l #10,a0 ;goto end of string clr.b (a0) ;null char move.l d0,d3 divu #10000,d3 ;split number tst.w d3 beq SkipExtra move.b #1,d5 clr.l d4 move.w d3,d4 mulu #10000,d3 move.l d0,d2 sub.l d3,d2 move.l d2,d0 bsr NumToStrSub move.l d4,d0 subq.b #4,d1 SkipExtra: clr.b d5 bsr NumToStrSub movem.l (a7)+,d0-d5 rts NumToStrSub: clr.b d3 ConvLoop: addq.b #1,d3 divu #10,d0 move.l d0,d2 swap d2 add.b #48,d2 move.b d2,-(a0) cmp.b d1,d3 bne SkipComma move.b #46,-(a0) SkipComma: and.l #$FFFF,d0 tst.b d5 beq Norm cmp.b #4,d3 bne ConvLoop bra EndNum Norm: tst.l d0 bne ConvLoop EndNum rts ;***** End of program ****** the_end: jsr gray4lib::off rts ; end of program ******* The StarField & Logo! ******* Stars: move.l numofstars,d7 lsl.l #3,d7 ;*8 move.l d7,-(a7) jsr tios::HeapAlloc lea 4(a7),a7 tst.w d0 bne SMemOk rts SMemOk: move.w d0,handle1num tios::DEREF d0,a6 lea $4C00+20+2*30,a0 ;display logo... lea logo(PC),a1 move.w #28,d1 YLoop: move.w #9,d0 XLoop: move.b (a1)+,(a0)+ dbra d0,XLoop lea 20(a0),a0 dbra d1,YLoop SInitLoop: sub.l #8,d7 bsr SNewStar tst.l d7 bne SInitLoop ;continue with all stars move.l #20,d6 ;y-size of logo move.b #1,d5 ;direction of logo movement move.l #1175,offslogo move.w #0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 move.w #4,-(a7) pea descr(pc) move.w #95,-(a7) move.w #0,-(a7) jsr tios::DrawStrXY lea 10(a7),a7 SMainLoop: move.l numofstars,d7 lsl.l #3,d7 ;*8 SStarLoop: subq.l #8,d7 move.w 0(a6,d7),d1 ;get data move.w 2(a6,d7),d2 move.w 4(a6,d7),d3 move.w 6(a6,d7),d4 lsr.w #7,d1 ;old position lsr.w #7,d2 move.w d2,-(a7) ;y move.w d1,-(a7) ;x jsr util::pixel_off ;erase old star lea 4(a7),a7 move.w 0(a6,d7),d1 move.w 2(a6,d7),d2 add.w d3,d1 ;add x-vel to x-pos add.w d4,d2 ;add y-vel to y-pos cmp.w #0,d1 ;test screen boundaries blt SNew cmp.w #20480,d1 ;20480 bge SNew cmp.w #0,d2 blt SNew cmp.w #12160,d2 ;12800 bge SNew bra SOk SNew: bsr SNewStar SOk: move.w d1,0(a6,d7) ;save new coordinates move.w d2,2(a6,d7) lsr.w #7,d1 ;display new star... lsr.w #7,d2 move.w d2,-(a7) move.w d1,-(a7) jsr util::pixel_on lea 4(a7),a7 tst.l d7 bne SStarLoop ; Put Scaled Logo..... move.l (offslogo),-(a7) move.w d6,-(a7) move.w #36,-(a7) bsr PutScale lea 8(a7),a7 tst.b d5 ;calculate new y-scale... bne sdown addq.w #4,d6 sub.l #60,(offslogo) cmp.w #68,d6 blt scontinue move.b #1,d5 bra scontinue sdown: subq.l #4,d6 add.l #60,(offslogo) cmp.l #4,d6 bgt scontinue move.b #0,d5 scontinue: tst tios::kb_vars+$1C ;keypressed? beq SMainLoop clr.w tios::kb_vars+$1C bra stars_end SNewStar ; Create new star, affects d1-d4 move.w #10240,d1 ;x=80 move.w #6400,d2 ;y=50 move.w #400,d0 ;calculate random speed... jsr util::random move.w d0,d3 sub.w #200,d3 move.w #400,d0 jsr util::random move.w d0,d4 sub.w #200,d4 tst.w d3 bne SOk1 tst.w d4 bne SOk1 bra SNewStar SOk1: move.w d1,0(a6,d7) ;save new stardata move.w d2,2(a6,d7) move.w d3,4(a6,d7) move.w d4,6(a6,d7) rts stars_end: move.w handle1num,-(a7) jsr tios::HeapFree lea 2(a7),a7 rts ; end of program ;*********** PutScale **************** ;Scaling!!! ; PutScale(offset in video mem, word target size y, word source size y) PutScale: movem.l d0-d5/a0-a2,-(a7) move.l 44(a7),d0 lea $4C00,a0 adda.l d0,a0 ;byte offset move.w #9,d5 ;size-x move.w 42(a7),d1 ;size-y target subq.w #1,d1 clr.l d2 move.w 40(a7),d2 ;size-y source lsl.w #8,d2 divu d1,d2 ;d2=stepy lea $4C00+20,a2 ;original pointer to source clr.l d3 ;start YLoopScale: move.w d3,d4 lsr.w #8,d4 mulu #30,d4 lea 0(a2,d4),a1 ;source move.w d5,d0 XLoopScale: move.b 0(a1,d0),0(a0,d0) dbra d0,XLoopScale adda.l #30,a0 add.w d2,d3 dbra d1,YLoopScale movem.l (a7)+,d0-d5/a0-a2 rts ****** Scale Up Animation ******* ScaleUp: move.w #2,d6 ScaleRepeat: ; Calculate offset: clr.l d4 move.w (yoffs),d4 add.w #40,d4 move.w d6,d5 lsr.w #1,d5 sub.w d5,d4 mulu #30,d4 move.w (xoffs),d5 lsr.w #3,d5 add.w d5,d4 move.l d4,-(a7) ;dest. offset move.w d6,-(a7) ;dest. size y move.w #81,-(a7) ;source size y bsr PutScale lea 8(a7),a7 bsr CopyScreen move.w #5200,d7 move.w d6,d5 lsl.w #6,d5 sub.w d5,d7 PauseLoop: dbra d7,PauseLoop add.w #1,d6 cmp.w #82,d6 bne ScaleRepeat rts ;******** Menu ******** ;----- Handles a menu ----- ;Menu(word num, word numof, ptr string_table, word xoffs, word yoffs, ptr shortcut_table) ;xoffs MUST BE MULTIPLE OF 16 ;Returned values: ;d0.w = selected item (d0=0...maxitems-1). d0=9999 if ESC is pressed in menu Menu: movem.l d1-d7/a0-a3,-(a7) movea.l 48(a7),a1 ;pointer to table move.w (a1)+,(cnum) move.w (a1)+,(maxnum) move.w 52(a7),(xoffs) ;xoffset move.w 54(a7),(yoffs) ;yoffset movea.l 56(a7),a3 ;ShortCutTable ; remove if no scaling of menu... ; (using extra video mem on TI89) move.w (xoffs),-(a7) move.w (yoffs),-(a7) move.w #0,(yoffs) move.w #160,(xoffs) ;... end remove bsr DrawBack; ; remove if no scaling of menu... ; (using extra video mem on TI89) bsr Draw_Menu move.w (a7)+,(yoffs) move.w (a7)+,(xoffs) bsr ScaleUp ;... end remove bsr DrawBack; bsr CopyScreen; ;Highlight in plane0 move.l gray4lib::plane0,a6 clr.l d0 move.w (yoffs),d0 mulu #30,d0 move.w (xoffs),d1 lsr.w #3,d1 add.w d0,d1 add.w #1200,d1 lea 0(a6,d1),a6 move.w #7,d3 HY: move.w #9,d4 HX: move.b #255,0(a6,d4) dbra d4,HX adda.l #30,a6 dbra d3,HY RepeatMenu: bsr Draw_Menu jsr util::idle_loop cmp.w #264,d0 beq DoneMenu cmp.w #13,d0 beq DoneMenu move.w (cnum),d1 move.w (maxnum),d2 subq.w #1,d2 cmp.w #337,d0 bne NotUp cmp.w #0,d1 ble NotUp subq.w #1,(cnum) NotUp: cmp.w #340,d0 bne NotDown cmp.w d2,d1 bge NotDown addq.w #1,(cnum) NotDown: cmp.w #4433,d0 bne NotUp2 sub.w #9,(cnum) cmp.w #0,cnum bge NotUp2 move.w #0,(cnum) NotUp2: cmp.w #4436,d0 bne NotDown2 add.w #9,(cnum) move.w (cnum),d1 cmp d2,d1 ble NotDown2 move.w d2,(cnum) NotDown2 cmp.w #16721,d0 bne NotTop move.w #0,(cnum) NotTop: cmp.w #16724,d0 bne NotBottom move.w d2,(cnum) NotBottom: cmp.w #97,d0 blt NotShortCut cmp.w #122,d0 bgt NotShortCut move.w d0,d1 sub.w #97,d1 lsl.w #1,d1 move.w 0(a3,d1),(cnum) NotShortCut: bra RepeatMenu DoneMenu: cmp.w #13,d0 beq Return move.w #9999,d0 ;Esc-quit Return: movem.l (a7)+,d1-d7/a0-a3 rts ;***** DrawBack ******* ;--- Draws a white rectangle with borders & Writes Title --- DrawBack: ;draw rectangle move.w (yoffs),d4 add.w #80,d4 move.w d4,-(a7) ;down y move.w (xoffs),d4 add.w #79,d4 move.w d4,-(a7) ;right x move.w (yoffs),-(a7) :up y move.w (xoffs),-(a7) ;left x jsr util::erase_rect jsr util::frame_rect lea 8(a7),a7 ; Write Title move.w #0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 move.w #4,-(a7) move.l a1,-(a7) move.w (yoffs),d4 add.w #2,d4 move.w d4,-(a7) ;y move.w (xoffs),d4 add.w #2,d4 move.w d4,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 move.w #1,-(a7) jsr tios::FontSetSys lea 2(a7),a7 rts ****** Draw_Menu ***** ;----- Draws the menu ------ ;(internal function, used by Menu) Draw_Menu: movem.l d0-d7/a0-a2,-(a7) lea $4C00,a0 adda.l #20,a1 move.w (a1)+,(temp) move.w #8,d4 move.w (cnum),d3 sub.w #5,d3 DispLoop: add.w #1,d3 cmp.w #0,d3 blt Skip move.w d3,d7 cmp.w (maxnum),d7 bge Skip clr.l d5 move.w d3,d5 bra NoSkip Skip: move.w (maxnum),d5 NoSkip: mulu (temp),d5 movea.l a1,a2 adda.l d5,a2 move.w #4,-(a7) move.l a2,-(a7) move.w d4,d5 mulu #8,d5 move.w (yoffs),d6 add.w #72,d6 sub.w d5,d6 move.w d6,-(a7) ;y move.w (xoffs),d5 add.w #3,d5 move.w d5,-(a7) ;x jsr tios::DrawStrXY lea 10(a7),a7 dbra d4,DispLoop movem.l (a7)+,d0-d7/a0-a2 rts even ;****** Variables and data ****** cnum dc.w 0 maxnum dc.w 0 xoffs dc.w 0 yoffs dc.w 0 temp dc.w 0 TableX dc.w 3 ;Upper left element on screen TableY dc.w 1 OldTX dc.w 0 OldTY dc.w 0 ActiveOffsX dc.w 4 ;Offset to selected element ActiveOffsY dc.w 2 TheDataItemSize dc.w 22 ; Bytes between two entries in TheData TheData dc.b "H ",0,"Hydrogen ",0 dc.l 100792 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "He",0,"Helium ",0 dc.l 400260 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "Li",0,"Lithium ",0 dc.l 6941 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "Be",0,"Beryllium ",0 dc.l 901218 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "B ",0,"Boron ",0 dc.l 1081 ; mass dc.b 2 ; mass-comma dc.b 0 dc.b "C ",0,"Carbon ",0 dc.l 120111 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "N ",0,"Nitrogen ",0 dc.l 140067 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "O ",0,"Oxygen ",0 dc.l 159994 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "F ",0,"Fluorine ",0 dc.l 18998403 ; mass dc.b 6 ; mass-comma dc.b 0 dc.b "Ne",0,"Neon ",0 dc.l 20179 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "Na",0,"Sodium ",0 dc.l 2298977 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "Mg",0,"Magnesium ",0 dc.l 24305 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "Al",0,"Aluminium ",0 dc.l 2698154 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "Si",0,"Silicon ",0 dc.l 280855 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "P ",0,"Phosphorus ",0 dc.l 3097376 ; mass dc.b 5 ; mass-comma dc.b 0 dc.b "S ",0,"Sulfur ",0 dc.l 3206 ; mass dc.b 2 ; mass-comma dc.b 0 dc.b "Cl",0,"Chlorine ",0 dc.l 35453 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "Ar",0,"Argon ",0 dc.l 39948 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "K ",0,"Potassium ",0 dc.l 390983 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "Ca",0,"Calcium ",0 dc.l 4008 ; mass dc.b 2 ; mass-comma dc.b 0 dc.b "Sc",0,"Scandium ",0 dc.l 449559 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "Ti",0,"Titanium ",0 dc.l 4788 ; mass dc.b 2 ; mass-comma dc.b 0 dc.b "V ",0,"Vanadium ",0 dc.l 509415 ; mass dc.b 4 ; mass-comma dc.b 0 dc.b "Cr",0,"Chromium ",0 dc.l 51996 ; mass dc.b 3 ; mass-comma dc.b 0 dc.b "Mn",0,"Manganese ",0 dc.l 549380 dc.b 4 dc.b 0 dc.b "Fe",0,"Iron ",0 dc.l 55847 dc.b 3 dc.b 0 dc.b "Co",0,"Cobalt ",0 dc.l 589332 dc.b 4 dc.b 0 dc.b "Ni",0,"Nickel ",0 dc.l 5869 dc.b 2 dc.b 0 dc.b "Cu",0,"Copper ",0 dc.l 63546 dc.b 3 dc.b 0 dc.b "Zn",0,"Zinc ",0 dc.l 6539 dc.b 2 dc.b 0 dc.b "Ga",0,"Gallium ",0 dc.l 6972 dc.b 2 dc.b 0 dc.b "Ge",0,"Germanium ",0 dc.l 7261 dc.b 2 dc.b 0 dc.b "As",0,"Arsenic ",0 dc.l 749216 dc.b 4 dc.b 0 dc.b "Se",0,"Selenium ",0 dc.l 7896 dc.b 2 dc.b 0 dc.b "Br",0,"Bromine ",0 dc.l 79904 dc.b 3 dc.b 0 dc.b "Kr",0,"Krypton ",0 dc.l 8380 dc.b 2 dc.b 0 dc.b "Rb",0,"Rubidium ",0 dc.l 854678 dc.b 4 dc.b 0 dc.b "Sr",0,"Strontium ",0 dc.l 8762 dc.b 2 dc.b 0 dc.b "Y ",0,"Yttrium ",0 dc.l 889059 dc.b 4 dc.b 0 dc.b "Zr",0,"Zirconium ",0 dc.l 91224 dc.b 3 dc.b 0 dc.b "Nb",0,"Niobium ",0 dc.l 929064 dc.b 4 dc.b 0 dc.b "Mo",0,"Molybdenum ",0 dc.l 9594 dc.b 2 dc.b 0 dc.b "Tc",0,"Technetium ",0 dc.l 98 dc.b 0 dc.b 0 dc.b "Ru",0,"Ruthenium ",0 dc.l 10107 dc.b 2 dc.b 0 dc.b "Rh",0,"Rhodium ",0 dc.l 1029055 dc.b 4 dc.b 0 dc.b "Pd",0,"Palladium ",0 dc.l 10642 dc.b 2 dc.b 0 dc.b "Ag",0,"Silver ",0 dc.l 1078682 dc.b 4 dc.b 0 dc.b "Cd",0,"Cadmium ",0 dc.l 11241 dc.b 2 dc.b 0 dc.b "In",0,"Indium ",0 dc.l 11482 dc.b 2 dc.b 0 dc.b "Sn",0,"Tin ",0 dc.l 118710 dc.b 3 dc.b 0 dc.b "Sb",0,"Antimony ",0 dc.l 121757 dc.b 3 dc.b 0 dc.b "Te",0,"Tellurium ",0 dc.l 12760 dc.b 2 dc.b 0 dc.b "I ",0,"Iodine ",0 dc.l 1269045 dc.b 4 dc.b 0 dc.b "Xe",0,"Xenon ",0 dc.l 13129 dc.b 2 dc.b 0 dc.b "Cs",0,"Cesium ",0 dc.l 1329054 dc.b 4 dc.b 0 dc.b "Ba",0,"Barium ",0 dc.l 13733 dc.b 2 dc.b 0 dc.b "La",0,"Lanthanum ",0 dc.l 1389055 dc.b 4 dc.b 0 dc.b "Ce",0,"Cerium ",0 dc.l 14012 dc.b 2 dc.b 0 dc.b "Pr",0,"Praseodymium",0 dc.l 1409077 dc.b 4 dc.b 0 dc.b "Nd",0,"Neodymium ",0 dc.l 14424 dc.b 2 dc.b 0 dc.b "Pm",0,"Promethium ",0 dc.l 145 dc.b 0 dc.b 0 dc.b "Sm",0,"Samarium ",0 dc.l 15036 dc.b 2 dc.b 0 dc.b "Eu",0,"Europium ",0 dc.l 15196 dc.b 2 dc.b 0 dc.b "Gd",0,"Gadolinium ",0 dc.l 15725 dc.b 2 dc.b 0 dc.b "Tb",0,"Terbium ",0 dc.l 1589254 dc.b 4 dc.b 0 dc.b "Dy",0,"Dysprosium ",0 dc.l 16250 dc.b 2 dc.b 0 dc.b "Ho",0,"Holmium ",0 dc.l 1649304 dc.b 4 dc.b 0 dc.b "Er",0,"Erbium ",0 dc.l 16726 dc.b 2 dc.b 0 dc.b "Tm",0,"Thulium ",0 dc.l 1689342 dc.b 4 dc.b 0 dc.b "Yb",0,"Ytterbium ",0 dc.l 17304 dc.b 2 dc.b 0 dc.b "Lu",0,"Lutetium ",0 dc.l 174967 dc.b 3 dc.b 0 dc.b "Hf",0,"Hafnium ",0 dc.l 17849 dc.b 2 dc.b 0 dc.b "Ta",0,"Tantalum ",0 dc.l 1809479 dc.b 4 dc.b 0 dc.b "W ",0,"Tungsten ",0 dc.l 18385 dc.b 2 dc.b 0 dc.b "Re",0,"Rhenium ",0 dc.l 186207 dc.b 3 dc.b 0 dc.b "Os",0,"Osmium ",0 dc.l 1902 dc.b 1 dc.b 0 dc.b "Ir",0,"Iridium ",0 dc.l 19222 dc.b 2 dc.b 0 dc.b "Pt",0,"Platinum ",0 dc.l 19508 dc.b 2 dc.b 0 dc.b "Au",0,"Gold ",0 dc.l 1969665 dc.b 4 dc.b 0 dc.b "Hg",0,"Mercury ",0 dc.l 20059 dc.b 2 dc.b 0 dc.b "Tl",0,"Thallium ",0 dc.l 20438 dc.b 2 dc.b 0 dc.b "Pb",0,"Lead ",0 dc.l 2072 dc.b 1 dc.b 0 dc.b "Bi",0,"Bismuth ",0 dc.l 2089804 dc.b 4 dc.b 0 dc.b "Po",0,"Polonium ",0 dc.l 209 dc.b 0 dc.b 0 dc.b "At",0,"Astatine ",0 dc.l 210 dc.b 0 dc.b 0 dc.b "Rn",0,"Radon ",0 dc.l 222 dc.b 0 dc.b 0 dc.b "Fr",0,"Francium ",0 dc.l 223 dc.b 0 dc.b 0 dc.b "Ra",0,"Radium ",0 dc.l 2260254 dc.b 4 dc.b 0 dc.b "Ac",0,"Actinum ",0 dc.l 2270278 dc.b 4 dc.b 0 dc.b "Th",0,"Thorium ",0 dc.l 2320381 dc.b 4 dc.b 0 dc.b "Pa",0,"Protactinium",0 dc.l 2310359 dc.b 4 dc.b 0 dc.b "U ",0,"Uranium ",0 dc.l 2380289 dc.b 4 dc.b 0 dc.b "Np",0,"Neptunium ",0 dc.l 237048 dc.b 3 dc.b 0 dc.b "Pu",0,"Plutonium ",0 dc.l 244 dc.b 0 dc.b 0 dc.b "Am",0,"Americium ",0 dc.l 243 dc.b 0 dc.b 0 dc.b "Cm",0,"Curium ",0 dc.l 247 dc.b 0 dc.b 0 dc.b "Bk",0,"Berkelium ",0 dc.l 247 dc.b 0 dc.b 0 dc.b "Cf",0,"Californium ",0 dc.l 251 dc.b 0 dc.b 0 dc.b "Es",0,"Einsteinium ",0 dc.l 252 dc.b 0 dc.b 0 dc.b "Fm",0,"Fermium ",0 dc.l 257 dc.b 0 dc.b 0 dc.b "Md",0,"Mendelevium ",0 dc.l 258 dc.b 0 dc.b 0 dc.b "No",0,"Nobelium ",0 dc.l 259 dc.b 0 dc.b 0 dc.b "Lr",0,"Lawrencium ",0 dc.l 260 dc.b 0 dc.b 0 dc.b "Rf",0,"Rutherford'm",0 dc.l 261 dc.b 0 dc.b 0 dc.b "Db",0,"Dubnium ",0 dc.l 262 dc.b 0 dc.b 0 dc.b "Sg",0,"Seaborgium ",0 dc.l 263 dc.b 0 dc.b 0 dc.b "Bh",0,"Bohrium ",0 dc.l 262 dc.b 0 dc.b 0 dc.b "Hs",0,"Hassium ",0 dc.l 265 dc.b 0 dc.b 0 dc.b "Mt",0,"Meitnerium ",0 dc.l 266 dc.b 0 dc.b 0 dc.b " ",0," ",0 dc.l 0 dc.b 0 dc.b 0 ;** Stars Variables ** even numofstars dc.l 600 handle1ptr dc.l 0 handle1num dc.w 0 offslogo dc.l 0 ;** Menus ** Menu1Shortcuts dc.w 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;a-z (28 bytes) Menu2Shortcuts dc.w 0,7,14,25,27,30,33,37,42,46,46,47,52,58,65,67,76,76,83,92,102,103,104,104,105,106,108 a-z (28 bytes) Menu3Shortcuts dc.w 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;a-z (28 bytes) Menu1 dc.w 0 ;Current item in menu dc.w 7 ;Numof Items dc.b "Periodic Table Main",0 ;title=20 bytes dc.w 13 ;width of entries dc.b "Browse names",0, dc.b "Browse symb.",0, dc.b "Startup:On ",0, dc.b "Menus:Slow ",0, dc.b "View Stars ",0 dc.b "Help Screen ",0, dc.b "Quit ",0, dc.b " ",0 ;always end with blank Menu2Title dc.b "Browse by names ",0 On dc.b "On" Off dc.b "Off" Menu3Sort dc.b 89,47,13,95,79,51,18,33,85,5,56,4,83,97,107,35,6,20,48,58, dc.b 98,17,96,27,24,55 dc.b 29,105,66,68,99,63,9,26,100,87,31,32,64,1,2,72,80,67,108,53,19,49 dc.b 77,36,57,3,103,71,101,12,25,42,109,7,11,41,60,10,28 dc.b 102,93,8,76,15,91,82,61,84,46,59,78,94,88,37,75,86,45,44,16,21,34,104,62,50,106 dc.b 14,38,73,52,43,65,90,22,81,69,92,23,74,54,70,39,30,40,110 Menu2Sort dc.b 89,13,95,51,18,33,85,56,97,4,83,107,5,35,48,20,98,6,58,55,17 dc.b 24,27,29,96,105,66,99,68,63,100,9,87,64,31,32,79,72,108,2,67,1,49 dc.b 53,77,26,36,57,103,82,3,71,12,25,109,101,80,42,60,10,93,28,41,7 dc.b 102,76,8,46,15,78,94,84,19,59,61,91,88,86,75,45,37,44,104,62,21,106 dc.b 34,14,47,11,38,16,73,43,52,65,81,90,69,50,22,74,92,23,54,70,39,30,40,110 MenuHelp dc.b "Menu Keys:(2nd)-Up/Down, a-z",0 ;** Periodic variables ** MassStr dc.b "Mass:",0 tmpstring dc.b " ",0 ;maximum 10 char string LookUpTable ; dc.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2 dc.b 3,4,0,0,0,0,0,0,0,0,0,0,5,6,7,8,9,10 dc.b 11,12,0,0,0,0,0,0,0,0,0,0,13,14,15,16,17,18 dc.b 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 dc.b 37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54 dc.b 55,56,57,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86 dc.b 87,88,89,104,105,106,107,108,109,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,58,59,60,61,62,63,64,65,66,67,68,69,70,71 dc.b 0,0,0,0,90,91,92,93,94,95,96,97,98,99,100,101,102,103 title_text dc.b "-- Periodic Table 89 -- Press APPS for menu",0 ;** Stars Variables ** logo dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00001111,%11000000,%01111110,%00000000,%00110000,%00000000,%00011111,%11110000,%00011100,%00000000 dc.b %00110000,%01100000,%11100001,%00000000,%00110000,%00000000,%00100000,%11000000,%00110000,%00000000 dc.b %01000000,%01100001,%10000000,%00000000,%00100000,%00000000,%01000000,%11000000,%00110000,%00000000 dc.b %01000000,%11110011,%10000000,%00000000,%00000000,%00000000,%01000000,%11000000,%00110000,%00000000 dc.b %01000000,%10110011,%00000111,%10000011,%10010000,%11110000,%01000000,%11000111,%10110011,%00111100 dc.b %01000000,%10110111,%00011001,%10001101,%10111001,%00110000,%01000000,%11011001,%10110111,%01001000 dc.b %01000000,%10111101,%10010001,%10001001,%10011011,%00011000,%01100010,%11010001,%10111011,%01100000 dc.b %01100000,%10011001,%10010001,%10011001,%10011011,%00000000,%00100100,%11010001,%10110011,%01111100 dc.b %00110000,%10011001,%10010001,%10011001,%10011011,%00000000,%00011000,%11010001,%10110011,%00011110 dc.b %00000000,%10111001,%11011111,%10011111,%10011011,%00000000,%00000000,%11011111,%10110011,%01000110 dc.b %00000001,%00110001,%11011101,%10011101,%10011011,%10010000,%00000000,%11011101,%10110010,%01100110 dc.b %00000001,%00000000,%11111000,%11001001,%10011101,%11100000,%00000111,%11111000,%11011100,%00111100 dc.b %01000011,%10000000,%11100000,%00001001,%10000000,%00000000,%00111100,%01100000,%00000000,%00000000 dc.b %01000111,%11100000,%01111000,%00010001,%10000000,%00000000,%01000000,%00111000,%00110000,%00000000 dc.b %00111000,%00011000,%00111111,%00010001,%00000000,%00000000,%00001111,%10001100,%00010000,%00000000 dc.b %00000000,%00000111,%10000000,%00010011,%00000000,%01111111,%11110000,%01111111,%11100000,%00000000 dc.b %00000000,%00000000,%01111111,%11001110,%01111111,%10000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000011,%00000000,%00000011,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000001,%00000000,%00000001,%00000000,%00000000,%00000000,%00010000,%10000000,%00000000,%00000000 dc.b %00000111,%00101110,%11010001,%00101111,%01101101,%00010110,%10111001,%11001000,%10110110,%10000000 dc.b %00001001,%01010100,%10101001,%01010100,%10110110,%10101011,%01010000,%10010101,%01011011,%01000000 dc.b %00001001,%01110100,%10111001,%01110100,%10100100,%10111010,%01010000,%10011100,%11010010,%01000000 dc.b %00001001,%01000011,%00100001,%01000100,%10100100,%10100010,%01010000,%10010001,%01010010,%01000000 dc.b %00000111,%10110011,%00011011,%10110111,%01111111,%11011111,%01111100,%11101100,%11111011,%01100000 dc.b %00000000,%00000000,%00000000,%00000100,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000000,%00000000,%00000000,%00001110,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 descr dc.b "-- Periodic Table 89 --, (c) 1999. Press A Key",0 _comment dc.b "MagicLabs Logo",0 end