;
;      File - DEC6
;
bget ; Called by OSBGET (And RTF???) for a raw byte.
 TYA
 PHA
 TXA
 PHA 
 BIT &FF
 BMI bgetes
 LDA &EF
 PHA
 LDA &F0
 PHA
 LDA &F1
 PHA
 PHP
 CLI
 LDX select
 JSR clrh00
 PLP
 PLA
 STA &F1
 PLA
 STA &F0
 PLA
 STA &EF
; Escape test here?
 BIT &FF
 BPL notbge ; ESCAPE TEST
bgetes LDAIM &FE
 JMP nonswC
notbge
 LDA currow
 BNE loadof
 LDX curofs
 CPXIM pagehe+pageju+31
 BNE loadof
 LDXIM pagehe+pageju+39
 STX curofs ; Row 0, end of text part
loadof LDX curofs ; Move on to next row,
;  and offset in olumn.
 INX
 CPXIM pagehe+pageju+40
; offset to last character on row + 1
 BNE bget0
 CLC
 ADCIM 1
;
 LDXIM pagehe+pageju
; first character on line
bget0
 CMPIM 26 ; No.of text rows + 1
 BCC bget1 ; ordinary row. - else >= 26
;          End of page, but
;         is it also end of chain?
 LDAIM 2
 JMP nonswC
;LDX select
;   LDYAX ctrlbl
;   STY zp0
;   LDYAX ctrlbl+1
;   STY zp1
;
;   LDYIM 1
;   LDAIY zp0
;         Next free row in buffer
;        for lines numbered >25
;   SEC
;   SBCIM 25
;   TAX
;         X now contains the number of rows + 1,
;        which might contain a Link control word.
bget3
 DEX
 BEQ bget4
;        No LCW, so can't be end of chain.
 LDAIM 1
 JSR multby
; MultiplyA1 by 40, and add some junk+ zp(0)
 LDYIM 2 ; Offset to row no.
 LDAIY zp0
 CMPIM 27 ; Row no.of page servic packet
 BNE bget3 ; nope.
 
;
 LDYIM pagehe+pageju
; ^ offset to first byteof data- designation code.
 LDAIY zp0
 TAY
 JSR hammin
 BMI BgetEr
 BNE bget3
;
 LDYIM pagehe+pageju+37
 LDAIY zp0
;  LCW >>>
 TAY
 JSR hammin
 BMI BgetEr
;LCW in A
 ANDIM 3
 CMPIM 2 ; *********** Test for end of chain.
 BNE bget4 ; wasn't
 LDAIM 1
;EOF??? FIX IT TOO
nonswC
 SEC
 JMP nonswe
;
;
bget4
 LDAIM 3 ; End of buffer code
 JMP nonswC
bget1
 CMP eobrow
;           End of block??
 BNE bget2 ; DEFINITELY (ARG says) not.
 CPX eobofs  ; Compare offsets.
 BNE bget2
;           ???
 LDAIM 2
; End of block code
;EOF????????? FIX THIS
; to indicate EOF condition
 JMP nonswC
;
;
bget2
 STX curofs
;             Now get the byte. so update pointers permanently
 STA currow
;
 LDY ctrlbl
 STY zp0
 LDY ctrlbl+1
 STY zp1
;
 JSR multby
;CHECK FOR BLANK ROW (255)
 LDYIM 2
 LDAIY zp0
 CMPIM &FF ; Non-transmitted row
 BNE totxa 
 LDAIM 32
 JMP toclc
totxa
 TXA
 TAY ; Offset to Y.
;
 LDAIY zp0 ;<<<<<<<<<<<<<  THE BYTE...
toclc
 CLC
 JMP nonswe
BgetEr
 LDAIM 1
; RETURN EOF ON ERROR
 JMP nonswC
;
;
;\\\\\\\\ OFFER BUGGER SPACE
;
OfferC
 LdyIM 1
 LdAIY &F0 ; [slot, addr16]
 TAX ; BODGERSOFT AGAIN???
 LdaIM 0
OCB1 ; A = Addr (CB [slot])
 Dex
 Bmi OCB2
 Clc
 AdcIM CBlen
 Bne OCB1
OCB2
;
 Tax ; X = above...
 LdaIM 0
 StaAX ctrlbl+inuse ; Disable this CB
 Iny ; Y = PTRAL TO addr16OW
 LdaIY &F0
 StaAX ctrlbl
 Iny ;            addr16,HIGH
 LdaIY &F0
 StaAX ctrlbl+1
;
;  CB now is not in use, but contains address of data block.
;
 LdaIM 0
 LdyIM CBlen-2-1 ; 2, for address slot, 1 for inuse slot...
OCB3 ; initialise rest of CB.
 StaAX ctrlbl+2
 Inx
 Dey
 Bne OCB3
;
; now fully set - so make it valid.
;
 LdaIM flagbi
 StaAX ctrlbl+2 ; Was left pointing to correct slot...
;
;
;
;
;
;
;
 Jmp swexit
;
;
;
;
;
;
 LNK DEC6A