; REDRAW: JSR HOME ;Clear screen ;Redraw from R0 down REDRDN: LDA #23 STA R1,X ; ;DRAW LINE routine - redraws lines from ; #R0 to R1 (incl) ; Fast version - does strings in one call ; DRAWLN: JSR BURSTM LOADW PS, R4 FORB R2, 0, 23;nul LDA R2,X STA ROWCRS LDA #0 STA COLCRS JSR BELL JSR REPOIN FORB R3, 0, LINSIZ ;Start a new line DRAWL7: JSR PTRCHK JSR LDAR4I BMI DRAWL3 ;eol BEQ DRAWL5 ;move on for normal char cpy #1 beq drwtab pha jsr wrtxln ;write out the line beq draw10 jsr l$wxesc ;insert esc pla jsr l$wxep db $A9 ;LDA Imm opcode... br+1 over pla draw10: pla jsr repoin ;write all esc seq as one char rec jmp drawl7 drwtab: JSR WRTXLN ;leaves 0 in R6 LOADIW D$SPAC,R5 ;spaces DRAWL6: LDA R3,X CMP #LINSIZ+1 BEQ DRAWLA INC R6,X INC R3,X LDA R3,X AND #7 BNE DRAWL6 ;r6 = len of tab string JSR WRTXLN JMP DRAWL7 DRAWL5: INC R6,X ;count #spaces to print DRAWL4: NEXTB R3 DRAWLA: JSR WRTXLN BEQ DRAWL8 ;tests if line is within range to be written WXEP #20 ;dot DRAWL8: JSR PTRCHK JSR LDAR4I BPL DRAWL8 ;br if not eol DRAWL3: JSR WRTXLN DRAWLB: NEXTIF R2, R1 ;Loop if LE.R1 DRAWL2: JSR NOBURS RTS ; PTRCHK: BNEWAR PL, R4, PTRC1 LOADW PU, R4 ;Now upper JSR WRTXLN PTRC1: BNEWAR TEXTOP, R4, PTRC2 PLA ! PLA ;Pop to caller when done jsr noburs ; ;Fall through ; WRTXLN: LDA R2,X CMP R0,X BCS WRTXL3 LDY #0 RTS ;If out of range ret EQ WRTXL3: LDA R6,X BNE WRTXL2 JSR REPOIN ldy #1 ;If none to write ret PL rts wrtxl2: PUSHST R5 WRITCHR 0 POPST R5 ;Fall through REPOIN: MOVRR R4, R5 ;base of record CLRWR R6 ;length LDY #$80 ;Wrote some - ret MI PTRC2: RTS ; LDAR4I: INDIR LDA, R4 INCWR R4 cmp #eol bne ldar2 ldy #$80 rts ldar2: cmp #tab bne ldar3 ldy #1 rts ldar3: cmp #ESC bcc ldar4 cmp #32 ;last of arrow keys bcc ldar7 cmp #125 bcc ldar4 ;1 lt CLS ldar7: ldy #2 ;mark to be escaped rts ldar4: ldy #0 ;regular char rts ;