home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / debug / wadesrc.lbr / MON.MZC / MON.MAC
Text File  |  1988-06-19  |  6KB  |  485 lines

  1. .z80
  2. ;
  3.     cseg
  4.     include    PRINTF.LIB
  5. ;
  6. siodata    equ    14h
  7. sioctl    equ    16h
  8. tbe    equ    4
  9. rca    equ    1
  10. ;
  11. fcb    equ    5ch
  12. fcb2    equ    6ch
  13. ;
  14. main::
  15.     ld    sp,stack
  16.     di
  17.     ld    a,1
  18.     out    (sioctl),a
  19.     ld    a,4
  20.     out    (sioctl),a
  21.     ei
  22. skipp:
  23.     in    a,(sioctl)
  24.     and    rca
  25.     jr    z,wait0
  26.     in    a,(siodata)
  27.     jr    skipp
  28. ;
  29. wait0:
  30.     ld    a,1fh
  31.     out    (siodata),a
  32.     ld    hl,07fffh
  33. wait1:
  34.     in    a,(sioctl)
  35.     and    rca
  36.     jr    nz,waitend
  37.     dec    hl
  38.     ld    a,h
  39.     or    l
  40.     jr    nz,wait1
  41.     printf    'Waiting ... '
  42. ;
  43. wait2:
  44.     in    a,(sioctl)
  45.     and    rca
  46.     jr    nz,waitend
  47.     ld    e,0ffh
  48.     ld    c,6
  49.     call    5
  50.     cp    3
  51.     jp    z,0
  52.     jr    wait2
  53. ;
  54. waitend:
  55.     in    a,(siodata)
  56.     and    7fh
  57.     push    af
  58.     ld    e,a
  59.     ld    c,6
  60.     call    5
  61.     pop    af
  62.     cp    7
  63.     jr    z,ready
  64.     cp    ':'
  65.     jr    z,ready
  66.     ld    a,1
  67.     out    (siodata),a
  68.     jr    wait2
  69. ;
  70. ready:
  71.     ld    a,1
  72.     out    (siodata),a
  73. ;
  74.     ld    a,(fcb+1)
  75.     cp    ' '
  76.     jr    z,nofn
  77.     ld    a,(fcb2+1)
  78.     cp    ' '
  79.     jr    z,nosymfn
  80.     ld    hl,fcb2
  81.     ld    de,symfcb
  82.     ld    bc,32
  83.     ldir
  84.     call    symbols
  85. nosymfn::
  86.     call    read
  87. nofn::    
  88.     printf    'OK\n:'
  89. ;
  90. loop::
  91.     ld    sp,stack
  92.     call    pollsio
  93.     call    pollcon
  94.     jr    loop
  95. ;
  96. pollcon::
  97.     ld    c,6
  98.     ld    e,0ffh
  99.     call    5
  100.     or    a
  101.     ret    z
  102.     cp    3
  103.     jp    z,0
  104.     cp    'R'-'@'
  105.     jp    z,read
  106.     cp    'W'-'@'
  107.     jp    z,write
  108.     cp    'F'-'@'
  109.     jp    z,file
  110.     cp    'N'-'@'
  111.     jp    z,symfile
  112.     cp    'S'-'@'
  113.     jp    z,symbols
  114.     ld    b,a
  115. ;
  116. wtout::
  117.     in    a,(sioctl)
  118.     and    tbe
  119.     jr    z,wtout
  120.     ld    a,b
  121.     out    (siodata),a
  122.     ret
  123. ;
  124. pollsio::
  125.     in    a,(sioctl)
  126.     and    rca
  127.     ret    z
  128.     in    a,(siodata)
  129.     and    7fh
  130. gotsio::
  131.     ld    e,a
  132.     ld    c,6
  133.     call    5
  134.     ld    a,1
  135.     out    (siodata),a
  136.     ret
  137. ;
  138. symfile::
  139.     ld    hl,symfcb
  140.     ld    (pfcb+2),hl
  141.     printf    '\nSymbol '
  142.     jr    fileinp
  143. ;
  144. file::
  145.     ld    hl,fcb
  146.     ld    (pfcb+2),hl
  147.     printf    '\n'
  148. fileinp::
  149.     printf    'Filename: '
  150.     ld    de,inbuf
  151.     ld    c,10
  152.     call    5
  153.     printf    '\n:'
  154.     ld    hl,inbuf+1
  155.     ld    a,(hl)
  156.     or    a
  157.     ret    z
  158.     ld    e,a
  159.     ld    d,0
  160.     add    hl,de
  161.     inc    hl
  162.     ld    (hl),0
  163.     ld    c,152
  164.     ld    de,pfcb
  165.     call    5
  166.     inc    hl
  167.     ld    a,h
  168.     or    l
  169.     ret    nz
  170.     printf    'Filename fehlerhaft!\n:'
  171.     ret
  172. ;
  173. pfcb::    dw    inbuf+2
  174.     dw    fcb
  175. ;
  176. inbuf::    db    80,0
  177.     ds    80
  178. ;
  179. write::
  180.     ld    a,(fcb+1)
  181.     cp    ' '
  182.     jp    z,nofile
  183.     ld    de,fcb
  184.     ld    c,19
  185.     call    5
  186.     xor    a
  187.     ld    (fcb+12),a
  188.     ld    (fcb+32),a
  189.     ld    de,fcb
  190.     ld    c,22
  191.     call    5
  192.     inc    a
  193.     jr    nz,wrok
  194.     printf    '\nMake Error\n:'
  195.     jp    loop
  196. ;
  197. wrok::
  198.     xor    a
  199.     ld    (fcb+32),a
  200.     printf    'Writing '
  201.     ld    hl,8000h
  202.     ld    b,0
  203. wrloop::
  204.     printf    '%@w\h\h\h\h',HL
  205.     push    bc
  206.     ld    b,5
  207.     call    wrfunc
  208.     ld    c,l
  209.     call    wrbyte
  210.     ld    c,h
  211.     call    wrbyte
  212.     push    hl
  213.     ld    hl,80h
  214.     ld    b,128
  215. wrblock::    
  216.     in    a,(sioctl)
  217.     and    rca
  218.     jr    z,wrblock
  219.     in    a,(siodata)
  220.     ld    (hl),a
  221.     inc    hl
  222.     ld    a,1
  223.     out    (siodata),a
  224.     djnz    wrblock
  225. ;
  226.     ld    de,fcb
  227.     ld    c,21
  228.     call    5
  229.     or    a
  230.     jr    nz,wrerr
  231.     pop    hl
  232.     ld    de,128
  233.     add    hl,de
  234.     pop    bc
  235.     djnz    wrloop
  236. ;
  237.     ld    de,fcb
  238.     ld    c,16
  239.     call    5
  240.     or    a
  241.     jr    nz,closerr
  242.     printf    '\nReady\n:'
  243.     ret
  244. ;
  245. wrerr::
  246.     printf    'Write Error\n:'
  247.     jp    loop
  248. ;
  249. closerr::
  250.     printf    'Close Error\n:'
  251.     jp    loop
  252. ;
  253. wrbyte::
  254.     in    a,(sioctl)
  255.     and    tbe
  256.     jr    z,wrbyte
  257.     ld    a,c
  258.     out    (siodata),a
  259.     ret
  260. ;
  261. wrfunc::
  262.     push    hl
  263.     call    wtout
  264.     ld    hl,07fffh
  265. wfecho::
  266.     in    a,(sioctl)
  267.     and    rca
  268.     jr    nz,wgotecho
  269.     dec    hl
  270.     ld    a,h
  271.     or    l
  272.     jr    nz,wfecho
  273.     pop    hl
  274.     printf    'WF Timeout\n'
  275.     jp    loop
  276. ;
  277. wgotecho::
  278.     pop    hl
  279.     in    a,(siodata)
  280.     and    7fh
  281.     cp    2
  282.     ret    z
  283.     printf    'WF rcv err %@x',A
  284.     jp    loop
  285. ;
  286. nofile::
  287.     printf    '\nNo Filename\n:'
  288.     jp    loop
  289. ;
  290. nosymfile::
  291.     printf    '\nNo Symbol Filename\n:'
  292.     jp    loop
  293. ;
  294. read::
  295.     ld    a,(fcb+1)
  296.     cp    ' '
  297.     jp    z,nofile
  298.     xor    a
  299.     ld    (fcb+12),a
  300.     ld    (fcb+32),a
  301.     ld    de,fcb
  302.     ld    c,15
  303.     call    5
  304.     inc    a
  305.     jp    nz,rdok
  306.     printf    'File not found\n:'
  307.     jp    loop
  308. ;
  309. rdok::
  310.     xor    a
  311.     ld    (fcb+32),a
  312.     printf    'Reading '
  313.     ld    hl,8000h
  314. rdloop::
  315.     push    hl
  316.     ld    de,fcb
  317.     ld    c,20
  318.     call    5
  319.     or    a
  320.     jr    nz,rdend
  321.     pop    hl
  322.     printf    '%@w\h\h\h\h',HL
  323.     ld    b,4
  324.     call    wrfunc
  325.     ld    c,l
  326.     call    wrbyte
  327.     ld    c,h
  328.     call    wrbyte
  329.     push    hl
  330.     ld    hl,80h
  331.     ld    b,128
  332. rdblock::    
  333.     in    a,(sioctl)
  334.     and    tbe
  335.     jr    z,rdblock
  336.     ld    a,(hl)
  337.     out    (siodata),a
  338.     inc    hl
  339.     djnz    rdblock
  340. ;
  341.     pop    hl
  342.     ld    de,128
  343.     add    hl,de
  344.     jr    rdloop
  345. ;
  346. rdend::
  347.     pop    hl
  348.     ld    de,fcb
  349.     ld    c,16
  350.     call    5
  351.     printf    '\nReady\n:'
  352.     ret
  353. ;
  354. ;
  355. symbols::
  356.     ld    a,(symfcb+1)
  357.     cp    ' '
  358.     jp    z,nosymfile
  359.     xor    a
  360.     ld    (symfcb+12),a
  361.     ld    (symfcb+32),a
  362.     ld    de,symfcb
  363.     ld    c,15
  364.     call    5
  365.     inc    a
  366.     jp    nz,symok
  367.     printf    'Symbol File not found\n:'
  368.     jp    loop
  369. ;
  370. symok::
  371.     xor    a
  372.     ld    (symfcb+32),a
  373.     printf    'Loading Symbols ...'
  374.     ld    de,symbuf+2
  375. ;
  376. symloop::
  377.     push    de
  378.     ld    de,symfcb
  379.     ld    c,20
  380.     call    5
  381.     pop    de
  382.     or    a
  383.     jr    nz,symrdy
  384.     ld    hl,80h
  385.     ld    b,128
  386. ;
  387. symxfer::
  388.     ld    a,(hl)
  389.     cp    1ah
  390.     jr    z,symrdy
  391.     cp    0ah
  392.     call    nz,symwr
  393.     inc    hl
  394.     djnz    symxfer
  395.     jr    symloop
  396. ;
  397. symrdy::
  398.     ld    a,0dh
  399.     call    symwr
  400.     ld    de,symfcb
  401.     ld    c,16
  402.     call    5
  403.     printf    ' Ready\n:'
  404.     ret
  405. ;
  406. symwr::
  407.     ld    (de),a
  408.     inc    de
  409.     cp    0dh
  410.     jr    z,putsym
  411.     cp    9
  412.     jr    z,putsym
  413.     ret
  414. ;
  415. putsym::
  416.     dec    de
  417.     ld    a,0dh
  418.     ld    (de),a
  419.     push    hl
  420.     ld    hl,symbuf+3
  421.     or    a
  422.     sbc    hl,de
  423.     ld    hl,symbuf
  424.     jr    nz,putlp
  425.     pop    hl
  426.     ret
  427. ;
  428. putlp::
  429.     ld    a,(hl)
  430.     push    af
  431.     call    outsym
  432.     inc    hl
  433.     pop    af
  434.     cp    0dh
  435.     jr    nz,putlp
  436.     pop    hl
  437. putw1::
  438.     in    a,(sioctl)
  439.     and    rca
  440.     jr    z,putw1
  441.     in    a,(siodata)
  442.     push    af
  443.     ld    a,1
  444.     out    (siodata),a
  445.     pop    af
  446.     and    7fh
  447. ;    call    diss
  448.     cp    ':'
  449.     jr    nz,putw1
  450. ;
  451.     ld    de,symbuf+2
  452.     ret
  453. ;
  454. outsym::
  455.     push    af
  456. symw1::
  457.     in    a,(sioctl)
  458.     and    tbe
  459.     jr    z,symw1
  460.     pop    af
  461.     out    (siodata),a
  462. symw2::
  463.     in    a,(sioctl)
  464.     and    rca
  465.     jr    z,symw2
  466.     in    a,(siodata)
  467. ;    call    diss
  468. symw3::
  469.     in    a,(sioctl)
  470.     and    tbe
  471.     jr    z,symw3
  472.     ld    a,1
  473.     out    (siodata),a
  474.     ret
  475. ;
  476. symfcb::
  477.     ds    36
  478. ;
  479. symbuf::    db    'N0'
  480.     ds    80
  481. ;
  482.     ds    100
  483. stack::
  484.     end    main
  485.