; ; ELIB.ASM - Library routines ; ; X adjustments ; LXPR6: INX ! INX LXPR5: INX ! INX LXPR4: INX ! INX LXPR3: INX ! INX LXPR2: INX ! INX LXPR1: INX ! INX LXPR0: RTS ; LXMR6: DEX ! DEX LXMR5: DEX ! DEX LXMR4: DEX ! DEX LXMR3: DEX ! DEX LXMR2: DEX ! DEX LXMR1: DEX ! DEX LXMR0: RTS ; ; I/O LIBRARIES ; ENTER WITH Y = CHAN*16 ; R0 = BUF ADR OR DEV/FNA ; R/W CHR:R1 = BUF LEN ; OPEN: A = ACCESS TYPE ; ; RETURNS WITH Y = STATUS ; READ: R0 = LENGTH ; OTHERS: R0 = BUF ADR ; L$OPEN: STA ICAX1,Y LDA #0 STA ICAX2,Y LDA #OPEN BNE L$WRRC2 ; L$WRCHR: LDA #PUTCHR L$WRCR2: STA ICCOM,Y LDA R1,X ;LENGTH FROM STA ICBLL,Y ; R1 LDA R1+1,X STA ICBLH,Y JMP L$DOIO ; L$WRREC: LDA #PUTREC L$WRRC2: STA ICCOM,Y LDA #LOW 256 ;MAX REC LEN STA ICBLL,Y LDA #HIGH 256 STA ICBLH,Y L$DOIO: LDA R0,X ;ADR OF DATA STA ICBAL,Y ;OR DEVICE/FNAM LDA R0+1,X STA ICBAH,Y STX XSAV TYA ! TAX JSR CIOV TXA LDX XSAV CPY #0 RTS ;Y=STAT A=CHAN*16 CC@Y ; L$RDCHR: LDA #GETCHR JSR L$WRCR2 JMP L$RETLN ; L$RDREC: LDA #GETREC JSR L$WRRC2 ;DOES CIO L$RETLN: TAY ;CHAN LDA ICBLL,Y ;RECORD LENGTH STA R0,X LDA ICBLH,Y STA R0+1,X LDA ICSTA,Y TAY ;STATUS AND CC RTS ; ; GENERIC XIO ; ; ENTER: A = OPCODE ; Y = CHAN*16 ; R0 = DEV/FNAM ; ; RET: Y = STATUS ; R0 = ORIG. L$XIO: STA ICCOM,Y L$XIOC: LDA R0,X STA ICBAL,Y LDA R0+1,X STA ICBAH,Y LDA #0 STA ICAX1,Y LDA #0 STA ICAX2,Y STX XSAV TYA ! TAX JSR CIOV LDX XSAV CPY #0 RTS ; ; CLOSE, READA, WRITA, WXEP, WXESC ; ; ENTER: Y = CHAN*16 ; WRITA A = DATA ; WXEP Y = UNDEF. ; ; RET: Y = STATUS CC@Y ; READA A = DATA ; ciov: ;Fake CIOV entry - Test for suspended output cpx #0 bne sus1 ldy susout bne sus2 ldy CONSOL ;check SELECT key cpy #5 beq sus3 sus1: jmp ciovf ;The real call ;jsr/rts sus3: sty susout sus2: rts ; L$CLOSE: PHA LDA #CLOSE BNE L$MIO ; L$READA: PHA LDA #GETCHR BNE L$MIO ;always branches ; L$WXESC: LDA #ESC ; BPL L$WXEP ;always ; L$WXPI: ORA #$80 ;make char inv video ; L$WXEP: LDY #0 ;Lightweight ; ;wr to scrn L$WRITA: PHA LDA #PUTCHR L$MIO: ;MISC I/O STA ICCOM,Y LDA #0 STA ICBLL,Y ;ZERO LENGTH STA ICBLH,Y ; MEANS USE 'A' STA ICBAL,Y STA ICBAH,Y ;SAFE ON ADRS STX XSAV TYA ! TAX PLA JSR CIOV LDX XSAV CPY #0 RTS ; ; String library ; ;Returns length of string at R0 in R1 L$SLEN: MOVRR R0, R2 CLRWR R1 L$SLN1: INDIR LDA, R2 CMP #EOL BEQ L$SLN2 INCWR R1 INCWR R2 JMP L$SLN1 L$SLN2: RTS ; ;Concats strings at R0 and R1 to R2 ;Returns R0 at dest L$SCAT: MOVRR R0, R3 MOVRR R2, R4 CALL R3, L$SCPY MOVRR R1, R3 CALL R3, L$SCPY MOVRR R2, R0 RTS ; ;Copies string at R0 to R1 ;Returns R0 at dest, R1 at EOL of dest L$SCPY: MOVRR R0, R2 MOVRR R1, R0 L$SCP2: INDIR LDA, R2 INDIR STA, R1 CMP #EOL BEQ L$SCP1 INCWR R2 INCWR R1 JMP L$SCP2 L$SCP1: RTS ;