; (c) 02172000 by John Wyrwas  #:)  
; Special Thanks to Paul Marks for fixing my LCD code
; 
; #### Header ####
	.nolist
	#include "ion.inc"
	.list
#ifdef TI83P
	.org    progstart-2
	.db     $BB,$6D
#else
	.org    progstart
#endif
	xor a
	jr nc,Start
	.db "Power Toys 83+ v1.2",0
; #### Program ####
Start:
	bcall(_indicatorOFF)
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,TitleStr
	bcall(_puts)
KeyLoop:
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,Tweakui
	cp $1A                                  ;1Ah scancode for '2'
	jp z,Sys
	cp $12                                  ;12h scancode for '3'
	jp z,Applets       
	cp $23                                  ;23h scancode for '4'
       	jp z,Info
	cp $1B                                  ;1Bh scancode for '5'
        jp nz,KeyLoop
	ret
Applets:
	bcall(_clrlcdf)                 
	bcall(_homeup)                     
	ld hl,AppletStr
	bcall(_puts)
AppletLoop:
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,FakeCleared
;	cp $1A                                  ;1Ah scancode for '2'
;	jp z,
;	cp $12                                  ;12h scancode for '3'
;	jp z,       
;	cp $23                                  ;23h scancode for '4'
;	jp z,       
	cp $1B                                  ;1Bh scancode for '5'
        jp z,Start
	jp nz,AppletLoop


FakeCleared:
	bcall(_clrlcdf)  
	call off		
	ld hl,$0A1E
	ld (pencol),hl
	ld hl,NameStr
	bcall(_vputs)
	ld hl,$1127
	ld (pencol),hl
	ld hl,VerStr
	bcall(_vputs)
	ld a,5
	ld (currow),a
	ld a,2
	ld (curcol),a
	ld hl,RamStr
	bcall(_puts)
RamClearedLoop:
	ld a, 0FFh			
	out (1), a
	ld a, 0BFh			
	out (1), a
	in a, (1)
	cp %11111100			;Check for F4 AND F5.
	jp z,Applets 			
	jp RamClearedLoop
off:
	di
	ex af,af'
	exx
	ld a,$01
	out ($03),a
	ld a,$00
	out ($04),a
	ex af,af'
	exx
	ei
	halt
	res onInterrupt,(iy+onFlags)
	ret
Sys:
	bcall(_clrlcdf)                 
	bcall(_homeup)            
	ld hl,SysStr
	bcall(_puts)
	ld a,10
	ld (CURCOL),a
	ld a,3
	ld (CURROW),a
	bit	5,(iy+$18)
	jp	nz,battfine
batbad:
	ld hl,BatLow
	bcall(_puts)
	jp memc
battfine:
	ld hl,BatOk
	bcall(_puts)
	jp memc
memc:
	ld a,60
	ld (PENCOL),a
	ld a,45
	ld (PENROW),a
	bcall(_memfree)
	bcall(_setxxxxop2)
	bcall(_op2toop1)
	bcall(_dispop1a)
	bcall(_getkey)
	jp Start
Tweakui:
	EI
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,TweakuiStr
	bcall(_puts)
TweakLoop:
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,Graph
	cp $1A                                  ;1Ah scancode for '2'
	jp z,Text
	cp $12                                  ;12h scancode for '3'
	jp z,System       
	cp $23                                  ;23h scancode for '4'
	jp z,LCD       
	cp $1B                                  ;1Bh scancode for '5'
        jp z,Start
	jp nz,TweakLoop
	
Info:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,InfoStr
	bcall(_puts)
	bcall(_getkey)

	bcall(_clrlcdf)                 
	bcall(_homeup) 
	ld hl,InfoStrb
	bcall(_puts)
	bcall(_getkey)
	jp Start

; #########  LCD Section ###########
LCD:
	bcall(_clrscr)
	bcall(_homeup)
	ld hl,LCDStr
	bcall(_puts)
	ld d,$40
