home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug084.arc / BEEMON.ASC < prev    next >
Text File  |  1979-12-31  |  8KB  |  496 lines

  1. ;    *** MICROBEE MONITOR V2.0   12/8/83  ***
  2. CTRC    EQU    03H
  3. CLS    EQU    0CH
  4. ACR    EQU    0DH
  5. ALF    EQU    0AH
  6. CTRH    EQU    08H
  7. CTRS    EQU    13H
  8. CTRX    EQU    18H
  9. DEL    EQU    7FH
  10. PROMPT    EQU    '.'
  11. BUFLEN    EQU    128D
  12. EXIT    EQU    8021H        ;BACK TO BASIC  ??
  13.     ORG    0400H
  14. MONITR    LD    SP,STK
  15.     CALL    BOOT        ;JUST CLEAR THE SCREEN
  16.     CALL    INTRO        ;INTRODUCTION
  17. ;    *** MAIN PROGRAM OF THE MONITOR ***
  18. MON1    CALL    CRLF
  19.     LD    C,PROMPT
  20.     CALL    PUTCH
  21.     LD    HL,BUFF
  22.     CALL    GETLN
  23.     LD    A,(BUFF)
  24.     CP    ACR
  25.     CALL    NZ,SCANER
  26.     JP    MON1        ;GO AGAIN
  27. ;**** SUBROUTINES  ****
  28. GETLN    LD    E,0
  29. GETLN1    CALL    CONIN
  30.     CP    ' '
  31.     JP     C,GETLN4
  32.     CP    'Z'+1
  33.     JP    C,GETLN2
  34.     AND    5FH
  35. GETLN2    LD    (HL),A
  36.     LD    A,BUFLEN
  37.     CP    E
  38.     RET    Z
  39.     LD    A,(HL)
  40.     INC    HL
  41.     INC    E
  42.     LD    C,A
  43.     CALL    PUTCH
  44.     JP    GETLN1
  45. GETLN4    CP    CTRH
  46.     JP    Z,GETLN5
  47.     CP    CTRX
  48.     JP    Z,CLLINE
  49.     CP    ACR
  50.     JP    NZ,GETLN1
  51.     LD    (HL),A
  52. CRLF    LD    C,ACR
  53.     CALL    PUTCH
  54.     LD    C,ALF
  55.     CALL    PUTCH
  56.     RET
  57. GETLN5    LD    A,E
  58.     OR    A
  59.     JP    Z,GETLN1
  60.     LD    C,CTRH
  61.     CALL    CONOUT
  62.     LD    C,' '
  63.     CALL     CONOUT
  64.     LD    C,CTRH
  65.     CALL    CONOUT
  66.     DEC    E
  67.     DEC    HL
  68.     JP    GETLN1
  69. CLLINE    LD    C,CTRH
  70. CLINE1    LD    A,E
  71.     OR    A
  72.     JP    Z,GETLN
  73.     CALL    CONOUT
  74.     LD    C,' '
  75.     CALL    CONOUT
  76.     LD    C,CTRH
  77.     CALL    CONOUT
  78.     DEC    HL
  79.     DEC    E
  80.     JP    NZ,CLINE1
  81.     JP    GETLN
  82. ;
  83. PUTCH    CALL    CONOUT
  84.     CALL    CONST
  85. ëOR    A
  86.     RET    Z
  87.     CALL    CONIN
  88.     CP    CTRS
  89.     JP    Z,PAWZ
  90.     JP    MON1
  91. PAWZ    CALL    CONIN
  92.     CP    CTRC
  93.     JP    Z,MON1
  94.     RET
  95. ;**** SIMPLE SCANNER *****
  96. SCANER    LD    HL,BUFF
  97.     LD    A,(HL)
  98.     INC    HL
  99.     LD    (CURSOR),HL
  100.     SUB    'A'
  101.     JP    C,ERROR
  102.     CP    'Z'-'A'+1
  103.     JP    NC,ERROR
  104.     ADD    A,A
  105.     LD    HL,TABLE
  106.     LD    D,0
  107.     LD    E,A
  108.     ADD    HL,DE
  109.     LD    E,(HL)
  110.     INC    HL
  111.     LD    D,(HL)
  112.     EX    DE,HL
  113.     JP    (HL)
  114. TABLE    DW    ERROR
  115.     DW    BREAK
  116.     DW    ERROR
  117.     DW    DUMP
  118.     DW    EXIT
  119.     DW    ERROR
  120.     DW    GO
  121.     DW    HELP        ;CALL INTRO COMMANDS
  122.     DW    ERROR
  123.     DW    ERROR
  124.     DW    ERROR
  125.     DW    ERROR
  126.     DW    ERROR
  127.     DW    ERROR
  128.     DW    ERROR
  129.     DW    ERROR
  130.     DW    ERROR
  131.     DW    RESUME
  132.     DW    SUBST
  133.     DW    ERROR
  134.     DW    ERROR
  135.     DW    ERROR
  136.     DW    ERROR
  137.     DW    ERROR
  138.     DW    ERROR
  139.     DW    ERROR
  140. ;  ** ERROR HANDLER **
  141. ERROR    LD    C,'?'
  142.     CALL    CONOUT
  143.     CALL    CRLF
  144.     JP    MON1
  145. ;** SCANNER TOOLS **
  146. SPSKIP    LD    HL,(CURSOR)
  147. SPSKL    LD    A,(HL)
  148.     INC    HL
  149.     CP    ACR
  150.     JP    Z,ERROR
  151.     CP    ' '
  152.     JP    Z,SPSKL
  153.     CP    ','
  154.     JP    Z,SPSKL
  155. ;    CP    TAB    ;MAY HAVE TO CHANGE THIS
  156. ;    JP    Z,SPSKL
  157.     DEC    HL
  158.     LD    (CURSOR),HL
  159.     RET
  160. GETPAR    PUSH    DE
  161.     PUSH    BC
  162.     LD    HL,0
  163. GP1    CALL    GETCHR
  164.     CALLëGP2
  165.     JP    C,GP3
  166.     ADD    HL,HL
  167.     ADD    HL,HL
  168.     ADD    HL,HL
  169.     ADD    HL,HL
  170.     OR    L
  171.     LD    L,A
  172.     JP    GP1
  173. GP2    SUB    '0'
  174.     RET    C
  175.     CP    'F'-'0'+1
  176.     CCF
  177.     RET    C
  178.     CP    10
  179.     CCF
  180.     RET    NC
  181.     SUB    'A'-'9'-1
  182.     RET
  183. GP3    CALL    UNGETC
  184.     POP    BC
  185.     POP    DE
  186.     RET
  187. ; ** GETCHAR AND UNGETCH **
  188. GETCHR    PUSH    HL
  189.     LD    HL,(CURSOR)
  190.     LD    A,(HL)
  191.     INC    HL
  192.     LD    (CURSOR),HL
  193.     POP    HL
  194.     RET
  195. UNGETC    PUSH    HL
  196.     LD    HL,(CURSOR)
  197.     DEC    HL
  198.     LD    (CURSOR),HL
  199.     POP    HL
  200.     RET
  201. DUMP    CALL    SPSKIP
  202.     CALL    GETPAR
  203.     EX    DE,HL
  204.     CALL    SPSKIP
  205.     CALL    GETPAR
  206.     EX    DE,HL
  207. D0    PUSH    HL
  208.     CALL    H16        ;PRINT INIT ADDRESS
  209.     CALL    TAB        ;TAB ACROSS 2 SPACES
  210. D1    LD    A,(HL)        ;GET BYTE FROM MEMORY
  211.     CALL    H8        ;
  212.     LD    C,' '        ;PRINT A       
  213.     CALL    PUTCH
  214.     INC    HL        ;POINT TO NEXT BYTE
  215.     CALL    D8        ;REACHED THE END ?
  216.     JP    C,D2        ;DUMP REMAINING ASCII 
  217.     LD    A,L        ;
  218.     AND    0FH        ;MASK LOWER BITS
  219.     JP    NZ,D1        ;IF NOT ZERO KEEP DUMPING
  220. D2    LD    C,' '        ;ELSE SPACE AND DUMP
  221.     CALL    PUTCH        ;ASCII
  222.     POP    HL        ;GET BASE POINTER
  223. D4    LD    A,(HL)        ;GET CHAR FROM MEMORY
  224.     AND    7FH        ;STRIP MSB
  225.     CP    ' '        ;IF LESS THAN SPACE THEN
  226.     CALL    M,D7        ;REPLACE WITH DOT
  227.     LD    C,A
  228.     CALL     PUTCH        ;OUTPUT CHAR
  229.     INC    HL        ;POINT TO NEXT BYTE
  230.     CALL    D8        ;
  231.     JP    C,CRLF
  232. D5    LD    A,L
  233.     AND    0FH
  234.     JP    NZ,D4
  235.     CALL    CRLF
  236.     JP    D0
  237. ;          ** HEX OUTPUT SUBROUTINES  **
  238. D7    LD    A,'.'        ;PRINT DOT
  239.     RET
  240. D8    LD    A,E
  241.     SUB    L
  242.     LD    A,D
  243.     SBC    A,H
  244.     RET
  245. H16    LD    A,H
  246.     CALL    H8
  247.     LD    A,L
  248. H8    PUSH    AF
  249.     RRCA
  250.     RRCA
  251.     RRCA
  252.     RRCA
  253.     CALL    H4
  254.     POP    AF
  255. H4    AND     0FH        ;MASK OUT UNWANTED NIBBLE
  256.     ADD    A,'0'        ;CONVERT IT TO ASCII
  257.     CP    '9'+1        ;IF > 9 THEN ADJUST IT TO
  258.     CALL    P,HADJ        ;BE A HEX DIGIT
  259.     LD    C,A
  260.     CALL    PUTCH
  261.     RET
  262. HADJ    ADD    A,'A'-1-'9'    ;MAKE UP THE DIFFERENCE
  263.     RET
  264. ;      ** ROUTINE TO PROVIDE A TAB OF 2 SPACES **
  265. TAB    LD    A,' '        ;8 SPACES
  266.     LD    C,A        ;PUT SPACE IN C
  267.     CALL    CONOUT        ;SPACE
  268.     LD    C,A
  269.     CALL    CONOUT        ;ANOTHER SPACE
  270.     RET
  271. ;   ** SUBSTITUTE MEMORY ROUTINE **
  272. SUBST    CALL    SPSKIP
  273.     CALL    GETPAR
  274. SUBST1    CALL    H16
  275.     LD    C,' '
  276.     CALL    PUTCH
  277.     PUSH    HL
  278.     LD    A,(HL)
  279.     CALL    H8
  280.     LD    C,' ' 
  281.     CALL    PUTCH
  282.     LD    HL,BUFF
  283.     CALL    GETLN
  284.     LD    HL,BUFF
  285.     LD    (CURSOR),HL
  286.     LD    A,(HL)
  287.     CP    '.'
  288.     JP    Z,MON1
  289.     CP    ACR
  290.     JP    Z,SUBST2
  291.     CALL    GETPAR
  292.     LD    A,L
  293.     POP    HL
  294.     LD    (HL),A
  295.     INC    HL
  296.     JP    SUBST1
  297. SUBST2    POP    HL
  298.     INC    HL
  299.     JP    SUBST1
  300. ;  ** GO TO MEMORY LOCATION AND RUN PROGRAM **
  301. GO    CALL    SPSKIP
  302.     CALL    GETPAR
  303.     EX    DE,HL
  304.     LD    HL,WBOOT
  305.     PUSH    HL
  306.     EX    DE,HL
  307.     JP    (HL)
  308. ;**** BREAKPOINT COMMAND ****
  309. BREAK    CALL    SPSKIP
  310.     CALL    GETPAR
  311.     LD    A,(HL)
  312.     LD    (INSTR),A
  313.     LD    (HL),000EFH
  314.     LD    (TEMPAD),HL
  315.     RET
  316. ;***** TRAP ROUTINE *****
  317. TRAP    EX    (SP),HL
  318.     DEC    HL
  319.     LD    (TEMPAD),HL
  320.     PUSH    DE
  321.     PUSH    BC
  322.     PUSH    AF
  323.     LD    HL,0
  324.     ADD    HL,SP
  325.     LD    A,(HL)
  326.     CALL    FLPRT
  327.     CALL    ILPRT
  328.     DEFM    ' A= 0'
  329.     INC    HL
  330.     LD    A,(HL)
  331.     CALL    H8
  332.     CALL    ILPRT
  333.     DEFM    ' BC= 0'
  334.     CALL    TRL
  335.     CALL    ILPRT
  336.     DEFM    ' DE= 0'
  337.     CALL    TRL
  338.     CALL    ILPRT
  339.     DEFM    ' HL= 0'
  340.     CALL    TRL
  341.     CALL    ILPRT
  342.     DEFM    ' SP= 0'
  343.     LD    HL,8
  344.     ADD    HL,SP
  345.     CALL    H16
  346.     CALL    ILPRT
  347.     DEFM    ' PC= 0'
  348.     LD    HL,(TEMPAD)
  349.     CALL    H16
  350.     LD    HL,(TEMPAD)
  351.     LD    (LASTBR),HL
  352.     LD    A,(INSTR)
  353.     LD    (HL),A
  354.     JP     MON1
  355. TRL    INC    HL
  356.     INC    HL
  357.     LD    A,(HL)
  358.     CALL    H8
  359.     DEC    HL
  360.     LD    A,(HL)
  361.     CALL    H8
  362.     INC    HL
  363.     RET
  364. FLPRT    LD    D,8
  365. FLL    RLA
  366.     LD    B,A
  367.     LD    A,'0'
  368.     ADC    A,0
  369.     LD    C,A
  370.     CALL    PUTCH
  371.     LD    A,B
  372.     DEC    D
  373.     JP    NZ,FLL
  374.     RET
  375. ILPRT    EX    (SP),HL
  376. ILL    LD    A,(HL)
  377.     CP    '0'
  378.     JP    Z,ILEX
  379.     LD    C,A
  380.     CALL    PUTCH
  381.     INC    HL
  382.     JP    ILL
  383. ILEX    INC    HL
  384.     EX    (SP),HL
  385.     RET
  386. ;**** RESUME COMMAND ****
  387. RESUME    POP    AF
  388.     POP    AF
  389.     POP    BC
  390.     POP    DE
  391.     LD    HL,(LASTBR)
  392.     EX    (SP),HL
  393.     RET
  394. ;**** INTRODUCTION ****
  395. INTRO    LD    HL,MSG0
  396.     CALL    MESS
  397.     CALL    CRLF     
  398.     CALL    CRLF
  399.     LD    HL,MSG1
  400.     CALL    MESS
  401.     CALL    CRLF
  402. HELP    CALL    CRLF    ;HELP COMMAND CALLS TO HERE
  403.     LD    HL,MSG2
  404.     CALL    MESS
  405.     CALL    CRLF
  406.     LD    HL,MSG7
  407.     CALL    MESS
  408.     CALL    CRLF
  409.     LD     HL,MSG3
  410.     CALL    MESS
  411.     CALL    CRLF
  412.     LD    HL,MSG6
  413.     CALL    MESS
  414.     CALL    CRLF
  415.     LD    HL,MSG5
  416.     CALL    MESS
  417.     CALL    CRLF
  418.     LD    HL,MSG9
  419.     CALL    MESS
  420.     CALL    CRLF
  421.     LD    HL,MSG8
  422.     CALL    MESS
  423.     CALL    CRLF
  424.     LD    HL,MSG4
  425.     CALL     MESS
  426.     CALL    CRLF
  427.     CALL    CRLF
  428.     RET
  429. ;**** ROUTINE TO PRINT MESSAGES ON THE SCREEN ****
  430. MESS    LD    A,(HL)
  431.     CP      '$'    ;CHECK FOR TERMINATION CONDITION
  432.     RET    Z    ;TERMINATION CONDITION
  433.     LD    C,A    ;GET READY FOR PRINTING
  434.     CALL    CONOUT    ;PRINT IT
  435.     INC    HL    ;POINT TO NEXT CHARACTER
  436.     JP    MESS    ;GO AGAIN
  437. ;**** FAKE BIOS ****
  438. ;  JUMP TABLE
  439. FBIOS    JP    BOOT
  440.     JP    WBOOT
  441.     JP    CONST
  442.     JP    CONIN
  443.     JP    CONOUT
  444.     JP    LIST
  445.     JP    PUNCH
  446.     JP    READER
  447. BOOT    LD    A,0C3H        ;CODE FOR JUMP INSTRUCTION    
  448.     LD    (00028H),A
  449.     LD    HL,TRAP
  450.     LD    (00029H),HL
  451.     LD    C,CLS        ;CLEAR THE SCREEN
  452.     CALL    CONOUT
  453.     RET
  454. WBOOT    LD    SP,STK
  455.     JP    MON1
  456. ;      I/O  ROUTINES
  457. CONST    CALL    8009H    ;MICROBEE MCHINL ROUTINE
  458.     LD    A,0    ;RETURN WITH 00H IF NO CH AVAIL
  459.     RET    Z
  460.     DEC    A    ;RETURN WITH FFH IF CHAR AVAIL
  461.     RET
  462. CONIN    CALL    8006H    ;MICROBEE MCHINW ROUTINE
  463.     AND    7FH    ;STRIP HIGH BIT
  464.     RET
  465. CONOUT    LD    B,C    ;PUT CHAR INTO C READY FOR CALL
  466.     CALL    800CH    ;TO MICROBEE ROUTINE DGOS_VDR
  467.     RET
  468. LIST    LD    A,C     ;NEED PRINTER ROUTINE
  469.     RET
  470. PUNCH    RET        ;TO BE INSERTED
  471. READER     RET
  472. ;
  473. ;***  NECESSARY CONSTANTS ***
  474. BUFF    DS    128
  475.     DS    64
  476. STK    EQU    $
  477. CURSOR    DS    2
  478. INSTR    DS    1
  479. TEMPAD    DS    2
  480. LASTBR    DS    2
  481. ;
  482. ;**** INTRODUCTION MESSAGES ****
  483. MSG0    DEFM    '             <<<<     BEE-MON  V2.0     >>>>$'
  484. MSG1    DEFM    '          Converted by Ian D. Jolly, August 1983$'
  485. MSG2    DEFM    '                        Commands...$'
  486. MSG3    DEFM    '                 (2) D(ump) XXXX,YYYY$'
  487. MSG4    DEFM    '                 (7) S(ubstitute) XXXX$'
  488. MSG5    DEFM    '                 (4) G(o) XXXX$'
  489. MSG6    DEFM    '                 (3) E(xit) to Basic$'
  490. MSG7    DEFM    '                 (1) B(reakpoint) XXXX$'
  491. MSG8    DEFM    '                 (6) R(esume) after Breakpoint$'
  492. MSG9    DEFM    '                 (5) H(elp)$'
  493.     END
  494.