home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / sysutl / whoder1.aqm / WHODER1.ASM
Assembly Source File  |  1985-02-09  |  6KB  |  339 lines

  1. ;
  2. ;    WHODERE.ASM by R.H.JOHNSON
  3. ;    Modifications by BILL WOOD (New name WHODERE1.ASM)
  4. ;
  5. ;    What you say in secret,
  6. ;        shall be shouted from the house tops.
  7. ;
  8. ; An SAU to display sneaky Bios reads and writes.
  9. ;
  10. ;       A DEBUG PROGRAM FOR DISK READS AND WRITES
  11. ; This program will list all disk reads and writes to the
  12. ; CRT: (if CRT is TRUE) or to the LST: (if CRT is FALSE).
  13. ;
  14. ; N O T E :  This program runs in HI memory.
  15. ;         CP/M must be moved below HI memory to allow
  16. ;         room for this program. Set LOAD above CP/M.
  17. ;
  18. ;MODIFICATIONS:
  19. ;            ------------
  20. ;03/30/82
  21. ;    Added routine to locate the address of BIOS.
  22. ;    Added conditional for output to CRT: or LST: .
  23. ;    Removed LDIR macro and added subroutine LDIR
  24. ;    to move memory. Program will now assemble with
  25. ;    ASM.COM .
  26. ;    Made other minor changes to program.
  27. ;
  28. ;        Bill Wood , Mississauga, Ontario, Canada.
  29. ;            ------------
  30. ;
  31. ;
  32. FALSE    EQU    0
  33. TRUE    EQU    NOT FALSE
  34. ;
  35. LOAD    EQU    62    ;FREE MEMORY SPACE ABOVE CP/M (IN K)
  36. ;
  37. NEWBIOS EQU    (LOAD*1024)+1
  38. ;
  39. CRT    EQU    TRUE    ;OUTPUT TO CRT: IF TRUE (LST: IF FALSE)
  40. ;
  41. BASE    EQU    0
  42. BDOS    EQU    BASE+5
  43. CR    EQU    0DH
  44. LF    EQU    0AH
  45. ;
  46. ;
  47.     ORG    100H
  48. ;
  49. START:    LHLD    BASE+1     ;GET BIOS ADDRESS IN HL
  50.     LXI    B,18H     ;OFFSET TO SETDSK
  51.     DAD    B     ;ADD BC TO HL
  52.     SHLD    WASBIOS  ;STORE IT
  53.     LHLD    BASE+1     ;GET BIOS ADDRESS IN HL
  54.  ;
  55.     IF    CRT
  56.     LXI    B,9H     ;CONOUT (CRT:)
  57.     ENDIF
  58. ;
  59.     IF    NOT CRT
  60.     LXI    B,12     ;LIST    (LST:)
  61.     ENDIF
  62. ;
  63.     DAD    B     ;ADD BC TO HL
  64.     SHLD    OVRLAY+1 ;OVERLAY BIOS CALL +1
  65. ;
  66. ;    COPY PROGRAM TO HIGH CORE
  67.     LXI    H,PROGRAM
  68.     LXI    D,NEWBIOS
  69.     LXI    B,PROEND-PROGRAM
  70.     CALL    LDIR
  71. ;
  72. ;    COPY OLD BIOS JUMPS TO TABLE
  73.     LHLD    WASBIOS
  74.     LXI    D,OLDDSK
  75.     LXI    B,18
  76.     CALL    LDIR
  77. ;
  78. ;    COPY IN NEWBIOS TABLE
  79.     LHLD    WASBIOS
  80.     XCHG
  81.     LXI    H,SELDSK
  82.     LXI    B,18
  83.     CALL    LDIR
  84. ;
  85.     LXI    D,SIGNIN
  86.     MVI    C,9    ;PRINT STRING
  87.     CALL    BDOS
  88. ;    DONE
  89.     JMP    BASE
  90. ;
  91. ;
  92. WASBIOS:DS    2
  93. ;
  94. SIGNIN: DB    ' WHODERE1.ASM '
  95.     DB    ' VERSION 2.1 '
  96.     DB    ' 3/03/82  R.H.JOHNSON',CR,LF
  97.     DB    ' REV(1) BY BILL WOOD 03/30/82',CR,LF,LF
  98.     IF    CRT
  99.     DB    ' ALL DISK READS AND WRITES WILL DISPLAY ON CRT:',CR,LF,LF
  100.     ENDIF
  101.     IF    NOT CRT
  102.     DB    ' ALL DISK READS AND WRITES WILL DISPLAY ON LST:',CR,LF,LF
  103.     ENDIF
  104.     DB    '$'
  105. ;
  106. ;
  107. ;    MOVE MEMORY
  108. ;    HL=GET      DE=PUT     BC=COUNT
  109. ;
  110. LDIR:    MOV    A,B
  111.     ORA    C
  112.     RZ        ;RETURN IF COUNT IS 0
  113.     MOV    A,M    ;GET IT
  114.     INX    H
  115.     XCHG
  116.     MOV    M,A    ;PUT IT
  117.     INX    H
  118.     XCHG
  119.     DCX    B    ;COUNT
  120.     JMP    LDIR
  121. ;
  122. ;
  123. ;
  124. ;    BIOS OVERLAY TABLE
  125. ;
  126. SELDSK: JMP    NEWDSK
  127. SETTRK: JMP    NEWTRK
  128. SETSEC: JMP    NEWSEC
  129. SETDMA: JMP    NEWDMA
  130. SETRED: JMP    NEWRED
  131. SETWRT: JMP    NEWWRT
  132. ;
  133. ;
  134. ;    START OF RELOCATED CODE
  135. ;
  136. PROGRAM:EQU    $
  137. OFFSET: EQU    NEWBIOS-PROGRAM
  138. ;
  139. NEWDSK: EQU    $+OFFSET    ;CONVERT DISK # TO LETTER
  140.     PUSH    PSW        ;PUT IN TABLE,
  141.     MOV    A,C        ;AND DOIT
  142.     STA    TDISK
  143.     POP    PSW
  144.     JMP    OLDDSK
  145. ;
  146. NEWTRK: EQU    $+OFFSET    ;SEEK TO TRACK
  147.     PUSH    PSW        ;PUT IN TABLE,
  148.     MOV    A,C        ;AND DOIT
  149.     STA    TTRACK
  150.     POP    PSW
  151.     JMP    OLDTRK
  152. NEWSEC: EQU    $+OFFSET    ;SET SECTOR NUMBER
  153.     PUSH    PSW        ;PUT IN TABLE,
  154.     MOV    A,C        ;AND DOIT
  155.     STA    TSECT
  156.     POP    PSW
  157.     JMP    OLDSEC
  158. NEWDMA: EQU    $+OFFSET    ;SET START ADDRESS FOR I/O
  159.     PUSH    PSW        ;PUT IN TABLE,
  160.     MOV    A,B        ;AND DOIT
  161.     STA    TDMA
  162.     MOV    A,C
  163.     STA    TDMA+1    
  164.     POP    PSW
  165.     JMP    OLDDMA
  166. NEWRED: EQU    $+OFFSET    ;READ SELECTED SECTOR
  167.     PUSH    PSW        ;PUT IN TABLE, DISPLAY
  168.     MVI    A,'R'        ;AND DOIT
  169.     STA    OPCD
  170.     CALL    CNVERT
  171.     POP    PSW
  172.     JMP    OLDRED
  173. NEWWRT: EQU    $+OFFSET    ;WRITE SELECTED SECTOR
  174.     PUSH    PSW        ;PUT IN TABLE, DISPLAY
  175.     MVI    A,'W'        ;AND DOIT
  176.     STA    OPCD
  177.     CALL    CNVERT
  178.     POP    PSW
  179.     JMP    OLDWRT
  180. ;
  181. ; CONVERTS STRING POINTED TO BY HL AND PUTS
  182. ; RESULT IN MEMORY POINTED TO BY DE
  183. CNVERT: EQU    $+OFFSET
  184.     PUSH    H
  185.     PUSH    D
  186.     PUSH    B
  187.     LXI    H,TDISK
  188.     LXI    D,DISK
  189.     CALL    CVERT
  190. ;
  191.     LXI    H,TTRACK
  192.     LXI    D,TRACK
  193.     CALL    CVERT
  194. ;
  195.     LXI    H,TSECT
  196.     LXI    D,SECT
  197.     CALL    CVERT
  198. ;
  199.     LXI    H,TDMA
  200.     LXI    D,DMA
  201.     CALL    CVERT
  202. ;
  203.     LXI    H,TDMA+1
  204.     LXI    D,DMA+2
  205.     CALL    CVERT
  206. ;
  207.     LXI    H,TABSTG
  208.     CALL    MSG    
  209.     POP    B
  210.     POP    D
  211.     POP    H
  212.     RET
  213. ;
  214. ;
  215. CVERT:    EQU    $+OFFSET
  216.     MOV    A,M
  217.     ANI    0F0H
  218.     RRC
  219.     RRC
  220.     RRC
  221.     RRC    ;CONVERT THE HIGH NIBBLE FIRST
  222.     CALL    ASCII
  223.     STAX    D    
  224.     INX    D
  225.     MOV    A,M    ;STORE CHAR IN PRINT LINE
  226.     ANI    0FH
  227.     CALL    ASCII
  228.     STAX    D
  229.     RET        ;CONVERT LOW NIBBLE
  230. ;
  231. ;
  232. ;CONVERT A TO ASCII
  233. ;
  234. ASCII:    EQU    $+OFFSET
  235.     ADI    30H
  236.     CPI    '9'+1    ;FE 3A OPCODE
  237.     RM        
  238.     ADI    7
  239.     RET        ;A NOW IN ASCIIFORM
  240. ;
  241. ;PMSG STRING POINTED TO BY HL TO CONSOLE
  242. ;MSB OF 1 IN LAST CHARACTER SENDS CR,LF.
  243. ;ZERO WILL ALSO END STRING WITH NO CR,LF...
  244. ;
  245. ;
  246. MSG:    EQU    $+OFFSET
  247.     MOV    C,M    ;C=CHAR TO SEND TO CONSOLE
  248.     CALL    CONOUT
  249.     MOV    A,M
  250.     ANI    80H
  251.     JNZ    LFCR    ;LAST ONE IF MSB=1
  252.     INX    H
  253.     MOV    A,M
  254.     ORA    A    ;TEST CHAR
  255.     RZ        ;C8 OPCODE
  256.     JMP    MSG
  257. ;
  258. ;SEND CR,LF TO CONSOLE
  259. ;
  260. LFCR:    EQU    $+OFFSET
  261.     PUSH    B
  262.     MVI    C,0DH
  263.     CALL    CONOUT
  264.     MVI    C,0AH
  265.     CALL    CONOUT
  266.     POP    B
  267.     RET
  268. ;
  269. CONOUT: EQU    $+OFFSET
  270.     PUSH    H
  271.     PUSH    D
  272.     PUSH    B
  273.     MOV    A,C
  274.     ANI    7FH    ;STRIP HIGH BIT
  275.     MOV    C,A    ;PUT IT BACK IN C FOR BIOS
  276. OVRLAY: CALL    $-$    ;CALL BIOS (ADDRESS OVERLAYED)
  277.     POP    B
  278.     POP    D
  279.     POP    H
  280.     RET
  281. ;
  282. ;
  283. ;    OLD BIOS STORAGE
  284. OLDDSK: EQU    $+OFFSET
  285.     DB 0,0,0
  286. OLDTRK: EQU    $+OFFSET
  287.     DB 0,0,0
  288. OLDSEC: EQU    $+OFFSET
  289.     DB 0,0,0
  290. OLDDMA: EQU    $+OFFSET
  291.     DB 0,0,0
  292. OLDRED: EQU    $+OFFSET
  293.     DB 0,0,0
  294. OLDWRT: EQU    $+OFFSET
  295.     DB 0,0,0
  296. ;
  297. ;PRINT TABLE STORAGE
  298. TABSTG: EQU    $+OFFSET
  299.     DB    ' DSK- '
  300. ;
  301. DISK:    EQU    $+OFFSET
  302.     DB    20H,20H
  303.     DB    ' TRK- '
  304. ;
  305. TRACK:    EQU    $+OFFSET
  306.     DB    20H,20H
  307.     DB    ' SEC- '
  308. ;
  309. SECT:    EQU    $+OFFSET
  310.     DB    20H,20H
  311.     DB    ' DMA- '
  312. ;
  313. DMA:    EQU    $+OFFSET
  314.     DB    20H,20H,20H,20H
  315.     DB    ' OPCD-  '
  316. ;
  317. OPCD:    EQU    $+OFFSET
  318.     DB    20H,0A0H
  319. ;
  320. ;
  321. ;TEMP VALUE STORAGE
  322. ;
  323. TDISK:    EQU    $+OFFSET
  324.     DB    0
  325. TTRACK: EQU    $+OFFSET
  326.     DB    0
  327. TSECT:    EQU    $+OFFSET
  328.     DB    0
  329. TDMA:    EQU    $+OFFSET
  330.     DB    0,0
  331. TOPCD:    EQU    $+OFFSET
  332.     DB    0
  333. ;
  334. ;
  335. PROEND: EQU    $
  336. ;
  337. ;
  338.     END    START
  339.