ProDOS8/MLI.SRC/TCLOCK.S

92 lines
3.8 KiB
ArmAsm

***********************************************************
* *
* PRODOS 8 CLOCK DRIVER INTERFACE ROUTINE *
* *
* COPYRIGHT APPLE COMPUTER, INC., 1983-86 *
* *
* ALL RIGHTS RESERVED *
* *
***********************************************************
DUM $3A
TENS EQU * ;NO CONFLICT SINCE MONTH IS LAST PROCESSED.
MONTH DS 1
WKDAY DS 1
DAY DS 1
HOUR DS 1
MINUTE DS 1
DEND
WrtTCP EQU $C10B
RdTCP EQU $C108 ;CLOCK READ ENTRY POINTS
ClkMode EQU $0538 ;(+$CN=$5F8+N)
ORG ClockBegin
ReadClk LDX ClkSlt ;PRESERVE CURRENT MODE FOR THUNDERCLOCK
LDA ClkMode,X
PHA
LDA #$A3 ;SEND NUMERIC MODE BYTE TO THUNDERCLOCK
JSR WrtTCP
ClkSlt EQU *+2
JSR RdTCP ;READ MONTH, DAY OF WEEK, DAY OF MONTH
CLC ; AND TIME INTO INPUT BUFFER
LDX #$04 ;INDEX FOR 5 VALUES
LDY #$0C ;READ MINUTES FIRST, MONTH LAST
Convrt LDA inBuf,Y ;CONVERT VALUES TO BINAR
AND #$07 ;NO VALUE > 5 DECIMAL
STA TENS ;MULTIPLY 'TENS' PLACE VALUE
ASL
ASL
ADC TENS ;NOW IT'S TIMES 5
ASL ;NOW IT IS TIMES 10!
ADC inBuf+1,Y ;ADD TO ASCII 'ONES' PLACE
SEC ;AND SUBTRACT OUT THE ASCII...
SBC #"0"
STA MONTH,X ;SAVE CONVERTED VALUE
DEY ;INDEX TO NEXT LOWER VALUE
DEY
DEY
DEX ;ARE THERE MORE VALUES?
BPL Convrt ;BRANCH IF THERE ARE
TAY ;A STILL CONTAINS MONTH, SAVE IN Y FOR NOW
LSR
ROR
ROR
ROR ;(HI BIT OF MONTH HELD IN CARRY)
ORA DAY
STA DateLo ;SAVE LOW VALUE OF DATE
PHP ;SAVE HI BIT OF MONTH FOR NOW
AND #$1F ;ISOLATE DAY AGAIN
; (WHEN MONTH >7 CARRY SET ACCOUNTED FOR IN FOLLOWING ADD)
ADC TDays-1,Y ;REMEMBER THAT Y=MONTH
BCC :1 ;BRANCH NOT SEPT 13 THRU 30
ADC #$03 ;ADJUST FOR MOD 7 WHEN DAY > 256
:1 SEC
:loop SBC #$07
BCS :loop ;LOOP UNTIL LESS THAN 0
ADC #$07 ;NOW MAKE IT IN THE RANGE OF 0-6
SBC WKDAY ; THE DELTA PROVIDES YEARS OFFSET
BCS :2 ;BRANCH IF POSITIVE
ADC #$07 ;ELSE MAKE IT POSITIVE AGAIN
:2 TAY ;LOOK UP YEAR!
LDA YrAdj,Y
PLP ;LASTLY, COMBINE WITH HI BIT OF MONTH
ROL
STA DateLo+1 ;AND SAVE IT
LDA HOUR
STA TimeLo+1 ;MOVE HOUR AND MINUTE TO PRODOS GLOBALS
LDA MINUTE
STA TimeLo
PLA
LDX ClkSlt ;RESTORE PREVIOUS MODE
STA ClkMode,X
RTS ;ALL DONE...
TDays HEX 001F3B5A
HEX 7897B5D3
HEX F2143351
YrAdj HEX 605F5E5D
HEX 626160
DS $80-$7D,0