.title dates .ident /840818/ .enabl lc ; ; Converts an RT-11 date word into a date in ascii form. ; ; Register usage: ; R0 scratch ; R1 pointer to storage area for string ; R2 scratch ; R3 scratch ; R4 loop counter ; dates:: mov 2(sp),r1 ;pointer to string mov (sp)+,(sp) mov 2(sp),r0 ;date word mov (sp)+,(sp) mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) ; tst r0 ;see if date has been set beq 3$ ; mov #2,r4 ;two fields to shift out 1$: mov r0,-(sp) ;place on stack for later bic #^c37,(sp) ;mask out unwanted bits ash #-5,r0 ;align next field sob r4,1$ ; call bindec ;convert day ; ash #2,r0 ;get month add #montab,r0 mov #5,r4 2$: movb (r0)+,(r1)+ ;place into string sob r4,2$ ; add #72.,(sp) ;add year offset call bindec ;convert year ; 3$: clrb (r1)+ mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 rts pc ; bindec: mov (sp)+,r4 ;remember return address mov (sp)+,r3 ;prepare for division clr r2 div #10.,r2 add #'0,r2 ;convert to ascii add #'0,r3 movb r2,(r1)+ ;move to string movb r3,(r1)+ jmp (r4) ; .psect $msg,d montab: .ascii /-Bad-Jan-Feb-Mar/ .ascii /-Apr-May-Jun-Jul/ .ascii /-Aug-Sep-Oct-Nov/ .ascii /-Dec-Bad-Bad-Bad-/ ; .end