LCDlp:
	bcall(_getcsc)
	cp $0F			;Clear Scancode
	jp z,Tweakui
	cp $02			;left scancode
	call z,move_dn
	cp $03			;right scancode
	call z,move_up
	cp $0B			;minus scancode
	call z,cont_dn
	cp $0A			;plus scancode
	call z,cont_up
	jp LCDlp
move_dn:
	ld a,d
	cp $40
	ret z
	di
	dec d
	ld a,d
	call lcd_busy
	out ($10),a
	ei
	ret
move_up:
	ld a,d
	cp $7F
	ret z
	di
	inc d
	ld a,d
	call lcd_busy
	out ($10),a
	ei
	ret
cont_dn:
	ld a,(contrast)
	cp $00
	ret z
	di
	dec a
	ld (contrast),a
	add a,$18
	or $C0
	call lcd_busy
	out ($10),a
	ei
	ret
cont_up:
	ld a,(contrast)
	cp $27
	ret z
	di
	inc a
	ld (contrast),a
	add a,$18
	or $C0
	call lcd_busy
	out ($10),a
	ei
	ret

lcd_busy:
	push af
	inc hl
	dec hl
	pop af
	ret

; #########  Graph Section ###########
Graph:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,GraphStr
	bcall(_puts)
GraphLoop:       
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,Grapha
	cp $1A                                  ;1Ah scancode for '2'
	jp z,Graphb
	cp $12                                  ;12h scancode for '3'
	jp z,Graphc
        cp $23                                  ;23h scancode for '4'
        jp z,Graphd
        cp $1B                                  ;1Bh scancode for '5'
        jp z,Tweakui
	jp nz,GraphLoop
Grapha:
	bit 4,(iy+$3C)
	jr      nz,Graphaon
	set 4,(iy+$3C)
	call Seton
	jp Graph	
Graphaon:
	res 4,(iy+$3C)
	call Setoff
	jp Graph
Graphb:
	bit 4,(iy+$13)
	jr      nz,Graphbon
	set 4,(iy+$13)
	call Seton
	jp Graph	
Graphbon:
	res 4,(iy+$13)
	call Setoff
	jp Graph

Graphc:
	bit 0,(iy+$14)
	jr      nz,Graphcon
Graphcoff:
	set 0,(iy+$14)	
	set 1,(iy+$14)
	call Seton
	jp Graph	
Graphcon:	
	bit 1,(iy+$14)
	jr	z,Graphcoff
	res 0,(iy+$14)	
	res 1,(iy+$14)
	call Setoff
	jp Graph
Graphd:
	bit 2,(iy+$32)
	jr      nz,Graphdon
	set 2,(iy+$32)
	call Seton
	jp Graph	
Graphdon:
	res 2,(iy+$32)
	call Setoff
	jp Graph



;############  Text Section ##################

Text:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,TextStr
	bcall(_puts)
TextLoop:       
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,Texta
	cp $1A                                  ;1Ah scancode for '2'
	jp z,Textb
;	cp $12                                  ;12h scancode for '3'
;	jp z,Textc
;       cp $23                                  ;23h scancode for '4'
;       jp z,Textd
        cp $1B                                  ;1Bh scancode for '5'
	jp z,Tweakui
	jp nz,TextLoop
Texta:
	bit 3,(iy+$24)
	jr      nz,Textaon
	set 3,(iy+$24)
	call Seton
	jp Text	
Textaon:
	res 3,(iy+$24)
	call Setoff
	jp Text
Textb:
	bit 3,(iy+$05)
	jr      nz,Textbon
	set 3,(iy+$05)
	call Seton
	jp Text	
Textbon:
	res 3,(iy+$05)
	call Setoff
	jp Text


;############  System Section ##################

System:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,SystemStr
	bcall(_puts)
SystemLoop:       
	bcall(_getk)
	cp $22                                  ;22h scancode for '1'
	jp z,Systema
