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

  1. ; MONITOR TO INTERFACE PILOT TO CPM
  2. ;   BY JIF  10/24/77
  3. ;   WITH DISK CODE LIFTED FROM PRINT PROGRAM WRITTEN BY JK
  4. ;
  5. SYSDAT:    EQU    0E00H    ; PILOT TABLE
  6. APTR:    EQU    SYSDAT+1CH ; LAST WORD OF MEMORY AVAILABLE TO PILOT
  7.                 ; NOTE: THIS BYTE GETS CHANGED
  8. PBUFB:    EQU    1100H    ; BEGINNING OF SPACE AVAILABLE FOR PILOT PROGRAMS
  9. ;JUMP TABLE ADDED AT BEGIN OF PILOT SO MONITOR CAN ACCESS ROUTINES IN PILOT
  10. ORIGN:    EQU    0100H
  11. BASIC:    EQU    ORIGN+6
  12. INTR:    EQU    ORIGN+9H
  13.  
  14. BOOT    EQU    0    ;REBOOT ENTRY POINT
  15. CPM    EQU    5    ;CPM ENTRY POINT
  16.  
  17. TBUF    EQU    80H    ;TRANSIENT PROGRAM BUFFER
  18. TFCB    EQU    5CH    ;TRANSIENT PROGRAM FCB
  19.  
  20. OPEN    EQU    15    ;OPEN FUNCTION CODE
  21. READ    EQU    20    ;READ FUNTION CODE
  22.  
  23. ;************************************************
  24. ;                                               ;
  25. ;NOTE:  FROM HERE TO NEXT LINE OF STARS,    ;
  26. ;        ENTRIES MUST STAY IN PLACE.  THEY ARE    ;
  27. ;        REFERENCED IN PILOT PROGRAMS        ;
  28.     
  29.     
  30.     ORG    1000H
  31.     JMP    INITL
  32. BUFAD:    DW    0
  33.  
  34. JMPTAB:
  35. CI:    JMP    CHI    ; CONSOLE INPUT
  36. CO:    JMP    CHO    ; CONSOLE OUTPUT
  37. RI:    JMP    RDSK    ; USED BY "LOAD" COMMAND
  38. LO:    JMP    CHO    ; USED BY "PRINT" COMMAND
  39. PO:    JMP    CHO    ; USED BY "SAVE" COMMAND
  40. EXIT:    JMP    BOOT
  41. EDIT:    JMP    BOOT    ; ACCESSES ROUTINE TO EDIT PILOT PROGRAMS IN MEMORY
  42. ASCAN:    JMP    BASIC    ; ACCESSES INTERPRETER FOR COMMAND NOT
  43.             ; RECOGNIZED BY PILOT.  NOT IMPLEMENTED.
  44.  
  45. ;************************************************
  46. ;                        ;
  47. ;  INITIALIZE PILOT DATA AND OPEN DISK FILE    ;
  48. ;                        ;
  49. ;************************************************
  50. INITL:
  51.     LHLD    6
  52.     DCX    H    ; CCP WILL BE OVERLAID
  53.     SHLD    BUFAD
  54.     DCX    H
  55.     SHLD    APTR
  56. ;  OPEN DISK FILE
  57.     LXI    D,TFCB
  58.     CALL    FOPEN
  59.     JC    ERR
  60.     RET
  61.  
  62. ;************************************************
  63. ;                                               ;
  64. ;  CPM ACCESS ROUTINES USED BY PILOT        ;
  65. ;                                               ;
  66. ;*************************************************
  67. CHI:    ; INPUT BYTE FROM CONSOLE
  68.     PUSH    B
  69.     PUSH    D
  70.     PUSH    H
  71.  
  72.     MVI    C,1
  73.     CALL    CPM    ; CHR RETURNED IN A
  74.     ANI    07FH
  75.  
  76.     POP    H
  77.     POP    D
  78.     POP    B
  79.     RET
  80.  
  81. CHO:    ; OUTPUT BYTE TO CONSOLE
  82.     PUSH    PSW    ; PILOT EXPECTS ALL REGISTERS TO BE RETURNED INTACT
  83.     PUSH    D
  84.     PUSH    H
  85.     PUSH    B
  86.  
  87.     MVI    C,11    ; RETURNS NON ZERO ACCUM IF READY
  88.     CALL    CPM
  89.     ORA    A
  90.     JZ    CHO1    ; THEN CONTINUE
  91.     MVI    C,1
  92.     CALL    CPM
  93.     ANI    07FH
  94.     CPI    1AH    ; IF CNTRL/Z
  95.     JZ    INTEX    ; THEN INTERRUPT
  96. CHO1:
  97.     POP    B
  98.     PUSH    B
  99.     MOV    E,C
  100.     MVI    C,2
  101.     CALL    CPM
  102.  
  103.     POP    B
  104.     POP    H
  105.     POP    D
  106.     POP    PSW
  107.     RET
  108. INTEX:
  109.     POP    B
  110.     POP    H
  111.     POP    D
  112.     POP    PSW
  113.     JMP    INTR
  114.  
  115. ;************************************************
  116. ;                        ;
  117. ;  PILOT "LOAD" COMMAND IN SIGN ON SEQUENCE    ;
  118. ;  COMES HERE TO READ PROGRAM FROM DISK        ;
  119. ;                        ;
  120. ;************************************************
  121. ;
  122. RDSK:
  123.     PUSH    B
  124.     PUSH    D
  125.     PUSH    H
  126. LP:    CALL    GETBT
  127.     CPI    0AH    ; PILOT DOESN'T LIKE <LF>, SO DISCARD
  128.     JZ    LP
  129.     POP    H
  130.     POP    D
  131.     POP    B
  132.     RET
  133.  
  134. ;************************************************
  135. ;                        ;
  136. ;  DISK ROUTINES                ;
  137. ;                        ;
  138. ;************************************************
  139. ERR:    LXI    D,ERMSG
  140.     MVI    C,09H    ;WRITE MSG
  141.     CALL    CPM
  142.     JMP    BOOT
  143.  
  144.  
  145. ;********************************;
  146. ;           F O P E N            ;
  147. ;  ROUTINE TO OPEN A DISK FILE   ;
  148. ;                                ;
  149. ;  INPUT:     DE=A(FCB)          ;
  150. ; OUTPUT:     CARRY=ERROR        ;
  151. ;********************************;
  152.  
  153. FOPEN:    MVI    C,OPEN    ;OPEN CODE
  154.     CALL    CPM    ;ISSUE OPEN
  155.     CPI    0FFH    ;ERROR?
  156.     JZ    FOERR    ;YES
  157.     XRA    A    ;CLEAR CARRY
  158.     RET
  159. FOERR:    STC
  160.     RET
  161.  
  162.  
  163. ;********************************;
  164. ;            G E T B T           ;
  165. ;   ROUTINE TO READ A BYTE       ;
  166. ;                                ;
  167. ;  OUTPUTS:     A=BYTE           ;
  168. ;               CARRY=ERROR      ;
  169. ;********************************;
  170.  
  171. GETBT:    LXI    H,TBUF+128
  172.     XCHG        ;BUFFER END ADDR. IN DE
  173.     LHLD    INPTR    ;CURRENT POINTER IN HL
  174.     CALL    CPHL    ;TEST FOR END OF BUFFER
  175.     JZ    GETB2    ;YES, READ
  176. GETB1:    MOV    A,M    ;GET BYTE
  177.     INX    H    ;BUMP POINTER
  178.     SHLD    INPTR    ;SAVE POINTER
  179.     ORA    A    ;RESET CARRY
  180.     RET
  181. GETB2:    MVI    C,READ    ;READ CODE
  182.     LXI    D,TFCB    ;FCB ADDRESS
  183.     CALL    CPM    ;ISSUE READ
  184.     CPI    00    ;ERROR?
  185.     JNZ    IERR    ;YES
  186.     LXI    H,TBUF    ;RESET BUFFER POINTER
  187.     SHLD    INPTR
  188.     JMP    GETB1    ;CONTINUE
  189. IERR:    STC
  190.     RET
  191.  
  192. ;********************************;
  193. ;   MISCELLANEOUS SUBROUTINES    ;
  194. ;********************************;
  195.  
  196. ;********************************;
  197. ;             C P H L            ;
  198. ;  ROUTINE TO COMPARE HL VS DE   ;
  199. ;********************************;
  200.  
  201. CPHL:    MOV    A,H
  202.     CMP    D
  203.     RNZ
  204.     MOV    A,L
  205.     CMP    E
  206.     RET
  207.  
  208. ;********************************;
  209. ;             D A T A            ;
  210. ;********************************;
  211.  
  212. ERMSG:    DB    'ERROR',0DH,0AH,'$'
  213.     DS    32
  214. INPTR:    DW    TBUF+128;INPUT POINTER
  215. DECWRK:    DB    '000'
  216.     ORG    PBUFB
  217. PBUFF:    DB    1
  218.