home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol007 / mem-map.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  4.2 KB  |  140 lines

  1. ;***********************************************************************
  2. ;      MICROCOSM MEMORY MAP DISPLAY PROGRAM VERSION 1.0  (C) 1979
  3. ;***********************************************************************
  4. ;            (revised 5/5/80)
  5. ;
  6. ; COPYRIGHT (C) 1979 ,BY MICROCOSM.ALL RIGHTS RESERVED.NO PART MAY BE
  7. ; REPRODUCED,TRANSMITTED,TRANSCRIBED ,STORED IN RETRIEVAL SYSTEM,  OR
  8. ; TRANSLATED INTO ANY LANGUAGE OR  COMPUTER LANGUAGE, IN ANY FORM  OR
  9. ; BY ANY MEANS,ELECTRONIC,MECHANICAL,MAGNETIC,OPTICAL,CHEMICAL,MANUAL
  10. ; OR  OTHERWISE,  WITHOUT THE PRIOR WRITTEN  PERMISSION OF MICROCOSM,
  11. ; 3055 WACO ST.,SIMI VALLEY,CALIFORNIA 93063.
  12. ;
  13. ;                           DISCLAIMER
  14. ;                           ==========
  15. ;
  16. ; MICROCOSM  MAKES NO REPRESENTATION OR WARRANTIES WITH RESPECT TO THE
  17. ; CONTENTS HEROF AND SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES  OF
  18. ; MERCHANTABILITY  OR  FITNESS FOR ANY PARTICULAR PURPOSE.   FURTHER ,
  19. ; MICROCOSM  RESERVES THE  RIGHT TO  REVISE AND TO   MAKE CHANGES FROM
  20. ; TIME TO  TIME IN THE  CONTENT HEREOF WITHOUT OBLIGATION OF MICROCOSM
  21. ; TO NOTIFY ANY PERSON OF SUCH REVISION OR CHANGES.
  22. ;
  23. ;************************************************************************
  24. ;
  25. ;05/05/80 MODIFIED TO WAIT FOR RETURN TO START SO
  26. ;      DISKS CAN BE REMOVED. (THIS IS TO PREVENT
  27. ;      POSSIBILITY OF DISK WRITES IN MEMORY-MAPPED
  28. ;      DISK CONTROLLER SYSTEMS). KEITH PETERSEN, W8SDZ
  29. ;
  30. ;
  31.     ORG    00100H
  32. ;
  33. ;
  34. ;
  35. BDOS    EQU    5    ;BDOS ENTRY
  36. CHIF    EQU    1    ;CP/M INPUT CHARACTER FUNCTION
  37. CHRF    EQU    2    ;CP/M PRINT CHARACTER FUNCTION
  38. PRNF    EQU    9    ;CP/M PRINT CHARACTER STRING FUNCTION
  39. CR    EQU    00DH    ;CARRIAGE-RETURN CHARACTER
  40. LF    EQU    00AH    ;LINE-FEED CHARACTER
  41. ;
  42. ;
  43. ;
  44. MAP:    LXI    H,0    ;SET-UP STACK
  45.     DAD    SP    ;ENTRY STACK POINTER FROM CP/M CCP
  46.     SHLD    OLDSP    ;SAVE IT
  47.     LXI    SP,STACK    ;SET STACK TO LOCAL STACK AREA
  48. GETIT:    MVI    C,PRNF    ;OUTPUT "PRESS RETURN TO START"
  49.     LXI    D,STRMSG
  50.     CALL    BDOS
  51.     MVI    C,CHIF    ;GET CHARACTER
  52.     CALL    BDOS
  53.     CPI    CR    ;CARRIAGE RETURN?
  54.     JNZ    GETIT    ;NOPE, TRY AGAIN
  55.     CALL    CRLF    ;KEEP IT NEAT
  56.     MVI    C,PRNF    ;OUTPUT "BLOCK LOCATION"
  57.     LXI    D,BLKMSG
  58.     CALL    BDOS
  59.     LXI    H,0    ;POINT TO BLOCK 0
  60.     MVI    B,1    ;"ITEMS TO A LINE" COUNTER
  61. MAP1:    MVI    E,'M'    ;INDICATE "M" FOR RAM
  62.     MOV    A,M    ;GET FIRST BYTE OF BLOCK
  63.     CMA        ;INVERT IT
  64.     MOV    M,A    ;TRY TO MODIFY MEMORY
  65.     CMP    M    ;WAS MEMORY MODIFIED?
  66.     CMA        ;RESTORE A REG. TO INITIALLY READ VALUE
  67.     MOV    M,A    ;RESTORE MEMORY
  68.     JNZ    MAP2    ;SKIP,IF NOT RAM
  69.     CMP    M    ;TEST IF RAM FOR SURE
  70.     JZ    PRINT    ;YUP,IT'S RAM
  71. MAP2:    MVI    E,'P'    ;INDICATE "P" FOR PROM
  72. MAP3:    MVI    A,0FFH    ;ABSENCE OF MEMORY IS ALL ONE'S
  73.     CMP    M    ;TEST FOR NO MEMORY
  74.     JNZ    PRINT    ;YUP,IT'S PROM
  75.     INR    L    ;DO CHECK ON NEXT BYTE
  76.     XRA    A    ;CLEAR A REG. FOR 256 BYTE BLOCK COUNTER
  77.     CMP    L    ;TEST IF BLOCK CHECK DONE
  78.     JNZ    MAP3    ;LOOP 256 TIMES
  79.     MVI    E,'.'    ;INDICATE "." FOR NO MEMORY
  80. PRINT:    MVI    L,0    ;CLEAR LS BYTE OF MEMORY POINTER
  81.     DCR    B    ;COUNT ITEMS TO A LINE
  82.     JNZ    NLINE    ;SKIP IF NOT A NEW LINE
  83.     MVI    B,16    ;16 ITEMS TO A LINE
  84.     CALL    CRLF    ;OUTPUT "CR/LF"
  85.     CALL    HEXO    ;OUTPUT BLOCK ADDRESS
  86. NLINE:    MVI    A,' '    ;OUTPUT A SPACE CHARACTER
  87.     CALL    PCHAR
  88.     MOV    A,E    ;GET MEMORY TYPE CHARACTER
  89.     CALL    PCHAR    ;PRINT IT
  90.     INR    H    ;BUMP FOR NEXT BLOCK
  91.     JNZ    MAP1    ;CONTINUE UNTIL LAST BLOCK
  92.     CALL    CRLF    ;KEEP IT NEAT FOR RETURN TO CP/M
  93.     LHLD    OLDSP    ;GET OLD STACK POINTER
  94.     SPHL        ;RESTORE IT
  95.     RET        ;STACK POINTER CONTAINS CCP'S STACK LOCATION
  96. ;
  97. ;
  98. ;
  99. HEXO:    MOV    C,H    ;GET MS BYTE
  100.     CALL    HEXO1    ;OUTPUT MS BYTE
  101.     MOV    C,L    ;GET LS BYTE
  102. HEXO1:    MOV    A,C    ;GET BYTE TO BE CONVERTED
  103.     RAR ! RAR ! RAR ! RAR    ;ROTATE UPPER NIBBLE
  104.     CALL    HEXO2    ;OUTPUT UPPER NIBBLE
  105.     MOV    A,C
  106. HEXO2:    ANI    00FH    ;MASK UPPER NIBBLE
  107.     CPI    10    ;TEST IF >10
  108.     JC    HEXO3    ;SKIP IF <10
  109.     ADI    7    ;ADJUST ASCII
  110. HEXO3:    ADI    030H    ;ADD ASCII BIAS
  111. PCHAR:    PUSH H ! PUSH D ! PUSH B ! PUSH PSW
  112.     MVI    C,CHRF    ;DO CP/M PRINT CHARACTER FUNCTION
  113.     MOV    E,A    ;CHARACTER TO E REG.
  114.     CALL    BDOS    ;LET CP/M DO THE WORK
  115.     POP PSW ! POP B ! POP D ! POP H
  116.     RET
  117. ;
  118. ;
  119. ;
  120. CRLF:    MVI    A,CR    ;PRINT "CARRIAGE-RETURN"
  121.     CALL    PCHAR
  122.     MVI    A,LF    ;PRINT "LINE-FEED"
  123.     CALL    PCHAR
  124.     RET
  125. ;
  126. ;
  127. ;
  128. BLKMSG    DB    CR,LF,'     0 1 2 3 4 5 6 7 8 9 A B C D E F$'
  129. ;
  130. STRMSG    DB    'REMOVE DISKS & PRESS RETURN TO START > $'
  131. ;
  132. ;
  133. OLDSP    DS    2    ;ENTRY STACK POINTER VALUE FROM CP/M CCP
  134.     DS    32    ;RESERVE 16 LEVEL STACK
  135. STACK    EQU    $
  136. ;
  137. ;
  138. ;
  139.     END
  140.