.nolist               ;
#include "tse.inc"    ; TSE include file
.list                 ;

.org    userMem-3     ; Program origin
.db     $BB,$6D       ; Program variable header
 ret                  ; RET for TI-OS

.db "TSE",1           ; TSE Header
.db " UltraPeriodic Table v0.1", 0 ; Program Title
.dw 20                ; External Data Required
start:
 bcall(_clrLCDFull)
 ld hl, 0000h
 ld (pencol),hl
 ld hl,title
 bcall(_vputs)
 ld hl,0700h
 ld (pencol),hl
 ld hl,author
 bcall(_vputs)
 ld hl,0e00h
 ld (pencol),hl
 ld hl,web
 bcall(_vputs)
 ld hl,3917h
 ld (pencol),hl
 ld hl,prompt
 bcall(_vputs)
keyloop:
 bcall(_getcsc)
 cp $37
 ret z
 cp 0
 jr z,keyloop
 bcall(_clrLCDFull)
 ld a,1
 ld (currentelement),a
 call dispinfo
mainloop:
 halt
 bcall(_getcsc)
 cp 2	;left key
 jp z,moveleft
 cp 3	;right key
 jp z,moveright
 cp 4	;up key
 jp z,moveup
 cp 1	;downkey
 jp z,movedown
 cp $37
 ret z
 cp skStat
 jr nz,dontyield
 call _tseForceYield
 call dispinfo
dontyield:
 jr mainloop
moveright:
 ld a,(currentelement)
 cp 118
 jp z,mainloop
 cp 112
 call z,doubleinc
 cp 114
 call z,doubleinc
 cp 116
 call z,doubleinc
 ld a,(currentelement)
 inc a
 ld (currentelement),a
 call dispinfo
 jp mainloop
moveleft:
 ld a,(currentelement)
 cp 1
 jp z,mainloop
 cp 118
 call z,doubledec
 cp 116
 call z,doubledec
 cp 114
 call z,doubledec
 ld a,(currentelement)
 dec a
 ld (currentelement),a
 call dispinfo
 jp mainloop
moveup:
 ld a,(currentelement)
 cp 109
 jp nc,mainloop
 cp 107
 call z,lower
 cp 105
 call z,lower
 cp 103
 call z,lower
 ld b,10
 add a,b
 ld (currentelement),a
 call dispinfo
 jp mainloop
movedown:
 ld a,(currentelement)
 cp 11
 jp c,mainloop
 ld b,10
 sub b
 ld (currentelement),a
 call dispinfo
 jp mainloop
lower:
 dec a
 ret
dispinfo:
 ld a,(currentelement)
 bcall(_clrLCDFull)
 ld hl,0000h
 ld (pencol),hl
 dec a
 ld hl,Elements
 call getString
 bcall(_vputs)
 ld hl,dash
 bcall(_vputs)
 ld a,(currentelement)
 dec a
 ld hl,Symbols
 call getString
 bcall(_vputs)
 ld hl,0e00h
 ld (pencol),hl
 ld hl,atomicnumber
 bcall(_vputs)
 ld a,(currentelement)
 ld h,0
 ld l,a
 bcall(_setxxxxop2)
 bcall(_op2toop1)
 ld a,3
 bcall(_dispop1a)
 ld hl,1500h
 ld (pencol),hl
 ld hl,atomicweight
 bcall(_vputs)
 ld a,(currentelement)
 dec a
 ld hl,Weight
 call getString
 bcall(_vputs)
 ret
doubledec:
 dec a
 ld (currentelement),a
 ret
doubleinc:
 inc a
 ld (currentelement),a
 ret
getString:
	or a
	ret z
	ld b,a
	xor a
getStringL1:
	push bc
	ld c,-1
	cpir 
	pop bc
	djnz getStringL1
	ret
