.TITLE DIFTIM ; ; TESTPROGRAM TO CALCULATE THE TIME DIFFERENCE IN HH,MM,SS BETWEEN ; 2 TIME-ARRAYS ("LOGIN" AND "LOGOUT") ; .MCALL GTIM$S ; ; DIFTIM: MOV #LOGIN,R0 MOV #LOGOUT,R1 BIT #3,(R0) ;LOGIN IN "LEAP-YEAR"? BNE 1$ ;IF NE NO CMP #3,2(R0) ;LOGIN BEFORE MARCH? BLE 2$ ;IF LE NO INC TAB+2 ;MAKE #DAYS IN FEB = 29. BR 2$ 1$: BIT #3,(R1) ;LOGOUT IN "LEAP-YEAR"? BNE 2$ ;IF NE NO CMP #3,2(R1) ;LOGOUT AFTER FEBR.? BLE 2$ ;IF LE YES INC TAB+2 ;MAKE #DAYS IN FEB = 29. 2$: CLR R2 MOV (R1)+,R4 ;GET LOGOUT YEAR SUB (R0)+,R4 ;SUBTRACT LOGIN YEAR BEQ NEXT1 ;IF EQ NO FIREWORKS IN BETWEEN MOV #12.,R2 ;ADD 12 MONTHS LATER ON ; NEXT1: MOV (R1)+,R4 ;GET LOGOUT MONTHS ADD R2,R4 ;ADD 0 OR 12 CLR R2 MOV (R0)+,R3 ;SUBTRACT LOGIN MONTHS SUB R3,R4 BEQ NEXT2 ;IF EQ DON'T ADD DAYS DEC R3 ;PREPARE POINTER TO TAB ASL R3 ADDTAB: ADD TAB(R3),R2 ;ADD DAYS LATER ON INC R3 ;UPDATE POINTER INC R3 CMP #22.,R3 ;PAST DECEMBER?? BGE 10$ ;IF GE NO CLR R3 ;POINT TO JANUARY AGAIN 10$: DEC R4 ;ALL DONE? BGT ADDTAB ;IF GT NO ; NEXT2: MOV (R1)+,R4 ;GET LOGOUT DAYS ADD R2,R4 ;ADD NUMBER OF DAYS CLR R3 SUB (R0)+,R4 ;SUBTRACT LOGIN DAYS BEQ NEXT3 ;IF EQ DON'T ADD HOURS LATER ON MOV R4,R3 MUL #24.,R3 ;R3 = NUMBER OF HOURS TO ADD ; NEXT3: MOV (R1)+,R4 ;GET LOGOUT HOURS ADD R3,R4 ;ADD SOME SUB (R0)+,R4 ;SUBTRACT LOGIN HOURS MOV R4,DIFHH ;SAVE NUMBER OF HOURS CONNECTED TO SYSTEM ; ; MOV (R1)+,R4 ;GET LOGOUT MINUTES SUB (R0)+,R4 ;SUBTRACT LOGOUT MINUTES BEQ NEXT5 ;IF EQ NO ACTION DEC DIFHH ;TAKE 60 MINUTES AND ADD #60.,R4 ;ADD THEM TO MINUTE COUNTER NEXT5: MOV R4,DIFMM ;SAVE MINUTES MOV (R1),R4 ;GET LOGOUT SECONDS SUB (R0),R4 ;SUBTRACT LOGIN SECONDS BEQ NEXT6 ;IF EQ NO ACTION DEC DIFMM ;TAKE 60 SECONDS AND ADD #60.,R4 ;ADD THEM TO SECOND COUNTER MOV R4,DIFSS ;SAVE SECONDS NEXT6: CLR R4 ;#SECONDS SHOULD BE < 60 MOV DIFSS,R5 DIV #60.,R4 MOV R5,DIFSS ADD R4,DIFMM CLR R4 ;# MINUTES TOO MOV DIFMM,R5 DIV #60.,R4 MOV R5,DIFMM ADD R4,DIFHH MOV DIFHH,R0 ;SHOW COUNTERS MOV DIFMM,R1 MOV DIFSS,R2 TRAP ; ; DIFHH: .WORD 0 DIFMM: .WORD 0 DIFSS: .WORD 0 LOGIN: .WORD 84.,1,1,0,0,0 !YY,MM,DD,HH,MM,SS LOGOUT: .WORD 84.,12.,31.,23.,59.,59. !YY,MM,DD,HH,MM,SS TAB: .WORD 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. .END DIFTIM