home *** CD-ROM | disk | FTP | other *** search
- ;
- ; WHODERE.ASM by R.H.JOHNSON
- ; Modifications by BILL WOOD (New name WHODERE1.ASM)
- ;
- ; What you say in secret,
- ; shall be shouted from the house tops.
- ;
- ; An SAU to display sneaky Bios reads and writes.
- ;
- ; A DEBUG PROGRAM FOR DISK READS AND WRITES
- ; This program will list all disk reads and writes to the
- ; CRT: (if CRT is TRUE) or to the LST: (if CRT is FALSE).
- ;
- ; N O T E : This program runs in HI memory.
- ; CP/M must be moved below HI memory to allow
- ; room for this program. Set LOAD above CP/M.
- ;
- ;MODIFICATIONS:
- ; ------------
- ;03/30/82
- ; Added routine to locate the address of BIOS.
- ; Added conditional for output to CRT: or LST: .
- ; Removed LDIR macro and added subroutine LDIR
- ; to move memory. Program will now assemble with
- ; ASM.COM .
- ; Made other minor changes to program.
- ;
- ; Bill Wood , Mississauga, Ontario, Canada.
- ; ------------
- ;
- ;
- FALSE EQU 0
- TRUE EQU NOT FALSE
- ;
- LOAD EQU 62 ;FREE MEMORY SPACE ABOVE CP/M (IN K)
- ;
- NEWBIOS EQU (LOAD*1024)+1
- ;
- CRT EQU TRUE ;OUTPUT TO CRT: IF TRUE (LST: IF FALSE)
- ;
- BASE EQU 0
- BDOS EQU BASE+5
- CR EQU 0DH
- LF EQU 0AH
- ;
- ;
- ORG 100H
- ;
- START: LHLD BASE+1 ;GET BIOS ADDRESS IN HL
- LXI B,18H ;OFFSET TO SETDSK
- DAD B ;ADD BC TO HL
- SHLD WASBIOS ;STORE IT
- LHLD BASE+1 ;GET BIOS ADDRESS IN HL
- ;
- IF CRT
- LXI B,9H ;CONOUT (CRT:)
- ENDIF
- ;
- IF NOT CRT
- LXI B,12 ;LIST (LST:)
- ENDIF
- ;
- DAD B ;ADD BC TO HL
- SHLD OVRLAY+1 ;OVERLAY BIOS CALL +1
- ;
- ; COPY PROGRAM TO HIGH CORE
- LXI H,PROGRAM
- LXI D,NEWBIOS
- LXI B,PROEND-PROGRAM
- CALL LDIR
- ;
- ; COPY OLD BIOS JUMPS TO TABLE
- LHLD WASBIOS
- LXI D,OLDDSK
- LXI B,18
- CALL LDIR
- ;
- ; COPY IN NEWBIOS TABLE
- LHLD WASBIOS
- XCHG
- LXI H,SELDSK
- LXI B,18
- CALL LDIR
- ;
- LXI D,SIGNIN
- MVI C,9 ;PRINT STRING
- CALL BDOS
- ; DONE
- JMP BASE
- ;
- ;
- WASBIOS:DS 2
- ;
- SIGNIN: DB ' WHODERE1.ASM '
- DB ' VERSION 2.1 '
- DB ' 3/03/82 R.H.JOHNSON',CR,LF
- DB ' REV(1) BY BILL WOOD 03/30/82',CR,LF,LF
- IF CRT
- DB ' ALL DISK READS AND WRITES WILL DISPLAY ON CRT:',CR,LF,LF
- ENDIF
- IF NOT CRT
- DB ' ALL DISK READS AND WRITES WILL DISPLAY ON LST:',CR,LF,LF
- ENDIF
- DB '$'
- ;
- ;
- ; MOVE MEMORY
- ; HL=GET DE=PUT BC=COUNT
- ;
- LDIR: MOV A,B
- ORA C
- RZ ;RETURN IF COUNT IS 0
- MOV A,M ;GET IT
- INX H
- XCHG
- MOV M,A ;PUT IT
- INX H
- XCHG
- DCX B ;COUNT
- JMP LDIR
- ;
- ;
- ;
- ; BIOS OVERLAY TABLE
- ;
- SELDSK: JMP NEWDSK
- SETTRK: JMP NEWTRK
- SETSEC: JMP NEWSEC
- SETDMA: JMP NEWDMA
- SETRED: JMP NEWRED
- SETWRT: JMP NEWWRT
- ;
- ;
- ; START OF RELOCATED CODE
- ;
- PROGRAM:EQU $
- OFFSET: EQU NEWBIOS-PROGRAM
- ;
- NEWDSK: EQU $+OFFSET ;CONVERT DISK # TO LETTER
- PUSH PSW ;PUT IN TABLE,
- MOV A,C ;AND DOIT
- STA TDISK
- POP PSW
- JMP OLDDSK
- ;
- NEWTRK: EQU $+OFFSET ;SEEK TO TRACK
- PUSH PSW ;PUT IN TABLE,
- MOV A,C ;AND DOIT
- STA TTRACK
- POP PSW
- JMP OLDTRK
- NEWSEC: EQU $+OFFSET ;SET SECTOR NUMBER
- PUSH PSW ;PUT IN TABLE,
- MOV A,C ;AND DOIT
- STA TSECT
- POP PSW
- JMP OLDSEC
- NEWDMA: EQU $+OFFSET ;SET START ADDRESS FOR I/O
- PUSH PSW ;PUT IN TABLE,
- MOV A,B ;AND DOIT
- STA TDMA
- MOV A,C
- STA TDMA+1
- POP PSW
- JMP OLDDMA
- NEWRED: EQU $+OFFSET ;READ SELECTED SECTOR
- PUSH PSW ;PUT IN TABLE, DISPLAY
- MVI A,'R' ;AND DOIT
- STA OPCD
- CALL CNVERT
- POP PSW
- JMP OLDRED
- NEWWRT: EQU $+OFFSET ;WRITE SELECTED SECTOR
- PUSH PSW ;PUT IN TABLE, DISPLAY
- MVI A,'W' ;AND DOIT
- STA OPCD
- CALL CNVERT
- POP PSW
- JMP OLDWRT
- ;
- ; CONVERTS STRING POINTED TO BY HL AND PUTS
- ; RESULT IN MEMORY POINTED TO BY DE
- CNVERT: EQU $+OFFSET
- PUSH H
- PUSH D
- PUSH B
- LXI H,TDISK
- LXI D,DISK
- CALL CVERT
- ;
- LXI H,TTRACK
- LXI D,TRACK
- CALL CVERT
- ;
- LXI H,TSECT
- LXI D,SECT
- CALL CVERT
- ;
- LXI H,TDMA
- LXI D,DMA
- CALL CVERT
- ;
- LXI H,TDMA+1
- LXI D,DMA+2
- CALL CVERT
- ;
- LXI H,TABSTG
- CALL MSG
- POP B
- POP D
- POP H
- RET
- ;
- ;
- CVERT: EQU $+OFFSET
- MOV A,M
- ANI 0F0H
- RRC
- RRC
- RRC
- RRC ;CONVERT THE HIGH NIBBLE FIRST
- CALL ASCII
- STAX D
- INX D
- MOV A,M ;STORE CHAR IN PRINT LINE
- ANI 0FH
- CALL ASCII
- STAX D
- RET ;CONVERT LOW NIBBLE
- ;
- ;
- ;CONVERT A TO ASCII
- ;
- ASCII: EQU $+OFFSET
- ADI 30H
- CPI '9'+1 ;FE 3A OPCODE
- RM
- ADI 7
- RET ;A NOW IN ASCIIFORM
- ;
- ;PMSG STRING POINTED TO BY HL TO CONSOLE
- ;MSB OF 1 IN LAST CHARACTER SENDS CR,LF.
- ;ZERO WILL ALSO END STRING WITH NO CR,LF...
- ;
- ;
- MSG: EQU $+OFFSET
- MOV C,M ;C=CHAR TO SEND TO CONSOLE
- CALL CONOUT
- MOV A,M
- ANI 80H
- JNZ LFCR ;LAST ONE IF MSB=1
- INX H
- MOV A,M
- ORA A ;TEST CHAR
- RZ ;C8 OPCODE
- JMP MSG
- ;
- ;SEND CR,LF TO CONSOLE
- ;
- LFCR: EQU $+OFFSET
- PUSH B
- MVI C,0DH
- CALL CONOUT
- MVI C,0AH
- CALL CONOUT
- POP B
- RET
- ;
- CONOUT: EQU $+OFFSET
- PUSH H
- PUSH D
- PUSH B
- MOV A,C
- ANI 7FH ;STRIP HIGH BIT
- MOV C,A ;PUT IT BACK IN C FOR BIOS
- OVRLAY: CALL $-$ ;CALL BIOS (ADDRESS OVERLAYED)
- POP B
- POP D
- POP H
- RET
- ;
- ;
- ; OLD BIOS STORAGE
- OLDDSK: EQU $+OFFSET
- DB 0,0,0
- OLDTRK: EQU $+OFFSET
- DB 0,0,0
- OLDSEC: EQU $+OFFSET
- DB 0,0,0
- OLDDMA: EQU $+OFFSET
- DB 0,0,0
- OLDRED: EQU $+OFFSET
- DB 0,0,0
- OLDWRT: EQU $+OFFSET
- DB 0,0,0
- ;
- ;PRINT TABLE STORAGE
- TABSTG: EQU $+OFFSET
- DB ' DSK- '
- ;
- DISK: EQU $+OFFSET
- DB 20H,20H
- DB ' TRK- '
- ;
- TRACK: EQU $+OFFSET
- DB 20H,20H
- DB ' SEC- '
- ;
- SECT: EQU $+OFFSET
- DB 20H,20H
- DB ' DMA- '
- ;
- DMA: EQU $+OFFSET
- DB 20H,20H,20H,20H
- DB ' OPCD- '
- ;
- OPCD: EQU $+OFFSET
- DB 20H,0A0H
- ;
- ;
- ;TEMP VALUE STORAGE
- ;
- TDISK: EQU $+OFFSET
- DB 0
- TTRACK: EQU $+OFFSET
- DB 0
- TSECT: EQU $+OFFSET
- DB 0
- TDMA: EQU $+OFFSET
- DB 0,0
- TOPCD: EQU $+OFFSET
- DB 0
- ;
- ;
- PROEND: EQU $
- ;
- ;
- END START