home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / utilitys / sysgensc.arc / GETBIN.Z80 < prev    next >
Text File  |  1990-07-21  |  3KB  |  182 lines

  1.     abs
  2. ;----------------------------------------------------------------------------
  3. ;
  4. ; Program   : Getbin
  5. ; Machine   : Apple 2 with PCPI Applicard CP/M adapter
  6. ; Synopsis  : Reads in CP/M system image from boot tracks, and writes the
  7. ;             image into a specified file
  8. ; Assembler : ZASM
  9. ; Author    : Stephen Ma
  10. ; Date      : Sometime in July (or was it August, or September......)
  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. opnfil    equ    15
  21. clsfil    equ    16
  22. delfil    equ    19
  23. rdsec    equ    20
  24. wrtsec    equ    21
  25. makfil    equ    22
  26. setrdma    equ    26
  27. cr    equ    0dh
  28. lf    equ    0ah
  29. deffcb    equ    5ch
  30. arglen    equ    80h
  31. bios    equ    0f300h
  32. settrk    equ    bios+1eh
  33. setsec    equ    bios+21h
  34. setdma    equ    bios+24h
  35. readsec    equ    bios+27h
  36. writesec equ    bios+2ah
  37. ;
  38. ; Program entry:
  39. ;
  40.     org    100h
  41.     call    ilprnt
  42.     db    'Getbin for Apple 2 & Starcard',cr,lf,lf,lf,0
  43.     ld    a,(arglen)
  44.     or    a
  45.     jr    nz,filok
  46. ;
  47. ; give help msg
  48. ;
  49.     call    ilprnt
  50.     db    'Usage: GETBIN cpm_image_file_name',cr,lf,0
  51.     jp    boot
  52. ;
  53. ; Read in system image from tracks 0, 1 & 2
  54. ;
  55. filok:    ld    hl,0        ; start on track 0,sector 0
  56.     ld      d,(databeg/256)+1
  57.     ld    e,0
  58. readlp:    push    hl
  59.     push    de
  60.     call    getsect
  61.         pop    hl
  62.     ld    de,80h
  63.     add    hl,de
  64.     ex    de,hl
  65.     pop    hl
  66.     inc    l
  67.     ld    a,l
  68.     cp    20h
  69.     jr    nz,readlp
  70.     ld    l,0
  71.     inc    h
  72.     ld    a,h
  73.     cp    3
  74.     jr    nz,readlp
  75.     ex    de,hl
  76.     ld    (lastaddr),hl
  77. ;
  78. ; write out binary file
  79. ;
  80.     ld    de,deffcb
  81.     ld    c,delfil
  82.     call    bdos
  83.     ld    de,deffcb
  84.     ld    c,makfil
  85.     call    bdos
  86.     cp    0ffh
  87.     jr    nz,opened
  88. ;
  89. ; Error.....
  90. ;
  91.     call    ilprnt
  92.     db    'Error creating image file',cr,lf,0
  93.     jp    boot
  94. ;
  95. ; Write image to file
  96. ;
  97. opened:    ld    h,(databeg/256)+1
  98.     ld    l,0
  99. wrtlp:    push    hl
  100.     ex    de,hl
  101.     ld    c,setrdma
  102.     call    bdos
  103.     ld    de,deffcb
  104.     ld    c,wrtsec
  105.     call    bdos
  106.     pop    hl
  107.     or    a
  108.     jr    nz,error
  109.     ld    de,80h
  110.     add    hl,de
  111.     ld    de,(lastaddr)
  112.     ld    a,h
  113.     cp    d
  114.     jr    nz,wrtlp
  115.     ld    a,l
  116.     cp    e
  117.     jr    nz,wrtlp
  118. ;
  119. ; Done, close file and exit
  120. ;
  121. exit:    ld    de,deffcb
  122.     ld    c,clsfil
  123.     call    bdos
  124.     call    ilprnt
  125.     db    'Done.',cr,lf,0
  126.     jp    boot
  127. ;
  128. ; Arrgh.... Error.....
  129. ;
  130. error:    call    ilprnt
  131.     db    'Error writing file',cr,lf,0
  132.     jr    exit
  133. ;
  134. ; Subroutines
  135. ;
  136. ; Inline print routine
  137. ;
  138. ilprnt:    pop    hl
  139.     ld    a,(hl)
  140.     inc    hl
  141.     push    hl
  142.         or    a
  143.     ret    z
  144.     ld    c,conout
  145.     ld    e,a
  146.     call    bdos
  147.     jr    ilprnt
  148. ;
  149. ; Read in secotr
  150. ;
  151. getsect: push    hl
  152.     push    de
  153.     ld    c,h
  154.     call    settrk
  155.     pop    bc
  156.     call    setdma
  157.     pop    bc
  158.     call    xlater
  159.     call    setsec
  160.     call    readsec
  161.     ret
  162. ;
  163. ; Translate sector number
  164. ;
  165. xlater:    ld    hl,xlate
  166.     ld    b,0
  167.     add    hl,bc
  168.     ld    c,(hl)
  169.     ret
  170. ;
  171. ; sector retranslate table - for tracks 0,1,2
  172. ;
  173. xlate:    db    00h,01h,0ch,0dh,18h,19h,04h,05h
  174.     db    10h,11h,1ch,1dh,08h,09h,14h,15h
  175.     db    16h,17h,02h,03h,0eh,0fh,1ah,1bh
  176.     db    06h,07h,12h,13h,1eh,1fh,0ah,0bh
  177. lastaddr ds    2
  178. databeg    equ    $
  179.     end
  180.  
  181.  
  182.