107 lines
4.2 KiB
OpenEdge ABL
107 lines
4.2 KiB
OpenEdge ABL
timeByte EQU register0
|
|
timeDigit EQU register1
|
|
timeStrAddr EQU register2
|
|
timeArrayExt EQU register3 ; reg0-3 are used outside of the interrupt
|
|
timeArrayInt EQU register4 ; reg4 is used within the interrupt
|
|
|
|
|
|
%SUB tickTime
|
|
tickTime LDW timerTick
|
|
ADDI 1
|
|
STW timerTick ; 1/60 user timer, (max time = 546.116 seconds)
|
|
INC timerPrev ; 1/60 internal counter
|
|
LD timerPrev
|
|
XORI 60
|
|
BNE tickT_exit
|
|
LDI 0
|
|
ST timerPrev
|
|
PUSH
|
|
CALLI handleTime ; handle time every second
|
|
POP
|
|
|
|
tickT_exit RET
|
|
%ENDS
|
|
|
|
%SUB handleTime
|
|
handleTime LDWI _timeArray_
|
|
STW timeArrayInt
|
|
PEEK
|
|
ADDI 1
|
|
POKE timeArrayInt ; seconds
|
|
XORI 60
|
|
BNE handleT_exit
|
|
LDI 0
|
|
POKE timeArrayInt ; reset seconds
|
|
|
|
INC timeArrayInt
|
|
LDW timeArrayInt
|
|
PEEK
|
|
ADDI 1
|
|
POKE timeArrayInt ; minutes
|
|
XORI 60
|
|
BNE handleT_exit
|
|
LDI 0
|
|
POKE timeArrayInt ; reset minutes
|
|
|
|
INC timeArrayInt
|
|
LDW timeArrayInt
|
|
PEEK
|
|
ADDI 1
|
|
POKE timeArrayInt ; 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 timeArrayInt ; reset hours
|
|
|
|
handleT_exit RET
|
|
%ENDS
|
|
|
|
%SUB timeDigits
|
|
timeDigits STW 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 timeArrayExt
|
|
ADDI 2
|
|
PEEK ; hours
|
|
CALLI timeDigits
|
|
|
|
LDW timeArrayExt
|
|
ADDI 1
|
|
PEEK ; minutes
|
|
CALLI timeDigits
|
|
|
|
LDW timeArrayExt
|
|
PEEK ; seconds
|
|
CALLI timeDigits
|
|
POP
|
|
RET
|
|
%ENDS
|