home *** CD-ROM | disk | FTP | other *** search
- ;CONTRIBUTED TO CP/M USERS' GROUP BY:
- ;
- ; MEMORY MERCHANTS
- ; 1350 BUFFALO ROAD
- ; ROCHESTER NY 14624
- ;
-
- ; SEDY ----- A PROGRAM TO DISPLAY ANY DISK SECTOR TO THE
- ; TERMINAL
- ; ************************************************************
- ; ******************* INSTRUCTIONS ***************************
- ; ************************************************************
- ;
- ; THE FOLLOWING COMMANDS ARE PRESENTLY AVAILABLE :
- ;
- ; A ASCII DISPLAY MODE - DISPLAYS THE SECTOR IN ASCII
- ; H HEX DISPLAY MODE - DISPLAYS THE SECTOR IN HEX [DEFAULT]
- ; N CHANGE THE DISK, TRACK AND SECTOR TO BE DISPLAYED
- ; D CHANGE ONLY THE DISK TO BE DISPLAYED [USEFUL TO JUMP
- ; BETWEEN THE SAME POSITION ON DIFFERENT DISKS]
- ; T CHANGE ONLY THE TRACK TO BE DISPLAYED
- ; S CHANGE ONLY THE SECTOR TO BE DISPLAYED
- ; + DISPLAY NEXT SECTOR
- ; - DISPLAY PREVIOUS SECTOR
- ; R RETURNS TO CPM
- ;
- ; ************************************************************
- ; ************************************************************
- ;
- ;
-
- .I8080
- .PABS
- .PHEX
- .XLINK
-
- .LOC 100H
-
- CPM = 0
- TBUF = 080H
- BDOS = 05H
-
- BIOS.VECTOR:
- JMP GETBIOS
- .BLKB 42
-
- %WBOOT = BIOS.VECTOR+3
- %CSTS = BIOS.VECTOR+6
- %CI = BIOS.VECTOR+9
- %CO = BIOS.VECTOR+12
- %LO = BIOS.VECTOR+15
- %PO = BIOS.VECTOR+18
- %RI = BIOS.VECTOR+21
- %HOME = BIOS.VECTOR+24
- %SELDSK = BIOS.VECTOR+27
- %SETTRK = BIOS.VECTOR+30
- %SETSEC = BIOS.VECTOR+33
- %SETDMA = BIOS.VECTOR+36
- %READ = BIOS.VECTOR+39
- %WRITE = BIOS.VECTOR+42
-
- GETBIOS:
- LXI D,%WBOOT
- LHLD 01
- MVI B,42
-
- GET.VECTORS:
- MOV A,M
- STAX D
- INX D
- INX H
- DCR B
- JNZ GET.VECTORS
-
- START: LXI SP,STACK
- XRA A
- LDA ASCII ;HEX MODE DEFAULT
- CALL CRLF
- LXI D,MSG0
- CALL PRINT
-
- MAINLOOP:
- CALL CRLF
- LXI D,MSG1
- CALL PRINT
- CALL DISKSEL
- CALL CRLF
- LXI D,MSG2
- CALL PRINT
- CALL SELECT
- CALL SECSEL
-
- NWTRK:
- CALL CRLF
- LXI D,MSG3
- CALL PRINT
- CALL SELECT
- CALL TRACKSEL
- CALL CRLF
-
- SECOUT: CALL READR
- LDA ASCII
- ORA A
- JNZ ASCDPLY
- CALL DISPLAY
-
- CONTROL:
- CALL CRLF
- LXI D,..MSG
- CALL PRINT
- MVI C,1
- CALL BDOS
- CPI "R" ;RETURN TO CPM
- JZ CPM
- CPI "+" ;DISPLAY NEXT SECTOR
- JZ DISPNXT
- CPI "-" ;DISPLAY PREVIOUS SECTOR
- JZ DISPPRE
- CPI "N" ;NEW SECTOR,TRACK AND DISK
- JZ MAINLOOP
- CPI "D" ;NEW DISK
- JZ NWDSK
- CPI "S" ;NEW SECTOR
- JZ NWSEC
- CPI "T" ;NEW TRACK
- JZ NWTRK
- CPI "A" ;ASCII DISPLAY MODE
- JZ ASC.SEL
- CPI "H" ;HEX DISPLAY MODE
- JZ HEX.SEL ;[DEFAULT]
- JMP CONTROL
- ..MSG: .ASCII "CONTROL ? $"
-
- CRLF: MVI A,0AH
- CALL CHAROUT
- MVI A,0DH
- CALL CHAROUT
- RET
-
- DISKSEL:
- CALL CHARIN
- SUI 41H
- JC ERRDISK
- STA CURDISK
- RET
-
- SELECT: CALL CHARIN
- STA TEMP
- CALL CHARIN
- STA TEMP+1
- RET
-
- ERRDISK:
- CALL CRLF
- LXI D,..MSG
- CALL PRINT
- JMP START
- ..MSG: .ASCII " DISK SELECT ERROR!! $"
-
- READR: CALL SETUP
- CALL %READ
- RET
-
- SETUP: LXI B,TBUF
- CALL %SETDMA
- LDA CURDISK
- MOV C,A
- CALL %SELDSK
- LDA CURSECT
- MOV C,A
- CALL %SETSEC
- LDA CURTRACK
- MOV C,A
- CALL %SETTRK
- RET
- SECSEL: XRA A
- STA CURSECT
- LDA TEMP
- CPI "0"
- JZ ..SKIP
- CALL ASCBIN
- CALL DEC
- STA CURSECT
- ..SKIP: LDA TEMP+1
- CALL ASCBIN
- MOV B,A
- LDA CURSECT
- ADD B
- JZ SECINERR
- CPI 27
- JNC SECINERR
- STA CURSECT
- RET
-
- TRACKSEL:
- XRA A
- STA CURTRACK
- LDA TEMP
- CPI "0"
- JZ ..SKIP
- CALL ASCBIN
- CALL DEC
- STA CURTRACK
- ..SKIP: LDA TEMP+1
- CALL ASCBIN
- MOV B,A
- LDA CURTRACK
- ADD B
- CPI 77
- JNC TRACKERR
- STA CURTRACK
- RET
-
-
- SECINERR:
- CALL CRLF
- LXI D,..MSG
- CALL PRINT
- JMP START
- ..MSG: .ASCII "SECTOR VALUE OUT OF RANGE [1 TO 26] $"
-
- TRACKERR:
- CALL CRLF
- LXI D,..MSG
- CALL PRINT
- JMP START
- ..MSG: .ASCII "TRACK VALUE OUT OF RANGE [0 TO 76] $"
-
- ASCBIN:
- SUI "0"
- JC ASCERR
- CPI 10
- JNC ASCERR
- RET
-
- ASCERR:
- CALL CRLF
- LXI D,..MSG
- CALL PRINT
- JMP MAINLOOP
- ..MSG: .ASCII "NON NUMERIC RESPONSE ERROR $"
-
- DEC: ADD A
- MOV B,A
- ADD A
- ADD A
- ADD B
- RET
-
- PRINT: MVI C,9
- PUSH H
- CALL BDOS
- POP H
- RET
-
- CURVAL: LXI D,..MSG0
- CALL PRINT
- LDA CURDISK
- ADI 41H
- CALL CHAROUT
- LXI D,..MSG1
- CALL PRINT
- LDA CURTRACK
- STA SCRATCH
- CALL BINDEC
- LXI D,..MSG2
- CALL PRINT
- LDA CURSECT
- STA SCRATCH
- CALL BINDEC
- CALL CRLF
- CALL CRLF
- RET
- ..MSG0: .ASCII "DISK # $"
- ..MSG1: .ASCII " TRACK # $"
- ..MSG2: .ASCII " SECTOR # $"
-
- BINDEC: MVI A,30H
- STA TEMP
- STA TEMP+1
- LDA SCRATCH
- ..LOOP: SUI 10
- JC ONES
- LXI H,TEMP
- INR M
- JMP ..LOOP
-
- ONES: ADI 10
- ..LOOP: SUI 1
- JC ..OUTCH
- LXI H,TEMP+1
- INR M
- JMP ..LOOP
- ..OUTCH:
- LDA TEMP
- CALL CHAROUT
- LDA TEMP+1
- CALL CHAROUT
- RET
-
- CHARIN: MVI C,1
- CALL BDOS
- RET
-
- CHAROUT:
- MOV E,A
- PUSH H
- PUSH PSW
- MVI C,2
- CALL BDOS
- POP PSW
- POP H
- RET
-
-
- DISPLAY:
- CALL CRLF
- CALL CURVAL
- LXI H,TBUF
- MVI B,0
- ..LOOP: PUSH B
- MOV A,M
- CALL BINHEX
- LDA TEMP
- CALL CHAROUT
- LDA TEMP+1
- CALL CHAROUT
- MVI A," "
- CALL CHAROUT
- POP B
- INR B
- MVI A,16
- CMP B
- CZ NEWLINE
- INX H
- MVI A,1
- CMP H
- JNZ ..LOOP
- CALL CRLF
- RET
-
- HEX: ADI 30H
- CPI 3AH
- RC
- ADI 7H
- RET
-
- BINHEX: STA TEMP+1
- ANI 0F0H
- RRC
- RRC
- RRC
- RRC
- CALL HEX
- STA TEMP
- LDA TEMP+1
- ANI 0FH
- CALL HEX
- STA TEMP+1
- RET
-
- NEWLINE:
- CALL CRLF
- MVI B,0
- RET
-
- DISPNXT:
- LXI H,CURSECT
- INR M
- MVI A,27
- CMP M
- JNZ SECOUT
- MVI A,1
- STA CURSECT
- LXI H,CURTRACK
- INR M
- MVI A,77
- CMP M
- JNZ SECOUT
-
- MSGOUT: CALL CRLF
- LXI D,MSG
- CALL PRINT
- JMP START
- MSG: .ASCII "END OF DISK !! $"
-
- DISPPRE:
- LXI H,CURSECT
- DCR M
- XRA A
- CMP M
- JNZ SECOUT
- MVI A,26
- STA CURSECT
- LXI H,CURTRACK
- XRA A
- CMP M
- JZ MSGOUT
- DCR M
- JMP SECOUT
-
- NWDSK: CALL CRLF
- LXI D,MSG1
- CALL PRINT
- CALL DISKSEL
- CALL CRLF
- JMP SECOUT
-
- NWSEC: CALL CRLF
- LXI D,MSG2
- CALL PRINT
- CALL SELECT
- CALL SECSEL
- CALL CRLF
- JMP SECOUT
-
- ASCDPLY:
- CALL ASCII.SEC
- JMP CONTROL
-
- ASC.SEL:
- XRA A
- CMA
- STA ASCII
- JMP SECOUT
-
- HEX.SEL:
- XRA A
- STA ASCII
- JMP SECOUT
-
- PERIOD: MVI A,02EH
- RET
-
- ASCII.SEC:
- CALL CRLF
- CALL CURVAL
- LXI H,TBUF
- MVI B,0
- ..LOOP: PUSH B
- MOV A,M
- ANI 07FH ;STRIP PARITY BIT
- CPI 20H
- CC PERIOD
- CALL CHAROUT
- MVI A," "
- CALL CHAROUT
- CALL CHAROUT
- POP B
- INR B
- MVI A,16
- CMP B
- CZ NEWLINE
- INX H
- MVI A,1
- CMP H
- JNZ ..LOOP
- CALL CRLF
- RET
-
- MSG0: .ASCII "THE MEMORY MERCHANT'S SECTOR DISPLAY UTILITY $"
-
- MSG1: .ASCII "ENTER DISK [ A, B, ETC. ] : $"
-
- MSG2: .ASCII "ENTER SECTOR # [ 2 DIGITS, IE., 02] : $"
-
- MSG3: .ASCII "ENTER TRACK # [ 2 DIGITS, IE., 09] : $"
-
- ASCII: .BLKB 1
- CURDISK:
- .BLKB 1
- CURTRACK:
- .BLKB 1
- CURSECT:
- .BLKB 1
- SCRATCH:
- .BLKB 1
- TEMP: .BLKW 1
- .BLKB 20
- STACK: .BLKB 1
-
-
- .END
-
-