home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug010.ark / LLLMON.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  210 lines

  1. ;SMALL MONITOR TO INTERFACE LLLBASIC AND LLLFP TO
  2. ;CP/M. A.R.G 10/9/77
  3. ;    JIF    12/24/77
  4. ;
  5. CPM    EQU    5    ;CP/M ENTRY
  6. EOF    EQU    1AH    ;^Z
  7. IOJUMP    EQU    1900H
  8. FREEMEM    EQU    2000H    ;BEGINNING OF FREE MEMORY
  9. INIT    EQU    1920H    ;ADDRESS OF JUMP TO INITIALIZATION ROUTINE
  10. FWAM    EQU    1923H    ;ADDRESS OF WORD CONTAINING ADDRESS OF FIRST
  11.             ; BYTE OF FREE MEMORY
  12. M1    EQU    0103H    ;NEW ENTRY PT FOR INTERP
  13. M1A    EQU    0116H    ;NEW INTERP RESTART ENTRY PT
  14. ;
  15.  
  16. BOOT    EQU    0000H    ;REBOOT ENTRY POINT
  17. CPM    EQU    0005H    ;CPM ENTRY POINT
  18.  
  19. TBUF    EQU    0080H    ;TRANSIENT PROGRAM BUFFER 
  20. TFCB    EQU    005CH    ;TRANSIENT PROGRAM FCB
  21.  
  22. OPEN    EQU    15    ;OPEN FUNCTION CODE
  23. READ    EQU    20    ;READ FUNCTION CODE
  24.  
  25. ;    IOJUMP TABLE.  STACK ADDRESS FILLED IN BY INITR
  26.     ORG    IOJUMP
  27. SPNT:    DW    0
  28. SUBAD:    DW    SUBS
  29.     JMP    CIN
  30.     JMP    COUT
  31.     JMP    STAT
  32.     JMP    RDR
  33. ;
  34. ;    JUMP TO INITIALIZATION ROUTINE
  35.     ORG    INIT
  36.     JMP    INITR
  37. ;
  38. ;    POINTER TO FIRST WORD FREE MEMORY
  39.     ORG    FWAM
  40.     DW    FREEMEM
  41. ;
  42. ;    USER SUBROUTINE POINTERS.  TERMINATED BY BYTE WITH VALUE 0FFH.
  43. SUBS:
  44.     DB    1    ;SUBROUTINE #1
  45.     DW    SUB1    ;START ADDR SUBROUTINE #1
  46.     DB    2    ;SUBROUTINE #2
  47.     DW    SUB2    ;START ADDR SUBROUTINE #2
  48.     DB    0FFH    ;END OF SUBROUTINE TABLE
  49. ;
  50. ;**********************************************************
  51. ;    PUT SP ADDRESS TO SPACE BETWEEN VEND AND IOJUMP
  52. INITR:    LHLD    6    ;LOAD FBASE ADDR.  CCP WILL BE OVERLAID
  53.     MOV    A,H
  54.     SBI    20H    ;GET CBASE ADDRESS
  55.     MOV    H,A
  56.     SHLD    SPNT
  57.  
  58.     LXI    D,TFCB    ;OPEN PROGRAM FILE
  59.     CALL    FOPEN
  60.     JC    ERR
  61.  
  62.     JMP    M1        ;LLL INITIALIZE ENTRY POINT
  63.                 ;CAN USE M1A FOR RE-ENTRY TO
  64.                 ;OLD PROGRAM
  65. ;************************************************************
  66. ;CP/M ENTRY ROUTINES
  67.  
  68. ;
  69. ;CIN RETURNS CHARACTER WITH HIGH BIT SET
  70. ;IN B REGISTER.  LLLFP SAVES B&C
  71. CIN:    PUSH    PSW
  72.     PUSH    H
  73.     PUSH    D
  74.     MVI    C,1
  75.     CALL    CPM
  76. ;   CHECK FOR CONTROL-C AND RETURN TO CPM IF FOUND
  77.     ANI    7FH
  78.     CPI    03
  79.     JNZ    RTN
  80.     JMP    0
  81. RTN:
  82.     ORI    80H
  83.     POP    D
  84.     POP    H
  85.     MOV    B,A
  86.     POP    PSW
  87.     RET
  88. ;
  89. ;COUT ACCEPTS CHARACTER IN A
  90. COUT:    PUSH    H
  91.     PUSH    D
  92.     PUSH    B
  93.     ANI    7FH
  94.     MOV    E,A
  95.     MVI    C,2
  96.     CALL    CPM
  97.     POP    B
  98.     POP    D
  99.     POP    H
  100.     RET
  101. ;
  102. ;STAT CHECKS LEAST SIGN. BIT OF A, SAME CONVENTION
  103. ;AS CP/M
  104. STAT:    PUSH    H
  105.     PUSH    D
  106.     PUSH    B
  107.     MVI    C,11
  108.     CALL    CPM
  109.     POP    B
  110.     POP    D
  111.     POP    H
  112.     RET
  113. ;
  114. ;  DISK READ INTERFACE.  CONTROL TRANSFERRED HERE BY
  115. ;    "PTAPE" CONSOLE COMMAND.
  116. RDR:    PUSH    H
  117.     PUSH    D
  118.     PUSH    B
  119.     CALL    GETBT
  120.     ORI    80H
  121.     POP    B
  122.     POP    D
  123.     POP    H
  124.     RET
  125.  
  126. ERR:    LXI    D,ERMSG
  127.     MVI    C,09H    ;WRITE MSG
  128.     CALL    CPM
  129.     JMP    BOOT
  130.  
  131.  
  132. ;********************************;
  133. ;           F O P E N            ;
  134. ;  ROUTINE TO OPEN A DISK FILE   ;
  135. ;                                ;
  136. ;  INPUT:     DE=A(FCB)          ;
  137. ; OUTPUT:     CARRY=ERROR        ;
  138. ;********************************;
  139.  
  140. FOPEN:    MVI    C,OPEN    ;OPEN CODE
  141.     CALL    CPM    ;ISSUE OPEN
  142.     CPI    0FFH    ;ERROR?
  143.     JZ    FOERR    ;YES
  144.     XRA    A    ;CLEAR CARRY
  145.     RET
  146. FOERR:    STC
  147.     RET
  148.  
  149.  
  150. ;********************************;
  151. ;            G E T B T           ;
  152. ;   ROUTINE TO READ A BYTE       ;
  153. ;                                ;
  154. ;  OUTPUTS:     A=BYTE           ;
  155. ;               CARRY=ERROR      ;
  156. ;********************************;
  157.  
  158. GETBT:    LXI    H,TBUF+128
  159.     XCHG        ;BUFFER END ADDR. IN DE
  160.     LHLD    INPTR    ;CURRENT POINTER IN HL
  161.     CALL    CPHL    ;TEST FOR END OF BUFFER
  162.     JZ    GETB2    ;YES, READ
  163. GETB1:    MOV    A,M    ;GET BYTE
  164.     CPI    EOF    ;DONE?
  165.     JZ    M1A
  166.     INX    H    ;BUMP POINTER
  167.     SHLD    INPTR    ;SAVE POINTER
  168.     ORA    A    ;RESET CARRY
  169.     RET
  170. GETB2:    MVI    C,READ    ;READ CODE
  171.     LXI    D,TFCB    ;FCB ADDRESS
  172.     CALL    CPM    ;ISSUE READ
  173.     CPI    00    ;ERROR?
  174.     JNZ    IERR    ;YES
  175.     LXI    H,TBUF    ;RESET BUFFER POINTER
  176.     SHLD    INPTR
  177.     JMP    GETB1    ;CONTINUE
  178. IERR:    STC
  179.     RET
  180.  
  181. ;********************************;
  182. ;   MISCELLANEOUS SUBROUTINES    ;
  183. ;********************************;
  184.  
  185. ;********************************;
  186. ;             C P H L            ;
  187. ;  ROUTINE TO COMPARE HL VS DE   ;
  188. ;********************************;
  189.  
  190. CPHL:    MOV    A,H
  191.     CMP    D
  192.     RNZ
  193.     MOV    A,L
  194.     CMP    E
  195.     RET
  196.  
  197. ;********************************;
  198. ;             D A T A            ;
  199. ;********************************;
  200.  
  201. ERMSG:    DB    'ERROR',0DH,0AH,'$'
  202.     DS    32
  203. INPTR:    DW    TBUF+128;INPUT POINTER
  204. DECWRK:    DB    '000'
  205. ;
  206. SUB1:        ;RETURN TO CPM.  TO CALL FROM BASIC PROGRAM, SAY CALL (1).
  207.     JMP    0
  208. SUB2:
  209.     ORG    FREEMEM
  210.