Elements:
	.db "Hydrogen",0
	.db "Helium",0
	.db "Lithium",0
	.db "Beryllium",0
	.db "Boron",0
	.db "Carbon",0
	.db "Nitrogen",0
	.db "Oxygen",0
	.db "Flourine",0
	.db "Neon",0
	.db "Sodium",0
	.db "Magnesium",0
	.db "Aluminum",0
	.db "Silicon",0
	.db "Phosphorus",0
	.db "Sulfur",0
	.db "Chlorine",0
	.db "Argon",0
	.db "Potassium",0
	.db "Calcium",0
	.db "Scandium",0
	.db "Titanium",0
	.db "Vanadium",0
	.db "Chromium",0
	.db "Manganese",0
	.db "Iron",0
	.db "Cobalt",0
	.db "Nickel",0
	.db "Copper",0
	.db "Zinc",0
	.db "Gallium",0
	.db "Germanium",0
	.db "Arsenic",0
	.db "Selenium",0
	.db "Bromine",0
	.db "Krypton",0
	.db "Rubidium",0
	.db "Strontium",0
	.db "Yttrium",0
	.db "Zirconium",0
	.db "Niobium",0
	.db "Molybdenium",0
	.db "Technetium",0
	.db "Ruthenium",0
	.db "Rhodium",0
	.db "Palladium",0
	.db "Silver",0
	.db "Cadmium",0
	.db "Indium",0
	.db "Tin",0
	.db "Antimony",0
	.db "Tellurium",0
	.db "Iodine",0
	.db "Xenon",0
	.db "Cesium",0
	.db "Barium",0
	.db "Lanthanum",0
	.db "Cerium",0
	.db "Praseodymium",0
	.db "Neodymium",0
	.db "Promethium",0
	.db "Samarium",0
	.db "Europium",0
	.db "Gadolinium",0
	.db "Terbium",0
	.db "Dysprosium",0
	.db "Holmium",0
	.db "Erbium",0
	.db "Thulium",0
	.db "Ytterbium",0
	.db "Lutetium",0
	.db "Hafnium",0
	.db "Tantalum",0
	.db "Tungsten",0
	.db "Rhenium",0
	.db "Osmium",0
	.db "Iridium",0
	.db "Platinum",0
	.db "Gold",0
	.db "Mercury",0
	.db "Thallium",0
	.db "Lead",0
	.db "Bismuth",0
	.db "Polonium",0
	.db "Astatine",0
	.db "Radon",0
	.db "Francium",0
	.db "Radium",0
	.db "Actinium",0
	.db "Thorium",0
	.db "Protactinium",0
	.db "Uranium",0
	.db "Neptunium",0
	.db "Plutonium",0
	.db "Americium",0
	.db "Curium",0
	.db "Berkelium",0
	.db "Californium",0
	.db "Einsteinium",0
	.db "Fermium",0
	.db "Mendelevium",0
	.db "Nobelium",0
	.db "Lawrencium",0
	.db "Rutherfordium",0
	.db "Dubnium",0
	.db "Seaborgium",0
	.db "Bohrium",0
	.db "Hassium",0
	.db "Meitnerium",0
	.db "Ununnilium",0
	.db "Unununium",0
	.db "Ununbium",0
	.db " ",0
	.db "Ununquadium",0
	.db " ",0
	.db "Ununhexium",0
	.db " ",0
	.db "Ununoctium",0
Symbols:
	.db "H",0
	.db "He",0
	.db "Li",0
	.db "Be",0
	.db "B",0
	.db "C",0
	.db "N",0
	.db "O",0
	.db "F",0
	.db "Ne",0
	.db "Na",0
	.db "Mg",0
	.db "Al",0
	.db "Si",0
	.db "P",0
	.db "S",0
	.db "Cl",0
	.db "Ar",0
	.db "K",0
	.db "Ca",0
	.db "Sc",0
	.db "Ti",0
	.db "V",0
	.db "Cr",0
	.db "Mn",0
	.db "Fe",0
	.db "Co",0
	.db "Ni",0
	.db "Cu",0
	.db "Zn",0
	.db "Ga",0
	.db "Ge",0
	.db "As",0
	.db "Se",0
	.db "Br",0
	.db "Kr",0
	.db "Rb",0
	.db "Sr",0
	.db "Y",0
	.db "Zr",0
	.db "Nb",0
	.db "Mo",0
	.db "Tc",0
	.db "Ru",0
	.db "Rh",0
	.db "Pd",0
	.db "Ag",0
	.db "Cd",0
	.db "In",0
	.db "Sn",0
	.db "Sb",0
	.db "Te",0
	.db "I",0
	.db "Xe",0
	.db "Cs",0
	.db "Ba",0
	.db "La",0
	.db "Ce",0
	.db "Pr",0
	.db "Nd",0
	.db "Pm",0
	.db "Sm",0
	.db "Eu",0
	.db "Gd",0
	.db "Tb",0
	.db "Dy",0
	.db "Ho",0
	.db "Er",0
	.db "Tm",0
	.db "Yb",0
	.db "Lu",0
	.db "Hf",0
	.db "Ta",0
	.db "W",0
	.db "Re",0
	.db "Os",0
	.db "Ir",0
	.db "Pt",0
	.db "Au",0
	.db "Hg",0
	.db "Tl",0
	.db "Pb",0
	.db "Bi",0
	.db "Po",0
	.db "At",0
	.db "Rn",0
	.db "Fr",0
	.db "Ra",0
	.db "Ac",0
	.db "Th",0
	.db "Pa",0
	.db "U",0
	.db "Np",0
	.db "Pu",0
	.db "Am",0
	.db "Cm",0
	.db "Bk",0
	.db "Cf",0
	.db "Es",0
	.db "Fm",0
	.db "Md",0
	.db "No",0
	.db "Lr",0
	.db "Rf",0
	.db "Db",0
	.db "Sg",0
	.db "Bh",0
	.db "Hs",0
	.db "Mt",0
	.db "Uun",0
	.db "Uuu",0
	.db "Uub",0
	.db " ",0
	.db "Uuq",0
	.db " ",0
	.db "Uuh",0
	.db " ",0
	.db "Uuo",0
