home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol007 / v2format.asm < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  258 lines

  1. ;
  2. ;    VERSAFLOPPY II DISK FORMATTER
  3. ;
  4. ;    Formats a New Disk with IBM Soft-Sectored Format.
  5. ;
  6. ;    R. W. Hart - July 1980
  7. ;
  8. ;    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  9. ;    XX  CAUTION!!! - This Program Will Destroy the XX
  10. ;    XX  Contents of a Disk Unless it is Write-     XX
  11. ;    XX  Protected.  When Calling the Program by    XX
  12. ;    XX  Mistake, any Response other than RETURN to XX
  13. ;    XX  the Question "When Ready, Respond with     XX
  14. ;    XX  RETURN.." Will Abort the Program Without   XX
  15. ;    XX  Writing to the Disk.               XX
  16. ;    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  17. ;
  18.     .PABS
  19.     .LOC    0100H
  20. ;
  21. ;    DEFINITIONS
  22. ;
  23. SRAM    =    0000H        ;Start of RAM
  24. BDOS    =    0005H        ;Operating System Entry
  25. UNIT    =    SRAM+42H    ;Unit Byte
  26. SCTR    =    SRAM+43H    ;Sector Pointer
  27. TRK    =    SRAM+44H    ;Track Pointer
  28. BIOS    =    0F000H        ;Versafloppy BIOS Address
  29. HME    =    BIOS+18H    ;Home Entry to BIOS
  30. FMATE    =    BIOS+33H    ;Format Entry to BIOS
  31. NTRKS    =    BIOS+40H    ;Contains # of Disk TRACKS
  32. CR    =    0DH        ;Carriage-Return
  33. LF    =    0AH        ;Line-Feed
  34. VT    =    0BH        ;Clear SCREEN
  35. FILLER    =    0000H
  36. ;
  37. ;
  38.     LHLD    UNIT
  39.     SHLD    SAVUNIT
  40. FORMAT:    MVI    C,9
  41.     LXI    D,GMSG
  42.     CALL    BDOS        ;Output Greeting
  43. DRIVE:    MVI    C,9
  44.     LXI    D,MSG5
  45.     CALL    BDOS
  46.     MVI    C,1
  47.     CALL    BDOS
  48.     ANI    0FH
  49.     CPI    04H
  50.     JNC    DRIVE
  51.     STA    UNIT
  52. SIZE:    MVI    C,9
  53.     LXI    D,MSG1
  54.     CALL    BDOS
  55.     MVI    C,1
  56.     CALL    BDOS
  57.     ANI    0FH
  58.     CPI    02H
  59.     JNC    SIZE
  60.     CPI    00H
  61.     JZ    RESET7
  62.     JMP    SET7
  63. DEN:    MVI    C,9
  64.     LXI    D,MSG2
  65.     CALL    BDOS
  66.     MVI    C,1
  67.     CALL    BDOS
  68.     ANI    0FH
  69.     CPI    02H
  70.     JNC    DEN
  71.     CPI    00H
  72.     JZ    RESET6
  73.     JMP    SET6
  74. DSIZE:    MVI    C,9
  75.     LXI    D,MSG3
  76.     CALL    BDOS
  77.     MVI    C,1
  78.     CALL    BDOS
  79.     ANI    0FH
  80.     CPI    02H
  81.     JNC    DSIZE
  82.     CPI    00H
  83.     JZ    RESET5
  84.     JMP    SET5
  85. DSIDE:    MVI    C,9
  86.     LXI    D,MSG4
  87.     CALL    BDOS
  88.     MVI    C,1
  89.     CALL    BDOS
  90.     ANI    0FH
  91.     CPI    02H
  92.     JNC    DSIDE
  93.     CPI    00H
  94.     JZ    RESET4
  95.     JMP    SET4
  96. GO:    MVI    C,9
  97.     LXI    D,MMSG
  98.     CALL    BDOS
  99.     MVI    C,1
  100.     CALL    BDOS
  101.     CPI    CR
  102.     RNZ
  103.     XRA    A
  104.     STA    TRK
  105.     INR    A
  106.     STA    SCTR
  107.     CALL    HME
  108. FORMT1:    CALL    FMATE        ;Format this Track
  109.     JNZ    ERROR
  110.     LDA    TRK
  111.     INR    A
  112.     STA    TRK
  113.     MOV    B,A
  114.     LDA    NTRKS
  115.     CMP    B
  116.     JNZ    FORMT1
  117.     MVI    C,9
  118.     LXI    D,MSG6
  119.     CALL    BDOS
  120.     MVI    C,1
  121.     CALL    BDOS
  122.     CPI    'Y'
  123.     JZ    GO
  124.     MVI    C,9
  125.     LXI    D,FMSG
  126.     CALL    BDOS
  127.     PUSH    H
  128.     LHLD    SAVUNIT
  129.     SHLD    UNIT
  130.     POP    H
  131.     JMP    00H
  132. ;
  133. RESET7:    PUSH    H
  134.     LXI    H,UNIT
  135.     RES    7,M
  136.     POP    H
  137.     JMP    DEN
  138. RESET6:    PUSH    H
  139.     LXI    H,UNIT
  140.     RES    6,M
  141.     POP    H
  142.     JMP    DSIZE
  143. RESET5:    PUSH    H
  144.     LXI    H,UNIT
  145.     RES    5,M
  146.     POP    H
  147.     JMP    DSIDE
  148. RESET4:    PUSH    H
  149.     LXI    H,UNIT
  150.     RES    4,M
  151.     POP    H
  152.     JMP    GO
  153. SET7:    PUSH    H
  154.     LXI    H,UNIT
  155.     SET    7,M
  156.     POP    H
  157.     JMP    DEN
  158. SET6:    PUSH    H
  159.     LXI    H,UNIT
  160.     SET    6,M
  161.     POP    H
  162.     JMP    DSIZE
  163. SET5:    PUSH    H
  164.     LXI    H,UNIT
  165.     SET    5,M
  166.     POP    H
  167.     JMP    DSIDE
  168. SET4:    PUSH    H
  169.     LXI    H,UNIT
  170.     SET    4,M
  171.     POP    H
  172.     JMP    GO
  173. ;
  174. ERROR:    MVI    C,9
  175.     LXI    D,EMSG
  176.     CALL    BDOS
  177.     PUSH    H
  178.     LHLD    SAVUNIT
  179.     SHLD    UNIT
  180.     POP    H
  181.     JMP    00H
  182. ;
  183. MSG1:    .BYTE    VT,LF,CR
  184.     .ASCII    ' SECTOR SIZE'
  185.     .BYTE    LF,CR
  186.     .ASCII    ' -----------'
  187.     .BYTE    LF,CR,LF,CR
  188.     .ASCII    '128 BYTES = 0 '
  189.     .BYTE    LF,CR
  190.     .ASCII    '256 BYTES = 1'
  191.     .BYTE    LF,CR,'$'
  192. MSG2:    .BYTE    VT,LF,CR
  193.     .ASCII    ' DENSITY'
  194.     .BYTE    LF,CR
  195.     .ASCII    ' -------'
  196.     .BYTE    LF,CR,LF,CR
  197.     .ASCII    'SINGLE = 0 '
  198.     .BYTE    LF,CR
  199.     .ASCII    'DOUBLE = 1'
  200.     .BYTE    LF,CR,'$'
  201. MSG3:    .BYTE    VT,LF,CR
  202.     .ASCII    'DRIVE SIZE '
  203.     .BYTE    LF,CR
  204.     .ASCII    '----------'
  205.     .BYTE    LF,CR,LF,CR
  206.     .ASCII    ' FULL = 0'
  207.     .BYTE    LF,CR
  208.     .ASCII    ' MINI = 1'
  209.     .BYTE    LF,CR,'$'
  210. MSG4:    .BYTE    VT,LF,CR
  211.     .ASCII    '   # OF SIDES'
  212.     .BYTE    LF,CR
  213.     .ASCII    '   ----------'
  214.     .BYTE    LF,CR,LF,CR
  215.     .ASCII    'SINGLE SIDED = 0'
  216.     .BYTE    LF,CR
  217.     .ASCII    'DOUBLE SIDED = 1'
  218.     .BYTE    LF,CR,'$'
  219. MSG5:    .BYTE    LF,CR
  220.     .ASCII    '   DRIVE'
  221.     .BYTE    LF,CR
  222.     .ASCII    '   -----'
  223.     .BYTE    LF,CR,LF,CR
  224.     .ASCII    'DRIVE A = 0'
  225.     .BYTE    LF,CR
  226.     .ASCII    'DRIVE B = 1'
  227.     .BYTE    LF,CR
  228.     .ASCII    'DRIVE C = 2'
  229.     .BYTE    LF,CR
  230.     .ASCII    'DRIVE D = 3'
  231.     .BYTE    LF,CR,'$'
  232. MSG6:    .BYTE    VT,LF,CR
  233.     .ASCII    'Do You Wish To Format Another Disk ?'
  234.     .BYTE    LF,CR,'$'
  235. GMSG:    .BYTE    VT,LF,CR
  236.     .ASCII    'WA3MEZ VERSAFLOPPY II DISK FORMATER - '
  237.     .ASCII    'VERSION 1.00'
  238.     .BYTE    LF,CR,LF,CR,'$'
  239. MMSG:    .BYTE    VT,LF,CR
  240.     .ASCII    'Mount Disk to be Formatted...'
  241.     .BYTE    LF,CR,LF,CR
  242.     .ASCII    'When Ready, Respond With RETURN...'
  243.     .BYTE    LF,CR,'$'
  244. ;
  245. EMSG:    .BYTE    VT,LF,CR
  246.     .ASCII    '*** DISK WRITE ERROR - PROGRAM ABORTED ***'
  247.     .BYTE    LF,CR,LF,CR,'$'
  248. ;
  249. FMSG:    .BYTE    VT,LF,CR
  250.     .ASCII    '*** FORMATTING COMPLETE - REMOVE DISK ***'
  251.     .BYTE    LF,CR,LF,CR,'$'
  252. ;
  253. ;
  254.     
  255. SAVUNIT: .WORD    FILLER
  256. ;
  257.     .END
  258.