home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / sysutl / iomap.aqm / IOMAP.ASM
Encoding:
Assembly Source File  |  1985-02-10  |  2.5 KB  |  104 lines

  1. ;***********************************************************************
  2. ;        MICROCOSM I/O MAP DISPLAY PROGRAM VERSION 1.1  (C) 1979
  3. ;***********************************************************************
  4.     ORG    00100H
  5. ;
  6. ;
  7. ;
  8. TRUE    EQU    0FFFFH        ;DEFINE TRUE
  9. FALSE    EQU    NOT TRUE    ;DEFINE FALSE
  10. TARBEL    EQU    FALSE        ;DEFINE TARBELL DISK CONTROLLER
  11.  
  12. BDOS    EQU    5    ;BDOS ENTRY
  13. CHRF    EQU    2    ;CP/M PRINT CHARACTER FUNCTION
  14. PRNF    EQU    9    ;CP/M PRINT CHARCTER STRING FUNCTION
  15. CR    EQU    00DH    ;CARRIAGE-RETURN CHARACTER
  16. LF    EQU    00AH    ;LINE-FEED CHARACTER
  17. ;
  18. ;
  19. ;
  20. MAP:    LXI    H,0    ;SET-UP STACK
  21.     DAD    SP    ;ENTRY STACK POINTER FROM CP/M CCP
  22.     SHLD    OLDSP    ;SAVE IT
  23.     LXI    SP,STACK    ;SET STACK TO LOCAL STACK AREA
  24.     CALL    CRLF    ;KEEP IT NEAT
  25.     MVI    C,PRNF    ;OUTPUT "PORT LOCATION"
  26.     LXI    D,PRTMSG
  27.     CALL    BDOS
  28.     MVI    B,1    ;"ITEMS TO A LINE" COUNTER
  29.     MVI    L,0    ;POINT TO PORT 00
  30.     JMP    PRINT
  31. PORT:    IN    000H    ;GET IT
  32.     MOV    C,A    ;SAVE IN C REG.
  33.     CPI    0FFH    ;INACTIVE PORT?
  34.     JZ    INACT    ;PRINT ".", IF INACTIVE
  35.     CALL    HEXO1    ;PRINT PORT CONTENT
  36.     JMP    NEXT    ;TRY NEXT PORT
  37. INACT:    MVI    A,' '    ;OUTPUT A SPACE CHARACTER
  38.     CALL    PCHAR
  39.     MVI    A,'.'    ;OUTPUT A "." CHARACTER
  40.     CALL    PCHAR
  41. NEXT:    INR    L    ;BUMP FOR NEXT PORT
  42.     JZ    QUIT    ;CONTINUE UNTIL LAST PORT
  43. PRINT:    DCR    B    ;COUNT ITEMS TO A LINE
  44.     JNZ    NLINE    ;SKIP IF NOT A NEW LINE
  45.     MVI    B,16    ;16 ITEMS TO A LINE
  46.     CALL    CRLF
  47.     CALL    HEXO    ;OUTPUT NEXT PORT ADDRESS
  48. NLINE:    MVI    A,' '    ;OUTPUT A SPACE CHARACTER
  49.     CALL    PCHAR
  50.     MOV    A,L    ;GET PORT NUMBER
  51.  
  52.     IF TARBEL
  53.     CPI    0FCH    ;TARBELL DISK "WAIT" PORT?
  54.     JZ    INACT    ;SKIP IF SO
  55.     ENDIF
  56.  
  57.     STA    PORT+1    ;MODIFY PORT NUMBER
  58.     JMP    PORT    ;DO NEXT PORT
  59. QUIT:    CALL    CRLF    ;KEEP IT NEAT FOR RETURN TO CP/M
  60.     LHLD    OLDSP    ;GET OLD STACK POINTER
  61.     SPHL        ;RESTORE IT
  62.     RET        ;STACK POINTER CONTAINS CCP'S STACK LOCATION
  63. ;
  64. ;
  65. ;
  66. HEXO:    MOV    C,L    ;GET PORT ADDRESS
  67. HEXO1:    MOV    A,C    ;GET BYTE TO BE CONVERTED
  68.     RAR ! RAR ! RAR ! RAR    ;ROTATE UPPER NIBBLE
  69.     CALL    HEXO2    ;OUTPUT UPPER NIBBLE
  70.     MOV    A,C
  71. HEXO2:    ANI    00FH    ;MASK UPPER NIBBLE
  72.     CPI    10    ;TEST IF >10
  73.     JC    HEXO3    ;SKIP IF <10
  74.     ADI    7    ;ADJUST ASCII
  75. HEXO3:    ADI    030H    ;ADD ASCII BIAS
  76. PCHAR:    PUSH H ! PUSH D ! PUSH B ! PUSH PSW
  77.     MVI    C,CHRF    ;DO CP/M PRINT CHARACTER FUNCTION
  78.     MOV    E,A    ;CHARACTER TO E REG.
  79.     CALL    BDOS    ;LET CP/M DO THE WORK
  80.     POP PSW ! POP B ! POP D ! POP H
  81.     RET
  82. ;
  83. ;
  84. ;
  85. CRLF:    MVI    A,CR    ;PRINT "CARRIAGE-RETURN"
  86.     CALL    PCHAR
  87.     MVI    A,LF    ;PRINT "LINE-FEED"
  88.     CALL    PCHAR
  89.     RET
  90. ;
  91. ;
  92. ;
  93. PRTMSG    DB    '   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F$'
  94. ;
  95. ;
  96. ;
  97. OLDSP    DS    2    ;ENTRY STACK POINTER VALUE FROM CP/M CCP
  98.     DS    16    ;RESERVE 8 LEVEL STACK
  99. STACK    EQU    $
  100. ;
  101. ;
  102. ;
  103.     END
  104. LF