setup:
	;skip transmission of data, there is none anyway
	#NO_DATA
	
	;increase frequency to allow multiplexing
	;M16 frequency requires a 19200 PC baud rate
	SETFREQ M16
	
	;declare symbols
	SYMBOL ONES = C.3
	SYMBOL TENS = C.4
	SYMBOL HUNDREDS = C.5
	SYMBOL K = C.7
	SYMBOL TEN_K = C.0
	
	SYMBOL TP = B.7
	SYMBOL RT = B.6
	SYMBOL RB = B.5
	SYMBOL BM = B.4
	SYMBOL LB = B.3
	SYMBOL LT = B.2
	SYMBOL MD = B.1
	SYMBOL SP = B.0
	
	SYMBOL DATA_1 = b1
	SYMBOL DATA_10 = b2
	SYMBOL DATA_100 = b3
	SYMBOL DATA_1K = b4
	SYMBOL DATA_10K = b5
	
	SYMBOL COUNTDOWN_DISPLAY_TIME = 40
	SYMBOL LAUNCH_DISPLAY_TIME = 20
	
	;blink LED to alert that the program is beginning
	HIGH C.2
	PAUSE 1000
	
	LOW C.2
	PAUSE 1000
	
	GOTO main

main:	
	;wait for the launch button to be pressed
	GOSUB input_button
	
	;count down from 10
	GOSUB countdown
	
	;signal the RF receiver three times for redundancy (in case the RF link is not 100%)
	GOSUB launch_text
	HIGH C.1
	SEROUT C.1, N600_4, ("UUUUUUUUUUUUU")
	PAUSE 5
	
	HIGH C.2
	SEROUT C.1, N600_4, ($AA, $BB, $CC, 49)
	PAUSE 50
	
	LOW C.2
	PAUSE 500
	
	GOSUB launch_text
	
	HIGH C.2
	SEROUT C.1, N600_4, ($AA, $BB, $CC, 49)
	PAUSE 50
	
	LOW C.2
	PAUSE 500
	
	GOSUB launch_text
	
	HIGH C.2
	SEROUT C.1, N600_4, ($AA, $BB, $CC, 49)
	PAUSE 50
	LOW C.1, C.2
	
	;wait for the button to be pressed again for next launch
	PAUSE 1000
	goto main

;====================| MAIN TEXT SUBROUTINES |====================

input_button:
	IF pinC.6 = 1 THEN
		b0 = 10
		RETURN
	END IF
	
	GOSUB armed_text
	GOTO input_button

armed_text:
	;clear the display
	GOSUB display_clear
	
	;multiplex-display "ARMED" on the screen
	LOW TEN_K
	GOSUB display_A
	PAUSE 5
	HIGH TEN_K
	GOSUB display_clear
	
	LOW K
	GOSUB display_R
	PAUSE 5
	HIGH K
	GOSUB display_clear
	
	LOW HUNDREDS
	GOSUB display_M
	PAUSE 5
	HIGH HUNDREDS
	GOSUB display_clear
	
	LOW TENS
	GOSUB display_E
	PAUSE 5
	HIGH TENS
	GOSUB display_clear
	
	LOW ONES
	GOSUB display_0
	PAUSE 5
	HIGH ONES
	GOSUB display_clear
	RETURN

press_text:
	;clear the display
	GOSUB display_clear
	
	;multiplex-display "PRESS" on the screen
	LOW TEN_K
	GOSUB display_P
	PAUSE 5
	HIGH TEN_K
	GOSUB display_clear
	
	LOW K
	GOSUB display_R
	PAUSE 5
	HIGH K
	GOSUB display_clear
	
	LOW HUNDREDS
	GOSUB display_E
	PAUSE 5
	HIGH HUNDREDS
	GOSUB display_clear
	
	LOW TENS
	GOSUB display_5
	PAUSE 5
	HIGH TENS
	GOSUB display_clear
	
	LOW ONES
	GOSUB display_5
	PAUSE 5
	HIGH ONES
	GOSUB display_clear
	RETURN

launch_text:
	;clear the display
	GOSUB display_clear
	
	;multiplex-display "lAUNCH" on the screen
	FOR b6 = 0 TO LAUNCH_DISPLAY_TIME
		LOW TEN_K
		HIGH SP
		GOSUB display_A
		PAUSE 5
		HIGH TEN_K
		GOSUB display_clear
		
		LOW K
		GOSUB display_U
		PAUSE 5
		HIGH K
		GOSUB display_clear
		
		LOW HUNDREDS
		GOSUB display_N
		PAUSE 5
		HIGH HUNDREDS
		GOSUB display_clear
		
		LOW TENS
		GOSUB display_C
		PAUSE 5
		HIGH TENS
		GOSUB display_clear
		
		LOW ONES
		GOSUB display_H
		PAUSE 5
		HIGH ONES
		GOSUB display_clear
	NEXT b6
	RETURN

countdown:
	;count down from the input number to 0
	FOR b6 = b0 TO 0 STEP -1
		;clear the display
		GOSUB display_clear
		
		;break the input number up by place value
		DATA_10K = b6 / 10000
		DATA_1K = b6 % 10000 / 1000
		DATA_100 = b6 % 10000 % 1000 / 100
		DATA_10 = b6 % 10000 % 1000 % 100 / 10
		DATA_1 = b6 % 10
		
		FOR b7 = 1 TO COUNTDOWN_DISPLAY_TIME
			GOSUB pdisplay_10K
			GOSUB display_clear
			
			GOSUB pdisplay_1K
			GOSUB display_clear
			
			GOSUB pdisplay_100
			GOSUB display_clear
			
			GOSUB pdisplay_10
			GOSUB display_clear
			
			GOSUB pdisplay_1
			GOSUB display_clear
		NEXT b7
		
		;shift base-10 counting to base-6 minute/second counting
		b8 = b6 % 100
		IF b8 = 0 THEN
			b6 = b6 - 40
		END IF
		
	NEXT b6
	RETURN

