home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / sysutl / memmap.asm < prev    next >
Assembly Source File  |  1994-07-13  |  3KB  |  107 lines

  1. ;***********************************************************************
  2. ;      MICROCOSM MEMORY MAP DISPLAY PROGRAM VERSION 1.0  (C) 1979
  3. ;***********************************************************************
  4. ;
  5. ;
  6.     ORG    00100H
  7. ;
  8. ;
  9. ;
  10. BDOS    EQU    5    ;BDOS ENTRY
  11. CHRF    EQU    2    ;CP/M PRINT CHARACTER FUNCTION
  12. PRNF    EQU    9    ;CP/M PRINT CHARCTER STRING FUNCTION
  13. CR    EQU    00DH    ;CARRIAGE-RETURN CHARACTER
  14. LF    EQU    00AH    ;LINE-FEED CHARACTER
  15. ;
  16. ;
  17. ;
  18. MAP:    LXI    H,0    ;SET-UP STACK
  19.     DAD    SP    ;ENTRY STACK POINTER FROM CP/M CCP
  20.     SHLD    OLDSP    ;SAVE IT
  21.     LXI    SP,STACK    ;SET STACK TO LOCAL STACK AREA
  22.     CALL    CRLF    ;KEEP IT NEAT
  23.     MVI    C,PRNF    ;OUTPUT "BLOCK LOCATION"
  24.     LXI    D,BLKMSG
  25.     CALL    BDOS
  26.     LXI    H,0    ;POINT TO BLOCK 0
  27.     MVI    B,1    ;"ITEMS TO A LINE" COUNTER
  28. MAP1:    MVI    E,'M'    ;INDICATE "M" FOR RAM
  29.     MOV    A,M    ;GET FIRST BYTE OF BLOCK
  30.     CMA        ;INVERT IT
  31.     MOV    M,A    ;TRY TO MODIFY MEMORY
  32.     CMP    M    ;WAS MEMORY MODIFIED?
  33.     CMA        ;RESTORE A REG. TO INITIALLY READ VALUE
  34.     MOV    M,A    ;RESTORE MEMORY
  35.     JNZ    MAP2    ;SKIP,IF NOT RAM
  36.     CMP    M    ;TEST IF RAM FOR SURE
  37.     JZ    PRINT    ;YUP,IT'S RAM
  38. MAP2:    MVI    E,'P'    ;INDICATE "P" FOR PROM
  39. MAP3:    MVI    A,0FFH    ;ABSENCE OF MEMORY IS ALL ONE'S
  40.     CMP    M    ;TEST FOR NO MEMORY
  41.     JNZ    PRINT    ;YUP,IT'S PROM
  42.     INR    L    ;DO CHECK ON NEXT BYTE
  43.     XRA    A    ;CLEAR A REG. FOR 256 BYTE BLOCK COUNTER
  44.     CMP    L    ;TEST IF BLOCK CHECK DONE
  45.     JNZ    MAP3    ;LOOP 256 TIMES
  46.     MVI    E,'.'    ;INDICATE "." FOR NO MEMORY
  47. PRINT:    MVI    L,0    ;CLEAR LS BYTE OF MEMORY POINTER
  48.     DCR    B    ;COUNT ITEMS TO A LINE
  49.     JNZ    NLINE    ;SKIP IF NOT A NEW LINE
  50.     MVI    B,16    ;16 ITEMS TO A LINE
  51.     CALL    CRLF    ;OUTPUT "CR/LF"
  52.     CALL    HEXO    ;OUTPUT BLOCK ADDRESS
  53. NLINE:    MVI    A,' '    ;OUTPUT A SPACE CHARACTER
  54.     CALL    PCHAR
  55.     MOV    A,E    ;GET MEMORY TYPE CHARACTER
  56.     CALL    PCHAR    ;PRINT IT
  57.     INR    H    ;BUMP FOR NEXT BLOCK
  58.     JNZ    MAP1    ;CONTINUE UNTIL LAST BLOCK
  59.     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,H    ;GET MS BYTE
  67.     CALL    HEXO1    ;OUTPUT MS BYTE
  68.     MOV    C,L    ;GET LS BYTE
  69. HEXO1:    MOV    A,C    ;GET BYTE TO BE CONVERTED
  70.     RAR ! RAR ! RAR ! RAR    ;ROTATE UPPER NIBBLE
  71.     CALL    HEXO2    ;OUTPUT UPPER NIBBLE
  72.     MOV    A,C
  73. HEXO2:    ANI    00FH    ;MASK UPPER NIBBLE
  74.     CPI    10    ;TEST IF >10
  75.     JC    HEXO3    ;SKIP IF <10
  76.     ADI    7    ;ADJUST ASCII
  77. HEXO3:    ADI    030H    ;ADD ASCII BIAS
  78. PCHAR:    PUSH H ! PUSH D ! PUSH B ! PUSH PSW
  79.     MVI    C,CHRF    ;DO CP/M PRINT CHARACTER FUNCTION
  80.     MOV    E,A    ;CHARACTER TO E REG.
  81.     CALL    BDOS    ;LET CP/M DO THE WORK
  82.     POP PSW ! POP B ! POP D ! POP H
  83.     RET
  84. ;
  85. ;
  86. ;
  87. CRLF:    MVI    A,CR    ;PRINT "CARRIAGE-RETURN"
  88.     CALL    PCHAR
  89.     MVI    A,LF    ;PRINT "LINE-FEED"
  90.     CALL    PCHAR
  91.     RET
  92. ;
  93. ;
  94. ;
  95. BLKMSG    DB    '     0 1 2 3 4 5 6 7 8 9 A B C D E F$'
  96. ;
  97. ;
  98. ;
  99. OLDSP    DS    2    ;ENTRY STACK POINTER VALUE FROM CP/M CCP
  100.     DS    16    ;RESERVE 8 LEVEL STACK
  101. STACK    EQU    $
  102. ;
  103. ;
  104. ;
  105.     END
  106. O A LINE" COUNTER
  107. MAP1:    MVI    E,'M'    ;INDICATE "M"