home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug097.arc / SWAPA.MAC < prev    next >
Text File  |  1979-12-31  |  3KB  |  210 lines

  1. ;
  2. ;
  3. ;    SWAPA : Operating system support program.
  4. ;    Selects what A: refers to (physical A, ramdisk M or ramdisk N)
  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. map_port    equ    50h
  15. normal_map    equ    4
  16. sys_page    equ    5
  17. rst_00h        equ    0C7h
  18. command_line    equ    80h
  19. bios_start    equ    0E700h
  20. id        equ    218h
  21. id_val        equ    0AA55h
  22. swap_a_m    equ    21Bh
  23. pages_n        equ    227h
  24. sl_table    equ    2CBh
  25. sl_messages    equ    2CDh
  26.  
  27.     aseg
  28.  
  29.     org    100h
  30.  
  31.     ld    de,start_mesg
  32.     ld    c,9
  33.     call    bdos
  34.  
  35.     ld    hl,(bios_start+id)
  36.     ld    de,id_val
  37.     or    a
  38.     sbc    hl,de
  39.     jp    nz,get_lost
  40.  
  41.     ld    hl,move_stuff_src
  42.     ld    de,move_stuff_dest
  43.     ld    bc,move_stuff_len
  44.     ldir
  45.  
  46.     ld    hl,command_line
  47.     ld    a,(hl)
  48.     or    a
  49.     jr    z,show_use
  50.     ld    b,a
  51. parse:
  52.     inc    hl
  53.     ld    a,(hl)
  54.     cp    '?'
  55.     jr    z,show_status
  56.     cp    'A'
  57.     jr    z,set_swap
  58.     cp    'M'
  59.     jr    z,set_swap
  60.     cp    'N'
  61.     jr    z,set_swap_n
  62.     cp    ' '
  63.     jr    nz,show_use
  64.     djnz    parse
  65.  
  66. show_use:
  67.     ld    de,use_mesg
  68.     ld    c,9
  69.     call    bdos
  70.     jr    show_status
  71.  
  72. set_swap_n:
  73.     ld    de,no_n_mesg
  74.     ld    a,(bios_start+pages_n)
  75.     or    a
  76.     jr    z,prt_ret
  77.     ld    a,'N'
  78.  
  79. set_swap:
  80.     sub    'A'
  81.     ld    (bios_start+swap_a_m),a
  82.     ld    a,rst_00h
  83.     ld    (ret_inst),a
  84.     call    change_status_mesg
  85.  
  86. show_status:
  87.     ld    hl,name_a
  88.     ld    de,name_m
  89.     ld    bc,name_n
  90.     ld    a,(bios_start+swap_a_m)
  91.     cp    'M'-'A'
  92.     jr    z,ss_is_m
  93.     cp    'N'-'A'
  94.     jr    nz,ss_put
  95.     push    bc
  96.     push    hl
  97.     pop    bc
  98.     pop    hl
  99.     jr    ss_put
  100. ss_is_m:
  101.     ex    de,hl
  102. ss_put:
  103.     push    bc
  104.     push    de
  105.     ld    de,stat_a
  106.     ld    bc,len_name
  107.     ldir
  108.     pop    hl
  109.     ld    de,stat_m
  110.     ld    c,len_name
  111.     ldir
  112.     pop    hl
  113.     ld    de,stat_n
  114.     ld    c,len_name
  115.     ldir
  116.     ld    de,stat_mesg
  117.     jr    prt_ret
  118.  
  119. get_lost:
  120.     ld    de,wb_mesg
  121. prt_ret:
  122.     ld    c,9
  123.     call    bdos
  124. ret_inst:
  125.     ret
  126.  
  127. move_stuff_src    equ    $
  128.  
  129.     .phase    8000h
  130.  
  131. move_stuff_dest    equ    $
  132.  
  133. change_status_mesg:
  134.     ld    a,sys_page
  135.     out    (map_port),a
  136.     ld    hl,(bios_start+sl_table)
  137.     ld    de,+(3*5)+2
  138.     add    hl,de
  139.     ld    e,(hl)
  140.     ld    hl,(bios_start+sl_messages)
  141.     add    hl,de
  142.     ld    e,3
  143.     add    hl,de
  144.     ld    a,(bios_start+swap_a_m)
  145.     add    a,'A'
  146.     ld    (hl),a
  147.     ld    a,normal_map
  148.     out    (map_port),a
  149.     ret
  150.  
  151.  
  152. move_stuff_len    equ    $-move_stuff_dest
  153.  
  154.     .dephase
  155.  
  156. start_mesg:
  157.     db    cr,lf,'Microbee 512k Enhanced Operating System v2.2,'
  158.     db    ' (c) 1987 Peter Broughton.',cr,lf
  159.     db    'SWAPA : swaps drive A: and either ramdisk.',cr,lf,lf,'$'
  160.  
  161. wb_mesg:
  162.     db    bell,'Wrong operating system !!',cr,lf,lf,'$'
  163.  
  164. use_mesg:
  165.     db    'Use : SWAPA A/M/N/?',cr,lf
  166.     db    tab,'A - assigns A: to pysical drive A,',cr,lf
  167.     db    tab,tab,'(this is the normal configuration)',cr,lf
  168.     db    tab,'M - assigns A: to first ramdisk (M)',cr,lf
  169.     db    tab,tab,    'and M: to physical drive A,',cr,lf
  170.     db    tab,'N - assigns A: to second ramdisk (N, if enabled)',cr,lf
  171.     db    tab,tab,    'and N: to physical drive A,',cr,lf
  172.     db    tab,'?  - displays current assignment.',cr,lf,lf,'$'
  173.  
  174. no_n_mesg:
  175.     db    bell,'No memory assigned to ramdisk N:.',cr,lf,lf,'$'
  176.  
  177. name_a:
  178.     db    'physical drive A',0,0
  179. name_m:
  180.     db    'first ramdisk (M)',0
  181. name_n:
  182.     db    'second ramdisk (N)'
  183.  
  184. len_name    equ    $-name_n
  185.  
  186. n_space    macro
  187.      ds    len_name,' '
  188.     endm
  189.  
  190. stat_mesg:
  191.     db    'A: --> '
  192. stat_a:
  193.     n_space
  194.     db    ',',cr,lf
  195.     db    'M: --> '
  196. stat_m:
  197.     n_space
  198.     db    ',',cr,lf
  199.     db    'N: --> '
  200. stat_n:
  201.     n_space
  202.     db    '.',cr,lf,lf,'$'
  203.  
  204.  
  205.     if    ($ and 7Fh) ne 0
  206.      ds    80h-($ and 7Fh)
  207.     endif
  208.  
  209.     end
  210.