121 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
timeByte            EQU     register0
 | 
						|
timeDigit           EQU     register4
 | 
						|
timeArrAddr         EQU     register5
 | 
						|
timeStrAddr         EQU     register6
 | 
						|
timeTmp             EQU     register7
 | 
						|
 | 
						|
 | 
						|
%SUB                tickTime
 | 
						|
tickTime            LD      giga_frameCount
 | 
						|
                    STW     timeTmp
 | 
						|
                    LD      timerPrev
 | 
						|
                    XORW    timeTmp
 | 
						|
                    BEQ     tickT_exit
 | 
						|
                    LDW     timerTick
 | 
						|
                    ADDI    1
 | 
						|
                    STW     timerTick                           ; 1/60 user timer, (max time = 546.116 seconds)
 | 
						|
                    LD      timeTmp
 | 
						|
                    ST      timerPrev
 | 
						|
                    INC     timerPrev + 1                       ; 1/60 internal counter
 | 
						|
                    LD      timerPrev + 1
 | 
						|
                    XORI    60
 | 
						|
                    BNE     tickT_exit
 | 
						|
                    LDI     0
 | 
						|
                    ST      timerPrev + 1
 | 
						|
                    PUSH
 | 
						|
                    LDWI    handleTime                          ; handle time every second
 | 
						|
                    CALL    giga_vAC
 | 
						|
                    POP
 | 
						|
 | 
						|
tickT_exit          RET                    
 | 
						|
%ENDS
 | 
						|
 | 
						|
%SUB                handleTime
 | 
						|
handleTime          LDWI    _timeArray_
 | 
						|
                    STW     timeArrAddr
 | 
						|
                    PEEK
 | 
						|
                    ADDI    1
 | 
						|
                    POKE    timeArrAddr                         ; seconds
 | 
						|
                    XORI    60
 | 
						|
                    BNE     handleT_exit
 | 
						|
                    LDI     0
 | 
						|
                    POKE    timeArrAddr                         ; reset seconds
 | 
						|
                    
 | 
						|
                    INC     timeArrAddr
 | 
						|
                    LDW     timeArrAddr
 | 
						|
                    PEEK
 | 
						|
                    ADDI    1
 | 
						|
                    POKE    timeArrAddr                         ; minutes
 | 
						|
                    XORI    60
 | 
						|
                    BNE     handleT_exit
 | 
						|
                    LDI     0
 | 
						|
                    POKE    timeArrAddr                         ; reset minutes
 | 
						|
                    
 | 
						|
                    INC     timeArrAddr
 | 
						|
                    LDW     timeArrAddr
 | 
						|
                    PEEK
 | 
						|
                    ADDI    1
 | 
						|
                    POKE    timeArrAddr                         ; hours
 | 
						|
handleT_mode        XORI    24                                  ; [handleT_mode + 1] = 12 hour/24 hour
 | 
						|
                    BNE     handleT_exit
 | 
						|
handleT_epoch       LDI     0                                   ; [handleT_epoch + 1] = start hour
 | 
						|
                    POKE    timeArrAddr                         ; reset hours
 | 
						|
 | 
						|
handleT_exit        RET                    
 | 
						|
%ENDS
 | 
						|
 | 
						|
%SUB                timeDigits
 | 
						|
timeDigits          LDW     timeByte
 | 
						|
 | 
						|
timeD_index         SUBI    10
 | 
						|
                    BLT     timeD_cont
 | 
						|
                    STW     timeByte
 | 
						|
                    INC     timeDigit                           ; calculate 10's digit
 | 
						|
                    BRA     timeD_index
 | 
						|
    
 | 
						|
timeD_cont          LD      timeDigit
 | 
						|
                    ORI     0x30
 | 
						|
                    POKE    timeStrAddr                         ; store 10's digit
 | 
						|
                    INC     timeStrAddr
 | 
						|
                    LD      timeByte
 | 
						|
                    ORI     0x30
 | 
						|
                    POKE    timeStrAddr                         ; store 1's digit
 | 
						|
                    INC     timeStrAddr                         ; skip colon
 | 
						|
                    INC     timeStrAddr                         ; next 10's digit
 | 
						|
                    LDI     0x30
 | 
						|
                    ST      timeDigit                           ; reset 10's digit
 | 
						|
                    RET
 | 
						|
%ENDS
 | 
						|
 | 
						|
%SUB                timeString
 | 
						|
                    ; create a time string
 | 
						|
timeString          PUSH
 | 
						|
                    LDI     0
 | 
						|
                    STW     timeDigit
 | 
						|
                    LDWI    _timeString_ + 1
 | 
						|
                    STW     timeStrAddr                         ; skip length byte
 | 
						|
 | 
						|
                    LDWI    _timeArray_
 | 
						|
                    STW     timeArrAddr
 | 
						|
                    ADDI    2
 | 
						|
                    PEEK                                        ; hours
 | 
						|
                    STW     timeByte
 | 
						|
                    LDWI    timeDigits
 | 
						|
                    CALL    giga_vAC
 | 
						|
 | 
						|
                    LDW     timeArrAddr
 | 
						|
                    ADDI    1
 | 
						|
                    PEEK                                        ; minutes
 | 
						|
                    STW     timeByte
 | 
						|
                    LDWI    timeDigits
 | 
						|
                    CALL    giga_vAC
 | 
						|
 | 
						|
                    LDW     timeArrAddr
 | 
						|
                    PEEK                                        ; seconds
 | 
						|
                    STW     timeByte
 | 
						|
                    LDWI    timeDigits
 | 
						|
                    CALL    giga_vAC
 | 
						|
                    POP
 | 
						|
                    RET
 | 
						|
%ENDS
 |