home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / packet / rli120.ark / MAKESYS.MAC < prev    next >
Text File  |  1986-08-12  |  5KB  |  347 lines

  1. ; MAKESYS.MAC - 3/9/86 - Create Xerox system disk.
  2.  
  3.     .z80
  4.     maclib    TNC.LIB
  5.  
  6.     entry    makesy
  7.  
  8.     bdosdef
  9.     asciictl
  10.  
  11. true    equ    0ffffh
  12. false    equ    not true
  13.  
  14.     maclib    BIOSCPM.INC    ; CP/M addresses
  15.     maclib    BIOSDSKE.INC    ; Disk equates
  16.  
  17. fcblen    equ    33    ; Length of file control block
  18. ldrec    equ    3    ; Length of load record
  19.  
  20.     dseg
  21. wb:    jp    $-$
  22. const:    jp    $-$
  23. conin:    jp    $-$
  24. conot:    jp    $-$
  25.     jp    $-$
  26.     jp    $-$
  27.     jp    $-$
  28. home:    jp    $-$
  29.     jp    $-$
  30. settrk:    jp    $-$
  31. setsec:    jp    $-$
  32. setadr:    jp    $-$
  33.     jp    $-$
  34. wrtsec:    jp    $-$
  35.  
  36.     cseg
  37. makesy:    ld    sp,stack
  38.  
  39. ; Move the BIOS jumps down here.
  40.  
  41.     ld    hl,(1)
  42.     ld    de,wb
  43.     ld    bc,42
  44.     ldir
  45.  
  46. ; Get current drive.
  47.  
  48.     dodosv    ckcur
  49.     ld    (cdrvn),a
  50.  
  51. ; Find out which drive to put the boot onto.
  52.  
  53.     ld    hl,5ch
  54.     ld    a,(hl)
  55.     dec    a
  56.     jp    p,gotdrv
  57.     ld    a,(cdrvn)
  58. gotdrv:    ld    (bdrvn),a
  59.     add    a,'A'
  60.     ld    (bdrvnam),a
  61.  
  62. ; Find out if it has boot tracks.
  63.  
  64.     dodosv    seldsk,bdrvn
  65.     dodosv    getdpb
  66.     push    hl
  67.     dodosv    seldsk,cdrvn
  68.     pop    hl
  69.     ld    a,l
  70.     or    h
  71.     jr    z,bserr
  72.     ld    de,13
  73.     add    hl,de
  74.     ld    e,(hl)
  75.     inc    hl
  76.     ld    d,(hl)
  77.     ld    (restrk),de
  78.     ld    a,d
  79.     or    e
  80.     jr    z,nterr
  81.  
  82. ; Put the boot tracks on the disk.
  83.  
  84.     call    putb
  85.     jr    nz,exit
  86. done:    dodosa    bufout,dnmsg
  87.     jr    exit
  88. bserr:    dodosa    bufout,bsmsg
  89.     jr    exit
  90. nterr:    dodosa    bufout,ntmsg
  91.     jr    exit
  92. exit:    jp    0
  93.  
  94. ; Put boot tracks on disk
  95.  
  96. putb:    dodosa    bufout,pbmsg
  97.     ld    hl,cfiles
  98.     ld    (rfile),hl
  99.     ld    hl,wloc
  100.     ld    (wfile),hl
  101. putba:    ld    hl,(wfile)
  102.     ld    a,(hl)
  103.     or    a
  104.     ret    z
  105.     inc    hl
  106.     ld    a,(hl)
  107.     ld    (track),a
  108.     inc    hl
  109.     ld    a,(hl)
  110.     ld    (sector),a
  111.  
  112. ; Go get the file into memory.
  113.  
  114.     ld    hl,(rfile)    ; Point to fcb
  115.     call    rdfile
  116.     ret    nz
  117.     ld    a,(nrec)
  118.     ld    hl,(wfile)
  119.     ld    (hl),a
  120.     call    wrmem        ; Write it to disk.
  121.     ret    nz
  122.     ld    hl,(wfile)
  123.     ld    a,(hl)
  124.     ld    de,ldrec
  125.     add    hl,de
  126.     ld    (wfile),hl
  127.     ld    hl,secmsg+1
  128.     call    prhex
  129.     dodosa    bufout,secmsg
  130.     ld    hl,(rfile)
  131.     ld    de,fcblen
  132.     add    hl,de
  133.     ld    (rfile),hl
  134.     jr    putba
  135.  
  136. ; Have the file read into memory, now write it to the disk.
  137.  
  138. wrmem:    dodosv    seldsk,bdrvn
  139.     ld    a,(track)
  140.     ld    (wtrk),a
  141.     ld    a,(sector)
  142.     ld    (wsec),a
  143.     ld    hl,($memry)
  144.     ld    (dmaadr),hl
  145.     ld    a,(nrec)
  146.     inc    a
  147.     or    a        ; Clear carry
  148.     rra
  149.     ld    (wtrec),a
  150.     call    wrmemd
  151.     jr    nz,wrmemc
  152.     ld    a,(track)
  153.     ld    b,a
  154.     ld    a,(sector)
  155.     inc    a
  156.     cp    spt+1
  157.     jr    c,wrmema
  158.     inc    b
  159.     ld    a,1
  160. wrmema:    ld    (wsec),a
  161.     ld    a,b
  162.     ld    (wtrk),a
  163.     ld    hl,($memry)
  164.     ld    de,128
  165.     add    hl,de
  166.     ld    (dmaadr),hl
  167.     ld    a,(nrec)
  168.     or    a        ; Clear carry
  169.     rra
  170.     or    a        ; Set flags
  171.     jr    z,wrmemb    ; Was only one
  172.     ld    (wtrec),a
  173.     call    wrmemd
  174.     jr    nz,wrmemc
  175. wrmemb:    dodosv    seldsk,cdrvn
  176.     retz
  177.  
  178. wrmemc:    dodosv    seldsk,cdrvn
  179.     dodosa    bufout,wtmsg
  180.     retnz
  181.  
  182. wrmemd:    ld    a,(wtrk)
  183.     ld    c,a
  184.     ld    a,(restrk)
  185.     cp    c
  186.     jr    nz,wrmeme
  187.     dodosa    bufout,tbmsg
  188.     retnz
  189. wrmeme:    call    settrk
  190.     ld    a,(wsec)
  191.     ld    c,a
  192.     call    setsec
  193.     ld    bc,(dmaadr)
  194.     call    setadr
  195.     call    wrtsec
  196.     ret    nz
  197.     ld    hl,wtrec
  198.     dec    (hl)
  199.     ret    z
  200.     ld    hl,(dmaadr)
  201.     ld    bc,256
  202.     add    hl,bc
  203.     ld    (dmaadr),hl
  204.     ld    a,(wsec)
  205.     inc    a
  206.     inc    a
  207.     ld    (wsec),a
  208.     sub    spt+1
  209.     jr    c,wrmemd
  210.     inc    a
  211.     ld    (wsec),a
  212.     ld    hl,wtrk
  213.     inc    (hl)
  214.     jr    wrmemd
  215.     dseg
  216. wtrk:    ds    1
  217. wsec:    ds    1
  218. wtrec:    ds    1
  219.     cseg
  220.  
  221. ; Read a file in.
  222.  
  223. rdfile:    call    openf
  224.     ret    nz
  225.     xor    a
  226.     ld    (nrec),a
  227.     ld    hl,($memry)
  228.     ld    (bufptr),hl
  229. rdfla:    ld    de,(bufptr)
  230.     dodosa    setdma
  231.     ld    de,(rfile)
  232.     dodosa    read
  233.     or    a
  234.     jr    z,rdflb
  235.     retz
  236. rdflb:    ld    hl,(bufptr)
  237.     ld    de,128
  238.     add    hl,de
  239.     ld    (bufptr),hl
  240.     ld    hl,nrec
  241.     inc    (hl)
  242.     jr    rdfla
  243.  
  244. ; Open a file.
  245.  
  246. openf:    ld    hl,(rfile)
  247.     call    prfile
  248.     ex    de,hl
  249.     dodosa    open
  250.     inc    a
  251.     jr    z,openfa
  252.     retz
  253. openfa:    dodosa    bufout,nfmsg
  254.     retnz
  255.  
  256. ; Print file name.
  257.  
  258. prfile:    push    hl
  259.     push    de
  260.     push    bc
  261.     push    af
  262.     ld    a,(cdrvn)
  263.     add    a,'A'
  264.     ld    hl,drvmsg+2
  265.     ld    (hl),a
  266.     dodosa    bufout,drvmsg
  267.     ld    hl,(rfile)
  268.     ld    de,12
  269.     add    hl,de
  270.     ld    a,(hl)
  271.     push    af    ; Save whatever was after file name.
  272.     push    hl
  273.     ld    (hl),'$'
  274.     ld    de,(rfile)
  275.     inc    hl
  276.     dodosa    bufout
  277.     pop    hl
  278.     pop    af    ; Restore whatever was after file name.
  279.     ld    (hl),a
  280.     pop    af
  281.     pop    bc
  282.     pop    de
  283.     pop    hl
  284.     ret
  285.  
  286. ; Translate (A) to hex and store at (HL).
  287.  
  288. prhex:    push    af
  289.     rrca
  290.     rrca
  291.     rrca
  292.     rrca
  293.     call    prhexa
  294.     pop    af
  295. prhexa:    and    0fh
  296.     add    a,90h
  297.     daa
  298.     adc    a,40h
  299.     daa
  300.     ld    (hl),a
  301.     inc    hl
  302.     ret
  303.  
  304. ; Files that make up the Xerox CP/M boot tracks.
  305.  
  306.     dseg
  307. cfiles:    db    0,'XCPM    COM'
  308.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  309.     db    0,'SBIOS   COM'
  310.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  311.     db    0,'BOOT    COM'
  312.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  313.  
  314. ; Where they go on the Xerox boot tracks.
  315.  
  316. wloc:    db    1,cpmtrk,cpmsec
  317.     db    1,biostrk,biossec
  318.     db    1,boottrk,bootsec
  319.     db    0,0,0
  320.  
  321. dnmsg:    db    cr,lf,lf,'New system now on '
  322. bdrvnam:    db    ' $'    ; Must follow dnmsg.
  323. nfmsg:    db    ' not found.$'
  324. secmsg:    db    '   H Sectors written.$'
  325. tbmsg:    db    cr,lf,'Bootstrap would not fit on reserved tracks.$'
  326. wtmsg:    db    ' Error writing.$'
  327. ntmsg:    db    cr,lf,'Target drive has no reserved bootstrap tracks.$'
  328. drvmsg:    db    cr,lf,' :$'
  329. pbmsg:    db    cr,lf,'Writing to the bootstrap tracks...',cr,lf,'$'
  330. bsmsg:    db    cr,lf,'Cannot select target drive.$'
  331.  
  332. bdrvn:    ds    1
  333. cdrvn:    ds    1
  334. restrk:    ds    2    ; # reserved tracks on target drive.
  335. nrec:    ds    1
  336. track:    ds    1
  337. sector:    ds    1
  338. dmaadr:    ds    2
  339. rfile:    ds    2    ; Pointer to files to read - for rdfile
  340. wfile:    ds    2    ; Pointer to file to write on copys
  341. hexcnt:    ds    1
  342. bufptr:    ds    2
  343. $memry:    ds    2
  344.     ds    128
  345. stack    equ    $
  346.     end
  347.