; ; 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