home *** CD-ROM | disk | FTP | other *** search
- name ('tmod')
- ; version 2.1
- ; ss1 dick lieber rcl
-
- ; modified for scitronics clock board 7/9/82
- ; by Jim Mills
- ; ---->set "scip0" (below) to scitronics base address
-
- ;
- ; to assemble, type: M80 TMOD,TMOD=TMOD
- ; to link, type: L80 TMODTEST,TMOD,TMODTEST/N/E
- ; to run, type: TMODTEST
- ; it is self-prompting
- ;
-
- bdos equ 5
- wrcon equ 2
- wrbuf equ 9
-
- entry timemd,datemd,daymd
-
- timemd: jmp gettime
- datemd: jmp getdate
- daymd: jmp getdow
-
- gettime:
- call readclk ;do actual read and store it
- call findstring ;point to where calling prog wants data
- lxi d,tbuffer ;point to our data
- call move ;and move the data
- call endstring ;and send a '$'
- ret
- getdate:
- call readclk ;do actual read and store it
- call findstring ;point to where calling prog wants data
- lxi d,dbuffer ;point to our data
- call move ;and move the data
- call endstring
- ret
- ;
- ; get day of week: 1. read dow from clock
- ; 2. point to appropriate section of table & send it
- ;
- getdow:
- call cinit ;stop clock
- mvi a,6 ;day of week function
- out scip0 ;ask for it
-
- nop ;delay for clock to settle
- nop
- nop
- nop
-
- in scip0 ;get dow
- rar ;rotate..
- rar ;..to swap..
- rar ;..the nibbles..
- rar ;..to get our DOW
- passb: ani 0fh ;strip off high bits
- sta dow ;store it
- call ccont ;start clock
- ;
- ; now point to table and send text to caller
- ;
- call findstring ;target string area
- push h ;save addr
- xra a ;zero
- mov b,a ;'B' must be zero
- lxi h,dowtable ;point to address lookup table
- lda dow ;offset
- mov c,a ;put dow in BC..
- dad b ;..and add to HL to get offset..
- dad b ;..into table of DW's
- mov e,m ;get lo byte of addr into DE
- inx h ;bump pointer
- mov d,m ;get hi byte of addr into DE
- pop h ;target data addr into HL
- jmp move ;move (DE) --> (HL)
- ;
- ; process passed parameter (passed to us from caller)
- ; makes hl point to passed string (in caller's area)
- ;
- findstring:
- inx h ;past length - assumed to be 9
- mov e,m
- inx h ;get address of passed string into de
- mov d,m
- xchg ;now in HL
- ret
- ;
- ; move data from (de) to (hl)
- ;
- move: ldax d ;get a byte from our table
- ora a ;set flags, is it end-of-table mark?
- rz ;done, return
- mov m,a ;else store byte to caller prog data area, then..
- inx d ;..bump..
- inx h ;..pointers..
- jmp move ;..and loop
- ;
- ; send a '$' to the address specified by HL
- ;
- endstring:
- mvi a,'$' ;string terminator..
- mov m,a ;..to caller's string space
- ret
- ;
- ;TIME READ FOR SCITRONICS CLOCK
- ;02/18/81 BY WARD CHRISTENSEN
- ;
- scip0 equ 018h
- SCIP1 EQU SCIP0+1
- SCIP2 EQU SCIP1+2
- SCIP3 EQU SCIP0+3
- ;
- READCLK:
- PUSH B
- PUSH D
- PUSH H
- LXI H,BUFFER ;POINT TO BUFFER
- SHLD BUFPTR ;POINT TO FIRST CHAR
- CALL CINIT ;INIT THE CLOCK
- CALL CREAD ;READ THE CLOCK
- CALL CCONT ;TELL THE CLOCK TO CONTINUE
- POP H
- POP D
- POP B
- ret ;with data in buffers
-
- ;
- ;====> CINIT INITIALIZES THE CLOCK:
- ; 1. INIT THE P.I.A.
- ; 2. HOLD THE CLOCK
- ;
- CINIT:
- MVI A,0F0H
- OUT SCIP1
- MVI A,0FH
- OUT SCIP0
- MVI A,0FCH
- OUT SCIP3
- MVI A,0F4H
- OUT SCIP1
- RET
- ;
- ;====> CREAD CLOCK READ ROUTINE, INTO M(HL)
- ; SETS (D) TO THE DIGIT SELECT,
- ; AND (E) WITH THE DELIMITER (/ OR :)
- ;
- CREAD:
- LXI D,256*10+'/'
- CALL CLOCK ;'MM/'
- CALL CLOCK ;'DD/'
- LXI D,256*12+' '
- mvi e,0 ;maintain 'db 0'
- CALL CLOCK ;'YY '
- LXI D,256*5+':'
- CALL CLOCK ;'HH:'
- CALL CLOCK ;'MM:'
- MVI E,0
- JMP CLOCK ;'SS',0
- ;
- ;====> CLOCK: READS 2 DIGITS, STORES IN MEMORY
- ; INITIAL DIGIT IS IN D, DELIM IN E.
- ;
- CLOCK:
- CALL DIGIT ;READ, STORE 1 DIGIT
- CALL DIGIT ;READ, STORE 2ND DIGIT
- MOV M,E ;STORE DELIM (/ OR :)
- INX H ;SKIP DELIM
- RET
- ;
- ;====> DIGIT: GETS A SINGLE DIGIT FROM THE CLOCK TO MEMORY
- ; BASED ON THE SELECT VALUE IN (D)
- ;
- DIGIT:
- MOV A,D ;GET DIGIT SELECT
- DCR D ;SETUP FOR NEXT DIGIT
- OUT SCIP0 ;ASK FOR IT
- CPI 5 ;HOURS (HAVE TO MASK)?
- IN SCIP0 ;READ IT (PRESERVES CPI 5 TEST)
- JNZ DIGNH ; NOT DIGIT 5, SKIP MASKING
- ANI 70H ; KILL HI DIGIT
- DIGNH:
- RAR
- RAR
- RAR
- RAR ;SHIFT THE DIGIT RIGHT 4
- ANI 0FH ;ISOLATE NUMERIC VALUE
- ADI '0' ;MAKE PRINTABLE
- MOV M,A ;STORE I
- INX H ;BUMP TO NEXT
- RET ; AND RETURN
- ;
- ;====> CCONT CONTINUE CLOCK, DISABLE P.I.A.
- ;
- CCONT:
- MVI A,0F8H
- OUT SCIP1
- MVI A,0FH
- OUT SCIP0
- MVI A,0F8H
- OUT SCIP3
- MVI A,0FCH
- OUT SCIP1
- MVI A,0FH
- OUT SCIP0
- RET ;END OF CLOCK ROUTINES
- BUFPTR:
- DW 0
- BUFFER:
- DBUFFER: ;date buffer
- DB 'MM/DD/YY',0
- TBUFFER: ;time buffer
- DB 'HH:MM:SS',0
- DOW: DB 0 ;used for day of week index
- ;
- ; day of week table
- ;
- dowtable:
- dw sun
- dw mon
- dw tues
- dw wed
- dw thurs
- dw fri
- dw sat
- sun: db 'Sunday$',0
- mon: db 'Monday$',0
- tues: db 'Tuesday$',0
- wed: db 'Wednesday$',0
- thurs: db 'Thursday$',0
- fri: db 'Friday$',0
- sat: db 'Saturday$',0
- end
-