home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / ASMUTL / ASMCOLOR.ZIP / CRCK3.ASM < prev   
Encoding:
Assembly Source File  |  1987-01-11  |  8.0 KB  |  420 lines

  1.  
  2. M    EQU    Byte Ptr 0[BX]
  3. ;
  4. ;        CRCK.ASM version 3.0
  5. ;         (revised 8/10/80)
  6. ;
  7. ;PROGRAM TO READ ANY CP/M FILE AND PRINT A
  8. ;CYCLIC-REDUNDANCY-CHECK NUMBER BASED ON THE
  9. ;CCITT STANDARD POLYNOMINAL:
  10. ;   X^16 + X^15 + X^13 + X^7 + X^4 + X^2 + X + 1
  11. ;
  12. ;USEFUL FOR CHECKING ACCURACY OF FILE TRANSFERS.
  13. ;MORE ACCURATE THAN A SIMPLE CHECKSUM.
  14. ;
  15. ;COMMANDS:   (drive name may be specified)
  16. ;    CRCK FILENAME.FILETYPE
  17. ;    CRCK *.ASM
  18. ;    CRCK *.*
  19. ;
  20. ;06/27/79 FIRST WRITTEN BY KEITH PETERSEN, W8SDZ
  21. ;
  22. ;08/19/79 ADD CONDITIONAL ASSEMBLY FOR CP/M
  23. ;      ON H8 OR TRS-80.  (KBP)
  24. ;
  25. ;08/20/79 FIX BUG IN READIT ROUTINE WHICH
  26. ;      SHOWED UP ONLY ON ALTCPM OPTION. (KBP)
  27. ;
  28. ;04/21/80 ADD MULTIPLE FILENAME FEATURE, PRINT
  29. ;      NAME OF CURRENT FILE BEING READ, AND
  30. ;      ALLOW OPERATOR ABORT. (KBP)
  31. ;
  32. ;04/23/80 CORRECT OMISSION OF SHR 8 IN MFA ROUTINE.
  33. ;      ERROR ONLY SHOWED UP FOR ALTCPM ASSEMBLY
  34. ;      ADD COLON AFTER ---> FILE:    (KBP)
  35. ;
  36. ;08/10/80 ADD ROUTINES TO ALLOW CONDITIONAL ASSEMBLY
  37. ;         OF WILDCARD ROUTINES AND TO ALLOW "SYSTEM"
  38. ;         FILES TO BE EXCLUDED FROM WILDCARD OPTION.
  39. ;         (BY DAVE HARDY)
  40. ;
  41. TRUE    EQU    1
  42. FALSE    EQU    0
  43. ;
  44. ;
  45. STDCPM    EQU    TRUE            ;TRUE IS STANDARD CP/M
  46. ALTCPM    EQU    FALSE            ;TRUE IS H8 OR TRS-80
  47. WILDCD    EQU    TRUE            ;WANT WILDCARDS IN FILENAME?
  48. SYSFILE    EQU    FALSE            ;WANT SYS FILES IN WILDCARDS?
  49. ;
  50. BASE    EQU    0
  51. ;
  52. ;
  53. CR    EQU    0DH
  54. LF    EQU    0AH
  55. TAB    EQU    09H
  56. ;
  57.     ORG    BASE+100H
  58. ;
  59.     JMPS    BEGIN            ;JUMP AROUND IDENTIFICATION
  60. L_1    EQU    $
  61.     DSEG
  62.     ORG    Offset L_1
  63.     DB    'CRCK ver 3.0 8/3/80 '
  64. L_2    EQU    $
  65.     CSEG
  66.     ORG    Offset L_2
  67. ;
  68. BEGIN:    MOV    BX,0            ;GET STACK...
  69.     LAHF                ;POINTER SO WE CAN...
  70.     ADD    BX,SP
  71.     RCR    SI,1
  72.     SAHF
  73.     RCL    SI,1
  74.     MOV    Word Ptr STACK,BX    ;SAVE IT
  75.     MOV    SP,(Offset STACK)    ;INITIALIZE LOCAL STACK
  76.     CALL    START
  77.     DB    'CRCK ver 3.0'
  78.     DB    CR,LF,CR,LF,'$'
  79. ;
  80. START:    POP    DX            ;GET ID
  81.     MOV    CL,PRINT
  82.     INT    224            ;PRINT ID
  83. ;
  84. AGAIN:    CALL    MFNAME            ;SEE IF FILE NAME TO READ
  85.     JB    AGEND
  86.     MOV    AL,Byte Ptr .FCB+10    ;GET SYS ATTRIBUTE
  87.     AND    AL,80H
  88.     JNZ    AGAIN            ;IGNORE IF SYSTEM FILE
  89.     JNB    NAMEPR            ;YES, GO READ IT
  90. AGEND:    CALL    MSGEXIT            ;NONE, PRINT MSG THEN EXIT
  91.     DB    'DONE$'
  92. ;
  93. NAMEPR:                ;PRINT FILENAME.TYPE
  94. ;MOVE 8 CHARACTERS FROM FCB+1 TO FNAME
  95.     MOV    BX,FCB+1
  96.     MOV    DX,(Offset FNAME)
  97.     MOV    CX,8
  98.     CALL    MOVER
  99. ;MOVE 3 CHARACTERS FROM FCB+9 TO FNAME+9
  100.     MOV    BX,FCB+9
  101.     MOV    DX,(Offset FNAME)+9
  102.     MOV    CX,3
  103.     CALL    MOVER
  104.     CALL    NAMEP2
  105.     DB    '--> FILE:  '
  106. FNAME    DB    'XXXXXXXX.XXX',TAB,TAB,'CRC = $'
  107. ;
  108. NAMEP2:    POP    DX            ;GET ADRS OF STRING
  109.     MOV    CL,PRINT
  110.     INT    224            ;PRINT FILENAME.TYPE
  111. ;
  112. ;OPEN THE FILE
  113.     MOV    DX,FCB
  114.     MOV    CL,OPEN
  115.     INT    224
  116.     INC    AL
  117.     JNZ    INITIT
  118.     CALL    ERXIT
  119.     DB    CR,LF,'++OPEN FAILED++$'
  120. ;
  121. ;INITIALIZE THINGS
  122. INITIT:    MOV    BX,0
  123.     MOV    Word Ptr REM,BX        ;INIT CRC REMAINDER TO ZERO
  124.     MOV    BX,BASE+100H
  125.     MOV    Word Ptr BUFAD,BX    ;FORCE INITIAL READ
  126. ;
  127. READIT:    MOV    BX,Word Ptr BUFAD
  128.     MOV    AL,BH            ;TIME TO READ?
  129.     CMP    AL,BASE SHR 8
  130.     JZ    NORD            ;NO READ
  131.     MOV    CL,CONST
  132.     INT    224            ;CHECK FOR OPERATOR ABORT
  133.     OR    AL,AL
  134.     JZ    READ2            ;NOTHING FROM OPERATOR
  135.     MOV    CL,RDCON
  136.     INT    224            ;GET CHARACTER INPUTTED
  137.     CMP    AL,'C'-40H        ;CONTROL C?
  138.     JNZ    L_3    
  139.     JMP    EXIT            ;YES EXIT
  140. L_3:
  141. ;
  142. READ2:    MOV    DX,FCB
  143.     MOV    CL,READ
  144.     INT    224
  145.     OR    AL,AL
  146.     JNZ    FINISH            ;ERROR OR EOF
  147.     MOV    BX,BASE+80H        ;BUFFER LOCATION
  148. NORD:    MOV    AL,M
  149.     MOV    Byte Ptr MESS,AL    ;SAVE FOR DIVP
  150.     INC    BX
  151.     MOV    Word Ptr BUFAD,BX
  152.     CALL    DIVP
  153.     JMPS    READIT
  154. ;
  155. FINISH:    MOV    AL,Byte Ptr REM+1    ;GET MSP OF CRC
  156.     CALL    HEXO            ;PRINT IT
  157.     MOV    AL,' '
  158.     CALL    TYPE            ;TYPE A SPACE
  159.     MOV    AL,Byte Ptr REM        ;GET LSP OF CRC
  160.     CALL    HEXO            ;PRINT IT
  161.     MOV    DX,(Offset NEWLIN)    ;POINT TO CRLF
  162.     MOV    CL,PRINT
  163.     INT    224            ;PRINT IT
  164.     JMP    AGAIN            ;SEE IF MORE FILES TO DO
  165. ;
  166. NEWLIN    DB    CR,LF,CR,LF,'$'
  167. ;
  168. ;---------------------------------------------
  169. ;AN 8080 ROUTINE FOR GENERATING A CYCLIC-
  170. ;REDUNDANCY-CHECK.  CHARACTER LEAVES THAT
  171. ;CHARACTER IN LOCATION REM.  BY FRED GUTMAN.
  172. ;FROM 'EDN' MAGAZINE, JUNE 5, 1979 ISSUE, P84.
  173. ;
  174. DIVP:    MOV    BX,Word Ptr REM        ;GET REMAINDER
  175.     MOV    AL,BH
  176.     AND    AL,128            ;Q-BIT MASK
  177.     LAHF                ;SAVE STATUS
  178.     XCHG    AL,AH
  179.     PUSH    AX
  180.     SHL    BX,1            ;2 X R(X)
  181.     MOV    AL,Byte Ptr MESS    ;MESSAGE BIT IN LSB
  182.     ADD    AL,BL
  183.     MOV    BL,AL
  184.     POP    AX
  185.     XCHG    AL,AH
  186.     SAHF
  187.     JZ    QB2            ;IF Q-BIT IS ZERO
  188. QB:    MOV    AL,BH
  189.     XOR    AL,0A0H            ;MS HALF OF GEN. POLY
  190.     MOV    BH,AL
  191.     MOV    AL,BL
  192.     XOR    AL,97H            ;LS HALF OF GEN. POLY
  193.     MOV    BL,AL
  194. QB2:    MOV    Word Ptr REM,BX
  195.     RET
  196. ;--------------------------------------------
  197. ;
  198. ;HEX OUTPUT
  199. ;
  200. HEXO:    LAHF                ;SAVE FOR RIGHT DIGIT
  201.     XCHG    AL,AH
  202.     PUSH    AX
  203.     XCHG    AL,AH
  204.     RCR    AL,1            ;RIGHT..
  205.     RCR    AL,1            ;..JUSTIFY..
  206.     RCR    AL,1            ;..LEFT..
  207.     RCR    AL,1            ;..DIGIT..
  208.     CALL    NIBBL            ;PRINT LEFT DIGIT
  209.     POP    AX            ;RESTORE RIGHT
  210.     XCHG    AL,AH
  211. NIBBL:    AND    AL,0FH            ;ISOLATE DIGIT
  212.     CMP    AL,10            ;IS IS <10?
  213.     JB    ISNUM            ;YES, NOT ALPHA
  214.     ADD    AL,7            ;ADD ALPHA BIAS
  215. ISNUM:    ADD    AL,'0'            ;MAKE PRINTABLE
  216. ;
  217. TYPE:    PUSH    CX
  218.     PUSH    DX
  219.     PUSH    BX
  220.     MOV    DL,AL
  221.     MOV    CL,WRCON
  222.     INT    224
  223.     POP    BX
  224.     POP    DX
  225.     POP    CX
  226.     RET
  227. ;
  228. ;
  229. ;    MFA.LIB        (revised 4/23/80)
  230. ;
  231. ;MULTI-FILE ACCESS SUBROUTINE.  ALLOWS PROCESSING
  232. ;OF MULTIPLE FILES (I.E. *.ASM) FROM DISK.  THIS
  233. ;ROUTINE BUILDS THE PROPER NAME IN THE FCB EACH
  234. ;TIME IT IS CALLED.  JUST CALL "MFNAME" (MULTIPLE
  235. ;FILE NAME) AND THE FCB WILL BE SET UP WITH THE NEXT
  236. ;NAME, READY TO DO NORMAL PROCESSING (OPEN, READ, ETC.)
  237. ;
  238. ;CARRY IS SET IF NO MORE NAMES CAN BE FOUND
  239. ;
  240. ;------------------------------------------------
  241. ;
  242. ;    MULTI-FILE ACCESS SUBROUTINE
  243. ;
  244. ;THE ROUTINE IS COMMENTED IN PSEUDO CODE,
  245. ;EACH PSEUDO CODE STATEMENT IS IN <<...>>
  246. ;
  247. MFNAME:                ;<<INIT DMA ADDR, FCB>>
  248.     PUSH    CX
  249.     PUSH    DX
  250.     PUSH    BX
  251.     MOV    CL,STDMA
  252.     MOV    DX,BASE+80H
  253.     INT    224
  254.     POP    BX
  255.     POP    DX
  256.     POP    CX
  257.     XOR    AL,AL
  258.     MOV    Byte Ptr .FCBEXT,AL
  259.     MOV    Byte Ptr .FCBRNO,AL
  260. ;<<IF FIRST TIME>>
  261.     MOV    AL,Byte Ptr MFFLG1
  262.     OR    AL,AL
  263.     JNZ    MFN01
  264. ;<<TURN OFF 1ST TIME SW>>
  265.     MOV    AL,1
  266.     MOV    Byte Ptr MFFLG1,AL
  267. ;<<SAVE THE REQUESTED NAME>>
  268. ;SAVE ORIG REQ
  269.     MOV    BX,FCB
  270.     MOV    DX,(Offset MFREQ)
  271.     MOV    CX,12
  272.     CALL    MOVER
  273.     MOV    AL,Byte Ptr .FCB
  274.     MOV    Byte Ptr MFCUR,AL    ;SAVE DISK IN CURR FCB
  275. ;<<SRCHF REQ NAME>>
  276.     MOV    BX,(Offset MFREQ)
  277.     MOV    DX,FCB
  278.     MOV    CX,12
  279.     CALL    MOVER
  280.     PUSH    CX
  281.     PUSH    DX
  282.     PUSH    BX
  283.     MOV    CL,SRCHF
  284.     MOV    DX,FCB
  285.     INT    224
  286.     POP    BX
  287.     POP    DX
  288.     POP    CX
  289. ;<<ELSE>>
  290.     JMPS    MFN02
  291. ;
  292. MFN01:                    ;<<SRCHF CURR NAME>>
  293.     MOV    BX,(Offset MFCUR)
  294.     MOV    DX,FCB
  295.     MOV    CX,12
  296.     CALL    MOVER
  297.     PUSH    CX
  298.     PUSH    DX
  299.     PUSH    BX
  300.     MOV    CL,SRCHF
  301.     MOV    DX,FCB
  302.     INT    224
  303.     POP    BX
  304.     POP    DX
  305.     POP    CX
  306. ;<<SRCHN REQ NAME>>
  307.     MOV    BX,(Offset MFREQ)
  308.     MOV    DX,FCB
  309.     MOV    CX,12
  310.     CALL    MOVER
  311.     PUSH    CX
  312.     PUSH    DX
  313.     PUSH    BX
  314.     MOV    CL,SRCHN
  315.     MOV    DX,FCB
  316.     INT    224
  317.     POP    BX
  318.     POP    DX
  319.     POP    CX
  320. ;<<ENDIF>>
  321. MFN02:                    ;<<RETURN CARRY IF NOT FOUND>>
  322.     INC    AL
  323.     STC
  324.     JNZ    L_4
  325.     RET
  326. L_4:
  327. ;<<MOVE NAME FOUND TO CURR>>
  328.     DEC    AL
  329.     AND    AL,3
  330.     ADD    AL,AL
  331.     ADD    AL,AL
  332.     ADD    AL,AL
  333.     ADD    AL,AL
  334.     ADD    AL,AL
  335.     ADD    AL,81H
  336.     MOV    BL,AL
  337.     MOV    BH,BASE SHR 8
  338.     PUSH    BX            ;SAVE NAME POINTER
  339.     MOV    DX,(Offset MFCUR)+1
  340.     MOV    CX,11
  341.     CALL    MOVER
  342. ;<<MOVE NAME FOUND TO FCB>>
  343.     POP    BX
  344.     MOV    DX,FCB+1
  345.     MOV    CX,11
  346.     CALL    MOVER
  347. ;<<SETUP FCB>>
  348.     XOR    AL,AL
  349.     MOV    Byte Ptr .FCBEXT,AL
  350.     MOV    Byte Ptr .FCBRNO,AL
  351. ;<<RETURN>>
  352.     RET
  353. ;
  354. ;MOVE SUBROUTINE
  355. ;
  356. MOVER:    MOV    AL,M
  357.     MOV    SI,DX
  358.     MOV    [SI],AL
  359.     INC    BX
  360.     INC    DX
  361.     DEC    CX
  362.     MOV    AL,CH
  363.     OR    AL,CL
  364.     JNZ    MOVER
  365.     RET
  366. ;
  367. ;------------------------------------------
  368. ;
  369. ;EXIT WITH MESSAGE
  370. ;
  371. MSGEXIT    EQU    (Offset $)        ;EXIT W/"INFORMATIONAL" MSG
  372. ERXIT:    POP    DX            ;GET MSG
  373.     MOV    CL,PRINT
  374.     INT    224
  375. ;
  376. ;EXIT, RESTORING STACK AND RETURN
  377. ;
  378. EXIT:    MOV    BX,Word Ptr STACK
  379.     MOV    SP,BX
  380.     RET                ;TO CCP
  381. L_5    EQU    $
  382.     DSEG
  383.     ORG    Offset L_5
  384. ;
  385. REM    DW    0            ;REMAINDER STORAGE
  386. BUFAD    RS    2            ;BUFFER ADDRESS
  387. MESS    RS    1            ;MESSAGE CHAR GOES HERE
  388. ;
  389. ;MULTI-FILE ACCESS WORK AREA
  390. ;
  391. MFFLG1    DB    0            ;1ST TIME SW
  392. MFREQ    RS    12            ;REQ NAME
  393. MFCUR    RS    12            ;CURR NAME
  394. ;
  395.     RS    64            ;STACK AREA
  396. STACK    RS    2
  397. ;
  398. ;BDOS/CBIOS EQUATES
  399. RDCON    EQU    1
  400. WRCON    EQU    2
  401. PRINT    EQU    9
  402. CONST    EQU    11
  403. OPEN    EQU    15
  404. CLOSE    EQU    16
  405. SRCHF    EQU    17
  406. SRCHN    EQU    18
  407. ERASE    EQU    19
  408. READ    EQU    20
  409. WRITE    EQU    21
  410. MAKE    EQU    22
  411. REN    EQU    23
  412. STDMA    EQU    26
  413. BDOS    EQU    BASE+5
  414. FCB    EQU    BASE+5CH
  415. FCB2    EQU    BASE+6CH
  416. FCBEXT    EQU    FCB+12
  417. FCBRNO    EQU    FCB+32
  418. ;
  419.     END
  420.