* ENQUE
*
ENQUE8 LI   R0,8
ENQUEM SRL  R1,8
ENQUE  MOV  R11,*S+
       MOV  R0,R4
       MOV  @SIXTN,R0
       S    R4,R0
       SLA  R1,0
       MOV  R1,R3
       MOV  @$QUBIT,R5
       A    R4,R5
       C    R5,@SIXTN
       JHE  PART
       MOV  @$QUBIT,R0
       JEQ  NOSHFT
       SRL  R1,0
       MOV  R1,R3
NOSHFT MOV  @$QUADR,R2
       BL   @$BLFVQ
       SOC  R3,@$QWORD
       BL   @$BLKVQ
       A    R4,@$QUBIT
       JMP  ENDE
PART   MOV  R5,R4
       MOV  R1,R5
       MOV  @$QUBIT,R0
       SRL  R1,0
       MOV  R1,R3
       MOV  @SIXTN,R0
       S    @$QUBIT,R0
       SLA  R5,0
       MOV  @$QUADR,R2
       BL   @$BLFVQ
       SOC  R3,@$QWORD
       BL   @$BLKVQ
       INCT @$QUADR
       MOV  @$QUADR,R2
       CLR  @$QWORD
       SOC  R5,@$QWORD
       BL   @$BLKVQ
       MOV  R4,@$QUBIT
       S    @SIXTN,@$QUBIT
ENDE   B    @EXITZ
*
* enque command
ENQCMD MOV  R11,*S+
       MOVB @HUFF1(R2),R0
       SLA  R2,1
       MOVB @HUFFC(R2),R1
       SRL  R0,8
       CI   R0,8
       JLE  ENQCT
       MOV  R2,R9
       BL   @ENQUE8
       MOVB @HUFFC+1(R9),R1
       SRL  R9,1
       MOVB @HUFF1(R9),R0
       SB   @EIGHT,R0
       SRL  R0,8
ENQCT  BL   @ENQUEM
       DECT S
       MOV  *S,R11
       RT
*
HUFF1  BYTE >01,>0B,>0B,>0C,>08,>0C
       BYTE >0C,>06,>04,>06,>0C,>05
       BYTE >0C,>05,>08,>06,>02,>05
       BYTE >0A,>0A,>0A,>0B,>0B,>0C
       BYTE >0C,>0C,>06,>06,>0B
HUFFC  BYTE >01,>00,>01,>03,>01,>02
       BYTE >01,>0D,>03,>00,>01,>0F
       BYTE >01,>0E,>03,>00,>01,>00
       BYTE >01,>00,>01,>09,>07,>00
       BYTE >01,>0B,>06,>00,>02,>00
       BYTE >09,>00,>01,>00,>05,>00
       BYTE >00,>03,>00,>02,>00,>01
       BYTE >01,>00,>01,>01,>01,>0C
       BYTE >01,>08,>01,>0A,>02,>00
       BYTE >08,>00,>00,>01
*
$BLKVQ LI   R1,$QWORD
$BLKV2 LI   R0,2
       ORI  R2,>4000
       SWPB R2
       MOVB R2,@$VDPWA
       SWPB R2
       MOVB R2,@$VDPWA
       ANDI R2,>3FFF
       A    R0,R2
$BLP1Q MOVB *R1+,@$VDPWD
       DEC  R0
       JNE  $BLP1Q
       RT
*
$BLFVQ LI   R1,$QWORD
$BLFV2 LI   R0,2
       SWPB R2
       MOVB R2,@$VDPWA
       SWPB R2
       MOVB R2,@$VDPWA
       NOP
$VBLO2 MOVB @$VDPRD,*R1+
       DEC  R0
       JNE  $VBLO2
       MOV  @$QWORD,R0
       RT
*
WDFGR  MOVB *R1,R2
       SWPB R2
       MOVB @1(R1),R2
       SWPB R2
       RT
*
MBXMSK DATA >0200
THRFF  DATA >3FFF
H8000  DATA >8000
HF0    DATA >00F0
RWRDS  DATA >7CF8,>1B8A,>77BC
       DATA >14E7,>1531
SWRDS  DATA HCEEPS+>6B,HCEEPS+>E0,HCEEPS+>182
       DATA HCEEPS+>210,HCEEPS+>2A3,HCEEPS+>304
       DATA HCEEPS+>39C
SWRDT  DATA SSYTT2,SSYTT3,SSYTT4
       DATA SSYTT5,SSYTT6,SSYTT7,SSYTT8
H80
DONE0  BYTE >80
DONE1  BYTE >40
SIXTN  BYTE >00
DONE3  BYTE >10
DONE4  BYTE >08
H04
DONE5  BYTE >04
DONE6  BYTE >02
H01
DONE7  BYTE >01
SEVEN  BYTE 7
F0     BYTE >F0
ZERO$  BYTE >00
SEVENF BYTE >7F
ZEROFF BYTE >00
HFF
FF     BYTE >FF
DONE2  BYTE >20
EIGHT  BYTE 8
H6A    BYTE >6A
H10    BYTE >10
H50    BYTE >50
HAA    BYTE >AA
HFE    BYTE >FE
*
$CLRG1 LI   R7,QCLRG1
       JMP  NEWBNK
$REPVR LI   R7,QREPVR
       JMP  NEWBNK
$WRREG LI   R7,QWRREG
       JMP  NEWBNK
$YXNA1 LI   R7,QYXNA1
       JMP  NEWBNK
$XYNA1 LI   R7,QXYNA1
       JMP  NEWBNK
$SETWR LI   R7,QSETWR
       JMP  NEWBNK
$RTGRA LI   R7,QRTGRA
       JMP  NEWBNK
$WRGRA LI   R7,QWRGRA
       JMP  NEWBNK
$SVGRA LI   R7,QSVGRA
       JMP  NEWBNK
$BACK  LI   R7,QBACK
       JMP  NEWBNK
TIKBDS LI   R7,QTIKBD
       JMP  NEWBNK
$BYTVR LI   R7,QBYTVR
       JMP  NEWBNK
$RNDOM LI   R7,QRNDOM
       JMP  NEWBNK
$RADDR LI   R7,QRADDR
       JMP  NEWBNK
ATDM00 LI   R7,ATDMQQ
       JMP  NEWBNK
SWPF00 LI   R7,SWPFQQ
       JMP  NEWBNK
INIT00 LI   R7,INITQQ
       JMP  NEWBNK
STMB00 LI   R7,STMBQQ
       JMP  NEWBNK
PRMT00 LI   R7,PRMTQQ
       JMP  NEWBNK
PIAM00 LI   R7,PIAMQQ
       JMP  NEWBNK
SRCT00 LI   R7,SRCTQQ
       JMP  NEWBNK
SSYT00 LI   R7,SSYTQQ
       JMP  NEWBNK
EROR00 LI   R7,ERORQQ
       JMP  NEWBNK
PRTWRD LI   R7,PRTW00
NEWBNK MOV  R11,*S+
       BL   *R7
       DECT S
       MOV  *S,R11
       RT
