; UCASE(byte) ; ; Convert any lower case letter (plus a few symbols) into upper case. ; If not in A-_ range, replace with 0 ; .title ucase .enable mcl ucase:: tst (R5)+ bicb #40,@(R5) cmpb @(R5),#'A ;>=A blt 10$ cmpb @(R5),#'_ ;<=_ ble 20$ 10$: clrb @(R5) 20$: return ; For UcaseS we relax the criteria: knock out bit 5. UcaseS:: tst (R5)+ mov (R5)+,R1 ;Source address mov (R5)+,R2 ;Destination address mov @(R5),R3 ;Character count beq 30$ ;Zero? mov #40,R4 ;Mask: bit 5 = "40 10$: movb (R1)+,R0 ;Get character beq 30$ ;Skip if null: end of string cmpb R0,#'` ;Check it is within range before blt 20$ ; clearing LC bit cmpb R0,#'z bgt 20$ bic R4,R0 ;Convert to Upper case 20$: movb R0,(R2)+ ;Put character in output sob R3,10$ ; and loop 30$: return ; Hacks to JSW. ; These must be done with care, and differ from RT-11 to TSX+ ; JSW =44 RMON =54 SYSGEN =372 ; snglon:: mov @#JSW,R0 ;Get JSW directly bis #50000,R0 ;Set Nowait and special mode bits mov R0,@#JSW ;Zap JSW directly .rctrlo ;Force monitor to notice .gval #gvala,#sysgen tst R0 ; mov rmon,R0 ;Start of RMON, where-ever ; tst sysgen(R0) ;Test sysgen location in RMON bpl 10$ ;Skip the following if TSX+ bit NOT set mov #sngl,R0 emt 375 ;Turn on single character mode under TSX+ mov #lower,R0 emt 375 ;Enable Lower case input under TSX+ mov #escap,R0 emt 375 ;Enable Escape letter activation 10$: return gvala: .byte 0,34 .word sysgen sngl: .byte 0,152 .word 'S .word 0 lower: .byte 0,152 .word 'I .word 0 escap: .byte 0,152 .word 'B .word 0 snglof:: mov @#44,R0 bic #50000,R0 ;Kill nowait and special mode mov R0,@#44 .rctrlo ;Force monitor update .gval #gvala,#sysgen tst R0 ; mov rmon,R0 ;Start of RMON, where-ever ; tst sysgen(R0) ;Test sysgen location in RMON bpl 10$ ;Skip the following if TSX+ bit NOT set mov #nosngl,R0 emt 375 ;Kill single character mov #upper,R0 emt 375 ;Kill upper case input mov #noesc,R0 emt 375 ;Skip esc characters 10$: return nosngl: .byte 0,152 .word 'T .word 0 upper: .byte 0,152 .word 'J .word 0 noesc: .byte 0,152 .word 'C .word 0 nolf:: .gval #gvala,#sysgen tst R0 ; mov rmon,R0 ;Start of RMON, where-ever ; tst sysgen(R0) ;Test sysgen location in RMON bpl 10$ ;Skip the following if TSX+ bit NOT set mov #lfoff,R0 ;Disable echo of LF emt 375 10$: return lfoff: .byte 0,152 .word 'Y .word 0 .end