home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol026 / sysgen.z80 < prev    next >
Text File  |  1984-04-29  |  3KB  |  139 lines

  1. ; THIS IS A PROGRAM TO SYSGEN A CP/M SYSTEM ON SD OR DD DISKS UESING
  2. ; MYDDBIOS.Z80 BIOS
  3. ;        JOHN J MONAHAN        VERSION    0.0    4/10/81
  4. ;
  5. PROM:    EQU    0F800H
  6. ;
  7. ;THIS SYSTEM WILL BE SIMILAR TO THE ORIGINAL
  8. ;THE USER WILL BE ASKED IF HE WANTS TO COPY THE FIRST TWO TRACKS
  9. ;FROM DISK A: OR FROM WHAT IS IN MEMORY ALREADY.
  10. ;THEN HE WILL BE ASKED IF HE WANTS IT TO GO TO DISK B: OR STAY IN MEMORY
  11. ;
  12. ;SET DMA TO 900H
  13. ;SET TO DRIVE A FOR DENSITY
  14. ;SET TO TRACK 0, SECTOR 1
  15. ;READ 2 TRACKS FROM DISK 1    (USEING MYDDBIOS.Z80 ROM)
  16. ;ASK USER IF HE WANTS TO COPY TO DISK B OR TO LEAVE
  17. ;IF LEAVE END
  18. ;OTHERWISE
  19. ;SET DMA BACK TO 900H
  20. ;SET TO DRIVE B FOR CORRECT DENSITY
  21. ;SET TO TRACK 0, SECTOR 1
  22. ;WRITE 2 TRACKS TO DISK 2
  23. ;
  24. ;
  25. ;EQUATE TABLE FOR BDOS
  26. CONSTAT:EQU    11
  27. CONIN:    EQU    1
  28. CONOUT:    EQU    2
  29. PRINTBUF:EQU    9
  30. BDOS:    EQU    5
  31. ;
  32.     ORG    100H
  33. START:    LD    HL,0
  34.     ADD    HL,SP
  35.     LD    (OLDSTACK),HL
  36.     LD    SP,NEWSTACK
  37. SAVEOD:    LD    A,(42H)
  38.     LD    (OLDDRIVE),A ;SAVE CURRENT DRIVE TYPE
  39.     LD    A,(53H)
  40.     LD    (OLDCOUNT),A ;SAVE CURRENT SECTORS/TRACK
  41.     
  42. QUESTION:LD    DE,MSG11     ;WANT MEMORY OR DISKTRACK
  43.     LD    C,PRINTBUF
  44.     CALL    BDOS
  45.     LD    C,CONIN         ;GET THE ANSWER FROM KEYBOARD
  46.     CALL    BDOS
  47.     AND    5FH         ;CHANGE TO UPPER CASE ONLY
  48.     CP    'M'
  49.     JP    Z,QUEST2
  50.     CP    'D'
  51.     JP    Z,DISKA
  52.     CP    'S'
  53.     JP    Z,DISKC
  54.     JP    EXIT
  55. ;
  56. DISKA:    LD    A,40H         ;SET UNIT BYTE TO DRIVE A IN DOUBLE DENSITY
  57.     LD    (42H),A
  58.     LD    A,32H         ;SET TO 50 SECTORS/TRACK
  59.     LD    (53H),A
  60.     JP    DISKLOAD
  61. DISKC:    LD    A,0H         ;SET UNIT BYTE TO DRIVE A IN SINGLE DENSITY
  62.     LD    (42H),A
  63.     LD    A,1AH         ;SET TO 26 SECTORS/TRACK
  64.     LD    (53H),A
  65. ;
  66. DISKLOAD:
  67. SETDMA:    LD    HL,900H
  68.     LD    (40H),HL
  69. SETSEC:    LD    A,1
  70.     LD    (43H),A
  71. SETTRK:    LD    A,0
  72.     LD    (44H),A
  73. SECN:    LD    A,52         ;NUMBER OF SECTORS TO READ
  74.     LD    (45H),A
  75. READ:    CALL    PROM+39H     ;NOTE DIFFERENCE FROM STANDARD SD ROM--------
  76.     JP    NZ,ERROR     ;IF NON ZERO THEN PROBLEM
  77. ;
  78. ;GETS HERE WITH MEMORY AT 900H CONTAINING THE SYSTEM
  79. ;
  80. QUEST2:    LD    DE,MSG12     ;DO YOU WANT TO LEAVE OR TO WRITE TO B
  81.     LD    C,PRINTBUF
  82.     CALL    BDOS
  83.     LD    C,CONIN
  84.     CALL    BDOS
  85.     AND    5FH
  86.     CP    'D'
  87.     JP    Z,WRITB
  88.     CP    'S'
  89.     JP    Z,WRITD
  90.     JP    EXIT
  91. ;NOW WRITE TO THE DISK SELECTED
  92. WRITB:    LD    A,41H         ;FOR B: DOUBLE DENSITY
  93.     LD    (42H),A
  94.     LD    A,32H         ;50 SECTORS/TRACK
  95.     LD    (53H),A
  96.     JP    SETD
  97. WRITD:    LD    A,1H         ;FOR D:SINGLE DENSITY
  98.     LD    (42H),A
  99.     LD    A,1AH         ;26 SECTORS/TRACK
  100.     LD    (53H),A 
  101. SETD:    LD    HL,900H
  102.     LD    (40H),HL
  103. SETS:    LD    A,1
  104.     LD    (43H),A
  105. SETT:    LD    A,0
  106.     LD    (44H),A
  107. SN:    LD    A,52         ;NUMBER OF SECTORS TO WRITE
  108.     LD    (45H),A
  109. WRITE:    CALL    PROM+36H     ;NOTE DIFFERENCE FROM SD PROM-------
  110.     JP    NZ,ERROR
  111.     JP    QUEST2
  112. ;
  113. EXIT:    LD    A,(OLDDRIVE)    
  114.     LD    (42H),A
  115.     LD    A,(OLDCOUNT)
  116.     LD    (53H),A
  117.     LD    HL,(OLDSTACK)
  118.     LD    SP,HL
  119.     JP    0H
  120. ;
  121. ERROR:    LD    DE,MSG10
  122.     LD    C,PRINTBUF
  123.     CALL    BDOS
  124.     JP    0H
  125. ;
  126.     DEFS    40         ;SPACE FOR NEWSTACK
  127. NEWSTACK:DEFS    2
  128. OLDSTACK:DEFS    2
  129. OLDDRIVE:DEFS    1
  130. OLDCOUNT:DEFS    1
  131. MSG10:    DEFB    0AH,0DH,'Error in disk data',0DH,0AH,'$'
  132. MSG11:    DEFB    0AH,0AH,0DH,'If system is from a DOUBLE density disk enter  D'
  133.     DEFB    0AH,0DH,'If system is from a SINGLE density disk enter  S'
  134.     DEFB    0AH,0DH,'If system is already in RAM @ 900H enter   M'
  135.     DEFB    0AH,0DH,'Enter CR to quit  $'
  136. MSG12:    DEFB    0AH,0AH,0DH,'Enter D or S for density of destination drive'   
  137.     DEFB    0AH,0DH,'Enter CR to quit $'
  138. ;END
  139.