home *** CD-ROM | disk | FTP | other *** search
- ; MXC-ADS1.Z80 Revision 1.0 Jim Lill 19 Mar 87
- ;
- ; MEXplus Clock Overlay For Apple //e using Dallas DS1216E or
- ; other type RTC that plug into the CD ROM socket.
- ;
- ; Requires: DSCLK.DVR (See PCPITIME.LBR)
- ;
- ;------------------------------------------------------------------------
- ; revision | date | description | author
- ;----------+-------------------------------------------------------------
- ; 1.0 |19Mar87 | created original, some code from | Jim Lill
- ; | | MXC-DS10.Z80, DSDSCLK.Z80 |
- ;------------------------------------------------------------------------
- bdos equ 0005h
- cent equ 1900 ;century
- dvr3 equ 0ffe3h ;these two locations are in the
- dvr0 equ 0ffe0h ;6502 I/O area for talking to .DVR
- ;...............................
- ;
- ; Prtval macro prints text and value during assembly
- ;
- prtval macro msg,n
- .printx msg n
- endm
- ;...............................
- ;
- ; start of MEX stuff....
-
- org 0100h
- db 0C3h ; this is for 8080 processor
- ;...............................
- ;
- ; JMP table for clock overlay
- ;
- org 0E00h ;start of clock overlay
-
- start: jp gettim ;get time
- jp getdat ;get date
- ret ;cset processor
- nop
- nop
- ret ;clock overlay init
- nop
- nop
- ret ;clock overlay de-init
- nop
- nop
- ;...............................
- ;
- ; gettim, this routine gets the time in clktbl and readies it for MEX
- ;
- ; B - hours (0-23)
- ; C - minutes (0-59)
- ; D - seconds (0-59)
- ; E - hundredths of sec (0-99)
- ;
- gettim:
- call clock ; get date and put BCD data in CLKTBL
-
- ld A,(hour) ; load packed BCD hours into A
- call bcd2bin ; \__ place bin hours in B
- ld B,A ; /
-
- ld A,(min) ; load packed BCD mins into A
- call bcd2bin ; \__ place bin mins in C
- ld C,A ; /
-
- ld A,(sec) ; load packed BCD secs into A
- call bcd2bin ; \__ place bin secs in D
- ld D,A ; /
-
- ld A,(hsec) ; load packed BCD hsecs into A
- call bcd2bin ; \_ place bin hsecs in E
- ld E,A ; /
-
- ret ; back to MEX
- ;................................
- ;
- ; getdat, this routine gets the date in clktbl and readies it for MEX
- ;
- ; BC - year (1985-2099)
- ; D - month (1=jan, 2=feb, etc)
- ; E - day of month (1-31)
- ;
- getdat:
- call clock ; get date and put BCD data in CLKTBL
- ;
- ld A,(day) ; load packed BCD day into A
- call bcd2bin ; \__ place bin day in E
- ld E,A ; /
-
- ld A,(mon) ; load packed BCD mon into A
- call bcd2bin ; \__ place bin mon in D
- ld D,A ; /
-
- ld A,(year) ; load packed BCD year (00-99) into A
- call bcd2bin ; \__ place bin year in C
- ld C,A ; /
- ld B,0 ; make a whole year value
- ld HL,cent ; by adding cent (eg 1900)
- add HL,BC ; to partial year
- ld C,L ; move answer into BC
- ld B,H ; " " " "
-
- ret ; back to MEX
- ;...............................
- ;
- ; bcd2bin --> packed BCD (A) converted to Binary (A)
- ;
- bcd2bin:
- push BC ; be safe
- ld C,A ; load in value from A
- and 0F0h ; mask off lower nibble
- rra ; \
- rra ; \_/ move upper nibble
- rra ; / \ into lower nibble
- rra ; /
- ld B,A ; store value *1
- add A ; \__ *4
- add A ; /
- add B ; now *5
- add A ; finally *10
- ld B,A ; store 10's digit in B
- ld A,C ; \__ load lower digit into A
- and 00Fh ; /
- add B ; combine both digs. into single byte
- pop BC ; restore register
- ret ;
- ;...............................
- ;
- ; CLOCK calls the DS1216E via the PCPI driver and puts the data into
- ; CLKTBL as BCD.
-
- clock: ld c,251 ;put command in C for call
- call dvr3 ;send the command
- ld c,16 ;get time command in C
- call dvr3 ;send it
- ld hl,clktbl ;point at table
- getit: call dvr0 ;receive a character
- cp 0AAh ;Check to see if last character
- jr z,exit ;if it is exit loop
- ld (hl),a ;store data in buffer
- inc hl ;bump buffer pointer
- jr getit ;go get new data
- exit: ret
-
- clktbl:
- year: ds 1
- mon: ds 1
- day: ds 1
- dow: ds 1
- hour: ds 1
- min: ds 1
- sec: ds 1
- hsec: ds 1
- ;..................
- ;
- ; Assembly-time only, MEX modules have space restrictions
- ;
- if1
- .radix 16
- prtval <ending address = >,%($)
- prtval < overlay size = >,%($ - start)
- endif
- ;................................
-
- end