NEW AUTO 3,1 *-------------------------------- C.TMP1 .EQ VAR.BEG-1 C.TMP2 .EQ C.TMP1-1 C.TMP3 .EQ C.TMP2-1 C.TMP4 .EQ C.TMP3-1 .DO C.TMP4<$300 *** VARS<$300 .FIN *-------------------------------- * STANDARD VIDEO JUMP VECTORS * 1. READ KEYBOARD KEY CODE * TURNS ON CURSOR * GETS KEY CODE * TURNS OFF CURSOR * REG-A HAS KEY CODE SIGN BIT ON. * 2. HORIZONTAL TAB * REG-A HAS TAB 0-79 * 3. VERTICAL TAB * REG-A HAS TAB 0-23 * 4. CLEAR TO END OF LINE * 5. CLEAR TO END OF SCREEN * 6. CHARACTER OUTPUT ROUTINE * REG-A HAS CHAR TO OUTPUT. * MUST NOT SCROLL SCREEN OR * GO TO NEXT LINE WHEN LAST * CHARACTER IS PRINTED ON A LINE. *-------------------------------- JMP C.RD.KBD JMP C.MY.HTAB JMP C.MY.VTAB JMP C.MY.CLREOL JMP C.MY.CLREOP JMP C.MY.COUT *-------------------------------- C.MY.CLP LDA CTR JSR C.MY.VTAB C.MY.CLREOP JSR C.MY.CLREOL CLEAR TO END OF LINE LDA #0 START COL 0 FOR NEXT LINE JSR C.MY.HTAB INC CTR BUMP TO NEXT LINE LDA CTR CMP LAST.LINE CHK FOR END BCC C.MY.CLP < END BEQ C.MY.CLP = END RTS > END *-------------------------------- C.MY.HTAB STA C.STB.COL SET HORIZ. POSN LSR STA CH CH = POSN/2 RTS *-------------------------------- C.MY.VTAB STA CV SET VERT POSN RTS *-------------------------------- C.MY.COUT STY C.TMP1 SAVE Y REG AND #$7F MASK OFF HIGH BIT PHA LDA CV GET VERT POSN CLC ADC C.STB.TOPADR LDY #18 STY C.CRTC CRTC = REG 18 STA C.CRTC+1 SET LINE POSN LDA C.STB.COL INY STY C.CRTC CRTC = REG 19 STA C.CRTC+1 SET COL POSN LDA C.STB.TOPADR LDY #12 STY C.CRTC CRTC = REG 12 STA C.CRTC+1 SET SCROLL POSN LDY #$1F STY C.CRTC POINT TO DUMMY REG PLA CMP #$20 BCS .1 NON CONTROL CHAR ORA #$C0 SET INV BIT, MAKE LETR .1 BIT C.CRTC WAIT FOR RIGHT TIME BPL .1 STA C.CRTC+3 PUT CHAR IN LATCH INC C.STB.COL NEXT COLUMN LDY C.TMP1 RESTORE Y REG RTS *-------------------------------- C.MY.CLREOL STY C.TMP3 SAVE Y REG STX C.TMP4 SAVE X REG .1 LDY C.STB.COL GET COL POSN CPY SCREEN.WIDTH END OF LINE BCS .2 YES LDA #$A0 A REG = BLANK JSR C.MY.COUT PRINT IT JMP .1 NEXT COLUMN .2 LDY C.TMP3 RESTORE Y REG LDX C.TMP4 RESTORE X REG RTS *-------------------------------- * STB80 IO ROUTINES *-------------------------------- C.CRTC .EQ $C0B0 CRT CONTROLLER CHIP C.STB.TOPADR .EQ $57B SCROLL LINE START C.STB.COL .EQ $5FB COLUMN POSN *-------------------------------- C.RD.KBD JSR C.CURSOR.ON TURN ON CURSOR .1 LDA $C000 WAIT FOR KEY BPL .1 BIT $C010 STROBE KBD TO KILL FLAG BIT PHA SAVE CHAR JSR C.CURSOR.OFF TURN OFF CURSOR PLA RESTORE CHAR RTS *-------------------------------- C.CURSOR.ON LDA POSV POSITION VERTICALLY JSR C.MY.VTAB LDA POSH SEC SBC LEFT.MARGIN CLC ADC RM.ADJUST JSR C.MY.HTAB POSITION HORIZONTALLY LDA ESC.FLAG TEST ESC MODE BEQ .1 IT IS IN SCROLL MODE LDA #$67 EDIT MODE GETS LITTLE CURSOR BNE .2 ...ALWAYS .1 LDA #$C0 SCROLL MODE GETS NORMAL CURSOR .2 PHA LDA #$0A STA C.CRTC CTRC = REG 10 PLA STA C.CRTC+1 SET CURSOR START DATA C.WRIT LDA #$0F STA C.CRTC CTRC = REG 15 LDA C.STB.COL STA C.CRTC+1 SET CURSOR COLUMN POSN LDA #$0E STA C.CRTC CRTC = REG 14 LDA CV CLC ADC C.STB.TOPADR STA C.CRTC+1 SET CURSOR LINE POSN RTS *-------------------------------- C.CURSOR.OFF LDA #24 LINE 24 IS NON DISPLAYABLE JSR C.MY.VTAB TAB TO THERE JMP C.WRIT AND POSN CURSOR THERE *-------------------------------- MAN SAVE usr/src/fse/fse.s.stb80 LOAD usr/src/fse/fse.s ASM