home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / UTILITYS / SYSGENSC.ARC / SYSGEN.Z80 < prev   
Text File  |  1990-07-21  |  3KB  |  174 lines

  1.     abs
  2. ;-----------------------------------------------------------------------------
  3. ;
  4. ; Program   : Sysgen
  5. ; Machine   : Apple 2 with PCPI Applicard CP/M adapter
  6. ; Synopsis  : A program which reads in CP/M image from a specified file, and
  7. ;             writes this image onto the boot tracks
  8. ; Assembler : ZASM
  9. ; Author    : Stephen Ma
  10. ; Date      : Sometime in July
  11. ;
  12. ;-----------------------------------------------------------------------------
  13. ;
  14. ; Bdos stuff etc.
  15. ;
  16. boot    equ    0
  17. bdos    equ    5
  18. conin    equ    1
  19. conout    equ    2
  20. openfil    equ    15
  21. closefil equ    16
  22. rdsec    equ    20
  23. wrtsec    equ    21
  24. setrdma    equ    26
  25. cr    equ    0dh
  26. lf    equ    0ah
  27. deffcb    equ    5ch
  28. arglen    equ    80h
  29. bios    equ    0f300h
  30. settrk    equ    bios+1eh
  31. setsec    equ    bios+21h
  32. setdma    equ    bios+24h
  33. readsec    equ    bios+27h
  34. writesec equ    bios+2ah
  35. lasttrk    equ    3
  36. lastsec    equ    20h
  37. ;
  38. ; Begin........
  39. ;
  40.     org    100h
  41.     call    ilprnt
  42.     db    'Sysgen for Apple 2 & Starcard',cr,lf,lf,lf,0
  43.         ld    a,(arglen)
  44.     or    a
  45.     jr    nz,getbin
  46. ;
  47. ; give help msg
  48. ;
  49.     call    ilprnt
  50.     db    'Usage: SYSGEN cpm_image_file_name',cr,lf,0
  51.     jp    boot
  52. ;
  53. ; read in binary file
  54. ;
  55. getbin:    ld    de,deffcb
  56.     ld    c,openfil
  57.     call    bdos
  58.     cp    0ffh
  59.     jr    nz,filok
  60.     call    ilprnt
  61.     db    'CP/M image file not found',cr,lf,0
  62.     jp    boot
  63. ;
  64. ; Read in image
  65. ;
  66. filok:    ld    h,(databeg/256)+1
  67.     ld    l,0
  68. rdlp:    push    hl
  69.     ex    de,hl
  70.     ld    c,setrdma
  71.     call    bdos
  72.     ld    de,deffcb
  73.     ld    c,rdsec
  74.     call    bdos
  75.     pop    hl
  76.         or    a
  77.     jr    nz,finrd
  78.     ld    de,80h
  79.     add    hl,de
  80.     jr    rdlp
  81. ;
  82. ; File read in OK - close itt
  83. ;
  84. finrd:    ld    de,deffcb
  85.     ld    c,closefil
  86.     call    bdos
  87.     pop    hl
  88.     ld    (endaddr),hl
  89. ;
  90. ; Write image to disk
  91. ;
  92.     ld    h,0        ; start on track 0,sector 0
  93.     ld    l,0        ;   (begin at the beginning.....)
  94.     ld      d,(databeg/256)+1
  95.     ld    e,0
  96. ritelp:    push    hl
  97.     push    de
  98.     call    putsec
  99.         pop    hl
  100.     ld    de,80h
  101.     add    hl,de
  102.     ld    de,(endaddr)
  103.     ld    a,h
  104.     cp    d
  105.     jp    nz,notlst
  106.     ld    a,l
  107.     cp    e
  108.     jp    z,fini
  109. notlst:    ex    de,hl
  110.     pop    hl
  111.     inc    l
  112.     ld    a,l
  113.     cp    lastsec
  114.     jr    nz,ritelp
  115.     ld    l,0
  116.     inc    h
  117.     ld    a,h
  118.     cp    lasttrk
  119.     jr    nz,ritelp
  120. ;
  121. ; Finished.......
  122. ;
  123. fini:    call    ilprnt
  124.     db    'Done.',cr,lf,0
  125.     jp    boot
  126. ;
  127. ; Subroutines
  128. ;
  129. ; In line print routine
  130. ;
  131. ilprnt:    pop    hl
  132.     ld    a,(hl)
  133.     inc    hl
  134.     push    hl
  135.         or    a
  136.     ret    z
  137.     ld    c,conout
  138.     ld    e,a
  139.     call    bdos
  140.     jr    ilprnt
  141. ;
  142. ; Write sector
  143. ;
  144. putsec: push    hl
  145.     push    de
  146.     ld    c,h
  147.     call    settrk
  148.     pop    bc
  149.     call    setdma
  150.     pop    bc
  151.     call    xlater
  152.     call    setsec
  153.     call    writesec
  154.     ret
  155. ;
  156. ; Translate sector no.
  157. ;
  158. xlater:    ld    hl,xlate
  159.     ld    b,0
  160.     add    hl,bc
  161.     ld    c,(hl)
  162.     ret
  163. ;
  164. ; sector retranslate table - for tracks 0,1,2
  165. ;
  166. xlate:    db    00h,01h,0ch,0dh,18h,19h,04h,05h
  167.     db    10h,11h,1ch,1dh,08h,09h,14h,15h
  168.     db    16h,17h,02h,03h,0eh,0fh,1ah,1bh
  169.     db    06h,07h,12h,13h,1eh,1fh,0ah,0bh
  170. endaddr    ds    2
  171. databeg    equ    $
  172.     end
  173.  
  174.