'*UD'#'c 8 0a\0'00&?' ġ&Z& 14 &94&쌓'̍$Hl팆0i5n92" 81'3݆0r 00 30&&&[9 (nTSC_UTIL'$o'$TSC_UTIL'$|o'$MEMFILLCMD YMEMOVECMD YMEMDUMPCMD YMEMTESTCMD YRECOVERCMD YINTEGCMD YCONTINCMD YREMSPCCMD   YSLEEPCMD   YPDELCMD   YFLISTCMD YHECHOCMD YECHOCMD YRPTCMD YDATECMD YDVLISTCMD YPRULCMD YCONCATCMD YREPAIRCMD  YFILESCMD!# YUNPACKCMD$ YFLISTTXT YFILESTXT  YDVLISTTXT  YUNPACKTXT YSMWTXT YBEDITTXT  m YBASEREFTXT) YDECOMPILTXT YCUSTESTTXT  Y CRTSETTXT   YMAPTXT   YLNKMATTXT   YCUSTOMIOTXT  7 YREPAIRTXT + YSEGMAPTXT   YFDIRTXT / YMEMFILLTXT YMEMOVETXT" YMEMDUMPTXT# Y MEMTESTTXT YRECOVERTXT YINTEGTXT! YCONTINTXT"$ YCONCATTXT YREMSPCTXT YSLEEPTXT YPDELTXT YHECHOTXT  YECHOTXT   Y RPTTXT YDATETXT YPRULTXT Y  !"#$P B%'B%B%'0 ~= ILLEGAL HEX NUMBER B%@B%8B%0%+"#$'M00 ~'00 ~ILLEGAL ADDRESS SPECIFIED~ B%f$Ey4v05Z&"_0Z&$z&| '_F'B&zz ~< ~ |B%XB%P$  '0 &'0 !@'| ~4$5$~! ~450 DDDD09#~4HHHyyZ&59 B%dy_Y&R@-%D3o&4oo@Ao"{ˎ&@'?~' BAD DISK IN DRIVE #1?  B$P~@]& *O &&]^_`a b o@Ao"&} &} '=  $z ߦ&#} &(} &#&&ڽ~ġ?  0 FREE SPACE ALL OK!SECTOR COUNT ZERO - NOT END OF SPACEENCOUNTERED LAST SECTOR EARLYERROR IN LAST AVAILABLE POINTERILLEGAL DRIVE NUMBER& _Y&~(~CONTINUE?  @-%V3&J-%B3&4@&D*'H & / 'O#'}'4 ' ?~5&@'& &Վ@& &&~.% H'0&0&0 ~  }'@&$ G.' !%9#}'~@ *# '@'%~þ$& !~ʾ.'!%#9"'$ ڽ%ۍ&$~$~@?~ '9@&|$±'~ @m&~°+D}&)A=='0=AM'&0A C 00Z&o_9. ».»ˆ &$~_Y&  &~'~9@~'0Z&9 o0Z&.'~-| '% 0Z*99' 0Z&9_9DELETE ""?   $@-$@~M@ 3R'J!%H%-& H%ѿ R'$+''$ '%_N& P& }' ]6@'~MO %"$ ""% %@' &p~}'=4}'6& |¥5}'4 9. <=5 &}'|$~ '}'@' ?  '9|" _'' '#''秄0\ˆ ]'Z0 ؆ 0\(&"9$$ ᦄ'0 _9$$$9TITLE?   PAGE $  ''B%  ~ $' ' ' ~3 H%$'K&J' ~  'J'E/% "$%"% c"~@?~H%]' 99$J' 0m&0 * _9_9~'0 9, 19JANUARYFEBRUARYMARCHAPRI;LMAYJUNEJULYAUGUSTSEPTEMBEROCTOBERNOVEMBERDECEMBER  Ķ  '6'1}&=~޽ ?~m 'VLIST m}ste f|ljas av ett filnamn!4}' &z  '  &5} '  ' ;54'  Z&5$@-%L3&=H]'@& 'Y »&&~? M+ 9@D<3 4&} '  '5z 5 '5z &/5 ˜t  -&9    '  '  Z&Ȇ 9 @-% 3' ?~-%3&@&.\& @'-^'3!%9# & Ҏ@'&~@& ؎@&\& ^'& &@& &9~[  '&~@-%83&,@& &$ 'M' & '?~ $'-?% ]'#_ĎM5D@ħ &IfD3F̸0Fw̸{Fiu_F'OC'U'DR']D'ہS'W'N'ıP'A'/E'vH'~X&̼n%l]'g"_ _@%L]'GD$AJ@ ħJ&kȀ̸0B0J)F0=ΎȀ'F0@0č ,~ˆ0n Fd0!oLȀblLL&̺N L0:%N9:3 -445-04 Z&JN : 554 %~%-Z&5䭝%5]'0HȀ:%L]'4A 5ɀ&@'D"J ħx& Ȁc@ [' @'D"J ħ7'+Э3$f0#`%Q]'LN1'NȄN'ɀ&-ȄN'ɀ&  ȁDDDD^,TjB' lM4M' 5 B  451' F\0Y_N'92b~4AS5F4̺8 BM9 @JD#~E& D&OJ*̰F̲nH%L$4=51FHH ʦ&9 4 Z&503oZ&3c0REPAIR - Disk Hardware UtilityCOMMAND: CURRENT ŘLINK=NEXT LINK=MORE....? DRIVE #+ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF =============================================================================RE\WAD, WRITE, DISPLAY, CHANGE, SEARCH, STEP, NEXT, EXIT UNIT, RESTART, EMPTY, PREVIOUS, " 'GGGG $}'@&$ G.' !%9#}'~@ *# '@'%~@&!µ&Bo_9$& !~ľ.'!%#9"'$ ڽ% &$~/$~#@?~ '9@&|$µ'~«@m& }'$~´+&ގD}&)A=='0=AM'&0A D¿.ˆ¿|&~ Z&~"'~9@~'|0Z&9 o0Z&.'~-| '% 0Z*99' 0Z&9_9FILES OF DRIVE NUMBER  -%Æ3&;@-$L &o o o*#3&y;81! &9 *& 1% &( ށ ' 1! '܁ &'1? & 9@&"9&&@0&~2b?~ ^ ^ ^  OPT PAG TTL FORMATTED LIST UTILITY PAG * * FORMATTED LIST UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.35 * GLOBAL VARIABLES EOL EQU $CC02 FCB EQU $C840 LSTTRM EQU $CC11 BUFPNT EQU $CC14 FMSCLS EQU $D403 FMS EQU $D406 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E CLASS EQU $CD21 PCRLF EQU $CD24 NXTCH EQU $CD27 GETFIL EQU $CD2D SETEXT EQU $CD33 OUTDEC EQU $CD39 RPTERR EQU $CD3F INDEC EQU $CD48 OUTCHN EQU $CC22 OUTHEX EQU $CD3C BSP EQU $CC00 DEL EQU $CC01 ORG $C100 * PROGRAM STARTS HERE LIST BRA LIST1 * TEMPORARY STORAGE VN FCB 1  VERSION NUMBER TEMP FDB 0 OUTF FCB 0 NUMS FCB 0 FIRST FDB 0 LAST FDB $FFFF LINCNT FDB 0 ZERO FCB 0 FF FCB $C PAGE FCB 0 LINE FCB 0 VALUE FDB 0 PAGEN FCB 0 LIST1 JSR PCRLF PRINT CR & LF LDX #FCB POINT TO FCB JSR GETFIL GET FILE SPEC BCC LIST15 ERROR? * REPORT ILLEGAL NAME NAMER LDX #FCB POINT TO FCB LDAB #21 SETUP ERROR NAMER2 STAB 1,X JMP LIST7 GO REPORT * REPORT SYNTAX ERROR SYNER LDX #FCB POINT TO FCB LDAB #26 SETUP ERROR BRA NAMER2 * CONTINUE LIST LIST15 LDA A #1 EXTENSION CODE JSR SETEXT SET EXTENSION LIST2 JSR TSTTRM TEST TERMINATOR BEQ LIST4 LDX BUFPNT GET POINTER LDAA 0,X GET CHARACTER JSR CLASS CLASSIFY IT BCS LIST35 JSR INDEC GET LINE NUMBE R BCS SYNER ERROR? STX FIRST SAVE AS FIRST LDAA LSTTRM CHECK TERM CMPA #'- IS IT '-' BNE LIST35 JSR INDEC GET SECOND NUMBER BCS SYNER STX LAST SAVE AS LAST LIST3 JSR TSTTRM TEST TERMINATOR BEQ LIST4 LIST35 CMPA #'+  CHECK FOR OPTIONS BEQ LIST37 JSR NXTCH GET NEXT CHAR BCC SYNER TERM? BRA LIST3 LIST37 JSR NXTCH GET NEXT CHARACTER BCS LIST3 TERM? ANDA #$5F MAKE UPPER CASE CMPA #'N IS IT 'N'? BNE LIST38 STAA NUMS SET NUMBERS OPT  BRA LIST37 LIST38 CMPA #'P IS IT 'P'? BNE SYNER STAA PAGE SET PAGE OPT BRA LIST37 LIST4 TST PAGE PAGE ON? BEQ LIST44 JSR GETTL INPUT TITLE CLR PAGEN SET PAGE NUM LDAA #54 STAA LINE SET LINE COUNT LIST44 LDX #FCB POIN T TO FCB LDA A #1 OPEN FOR READ STA A 0,X JSR FMS BEQ LIST5 ERRORS? LIST45 JMP LIST7 LIST5 CLR A BUMP LINE NUMBER LDA B #1 ADD B LINCNT+1 STA B LINCNT+1 SAVE NEW VALUE ADCA LINCNT STA A LINCNT CMP A LAST END OF LIST? BLO LIST52 BHI LIST56 CMP B LAST+1 BHI LIST56 LIST52 CMP A FIRST AT FIRST LINE? BHI LIST53 BLO LIST54 CMPB FIRST+1 BLO LIST54 LIST53 LDA A #1 SET OUTPUT FLAG STA A OUTF LIST54 LDX #FCB POINT TO FCB JSR FMS  READ CHARACTER BEQ LIST6 ERRORS? LIST55 LDA A 1,X GET ERROR TYPE CMPA #8 IS IT EOF? BNE LIST7 LIST56 JSR FMSCLS CLOSE ALL JMP WARMS RETURN TO FLEX LIST6 TST OUTF OUTPUT LINE? BEQ LIST65 PSHA SAVE CHARACTER TST PAGE PAGI NG? BEQ LIST63 LDAA LINE CHECK LINE NUM CMPA #54 BNE LIST63 INC PAGEN BUMP PAGE NUMBER LDAA FF GET FORM FEED JSR PUTCHR OUTPUT IT JSR DOHDR PRINT HEADER LIST63 PULA RESTORE CHARACTER TST NUMS PRINT LINE NUM? BEQ LIST65 PSHA SAVE CHAR LDX #LINCNT POINT TO NUMBER LDAB #1 JSR OUTDEC PRINT IT LDA A #'. OUTPUT '.' JSR PUTCHR LDX #ZERO POINT TO ZEROES JSR OUTHEX PRINT THEM LDAA #'= PRINT '=' JSR PUTCHR PUL A RESTORE CHAR LIST65 CMP A #$D IS IT CR? BNE LIST67 TST OUTF DOING OUTPUT? BEQ LIST66 INC LINE BUMP LINE NUMBER JSR PCRLF DO CR & LF LIST66 JMP LIST5 REPEAT LIST67 CMP A #$0A CHECK FOR LF BEQ LIST68 TST OUTF DOING OUTPUT? BEQ LIST68 JSR PUTCHR OUTPUT CHARACTER LIST68 LDX #FCB POINT TO FCB JSR FMS GET CHARACTER BEQ LIST65 ERRORS? BRA LIST55 LIST7 JSR RPTERR REPORT ERROR BRA LIST56 * TEST FOR TERMINATOR TSTTRM LDAA LSTTRM GET LAST TERM CMPA #$D IS IT CR? BEQ TSTTR2 CMPA EOL IS IT EOL? TSTTR2 RTS * INPUT TITLE LINE GETTL LDX #TTST POINT TO STRING INC OUTCHN SET CHANNEL JSR PSTRNG PRINT STRING LDX #TITLE POINT TO BUFFER CLRB GETTL2 JSR GETCHR INPUT TITLE CMPA BSP BACKSPACE?  BEQ GETTL4 CMPA DEL DEL CHARACTER? BEQ GETTL CMPA #$D CR? BEQ GETTL6 CMPA #$1F CONTROL CHAR? BLS GETTL2 CMPB #39 BUFFER FULL? BEQ GETTL2 STAA 0,X SAVE CHARACTER INX BUMP POINTER INCB BUMP CHAR COUNT BRA GETTL2 GETTL4 TSTB TEST COUNT BEQ GETTL DECB DEC COUNT DEX DEC THE POINTER BRA GETTL2 GETTL6 LDAA #$20 SETUP SPACE STAA 0,X PUT IN BUFFER INX BUMP TO NEXT INCB BUMP COUNTER CMPB #40 BUFFER FULL? BNE GETTL6 LDAA #4 SET UP TERM STAA 0,X SAVE IN BUFFER CLR OUTCHN CLEAR CHANNEL RTS RETURN * PRINT PAGE HEADER DOHDR JSR PCRLF PRINT CR & LF JSR PCRLF LDX #TITLE POINT TO TITLE JSR PSTRNG PRINT IT LDX #PGST POINT TO STRING DOHDR6 LDAA 0,X GET CHARACTER BEQ DOHDR7 IS IT NULL? JSR PUTCHR PRINT IT INX BUMP TO NEXT BRA DOHDR6 DOHDR7 CLRB LDAA PAGEN GET PAGE NUM STAA VALUE+1 SAVE NUMBER LDX #VALUE POINT TO NUMBER JSR OUTDEC PRINT IT JSR PCRLF PRINT CR & LF JSR PCRLF JSR PCRLF CLR LINE CLEAR LINE COUNT RTS RETURN TTST FCC 'TITLE? ' FCB 4 PGST FCC ' "PAGE ' FCB 0 TITLE RMB 41 END LIST F OPT PAG * OPT NOG TTL FILES UTILITY PAG * * FILES UTILITY PROGRAM * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 22.11 * GLOBAL VARIABLES EOL EQU $CC02 WIDTH EQU $CC04 FCB EQU $C840 WASN EQU $CC0C ASN EQU WASN LSTTRM EQU $CC11 BUFPNT EQU $CC14 INDEX EQU $CC3D DATPNT EQU $CC41 SPC EQU $20 FMSCLS EQU $D403 FMS EQU $D406 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E CLASS EQU $CD21 PCRLF EQU $CD24 NXTCH EQU $CD27 GETFIL EQU $CD2D OUTDEC EQU $CD39 OUTHEX EQU $CD3C RPTERR EQU $CD3F GETHEX EQU $CD42 INDEC EQU $CD48 ORG $C100 FIL BRA FIL1 VN FCB 1 VERSION NUMBER NAME FCB 0,0,0,0 FCB 0,0,0,0 EXT FCB 0,0,0 ALLFLG FCB 0 ALLDR FCB 0 LOOP FCB 0 POINT FDB 0 COUNT FCB 0 COL FCB 0 NPL FCB 0 * PROGRAM HERE FIL1 LDX BUFPNT POINT TO BUFFER STX POINT SAVE POS LDAA WIDTH GET WIDTH BEQ FIL12 SET? ASRA DIVIDE BY 16 ASRA ASRA ASRA BRA FIL15 FIL12 LDAA #5 SET DEFAULT FIL15 STAA NPL SET NUM PER LINE JSR PCRLF PRINT CR & LF FIL2 TST ALLDR ALL DRIVES? BEQ FIL22 FIL21 LDX #FCB POINT TO FCB LDAA #20 FIND DRIVE STAA 0,X JSR FMS CALL FMS BNE FIL27 ERROR? LDX POINT RESTORE POINTER STX BUFPNT LDAA 0,X GET CHARACTER STAA LSTTRM SET TERM BRA FIL4 FIL22 LDX POINT GET POINTER LDAA 0,X GET CHARACTER CMPA #'. IS IT PERIOD? BEQ FIL25 JSR CLASS CLASSIFY IT BCS FIL25 TERM? CMPA #'9 IS IT NUMBER? BLS FIL3 FIL25 TST LOOP LOOPING? BEQ FIL29 FIL27 JMP WARMS RETURN TO FLEX FIL29 LDX #FCB POINT TO FCB LDAA ASN GET DRIVE ST AA 3,X SET IN FCB BPL FIL4 STAA ALLDR SET ALL DRIVES BRA FIL21 FIL3 LDX POINT RESTORE POINTER STX BUFPNT JSR NXTCH GET NEXT CHAR ANDA #3 MASK NUMBER LDX #FCB POINT TO FCB STAA 3,X SAVE IN DRIVE JSR NXTCH GET NEXT ! CHAR BCS FIL35 TERM? JMP SERR IF NOT, ERROR FIL35 LDX BUFPNT SET POINTER STX POINT FIL4 LDX #FCB POINT TO FCB LDAA #16 OPEN SYSTEM REC STAA 0,X JSR FMS BNE FIL43 ERROR? JSR GETIR GET FIRST RECORD BNE FIL43 ERROR?" LDX #FILST POINT TO STRING JSR PSTRNG PRINT IT LDX #FCB+2 POINT TO DRIVE CLR 0,X CLR B JSR OUTDEC PRINT IT JSR PCRLF PRINT CR & LF FIL42 JSR TSTTRM TEST TERMINATOR BNE FIL45 CLR ALLFLG CLEAR FLAG BRA FIL6 FIL43 # JMP ERR REPORT ERROR FIL45 LDX BUFPNT RESET POINTER LDAA 0,X GET NEXT CHAR CMPA #'. IS IT PERIOD? BEQ FIL5 JSR CLASS CLASSIFY IT BCS SERR TERM? CMPA #'9 IS IT NUMBER? BHI FIL5 FIL47 JSR NXTCH GET NEXT BCC FIL47 T$ ERM? BRA FIL42 FIL5 JSR GETNAM INPUT NAME BCS SERR ERROR? FIL6 JSR PRDIR GO PRINT DIR BSR TSTTRM TEST TERM BNE FIL5 JSR PCRLF PRINT CR & LF JMP FIL2 REPEAT * EXIT DIR UTILITY EXIT JSR PCRLF PRINT CR & LF JMP WARMS  RETURN TO FLEX * REPORT SYNTAX ERROR SERR LDX #FCB POINT TO FCB LDAB #26 SET IN ERROR STAB 1,X * REPORT DISK ERROR ERR JSR RPTERR REPORT ERROR ERR2 JMP WARMS RETURN TO FLEX * TEST FOR TERMINATOR TSTTRM LDAA LSTTRM CHECK LAST TERM CMPA #$D IS IT CR? BEQ TSTTR2 CMPA EOL IS IT EOL? TSTTR2 RTS * PRINT DIRECTORY LIST PRDIR CLR COL LDX #FCB POINT TO FCB LDA A #6 OPEN DIRECTORY STA A 0,X JSR FMS BNE ERR ERRORS? INC LOOP SET LOOP FLAG PRDIR2 JSR PCRLF PRINT CR & LF PRDIR3 JSR GETIR GET INFO RECORD BEQ PRDI32 ERRORS? JMP PRDIR6 PRDI32 LDX #FCB POINT TO FCB TST 4,X NAME PRESENT? BNE PRDI34 TST COL CHECK COLUMN BEQ PRDI33 JSR PCRLF PRINT CR & LF PRDI33 JMP PRDIR7 PRDI34 BMI PRDIR3 DELETED NAME? LDAA 15,X CHECK C PROT ANDA #$10 BNE PRDIR3 LDX #FCB+4 POINT TO NAME TST ALLFLG ALL FILES? BNE PRDIR4 STX DATPNT SAVE POINTER LDX #NAME TRY TO MATCH NAME STX INDEX PRDI35 LDX INDEX CPX #EXT+3 BEQ PRDIR4 LDAA 0,X INX STX INDEX LDX DATPNT TST A CHAR NULL? BEQ PRDI37 CMPA 0,X DO COMPARISON BNE PRDIR3 PRDI37 INX MOVE TO NEXT STX DATPNT BRA PRDI35 PRDIR4 LDX #FCB+4 POINT TO NAME CLR COUNT LDAB #8 SET COUNTER JSR PRNAM PRINT NAME LDAA #'. OUTPUT PERIOD JSR PUTCHR LDAB #3 SET COUNT JSR PRNAM PRINT EXT INC COL BUMP COLUMN COUNT LDAA COL GET COUNT CMPA NPL MAX YET? BNE PRDI45 CLR COL CLEAR COUNT JMP PRDIR2 REPEAT PRDI45 LDAB #15 FILL SPACES SUBB COUNT PRDIR5 LDAA #$20 SETUP SPACE JSR PUTCHR OUTPUT IT DECB DEC THE COUNT BNE PRDIR5 JMP PRDIR3 PRDIR6 LDAA 1,X GET ERROR TYPE CMPA #8 IS IT EOF? PRDI65 BEQ PRDIR7 JMP ERR REPORT ERROR PRDIR7 RTS * GET INFO RECORD GETIR LDX #FCB POINT TO FCB LDAA #7 GET IR CODE STAA 0,X JMP FMS CALL FMS * PRINT FILE NAME PRNAM LDAA 0,X GET CHARACTER BEQ PRNAM2 JSR PUTCHR OUTPUT CHAR INC COUNT BUMP COUNT  PRNAM2 INX BUMP TO NEXT DECB BNE PRNAM RTS RETURN * GET FILE MATCH NAME GETNAM CLR ALLFLG CLEAR ALL LDX #NAME POINT TO BUFFER LDAB #11 SET COUNT GETNA2 CLR 0,X CLEAR BUFFER INX DECB BNE GETNA2 LDX BUFPNT POINT TO NAME   LDA A 0,X GET CHARACTER CMP A #'. IS IT '.'? BEQ GETNA4 LDX #NAME-4 RESET POINTER JMP GETFIL GET FILE NAME GETNA4 INC BUFPNT+1 FIX POINTER LDAB #3 SET COUNT LDX #EXT POINT TO EXT GETNA5 JSR NXTCH GET CHARACTER BCS GETN A6 TERM? STAA 0,X SAVE CHAR INX DECB BPL GETNA5 SEC RTS RETURN GETNA6 CLC RTS * PRINT STRING WITHOUT CR & LF PDATA LDAA 0,X GET CHARACTER BEQ PDATA2 NULL? JSR PUTCHR PRINT IT INX BUMP TO NEXT DECB DEC COUNT BNE PDATA RTS RETURN PDATA2 CLRB RTS * STRINGS FILST FCC 'FILES OF DRIVE NUMBER ' FCB 4 END FIL F *********************************** * * UNPACKED BY J.O HAGESTUEN 89.12.08 * * GET FROM LARS ERIK BJORKLUND * * DVLIST LISTAR I TVA KOLUMNER BRA FOR ASSEMBLER LISTOR. * FUNGERAR PA EPRSON (EPSON-SKRIVARE) * * * VLIST UTILITY COMMAND * * FMS EQU $D406 FCB EQU $C840 GETFIL EQU $CD2D PUTCHR EQU $CD18 GETCHR EQU $CD15 PCRLF EQU $CD24 SETEXT EQU $CD33 FMSCLS EQU $D403 RENTER EQU $CD06 PSTRNG EQU $CD1E RPTERR EQU $CD3F WARMS EQU $CD03 LSTTRM EQU $CC11 EOL EQU $CC02 OUTCH EQU $CD0F POUT EQU $CCE4 PINIT EQU $CCC0 TOUTCH EQU $D3F9 INDEC EQU $CD48 PIAA EQU $E034 TTYDEP EQU $CC03 TTYEJE EQU $CC08 TTYPAU EQU $CC09 MAXROW EQU 72 ORG $0 BUF1 RMB 80*MAXROW BUF2 RMB 80*MAXROW BUFEND EQU * ORG $C100 VLIST BRA P12 VN FCB 1 PAGSKIP FCB 0 EJECT RMB 1 DEPTH RMB 1 UTVEK FDB $F009 TABS FCB 0 ROWS RMB 1 COUNT1 RMB 1 COUNT2 RMB 1 BFPEK1 RMB 2 BFPEK2 RMB 2 P12 EQU * LDA TTYDEP STA DEPTH STA ROWS LDA TTYEJE STA EJECT * Save outroutine * LDD OUTCH+1 STD UTVEK * restore screen * LDD TOUTCH STD OUTCH+1 * forgotten filename ? LDA LSTTRM CMPA #$0D BEQ P8 CMPA EOL BEQ P8 * Ask for specials * TST DEPTH BNE P15 * No use ordinary * * CLR TTYDEP CLR TTYEJE P15 EQU * * Restore printer out LDX #SPECPOUT STX OUTCH+1 JSR INI0 JMP LIST * * P25 JSR PSTRNG BRA P4 P3 JSR RPTERR P4 JSR FMSCLS LDA DEPTH STA TTYDEP LDA EJECT STA TTYEJE JMP WARMS P8 LDX #ERSTR BRA P25 ERSTR FCC /'VLIST m}ste f|ljas av ett filnamn!/ FCB 4 SPECPOUT EQU * PSHS B TST PAGSKIP BEQ GOON CMPA #$8C BNE RET99 DEC PAGSKIP BRA RET99 GOON ANDA #$7F CMPA #$0C BEQ SPECIAL JSR [UTVEK] CMPA #13 BNE RET99 BSR TABKOL RET99 PULS B,PC SPECIAL EQU * JSR [UTVEK] TST TTYPAU BEQ SPEC99 JSR GETCHR CMPA #$0D LBEQ WARMS SPEC99 BSR TABKOL PULS B,PC * Process tabs * * TABKOL EQU * PSHS D LDB TABS BEQ TABK9 LDA #$20 TABK1 JSR [UTVEK] DECB BNE TABK1 TABK9 PULS D,PC * LIST EQU * JSR PCRLF LDX #FCB JSR GETFIL BCS LIST9 * * if skipcount * * CLR PAGSKIP * LDA #1 STA 0,X JSR SETEXT JSR FMS BNE LIST9 * Get pageskip * * JSR IN DEC TSTB BEQ LIST4 TFR X,D STB PAGSKIP * LIST4 LDX #FCB JSR FMS BNE LIST6 CMPA #$0A BEQ LIST4 * CMPA #$0D * BNE LIST5 * JSR PCRLF * JSR TABKOL * BRA LIST4 LIST5 JSR PRTTKN BRA LIST4 LIST6 JSR PRTPAG LDA 1,X CMPA #$ 08 BNE LIST9 LDA #4 STA 0,X JSR FMS BNE LIST9 SLUT LDA DEPTH STA TTYDEP LDA EJECT STA TTYEJE JMP WARMS LIST9 JSR RPTERR JSR FMSCLS BRA SLUT INI0 LDX #INIT INI1 LDA 0,X+ BMI INIEX JSR PUTCHR BRA INI1 IN IEX EQU * JSR INIBUF RTS INIT FCB $1B,'@,$0F,$1B,'D,60,0,$1B,'3,30,$0D,$FF * print 1 chr in first or 2nd * * PRTTKN EQU * PSHS Y,D TST COUNT1 BEQ COL2 LDY BFPEK1 STA 0,Y+ STY BFPEK1 CMPA #$0D BEQ ENDCO1 PRTCO1 PULS  Y,D,PC ENDCO1 DEC COUNT1 PULS Y,D,PC * COL2 LDY BFPEK2 STA 0,Y+ STY BFPEK2 CMPA #$0D BEQ ENDCO2 PRTCO2 PULS Y,D,PC ENDCO2 DEC COUNT2 BNE PRTCO2 BSR PRTPAG BSR INIBUF PULS D,Y,PC * * INIT BUFFERS * INIBUF EQU * LDY #BUF1 STY BFPEK1 LDA #$0D LDB ROWS STB COUNT1 LDY #BUF2 STY BFPEK2 LDB ROWS STB COUNT2 LDY #BUF1 FILC STA 0,Y+ CMPY #BUFEND BNE FILC RTS * * * print all page * * PRTPAG EQU * LDB ROWS LDY #BUF1 STY BFPEK1 LDY #BUF2 STY BFPEK2 PRTP1 LDY BFPEK1 PRTP2 LDA 0,Y+ STY BFPEK1 CMPA #$0D BEQ PRTP3 JSR PUTCHR BRA PRTP2 PRTP3 LDA #9 (TAB) JSR PUTCHR * PRTP4 LDY BFPEK2 PRTP5 LDA 0,Y+ STY BFPEK2 CMPA #$0D BEQ PRTP6 JSR PUTCHR BRA PRTP5 PRTP6 LDA #$0A JSR PUTCHR LDA #$0D JSR PUTCHR DECB BNE PRTP1 LDA #$0C JSR PUTCHR RTS END VLIST F* * CONVERT FROM FILE 1 TO FILE 2 * * JAN OYVIND HAGESTUEN * * CREATED 89-11-29 * * LAST CHANGE 89-11-30 * * THE PROGRAM UNPACKS SOURCE FILES FROM TSC * PUT IN SPACES TO RIGHT COLUMNS FOR ASSEMBLYPROGRAM * * * THE GENERAL SYNTAX OF THE UNPACK COMMAND IS: * * UNPACK,,`~ * * OPT NAM NAM UNPACK * DOS EQUATES WARMS EQU $CD03 DOS WARMS START ENTRY GETFIL EQU $CD2D GET FILE SPECIFICATION GETCHR EQU $CD15 GET CHARACTER PUTCHR EQU $CD18 PUT CHARACTER ROUTINE PSTRNG EQU $CD1E PRINT STRING PRCRLF EQU $CD24 PRINT CR & LF SETEXT EQU $CD33 SET DEFAULT NAME EXT RPTERR EQU $CD3F REPORT DISK ERROR * FMS EQUATES FMS EQU $D406 FMSCLS EQU $D403 * PROGRAM EQUATES FILE1 EQU 000 FILE2 EQU 320  * CONVERT UTILITY STARTS HERE ORG $C100 UNPACK BRA UNPAK1 VN FCB 1 VERSION #1 UNPAK1 LDX #FILE1 JSR GETFIL LBCS ERR1 LDA #1 STA ,X READ OPEN LDA #6 DEF. EXT SCR JSR SETEXT JSR FMS DO OPEN LBNE ERR1 LDA #$00! STA 59,X NO SUPPRESSION BIN. FILE * * CREATE NEW FILE 2 * LDX #FILE2 JSR GETFIL BCC OK_EXT LDA #4 GET SAME NAME AS FILE1+NEW EXT LDY #FILE1 L_NM2 LDB A,Y STB A,X INCA CMPA #12 BNE L_NM2 CLR 12,X CLEAR EXT. C"LR 13,X CLR 14,X LDA 3,X BPL OK_EXT LDA 3,Y IF NOT GIVEN THEN SAME AS FILE1 STA 3,X OK_EXT LDA #2 WRITE OPEN STA ,X LDA #1 DEF. EXT TXT JSR SETEXT JSR FMS DO OPEN LBNE ERR1 LDA #$00 STA 59,X NO SUPPRESSION #BIN. FILE *== UNPACK DATA IN FILE ==* NEWROW LDY #TAB_TB NX_TAB LBSR GET_F1 LEAY 1,Y CMPA #$0D BNE N_CR ENDROW BSR TO_F2 ;PUT CHR IN FILE #2 BRA NEWROW N_CR CMPA #'* BNE N_STAR L_TF2 BSR TO_F2 ;PUT CHR IN FILE #2 LBSR GET_$F1 ;GET CHR FROM FILE #1 CMPA #$0D BNE L_TF2 BSR TO_F2 ;PUT CHR IN FILE #2 BRA NEWROW N_STAR CMPA #$20 BEQ F_SPC S_CHR BSR TO_F2 ;PUT CHR IN FILE #2 LN_CHR LBSR GET_F1 ;GET CHR FROM FILE #1 LEAY 1,Y CMPA #$0D BEQ ENDROW CMPA #$20 BNE S_CHR F_SPC BSR TO_F2 ;PUT CHR IN FILE #2 CMPA ,Y+ BEQ F_SPC LEAY -1,Y BRA LN_CHR *================================== *== FILE & ERROR HANDLE ==* GET_F1 LDX #FILE1 JSR FMS READ FROM FILE 1 BNE ERR2 RTS TO_F2 LDX #FILE2 JSR FMS WRITE TO FILE 2 BNE ERR3 RTS ERR2 LDA 1,X GET ERROR STATUS CMPA #08 IS IT EOF ERROR? BNE ERR1 LDX #FILE1 LDA #4 CLOSE FILE CODE STA ,X JSR FMS CLOSE FILE 1 BNE ERR1 LDX #FILE2 LDA  #4 CLOSE FILE CODE STA ,X JSR FMS CLOSE FILE 2 BNE ERR1 JMP WARMS RETURN TO FLEX * * ERROR HANDLER * ERR3 LEAS 2,S FIX STACK ERR1 JSR RPTERR REPORT ERROR JSR FMSCLS CLOSE ALL FILES JMP WARMS RETURN TO FLEX * * TABULTION STEPS * TAB_TB FCC ' ^ ^ ^ ' END UNPACK F* * SMARTWATCH DRIVER * *88 9 21 LB * * ( 0.1s 0.01s ) ( s e k u n d e r ) * ( m i n u t e r ) ( 12,0,10/AP,Tim,Timmar ) *( 0,0,OSC,RES,dag ) (D a t u m ) *( M } n a d ) ( ] r ) * OPT NOL LIB CANIO.TXT OPT LIS *89 8 15 LB * ORG $DFF0 SECOND RMB 2 MINHOUR RMB 2 DAYDATE RMB 2 MONYEAR RMB 2 SPTEMP RMB 2 * MEM EQU $7FFF ORG $C000 START JSR XREADCL LDX #MONYEAR+1 LDB #8 SHOW LDA 0,X JSR XP2HEX JSR XPSPACE LEAX -1,X DECB BNE SHOW LDA #$0D JSR XPUTCHR BRA START LDA SECOND+1 ORG $DE00 XREADCL JMP READTM XWRITIM JMP WRITIM * READTM EQU * PSHS D,DP,X,Y,U,CC SEI LDX #CODTAB LDA MEM START OPENR LDB #8 LDA 0,X+ OPENR1 STA MEM LSRA DECB BNE OPENR1 CMPX #CODEND BNE OPENR * LDB #$80 RDT0 LDA MEM LSRA RORB BCC RDT0 TFR B,DP LDB #$80 RDT1 LDA MEM LSRA RORB BCC RDT1 TFR DP,A TFR D,X SECONDS * LDB #$80 RDT2 LDA MEM LSRA RORB BCC RDT2 TFR B,DP LDB #$80 RDT3 LDA MEM LSRA RORB BCC RDT3 TFR DP,A TFR D,Y MINHOURS * LDB #$80 RDT4 LDA MEM LSRA RORB BCC RDT4 TFR  B,DP LDB #$80 RDT5 LDA MEM LSRA RORB BCC RDT5 TFR DP,A TFR D,U DAYDATE * LDB #$80 RDT6 LDA MEM LSRA RORB BCC RDT6 TFR B,DP LDB #$80 RDT7 LDA MEM LSRA RORB BCC RDT7 TFR DP,A * STX SECOND STY MINHOUR STU DAYDATE STD MONYEAR PULS D,X, Y,U,CC,DP,PC * CODTAB FDB $C53A,$A35C,$C53A,$A35C CODEND EQU * WRITIM EQU * PSHS X,Y,U,D,DP,CC SEI STS SPTEMP LDD SECOND LDU MINHOUR LDY DAYDATE LDX MONYEAR TFR A,DP LDS #CODTAB * OPENW LDA 0,S+ STA MEM LSRA STA MEM LSRA STA MEM LSRA S TA MEM LSRA STA MEM LSRA STA MEM LSRA STA MEM LSRA STA MEM CMPS #CODEND BNE OPENW * EXG DP,B LDA #8 WRT0 STB MEM LSRB DECA BNE WRT0 TFR DP,B LDA #8 WRT1 STB MEM LSRB DECA BNE WRT1 * TFR U,D * TFR B,DP LDB #8 WRT2 STA MEM LSRA   DECB BNE WRT2 TFR DP,A LDB #8 WRT3 STA MEM LSRA DECB BNE WRT3 * TFR Y,D * TFR B,DP LDB #8 WRT4 STA MEM LSRA DECB BNE WRT4 TFR DP,A LDB #8 WRT5 STA MEM LSRA DECB BNE WRT5 * TFR X,D * TFR B,DP LDB #8 WRT6 STA MEM LSRA DECB BNE WRT 6 TFR DP,A LDB #8 WRT7 STA MEM LSRA DECB BNE WRT7 * LDS SPTEMP PULS D,X,Y,U,CC,DP,PC * END  TTL RESIDENT BASIC LINE EDITOR * * 9/07/81: LAST REVISION DATE * * ********************* * *----- WARNING -----* ***************************************************************** * THIS PROGRAM DOES A LOAD AND AUTO-MOVE TO A NEW LOCATION * FOR EXECUTION. IF ANY CHANGES ARE BEING MADE TO THE SOURCE * CODE, IT IS NECESSARY THAT ALL 'RELATIVE' INSTRUCTIONS BE * USED. NO JMP'S OR JSR'S ALLOWED NOR ABSOLUTE LOAD & STORE * ADDRESSES ***************************************************************** * **************************************************************** * THIS PROGRAM INITIALLY LOADS INTO THE BASIC BUFFER AREA. * AFTER DETERMINING THE FLEX MEMEND ADDRESS, IT MOVES * ITSELF TO THE TOP OF MEMORY MINUS 2K FOR ITSELF. FLEXS' * MEMEND IS THEN ADJUSTED AND PROGRAM EXECUTION CONTINUES AT * THE NEW ADDRESS. UPON EXITING BASIC WITH THE "FLEX" COMMAND, * THE MEMEND ADDRESS IS RESTORED TO THE ORIGINAL VALUE. * IF EXITING WITH THE "EXIT" COMMAND, MEMEND IS NOT RE-SET **************************************************************** * **************************************************************** * CONSIDERING THAT THE SEQUENCE OF COMMAND CODES IN THIS PROGRAM * USE THE ESCAPE CHAR, EITHER THE EDITOR ESCAPE CHARACTER MUST * BE CHANGED TO ANOTHER OR THE FLEX TTYSET PAUSE CHARACTER MUST * BE OTHER THAN THE ESCAPE CHAR. RECOMMEND THE DELETE (7F) CHAR * FOR FLEXS' TTYSET PAUSE. *************************************************************** * * REPLACED VECTORS ARE: (CODE); 7E CD15, 7E CD18 * BD CD24 7E CD03 * * EDIT COMMANDS ARE AS FOLLOWS: * * ENTER EDIT MODE - ESC E * EXIT EDIT MODE W/CHANGE - ESC X * CURSOR RIGHT - R * CURSOR LEFT - L * INSERT CHARACTER - I * DELETE CHARACTER - D * OVERLAY CHARACTER - O * RE-PRINT LINE - P * CHANGE STRING - C * ABORT EDIT MODE - X * * FLEX SUBROUTINE LINKAGES * BCOLDS EQU 0 BASIC COLD START ADDRESS FLEX EQU $CD00 WARMS EQU FLEX+3 OUTCHV EQU FLEX+16 GETCHR EQU FLEX+21 PUTCHR EQU FLEX+24 PCRLF EQU FLEX+36 TTYPAU EQU $CC0A F LEX PAUSE CHARACTER MEMEND EQU $CC2B FLEX MEMORY END LOCATION ESCRET EQU $CC16 ESCAPE RETURN ADDR * CR EQU $D CARRIAGE RETURN CODE LF EQU $A LINE FEED CODE CRLF EQU $0D0A CR/LF COMBINATION ESC EQU $1B ESCAPE CODE BELL EQU 7 RING TERM INAL BELL CODE SPACE EQU $20 SPACE CHARACTER CODE MAXCTL EQU $1F MAX CONTROL CODE MAXASC EQU $7F MAXIMUM ASCII CHAR ALLOWED TO BE ENTERED * MAXSTR EQU 32 MAXIMUM # OF CHARS ALLOWED IN STRING CHANGE MAXLNE EQU 128 MAXIMUM # OF CHARS ALLOWED I N LINE BUFFER * ORG $8000 ONLY NEEDED FOR INITIAL LOAD OF PROGRAM * MAY BE ANY ADDRESS THAT DOES NOT INTERFERE * WITH BASIC ITSELF, WHERE THERE IS AT LEAST * 2K CONTINUOUS MEMORY AVAILABLE * ******************** INITIALIZATION ROUTINE ********** *************** * START LDX MEMEND FIND OUT WHERE TO EXECUTE THIS PROGRAM LEAX -$8FF,X MAKE ROOM FOR THIS PROGRAM TFR X,Y TFR X,U LEAU START1-START,U NEW START ADDRESS PSHS U LEAY PEND-START,Y 'Y' CONTAINS THE END ADDRESS PSHS  Y LEAY START,PCR INITIAL PROGRAM LOAD ADDRESS ST1 LDA ,Y+ TRANSFER PROGRAM UP STA ,X+ CMPX ,S BNE ST1 LEAS 2,S FIX STACK WHEN FINISHED JMP [,S++] RESTART PROGRAM AT NEW ADDRESS * START1 BSR REPVEC REPLACE VECTORS LDA TTYPAU GET TTYSET PAUSE CHARACTER STA PAUSE,PCR SAVE FOR FUTURE USE LDD OUTCHV SAVE OUTCH I/O VECTOR ADDRESS STD SAVVEC,PCR JMP BCOLDS GO TO BASIC COLD START * * THESE CODES ARE XMITTED TO THE TERMINAL * FDB $FFFF HELPFUL TO LOCATE TABLE IN RAM PORT FDB $E004 CONTROL PORT ADDRESS (STATUS REG SIDE) CURGHT FDB $1B43 CURSOR RIGHT CONTROLS CURLFT FDB $1B44 CURSOR LEFT CONTROLS HOMCLR FDB $1B45 HOME CURSOR & CLEAR SCREEN HOME FDB $1B48 HOME CURSOR, NO SCREEN ERASE WRPRND FDB $1B76 ENABLE CURSOR WRAP AROUND AT END OF LINE EXIT FDB $1B7A RESET TERMINAL UPON EXIT CODE * * THESE CODES ARE TYPED BY THE USER * LEADIN FCB ESC LEAD-IN CHAR TO SCREEN CRIGHT FCB 'R CURSOR RIGHT COMMAND FROM KEYBOARD CLEFT FCB 'L CURSOR LEFT COMMAND FROM KEYBOARD INSERT FCB 'I INSERT CHARACTER CODE DELETE FCB 'D DELETE CHARACTER CODE OVRLAY FCB 'O OVERLAY CHARACTERS CODE CHANGE FCB 'C CHANGE STRING CODE PRINT FCB 'P PRINT BUFFER CODE ABORT FCB $18 ABORT EDIT CODE CHKTX FCB 'X UPDATE BASIC CODE TERM FCB 3 ^C TO TERMINATE COMMAND MODES DONE FCB ESC ESCAPE CODE PART OF COMMAND BKSPAC FCB $08 BACKSPACE & DELETE CHAR LNEWTH FCB 80 CHARACTER LINE WIDTH OF TERMINAL EDTMOD FCB 'E ESC E TO ENTER EDIT MODE FDB $F FFF END OF ALTERABLE RAM * * THESE FLAGS ARE UTILIZED TO CONTROL PROGRAM FLOW * SAVVEC FDB 0 CURRENT OUTCH I/O VECTOR ADDRESS PAUSE FCB 0 PAUSE CHAR TO STOPPING LISTING OLDMEM FDB 0 CURRENT MEMORY END LOCATION INEDIT FCB 0 IF MINUS, IN EDIT M!ODE LBUFPT FDB 0 ADDRESS INTO EDITOR LINE BUFFER LBFEND FDB 0 LAST CHARACTER IN LINE BUFFER VALID BUFPTR FDB 0 CURRENT LINE CHAR POINTER EOLFLG FCB 0 LINE BEING SAVED FLAG CHRBUF FCB 0 1ST CHAR OF TWO CHAR COMMAND ASCFLG FCB 0 ASCII RECEIVE"D EDTFLG FCB 0 GO EDIT UPDATE FCB 0 RE-XMIT LINE TO BASIC ESCFLG FCB 0 SET TILL VALID COMMAND VERIFIED SEPCHR FCB 0 CHANGE COMMAND SEPERATOR CHAR NOPRNT FCB 0 SUPPRESS RE-PRINTING LINE BKFLAG FCB 0 PREVIOUS ERROR FLAG COUNT FCB 0 NUMBER #OF CHARS TYPED IN INSERT MODE CURPOS FCB 0 CHARACTER POSITION ON THE CURRENT LINE ECHO FCB 0 ECHO/NO-ECHO INPUT LNFLG FCB 0 PAUSE AT CR ONLY CHRCNT FCB 0 NUMBER OF CHARS IN BUFFER FCB 1 VERSION * * SEARCH FOR INPUT & OUTPUT VECTORS AND RE$PLACE WITH * THE APPROPRIATE VECTORS THRU THIS PROGRAM * REPVEC LDX #0 START FROM BASE PAGE 0 CONT LDD ,X+ CHECK TWO BYTES, ONE BYTE AT A TIME CMPX #$FFF LAST LOCATION TO CHECK BEQ CONT1 CMPD #WARMS CHECK FOR EXIT TO FLEX ADDRESS BEQ GOTEXT CMPD #GETCHR CHECK FOR FLEX GETCHR VECTOR ADDRESS BEQ GOTINP IF FOUND CMPD #PCRLF FIND FLEX PCRLF VECTOR BEQ GOTCR CMPD #PUTCHR CHECK FOR FLEX PUTCHR VECTOR ADDRESS BNE CONT IF NO LEAU BPUT,PCR ADDRESS TO REPLACE WITH STU -1,X TO ALLOW FOR AUTO INCREMENT BRA CONT GO TILL END OF SEARCH RANGE * GOTEXT LEAU BOUT,PCR ADDRESS TO REPLACE WITH STU -1,X ALLOW FOR AUTO-INCREMENT BRA CONT * GOTINP LEAU BGET,PCR ADDRESS TO REPLACE WITH STU -1,X ALLOW FOR AUTO INCREMENT BRA CONT * GOTCR LEAU BCRLF,PCR ADDRESS TO REPLACE WITH STU -1,X BRA CONT * CONT1 LEAX LBUFER,PCR SET LBUFPT TO BEGINNING OF BUFFER STX LBUFPT,PCR POINT TO BEGINNING OF BUFFER STX LBFEND,PCR POINT END TO BEGINNING TO SHOW EMPTY LDX MEMEND SAVE OLD MEMORY END LOCATION STX OLDMEM,PCR LEAX START-1,PCR CHANGE FLEX MEMEND LOCATION STX MEMEND RTS * ******************** REPLACEMENT PCRLF ROUTINE ******************** * BCRLF PSHS A,B LDD OUTCHV CMPD SAVVEC,PCR PULS A,B BEQ DOFCL JMP PCRLF DOFCL PSHS A SAVE FOR RETURN LDA #-1 STA EOLFLG,PCR TELL CHAR COLLECTOR ROUTINE OF CR/LF LDA #CR LBSR BPUT PRINT IT LDA #LF LBSR OUTCHR PRINT BOTH CR & LF PULS A,PC RESTORE AND RETURN * * EXIT FROM BASIC GOES THRU THIS ROUTINE TO RESTORE MEMEND IN * FLEX, AND RESET TERMINAL. * BOUT LDX OLDMEM,PCR PICK UP OLD MEMEND ADDRESS STX MEMEND LDD EXIT,PCR RE-SET TERMINAL TO POWER UP CONFIG LBSR PUTTWO BDEL LBRN BDEL INCA WAIT TILL TERMINAL CLEARED BNE BDEL JMP WARMS * ****************** REPLACEMENT GETCHR ROUTINE ********************** * BGET TST UPDATE,PCR SEE IF LINE SHOULD BE SENT TO BASIC BPL BGET5 IF NO PSHS B,X,Y,U SAVE ALL LBRA DABRT4 YES, CONTINUE SENDING LINE TO BASIC * BGET5 TST ESCFLG,PCR IF MINUS, INVALID COMMAND ENTERED BPL BGET1 CLR ESCFLG,PCR CLEAR FOR NEXT TIME LDA CHRBUF,PCR GET PREVIOUSLY SAVED CHARACTER RTS CARRY CHAR BACK TO BASIC * BGET1 LBSR  INCHAR USE INTERNAL I/O TO GET EACH CHARACTER CMPA LEADIN,PCR DO WE WANT EDIT MODE? BEQ DOEDIT IF YES BGETOT RTS * DOEDIT STA CHRBUF,PCR SAVE ESCAPE CHAR IF INVALID COMMAND LBSR INCHAR GET SECOND BYTE FROM FLEX CMPA EDTMOD,PCR MUST B !E VALID TO ENTER EDIT MODE BEQ DEDIT1 PASTWO PSHS A,B SAVE B & CURRENT CHAR LDA CHRBUF,PCR GET LAST CHAR SAVED PULS B GET CURRENT CHAR INTO B STB CHRBUF,PCR SWAP WITH PREVIOUS CHAR LDB #-1 STB ESCFLG,PCR SET FOR NEXT GETCHR CALL " PULS B,PC RESTORE ORIGINAL CONTENTS OF B * DEDIT1 LDA #-1 STA INEDIT,PCR INDICATE IN EDIT MODE LBRA INCHAR RETURN WITH VALID CHAR FOR BASIC * ****************************************************************** * * THE FOLLOWING ROUTINE OUT #PUTS SEVERAL FUNCTION CODES TO SET UP * THE PARTICULAR TERMINAL BEING USED. IF THE FUNCTION DOES NOT * EXIST IN YOUR TERMINAL, SIMPLY ENTER ZEROES IN THE FDB TABLE IN * THE BEGINNING OF THE SOURCE. IF MORE FUNCTIONS ARE NEEDED, THE * SOURCE CAN SIMPL $Y BE RE-EDITED WITH ADDITIONS BEING MADE. * DEDIT5 LDD WRPRND,PCR CURSOR WRAP AROUND AT END OF LINE LBSR PUTTWO LDD HOMCLR,PCR CLEAR SCREEN & HOME CURSOR LBSR PUTTWO BSR CNTCHR FIND NUMBER OF CHARS IN BUFFER STA CHRCNT,PCR AND SAVE FOR% FUTURE REFERENCE LEAX LBUFER,PCR PRINT CONTENTS OF LINE BUFFER CMPX LBFEND,PCR SEE IF ANY CODE TO EDIT BNE DEDIT6 LBSR DOABRT INDICATE ABORTED MODE LDA #CR RETURN WITH CARRIAGE RETURN CHARACTER BEXIT PULS B,X,Y,U,PC RESTORE ALL AND& RETURN TO NORMAL BASIC * * DETERMINE HOW MANY CHARS ARE IN LINE BUFFER TO BE EDITED * AND KEEP TRACK THROUGH-OUT PROGRAM * CNTCHR LEAX LBUFER,PCR POINT TO FIRST CHAR CLRA EMPTY CHAR COUNTER CNT1 LDB ,X+ TEST FOR CR'S INCA CMPB #CR BNE 'CNT1 RTS LEAVE WITH TOTAL INCLUDING CR * DEDIT6 LDA ,X+ CMPA #CR BEQ DEDIT3 IF END OF LINE LBSR OUTCHR BRA DEDIT6 * DEDIT3 LBSR OUTCHR SEND CURSOR TO BEGINNING OF LINE DED LEAX LBUFER,PCR POINT INDEX TO FIRST CHARACTER LDD HOME,(PCR LBSR PUTTWO LBSR RNGBEL INDICATE BEGINNING OF BUFFER CLR CURPOS,PCR START WITH CHAR POS 0 DEDIT4 CLR COUNT,PCR LDA #-1 TURN OFF CHAR ECHO STA ECHO,PCR LBSR INCHAR GET COMMAND CHARACTER CLR ECHO,PCR CMPA #CR IF MISTAKEN )KEY BEQ DEDIT3 * * DO THE COMPARES FOR EACH CONTROL COMMAND CHARACTER TO * DETERMINE WHAT NEEDS TO BE DONE * DEDA CMPA CRIGHT,PCR CURSOR RIGHT BEQ DORGHT DO CURSOR RIGHT CMPA CLEFT,PCR CURSOR LEFT BEQ DOLEFT DO CURSOR LEFT CMPA INSE*RT,PCR INSERT CHARACTER LBEQ DOINS DO INSERT CMPA DELETE,PCR DELETE CHARACTER LBEQ DODEL DO DELETE CMPA OVRLAY,PCR OVERLAY CHARACTERS LBEQ DOOVR DO OVERLAY CMPA CHANGE,PCR CHANGE STRING LBEQ DOCHG DO CHANGE CMPA PRINT,PCR R+E-PRINT LINE LBEQ DOPRT DO PRINT CMPA ABORT,PCR ABORT EDIT MODE LBEQ DABRT1 DO ABORT CMPA DONE,PCR TEST FOR ESCAPE LBEQ CHKX GO CHECK FOR AN X TO EXIT WITH UPDATES BSR RNGBEL INDICATE INVALID COMMAND CODE ENTERED BRA DEDIT4 ,INVALID, GO TRY AGAIN * * MOVE THE CURSOR ONE POSITION TO THE RIGHT & BUMP THE BUFFER POINTER. * IF THE CURSOR IS POINTING TO THE CR AT THE END OF THE LINE, THE * BELL RINGS, AND THE CURSOR REMAINS WHERE IT WAS * DORGHT LDA ,X TEST IF END OF LINE C-MPA #CR BNE C1 INDICATE END OF LINE BSR RNGBEL BRA DEDIT4 * C1 LDD CURGHT,PCR BSR PUTTWO PRINT CHARACTER SEQUENCE FOR TERMINAL LEAX 1,X MOVE POINTER TO NEXT CHARACTER INC CURPOS,PCR UPDATE POSITION COUNTER * * TEST FOR END OF L.INE & DO A CR/LF IF SO * ELSE, LEAVE CURSOR ON SAME LINE * LDA CURPOS,PCR CMPA LNEWTH,PCR IS IT END OF LINE? BNE DEDIT4 LBSR DOCRLF LBRA DEDIT4 * * MOVE THE CURSOR ONE POSITION TO THE LEFT & BUMP THE BUFFER POINTER * IF THE CURSOR IS ON/ THE FIRST POSITION, THE BELL RINGS AND THE * CURSOR REMAINS WHERE IT WAS. * DOLEFT LEAU LBUFER,PCR LOAD ADDR OF BUFFER PSHS U PUT ON STACK TO WORK WITH CMPX ,S++ IS IT EQUAL TO X? BNE D1 IF YES BSR RNGBEL LBRA DEDIT4 * D1 LDD CUR0LFT,PCR PUT OUT CURSOR LEFT CODE TO TERMINAL BSR PUTTWO LEAX -1,X POINT TO PREVIOUS CHARACTER * * KEEP TRACK OF THE POSITION OF THE LAST CHARACTER * IN THE LINE BUFFER TO DETERMINE WHEN 128 CHARACTERS * HAVE BEEN ENTERED * DEC CURPOS,PCR L1DA LNEWTH,PCR GET WIDTH OF SCREEN DECA PSHS A LDA CURPOS,PCR SEE IF CURSOR MUST GO UP A LINE CMPA ,S+ AND FIX STACK AT SAME TIME LBNE DEDIT4 LDD HOME,PCR BSR PUTTWO SET CURSOR TO BEGIN OF LINE LDB LNEWTH,PCR CHAR COUNTER 2DECB ONLY NEED TO SPACE LNEWTH-1 POSITIONS PSHS B DOLT1 LDD CURGHT,PCR BSR PUTTWO SEND CURSOR TO END OF LINE DEC ,S BNE DOLT1 PULS B FIX STACK LBRA DEDIT4 * * PRINT THE TWO CHARACTERS IN THE A & B REGISTERS, A 1ST * PUTTWO LBSR 3OUTCHR TFR B,A LBRA OUTCHR * * RING THE BELL ON THE TERMINAL TO INDICATE AN ERROR CONDITION * RNGBEL LDA #BELL LBRA OUTCHR * * INSERT A CHARACTER INTO THE CURRENT LINE. USER REMAINS IN INSERT * MODE UNTIL THE TERMINATOR COMMAND IS TYPED. AS 4A CHARACTER IS * TYPED, THE REMAINDER OF THE LINE MOVES ONE POSITION TO THE RIGHT. * THE COMMAND MAY ALSO BE TERMINATED WITH A CR. THIS WILL POSITION * THE CURSOR TO THE BEGINNING OF THE LINE AND POINT THE LINE BUFFER * POINTER TO THE FIRST CHARACTER 5IN THE LINE * DOINS PSHS X TEST FOR END OF BUFFER LEAY LBUFER+MAXLNE,PCR CMPY ,S++ BEQ T3 * * IF A MATCH, INDICATES THE BUFFER IS FULL WITH THE * MAXIMUM 128 CHARACTERS * LDA CHRCNT,PCR SEE IF BUFFER IS FULL CMPA #MAXLNE BEQ T3 * 6DOINSA LBSR INCHAR GET CHAR TO INSERT OR TERMINATOR CMPA #CR LBEQ DED CMPA TERM,PCR TERMINATE WITH CURRENT LINE POINTER POSITION BNE B7 T3 BSR RNGBEL INDICATE END OF COMMAND LBRA DEDIT4 * B7 CMPA BKSPAC,PCR IF ERROR BNE B1  7LDA #-1 STA BKFLAG,PCR BRA B3 * B1 LBSR CLASS BCS DOINSA INC COUNT,PCR UPDATE CHAR ENTERED COUNT * B3 BSR DOINSC * * UPDATE THE POSITION OF THE LAST CHARACTER IN THE * BUFFER AND ALSO THE TOTAL NUMBER OF CHARACTERS IN * THE BUFFER * !8INC CURPOS,PCR KEEP TRACK OF CURSOR POSITION INC CHRCNT,PCR UPDATE CHAR TOTAL BRA DOINS * DOINSC TST BKFLAG,PCR BPL B2 TST COUNT,PCR MAKE SURE SOME CHAR HAVE BEEN ENTERED BNE B4 LDD CURGHT,PCR BSR PUTTWO MOVE CURSOR BACK FOR"9WARD IN COUNT ZERO BSR RNGBEL INDICATE ERROR DOINSD CLR BKFLAG,PCR DEC CURPOS,PCR FIX UP COUNTERS DEC CHRCNT,PCR LEAS 2,S REMOVE RETURN ADDRESS BRA DOINS * B4 LEAX -1,X FIX BUFFER POINTER BACK ONE CHAR BSR DODELB DEC COUNT,P#:CR UP CHAR COUNTER BRA DOINSD * B2 STX BUFPTR,PCR SAVE POINTER POSITION DOINS2 LDB ,X+ RE-PRINT REST OF LINE STB CHRBUF,PCR SAVE EACH CHAR ONE PASS STA -1,X REPLACE OLD WITH NEW TFR B,A TST NOPRNT,PCR SHALL WE PRINT? BMI A1 $;LBSR OUTCHR RE-PRINT LINE A1 LDA ,X SAVE NEXT CHAR TST NOPRNT,PCR BMI A2 LBSR OUTCHR PRINT CHAR IN 'A' A2 CMPA #CR BNE DOINS7 STB ,X+ STORE LAST CHAR BEFORE CR STA X PUT CR IN BUFFER AT END OF STRING BRA DOINS8 * DOINS7 ,Y UPDATE BUFFER POINTER PULS B INCB CMPB S BNE DOINS3 LBSR DOCRLF BRA DOINS3 * DOINS6 PULS B,Y,PC FIX STACK BEFORE LEAVING * * DELETE A CHARACTER POINTED TO BY THE CURSOR. EACH TIME A 'D' IS * TYPED, THE CHARACTER DISAPPEARS AND T?HE REMAINDER OF THE LINE * MOVES ONE POSITION TO THE LEFT * DODEL BSR DODELB LBRA DEDIT4 * DODELB DEC CHRCNT,PCR UPDATE LINE CHAR TOTAL BNE U2 INC CHRCNT,PCR LBRA RNGBEL IF NO CHARS, RETURN * U2 INC CHRCNT,PCR LEAY LBUFER,PCR NEE@D POINTER TO END OF STRING DODEL1 LDA ,Y+ FIND CR CMPA #CR BNE DODEL1 IF NOT FOUND LDA X GET IF TERMINATOR CMPA #CR LBEQ RNGBEL LEAX 1,X POINT TO NEXT CHARACTER AFTER DEL'D CHAR STX BUFPTR,PCR SAVE POINTER POSITION PSHS Y A PUSH LINE END POINTER LEAU -1,X DODEL2 LDA ,X+ RE-PRINT REST OF LINE CMPA #CR TEST FOR END OF LINE BNE DODEL4 PSHS A LDA #SPACE ERASE LAST CHAR ON SCREEN TST NOPRNT,PCR SHALL WE PRINT? BMI A4 IF NO LBSR OUTCHR A4 PULS AB DODEL4 STA ,U+ PACK LINE BUFFER DOWN ONE CHAR TST NOPRNT,PCR BMI A5 LBSR OUTCHR A5 CMPX ,S ARE WE AT END OF LINE? BNE DODEL2 DODEL9 LEAS 2,S FIX STACK LDD HOME,PCR START CURSOR ON TOP LINE, 1ST POSITION LBSR PUTTWO LDY BUFCPTR,PCR WHERE TO PUT CURSOR LEAY -1,Y BACK UP ONE CHAR LEAX LBUFER,PCR BEGIN ADDRESS OF BUFFER PSHS Y WHERE TO MOVE TO CMPX ,S BEQ A7 DODEL3 LDD CURGHT,PCR SKIP CURSOR OVER LINE TO POINTER LOCATION TST NOPRNT,PCR BMI A6 LBS DR PUTTWO A6 LEAX 1,X INCREMENT LINE POINTER CMPX ,S BNE DODEL3 A7 LDX BUFPTR,PCR PICK UP BUFFER POINTER AGAIN LEAX -1,X POINT TO CORRECT CHAR DEC CHRCNT,PCR PULS U,PC * * CHANGE THE 1ST OCCURANCE OF A STRING UP TO 32 CHARACTERS L EONG * WITH A NEW STRING OF FROM 0 TO 32 CHARACTERS LONG. A ZERO * AMOUNT IN THE NEW STRING WILL CAUSE A DELETION OF THE OLD STRING * THE COMMAND MAY BE ABORTED WITH A ^X. THE FIRST CHARACTER TYPED * AFTER THE COMMAND KEY WILL BE RECOGNIZED AS THE SEP FARATOR CHARACTER * AND MUST BE USED TO SEPARATE THE TWO STRINGS AND THE END OF THE * COMMAND. A CR MAY ALSO BE USED TO TERMINATE THE COMMAND * EX: C/OLD/NEW/ OR C/OLD/NEW(CR) * DOCHG LBSR DOCRLF LEAVE ROOM FOR DATA LBSR DOCRLF  LDA #'C  GLBSR OUTCHR INDICATE CHANGE MODE X1 LBSR INCHAR INPUT SEPARATOR CHAR CMPA #CR LBEQ DOPRT LBSR CLASS BCS X1 STA SEPCHR,PCR SAVE AWHILE E7 CLRB CHAR INPUTTED COUNTER LEAY OLDBUF,PCR STRING TO REPLACE * * READ IN STRING TO BE CHAN HGED * DOCHG1 LBSR INCHAR NOW INPUT STRING TO CHANGE CMPA ABORT,PCR IF WANTS TO END COMMAND BNE T1 LBSR RNGBEL INDICATE TERMINATION LBRA DOPRT * T1 CMPA BKSPAC,PCR IF USER WANTS TO CORRECT ENTRY BNE E1 DECB FIX CHAR COUNT BPL IE8 PSHS B LDD CURGHT,PCR LBSR PUTTWO LBSR RNGBEL PULS B BRA E7 * E8 LBSR BAKSPC LEAY -1,Y FIX CHAR POINTER BRA DOCHG1 * E1 CMPA #CR TO DO A DELETE STRING BNE E1A PSHS B CLRB LBRA DOCHG3 E1A LBSR CLASS BCS JDOCHG1 CMPA SEPCHR,PCR INDICATES END OF STRING TO CHANGE BEQ DOCHG2 * INCB UPDATE CHAR COUNTER CMPB #MAXSTR MAXIMUM ALLOWED BNE E1B DECB LDA BKSPAC,PCR ERASE LAST ENTRY LBSR OUTCHR LBSR BAKSPC FIX LINE DISPLAY LBSR RNGBELK INDICATE ERROR CONDITION BRA DOCHG2 E1B STA ,Y+ PUT STRING IN BUFFER BRA DOCHG1 * DOCHG2 TSTB MUST HAVE SOME COUNT LBEQ DOPRT IF NOT, ABORT COMMAND PSHS B SAVE CHAR COUNT E6 CLRB PREPARE COUNTER AGAIN LEAU NEWBUF,PCR * * READ ILN STRING THAT WILL REPLACE PREVIOUS STRING * DOCHG5 LBSR INCHAR NOW INPUT STRING TO CHANGE TO CMPA ABORT,PCR BNE Y1 LBSR RNGBEL INDICATE TERMINATION PULS B FIX STACK LBRA DOPRT * Y1 CMPA BKSPAC,PCR SEE IF ERROR IN ENTRY BNE E4 M DECB BPL E10 PSHS B LDD CURGHT,PCR LBSR PUTTWO LBSR RNGBEL PULS B BRA E6 * E10 LBSR BAKSPC LEAU -1,U FIX CHAR POINTER BRA DOCHG5 * E4 CMPA #CR BEQ DOCHG3 LBSR CLASS BCS DOCHG5 CMPA SEPCHR,PCR TEST FOR TERMINNATOR BEQ DOCHG3 * E3 INCB UPDATE CHAR COUNTER CMPB #MAXSTR TEST FOR MAXIMUM BNE E3A DECB LDA BKSPAC,PCR LBSR OUTCHR LBSR BAKSPC FIX LINE DISPLAY LBSR RNGBEL INDICATE ERROR BRA DOCHG3 E3A STA ,U+ BRA DOCHG5 * DOCHG3 OPSHS B SAVE THIS CHAR COUNT TOO LEAX LBUFER,PCR NOW FIND THE FIRST OCCURANCE OF STRING DOCHG7 LEAY OLDBUF,PCR LDB 1,S GET OLD CHAR COUNT DOCHG6 LDA ,X+ SEARCH LINE BUFFER FOR STRING CMPA #CR ARE WE AT END OF BUFFER? BNE DOCHG4 LBSPR RNGBEL IF NO MATCH FOUND LEAS 2,S FIX STACK LBRA DOPRT PRINT CR ON EXIT * DOCHG4 CMPA ,Y+ BNE DOCHG7 IF A MATCH FOR ONE CHAR DECB BNE DOCHG6 LDB 1,S FOUND THE STRING, NOW POINT TO IT DECB COMB LDA #-1 LEAX D,X MOVE QX BACK TO BEGIN OF STRING CLRA LDB S TFR D,Y GET NEW CHAR COUNT INTO 'Y' LDB 1,S GET OLD CHAR COUNT INTO 'B' LEAU NEWBUF,PCR POINT TO STRING TO INSERT IN PLACE OF LEAS 2,S FIX STACK NOW THAT FINISHED WITH COUNTERS CMPY #0 IF ONRLY DELETING A STRING, NO REPLACEMENT BEQ DOCHGA DOCHG8 LDA ,U+ STA ,X+ DECB BEQ DOCHG9 LEAY -1,Y BNE DOCHG8 BRA DOCHGA * * OLD STRING HAS BEEN REPLACED. MAY BE MORE NEW STRING TO INSERT * DOCHG9 LDA #-1 STA NOPRNT,PCR DOCHGZ LSEAY -1,Y BNE DOCHGD DOCHGF CLR NOPRNT,PCR LBRA DOPRT * DOCHGD INC CHRCNT,PCR UPDATE BUFFER CHAR TOTAL LDA CHRCNT,PCR CMPA #MAXLNE SEE IF LIMIT REACHED BEQ DOCHGE LDA ,U+ PSHS Y,U,B SAVE ALL FOR RETURN LBSR DOINSC INSERT RTEST OF NEW STRING INC CURPOS,PCR PULS Y,U,B BRA DOCHGZ DOCHGE DEC CHRCNT,PCR BRA DOCHGF * * IF HERE, NEW STRING HAS BEEN INSERTED, BUT MORE OF OLD STRING * MUST BE DELETED. * DOCHGA LDA #-1 STA NOPRNT,PCR DOCHGY PSHS B SAVE CHAR COUNUTER LBSR DODELB DELETE REST OF OLD LINE PULS B DECB BNE DOCHGY CLR NOPRNT,PCR BRA DOPRT RE-PRINT LINE ON EXIT * * THIS COMMAND OVERLAYS AND REPLACES THE CHARACTER UNDER THE CURSOR * WITH THE CHARACTER NOW TYPED. TERMINATE WITH A CR VOR TERMINATOR * CHARACTER. CR RETURNS TO BEGIN OF LINE, TERMINATOR CHAR TERMINATES * MODE AT CURRENT CURSOR POSITION. * DOOVR LBSR INCHAR PICK UP NEW CHARACTER TO REPLACE WITH CMPA #CR CR INDICATES END OF OVERLAY MODE LBEQ DED CMPA TERM,PWCR OVERLAY CHAR WILL TERMINATE BNE T5 T4 LBSR RNGBEL INDICATE COMMAND FINISHED LBRA DEDIT4 * T5 CMPA BKSPAC,PCR IF ERROR, FIX IT BNE T6 IF NOT PSHS A SAVE BACK-SPACE CHAR AWHILE LDA COUNT,PCR MAKE SURE SOME CHARS' ENTERED BEFORXE BNE T7 PULS A RESTORE BACK-SPACE CHAR LBSR RNGBEL BRA DOOVR * T7 LBSR BAKSPC DO THE BACKSPACE AND DELETE LEAX -1,X UPDATE BUFFER POINTER LDA CHRBUF,PCR TSTA BEQ T8 STA X RESTORE PREVIOUS CHAR LBSR OUTCHR RE-PRINT RYESTORED CHAR LDA BKSPAC,PCR BACK-UP CURSOR TO ALLOW FOR PRINT LBSR OUTCHR CLR CHRBUF,PCR T8 DEC COUNT,PCR UPDATE KEY HIT COUNTER BRA DOOVR * T6 LBSR CLASS BCS DOOVR LDB X SAVE ORIGINAL CHAR TILL NEXT KEY CMPB #CR BEQ T4 ZSTB CHRBUF,PCR STA ,X+ AND PUT IN BUFFER INC COUNT,PCR UPDATE CHANGES' COUNTER INC CURPOS,PCR UPDATE POSITION COUNTER LDA CURPOS,PCR CMPA LNEWTH,PCR IS IT END OF LINE? BNE DOOVR LBSR DOCRLF BRA DOOVR * * THIS COMMAND REPRI [NTS THE ENTIRE LINE AS IT NOW APPEARS IN * THE BUFFER. * DOPRT LDD HOMCLR,PCR CLEAR THE SCREEN AND HOME CURSOR LBSR PUTTWO LEAX LBUFER,PCR DOPRT1 LDA ,X+ CMPA #CR IS IT EOL? LBEQ DED LBSR OUTCHR BRA DOPRT1 * * THIS COMMAND TESTS !\FOR THE END SEQUENCE WHICH WILL XMIT THE * EDITED LINE BACK TO BASIC. * CHKX LDA #$FF TURN OFF CHAR ECHO STA ECHO,PCR LBSR INCHAR GET 2ND COMMAND CHAR CLR ECHO,PCR RE-ENABLE ECHO CMPA CHKTX,PCR TEST FOR EXIT COMMAND LBNE DEDIT4 B"]SR DOABRT CHKOUT LDA #-1 STA UPDATE,PCR INDICATE EXITING WITH CHANGES TO BE MADE DABRT4 LDX LBUFPT,PCR LDA ,X+ GET CHARACTER TO RETURN TO BASIC STX LBUFPT,PCR UPDATE LINE BUFFER POINTER CMPA #CR IS IT END OF LINE? BNE DABRT2 IF NO#^ CLR UPDATE,PCR LEAX LBUFER,PCR RELOAD POINTERS FOR NEXT EDIT SESSION STX LBUFPT,PCR BSR CLRBUF FILL LINE BUFFER WITH NULLS DABRT2 PULS B,X,Y,U,PC * * THIS COMMAND ABORTS THE EDIT FUNCTION WITH NO CHANGES BEING MADE * DABRT1 BSR DOABRT $_ BSR CLRBUF DABRT3 LDA #CR RETURN TO BASIC WITH CARRIAGE RETURN CHAR PULS B,X,Y,U,PC * DOABRT LEAX LBUFER,PCR RE-SET ALL PARAMETERS STX LBUFPT,PCR STX LBFEND,PCR CLR ESCFLG,PCR CLR INEDIT,PCR CLR UPDATE,PCR DON'T WANT NEW DATA ` CLR EDTFLG,PCR CLEAR EDIT MODE FLAG CLR EOLFLG,PCR CLR ASCFLG,PCR CLR CHRCNT,PCR INDICATE BUFFER EMPTY LDD HOMCLR,PCR EXIT WITH CLEAN SCREEN LBRA PUTTWO * CLASS CMPA #MAXCTL TEST FOR CONTROL CHARS BLS SETCAR CMPA #MAXASC TEaST FOR BIT 7 HIGH BHS SETCAR CLCAR ANDCC #$FE RTS SETCAR ORCC #1 RTS CARRY SET INDICATES BAD CHAR * CLRBUF LEAX OLDBUF+MAXLNE+65,PCR POINT TO END OF BUFFER PSHS X SAVE ON STACK LEAX OLDBUF,PCR POINT TO BEGINNING OF BUFFER CLRB CLRb ,X+ FILL BUFFER WITH NULLS CMPX ,S BNE CLRB PULS X,PC * ******************** REPLACEMENT PUTCHR ROUTINE ******************** * * THIS ROUTINE ACTS LIKE THE FLEX PUTCHR ROUTINE UNTIL * IT DETECTS THE 'IN EDIT FLAG' (INEDIT) SET. AT THIS POIcNT * ALL CHARACTERS RECEIVED UNTIL A CR ARE STORED IN A BUFFER * CAPABLE OF HOLDING 128 CHARACTERS. UPON THE FINAL CR, THE * ROUTINE JUMPS TO THE EDITING PORTION OF THE PROGRAM. * BPUT PSHS B,X,Y,U DON'T DESTROY ANY REGISTERS PSHS A LDD OUTCHdV TEST FOR 'OPEN "XXX" AS 0' COMMAND CMPD SAVVEC,PCR BNE DOFLEX PULS A TST INEDIT,PCR SHALL WE SAVE THIS LINE? BPL BPUT3 LDX LBUFPT,PCR * * TEST FOR CR RECEIVED, BUT NO ASCII CHARS * TST EOLFLG,PCR BPL BPUT10 * * TEST FOR PREVIeOUS ASCII, NO CR * BPUT12 TST ASCFLG,PCR BPL BPUT10 CLR INEDIT,PCR CLR ASCFLG,PCR CLR EOLFLG,PCR LDB #-1 STB EDTFLG,PCR BRA BPUT1 * * TEST FOR CR IN NOW, BUT ALSO RECEIVED ASCII * BPUT10 CMPA #MAXCTL TEST FOR VALID ASCII BLS fBPUT3 IF CONTROL CHARS (CR) LDB #-1 STB ASCFLG,PCR CLR EOLFLG,PCR EMPTY CR FLAG FOR NEXT PASS BPUT1 STA ,X+ SAVE EACH LINE AS IT IS ENTERED BPUT2 STX LBUFPT,PCR UPDATE LINE BUFFER POINTER STX LBFEND,PCR BPUT3 BSR OUTCHR PRINT THE CgHARACTER THRU FLEX TST EDTFLG,PCR LBMI DEDIT5 EXIT TO THE EDITOR BPUT4 PULS B,X,Y,U,PC RESTORE AND RETURN DOFLEX PULS A JSR PUTCHR BRA BPUT4 * INCHAR PSHS X,B SAVE FOR LATER LDX PORT,PCR INCHR1 BSR BTESTR BEQ INCHR1 LDA 1,X h GET RECEIVED CHAR ANDA #MAXASC STRIP PARITY IF USED PULS B,X TST ECHO,PCR SHALL WE ECHO THE CHAR? BPL OUTCHR RTS * OUTCHR PSHS B,X LDX PORT,PCR CMPA #CR TEST FOR CARRIAGE RETURN BNE INOUT7 IF NO TST LNFLG,PCR TEST FOR P iAUSE AT EOL BPL INOUT7 IF NO PAUSE INOUT2 BSR BTESTR WAIT FOR ANOTHER CHAR BEQ INOUT2 LDB 1,X ANDB #MAXASC STRIP PARITY CMPB #CR WANT ABORT LIST? BEQ ENDLST CMPB PAUSE,PCR IF NO, CONTINUE LOOPING BNE INOUT2 CLR LNFLG,PCR j BRA INOUT1 * INOUT7 BSR BTESTR TEST FOR KEY PRESSED BEQ INOUT1 LDB 1,X ANDB #MAXASC CMPB PAUSE,PCR TEST FOR PAUSE CHARACTER BNE INOUT1 LDB #-1 STB LNFLG,PCR SET FOR EOL STOP INOUT1 BSR BTESTX WAIT FOR ACIA BEQ INOUT1  kSTA 1,X PRINT CHAR PULS B,X,PC AND RETURN * ENDLST LEAS 5,S FIX STACK FROM BPUT ROUTINE PULS B,X,Y,U RESTORE REGISTERS AND RETURN CLR LNFLG,PCR LEAS 2,S JMP [ESCRET] END LISTING * BTESTR LDB X GET STATUS BIT BITB #1 TEST FO lR RECEIVED RTS * BTESTX LDB X GET STATUS BIT BITB #2 TEST FOR READY TO XMIT RTS * BAKSPC PSHS A,B,X LDX PORT,PCR LOAD ACIA ADDRESS BAKSP1 BSR BTESTX BEQ BAKSP1 LDA #SPACE STA 1,X BAKSP2 BSR BTESTX BEQ BAKSP2 LDA BKSPAC,PmCR WRITE BACK-SPACE CHAR STA 1,X PULS A,B,X,PC RESTORE BACKSPACE CHAR FOR OUTPUT * DOCRLF PSHS A,B,X LDD #CRLF LBSR PUTTWO PULS B,A,X,PC * OLDBUF RMB MAXSTR NEWBUF RMB MAXSTR LBUFER RMB MAXLNE PEND EQU * * END START  TTL BASIC CROSS REFERENCE 22-OCT-81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * * CREATE CROSS-REFERENCE TABLE OF CONTROL * TRANSFERS AND LISTS ALL VARIABLES USED * SYNTAX= BASEREF, COLUMN EQU 12 COLUMNS ACROSS PAGE FCB1 EQU $C840 WARMS EQU $CD03 PUTCHR EQU $CD18 PSTRNG EQU $CD1E PCRLF EQU $CD24 GETFIL EQU $CD2D SETEXT EQU $CD33 OUTDEC EQU $CD39 RPTERR EQU $CD3F FMSCLS EQU $D403 FMS EQU $D406 START LBRA BEGIN * * WORK STORAGE BUFFER RMB 144 NAME RMB 80 BUFPTR RMB 2 REFFRM RMB 2 REFFLG RMB 1 COLNUM RMB 1 DECNUM RMB 2 PRENUM RMB 2 TABEND FDB TABLE LARGST FDB 1 LINNUM FDB 0 PASS FCB 0 VARLTR FCC "A" ORG $100 * BEGIN JSR PCRLF LDX #FCB1 JSR GETFIL BCS ERR1 LDA #3 .BAS Ext JSR SETEXT BSR OPEN BSR PTITLE LOOP BSR INLINE INPUT A BASIC LINE LBSR PARSE FIND REFERENCES BRA LOOP OPEN LDX #FCB1 LDA #1 OPEN TO READ STA ,X JSR FMS OPEN FILE BNE ERR1 RTS ERR1 JSR RPTERR DONE JSR PCRLF JMP WARMS PTITLE LEAX TITLE,PCR JSR PSTRNG BSR PNAME JSR PCRLF LEAX TITL2,PCR JMP PSTRNG PNAME LDX #FCB1+4 POINT TO NAME LDB #8 BSR PNAM1 LDA #'. JSR PUTCHR LDB #3 PNAM1 LDA ,X+ JSR PUTCHR DECB BNE PNAM1 RTS * INPUT A BASIC LINE TO BUFFER INLINE LEAX BUFFER,PCR LDA #13 CR LEAU NAME,PCR PSHS U INLIN1 STA ,X+ FILL BUFFER CMPX ,S BNE INLIN1 LEAS 2,S FIX STACK LEAY BUFFER,PCR LDX #FCB1 INLIN2 JSR FMS GET NEXT CHAR BNE ERR2 CMPA #$20 SPACE? BEQ INLIN2 SKIP SPACES CMPA #'a BLT INLIN4 CMPA #'z BGT INLIN4 ANDA #$5F CONV TO U.C. INLIN4 STA ,Y+ PUT IN BUFFER CMPA #13 CR? BNE INLIN2 RTS ERR2 LDA 1,X CMPA #8 EOF? BNE ERR1 TST PASS,PCR BEQ PTABLE LBRA PRVARS * PRINT THE CROSS-REF TABLE PTABLE LEAX TABLE,PCR CMPX TABEND,PCR ANY REFS? BNE PRTABL LEAX NOREF S,PCR JSR PSTRNG BRA FINISH PRTABL CLR REFFLG,PCR SET LINE# NOT PRINTED LEAY TABLE,PCR PRT1 LDX ,Y CMPX LINNUM,PCR BEQ PRT3 PRT2 LEAY 4,Y CMPY TABEND,PCR BNE PRT1 LDX LINNUM,PCR CPX LARGST,PCR BEQ FINISH LEAX 1,X STX LINNUM,PCR BRA PRTABL PRT3 TST REFFLG,PCR BNE PRT4 JSR PCRLF TFR Y,X SET ADDRESS OF NUM LDB #COLUMN+1 STB COLNUM,PCR JSR OUTDEC BSR OUT2S LDA #': JSR PUTCHR INC REFFLG,PCR PRT4 TFR Y,X LEAX 2,X ADRS OF FROM REF BSR SETPST BCS PRT2 LDB #1 BSR CKCOL BSR OUT1S JSR OUTDEC BRA PRT2 SETPST LDU PRENUM,PCR CMPU ,X BEQ RTS2 LDU ,X STU PRENUM,PCR ANDCC #$FE RTS RTS2 ORCC #1 RTS * FINISH JSR PCRLF LEAX TABCOM,PCR JSR PSTRNG INC PASS,PCR LBRA VAREAD OUT8S BSR OUT4S OUT4S BSR OUT2S OUT2S BSR OUT1S OUT1S LDA #$20 JMP PUTCHR CKCOL DEC COLNUM,PCR BNE CKCOL2 JSR PCRLF BSR OUT8S LDA #COLUMN STA COLNUM,PCR CKCOL2 RTS GTLNUM LEAX BUFFER,PCR STX BUFPTR,PCR POSITION IN BUFFER BSR INPDEC GET LINE # STX REFFRM,PCR SAVE CURRENT LINE # RTS1 RTS PARSE BSR GTLNUM PARS2 LEAY WORDS,PCR PARS3 LDX BUFPTR,PCR LDA ,X CMPA #13 BEQ RTS1 BRA MATCH * BUMP TO NEXT WORD PARS5 LDA ,Y+ BNE PARS5 BRA PARS3 * BUMP TO NEXT POSN IN BUF PARS6 LEAX 1,X STX BUFPTR,PCR BRA PARS2 * X=POSN IN BUFFERR * Y=POSN IN WORD LIST MATCH LDA ,Y+ BEQ MATCH2 MATCH FOUND CMPA #$FF END OF WORDS? BEQ PARS6 NO MATCH FOUND CMPA ,X+ BEQ MATCH CONTINUE THRU WORD BRA PARS5 MATCH2 STX BUFPTR,PCR SAVE POSITION BSR INPDEC GET LINE # BNE PARS2 NO NUM FOUND MATCH3 LDY TABEND,PCR STX ,Y++ CMPX LARGST,PCR BMI MATCH4 STX LARGST,PCR MATCH4 LDX REFFRM,PCR STX ,Y++ STY TABEND,PCR * CHECK FOR ANOTHER REF FOR "ON GOTO/GOSUB" * LDX BUFPTR,PCR LDA ,X CMPA #', BNE PARS2 LEAX 1,X BRA MATCH2 * GET A DECIMAL NUMBER IMBEDDED IN TEXT * IF VALID NUM NOT FOUND, RETURNS 'NOT EQUAL' COND. * AND X=0... INPDEC CLR DECNUM,PCR BSR GETDIG GET 1ST DIGIT BEQ INP2 GET REST LDX #0 LDA #1 RTS INP2 STA DECNUM+1,PCR INP3 BSR NXTDIG BEQ INP3 LEAX -1,X STX BUFPTR,PCR SAVE NEXT POSN LDX DECNU M,PCR CLRA RTS NXTDIG BSR GETDIG BEQ ADDNUM RTS ADDNUM PSHS X,A LDX #9 LDD DECNUM,PCR ADD1 ADDD DECNUM,PCR MULT BY 10 LEAX -1,X BNE ADD1 STD DECNUM,PCR LDD #0 PULS B ADDD DECNUM,PCR ADD NEW DIGIT STD DECNUM,P!CR PULS X CLRA RTS GETDIG LDA ,X+ GET CHAR SUBA #'0 BLT GETD1 CMPA #9 BGT GETD1 CLRB VALID DIGIT FOUND RTS GETD1 LDB #$FF NOT A DIGIT RTS * RE-READ FILE & GET ALL VARIABLES VAREAD JSR FMSCLS CLOSE FILE LBSR OPEN" OPEN AGAIN LEAX TABLE,PCR STX TABEND,PCR RESET POINTER VARD2 LBSR INLINE GET 1 BASIC LINE LBSR GTLNUM GET LINE # VARD4 LDX BUFPTR,PCR VARD5 LDA ,X CMPA #13 CR? BEQ VARD2 DONE WITH CURRENT LINE BSR TSTREM IS IT REMARK B#EQ VARD2 SKIP REST OF LINE LDX BUFPTR,PCR LDA ,X CMPA #34 DOUBLE QUOTE? BEQ SKPQUT CMPA #39 SINGLE QUOTE? BEQ SKPQUT LBSR INPDEC DECIMAL NUMBER? BEQ VARD4 SKIP IT BSR TSTDEL DELIMITER BNE VARD4 SKIP IT BRA TSTKE$Y KEYWORD? * SKIP BETWEEN QUOTES SKPQUT LEAX 1,X SKPQ2 CMPA ,X+ BNE SKPQ2 BUMP TO NEXT QUOTE STX BUFPTR,PCR SAVE POINTER BRA VARD5 * TEST FOR REMARK TSTREM LEAY REMWRD,PCR TSTRM1 LDA ,Y+ BNE TSTRM2 RTS MATCH FOUND TSTRM2 CMPA ,X+ BEQ TSTRM1 CONTIN THRU WORD RTS NO MATCH * TEST FOR DELIMITER & SKIP IT TSTDEL LDX BUFPTR,PCR LEAY DELTAB,PCR TSTDL2 LDA ,Y+ BEQ TSTDL4 END OF TAB/NO MATCH CMPA ,X BNE TSTDL2 TRY ANOTHER LEAX 1,X STX BUFPTR,PCR TSTDL4 RTS * FIND KEY WORDS & SKIP THEM TSTKEY LEAY KEYWRD,PCR TSTKY2 LDX BUFPTR,PCR TSTKY3 LDA ,Y+ BEQ TSTKY5 MATCH FOUND CMPA #$FF END OF TABLE? BEQ VARSTR NOT A KEY WORD CMPA ,X+ BEQ TSTKY3 CONTINUE * BUMP TO NEXT WORD TSTKY4 LDA ,Y+ BNE TSTKY4 BRA TSTKY2 TSTKY5 STX BUFPTR,PCR SKIP WORD BRA VARD5 * SAVE THE VARIABLE NAME & LINE# VARSTR LDX BUFPTR,PCR LDY TABEND,PCR LDA ,X+ STA ,Y+ STX BUFPTR,PCR STY TABEND,PCR BSR TSTDEL BNE VARST2 BRA FNDKEY VARST2 LEAX -1,X STX BUFPTR,PCR BUMP BACK TO DELIM VARST3 CLRA LDY TABEND,PCR STA ,Y+ LDX REFFRM,PCR STX ,Y++ STY TABEND,PCR LBRA VARD4 FNDKEY LEAY KEYWRD,PCR FNDK2 LDX BUFPTR,PCR FNDK3 LDA ,Y+ BEQ VARST3 MATCH FOUND CMPA #$FF END OF TABLE? BEQ VARSTR KEY NOT FOUND CMPA ,X+ BEQ FNDK3 * BUMP TO NEXT KEY FNDK4 LDA ,Y+ BNE FNDK4 BRA FNDK2 NOVARS LEAX NOVFND,PCR JSR PSTRNG LBRA DONE * PRINT VARIABLE TABLE * CHECK 1ST LETTER MATCH PRVARS LEAX TABLE,PCR CPX TABEND,PCR BEQ NOVARS LDA VARLTR,PCR PRVR2 CMPA ,X+ BEQ PRVR6 FOUND IT * BUMP TO NEXT VAR PRVR4 LDB ,X+ BNE PRVR4 LEAX 2,X SKIP OVER ADDRS CPX TABEND,PCR END? BNE PRVR2 TRY NEXT INC VARLTR,PCR BUMP TO NEXT LTR LDA VARLTR,PCR CMPA #$5B Z+1? BNE PRVARS DO NEXT LTR LBRA DONE TABLE COMPLETED PRVR6 LEAX -1,X STX BUFPTR,PCR JSR PCRLF * SAVE VAR NAME & PRINT IT LEAY NAME,PCR PRVR8 LDA ,X+ STA ,Y+ BNE PRVR8 LDX BUFPTR,PCR LDB #COLUMN+1 STB COLNUM,PCR LDB #7 ALLOW 7 CHARS PRVR10 LDA ,X+ BEQ PRVR12 JSR PUTCHR DECB BRA PRVR10 PRVR12 ANDB #7 LDA #$20 JSR PUTCHR DECB BNE PRVR12 LDA #': JSR PUTCHR * PRINT REF LINE  # PRREF LDX BUFPTR,PCR CLR ,X+ DELETE FROM TABLE PRREF2 LDA ,X+ BNE PRREF2 PSHS X BSR SETPS1 BCS PROUT LDB #1 LBSR CKCOL LBSR OUT1S JSR OUTDEC PROUT PULS X LEAX 2,X STX BUFPTR,PCR BRA SERNAM SETPS1 LDU PREN UM,PCR CMPU X BEQ RTS3 LDU X STU PRENUM,PCR ANDCC #$FE RTS RTS3 ORCC #1 RTS * * SEARCH FOR ANOTHER VAR OF SAME NAME SERNAM LDX BUFPTR,PCR SERN1 CPX TABEND,PCR LBEQ PRVARS SERN2 LEAY NAME,PCR TST ,X DELETED? BEQ SERN !6 SERN3 LDA ,X+ BEQ SERN7 END OF VAR FOUND CMPA ,Y+ MATCH? BEQ SERN3 * BUMP TO NEXT VAR SERN4 TST ,X+ BNE SERN4 SERN5 LEAX 2,X SKIP LINE# STX BUFPTR,PCR BRA SERN1 SERN6 LEAX 1,X BRA SERN4 SERN7 CMPA ,Y END OF NAME " ALSO? BNE SERN5 BRA PRREF TITLE FCC 'BASIC Cross-Reference Table for---- ',4 TITL2 FCC 'LINE# REFERENCED FROM:',13,10,0,0 FCC '----- -------------------------------------',4 TABCOM FCC '---- VARIABLE REFERENCES ----',13,10,0,0 FCC  #'VAR. FOUND IN LINE #',13,10,0,0 FCC '---- -------------------------------------',4 NOREFS FCC '*** NO REFERENCES FOUND ***',4 NOVFND FCC '*** NO VARIABLES FOUND ***',4 REMWRD FCC 'REM',0 DELTAB FCC '#,;:.=+-*/ ^()<>',13,0 * * TABLE OF KEY WO$RDS KEYWRD FCC 'ABS',0 FCC 'AND',0 FCC 'ASC',0 FCC 'AS',0 FCC 'ATN',0 FCC 'CHAIN',0 FCC 'CHR$',0 FCC 'CLOSE',0 FCC 'COS',0 FCC 'CVT$%',0 FCC 'CVT$F',0 FCC 'CVT%$',0 FCC 'CVTF$',0 FCC 'DATA',0 FCC 'DATE$',0 %FCC 'DEF',0 FCC 'DIGITS',0 FCC 'DIM',0 FCC 'DPEEK',0 FCC 'DPOKE',0 FCC 'END',0 FCC 'ERL',0 FCC 'ERROR',0 FCC 'ERR',0 FCC 'EXEC',0 FCC 'EXP',0 FCC 'FIELD',0 FCC 'FN',0 FCC 'FOR',0 FCC 'FRE',0 FCC 'GET',0 F&CC 'HEX',0 FCC 'IF',0 FCC 'INCH$',0 FCC 'INPUT',0 FCC 'INSTR',0 FCC 'INT',0 FCC 'KILL',0 FCC 'LEFT$',0 FCC 'LEN',0 FCC 'LET',0 FCC 'LINE',0 FCC 'LOG',0 FCC 'LSET',0 FCC 'MID$',0 FCC 'NEW',0 FCC 'NEXT',0 F'CC 'NOT',0 FCC 'OLD',0 FCC 'ON',0 FCC 'OPEN',0 FCC 'OR',0 FCC 'PEEK',0 FCC 'PI',0 FCC 'POKE',0 FCC 'POS',0 FCC 'PRINT',0 FCC 'PTR',0 FCC 'PUT',0 FCC 'READ',0 FCC 'RECORD',0 FCC 'RENAME',0 FCC 'RESTORE',0 (FCC 'RETURN',0 FCC 'RIGHT$',0 FCC 'RND',0 FCC 'RSET',0 FCC 'SGN',0 FCC 'SIN',0 FCC 'SPC',0 FCC 'SQR',0 FCC 'STEP',0 FCC 'STOP',0 FCC 'STR$',0 FCC 'SWAP',0 FCC 'TAB',0 FCC 'TO',0 FCC 'USING',0 FCC 'USR',0 )FCC 'VAL',0 * TABLE OF BASIC Control Transfer Words WORDS FCC 'GOSUB',0 FCC 'GOTO',0 FCC 'RESUME',0 FCC 'THEN',0 FCC 'ELSE',0 FCB $FF * TABLE EQU * * END START  TTL DECOMPILE 11-10-81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * * BASIC DECOMPILER FOR TSC XBASIC ORG 3-5-81 * MOD DATA STATEMENT,<=,>= 9-21-81 * MOD '\' LINE SEPERATOR * MOD $C0 DEF FNX * MOD $D0 FNX(X) VER BRA VEREND FCC $81,' DCOMP V1.8 11-10-81' VEREND BRA START1 SFCB EQU $C840 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 INBUFF EQU $CD1B PCRLF EQU $CD24 GETFIL EQU $CD2D SETEXT EQU $CD33 RPTERR EQU $CD3F FMS EQU $D406 PSTR EQU $CD1E FLEX PSTRNG ROUTINE FCB $FF ERRTYP FCB 00 FCB $FF C0VRSV FDB 0 CODE C0 VARIABLE SAVE O0 RMB 7 OPERAND OP RMB 1 OPER POWER R0 RMB 7 RESULT DECCNT RMB 1 DECIMAL CNT PTENPT RMB 2 POWER OF TEN SAVE EXPON RMB 2 DECIMAL EXPONENT DIGCNT RMB 1 DIGIT CNTR XSAVE RMB 2 DDIGIT RMB 1 OUTDEC SAVE ZFLAG RMB 1 OUTDEC ZERO FLAG DSKFLG RMB 1 DISK FLAG DIGSAV RMB 20 DIGIT SAVE AREA COUNT1 RMB 1  DECODE COUNTER BCOUNT RMB 1 BYTE COUNT OF LINE VEND RMB 2 VARIABLE TABLE END PUTCHX TST DSKFLG BEQ PUTCHY PSHS X LDX #WFCB JSR DOFMS PULS X,PC PUTCHY JMP PUTCHR PCRLFX LDA #$D TST DSKFLG BNE PUTCHX JMP PCRLF START1 LDX #LINEIN JSR PSTR CLR DSKFLG CLR COUNT1 LDX #SFCB JSR GETFIL BCS RPTER1 ERROR LDA #8 .BAC EXT JSR SETEXT LDA #1 OPEN READ STA 0,X BSR DOFMS OPEN BSR DOFMS GET START $89 CMPA #$89 BNE CLOSE NOT .BAC LDA #$FF SET BINARY FILE STA 59,X SPACE COMPR FLAG BSR DOFMS STA BCOUNT FIRST BYTE COUNT LDX #ASKDSK JSR PSTR JSR GETCHR CMPA #'Y BNE SCROLL LDX #FILNAM JSR PSTR JSR INBUFF LDX #WFCB JSR GETFIL BCS RPTER1 LDA #3 .BAS DEFAULT JSR SETEXT LDA #2 OPEN WRITE STA 0,X BSR DOFMS INC DSKFLG SCROLL JSR PCRLF LDX #VTABLE STX VEND NLINE BSR GETLIN BSR OUTLIN BSR PCRLFX TST BCOUNT END? BEQ CLOSE BRA NLINE NEXT LINE DOFMS JSR FMS DO FMS CALL BEQ RTS2 RPTER1 JSR RPTERR CLOSE LDX #SFCB LDA #4 STA 0,X JSR FMS CLOSE FILE LDX #WFCB LDA #4 JSR FMS CLOSE FILE JMP WARMS GETLIN LDY #LINEIN GET LINE LDX #SFCB NCHR BSR DOFMS NEXT CHAR IN C COUNT1 SUBA COUNT1 DECODE STA 0,Y+ DEC BCOUNT LDB BCOUNT CMPB #$FF BNE NCHR CLR 0,-Y STA BCOUNT NEW BYTE CNT RTS OUTLIN LDX #LINEIN OUTPUT LINE BSR OUTDC1 LDA #$20 LBSR PUTCHX OUTLN1 BSR ENDLIN LDA 0,X C $881C,$EA14,$545C,$7586,-37 PTENE FDB $D9C7,$DCED,$53C7,$2282,-38 TENK FDB 10000,1000,100,10,1,0 NUMERR FCC 'NUMERICAL OR FILE ERROR!!',7,4 WFCB RMB 320 LINEIN FCC 'V1.8 *** DECOMPILER FOR TSC XBASIC ***',$D,$A,4 ASKDSK FCC 'BUILD A DISK FILE? (Y/N)',4 FILNAM FCC 'FILENAME? ',4 VTABLE EQU LINEIN+256 END VER   TTL CUSTOMIO STRING & CHARACTER TESTER - 1,9,82 * WARMS EQU $CD03 PSTRNG EQU $CD1E PUTCHR EQU $CD18 PCRLF EQU $CD24 * ORG $100 * START BRA START1 * VN FCB 1 * START1 LDD #$1B45 JSR PUTCHR TFR B,A JSR PUTCHR * LDX #0 ST1 LE!AX -1,X BNE ST1 * LDX #CRIGHT JSR PDATA * JSR DELAY LDX #CDOWN JSR PDATA * JSR DELAY LDX #CLEFT JSR PDATA * JSR DELAY LDX #CUP JSR PDATA * JSR DELAY LDX #CURSXY JSR PDATA * JSR DELAY JSR PCRLF LDX "#REV JSR PSTRNG * JSR DELAY LDX #NOR JSR PSTRNG * JSR DELAY JSR PCRLF LDX #CUROFF JSR PDATA * JSR DELAY JSR PCRLF LDX #CURON JSR PDATA * JSR DELAY JSR PCRLF LDX #BLOCK JSR PDATA * JSR DELAY JSR PCRL#F LDX #UNDER JSR PDATA * JSR DELAY JSR PCRLF LDX #GRAPON JSR PDATA * JSR DELAY JSR PCRLF LDX #NORM JSR PDATA JSR DELAY JSR PCRLF LDX #DONE JSR PSTRNG JMP WARMS * PDATA LDA ,X+ CMPA #4 BEQ PDAOUT J$SR PUTCHR BRA PDATA PDAOUT RTS * DELAY PSHS A,X LDX #0 LDA #4 DEL1 LEAX -1,X BNE DEL1 DECA BNE DEL1 PULS A,X,PC * CRIGHT FCB $81,$81,$81,$81,$81,$81,$81,$81,$81,$81,$81 FCC $81,$81,$81,$81,$81,$81,'CURSOR RIGHT',4 * CLEFT  FCB $82,$82,$82,$82,$82,$82,$82,$82,$82,$82,$82 FCB $82,$82,$82,$82,$82,$82,$82,$82,$82,$82,$82 FCC $82,$82,$82,$82,$82,$82,'CURSOR LEFT',4 * CDOWN FCC $83,$83,$83,$83,$83,$83,'CURSOR DOWN',4 * CUP FCC $84,$84,$84,$84,$84,$84,' CURSOR UP',4  * CURSXY FCC $8A,8,40,'CURSOR X-Y',4 * REV FCC $9C,'REVERSE VIDEO',4 * NOR FCC $9E,'NORMAL VIDEO',4 * CUROFF FCC $95,'CURSOR OFF',4 * CURON FCC $9A,'CURSOR ON',4 * BLOCK FCC $94,'BLOCK CURSOR',4 * UNDER FCC $99,'CURSOR UNDERLINE',4 * GRAPON FCC $9F,'this is the graphics mode as you can see',4 * NORM FCC $A0,'THE ABOVE WAS OBVIOUSLY THE GRAPHICS MODE',4 * DONE FCC 'END OF TEST',4 * END START  TTL CRTSET COMMAND 26 JAN 1981 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * ORG $C100 VER FCB $20 FCB VEREND-* FCB $81,'.,$83, $D,$A VEREND EQU *-1 NXTCH EQU $CD27 WARMS EQU $CD03 DFCB EQU $C840 RPTERR EQU $CD3F GETHEX EQU $CD42 CRTRAM EQU $CCB0 INDEC EQU $CD48 PUTCHR EQU $CD18 OUTADR EQU $CD45 PCRLF EQU $CD24 ORG $C100 START BRA START1 VN FCB 1 VER SION NUMBER VALID FCB 0 VALID COMMAND FOUND COUNT FCB 0 INDEX INTO TABLE XTEMP FDB 0000 TEMP FDB XTEMP1 FDB 0000 TEMP FDB START1 LDU #START LEAU -3,U MAKE WORKSPACE JSR NXTCH PULL CHAR FROM LINEBUF BCS DUMPPR NOT ALPHA; DUMP AL L START2 ANDA #$5F FIX UP LOWER CASE STA U SAVE JSR NXTCH 2ND CHAR BCS SYNERR ANDA #$5F STA 1,U SAVE AGAIN JSR NXTCH 3RD & LAST CHAR BCS SYNERR ANDA #$5F STA 2,U FINAL SAVE JSR NXTCH NOT EQUAL SIGN CMPA #$3D B NE SYNERR LDX #CMDTAB SYNTAX OK; DECODE CLR COUNT NXTCMD LDA U CMPA ,X BNE NMATCH LDD 1,U 1ST CHAR OK, NOW CHK LAST CMPD 1,X BEQ CMDMAT IF MATCH NMATCH LEAX 5,X INCREMENT TO NEXT COMMAND INC COUNT INCREMENT INDEX INTO TA BLE CMPX #TABEND ARE WE DONE ? BNE NXTCMD IF NO BRA SYNERR YES, TYPO ERROR CMDMAT STA VALID SET OK FLAG JMP HEXPRT GO TO ROUTINE DUMPPR TST VALID IF 0, DUMP ALL LBEQ DMPCNT EXIT JMP WARMS SYNERR LDX #DFCB LDB #$1A SYNTAX E RROR CODE STB 1,X JSR RPTERR TELL OPERATOR BRA EXIT BACK TO FLEX CMDTAB FCC 'ACA' ABSOLUTE CURSOR ADDRESS FDB HEXPRT FCC 'OFF' X-Y OFFSET BIAS FDB HEXPRT FCC 'NOR' NORMAL VIDEO FDB HEXPRT FCC 'REV' REVERSE VIDEO MODE  FDB HEXPRT FCC 'EOL' ERASE TO END OF LINE FDB HEXPRT FCC 'EOF' ERASE TO END OF FRAME FDB HEXPRT FCC 'ERF' ERASE FRAME FDB HEXPRT FCC 'HOM' HOME CURSOR FDB HEXPRT TABEND FCB 0 HEXPRT BSR GOMATC GO MATCH COMMAND JSR  GETHEX PULL NEW DATA FROM LINEBUF BCS SYNERR BAD STX [XTEMP] JMP START1 GO CHECK FOR ANOTHER CHANGE GOMATC LDX #CRTRAM ADDR OF TABLE IN FLEX LDB COUNT LOAD INDEX BEQ FOUND NOT FOUND YETOR NOTYET LEAX 2,X SET TO NEXT FDB DECB UPDATE INDEX BNE NOTYET FOUND STX XTEMP RTS  DMPCNT LDY #CRTRAM RAM ADDRESS LDX #CMDTAB CRTSET TABLE ADDR STX XTEMP1 LBSR PCRLF CARRIAGE RETURN/LINE FEED BSR DMPHEX GO DUMP EACH PARAMETER BSR DMPHEX BSR DMPHEX BSR DMP  HEX BSR DMPHEX BSR DMPHEX BSR DMPHEX BSR DMPHEX LBSR NXTCH CHECK FOR END OF COMMAND CMPA #$D BEQ EXIT2 LBCC START2 MUST BE MORE EXIT2 JMP WARMS DMPHEX BSR DMPWRD GO DUMP COMMAND WORD LDA #'$ OUTPUT FOR HEX JSR PUTCH  R LDD ,Y++ GET PARAMTER DATA STD U TFR U,X JMP OUTADR OUTPUT 2 BYTES DMPWRD JSR PCRLF NEXT LINE LDX XTEMP1 RESTORE TABLE ADDR LDA ,X+ START OUTPUTTING CHAR'S JSR PUTCHR LDA ,X+ JSR PUTCHR LDA X LBSR PUTCHR LEAX 3,X INCREMENT TO NEXT COMMAND STX XTEMP1 LDX #EQMSG '=' PSTRNG LDA ,X CMPA #4 BEQ RTS1 JSR PUTCHR LEAX 1,X BRA PSTRNG RTS1 RTS * STRINGS EQMSG FCC ' = ',4 END START  TTL BINARY FILE MAPPER (SIZE & WHERE-ABOUTS); 11-30-81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * * MOD - FIXED BYTE COUNT AT LAST SECTOR  * MOD - FIXED PROBLEM WITH NO TRANSFER ADDRESS IN FILE * * CRTSET ADDRESSES * ACA EQU $CCB0 OFF EQU $CCB2 NOR EQU $CCB4 REV EQU $CCB6 EOL EQU $CCB8 EOF EQU $CCBA ERF EQU $CCBC HOM EQU $CCBE * * FLEX SUBROUTINE LINKAGES * COLNUM EQU 11  FLEX EQU $CD00 WARMS EQU FLEX+03 GETCHR EQU FLEX+21 PUTCHR EQU FLEX+24 PSTRNG EQU FLEX+30 PCRLF EQU FLEX+36 GETFIL EQU FLEX+45 SETEXT EQU FLEX+51 OUTDEC EQU FLEX+57 OUTHEX EQU FLEX+60 RPTERR EQU FLEX+63 GETHEX EQU FLEX+66 OUTADR EQU FL EX+69 STAT EQU FLEX+78 * * DFM LINKAGES * FMS EQU $D406 * * FCB INDICES * FUNC EQU 0 ERR EQU 1 DRV EQU 3 FILNAM EQU 4 EXT EQU 12 STARTA EQU 17 * * DFM FUNCTION CODES * RDSING EQU 9 * ORG $C100 * START BRA START1 * VN FCB 1 NXTLNK FDB 0 FCB 0 BCNT FCB 0 XFER FDB 0 HIGHST FDB 0 LOWEST FDB $FFFF DONFLG FCB 0 NXSEC FCB 0 FCB1 FDB 0 FISIZE FDB 0 UPDATE FCB 0 SECSIZ FDB 0 * START1 LDD ERF JSR PUTCHR HOME AND CLEAR SCREEN TFR B,A JSR PUTCHR * * READ FILE N AME * LEAX FCB,PCR CLR 12,X FOR LATER TEST FOR EXTENSION JSR GETFIL TST 12,X EXTENSION COME ALONG? BNE CONT1 IF YES CLRA JSR SETEXT DEFAULT TO .BIN FILE CONT1 PSHS X LEAX FLNAME,PCR JSR PSTRNG LEAX FCB+4,PCR LDB #8  CONT1C LDA ,X+ BEQ DOEXT2 JSR PUTCHR DOEXT2 DECB BNE CONT1C LDA #'. JSR PUTCHR DOEXT LDB #3 DOEXT1 LDA ,X+ BEQ DOEXT3 JSR PUTCHR DOEXT3 DECB BNE DOEXT1 JSR PCRLF LEAX SYNMSG,PCR JSR PSTRNG PULS X LDA #1 STA  X JSR FMS OPEN FILE TO GET LINKS LBNE RDERR LDA #4 STA X JSR FMS LBNE RDERR * * SET TO READ SINGLE SECTORS * LDD STARTA,X GET FIRST TRK & SEC #'S STD NXTLNK,PCR SAVE FOR READ ROUTINE LOOP3 LBSR RDSEC TST DONFLG,PCR L  BMI DONE2 LEAX 252,Y STX FCB1,PCR END OF FCB POINTER RDATA LBSR RDBYT TST NXSEC,PCR BPL CONT2 LBSR RDSEC CLR NXSEC,PCR BRA RDATA CONT2 TSTA LBEQ DONE2 CMPA #$16 XFER ADDRESS LBEQ DONE1 CMPA #2 TEST FOR START OF R  ECORD BNE RDATA CONT7 LBSR RDBYT TST NXSEC,PCR BPL CONT3 LBSR RDSEC CLR NXSEC,PCR BRA CONT7 CONT3 PSHS A CONT8 LBSR RDBYT TST NXSEC,PCR BPL CONT4 LBSR RDSEC CLR NXSEC,PCR BRA CONT8 CONT4 TFR A,B PULS A LBSR  DORORG CMPD LOWEST,PCR UPDATE BEGIN AND END ADDRESS BHI SORT1 STD LOWEST,PCR SORT1 CMPD HIGHST,PCR BLS SORT2 STD HIGHST,PCR COM UPDATE,PCR INDICATE HIGHER ADDRESS SAVED SORT2 LBSR RDBYT TST NXSEC,PCR BPL CONT5 LBSR RD  SEC CLR NXSEC,PCR BRA SORT2 CONT5 STA BCNT,PCR SAVE BYTE COUNT FOR LAST READ PSHS A,B TFR S,X JSR OUTHEX LEAX SPC,PCR Y1 LDA ,X+ CMPA #4 BEQ Y2 JSR PUTCHR BRA Y1 Y2 LDA BCNT,PCR RESTORE BYTE COUNT TO 'A' DECA T  ST UPDATE,PCR MUST WE ADD IN BYTE COUNT? BPL CONT12 IF NO CLRB EXG A,B PSHS A,B WORD OF BYTE COUNT ON STACK LDD HIGHST,PCR GET HIGHEST ADDRESS SO FAR ADDD ,S++ ADD IN BYTE COUNT STD HIGHST,PCR EXG A,B CLR UPDATE,PCR CONT 12 LDD FISIZE,PCR ADDD BCNT-1,PCR STD FISIZE,PCR PULS A,B TFR A,B LOOP BSR RDBYT TST NXSEC,PCR BPL CONT6 LBSR RDSEC CLR NXSEC,PCR BRA LOOP CONT6 DECB LBEQ RDATA BRA LOOP * DORORG PSHS A,B,X,Y TFR S,X JSR OUTA DR LEAX SPC,PCR LDA #'- JSR PUTCHR DOR2 PULS A,B,X,Y,PC DOR1 JSR PCRLF BRA DOR2 * RDBYT LDA ,Y CMPY FCB1,PCR BNE RTS1 COM NXSEC,PCR RTS RTS1 LEAY 1,Y RTS * DONE1 BSR RDBYT TST NXSEC,PCR BPL DONE1A LBSR RDSEC  CLR NXSEC,PCR BRA DONE1 DONE1A PSHS A CONT9 BSR RDBYT TST NXSEC,PCR BPL DONE1B LBSR RDSEC CLR NXSEC,PCR BRA CONT9 DONE1B TFR A,B PULS A STD XFER,PCR TST DONFLG,PCR LBPL LOOP3 * DONE2 JSR PCRLF LEAX STMSG,PCR  !JSR PSTRNG LDX LOWEST,PCR PSHS X TFR S,X JSR OUTADR LEAX ENMSG,PCR JSR PSTRNG LDX HIGHST,PCR PSHS X TFR S,X JSR OUTADR LEAX XFERMG,PCR JSR PSTRNG LDX XFER,PCR CMPX LOWEST,PCR BNE SKIP SKIP1 PSHS X TFR  "S,X JSR OUTADR SKIP3 LEAX FSIZE,PCR JSR PSTRNG LDX FISIZE,PCR PSHS X TFR S,X JSR OUTADR LEAX SECTSZ,PCR JSR PSTRNG LDX SECSIZ,PCR PSHS X TFR S,X CLRB JSR OUTDEC JSR PCRLF BRA EXIT SKIP CMPX #0 BNE SKIP #1 BRA SKIP3 * RDSEC PSHS A,B LDD NXTLNK,PCR BEQ DONE4 JSR PCRLF LDD NXTLNK,PCR PSHS A,B TFR S,X JSR OUTADR LEAX SPC,PCR Z1 LDA ,X+ CMPA #4 BEQ Z2 JSR PUTCHR BRA Z1 Z2 PULS A,B LEAX FCB,PCR RE-LOAD DATA F $CB LDD NXTLNK,PCR BEQ DONE4 STD 30,X LDA #RDSING STA X JSR FMS BNE RDERR LDD SECSIZ,PCR ADDD #1 STD SECSIZ,PCR LEAY FCB+64,PCR POINT TO DATA AREA LDD Y STD NXTLNK,PCR UPDATE LINKS FOR NEXT PASS DONE LEAY 4,Y POINT TO FIRST DATA BYTE PULS A,B,PC DONE4 COM DONFLG,PCR BRA DONE RDERR JSR RPTERR LET FLEX REPORT ERROR EXIT JMP WARMS END PROGRAM HERE * FLNAME FCC 'File Name: ',4 STMSG FCC 'Lowest address: ',4 ENMSG FCC 'Highest address: ',4 XFERMG FCC 'Transfer addr: ',4 FSIZE FCC 'File Size (Bytes): ',4 SECTSZ FCC 'File Size (Sectors): ',4 SPC FCC ', ',4 SYNMSG FCC 'SECTOR -- (ADDRESS - BYTE COUNT) -->',4 * FCB RMB 320 * END START  TTL FREE CHAIN RE-FORMATTER FOR FLEX 10-17-81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * ************************************************ *** * * THIS UTILITY WILL RE-FORMAT THE SECTOR FREE-CHAIN * MAP ON ANY DISKETTE TO ELIMINATE THE FRAGMENTATION * CAUSED BY MANY DELETIONS AND CREATIONS. * * THE FREE CHAIN WILL BE BUILT STARTING WITH THE * SECTOR CLOSEST TO TRACK 1, SECTOR 1 AND PROCEE DING * SEQUENTIALLY TOWARD THE FARTHEST TRACK. THIS WILL * REDUCE HEAD SEEKS, AND CONSEQUENTLY SPEED UP DISK * ACCESSES. * * NOTE: THIS CAN BE A DANGEROUS UTILITY. BE SURE * YOUR HARDWARE IS WORKING CORRECTLY. DO NOT * STOP THE PROGRAM ONCE IT SA YS 'RE-WRITING * THE FREE LINKS'. BEFORE THIS MESSAGE, THE * PROGRAM MAY BE SAFELY ABORTED. *************************************************** * SYSINF EQU 3 SYS-INFO DISK LOCATION * FRSTLK EQU 0 FIRST LINK ON DISK LSTLNK EQU 2 LAST LINK ON D ISK NULINK EQU 4 NUMBER OF FREE LINKS ON DISK DRIVE EQU 6 DISK DRIVE BEING WORKED ON MEMEND EQU 8 LAST LINK IN MEMORY + 2 COMPLT EQU 10 SECTOR SORT COMPLETE FLAG * BUFFER EQU $0000 BUILD LINK MAP HERE * * CRTSET ADDRESSES * ACA EQU $CCB0 O FF EQU $CCB2 NOR EQU $CCB4 REV EQU $CCB6 EOL EQU $CCB8 EOF EQU $CCBA ERF EQU $CCBC HOM EQU $CCBE * * FLEX SUBROUTINE LINKAGES * FLEX EQU $CD00 WARMS EQU FLEX+03 GETCHR EQU FLEX+21 PUTCHR EQU FLEX+24 INBUFF EQU FLEX+27 PSTRNG EQU F LEX+30 PCRLF EQU FLEX+36 NXTCH EQU FLEX+39 OUTDEC EQU FLEX+57 OUTHEX EQU FLEX+60 RPTERR EQU FLEX+63 GETHEX EQU FLEX+66 OUTADR EQU FLEX+69 INDEC EQU FLEX+72 * * DFM LINKAGES * FMS EQU $D406 * * FCB INDICES * FUNC EQU 0 DRV EQU 3 * * DFM  FUNCTION CODES * RDSING EQU 9 READ SINGLE SECTOR WRSING EQU 10 WRITE SINGLE SECTOR * ORG $C100 * START BRA START1 * VN FCB 1 * START1 LDD ERF CLEAR SCREEN & HOME CURSOR LBSR PUTTWO LEAX TITLE,PCR PRINT THE PROGRAM TITLE MESSAGE J SR PSTRNG JSR PCRLF JSR PCRLF LEAU FCB+320,PCR WORK STORAGE CLR COMPLT,U SORT PASS 1 FLAG * * READ SYS-INFO RECORD TO DETERMINE SIZE OF DISK * LEAX FCB,PCR JSR NXTCH GET DRIVE NUMBER CMPA #$D BEQ GOOUT ANDA #3 MUST BE A VALID DRIVE BEQ DO0 WILL NOT DEFAULT IF CMPA #3 INVALID DRIVE NUMBER BLS DO0 ENTERED DUE TO DANGER OF GOOUT LBRA EXIT HARMING SYSTEM DISK * DO0 STA DRV,X STA DRIVE,U LDA #RDSING READ SYS-INFO RECORD STA FUNC,X LDD #SYSIN F STD 30,X JSR FMS LBNE ERROR LDD 64+29,X GET FIRST FREE LINK STD FRSTLK,U LDD 64+31,X GET LAST FREE LINK STD LSTLNK,U LDD 64+33,X GET NUMBER OF FREE SECTORS STD NULINK,U LEAX FREES,PCR PRINT # OF FREE LINKS ON DISK   JSR PSTRNG LEAX NULINK,U CLRB JSR OUTDEC LEAX RDMSG,PCR INDICATE READING FREE CHAIN JSR PSTRNG * * FILL THE WORK BUFFER WITH TRACK, SECTOR INFO + NEXT LINK * LDY #BUFFER LOAD BUFFER BEGINNING LDD FRSTLK,U START READING SECTORS L  OOP1 STD ,Y++ PUT TRACK & SECTOR LBSR RDSEC GO READ THE SECTOR LDD 64,X PULL OUT NEXT LINK STD ,Y++ AND SAVE IN BUFFER BNE LOOP1 CONTINUE READING FREE LINKS STD Y MAKE DEFINITE END TO BUFFER STD 2,Y STD 4,Y LDD -4,Y GET  LAST TRK & SEC NU. SAVED STY MEMEND,U SAVE FOR FUTURE USE & CMPD LSTLNK,U MAKE SURE REAL END OF CHAIN LBNE ERROR * * NOW SORT REMAINING LINKS INTO ASCENDING ORDER * AND RESAVE TO PERTINENT SECTOR IN MEMORY * DONRED LEAX SRTMSG,PCR JSR P STRNG LDY #BUFFER RESTART AT BEGIN AGAIN LOOP11 LEAX 4,Y POINT TO NEXT TO COMPARE WITH LOOP10 LDD ,X GET NEXT TO MATCH BEQ NXTSTP IF END OF LINK TABLE CMPD ,Y MUST BE LOWER TO CAUSE REPLACE BHI MOVEUP NO NEED TO REPLACE PSHS A,B  SAVE THIS LINK LDD ,Y GET HIGHER TRK & SECTOR STD ,X SWAP WITH LOWER TRK & SEC NUMBER PULS A,B RESTORE HIGHER NUMBER STD ,Y AND REPLACE WHERE LOWER WAS MOVEUP LEAX 4,X NO TO NEXT COMPARE BRA LOOP10 * NXTSTP LEAY 4,Y INCREMENT TO  NEXT STEP CMPY MEMEND,U TEST FOR END OF LINK TABLE BLS LOOP11 COM COMPLT,U PASS ONE COMPLETE TST COMPLT,U BPL REWRTE IF PASS TWO COMPLETE * * FIND THE LINK TO THE NEW FIRST LINK AND REPLACE WITH A NEW * LINK TO THE NOW LAST LINK *  LDY #BUFFER CHECK FOR DUPLICATE LINK LEAX 2,Y WILL BE ONE ONLY FNDUPL LDD ,X BEQ FNDUP1 IF AT END OF LINK LIST LEAX 4,X CMPD ,Y REPLACE WITH ORIGINAL LAST LINK BNE FNDUPL LDD FRSTLK,U STD -4,X * FNDUP1 LDY #BUFFER+2 START P ASS TWO BRA LOOP11 * * NOW RE-WRITE EACH REMAINING SECTOR BACK TO DISK * WITH THE UPDATED LINK ADDRESS IN EACH * THE FIRST LINK & LAST LINK MUST ALSO BE RE-WRITTEN * TO THE SYS-INFO RECORD. NUMBER OF LINKS DOES NOT CHANGE. * REWRTE LDD BUFFER GET FIRST SECTOR TO WRITE STD FRSTLK,U BECOMES FIRST LINK IN CHAIN LDY MEMEND,U GET LAST LINK IN TABLE LDD -4,Y STD LSTLNK,U UPDATE TEMPS FOR SYS-INFO RECORD * LEAX WRTMSG,PCR JSR PSTRNG TELL WRITING TO DISK LDY #BUFFER WR1 LDD , Y GET SECTOR NUMBER TO WRITE BEQ DONE IF ZERO, FINISHED BSR RDSEC READ BEFORE WRITE LDD ,Y++ GET SAME NU'S FOR WRITE BSR WRSEC WRITE THE SECTOR & NEW LINK BRA WR1 CONTINUE TO END OF TABLE * DONE LEAX UPDMSG,PCR INDICATE WRITING SYS-INFO JSR PSTRNG LDD #SYSINF BSR RDSEC READ SYS-INFO RECORD LDD FRSTLK,U UPDATE FIRST LINK IN RECORD STD 29+64,X LDD LSTLNK,U UPDATE LAST LINK IN RECORD STD 31+64,X PUT IN NEW LINK INFO LDA #WRSING RE-WRITE SYS-INFO RECO RD STA X LDD #SYSINF STD 30,X JSR FMS LBNE ERROR LBRA EXIT * * READ EACH SECTOR AS CALLED * RDSEC LEAX FCB,PCR READ THE SECTOR IN 'D' STD 30,X TRACK & SECTOR TO READ LDA DRIVE,U STA DRV,X DRIVE WE'RE WORKING ON LDA #R DSING READ SINGLE SECTOR CODE STA FUNC,X JSR FMS GO DO READ LBNE ERROR RTS * * RE-WRITE EACH LINK FROM BEGIN OF DISK TO END * WRSEC LEAX FCB,PCR WRITE THE SECTOR IN 'D' STD 30,X TRACK & SECTOR TO WRITE LDA DRIVE,U STA DRV,X D RIVE TO DO IT TO LDA #WRSING WRITE SINGLE SECTOR CODE STA FUNC,X LDD ,Y++ WRITE SECTOR WITH THIS LINK STD 64,X JSR FMS GO DO WRITE LBNE ERROR RTS * ERROR JSR RPTERR IF DISK ERROR, FLEX WILL TELL BRA EXIT1 EXIT LEAX FORMSG ,PCR INDICATE FINISHED WITH FORMAT JSR PSTRNG EXIT1 JMP WARMS * PUTTWO JSR PUTCHR OUTPUT ASCII WORD IN 'D' TFR B,A JMP PUTCHR * TITLE FCC ' ' FCC 'Free Chain Re-Sequencer V1.1B',4 FREES FCC 'Free Sectors Available ',4 RDMSG FCC  'Reading free chain into memory',4 SRTMSG FCC 'Sorting free chain into sequential order',4 WRTMSG FCC 'Writing updated free chain back to disk',4 UPDMSG FCC 'Updating Sys-Info Record Sector',4 FORMSG FCC 'Format complete',4 * FCB RMB 320 * END START  TTL FLEX INTERFACE FOR CUSTOM I/O DRIVERS; 1,9,82 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * ******************************************** ************** * * TO CALL AND USE THE PROGRAM, TYPE CUSTOMIO.BIN * THE PACKAGE WILL TEST TO SEE IF PRINT.SYS IS LOADED AND IF * NOT, LOAD IT INTO MEMORY. PRINT.SYS WILL THEN BE MODIFIED * TO VECTOR OUTPUT THRU THE CUSTOMIO PACKAGE FIRST TO CONVER !T * ANY SPECIAL CODES AND THEN THRU THE NORMAL I/O CHANNELS * THE PACKAGE WILL LOAD INTO THE TRANSIENT COMMAND AREA, AND * RELOCATE ITSELF TO THE TOP OF MEMORY, WHEREVER THAT * MAY BE, INITIALIZE THE VECTORS IN FLEX AND JUMP TO WARMS * * THE CUSTOMIO P "ACKAGE INITIALLY COMES WITH A SERIAL DRIVER * INSTALLED. TO CHANGE THE ADDRESS OF THE PRINTER, PUT THE * NEW ADDRESS IN LABEL PORT. TO ADD A PARALLEL DRIVER, JUST * REPLACE THE SERIAL DRIVERS AT THE BOTTOM OF THE LISTING. * THE REQUIREMENTS OF THE DR #IVER ARE THE SAME AS THEY WOULD * BE FOR FLEX * * PLEASE NOTE THAT ANY CURSOR MOVEMENT FUNCTIONS THAT ARE * NEEDED TO BE OUTPUT CANNOT BE DONE USING 'PSTRNG' DUE TO * THE FACT THAT A CARRIAGE RETURN/LINE FEED COMBINATION IS OUTPUT * PRIOR TO THE PRINT $ING OF STRING. THIS IS DONE BY FLEX AND * CANNOT BE CHANGED EASILY. THE SOLUTION IS TO PROVIDE A LOOP * ROUTINE TO OUTPUT ONE CHARACTER AT A TIME IN THE USER PROGRAM. * AN EXAMPLE OF THIS FOLLOWS: * * LDX #MESSAGE * JSR PDATA * * PDATA LDA ,X+ G ET CHARACTER FROM STRING TO OUTPUT * CMPA #4 TEST FOR TERMINATOR * BEQ PDAT IF TERMINATOR, RETURN * JSR PUTCHR IF NOT, CALL PUT CHAR ROUTINE * BRA PDATA LOOP TILL TERMINATOR * PDAT RTS RETURN ON TERMINATOR * * MESSAGE FCC $8A,12,40,'THIS IS A STRING',4 * * ALSO NOTE THAT THE ORDER OF CODES FOR SCREEN COORDINATES * DEPENDS ON THE TERMINAL IN USE. EXAMPLE: HEATH H-19 REQUIRES * THE 'Y', THEN THE 'X' VALUES. OTHER TERMINALS MAY REQUIRE * 'X' FIRST AND 'Y' SECOND. ALSO THE OFFSET, WHICH  IS SET AT * HEX 2020 MAY DIFFER FROM TERMINAL TO TERMINAL. THE CT-82 * SERIES REQUIRES NO OFFSET, HENCE THE OFFSET FDB SHOULD BE 0000. * * THE REQUIRED SYNTAX IS THUS: * FOR SINGLE CHARACTER OUTPUT, ENTER WITH THE SPECIAL * CODE TO PERFORM IN 'A * FO  R STRING OUTPUT, ENTER WITH THE ADDRESS OF THE * STRING IN 'X', AND THE SPECIAL CODES PRECEEDING THE * STRING SUCH AS: * * LABEL FCC $9C,'THIS IS A STRING',4 * * NOTE: ANY SPECIAL CODES FOLLOWING THE ASCII STRING WILL * NOT BE DETECTED AND CONVERTED  . * * THIS STRING WILL PRINT THE STRING IN REVERSE VIDEO * * IF IT IS DESIRED TO PERFORM A SERIES OF TERMINAL FUNCTIONS * WITHOUT PRINTING ANY CHARACTERS, THE FOLLOWING EXAMPLE * MAY BE USED TO DO SO: * * LABEL FCC $8A,15,0,$9C,4 * * THIS FUNCTION WI  LL POSITION THE CURSOR TO ROW 15, COLUMN 0 * AND SET THE TERMINAL FOR REVERSE VIDEO MODE. * * IF ONE FUNCTION IN THE HOST TERMINAL REQUIRES * A LARGE NUMBER OF BYTES, SAY 7, AND ALL THE OTHERS ONLY * REQUIRE 3, THE TABLE MUST BE DEFINED AS HAVING 8 BYT  ES * BY THE EQU 'FBYTES'. THIS MEANS THAT MOST ALL THE CODES * WILL BE 3 BYTES WITH 5 NULLS FOLLOWING. DURING ACTUAL * OUTPUT, ONLY THE 3 BYTES WOULD BE SENT * BUT WHEN SENDING THE LARGE CODE, 7 BYTES * WOULD BE SENT. * ****************************** **************************** * ORG $C100 * FBYTES EQU 4 AXIMUM BYTE COUNT FOR ANY ONE * FUNCTION. SET TO ANY EVEN NUMBER OF BYTES (4,6,8, ETC.) * NO ODD COUNTS ALLOWED * * FLEX SUBROUTINE LINKAGES * MEMEND EQU $CC2B FLEX EQU $CD00 WARMS EQU  FLEX+03 GETCHR EQU FLEX+21 PUTCHR EQU FLEX+24 PSTRNG EQU FLEX+30 PCRLF EQU FLEX+36 PLOAD EQU FLEX+48 FILE LOADER PINIT EQU $CCC0 PCHK EQU $CCD8 POUT EQU $CCE4 FCB EQU $C840 FMS EQU $D406 * START PSHS A,B,X,Y,U LDX MEMEND LEAX  -$400,X MAKE ROOM FOR THIS PROGRAM STX MEMEND AND RESET FLEX'S MEMEND LEAX 1,X NEW ADDRESS FOR THIS PROGRAM LEAY START,PCR NOW MOVE THIS PROGRAM DOWN LDD #$200 MOVE1 LDU ,Y++ STU ,X++ SUBD #1 BNE MOVE1 LDX MEMEND LEAX 1 ,X LDD #START1-START JMP D,X START1 LDX PUTCHR+1 SAVE INDIRECT ADDRES IN FLEX STX PUTSAV,PCR LDX PSTRNG+1 STX PSTSAV,PCR LEAX OTCHAR,PCR STX PUTCHR+1 SET NEW VECTORS IN FLEX LEAX PNSTIG,PCR STX PSTRNG+1 LDA PINIT TEST  FOR RESIDENT 'PRINT.SYS' CMPA #$39 BNE POK LDX #FCB NOT THERE, DO A LOAD LDA #1 STA X JSR FMS BNE PNOTOK LDA #-1 STA 59,X SET FOR BINARY READ JSR PLOAD JSR PINIT INIT PRINTER POK LEAX PTCHR,PCR STX POUT+1 LEA X PTCHK,PCR STX PCHK+1 LDA #$7E STA POUT STA PCHK POK1 PULS A,B,X,Y,U JMP WARMS * PNOTOK LEAX NOTFND,PCR JSR PSTRNG BRA POK1 * JUMP TABLE TO CONVERT ROUTINES * OTCHAR LBRA PTCHAR PNSTIG LBRA PSTRIN * PTCHR LBRA PNCHAR * C USTOM FCB 0 DIS-ABLE I/O DRIVERS WITH MINUS PUTSAV FDB 0000 PSTSAV FDB 0000 XYFLAG FCB 00 IF DOING AN XY ROUTINE ONE FCB 00 FIRST SCREEN COORDINATE TWO FCB 00 SECOND SCREEN COORDINATE COOR FDB 0000 SCREEN COORDINATES FOR X-Y ADDRESSING O FFSET FDB $2020 CURSOR Y-X OFFSETS PORT FDB $E000 ADDRESS OF PRINTER STATUS REGISTER * * TABLE OF INPUT CHARS TO BE CONVERTED TO TERMINAL CODES * CRIGHT FCB $81 CURSOR RIGHT CLEFT FCB $82 CURSOR LEFT CDOWN FCB $83 CURSOR DOWN CUP FCB $84  CURSOR UP CHOME FCB $85 CURSOR HOME RSCROL FCB $86 REVERSE SCROLL IF ON TOP LINE CSAVE FCB $87 SAVE CURRENT CURSOR POSITION CRPORT FCB $88 REPORT CURRENT CURSOR POSITION SETCUR FCB $89 RESTORE CURSOR TO PREVIOUS POSITION CURSXY FCB $8A  CURSOR X-Y POSITIONING LEAD-IN CODES CLEAR FCB $8B CLEAR DISPLAY & HOME CURSOR ERSBEG FCB $8C ERASE FROM TO CURSOR TO BEGIN OF DISPLAY ERSEND FCB $8D ERASE FROM CURSOR TO END OF DISPLAY ERSLNE FCB $8E ERASE ENTIRE LINE ERSBLN FCB $8F ERASE F ROM CURSOR TO BEGIN OF LINE ERSELN FCB $90 ERASR FROM CURSOR TO END OF LINE RESET FCB $91 RESET TERMINAL TO POWER-UP CONFIG EN25TH FCB $92 ENABLE 25TH LINE FOR INPUT NOCLK FCB $93 TURN OFF KEY CLICK BLKCUR FCB $94 BLOCK CURSOR CUROFF FCB $ 95 CURSOR OFF AUTOCR FCB $96 AUTO LINE FEED ON CARRIAGE RETURN DS25TH FCB $97 DIS-ABLE 25TH LINE YESCLK FCB $98 TURN-ON KEY CLICK UNDCUR FCB $99 UNDERLINE CURSOR CURSON FCB $9A CURSOR ON OFAUTO FCB $9B TURN OFF AUTO LINE FEED ON CR REVID  FCB $9C REVERSE VIDEO MODE HAFMOD FCB $9D HALF-INTENSITY MODE NORMAL FCB $9E NORMAL VIDEO MODE GRAPH FCB $9F GRAPHICS MODE NGRAPH FCB $A0 TURN OFF GRAPHICS MODE * * THIS IS THE START OF THE PRINTER CODES TO BE DE-CODED * TABSET FCB $A1 SET  HORIZONT@@ TAB AT CURRENT PRINT POSITION TABCLR FCB $A2 CLEAR HORIZONTAL TAB AT CURRENT PRINT POSITION TBACLR FCB $A3 CLEAR ALL HORIZONTAL TABS HORTAB FCB $A4 MOVE TO NEXT TAB POSITION FRMFED FCB $A5 FORM FEED PAPER TO TOP OF FORM SETTAB FCB  $A6 SET VERTICAL TAB AT CURRENT POSITION CLRTAB FCB $A7 CLEAR VERTICAL TAB AT CURRENT POSITION VERTAB FCB $A8 SKIP TO NEXT VERTICAL TAB CLRATB FCB $A9 CLEAR ALL VERTICAL TABS SINDOU FCB $AA TOGGLE SINGLE/DOUBLE SPACE MODE CPI10 FCB $AB SELE CT 10 CPI MODE CPI16 FCB $AC SELECT 16.5 CPI MODE CHRALT FCB $AD SELECT ALTERNATE CHARACTER SET CHRNOR FCB $AE SELECT NORMAL CHARACTER SET LINE6 FCB $AF SELECT 6 LPI MODE LINE8 FCB $B0 SELECT 8 LPI MODE ONLINE FCB $B1 SET PRINTER ON-LINE  OFFLIN FCB $B2 SET PRINTER OFF-LINE BOLDFC FCB $B3 TURN ON BOLD-FACE PRINTING BELL FCB $B4 RING BELL BKSPAC FCB $B5 DO A BACK-SPACE ELONG FCB $B6 SELECT ELONGATED CHARACTER ELONGO FCB $B7 DE-SELECT ELONGATED CHARACTER CUSOFF FCB $B8 TU RN CUSTOM I/O DRIVERS OFF CUSON FCB $B9 TURN CUSTOM I/O DRIVERS ON * * THESE WOULD BE THE CODES THE HOST TERMINAL EXPECTS * TO RECEIVE FOR EACH FUNCTION DEFINED IN THE COMMENTS FIELD * * CURRENTLY SET FOR THE HEATH H-19 * NEWCOD EQU * CRIGHX FCB $  1B,$43 CURSOR RIGHT FCB 0,0 CLEFTX FCB $1B,$44 CURSOR LEFT FCB 0,0 CDOWNX FCB $1B,$42 CURSOR DOWN FCB 0,0 CUPX FCB $1B,$41 CURSOR UP FCB 0,0 CHOMEX FCB $1B,$48 CURSOR HOME FCB 0,0 RSCROX FCB $1B,$49 REVERSE SCROLL IF ON TOP L !INE FCB 0,0 CSAVEX FCB $1B,$6A SAVE CURRENT CURSOR POSITION FCB 0,0 CRPORX FCB $1B,$6E REPORT CURRENT CURSOR POSITION FCB 0,0 SETCUX FCB $1B,$6B RESTORE CURSOR TO PREVIOUS POSITION FCB 0,0 CURXYX FCB $1B,$59 CURSOR X-Y POSITIONING L "EAD-IN CODES FCB 0,0 CLEARX FCB $1B,$45 CLEAR DISPLAY & HOME CURSOR FCB 0,0 ERSBEX FCB $1B,$62 ERASE FROM TO CURSOR TO BEGIN OF DISPLAY FCB 0,0 ERSENX FCB $1B,$4A ERASE FROM CURSOR TO END OF DISPLAY FCB 0,0 ERSLNX FCB $1B,$6C ERASE #ENTIRE LINE FCB 0,0 ERSBLX FCB $1B,$6F ERASE FROM CURSOR TO BEGIN OF LINE FCB 0,0 ERSELX FCB $1B,$4B ERASR FROM CURSOR TO END OF LINE FCB 0,0 RESETX FCB $1B,$7A RESET TERMINAL TO POWER-UP CONFIG FCB 0,0 EN25TX FCB $1B,$78 ENABLE 25T $H LINE FOR INPUT FCB $31,0 NOCLKX FCB $1B,$78 TURN OFF KEY CLICK FCB $32,0 BLKCUX FCB $1B,$78 BLOCK CURSOR FCB $34,0 CUROFX FCB $1B,$78 CURSOR OFF FCB $35,0 AUTOCX FCB $1B,$78 AUTO LINE FEED ON CARRIAGE RETURN FCB $38,0 DS25TX FC %B $1B,$79 DIS-ABLE 25TH LINE FCB $31,0 YESCLX FCB $1B,$79 TURN-ON KEY CLICK FCB $32,0 UNDCUX FCB $1B,$79 UNDERLINE CURSOR FCB $34,0 CURSOX FCB $1B,$79 CURSOR ON FCB $35,0 OFAUTX FCB $1B,$79 TURN OFF AUTO LINE FEED ON CR FCB $38 &,0 REVIDX FCB $1B,$70 REVERSE VIDEO MODE FCB 0,0 HAFMOX FCB 0,0 HALF-INTENSITY MODE FCB 0,0 NORMAX FCB $1B,$71 NORMAL VIDEO MODE FCB 0,0 GRAPHX FCB $1B,$46 GRAPHICS MODE FCB 0,0 NGRAPX FCB $1B,$47 TURN OFF GRAPHICS MODE FCB 0,0 !' * * THESE WOULD BE THE CODES THE HOST PRINTER EXPECTS * TO RECEIVE FOR EACH FUNCTION DEFINED IN THE COMMENTS FIELD * * CURRENTLY SET FOR THE LEAR SIEGLER MODEL 310 * PNWCOD FCB $1B,$31 SET TAB FCB 0,0 FCB $1B,$32 CLEAR TAB FCB 0,0 FCB $ "(1B,$47 CLEAR ALL TABS FCB 0,0 FCB 9,0 SKIP TO NEXT HORIZONTAL TAB FCB 0,0 FCB $C,0 FORM FEED FCB 0,0 FCB $1B,$35 SET TAB FCB 0,0 FCB $1B,$36 CLEAR TAB FCB 0,0 FCB $B,0 SKIP TO NEXT VERTICAL TAB FCB 0,0 FCB $1B, #)$49 CLEAR ALL VERTICAL TABS FCB $D,0 FCB $1B,$30 SINGLE/DOUBLE SPACE FCB 0,0 FCB $1B,$33 10 CPI FCB 0,0 FCB $1B,$34 16.5 CPI FCB 0,0 FCB $1B,$4C PRIMARY CHARACTER SET FCB 0,0 FCB $1B,$4D ALTERNATE CHARACTER SET FCB $* 0,0 FCB $1B,$39 LINES PER INCH FCB 0,0 FCB $1B,$4B ON LINE FCB 0,0 FCB $1B,$4A OFF LINE FCB 0,0 FCB 0,0 BOLDFACE FCB 0,0 FCB 7,0 BELL FCB 0,0 FCB 8,0 BACK SPACE FCB 0,0 FCB $E,0 ELONGATED CHARACTER FCB +0,0 FCB $F,0 STOP ELONGATED CHARACTER MODE FCB 0,0 * PTCHAR CMPA CUSON,PCR BNE PT08A CLR CUSTOM,PCR BRA PTO4 * PT08A CMPA CUSOFF,PCR BNE PTO7AR COM CUSTOM,PCR BRA PTO4 * PTO7AR TST CUSTOM,PCR CHECK FOR ENABLED BMI PT1 , TST XYFLAG,PCR BPL PTO2 TST ONE,PCR BMI PTO3 STA COOR,PCR COM ONE,PCR BRA PTO4 * PTO3 STA COOR+1,PCR COM TWO,PCR LDA CURSXY,PCR BRA PTO6 * PTO2 TSTA MAKE SURE A COMMAND FIRST BPL PT1 CMPA CURSXY,PCR CANNOT DO X- -Y WITH ONE CHAR BNE PTO1 COM XYFLAG,PCR BRA PTO4 * PTO1 CMPA NGRAPH,PCR IF YES, IS IT A VALID CODE? BHI PT1 IF NO PTO6 PSHS A,B,X,Y SAVE ALL REGS FROM DESTRUCTION BSR DOWORK PULS A,B,X,Y PTO4 RTS PT1 JMP [PUTSAV,PCR] PUTTWO . TSTA DON'T OUTPUT NULLS BEQ PUTTW1 BSR PT1 PUTTW1 TFR B,A TSTA BNE PT1 RTS * PSTRIN PSHS A,B,Y STRING PRINT ROUTINE TST CUSTOM,PCR CHECK FOR ENABLED BMI PS1 PS2 TST ,X CHECK FOR SPECIAL WORK CHAR BPL PS1 LDA ,X+ YES, /SPECIAL CMPA NGRAPH,PCR BHI PS1 BSR DOWORK BRA PS2 PS1 PULS A,B,Y JMP [PSTSAV,PCR] DOWORK ANDA #$3F STRIP MINUS BIT BEQ CONT4 JUST A NULL CHARACTER SUBA #1 AND PREPARE INDEXER LDB #FBYTES GET BYTE COUNT TO OUTPUT PSHS 0 B SAVE 'FBYTES' MUL LEAY NEWCOD,PCR ADDRESS TO NEW TABLE LEAY D,Y CONT1 LDD ,Y GET THE CODES TO OUTPUT BEQ CONT5 CONT3 BSR PUTTWO DO 2 AT A TIME CONT5 PULS B RESTORE 'FBYTES' SUBB #2 UPDATE NUMBER OF CHARS TO OUTPUT BEQ CO 1NT4 PSHS B SAVE 'FBYTES' LEAY 2,Y BRA CONT1 CONT4 TST XYFLAG,PCR IF MINUS, DO Y-X ADDRESSING BMI CONT4A RTS * CONT4A LDD COOR,PCR GET ROW,COLUMN COORDINATES ADDD OFFSET,PCR ADD IN OFFSETS FOR TERMINAL CLR XYFLAG,PCR EMPTY F 2LAGS FOR NEXT GO AROUND CLR ONE,PCR CLR TWO,PCR BRA PUTTWO GO OUTPUT BOTH COORDINATES * PNCHAR TST CUSTOM,PCR CHECK FOR ENABLED BMI PCK1 TSTA MAKE SURE A COMMAND FIRST BPL PCK1 CMPA ELONGO,PCR IF YES, IS IT A VALID CODE? BHI  3PCK1 IF NO BRA DOPWRK * * GO TEST FOR PRINTER READY * PCK1 BSR PTCHK BPL PCK1 * *************************************************************** * * THIS IS THE ACTUAL DRIVER TO REPLACE FOR A DIFFERENT PRINTER * PRINT1 PSHS X LDX PORT,PCR 4STA 1,X PULS X,PC * PTCHK PSHS B,X LDX PORT,PCR LDB X RORB RORB RORB PULS B,X,PC * *************************************************************** * DOPWRK PSHS D,Y TSTA BPL DOPCT4 ANDA #$3F STRIP MINUS BIT BEQ DOPCT4 5 JUST A NULL CHARACTER SUBA #1 AND PREPARE INDEXER LDB #FBYTES GET BYTE COUNT TO OUTPUT PSHS B SAVE 'FBYTES' MUL LEAY PNWCOD,PCR ADDRESS TO NEW TABLE LEAY D,Y DOPCT1 LDD ,Y GET THE CODES TO OUTPUT BEQ DOPCT3 DOPCT2 BSR PCK1  6DO 2 AT A TIME TFR B,A BSR PCK1 DOPCT3 PULS B RESTORE 'FBYTES' SUBB #2 UPDATE NUMBER OF CHARS TO OUTPUT BEQ DOPCT4 PSHS B SAVE 'FBYTES' LEAY 2,Y BRA DOPCT1 DOPCT4 PULS D,Y,PC * NOTFND FCC 'PRINT.SYS not found',4 * ORG $C8473 * FCC $FF,'PRINT',0,0,0,'SYS' * END START  TTL DISK REPAIR FOR THE 6809 - 1,9,82 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * * COMMAND SYNTAX: * REPAIR (DISC DRIVE NUMBER) * LINCNT EQU 24-2 TERMINAL LINES - 2 SIZE EQU $66 LOCATION OF DISK FORMAT SYSIFO EQU 3 SYSTEM INFO RECORD SECTOR FORCE EQU $4D35 DEFAULT TO 8", DS, DD DISK SIZE * * DOS LINKAGES * FLEX EQU $CD00 * * CRTSET ADDRESSES * ACA EQU $CCB0 OFFSET EQU $CC B2 EOL EQU $CCB8 EOF EQU $CCBA ERF EQU $CCBC * * DFM LINKAGES * FCB EQU $C840 FFMS EQU $D406 * * FCB INDICES * FUNC EQU 0 DRIVE EQU 3 CTRK EQU 30 * * INDEX INDICES (U) * DRV EQU 0 RCTEMP EQU 1 FCNT EQU 2 DEFALT EQU 4 DTEMP EQU 6  CURTMP EQU 8 TRACK EQU 10 COUNT EQU 12 LINECT EQU 13 SERCHR EQU 14 ADDR EQU 16 PRETMP EQU 18 NXTLNK EQU 20 SCNT EQU 22 * * DFM FUNCTION CODES * SECRD EQU 9 SECWR EQU 10 * ORG $C100 * START BRA START1 * WARMS FDB FLEX+03 GETCHR FDB FLEX+$15 PUTCHR FDB FLEX+$18 INBUFF FDB FLEX+$1B PCRLF FDB FLEX+$24 NXTCHR FDB FLEX+$27 GETFIL FDB FLEX+$2D RPTERR FDB FLEX+$3F OUTHEX FDB FLEX+$3C GETHEX FDB FLEX+$42 FMS FDB FFMS * * RELEASE, MONTH, DAY, YEAR * VN FCB 8 DATE FCB $ 10,$22,$81 * START1 LEAU -80,S WORK SPACE LDD ERF ERASE SCREEN LBSR PUTTWO LEAX TITLE,PCR LBSR PDATA JSR [GETHEX,PCR] GET DRIVE NUMBER IF THERE BCS UNIB TSTB BEQ UNIC TFR X,D CMPB #3 DRIVE 3 HIGHEST ALLOWED BLS UNIC  * UNIB CLRB UNIC STB DRV,U LDX #FORCE STX DEFALT,U IF CAN'T READ SYS-INFO * LDX #0001 TRACK 0, SECTOR 1 STX PRETMP,U LDX #FCB TRY TO READ SYS-INFO LDA DRV,U STA DRIVE,X LDD #SYSIFO STD CTRK,X LDA #SECRD STA X J SR [FMS,PCR] LBNE OPBAD LDD SIZE,X STD DEFALT,U * ******************************** * * READ AND DECODE COMMAND * ******************************** * CMDLOP LDD #$0033 POSITION CURSOR STD DTEMP,U LBSR CMDFRM LDD EOL LBSR PUTTWO   LEAX PROMPT,PCR LBSR PDATA JSR [INBUFF,PCR] GET COMMAND + PARAMETERS LDD #$0100 STD DTEMP,U LBSR CMDFRM LDD EOL LBSR PUTTWO LDD #0000 STD DTEMP,U LBSR CMDFRM JSR [NXTCHR,PCR] ANDA #$5F CONVERT LC TO UC CMPA #'F  FIND BYTE IN SECTOR LBEQ SERCH CMPA #'C CHANGE BYTE IN SECTOR LBEQ CHANGE CMPA #'U DRIVE NUMBER BEQ UNIT CMPA #'R READ TRACK, SECTOR BEQ READ CMPA #'D DISPLAY TRACK, SECTOR LBEQ DISPLY CMPA #'S STEP CONSECUTIVELY TH  RU DISK LBEQ STEP CMPA #'W WRITE CHANGE TO DISK LBEQ WRITE CMPA #'N READ NEXT SECTOR IN CHAIN LBEQ NEXT CMPA #'P READ PREVIOUS IN CHAIN LBEQ PREVIO CMPA #'A RESTART PROGRAM LBEQ START CMPA #'E EMPTY SECTOR (FILL WITH  0'S) LBEQ EMPTY CMPA #'H HELP WITH COMMANDS LBEQ HELP CMPA #'X EXIT TO FLEX LBNE CMDLOP LDD ERF LBSR PUTTWO JMP [WARMS,PCR] * UNIT JSR [NXTCHR,PCR] JSR [GETHEX,PCR] PICK UP UNIT # LBCS CMDLOP TSTB LBEQ CMDLOP T  FR X,D CMPB #3 ONLY 4 DRIVES LEGAL LBHI CMDLOP STB DRV,U PUT IN DRIVE BUFFER BRA POSA * ****************************** * * READ TRACK AND SECTOR * ****************************** * READ LDX #FCB JSR [NXTCHR,PCR] JSR [GETHEX,PCR]  GET TRK # LBCS CMDLOP TSTB LBEQ CMDLOP CMPX DEFALT,U LBCC CMDLOP IF TOO HIGH A NUMBER STX TRACK,U RDENTR LDX #FCB LDA #SECRD STA FUNC,X LDA DRV,U STA DRIVE,X LDD TRACK,U STD CTRK,X JSR [FMS,PCR] GO READ SECTOR LBNE OPBAD LDX FCB+64 STX NXTLNK,U POSITN LDD EOL LBSR PUTTWO LEAX CURMSG,PCR PRINT CURRENT TRK,SEC LBSR PDATA LEAX TRACK,U BSR PRTTS LDD #$0015 STD DTEMP,U LBSR CMDFRM LEAX NXTMSG,PCR PRINT NEXT LINK LBSR PDATA  LDX #FCB+64 BSR PRTTS POSA LDD #$0027 STD DTEMP,U LBSR CMDFRM LEAX DRVMSG,PCR LBSR PDATA LEAX DRV,U BSR PRTTS1 BRA DISP10 * PRTTS JSR [OUTHEX,PCR] PRINT , LDA #', TRK SEC JSR [PUTCHR,PCR] LEAX 1,X  PRTTS1 JMP [OUTHEX,PCR] * ****************************** * * DISPLAY FCB CONTENTS OF * SECTOR JUST READ * ****************************** * DISPLY BRA POSITN * DISP10 LDD #$0200 STD DTEMP,U LBSR CMDFRM LEAX HEADNG,PCR PRINT BYTE COUNTER  LBSR PDATA CLR COUNT,U LDX #FCB+64 POSITION X TO 1ST BYTE PRTNL JSR [PCRLF,PCR] BSR PRTLIN INC COUNT,U LDA COUNT,U CMPA #16 SET FOR 16 ROWS BNE PRTNL LDD EOF LBSR PUTTWO LBRA CMDLOP BRA PRTNL * PRTLIN LDA COUNT,U PRINT ROW # ORAA #$30 CMPA #$3A BCS OK FIX ASCII HEX # ADDA #7 OK STA SERCHR,U JSR [PUTCHR,PCR] LDA #': JSR [PUTCHR,PCR] LDA #$20 JSR [PUTCHR,PCR] LDB #16 PSHS X PSHS X DOLIN PULS X JSR [OUTHEX,PCR] LEAX  !1,X PSHS X LDA #$20 JSR [PUTCHR,PCR] DECB BNE DOLIN LBSR PUT7SP LDA SERCHR,U JSR [PUTCHR,PCR] LDA #': JSR [PUTCHR,PCR] LDA #$20 JSR [PUTCHR,PCR] PULS A,B PULS X PSHS A,B LDB #16 16 ASCII CHARS TOO * PRTAS "C LDA ,X+ CMPA #$20 LIMIT TO VALID ASCII BCS PRT11 CMPA #$7E ^ BCS PRT12 PRT11 LDA #'- FORCE '-' FOR INVALIDS PRT12 JSR [PUTCHR,PCR] DECB BNE PRTASC PULS X,PC * **************************** * * CHANGE BYTE(S) IN FCB * IN PRE #PARATION FOR RE-WRITE * **************************** * CHANGE JSR [NXTCHR,PCR] JSR [GETHEX,PCR] GET POSITION OF BYTE LBCS CMDLOP TO CHANGE TSTB LBEQ CMDLOP STX CURTMP,U ADDRESS OF DATA TFR X,D LDX #FCB+64 POSITION X TO POINT TO $ DATA ABX STX ADDR,U * CHANG7 LDY #$0403 JSR [GETHEX,PCR] GET BYTE TO REPLACE LBCS CMDLOP TSTB LBEQ CMDLOP LBSR ABCURP POSITION CURSOR TO BYTE TFR X,D LDX ADDR,U STB ,X+ PSHS B,X TFR S,X JSR [OUTHEX,PCR] LDA # $20 JSR [PUTCHR,PCR] PULS B,X STX ADDR,U CMPX #FCB+320 BNE CHANG7 LBRA CMDLOP * NEXT LDX #FCB LDD CTRK,X STD PRETMP,U LDD NXTLNK,U GET NEXT LINK LBEQ CMDLOP CMPD DEFALT,U LBHI CMDLOP STD CTRK,X PUT IN NEXT SEC  READ LOC STD TRACK,U LDA #SECRD STA FUNC,X LDA DRV,U STA DRIVE,X JSR [FMS,PCR] GO READ NEXT LINK BNE OPBAD LDX FCB+64 STX NXTLNK,U LBRA POSITN * OPBAD JSR [RPTERR,PCR] LBRA CMDLOP * ****************************** * * WRITE CHANGES TO DISK * ****************************** * WRITE LDX #FCB LDA #SECWR SET FOR WRITE STA FUNC,X JSR [FMS,PCR] RE-WRITE SECTOR TO DISK LBEQ POSITN BRA OPBAD * ******************************* * * READ PREVIOUS SECTOR IN *  CHAIN * ******************************* * PREVIO LDX #FCB LDD PRETMP,U GET PREVIOUS LINK BEQ OKAY1 CMPD DEFALT,U BHI OKAY1 STD CTRK,X STD TRACK,U LDA #SECRD STA FUNC,X LDA DRV,U STA DRIVE,X JSR [FMS,PCR] GO READ B EQ OKAY1 JSR [RPTERR,PCR] OKAY1 LDX #0001 RESTORE FORCE TO 0,1 STX PRETMP,U LBRA DISPLY * ******************************* * * SEARCH AND REPORT ONE OR TWO * CHARACTER LOCATION IN FCB * ******************************* * SERCH LBSR SETCRS  JSR [NXTCHR,PCR] JSR [NXTCHR,PCR] CMPA #'3 ONLY SEARCH FOR 2 CHARS VALID LBHS CMDLOP CMPA #'0 MUST BE AT LEAST ONE LBLS CMDLOP STA SCNT,U JSR [NXTCHR,PCR] JSR [GETHEX,PCR] GET CHAR TO SEARCH FOR LBCS CMDLOP TSTB LBE Q CMDLOP STX SERCHR,U * ******************************* * * SEARCH FOR CHARACTERS * ******************************* * LDA SCNT,U CMPA #'1 BEQ FIND1C LDD SERCHR,U LDY #FCB+68 FIRST FCB DATA LOC FIND2D LDD SERCHR,U CMPD ,Y+ BEQ SERCH2 FIND2H CMPY #FCB+320 BNE FIND2D FEXIT LBRA CMDLOP * **************************** * * SEARCH FOR ONE CHARACTER * **************************** * FIND1C LDY #FCB+68 1ST FCB DATA CHAR SERCH5 LDD SERCHR,U CMPB ,Y+ BEQ SERCH2 FIND2I CM PY #FCB+320 BNE SERCH5 BRA FEXIT * SERCH2 TFR Y,D SUBD #FCB+65 GET ABSOLUTE BYTE LOC TFR B,A ANDB #$F LSRA LSRA LSRA LSRA BSR DUMPLO OUTPUT ROW POSITION LDA #', JSR [PUTCHR,PCR] TFR B,A BSR DUMPLO OUTPUT COLUM !N POSITION DEC FCNT,U BEQ SWAIT1 SERCH4 LDA #$20 JSR [PUTCHR,PCR] JSR [PUTCHR,PCR] BRA FIND2G * SWAIT1 INC LINECT,U PSHS X LDB LINECT,U CMPB #LINCNT+2 LAST LINE USED? BEQ SWAIT SERCH9 PULS X LDA #11 STA FCNT,U JSR "[PCRLF,PCR] BRA FIND2G * SWAIT BSR INFORM YES, STOP DUMP BSR SETCRS PULS X FIND2G LDA SCNT,U CMPA #'1 BEQ FIND2I BRA FIND2H * INFORM LDD #$1700 STD DTEMP,U LBSR CMDFRM LEAX MOREMG,PCR TELL OP MORE DATA LBSR PDATA T #O DISPLAY JSR [GETCHR,PCR] ANDA #$5F CMPA #'N DOES HE WANT TO SEE IT? BEQ INF1 RTS * INF1 LEAS 2,S NO, ABORT COMMAND LBRA FEXIT * DUMPLO PSHS A,X TFR S,X JSR [OUTHEX,PCR] PULS A,X,PC * ********************************* * $* FIND ROW, COLUMN OF ALL * LOCATIONS OF BYTE DESIRED * ********************************* * SETCRS LDD #$1500 Y,X=22,0 STD DTEMP,U BSR CMDFRM LDD EOF LBSR PUTTWO LDB #11 SET # OF FINDS/LINE STB FCNT,U LDB #LINCNT STB LINECT,U % RTS * ******************************** * * STEP FROM LAST READ SECTOR * CONSECUTIVELY THRU DISK * ******************************** * STEP LDX #FCB LDD TRACK,U ADDD #1 CMPD DEFALT,U BLS STPOK LBRA CMDLOP * STPOK CMPB DEFALT+1,U &BNE STEP1 LDB #1 ADDA #1 CMPA DEFALT,U LAST TRK? BNE STEP1 CLRA YES, END OF DISK STEP1 STD TRACK,U GO BACK TO TRK 0 STD CTRK,X SET UP FCB LBRA RDENTR GO READ & DISPLAY * CMDFRM LDD ACA BSR PUTTWO LDD DTEMP,U ADDD O 'FFSET PUTTWO JSR [PUTCHR,PCR] TFR B,A JMP [PUTCHR,PCR] * ABCURP LDD CURTMP,U CMPB #$10 BLO AB3 AB1 INCA SUBB #$10 CMPB #$10 BHS AB1 AB3 PSHS A LDA #3 MUL PULS A LEAY D,Y STY DTEMP,U LDD CURTMP,U ADDD #1 S (TD CURTMP,U BRA CMDFRM * PDATA LDA ,X+ CMPA #4 BNE PD1 RTS * PD1 JSR [PUTCHR,PCR] BRA PDATA * PUT7SP PSHS A,B LDD #$2007 PUT7 JSR [PUTCHR,PCR] DECB BNE PUT7 PULS A,B,PC * EMPTY LEAX FCB+68,PCR POINT TO DATA AREA LD )B #252 SET FOR 252 BYTES EMP1 CLR ,X+ DECB BNE EMP1 LBRA DISPLY * HELP LBSR SETCRS LEAX HLPMSG,PCR BSR PDATA LBRA CMDLOP * TITLE FCC 'REPAIR - Disk Hardware Utility',4 PROMPT FCC 'COMMAND: ',4 CURMSG FCC 'CURRENT LINK=',4 NXT *MSG FCC 'NEXT LINK=',4 MOREMG FCC 'MORE....? ',7,4 DRVMSG FCC 'DRIVE #',4 HEADNG FCC '+ 0 1 2 3 4 5 6 7 8 9 A B' FCC ' C D E F 0123456789ABCDEF' FCB $D,$A FCC '======================================' FCC '=====+==================================',4 HLPMSG FCC 'READ, WRITE, DISPLAY, CHANGE, SEARCH, STEP' FCC ', NEXT, EXIT' FCB $D,$A FCC 'UNIT, RESTART, EMPTY, PREVIOUS, ',4 * END START  TTL SEQMENT MAPPER FOR FLEX - 12,01,81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * MAX EQU $4C0F 8" SINGLE SIDE, SINGLE DENSITY ERF EQ U $CCBC HOM EQU $CCBE ACA EQU $CCB0 OFF EQU $CCB2 EOL EQU $CCB8 EOF EQU $CCBA * * FLEX SUBROUTINE LINKAGES * FLEX EQU $CD00 WARMS EQU FLEX+03 PUTCHR EQU FLEX+24 INBUFF EQU FLEX+27 PCRLF EQU FLEX+36 GETFIL EQU FLEX+45 OUTDEC EQU FLE X+57 OUTHEX EQU FLEX+60 RPTERR EQU FLEX+63 OUTADR EQU FLEX+69 * BEGIN EQU 0 END EQU 2 TOTAL EQU 4 DATE EQU 6 ATTR EQU 12 RANSEQ EQU 13 FREE EQU 14 FIRST EQU 16 * * DFM LINKAGES * FMS EQU $D406 * START BRA START1 * RMB 20 LNKFLG  FCB 0 DIRFLG FCB 0 * START1 LEAU START+2,PCR WORK SPACE LDD ERF ERASE SCREEN & HOME CURSOR LBSR PUTTWO LEAX TITLE,PCR TELL WHO I AM LBSR PDATA LEAX FCB,PCR GET A FILE NAME IF THERE JSR GETFIL BCC CONT5A IF VALID FILENAME C ONT5 CLR LNKFLG,PCR CLR DIRFLG,PCR LDD #$1600 ROW 17, COLUMN 0 LBSR LOCURS SET CURSOR TO ABOVE LEAX FILEN,PCR PROMPT FOR FILENAME LBSR PDATA LBSR INBUFF COLLECT THE FILE SPEC LEAX FCB,PCR JSR GETFIL AND READ IT LBCS EX IT IF INVALID, EXIT CONT5A LDD ERF ERASE SCREEN & HOME CURSOR LBSR PUTTWO LEAX MSG,PCR PRINT SCREEN MAP GRID LBSR PDATA JSR PCRLF LEAX HDR,PCR LBSR PDATA LBSR PUTCOL PUT OUT COLUMN NUMBERS LEAX FCB,PCR BSR CHKLNK SEE IF  MAP IS FOR FREE CHAIN BCS CONT5C COM LNKFLG,PCR IF YES BRA CONT5B CONT5C BSR CHKDIR BCS CONT5B COM DIRFLG,PCR CONT5B LDD #3 READ SYS-INFO RECORD STD 30,X LDA #9 STA X JSR FMS BEQ CONT17 JMP WARMS * CONT17 LDD $66, X GET FIRST FREE LINK CMPD #MAX CHECK FOR VALID DISK FORMAT BLS CONT1B IF OK JSR PCRLF LEAX BAD,PCR TELL CAN'T DO THIS DISK LBSR PDATA BRA CONT5 CONT1B CLRA LDB $63,X PULL OUT PERTINENT INFO STD DATE,U MONTH LDB $64,X  STD DATE+2,U DAY LDB $65,X STD DATE+4,U YEAR LDD $5D,X STD FREE,U NUMBER OF FREE LINKS TST LNKFLG,PCR BMI CONT1 TST DIRFLG,PCR BMI CONT1 LDA #1 OPEN FILE FOR READ TO STA X GET FILE INFORMATION INTO JSR FMS FCB  BEQ CONT1 EXIT1 LDD #$1600 WAS A DISK ERROR LBSR LOCURS JSR RPTERR LBRA CONT5 * CHKLNK PSHS A,B,X,Y COMPARE FILE NAME TO SEE LEAX FCB+4,PCR IF MATCH TO FREE LINK NAME LEAY FORCE,PCR 'XFREE' CAN BE RENAMED TO LDB #5 ANYNAME D  ESIRED AS LONG AS NO CHK1 LDA ,X+ FILE EXISTS WITH THE SAME NAME CMPA ,Y+ SINCE THE FILE WOULD NEVER BE BNE CHK2 FOUND DECB BNE CHK1 ANDCC #$FE IF VALID MATCH PULS A,B,X,Y,PC CHK2 ORCC #1 IF NO MATCH PULS A,B,X,Y,PC CHKDIR PSHS A,B,X,Y COMPARE FILE NAME TO SEE LEAX FCB+4,PCR IF MATCH TO DIRECTORY NAME LEAY DIREC,PCR 'XDIR' CAN BE RENAMED TO LDB #4 ANYNAME DESIRED AS LONG AS NO BRA CHK1 EXIT JMP WARMS FINAL OUT CONT1 TST DIRFLG,PCR BMI CONT1G ! TST LNKFLG,PCR SEE IF DOING FREE CHAIN BPL CONT1E IF NO LDD 29+64,X YES, GET FIRST LINK STD BEGIN,U STD FIRST,U LDD 31+64,X GET LAST LINK STD END,U LDD 33+64,X GET NUMBER OF LINKS BRA CONT1F * CONT1G LDD #0005 1ST DIR S "ECTOR STD BEGIN,U STD FIRST,U BRA GO CONT1E LDD 17,X GET FIRST LINK OF FILE STD BEGIN,U STD FIRST,U GET LAST LINK OF FILE LDD 19,X STD END,U GET NUMBER OF SEC'S IN FILE LDD 21,X CONT1F STD TOTAL,U LDA 15,X GET FILE ATT #RIBUTES & TYPE LDB 23,X STA ATTR,U STB RANSEQ,U GO LDD FIRST,U PICK UP LINK AND GO START MAPPING BSR MAP LEAX FCB,PCR CONT4 LDD FIRST,U CHECK IF DONE BEQ CONT3 CMPD END,U BEQ DOLAST IF YES, DO THE LAST LINK STD 30,X  $LDA #9 STA X JSR FMS BEQ CONT2 LBRA EXIT1 * CONT2 LDD 64,X PICK OUT NEXT LINK FROM FCB STD FIRST,U BSR MAP BRA CONT4 DOLAST STD 30,X LDA #9 DO LAST READ FOR FILE STA X JSR FMS BEQ CONT3 LBRA EXIT1 * CONT3 TST LNKFLG,PCR BMI CONT3C TST DIRFLG,PCR LBMI CONT5 LDD 64,X GET FIRST LINK TO READ STD FIRST,U LDA #4 STA X FINISHED WITH FILE, SO CLOSE IT JSR FMS LBNE EXIT1 CONT3C BSR RPTDAT LBRA CONT5 * MAP LDY #$0101 START ON ROW 1, COLUMN 1 EXG A,B PSHS A,B LDD OFF LEAY D,Y ADD IN SCREEN OFFSETS TFR Y,D ADDD ,S++ Y HOLDS INITIAL INDEX TO SCREEN TFR D,Y LDD ACA OUTPUT CURSOR POSITION CODES LBSR PUTTWO TFR Y,D OUTPUT COORDINATES LBSR PUTTWO  LDA #'* SHOWS USED SECTOR JMP PUTCHR * RPTDAT LDD #$1200 WRITE PERTINENT DATA ON LINE 12 LBSR LOCURS LEAX BEGINM,PCR  LBSR PDATA LEAX BEGIN,U JSR OUTADR LDD #$1217 LBSR LOCURS LEAX ENDM,PCR LBSR PDATA LEAX END,U  JSR OUTADR LDD #$1232 LBSR LOCURS LEAX TOTALM,PCR LBSR PDATA LEAX TOTAL,U CLRB JSR OUTDEC TST LNKFLG,PCR SKIP NEXT IF DOING FREE CHAIN BPL R7 RTS R7 LDD #$1300 LBSR LOCURS LEAX FILEM,PCR LBSR PDATA LEAX DATE+1,U LDA X DECA TFR A,B LSLA PSHS B ADDA ,S+ TFR X,Y LEAX DATABL,PCR LEAX A,X LDD ,X++ LBSR PUTTWO LDA X JSR PUTCHR TFR Y,X LDA #', JSR PUTCHR LEAX 1,X PSHS X CLRB JSR OUTDEC PULS X LEAX 2,X LDA #', JSR PUTCHR CLRB JSR OUTDEC LDD #$1317 BSR LOCURS LEAX ATTRM,PCR LBSR PDATA LDA ATTR,U PSHS A ANDA #$80 BEQ R1 LDA #'W LDB #', BSR PUTTWO R1 LDA S ANDA #$40 BEQ R2 LDA #'D LDB #', BSR PUTTWO R2 LDA S ANDA #$20 BEQ R3 LDA #'R LDB #', BSR PUTTWO R3 PULS A ANDA #$10 BEQ R4 LDA #'C JSR PUTCHR R4 LDD #$1332 BSR LOCURS LEAX TYPEM,PCR BSR PDATA TST RANSEQ,U BEQ R5 LEAX RANM,PCR BRA R6 R5 LEAX SEQM,PCR R6 BSR PDATA LDD #$1400 BSR LOCURS LEAX FREEM,PCR BSR PDATA LEAX FREE,U JMP OUTADR * LOCURS PSHS A,B CURSOR POSITION CODES LDD ACA BSR PUTTWO PULS A,B ADDD OFF OFFSET FOR TERMINAL * PUTTWO JSR  PUTCHR PRINT CHAR'S IN A & B TFR B,A JMP PUTCHR * PUTCOL LDD HOM PRINT MAP & FILL WITH DOTS BSR PUTTWO JSR PCRLF LDA #'0 PUTC1 INCA CMPA #'G BHS PUTC3 CMPA #'A BHS PUTC2 CMPA #'9 BLS PUTC2 ADDA #7 PUTC2 PSHS A   JSR PCRLF LDA S JSR PUTCHR LEAX STARS,PCR BSR PDATA PULS A BRA PUTC1 PUTC3 RTS * PDATA LDA ,X+ PSTRNG WITHOUT CRLF CMPA #4 BNE PD1 RTS PD1 JSR PUTCHR BRA PDATA * TITLE FCC ' File Segment Mapper V1.1A',4 HDR FCC  ' 0---------------1---------------2-#----#--------' FCC '3---------------4-----------#',4 STARS FCC ' ..............................' FCC '..............................' FCC '................',4 MSG FCC ' "** TRACKS **',4 BEGINM FCC 'B egin Trk/Sec - ',4 ENDM FCC 'End Trk/Sec - ',4 TOTALM FCC 'Total Sectors - ',4 FILEM FCC 'File Date - ',4 ATTRM FCC 'File Attr - ',4 TYPEM FCC 'File Type - ',4 RANM FCC 'Random',4 SEQM FCC 'Sequential',4 FREEM FCC 'Next Free Chain - ',4 FILEN FCC 'File Spec? ',4 BAD FCC 'Cannot map this disk format',4 DATABL FCC 'JanFebMarAprMayJunJulAugSepOctNovDec' FORCE FCC 'XFREE' DIREC FCC 'XDIR' * FCB RMB 320 * END START  TTL FDIR - EXTENDED DIRECTORY; 11,30,81 * * Copyright 1981 by Dick Bartholomew * and * Frank Hogg Laboratory, Inc. * 130 Midtown Plaza * Syracuse, NY 13210 * 315-474-7856 9am to 5pm EST * * * EDITED BY J.O HAGESTUEN 89.11.24 22.33 * * * MOD - BACKWARD LINE NUMBERING * MOD - MEMEND UPON LEAVING FDIR * MOD - MEMEND SAVE UPON ENTRY * MOD - FORCED DRIVE 0 FOR 'PRINT.SYS' * OUTCH EQU $CD10 LINBUF EQU $C080 BUFPTR EQU $CC14 PRTINT EQU $CCC0 PRTOUT EQU $CCE4 STACK EQU $C07F MEMEND EQU $CC2B TERMSZ EQU 24-5 TERMINAL LINES - 5 DATINX EQU 64 INDEX INTO FCB FOR DATA SYSINF EQU 3 SYS-INFO SECTOR NUMBER * * FLEX SUBROUTINE LINKAGES * FLEX EQU $CD00 * * FCB INDICES (X) * FUNC EQU 0 ERR EQU 1 DRIVE EQU 3 FILNAM EQU 4 EXT EQU 12 ATTRIB EQU 15 STARTA EQU 17 ENDADR EQU 19 FILSIZ EQU 21 CREATD EQU 25 CURPOS EQU 30 * * STACK INDICES (U) * DRV EQU 0 CURRENT DRIVE NUMBER OPNFLG EQU 1 DTEMP EQU 2 UNUSED EQU 4 NUMBER OF FREE SECTORS USED EQU 6 NUMBER OF SECTORS USED DSIZE EQU 8 ENTRIE EQU 10 CPOS EQU 12 MEMSAV EQU 14 FILCNT EQU 16 BACKCT EQU 18 PROTFG EQU 20 VOLSAV EQU 22 PRTFLG EQU 24 BTEMP EQU 26 FNUMB EQU 28 DISNAM EQU 30 * * DFM FUNCTION CODES * OPNDIR EQU 6 GTINFO EQU 7 RDSING EQU 9 * * CRTSET ADDRESSES * ACA EQU $CCB0 OFF EQU $CCB2 EOL EQU $CCB8 EOF EQU $CCBA ERF EQU $CCBC HOM EQU $CCBE * * SYSTEM INFO INFORMATION * SDNAME EQU 16 DISK NAME VOLUMN EQU 27 VOLUMN NUMBER FREECH EQU 29 START OF FREE CHAIN CHAEND EQU 31  END OF FREE CHAIN CHASIZ EQU 33 SIZE OF FREE CHAIN INDATE EQU 35 DISK INITIALIZATION DATE MAXTRK EQU 38 MAX TRACK NUMBER MAXSEC EQU 39 MAX SECTOR NUMBER * * DIRECTORY ENTRY INFO * EACH DIRECTORY ENTRY * DNAME EQU 4 DIRECTORY ENTRY NAME DEXT EQU 12 NAME EXTENSION DATTR EQU 15 FILE ATTRIBUTES SDADDR EQU 17 STARTING DISK ADDR OF FILE EDADDR EQU 19 ENDING DISK ADDR OF FILE DFSIZE EQU 21 FILE SIZE IN SECTORS DFMAP EQU 23 SECTOR MAP INDICATOR CREATE EQU 25 FILE CREATION DATE * ORG $B700 * START BRA START1 * VN FCB 2 VERSION NUMBER * WARMS FDB FLEX+03 GETCHR FDB FLEX+21 PUTCHR FDB FLEX+24 INBUFF FDB FLEX+27 PSTRNG FDB FLEX+30 PCRLF FDB FLEX+36 NXTCHR FDB FLEX+39 RSETIO FDB FLEX+42 OUTDEC FDB FLEX+57 RPTERR FDB FLEX+63 OUTADR FDB FLEX+69 DOCMND FDB FLEX+75 FMS FDB $D406 * START1 JSR [NXTCHR,PCR] GET DRIVE NUMBER LDX MEMEND STX PEND+MEMSAV,PCR LEAX START-1,PCR STX MEMEND RESTRT LEAU PEND,PCR CMPA #$D BEQ CONT SUBA #$30 CMPA  #3 4 DRIVES MAX BHI CONT TSTA BPL CONT2 VALID DRIVE CONT CLRA DEFAULT TO DRIVE 0 CONT2 STA DRV,U THALL3 LDS #STACK CLR PRTFLG,U CLR FILCNT,U CLR FILCNT+1,U CLR OPNFLG,U CLR PROTFG,U LDD ERF LBSR PUTTWO LBSR DOHDR THALL2 TST OPNFLG,U BMI DOFOR COM OPNFLG,U LBSR OPDIR LBSR THALL DOFOR LDA #TERMSZ STA ENTRIE,U LBSR DHNDLR DIRECTORY HANDLER DOPRMT LDD #$1746 LBSR SETCUR LDD #$2D04 P1 JSR [PUTCHR,PCR] DECB BNE P1 LDD #$3E20  LBSR PUTTWO * GETCMD LBSR OUTSP LDA #8 JSR [PUTCHR,PCR] JSR [GETCHR,PCR] CMPA #'8 BHI DOPRMT CMPA #'0 BLS DOPRMT CMPA #'1 PAGE FORWARD BEQ DOFOR CMPA #'2 PAGE BACKWARD BEQ BAKW CMPA #'3 LBEQ EXEC CMPA #'4 LBEQ PRINT CMPA #'5 LBEQ UNIT CMPA #'6 LBEQ PROT CMPA #'8 LBEQ RESTRT * * EXIT TO FLEX * FLEXO LDD ERF LBSR PUTTWO LDX MEMSAV,U STX MEMEND LBRA EXIT * BAKW LDD FILCNT,U CMPD #TERMSZ LBLS DOPRMT BAKW1 SUBD #TERMSZ BEQ BAKW2 BPL BAKW1 ADDD #TERMSZ PSHS D LDD FILCNT,U SUBD ,S++ SUBD #TERMSZ BRA BAKW3 * BAKW2 LDD FILCNT,U SUBD #(2*TERMSZ) BAKW3 STD FILCNT,U STD BACKCT,U * LBSR DOERAS LBSR OPDIR RE-OPEN DIRECTORY BAKW5 LDD BACKCT,U LBEQ DOFOR SUBD #1 STD BACKCT,U BAKW6 LBSR RDDIR TST DFCB+FILNAM,PCR BMI BAKW6 BEQ BAKW6 LDA DFCB+ATTRIB,PCR TST PROTFG,U BMI BAKW4 ANDA #$F0 BNE BAKW6 BRA BAKW5 * BAKW4 ANDA #$F0 BEQ BAKW6 BRA BAKW5 * PRINT LDA PRTINT CMPA #$39 BNE SKPRNT LDX #LINBUF STX BUFPTR LEAY PNAME,PCR PRINTA LDA ,Y+ STA ,X+ CMPA #$D BNE PRINTA JSR [DOCMND,PCR] JSR PRTINT SKPRNT LBSR OPDIR COM PRTFLG,U CLR FILCNT,U CLR FILCNT+1,U LDX #PRTOUT STX OUTCH LEAX WHATMG,PCR JSR [PSTRNG,PCR] JSR [PCRLF,PCR] LBRA DOFOR * DHNDLR LDD FILCNT,U CMPD FNUMB,U BHS DRTS LDD #$0200 SET CURSOR STD CPOS,U SAVE CURSOR POSITION LBSR DOERAS LOOP2 LDA ENTRI E,U LOOP1 PSHS A SAVE DISPLAY COUNTER BSR DONAME LBSR DO1ST LBSR DOLAST LBSR DOSIZE LBSR DODATE LBSR DOTYPE LBSR DOATTR PULS A RESTORE DISPLAY COUNTER DECA BNE LOOP1 TST PRTFLG,U BMI LOOP2 DRTS RTS * DONAME LBSR !RDDIR BCC NM1 LEAS 3,S CLR PRTFLG,U JMP [RSETIO,PCR] * NM1 TST PROTFG,U BPL NM2 TST DATTR,X BEQ DONAME BRA NM3 NM2 TST DATTR,X BNE DONAME NM3 LEAX DFCB+FILNAM,PCR TST X BEQ DONAME EMPTY DIR ENTRY BMI DONAME " DELETED FILE LDD FILCNT,U ADDD #1 STD FILCNT,U LDD CPOS,U CLRB INCA LBSR INCCU1 PSHS X LEAX FILCNT,U LDB #$FF JSR [OUTDEC,PCR] PULS X LBSR OUTSP LBSR OUTSP LDB #8 CHAR'S IN FILE NAME DIR1 LDA ,X+ BEQ DI#R2 JSR [PUTCHR,PCR] DISPLAY FILE NAME BRA CCR7 * DIR2 TST PRTFLG,U BPL CCR7 LBSR OUTSP CCR7 DECB BNE DIR1 LDA #'. JSR [PUTCHR,PCR] LDB #3 CHAR'S IN EXTENSION DIR3 LDA ,X+ BEQ DIR4 JSR [PUTCHR,PCR] BRA CCR8 * DIR4$ TST PRTFLG,U BPL CCR8 LBSR OUTSP CCR8 DECB BNE DIR3 LBRA SEEPRT * DO1ST LDD #22 UPDATE CURSOR LBSR INCCUR LEAX DFCB+SDADDR,PCR JSR [OUTADR,PCR] PRINT START ADDR OF FILE LBSR SEEPRT LBRA SEEPRT * DOLAST LDD #8 UPDATE CURSOR LBSR INCCUR LEAX DFCB+EDADDR,PCR JSR [OUTADR,PCR] PRINT END ADDR OF FILE LBSR SEEPRT LBRA SEEPRT * DOSIZE LDD #8 UPDATE CURSOR LBSR INCCUR LEAX DFCB+DFSIZE,PCR JSR [OUTDEC,PCR] PRINT SIZE OF FILE LBRA SEEPRT * DODATE LDD #8 UPDATE CURSOR LBSR INCCUR LEAX DFCB+CREATE,PCR DATEA LEAY MONTAB,PCR LDA ,X DECA LDB #3 MUL LEAY D,Y POINT TO CORRECT MONTH LDB #3 DOD1 LDA ,Y+ JSR [PUTCHR,PCR] PRINT DATE OF FILE DECB BNE DOD1 LBSR OUTSP LDD ,X+ PSHS X CMPB #10 BHS DAT1 LBSR OUTSP DAT1 CLRA STD BTEMP,U LEAX BTEMP,U CLRB JSR [OUTDEC,PCR] LDA #', JSR [PUTCHR,PCR] LBSR OUTSP LDD #$3139 (19) LBSR PUTTWO PULS X LDD X CLRA STD BTEMP,U LEAX BTEMP,U CLRB JSR [OUTDEC,PCR] BRA SEEPRT * DOTYPE LDD #16 LBSR INCCUR LEAX DFCB+DFMAP,PCR LDA ,X BEQ DOSEQ LEAX RANMSG,PCR BRA CCR9 * DOSEQ LEAX SEQMSG,PCR CCR9 LBSR PDATA BRA SEEPRT * DOATTR TST PROTFG,U BPL DOAT5 * DOAT1 LDD #8 BSR INCCUR LEAX DFCB+DATTR,PCR LDA X BEQ DOAT5 PSHS A ANDA #$80 BNE DOAT2A BSR OUTSP BRA DOAT2 * DOAT2A LDA #'W JSR [PUTCHR,PCR] DOAT2 BSR OUTSP LDA S ANDA #$40 BNE DOAT3A BSR OUTSP BRA DOAT3 * DOAT3A LDA #'D JSR [PUTCHR,PCR] DOAT3 BSR OUTSP LDA S ANDA #$20 BNE DOAT4A BSR OUTSP BRA DOAT4 * DOAT4A LDA #'R JSR [PUTCHR,PCR] DOAT4 BSR OUTSP PULS A ANDA #$10 BEQ DOAT5 LDA #'C JSR [PUTCHR,PCR] DOAT5 TST PRTFLG,U BPL CCR2 JSR [PCRLF,PCR] CCR2 RTS * SEEPRT TST PRTFLG,U BPL CCR5 BSR OUTSP BSR OUTSP CCR5 RTS * OUTSP PSHS A LDA #$20 JSR [PUTCHR,PCR] PULS A,PC * UNIT JSR [GETCHR,PCR] LBRA RESTRT * PROT COM PROTFG,U CLR OPNFLG,U CLR FILCNT,U CLR FILCNT+1,U LBRA THALL2 * INCCUR PSHS D LDD CPOS,U ADDD ,S++ INCCU1 STD CPOS,U SETCUR STD DTEMP,U BRA CURSOR * OPDIR LEAX DFCB,PCR LDA DRV,U STA DRIVE,X LDA #OPNDIR STA FUNC, X JSR [FMS,PCR] LBNE DOERR RTS * RDDIR PSHS A,B LEAX DFCB,PCR LDA DRV,U STA DRIVE,X LDA #GTINFO STA FUNC,X JSR [FMS,PCR] BNE RDERR ANDCC #$FE PULS A,B,PC * RDERR LDA ERR,X CMPA #8 LBNE DOERR ORCC #1 PUL !S A,B,PC * PUTTWO JSR [PUTCHR,PCR] TFR B,A PRINT CONTENTS OF 'A & 'B JMP [PUTCHR,PCR] * PDATA LDA ,X+ CMPA #4 BNE PDEND RTS PDEND JSR [PUTCHR,PCR] BRA PDATA * CURSOR LBSR DELAY TST PRTFLG,U BPL CCR RTS * CCR PSHS A,B  " POSITION CURSOR X-Y * LDD ACA * BSR PUTTWO LDD DTEMP,U ADDD OFF * BSR PUTTWO PULS A,B,PC * RDSYS LEAX DFCB,PCR WORK FCB LDD #SYSINF STD CURPOS,X LDA #RDSING STA X LDA DRV,U STA DRIVE,X JSR [FMS,PCR] LBNE DOERR # PSHS X LEAX DATINX+SDNAME,X LEAY DISNAM,U LDB #8 RDS1 LDA ,X+ BEQ RDS3 STA ,Y+ RDS3 DECB BNE RDS1 LDA #'. STA ,Y+ LDB #3 RDS2 LDA ,X+ BEQ RDS4 STA ,Y+ RDS4 DECB BNE RDS2 LDA #4 STA ,Y+ STY VOLSAV,U $ PULS X LDD DATINX+VOLUMN,X STD Y RTS * DOERAS TST PRTFLG,U BPL CCR6 RTS * CCR6 EQU * * LDD #$0300 * LBSR SETCUR LDA #TERMSZ PSHS A DOERA EQU * * LDD EOL * LBSR PUTTWO DEC S BEQ DOERA1 LDA #$A JSR [PUTCHR,%PCR] BRA DOERA * DOERA1 EQU * * LDD #$0300 * LBSR SETCUR PULS A,PC * DELAY PSHS X LDX #$FD00 DEL1 LEAX 1,X BNE DEL1 PULS X,PC * DOERR EQU * * LDD #$1600 * LBSR SETCUR * LDD EOF * LBSR PUTTWO JSR [RPTERR,PCR] LBRA &RESTRT * EXIT JMP [WARMS,PCR] * DOHDR LBSR RDSYS * LDD HOM * LBSR PUTTWO LEAX DRVMSG,PCR SHOW DRIVE NUMBER LBSR PDATA LDA DRV,U ADDA #'0 JSR [PUTCHR,PCR] * LDD #$000B * LBSR SETCUR LEAX SECUNU,PCR TELL HOW MANY SECTORS 'UNUSED LBSR PDATA LEAX DFCB,PCR LDD DATINX+MAXTRK,X MUL STD DSIZE,U LDD DATINX+CHASIZ,X STD UNUSED,U LDD DSIZE,U SUBD UNUSED,U STD USED,U LEAX DATINX+INDATE,X LEAX UNUSED,U JSR [OUTDEC,PCR] * LDD #$0023 * LBSR (SETCUR LEAX SECUSE,PCR TELL HOW MANY SECTORS USED LBSR PDATA LEAX USED,U JSR [OUTDEC,PCR] * LDD #$0039 * LBSR SETCUR LEAX DATMSG,PCR PRINT DISK INIT DATE LBSR PDATA LEAX DFCB+DATINX+INDATE,PCR LBSR DATEA * LDD #$0100 * )LBSR SETCUR LEAX LINMSG,PCR PRINT SEPERATOR LINE LBSR PDATA * LDD #$0200 * LBSR SETCUR LEAX WHATMG,PCR PRINT COLUMN HEADERS LBSR PDATA LBSR OPDIR LDD #0 REDO LBSR RDDIR BCS REDO1 TST DNAME,X BMI REDO BEQ REDO AD*DD #1 BRA REDO * REDO1 STD FNUMB,U RTS * EXEC LDA #$D JSR [PUTCHR,PCR] * LDD EOL * LBSR PUTTWO LEAX SPECMG,PCR ASK FOR FILE SPEC LBSR PDATA JSR [INBUFF,PCR] * LDD ERF * LBSR PUTTWO JSR [DOCMND,PCR] JSR [GETCHR,PCR] + LBRA THALL3 * THALL EQU * * LDD #$1600 * LBSR SETCUR LEAX CMDSTR,PCR LBSR PDATA * LDD #$1700 * LBSR SETCUR LEAX DNAMES,PCR LBSR PDATA LEAX DISNAM,U GT1 LDA ,X+ CMPA #4 BEQ GT2 JSR [PUTCHR,PCR] BRA GT1 GT2 LEA,X DVOL,PCR * LDD #$1719 * LBSR SETCUR LBSR PDATA LDX VOLSAV,U CLRB JSR [OUTDEC,PCR] LEAX FILMSG,PCR * LDD #$1728 * LBSR SETCUR LBSR PDATA LEAX FNUMB,U CLRB JMP [OUTDEC,PCR] * MONTAB FCC 'JanFebMarAprMayJunJulAugSepOct-NovDec' SEQMSG FCC 'Seq',4 RANMSG FCC 'Ran',4 * DRVMSG FCC 'Drive: ',4 SECUNU FCC 'Sectors Avail: ',4 SECUSE FCC 'Sectors Used: ',4 DATMSG FCC 'Disk Date: ',4 FILMSG FCC 'Files: ',4 LINMSG FCC '========================================' FCC '.========================================',4 CMDSTR FCC '1) FORWARD 2) BACKWARD 3) EXECUTE 4) PRINT' FCC ' 5) UNIT 6) PROT 7) EXIT',4 SPECMG FCC 'File Spec? ',4 WHATMG FCC 'Entry File Name Start End Total Date' FCC ' Type',4 DNAMES /FCC 'Disk Name: ',4 DVOL FCC 'Volume: ',4 PNAME FCC 'GET 0.PRINT.SYS',$D * DFCB RMB 322 DIRECTORY FCB * PEND EQU * * END START F OPT PAG TTL MEMORY FILL UTILITY PAG * * MEMORY FILL UTILITY * * COPYRIGHT (C) 1978 BY * TECHNICAL SYSTEMS CONSULTANTS, INC. * BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.59 * EQUATES WARMS EQU $CD03 PSTRNG EQU $CD1E GETHEX EQU $CD42 ORG $C100 MFILL BRA MFILL1 VN FCB 1 VERSION NUMBER BEGIN FDB 0 END FDB 0 FILL FDB 0 MFILL1 JSR GETHEX GET BEGIN ADDRESS BCS MFILL6 ERROR? STX BEGIN SAVE POINTER JSR GETHEX GET END ADDRESS BCS MFILL6 ERROR? STX END SAVE POINTER JSR GETHEX GET FILL CHAR BCS MFILL6 ERROR? STX FILL SAVE IT LDAA FILL+1 GET CHARACTER LDX BEGIN POINT TO START MFILL4 STAA 0,X PUT CHARACTER CPX END FINISHED? BEQ MFILL5 INX BUMP TO NEXT BRA MFILL4 REPEAT MFILL5 JMP WARMS RETURN TO FLEX MFILL6 LDX #ST1 POINT TO STRING JSR PSTRNG PRINT IT BRA MFILL5 * STRINGS ST1 FCC 'ILLEGAL HEX NUMBER' FCB 4 END MFILL F OPT PAG TTL MEMORY MOVE UTILITY PAG * * MEMORY MOVE UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.59 * EQUATES GETHEX EQU $CD42 WARMS EQU $CD03 PSTRNG EQU $CD1E ORG $C100 * PROGRAM STARTS HERE MEM BRA MEM1 VN FCB 1 VERSION NUMBER START FDB 0 END FDB 0 DESTIN FDB 0 MEM1 JSR GETHEX GET START ADDR BCS MEM4 ERROR? STX START JSR GETHEX GET END ADDRESS BCS MEM4 ERROR? STX END SAVE POINTER JSR GETHEX GET DESTINATION BCS MEM4 ERROR? STX DESTIN SAVE IT LDAA START GET START ADDRESS LDAB START+1 CMPA DESTIN GREATER? BLO MOVF BHI MOVB  CMPB DESTIN+1 CHECK LSB BLS MOVF * MOVE BACK MOVB LDX START GET START ADDR LDAA 0,X GET BYTE CPX END FINISHED? BEQ MEM8 INX BUMP TO NEXT STX START SAVE POINTER LDX DESTIN GET DESTINATION STAA 0,X PUT BYTE INX !BUMP TO NEXT STX DESTIN BRA MOVB REPEAT MEM4 LDX #ILST POINT TO STRING JSR PSTRNG PRINT IT JMP WARMS RETURN TO FLEX * MOVE FORWARD MOVF LDAA END GET END POINTER LDAB END+1 SUBB START+1 GET DIFFERENCE SBCA START ADDB" DESTIN+1 ADD TO DESTIN ADCA DESTIN STAA DESTIN SAVE RESULT STAB DESTIN+1 MOVF2 LDX END POINT TO END LDAA 0,X GET BYTE CPX START FINISHED? BEQ MEM8 DEX STX END LDX DESTIN GET DESTINATION STAA 0,X PUT BYTE DEX STX DESTIN SAVE POINTER BRA MOVF2 REPEAT MEM8 LDX DESTIN GET DESTINATION STAA 0,X PUT BYTE JMP WARMS RETURN TO FLEX * STRINGS ILST FCC 'ILLEGAL ADDRESS SPECIFIED' FCB 4 END MEM F$ OPT PAG TTL MEMORY DUMP UTILITY PAG * * MEMORY DUMP UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 ORG $C100 OUTHEX EQU $CD3C OUTADR EQU $CD45 GETHEX EQU $CD42 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E PCRLF EQU $CD24 WARMS EQU $CD03 MDUMP BRA MDUMP1 VN FCB 1 ADDRES FDB 0 PASS FCB 0 TEMP FDB 0 MDUMP1 JSR GETHEX GET ADDRESS BCS MDUMP6 ERROR? STX ADDRES SAVE ADDRESS LOOP JSR PCRLF OUTPUT CR & LF LDX ADDRES GET ADDRESS LDAA #16 SET LINE COUNT STAA PASS MDUMP2 LDAB #16 SET COLUMN COUNT STX TEMP SAVE IT LDX #TEMP POINT TO ADDR JSR OUTADR PRINT ADDRESS JSR OUTS PRINT SPACE LDX TEMP RESTORE POINTER MDUM25 PSHB JSR OUTH OUTPUT DATA BYTE INX BUMP TO NEXT PULB DECB DEC THE COUNT BNE MDUM25 LDX TEMP RESTORE POINTER LDAB #16 RESET COUNT MDUM27 LDAA 0,X GET CHARACTER ANDA #$7F MASK MSB CMPA #$1F IS IT CONTROL? BHI MDUM28 LDAA #'_ IF SO, OUTPUT '_' MDUM28 JSR PUTCHR OUTPUT CHARACTER INX BUMP TO NEXT DECB DEC THE COUNT BNE MDUM27 JSR PCRLF OUTPUT CR & LF DEC PASS DEC LINE COUNT BNE MDUMP2 INC ADDRES BUMP ADDRESS MDUMP5 JSR GETCHR GET INPUT CMPA #$D IS IT CR? BEQ MDUMP6 ANDA #$5F MAKE UPPER CASE CMPA #'F IS IT FORWARD? BEQ LOOP CMPA #'B IS IT BACK? BNE MDUMP5 DEC ADDRES DEC THE ADDRESS DEC ADDRES TO MOVE BACK BRA LOOP MDUMP6 JMP WARMS RETURN TO FLEX * OUTPUT HEX DIGIT OUTH JSR OUTHEX OUTPUT IT OUTS LDAA #$20 SETUP SPACE JMP PUTCHR OUTPUT IT END MDUMP F OPT PAG TTL MEMORY PATTERN TEST PAG * * MEMORY PATTERN....A DIAGNOSTIC PROGRAM * * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.59 ORG $C100 MEM BRA START VN FCB 1 VERSION NUMBER BEGIN FDB 0 END FDB 0 ADDRES FDB 0 TEMP1 FDB 0 TEMP2 FDB 0 TEMP FCB 0 COLCNT FCB 0 RND FDB $A17C SPC 2 * EXTERNAL REFERENCES SPC 1 OUTCH EQU $CD18 I NCH EQU $CD15 WARMS EQU $CD03 PCRLF EQU $CD24 PSTRNG EQU $CD1E GETHEX EQU $CD42 SPC 2 START JSR GETHEX GET START ADDRESS BCS EXIT ERROR? STX BEGIN SAVE ADDRESS JSR GETHEX GET LAST ADDRESS BCS EXIT ERROR? STX END SAVE A DDRESS ST00 JSR PCRLF OUTPUT A CR & LF CLR COLCNT CLEAR COLUMN COUNTER START0 LDX RND GET RANDOM SEED STX TEMP1 SAVE IT LDX RND+2 STX TEMP2 START1 LDX BEGIN SET POINTER TO BEGIN STORE JSR RANDOM GET RANDOM NUMBER STA A 0,X W RITE IN MEMORY CPX END ARE WE DONE ? BEQ CONT INX BUMP THE POINTER BRA STORE REPEAT OPERATION CONT LDX TEMP1 GET ORIGINAL SEED STX RND RESTORE LDX BEGIN RESET POINTER COMP JSR RANDOM GET RANDOM AGAIN CMP A 0,X COMPARE M EM WITH $55 BNE ERROR ERROR ?? CPX END FINISHED YET ? BEQ CONT2 INX BUMP THE POINTER BRA COMP REPEAT COMPARE CONT2 LDA A #'! OUTPUT ! FOR OK PASS JSR OUTCH LDA A COLCNT CHECK COUNT CMP A #64 BEQ ST00 INC COLCNT B UMP THE COUNTER BRA START0 GO REPEAT EXIT JMP WARMS RETURN TO FLEX SPC 2 ERROR PSH A SAVE A STX ADDRES SAVE X JSR PCRLF OUTPUT A C.R. & L.F. LDX #ADDRES GET ADDRESS BSR OUT4HX OUTPUT ADDRESS PUL A RESTORE A JSR OUT25 OUTPUT WRITTEN WORD JSR SPACE OUTPUT A SPACE LDX ADDRES POINT TO BAD LOC. JSR OUT2HX OUTPUT BAD DATA JSR PCRLF JMP ST00 GO REPEAT SPC 2 OUT4HX BSR OUT2 OUT2HX BSR OUT2 SPACE LDA A #$20 LOAD UP SPACE JMP OUTCH OUTPUT IT SPC 2 OUT2 LDA A 0,X GET CHAR. OUT25 PSH A SAVE IT BSR HEXL PUL A RESTORE A INX BUMP THE POINTER BRA HEXR OUTPUT RIGHT SIDE SPC 2 HEXL LSR A SHIFT CHAR. LEFT LSR A LSR A LSR A SPC 1 HEXR AND A #$F MASK OFF  CHAR. ADD A #$30 CMP A #'9 COMPARE IT WITH 9 BLS HEXR2 ADD A #7 ADJUST IT HEXR2 JMP OUTCH OUTPUT IT SPC 1 RANDOM PSHB SAVE B LDAB #8 SET COUNT RPT LDAA RND+1 GET NUMBER ASLA SHIFT LEFT EORA RND+1 ASLA ASLA ROL RND ROL RND+1 DECB DEC THE COUNT BNE RPT PULB RESTORE B LDAA RND GET RANDOM RTS END MEM F OPT PAG TTL RECOVER FILE UTILITY PAG * * RECOVER FILE * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.57 * EQUATES FMS EQU $D406 FMSCLS EQU $D403 WARMS EQU $CD03 GETHEX EQU $CD42 GETCHR EQU $CD15 RPTERR EQU $CD3F GETFIL EQU $CD2D PSTRNG EQU $CD1E FCB EQU $C840 SETEXT EQU $CD33 ORG $C100 * PROGRAM STARTS HERE REC BRA REC2 * TEMPORARY STORAGE VN FCB 2 TRACK FCB 0 SECTOR FCB 0 REC2 JSR GETHEX GET DISK ADDRESS BCS REC7 ERROR? STX TRACK SAVE ADDRESS LDX #STR POINT TO STRING JSR PSTRNG PRINT IT JSR GETCHR GET RESPONSE ANDA #$5F MAKE UPPER CASE CMPA #'Y IS IT YES? BNE REC7 LDX #FCB POINT TO FCB JSR GETFIL GET FILE NAME BCS REC5 ERROR? LDAA #1 SET EXTENSION JSR SETEXT CLR 3,X CLEAR DRIVE NUMBER LDAA #2 SET FOR WRITE STAA 0,X JSR FMS OPEN FOR WRITE BNE REC5 ERROR? LDX #FCB2 POINT TO 2ND FCB CLR 0,X CLEAR FCODE CLR 1,X LDAA #1 SET STATUS TO READ STAA 2,X STAA 3,X SET DRIVE #1 LDAA TRACK GET START ADDRESS STAA 64,X LDAA SECTOR STAA 65,X CLR 34,X LDAA #$FF SET FOR BINARY READ STAA FCB+59 STAA FCB2+59 REC4 LDX #FCB2 POINT TO FCB JSR FMS READ CHARACTER BNE REC8 ERROR? LDX #FCB POINT TO OUTPUT JSR FMS WRITE CHARACTER BEQ REC4 ERROR? REC5 JSR RPTERR REPORT ERROR REC6 JSR FMSCLS CLOSE ALL FILES REC7 JMP WARMS RETURN TO FLEX REC8 LDAA 1,X GET ERROR NUMBER CMPA #8 IS IT EOF? BEQ REC6 BRA REC5 * STRINGS STR FCC 'BAD DISK IN DRIVE #1? ' FCB 4 FCB2 RMB 320 END REC F OPT PAG TTL TEST FREE SPACE INTEGRITY PAG * * INTEG UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.53 ORG $C100 FMS EQU $D406 FCB EQU $C840 WARMS EQU $CD03 GETHEX EQU $CD42 RPTERR EQU $CD3F PSTRNG EQU $CD1E WASN EQU $CC0C * PROGRAM STARTS HERE INTEG BRA INTEG1 * TEMPORARY STORAGE VN FCB 1 TEMP FDB 0 FA FDB 0 LA FDB 0 CNT FDB 0 INTEG1 JSR GETHEX GET DRIVE NUMBER BCC INT2 ERROR? LDX #ILST POINT TO STRING JMP INT52 INT2 STX TEMP SAVE DRIVE LDX #FCB POINT TO FCB TSTB DEFAULT DRIVE? BNE INT22 LDAA WASN GET ASN DRIVE BPL INT23 SPECIFIED? CLR A BRA INT23 INT22 LDAA TEMP+1 GET SPEC DRIVE INT23 STAA 3,X SAVE DRIVE NO. LDAA #16 OPEN SIR STAA 0,X JSR FMS CALL FMS BNE INT25 ERROR? LDAA #7 GET INFO REC STAA 0,X JSR FMS CALL FMS INT25 LBNE INT6 ERROR? LDAA 93,X GET START ADDRESS STAA FA AND SAVE IT LDAA 94,X STAA FA+1 LDAA 95,X GET LAST ADDRESS STAA LA AND SAVE IT LDAA 96,X STAA LA+1 LDAA 97,X GET NUMBER SECTORS STAA CNT AND SAVE IT LDAA 98,X STAA CNT+1 CLR 0,X CLEAR FCODE LDAA #1 FAKE STATUS TO READ STAA 2,X LDAA FA GET START ADDRESS STAA 64,X PUT IN FCB STAA 30,X LDAA FA+1 STAA 65,X STAA 31,X INT3 CLR 34,X CLEAR FLAG JSR FMS CALL FMS BNE INT5 ERRORS? TST CNT COUNT = 0? BNE INT4 TST CNT+1 BEQ INT7 INT4 LDAA CNT+1 GET COUNT SUB A #1 DEC BY 1 STAA CNT+1 SAVE BCC INT3 DEC CNT DO LSB BRA INT3 INT5 LDAA 1,X GET ERROR NUMBER CMPA #8 IS IT EOF? BNE INT6 TST CNT+1 CHEC K FOR 0 COUNT BNE INT8 ERROR? TST CNT BNE INT8 ERROR? LDAA 30,X GET LAST SECTOR LDAB 31,X CMPA LA IS IT RIGHT? BNE INT9 CMPB LA+1 BNE INT9 LDX #OKST POINT TO STRING INT52 JSR PSTRNG OUTPUT STRING INT55 JMP WARMS ! RETURN TO FLEX INT6 JSR RPTERR REPORT ERROR BRA INT55 INT7 LDX #CNTZRO POINT TO STRING BRA INT52 INT8 LDX #CNTNTZ POINT TO STRING BRA INT52 INT9 LDX #LANOT POINT TO STRING BRA INT52 * STRINGS OKST FCC 'FREE SPACE ALL OK!' FCB 4 CNTZRO FCC 'SECTOR COUNT ZERO - NOT END OF SPACE' FCB 4 CNTNTZ FCC 'ENCOUNTERED LAST SECTOR EARLY' FCB 4 LANOT FCC 'ERROR IN LAST AVAILABLE POINTER' FCB 4 ILST FCC 'ILLEGAL DRIVE NUMBER' FCB 4 END INTEG F# OPT PAG TTL CONTINUE UTILITY PAG * * CONTINUE UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 * E$QUATES CMFLG EQU $CC28 PSTRNG EQU $CD1E GETCHR EQU $CD15 WARMS EQU $CD03 ORG $C100 * PROGRAM STARTS HERE CON BRA CON1 VN FCB 1 CON1 LDX #STR POINT TO STRING JSR PSTRNG PRINT IT JSR GETCHR GET RESPONSE ANDA #$5F MAKE UPPER CASE CMPA #'Y IS IT Y ? BNE CON4 JMP WARMS CONTINUE CON4 CLR CMFLG CLEAR COMMAND MODE JMP WARMS RETURN TO FLEX STR FCC 'CONTINUE? ' FCB 4 END CON F OPT PAG TTL CONCATENATE FILES UTILITY PAG * * CONCATENATE FILES UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 22.27 * MAIN DISK EQUATES FCB EQU $C840 FMS EQU $D406 FMSCLS EQU $D403 WARMS EQU $CD03 PUTCHR EQU $CD18 LSTTRM EQU $CC11 EOL EQU $CC02 PCRLF EQU $CD24 GETFIL EQU $CD2D SETEXT EQU $CD33 RPTERR EQU $CD3F * PROGRAM STARTS HERE ORG $C100 CON BRA CON1 VN FCB 1 VERSION NUMBER CON1 LDAA LSTTRM CHECK TERM CHAR CMPA #$D IS IT CR? BEQ CON2 CMPA EOL IS IT EOL? BNE CON3 CON2 JMP WARMS CON3 LDX #FCB POINT TO FCB JSR GETFIL GET FILE NAME BCS CON9 ERROR? LDAA #1 SET OPEN STAA 0,X JSR SETEXT SET EXTENSION (TXT) JSR FMS CALL TO OPEN BNE CON9 CON4 LDX #FCB POINT TO FCB JSR FMS READ CHARACTER BNE CON6 ERROR? CMPA #$D IS IT CR? BNE CON5 JSR PCRLF DO CR & LF BRA CON4 REPEAT CON5 CMPA #$A IS IT LINEFEED? BEQ CON4 SKIP IF SO TSTA IS IT NULL? BEQ CON4 SKIP IF SO JSR PUTCHR OUTPUT CHARACTER BRA CON4 REPEAT CON6 LDAA 1,X GET ERROR NUM CMPA #8 IS IT EOF? BNE CON9 REPORT ERROR LDAA #4 CLOSE FILE STAA 0,X JSR FMS BEQ CON1 REPEAT IF NO ERROR CON9 JSR RPTERR REPORT ERROR JSR FMSCLS CLOSE ALL FILES JMP WARMS END CON F OPT PAG TTL REMOVE SPACES UTILITY PAG * * REMOVE SPACES UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30  23.49 * EQUATES RFCB EQU $C840 WFCB EQU $0100 GETFIL EQU $CD2D SETEXT EQU $CD33 FMS EQU $D406 FMSCLS EQU $D403 RPTERR EQU $CD3F WARMS EQU $CD03 ORG $C100 * PROGRAM STARTS HERE XL BRA XL1 * TEMPORARY STORAGE VN FCB 1 SPCFLG FCB  0 XL1 LDX #RFCB POINT TO FCB JSR GETFIL GET FILE NAME BCS XL5 ERROR? LDAA #1 SET EXTENSION STAA 0,X JSR SETEXT JSR FMS OPEN FOR READ BNE XL5 ERROR? LDX #WFCB POINT TO OUTPUT FCB JSR GETFIL GET FILE NAME BCS XL 5 ERROR? LDAA #1 SET EXTENSION JSR SETEXT LDAA #2 SET FOR WRITE STAA 0,X JSR FMS OPEN FILE BNE XL5 ERROR? XL2 CLR SPCFLG CLEAR SPACE FLAG LDX #RFCB POINT TO INPUT JSR FMS GET CHARACTER BNE XL75 ERROR? CMPA #'*  IS IT COMMENT? BEQ XL8 XL3 CMPA #$20 IS IT SPACE? BNE XL4 STAA SPCFLG SET FLAG BRA XL7 XL4 CMPA #$D IS IT CR? BEQ XL9 CMPA #$1F IS IT CONTROL? BLS XL7 TST SPCFLG FLAG SET? BEQ XL65 CLR SPCFLG CLEAR THE FLAG PSH A SAVE THE CHARACTER LDAA #$20 SETUP SPACE LDX #WFCB POINT TO OUT JSR FMS WRITE SPACE BEQ XL6 ERROR? XL5 JSR RPTERR REPORT ERROR XL55 JSR FMSCLS CLOSE ALL FILES XL57 JMP WARMS RETURN TO FLEX XL6 PULA RESTORE CHARACTER XL65 LDX #WFCB POINT TO OUTPUT JSR FMS WRITE CHARACTER BNE XL5 ERROR? XL7 LDX #RFCB POINT TO INPUT JSR FMS READ CHARACTER BEQ XL3 ERROR? XL75 LDAA 1,X GET ERROR NUMBER CMPA #8 IS IT EOF? BNE XL5 BRA XL55 XL8 LDX #WFCB PROCESS COMMENT JSR FMS WRITE CHARACTER BNE XL5 ERROR? LDX #RFCB GET NEXT CHARACTER JSR FMS BNE XL75 ERROR? CMPA #$D IS IT CR? BNE XL8 XL9 LDX #WFCB WRITE CR OUT JSR FMS BNE XL5 ERROR? JMP XL2 REPEAT END XL F OPT PAG TTL SLEEP UTILITY PAG * * SLEEP UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 ORG $C100 * EQUATES WARMS EQU $CD03 INDEC EQU $CD48 * PROGRAM STARTS HERE SLEEP BRA SLEEP1 VN FCB 1 VALUE FDB 0 SLEEP1 JSR INDEC GET COUNT SLEEP4 STX VALUE SAVE COUNT BEQ SLEEP6 LDX #0 SET COUNTER LOOP1 DEX DEC THE COUNT BNE LOOP1 LDX #0 SET COUNT LOOP2 DEX DEC THE COUNT BNE LOOP2 LDX VALUE GET VALUE DEX DEC THE VALUE BRA SLEEP4 REPEAT PROCESS SLEEP6 JMP WARMS RETURN TO FLEX END SLEEP F OPT PAG * OPT NOG TTL PROMPT DELETE UTILITY PAG * * PROMPT DELETE UTILITY PROGRAM * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 * GLOBAL VARIABLES EOL EQU $CC02 WIDTH EQU $CC04 FCB EQU $C840 WASN EQU $CC0C ASN EQU WASN LSTTRM EQU $CC11 BUFPNT EQU $CC14 INDEX EQU $CC3D DATPNT EQU $CC41 SPC EQU $20 FMSCLS EQU $D403 FMS EQU $D406 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E CLASS EQU $CD21 PCRLF EQU $CD24 NXTCH EQU $CD27 GETFIL EQU $CD2D OUTDEC EQU $CD39 OUTHEX EQU $CD3C RPTERR EQU $CD3F GETHEX EQU $CD42 INDEC EQU $CD48 ORG $C100 PDE BRA PDE1 VN FCB 2 VERSION NUMBER NAME FCB 0,0,0,0 FCB 0,0,0,0 EXT FCB 0,0,0 ALLFLG FCB 0 ALLDR FCB 0 LOOP FCB 0 POINT FDB 0 TEMP FDB 0 TEMP2 FDB 0 * PROGRAM HERE PDE1 LDX BUFPNT POINT TO BUFFER STX POINT SAVE POS PDE2 TST ALLDR ALL DRIVES? BEQ PDE22 PDE21 LDX #FCB POINT TO FCB LDAA #20 FIND DRIVE STAA 0,X JSR FMS CALL FMS BNE PDE27 ERROR? LDX POINT RESTORE POINTER STX BUFPNT LDAA 0,X GET CHARACTER STAA LSTTRM SET TERM BRA PDE4 PDE22 LDX POINT GET POINTER LDA A 0,X GET CHARACTER CMP A #'. IS IT PERIOD? BEQ PDE25 JSR CLASS CLASSIFY IT BCS PDE25 TERM? CMP A #'9 IS IT NUMBER? BLS PDE3 PDE25 TST LOOP LOOPING? BEQ PDE29 PDE27 JMP WARMS RETURN TO FLEX PDE29 LDX #FCB POINT TO FCB LDA A ASN GET DRIVE STA A 3,X SET IN FCB BPL PDE4 STAA ALLDR SET ALL DRIVES BRA PDE21 PDE3 LDX POINT RESTORE POINTER STX BUFPNT JSR NXTCH GET NEXT CHAR AND A #3 MASK NUMBER LDX #FCB POINT TO FCB STAA 3,X SAVE IN DRIVE JSR NXTCH GET NEXT CHAR BCS PDE35 TERM? JMP SERR IF NOT, ERROR PDE35 LDX BUFPNT SET POINTER STX POINT PDE4 JSR PCRLF PRINT CR & LF PDE42 JSR TSTTRM TEST TERMINATOR BNE PDE45 CLR ALLFLG CLEAR  FLAG BRA PDE6 PDE43 JMP ERR REPORT ERROR PDE45 LDX BUFPNT RESET POINTER LDA A 0,X GET NEXT CHAR CMP A #'. IS IT PERIOD? BEQ PDE5 JSR CLASS CLASSIFY IT BCS SERR TERM? CMP A #'9 IS IT NUMBER? BHI PDE5 PDE47 JSR NXTCH  GET NEXT BCC PDE47 TERM? BRA PDE42 PDE5 JSR GETNAM INPUT NAME BCS SERR ERROR? PDE6 JSR DODLR GO DO DELETE BSR TSTTRM TEST TERM BNE PDE5 JSR PCRLF PRINT CR & LF JMP PDE2 REPEAT * EXIT DIR UTILITY EXIT JSR PCRLF PRIN T CR & LF JMP WARMS RETURN TO FLEX * REPORT SYNTAX ERROR SERR LDX #FCB POINT TO FCB LDAB #26 SET IN ERROR STAB 1,X * REPORT DISK ERROR ERR JSR RPTERR REPORT ERROR ERR2 JMP WARMS RETURN TO FLEX * TEST FOR TERMINATOR TSTTRM LDA  A LSTTRM CHECK LAST TERM CMP A #$D IS IT CR? BEQ TSTTR2 CMP A EOL IS IT EOL? TSTTR2 RTS * DO DELETE PROCESS DODLR LDX #FCB POINT TO FCB LDA A #6 OPEN DIRECTORY STA A 0,X JSR FMS BNE ERR ERRORS? INC LOOP SET LOOP FLA G DODLR2 JSR PCRLF PRINT CR & LF DODLR3 JSR GETIR GET INFO RECORD BEQ DODL32 ERRORS? JMP DODLR6 DODL32 LDX #FCB POINT TO FCB TST 4,X NAME PRESENT? BNE DODL34 JMP DODLR7 DODL34 BMI DODLR3 DELETED NAME? LDX #FCB+4 POINT TO NA!ME TST ALLFLG ALL FILES? BNE DODLR4 STX DATPNT SAVE POINTER LDX #NAME TRY TO MATCH NAME STX INDEX DODL35 LDX INDEX CPX #EXT+3 BEQ DODLR4 LDA A 0,X INX STX INDEX LDX DATPNT TST A CHAR NULL? BEQ DODL37 CMP A" 0,X DO COMPARISON BNE DODLR3 DODL37 INX MOVE TO NEXT STX DATPNT BRA DODL35 DODLR4 LDX #FCB+3 POINT TO FCB STX TEMP SAVE LDX #FCB2+3 POINT TO FCB 2 STX TEMP2 LDAB #12 SET COUNTER DODL45 LDX TEMP GET POINTER LDAA 0,X G#ET CHARACTER INX BUMP TO NEXT STX TEMP LDX TEMP2 RESET POINTER STAA 0,X PUT CHARACTER INX STX TEMP2 DECB DEC THE COUNT BNE DODL45 LDX #DST POINT TO STRING JSR PSTRNG PRINT IT LDX #FCB2+2 POINT TO DRIVE CLR 0,X $ CLRB JSR OUTDEC PRINT DRIVE LDAA #'. PRINT "." JSR PUTCHR LDX #FCB2+4 POINT TO NAME LDAB #8 SET COUNTER JSR PRNAM PRINT IT LDAA #'. PRINT "." JSR PUTCHR LDAB #3 SET COUNTER JSR PRNAM PRINT EXT LDX #DST2 POINT TO STRING LDAB #3 SET COUNT JSR PDATA PRINT IT JSR GETCHR GET RESPONSE CMPA #$D IS IT CR? BNE DODL48 JSR PCRLF PRINT CR & LF JMP WARMS RETURN TO FLEX DODL48 ANDA #$5F MASK TO UPPER CMPA #'Y IS IT "Y"? BNE DODLR5 LDX #FCB2 POINT TO FCB LDAA #12 DELETE CODE STAA 0,X JSR FMS DELETE FILE BNE DODLR6 ERRORS? DODLR5 JMP DODLR3 REPEAT DODLR6 LDA A 1,X GET ERROR TYPE CMP A #8 IS IT EOF? DODL65 BEQ DODLR7 JMP ERR REPORT ERROR DODLR7 RTS * GET INFO RECORD GETIR LDX #FCB POINT TO FCB LDA A #7 GET IR CODE STA A 0,X JMP FMS CALL FMS * PRINT FILE NAME PRNAM LDA A 0,X GET CHARACTER BEQ PRNAM2 JSR PUTCHR OUTPUT CHAR PRNAM2 INX BUMP TO NEXT DECB BNE PRNAM RTS RETURN * GET FILE MATCH NAME GETNAM CLR ALLFLG CLEAR ALL LDX #NAME POINT TO BUFFER LDA B #11 SET COUNT GETNA2 CLR 0,X CLEAR BUFFER INX DECB BNE GETNA2 LDX BUFPNT POINT TO NAME LDA A 0,X GET CHARACTER CMP A #'. IS IT '.'? BEQ GETNA4 LDX #NAME-4 RESET POINTER JMP GETFIL GET FILE NAME GETNA4 INC BUFPNT+1 FIX POINTER LDA B #3 SET COUNT LDX #EXT POINT TO EXT GETNA5 JSR NXTCH GET CHARACTER BCS GETNA6 TERM? STA A 0,X SAVE CHAR INX DECB BPL GETNA5 SEC RTS RETURN GETNA6 CLC RTS * PRINT STRING WITHOUT CR & LF PDATA LDAA 0,X GET CHARACTER BEQ PDATA2 NULL? JSR PUTCHR PRINT IT INX BUMP TO NEXT DECB DEC COUNT BNE PDATA RTS RETURN PDATA2 CLR B RTS * STRINGS DST FCC 'DELETE "' FCB 4 DST2 FCC '"? ' FCB 4 FCB2 RMB 320 END PDE F OPT PAG TTL HEX ECHO UTILITY PAG * * HEX STRING ECHO UTILITY * * COPYRIGHT 1978 BY * TECHNICAL SYSTEMS CONSULTANTS, INC. * BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 * GLOBAL VARIABLES EOL  EQU $CC02 LSTTRM EQU $CC11 * SYSTEM ROUTINE ADDRESSES WARMS EQU $CD03 PUTCHR EQU $CD18 PCRLF EQU $CD24 GETHEX EQU $CD42 ORG $C100 HECHO BRA HECHO0 VN FCB 1 VERSION NUMBER VALUE FDB 0 HECHO0 LDAA LSTTRM CHECK TERM CHAR CMPA  #$D IS IT CR? BEQ HECHO2 CMPA EOL IS IT EOL CHAR? BEQ HECHO2 JSR GETHEX GET HEX NUMBER BCS HECHO2 STX VALUE SAVE VALUE LDAA VALUE+1 GET DIGIT JSR PUTCHR OUTPUT IT BRA HECHO0 REPEAT HECHO2 JMP WARMS RETURN TO FLEX END HECHO F  OPT PAG TTL ECHO UTILITY PAG * * ECHO STRING UTILITY * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 * S YSTEM ROUTINE ADDRESSES WARMS EQU $CD03 EOL EQU $CC02 PUTCHR EQU $CD18 PCRLF EQU $CD24 NXTCH EQU $CD27 ORG $C100 * PROGRAM STARTS HERE ECHO BRA ECHO0 VN FCB 1 VERSION NUMBER ECHO0 JSR PCRLF OUTPUT CR & LF ECHO2 JSR NXTCH GET CHARACTER CMPA #$D IS IT CR? BEQ ECHO4 CMPA EOL IS T EOL CHAR? BEQ ECHO4 JSR PUTCHR OUTPUT CHARACTER BRA ECHO2 REPEAT ECHO4 JMP WARMS RETURN TO FLEX END ECHO F OPT PAG TTL REPEAT COMMAND UTILITY PAG * * REPEAT COMMAND UILITY (RPT) * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 ORG $7F00 WARMS EQU $CD03 INDEC EQU $CD48 DOCMND EQU $CD4B BUFPNT EQU $CC14 * PROGRAM STARTS HERE RPT BRA RPT1 * TEMPORARY STORAGE VN FCB 1 COUNT FDB 0 POINT FDB 0 RPT1 JSR INDEC GET RPT COUNT BCS RPT4 ERROR? STX COUNT SAVE COUNT LDX BUFPNT GET BUFFER POINTER STX POINT SAVE IT LDAA COUNT+1 CHECK IF COUNT=0 BEQ RPT4 RPT2 JSR DOCMND GO DO COMMAND BNE RPT4 ERROR? LDAA COUNT+1 GET COUNTER DECA SUBTRACT ONE STAA COUNT+1 STORE IT BACK BEQ RPT4 REPEAT? LDX POINT RESET BUFFER POINTER STX BUFPNT BRA RPT2 REPEAT! RPT4 JMP WARMS RETURN TO FLEX END RPT F OPT PAG TTL DATE UTILITY PAG * * SET AND EXAMINE DATE * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.12 * GLOBAL VARIABLES EOL EQU $CC02 FCB EQU $C840 DATE EQU $CC0E LSTTRM EQU $CC11 FMSCLS EQU $D403 FMS EQU $D406 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E PCRLF EQU $CD24 OUTDEC EQU $CD39 RPTERR EQU $CD3F INDEC EQU $CD48 ORG $C100 DATE0 BRA DATE1 VN FCB 1 VERSION NUMBER VALUE FDB 0 DATE1 LDAA LSTTRM CHECK TERM CHAR CMPA #$D IS IT CR? BEQ PDAT CMPA EOL IS IT EOL? BEQ PDAT BSR GETDAT INPUT NUMBER BCS DATE4 ERROR? CMPA #12 GREATER THAN 12? BHI DATE4 STAA DATE SAVE MONTH BSR GETDAT GET DAY NUMBER BCS DATE4 ERROR? CMPA #31 GREATER THAN 31? BHI DATE4 STAA DATE+1 SAVE DAY BSR GETDAT GET YEAR NUMBER BCS DATE4 ERROR? CMPA #99 GREATER THAN 99? BHI DATE4 STAA DATE+2 SAVE YEAR JMP WARMS RETURN TO FLEX DATE4 LDX #FCB POINT TO FCB LDAB #26 SET UP ERROR NUMBER STAB 1,X STUFF IN FCB JSR RPTERR REPORT ERROR JMP WARMS RETURN TO FLEX * INPUT DATE DIGIT GETDAT JSR INDEC INPUT NUMBER BCS GETDA4 ERROR? TSTB NUMBER THERE? BEQ GETDA3 STX VALUE SAVE VALUE LDAA VALUE+1 GET LS PART CLC CLEAR ERRORS RTS GETDA3 SEC SET ERRORS GETDA4 RTS * PRINT DATE PDAT JSR PCRLF OUTPUT CR & LF LDAA DATE GET MONTH LDX #MONTH POINT TO TABLE PDAT1 DECA CHECK DATE BEQ PDAT3 PDAT2 INX FIND MONTH STRING TST 0,X BNE PDAT2 INX BRA PDAT1 PDAT3 BSR PST GO PRINT IT LDAA #$20 OUTPUT SPACE JSR PUTCHR CLR VALUE LDAA DATE+1 GET DAY NUMBER STAA VALUE+1 LDX #VALUE POINT TO IT CLRB CLEAR FLAG JSR OUTDEC PRINT DAY LDX #CST POINT TO STRING BSR PST PRINT IT LDAA DATE+2 GET YEAR STAA VALUE+1 CLRB LDX #VALUE POINT TO VALUE JSR OUTD EC PRINT YEAR JMP WARMS RETURN TO FLEX * PRINT STRING PST LDAA 0,X GET CHARACTER BEQ PST2 IS IT NULL? JSR PUTCHR OUTPUT CHARACTER INX BUMP TO NEXT BRA PST REPEAT PST2 RTS * TEXT STRINGS CST FCC ", 19" FCB 0 * MONTH ST RINGS MONTH FCC 'JANUARY' FCB 0 FCC 'FEBRUARY' FCB 0 FCC 'MARCH' FCB 0 FCC 'APRIL' FCB 0 FCC 'MAY' FCB 0 FCC 'JUNE' FCB 0 FCC 'JULY' FCB 0 FCC 'AUGUST' FCB 0 FCC 'SEPTEMBER' FCB 0 FCC 'OCTOBER' FCB 0 FCC 'NOVEMBER' FCB 0 FCC 'DECEMBER' FCB 0 END DATE0 F OPT PAG TTL PR TRANSLATE TO LOWER CASE PAG * * TRANSLATE PR FILES TO LOWER CASE * * * COPYRIGHT (C) 1978 BY * * TECHNICAL SYSTEMS CONSULTANTS, INC. * P.O. BOX 2574 * WEST LAFAYETTE, INDIANA 47906 * (317) 423-5465 * * UNPACKED BY JAN OYVIND HAGESTUEN 89.11.30 23.05 ORG $C100 * MAIN DISK EQUATES FCB EQU $C840 FMS EQU $D406 FMSCLS EQU $D403 WARMS EQU $CD03 GETCHR EQU $CD15 PUTCHR EQU $CD18 PSTRNG EQU $CD1E PCRLF EQU $CD24 GETFIL EQU $CD2D SETEXT EQU $CD33 RPTERR EQU $CD3F  CLASS EQU $CD21 * MAIN STARTS HERE PRUL BRA PRUL1 VN FCB 1 PRUL1 LDX #FCB JSR GETFIL GET THE FILE NAME BCS DSKERR LDAA #1 SET FOR READ STAA 0,X SAVE IN FCB JSR SETEXT SET DEFAULT EXT JSR FMS CALL FMS BEQ OPNROK DS!KERR JSR RPTERR REPORT ERROR DSKER2 JSR FMSCLS CLOSE ALL FILES JMP WARMS RETURN TO FLEX OPNROK LDX #FCB2 POINT TO FCB JSR GETFIL GET FILE NAME BCS DSKERR ERROR? LDAA #1 SET EXTENSION JSR SETEXT LDAA #2 OPEN FOR WRITE ST"AA 0,X JSR FMS CALL FMS BNE DSKERR ERROR? PRUL4 LDX #FCB POINT TO FCB JSR FMS READ CHARACTER BNE PRUL8 ERROR? CMPA #'\ IS IT '\' BNE PRUL45 JSR BKSL PROCESS BACKSLASH BRA PRUL4 PRUL45 CMPA #'@ IS IT '@'? BEQ ATS #CMPA #'^ IS IT '^'? BEQ UPA JSR CLASS CLASSIFY CHARACTER BCS PRUL5 GRAPHICS? CMPA #'9 IS IT NUMBER? BLS PRUL5 ADDA #$20 MAKE LOWER CASE PRUL5 LDX #FCB2 POINT TO OUTPUT JSR FMS WRITE CHARACTER BNE DSKERR ERROR? BRA $PRUL4 REPEAT PRUL6 LDX #FCB POINT TO FCB JSR FMS GET CHARACTER BEQ PRUL5 ERROR? PRUL8 LDAA 1,X GET ERROR NUMBER CMPA #8 IS IT EOF? BNE DSKERR JSR FMSCLS CLOSE ALL FILES JMP WARMS RETURN TO FLEX * PROCESS AT SIGN (@) ATS LDX #FCB POINT TO FCB JSR FMS GET CHARACTER BNE PRUL8 ERROR? BRA PRUL5 * PROCESS UP ARROW (^) UPA LDX #FCB POINT TO FCB JSR FMS GET CHARACTER BNE PRUL8 ERROR? CMPA #'\ IS IT BACKSLASH? BNE UPA2 BSR BKSL PROCESS \ BRA UPA REPEAT UPA2 CMPA #'^ IS IT '^'? BEQ PRUL4 LDX #FCB2 POINT TO OUTPUT JSR FMS WRITE CHARACTER BNE DSER2 ERROR? BRA UPA REPEAT * PROCESS BACKSLASH BKSL LDX #FCB2 POINT TO OUTPUT JSR FMS WRITE CHARACTER BNE DS ER2 ERROR? LDX #FCB READ NEW CHARACTER JSR FMS BNE DSER2 ERROR? LDX #FCB2 WRITE IT OUT JSR FMS BNE DSER2 ERROR? RTS RETURN DSER2 JMP DSKERR FCB2 RMB 320 END PRUL F      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$      !"#$                           ! " # $!!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!!! !!!"!#!$""""""""" " " " " """"""""""""""""""" "!"""#"$######### # # # # ################### #!#"###$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$%%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$&&&&&&&&& & & & & &&&&&&&&&&&&&&&&&&& &!&"&#&$''''''''' ' ' ' ' ''''''''''''''''''' '!'"'#'$