diff --git a/build/lisp.tcl b/build/lisp.tcl index c9db14ec..b7f1989c 100644 --- a/build/lisp.tcl +++ b/build/lisp.tcl @@ -1131,6 +1131,11 @@ respond "_" "lmio1;as8748\r" respond "_" "\032" type ":kill\r" +respond "*" ":complr\r" +respond "_" "moon;8478sa\r" +respond "_" "\032" +type ":kill\r" + respond "*" ":lisp\r" respond "Alloc?" "n" respond "*" "(load '((lmio1) as8748))" diff --git a/src/moon/8478sa.7 b/src/moon/8478sa.7 new file mode 100644 index 00000000..350642ce --- /dev/null +++ b/src/moon/8478sa.7 @@ -0,0 +1,165 @@ +;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)) + +(DEFUN FROB () + (OR (BOUNDP '8748AR) (SETQ 8748AR (MAKE-ARRAY NIL 'ART-Q 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 (AREF 8748AR I) + (PRINT (LIST 'UNOCCUPIED I))))) + +(DEFUN FROB1 (VAL X) + (AND (AREF 8748AR VAL) (PRINT (LIST 'CONFLICT (AREF 8748AR VAL) X))) + (ASET 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 (AREF AR PC)) + (SETQ DAT (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 (AREF AR (SETQ PC (1+ PC))))) + ((RIM @RIM) (FORMAT T "~O,#~O" DELTA (AREF AR (SETQ PC (1+ PC))))) + (IOIM (FORMAT T "~[BUS~;P1~;P2~],#~O" DELTA (AREF AR (SETQ PC (1+ PC))))) + (PD (PRIN1 (+ DELTA 4))) + (JMP (PRIN1 (+ (LOGAND 7400 (1+ PC)) (AREF AR (SETQ PC (1+ PC)))))) + (RJMP (FORMAT T "~O,~O" DELTA (+ (LOGAND 7400 (1+ PC)) + (AREF AR (SETQ PC (1+ PC)))))) + (LJMP (PRIN1 (+ (LSH (LDB 0503 INST) 8) (AREF AR (SETQ PC (1+ PC)))))) + (NIL ) + (OTHERWISE (FORMAT T "BARF? - ~S" DAT))) + (AND (CADDDR DAT) (PRINC (CADDDR DAT)))))))