         .OUTPI ALFRES
         .ENTRY REACDE
         .VIRT8 IPTR,WTEMP,ZPAG,AX
;Read_Code inputs a word from the data file
;
REACDE   LDA BITOFF
         STA IPTR
         LDA BITOFF+1
         STA IPTR+1
         LDX #2
REA001   LSR IPTR+1
         ROR IPTR
         DEX
         BPL REA001
         LDA IPTR
         STA BYTOFF
         LDA IPTR+1
         STA BYTOFF+1
         LDA MAXBUF
         SEC
         SBC IPTR
         STA WTEMP
         LDA MAXBUF+1
         SBC IPTR+1  ;Calc bytes remaining
         STA WTEMP+1
         LDA WTEMP+1 ;Need a refill ?
         BNE REA002
         LDA WTEMP
         CMP #3      ;Must be at least 3 bytes left
         BCS REA002
         LDX IEOF    ;Is there anything left ?
         BPL REA004
         CMP #2      ;Must be at least 2
         BCC REA003 ;No way to get code
REA002   JMP REA008 ;Hope for the best
REA003   LDX #.LO.ERRM08        ;SAY ERROR OCCURRED
         LDY #.LO.ERRM08
         JSR SCRPRT
         JMP IOEXIT
REA004   TAY
         DEY
         LDX INBUFF
         STX ZPAG
         LDX INBUFF+1
         STX ZPAG+1
         LDA INBUFF
         CLC
         ADC IPTR
         STA IPTR
         LDA INBUFF+1
         ADC IPTR+1
         STA IPTR+1
REA005   LDA (IPTR),Y ;Copy back buffer
         STA (ZPAG),Y
         DEY
         BPL REA005
         LDA MAXBUF
         SEC
         SBC WTEMP
         STA LEN
         LDA MAXBUF+1
         SBC #0
         STA LEN+1
         LDA INBUFF
         CLC
         ADC WTEMP
         STA ADR
         LDA INBUFF+1
         ADC #0
         STA ADR+1
         LDX #D
         JSR RELOAD
         STY IEOF
         BPL REA006
         CPY #$88    ;Eof is ok
         BEQ REA006
         JMP IOEXIT
REA006   JSR ZERBUF
         LDA BYTOFF             ;GET THE OFFSET
         STA IPTR
         LDA BYTOFF+1
         STA IPTR+1
         LDX #2
REA007   ASL IPTR
         ROL IPTR+1
         DEX
         BPL REA007
         LDA BITOFF
         SEC
         SBC IPTR
         STA BITOFF
         LDA BITOFF+1
         SBC IPTR+1
         STA BITOFF+1
         JMP REACDE ;Go do it again
REA008   LDA IPTR
         STA WTEMP
         CLC
         ADC INBUFF
         STA IPTR
         LDA IPTR+1
         STA WTEMP+1
         ADC INBUFF+1
         STA IPTR+1
         LDY #0
         LDA BITOFF ;Is it a byte boundary ?
         AND #$07
         BNE REA011
         LDA (IPTR),Y
         STA AX+1
         INY
         LDA (IPTR),Y
         STA AX      ;Get the code
REA009   LDA #15
         SEC
         SBC NBITS
         TAX
REA010   LSR AX+1    ;Shift code back
         ROR AX
         DEX
         BPL REA010
         LDA NBITS   ;Adjust offset
         CLC
         ADC BITOFF
         STA BITOFF
         LDA #0
         ADC BITOFF+1
         STA BITOFF+1
         RTS
REA011   LDX #2
REA012   LDA (IPTR),Y ;Get all bits
         STA NCODE,X
         INY
         DEX
         BPL REA012
         LDA BITOFF
         AND #$07    ;Get bit offset
         TAX
         DEX
REA013   ASL NCODE   ;Shift to wall
         ROL NCODE+1
         ROL NCODE+2
         DEX
         BPL REA013
         LDA NCODE+1
         STA AX
         LDA NCODE+2
         STA AX+1
         JMP REA009 ;Go shift it back
