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 / MBUG / MBUG097.ARC / ERARAM.MAC < prev    next >
Text File  |  1979-12-31  |  4KB  |  269 lines

  1. ;
  2. ;
  3. ;    ERAseRAM : 512k operating system support program.
  4. ;    Erases ramdisks.
  5. ;
  6. ;
  7.  
  8. bdos        equ    5
  9. cr        equ    13
  10. lf        equ    10
  11. tab        equ    9
  12. bell        equ    7
  13.  
  14. command_line    equ    80h
  15. bios_start    equ    0E700h
  16. id        equ    218h
  17. id_val        equ    0AA55h
  18. pages_m        equ    225h
  19. pages_n        equ    227h
  20. mem_page_addr    equ    292h
  21. map_port    equ    50h
  22. bios_map    equ    0Ch
  23. normal_map    equ    4
  24.  
  25. map    macro    mval
  26.     ld    a,mval
  27.     out    (map_port),a
  28.     endm
  29.  
  30.     aseg
  31.  
  32.     org    100h
  33.  
  34.     ld    de,start_mesg
  35.     ld    c,9
  36.     call    bdos
  37.  
  38.     ld    hl,(bios_start+id)
  39.     ld    de,id_val
  40.     or    a
  41.     sbc    hl,de
  42.     jr    nz,get_lost
  43.  
  44.     ld    hl,move_stuff_src
  45.     ld    de,move_stuff_dest
  46.     ld    bc,move_stuff_len
  47.     ldir
  48.  
  49.     ld    hl,command_line
  50.     ld    b,(hl)
  51.  
  52.     ld    a,b
  53.     or    a
  54.     jr    z,ask_which
  55.  
  56. parse_name:
  57.     inc    hl
  58.     ld    a,(hl)
  59.     cp    'M'
  60.     jr    z,got_name
  61.     cp    'N'
  62.     jr    z,got_name
  63.     cp    ' '
  64.     jr    nz,ask_which
  65.     djnz    parse_name
  66.     jr    ask_which
  67.  
  68. got_name:
  69.     sub    'M'
  70.     ld    (name),a
  71.     or    a
  72.     jr    z,gn_1
  73.     ld    a,(bios_start+pages_n)
  74.     or    a
  75.     jr    z,show_use
  76. gn_1:
  77.     dec    b
  78.     jr    z,ask_conf
  79.     dec    b
  80.     jr    z,ask_conf
  81.     inc    hl
  82.     jr    parse_conf
  83.  
  84. parse_conf:
  85.     inc    hl
  86.     ld    a,(hl)
  87.     cp    'F'
  88.     jr    z,do_erase
  89.     cp    ' '
  90.     jr    nz,ask_conf
  91.     djnz    parse_conf
  92.     jr    ask_conf
  93.  
  94. do_erase:
  95.     ld    a,(name)
  96.     or    a
  97.     jr    z,de_1
  98.     ld    a,'N'
  99.     ld    (era_name),a
  100.     ld    a,(bios_start+pages_m)
  101. de_1:
  102.     add    a,3
  103.     jp    erase_it
  104.  
  105. show_use:
  106.     ld    de,use_mesg
  107.     jr    prt_ret
  108.  
  109. get_lost:
  110.     ld    de,wb_mesg
  111. prt_ret:
  112.     ld    c,9
  113.     call    bdos
  114.     ret
  115.  
  116. ask_which:
  117.     call    show_use
  118.     ld    a,(bios_start+pages_n)
  119.     or    a
  120.     jr    z,ask_conf
  121.     ld    de,ask_name_mesg
  122.     ld    c,9
  123.     call    bdos
  124. aw_1:
  125.     ld    e,0FFh
  126.     ld    c,6
  127.     call    bdos
  128.     res    5,a
  129.     cp    '['-40h
  130.     jr    z,aw_4
  131.     cp    'C'-40h
  132.     jr    nz,aw_3
  133. aw_4:
  134.     pop    hl
  135.     ld    de,crlf_mesg
  136.     jr    prt_ret
  137. aw_3:
  138.     cp    'N'
  139.     jr    z,aw_2
  140.     cp    'M'
  141.     jr    nz,aw_1
  142. aw_2:
  143.     push    af
  144.     ld    de,crlf_mesg-1
  145.     ld    (de),a
  146.     ld    c,9
  147.     call    bdos
  148.     pop    af
  149.     sub    'M'
  150.     ld    (name),a
  151.  
  152. ask_conf:
  153.     ld    a,(name)
  154.     or    a
  155.     jr    z,ac_1
  156.     ld    a,'N'
  157.     ld    (ask_conf_name),a
  158. ac_1:
  159.     ld    de,ask_conf_mesg
  160.     ld    c,9
  161.     call    bdos
  162. ac_2:
  163.     ld    e,0FFh
  164.     ld    c,6
  165.     call    bdos
  166.     or    a
  167.     jr    z,ac_2
  168.     res    5,a
  169.     cp    'Y'
  170.     jr    z,ac_3
  171.     ld    de,no_era_mesg
  172.     jr    prt_ret
  173. ac_3:
  174.     ld    de,crlf_mesg-1
  175.     ld    (de),a
  176.     ld    c,9
  177.     call    bdos
  178.     jp    do_erase
  179.  
  180.  
  181. move_stuff_src    equ    $
  182.  
  183.     .phase    9000h
  184.  
  185. move_stuff_dest    equ    $
  186.  
  187. erase_it:
  188.     push    af
  189.     cp    3
  190.     jr    z,er_1
  191.     ld    a,'N'+80h
  192.     ld    (ram_name),a
  193. er_1:
  194.     map    bios_map
  195.     pop    af
  196.     ld    hl,(bios_start+mem_page_addr)
  197.     ld    (call_addr),hl
  198. call_addr    equ    $+1
  199.     call    0
  200.     ld    hl,32
  201.     ld    de,33
  202.     ld    bc,+(255*32)-1
  203.     ld    (hl),0E5h
  204.     ldir
  205.     ld    hl,ram_file_name
  206.     ld    de,0
  207.     ld    bc,16
  208.     ldir
  209.     xor    a
  210.     ld    b,16
  211. er_2:
  212.     ld    (de),a
  213.     inc    de
  214.     djnz    er_2
  215.     map    normal_map
  216.     ld    de,era_mesg
  217.     ld    c,9
  218.     call    bdos
  219.     rst    0
  220.  
  221. ram_file_name:
  222.     db    0,'-RAMDISK'
  223. ram_name:
  224.     db    'M',':'+80h,' ',0,0,0,0
  225.  
  226. move_stuff_len    equ    $-move_stuff_dest
  227.  
  228.     .dephase
  229.  
  230. start_mesg:
  231.     db    cr,lf,'Microbee 512k Enhanced Operating System v2.2,'
  232.     db    ' (c) 1987 Peter Broughton.',cr,lf
  233.     db    'ERARAM : Erases ramdisks.',cr,lf,lf,'$'
  234.  
  235. wb_mesg:
  236.     db    bell,'Wrong operating system !!',cr,lf,lf,'$'
  237.  
  238. use_mesg:
  239.     db    'Use : ERARAM [M:/N: [F]]',cr,lf
  240.     db    tab,'F - don''t ask for confirmation.',cr,lf
  241.     db    tab,'If no memory is assigned to N: then ramdisk M: is'
  242.     db    ' assumed.'
  243. crlf_mesg:
  244.     db    cr,lf,lf,'$'
  245.  
  246. ask_name_mesg:
  247.     db    'Erase which ramdisk (M:/N:) ? $'
  248.  
  249. ask_conf_mesg:
  250.     db    'Erase ramdisk '
  251. ask_conf_name:
  252.     db    'M:, are you sure ? $'
  253.  
  254. no_era_mesg:
  255.     db    'N',cr,lf,lf,'Erase aborted !!',cr,lf,lf,'$'
  256.  
  257. era_mesg:
  258.     db    'Ramdisk '
  259. era_name:
  260.     db    'M: erased !!',cr,lf,lf,'$'
  261.     
  262. name    equ    $
  263.  
  264.     if    ($ and 7Fh) ne 0
  265.      ds    80h-($ and 7Fh)
  266.     endif
  267.  
  268.     end
  269.