*********************************************** * CLOCK - OS9 Clock Module * * For real time clock chip 146818 * * Usage: include in OS9 Boot file * * (c) J.Bird May 1993 * * 1. First Issue - May 1993 JB * *********************************************** nam Clock ttl OS9 Real Time Clock Module ifp1 use /d0/defs/os9defs use /d0/defs/sysdefs.2 endc * Equates Clockas equ $FF18 clock IO ports Clockds equ $FF19 rega equ $A clock registers (A-D) regb equ $B regc equ $C regd equ $D second equ $0 time registers minute equ $2 hour equ $4 year equ $9 initb equ 134 initialise B for time setb equ 6 set b for normal run inita equ 96 initialise A for time seta equ 32 set a for normal run * Data Area org 0 stack rmb 200 stack datsiz equ . * Module header type set SYSTM+OBJCT revs set REENT+1 mod size,name,type,revs,start,datsiz name fcs /Clock/ fcb 1 Edition * SVC table svtable fcb $15 rerouted ssv table fdb getime-codset for get time & set codset fcb $16 time service calls fdb setime-endtab endtab fcb $80 * main program - setup OS requirements start pshs cc,dp clra tfr a,dp lda #$32 sta D.TSec ticks per second sta D.Tick lda #$05 sta D.TSlice ticks per time slice sta D.Slice orcc #$50 leax clctic,pcr install the IRQ service stx D.AltIRQ routine leay svtable,pcr os9 F$SSVC install Setime/Getime puls cc,dp,pc OS9 calls *clock tick routine clctic clra tfr a,dp dec D.Tick bne exit lda D.TSec sta D.Tick exit jmp [D.Clock] clock tick routine *get time request getime ldx 4,u point to packet orcc #$50 interrupts off! clcknr lda #rega load register A addr sta clockas lda clockds load register a lsla test for UIP bcs clcknr clock in update, wait? lda #year read year sta clockas ldb clockds stb ,x into packet deca month sta clockas ldb clockds stb 1,x deca day/month sta clockas ldb clockds stb 2,x lda #hour hour sta clockas lda clockds sta 3,x lda #minute minutes sta clockas lda clockds sta 4,x lda #second second sta clockas lda clockds sta 5,x andcc #^$50 IRQs on again clrb return OK rts *setime request setime ldx 4,u point to packet lda #regb address for register B sta clockas lda #initb hold B for time setting sta clockds lda #rega address for register A sta clockas lda #inita hold A for time setting sta clockds lda #year chip now ready for time sta clockas entry, so load time from ldb ,x packet stb clockds deca month sta clockas ldb 1,x stb clockds deca day of month sta clockas ldb 2,x stb clockds lda #hour hour sta clockas lda 3,x sta clockds lda #minute minute sta clockas lda 4,x sta clockds lda #second second sta clockas lda 5,x sta clockds lda #regb now setup registers A & B sta clockas to start clock at required lda #setb time sta clockds lda #rega sta clockas lda #seta sta clockds clrb all ok rts emod size equ * finito.