@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED849 FREE SECTORS COPYING---D8:PP3MKR.LSTl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D81uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D81uajáLa<͂J2ea B\DaEJK VBDEHI V B V `D:INITRTC1.COMawU}.V}W}X}Y}Z}[}\}]}^}_}`}a}b}c}d}e}f}g}h}i}j}k}l}m}n}o}p}q}r}s}t}u}v}w}x}y}z}{}|}}}~}}!?v$Lhhh```xԍ@ԭ//` ( խ0խ՝@ i`ԭ/X` } (?Ս i` ( Ս Սբ Ս i @` "8`Tȩȩ @` }`Ս i` ( Ս Սբ Ս i @` "8`Tȩȩ @` !'Zc$Lhhh``` IӠ ӈ)譂IӮ``@` Ӎ0ө}ө< ^ }ӈ8掁ө0өӭӮ`ӌөө4ӍӠ "8`Tȩȩ (`} ^ }ӈ8掁ө0өӭӮ`ӌөө4ӍӠ "8`Tȩȩ (`10 ;*** DRIVER FOR RTC USING MC146818 MOTOROLA CICUIT ***20 ;*** WRITTEN BY G.ASSMANN AUG/SEPT '86 ***30 ;SYSTEM EQUATES US}ED35 RUNAD = $02E0 ;RUNADDRESS WRITTEN HERE FOR AUTORUN EXEC.40 HATABS = $031A ;HANDLER TABLES START ADDRESS50 CLAD}R = $D580 ;CLOCK DATA REGISTER60 CLDATA = $D581 ;CLOCK ADDRESS REGISTER70 BUFFER = $0400 ;ALL CLOCK DATA STORED/R}ETRIEVED FROM 400 TO 43F THE CASETTE BUFFER80 NMIEN = $D40E ;NMI ENABLE90 SDMCTL = $022F ;DMA ENABLE0100 *=} $600 ;PUT OBJECT CODE HERE0110 PREND .BYTE SRCEND&255 ;HERE IS HOW TO0120 .BYTE SRCEND/256 ;CALCULATE CODE END}0130 STORE .BYTE 00,00,00 ;TEMP.STORE REGISTERS0140 TDRIVER .WORD TOPEN-1 ;HANDLER0150 .WORD TCLOSE-1;FUNCTION0}160 .WORD TREAD-1 ;JUMPADR. BASIC GET #n,y0170 .WORD TWRITE-1;TABLE BASIC PUT #n,y0180 .WORD TSE}T-1 BASIC STATUS #n,y0190 .WORD TXIO-1 ;NULL FUNCTION0200 GOINIT JMP TINIT ;JUST FOR SAFETY0210 ;*** B}ASIC RECONNECT X=USR(1556) ***0220 RECONN PLA0230 BEQ GOINIT ;IF NO PARAMETERS0240 TAY0250 PULLTHEM0260} PLA ;PARAMETERS0270 PLA ;PULL0280 DEY0290 BNE PULLTHEM ;PULL ANY OTHERS0300 BE}Q GOINIT0310 TOPEN LDY #1 ;INDICATE SUCCES0320 RTS ;AND GO BACK0330 TCLOSE LDY #1 ;ALL ARE0340 R}TS ;JUST NULL0350 TXIO LDY #1 ;HANDLERS AND0360 RTS ;DO NOTHING0370 ;*** THE FOLLOWING PART MAKES THE }COMPUTER STOP SCREEN DISPLAY ***0380 ;*** NEEDED TO READ CLOCK PROPERLY ***0390 VBWAIT SEI ;DISABLE INTERRUPT0400 } LDA NMIEN ;SAVE NMI0410 STA STORE+1 ;STATUS0420 LDA #$40 ;DISABLE ALL0430 STA NMIEN ;BUT RESE}T NMI0440 LDA SDMCTL ;SAVE DMA0450 STA STORE+2 ;STATUS0460 LDA #$00 ;AND DISABLE0470 }STA SDMCTL ;IT0480 RTS0490 ;*** READ ROUTINE STARTS HERE ***0500 TREAD STX STORE ;SAVE X0510 JSR VBWA}IT ;DISABLE INTERRUPTS0520 LDX #$0A ;CHECK FOR0560 SET STX CLADR ;UPDATE AND0570 LDA CLDATA ;WAIT T}ILL0580 BMI SET ;READY0590 LDX #$00 ;THEN READ0600 LOOP STX CLADR ;CLOCK NOW0610 LDA CLD}ATA0620 STA BUFFER,X0630 INX0635 CPX #$400640 BNE LOOP0650 JSR RVBL ;RE-ENABLE} INTERRUPTS0660 LDX STORE ;RESTORE X0670 LDY #$01 ;SUCCES0680 RTS0690 ;*** THIS ROUTINE RESTOR}ES ALL INTERRUPT MASKS ***0700 RVBL LDA STORE+10710 STA NMIEN0720 LDA STORE+20730 STA SDMCTL0}740 CLI0750 RTS0760 ;*** CLOCK WRITE ROUTINE STARTS HERE (ONLY BACKUPED RAM)***0770 TWRITE STX STORE ;SAV}E X0780 JSR VBWAIT ;DISABLE INTERRUPTS0790 LDX #$3F ;READ CLOCK0800 REST LDA BUFFER,X ;NO NEED0810} STX CLADR ;TO WAIT0820 STA CLDATA ;FOR END0830 DEX ;OF UPDATE0840 CPX #$0F } ;STORE ONLY DATA0850 BNE REST ;ALL DONE ?0860 LDX STORE ;RESTORE X0870 JSR RVBL0880 LDY} #$010890 RTS0900 ;*** THE STATUS COMMAND IS USED TO SET THE CLOCK (COPY $400 TO $409 TO IT ***0910 ;*** AND SET R}EGISTERS FOR FREQ. AND 24 HOURS MODE (SEE DATASHEET) ***0920 TSET STX STORE ;SAVE X0930 JSR VBWAIT ;DISABLE INTE}RRUPTS0940 LDX #$0B ;12 ADDRESSES0950 SETCL LDA BUFFER,X0960 STX CLADR0970 STA CLDATA0980 } DEX0990 BPL SETCL1000 LDX #$0A ;CONFIGURE1010 LDA #$20 ;CLOCK & RATE1020 STX CLAD}R ;TO 32KC1030 STA CLDATA ;SEE DATASHEET1040 LDX #$0B1050 LDA #$00 ;SET MODE1060 STX CLA}DR ;AND START1070 STA CLDATA;TIMING1080 JSR RVBL ;RESTORE INTERRUPTS1090 JSR TREAD ;READ CLOCK DA}TA1100 LDX STORE ;RESTORE X1110 LDY #$011120 RTS1130 ;*** HANDLER TABLES ENTRY SETUP ***1140 TI}NIT LDY #01150 FIND LDA HATABS,Y1160 CMP #0 ;FREE ENTRY ?1170 BEQ FOUND1180 INY1190 } INY1200 INY ;POINT TO NEXT HATABS ENTRY1210 CPY #34 ;AT END OF HATABS ?1220 BNE FIN}D ;NO .. CONT.1230 SEC ;INDICATE ERR1240 RTS1250 FOUND LDA #'T ;SET DEVICE NAME1260 } STA HATABS,Y1270 INY1280 LDA #TDRIVER&2551290 STA HATABS,Y ;HANDLER ADR1300 INY1310 } LDA #TDRIVER/2561320 STA HATABS,Y1330 JSR TREAD ;READ CLOCK1340 LDY #$011350 RTS13}60 ;*** SETUP DEVICE DATA AND READ THE CLOCK ***1370 START JSR TINIT1380 RTS1390 SRCEND =* ;LABEL FOR }OBJECT END CALCULATION1400 ; *= $02E01410 ; .WORD START ;START ADDRESS OF ROUTINE AT AUTORUN1420 .END}1430 ;1440 ;*** USE LINES 1400 AND 1410 TO MAKE AN AUTORUN.SYS THAT INITS ***1450 ;*** THE CLOCK UPON BOOT } ***1460 ;*** DON'T USE IT WITH SPECIAL AUTORUN.SYS PROVIDED IN ARTICLE *** UPON BOOT b10 ;*** DRIVER FOR RTC USING MSM5832 OKI CIRCUIT ***20 ;*** WRITTEN BY G.ASSMANN OKT '86 ***30 ;SYSTEM EQUATES USED40 RUNA}D = $02E0 ;RUNADDRESS WRITTEN HERE FOR AUTORUN EXEC.50 HATABS = $031A ;HANDLER TABLES START ADDRESS60 CLPB = $D}381 ;PIA 2 PORT B70 CLACTL = $D382 ;PIA 2 PORT A CONTROLL80 CLBCTL = $D383 ;PIA 2 PORT B CONTROLL90 BUFFER = $040}0 ;ALL CLOCK DATA STORED/RETRIEVED FROM 400 TO 40C THE CASETTE BUFFER0100 *= $600 ;PUT OBJECT CODE HERE0110 PREND } .BYTE SRCEND&255 ;HERE IS HOW TO0120 .BYTE SRCEND/256 ;CALCULATE CODE END0130 STORE .BYTE 00,00,00 ;TEMP.STORE} REGISTERS0140 TDRIVER .WORD TOPEN-1 ;HANDLER0150 .WORD TCLOSE-1;FUNCTION0160 .WORD TREAD-1 ;JUMPADR. BASI}C GET #n,y0170 .WORD TWRITE-1;TABLE BASIC PUT #n,y0180 .WORD TSET-1 BASIC STATUS #n,y0190 } .WORD TXIO-1 ;NULL FUNCTION0200 GOINIT JMP START ;JUST FOR SAFETY0210 ;*** BASIC RECONNECT X=USR(1556) ***0220 RECO}NN PLA0230 BEQ GOINIT ;IF NO PARAMETERS0240 TAY0250 PULLTHEM0260 PLA ;PARAMETERS0270 P}LA ;PULL0280 DEY0290 BNE PULLTHEM ;PULL ANY OTHERS0300 BEQ GOINIT0310 TOPEN LDY #1 ;INDICATE }SUCCES0320 RTS ;AND GO BACK0330 TCLOSE LDY #1 ;ALL ARE0340 RTS ;JUST NULL0350 TXIO LDY #1 ;}HANDLERS AND0360 RTS ;DO NOTHING0370 ;*** READ ROUTINE STARTS HERE ***0380 TREAD STX STORE ;SAVE X0390 } LDX #$0C ;BYTES TO READ0400 LDA CLACTL;SETUP READ0410 EOR #$08 ;LINE OFF0420 STA CLACTL;CLOC}K0430 LOOP LDY #8 ;DELAY TIME0440 TXA ;ADDRESS0450 ASL A ;CALCULATION0460 ASL A } ;ROUTINE0470 ASL A0480 ASL A0490 STA CLPB0500 DELAY DEY ;WAIT FOR SLOW0510 BP}L DELAY ;CLOCK0520 LDA CLPB0530 AND #$0F ;ONLY DATA0540 STA BUFFER,X0550 DEX0560 } BPL LOOP ;REST OF DATA0570 LDA CLACTL0580 EOR #$080590 STA CLACTL0600 LDX STORE ;RESTO}RE X REG0610 LDY #1 ;SUCCES0620 RTS0630 ;*** CLOCK WRITE ROUTINE STARTS HERE (NULL ROUTINE)***0640 TWR}ITE LDY #1 ;INDICATE SUCCES0650 RTS ;AND GO BACK0660 ;*** WAIT ROUTINE TO ENSURE HOLD SETUP TIME ***0670 WAI}T LDY #$40;DELAY TIME0680 LOOP1 DEY ;4*Y REG.*0,556 uS0690 BPL LOOP1 ;+- 150 uS0700 RTS0710 ;*** T}HE STATUS COMMAND IS USED TO SET THE CLOCK (COPY $400 TO $409 TO IT ***0720 TSET STX STORE ;SAVE X0730 LDX #$0C}0740 LDA CLBCTL0750 STA STORE+10760 LDA #$300770 STA CLBCTL0780 LDA #$FF0790 } STA CLPB0800 LDA #$3C0810 STA CLBCTL0820 JSR WAIT ;HOLD SETUP0830 SETCL LDY #80840 } TXA0850 ASL A0860 ASL A0870 ASL A0880 ASL A0890 CLC0900 ADC BUFFER,}X0910 STA CLPB0920 DELAY1 DEY0930 BPL DELAY10940 SEC0950 SBC #$100960 STA CLPB}0970 DEX0980 BNE SETCL0990 STX CLPB1000 LDA #$301010 STA CLBCTL1020 LDA} #$F01030 STA CLPB1040 LDA STORE+11050 STA CLBCTL1060 LDX STORE1070 LDY #11080 } RTS1090 ;*** INIT PIA INSTALL DEVICE AND READ THE CLOCK ***1100 START LDY #01110 STY CLPB1120 S}TY CLBCTL1130 LDA #$F01140 STA CLPB1150 LDA #$341160 STA CLBCTL1170 STA CLACTL1}180 ;*** HANDLER TABLES ENTRY SETUP ***1190 TINIT LDY #01200 FIND LDA HATABS,Y1210 CMP #0 ;FREE ENTRY ?1}220 BEQ FOUND1230 INY1240 INY1250 INY ;POINT TO NEXT HATABS ENTRY1260 CPY }#34 ;AT END OF HATABS ?1270 BNE FIND ;NO .. CONT.1280 SEC ;INDICATE ERR1290 RTS1300 F}OUND LDA #'T ;SET DEVICE NAME1310 STA HATABS,Y1320 INY1330 LDA #TDRIVER&2551340 STA }HATABS,Y ;HANDLER ADR1350 INY1360 LDA #TDRIVER/2561370 STA HATABS,Y1380 JSR TREAD ;READ }CLOCK1390 LDY #$011400 RTS1410 ;1420 ;1430 SRCEND =* ;LABEL FOR OBJECT END CALCULATION1440 ; } *= RUNAD1450 ; .WORD START ;START ADDRESS OF ROUTINE AT AUTORUN EXEC1460 .END1470 ;1480 ;*** USE LINE}S 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.BRILLI}ANT IN ANALOG COMP. *1590 ;* *1600 ;*************************}**************************************** *1600 ;*************************)10 *=$610020 START30 RTC140 LDA #$FF TEST FOR RTC150 CMP $D581 PRESENT?60 BEQ RTC2 IF NOT, TEST RTC270 JMP OPEN RT}C1 FOUND, LOAD INITRTC180 RTC290 LDA #$3C TEST FOR RTC20100 CMP $D382 PRESENT?0110 BEQ EXIT IF NOT, EXIT ROUTINE0120 } LDA #$32 RTC2 FOUND, ADJUST0130 STA NAME+9 FILENAME TO INITRTC20140 OPEN0150 LDX #$20 FILE #20160 LDA #$03 OPEN COMMA}ND0170 STA $342,X0180 LDA #NAME&255 FILENAME LO-BYTE0190 STA $344,X0200 LDA #NAME/256 FILENAME HI-BYTE0210 STA $345},X0220 LDA #$04 READ COMMAND0230 STA $34A,X0240 LDA #$00 JUST TO BE SAFE.0250 STA $34B,X0260 JSR $E456 EXECUTE OPEN} FILE0270 LOAD0280 LDA #$07 GET CHARACTER COMMAND0290 STA $342,X0300 LDA #$FA STORE-ADDRESS LO-BYTE0310 STA $344,X0}320 LDA #$05 STORE-ADDRESS HI-BYTE0330 STA $345,X0340 LDA #$06 FILE-LENGTH LO-BYTE0350 STA $348,X0360 LDA #$01 FILE-}LENGTH HI-BYTE0370 STA $349,X0380 JSR $E456 EXECUTE LOAD COMMAND0390 CLOSE0400 LDA #$0C CLOSE COMMAND0410 STA $342,X}0420 JSR $E456 EXECUTE CLOSE COMMAND0430 JSR $6110440 EXIT0450 RTS NO RTC, PROCEED BOOT PROCESS0460 NAME0470 .BYTE }"D:INITRTC1.COM",$9B0480 *=$2E00490 .WORD START0500 .END0450 RTS NO RTC, PROCEED BOOT PROCESS0460 NAME0470 .BYTE ?_``J`CHIDAYAPDATETIMECHAYMDAAMPHAMISELHRHRMINMINSECSECYRYRMOMODAYDAY }  } ?F:A }T,"A$6-@. @@?RTC1 MC 146818>F:AT,"A$6-@. @@>RTC2 MSM 5832QF:A },"(}0-@@N(NO CLOCK DRIVER INSTALLEDQ(C#@@K:C@@ }E:211;@,;@,;@,;@,<SU,MO,TU,WE,TH,FR,SAF$$( *** CLOCK SETTING *** }PH-@@0(ENTER DATE (dd-mm-yy)<6-@H6-@Z$-@(($6-%@d-@ }n-@x.)@. @H)!@WALAR@"*@067<,.>:,>6-%@ }L6-%@ @ @!!AR((-66-%@@ A!AR!CURSOR ON }6-A:7@<@,,U6-A:7@<@,,)!@;-@@K( WRONG MONTHU @6-A:7@ }<@,,9!@1!-@@/( WRONG DAY9 @G-@@2(WHICH FORMAT: 1)12 HOURG( } 2)24 HOUR :;)@*@; @I)!@PA6-&@I-@@4"@ }*(ENTER TIME (hh:mm:00)4 Ap(ENTER TIME (hh:mm:ss):6-@6-@$-@(($6 }-%@"-@,-@6.)@. @H)!@WA@LAR@"*@ }067<,.>:,>6-%@L6-%@J T="@*!@367@<@,.00= A`^@ @! }!AR((:66-%@@ Ah!AR!CURSOR ONrb6-A:7@<@,,3!$@ }%@E-@@X(HOURS TOO HIGHb A`|"@A 1-@@ 1(CHOOSE 1) AM OR 2) }PM :.)@. @I)!@PA0/6-&@I6.PM&"/6.AM6-A:7@<@ },,@!@Y!-@@6(MINUTES TOO HIGH@ A`Z6-A:7@<@,,)!@Y;-@@ }P(SECONDS TOO HIGHZ A`5-@@5(CHOOSE THE DAY OF THE WEEK:G*(" 1. SU 2. MO 3. TU 4. W }EG( 5. TH 6. FR 7.SA)@6-&@IE )!@+-@@;( INVALID DAYE A }P46-('@"P:'@,46-p B6-P:'@,.6-&@$?6-P:'@,O6- }&@$`6-P:'@,p6-&@$f6-P:'@,$6-&@$56-P:'@,E6-&@$V6-P:'@ },f6-&@$# (}#@`A#"Q( //"(7(TIME(HR:MIN:SEC):(Q(: }:"( &@0&( (&(IS THIS CORRECT ? (Y/N):)@D"@x%N }"@AX Ap]"@ Ab-6-%@$%@$-6-%@$lA$A% }vA&A'A(A)A0A1A2A3A4 }A5A6 A`+A$%@$+A%+A&%@$+A'!}+A(%@$+A)-A0%@-A1%@$/A2%@$/A3!}%@$ A`&&*** THIS PART SETS THE CLOCK ***66*** USING DEVICE "T: WITCH MUST BE INSTALLED *** ##!}@@T:,( (,(PRESS ANY KEY TO SET THE CLOCK AdAU* F:Ad,"AUA!}4@@>( DONE SETTINGHD:SETCLOCK.BASAdAU* F:Ad,"AUA K10 IF PEEK(1554)=202 THEN CHIP=1:GOTO 40:REM RTC1 MC 14681820 IF PEEK(1554)=180 THEN CHIP=2:GOTO 40:REM RTC2 MSM 583230 IF %}PEEK(1790)=0 THEN ? "}":POSITION 2,6:? "NO CLOCK DRIVER INSTALLED":END 40 OPEN #1,4,0,"K:":OPEN #2,8,0,"E:"50 DIM DAY$(2),A%}P$(2),DATE$(6),TIME$(6)60 DATA SU,MO,TU,WE,TH,FR,SA70 ? " *** CLOCK SETTING ***"80 POSITION 2,3:? "ENTER DATE (dd-mm%}-yy)";:X=13:P=190 POSITION X,3:? "(";:X=X+1100 FOR Z=0 TO 1110 POSITION X,3120 GET #1,CHAR:IF CHAR<48 OR CHAR>57 THEN 110%}130 POKE 752,1:PUT #2,CHAR:DATE$(P,P)=CHR$(CHAR):X=X+1:P=P+1140 NEXT Z150 IF X<21 THEN POKE 752,0:? "-";:X=X+1:GOTO 10016% }0 POKE 752,0:REM CURSOR ON170 YR=VAL(DATE$(5,6))180 MO=VAL(DATE$(3,4)):IF MO>12 THEN POSITION 2,5:? "WRONG MONTH":GOTO 801% }90 DAY=VAL(DATE$(1,2))200 IF DAY>31 THEN POSITION 2,5:? "WRONG DAY":GOTO 80210 POSITION 2,5:? "WHICH FORMAT: 1)12 HOUR":? % }" 2)24 HOUR :";220 GET #1,AMPM:PUT #2,AMPM:IF AMPM<49 OR AMPM>50 THEN 210230 AMPM=AMPM-49240 POSITION 2,7250 IF CHIP=2% } THEN ? "ENTER TIME (hh:mm:00)";:GOTO 270260 ? "ENTER TIME (hh:mm:ss):";270 X=13:P=1280 POSITION X,7:? "(";:X=X+1290 FOR % }Z=0 TO 1300 POSITION X,7310 GET #1,CHAR:IF CHAR<48 OR CHAR>57 THEN 300320 POKE 752,1:PUT #2,CHAR:TIME$(P,P)=CHR$(CHAR):X=X%}+1:P=P+1330 NEXT Z340 IF CHIP=2 AND X>17 THEN TIME$(5,6)="00":GOTO 360350 IF X<21 THEN POKE 752,0:? ":";:X=X+1:GOTO 29036%}0 POKE 752,0:REM CURSOR ON370 HR=VAL(TIME$(1,2)):IF HR>AMPM*12+12 THEN POSITION 2,11:? "HOURS TOO HIGH":GOTO 260380 IF AMPM%}=1 THEN 420390 POSITION 2,9:? "CHOOSE 1) AM OR 2)PM :";400 GET #1,AP:IF AP<49 OR AP>50 THEN 330410 AP=AP-49:AP$="PM":IF AP%}=0 THEN AP$="AM"420 MIN=VAL(TIME$(3,4))430 IF MIN>59 THEN POSITION 2,11:? "MINUTES TOO HIGH":GOTO 260440 SEC=VAL(TIME$(5,6%})):IF SEC>59 THEN POSITION 2,11:? "SECONDS TOO HIGH":GOTO 260450 POSITION 2,11:? "CHOOSE THE DAY OF THE WEEK:"460 ? " 1. S%}U 2. MO 3. TU 4. WE":? " 5. TH 6. FR 7.SA"470 GET #1,W:W=W-49480 IF W<0 OR W>6 THEN POSITION 2,13:? "INVALI%}D DAY":GOTO 450490 LY=0:IF YR/4=INT(YR/4) THEN LY=0500 TRAP 40000:HRH=INT(HR/10):HRL=HR-10*HRH:MINH=INT(MIN/10):MINL=MIN-10%}*MINH:SECH=INT(SEC/10):SECL=SEC-10*SECH510 YRH=INT(YR/10):YRL=YR-10*YRH:MOH=INT(MO/10):MOL=MO-10*MOH:DAYH=INT(DAY/10):DAYL=D%}AY-10*DAYH520 ? "}":RESTORE 60:POKE 182,W:READ DAY$530 ? DAY$;" ";DAYH;DAYL;"/";MOH;MOL;"/";YRH;YRL:? :? "TIME(HR:MIN:SEC)"%}:? :? HRH;HRL;":";MINH;MINL;":";SECH;SECL;540 IF AMPM=0 THEN ? " ";AP$550 CLOSE #2560 ? :? :? "IS THIS CORRECT ? (Y/N)";5%}70 GET #1,K580 IF K=78 THEN RUN 590 IF K=89 THEN 605600 GOTO 570605 IF CHIP=1 THEN GOTO 700610 HRH=HRH+4*AP+8*AMPM:DAYH=%}DAYH+4*LY620 POKE 1024,SECL:POKE 1025,SECH630 POKE 1026,MINL:POKE 1027,MINH640 POKE 1028,HRL:POKE 1029,HRH650 POKE 1030,W%}660 POKE 1031,DAYL:POKE 1032,DAYH670 POKE 1033,MOL:POKE 1034,MOH680 POKE 1035,YRL:POKE 1036,YRH690 GOTO 760700 POKE 1024%},SECL+16*SECH:POKE 1025,0710 POKE 1026,MINL+16*MINH:POKE 1027,0720 POKE 1028,HRL+16*HRH:POKE 1029,0730 POKE 1030,W+1:POKE %}1031,DAYL+16*DAYH740 POKE 1032,MOL+16*MOH:POKE 1033,YRL+16*YRH750 GOTO 760760 REM *** THIS PART SETS THE CLOCK ***770 REM%} *** USING DEVICE "T: WITCH MUST BE INSTALLED ***780 OPEN #2,12,0,"T:"790 ? :? :? "PRESS ANY KEY TO SET THE CLOCK"800 POKE%} 764,255810 IF PEEK(764)=255 THEN 810820 STATUS #2,X:CLOSE #2830 ? "DONE SETTING"840 END KEY TO SET THE CLOCK"800 POKE$^12 4 1 5 0 1 80 2 12 132titel: PIA als centronicsvolgnr: onderw.: door: E.J.Nobbedatum: 13 jul. 1987) }pIA ALS CENTRONICS==================Bij de beschrijving van de real time clock werd gevraagd naar een mogelijkheid om )!}deze tweede PIA te gebruiken als een centronics interface.De eisen aan het programma waren als volgt: 1. reset-proof 2.)"} te combineren met Basic e.d. 3. GOED werkendHiervoor heb ik een drietal programma's geschreven, waarvan het hier beschre)#}ven programma het beste bleek te functioneren.Centronics----------De centronics-aansluitingen op de diverse printers z)$}ijn gestandariseerd. Dat wil zeggen, dat elke computer met een centronics-aansluiting kan worden aangesloten op elke printer )%}met een dergelijke aansluiting. Dat is tenminste de bedoeling.Van de centronics-connector worden in dit voorbeeld maar 11 li)&}jntjes gebruikt, en wel: 1. /STROBE 2. DATA1 3. DATA2 4. DATA3 5. DATA4 6. DATA5 7. DATA6 8. DATA7 9. DATA)'}8 10. /ACK 19. GNDVoor pin 19 was ook een van de andere massa-aansluitingen te nemen.BIJ DEZE OPLOSSING WORDT GEEN GEBRU)(}IK GEMAAKT VAN BUSY, PAPEROUT EN ANDERE SIGNALEN.Het zou niet eens kunnen, omdat er niet meer pinnen op de PIA beschikbaar z))}ijn. Overigens, wanneer een printer zich aan de standaard houd, dan hoeft er alleen naar /ACK te worden gekeken.Het program)*}ma werkt als volgt: het biedt de af te drukken byte aan op de data-poort A van de PIA, maakt vervolgens de lijn /STROBE even )+}laag, en wacht op het moment dat er een pulsje van /ACK afkomt.Deze nieuwe printer-driver werkt in de praktijk net zo als d),}e normale printer-routines. Het kent alle benodigde handelingen als OPEN, CLOSE en PUT, met de daarbij behorende foutmeldinge)-}n, als TIMEOUT, WRITE-ONLY e.d. Bovendien is het programma reset-bestendig door het misbruiken van de CASINI-vector en wijzig).}ing van BOOT?.Tot zover het reclame-praatje; belangrijker is wat we ermee kunnen doen.Gebruik-------De driver komt i)/}n plaats van de normale P: handler en neemt al diens taken over, maar maakt geen gebruik van de normale printer-buffer e.d. A)0}lles wordt rechtstreeks naar de printer gestuurd, na (eventueel) te zijn omgezet.Omgezet? Inderdaad. Een probleem bij het aa)1}nsluiten van Atari 8-bits computers op andere printers, is het feit dat in ATASCII de CR de waarde 155 heeft in plaats van 13)2}. (CR=Carriage Return, de RETURN-toets, oftewel het beginnen op een nieuwe regel) Het programma zorgt ervoor dat de 155 wordt)3} omgezet in een 13, wanneer wij dat willen! Daarnaast kunnen we nog een extra LF verzenden, wanneer wenselijk.Time out--)4}------Wanneer de printer geen tijd heeft om aandacht aan de computer te besteden, bijvoorbeeld wanneer de buffer vol is, da)5}n wordt er gewacht met de puls op de /ACK-lijn. De tijd die de computer wacht, kan worden ingesteld met deze byte. Default: 2)6}0. (20 x 0.4 sec. is ca. 8 sec.)Deze waarde is in te stellen met behulp van: POKE 1536,..Convert-mode------------H)7}iervoor openen we het kanaal naar de printer met: OPEN #1,8,0,"P:"Dit is overigens hetzelfde formaat als Basic gebruikt )8}in haar LPRINT en LIST "P:". De CR's zullen dus ook worden omgezet na deze opdrachten.Merk wel op dat alle andere codes NIET)9} worden omgezet! (Dit kan tot zeer verrassende resultaten leiden bij het listen van een programma met grafische tekens)Op a):}dres $0601, 1537, staat de code waardoor CR (155) wordt vervangen. Op $0602, 1538, staat het getal 0. Wanneer hier een getal );}staat, ongelijk aan nul, dan zal dit getal worden verzonden na de CR.Normaal: 155 wordt CR, geen LF: POKE 1537,13 POKE)<} 1538,0Extra LF: dit gebruiken we, wanneer de printer na een CR niet op de volgende regel begint, maar op het begin van de )=}huidige: POKE 1537,13 POKE 1538,101 op 2: dit kan gebruikt worden voor bijvoorbeeld het uitdraaien van een manuscript )>}voor een boek oid., elke regel wordt afgewisseld door een blanko: (nu moet de printer zelf ook bij elke CR een LF leveren) )?} POKE 1537,13 POKE 1538,13Extra breed: dit werkt op een General Electric TXP-8100, listings worden nu net zo breed als op)@} het beeldscherm: POKE 1537,13 POKE 1538,14Merk op, dat de code 14 pas NA het afdrukken van een regel wordt verzonden,)A} geef dan ook eerst een LPRINT voor een listing: LPRINT LIST "P:"Voor andere printers zal deze code 14 moeten worden a)B}angepast. Het is dan ook zomaar een grapje, dat per ongeluk boven water kwam.Transparant-----------Deze stand is handi)C}g bij het gebruik van programma's die aangepast zijn aan het gebruikte type printer: OPEN #2,8,2,"P:"Alles wordt identie)D}k doorgezonden. Dit is ook te verkrijgen door: POKE 1537,155 POKE 1538,0 OPEN #2,8,0,"P:"Programma---------Met )E}behulp van de afgedrukte TURBO-BASIC listing maken we gebruik van onze nieuwe centronics-interface. Voer het programma in en )F}RUN het. Op de disk wordt nu een nieuwe handler gemaakt onder de naam "AUTORUN.SYS", welke automatisch wordt geladen. Wijzig )G}eventueel de naam.Saven van andere instellingen-----------------------------Willen we gebruik maken van andere TIMEOUT)H}/CR/LF vormen, dan laden we de driver in het geheugen, springen naar Basic, en voeren de gewenste POKEs uit: POKE 1536,..)I} POKE 1537,.. POKE 1538,..Vervolgens springen we naar DOS, en kiezen de optie K (binairy save); druk RETURN, en voer ver)J}volgens in: (tussen 06FF en 0612 TWEE komma's!) D1:AUTORUN.SYS,0600,06FF,,0612Nu zal de gewijzigde versie op de disk word)K}en opgeslagen onder de naam AUTORUN.SYS.Veel plezier met deze "low cost interface" gewenst!Engel Nobbe op de disk word(m X; PPDRIV3 X; MAC65X; 13 jul. 1987 - E.J.N.(X;2"X; printerdriver, P: goes to P:<!X; software centronics print-M}erF"X; emulation for ATARI computerP%X; using ACK instead of SAG's BUSYZX;d>D1:MACRO2.LIBnX;x ZCIOB CASINI-N}HATABS BOOT? CONSOLЪX; ICHIDZ ICDNOZ! ICCOMZ" ICSTAZ# ICBALZ$ ICBAHZ%-O} ICPTLZ& ICPTHZ' ICBLLZ( ICBLHZ) ICAX1Z*" ICAX2Z+, ICAX3Z,6 ICAX5Z.@ ICAX6Z/JX;T -P}CRA^ CRBh PRAr DDRA| PRBӆ DDRBӐX;;;use page 6X; TIMEOUT  CRVAL -Q}  LFVAL X;X; handler vector tableX;VECTAB OPEN CLOSE GET& PUT0 STATUS: -R}SPECIALD !INITNX;X#X; set up new dev.name in HATABSbX;l SETUP%>vNEXTQHATABS8;;check forFFOUND;;empty en-S}try333)> HNEXT :;;no roomX; FOUNDQ> P PHATABS8 Q>4VECTABPHATABS8 Q>5VECTABPHATAB-T}S8 Q>4SETUP;;trap reset PCASINI  Q>5SETUP*PCASINI4Q>;;use CASINI on>PBOOT?;;system resetH:RX;\X-U}; driver routinesfX;pOPENzQ>:;;00111010PCRAQ>;;11111111 PDDRAQ>>;;00111110PCRA%>:X; -V}CLOSEQ>:;;00111010PCRAQ>;;00000000 PDDRAQ>>;;00111110PCRA%>$:.X;8GETB%>L:VX;`-W}PUTj DONLY1t NOT1%>~ Q@ICBALZ7 ONLY1HDONE;; timeoutWADDI ICBALZ=WSUBI ICBLLZ=WCMPI ICBL-X}LZ= HNOT1 DONE:X; ONLY1 $ICAX2Z(> FPRINTR>  HPRINT QCRVAL PRINT(HDONE;; timeout2 Q-Y}LFVAL< HPRINTF)>P:;; no LF to printZX;dPRINTPPRAnQPRA;;reset CRA-1xQ>6;;00110110PCRA;;CRA2=04Q-Z}>>;;00111110PCRA;;CRA2=1Q> PCONSOL $TIMEOUT LOOPX%>LOOPYQCRAM>;;10000000 HNOTBUSYQ>-[}LOOPADEA  HLOOPA1 HLOOPY"0, HLOOPX6%>@)>J:TNOTBUSY%>^)>h:rX;|X; STATUS QICAX2Z-\}%>:X; SPECIAL%>:X;INIT:X; SETUP^)>h:rX;|X; STATUS QICAX2Z,Q8X@x@ @)@ PP3MKR.TBTURBO BASIC13 jul. 1987 - E.J1^}.N.(T2!!dit programma maakt de file<!!AUTORUN.SYS aan, met daarinFeen nieuwe P: driverPTZ;A ,d/1_}/@@D1:AUTORUN.SYSn-@x"-@B:,@ *@\:7<%1`}@,,  @TBBFFFF0006F106140D003C064E0660066306E806ED064CF106A000B91A03F0BB08C8C8C8C01E1a}D0F460A950991A03A903991B03A906991C03A9128502A906BB8503A902850960A93A8D82D3A9FF8D80D3A93E8D82D3A00160A93A8D82D3BBA90081b}D80D3A93E8D82D3A00160A083609030A000B124209606D02618A524BB69018524A5256900852538A528E9018528A529E9008529A528C900D004A5B1c}B29C900D0D160A62BE002F014C99BD010AD010620B006D0EDAD0206D003C0BB01608D80D3AD80D3A9368D82D3EAA93E8D82D3A9008D1FD0AE0006A001d}0ADBB82D32980D012A90038E901D0FB88D0EFCAD0EAA08AC00160A001C00160A5""2BA00160A0926060E002E1021206 D1:PP3mkr.tb00|10 REM PP3MKR.TB20 REM TURBO BASIC30 REM 13 jul. 1987 - E.J.N.40 ------------------------------50 REM dit programma maakt5f} de file60 REM AUTORUN.SYS aan, met daarin70 REM een nieuwe P: driver80 ------------------------------90 DIM X$(120)100 5g}OPEN #1,8,0,"D1:AUTORUN.SYS"110 FOR Y=0 TO 8120 READ X$130 FOR Z=1 TO LEN(X$) STEP 2140 PUT #1,DEC(X$(Z,Z+1))1505q}B%DOS SYSB*)DUP SYSBSAUTORUN SYSBINITRTC1COMBINITRTC2COMB)RTCDRIV1TXTB+RTCDRIV2TXTB AUTORUN TXTB SETCLOCKBASBSETCLOCKTXTB-PIACENTRTXTBLPPDRIV3 M65B]PP3MKR TB B ePP3MKR LST NEXT Z160 NEXT Y170 CLOSE #1180 ------------------------------190 DATA FFFF0006F106140D003C064E0660066306E806ED064CF105r}6A000B91A03F0200 DATA 08C8C8C8C01ED0F460A950991A03A903991B03A906991C03A9128502A906210 DATA 8503A902850960A93A8D82D3A9FF8D805s}D3A93E8D82D3A00160A93A8D82D3220 DATA A9008D80D3A93E8D82D3A00160A083609030A000B124209606D02618A524230 DATA 69018524A525690085t}52538A528E9018528A529E9008529A528C900D004A5240 DATA 29C900D0D160A62BE002F014C99BD010AD010620B006D0EDAD0206D003C0250 DATA 015u}608D80D3AD80D3A9368D82D3EAA93E8D82D3A9008D1FD0AE0006A000AD260 DATA 82D32980D012A90038E901D0FB88D0EFCAD0EAA08AC00160A001C00165v}0A5270 DATA 2BA00160A0926060E002E10212061FD0AE0006A000AD260 DATA 82D32980D012A90038E901D0FB88D0EFCAD0EAA08AC00160A001C00164*