;DSKEDT.M68
;Disk Editor
;David F. Pallmann
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
LF=12
CR=15
.OFINI
.OFDEF DISK,D.DDB
.OFSIZ MEMSIZ
DEFINE DEPACK ADDR
IF NB,ADDR,LEA A1,ADDR
SUB #4,SP
MOV SP,A2
UNPACK
CLRB @A2
TTYL @SP
ADD #4,SP
ENDM
START: PHDR -1,0,PH$REE!PH$REU!PH$OPR;program header
GETIMP MEMSIZ,A5 ;allocate local memory
GETDEV: BYP ;bypass leading white space
FSPEC DISK(A5) ;load DDB w/device spec
INIT DISK(A5) ;load driver, allocate buffer
ORB #D$ERC,DISK+D.FLG(A5) ;flag DDB to trap errors
BYP ;bypass white space
GETBLK: GTOCT ;get block number
MOV D1,DISK+D.REC(A5) ;set record number
READ DISK(A5) ;read block
SETFLG: JOBIDX A0
ORW #J.CCA,JOBTYP(A0)
MOV JOBTRM(A0),A1
ORW #T$ILC,T.STS(A1)
INIT: MOV DISK+D.BUF(A5),A4
CLR D5
DUMP: CALL OCTAL
DEVICE: DEPACK DISK+D.DEV(A5)
MOVW DISK+D.DRV(A5),D1
DCVT 0,OT$TRM
TYPESP :
BLOCK: TYPESP Block
MOV DISK+D.REC(A5),D1
OCVT 0,OT$TRM!OT$TSP
ADDR: CALL OCTAL
MOV D5,D1
OCVT 3,OT$TRM!OT$ZER
TTYI
ASCIZ "/ "
EVEN
CALC: MOV A4,A3
ADD D5,A3
DUMP.O: CALL OCTAL
MOVW @A3,D1
OCVT 6,OT$TRM!OT$TSP
DUMP.D: MOVW @A3,D1
DCVT 5,OT$TRM!OT$ZER
TYPESP .
DUMP.H: TYPE $
CALL HEX
MOVW @A3,D1
OCVT 4,OT$TRM!OT$TSP
DUMP.A: TYPE "
MOVB @A3,D1
CALL PRINT
MOVB 1(A3),D1
CALL PRINT
TYPESP
DUMP.R: TYPE [
DEPACK @A3
TYPESP ]
PROMPT: TYPESP ?
KBD EXIT
NUM
BEQ GETNUM
CMPB @A2,#LF
JEQ NXTADR
CMPB @A2,#CR
JEQ NXTADR
CMPB @A2,#'[
JEQ GETR50
CMPB @A2,#'"
JEQ GETASC
CMPB @A2,#'$
JEQ GETHEX
CMPB @A2,#'W
JEQ WRITE
CMPB @A2,#'w
JEQ WRITE
CMPB @A2,#'R
JEQ READ
CMPB @A2,#'r
JEQ READ
ERROR: TTYI
BYTE 7,0
JMP DUMP
GETNUM: MOV A2,A1
GTDEC
CMPB @A2,#CR
BEQ CHGOCT
CMPB @A2,#'.
BEQ CHGDEC
CMPB @A2,#'/
BEQ SETADR
JMP ERROR
CHGOCT: CALL OCTAL
MOV A1,A2
GTOCT
MOVW D1,@A3
JMP NXTADR
CHGDEC: MOVW D1,@A3
JMP NXTADR
GETHEX: INC A2
CALL HEX
GTOCT
CMPB @A2,#'/
BEQ HEXADR
MOVW D1,@A3
JMP NXTADR
HEXADR: MOV D1,D5
CRLF
JMP DUMP
SETADR: CALL OCTAL
MOV A1,A2
GTOCT
MOV D1,D5
CRLF
JMP DUMP
NXTADR: MOVB #CR,D1
TTY
ADD #2,D5
CMPW D5,#512.
BLT 10$
CLR D5
10$: JMP DUMP
GETR50: INC A2
MOV A3,A1
PACK
JMP NXTADR
GETASC: INC A2
MOVB (A2)+,(A3)+
MOVB (A2)+,(A3)+
JMP NXTADR
READ: READ DISK(A5)
CLR D5
JMP DUMP
WRITE: WRITE DISK(A5)
EXIT: CALL OCTAL
CRLF
EXIT
OCTAL: JOBIDX A0
ANDW #^C<J.HEX>,JOBTYP(A0)
RTN
HEX: JOBIDX A0
ORW #J.HEX,JOBTYP(A0)
RTN
PRINT: CMPB D1,#40
BLT 10$
CMPB D1,#125.
BGT 10$
TTY
RTN
10$: TYPE .
RTN
END