LLUCE/SOURCE/CLOCKS/GS.S
2019-07-18 12:47:39 -07:00

119 lines
3.3 KiB
ArmAsm

LST RTN
TTL 'LLUCE - Apple //Gs Clock'
PAG
XC ; Uses 65816 Codes
ReadTimeHex = $D03
Tool_Entry = $E10000
CLOCKDVR DB 0
CLKMODE DB 0
GETDATE JMP G_DATE
GETTIME JMP G_TIME
SETDATE JMP S_DATE
*-------------------------------
* Get The Date In Prodos Format
*-------------------------------
G_DATE JSR MLI
DB Gettime
DA 0
LDX DATE
LDA DATE+1
S_DATE RTS
*-------------------------------
* Get The Current Time
*-------------------------------
G_TIME CLC
XCE
REP %00110000
PHA
PHA
PHA
PHA
LDX #ReadTimeHex
JSL Tool_Entry
SEC
XCE
LDA #' ' ; Clear AM/PM
STA :TIMESTR+9
STA :TIMESTR+10
PLA ; Seconds
JSR :BINDEC8
STA :TIMESTR+6
STX :TIMESTR+7
PLA ; Minutes
JSR :BINDEC8
STA :TIMESTR+3
STX :TIMESTR+4
LDA #<:TIMESTR
STA :TIMELOC+1
PLA ; Hours
LDY #8
BIT CLKMODE
BPL :RTNTIME
LDY #11
LDX #'A' ; Default To Am
CMP #12+1 ; Is It After Noon?
BLT :AM ; Nope
SBC #12 ; Subtract For PM
LDX #'P'
:AM STX :TIMESTR+9
LDX #'M'
STX :TIMESTR+10
CMP #0 ; If 0, Actually 12
BNE :RTNTIME
LDA #12
:RTNTIME JSR :BINDEC8
CMP #'0' ; Hour Less Than 10?
BNE :DOIT ; Nope
LDA #' ' ; Make It A Space
DEY ; String Length Is 1 Less
INC :TIMELOC+1 ; String Start Is 1 More
:DOIT STA :TIMESTR
STX :TIMESTR+1
PLA ; Year
PLA ; Date
PLA ; Month
PLA ; Reserved
PLA ; Dayofweek
STA CLOCKDVR
:TIMELOC LDX #<:TIMESTR
LDA #>:TIMESTR
RTS
*-------------------------------
* Translate A Binary To Text [0-99]
*-------------------------------
:BINDEC8 CMP #60
BLT :INRNG
LDA #59
:INRNG LDX #0
:CNTDN CMP #10
BLT :MKASC
SBC #10
INX
BNE :CNTDN
:MKASC ADC #'0'
PHA
TXA
ADC #'0'
PLX
RTS
*-------------------------------
* '01234567890
:TIMESTR ASC '12:00:00 '
DS \
LST OFF