1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-13 23:36:30 +00:00

Updated 8478 disassembler to run on Maclisp and NIL as well as original

LISPM.
This commit is contained in:
Eric Swenson 2018-10-05 21:51:10 -07:00 committed by Lars Brinkhoff
parent 4658014923
commit b38f93b254

185
src/moon/8478sa.8 Normal file
View File

@ -0,0 +1,185 @@
;;; Modified 2018-10-05 by EJS to work on MacLisp as well as LISPM
(eval-when (compile)
(load '((lisp) umlmac)))
;Format is (number string format) or ((first-number last-number) string format)
;Formats are NIL, R, @R, IM, IO, IOIM, RIM, @RIM, JMP, RJMP, LJMP, PD
;Another string can be at the end of the list.
(SETQ 8748TBL '(
((150 157) "ADD A,R" R)
((140 141) "ADD A,@R" @R)
(003 "ADD A,#" IM)
((170 177) "ADDC A,R" R)
((160 161) "ADDC A,@R" @R)
(023 "ADDC A,#" IM)
((130 137) "ANL A,R" R)
((120 121) "ANL A,@R" @R)
(123 "ANL A,#" IM)
((230 232) "ANL " IOIM)
((234 237) "ANLD P" PD ",A")
((110 117) "ORL A,R" R)
((100 101) "ORL A,@R" @R)
(103 "ORL A,#" IM)
((210 212) "ORL " IOIM)
((214 217) "ORLD P" PD ",A")
((330 337) "XRL A,R" R)
((320 321) "XRL A,@R" @R)
(323 "XRL A,#" IM)
(027 "INC A")
((030 037) "INC R" R)
((020 021) "INC @R" @R)
(007 "DEC A")
((310 317) "DEC R" R)
(047 "CLR A")
(227 "CLR C")
(205 "CLR F0")
(245 "CLR F1")
(067 "CPL A")
(247 "CPL C")
(225 "CPL F0")
(265 "CPL F1")
(127 "DEC-ADJ A")
(107 "SWAP A")
(347 "ROT-LEFT A")
(367 "ROT-LEFT-CARRY A")
(167 "ROT-RIGHT A")
(147 "ROT-RIGHT-CARRY A")
(010 "INS A,BUS")
(011 "IN A,P1")
(012 "IN A,P2")
(002 "OUTL BUS,A")
(071 "OUTL P1,A")
(072 "OUTL P2,A")
((350 357) "DJNZ R" RJMP)
(004 "JMP " LJMP)
(044 "JMP " LJMP)
(104 "JMP " LJMP)
(144 "JMP " LJMP)
(204 "JMP " LJMP)
(244 "JMP " LJMP)
(304 "JMP " LJMP)
(344 "JMP " LJMP)
(024 "CALL " LJMP)
(064 "CALL " LJMP)
(124 "CALL " LJMP)
(164 "CALL " LJMP)
(224 "CALL " LJMP)
(264 "CALL " LJMP)
(324 "CALL " LJMP)
(364 "CALL " LJMP)
(203 "RET")
(223 "RETR")
(000 "NOP")
(263 "JMPP @A")
(022 "JB0 " JMP)
(062 "JB1 " JMP)
(122 "JB2 " JMP)
(162 "JB3 " JMP)
(222 "JB4 " JMP)
(262 "JB5 " JMP)
(322 "JB6 " JMP)
(362 "JB7 " JMP)
(366 "JC " JMP)
(346 "JNC " JMP)
(266 "JF0 " JMP)
(166 "JF1 " JMP)
(206 "JNI " JMP)
;(206 "JOBF " JMP)
(326 "JNIBF " JMP)
(306 "JZ " JMP)
(226 "JNZ " JMP)
(066 "JT0 " JMP)
(046 "JNT0 " JMP)
(126 "JT1 " JMP)
(106 "JNT1 " JMP)
(026 "JTF " JMP)
((370 377) "MOV A,R" R)
((360 361) "MOV A,@R" @R)
(043 "MOV A,#" IM)
((250 257) "MOV R" R ",A")
((240 241) "MOV @R" @R ",A")
((270 277) "MOV R" RIM)
((260 261) "MOV @R" @RIM)
((050 057) "XCH A,R" R)
((040 041) "XCH A,@R" @R)
((060 061) "XCHD A,@R" @R)
(243 "MOVP A,@A")
(343 "MOVP3 A,@A")
(102 "MOV A,T")
(142 "MOV T,A")
(307 "MOV A,PSW")
(327 "MOV PSW,A")
((014 017) "MOVD A,P" PD)
((074 077) "MOVD P" PD ",A")
((200 201) "MOVX A,@R" @R)
((220 221) "MOVX @R" @R ",A")
(125 "STRT T")
(105 "STRT CNT")
(145 "STOP TCNT")
(045 "EN TCNT I")
(065 "DIS TCNT I")
(005 "EN I")
(025 "DIS I")
(165 "EN T0 CLK")
(345 "SEL MB0")
(365 "SEL MB1")
(305 "SEL RB0")
(325 "SEL RB1")
))
(DECLARE (SPECIAL 8748TBL 8748AR))
(defmacro as-make-array (size)
#+LISPM `(make-array ,size ':TYPE 'ART-Q)
#+(or Maclisp Franz) `(*ARRAY NIL T ,SIZE)
#+NIL `(make-vector ,size))
(defmacro as-aref (array idx)
#+LISPM `(aref ,array ,idx)
#+(or Maclisp Franz) `(arraycall t ,array ,idx)
#+NIL `(vref ,array ,idx))
(defmacro as-set-array (val array idx)
#+LISPM `(aset ,val ,array ,idx)
#+(or Maclisp Franz) `(store (arraycall t ,array ,idx) ,val)
#+NIL `(vset ,array ,idx ,val))
(DEFUN FROB ()
(OR (BOUNDP '8748AR) (SETQ 8748AR (as-make-array 400)))
(FILLARRAY 8748AR '(NIL))
(DOLIST (X 8748TBL)
(COND ((ATOM (CAR X)) (FROB1 (CAR X) X))
(T (DO I (CAAR X) (1+ I) (> I (CADAR X))
(FROB1 I X)))))
(DOTIMES (I 400)
(OR (as-aref 8748AR I)
(PRINT (LIST 'UNOCCUPIED I)))))
(DEFUN FROB1 (VAL X)
(AND (as-aref 8748AR VAL) (PRINT (LIST 'CONFLICT (as-aref 8748AR VAL) X)))
(as-set-array X 8748AR VAL))
(DEFUN DISAR (AR FIRST LAST &AUX INST DAT DELTA)
(DO ((PC FIRST (1+ PC)))
((>= PC LAST))
(FORMAT T "~%~3O " PC)
(SETQ INST (as-aref AR PC))
(SETQ DAT (as-aref 8748AR INST))
(COND ((NULL DAT) (PRIN1 INST))
(T (PRINC (CADR DAT))
(SETQ DELTA (AND (NOT (ATOM (CAR DAT))) (- INST (CAAR DAT))))
(SELECTQ (CADDR DAT)
((R @R IO) (PRIN1 DELTA))
(IM (PRIN1 (as-aref AR (SETQ PC (1+ PC)))))
((RIM @RIM) (FORMAT T "~O,#~O" DELTA (as-aref AR (SETQ PC (1+ PC)))))
(IOIM (FORMAT T "~[BUS~;P1~;P2~],#~O" DELTA (as-aref AR (SETQ PC (1+ PC)))))
(PD (PRIN1 (+ DELTA 4)))
(JMP (PRIN1 (+ (LOGAND 7400 (1+ PC)) (as-aref AR (SETQ PC (1+ PC))))))
(RJMP (FORMAT T "~O,~O" DELTA (+ (LOGAND 7400 (1+ PC))
(as-aref AR (SETQ PC (1+ PC))))))
(LJMP (PRIN1 (+ (LSH (LDB 0503 INST) 8) (as-aref AR (SETQ PC (1+ PC))))))
(NIL )
(OTHERWISE (FORMAT T "BARF? - ~S" DAT)))
(AND (CADDDR DAT) (PRINC (CADDDR DAT)))))))