;CALL CURSE(XP,YP[,STRING[,LEN]]) ; XP = X POSITION ; YP = Y POSITION ; STRING = ASCII BYTES TO PRINT AT THAT LOCATION ; LEN = LENGTH OF STRING IF NOT TERMINATED WITH A NUL ; .TITLE CURSE PERFORM ADDRESSABLE CURSOR COMMANDS FOR VT52'S .MCALL QIOW$S XP=2 YP=4 STRING=6 LEN=10 CURSE:: MOV @XP(R5),R0 TST R0 BGE XBIG MOV #1,R0 BR CONX XBIG: CMP R0,#80. BLE CONX MOV #80.,R0 CONX: ADD #37,R0 MOVB R0,X MOV @YP(R5),R0 TST R0 BGE BIGY MOV #1,R0 BR CONY BIGY: CMP R0,#24. BLE CONY MOV #24.,R0 CONY: ADD #37,R0 MOVB R0,Y MOV #4,R1 CMP (R5),#STRING/2 BLT WRITE MOV MAXLEN,R2 MOV STRING(R5),R0 MOV #DATA,R3 CMP (R5),#LEN/2 BLT XFRC MOV @LEN(R5),R2 XFRC: MOVB (R0)+,(R3)+ BEQ WRITE INC R1 SOB R2,XFRC WRITE: QIOW$S #IO.WAL,CONSOL,#1,,,,<#ADDRS,R1,0> RTS PC ADDRS: .BYTE 33,131 Y: .BYTE 0 X: .BYTE 0 DATA: .BLKB 80. .END