;MEMEDT.M68
;Memory Module Editor
;David F. Pallmann
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
LF=12
CR=15
.OFINI
.OFDEF MODULE,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 MODULE(A5),LIT ;load DDB w/module spec
INIT MODULE(A5) ;load driver, allocate buffer
FETCH MODULE(A5),A4 ;srch/fetch module, A4 is base
JNE NOTFND ; not found
SETFLG: JOBIDX A0
ORW #J.CCA,JOBTYP(A0)
MOV JOBTRM(A0),A1
ORW #T$ILC,T.STS(A1)
INIT: CLR D5
DUMP: CALL OCTAL
DEVICE: DEPACK MODULE+D.FIL(A5)
DEPACK
TYPE .
DEPACK MODULE+D.EXT(A5)
TYPESP :
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
NOTFND: TYPESP ?
PFILE MODULE(A5)
TYPECR < not found>
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