home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug132.arc / AMSTRAD.LBR / FORMATAM.MAC < prev   
Text File  |  1979-12-31  |  19KB  |  659 lines

  1. ;This file is to Format Amstrad disks on the Microbee in the
  2. ;4 formats ie. System (either side), Data and Double sided Data format.
  3. ;
  4. ;This MAC file was FORMAT80.COM and has been disassembled
  5. ;using DASM16 and has had the necessary code added and changes
  6. ;made for multiple formats.
  7. ;
  8. ;FORMATS.COM will only format the WHOLE disk, not just 
  9. ;desired tracks like FORMAT80.COM will.
  10. ;
  11. ;ver 1.3   19/3/88      Microbee data removed, Amstrad added. By AJLaughton
  12. ;ver 1.2   2/11/87      included format type on screen.  By John Slater
  13. ;ver 1.1   1/11/87      removed code not needed.          "   "     "
  14. ;ver 1.0   25/10/87
  15. ;
  16. ;
  17. ;
  18.         ASEG
  19.         .Z80
  20.         ORG     100H
  21.  
  22. L0000   EQU     0H              ;WARM BOOT
  23. L0001   EQU     1H
  24. L0005   EQU     5H              ;BDOS
  25. L0006   EQU     6H
  26. L0027   EQU     27H             
  27.  
  28. START:                          ;START
  29.         LD      DE,SIGN_ON
  30.         CALL    MESS_OUT                ;Put signon message to screen
  31. L0106:  
  32.         CALL    KEYS
  33.         CP      '1'             ;System SS - side 0
  34.         JR      NZ,S1
  35.         LD      DE,TYPE1
  36.         LD      (TYPE),DE       
  37.         LD      HL,DATA1
  38.         JR      PUT_DAT
  39. S1:     CP      '2'             ;System SS - side 1
  40.         JR      NZ,DATAS
  41.         LD      DE,TYPE2
  42.         LD      (TYPE),DE
  43.         LD      HL,DATA2
  44.         JR      PUT_DAT
  45. DATAS:  CP      '3'             ;Data SS
  46.         JR      NZ,DATAD
  47.         LD      DE,TYPE3
  48.         LD      (TYPE),DE
  49.         LD      HL,DATA3
  50.         JR      PUT_DAT
  51. DATAD:  CP      '4'             ;Data DS(5.25")
  52.         JR      NZ,WHAT?
  53.         LD      DE,TYPE4
  54.         LD      (TYPE),DE
  55.         LD      HL,DATA4
  56. PUT_DAT:
  57.         LD      DE,SCRATCH      ;Address of Format type scratch
  58.         LD      BC,0005H        ;No. of bytes of data
  59.         LDIR
  60.         JR      DRIVE
  61. WHAT?:
  62.         CP      3               ;^C
  63.         JP      Z,EXIT
  64.         CP      1BH             ;ESC
  65.         JP      Z,EXIT
  66.         JR      L0106           ;Not a known key try again
  67. DRIVE:
  68.         LD      DE,(TYPE)       ;Put Format type to screen
  69.         CALL    MESS_OUT
  70.         LD      DE,DRV_MESS
  71.         CALL    MESS_OUT        ;'ENTER DRIVE' message to screen
  72.         CALL    KEYS
  73.         CP      1BH
  74.         JP      Z,EXIT
  75.         CP      3
  76.         JP      Z,EXIT
  77.         RES     5,A
  78.         CP      'A'
  79.         JR      C,DRIVE
  80.         CP      'E'
  81.         JR      NC,DRIVE
  82.         PUSH    AF
  83.         LD      C,A
  84.         CALL    L0210           ;Put Drive letter to screen
  85.         POP     AF
  86.         SUB     'A'
  87.         AND     3
  88.         OR      8
  89.         LD      (SCRATCH + 9),A ;Store Drive number
  90.         LD      A,(SCRATCH)     ;Get no. of sides to format
  91.         LD      (SCRATCH + 8),A
  92. BEGIN:
  93.         LD      A,(SCRATCH + 2) ;Get total no.of trks. 
  94.         LD      (TRK + 1),A
  95.  
  96.         DI                      ;Start of Formating
  97.         XOR     A
  98.         OUT     (9H),A          ;Turn off 'bee colour board
  99.         CALL    L01C8           ;Get status of FDC
  100.         CALL    L01CF
  101.         XOR     A
  102.         LD      (SCRATCH + 7),A
  103. L0171:  
  104.         LD      A,0
  105.         LD      (L0289 - 1),A
  106.         LD      A,(SCRATCH + 8) ;Get side no.
  107.         CP      '1'
  108.         JR      Z,L0183
  109.         CALL    L01F2
  110.         CALL    NZ,L01B4
  111. L0183:  
  112.         LD      A,1
  113.         LD      (L0289 - 1),A
  114.         LD      A,(SCRATCH + 8)
  115.         CP      '0'
  116.         JR      Z,L0195
  117.         CALL    L01F2
  118.         CALL    NZ,L01B4
  119. L0195:  
  120.         LD      A,(SCRATCH + 7)
  121.         INC     A
  122.         LD      (SCRATCH + 7),A
  123. TRK:    CP      28H             ;Is track last track (28H for 40trk)
  124.         JR      Z,FINISH        ;Yes, then Finish
  125.         LD      A,5BH
  126.         CALL    L035F
  127.         JR      L0171
  128. FINISH:
  129.         EI
  130.         LD      DE,COMP_MESS    ;'FORMATTING COMPLETED'
  131.         CALL    MESS_OUT        ;message to screen
  132.         CALL    KEYS
  133.         JP      START
  134. L01B4:                          ;'FORMATTING ERROR' message
  135.         LD      DE,ERR_MESS     ;to screen
  136.         JP      MESS_OUT
  137. L01BA:  
  138.         POP     HL
  139.         LD      DE,PROT_MESS    ;'Write Protected..'message
  140.         CALL    MESS_OUT        ;to screen
  141.         CALL    KEYS            ;
  142.         EI
  143.         JP      START           ;Begin again
  144. L01C8:  
  145.         LD      A,0D0H
  146.         OUT     (44H),A
  147.         JP      L035F
  148. L01CF:  
  149.         LD      A,(SCRATCH + 9)
  150.         OUT     (48H),A
  151. L01D4:  
  152.         IN      A,(44H)
  153.         BIT     6,A             ;Check if disk is Write Protected
  154.         JP      NZ,L01BA
  155.         AND     4
  156.         JR      NZ,L01E6        ;Step to track 00
  157.         LD      A,6BH
  158.         CALL    L035F
  159.         JR      L01D4
  160. L01E6:  
  161.         XOR     A               ;Move head to track 00
  162.         OUT     (45H),A
  163.         LD      HL,9C40H
  164. L01EC:                          ;Delay until head reaches trk 0
  165.         DEC     HL
  166.         LD      A,H
  167.         OR      L
  168.         JR      NZ,L01EC
  169.         RET
  170. L01F2:  
  171.         XOR     A
  172.         LD      B,A
  173.         LD      A,(SCRATCH + 7) ;Get current trk no.
  174.         CP      B               ;Is it track '0'? 
  175.         JR      C,L020C         ;
  176.         LD      B,A
  177.         LD      A,(SCRATCH+1)   ;Get end trk no.
  178.         CP      B               ;Are they the same?
  179.         JR      C,L020C
  180.         LD      A,0FFH
  181.         LD      (SCRATCH + 6),A
  182. L020C:  
  183.         JP      L021D
  184.         NOP
  185. L0210:  
  186.         PUSH    HL
  187.         PUSH    BC
  188.         PUSH    AF
  189.         LD      E,C
  190.         LD      C,2
  191.         CALL    L0005
  192.         POP     AF
  193.         POP     BC
  194.         POP     HL
  195.         RET
  196. L021D:  
  197.         CALL    L0383           ;'FORMATTING TRACK' message to screen
  198.         LD      A,'0'
  199.         CALL    L0AA5
  200.         JP      Z,L036F
  201.         LD      A,(SCRATCH + 6)
  202.         OR      A
  203.         RET     Z
  204.         LD      A,(SCRATCH + 7)
  205.         LD      L,A
  206.         LD      A,(L0289 - 1)   ;Get side no.
  207.         RLCA
  208.         RLCA
  209.         AND     4
  210.         LD      B,A
  211.         LD      A,(SCRATCH + 9) ;Get drive no.
  212.         ADD     A,B
  213.         OUT     (48H),A         ;Set drive, side, density latch
  214.         XOR     A
  215.         OUT     (9H),A
  216.         LD      C,48H           ;Status port no.
  217. SEC1:   LD      DE,(SCRATCH + 3);Get sector no. & sectors/trk
  218.         LD      A,0F4H
  219.         OUT     (44H),A         ;Set command register
  220.         CALL    L0359
  221.         LD      B,20H           ;Start of format data
  222.         LD      A,4EH           ;for 512 Bytes/sector
  223. L0253:  
  224.         IN      H,(C)           ;Check DRQ of the FDC
  225.         JP      P,L0253         ;Not ready for data check again
  226.         OUT     (47H),A         ;Ready, write data
  227.         DJNZ    L0253           ;
  228. L025C:  
  229.         LD      B,8
  230.         LD      A,0
  231. L0260:  
  232.         IN      H,(C)
  233.         JP      P,L0260
  234.         OUT     (47H),A
  235.         DJNZ    L0260
  236.         LD      B,3
  237.         LD      A,0F5H
  238. L026D:  
  239.         IN      H,(C)
  240.         JP      P,L026D
  241.         OUT     (47H),A
  242.         DJNZ    L026D
  243.         LD      A,0FEH
  244. L0278:  
  245.         IN      H,(C)
  246.         JP      P,L0278
  247.         OUT     (47H),A
  248.         LD      A,L             ;Track no.
  249. L0280:  
  250.         IN      H,(C)
  251.         JP      P,L0280
  252.         OUT     (47H),A
  253.         LD      A,0             ;Side no.
  254. L0289:  
  255.         IN      H,(C)
  256.         JP      P,L0289
  257.         OUT     (47H),A
  258.         LD      A,D             ;Sector no.
  259. L0291:  
  260.         IN      H,(C)
  261.         JP      P,L0291
  262.         OUT     (47H),A
  263.         INC     D
  264.         LD      A,2
  265. L029B:  
  266.         IN      H,(C)
  267.         JP      P,L029B
  268.         OUT     (47H),A
  269. L02A2:  
  270.         NOP
  271.         LD      A,0F7H
  272. L02A5:  
  273.         IN      H,(C)
  274.         JP      P,L02A5
  275.         OUT     (47H),A
  276.         LD      B,16H
  277.         LD      A,4EH
  278. L02B0:  
  279.         IN      H,(C)
  280.         JP      P,L02B0
  281.         OUT     (47H),A
  282.         DJNZ    L02B0
  283.         LD      B,0CH
  284.         LD      A,0
  285. L02BD:  
  286.         IN      H,(C)
  287.         JP      P,L02BD
  288.         OUT     (47H),A
  289.         DJNZ    L02BD
  290.         LD      B,3
  291.         LD      A,0F5H
  292. L02CA:  
  293.         IN      H,(C)
  294.         JP      P,L02CA
  295.         OUT     (47H),A
  296.         DJNZ    L02CA
  297.         LD      A,0FBH
  298. L02D5:  
  299.         IN      H,(C)
  300.         JP      P,L02D5
  301.         OUT     (47H),A
  302.         LD      B,0
  303.         LD      A,0E5H
  304. L02E0:  
  305.         IN      H,(C)
  306.         JP      P,L02E0
  307.         OUT     (47H),A
  308.         DJNZ    L02E0
  309. L02E9:  
  310.         IN      H,(C)
  311.         JP      P,L02E9
  312.         OUT     (47H),A
  313.         DJNZ    L02E9
  314.         LD      A,0F7H
  315. L02F4:  
  316.         IN      H,(C)
  317.         JP      P,L02F4
  318.         OUT     (47H),A
  319.         LD      B,1FH
  320.         LD      A,4EH
  321. L02FF:  
  322.         IN      H,(C)
  323.         JP      P,L02FF
  324.         OUT     (47H),A
  325.         DJNZ    L02FF
  326.         DEC     E
  327.         JP      NZ,L025C        ;Format next sector
  328.         LD      B,0
  329.         LD      A,4EH
  330. L0310:  
  331.         IN      H,(C)
  332.         JP      P,L0310
  333.         OUT     (47H),A
  334.         DJNZ    L0310
  335. L0319:  
  336.         IN      H,(C)
  337.         JP      P,L0319
  338.         OUT     (47H),A
  339.         DJNZ    L0319
  340. L0322:  
  341.         IN      A,(44H)
  342.         RRCA
  343.         JP      C,L0322
  344.         LD      A,(L02A2)
  345.         SUB     14H
  346.         RET     Z
  347.         LD      A,(SCRATCH + 4)
  348.         OUT     (46H),A
  349.         LD      A,98H
  350.         OUT     (44H),A
  351.         CALL    L0359
  352. L0339:  
  353.         IN      A,(44H)
  354.         BIT     0,A
  355.         JP      Z,L0356
  356. L0340:  
  357.         IN      A,(46H)
  358.         LD      C,A
  359.         LD      B,0AH
  360. L0345:  
  361.         IN      A,(46H)
  362.         CP      C
  363.         JR      NZ,L0340
  364.         DJNZ    L0345
  365.         CP      0BH
  366.         JP      C,L0339
  367.         CALL    L01C8
  368.         LD      A,0
  369. L0356:  
  370.         AND     18H
  371.         RET
  372. L0359:  
  373.         LD      A,12H
  374. L035B:  
  375.         DEC     A
  376.         JR      NZ,L035B
  377.         RET
  378. L035F:  
  379.         OUT     (44H),A
  380.         CALL    L0359
  381. L0364:  
  382.         IN      A,(44H)         ;test if ready
  383.         OR      A
  384.         JP      M,L0364
  385.         AND     1
  386.         JR      NZ,L0364
  387.         RET
  388. L036F:  
  389.         LD      DE,ABORT_MESS   ;'Formating Aborted' message
  390.         CALL    MESS_OUT                ;To screen
  391.         CALL    KEYS
  392.         CP      1BH
  393.         JR      NZ,L037F
  394.         CALL    KEYS
  395. L037F:  
  396.         EI
  397.         JP      START           ;Restart
  398. L0383:  
  399.         LD      DE,TRK_MESS
  400. L0398:  
  401.         CALL    MESS_OUT
  402.         LD      A,(SCRATCH + 7)
  403.         LD      HL,L0000
  404.         CALL    CONVERT
  405.         LD      DE,SIDE_MESS
  406.         CALL    MESS_OUT
  407.         LD      A,(L0289 - 1)
  408.         ADD     A,'0'
  409.         LD      C,2
  410.         LD      E,A
  411.         CALL    L0005
  412.         LD      DE,L087A
  413.         JP      MESS_OUT
  414. SIGN_ON:                ;Sign on message
  415.         DB      1EH,1BH,59H,0DH,0AH
  416.         DB      '** ',1BH,') Amstrad --- Disk Formatter. ',1BH
  417.         DB      '( **   For All AMSTRAD Disks.',0DH,0AH,0AH
  418.         DB      'This program will format Amstrad disks on the Microbee.',0DH,0AH
  419.         DB      'To Format the Disk, enter the format type (1-4)'
  420.         DB      ' then enter the drive (A-D)',0DH,0AH,0DH,0AH
  421.         DB      '==================================================='
  422.         DB      '===========================',0DH,0AH
  423.         DB      'To abort at any point, HOLD DOWN the ESCAPE '
  424.         DB      'key until the abort message shows.',0DH,0AH
  425.         DB      '==================================================='
  426.         DB      '===========================',0DH,0AH,0DH,0AH
  427.         DB      09H,09H,'  (1)',09H,'Amstrad System SS - Side 0 (169k)',0DH,0AH,0AH
  428.         DB      09H,09H,'  (2)',09H,'Amstrad System SS - Side 1 (169k)',0DH,0AH,0AH
  429.         DB      09H,09H,'  (3)',09H,'Amstrad  Data  SS          (178k)',0DH,0AH,0AH
  430.         DB      09H,09H,'  (4)',09H,'Amstrad  Data  DS - 5.25"  (356k)',0DH,0AH,0AH,0AH
  431.         DB      '                    ENTER FORMAT TYPE: (1-4) - $'
  432. TYPE:
  433.         NOP
  434.         NOP
  435. TYPE1:  
  436.         DB      1AH,09H,09H,'Disk to be ',1BH,') Amstrad System SS'
  437.         DB      ' - Side 0 ',1BH,'( format.$'
  438. TYPE2:
  439.         DB      1AH,09H,09H,'Disk to be ',1BH,') Amstrad System SS'
  440.         DB      ' - Side 1 ',1BH,'( format.$'   
  441. TYPE3:
  442.         DB      1AH,09H,09H,'Disk to be ',1BH,') Amstrad Data SS'
  443.         DB      ' ',1BH,'( format.$'
  444. TYPE4:
  445.         DB      1AH,09H,09H,'Disk to be ',1BH,') Amstrad Data DS'
  446.         DB      ' (5.25") ',1BH,'( format.$'
  447. DRV_MESS:
  448.         DB      0DH,0AH,0AH
  449.         DB      '================================================='
  450.         DB      '=============================',0DH,0AH
  451.         DB      'To abort at any point, HOLD DOWN the ESCAPE '
  452.         DB      'key until the abort message shows.',0DH,0AH
  453.         DB      '================================================='
  454.         DB      '=============================',0DH,0AH,0AH,0AH,0AH
  455.         DB      'INSERT DISK to be FORMATTED then ENTER NAME OF DRIVE'
  456.         DB      ': (A-D) - $'
  457. ERR_MESS:
  458.         DB      0DH,0AH,'   ** FORMATTING ERROR DETECTED (in '
  459.         DB      'the above track) **',0DH,0AH,0AH,'$'
  460. ABORT_MESS:     
  461.         DB      0DH,0AH,0AH,'       ** FORMAT HAS BEEN ABORTED '
  462.         DB      'BY THE ESC KEY **',0DH,0AH,'   (The track '
  463.         DB      'listed above has not yet been formatted)',0DH,0AH
  464.         DB      0AH,09H
  465.         DB      '       Press any key to continue :- $'
  466. PROT_MESS:      
  467.         DB      0DH,0AH,0AH,'       ** FORMAT ERROR: DISK '
  468.         DB      'IS WRITE-PROTECTED **',0DH,0AH,0AH,09H
  469.         DB      '       Press any key to continue :- $'
  470. COMP_MESS:      
  471.         DB      0DH,0AH,0AH,09H,09H
  472.         DB      '  ** FORMAT COMPLETED **',0DH,0AH,0AH,09H
  473.         DB      '       Press any key to continue :- $'
  474. TRK_MESS:       
  475.         DB      0DH,'               Formatting track '
  476.         DB      1BH,'Y$'
  477. SIDE_MESS:      
  478.         DB      ', side $'
  479. L087A:  
  480.         DB      '.  $',0DH,'             Y-Formatting track '
  481.         DB      1BH,'Y$'
  482. KEYS:                           ;Get key
  483.         PUSH    BC
  484.         PUSH    DE
  485.         PUSH    HL
  486.         LD      HL,(L0001)      ;Warm start entry address
  487.         LD      DE,L0006        ;BDOS service req. entry address
  488.         ADD     HL,DE
  489.         LD      (KEY + 1),HL
  490. KEY:    CALL    0000
  491.         AND     7FH
  492.         POP     HL
  493.         POP     DE
  494.         POP     BC
  495.         RET
  496. CONVERT:                                ;Converts hex track no. to ASCII
  497.         PUSH    HL
  498.         PUSH    AF
  499.         LD      A,H
  500.         OR      A
  501.         JP      NZ,L0A58
  502.         LD      HL,TRK_NUM
  503. L0A58:  
  504.         POP     AF
  505.         PUSH    AF
  506.         RRCA
  507.         RRCA
  508.         RRCA
  509.         RRCA
  510.         AND     0FH
  511.         ADD     A,'0'
  512.         CP      ':'
  513.         JP      C,L0A69
  514.         ADD     A,7
  515. L0A69:  
  516.         LD      (HL),A
  517.         INC     HL
  518.         POP     AF
  519.         AND     0FH
  520.         ADD     A,'0'
  521.         CP      ':'
  522.         JP      C,L0A77
  523.         ADD     A,7
  524. L0A77:  
  525.         LD      (HL),A
  526.         POP     HL
  527.         XOR     A
  528.         CP      H
  529.         RET     NZ
  530.         PUSH    BC
  531.         PUSH    DE
  532.         LD      C,9
  533.         LD      DE,TRK_NUM
  534.         CALL    L0005
  535.         POP     DE
  536.         POP     BC
  537.         RET
  538. TRK_NUM:        
  539.         NOP
  540.         NOP
  541.         DB      '$'
  542. MESS_OUT:       
  543.         PUSH    AF
  544.         PUSH    BC
  545.         PUSH    DE
  546.         PUSH    HL
  547.         LD      C,9
  548.         CALL    L0005
  549.         POP     HL
  550.         POP     DE
  551.         POP     BC
  552.         POP     AF
  553.         RET
  554. EXIT:   
  555.         LD      DE,L0AF0        ;Clear screen 
  556.         CALL    MESS_OUT
  557.         JP      L0000           ;and exit.
  558. L0AA5:  
  559.         PUSH    BC
  560.         LD      B,A
  561.         LD      C,A
  562.         LD      A,12H
  563.         OUT     (0CH),A
  564.         LD      A,B
  565.         RRCA
  566.         RRCA
  567.         RRCA
  568.         RRCA
  569.         LD      B,A
  570.         OUT     (0DH),A
  571.         LD      A,13H
  572.         OUT     (0CH),A
  573.         LD      A,B
  574.         OUT     (0DH),A
  575.         LD      A,1
  576.         OUT     (0BH),A
  577.         LD      A,10H
  578.         OUT     (0CH),A
  579.         IN      A,(0DH)
  580.         LD      A,1FH
  581.         OUT     (0CH),A
  582.         OUT     (0DH),A
  583. L0ACB:  
  584.         IN      A,(0CH)
  585.         BIT     7,A
  586.         JR      Z,L0ACB
  587.         IN      A,(0CH)
  588.         CPL
  589.         LD      B,A
  590.         XOR     A
  591.         OUT     (0BH),A
  592.         LD      A,10H
  593.         OUT     (0CH),A
  594.         IN      A,(0DH)
  595.         BIT     6,B
  596.         LD      A,C
  597.         POP     BC
  598.         RET
  599.         NOP
  600.         NOP
  601.         NOP
  602. SCRATCH:
  603.         NOP                     ;Sides to format
  604.         NOP                     ;No. of tracks
  605.         NOP                     ;Total No. of tracks
  606.         NOP                     ;Sectors per track
  607.         NOP                     ;Skew
  608.         NOP                     ;Start trk no.
  609.         NOP                     ;Current trk no.
  610.         NOP                     ;Current side no.
  611.         NOP                     ;Drive no.
  612.         NOP
  613.         NOP
  614.         NOP
  615.         NOP
  616.         NOP
  617.         NOP
  618. L0AF0:  
  619.         DB      1AH,0DH,0AH,'$' ;Clear screen codes 
  620.         NOP
  621.         NOP
  622. DATA1:                          ;Amstrad System SS - Side 0
  623.         DB      '0'             ;Format only side 0
  624.         DB      27H             ;
  625.         DB      28H             ;40 Tracks
  626.         DB      09H             ;9 Sectors/track
  627.         DB      41H             ;Start skew at 65
  628.         NOP
  629.         NOP
  630. DATA2:                          ;Amstrad System SS - Side 1
  631.         DB      '1'             ;Format only side 1
  632.         DB      27H             ;Last track no.
  633.         DB      28H             ;40 trks.
  634.         DB      09H             ;9 Sectors/trk.
  635.         DB      41H             ;Start skew at 65
  636.         NOP
  637.         NOP
  638. DATA3:                          ;Amstrad Data SS - Side 0
  639.         DB      '0'             ;Format only side 0
  640.         DB      27H             ;
  641.         DB      28H             ;40 Trks.
  642.         DB      09              ;9 Sectors/trk.
  643.         DB      0C1H            ;Start skew at C1
  644.         NOP
  645.         NOP
  646. DATA4:                          ;Amstrad Data DS
  647.         DB      'B'             ;Both sides
  648.         DB      27H             ;
  649.         DB      28H             ;40 Tracks
  650.         DB      09H             ;9 Sectors/Trk.
  651.         DB      81H             ;Start skew at 129
  652.         NOP
  653.         NOP
  654.  
  655.         END
  656.  
  657.  
  658.              ;9 Sectors/Trk.
  659.         DB