;       cp $1A                                  ;1Ah scancode for '2'
;       jp z,Systemb
        cp $12                                  ;12h scancode for '3'
        jp z,Systemc
;       cp $23                                  ;23h scancode for '4'
;       jp z,Systemd
        cp $1B                                  ;1Bh scancode for '5'
        jp z,Tweakui
	jp nz,SystemLoop
Systema:
	bit 2,(iy+$08)
	jr      nz,Systemaon
	set 2,(iy+$08)
	call Seton
	jp System	
Systemaon:
	res 2,(iy+$08)
	call Setoff
	jp System

Systemc:
	bit 5,(iy+$18)
	jr      nz,Systemcon
	set 5,(iy+$18)
	call Seton
	jp System	
Systemcon:
	res 5,(iy+$18)
	call Setoff
	jp System
;#######################

Seton:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,OnStr
	bcall(_puts)     
	bcall(_getkey)
	ret
Setoff:
	bcall(_clrlcdf)                 
	bcall(_homeup)
	ld hl,OffStr
	bcall(_puts)     
	bcall(_getkey)
	ret

Finish:
	ret

	
;###################################
; Strings
; ########

GraphStr:
	.db " Power Toys 83+ "
	.db " TweakUI- Graph "
	.db "                "
	.db "1. Fast Circles "
	.db "2. Autofil Table"
	.db "3. 4-way Split  "
        .db "4. Big Font     "
	.db "5. Back",0

TextStr:
	.db " Power Toys 83+ "
	.db " TweakUI- Text  "
	.db "                "
	.db "1. Lowercase    "
	.db "2. Text Inverse "
	.db "5. Back",0

SystemStr:
	.db " Power Toys 83+ "
	.db "TweakUI- System "
	.db "                "
	.db "1. Auto PowerOff"
        .db "3. Low battery  "
	.db "5. Back",0

LCDStr:
	.db " Power Toys 83+ "
	.db "  TweakUI- LCD  "
	.db "                " 	 
	.db "Shift-   <-   ->"
	.db "Contrast (+) (-)"
	.db "                "
	.db " Exit  (clear)",0
OnStr:
	.db " Power Toys 83+ "
	.db "                "
	.db "Option Turned On",0

OffStr:
	.db " Power Toys 83+ "
	.db "                "
	.db "Option turnd Off",0

InfoStrb:
	.db "Some changes are"
	.db "only temporary. "
	.db "                "
	.db "I am not liable "
	.db " for crashes!!  "
	.db "                "
	.db "Fake RAM Clr:   "
	.db "To exit- F4+F5",0

TitleStr:
	.db " Power Toys 83+ "
	.db "By John Wyrwas  "
	.db "                "
	.db "1. Tweakui      "
	.db "2. System Info  "
	.db "3. Applets      "
	.db "4. About        "
	.db "5. Quit",0

TweakuiStr:
	.db " Power Toys 83+ "
	.db "    TweakUI     "
	.db "                "
	.db "1. Graph/Table  "
	.db "2. Text Display "
	.db "3. System       "
	.db "4. LCD          "
	.db "5. Back",0

SysStr:
	.db " Power Toys 83+ "
	.db "  System Info   "
	.db "                "
	.db "Battery:        "
	.db "Memory Free:    "
	.db "              ",0

BatOk:
	.db "OK",0

BatLow:
	.db "Low",0 

AppletStr:
	.db " Power Toys 83+ "
	.db "    Applets     "
	.db "                "
	.db "1. Fake RAM clr "
;	.db "2.              "
;	.db "3.              "
;	.db "4.              "
	.db "5. Back",0

InfoStr:	
	.db " Power Toys 83+ "
	.db "  Version 1.2   "
	.db " By John Wyrwas "
	.db "   LCD fix by   "
	.db "   Paul Marks   "
	.db "  Feb. 16 2000",0

NameStr:		
	.db "TI-83 Plus",0

VerStr:	
	.db "1.12",0

RamStr:		
	.db "RAM cleared",0   


.end
.end