* CMDS
*
* init keypad
$KEYI  MOV  R11,*S+
$KEYI2 MOV  R1,R6
       SZCB @DONE0,@$RSTA2
       ANDI R1,>80
       SWPB R1
       SOCB R1,@$RSTA2
       LI   R2,1
       LIMI 0
       BL   @ENQCMD
       LI   R0,8
MATCH1 MOV  R6,R1
       BL   @ENQUE
EXITS  DECT S
       MOV  *S,R11
       RT
* init joyst
$JOYI  MOV  R11,*S+
       MOVB @SEVEN,@$JOYCT
       LI   R2,2
       LIMI 0
       BL   @ENQCMD
       MOVB @$JYMSK,R1
       BL   @ENQUE8
       LI   R0,8
       MOVB @$JYCNT,R1
       BL   @ENQUEM
       MOVB @$JYCNT,R1
       ANDI R1,>0FFF
       MOVB R1,@$JYCNT
       JMP  EXITS
* set game code
$SETGM SZCB @DONE1,@$RSTA2
       LI   R2,3
       JMP  SETGM1
* set talker
$SETLK SZCB @DONE2,@$RSTA2
       LI   R2,4
       JMP  SETLK1
* allocate templates
$ALLCT SZCB @DONE3,@$RSTA2
       LI   R2,5
       JMP  ALLCT1
* clear templates
$CLRTK LI   R2,6
       JMP  CLRTK1
* define word group
$DFGRP MOV  R11,*S+
       MOV  R1,R6
       MOV  R2,R7
       MOV  R3,R8
       LI   R2,7
       LIMI 0
       BL   @ENQCMD
       LI   R0,3
       MOV  R6,R1
       BL   @ENQUE
       LI   R0,5
       MOV  R7,R1
       BL   @ENQUE
       MOV  R7,R6
WORDS  LI   R0,7
       MOV  *R8,R1
       BL   @ENQUE
       INCT R8
       DEC  R6
       MOV  R6,R6
       JGT  WORDS
       JMP  EXITS
* listen cmd
$LSTEN MOVB @$RSTA2,R0
       ANDI R0,>100
       JEQ  LSTENA
       MOVB @$RSTAT,R0
       ANDI R0,>200
       JEQ  LSTENE
       SOCB @DONE1,@$RSTAT
       SOCB @DONE7,@$RSTA2
LSTENA RT
LSTENE SZCB @DONE7,@$RSTA2
       SZCB @DONE1,@$RSTAT
       LI   R2,8
CLRTK1
ABRTL1 JMP  LSTEN1
* abort listen cmd
$ABRTL SZCB @DONE0,@$RSTA3
       SZCB @DONE2,@$RSTAT
       LI   R2,9
       JMP  ABRTL1
* train cmd
$TRAIN SZCB @DONE1,@$RSTA3
       SZCB @DONE3,@$RSTAT
       LI   R2,>A
SETGM1
SETLK1
ALLCT1
CLRWD1 MOV  R11,*S+
       LIMI 0
       BL   @ENQCMD
       LI   R0,7
SCLST1 MOVB @$PARAM,R1
       B    @ENQCT
* match cmd
$MATCH MOV  R11,*S+
       SZCB @DONE2,@$RSTA3
       SZCB @DONE4,@$RSTAT
       MOV  R1,R6
       LI   R2,>B
       LIMI 0
       BL   @ENQCMD
       LI   R0,3
       B    @MATCH1
* clear word
$CLRWD LI   R2,>C
       JMP  CLRWD1
* set cluster count
$SCLST MOV  R11,*S+
       LI   R2,>19
       LIMI 0
       BL   @ENQCMD
       LI   R0,4
       JMP  SCLST1
* start 6809 decode
$STDEC LI   R2,>D
MIKE1
XINIT1
LSTEN1 MOV  R11,*S+
       LIMI 0
       BL   @ENQCMD
       JMP  BFSTGE
* buffer string cmd
BFSTGA CLR  R1
$BFSTG MOV  R11,*S+
       BL   @$SVGRA
       MOV  R3,@$GRADR
       MOVB @$RSTAT,R0
       ANDI R0,>200
       JNE  BFSTGE
       MOV  R1,R6
       BL   @$STDEC
       BL   @$STWRD
BFSTGE DECT S
       MOV  *S,R11
       RT
* start word synthesis
STWRDI CLR  R6
$STWRD MOV  R11,*S+
       LIMI 0
       SZCB @$ONE,@$RSTA3
       MOVB @$WRDPH,@$WRDPH
       JEQ  STWRDB
       MOV  @$LSTPT,R1
       JEQ  STWRDA
       BL   @WDFGR
       MOV  R2,@$SYNAD
       JNE  STWRDB
       CLR  @$LSTPT
STWRDA SZCB @DONE6,@$RSTAT
       JMP  STWRDE
STWRDB SOCB @DONE6,@$RSTAT
       MOV  @$SYNAD,R1
       MOV  R1,@$SYOLD
       INCT @$SYNAD
       BL   @WDFGR
       MOVB R2,@$SYLEN
       SWPB R2
       MOVB R2,@$SYSTG
       LI   R2,>11
       BL  @ENQCMD
       LI   R0,2
       MOV  R6,R1
       BL   @ENQUE
       LI   R0,6
       MOVB @$SYLEN,R1
       BL   @ENQUEM
STWRDE MOV  @$GRADR,R3
       BL   @$RTGRA
EXITY  DECT S
       MOV  *S,R11
       RT
* MBX ID cmd
$MBXID MOV  R11,*S+
       SZCB @DONE5,@$RSTA3
       LI   R2,>15
       LIMI 0
       BL   @ENQCMD
       JMP  EXITY
* init MBX
$XINIT LI   R2,>16
       JMP  XINIT1
* mike toggle
$MIKE  LI   R2,>1C
       JMP  MIKE1