Weight:
	.db "1.00794",0
	.db "4.002602",0
	.db "6.941",0
	.db "9.012982",0
	.db "10.811",0
	.db "12.0107",0	
	.db "14.00674",0
	.db "15.9994",0
	.db "18.9984032",0
	.db "20.1797",0
	.db "22.98977",0
	.db "24.305",0
	.db "26.981538",0
	.db "28.0855",0
	.db "30.973761",0
	.db "32.066",0
	.db "35.4527",0
	.db "39.948",0
	.db "39.0983",0
	.db "40.078",0
	.db "44.95591",0
	.db "47.867",0
	.db "50.9415",0
	.db "51.9961",0
	.db "54.938049",0
	.db "55.845",0
	.db "58.9332",0
	.db "58.6934",0
	.db "63.546",0
	.db "65.39",0
	.db "69.723",0
	.db "72.61",0
	.db "74.9216",0
	.db "78.96",0
	.db "79.904",0
	.db "83.8",0
	.db "85.4678",0
	.db "87.62",0
	.db "88.90585",0
	.db "91.224",0
	.db "92.90638",0
	.db "95.94",0
	.db "(98.9063)",0
	.db "101.07",0
	.db "102.9055",0
	.db "106.42",0
	.db "107.8682",0
	.db "112.411",0
	.db "114.818",0
	.db "118.71",0
	.db "121.76",0
	.db "127.6",0
	.db "126.9044",0
	.db "131.29",0
	.db "132.90545",0
	.db "137.327",0
	.db "138.9055",0
	.db "140.116",0
	.db "140.90765",0
	.db "144.24",0
	.db "(144.9127)",0
	.db "150.36",0
	.db "151.964",0
	.db "157.25",0
	.db "158.92534",0
	.db "162.5",0
	.db "164.93032",0
	.db "167.26",0
	.db "168.93421",0
	.db "173.04",0
	.db "174.967",0
	.db "178.49",0
	.db "180.9479",0
	.db "183.84",0
	.db "186.207",0
	.db "190.23",0
	.db "192.217",0
	.db "195.078",0
	.db "196.96655",0
	.db "200.59",0
	.db "24.3833",0
	.db "207.2",0
	.db "208.98038",0
	.db "208.9824",0
	.db "209.9871",0
	.db "222.0176",0
	.db "(223.0197)",0
	.db "(226.0254)",0
	.db "(227.0277)",0
	.db "232.0281",0
	.db "231.03588",0
	.db "238.0289",0
	.db "(237.0482)",0
	.db "(244.0642)",0
	.db "(243.0614)",0
	.db "(247.0703)",0
	.db "(247.0703)",0
	.db "(251.0796)",0
	.db "(252.083)",0
	.db "(257.0951)",0
	.db "(258.0984)",0
	.db "(259.1011)",0
	.db "(262.11)",0
	.db "(261.1089)",0
	.db "(262.1144)",0
	.db "(263.1186)",0
	.db "(264.12)",0
	.db "(265.1306)",0
	.db "(268)",0
	.db "(269)",0
	.db "(272)",0
	.db "(277)",0
	.db " ",0
	.db "(289)",0
	.db " ",0
	.db "(289)",0
	.db " ",0
	.db "(293)",0
currentelement:
	.db 0
title:
	.db "Elements v1.0",0
author:
	.db "Radical Software",0
web:
	.db "www.radicalsoft.org",0
prompt:
	.db "- Press any key -",0
dash:
	.db " - ",0
atomicnumber:
	.db "Atomic #:  ",0
atomicweight:
	.db "Atomic Weight:  ",0
.end

