10 ;*** DRIVER FOR RTC USING MSM5832 OKI CIRCUIT ***
20 ;*** WRITTEN BY G.ASSMANN OKT '86 ***
30 ;SYSTEM EQUATES USED
40 RUNAD     = $02E0 ;RUNADDRESS WRITTEN HERE FOR AUTORUN EXEC.
50 HATABS    = $031A ;HANDLER TABLES START ADDRESS
60 CLPB      = $D381 ;PIA 2 PORT B
70 CLACTL    = $D382 ;PIA 2 PORT A CONTROLL
80 CLBCTL    = $D383 ;PIA 2 PORT B CONTROLL
90 BUFFER    = $0400 ;ALL CLOCK DATA STORED/RETRIEVED FROM 400 TO 40C THE CASETTE BUFFER
0100         *= $600 ;PUT OBJECT CODE HERE
0110 PREND   .BYTE SRCEND&255  ;HERE IS HOW TO
0120         .BYTE SRCEND/256  ;CALCULATE CODE END
0130 STORE   .BYTE 00,00,00 ;TEMP.STORE REGISTERS
0140 TDRIVER .WORD TOPEN-1 ;HANDLER
0150         .WORD TCLOSE-1;FUNCTION
0160         .WORD TREAD-1 ;JUMPADR. BASIC GET #n,y
0170         .WORD TWRITE-1;TABLE    BASIC PUT #n,y
0180         .WORD TSET-1            BASIC STATUS #n,y
0190         .WORD TXIO-1 ;NULL FUNCTION
0200 GOINIT  JMP START ;JUST FOR SAFETY
0210 ;*** BASIC RECONNECT X=USR(1556) ***
0220 RECONN  PLA
0230         BEQ GOINIT ;IF NO PARAMETERS
0240         TAY
0250 PULLTHEM
0260         PLA  ;PARAMETERS
0270         PLA  ;PULL
0280         DEY
0290         BNE PULLTHEM ;PULL ANY OTHERS
0300         BEQ GOINIT
0310 TOPEN   LDY #1  ;INDICATE SUCCES
0320         RTS     ;AND GO BACK
0330 TCLOSE  LDY #1  ;ALL ARE
0340         RTS     ;JUST NULL
0350 TXIO    LDY #1  ;HANDLERS AND
0360         RTS     ;DO NOTHING
0370 ;*** READ ROUTINE STARTS HERE ***
0380 TREAD   STX STORE ;SAVE X
0390         LDX #$0C  ;BYTES TO READ
0400         LDA CLACTL;SETUP READ
0410         EOR #$08  ;LINE OFF
0420         STA CLACTL;CLOCK
0430 LOOP    LDY #8    ;DELAY TIME
0440         TXA       ;ADDRESS
0450         ASL A     ;CALCULATION
0460         ASL A     ;ROUTINE
0470         ASL A
0480         ASL A
0490         STA CLPB
0500 DELAY   DEY       ;WAIT FOR SLOW
0510         BPL DELAY ;CLOCK
0520         LDA CLPB
0530         AND #$0F  ;ONLY DATA
0540         STA BUFFER,X
0550         DEX
0560         BPL LOOP  ;REST OF DATA
0570         LDA CLACTL
0580         EOR #$08
0590         STA CLACTL
0600         LDX STORE ;RESTORE X REG
0610         LDY #1    ;SUCCES
0620         RTS
0630 ;*** CLOCK WRITE ROUTINE STARTS HERE (NULL ROUTINE)***
0640 TWRITE  LDY #1  ;INDICATE SUCCES
0650         RTS     ;AND GO BACK
0660 ;*** WAIT ROUTINE TO ENSURE HOLD SETUP TIME ***
0670 WAIT    LDY #$40;DELAY TIME
0680 LOOP1   DEY   ;4*Y REG.*0,556 uS
0690         BPL LOOP1 ;+- 150 uS
0700         RTS
0710 ;*** THE STATUS COMMAND IS USED TO SET THE CLOCK (COPY $400 TO $409 TO IT ***
0720 TSET    STX STORE ;SAVE X
0730         LDX #$0C
0740         LDA CLBCTL
0750         STA STORE+1
0760         LDA #$30
0770         STA CLBCTL
0780         LDA #$FF
0790         STA CLPB
0800         LDA #$3C
0810         STA CLBCTL
0820         JSR WAIT   ;HOLD SETUP
0830 SETCL   LDY #8
0840         TXA
0850         ASL A
0860         ASL A
0870         ASL A
0880         ASL A
0890         CLC
0900         ADC BUFFER,X
0910         STA CLPB
0920 DELAY1  DEY
0930         BPL DELAY1
0940         SEC
0950         SBC #$10
0960         STA CLPB
0970         DEX
0980         BNE SETCL
0990         STX CLPB
1000         LDA #$30
1010         STA CLBCTL
1020         LDA #$F0
1030         STA CLPB
1040         LDA STORE+1
1050         STA CLBCTL
1060         LDX STORE
1070         LDY #1
1080         RTS
1090 ;*** INIT PIA INSTALL DEVICE AND READ THE CLOCK ***
1100 START   LDY #0
1110         STY CLPB
1120         STY CLBCTL
1130         LDA #$F0
1140         STA CLPB
1150         LDA #$34
1160         STA CLBCTL
1170         STA CLACTL
1180 ;*** HANDLER TABLES ENTRY SETUP ***
1190 TINIT   LDY #0
1200 FIND    LDA HATABS,Y
1210         CMP #0     ;FREE ENTRY ?
1220         BEQ FOUND
1230         INY
1240         INY
1250         INY        ;POINT TO NEXT HATABS ENTRY
1260         CPY #34    ;AT END OF HATABS ?
1270         BNE FIND   ;NO .. CONT.
1280         SEC        ;INDICATE ERR
1290         RTS
1300 FOUND   LDA #'T    ;SET DEVICE NAME
1310         STA HATABS,Y
1320         INY
1330         LDA #TDRIVER&255
1340         STA HATABS,Y ;HANDLER ADR
1350         INY
1360         LDA #TDRIVER/256
1370         STA HATABS,Y
1380         JSR TREAD  ;READ CLOCK
1390         LDY #$01
1400         RTS
1410 ;
1420 ;
1430 SRCEND  =*          ;LABEL FOR OBJECT END CALCULATION
1440 ;       *= RUNAD
1450 ;       .WORD START ;START ADDRESS OF ROUTINE AT AUTORUN EXEC
1460         .END
1470 ;
1480 ;*** USE LINES 1440 AND 1450 TO MAKE AN AUTORUN.SYS THAT INITS  ***
1490 ;*** THE CLOCK AND PIA UPON BOOT                                ***
1500 ;*** DON'T USE IT WHITH SPECIAL AUTORUN SYS PROVIDED IN ARTICLE ***
1510 ;
1520 ;
1530 ;*****************************************************************
1540 ;*                                                               *
1550 ;* FOR SOME REASON THE CLOCK MUST BE SET IN A STRANGE FASHION    *
1560 ;* FIRST WRITE DATA TO CORRECT ADDRESS AND SUBSECUENTLY WRITE    *
1570 ;* SAME DATA TO ONE ADDRESS LOWER.I DO NOT KNOW THE REASON FOR   *
1580 ;* THIS,I SAW IT IN THE ARTICLE BY L.S.BRILLIANT IN ANALOG COMP. *
1590 ;*                                                               *
1600 ;*****************************************************************
