;
;      Copyright (c) 1995 Paul Campbell
;      All Rights Reserved
;      THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Paul Campbell
;      The copyright notice above does not evidence any
;      actual or intended publication of such source code.
;

NL = 0xd
LF = 0xa
BS = 8
DEL = 0x7f

CHIP_ID	= 0x59

xr4	= 0x04			;; r4
xr6	= 0x06			;; r6
;;
;;	Interrupt vectors
;;

	. = 0x0000
	ljmp		reset
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
	ljmp		reset
	nop
	nop
	nop
	nop
	nop
	
reset:

	;
	;	set up the serial port
	;
	mov		p3, #0
	
;	mov		rcap2h, #0xff				; 9600 baud
;	mov		rcap2l, #0xd9
;	mov		t2mod, #0x00
;	mov		t2con, #0x14				; set up for baud rate generator (xmit only)
	mov		ie, #0x00
	mov		pcon, #0x00
	
	;
	;	set up sp
	;
	mov		sp, #0x70	; ???

	;;
	;;	start of main program
	;;
	;;	p1 is input
	;;	
	;;	p1.0 low is launch
	;;	p1.1 low is dump
	;;	p1.2 high is arm
	;;	p1.3 low is 30 sec wait
	;;	p1.4 low is 35 sec wait
	;;	p1.5 low is 40 sec wait
	;;	p1.6 low is 60 sec wait 'till dump (else 120)
	;;	p1.7 low is not autodump
	;;
	;;	p3 is output
	;;
	;;	p3.0	- load		(yellow)
	;;	p3.1	- armed		(red)
	;;	p3.2	- fire		
	;;	p3.3	- dump		(red/yellow)
	;;	p3.4	- red		(if used)
	;;	p3.5	- red		(if used)
	;;

	ajmp		start
	
sload:	setb		p3.0
	setb		p3.4
	acall		start_time
L2:	acall 		time
	jnb		p1.1, sdump
	jnb		p1.2, start

	cjne		r5, #30, L35
	jnb		p1.3, sarmed
	ajmp		L2

L35:	cjne		r5, #35, L40
	jnb		p1.4, sarmed
	ajmp		L2

L40:	cjne		r5, #40, L45
	jnb		p1.5, sarmed
	ajmp		L2

L45:	cjne		r5, #45, L2
	ajmp		sarmed

sarmed:	clr		p3.0
	setb		p3.1
	clr		p3.4
	setb		p3.5
	acall		start_time
L3:	acall		time
	jnb		p1.1, sdump
	jnb		p1.2, start
	jnb		p1.0, slaunch

	cjne		r5, #60, L120
	jb		p1.6, L3
	jb		p1.7, sautodump
	ajmp		start

L120:	cjne		r5, #120, L3
	jb		p1.7, sautodump
	ajmp		start

start:	mov		p3, #0
L0:	jnb		p1.1, sdump
	jnb		p1.2, start
	jnb		p1.0, sload
	ajmp		L0

sdump:	mov		p3, #0
	setb		p3.3
	setb		p3.5
	setb		p3.4
L1:	jb		p1.1, start
	ajmp		L1

slaunch:clr		p3.1
	setb		p3.2
	clr		p3.5
	acall		start_time
L9:	acall		time			; assert it for 3 secs
	jnb		p1.2, start
	jnb		p1.1, sdump
	cjne		r5, #3, L9
L9a:	jnb             p1.2, start		; and untill the lco lifts
	jnb		p1.1, sdump		; their finger
	jnb		p1.0, L9a
	clr		p3.2
	acall		start_time
L10:	acall		time			; now wait 30 secs
	jnb		p1.1, sdump
	cjne		r5, #60, L10
	ajmp		start

sautodump:
	clr		p3.1
	setb		p3.3
	setb		p3.4
	setb		p3.5
	acall		start_time
L4:	acall		time
	jnb		p1.2, start
	jnb		p1.1, sdump
	cjne		r5, #30, L4
	ajmp		start

time:	jb		tcon.7,	tout
	ret
tout:	inc		r6			;; every 1/100th sec
	cjne		r6, #100, stime
	mov		r6, #0			;; every sec
	inc		r5
	ajmp		stime
start_time:					;; clear sec counter
	mov		r5, #0
	mov		r6, #0
stime:	mov		tcon, #0		;; start timer for 1/100 sec
	mov		tmod, #0x10
	mov		th1, #(65536 - 10000)>>8
	mov		tl1, #(65536 - 10000)&0xff
	setb		tcon.6
	ret