/ symg -- 3d tic-tac-toe

symg:
	clr	kk
	clr	jj
1:
	clr	ii
2:
	jsr	r5,symmap
	mov	kk,r1
	asl	r0
	movb	r0,map(r1)
	inc	kk
	inc	ii
	cmp	ii,$64.
	blt	2b
	inc	jj
	cmp	jj,$192.
	blt	1b
	rts	pc

split:
	mov	r0,r1
	mov	r0,r2
	mov	r0,r3
	bic	$!3,r1
	asr	r2
	asr	r2
	bic	$!3,r2
	asr	r3
	asr	r3
	asr	r3
	asr	r3
	rts	r5

combin:
	asl	r2
	asl	r2
	asl	r3
	asl	r3
	asl	r3
	asl	r3
	mov	r1,r0
	bis	r2,r0
	bis	r3,r0
	rts	r5

iom2:
	mov	r0,r1
	com	r1
	bic	$!25,r1
	bic	$25,r0
	bis	r1,r0
ivm1:
iom1:
fun1:
com1:
	rts	r5

ivm2:
	mov	r0,r1
	asr	r1
	bic	$!25,r1
	asl	r0
	bic	$!52,r0
	bis	r1,r0
	rts	r5

fun2:
	jsr	r5,split
	mov	r1,r0
	mov	r2,r1
	mov	r3,r2
	mov	r0,r3
	jmp	combin

fun4:
	jsr	r5,split
	mov	r1,r0
	mov	r2,r1
	mov	r0,r2
	jmp	combin

fun3:
	jsr	r5,fun2
	jmp	fun2

fun5:
	jsr	r5,fun4
	jmp	fun2

fun6:
	jsr	r5,fun4
	jsr	r5,fun2
	jmp	fun2

com2:
	jsr	r5,split
	neg	r1
	add	$3,r1
	jmp	combin

com3:
	jsr	r5,split
	neg	r2
	add	$3,r2
	jmp	combin

com4:
	jsr	r5,split
	neg	r3
	add	$3,r3
	jmp	combin

com5:
	jsr	r5,split
	neg	r1
	add	$3,r1
	neg	r2
	add	$3,r2
	jmp	combin

com6:
	jsr	r5,split
	neg	r1
	add	$3,r1
	neg	r3
	add	$3,r3
	jmp	combin

com7:
	jsr	r5,split
	neg	r2
	add	$3,r2
	neg	r3
	add	$3,r3
	jmp	combin

com8:
	jsr	r5,split
	neg	r1
	add	$3,r1
	neg	r2
	add	$3,r2
	neg	r3
	add	$3,r3
	jmp	combin

funlist:
	fun1
	fun2
	fun3
	fun4
	fun5
	fun6

comlist:
	com1
	com2
	com3
	com4
	com5
	com6
	com7
	com8

iolist:
	iom1
	iom2
ivlist:
	ivm1
	ivm2

symmap:
	clr	r0
	mov	jj,r1
	dvd	$2.,r0
	mov	r0,-(sp)
	asl	r1
	mov	ii,r0
	jsr	r5,*iolist(r1)
	clr	r0
	mov	(sp)+,r1
	dvd	$2.,r0
	mov	r0,-(sp)
	asl	r1
	mov	ii,r0
	jsr	r5,*ivlist(r1)
	clr	r0
	mov	(sp)+,r1
	dvd	$6.,r0
	mov	r0,-(sp)
	asl	r1
	mov	ii,r0
	jsr	r5,*funlist(r1)
	mov	(sp)+,r1
	asl	r1
	mov	ii,r0
	jmp	*comlist(r1)

.bss
map:	.=.+[64.*192.]
ii:	.=.+2.
jj:	.=.+2.
kk:	.=.+2
.text

