܆з؎0&U>'&4/n&4"5 M'45 Z& ' 9섍 +P=='ۧ&&c 9ڷۆ==؅&9TOOLKIT2 ' Y'REPAIRCMD YCUSTOMIOCMD  YSEGMAPCMD  YLNKMATCMD YMAPCMD YFDIRCMD  YCRTSETCMD YFDIRTXT/ YSEGMAPTXT  YREPAIRTXT + YCUSTOMIOTXT 7 YLNKMATTXT  YMAPTXT YCRTSETTXT YCUSTESTBIN YCUSTESTTXT  Y  $'-?% ]'#_Ď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, 4v+0+01&+0'na\0L0H9&@&&;00&0+ن~5v~0R % ĩCDBAHIjn kYEbJloKzx1x2x4x5x8y1y2y4y5y8pqFG12G 56 I 034LˆM9KJ#&o Q&c Em+@m*m+ c )c  M*&c "460569nM'M&94&mn+m* " 5&nY?'4=11'L5'41" m4+90.o%o"o m+ M*M"  *454VVV54&M*'?'#4=11'5'41" 5PRINT.SYS not foundC PRINTSYS  3̼00-$!oo0H0-%̼q0$0e0nk%c %c '~fL# $0Z OcFdHeJ]NmV+ImQ+C':?T4601&Z&554601  ~m+m*]_Ba  BDLMZ0'-B' 'a@5  'Hm+m+@&)&4̲1 ̰ *~00"0ĽE0/0BE20.0D_9m *90%0GJH400!,04_950,_9c0bL4'W,Z@'D,N 'R,B5'C2&0bmM'0 0R 0G0N~E4̰5̲~̾$0LG$A$9#4$05 9&9 Fi&le Segment Mapper V1.1A 0---------------1---------------2-#----#--------3---------------4-----------# ............................................................................  ** TRACKS **Begin Trk/Sec - End Trk/Sec - Total Sectors - File Date - File Attr - File Type - RandomSequentialNext Free Chain - File Spec? Cannot map this disk form0atJanFebMarAprMayJunJulAugSepOctNovDecXFREEXDIR ̼_0c$$3oJ0<' ''#,F &]_BaD0J0D_90U@&"$<HB&0I0$'" 450 1$H#cJmJ*0"' 0& Hile Size (Sectors): , SECTOR -- (ADDRESS - BYTE COUNT) --> $'*9?EK+&0տ+3 ' 0"M*OooooAo̼H mA+cAdžJF-Z&> zt8"ځ0#ց1'ˁ2',3'`4'5'6'8'n̼ܮN+#'*4 & h'amm+'m+& ل' Ӷ9&1 &Ͻcoo02$*LJ4$>5J&m+9$ 2conam*m' m&0>m'+L_L40/5TQ ' m*=Z&.' m* Z&30᭝0ϭL 001J=1Z&4 $O0_|,j195O0_] {0R'0 0 ^m*O}0) 'B4&N WD@&< D2 &* R 5'Cm*9m*94 5coAoo4LLB P0ħ&940zħ&5&5bn\&9Q m*94̰B̲50(  ħ4&g40P1'Z&.'Z&5[9m*9;4̸nj' 540&5 ̺Cne̾/082ċ0 0+0kf=HaDHDF0c0Dg#00FT90 0 0 ~0x% m+' 9 ̸0r̼}/0o"0b0' 0\F_0p(10_nJanFebMarAprMayJunJulAugSepOctNovDecSeqRanDrive: Sectors Avail: Se ctors Used: Disk Date: Files: ======================================================= =========================1) FORWARD 2) BACKWARD 3) EXECUTE 4) PRINT 5) UNIT 6) PROT 7) EXITFile Spec? Entry File Name Start End Total Date TypeDisk Name: Volume: GET 0.PRINT.SYS  .  3]'%B_Ľ'%C_A'%:_B'=&/kġ&A' 0|& ~}'W~@? ACAOFFNORREVEOLEOFERFHOM B%į~ ̰'0Z&9̰k dY T '$8~$1~E$ 0'0 9 =  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 * * * 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 CO NT2 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 OPNF LG,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 ENTRIE,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 DIR2 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 [PUTC HR,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 C LR 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 PULS 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 LDD #$0300 LBSR SETCUR LDA #TERMSZ PSHS A DOERA LDD EOL LBSR PUTTWO DEC S BEQ DOERA1 LDA #$A JSR [PUTCHR,PCR] BRA DOERA * DOERA1 LDD #$0300 LBSR SETCUR PULS A,PC * DE%LAY PSHS X LDX #$FD00 DEL1 LEAX 1,X BNE DEL1 PULS X,PC * DOERR 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+CHA'SIZ,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 ADDD #1 BRA REDO * REDO1 STD FNUMB,U RTS * EXEC LDA #$D JSR [PUTCHR,PCR] LDD EOL LBSR PUTT*WO 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 LDD #$1600 LBSR SETCUR LEAX CMDSTR,PCR LBSR PDATA LDD #$1700 LBSR SETCU+R LEAX DNAMES,PCR LBSR PDATA LEAX DISNAM,U GT1 LDA ,X+ CMPA #4 BEQ GT2 JSR [PUTCHR,PCR] BRA GT1 GT2 LEAX 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 'JanFebMarAprMayJunJulAugSepOctNovDec' SEQMSG FCC 'Seq',4 RANMSG FCC 'Ran',4 * DRVMSG FCC 'Drive: ',4 SECUNU FCC 'Sectors Avail: ',4 SECUSE FCC 'Sectors Us-ed: ',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) PRO.T 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   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 CONT5 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 EXIT 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 SECTOR 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 ATTRIBUTES & 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 D ATE+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 'Begin 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 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 $CCB2 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 * PRTASC 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 PREPARATION 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 LBEQ 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 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 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 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 FLEX+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 NAME * 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 CONT12 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 OUTADR 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 SKIP1 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 FCB 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 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  E0&ǽ 9$GV$d$p${$$$Ž$~' 940&J&5CURSOR RIGHTCURSOR LEFTCURSOR DOWN CURSOR UP(CURSOR X-YREVERSE VIDEONORMAL VIDEOCURSOR OFFCURSOR ONBLOCK CURSORtCURSOR UNDERLINEthis is the graphics mode as you can seeTHE ABOVE WAS OBVIOUSLY THE GRAPHICS MODEEND OF TEST 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 LEAX -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 PCRLF 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                                                                                          !!!!!!!!! ! ! ! ! !!!!!""""""""" " " " " """""######### # # # # #####$$$$$$$$$ $ $ $ $ $$$$$%%%%%%%%% % % % % %%%%%&&&&&&&&& & & & & &&&&&''''''''' ' ' ' ' '''''