;====================| PLACE VALUE DISPLAY SUBROUTINES |====================
pdisplay_10K:
	
	LOW TEN_K
	SELECT CASE DATA_10K
		CASE 0
			GOSUB display_0
		CASE 1
			GOSUB display_1
		CASE 2
			GOSUB display_2
		CASE 3
			GOSUB display_3
		CASE 4
			GOSUB display_4
		CASE 5
			GOSUB display_5
		CASE 6
			GOSUB display_6
		CASE 7
			GOSUB display_7
		CASE 8
			GOSUB display_8
		CASE 9
			GOSUB display_9
	END SELECT
	
	;pause a moment, then continue
	PAUSE 5
	HIGH TEN_K
	
	RETURN

pdisplay_1K:
	
	LOW K
	;HIGH SP
	
	SELECT CASE DATA_1K
		CASE 0
			GOSUB display_0
		CASE 1
			GOSUB display_1
		CASE 2
			GOSUB display_2
		CASE 3
			GOSUB display_3
		CASE 4
			GOSUB display_4
		CASE 5
			GOSUB display_5
		CASE 6
			GOSUB display_6
		CASE 7
			GOSUB display_7
		CASE 8
			GOSUB display_8
		CASE 9
			GOSUB display_9
	END SELECT
	
	;pause a moment, then continue
	PAUSE 5
	HIGH K
	
	RETURN

pdisplay_100:
	
	LOW HUNDREDS
	SELECT CASE DATA_100
		CASE 0
			GOSUB display_0
		CASE 1
			GOSUB display_1
		CASE 2
			GOSUB display_2
		CASE 3
			GOSUB display_3
		CASE 4
			GOSUB display_4
		CASE 5
			GOSUB display_5
		CASE 6
			GOSUB display_6
		CASE 7
			GOSUB display_7
		CASE 8
			GOSUB display_8
		CASE 9
			GOSUB display_9
	END SELECT
	
	;pause a moment, then continue
	PAUSE 5
	HIGH HUNDREDS
	
	RETURN

pdisplay_10:
	
	LOW TENS
	;HIGH SP
	
	SELECT CASE DATA_10
		CASE 0
			GOSUB display_0
		CASE 1
			GOSUB display_1
		CASE 2
			GOSUB display_2
		CASE 3
			GOSUB display_3
		CASE 4
			GOSUB display_4
		CASE 5
			GOSUB display_5
		CASE 6
			GOSUB display_6
		CASE 7
			GOSUB display_7
		CASE 8
			GOSUB display_8
		CASE 9
			GOSUB display_9
	END SELECT
	
	;pause a moment, then continue
	PAUSE 5
	HIGH TENS
	
	RETURN

pdisplay_1:
	
	LOW ONES
	SELECT CASE DATA_1
		CASE 0
			GOSUB display_0
		CASE 1
			GOSUB display_1
		CASE 2
			GOSUB display_2
		CASE 3
			GOSUB display_3
		CASE 4
			GOSUB display_4
		CASE 5
			GOSUB display_5
		CASE 6
			GOSUB display_6
		CASE 7
			GOSUB display_7
		CASE 8
			GOSUB display_8
		CASE 9
			GOSUB display_9
	END SELECT
	
	;pause a moment, then continue
	PAUSE 5
	HIGH ONES
	
	RETURN

;====================| CHARACTER SUBROUTINES |====================
display_clear:
	LOW TP
	LOW RT
	LOW RB
	LOW BM
	LOW LB
	LOW LT
	LOW MD
	LOW SP
	RETURN

display_0:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH BM
	HIGH LB
	HIGH LT
	RETURN

display_1:
	HIGH RT
	HIGH RB
	RETURN

display_2:
	HIGH TP
	HIGH RT
	HIGH BM
	HIGH LB
	HIGH MD
	RETURN

display_3:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH BM
	HIGH MD
	RETURN

display_4:
	HIGH RT
	HIGH RB
	HIGH LT
	HIGH MD
	RETURN

display_5:
	HIGH TP
	HIGH RB
	HIGH BM
	HIGH LT
	HIGH MD
	RETURN

display_6:
	HIGH TP
	HIGH RB
	HIGH BM
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN

display_7:
	HIGH TP
	HIGH RT
	HIGH RB
	RETURN

display_8:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH BM
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN

display_9:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH BM
	HIGH LT
	HIGH MD
	RETURN

display_P:
	HIGH TP
	HIGH RT
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN

display_R:
	HIGH TP
	HIGH RT
	HIGH LB
	HIGH LT
	HIGH MD
	HIGH SP
	RETURN

display_E:
	HIGH TP
	HIGH BM
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN

display_M:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH LB
	HIGH LT
	HIGH SP
	RETURN

display_A:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN

display_U:
	HIGH RT
	HIGH RB
	HIGH BM
	HIGH LB
	HIGH LT
	RETURN

display_N:
	HIGH TP
	HIGH RT
	HIGH RB
	HIGH LB
	HIGH LT
	RETURN

display_C:
	HIGH TP
	HIGH BM
	HIGH LB
	HIGH LT
	RETURN

display_H:
	HIGH RT
	HIGH RB
	HIGH LB
	HIGH LT
	HIGH MD
	RETURN