8(;F=OF SYSMOC.I   c}E q0 \C)CC8`DCeECiD` RP h1$E ȍ @y b Y)hܭ]L]` q  DMD   u j)`0  ,p0i2 &28jJ1f02 9 g iJf0i1)xԍӭ232002XԦ`  *'  } *(L `(  L l pL[,L] C i0 } p  gފދLh ( LD 0  C  C  \i +$+0'}; $(%)  b L[C `D P^߰")(݃   $DD}G@НL]S")M T H0 G$Ș݃ b 8$}$%8(() T `$E0(0)8`$GE` P} Li 8GD }L[ PH >iJ ;  yyB } ' |L[ "E( % H$ H#`L]B  0 G LO<  ( d lH۪!A3 A }jA !B EIC Y$E0 F  < 7 JN8Ndâ!,P h0ʠJd,6 } ' r/ $ ɛ ` '  L[  l }-     }    L[L  }  '  L[   p  ` g  l }) g ' }L[) ̠,L]T-0 |LM N݃:ː6UV LM N L(TU N,)M}LL[IL3GDIɛ ɜ DI  , JȊGм  G I) GȦ=}*GG ȄI1200820I H1E 1h0hIGI2ȢI`FE 0ɛ rɛ$ l '}蚦TTUVD`M L$:;Pyȱ$` r  iȱ$/:ȱ$VWyA**⩀ / }`$***? mL]-+ȱ$ɛ m* ? g. $0f.?'@ wAsTt/` }0: gL  `$0`j`& CpCi s L0JCܢj? I#}𴽎F ގМގ& & 0 C4 08L`0   | 레L] EGȽGȽ}G | E` 8,  }EG)݀G)ȱGȱG`"!L] l!i}栠$8  (IƭIp  h,g+j? 8 ii(Lq)! }S S0$} ) E9`H)N,L]8GH Lq`gNgfj****8jHi h` } 2J  &e2i`"%?&;^$IM ! ! <u hh`$}Ev옝^! 1EHFHjm GHm H`u$Ev`L=? +`!,pFE ȄD8 }q D&E`I0` i`+DOS SYSMOC.I   J ٍ = ) F)}8`Ll T!U<; Ln <JM -18     HH =}D 1 :  /1[F:M #.!  `>C #   #`>   e}L'>/b;\I\o@ @LK~ L  % /e  LL H}H0S0N:;=91D,1ɛK$ɛ`:;ʾ  ,ɛ}`XYȄ #`DTDRLUFFFCICLRSJ==CIYEEONSMDLNOOUAOOOARPLNCL#####PANVBNFR*),-PQOR}a/%<}) j ө  RES L%-, # 3 0 %   4(H 4(` }( 3  #  ZOiۨ L4RE 3 =F S Z +8!} 0+  FF % 4 4& 4(X)Y    # 4 ʤ Ȅ L"}F F LH hL4`*J 0 B B 0a   8#}    Lkl  );<  : ` 0 } T T 7̀΀$}LIl <;`<L 3   #/ ! R( 7 7   7 89i L7 ,(&  %} L480  ` Ln    `   HJJJJ h) ii0 ``0  ,BLV&}[J  B Vso Fhh` GH ,H hɐɀɡ)HDCȱCɛeCD먥D h'}N MSп` ED` OIH`hhXhh  nL Free Fil-SBreakI/O-Error 128Disk f(}ullWrite protectedFile MismatchBad FilenameDOS II+/D - Version 6.4 RUN:(c) '87 by S.D.Br`čLLockedDe)}vice doneDIR fullNot foundLoad?Bad DOSHex?AbortFromToHD) S)Eh` ɛLn ;LD1:DC.COMF SY}h0;******************************0;* RECOVER FILE CODE FOLLOWS 0;****************************** 0;* THE ACTUAL R+}ECOVER ENTRANCE %0;* IS AT LABEL NOCON. IN THE 00;* BASIC PART OF DISKTOOL THE 50;* RECOVR FLAG IS SET SO THAT @0;* T,}HE PROGRAM WILL JUMP HERE. E0;* THIS WAS DONE TO SAVE SOME P0;* CODE REPETITION. U0;**************************-}****`0DCOMM .DE 770 ; COMMAND BYTe0DBUFLO .DE 772 ; DSK BUF PTR Lp0DBUFHI .DE 773 ; D.}SK BUF PTR Hu00STSECL .BY 0 ; SEC LO STORŅ0STSECH .BY 0 ; SEC HI STORŐ0RECOVR .BY 0 ; RECOV/}ER FLAǕ0DINUML .BY 0 ; DIRECTORY NUM L1DINUMH .BY 0 ; AND H1VTOC .DS 132 ; 132 BYTE BUFFER FOR VTO110}DOREC STY TEMPY ; SAVE STATUS INDE 1 LDA DAUX2 ; GET DIR SEC H%1 STA STSECH ; SAVE I01 1} LDA DAUX1 ; GET DIR SEC L51 STA STSECL ; SAVE I@1 LDX #H,VTOC ; ALT BUF HI ADDE1 2} LDY #L,VTOC ; ALT BUF LO ADDP1 STX DBUFHI ; STUF IN IOCU1 STY DBUFLO ; ALSO L`1 3}LDX #$68 ; VTOC SECTOR 36e1 LDY #$01 ; IS $016p1 STY DAUX2 ; STUFF MSu1 STX DAUX1 4} ; STUFF LS€1 JSR DSKVEC ; LOAD VTOC INTO ALT BUFFE҅1 BPL RESBUF ; IF NO ERROR RESTORE OLD PTRӐ1 5} LDX #H,VRBAD ; MSG HI ADҕ1 LDY #L,VRBAD ; LO AD2 JSR FLIPIT ; DISPLAY I2 JSR CLRNAM ; 6}CLEAR NAM2 JMP RDERR ; ELSE EXIT W/ERRO2RESBUF JSR RESDSK ; RESTORE DSK IOC 2%2;**********************7}*********02;* RESTORE INDEX AND CK STATUS 52;*******************************@2E2 LDY TEMPY ; RESTORE INDEP2 8} LDA (PAGE0),Y ; GET STATUU2 BNE STOFIL ; JMP IF ENTR`2 JMP NOENT ; ERROR SO JMe9}2STOFIL STA FILSTA ; ELSE SAVE STATUp2 BIT FILSTA ; FILE DELETED FOR SURE?u2 BPL FIUSED ; N:}O!! USER PLAYING TRICKS2 LDX #H,PASS1 ; OK..ITS DELETEą2 LDY #L,PASS1 ; NOTIFY USER WHATS HAPNIΐ2 ;} JSR FLIPIT ; DISPLAY MSǕ23;******************************3;* TRACE SECTORS FOR CONTINUITY3;**********************<}********3 3 LDA STSECH ; RESTORE SEC H%3 STA DAUX2 ; STUF IN IOC03 LDA STSECL ; GET SEC L=}53 STA DAUX1 ; STUF IT TO@3VERIFY JSR DSKVEC ; GET A SECTOE3 BPL VGO ; JMP GOOD REAP3 J>}SR DISNAM ; DIPLAY NAU3 JSR CLRNAM ; CLR NAM`3 LDX #H,FIRDE ; MSG HI ADe3 LDY #L,FIRDE ; MSG ?}LO ADp3 JSR FLIPIT ; DISPLAY MSu3 JMP RDERR ; EXIT W/ERROҀ3VGO JSR WEIRD ; EXTRACT LO/HI NXT SECT@}O҅3 INC FILCNT ; INC SECTOR COUNTEҐ3 BNE VGOON ; BRANCH NO WRAЕ3 INC FILCNT+1 ; ELSE INC H4VGA}OON LDA FILNUM ; GET FILE # TO WHICH SEC BELONG4 CMP FINUMB ; SAME AS 1 WE SEEK4 BNE NOREC ; NO..B}FILE NOT RECOVERABLE!4 LDA CASBUF+126 ; YES. GET LO POINTE 4 ORA TOPSEC ; OR WITH HI SECTO%4 C}BEQ CKSECN ; IF ZERO..TRACE IS DON04 JSR SETUP ; ELSE SETUP NXT REA54 JMP VERIFY ; AND GET NXT SECTO@4ED}4;******************************P4;* PASS1 ERROR PROCESSING HERE U4;******************************`4e4FIUSED JSR DISNAE}M ; DISPLAY FILE NAMp4 LDX #H,NODEL ; MSG Hu4 LDY #L,NODEL ; MSG Lπ4 JSR FLIPIT ; DISPLAY IF}4EUSE JMP COMMEX ; EXIT WITH ERROҐ4NOREC LDX #H,LINKER ; MSG Hɕ4 LDY #L,LINKER ; MSG L5 JSRG} FLIPIT ; DISPLA5 JSR JUSHEX ; PUT UP A 5 LDA DAUX2 ; HI SEC 5 JSR DOONE ; DISPLAY ONLYH} LO NYBL 5 LDA DAUX1 ; LO SEC NU%5 JSR DOBOTH ; DISPLAY WHOLE THIN05 LDA #CR ; LOAD CREI}55 JSR PUTCHR ; DISPLA@5 LDX #H,NAME ; FILE: MSE5 LDY #L,NAME ; LO ADDP5 JSR FLIJ}PIT ; PUT UP MSU5 JSR DISNAM ; PUT UP FILE NAM`5 LDX #H,NORECO ; NON-RECOVER MSG He5 K} LDY #L,NORECO ; MSG Lp5 JSR FLIPIT ; DISPLAu5 JSR CLRNAM ; CLEAR FILE NAMŀL}5 BEQ EUSE ; EXIT W/ERRO҅5DOOM JSR DISNAM ; DISP NAMŐ5 JSR CLRNAM ; CLR NAMŕ5 M} LDX #H,NORECO ; ADR H6 LDY #L,NORECO ; ADR L6 JSR FLIPIT ; DISPLAY I6 JMP SORRY ; CONTIN}NUE E6 6;******************************%6;* CHECK TO SEE THAT LENGTH IN 06;* DIRECTORY MATCHES LEN OF FIL56;***********O}*******************@6E6CKSECN LDA FILEN ; ORIGINAL LP6 EOR FILCNT ; OR W/COUNU6 BNE DOOM ; NO..ERP}RO`6 LDA FILEN+1 ; ORIG He6 EOR FILCNT+1 ; OR ALSp6 BNE DOOM ; GO IF ERROu6 STA FILQ}CNT ; CLR COUNTEҀ6 STA FILCNT+1 ; LO/HɅ66;******************************6;* BEGIN PASS 2 OF FILE RECOVER7;**R}****************************77PASS2 LDX #H,OK ; OK MSG H7 LDY #L,OK ; AND L 7 JSR FLIPIT ; DISS}PLA%707;*****************************57;* GET DIRECTORY FOR OUR FILE @7;*****************************E7P7 LDA T}DINUML ; LO BYTU7 STA DAUX1 ; STUFF I`7 LDA DINUMH ; HI BYTe7 STA DAUX2 ; STUFF Ip7 U} JSR DSKVEC ; GO READ Iu7 BPL CHKDOS ; JMP GOOD RĀ7 LDX #H,DIRDE ; MSG HɅ7 LDY #L,DIRDE ; MSG LV}ϐ7 JSR FLIPIT ; DISPLAY Iԕ7 JSR CLRNAM ; CLR NAM8 JMP COMMEX ; ELSE EXIT WITH ERRO8CHKDOS W} LDY #0 ; CLEAR Y RE8 LDA VTOC ; GET VTOC DOS INDICATO8 CMP #DOSMSK ; IS IT DOS 2 8 X} BNE DOS1FL ; NO..DOS %8 LDA #$42 ; LOAD FILE USED+DOS 08 BNE STOSTA ; AND BRANC58DOY}S1FL LDA #$40 ; ELSE ONLY USE@8STOSTA STA (PAGE0),Y ; STORE NEW STATUE8 LDA #'W ; LOAD WRITE COMMANP8 Z} STA DCOMM ; STUFF IN DSK IOCU8 JSR DSKVEC ; WRITE OUT DIR SE`8 BPL WFINE ; [}JMP GOOD WRITe8 JSR RESDSK ; RESTORE DSK IOCp8 JSR CLRNAM ; ERROR CLR NAMu8 LDX #H,\}DIRWE ; MSG Hɀ8 LDY #L,DIRWE ; MSG Lυ8 JSR FLIPIT ; DISPLAِ8 LDA DAUX2 ; SECTOR MS•8 ]} JSR DOONE ; DISP 1 DIGI9 LDA DAUX1 ; SECTOR LS9 JSR DOBOTH ; DISP 2 DIG9 LDX #H,DIRWE2 ; PT^}2 H9 LDY #L,DIRWE2 ; PT2 L 9 JSR FLIPIT ; DISPLA%9 JMP COMMEX ; EXIT W/ERRO09WFINE JSR RE_}SDSK ; RESTORE DSK IOC59 LDX #H,DIRENT ; DIRECTORY DONE MSG H@9 LDY #L,DIRENT ; AND LE9 JSR FLI`}PIT ; WRITE IP9U9;*******************************`9;* NOW RETRACE EACH SECTOR AND e9;* UPDATE THE BIT MAP TO FULLY pa}9;* RECOVER THE FILE..DO NOT FOR-u9;* GET TO DECREMENT THE # OF SEC9;* TORS AVAILABLE FOR EACH SEC- 9;* TOR THAT IS ALLOb}CATED... 9;*******************************9@ LDX #H,REALO ; REALOCATE MS@ LDY #L,REALO ; HI/Lc}@ JSR FLIPIT ; DISPLA@ LDA STSECL ; LO SE @ STA DAUX1 ; STUFF I%@ LDA STSECH ; HI Sd}E0@ STA DAUX2 ; STUFF I5@RREC JSR DSKVEC ; GET A SEC@@ BPL RGO ; JMP GOOD RE@ LDX #H,e}FIRDE ; MSG HP@ LDY #L,FIRDE ; MSG LU@ JSR FLIPIT ; DISPLA`@ JSR CLRNAM ; CLEAR NAMe@ f} JMP RDERR ; GO READ Ep@RGO JSR FINDIT ; FIND VTOC BYTu@ JSR WEIRD ; GET NXT SEÀ@ LDAg} CASBUF+126 ; GET LO PT҅@ ORA TOPSEC ; OR WITH Hɐ@ BEQ RECDON ; IF 0 WE FINEETϕ@ JSRh} SETUP ; ELSE SET NXT REAA JMP RREC ; AND DO IAA;******************************A;* RECOVER FILE CLEAN UP CODi}E. A;* SAVE NEW VTOC, CLEAR FLAGS, %A;* PUT UP SUCCESS MSG AND RET. 0A;* TO BASIC. FILE IS RECOVERED.5A;* (PLEASE LET ITj} BE RECOVERED)@A;******************************EAPARECDON LDX #H,VTOC ; BUF PTR UA LDY #L,VTOC ; BUF PTR `k}A STX DBUFHI ; STUFF IeA STY DBUFLO ; STUFF IpA LDX #$68 ; SECTOR 36uA LDY #$01 l}; = $016A STX DAUX1 ; STUFƅA STY DAUX2 ; STUFƐA LDA #'W ; WRITE CO͕A STA DCOMM ; Sm}TUFF IB JSR DSKVEC ; WRITE IB BPL VOUTOK ; JMP GOOD B LDX #H,VBAD ; GET MSB LDY #n}L,VBAD ; ADDRES B JSR FLIPIT ; DISPLAY I%B JSR RESDSK ; RESTORE DSK IOC0B JMP COMMEX ; EXIT o}W/ER5BVOUTOK JSR RESDSK ; RESTORE IOC@B JSR DISNAM ; DISP NAMEB LDX #H,SUCCES ; SUCCES MSPB p} LDY #L,SUCCES ; ADDRESUB JSR FLIPIT ; DISPLAY I`B JSR CLRNAM ; CLEAR NAMeB STX RECOVR ; CLEq}AR RECOVER FLApB JMP EXIT2+1 ; RETURN TO BASIC!uBB;*******************************B;* SUBROUTINE RESDSK: RESTOr}RES B;* THE DISK IOCB TO A READ CON- B;* DITION AND POINTS THE BUFFER C;* TO CASBUF. C;***********s}********************CCRESDSK LDX #H,CASBUF ; BUF H C LDY #L,CASBUF ; BUF L%C STX DBUFHI ; STUFt}0C STY DBUFLO ; STUF5C LDX #'R ; READ CO@C STX DCOMM ; STUFEC RTS u} ; RETURPCUC;******************************`C;* SUBROUTINE FINDIT: FINDS THEeC;* APPROPRIATE BYTE OF THE VTOCpC;* AND v}THE PROPER BIT OF THAT uC;* BYTE WHICH REPRESENTS THE C;* CURRENT SECTOR OF OUR FILE. C;* THE SECTOR MAP IS UPDATED Tw}OC;* ALLOCATE THE CURRENT SECTOR C;* AS BEING USED. IN ADDITION, D;* THE NUMBER OF FREE SECTORS D;* AVAILABLE IS DECx}REMENTED SO D;* THAT DOS DOESNT GO BANNANAS.D;****************************** D%DFINDIT LDA #0 ; CLEAR OUT 0D y} LDY #3 ; PREP FOR /5DFIND0 LSR DAUX2 ; DIVIDE BY SHIFTIN@D ROR DAUX1 ; SAME FOR LED ROR A ; Az}ND ALSO A REPD DEY ; DEC CNTUD BNE FIND0 ; DO 3 SHIFTS TO DIV BY `D LDY #5 ; DETERMINE SHF{}T CNT FOR REMAINDEeDFIND1 ROR A ; ROTATE BIT IN A REpD DEY ; DEC CNuD BNE FIND1 ; DO 5 TIMEӀD|} TAY ; USE AS CNTR IN مD LDA #0 ; CLEAR D SEC ; SET OUR BIT IN CARRٕDFIND2 ROR A ; AND SH}}IFT TO PROPER POSITIOE DEY ; DEC SHFT CNE BPL FIND2 ; SHFT TIL NEGATIVE PHA ; SAVE THE PRO~}PER BIE LDA DAUX1 ; GET VTOC BYTE NUMBE E ADC #$0A ; ADD VTOC OFFSE%E TAY ; INDEX OF VTOC BYT}E TO 0E PLA ; PULL THE MAS5E EOR VTOC,Y ; CLEAR SECTOR BI@E STA VTOC,Y ; PUT BACK IN VTOEE } DEC VTOC+3 ; DEC AVAILABLE SECTORPE LDA VTOC+3 ; GET VAUE CMP #$FF ; DID WE FLIP`E BNE N}OHI ; NO.RETUReE DEC VTOC+4 ; ELSE DEC HpENOHI RTS ; AND RETURuE;******************************E;* RE}COVER FILE MESSAGES FOLLOWE;******************************EEPASS1 .BY TAB 'PASS1 - F .BY 'CHECKING FILE} CONDITION' CR NULFNODEL .BY ' IS NOT DELETED!!' CR BELL NULFNORECO .BY ', CANNOT BE RECOVERED!!' BELL CR NULFOK} .BY 'FILE INTACT' CR TAB 'PASS2 - F .BY 'RECOVERING FILE' CR NUL%FDIRENT .BY 'DIRECTORY ENTRY DONE' }CR NUL0FREALO .BY 'REALLOCATING DELETED SECTORS' CR NUL5FSUCCES .BY ' HAS BEEN RECOVERED!' BELL CR NUL@FVBAD .BY }'ERROR IN VTOC WRITE!!' BELL CR NULEFVRBAD .BY 'ERROR IN VTOC READ !!' BELL CR NULPFFIRDE .BY 'FILE READ ERROR!' B}ELL CR NULUFDIRDE .BY 'DIRECTORY READ ERROR!' BELL CR NUL`FDIRWE .BY 'DIRECTORY WRITE ERROR!' ESC RAeFDIRWE2 .B}Y BELL CR NULRDE .BY 'DIRECTORY READ ERROR!' BELL CR NUL`FDIRWE .BY 'DIRECTORY WRITE ERROR!' ESC RAeFDIRWE2 .Bh}u;*****************************;* AUTORUN.SYS SOURCE CODE ;* FOR DSKTOOL UTILITY RV3 ;* BY: TONY MESSIN}A %;* 48 DUDLEY AVE 0;* NEWPORT,RI 02840 5;* @;* THIS FIL}E RESERVES 3000 E;* BYTES OF RAM BY MOVING THE P;* MEMLO POINTER UP BEFORE U;* THE BASIC OR ASSEMBLER CART`;* G}ETS CONTROL OF THE SYSTEM.e;* p;* THIS CODE ALSO DISABLES THEu;* BREAK KEY TO PREVENT ANY };* POSSIBLE USER ERRORS FROM ;* HAPPENING. ;* PROGRAM BASED ON IDEAS ;* PRESENTED IN DE }RE ATARI ;* PGS 8-11 & 8-15 ;***************************** ;************%;* EQUATES 0;**********}**5@MEMLOL .DE $02E7 ; LO BYTE MEMLEMEMLOH .DE $02E8 ; HI BYTE MEMLPWARMST .DE $0008 ; WAR}START FLAUCARVEC .DE $A000 ; CART START VECTO`SAVBYT .DI 3000 ; # OF BYTES TO RESERVePOKMSK } .DE $0010 ; POKEY IRQ MASpIRQEN .DE $D20E ; IRQ ENABLE BITuIRQST .DE IRQEN ; IRQ STATUӀVMIRQ} .DE $0216 ; SYSTEM IRQ VECTO҅;************;* CONTROL ;************ .BA $0600 ; ORIGIN $060} .LS ; GIMME LISTIN .OS ; OBJ CODE TO ME %;************0;* PROGRAM 5;************@;**** RE}SERVE 3000 BYTES ***EPSTRES CLC ; CLEAR FOR ADU LDA MEMLOL ; GET CURRENT MEMLO LO BYT` ADC} #L,SAVBYT ; ADD 3000 Le STA MEMLOL ; STORp LDA MEMLOH ; GET CURRENT MEMLO Hu } ADC #H,SAVBYT ; ADD 3000 Hɀ STA MEMLOH ; STORE Iԅ LDA #00 ; WARMSTART RESEԐ } STA *WARMST ; STORŕ JSR SWAPEM ; DO BREAK KEY STUF JMP CARVEC ; JUMP THROUG}H CAR;***********************;* SWAP IRQ VEC ROUTINE ;* TO POINT TO OUR OWN %;* ROUTINE. WE WILL IG- 0;* NOR}E THE BREAK KEY. 5;***********************@E;*** 1ST PUT SYS IRQ IN OUR STUFF **PUSWAPEM SEI ; STOP IRQ'S F}OR NO` LDA VMIRQ ; GET SYSTEM IRQ LO ADDe STA SYSIRQ+1 ; MODIFY JMP Lp LDA VMIRQ+1 ; GET SYS} IRQ HI ADDu STA SYSIRQ+2 ; MODIFY JMP Hɀ;*** NOW PUT OUR IRQ HANDLER ADDRESS **;*** INTO THE SYSTEM VECTO}R LOCATION ** LDA #L,OURIRQ ; GET ADDR L STA VMIRQ ; STORE AS SYS VE LDA #H,OURIRQ} ; GET ADDR H STA VMIRQ+1 ; STORE IT TO  CLI ; NOW ALLOW INTERUPT% RTS ; AND RETU}R05;***************************@;* THIS IS THE ACTUAL IRQ E;* SERVICE ROUTINE. ALL WE P;* DO IS CHECK FOR A BREA}K U;* KEY. IF BREAK IS HIT, WE `;* CAUSE THE SYSTEM TO JUST e;* IGNORE IT AND THEN RETURNp;*************************}**uOURIRQ PHA ; SAVE  LDA IRQST ; WAS THIS A BREAK? BPL TISBRK ; YES IT IS! P}LA ; NO SO PULL SYSIRQ JMP SYSIRQ ; AND CALL SYSTEM ROUTIN;*** BREAK KEY HIT SO SQUASH **;*** THIS MAMA & }STOP DOOM!! ** %TISBRK LDA #$7F ; WIPE BRK BI0 STA IRQST ; PUT IN STATU5 LDA *POK}MSK ; GET POKEY MAS@ STA IRQEN ; AND STUFE PLA ; PULL P RTI ; AND RETURN FROM INTE}RUPU`;************e;* END PROG p;************u .EN ; THE ENP P RTI ; AND RETURN FROM INTEU.(.A1A2DDNMKKPDPRNTRMINCMINHFCTNUNITDAYNEGUNITGNEHCLOYHIYUDKPCLCLCLCLANEAVYU }SCOSDDDIDDAVTIMSEHLIN@H  A` A A A } @% @AB@(@(@X@S7AE@y@@e@x@&A }B@ @!"#@($?I%&'()* }+,-.  (}@( THERMOWATTS""( GAS & ELECTRICITY( }$!( ANALYSIS PROGRAM$(2"( BY JOE HARB"(<e(e(ZDURING OPERATION OF THIS PROGRAM, DO NOTDEPRES }S RETURN KEY AFTER TYPING ANSWERS TO PROMPTSFo#@@K:oOPEN KEYBOARD TO GET INPUTS WHEN GET STATEM }ENT IS USED THROUGHOUT PROGRAMP:('(DEPRESS ANY KEY TO CONTINUE.4)@:(}d]];@ ,;@,;@ },;@,;@,;@,;@e,;@,n]6-A6-A'6-A]MINCD=MINIMUM COOLING DAYS }NECESSARY FORCOMPUTATIONxllA1$ & A2$ ARE USED TO PRINT VARIATIONS OF THE WORDS KWATTS OR THERMS SO ONE SUBROUTINE CAN BE U }SED FOR$$ELECTRICITY OR GAS COMPUTATIONaaCALCULATE: TOTAL MONTHS OF DATA (NR); LOW YEAR OF DATA (LOYR); AND HIGH YEAR } OF DATA (HIYR)6-"VVM$=MONTH, Y=YEAR, UNITS=KILOWATTS USED & GUNITS=GAS THERM USED IN }BILLING PERIOD((DAYS=NR. OF DAYS IN BILLING PERIODSSNET=COST OF ELECTRICITY WHEN BILL PAID ON TIME, GNET=COST OF GAS }PAID ON TIMEiiCALCULATE NR. OF MONTHS OF INFO IN DATA BASE(NR), HIGH YEAR OF DATA(HIYR), & LOW YEAR OF DATA(LOYR) 6- } #"" 4END# A ,6-%@6-6 AjjSUBROUTINE TO GET INPUT FOR ME }NU OPTIONS A, B, E, F; THEN CLEAR INPUT QUESTIONS FROM SCREEN TO ALLOW DISPLAY OF ADDITIONAL DATA\5(-TYPE FIRST THRE }E LETTERS OF MONTH YOU WANT.B)@O)@\)@DDNEXT LINE CONVERTS ATASCI VALUES TYPED ON KEYBOARD } TO A STRINGG 6.>:,#67B:,%@,.>:,:67B:,%@,.>:,D A0G$p @F:@,&@4- }@`(' d p39 SPACES# @F:@,&@#$((JAN,79,624,16, }26.20,51,36.18,984,0))FEB,79,602,31,25.98,60,42.40,1100,0))MAR,79,536,29,21.65,55,40.61,520,15((APR,79,454,30,19. }80,49,35.20,354,4((MAY,79,527,32,27.91,40,31.55,75,72((JUN,79,768,29,38.46,33,22.75,6,183((JUL,79,1281,30,55.65,1 }0,9.04,2,348&&AUG,79,691,29,36.45,8,8.50,3,341**SEP,79,1242,32,52.16,12,14.26,22,145))OCT,79,571,30,24.43,20,20.1 }1,311,28((NOV,79,686,32,27.92,32,25.67,425,1((DEC,79,688,31,26.75,49,40.03,757,0((JAN,80,619,28,24.45,53,38.88,96 }2,0((FEB,80,527,32,20.97,57,45.98,967,0((MAR,80,520,29,21.41,50,41.09,723,0((APR,80,521,30,24.64,39,23.05,273,0 }((MAY,80,591,32,34.82,22,18.97,74,97((JUN,80,739,29,37.98,16,10.49,6,203((JUL,80,1603,30,98.70,11,7.43,0,415&&A }UG,80,838,29,53.52,8,6.66,0,431**SEP,80,1530,32,74.26,15,10.77,20,245))OCT,80,589,30,30.45,28,22.84,311,17((NOV,8 }0,690,33,30.21,33,27.64,620,0((DEC,80,770,31,33.04,41,34.49,908,0))JAN,81,642,28,28.85,58,53.37,1145,0kEND,999,0 },0,0,0,0,0,0MENU SUBROUTINE>;(3THIS PROGRAM ALLOWS THE FOLLOWING SELECTIONS:>(<<(4 A. TOTAL MONTHLY }AND AVERAGE DAILY KILOWATT USE==(5 B. TOTAL MONTHLY AND AVERAGE DAILY KILOWATT COST44(, C. TOTAL ANNUAL KILOW }ATT USE AND COST44(, D. PRINTOUT OF ALL ELECTRICAL USE DATA==(5 E. TOTAL MONTHLY AND AVERAGE DAILY GAS THE }RM USE ::(2 F. TOTAL MONTHLY AND AVERAGE DAILY THERM COST//(' G. TOTAL ANNUAL THERM USE AND COST ,,($ H }. PRINTOUT OF ALL GAS USE DATA*''( I. DATA INPUT INSTRUCTIONS4( J. EXIT PROGRAM>XXGET IS USED TO DETERMI }NE LETTER TYPED ON KEY BOARD; A=ATASCI VALUE OF LETTER TYPEDH9&(TYPE LETTER OF OPTION YOU WANT3)@9(}Rw6- }#"@eA0wT IS FLAG TO TELL LATER SUBROUTINES WHETHER GAS OR ELECTRICITY ANALYSIS REQUESTED\"@f }A@f"@gAPpS"@h/@@P:9 A`SOPEN CHANNEL TO PRINTERz#6-@ }#"@iA0"@pA@"@qAP9"@r/@@P:9 A` }"@sAp$"@t!@@$ ''SUBROUTINE FOR MENU OPTIONS A & E A &" }6.COOL&6.KWU  &"@6.HEAT&6.THERM C,(" AVG TOTAL AVG C15 SPACES BEF }ORE AVG **( TOTAL DAILY  USE ,,(   DGREE PER  //('MONTH USE USE D }AYS DGREE DAY -@ " 0A2  6-"@6-& Y6-P:A$','A }YCOMPUTE UNITS PER DAY AND LIMIT DECIMAL PLACES DISPLAYED0 #"6-#!A1P: 1"@6-! }'6-1 A1PD ! )6.N/A! A1pN X06-P:A$+&,'++'@0,$,,'A96.=:,XCOMPUTE UN }ITS PER DEGREE DAYX 66LINES 3170-3190 ALIGN AND PRINT SCREEN DISPLAYb \6-@&B:=:P:,,,16-@&B:=:P:,,,E6 }-@'&B:=:,,\6-@2&B:=:P:,,,l O(  "-F:@,'(6-F:@,;(J-F:@,O(v - }F:@,(   # L(?(4DO YOU WANT TO LOOK AT ANOTHER MONTH? TYPE Y OR N.L)@ -"@ A0 }# A- A0p  (} A ''SUBROUTINE FOR MENU OPTIONS B & F A%%(MONTH TOTAL TOTAL }UNIT'6.KWU "@'6.THERM;%(  COST COST;9 SPACES BEFORE A1$-@" }0AA' 6-6-"@!6-'6-: 6-P:B$+',,'B:CALCULATE COST PE }R UNIT.6-@&B:=:,,.6-@&B:=:P:,,,U( -F:@,(( 7-F:@,<(Q-@%F: }@,U(   # (L(?(4DO YOU WANT TO LOOK AT ANOTHER MONTH? TYPE Y OR N.L)@"-"@ A0 }# A- A@@, (} A ''SUBROUTINE FOR MENU OPTIONS C & G'"6.COOL'6.KWATTS3 }"@6.HEAT'6.THERMS36- 6-D,(  AVG D22 SPACES BEFORE DDN$E }-(  DGREE PER DGREEE9 SPACES BEFORE DGREE((( YEAR USED COST DAYS DAY36-6- }'6-36--@"' 6-6-"@!6-'6-AQP }1"6-'6-1 AQ@1"@6-'6-1 AQ@  6-%6-%& } 6-%6-%   #(66-!66-P:A$','A2Y6-@&B:=:,,.6-@&B:=:P:,,, }B6-@&&B:=:,,Y6-@0&B:=:P:,,,<8(%A-F:@,$(3-F:@,8(F*-F:@,(&- }F:@,*(P'6-%@' %@AP`Z7*("DEPRESS ANY KEY TO RETURN TO MENU.7)@d (} A }o::SUBROUTINE FOR MENU OPTIONS D & H FOR (LINE PRINTER)p6-6-O(/TYPE NUMBER OF LINES PER PAGE T }O BE PRINTED\)@i)@6-++&@H,$@,%+&@H,zK3>:@',>:@V,KDISABLE EPSON P }RINTER "END OF PAPER" FUNCTIONK6.KWATTS6.COOL'"@46.THERMS?6.HEATK6-P7(@& } TOTAL AVGP26 SPACES BEFORE TOTALO7(@  O26 SPAC }ES BEFORE DDN$L6(@  TOTAL DEGREE PERL9 SPACES BEFORE A1$>;(@*YEAR USED C }OST DAYS DGR DAY>36-%@6-36-6-'6-36-WK6.A } W65 SPACES9-@9CALCULATE ANNUAL CONSUMPTION AND COST }"' 6-6-"@!6-'6-Aa1"6-'6-1 Aap }1"@6-'6-1 Aap 6-%6-%& 6-%6-%$   #.66-! }66-P:A$','A8%%67@&B:=:,,<@,.=:,B((67@&B:=:P:,,,<@!,.=:,L%%67@(&B:=:, },<@0,.=:,V((67@3&B:=:P:,,,<@6,.=:,`((@%A(6-%@j'6-%@' %@ }A`t36-%@ggCALCULATE AND PRINT MONTHLY DATA. SUBROUTINE 6410 PRINTS COLUMN HEADINS ON EACH SHEET O }F PAPER Ad Adp =6.KWATT6.COOL&"@26.THERM=6.HEAT]F @3 } ]51 SPACES BEFORE A1$HH @+MONTH DAILY MONTHLY TOTAL COST  } PER(`J @  # MONTHLY PER DEGREE DEGREE`9 SPACES BEFORE A1$2kG @# } USE USE COST  DAYS DAYU6-%@k9 SPACES BEFORE USE<$F 6.JAN AfP 6.FE }B AfZ 6.MAR Afd 6.APR Afn 6.MAY Afx 6.JUN Af 6.JUL Af } 6.AUG Af 6.SEP Af 6.OCT Af 6.NOV Af 6.DEC Af@ }(} A -@JJ6.@ " }0Ah' 6-6-"@!6-'6- 6-P:A$+',,'A 6-P:A$+',,'A }#"6-#Ag#"@6-#Ag"#  ) 6-# Ag,906-P:A }$+&,'++'@0,$,,'A96.=:,6((67@&B:=:P:,,,<@,.=:,@%%67@&B:=:,,<@,.=:,J((6 }7@%&B:=:P:,,,<@',.=:,T((67@1&B:=:P:,,,<@4,.=:,^%%67@A&B:=:,,<@@,.=:,h4" }*67@I<@Q,.N/A4 Agr((67@H&B:=:P:,,,<@Q,.=:,| @ #6-%@" }#6-@   #"AhP4DECAh`M@(8INSERT ANOTHER SHEET OF PAPER; THEN DEPRESS ANY } KEY.M)@%6-6-% Ad"36-%@""Ah $W++INSTRUCTIONS FOR PREPARI }NG DATA LINESX (}6-%A bKH(@FOR EACH MONTH OF DATA YOU HAVE, YOU MUST TYPE ONE DATA LINE.K(l11()THE FI }RST DATA LINE MUST BE NUMBERED 1000vVV(NAFTER THAT, EACH DATA LINE MUST BE NUMBERED ONE HIGHER THAN THE LAST, FORI }F(>EXAMPLE 1000 MUST BE FOLLOWED BY 1001, 1002, 1003, 1004, ETC.I(J=(5DEPRESS ANY KEY WHEN READY FOR NEXT INSTRUCT }IONS.J)@&&(REQUIRED FORMAT FOR DATA LINE:55(-1000 DATA OCT,82,1350,30,79.25,40,35.20,675,0(DATA ITE }MS ARE:))(!1. MONTH; MUST BE 3 LETTERS LONG.((( 2. YEAR; MUST BE 2 NUMBERS LONG.00((3. NUMBER OF KILOWATTS USED D }URING MONTH++(#4. NUMBER OF DAYS IN BILLING PERIODSS(K5. NET COST OF ELECTRICITY IN BILLING PERIOD. DO NOT USE '$' }BEFORE COST.77(/6. NUMBER OF THERMS USED DURING BILLING PERIOD...(&7. NET GAS COST DURING BILLING PERIOD.11()8. H }EATING DEGREE DAYS IN BILLING PERIOD.11()9. COOLING DEGREE DAYS IN BILLING PERIOD. 22((THE LAST LINE OF DATA YOU ENTER }ED WAS: ((( NOW BEGIN TYPING NEW DATA LINES.D:THERMOWT.BASLING PERIOD. 22((THE LAST LINE OF DATA YOU ENTER JhA;**********************;* CHANGE SECTOR LINKS ;**********************ENTLNK JSR DSKVEC ; READ SECTO } BPL CHGLNK ; JMP GOOD REA JMP DERR ; ELSE ERROCHGLNK JSR WEIRD ; BREAK UP FI&SECTO JM}P EXIT2 ; AND RETURNEWLNK LDA FILNUM ; GET NEW FIL  ROL A ; ROLL IT " ROL A } ; BITS LEF$ ORA TOPSEC ; OR IN HI SECTO& STA CASBUF+125 ; STUFF BAC( JMP EXIT2 ;} AND RETUR0;****************2;* EXTRACT HI/LO 4;* NEXT SECTOR 6;* SUBROUTINE 8;* THIS AVOIDS A @;* HORRENDOU}S BUGB;* OF TYING UP D;* THE STACK (AT F;* LEAST I HOPE) H;****************PRWEIRD LDA CASBUF+125 ; GET WEI}RDT PHA ; STUFF AWAV AND #$03 ; MASK OFF BITS 2-X STA TOPSEC ; STUFF HI B` PLA  }; GET STUFFED BYTb LSR A ; RIGHT JUSTIFd LSR A ; FILE NUMBEf STA FILNUM ; STUFF Ih  } RTS ; GO HOMp;**** TRACE SECTORS ENTERS HERE ***rTRASEC LDA CONTIN ; FIRST TIMEt BEQ NOCON ; YES..DO P }ULLv PLA ; JUST PULL VAR PASSEx JMP SETY ; NO..NO PULLӀNOCON PLA ; PULL OUT VAR CNԂ  } PLA ; PULL START HɄ STA DAUX2 ; STORE FOR REAĆ STA DINUMH ; STO FOR RECOֈ PLA ; G }ET START Lϐ STA DAUX1 ; STORE FOR REAĒ STA DINUML ; STO FOR RECO֔ PLA ; INDEX Hɖ } STA *PAGE0+1 ; STORŘ PLA ; INDEX L STA *PAGE0 ; STOR PLA ; FILE# H PLA ; FI}LE# L STA FINUMB ; STORE I JSR DSKVEC ; READ SECTO BPL NOERR ; BRANCE NO ERROERRTRP } JMP RDERR ; ERROR..JUMNOERR LDX #11 ; NAME COUN LDY #15 ; INDEX CNLOADIT LDA (PAGE0),Y ; GET LETTE}  STA NAMBUF-1,X ; STUFF IT " DEY ; DEC $ DEX ; AND & BNE LOADIT ; GET MOR( } LDA (PAGE0),Y ; GET START L0 STA DAUX2 ; STUF2 DE4 LDA (PAGE0),Y ; GET L6 }STA DAUX1 ; STU8 DE@ LDA (PAGE0),Y ; GET FI LEN HB STA FILEN+1 ; SAVE FOR CKD DE}F LDA (PAGE0),Y ; FI LEN LH STA FILEN ; SAVE IT TOP DER LDA RECOVR ; ARE WE D}OING RECOV FILT BEQ STCHK ; NO..CHECK STATUV JMP DOREC ; YES..DO RECOVERXSTCHK LDA (}PAGE0),Y ; GET STATU` BEQ NOENT ; IF ZERO, NO ENTRb STA FILSTA ; STORE Id BIT F}ILSTA ; FILE DELETED?f BPL ITSUSD ; NO..ITS USED!h JSR DISNAM ; YES..PUT NAMp STX ERRFLG ; N}OTE ERROr JSR DELETE ; PUT DEL MSt JMP EXIT2+1 ; AND SCRAvNOENT LDX #H,NOMSG ; MSG ADDx } LDY #L,NOMSǀ JSR FLIPIT ; DISPLAY MSǂ LDA FINUMB ; FILE NUMBE҄ JSR DOBOTH ; DISPLAن } JMP COMMEX ; COMMON ERROR EXIԈ;**** FILE USED PUT UP NAME ETC ***ITSUSD LDX #H,NAME ; MSG ADDҒ } LDY #L,NAME ; HI/Lϔ JSR FLIPIT ; DISPLAٖ JSR DISNAM ; PUT UP NAMŘ LDX #H,SE}CMSG ; MSG ADD LDY #L,SECMS JSR FLIPIT ; FLIP MSG LDA DAUX2 ; GET TRUE START SECTO } JSR DOONE ; DISP HE LDA DAUX1 ; GET L JSR DOBOTH ; DISPLAY TOSETY LDY #16 } ; DO 17 LINE STY YCNT ; SAVE CNDORETN LDA #CR ; CARR RE JSR PUTCHR ; DISPLA  } LDX #7 ; 8 SECTORS/LIN" STX XCNT ; SAVE I$DOREAD JSR DSKVEC ; READ SECTO& BPL } DRIVON ; JMP GOOD REA( JMP RDERR ; BAD READ!0DRIVON JSR WEIRD ; EXTRACT WEIRD BYT2 IN!}C FILCNT ; INC COUNTE4 BNE GOON ; NO WRAP YE6 INC FILCNT+1 ; ELSE INC H8GOON LDA FILNUM "} ; GET THIS FILE @ CMP FINUMB ; SAME AS 1 WE SEEK?B BNE OOPS ; NO!!! OOPS.D LDA CASBUF+#}126 ; GET LO PTF ORA TOPSEC ; OR WITH HI BYTE!H BEQ WEDONE ; IF ZERO THEN D$}ONP JSR SETUP ; ELSE SETUP FOR NXT REARDOASEC JSR SECDIS ; DISPLAY TRACE SECTOT DEC XC%}NT ; DEC CNTV BPL DOREAD ; IF NOT DONE 8 THEN GET NXX LDA #1 ; ELSE SETUP NXT LIN` &} STA FAKFLG ; FOR ONLY b DEC YCNT ; DEC LINE CNd BPL DORETN ; IF NOT 16 GO BACf '} STA CONTIN ; ELSE SET CONTINUE FLh JMP EXIT2+1 ; AND ESCAPE..WE WILL RETURpOOPS JSR CLRNAM ; CLEAR NAMr(} LDX #H,LINKER ; MSG ADDt LDY #L,LINKEv JSR FLIPIT ; DISPLAxONMOER JSR JUSHEX )} ; PUT UP  LDA DAUX2 ; HI SEÂ JSR DOONE ; DISP JUST Lτ LDA DAUX1 ; LO SEÆ JSR D*}OBOTH ; DISPLAوLASMSG LDX #H,ODAMSG ; MSG Hɐ LDY #L,ODAMSG ; MSG Lϒ JSR FLIPIT ; PUT IT UДCOMMEX+} LDA #1 ; RESTORE FAKŖ STA ERRFLǘCLRFAK STA FAKFLG ; RESET FAK LDA #0 ; CLR CONTI,} STA FILCNT ; CLEAR COUNT STA CONTI STA FILCNT+1 ; HI CL JMP EXIT2+1 ; AND SCR-}AWEDONE LDA FILEN ; GET ORIGINAL L EOR FILCNT ; OR WITH COUNTE BNE SORRY .} ; IF NOT ZERO..SORR LDA FILEN+1 ; DO HI NO EOR FILCNT+1 ; OR THE  BN/}E SORRY ; SAME AS ABOV" STA FILCNT ; CLR FOR NXT TIM$ STA FILCNT+& LDX #H,STOPMS0} ; ANNOUNCE WE DON( LDY #L,STOPMS ; TO THE WORL0 JSR FLIPIT ; DO I2 LDA #CR 1} ; CARR RE4 JSR PUTCHR ; DO I6 LDA #1 ; LOAD TO CL8 JMP CLRFAK ; EXIT GRAC2}IOUSL@SORRY LDX #H,FILMSG ; MSG ADDB LDY #L,FILMSD JSR FLIPIT ; PUT IT UF LDA FILEN+H3} JSR DOBOTP LDA FILER JSR DOBOTT LDX #H,FIMSG1 ; NEXV LDY #L,FIMSGX 4} JSR FLIPIT ; DISPLA` LDA FILCNT+b JSR DOBOTd LDA FILCNf JSR DOBOTh 5} LDX #H,FIMSG2 ; LASp LDY #L,FIMSGr JSR FLIPIT ; DISPLAt LDA #0 ; CLEAR FILCNv 6} STA FILCNx STA FILCNT+ JMP COMMEX ; NOW EXIT W/ERRO҂;*******************;* MORE SUBROUTINES 7};* FOLLOW ;*******************FLIPIT LDA DISMSG+1 ; OLD PTҔ STA TEMP LDA DISMSG+8} STA TEMP STY DISMSG+1 ; POINT T STX DISMSG+2 ; NEW MS JSR 9}MSG ; PUT UP THE MS LDA TEMP1 ; RESTORE OL STA DISMSG+1 ; MSG POINTE LDA TEMP :} STA DISMSG+ LDX TEMPX ; RESTORE X& LDY TEMPY ; ALS RTS ; THEN RETUR SETUP LDA TOP;}SEC ; SECTOR MS" STA DAUX2 ; STORE FOR NXT REA$SETUP2 LDA CASBUF+126 ; SECTOR LS& STA D<}AUX1 ; STORE FOR NXT REA( RTS ; AND RETUR0DISNAM LDX #0 ; START AT ZER2GETMOR LDA NAMBUF,X ; GET LETTE=}4 JSR SAVX6 JSR PUTCHR ; DISPLA8 JSR RESX@ INB CPX #1D BCC G>}ETMOF RTS ; GO BACK..JACH;*********************P;* HERE ARE THE MSGS R;*********************TVNAME ?} .BY 'FILE: ' NULXSECMSG .BY SP SP SP SP ' START SECTOR:$' NUL`DELMSG .BY ' IS DELETED!!' BELL BELL CR NULbLINKE@}R .BY CR 'FILE NUMBER MISMATCH AT SECTOR' ESC RAd .BY NULfODAMSG .BY CR 'CHECK PREVIOUS SECTOR LINKS!!hA} .BY BELL BELL NULpRDMSG .BY 'CANNOT READ SECTOR:' ESC RAR '$' BELL NULrNOMSG .BY CR 'NO ENTRY FORB} FILE' ESC RAR '$' BELL NULtSTOPMS .BY SP 'END' NULvFILMSG .BY CR 'ORIGINAL SECTOR COUNT' ESC RAR '$' NULxFIMSG1 C} .BY CR 'ACTUAL SECTORS LOADED' ESC RAR '$' NUL̀FIMSG2 .BY CR 'SHORT FILE ERROR!!' BELL CR NUL̂DELETE LDX #H,DELMD}SG ; POINT Tτ LDY #L,DELMSG ; DELETEĆ JSR FLIPIT ; DISPLAو RTS ; RETURΐRDERR LDX #H,RE}DMSǒ LDY #L,RDMSǔ JSR FLIPIT ; DISPLAٖ LDA DAUX2 ; SECTOR Hɘ JSR DOONE ; DISPLAF} LDA DAUX1 ; SECTOR L JSR DOBOTH ; DISPLA LDA #CR ; LINE FEE JSR PUTCHR ; DO IG} JMP COMMEX ; AND EXI;********************;* TRACE SECTOR VARS ;********************XCNT .BY YH}CNT .BY TEMP1 .BY "TEMP2 .BY $TEMPX .BY &TEMPY .BY (CONTIN .BY 0FILCNT .BY 0 2;****I}***********************4;* THIS SUBROUTINE DISPLAYS 6;* THE SECTOR TRACE IN THE 8;* FORM >$XXX. DEPENDING ON @;* THEJ} FAKFLG VALUE THE 1STB;* VALUE OF EACH LINE WILL D;* BE OF THE FORM $XXX. F;***************************HSECDIS K} JSR SAVXY ; SAVE X&P LDA FAKFLG ; ONLY $XXX THIS TIMER BEQ DOPREF ; NO-DO >T L} JSR JUSHEX ; YES-JUSTV JMP FAKEONE ; THEN JUMXDOPREF LDA #ESC ; SEND ESC FIRS` M} JSR PUTCHR ; SEND Ib LDA #RAR ; LOAD RIGHT ARROW CHAd JSR PUTCHR ; SEND If JSR JUSHEX N}; PUT UP hFAKEONE LDA TOPSEC ; GET UPPER NYBLp JSR DOONE ; DISPLAY ONLY LO NYBLr LDA CASO}BUF+126 ; GET LO BYTt JSR DOBOTH ; DISPLAY Iv LDA #0 ; LOAD ZERx STA FAKFLG P} ; CLEAR FAKFLǀ RTS ; AND RETUR΂;*********FAKFLG .BY 1 ; INITIALLY ONņ;*********;**Q}**************;* PRINT 1 BYTE ;****************DOONE JSR CONVERT ; CONVERT TO ASCIɘ JSR ONEBYE ; DIR}SPLAY LO NYBLE ONL RTS ; AND RETUR DOONE JSR CONVERT ; CONVERT TO ASCIɘ JSR ONEBYE ; DI8 &A K +@'0@@A0@K@-A@T},/@( 2-@A@<,@ /@0F P-AU}Z,@@/@Pd D:G8COLORS.BAS@<,@ /@0F P-A:'**DDNMKKPDPRNTRMINCMINHFCTNUNITDAYNEHCLOYHIYDUKPCLCLCLCLAVYUSCOSDDDIDDAVTIMW}SEHCDDICDTOHDDIHDTOCDAVHDAVHAVCAVLIN X} Y} !"#$%&'(Z})*+,-./0 @""(} KILOWATTS!!([} ELECTRICITY($$( ANALYSIS PROGRAM2!!( BY JOE HARB<mm(eDURING OPERATION OF\} THIS PROGRAM, DO NOT DEPRESS RETURN KEY AFTER TYPING ANSWERS TO PROMPTS.Fn#@@K:nOPEN KE]}YBOARD TO GET INPUTS LATER IN PROGRAM WHEN GET STATEMENT IS USEDP4('(DEPRESS ANY KEY TO CONTINUE.4)@ZGG;^}@,;@,;@,;@,;@e,;@,d]6-A6-A'6-A]MINCD=MINIMUM COOLIN_}G DAYS NECESSARY FORCOMPUTATIONn11MINHD=MINIMUM HEATING DEGREE DAYS NECESSARYxbbFCTR=NR. OF KILOWATTS TO BE SUBTRACTED `}FROM MONTHLY KILOWATT USE WHEN COMPUTING DEGREE DAYS.ooSUBTRACTING FCTR REDUCES EXTENT TO WHICH OTHER HOUSEHOLD ELECTRICIa}TY USE BIASES HEATING AND COOLING STATSaaCALCULATE: TOTAL MONTHS OF DATA (NR); LOW YEAR OF DATA (LOYR); AND HIGH YEAR OF b}DATA (HIYR)6-"CCM$=MONTH, Y=YEAR, UNITS=KILOWATTS USED USED IN BILLING PERIOD((DAYS=NRc}. OF DAYS IN BILLING PERIODXXNET=COST OF ELECTRICITY WHEN BILL PAID ON TIME,DD=DEGREE DAYS DURING BILLING MONTHHD=Hd}EATING DEGREE DAYSCD=COOLING DEGREE DAYS 6- #"", 4END# A 66-%@6-e}@ AmmSUBROUTINE TO GET INPUT FOR MENU OPTIONS A & B; THEN CLEAR INPUT QUESTIONS FROM SCREEN TO ALLOW DISPLAYf}OF ADDITIONAL DATA]6(.}TYPE FIRST THREE LETTERS OF MONTH YOU WANT.C)@P)@])@DDNEXTg} LINE CONVERTS ATASCI VALUES TYPED ON KEYBOARD TO A STRINGG 6.>:,#67B:,%@,.>:,:67B:,%@,.>:,D A0q}RB&DOS SYSB_*DTLRECO ASMBAUTOMAKRASMB]THERMOWTBASBQDTOOL2 ASMBSG8COLORSBASBVVKILOWATTBASB2MAZERIDEBASB MENU BMOIRE BASBSNOW BASB~DTOOL1 ASMG$p @F:@,&@4-@`(' d p39 SPACES# @r}F:@,&@#$""ҠӠϠśkEND,999,0,0,0,0,0MENU OPTIONS?<(4}THIS PROGRAM ALs}LOWS THE FOLLOWING SELECTIONS:?(DD(< A. TOTAL MONTHLY AND AVERAGE DAILY KILOWATT USEEE(= B. TOt}TAL MONTHLY AND AVERAGE DAILY KILOWATT COST<<(4 C. TOTAL ANNUAL KILOWATT USE AND COST<<(4 Du}. PRINTOUT OF ALL ELECTRICAL USE DATA''( E. DATA INPUT INSTRUCTIONS ( F. EXIT PROGRAM(4'(Tv}YPE LETTER OF OPTION YOU WANT.4)@ WWGET IS USED TO DETERMINE LETTER TYPED ON KEYBOARD; A=ATASCI VALUE OF LETTER w}TYPED*"@eA04"@fA@>"@gAPHM"@h A!`9@@x}P:C BM A`R"@iAp\$"@p!@@$f A ppPRINTER ERROR MESSAGEy}z?@+(PRINTER IS NOT ON-LINE!5 B? A p ""SUBROUTINE FOR MENU OPTION A A lU(MDO YOU z}WANT TO INCLUDE INFORMATION ON HEATING(H), COOLING(C) OR NEITHER(N)?b)@l A0 &"@g6.COOL&6-{} &"@r6.HEAT&6-@ 2"@x6. &6-@26- ,,($MONTH TOTAL AVG T|}OTAL AVG KWU A+(! KWU DAILY DGREE PER A8 SPACES BEFORE KWU E.(& KWU USE DAYS DGREE DAY}}E14 SPACES BEFORE KWU -@ " 0A2& Y6-P:A$','AYCOMPUTE UNITS PER~} DAY AND LIMIT DECIMAL PLACES DISPLAYED0 %"6-!% A1P: %"@6-!% A1PD +"@}))!6.N/A+ A1pN X06-P:A$+&,'++'@0,$,,'A96.=:,XCOMPUTE UNITS PER DEGREE DAYX >>}LINES 3170-3190 USED TO ALIGN AND PRINT SCREEN DISPLAYb \6-@&B:=:P:,,,16-@&B:=:P:,,,E6-@&&B:=:,,}\6-@2&B:=:P:,,,l J( -F:@,"(1-F:@,6(E-F:@,J(v -F:@,(  } # L(?(4DO YOU WANT TO LOOK AT ANOTHER MONTH? TYPE Y OR N.L)@ -"@ A0# A- A0}  (} A ""SUBROUTINE FOR MENU OPTION B A%%(MONTH TOTAL TOTAL UNIT;%( KWU } COST COST;9 SPACES BEFORE KWU-@"0A@> 6-P:B$+',,'B>}CALCULATE AVERAGE DAILY USE16-@&B:=:P:,,,16-@&B:=:P:,,,U( -F:@,(( 7-F:@},<(Q-@%F:@,U(   #L(?(4DO YOU WANT TO LOOK AT ANOTHER MONTH? TYPE Y OR N.L)@}-"@ A0# A- A@0 (} A ""SUBROUTINE FOR MENU OPTION C_L(D}DO YOU WANT TO INCLUD}E INFORMATION ON HEATING (H) OR COOLING (C)?Y)@_6-&"@g6.COOL&6-&"@r6.}HEAT&6-@G/(  AVG KWATTG22 SPACES BEFORE DDN$G.(&YEAR KWATTS DGREE P}ER DGREEG10 SPACES BEFORE DGREE((( USED COST DAYS DAY36-6-'6-36-}-@"AQ@1"6-'6-1 AQ01"@6-}'6-1 AQ0 6-%6-%&  6-%6-%   #66-!66-P:A$','A}(H6-@&B:=:P:,,,16-@&&B:=:P:,,,H6-@0&B:=:P:,,,2T(%A  ,-F:@,1(}@-F:@,E(T-F:@,<(F'6-%@' %@AP`P#Z:(-("DEPRESS ANY KEY TO RETURN T}O MENU.:)@d A o""SUBROUTINE FOR MENU OPTION Dp6-6-Q(1}TYPE NUMBER OF LINES PER }PAGE TO BE PRINTED.^)@k)@6-++&@H,$@,%+&@H,zC3>:@',>:@V,CDISABLE }EPSON "END OF PAPER" FUNCTION\C(@2 TOTAL AVG TOTAL AVG\24 SPACES BEFORE TOTAL]}E(@4 HEAT KWATT COOL KWATT]24 SPACES BEFORE HEAT[C(@2 KWATTS TOT}AL DGR PER DGR PER[8 SPACES BEFORE KWATTJG(@6YEAR USED COST DAYS DGR DAY DAYS DGR DA}YJ36-%@6-c6-6-'6-36-?6-K6-W6-c6-}hhCDDIV & HDDIV ARE NUMBER OF ANNUAL KILOWATTS FOR HEATING & COOLING. ONLY MONTHS WITH MORE THAN 100nnCOOLING OR 200} HEATING DEGREEDAYS ARE INCLUDED. 500 KWATTS PER MONTH SUBTRACTED BY FCTR FOR OTHER ELECT.ggCDTOT & HDTOT ARE TOTAL HEATI}NG/COOLING DEGREES PER ANNUM FROM MONTHS WITH SUFFICIENT DEGREE DAYSWK6.A } W65 SPACES9-@9CALCULATE ANNUAL CONSUMPTION AND COST"Aa} !6-%6-%& !6-%6-%& 6-%6-%$   #.*!*6-P:A$','A8}*!*6-P:A$','AB;(@%A;67@&B:=:,,<@,.=:,L((67@&B:=:P:,,,}<@,.=:,V%%67@%&B:=:,,<@$,.=:,`((67@0&B:=:P:,,,<@2,.=:,j%%67@A&B:=:,,<@@,.=}:,t((67@E&B:=:P:,,,<@G,.=:,~(@6-%@'6-%@' %@A`p# 36}-%@hhCALCULATE AND PRINT MONTHLY DATA. SUBROUTINE 6410 PRINTS COLUMN HEADINGS ON EACH SHEET OF PAPER Ad} Ad` qR(@A KWAT KWAT`6-%@q47 & 10 SPACES}_Q(@@MONTH DAILY MNTHLY MNTHLY COST HEAT PER COOL PER_6-%@uR(@A KWATT} KWATT COST PER DGRE DGRE DGRE DGRE`6-%@u8 SPACES BE4 KWATT(pQ(@@ USE USE } KWU DAYS DAY DAYS DAYT3b6-%@p8 & 13 SPCS2$< 6.JAN AfF 6.FEB Af}P 6.MAR AfZ 6.APR Afd 6.MAY Afn 6.JUN Afx 6.JUL Af 6.}AUG Af 6.SEP Af 6.OCT Af 6.NOV Af 6.DEC Af@(}} A :-@:CALCULATE MONTHLY CONSUMPTION AND COST"6-6-0}Ah (@ WK6.A W65 SPACES 6-}P:A$+',,'A((67@&B:=:P:,,,<@,.=:,%%67@&B:=:,,<@,.=:,"((67@"&B:=:P:,},,<@$,.=:,, 6-P:A$+',,'A6((67@(&B:=:P:,,,<@1,.=:,@%%67@9&B:=:,,<@8,.=:,}J* !*6-P:A$++&,',,'AT4"*67@B<@D,.N/A4 Ag`^((67@C&B:=:P:,,,<@F},.=:,h%%67@S&B:=:,,<@R,.=:,r* !*6-P:A$++&,',,'A|4"*67@V<@X,.}N/A4 Ah((67@W&B:=:P:,,,<@`,.=:,#6-%@"#6-@(@   #"}Ahp4DECAhJ=(5INSERT ANOTHER SHEET OF PAPER; THEN DEPRESS ANY KEYJ)@%6-}6-% Ad"36-%@""Ah@$W++INSTRUCTIONS FOR PREPARING DATA LINESX6-%A bI}I(A}FOR EACH MONTH OF DATA YOU HAVE, YOU MUST TYPE ONE DATA LINE.l66(.THE FIRST DATA LINE MUST BE NUMBERED 1000.v}SS(KAFTER THAT, EACH DATA LINE MUST BE NUMBERED ONE HIGHER THAN THE LAST.LL(DFOR EXAMPLE, 1000 MUST BE FOLLOWED B}Y 1001, 1002, 1003, 1004, ETC.K>(6DEPRESS ANY KEY WHEN READY FOR NEXT INSTRUCTIONS.K)@66(.}THE FOLLO}WING IS THE FORMAT FOR A DATA LINE:--(%1000 DATA OCT,82,1350,30,79.25,495,0++(#REQUIRED DATA SEQUENCE AND FORMAT:}((( 1. MONTH; MUST BE 3 LETTERS LONG''(2. YEAR; MUST BE 2 NUMBERS LONG,,($3. NUMBER OF KILOWATTS USED IN MONTH}++(#4. NUMBER OF DAYS IN BILLING PERIOD99(15. NET COST OF ELECTRICITY IN BILLING PERIOD99(16. HEATING DEGREE DA}YS IN BILLING PERIOD99(17. COOLING DEGREE DAYS IN BILLING PERIOD:A :($LAST LINE OF DATA }YOU ENTERED WAS: ))(!NOW BEGIN TYPING NEW DATA LINES. D:KILOWATT.BAS:A :($LAST LINE OF DATA Y{|TOSWITCXWIDTYLENGTEEXPNYPNLNDIPNTPMAMMMMDMAMAPEXTRPPPPAMOVNRXXFEEXDXDS}NMAPSDCA`@9@@@@ A6 AD @ @ }BBw@@T@3@AhB8 @ @x}@F@ @! "@ A#&$@(%@F&'@(@#)*+@,%-}@xd##*** MOTORCYCLE MAZE RIDER ***n##* COPYRIGHT 1980 C.BACHAND *x##*** FOR ANALOG MAGAZINE ***}6-F:A,6- AP A@$$ ** GENERATING MAZE GRID **556-P:H:,$++&@,'@,,$}@%@;;6-P:H:,$++&@,'@,,$@%@' 6-6-6-A6'6-A20@}@ @,@--6-P:H:,$@,$@%@6-P:H:,$@,6}-+",&+"@,6-+"@,&+"@,-@@1%$%$"*"@' A}0,  '6-@ AP6 6-%$6-%$@' !6-6-6-!6-'6-J /6-%@}T))2&$@@@^ %h %r AA|3)2&$@@@}3 A06-F:%,6-F:%,6-&@ A))2&$@@@*A}5@w52&$@@@ ,A0 @,@ 6-C:, @}&A0-@@%))6-P:H:,$+&@,,%@))6-P:H:,$+&@,,%@&6}-+%,'@&P:,"A , 3%23-@-@1&}%$@@%  01 6-66-66-1-@:"% 6-D%6-%@%}&@@yNS-@E%@y&+F:%,%F:%&@,,'@I S A@X1%@b1}&@l1%@v1&@6-***$q6-+@30@@EA}R@H c  LOOKING MOVES q6-%@(-@(6-8@<,"@ A0}( ' A0 6-6-F:%,6-\ *2"@*8@<&@,"@K,@yF:%&@,\/@y}F:%,-@@#6-AX&#6-AX&6-'@6-'@8<,A`}5 ,/,@y&+/@y&5 A? ,/@y&,#/1,@y&?/@y& }8@<%@, /  A86-8@<%@,2")"@8/ 6*8<,"@+,@}yF:%,6/F:%,*m  !(8@<@,I8<@,)8@<@,[,@y@9m,@y}@@4$>> ,/AY&%,@y&;/AY&@y&>$HN'2@AP@$@1@}:6-C:,N@A`Rr-6@@,-@T68%@<,-F:%+%,$@@%&,X \ h6.}SOUTHr A \6@Afr-6@@,-@T68%@<,-F:%+&,$@@%%,}X \ h6.NORTHr A p6@A zq-6@@,-@T68%@<,-F:%+&,}$@@%&,X \ g6.WESTq A @A g-6@@,-@T68%@<},-F:%+%,$@@%%,X \ g6.EAST_BB#6-@&1A&; APMBB@d_@}w R:, @A 0""T:,)"A t!@12@P@@}R }THREE LOOKS IS YOUR LIMITf-@Aj t A c A@6-%@50@@Y} CHECK MOTORCYCLE MAZE MAP #c A -@@+-@@?-@@C GM,Q }U w2 A@p%246-R:,p"@)"@)"}@)"@ )"@A @s"@6-%6-%C2A @$@W(F:%$@@%,_6}-&g6-&s6-s"@6-&6-&C2A @$@W(F:%$@@%,_6-%g6-}%s6-,"@)"@6-&6-6,6-"@6-66-6"  }CRASH!!<-}@6@X2A @l-@@p t 6-6-,6-%$@@%},F:,"@Ap@A@$ A @.T# }***** YOU ARE FREE *****7-@@T-A}6@82@$@ 3-@@P,H:,$AYm/H:,$AY@}yq u 2BALj-@A % A@?0@@` } *** YOU'RE FINA}L MAP ***j A VAR`K 6-C:,"-@&@8-@&@KF:%$@@%,jB12}A&$@&@@7,; ? B$tn +@@),@@5/@;/G/@}Y/@@kAR@n$~ +@'0@@F @ / motorcycle \f @} / maze rider \q @@@K:56-@96-@'6-@56-$@99;}A,;@,;@,9@<@,f @ @: @ ANALOG 400/800 [ @ } f @N* !} DO YOU WANT TO LEAVE A TRAIL7)@B>:,4YN6-@V( } DO YOU W}ANT EXTRA PASSAGES5)@@>:,4YL6-@V AV( } DO YOU WANT TO USE THE MAP5)@@>:,}4YL6-@V A N* !} DO YOU WANT MOTORCYCLE SOUND7)@B>:,4YN6-@$0,28,46,6}0,68,74,78D:MAZERIDE.BAS!} DO YOU WANT MOTORCYCLE SOUND7)@B>:,4YN6-@$0,28,46,6!78>ARRAYFILE1FILE2NAMEDISKFILECOUNCHOICLOOSFIL1T$8 L@!} @ N<;A(,;@ ,;@ ,;@ ,;@,NA@% +!}AR@%(}2 6.D1:< 6.F67B:,%@,.*.*d @@n&6-@!}& A0x( A@(6-%@&&7@<@,4SYSAP..7@<@,4 DISK!} CATAP..7@<@,4 MENU AP&&7@<@,4DBHAPJJ7@<@,4!}7@<@,*7@<@,4RAP7"6-@!6.-6-7 A 3"@!!@!}@ 3-@ @6. _7@<@,0 767@ <@ ,.._67@<@!},.7@<@,++67@<@,.7@<@,NAME$ BUILT ", @( 6 () @!}(J 6.67B:,%@,. A 6-&@ A  A@9@@'!}-@@"9( RUN NUMBER 6-P:,& @)!AX 6.b&&6.7$@&@<$@!},l=-@@$7<,0 =67B:,%@,.7<,v  A &-@@"&( LOADING !}%(-@@"(( CAN'T RUN ;#@@K:0)@;@ A//@6!}@D:MENUD:MENU//@6@D:MENU A//@6 p]pAAe@ 6-P:@$A`,+@%@(0@2%}-A`@<6-P:'@,F @P,Z/A`d ,n/&A`x,%}A`&/,A`&/& F:Ad,AU Ap D:MOI%}RE.BASA`&/,A`&/& F:Ad,AU Ap D:MOI$  5DXYDELA@@@ !!*** SNOWFLAKE GENERATOR ***BY TOM HUDSON)}(2""SET UP GRAPHICS MODE, COLORS<F9+@%@/0@9@PZ$$SET UP DEGR)}EES, X AND Y TABLESdn))9@,9@,9@,xRANDOMIZE SHAPEr-@@&6)}8,-@68,-H:,$@\68,-H:,$$@` r@wECHO AND ROTATE SHAPE)}t,A`@)-@@t/A`%+8,$E:8,,%8,$G:8,,,@%+68,$G:8,,%8,$E:8,,,86)}8,-8,%@` 88@, A`A*-@@&68,-* t,A`@)-@)}@t/A`%+8,$E:8,,&8,$G:8,,,@%+68,$G:8,,&8,$E:8,,,868,-8,%@` 88@, A)}`A  LEAVE IT ON SCREEN A WHILE-@AP % D:SNOW.BAS 88@, A(jh~;***************************;* * DSKTOOL MLLIST * ;* ****************** ;* * 8 AUG 1981 *.} ;* *REV6 15 JUL 1983* ;* * TONY MESSINA * ;* * 48 DUDLEY AVE * ;* * NEWPORT,RI * .} ;* * 02840 * ;***************************"$;************&;* EQUATES (;************02DSK.}VEC .DE $E453 ; READ/WRITE DIS4CASBUF .DI $03FD ; 128 BYTE BUFFE6PERIOD .DI $2E ; ASCII PERIO.}8CR .DI $9B ; CARRIGE RETUR@SP .DI $20 ; ASCII SPACBCLS .DI $7D ; CLEAR SCREE.}DTAB .DI $7F ; TAB SPACFNULL .DI $00 ; END OF TEXT DELIMETEHPAGE0 .DI $00CD ; PG 0 .}WORK LOCATIOPLOCKED .DI $20 ; FILE LOCKED MASRDOSMSK .DI $02 ; DOS 2 MASTDAUX1 .DE $030VDAUX2 .DE.} $030XESC .DI $001B ; ESC/ESC SE`BELL .DI $FD ; RING BUZZEbRAR .DI $001F ; RIGHT ARROdf;************.}h;* CONTROL p;************r;* NOTE: t;* ORG DOS2= v;* $1CFC *****************x;* ANY OTHER ORG WILL REQ. }UIRE ;* CHANGES TO THE BASIC PART ;* OF THIS UTILITY..BEWARE!!!!;* RUN ONLY UNDER UNMODIFIED ;* DOS2 (I.E. DOS2. } THAT DOES ;* NOT SAVE SPACE BY DROPPING ;* NON-EXISTING DRIVES!!! ;***************************** . } .PR "ORIGIN OF HEXDMP" ; ASK ORǘASTART .IN ASTART ; USER INPU .BA ASTART ; ASSIGN OR .OS . } ; STORE OBJ CODE IN ME .MC $A900 ; BUT PUT AT $A90 .PR "ORIGIN AT INPUT . } .PR "OBJ STORE AT $A900;************;* PROGRAM ;************ START JSR DSKVEC ; DO READ .}OR WRIT" BMI DERR ; IF ERROR BRANC$ LDA WFLAG ; WAS IT A WRITE& BNE EXIT2 .} ; YES..KEEP DISPLAY(MESAGE JSR MSG ; PUT UP HEADE0 JSR PREFIX ; PUT UP >2 LDA LOADR ; .}GET LOAD4 JSR AROUND ; PUT UP 06 JSR SPACE2 ; 2 SPACE8;*** SECTOR IS IN, HEADER UP, DUMP HEX **@.}B LDX #0 ; BYTE COUNTED LDY #0 ; COUNT 8 HEX BYTEFDSPHEX LDA CASBUF,X ; GET A.} BYTH JSR CONVERT ; BREAK INTO NYBLEP JSR DISPLY ; AND DISPLAR JSR SAVXY ; SAV.}E X&Y REGT JSR SPACE1 ; NOW SP V JSR RESXY ; RESTORE X&Y REGX INY ; INC COUN.}` CPY #8 ; TIME TO DUMP ASCII?b BEQ DMPASC ; YES..GO DO Id INX ; N.}O..INC BYTE COUNf JMP DSPHEX ; NO..NEXT?hp;*************r;* DSK ERRORS t;*************vxDERR .} STY ERRFLG ; INFORM BASIC OF ERROҀEXIT JSR WEIRD ; BREAK UP WEIRD BYTł LDY #0 ; ZERO .} STY LOADR ; ZERO LOAD҆EXIT2 PLA ; CLEAN UP STACˈ RTS ; AND RETURN.} TO BASIÐ;*************;* ASCII DUMP ;*************DMPASC STX HIADR ; SAVE COUN TXA ; GET .}THIS COUN SE SBC #7 ; SET START FOR DUM TAX ; PUT IN  IN.}C HIADR ; INC FOR COMPARGETIT LDA CASBUF,X ; GET WHOLE BYT JSR CKDOOM ; STOP TROUBL .} STX CHRCNT ; SAVE THIS COUN JSR PUTCHR ; CHARACTER TO SCREE  LDX CHRCNT ; RESTORE .}" INX ; AND INCREMEN$ CPX HIADR ; LIMIT REACHED& BNE GETIT ; NO..NEXT.} CHA( LDA #CR ; YES..S0 JSR PUTCHR ; SKIP A LIN2 LDX HIADR ; CK LIMIT4 CPX #.}128 ; DONE SECTOR6 BCS EXIT ; YES..GOODBY8 JSR PREFIX ; PUT UP >@ JSR UPDATE ; UPD.}ATE BYTE CNB JSR SPACE2 ; SKIP 2 SPACED LDY #0 ; ZERO Y COUNTEF LDX HIADR . } ; GET OLD X COUNH JMP DSPHEX ; AND GET MO STUFPR;*************T;* VARIABLES V;*************X`E.!}RRFLG .DS 1 ; ERROR FLAbSAVEX .DS 1 ; X SAVdSAVEY .DS 1 ; Y SAVfCHRCNT .DS ."}1 ; STOREAGhWFLAG .DS 1 ; WRITE FLApTOPSEC .DS rFILNUM .DS tv;*************x;* SUBR.#}OUTINES;*************;*** WRITE HEADER **;*** SUBROUTINE **MSG LDX #0 ; START AT ZERϒDIS.$}MSG LDA HEADER,X ; GET BYTŔ BEQ ENDMSG ; IF ZERO SCRA͖ STX SAVEX ; SAVEؘ JS.%}R PUTCHR ; DISPLAY CHA LDX SAVEX ; RESTORE  INX ; ADD  SE .&} BCS DISMSG ; ALWAYS BRANCH!ENDMSG RTS ; ADIOS!HEADER .BY CLS 'BYTE# .BY TAB TAB.'} 'HEX' TAB TAB 'ATASCI' CR NUL;*** WRITE SPACES **;*** SUBROUTINE ** "SPACE2 JSR SPACE1 ; GO HERE FOR .(}2 SPACE$SPACE1 LDA #SP ; LOAD A SPAC& JSR PUTCHR ; AND DISPLA( RTS ; THEN RE.)}TUR02;*** CONVERT ASCI **4;*** SUBROUTINE **68CONASC AND #$0F ; CLEAR TOP NYBL@ CMP #$0A .*} ; IS A REG>9?B BMI LT9 ; NO..ONLY ADD $3D ADC #6 ; YES.ADD FLT9 ADC #$30 .+} ; ADD $3H RTS ; AND RETURPR;*** CHECK GARBAGE **T;*** SUBROUTINE **VXCKDOOM CMP.,} #$20 ; A < SPACE` BCC SUBPER ; YES SUB PERIOb CMP #$7D ; NO < 7D?d .-} BCC OUT ; YES PRINf CMP #$80 ; NO..HOW ABOUT <$8h BCC SUBPER ; YES..SUB PERIOp..} CMP #CR ; < $9B ?r BCC OUT ; YES..SCRAt CMP #$A0 ; NO..< $A0?v ./} BCC SUBPER ; YES..SUB PERIOx CMP #$FD ; N0..HOW BOUT $FĀ BCC OUT ; YES..ELSłS.0}UBPER LDA #PERIOD ; LOAD A PERIOĄOUT RTS ; THEN RETURΆ;*** DISPLAY HEX BYTES **;*** SU.1}BROUTINE **DISPLY JSR SAVXY ; SAVE X& Y REGӖ LDA HIHEX ; GET HI BYTŘ JSR PUTCHR.2} ; PUT ON SCREEONEBYE LDA LOHEX ; GET LO BYT JSR PUTCHR ; AND DISPLAY IT TO JSR.3} RESXY ; RESTORE X&Y REG RTS ; THEN RETURLOHEX .DS 1 ; LO HEX STORHIHEX .4} .DS 1 ; HI HEX STOR;*** CONVERT BIN BYTE TO 2 HEX DIGITS **;*** SUBROUTINE ** CONVERT PHA .5} ; 1ST SAVE " LSR A ; EXTRAC$ LSR A ; TOP NYBL& LSR A .6} ; AND SHIFT T( LSR A ; BOTTOM NYBL0 JSR CONASC ; CONVERT BIN TO ASCII HEX DIGI2 .7} STA HIHEX ; STORE I4 PLA ; GET ORIGINAL BYT6 JSR CONASC ; CONVERT I8 .8} STA LOHEX ; STORE I@ RTS ; AND RETURBD;*** UPDATE BYTE COUNT **F;*** SUBROUTINE .9} **HPUPDATE LDA LOADR ; GET LO BYTR CLC ; CLEAR CARRT ADC #$08 ; ADD V.:} STA LOADR ; STORE AWAXAROUND JSR CONVERT ; CONVERT I` JSR DISPLY ; AND DISPLAb R.;}TS ; THEN RETURdLOADR .DS 1 ; BYTE COUNT LfHIADR .DS 1 ; BYTE COUNT Hhpr;**.<}* SAVE X&Y REGISTERS **t;*** SUBROUTINE **vxSAVXY STX SAVE؀ STY SAVEق RTӄRESXY L.=}DX SAVE؆ LDY SAVEو RTӐ;*** PREFIX BYTES WITH >0 **;*** SUBROUTINE **PREFIX L.>}DA #'> ; LOAD A CARA JSR PUTCHR ; DISPLAY IJUSHEX LDA #'$ ; LOAD HEX DESIGNATO JSR PUTCHR .?} ; DISPLAY I RTS ; RETUR;*** ML CHANGE BYTE ROUTINE **;*** BASIC ENTERS HERE **CHNGBY .@} PLA ; PULL OFF # VARS PASSE PLA ; PULL OFF HI AD STA *PAGE0+1 ; STUF.A}F I  PLA ; NEXT?" STA *PAGE0 ; STUFF I$INDEX LDY #2 ; SKIP >& .B} LDA (PAGE0),Y ; HI HE( JSR MAKBIN ; HEX ASCI TO BIN BYT0 TAX ; SA.C}VE START INDE2 CL4 ADC #$8 ; GET MAX COUN6 STA CHRCNT ; STORE I8 IN@HX2BI.D}N INY ; SKIP TB INY ; NXT USEABL BYTD LDA (PAGE0),Y ; HI CHAF .E} CMP #SP ; IS IT SPACEH BNE NOTASC ; NO..HEP INY ; YES..GET CHAR LDA (PAGE0),Y ; .F}IN T BNE STUFIT ; AND STORE DIRECTLVNOTASC JSR MAKBIN ; HEX ASCII TO BIN BYTXSTUFIT STA CASBUF,X .G} ; STUFF IN BUFFE` INb CPX CHRCNT ; DONE 8 BYTEd BCC HX2BIN ; NO.GET NXf PHA ; PU.H}SH FOR EXIh JMP MESAGE ; PUT UP NEW SCREEpTEMP .DS 1 ; LO BIN VAL STORr;*** ASCI HEX TO BIN **t;.I}*** SUBROUTINE **vxAS2BIN SEC ; SUBTRACԀ SBC #'0 ; ASCII  CMP #10 ; A<10 B.J}CC ASBIN1 ; YES JMІ SBC #7 ; ELSE SUB 7 MORňASBIN1 RTS ; AND RETURΐ;******************************.K};* CONVERT 2 ASCII HEX DIGITS ;* TO A BINARY #. THE HI DIGIT ;* COMES IN THE A REG. THE LO ;* DIGIT IS EXTRACTED.L} FROM THE ;* PAGE 0 PTR + Y REG. ROUTINE ;* EXITS WITH BIN NUMBER IN A ;******************************MAKBIN .M} PHA ; SAVE HI HEX DIGI IN LDA (PAGE0),Y ; GET LO HEX DI JSR.N} AS2BIN ; CONVER STA TEMP ; STOR  PLA ; GET BACK H" JSR AS2BIN ; CONVE.O}R$ ASL A ; SHIF& ASL A ; I( ASL A ; U0 ASL A ; TO2 ORA TEMP .P} ; OR IN LO BYT4 RTS ; RETURN WITH BIN IN 6;*** DIRECTORY DUMP STARTS HERE **8JPONT JMP DERR ; LO.Q}NG BRANC@DOBOTH JSR CONVERT ; CON VAL IN A TO HEB JSR DISPLY ; AND DISPLAD RTFHREDIR JSR.R} DSKVEC ; READ SECTOP BMI JPONT ; JUMP LONG ON ERROR LDA #L,CASBUF ; LO BUF START STA *PAGE0.S} ; STUFV LDA #H,CASBUF ; HI STARX STA *PAGE0+1 ; STUF`FILOOP LDY #5 ; NAME STARb LDX #.T}0 ; BUF INDEd;*** NOW GET FILE NAME **fGETNAM LDA (PAGE0),Y ; GET CHAh STA NAMBUF,X ; STUFp INY .U}; INC THr INX ; COUNTERt CPX #11 ; DONE WITH NAMEv BCC GETNAM ; NO.GET MORx LDY #.V}0 ; YEӀGETSTA LDA (PAGE0),Y ; GET STATUS BYTł STA FILSTA ; STORń INY ; NEXT BYTņGETLEN LDA (.W}PAGE0),Y ; LEN Lψ STA FILEN+1 ; STORŐ INْ LDA (PAGE0),Y ; LEN Hɔ STA FILEN ; STO.X}RŖ IN٘FISTAR LDA (PAGE0),Y ; GET FI STAR STA STASEC+1 ; STU IN LDA (PAGE0.Y}),Y ; START H STA STASEC ; STUCKSTA BIT FILSTA ; ENTRY DELETED BPL CKUSED ; NO. CK IF USE .Z} LDA #'D ; DELETED LOAD 'D STA FILSTA+1 ; STU JMP OUTFIL ; THEN OUCKUSED BVC OUTFIL ; IF.[} NOT USED, OU  LDA #'U ; USED LOAD 'U" STA FILSTA+1 ; STU$CKLOCK LDA #LOCKED ; LOCK MAS&.\} BIT FILSTA ; IS IT( BEQ CKDOS ; NO CK DO0 LDA #'* ; YES. LOAD '*2.]} STA FILSTA+3 ; STU4CKDOS LDA #DOSMSK ; DOS MAS6 BIT FILSTA ; DOS28 BEQ DOS1 .^} ; NO DOS@ LDA #'2 ; YES LOAD B STA FILSTA+2 ; STUD JMP OUTFIL ; AND OUFDOS1 ._} LDA #'1 ; LOAD H STA FILSTA+2 ; AND STUP;*** FILE FORMATTED..DUMP IT **ROUTFIL JSR JUSHEX .`} ; PUT UP A T LDA DAUX2 ; GET SEC HVPUTSEC JSR DOONE ; DISPLAY LO NYBLX LD.a}A DAUX1 ; DSK SEC L` JSR DOBOTH ; DISPLAb JSR SPACE1 ; SKIP SPACd LDX #0 ;.b} SET INDEfDISPFL LDA NAMBUF,X ; GET LTh JSR SAVXY ; SAVE IDX'p JSR PUTCHR ; PUT ON SCR.c}r JSR RESXY ; RESTORE X/t INv CPX #8 ; DONE NAMEx BCC DISPFL .d} ; NO.GET Mπ JSR SAVXY ; SAVE X&ق JSR SPACE1 ; 1 SPACń JSR RESXY ; RESTORE X&نDOEXT .e} LDA NAMBUF,X ; GET EXTENSIOΈ JSR SAVXY ; SAVE E͐ JSR PUTCHR ; DISPLAْ JSR RESXY ; RESTORŔ.f} INX ; INC COUNԖ CPX #11 ; GOT EXTENSION BCC DOEXT ; NO..GET AL JSR SPACE1 ; .g}PUT UP S JSR JUSHEX ; AND  LDA STASEC ; LOAD STARPUTSTA JSR DOBOTH ; TO HE .h} LDA STASEC+1 ; START L JSR DOBOTH ; DISPLA JSR SPACE1 ; SKIP  JSR JUSHEX.i} ; PUT UP  LDA FILEN ; FILE LEN HPUTLEN JSR DOBOTH ; DISPLA  LDA FILEN+1 ; FILE LE.j}N L" JSR DOBOTH ; DISPLA$ JSR SPACE2 ; SKIP & JSR JUSHEX ; PUT UP ( .k} LDA FINUMB ; FILE NUMBE0 JSR DOBOTH ; DISPLA2 JSR SPACE2 ; SKIP 4PSTATU LDX #2 ;.l} CNT 6PUTLTR LDA FILSTA+1,X ; PUT UP STATU8 JSR SAVXY ; SAVE X&@ JSR PUTCHR ; PUT UP ASCIB .m} JSR RESXY ; RESTORE X&D LDA #SP ; LOAD SPACF STA FILSTA+1,X ; CLEAR THIS STATUH D.n}EX ; DECREMENT COUNP BPL PUTLTR ; BRANCH TILL DONR INC FINUMB ; INC FILE NUMBET INC SECMAX ; AND FILES/SE.o}CTOR CNV LDA #8 ; CLEAR OLD FILE ITEMX CMP SECMAX ; DONE 8 FILES` BEQ NXTSEC ; YES-GET NEXT SECTO.p}b LDA *PAGE0 ; ELSE INC BUFFER POINTEd CLC ; SO THAT Wf ADC #16 ; SKIP 16 BYTEh STA .q}*PAGE0 ; STORE NEW POINTER LOp BCC NOHIBY ; JUMP IF NO CARRr INC *PAGE0+1 ; ELSE INC HI PART OF POINT.r}EtNOHIBY LDA #CR ; LOAD RETURv JSR PUTCHR ; DO Ix JSR CLRNAM ; CLEAR NAME BUFFEҀ JM.s}P FILOOP ; & GET NXT FILE INFςNXTSEC LDA #CR ; EXECUTE  JSR PUTCHR ; LINE FEEĆ LDA DAUX1 ; INC.t} DSK IOCˆ CLC ; TO READ THE NEXԐ ADC #1 ; SECTOҒ STA DAUX1 ; THEN STORŔ BCC N.u}OFLIP ; INC Hɖ INC DAUX2 ; IF NEEDEĘNOFLIP LDX #0 ; CLEAR FILE CN STX SECMA LDA TO.v}GGLE ; DONE 2 SECTORS BNE CLENUP ; YES CLEAN UP OUR AC INC TOGGLE ; NO..SET FOR NEXT TIME THROUG .w} JMP REDIR ; AND GO READ NEXT SECTO ;******************** ;* CLEAR NAME BUFFER  ;* SUBROUTINE  ;****.x}**************** CLRNAM LDX #11 ; 11 CHARACTER LDA #SP ; ONE SPAC" CLRSPA STA NAMBUF,X ; CLEAR I$ .y} DEX ; GET EVERYTHING!& BNE CLRSPA ; TILL DON( RTS ; THEN RETUR0 ;*****************2 ;* DI.z}RECTORY DUMP 4 ;* EXITS HERE 6 ;*****************8 CLENUP DEC TOGGLE ; CLEAR TOGGLE LOCATIO@ JMP EXIT2.{} ; AND THEN JUMP BACK TO BASIB ;*****************D ;* DIRECTORY DATA F ;*****************H NAMBUF .DS 11 ; FILE NAME .|}BUP STASEC .DS 2 ; START SEC HI/LR FILEN .DS 2 ; FILE LEN HI/LT FILSTA .BY 32 32 32 32 32 ; FILE STATUV T.}}OGGLE .DS 1 ; INFAMOUS TOGGLEX SECMAX .DS 1 ; FILE COUNTE` FINUMB .DS 1 ; THIS FILE b ;*****************T,|/