IMD 1.16: 2/09/2008 14:49:27 84-93742-01 a000 f74201 nm4 z80 co processor isolite test files    @0|)wwЀЀtQql)  " }gA `_l M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF183040810283904830408102839 830408102839EF74201 VOLNM4 Z80 COPROCESSOR ISOLITE TEST FILES 84-93742-01-A000   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@pܾrCHC C GTq` Lg"gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYS"iwvc Bc A@6<# Ic B# gIjHc r       I499P9(999vv,> IooJmx Ih{ XbaJ?S^J8RY[@KQP@ΙQ RGhgKeI^b]G;KQA9^I% Q ENIJICGBoŠ0@  iP> ‡-I ,Yv uuI rGoβQ3lkji¨Ā§ā¦ĂIvă XI ǙVVUΛQIǓ%PĀOāNĂMă@ ʉ @@ ϋQATECៀ 11rI q.v 'IǤ%fI e")` nqbc IǔIVIUIdǐÌJQA@ K @@ JQAcW x 9I 8i# @@cQCI 0mIgI)I(Idcc@`K`@@`JQAh]ϟ ⥃R b@ǣAǢâ@¡AnŸI jD ™0@IǏn@`όS!Ë@ÊA@`ΌQA]X9:OP IǎI ǍIljI LjIDŽI ǃm, Iǰ   IQ I L IǡE@ Ā؀Q˄@ = @@ KQAs 6ÏJQ'ÍL.K.ǃ_ ||6w5n sĀ@ K @@ @QAwlli ||)‡Ā†āttq ||# HII?# mmj ||Ôǔ+Ǔq# ÎKQ/IILJIdhhe ||uu8q $HmIlIlli ||ZvYu @ JSA) ''Ljjg }A’0@YKQFVVQA|HLJ ƒ0@jhPp *KQ;É$%#( q0@q }Ǜ™II I Id?(ËJQÊDŽRb`8 IǐIt‰ĂÌKQA I@0@ f`vYRKv̻v> 2av>2av>2av>2a!:gGʝxʡxx x/ xL xU ͕ vY.>Gx͕ ʸ>2avxG ¨͕ Y>ZGHQZck>2a>23!.>͕ >!>͕ !BY>2av͊  >2avzW>2e>͕ Y zW>2e͊ >͕ Y2 >͕ v:cG>e F~ >p V~ >| >2av^>2a͕ Ç :eG>Š 2CS" "$"(s,"UTINE 0269 CONINT BEGIN 00000227 0269+ RETURN SET $ 0227 9F80 0228 0269+  JMP *CONINT 00000000 0269+ NREGS SET 0 0228 0E0D 0269+ CONINT ENT 0270  MOVE =0,A 0229 0900 0270+ COPY =0,A 022A 0201 0271 OUT A,1 TURN OFF CONSOLE INTERRUPT INDICATOR 0272 CALL RESET RESET Z80 COPROCESSOR 0272+  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIMACRO ZISO(D=UTIL.MAC,L=,EX,NOI) PRINT ZISO.LST 830408102839830408102839830408102839IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILINK ZISO(E=BE)+Z.OBJ(U) /AUTOGEN ZISO.ROM(S=4096)=ZISO.BIN(N=0,C,X) J 830408102839830408102839830408102839PRINT ZISO.LST PRINT Z.LST PRINT ZISO.JCL PRINT ZISOROM.JCL PRINT INTEL.JCL 830408102839830408102839830408102839P HAS ZAM-ZLK-INTEL.JCL BEEN DONE? AS UF=DF0 //CO Z.OBJ=DM1.Z.OBJ //CO ZISO.ASM=DM1.ZISO.ASM //CO Z.ASM=DM1.Z.ASM AS LO=TV V ZISO.ASM V Z.ASM A LO=LP DO ZISO DO ZISOROM V DF0 J 83040810283983040810283983040810283999 EXIT BEGIN 00000350 0399+ RETURN SET $ 0350 9F80 0351 0399+ JMP *EXIT 00000000 0399+ NREGS SET 0 0351 0E0D 0399+ EXIT ENT 0400 CALL DISPLAY,=0,=:BF  0400+ PUTVAR =0,=:BF,, 0400+ MOVE =0,P1 0352 4900 0400+ COPY =0,Q 0353 C790 0364 0400+ COPY Q,P1 0400+ MOVE =:BF,P2 0354 49BF 0400+  COPY =:BF,Q 0355 C774 034A 0400+ COPY Q,P2 0356 BF8E 0365 0400+ JST DISPLAY  0401 CALL RESET 0401+ PUTVAR ,,, 0357 BF8E 0366 0401+ JST RESET  0402 * * SET UP END OF LINK SAL INSTRUCTIONS 0403 MOVE =ELINK,X 0358 A28E 0367 0403+ COPY =ELINK,X 0404 MOVE SAL00,2(X) BACKUP SAL0,0 0359 C289 0363 0404IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJG:0 START ENDSCOUTJDENTRY O0SEGMENTBLANK oKELINK DEBUG4 im MACRO (F200) @it    g     3tpI499P9(999vvg ,>  IooJmx  Ih{ g XbaJ?S^J8RY[@ KQP@ΙQ RGhgKe I^b]G;KQA9^ I% Q E NIJICGBoŠ0@   iP>  ‡-I ,Yv  uuI rGoβ Q3lkji¨Ā §ā¦ĂIvă XI ǙV VUΛQIǓ%PĀOāN ĂMă@ ʉ @@ ϋQATE Cៀ 11 rI q.v 'IǤ% fI e")` nqbc  IǔIVIUIdǐÌJ QA@ K @@ JQAcW  x 9I 8 i# @@cQCI 0mIg I)I(Idcc@`K`@@`J QAh]ϟ ⥃R b @ǣAǢâ@¡AnŸI  jD ™0@IǏn@`ό S!Ë@ÊA@`ΌQA]X 9:OP I ǎI ǍIljI LjIDŽI  ǃm, I ǰ   IQ  IL IǡE@ Ā ؀Q˄@ = @@ KQAs  6ÏJQ'ÍL.K.ǃ _  ||6w5n sĀ@ K @@ @QAwlli  ||)‡Ā†āttq  ||# HII ?# mmj  ||Ôǔ+Ǔq# Î KQ/ILjILJIdhhe  ||uu8q $Hm IlIlli  ||ZvYu @ JSA ) ''Ljjg  }A’0@YKQFVV QA|HLJ ƒ0@jhP p *KQ;É$%#( q0@q  }Ǜ™II I Id?(ËJQ ÊDŽRb`8  IǐIt‰ĂÌ KQA I@0@ ftg830408102839830408102839830506153425 RUN ZAM-ZLK FIRST: ZAM Z,Z=Z ZLK Z,Z=Z(INTEL) THEN DO INTEL WITH INPUT >0 (LOWER 4K SEGMENT) IF INTEL ERR #98 THEN INSERT OR DELETE NOP BEFORE END OF PROGRAM DE TMP.LST INTEL TMP.LST=TV(Z.BIN Z.OBJ) PRINT Z.LST 830408102839830408102839830408102839  * CHECK USING TCDUMP ZISO.ROM THAT ENDLINK (:EEEE) IS PRECEDED BY ZEROS LINK ZISO=ZISO(E=BE)+Z.OBJ(U)+ENDLINK.OBJ(U) /AUTOGEN ZISO.ROM(S=4096)=ZISO.BIN(N=0,C,X) J 830408102839830408102839830408102839O0SEGMENTBLANK oim ZLK (A002) @i@@`vYJ̻v> 2av:a^>2av>2a!:gGʝxʞxx x, xI xR ͒ v->Gx͒ ʵ>2avxG ¥͒ Q>ZGHQZck>2a>22!-=͒ >!=͒ !BQ>2av͇  >2avzW>2e>͒ Q zW>2e͇ >͒ Q/ >͒ v:cG>b F{ >m V{ >y >2av^>2a͒ Ä :eG>‡ 2CS"" "$s(" @JELINK O0SEGMENTBLANK oim MACRO (F200) @ig8304081028398304081028398304081028391PAGE 0001 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:05.75 TITLE PAGE SI = DM01.ZISO.ASM SO = DM01.ZISO.OBJ LO = DM01.ZISO.LST 0003 * 1PAGE 0002 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:06.00 EQUATES AND EXTERNALS 0004 0001 0005 MACHINE =:1 404 0006 EXTR DEBUG4 0007 EXTR ELINK END OF LINK LOC. SCOUT + Z80 000E 0008 NAM DENTRY ENTRY FOR DOWNLINE PROGRAM 0369 0009 NAM ENDSCOUT 00BE 0010 NAM START PROGRAM START 00E5 0011  NAM G:0 OS4 DEBUG ENTRY 0012 * * Z80 CODE EQUATES 00000400 0013 ZMEMORY EQU  :400 LOCATION OF Z80 IN MEMORY 00000800 0014 ZCODE EQU ZMEMORY*2 ZMEMORY LOC FOR Z80 CODE FORMAT 00000000 0015 ZLOWER EQU ZCODE&:00FF GET LOWER BYTE 0000C300 0016 ZJMP EQU :C300++ZLOWER CREATE FIRST BYTE OF Z80 JUMP 0017 * * Z80 BOARD CONTROL REGISTER EQUATES 0000FF8F 0018 SIZRUN EQU :FF8F RUN, SCOUT INT Z80 0000388F 0019 SIZRUN2 EQU :388F RUN, SCOUT INT Z80 MODE 2  0000F7C0 0020 ZMERUN EQU :F7C0 RUN AT :F000 WITH NO INTERRUPTS 0000F7CF 0021 ZNIRUN EQU :F7CF RUN AT :0000 WITH NO INTERRUPTS 0000F7FF 0022 ZRST EQU :F7FF RESET 0000F74F 0023 ZISRUN EQU :F74F RUN, Z80 INT SCOUT 0024 * * SCOUT EQUATES 000000B0 0025 APPCODE EQ U :B0 APPLICATION DISPLAY CODE 000000FA 0026 DWAIT EQU 250 WAIT TIME FOR CONSOLE DISPLAYS IN MSEC 00000064 0027 ZWAIT EQU 100 MAX TIME TO WAIT FOR Z80 TEST MODULE 1PAGE 0003 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:07.25 TRAP VECTORS 0029  TRAP 0,DEBUG4 0000 0000 0029+ ABS 0 0000 BD01 0001 0029+ JST *$+1 0001 0001  0029+ WORD DEBUG4 0030 * * Z80 VECTOR INSTRUCTIONS: LOC 6 = UNDEFINED INTERRUPT  0031 ZVECTOR :4,10 0004 0000 0031+ ABS :4 0004 C30A 0031+ WORD ZJMP+10 0005 0800 0031+ WORD ZCODE 0032 ZVECTOR :8,10 0008 0000 0032+  ABS :8 0008 C30A 0032+ WORD ZJMP+10 0009 0800 0032+ WORD ZCODE 0033 ZVECTOR :C,10 000C 0000 0033+ ABS :C 000C C30A 0033+ WORD ZJMP+10 000D 0800 0033+ WORD ZCODE 000E 0000 0034 ABS :E 000E 9EE1 0070 0035 DENTRY JMP DSTART 0036 ZVECTOR :10,10 0010 0000 0036+ ABS :10 0010 C30A 0036+  WORD ZJMP+10 0011 0800 0036+ WORD ZCODE 0037 ZVECTOR :14,10 0014 0000 0037+ ABS :14 0014 C30A 0037+ WORD ZJMP+10 0015 0800 0037+ WORD ZCODE  0038 ZVECTOR :18,10 0018 0000 0038+ ABS :18 0018 C30A 0038+ WORD  ZJMP+10 0019 0800 0038+ WORD ZCODE 0039 ZVECTOR :1C,4 CLEAR ERROR ROUTINE 001C 0000 0039+ ABS :1C 001C C304 0039+ WORD ZJMP+4 001D 0800 0039+  WORD ZCODE 0020 0000 0040 ABS :20 1PAGE 0004 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:08.25 TRAP VECTORS 0020 0E0D 0041 VINTERR ENT 0021 BFD2 0074 0042  JST INTERR UNEXPECTED ERROR TRAP VECTOR 0043 ZVECTOR :33,7 0033 0000 0043+  ABS :33 0033 C307 0043+ WORD ZJMP+7 0034 0800 0043+ WORD ZCODE 0035 0000  0044 WORD ELINK 0070 0000 0045 ABS :70 0046 DSTART MOVE DEVADD,A  MOVE STANDARD DEVICE ADDRESS FOR DEBUG 0070 82E9 00DA 0046+ COPY DEVADD,A 0047 MOVE =1,DEBUG TURN ON DEBUG FLAG 0071 4901 0047+ COPY =1,Q 0072 C6E6 00D9 0047+ COPY Q,DEBUG 0073 9ECA 00BE 0048 JMP START 0004 0049 LPOOL 0074 0234 INTERR 0075 0076 0077  0050 TRAP :80,TRAPERR 0080 0000 0050+ ABS :80 0080 BF80 0081 0050+  JST *$+1 0081 0239 0050+ WORD TRAPERR 0051 TRAP :86,TRAPERR 0086  0000 0051+ ABS :86 0086 BF80 0087 0051+ JST *$+1 0087 0239 0051+ WORD TRAPERR 0052 TRAP :8A,UIMINT 008A 0000 0052+ ABS :8A 008A BF80 008B 0052+  JST *$+1 008B 0250 0052+ WORD UIMINT 0053 TRAP :8E,TRAPERR 008E 0000 0053+ ABS :8E 008E BF80 008F 0053+ JST *$+1 008F 0239 0053+ WORD TRAPERR 0054 TRAP :92,CLOCKINT 1PAGE 0005 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:09.75 TRAP VECTORS 0092 0000 0054+ ABS :92 0092 BF80 0093 0054+  JST *$+1 0093 0311 0054+ WORD CLOCKINT 0055 TRAP :94,CONINT 0094 0000 0055+ ABS :94 0094 BF80 0095 0055+ JST *$+1 0095 0228 0055+ WORD CONINT 0056 TRAP :9E,TRAPERR 009E 0000 0056+ ABS :9E 009E BF80 009F 0056+  JST *$+1 009F 0239 0056+ WORD TRAPERR 0057 TRAP :A2,TRAPERR 00A2 0000 0057+ ABS :A2 00A2 BF80 00A3 0057+ JST *$+1 00A3 0239 0057+ WORD TRAPERR 0058 TRAP :AA,TRAPERR 00AA 0000 0058+ ABS :AA 00AA BF80 00AB 0058+  JST *$+1 00AB 0239 0058+ WORD TRAPERR 000000B0 0059 COMMON EQU :B0 COMMON AREA FOR VARIABLES (SCOUT-Z80) 00B0 0000 0060 ABS COMMON 00B0 0000 0061 ERROR WORD 0  ISOLITE ERROR VALUE 00B1 0000 0062 ZIMODE WORD 0 Z80 INTERRUPT MODE 00B2 0000 0063 ZREPLY WORD 0 Z80 I/O TEST FLAG 00B3 0000 0064 ZTEST WORD 0 Z80 TEST INDEX 00B4 7676 0065 ZHALT WORD :7676 Z80 HALT INSTRUCTION (FAILSAFE) 0000 0066 LPOOL 1PAGE 0006  MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:10.75 MAIN PROGRAM 00BE 0000 0068 ABS :BE 00BE 9EA6 00E5 0069 START JMP STARTPRG JUMP OVER ALL DATA DEFINITIONS  0070 * * CONTROL BLOCK DEFINITION 00BF 0001 0071 TESTSTEP WORD 1 CONTROL STEP FLAG 00C0 0001 0072 TESTIND WORD 1 TEST INDEX 0073 * 000000C1 0074 CTRLBLK EQU $  CONTROL BLOCK 00C1 012C 0075 WORD NMITEST 00C2 013E 0076 WORD MACCESS 00C3 0182 0077 WORD PRCDIAG 00C4 018C 0078 WORD INPORT 00C5 01BA 0079 WORD  OUTPORT 00C6 01E0 0080 WORD ZISCOUT 00C7 0212 0081 WORD SIZ80 00C8 0000 0082 WORD 0 000000C8 0083 CTRLEND EQU $-1 END OF CONTROL BLOCK 0084 *  0001 0085 LPOOL 00C9 00CA 0000 0086 RTNADDR WORD 0 CURRENT CONTROL ROUTINE ADDRESS I  N BLOCK 00CB 0000 0087 CTRLADDR WORD 0 CURRENT CONTROL BLOCK ADDRESS 0088 *  0089 * * CONTROL BLOCK COMMANDS : HOLD, RETN 0090 HOLD BEGIN 000000CC 0090+ RETURN  SET $ 00CC 9F80 00CD 0090+ JMP *HOLD 00000000 0090+ NREGS SET 0 00CD 0E0D 0090+ HOLD ENT 0091 * * SET BLOCK TO LAST ROUTINE AND LOOP 0092 MOVE =0,TESTSTEP 00CE 4900 0092+ COPY =0,Q 00CF C66F 00BF 0092+ COPY Q,TESTSTEP 0093  SUBQ =2,TESTIND 0093+ MOVE TESTIND,Q 00D0 C26F 00C0 0093+ COPY TESTIND,Q 00D1 4AFE 0093+ SUB =2,Q 1PAGE 0007 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:12.50 MAIN PROGRAM 0093+ MOVE Q,TESTIND 00D2 C66D 00C0 0093+ COPY Q,TESTIND 0094 HOLD ENDR 00D3 9E78 00CC 0094+ JMP RETURN 0000 0094+  LPOOL 0095 RETN BEGIN 000000D4 0095+ RETURN SET $ 00D4 9F80 00D5 0095+ JMP *RETN 00000000 0095+ NREGS SET 0 00D5 0E0D 0095+ RETN ENT 0096 * * RETURN TO FIRST ROUTINE 0097 MOVE =0,TESTIND 00D6 4900 0097+ COPY =0,Q 00D7 C668 00C0 0097+ COPY Q,TESTIND 0098 RETN ENDR 00D8 9E7B 00D4 0098+ JMP RETURN  0000 0098+ LPOOL 1PAGE 0008 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:13.75 DATA DEFINITIONS 00D9 0000 0100 DEBUG WORD 0 DEBUG FLAG 00DA 0080 0101 DEVADD WORD :80 DEVICE ADDRESS FROM A REGISTER 00DB BC20 0020 0102 JINTERR JST VINTERR ERROR VECTOR TO VINTERR 00DC BF80 00DD 0103 JSTN JST *$+1 00DD 0000 0104 P1 WORD 0 00DE 0000 0105 P2  WORD 0 00DF 0000 0106 P3 WORD 0 00E0 0000 0107 P4 WORD 0 00E1 0000 0108 RAMEND WORD 0 END OF RAM 00E2 0000 0109 RUNCODE WORD 0 00E3 0000 0110 UIMLOC WORD 0 00E4 0000 0111 XSAVE WORD 0 0000 0112 LPOOL 1PAGE 0009 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:14.25 CONTROL LOOP 000000E5 0114 G:0 EQU $ 000000E5 0115 STARTPRG EQU $ 0116 CALL INITIAL CALL INITIAL MODULE  0116+ PUTVAR ,,, 00E5 BEAC 0112 0116+ JST INITIAL 0117 * * START CONTROL LOOP (CTRL - ECTRL) 0118 CTRL MOVE =CTRLBLK-1,A GET TOP AND ADD INDEX INTO BLOCK 00E6 09C0 0118+  COPY =CTRLBLK-1,A 00E7 8A58 00C0 0119 ADD TESTIND,A 0120 MOVE A,CTRLADDR 00E8 8662 00CB 0120+ COPY A,CTRLADDR 0121 * * CHECK FOR VALID BLOCK ADDRESS   0122 IF CTRLADDR,LT,=CTRLBLK,ERRCTRL 0122+ MOVE CTRLADDR,Q 00E9 C261 00CB 0122+ COPY CTRLADDR,Q 00EA 4A3F 0122+ SUB =CTRLBLK,Q 00EB 53DD 0109 0122+ JLT  Q,ERRCTRL 0123 IF CTRLADDR,GT,=CTRLEND,ECTRL+1 0123+ MOVE CTRLADDR,Q 00EC C25E 00CB 0123+ COPY CTRLADDR,Q 00ED 4A38 0123+ SUB =CTRLEND,Q 00EE 5259 0108 0123+ JGT Q,ECTRL+1 0124 MOVE *CTRLADDR,A GET ROUTINE ADDRESS 00EF 835B 00CB 0124+ COPY *CTRLADDR,A 0125 IF A,EQ,=0,NEXTRTN 0 MEANS SKIP THIS SLOT  0125+ MOVE A,Q 00F0 4000 0125+ COPY A,Q 00F1 4B00 0125+ SUB =0,Q 00F2 5150 0103 0125+ JEQ Q,NEXTRTN 0126 IF A,NE,=:E0D,BLKCONT CHECK FOR HALT  0126+ MOVE A,Q 00F3 4000 0126+ COPY A,Q 00F4 CE99 010E 0126+ SUB =:E0D,Q 00F5 51C1 00F7 0126+ JNE Q,BLKCONT 00F6 0E0D 0127 HLT 0128 BLKCONT MOVE  A,RTNADDR 1PAGE 0010 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:17.00 CONTROL LOOP 00F7 8652 00CA 0128+ COPY A,RTNADDR 0129 MOVE TESTIND,RUNCODE 00F8 C247 00C0 0129+ COPY TESTIND,Q 00F9 C668 00E2 0129+ COPY Q,RUNCODE 0130 ADDQ =APPCODE,RUNCODE 0130+ MOVE RUNCODE,Q 00FA C267 00E2 0130+ COPY RUNCODE,Q 00FB 4BB0 0130+ ADD =APPCODE,Q 0130+ MOVE Q,RUNCODE 00FC C665 00E2 0130+  COPY Q,RUNCODE 0131 CALL DISPLAY,=0,RUNCODE 0131+ PUTVAR =0,RUNCODE,, 0131+ MOVE =0,P1 00FD 4900 0131+ COPY =0,Q 00FE C65E 00DD 0131+  COPY Q,P1 0131+ MOVE RUNCODE,P2 00FF C262 00E2 0131+ COPY RUNCODE,Q 0100 C65D 00DE 0131+ COPY Q,P2 0101 BF8A 010C 0131+ JST DISPLAY 0132 CALL  *RTNADDR JUMP TO ROUTINE 0132+ PUTVAR ,,, 0102 BF47 00CA 0132+ JST *RTNADDR  0133 * * DO NOT INCREMENT IF STEP=0 0134 NEXTRTN IF TESTSTEP,EQ,=0,ECTRL  0134+ MOVE TESTSTEP,Q 0103 C23B 00BF 0134+ COPY TESTSTEP,Q 0104 4B00 0134+  SUB =0,Q 0105 5141 0107 0134+ JEQ Q,ECTRL 0106 DE39 00C0 0135 IMS TESTIND 0107 9E5E 00E6 0136 ECTRL JMP CTRL 0137 * * END OF CONTROL LOOP 0138 CALL EXIT 0138+ PUTVAR ,,, 0108 BF86 010F 0138+ JST EXIT 0139 ERRCTRL MOVE =:FF,ERROR 0109 49FF 0139+ COPY =:FF,Q 1PAGE 0011 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TES  T PROGRAM 84-93742 A0 1983/05/05 16:21:20.00 CONTROL LOOP 010A C625 00B0 0139+ COPY Q,ERROR  0140 CALL PRCERROR ERROR IN CONTROL BLOCK ADDRESS 0140+ PUTVAR ,,, 010B BF81 010D 0140+ JST PRCERROR 0005 0141 LPOOL 010C 02CB DISPLAY 010D 031A PRCERROR 010E 0E0D 010F 0351 EXIT 0110 1PAGE 0012 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:20.50 CONTROL LOOP 0143 INITIAL BEGIN 00000111 0143+ RETURN SET $ 0111 9F80 0112 0143+  JMP *INITIAL 00000000 0143+ NREGS SET 0 0112 0E0D 0143+ INITIAL ENT 0113 18FF 0144  AND =:FF,A GET LOWER BYTE OF DEVICE ADDRESS 0145 MOVE A,DEVADD SAVE DEVICE ADDRESS 0114 8645 00DA 0145+ COPY A,DEVADD 0146 MOVE X,XSAVE SAVE INTERRUPT VECTOR 0115 A64E 00E4 0146+ COPY X,XSAVE 0147 MOVE =APPCODE,RUNCODE 0116 49B0  0147+ COPY =APPCODE,Q 0117 C64A 00E2 0147+ COPY Q,RUNCODE 0148 CALL  DISPLAY,=0,RUNCODE 0148+ PUTVAR =0,RUNCODE,, 0148+ MOVE =0,P1 0118 4900 0148+ COPY =0,Q 0119 C643 00DD 0148+ COPY Q,P1 0148+ MOVE RUNCODE,P2 011A C247 00E2 0148+ COPY RUNCODE,Q 011B C642 00DE 0148+ COPY Q,P2 011C BF6F 010C 0148+ JST DISPLAY 0149 COPYQ =:150,S ENABLE CONSOLE INTERRUPT 011D C28A 0128 0149+ COPY =:150,Q 011E 3040 0149+ COPY Q,S 011F 0309 0150 UIS 0151 MOVE =0,A 0120 0900 0151+ COPY =0,A 0121 0201 0152 OUT A,1 TURN OFF CONSOLE INTERRUPT INDICATOR 0122 0202 0153 OUT A,2 TURN OFF AUTOLOAD INDICATOR  0154 MOVE =1,A 0123 0901 0154+ COPY =1,A 0124 0200 0155 OUT A,0 TURN ON SENSE SWITCH INDICATOR 0156 CALL MEMINIT 0156+ PUTVAR ,,, 0125 BF83 0129 0156+ JST MEMINIT 1PAGE 0013 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:23.50 CONTROL LOOP 0157 CALL Z80INIT 0157+  PUTVAR ,,, 0126 BF83 012A 0157+ JST Z80INIT 0158 INITIAL ENDR 0127 9E69 0111 0158+ JMP RETURN 0003 0158+ LPOOL 0128 0150 0129 023E MEMINIT 012A 0281 Z80INIT 1PAGE 0014 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:24.00 TEST MODULES  0160 NMITEST BEGIN 0000012B 0160+ RETURN SET $ 012B 9F80 012C 0160+ JMP *NMITEST 00000000 0160+ NREGS SET 0 012C 0E0D 0160+ NMITEST ENT 0161 CALL RESET RESET   Z80 COPROCESSOR 0161+ PUTVAR ,,, 012D BF87 0135 0161+ JST RESET 0162 CALL STARTZ80,=ZNIRUN,=10 0162+ PUTVAR =ZNIRUN,=10,, 0162+  MOVE =ZNIRUN,P1 012E C287 0136 0162+ COPY =ZNIRUN,Q 012F C62D 00DD 0162+ COPY Q,P1  0162+ MOVE =10,P2 0130 490A 0162+ COPY =10,Q 0131 C62C 00DE 0162+ COPY Q,P2 0132 BF84 0137 0162+ JST STARTZ80 0163 CALL PRCERROR 0163+  PUTVAR ,,, 0133 BF59 010D 0163+ JST PRCERROR 0164 NMITEST ENDR 0134 9E76 012B 0164+ JMP RETURN 0003 0164+ LPOOL 0135 0293 RESET 0136 F7CF ZNIRUN 0137 02AC STARTZ80 0138 0000 0165 RAMPTR WORD 0 0139 0000 0166 MEMSAVE RES 4,0 0167 MACCESS BEGIN 0000013D 0167+ RETURN SET $ 013D 9F80 013E 0167+ JMP *MACCESS 00000000 0167+ NREGS SET 0 013E 0E0D 0167+ MACCESS ENT 0168 CALL RESET RESET Z80 COPROCESSOR  0168+ PUTVAR ,,, 013F BF75 0135 0168+ JST RESET 1PAGE 0015 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:26.25 TEST MODULES 0169 CALL STARTZ80,=ZNIRUN,=10 0169+ PUTVAR =ZNIRUN,=10,, 0169+ MOVE =ZNIRUN,P1 0140 C275 0136 0169+ COPY =ZNIRUN,Q 0141 C61B 00DD 0169+ COPY Q,P1 0169+ MOVE =10,P2 0142 490A 0169+ COPY =10,Q 0143 C61A 00DE 0169+ COPY Q,P2 0144 BF72 0137 0169+  JST STARTZ80 0170 CALL PRCERROR 0170+ PUTVAR ,,, 0145 BF47 010D 0170+ JST PRCERROR 0171 MOVE =ZNIRUN,A 0146 826F 0136 0171+ COPY  =ZNIRUN,A 0172 IF RAMEND,EQ,=:1000,RETURN 0172+ MOVE RAMEND,Q 0147 C219 00E1 0172+ COPY RAMEND,Q 0148 CEB2 017B 0172+ SUB =:1000,Q 0149 5133 013D 0172+  JEQ Q,RETURN 0173 MACCLP FOR X,=:1000 0173+ MOVE =:1000,X 014A A2B0 017B 0173+ COPY =:1000,X 0174 MOVE 0(X),MEMSAVE 014B C080 0000 0174+ COPY 0(X),Q 014C C66C 0139 0174+ COPY Q,MEMSAVE 0175 MOVE 1(X),MEMSAVE+1 014D C081 0001 0175+ COPY 1(X),Q 014E C66B 013A 0175+ COPY Q,MEMSAVE+1 0176 MOVE 2(X),MEMSAVE+2 014F C082 0002 0176+ COPY 2(X),Q 0150 C66A 013B 0176+ COPY Q,MEMSAVE+2  0177 MOVE 3(X),MEMSAVE+3 0151 C083 0003 0177+ COPY 3(X),Q 0152 C669 013C 0177+  COPY Q,MEMSAVE+3 0178 MOVE =:0199,0(X) 0153 C2A8 017C 0178+ COPY =:0199,Q   1PAGE 0016 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:29.25 TEST MODULES  0154 C480 0000 0178+ COPY Q,0(X) 0179 MOVE =:99ED,1(X) 0155 C2A7 017D 0179+  COPY =:99ED,Q 0156 C481 0001 0179+ COPY Q,1(X) 0180 MOVE =:4300,2(X) 0157 C2A6 017E 0180+ COPY =:4300,Q 0158 C482 0002 0180+ COPY Q,2(X) 0181 MOVE =:0076,3(X) 0159 4976 0181+ COPY =:0076,Q 015A C483 0003 0181+ COPY Q,3(X) 015B 0AFF  0182 SUB =1,A 0183 CALL RESET RESET Z80 COPROCESSOR  0183+ PUTVAR ,,, 015C BF58 0135 0183+ JST RESET 0184 CALL STARTZ80,A,=11 0184+ PUTVAR A,=11,, 0184+ MOVE A,P1 015D 879A 0178 0184+  COPY A,P1 0184+ MOVE =11,P2 015E 490B 0184+ COPY =11,Q 015F C799 0179  0184+ COPY Q,P2 0160 BF56 0137 0184+ JST STARTZ80 0185 MOVE X,RAMPTR 0161 A656 0138 0185+ COPY X,RAMPTR 0186 IF *RAMPTR,NE,=:9999,MERROR  0186+ MOVE *RAMPTR,Q 0162 C355 0138 0186+ COPY *RAMPTR,Q 0163 CE9B 017F 0186+ SUB  =:9999,Q 0164 51C2 0167 0186+ JNE Q,MERROR 0187 MOVE =0,ERROR 0165 4900  0187+ COPY =0,Q 0166 C793 017A 0187+ COPY Q,ERROR 0188 MERROR CALL PRCERROR 0188+ PUTVAR ,,, 0167 BF25 010D 0188+ JST PRCERROR 0189 * * RESTORE MEMORY 1PAGE 0017 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:32.25  TEST MODULES 0190 MOVE MEMSAVE,0(X) 0168 C250 0139 0190+ COPY MEMSAVE,Q 0169 C480 0000 0190+ COPY Q,0(X) 0191 MOVE MEMSAVE+1,1(X) 016A C24F 013A 0191+  COPY MEMSAVE+1,Q 016B C481 0001 0191+ COPY Q,1(X) 0192 MOVE MEMSAVE+2,2(X) 016C C24E 013B 0192+ COPY MEMSAVE+2,Q 016D C482 0002 0192+ COPY Q,2(X) 0193  MOVE MEMSAVE+3,3(X) 016E C24D 013C 0193+ COPY MEMSAVE+3,Q 016F C483 0003 0193+ COPY Q,3(X)  0194 ENDFOR X,EQ,RAMEND,+:1000,MACCLP 0194+ ADDQ =:1000,X  0194+ MOVE X,Q 0170 4020 0194+ COPY X,Q 0171 CA89 017B 0194+ ADD =:1000,Q 0194+ MOVE Q,X 0172 2040 0194+ COPY Q,X 0194+ MOVE  X,Q 0173 4020 0194+ COPY X,Q 0174 CF8B 0180 0194+ SUB RAMEND,Q 0175 5141 0177 0194+  JEQ Q,$+2 0176 9E54 014B 0194+ JMP MACCLP+1 0195 MACCESS ENDR 0177 9E45 013D 01 95+ JMP RETURN 0009 0195+ LPOOL 0178 00DD P1 0179 00DE P2 017A 00B0 ERROR 017B 1000 017C 0199 017D 99ED 017E 4300 017F 9999 0180 00E1 RAMEND 1PAGE 0018 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:34.50 TEST MODULES 0196 PRCDIAG BEGIN 00000181 0196+ RETURN SET $ 0181 9F80 0182 0196+ JMP *PRCDIAG 00000000 0196+ NREGS SET 0 0182 0E0D 0196+ PRCDIAG ENT 0197 CALL RESET RESET Z80 COPROCESSOR 0197+ PUTVAR ,,, 0183 BF31 0135 0197+ JST RESET 0198 CALL STARTZ80,=ZNIRUN,=10  0198+ PUTVAR =ZNIRUN,=10,, 0198+ MOVE =ZNIRUN,P1 0184 C231 0136 0198+ COPY =ZNIRUN,Q 0185 C772 0178 0198+ COPY Q,P1 0198+ MOVE =10,P2 0186 490A 0198+ COPY =10,Q 0187 C771 0179 0198+ COPY Q,P2 0188 BF2E 0137 0198+ JST STARTZ80  0199 CALL PRCERROR 0199+ PUTVAR ,,, 0189 BF03 010D 0199+ JST  PRCERROR 0200 PRCDIAG ENDR 018A 9E76 0181 0200+ JMP RETURN 0000 0200+  LPOOL 0201 INPORT BEGIN 0000018B 0201+ RETURN SET $ 018B 9F80 018C 0201+ JMP  *INPORT 00000000 0201+ NREGS SET 0 018C 0E0D 0201+ INPORT ENT 0202 CALL  RESET RESET Z80 COPROCESSOR 0202+ PUTVAR ,,, 018D BF27 0135 0202+ JST RESET 0203 MOVE =1,ZREPLY 018E 4901 0203+ COPY =1,Q 018F C7A4 01B4 0203+  COPY Q,ZREPLY 0204 MOVE =ZNIRUN,A 0190 8225 0136 0204+ COPY =ZNIRUN,A 1PAGE 0019 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:37.25 TEST MODULES  0205 CALL STARTZ80,A,=10 0205+ PUTVAR A,=10,, 0205+  MOVE A,P1 0191 8766 0178 0205+ COPY A,P1 0205+ MOVE =10,P2 0192 490A 0205+ COPY =10,Q 0193 C765 0179 0205+ COPY Q,P2 0194 BF22 0137 0205+ JST STARTZ80  0206 * * SEND TEST PATTERNS TO Z80 USING CONTROL REGISTER 0207 INLOOP FOR X,=0  0207+ MOVE =0,X 0195 2900 0207+ COPY =0,X 0208 MOVE  X,Y 0196 6020 0208+ COPY X,Y 0209 SHIFTB Y,L,8 SHIFT Y LEFT ONE BYTE  0197 0E15 0209+ SBIT 1,S 0198 6E71 0209+ SHIFT Y,LO,8 0199 18FF 0210 AND =:00FF,A MASK OFF UPPER BYTE 019A 0062 0211 ADD Y,A SET UPPER BYTE CONTROL REG  0212 MOVE DEVADD,Y 019B E399 01B5 0212+ COPY DEVADD,Y 019C 630A 0213 X NX Y 019D 0400 0214 SELP A,0 SEND PATTERN TO Z80 WITH CONTROL REG 0215  MOVE =0,ZREPLY TURN ON Z80 019E 4900 0215+ COPY =0,Q 019F C794 01B4 0215+ COPY Q,ZREPLY 0216 CALL WAIT,=ZREPLY,=1,=ZWAIT 0216+ PUTVAR =ZREPLY,=1,=ZWAIT, 0216+ MOVE =ZREPLY,P1 01A0 49B2 0216+ COPY =ZREPLY,Q 01A1 C756 0178 0216+ COPY Q,P1 0216+ MOVE =1,P2 01A2 4901 0216+ COPY =1,Q 01A3 C755 0179 0216+ COPY Q,P2 0216+ MOVE =ZWAIT,P3 01A4 4964 0216+ COPY  =ZWAIT,Q 1PAGE 0020 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:40.00 TEST MODULES 01A5 C790 01B6 0216+ COPY Q,P3 01A6 BF90 01B7 0216+ JST WAIT 0217  IF ZREPLY,EQ,=1,CONT 0217+ MOVE ZREPLY,Q 01A7 C38C 01B4 0217+ COPY ZREPLY,Q 01A8 4AFF 0217+ SUB =1,Q 01A9 5141 01AB 0217+ JEQ Q,CONT 0218  CALL PRCERROR 0218+ PUTVAR ,,, 01AA BF8D 01B8 0218+ JST PRCERROR 01AB 0000  0219 CONT NOP 0220 ENDFOR X,EQ,=:FF,+1,INLOOP 0220+ ADDQ =1,X 0220+ MOVE X,Q 01AC 4020 0220+ COPY X,Q 01AD 4B01 0220+ ADD  =1,Q 0220+ MOVE Q,X 01AE 2040 0220+ COPY Q,X 0220+  MOVE X,Q 01AF 4020 0220+ COPY X,Q 01B0 4A01 0220+ SUB =:FF,Q 01B1 5141 01B3 0220+ JEQ Q,$+2 01B2 9E63 0196 0220+ JMP INLOOP+1 0221 INPORT ENDR 01B3 9E57 018B 0221+ JMP RETURN 0005 0221+ LPOOL 01B4 00B2 ZREPLY 01B5 00DA DEVADD 01B6 00DF P3 01B7 02E6 WAIT 01B8 031A PRCERROR 0222 OUTPORT BEGIN 000001B9 0222+ RETURN SET $ 01B9 9F80 01BA 0222+ JMP *OUTPORT 00000000 0222+ NREGS SET 0 01BA 0E0D 0222+ OUTPORT ENT 1PAGE 0021 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:42.25 TEST MODULES  0223 CALL RESET RESET Z80 COPROCESSOR 0223+ PUTVAR ,,, 01BB BFA0 01DC 0223+ JST RESET 0224 MOVE DEVADD,X 01BC A378 01B5 0224+ COPY DEVADD,X  0225 CALL STARTZ80,=ZNIRUN,=10 0225+ PUTVAR =ZNIRUN,=10,,  0225+ MOVE =ZNIRUN,P1 01BD C2A0 01DE 0225+ COPY =ZNIRUN,Q 01BE C739 0178 0225+ COPY  Q,P1 0225+ MOVE =10,P2 01BF 490A 0225+ COPY =10,Q 01C0 C738 0179 0225+  COPY Q,P2 01C1 BF9B 01DD 0225+ JST STARTZ80 0226 OULOOP FOR Y,=0   0226+ MOVE =0,Y 01C2 6900 0226+ COPY =0,Y 01C3 230A 0227 XNX X 01C4 0100 0228 IN 0,A READ FROM Z80 0229 IF A,EQ,Y,NPATT IF SCOUT AND Z80 PATTERNS MATCH 0229+ MOVE A,Q 01C5 4000 0229+ COPY A,Q 01C6 4063  0229+ SUB Y,Q 01C7 5143 01CB 0229+ JEQ Q,NPATT 0230 MOVE =11,ERROR 01C8 490B 0230+ COPY =11,Q 01C9 C730 017A 0230+ COPY Q,ERROR 0231  CALL PRCERROR 0231+ PUTVAR ,,, 01CA BF6D 01B8 0231+ JST PRCERROR  0232 NPATT MOVE =0,ZREPLY 01CB 4900 0232+ COPY =0,Q 01CC C767 01B4 0232+ COPY Q,ZREPLY 0233 CALL WAIT,=ZREPLY,=1,=ZWAIT 0233+ PUTVAR =ZREPLY,=1,=ZWAIT, 0233+ MOVE =ZREPLY,P1 1PAGE 0022 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:45.00 TEST MODULES 01CD 49B2 0233+ COPY =ZREPLY,Q 01CE C729 0178 0233+  COPY Q,P1 0233+ MOVE =1,P2 01CF 4901 0233+ COPY =1,Q 01D0 C728 0179 0233+ COPY Q,P2 0233+ MOVE =ZWAIT,P3 01D1 4964 0233+ COPY =ZWAIT,Q 01D2 C763 01B6 0233+ COPY Q,P3 01D3 BF63 01B7 0233+ JST WAIT 0234  ENDFOR Y,EQ,=:FF,+1,OULOOP 0234+ ADDQ =1,Y 0234+ MOVE Y,Q 01D4 4060 0234+ COPY Y,Q 01D5 4B01 0234+ ADD =1,Q 0234+ MOVE Q,Y 01D6 6040 0234+ COPY Q,Y 0234+ MOVE Y,Q 01D7 4060 0234+ COPY Y,Q 01D8 4A01 0234+ SUB =:FF,Q 01D9 5141 01DB 0234+ JEQ Q,$+2 01DA 9E68 01C3 0234+  JMP OULOOP+1 0235 OUTPORT ENDR 01DB 9E5D 01B9 0235+ JMP RETURN 0003  0235+ LPOOL 01DC 0293 RESET 01DD 02AC STARTZ80 01DE F7CF ZNIRUN 0236 ZISCOUT BEGIN 000001DF 0236+ RETURN SET $ 01DF 9F80 01E0 0236+ JMP *ZISCOUT 00000000 0236+ NREGS SET 0 01E0 0E0D 0236+ ZISCOUT ENT 0237 * * TEST BITS OF IVA REG ABOVE THE SCOUT AND Z80 CODE  0238 MOVE =:800,Y 01E1 E2A5 0207 0238+ COPY =:800,Y 0239 MOVE DEVADD,A 1PAGE 0023 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:48.00 TEST MODULES 01E2 8352 01B5 0239+ COPY DEVADD,A 0240 * * LOOP: SEND IVA REG, STORE Z80 AT LOC, CALL Z80 01E3 030A 0241 ZREPEAT XNX A 01E4 6200 0242 OUT Y,0 0243 MOVE 0(Y),MEMSAVE 01E5 C040 0000 0243+ COPY 0(Y),Q 01E6 C7A3 020A 0243+ COPY Q,MEMSAVE   0244 MOVE 1(Y),MEMSAVE+1 01E7 C041 0001 0244+ COPY 1(Y),Q 01E8 C7A2 020B 0244+ COPY Q,MEMSAVE+1 0245 MOVE JSTN,0(Y) 01E9 C3A2 020C 0245+ COPY JSTN,Q 01EA C440 0000 0245+ COPY Q,0(Y) 0246 MOVE =Z80INT,1(Y) 01EB C2A1 020D 0246+ COPY =Z80INT,Q 01EC C441 0001 0246+ COPY Q,1(Y) 0247 CALL RESET RESET Z80 COPROCESSOR 0247+ PUTVAR ,,, 01ED BF6E 01DC 0247+ JST RESET 0248  CALL STARTZ80,=ZISRUN,=10 0248+ PUTVAR =ZISRUN,=10,, 0248+ MOVE =ZISRUN,P1 01EE C29F 020E 0248+ COPY =ZISRUN,Q 01EF C708 0178 0248+ COPY Q,P1  0248+ MOVE =10,P2 01F0 490A 0248+ COPY =10,Q 01F1 C707 0179 0248+ COPY Q,P2 01F2 BF6A 01DD 0248+ JST STARTZ80 0249 CALL PRCERROR 0249+  PUTVAR ,,, 01F3 BF44 01B8 0249+ JST PRCERROR 01F4 0E0D 0250 Z80INT ENT 0251  COPYQ =:150,S 01F5 C299 020F 0251+ COPY =:150,Q 01F6 3040 0251+ COPY Q,S  0252 MOVE =0,ERROR 1PAGE 0024 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:50.50 TEST MODULES 01F7 4900 0252+ COPY =0,Q 01F8 C78F 0208 0252+ COPY Q,ERROR 0253 SHIFTB Y,L,1 SHIFT LEFT ONE BIT 01F9 0E15 0253+ SBIT 1,S 01FA 6E01 0253+ SHIFT Y,LO,1 0254 IF Y,GE,RAMEND,RETURN 0254+  MOVE Y,Q 01FB 4060 0254+ COPY Y,Q 01FC CF8C 0209 0254+ SUB RAMEND,Q 01FD 5321 01DF 0254+ JGE Q,RETURN 0255 MOVE MEMSAVE,0(Y) 01FE C38B 020A 0255+ COPY MEMSAVE,Q 01FF C440 0000 0255+ COPY Q,0(Y) 0256 MOVE MEMSAVE+1,1(Y) 0200 C38A 020B 0256+ COPY MEMSAVE+1,Q 0201 C441 0001 0256+ COPY Q,1(Y) 0257 UNTIL Y,EQ,=:8000,ZREPEAT 0257+ MOVE Y,Q 0202 4060 0257+ COPY Y,Q 0203 CE8C 0210 0257+ SUB =:8000,Q 0204 5141 0206 0257+ JEQ Q,$+2 0205 9E5D 01E3 0257+ JMP ZREPEAT 0258 ZISCOUT ENDR 0206 9E58 01DF 0258+ JMP RETURN 000A 0258+ LPOOL  0207 0800 0208 00B0 ERROR 0209 00E1 RAMEND 020A 0139 MEMSAVE 020B 013A 020C 00DC JSTN 020D 01F4 Z80INT 020E F74F ZISRUN  020F 0150 0210 8000 0259 SIZ80 BEGIN 1PAGE 0025 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:52.50 TEST MODULES 00000211 0259+ RETURN SET $ 0211 9F80 0212 0259+  JMP *SIZ80 00000000 0259+ NREGS SET 0 0212 0E0D 0259+ SIZ80 ENT 0260   CALL RESET RESET Z80 COPROCESSOR 0260+ PUTVAR ,,, 0213 BEFF 0293 0260+ JST RESET 0261 CALL TESTINT,=0,=10 0261+ PUTVAR =0,=10,,  0261+ MOVE =0,P1 0214 4900 0261+ COPY =0,Q 0215 C78E 0224 0261+ COPY Q,P1 0261+ MOVE =10,P2 0216 490A 0261+ COPY =10,Q 0217 C78D 0225 0261+  COPY Q,P2 0218 BF8D 0226 0261+ JST TESTINT 0262 CALL TESTINT,=1,=11  0262+ PUTVAR =1,=11,, 0262+ MOVE =1,P1 0219 4901 0262+ COPY  =1,Q 021A C789 0224 0262+ COPY Q,P1 0262+ MOVE =11,P2 021B 490B 0262+  COPY =11,Q 021C C788 0225 0262+ COPY Q,P2 021D BF88 0226 0262+ JST TESTINT  0263 CALL TESTINT,=2,=12 0263+ PUTVAR =2,=12,, 0263+ MOVE =2,P1 021E 4902 0263+ COPY =2,Q 021F C784 0224 0263+ COPY Q,P1 0263+  MOVE =12,P2 0220 490C 0263+ COPY =12,Q 0221 C783 0225 0263+ COPY Q,P2 0222 BF83 0226 0263+ JST TESTINT 0264 SIZ80 ENDR 0223 9E6D 0211 0264+ JMP RETURN 1PAGE 0026 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:55.50 TEST MODULES  0003 0264+ LPOOL 0224 00DD P1 0225 00DE P2 0226 032C TESTINT 1PAGE 0027 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:55.50 SERVICE ROUTINES 0266 * * CONSOLE INTERRUPT SERVICE ROUTINE 0267 CONINT BEGIN 00000227 0267+ RETURN SET $ 0227 9F80 0228 0267+  JMP *CONINT 00000000 0267+ NREGS SET 0 0228 0E0D 0267+ CONINT ENT 0268  MOVE =0,A 0229 0900 0268+ COPY =0,A 022A 0201 0269 OUT A,1 TURN OFF CONSOLE INTERRUPT INDICATOR 0270 CALL RESET RESET Z80 COPROCESSOR 0270+ PUTVAR ,,, 022B BEE7 0293 0270+ JST RESET 0271 MOVE =1,TESTIND RESET TEST INDEX 022C 4901 0271+ COPY =1,Q 022D C7B0 025E 0271+ COPY Q,TESTIND  0272 MOVE =:C0,A SET UP CONTROL BLOCK START ADDRESS 022E 09C0 0272+ COPY =:C0,A 022F 0404 0273 SELP A,4 IN CONSOLE DATA REGISTER 0230 0E0D 0274 HLT 0275 MOVE DEVADD,A RESTORE DEVICE ADDRESS IN A 0231 8303 01B5 0275+ COPY DEVADD,A 0232 9FAD 0260 0276 JMP START RESTART PROGRAM 0277 * * UNEXPECTED INTERRUPT HANDLER  0278 INTERR BEGIN 00000233 0278+ RETURN SET $ 0233 9F80 0234 0278+ JMP *INTERR 0 0000000 0278+ NREGS SET 0 0234 0E0D 0278+ INTERR ENT 0279 MOVE =:F0,ERROR 0235 49F0 0279+ COPY =:F0,Q 0236 C751 0208 0279+ COPY Q,ERROR 0280 CALL PRCERROR 0280+ PUTVAR ,,, 0237 BFA9 0261 0280+ JST PRCERROR 0281 TRAPERR BEGIN 00000238 0281+ RETURN SET $ 1PAGE 0028 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:58.25 SERVICE ROUTINES 0238 9F80 0239 0281+ JMP *TRAPERR 00000000 0281+ NREGS SET 0 0239 0E0D 0281+ TRAPERR ENT 0282 MOVE =:F1,ERROR 023A 49F1 0282+ COPY =:F1,Q 023B C74C 0208 0282+ COPY Q,ERROR 0283 CALL  PRCERROR 0283+ PUTVAR ,,, 023C BFA4 0261 0283+ JST PRCERROR 1PAGE 0029 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:21:59.00 SUBROUTINES 0285 *  * MEMORY INITIALIZATION ROUTINE 0286 * * SEARCH RAM FOR ROM OR UIMPLEMENTED MEMORY 0287 MEMINIT BEGIN 0000023D 0287+ RETURN SET $ 023D 9F80 023E 0287+ JMP *MEMINIT 00000000 0287+ NREGS SET 0 023E 0E0D 0287+ MEMINIT ENT 0288 * * START RAM SEARCH AT 2K  0289 MOVE =0,UIMLOC 023F 4900 0289+ COPY =0,Q 0240 C7A1 0262 0289+ COPY  Q,UIMLOC 0290 MLOOP FOR X,=:800 0290+ MOVE =:800,X 0241 A245 0207 0290+ COPY =:800,X 0291 MOVE 0(X),A TRY TO READ THE LOCATION 0242 8080 0000 0291+ COPY 0(X),A 0243 4009 0292 COMP A,Q WRITE BACK COMPLEMENTED 0293 MOVE Q,0(X) 0244 C480 0000 0293+ COPY Q,0(X) 0245 D880 0000 0294 XOR 0(X),Q  TEST FOR ROM 0246 51CB 0252 0295 JNE Q,MDONE ROM FOUND EXIT 0296 MOVE A,0(X) RESTORE MEM LOC. 0247 8480 0000 0296+ COPY A,0(X) 0297 * * SEARCH IN INCREMENTS OF 2K UNTIL MEMORY WRAPS AROUND 0298 ENDFOR X,EQ,=0,+:800,MLOOP 0298+  ADDQ =:800,X 0298+ MOVE X,Q 0248 4020 0298+ COPY X,Q 0249 CA3D 0207 0298+ ADD =:800,Q 0298+ MOVE Q,X 024A 2040 0298+ COPY Q,X  0298+ MOVE X,Q 024B 4020 0298+ COPY X,Q 024C 4B00 0298+ SUB =0,Q 024D 5141 024F 0298+ JEQ Q,$+2 024E 9E73 0242 0298+ JMP MLOOP+1 1PAGE 0030 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:01.75 SUBROUTINES 024F 9E82 0252 0299 JMP MDONE 0250 0E0D 0300 UIMINT ENT UIM TRAP ENTRY POINT 0301 MOVE   X,UIMLOC SAVE UMIMPLEMENTED MEM. LOC 0251 A790 0262 0301+ COPY X,UIMLOC 0302 MDONE MOVE X,RAMEND SAVE END OF RAM FOUND 0252 A736 0209 0302+ COPY X,RAMEND 0303 IF  DEBUG,EQ,=1,RETURN 0303+ MOVE DEBUG,Q 0253 C38F 0263 0303+ COPY DEBUG,Q 0254 4AFF 0303+ SUB =1,Q 0255 5127 023D 0303+ JEQ Q,RETURN 0304 CALL  MEMFILL,JINTERR,=:800,RAMEND 0304+ PUTVAR JINTERR,=:800,RAMEND, 0304+ MOVE JINTERR,P1 0256 C38D 0264 0304+ COPY JINTERR,Q 0257 C74C 0224 0304+ COPY Q,P1  0304+ MOVE =:800,P2 0258 C22E 0207 0304+ COPY =:800,Q 0259 C74B 0225 0304+ COPY Q,P2 0304+ MOVE RAMEND,P3 025A C32E 0209 0304+ COPY RAMEND,Q 025B C783 025F 0304+ COPY Q,P3 025C BE8D 026A 0304+ JST MEMFILL 0305 MEMINIT ENDR 025D 9E5F 023D 0305+ JMP RETURN 0008 0305+ LPOOL 025E 00C0 TESTIND 025F 00DF P3 0260 00BE START 0261 031A PRCERROR 0262 00E3 UIMLOC 0263 00D9 DEBUG 0264 00DB JINTERR 0265 0306 * * MEMORY FILL ROUTINE  0307 * * P1=START ADDRESS, P2=END ADDRESS+1 1PAGE 0031 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:04.25 SUBROUTINES 0266 0000 0308 FILLWORD WORD 0 0309 MEMFILL BEGIN 2,FILLWORD,X,A 00000267 0309+ RETURN SET $ 0267 9F82 026A 0309+ JMP *MEMFILL  00000002 0309+ NREGS SET 2 0268 0000 0309+ RES NREGS,0 026A 0E0D 0309+ MEMFILL ENT 026B 867C 0268 0309+ COPY A,MEMFILL-NREGS 026C A67C 0269 0309+ COPY X,MEMFILL-NREGS+1 0309+ GETPAR FILLWORD,X,A, 0309+ MOVE P1,FILLWORD 026D C336 0224 0309+ COPY  P1,Q 026E C677 0266 0309+ COPY Q,FILLWORD 0309+ MOVE P2,X 026F A335 0225 0309+ COPY P2,X 0309+ MOVE P3,A 0270 836E 025F 0309+ COPY P3,A  0310 FILL FOR X,X 0310+ MOVE X,X 0271 2020 0310+ COPY X,X  0311 MOVE FILLWORD,0(X) 0272 C273 0266 0311+ COPY FILLWORD,Q 0273 C480 0000 0311+  COPY Q,0(X) 0312 ENDFOR X,EQ,A,+1,FILL 0312+ ADDQ =1,X  0312+ MOVE X,Q 0274 4020 0312+ COPY X,Q 0275 4B01 0312+ ADD =1,Q 0312+ MOVE Q,X 0276 2040 0312+ COPY Q,X 0312+ MOVE X,Q 0277 4020 0312+ COPY X,Q 0278 4003 0312+ SUB A,Q 0279 5141 027B 0312+  JEQ Q,$+2 027A 9E77 0272 0312+ JMP FILL+1 0313 MEMFILL ENDR 1PAGE 0032 MACRO (F2 00) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:07.00 SUBROUTINES 027B 826C 0268 0313+  COPY MEMFILL-NREGS,A 027C A26C 0269 0313+ COPY MEMFILL-NREGS+1,X 027D 9E69 0267 0313+ JMP  RETURN 0000 0313+ LPOOL 0314 Z80INIT BEGIN 2 0000027E 0314+ RETURN SET $ 027E 9F82 0281 0314+ JMP *Z80INIT 00000002 0314+ NREGS SET 2 027F 0000 0314+  RES NREGS,0 0281 0E0D 0314+ Z80INIT ENT 0282 867C 027F 0314+ COPY A,Z80INIT-NREGS 0283 A67C 0280 0314+ COPY X,Z80INIT-NREGS+1 0315 * * LOAD Z80 JUMP AT 0 AND RESET COPROCESSOR  0316 MOVE =0,X 0284 2900 0316+ COPY =0,X 0317 MOVE =ZJMP,0(X) 0285 C287 028D 0317+ COPY =ZJMP,Q 0286 C480 0000 0317+ COPY Q,0(X) 0318  MOVE =ZCODE,1(X) 0287 C286 028E 0318+ COPY =ZCODE,Q 0288 C481 0001 0318+ COPY Q,1(X)  0319 CALL RESET RESET COPROCESSOR 0319+ PUTVAR ,,, 0289 BE89 0293 0319+ JST RESET 0320 Z80INIT ENDR 028A 8274 027F 0320+ COPY Z80INIT-NREGS,A 028B A274 0280 0320+ COPY Z80INIT-NREGS+1,X 028C 9E71 027E 0320+ JMP RETURN 0003 0320+ LPOOL 028D C300 ZJMP 028E 0800 ZCODE 028F 0321 RESET BEGIN 2 00000290 0321+ RETURN SET $ 0290 9F82 0293 0321+ JMP *RESET 00000002 0321+ NREGS SET 2 1PAGE 0033 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:09.00 SUBROUTINES 0291 0000 0321+  RES NREGS,0 0293 0E0D 0321+ RESET ENT 0294 867C 0291 0321+ COPY A,RESET-NREGS 0295 A67C 0292 0321+ COPY X,RESET-NREGS+1 0322 MOVE DEVADD,X 0296 A38F 02A6 0322+ COPY DEVADD,X 0323 MOVE =ZRST,A 0297 8290 02A8 0323+ COPY =ZRST,A 0298 230A  0324 XNX X 0299 0400 0325 SELP A,0 RESET 0326 CALL WAIT,=-1,=0,=30 WAIT UNCOND 30 MS 0326+ PUTVAR =-1,=0,=30, 0326+ MOVE =-1,P1 029A 48FF 0326+ COPY =-1,Q 029B C708 0224 0326+ COPY Q,P1 0326+  MOVE =0,P2 029C 4900 0326+ COPY =0,Q 029D C707 0225 0326+ COPY Q,P2  0326+ MOVE =30,P3 029E 491E 0326+ COPY =30,Q 029F C73F 025F 0326+ COPY Q,P3 02A0 BEC5 02E6 0326+ JST WAIT 02A1 230A 0327 XNX X 02A2 0100 0328 IN  0,A CLEAR BOARD INTERRUPTS 0329 RESET ENDR 02A3 826D 0291 0329+ COPY RESET-NREGS,A 02A4 A26D 0292 0329+ COPY RESET-NREGS+1,X 02A5 9E6A 0290 0329+ JMP RETURN 0003 03 29+ LPOOL 02A6 00DA DEVADD 02A7 02E6 WAIT 02A8 F7FF ZRST 0330 STARTZ80 BEGIN 2,A,ERROR 000002A9 0330+ RETURN SET $ 02A9 9F82 02AC 0330+ JMP *STARTZ80 00000002 0330+ NREGS SET 2 1PAGE 0034 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:11.25 SUBROUTINES 02AA 0000 0330+ RES NREGS,0 02AC 0E0D 0330+ STARTZ80 ENT 02AD 867C 02AA 0330+ COPY A,STARTZ80-NREGS 02AE A67C 02AB 0330+ COPY X,STARTZ80-NREGS+1 0330+ GETPAR A,ERROR,,  0330+ MOVE P1,A 02AF 8394 02C4 0330+ COPY P1,A 0330+ MOVE  P2,ERROR 02B0 C394 02C5 0330+ COPY P2,Q 02B1 C794 02C6 0330+ COPY Q,ERROR 0331  MOVE TESTIND,ZTEST 02B2 C32B 025E 0331+ COPY TESTIND,Q 02B3 C793 02C7 0331+ COPY Q,ZTEST 0332 MOVE DEVADD,X 02B4 A371 02A6 0332+ COPY DEVADD,X 02B5 230A 0333  XNX X 02B6 0400 0334 SELP A,0 SEND CONTROL REGISTER PARAMETER 0335 IF ERROR,EQ,=0,RETURN 0335+ MOVE ERROR,Q 02B7 C38E 02C6 0335+ COPY  ERROR,Q 02B8 4B00 0335+ SUB =0,Q 02B9 512F 02A9 0335+ JEQ Q,RETURN 0336  CALL WAIT,=ERROR,=0,=ZWAIT 0336+ PUTVAR =ERROR,=0,=ZWAIT, 0336+  MOVE =ERROR,P1 02BA 49B0 0336+ COPY =ERROR,Q 02BB C788 02C4 0336+ COPY Q,P1  0336+ MOVE =0,P2 02BC 4900 0336+ COPY =0,Q 02BD C787 02C5 0336+ COPY Q,P2 0336+ MOVE =ZWAIT,P3 02BE 4964 0336+ COPY =ZWAIT,Q 02BF C71F 025F 0336+  COPY Q,P3 02C0 BEA5 02E6 0336+ JST WAIT 0337 STARTZ80 ENDR 02C1 8268 02AA 0337+  COPY STARTZ80-NREGS,A 1PAGE 0035 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:14.25 SUBROUTINES 02C2 A268 02AB 0337+ COPY STARTZ80-NREGS+1,X 02C3 9E65 02A9 0337+ JMP  RETURN 0004 0337+ LPOOL 02C4 00DD P1 02C5 00DE P2 02C6 00B0 ERROR 02C7 00B3 ZTEST 1PAGE 0036 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:14.50 SUBROUTINES 0339 * * DISPLAY ROUTINE 0340 * * P1=LEFT CODE, P2=RIGHT CODE 0341 DISPLAY BEGIN  2,A,X 000002C8 0341+ RETURN SET $ 02C8 9F82 02CB 0341+ JMP *DISPLAY 00000002 0341+ NREGS SET 2 02C9 0000 0341+ RES NREGS,0 02CB 0E0D 0341+ DISPLAY ENT 02CC 867C 02C9 0341+  COPY A,DISPLAY-NREGS 02CD A67C 02CA 0341+ COPY X,DISPLAY-NREGS+1 0341+ GETPAR  A,X,, 0341+ MOVE P1,A 02CE 8375 02C4 0341+ COPY P1,A 0341+   MOVE P2,X 02CF A375 02C5 0341+ COPY P2,X 02D0 38FF 0342 AND =:00FF,X CLEAR LEFT BYTE OF CODE 0343 SHIFTB A,L,8 SHIFT LEFT CODE LEFT ONE BYTE 02D1 0E15 0343+  SBIT 1,S 02D2 0E71 0343+ SHIFT A,LO,8 02D3 2002 0344 ADD A,X ADD LEFT AND RIGHT CODES 02D4 2404 0345 SELP X,4 SEND TO CONSOLE 0346 CALL  WAIT,=-1,=0,=DWAIT WAIT DWAIT MS UNCONDITIONAL 0346+ PUTVAR =-1,=0,=DWAIT, 0346+  MOVE =-1,P1 02D5 48FF 0346+ COPY =-1,Q 02D6 C76D 02C4 0346+ COPY Q,P1  0346+ MOVE =0,P2 02D7 4900 0346+ COPY =0,Q 02D8 C76C 02C5 0346+ COPY Q,P2  0346+ MOVE =DWAIT,P3 02D9 49FA 0346+ COPY =DWAIT,Q 02DA C704 025F 0346+  COPY Q,P3 02DB BE8A 02E6 0346+ JST WAIT 0347 DISPLAY ENDR 02DC 826C 02C9 0347+  COPY DISPLAY-NREGS,A 02DD A26C 02CA 0347+ COPY DISPLAY-NREGS+1,X 1PAGE 0037 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:17.25 SUBROUTINES 02DE 9E69 02C8 0347+ JMP  RETURN 0000 0347+ LPOOL 0348 * * WAIT ROUTINE 0349 * * P1=FLAG TO WAIT FOR,P2=FLAG VALUE,P3=WAIT TIME IN MSEC 0350 * * 3/25 FOR SCOUT 404 CPU 02DF 0003 0351 MFACTOR WORD 3 02E0 0019 0352 DFACTOR WORD 25 02E1 0000 0353 WFLAG WORD 0 VARIABLE FLAG TO WAIT FOR 02E2 0000 0354 WVALUE WORD 0 FLAG VALUE TO WAIT FOR 0355 WAIT BEGIN 2,WFLAG,WVALUE,X 000002E3 0355+ RETURN SET $ 02E3 9F82 02E6 0355+ JMP *WAIT 00000002 0355+ NREGS SET 2 02E4 0000 0355+ RES NREGS,0 02E6 0E0D 0355+ WAIT ENT 02E7 867C 02E4 0355+ COPY A,WAIT-NREGS 02E8 A67C 02E5 0355+ COPY X,WAIT-NREGS+1 0355+  GETPAR WFLAG,WVALUE,X, 0355+ MOVE P1,WFLAG 02E9 C35A 02C4 0355+ COPY P1,Q 02EA C676 02E1 0355+ COPY Q,WFLAG 0355+ MOVE P2,WVALUE 02EB C359 02C5 0355+ COPY P2,Q 02EC C675 02E2 0355+ COPY Q,WVALUE 0355+ MOVE P3,X 02ED A38E 02FC 0355+ COPY P3,X 0356 MOVE =0,A 02EE 0900 0356+ COPY =0,A  0357 IF X,GE,=10,GWAIT 0357+ MOVE X,Q 02EF 4020 0357+ COPY  X,Q 02F0 4AF6 0357+ SUB =10,Q 02F1 5341 02F3 0357+ JGE Q,GWAIT 0358  MOVE =10,X MINIMUM OF 10 MS 02F2 290A 0358+ COPY =10,X 0359 * * CONVERT INPUT MS X MFACTOR / DFACTOR TO CLOCK TICKS 1PAGE 0038 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84- 93742 A0 1983/05/05 16:22:20.00 SUBROUTINES 02F3 2700 0360 GWAIT MUL MFACTOR,AX 02F4 02DF 02F5 2701  0361 DIV DFACTOR,AX 02F6 02E0 0362 CALL CLOCK,X 0362+ PUTVAR X,,, 0362+ MOVE X,P1 02F7 A74C 02C4 0362+ COPY X,P1 02F8 BE87 0300 0362+ JST CLOCK 0363 WAIT ENDR 02F9 826A 02E4 0363+ COPY WAIT-NREGS,A 02FA A26A 02E5 0363+ COPY WAIT-NREGS+1,X 02FB 9E67 02E3 0363+ JMP RETURN 0002 0363+ LPOOL 02FC 00DF P3 02FD 0364 * * CLOCK ROUTINE 0365 * * P1=CLOCK TICKS  0366 CLOCK BEGIN 1,A 000002FE 0366+ RETURN SET $ 02FE 9F81 0300 0366+ JMP *CLOCK  00000001 0366+ NREGS SET 1 02FF 0000 0366+ RES NREGS,0 0300 0E0D 0366+ CLOCK ENT 0301 867D 02FF 0366+ COPY A,CLOCK-NREGS 0366+ GETPAR A,,, 0366+ MOVE P1,A 0302 8341 02C4 0366+ COPY P1,A 0303 0001 0367 NEG A 0368  MOVE A,:91 SET -COUNT IN LOC :91 0304 8792 0317 0368+ COPY A,:91 0369  COPYQ =:170,S ENABLE REAL-TIME CLOCK 0305 C292 0318 0369+ COPY =:170,Q 0306 3040 0369+  COPY Q,S 0370 IF WFLAG,EQ,=-1,ILOOP 0370+ MOVE WFLAG,Q 1PAGE 0039 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:22.00 SUBROUTINES 0307 C259 02E1 0370+ COPY WFLAG,Q 0308 4B01 0370+ SUB =-1,Q 0309 5146 0310 0370+ JEQ  Q,ILOOP 0371 FLOOP UNTIL *WFLAG,EQ,WVALUE,FLOOP 0371+ MOVE *WFLAG,Q 030A C356 02E1 0371+ COPY *WFLAG,Q 030B CE56 02E2 0371+ SUB WVALUE,Q 030C 5141 030E 0371+  JEQ Q,$+2 030D 9E7C 030A 0371+ JMP FLOOP 0372 MOVE =-1,:91 SET CLOCK TO STRIKE 030E 48FF 0372+ COPY =-1,Q 030F C787 0317 0372+ COPY Q,:91 0310 9E7F 0310 0373 ILOOP JMP $ INFINITE WAIT FOR CLOCK VECTOR 0311 0E0D 0374 CLOCKINT ENT REAL-TIME CLOCK INTERRUPT ENTRY 0375 COPYQ =:150,S 0312 C283 0316 0375+ COPY =:150,Q 0313 3040 0375+ COPY Q,S 0376 CLOCK ENDR 0314 826A 02FF 0376+ COPY CLOCK-NREGS,A  0315 9E68 02FE 0376+ JMP RETURN 0003 0376+ LPOOL 0316 0150 0317 0091 0318 0170  0377 * * ERROR PROCESSOR 0378 * * P1=ERROR CODE 0379 PRCERROR BEGIN  00000319 0379+ RETURN SET $ 0319 9F80 031A 0379+ JMP *PRCERROR 00000000 0379+ NREGS SET  0 031A 0E0D 0379+ PRCERROR ENT 0380 IF ERROR,EQ,=0,RETURN 0380+   MOVE ERROR,Q 031B C32A 02C6 0380+ COPY ERROR,Q 031C 4B00 0380+ SUB =0,Q 031D 513B 0319 0380+ JEQ Q,RETURN 1PAGE 0040 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:24.00 SUBROUTINES 0381 CALL DISPLAY,RUNCODE,ERROR 0381+  PUTVAR RUNCODE,ERROR,, 0381+ MOVE RUNCODE,P1 031E C389 0328 0381+ COPY RUNCODE,Q 031F C724 02C4 0381+ COPY Q,P1 0381+ MOVE ERROR,P2 0320 C325 02C6 0381+  COPY ERROR,Q 0321 C723 02C5 0381+ COPY Q,P2 0322 BE28 02CB 0381+ JST DISPLAY 0323 0E0D  0382 HLT 0383 COPYQ =:150,S 0324 C271 0316 0383+ COPY =:150,Q 0325 3040 0383+ COPY Q,S 0384 CALL EXIT JUMP TO EXIT IF RESTARTED  0384+ PUTVAR ,,, 0326 BEAA 0351 0384+ JST EXIT 0385 PRCERROR ENDR 0327 9E71 0319 0385+ JMP RETURN 0002 0385+ LPOOL 0328 00E2 RUNCODE 0329 0386 *  * TEST Z80 INTERRUPT ROUTINE 0387 TESTINT BEGIN 1,ZIMODE,ERROR 0000032A 0387+ RETURN SET  $ 032A 9F81 032C 0387+ JMP *TESTINT 00000001 0387+ NREGS SET 1 032B 0000 0387+  RES NREGS,0 032C 0E0D 0387+ TESTINT ENT 032D 867D 032B 0387+ COPY A,TESTINT-NREGS 0387+ GETPAR ZIMODE,ERROR,, 0387+ MOVE P1,ZIMODE 032E C315 02C4 0387+ COPY  P1,Q 032F C79B 034B 0387+ COPY Q,ZIMODE 0387+ MOVE P2,ERROR 0330 C314 02C5 0387+ COPY P2,Q 0331 C714 02C6 0387+ COPY Q,ERROR 1PAGE 0041 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:26.25 SUBROUTINES 0388 CALL STARTZ80,=ZNIRUN,=0 0388+ PUTVAR =ZNIRUN,=0,, 0388+ MOVE =ZNIRUN,P1 0332 C299 034C  0388+ COPY =ZNIRUN,Q 0333 C710 02C4 0388+ COPY Q,P1 0388+ MOVE =0,P2  0334 4900 0388+ COPY =0,Q 0335 C70F 02C5 0388+ COPY Q,P2 0336 BF96 034D 0388+ JST  STARTZ80 0389 CALL WAIT,=ERROR,=4,=ZWAIT 0389+ PUTVAR =ERROR,=4,=ZWAIT, 0389+ MOVE =ERROR,P1 0337 49B0 0389+ COPY =ERROR,Q 0338 C70B 02C4 0389+ COPY Q,P1 0389+ MOVE =4,P2 0339 4904 0389+ COPY =4,Q 033A C70A 02C5 0389+ COPY Q,P2 0389+ MOVE =ZWAIT,P3 033B 4964 0389+ COPY  =ZWAIT,Q 033C C73F 02FC 0389+ COPY Q,P3 033D BE28 02E6 0389+ JST WAIT 0390  MOVE =SIZRUN,A 033E 088F 0390+ COPY =SIZRUN,A 0391 IF ZIMODE,NE, =2,TESTI 0391+ MOVE ZIMODE,Q 033F C38B 034B 0391+ COPY ZIMODE,Q 0340 4AFE 0391+ SUB =2,Q 0341 51C1 0343 0391+ JNE Q,TESTI 0392 MOVE =SIZRUN2,A  0342 828B 034E 0392+ COPY =SIZRUN2,A 0393 TESTI CALL STARTZ80,A,ERROR 0393+ PUTVAR A,ERROR,, 0393+ MOVE A,P1 0343 8700 02C4 0393+ COPY A,P1  0393+ MOVE ERROR,P2 0344 C38A 034F 0393+ COPY ERROR,Q 1PAGE 0042 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:29.25 SUBROUTINES 0345 C784 034A 0393+ COPY Q,P2 0346 BF86 034D 0393+ JST STARTZ80 0394 CALL PRCERROR  0394+ PUTVAR ,,, 0347 BE52 031A 0394+ JST PRCERROR 0395 TESTINT ENDR 0348 8262 032B 0395+ COPY TESTINT-NREGS,A 0349 9E60 032A 0395+ JMP RETURN 0006 0395+ LPOOL 034A 00DE P2 034B 00B1 ZIMODE 034C F7CF ZNIRUN 034D 02AC STARTZ80 034E 388F SIZRUN2 034F 00B0 ERROR 1PAGE 0043 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:30.00 EXIT SEQUENCE  0397 EXIT BEGIN 00000350 0397+ RETURN SET $ 0350 9F80 0351 0397+ JMP *EXIT 00000000  0397+ NREGS SET 0 0351 0E0D 0397+ EXIT ENT 0398 CALL DISPLAY,=0,=:BF  0398+ PUTVAR =0,=:BF,, 0398+ MOVE =0,P1 0352 4900 0398+ COPY  =0,Q 0353 C790 0364 0398+ COPY Q,P1 0398+ MOVE =:BF,P2 0354 49BF 0398+  COPY =:BF,Q 0355 C774 034A 0398+ COPY Q,P2 0356 BF8E 0365 0398+ JST DISPLAY  0399 CALL RESET 0399+ PUTVAR ,,, 0357 BF8E 0366 0399+ JST RESET 0400 * * SET UP END OF LINK SAL INSTRUCTIONS 0401 MOVE =ELINK,X 0358 A28E 0367 0401+ COPY =ELINK,X 0402 MOVE SAL00,2(X) BACKUP SAL0,0 0359 C289 0363 0402+ COPY SAL00,Q 035A C482 0002 0402+ COPY Q,2(X) 0403 IF DEBUG,EQ,=0,NEXTISO 0403+ MOVE DEBUG,Q 035B C38C 0368 0403+ COPY DEBUG,Q 035C 4B00 0403+ SUB =0,Q 035D 5141 035F 0403+ JEQ Q,NEXTISO 035E 0E0D 0404 HLT  0405 NEXTISO COPYQ =:40,S 035F 4940 0405+ COPY =:40,Q 0360 3040 0405+ COPY Q,S  0361 0309 0406 UIS 0362 9C81 0001 0407 JMP 1(X) JUMP TO CPU SAL 0363 6600 0408 SAL00 SAL 0,0 0005 0409 LPOOL 1PAGE 0044 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A0 1983/05/05 16:22:32.50 EXIT SEQUENCE 0364 00DD P1 0365 02CB DISPLAY 0366 0293 RESET 0367 0000 EL INK 0368 00D9 DEBUG 00BE 0410 ENDSCOUT END START 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000)  0361 0309 0406 UIS 0362 9C81 0001 0407 JMP 1(X) JUMP TO CPU SAL 0363 6600 04089+ GETPAR ZIMODE,ERROR,, 0389+ MOVE P1,ZIMODE 032E C315 02C4 0389+ COPY P1,Q 032F C79B 034B 0389+ COPY Q,ZIMODE 0389+ MOVE P2,ERROR 0330 C314 02C5 0389+  COPY P2,Q 0331 C714 02C6 0389+ COPY Q,ERROR 1PAGE 0041 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A1 1983/05/06 15:38:05.00 SUBROUTINES 0390 CALL STARTZ80,=ZNIRUN,=0 0390+ PUTVAR =ZNIRUN,=0,, 0390+ MOVE =ZNIRUN,P1 0332 C299 034C 0390+ COPY =ZNIRUN,Q 0333 C710 02C4 0390+ COPY Q,P1 0390+ MOVE =0,P2 0334 4900 0390+ COPY =0,Q 0335 C70F 02C5 0390+ COPY Q,P2 0336 BF96 034D 0390+ JST  STARTZ80 0391 CALL WAIT,=ERROR,=4,=ZWAIT 0391+ PUTVAR =ERROR,=4,=ZWAIT, 0391+ MOVE =ERROR,P1 0337 49B0 0391+ COPY =ERROR,Q 0338 C70B 02C4 0391+ COPY Q,P1 0391+ MOVE =4,P2 0339 4904 0391+ COPY =4,Q 033A C70A 02C5 0391+ COPY Q,P2 0391+ MOVE =ZWAIT,P3 033B 4964 0391+ COPY =ZWAIT,Q 033C C73F 02FC 0391+ COPY Q,P3 033D BE28 02E6 0391+ JST WAIT 0392  MOVE =SIZRUN,A 033E 088F 0392+ COPY =SIZRUN,A 0393 IF ZIMODE,NE,=2,TESTI 0393+ MOVE ZIMODE,Q 033F C38B 034B 0393+ COPY ZIMODE,Q 0340 4AFE 0393+ SUB =2,Q 0341 51C1 0343 0393+ JNE Q,TESTI 0394 MOVE =SIZRUN2,A 0342 828B 034E 0394+ COPY =SIZRUN2,A 0395 TESTI CALL STARTZ80,A,ERROR 0395+ PUTVAR A,ERROR,, 0395+ MOVE A,P1 0343 8700 02C4 0395+ COPY A,P1  0395+ MOVE ERROR,P2 0344 C38A 034F 0395+ COPY ERROR,Q 1PAGE 0042 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A1 1983/05/06 15:38:08.75 SUBROUTINES 0345 C784 034A 0395+ COPY  Q,P2 0346 BF86 034D 0395+ JST STARTZ80 0396 CALL PRCERROR 0396+ PUTVAR ,,, 0347 BE52 031A 0396+ JST PRCERROR 0397 TESTINT ENDR 0348 8262 032B 0397+ COPY TESTINT-NREGS,A 0349 9E60 032A 0397+ JMP RETURN 0006 0397+ LPOOL  034A 00DE P2 034B 00B1 ZIMODE 034C F7CF ZNIRUN 034D 02AC STARTZ80 034E 388F SIZRUN2 034F 00B0 ERROR 1PAGE 0043 MACRO (F200) SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A1 1983/05/06 15:38:09.75 EXIT SEQUENCE 03  TITL SCOUT NM4 Z80 CO-PROCESSOR ISOLITE TEST PROGRAM 84-93742 A1 TITL TITLE PAGE * * VERSION A1 - ADDED NMI TEST AND USE OF THE NMI IN Z80 TESTS TO TEST * MEMORY TITL EQUATES AND EXTERNALS MACHINE =:1 404 EXTR DEBUG4 EXTR ELINK END OF LINK LOC. SCOUT + Z80 NAM DENTRY ENTRY FOR DOWNLINE PROGRAM  NAM ENDSCOUT NAM START PROGRAM START NAM G:0 OS4 DEBUG ENTRY * * Z80 CODE EQUATES ZMEMORY EQU :400 LOCATION OF Z80 IN MEMORY ZCODE EQU ZMEMORY*2 ZMEMORY LOC FOR Z80 CODE FORMAT ZLOWER EQU ZCODE&:00FF GET LOWER BYTE ZJMP EQU :C300++ZLOWER CREATE FIRST BYTE OF Z80 JUMP * * Z80 BOARD CONTROL REGISTER EQUATES SIZRUN EQU :FF8F RUN, SCOUT INT Z80 SIZRUN2 EQU :388F RUN, SCOUT INT Z80 MODE 2 ZMERUN EQU :F7C0 RUN AT :F000 WITH NO INTERRUPTS ZNIRUN EQU :F7CF RUN AT :0000 WITH NO INTERRUPTS ZRST EQU :F7FF RESET ZISRUN EQU :F74F RUN, Z80 INT SCOUT * * SCOUT EQUATES APPCODE EQU :B0 APPLICATION DISPLAY CODE DWAIT EQU 250 WAIT TIME FOR CONSOLE DISPLAYS IN MSEC ZWAIT  EQU 100 MAX TIME TO WAIT FOR Z80 TEST MODULE TITL TRAP VECTORS TRAP 0,DEBUG4 * * Z80 VECTOR INSTRUCTIONS: LOC 6 = UNDEFINED INTERRUPT ZVECTOR :4,10 ZVECTOR :8,10 ZVECTOR :C,10 ABS  :E DENTRY JMP DSTART ZVECTOR :10,10 ZVECTOR :14,10 ZVECTOR :18,10 ZVECTOR :1C,4  CLEAR ERROR ROUTINE ABS :20 VINTERR ENT JST INTERR UNEXPECTED ERROR TRAP VECTOR  ZVECTOR :33,7 WORD ELINK ABS :70 DSTART MOVE DEVADD,A MOVE STANDARD DEVICE ADDRESS FOR DEBUG MOVE =1,DEBUG TURN ON DEBUG FLAG JMP START LPOOL TRAP :80,TRAPERR  TRAP :86,TRAPERR TRAP :8A,UIMINT TRAP :8E,TRAPERR TRAP :92,CLOCKINT TRAP :94,CONINT TRAP :9E,TRAPERR TRAP :A2,TRAPERR TRAP :AA,TRAPERR COMMON EQU :B0 COMMON AREA FOR VARIABLES (SCOUT-Z80) ABS COMMON ERROR WORD 0 ISOLITE ERROR VALUE ZIMODE WORD  0 Z80 INTERRUPT MODE ZREPLY WORD 0 Z80 I/O TEST FLAG ZTEST WORD 0 Z80 TEST INDEX ZHALT WORD :7676 Z80 HALT INSTRUCTION (FAILSAFE) LPOOL TITL MAIN PROGRAM ABS :BE START JMP STARTPRG JUMP OVER ALL DATA DEFINITIONS * * CONTROL BLOCK DEFINITION TESTSTEP WORD 1 CONTROL STEP FLAG TESTIND WORD 1 TEST INDEX * CTRLBLK EQU $ CONTROL BLOCK WORD NMITEST  WORD MACCESS WORD PRCDIAG WORD INPORT WORD OUTPORT WORD ZISCOUT WORD SIZ80 WORD 0 CTRLEND EQU $-1 END OF CONTROL BLOCK * LPOOL RTNADDR WORD 0 CURRENT CONTROL ROUTINE ADDRESS IN BLOCK CTRLADDR WORD 0 CURRENT CONTROL BLOCK ADDRESS * * * CONTROL BLOCK COMMA NDS : HOLD, RETN HOLD BEGIN * * SET BLOCK TO LAST ROUTINE AND LOOP MOVE =0,TESTSTEP SUBQ =2,TESTIND HOLD ENDR RETN BEGIN * * RETURN TO FIRST ROUTINE MOVE =0,TESTIND RETN ENDR TITL DATA DEFINITIONS DEBUG WORD 0 DEBUG FLAG DEVADD WORD :80 DEVICE ADDRESS FROM A REGISTER JINTERR JST  VINTERR ERROR VECTOR TO VINTERR JSTN JST *$+1 P1 WORD 0 P2 WORD 0 P3 WORD 0 P4  WORD 0 RAMEND WORD 0 END OF RAM RUNCODE WORD 0 UIMLOC WORD 0 XSAVE WORD 0 LPOOL TITL CONTROL LOOP G:0 EQU $ STARTPRG EQU $ CALL INITIAL CALL INITIAL MODULE * * START CONTROL LOOP (CTRL - ECTRL) CTRL MOVE =CTRLBLK-1,A GET TOP AND ADD INDEX INTO BLOCK ADD TESTIND,A MOVE A,CTRLADDR * * CHECK FOR VALID BLOCK ADDRESS IF CTRLADDR,LT,=CTRLBLK,ERRCTRL IF CTRLADDR,GT,=CTRLEND,ECTRL+1 MOVE *CTRLADDR,A GET ROUTINE ADDRESS IF A,EQ,=0,NEXTRTN 0 MEANS SKIP THIS SLOT IF A,NE,=:E0D,BLKCONT CHECK FOR HALT HLT BLKCONT MOVE A,RTNADDR MOVE TESTIND,RUNCODE ADDQ =APPCODE,RUNCODE CALL DISPLAY,=0,RUNCODE CALL *RTNADDR JUMP TO ROUTINE * * DO NOT INCREMENT IF STEP=0 NEXTRTN IF TESTSTEP,EQ,=0,ECTRL IMS TESTIND ECTRL JMP CTRL * * END OF CONTROL LOOP CALL EXIT ERRCTRL MOVE =:FF,ERROR CALL PRCERROR ERROR IN CONTROL BLOCK ADDRESS  LPOOL TITL INITIAL BEGIN AND =:FF,A GET LOWER BYTE OF DEVICE ADDRESS MOVE A,DEVADD  SAVE DEVICE ADDRESS MOVE X,XSAVE SAVE INTERRUPT VECTOR MOVE =APPCODE,RUNCODE CALL  DISPLAY,=0,RUNCODE COPYQ =:150,S ENABLE CONSOLE INTERRUPT UIS MOVE =0,A OUT  A,1 TURN OFF CONSOLE INTERRUPT INDICATOR OUT A,2 TURN OFF AUTOLOAD INDICATOR MOVE =1,A OUT A,0 TURN ON SENSE SWITCH INDICATOR CALL MEMINIT CALL Z80INIT INITIAL ENDR TITL TEST MODULES NMITEST BEGIN CALL RESET RESET Z80 COPROCESSOR CALL STARTZ80,=ZNIRUN,=10 CALL PRCERROR NMITEST ENDR RAMPTR WORD 0 MEMSAVE RES 4,0 MACCESS BEGIN CALL RESET  RESET Z80 COPROCESSOR CALL STARTZ80,=ZNIRUN,=10 CALL PRCERROR MOVE =ZNIRUN,A  IF RAMEND,EQ,=:1000,RETURN MACCLP FOR X,=:1000 MOVE 0(X),MEMSAVE MOVE 1(X),MEMSAVE+1  MOVE 2(X),MEMSAVE+2 MOVE 3(X),MEMSAVE+3 MOVE =:0199,0(X) MOVE =:99ED,1(X) MOVE =:4300,2(X) MOVE =:0076,3(X) SUB =1,A CALL RESET RESET Z80 COPROCESSOR  CALL STARTZ80,A,=11 MOVE X,RAMPTR IF *RAMPTR,NE,=:9999,MERROR MOVE =0,ERROR MERROR  CALL PRCERROR * * RESTORE MEMORY MOVE MEMSAVE,0(X) MOVE MEMSAVE+1,1(X) MOVE MEMSAVE +2,2(X) MOVE MEMSAVE+3,3(X) ENDFOR X,EQ,RAMEND,+:1000,MACCLP MACCESS ENDR PRCDIAG BEGIN CALL  RESET RESET Z80 COPROCESSOR CALL STARTZ80,=ZNIRUN,=10 CALL PRCERROR PRCDIAG ENDR INPORT BEGIN CALL RESET RESET Z80 COPROCESSOR MOVE =1,ZREPLY MOVE =ZNIRUN,A CALL STARTZ80,A,=10 * * SEND TEST PATTERNS TO Z80 USING CONTROL REGISTER INLOOP FOR X,=0 MOVE X,Y SHIFTB Y,L,8 SHIFT Y LEFT ONE BYTE AND =:00FF,A MASK OFF UPPER BYTE ADD Y,A SET UPPER BYTE CONTROL REG MOVE DEVADD,Y XNX Y SELP A,0  SEND PATTERN TO Z80 WITH CONTROL REG MOVE =0,ZREPLY TURN ON Z80 CALL WAIT,=ZREPLY,=1,=ZWAIT  IF ZREPLY,EQ,=1,CONT CALL PRCERROR CONT NOP ENDFOR X,EQ,=:FF,+1,INLOOP INPORT ENDR OUTPORT BEGIN CALL RESET RESET Z80 COPROCESSOR MOVE DEVADD,X CALL STARTZ80,=ZNIRUN,=10 OULOOP FOR Y,=0 XNX X IN 0,A READ FROM Z80 IF A,EQ,Y,NPATT  IF SCOUT AND Z80 PATTERNS MATCH MOVE =11,ERROR CALL PRCERROR NPATT MOVE =0,ZREPLY CALL WAIT,=ZREPLY,=1,=ZWAIT ENDFOR Y,EQ,=:FF,+1,OULOOP OUTPORT ENDR ZISCOUT BEGIN * * TEST BITS OF IVA REG ABOVE THE SCOUT AND Z80 CODE MOVE =:800,Y MOVE DEVADD,A * * LOOP: SEND IVA REG, STORE Z80 AT LOC, CALL Z80 ZREPEAT XNX A OUT Y,0 MOVE 0(Y),MEMSAVE MOVE 1(Y),MEMSAVE+1 MOVE JSTN,0(Y) MOVE =Z80INT,1(Y) CALL RESET RESET Z80 COPROCESSOR CALL STARTZ80,=ZISRUN,=10 CALL PRCERROR Z80INT ENT COPYQ =:150,S MOVE =0,ERROR SHIFTB Y,L,1 SHIFT LEFT ONE BIT IF Y,GE,RAMEND,RETURN MOVE MEMSAVE,0(Y) MOVE MEMSAVE+1,1(Y) UNTIL Y,EQ,=:8000,ZREPEAT ZISCOUT ENDR SIZ80 BEGIN CALL RESET RESET Z80 COPROCESSOR CALL TESTINT,=0,=10 CALL TESTINT,=1,=11 CALL TESTINT,=2,=12 SIZ80 ENDR TITL SERVICE ROUTINES * * CONSOLE INTERRUPT SERVICE ROUTINE CONINT BEGIN MOVE =0,A OUT A,1 TURN OFF CONSOLE INTERRUPT INDICATOR CALL RESET RESET Z80 COPROCESSOR MOVE =1,TESTIND RESET TEST INDEX  MOVE =:C0,A SET UP CONTROL BLOCK START ADDRESS SELP A,4 IN CONSOLE DATA REGISTER  HLT MOVE DEVADD,A RESTORE DEVICE ADDRESS IN A JMP START RESTART PROGRAM * * UNEXPECTED INTERRUPT HANDLER INTERR BEGIN MOVE =:F0,ERROR CALL PRCERROR TRAPERR BEGIN  MOVE =:F1,ERROR CALL PRCERROR TITL SUBROUTINES * * MEMORY INITIALIZATION ROUTINE * * SEARCH RAM FOR ROM OR UIMPLEMENTED MEMORY MEMINIT BEGIN * * START RAM SEARCH AT 2K MOVE =0,UIMLOC MLOOP FOR X,=:800   MOVE 0(X),A TRY TO READ THE LOCATION COMP A,Q WRITE BACK COMPLEMENTED MOVE Q,0(X) XOR 0(X),Q TEST FOR ROM JNE Q,MDONE ROM FOUND EXIT MOVE A,0(X)  RESTORE MEM LOC. * * SEARCH IN INCREMENTS OF 2K UNTIL MEMORY WRAPS AROUND ENDFOR X,EQ,=0,+:800,MLOOP JMP MDONE UIMINT ENT UIM TRAP ENTRY POINT MOVE X,UIMLOC SAVE UMIMPLEMENTED MEM. LOC MDONE MOVE X,RAMEND SAVE END OF RAM FOUND IF DEBUG,EQ,=1,RETURN CALL MEMFILL,JINTERR,=:800,RAMEND MEMINIT ENDR * * MEMORY FILL ROUTINE * * P1=START ADDRESS, P2=END ADDRESS+1 FILLWORD WORD 0 MEMFILL BEGIN 2,FILLWORD,X,A FILL FOR X,X MOVE FILLWORD,0(X) ENDFOR X,EQ,A,+1,FILL MEMFILL ENDR Z80INIT BEGIN 2 * * LOAD Z80 JUMP AT 0 AND RESET COPROCESSOR MOVE =0,X MOVE =ZJMP,0(X) MOVE =ZCODE,1(X) CALL RESET RESET COPROCESSOR Z80INIT ENDR RESET BEGIN 2 MOVE DEVADD,X MOVE =ZRST,A  XNX X SELP A,0 RESET CALL WAIT,=-1,=0,=30 WAIT UNCOND 30 MS XNX X  IN 0,A CLEAR BOARD INTERRUPTS RESET ENDR STARTZ80 BEGIN 2,A,ERROR MOVE TESTIND,ZTEST MOVE DEVADD,X XNX X SELP A,0 SEND CONTROL REGISTER PARAMETER IF ERROR,EQ,=0,RETURN CALL WAIT,=ERROR,=0,=ZWAIT STARTZ80 ENDR TITL * * DISPLAY ROUTINE * * P1=LEFT CODE, P2=RIGHT CODE DISPLAY BEGIN 2,A,X AND =:00FF,X CLEAR LEFT BYTE OF CODE SHIFTB A,L,8 SHIFT LEFT CODE LEFT ONE BYTE ADD A,X ADD LEFT AND RIGHT CODES SELP X,4 SEND TO CONSOLE CALL WAIT,=-1,=0,=DWAIT WAIT DWAIT MS UNCONDITIONAL DISPLAY ENDR * * WAIT ROUTINE *  * P1=FLAG TO WAIT FOR,P2=FLAG VALUE,P3=WAIT TIME IN MSEC * * 3/25 FOR SCOUT 404 CPU MFACTOR WORD 3 DFACTOR WORD 25 WFLAG WORD 0 VARIABLE FLAG TO WAIT FOR WVALUE WORD 0 FLAG VALUE TO WAIT FOR WAIT BEGIN 2,WFLAG,WVALUE,X MOVE =0,A IF X,GE,=10,GWAIT MOVE =10,X MINIMUM OF 10 MS *  * CONVERT INPUT MS X MFACTOR / DFACTOR TO CLOCK TICKS GWAIT MUL MFACTOR,AX DIV DFACTOR,AX CALL CLOCK,X WAIT ENDR * * CLOCK ROUTINE * * P1=CLOCK TICKS CLOCK BEGIN 1,A NEG A MOVE A,:91 SET -COUNT IN LOC :91 COPYQ =:170,S ENABLE REAL-TIME CLOCK IF WFLAG,EQ,=-1,ILOOP FLOOP UNTIL *WFLAG,EQ,WVALUE,FLOOP MOVE =-1,:91 SET CLOCK TO STRIKE ILOOP JMP $  INFINITE WAIT FOR CLOCK VECTOR CLOCKINT ENT REAL-TIME CLOCK INTERRUPT ENTRY COPYQ =:150,S CLOCK ENDR * * ERROR PROCESSOR * * P1=ERROR CODE PRCERROR BEGIN IF ERROR,EQ,=0,RETURN CALL DISPLAY,RUNCODE,ERROR HLT COPYQ =:150,S CALL EXIT JUMP TO EXIT IF RESTARTE  D PRCERROR ENDR * * TEST Z80 INTERRUPT ROUTINE TESTINT BEGIN 1,ZIMODE,ERROR CALL STARTZ80,=ZNIRUN,=0  CALL WAIT,=ERROR,=4,=ZWAIT MOVE =SIZRUN,A IF ZIMODE,NE,=2,TESTI MOVE =SIZRUN2,A TESTI CALL STARTZ80,A,ERROR CALL PRCERROR TESTINT ENDR TITL EXIT SEQUENCE EXIT BEGIN CALL DISPLAY,=0,=:BF CALL RESET * * SET UP END OF LINK SAL INSTRUCTIONS MOVE =ELINK,X MOVE SAL00,2(X) BACKUP SAL0,0 IF DEBUG,EQ,=0,NEXTISO HLT NEXTISO COPYQ =:40,S UIS JMP 1(X) JUMP TO CPU SAL SAL00 SAL 0,0 LPOOL ENDSCOUT END START MOVE =SIZRUN2,A TESTI CALL STARTZ80,A,ERROR CALL PRCERROR TESTINT ENDR TITL EXIT SEQUENCE EXIT BEGIN CALL DISPLAY,=0,=:BF CALL RESET * * SET UP END OF LINK SAL INSTRUCTIONS MOVE =ELINK,X MOVE SAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII :10080000C3440876C33D08C32E08CC000000AA00EC :100810000000CCBB0000EEDD0000C5C50000C6C670 :100820000000C7C70000C8C80000000000763E09ED :10083000326101F3763A6101D601C242083E0032CC :100840006101F376003E01326101DD21FF3FDDF9F8 :100850003A670147D601CA810878D602CA94087857 :10086000D603CABB0878D604CAFB0878D605CA22C4 :100870000978D606CA3F0978D607CA4809CD88093B :100880007600473A63015F3A6501673A6701CD88B0 :1008900009C335080011AA093E014778CD8809121D :1008A0001A90CAAB083E02326101761378C601473E :1008B000D6FFC29B08CD8809C33508003E5A474879 :1008C000515A636B95CAD2083E023261013EAB3287 :1008D000390A21A90911A90A01FF00EDB0CD880943 :1008E00001FF003EAB21A90AEDB1CD88092100002E :1008F000ED42C235083E0432610176001600CD7D1E :1009000009DB0092CA0D093E02326101767AC60106 :10091000573E013265013EFF92CD8809CA3508C3B2 :10092000FE080016007AD300C601573E0132650169 :10093000CD7D093EFF92CD8809CA3508C32509003F :100940003E80D301CD880976003A6301473E00908E :10095000C25809ED46C371093E0190C26309ED56C4 :10096000C371093E0290CA6F093E0332610176ED00 :100970005E3E04326101FBCD8809C37A093A650104 :10098000473E0090C27D09C9321008ED431408EDBE :10099000531808221C08DD222008FD222408ED73CC :0909A0002808E3220C08E3C90059 :00000000 2610176001600CD7D1E :1009000009DB0092CA0D093E02326101767AC60106 :10091000573E013265013EFF92CD8809CA3508C3B2 :10092000FE080016007AD300C601573E0132650169 :10093000CD7D093EFF92CD8809CA3508C32509003F :100940003E80D301CD880976003A6301473E00908E :10095000C25809ED46C371093E0190C26309ED56C4 :10096000C371093E0290CA6F093E0332e830408102839830408102839830506160356e@830408102839830408102839830505162702" e830408102839830408102839830506160717e830408102839830408102839830408102839830408102839830408102839830408102839e'M8304081151007583040811515400830425112219e68304081717387583040817174375830506153818eE5i?8304251108072583042511081675830425112315 ez# !8201221911062582012219111000830425112338 e"~8304081702505083050615381950830506155819  eW8305061558545083050615592800830506160014A  e  8305061559450083050616001575830506160015  e* 8201221829380083050516223350830505162657e8201230151255083040817093000830506155829@e 8304081708002583040817080325830506153412$ e&8304261629072583042616290825830426162943e08304081030417583040810304300830506153826e8304071128570083040711290075830425112415e8201221903237582012219032500820122190350eL8304261631027583042616310350830426163116e'8305030927492583050309275050830506160019e)% M8304081305480083040815031500830506155838e !8201221911062582012219111000830425111313e t8304081741415083040817414475830506153458e83042017101050de ;8304081139290083042017013825830420170446e/28304251113282583042511140225830425111402de8201230151255083042017092425830420171110@& e83042017080150830420170822' ( ) * + >?. INTEL BINZISO ASMCOISO IDS COISO EDS ZISO OBJ ZISO BIN ZISO ROM ZISO LSTZ OBJZ ASMINTEL JCLZISO JCLINTEL PSCZREL JCLPRINT JCLZISOROM JCLENDLINK OBJCOISO EDSUTIL MACCOISO IDSZ LSTZ ASMZ BINNUL OUT, OVicEdDano `d\khw NI O 8IP IQFIRGFH MH k jG. GISтIFGHFI NH k jH. GITǼIEGHFI NH k jH. GIUǧIDGHFI NH k jH. GIVǒICGHFI NH k jH. Gilbtm b}mlyIWttIBGHFI NH k ijH. GdIX__IAGHFI NH k TjH. GOIYJJI9GHFI NH k ?jH. G:IZ55I8GHFI NH k *jH. G%I[ I7GHFI NH k jH. GI\ I6GHFI NH k jH. GI]ǪI5GHFI NH k jH. GI^ǕI4GHFI NH k jH. Gm ilbtbI_||I3GHFI NH k mjH. GI`ggI2GHFI NH k XjH. GIaRRI1GHFI NH k CjH. GIb==I0GHFI NH k .jH. G 0 Fa Ӡkkkkkll(l=lRm m m m m m m lgl|lll8FJQDF FIfǯ FIgǫGFH MH k jG. 9IhǗGFH MH k jG. GNGHFilbtklky[IINH k sjH. GIijjGFH MH k ajG. AIjVVGFH MH k MjG. GNGHFIINH k ;jH. GFJQDF FIl+ FIm'I Hkjb~fZ|GNIJFKIPH k jJ. IHkjF DFKFT o[N@Hkj pBNǯ qCNq˪ǩ rDN1ˤǣ sEǟ tÝQD Iuǒ5I Hk1j.ËHkj'Hil}}byb}Zkyj# ytBDkj BN@Ckj OB½N@Dkj B²N@CkjB©N@Dkj BžN@Ckj z7šBDkj B‰N@CkjB`d|^0SEGMwN@Dksj BlN@Ckij {BaDk^j BWN@CkTjBNN@DkJj BCN@Ck@j |žB8Dk5j B.N@Ck+jB%N@Dk!il_ENTBLANKj BN@Ckj }lBDkj B¿N@CkjB¶N@Dkj B«N@Ckj ~C¦BDkj B–N@Ckj BN@Dkj B‚ `d|\ oN@Ckvj BqN@Dknj BfN@Ckbj# IiBZDkXj BPN@CkLjBGN@DkDj BœN 0DEBFIKH kjE. DBJQDB Bb}bt[]I BIBJDE JH kgjD. fDEBF KH kWjE. DBJQDB BVIǨAEkj åNǟ =NG HFGFEkj/ÐEkj(ŒNF  ilb|~Ebkhbyd}dZHFEksjN@Ek j ggCR BI`Ekj %'DEBF KH kjE. D§N@Ekj <¢NFI FEkj™NFGBHIMH k jG. Fal||b~fb[EkyjBCeBKB& lN@Ekj IB [N@EkWj %'DEBF KHkHjE. D@N@Ek>j ;NFI FEk5j2NFGBHIMH k #jG}ilbJ. FEkjB DBKB. m N@Ekfj dñJQl _ªNG HFGFEkjEkKj# IH•NF HFEkj‡N@Ek5j# b~EbddYNCkj Ň%NEIEDkj ƇI LJNEIEDkj ȇ VNF 'GEFEDkKjHDkj ɇDkjIǛ:¡NE "GEDk1j.N@Dkj ˇDk `dbild{ald}n e oBZjIqׄClN@Ekj CaN@Dkj ͇[YKW ·VDkjIP ILCóD IH kjC. CDãE JH kjD. CÖJQD WI#Dkj ҇btbyi|pMbzbkhZOGY Ӈ InDkjUI˂NE !GEDkjN@Dkj Շ¹NF (GEFEDkjDkj և£NF GEFEDkjDkj ׇIlj ؇ÆQ ٞb{ilbxbe~E}e+e?[sN@DkjIi 0 M9II@ A D F DGDIC B8I> I:I0CDÜE JH kjD. CÏJQD eIDkc|btbzkhZj QC  I χĪCN@Ekj CN@DkjC·N@Ekj C¬N@Dkj 䇠§CEkj C—N@Dkj 凋“NEIEDkj 枌ilb}by@`d|b{@alZsI o l iIg IbDkj \I XN 0CDEIJH kjD. CìJQD eI= I9ÝJCD IH kjC. CDËE JH kjbb~bzbpMbtbZD. CtJQDq oLIDkj QSNE GEDkj»N@Dkj 򇯃OGHG IDkjIIǞ; 9IǙ 6IǕ Iǎ+CŒN@Ekj C il`dkhb}beL~E}byvQ|[rN@Dkj iNEIEDkj ^I ZK VDkjIP ILI0CDíE JH kjD. CàJQD eI1 -ÑJCD IH kjC. CbzbtɁalbpMbZDsE JH knjD. CfJQDc aJDkj‡ýýJQ􂼇ǵOG₱I@­N;CDIIH k4jC. /CD)E JH k$jD. Cilkhbybb|bx|\ JQD . CeDkcj·_`CEkj CN@DkjJLKJD÷Kǵ?Dkj±9 ®5I0CDÙE JH kjD. CÌJQD e” ‘bzbt `d|  b pM^jJCD IH kcjC. ^CDXE JH kSjD. CKJQDH FCµǮDkjéǮäJQAIA DX¤ǘOGǟIǒØBR –dž “ilkhbybbbb|wby\jkiCD IH kjC. CDYE JH kjD. CLJQDI G>¶@Dk>j:\c Psf/pas:rterr.sdt: file : ERROR # on source line INPUTOUTPUT`d|BAEkjB. %'CBAEkjC# |}e\c P`d|#BAEkjB%' VF HAEkjB%'  AEkjB. # @}e\c P`d| BADkjBADkj# |}e\/ c P`d|4BADkjB%' VF HADkjB%'  aADkjB%')%'Y%Ă'BADkj# @}e\c P`d}sBC ED%E'NIXQF bAFkjC. C. EC. C. C. EC. C. C. ǀBAFkjC. EC.  cAFkj%D'YfC. %' jAFkjC. %' %D'Y%D'C. %'#  %D'%D'# f\c P`d}BCD%D'DDKDxDCICBAFkj# ~Ef/\c P`d} BC HBAEkj# }fN\c P`d}LBC EFSTQςIONDPNBALk j# F@AFE EI0KI FMk jK%E'FOG KFQAiCGEJE -%E'G NEODPEBALk j# f~v fm&\c P-32768`d}GBAFkj B. IąBAFkjDB. BK ̀@A ĆB. CD. EB. ĆI BAFkjB. CB. CI BAFkjB%'%'# TC~ff\c P`d~E BCDIJBAFkj# ~Rf\c P`d~RBCEDDDJKCBAGkj# ~vf\c P`d~fBC %Ā'BAEkj# f\c P`d~v2BCAGkjED EB. I %Ā'BAGkjkD DB. %CĀ'C CBAGkjk# g\c P`d~.BAGkjD EICCNDN @KCNDN @AGkjCEDCKCgBAGkj# 7݈g.\ P`d~mALk jCNN OMNMALk jIDI CLk j 0GNDJ @%'COGDCD DDKDd¹ALk jKCACALk jAGNMIMALk jKCAGNMCMALk jF eALk jC# gc J<dYBC EBALk jC C'.%'Y@'.%Ā' FALk jGG. F@NGN @B̀Q FnG. ̞ŸNB. Ă'.%' B%'JVQAI@@QF ALk @7gj/\j IKLM kjG NBALk j ALk jALk jB. KFAFKAMk jK @ALk jFALk jB. BALk j'.%' FB. IA"~ۀ\Lk jB. B. ] dALk ejB. ŀALk jB. B. F eALk NjBALk jHCB. ĆKMk jKB. B. KH. '.%'iFB. KH<JCD. H. B. CBKB. ĀBKKL k j EE# BC'. %'GN @ %'DICBAFkjGB. EB. # S BC'. %'GN @ %'DICBAFkejDB. # gJ#\Pplfxxxxx.tmpLOCAL`dBADkj# gm\c P`dCB0 ADkjB%' V. Bʵ@ B. B CB. DʥKBADkjB. ADkjF fADkjB %'BI%ă'# @/g\c P`d/_BE FI%F'J|Q%F'P ͠E. %'BAHkjBAHkjGD GE. JD. JAIkjGGC͠D. CMII@ABIMDJG&G CNkjJIAHkj# ąCg~g\c P`d BADkjBADkj# g\c P`d BADkjB%' VF HADkjB%'i `ADkj# @g\c P`d+BC DC. C. C. DC. C. C. GBAEkj# C%' %'# h\c P`d.BAEkjC G&GB. B J JKJBFCGk jGFAEkj# C~]h$\c P`d"6BC %' VG HAEkj# FBAHkjGCH k jB. JKk jGFAEkj# C]hC\c P`d]XBCFGN @GGG&G k j G. HG&G F. MGG Nkjk j HLGG CBAIkj# GG CBAIkj# q~hb\c P`dwBCHIN @GG G&G kjKFH. HK@AGH%'IeF bAKk jF˞%'%'I. GGFH. ąI. . JI. H. JI. I. FI. H. H. JI. H. JI. Ąݞ\I. H%'NiXJKBAMk j A KJG bAKk XjH%'iGGCBAKk j F%'Y ֝%Ă'H. JI. I. FI. I. JH. HKTFH. Ā# h\c P`dwBCGH IGKG. Ā%I'IGH. JH. %I'}H. JH. MG. MALk jJFG. LG. NFLAKk jH. H.  H. JQAI@QFH. FF hAKk jH LGG k j%I'%IgRI' VG. LG. MG. NLAKk jG. G. G. F gAKk RjG. %I'Y %I'BAKk jG. JH. G. JG. G. JH. # rh\c P`dg BCBDDD# h\c P`drB DICB C *%'CDQDC Cp# h\c P`dBCRF GAFkjBOG GB@AEBSCBCBB# h\c P`dBC@AEkj DAEkj# ݈i\c P`dBCDFDR%BCB'CKCB BDJDmFD# i8\c `d;BD D. DI%Ă'D %'ªND. ĂD. D. 1 D. D. BAFkjCD.  E ĄD. EC. # ifCiO\c  Error_log`d"# Bû # @N˗N @#  . ÊKCLJN B @# imin`diliv)`P@p)M ÀnaQ   ZI?`%5`C+`I 5I+@'`Mr:<QFQh)@  Ă0)nnA¨) b%aQC `# Sy D` # # H# PAS.. IN P*`PC# iUFOV4+*.. EAn) blaA GnKAn)! b%E'EnKvEG%IĀ 6A4'+E# P p*# 4# iminm@P`pjP`jA`#I5e o` ޢ h "E؄҂֢ςIҢӂI΢ ӢςIǢ͂Iâ˂IɂIǂIłIÂIIIIII)MIp @)! bnbaQA Nn`riu Z1OZ2SLZ3Z4Z5 Z6=X1ZX2wX3X4X5X6X7X8)! b /{n*,)2A(nS ASJn@AaKkMCD. . *EEjENn# NE # iiviinimpP pkŢޟ+ .%'# Z[a )# z bOS ̢̂ˀQMIˢǀ„LHCL¢D O¹O aL(P# & IH b©nASL=An QHI# jjiԇ:bSIZ1iцUTrLSOZ24# il7# io:# ip=# io@# ipioipC N C @ S b `pBc # T C @ S€`pBc # Vd C @ @Sc # 4qDEC @S@ p HI4߂# iqiq-DC @SI6@ J0C @ H HG2āc ƀ  HVC4QBC kjIR@`KNkj I>%'@KF` DC @SAµ0c CBDC @SI 6@ J0ƀ @6+K %' SJQ:H 4VC C @SSÀA:+4" . C @SS *B0 @SI`pBc # :< C @ Q`pCBc # hJC @ Q`pBCS* "0c # HhC4h$`P p 6Ao—) b%I  poaTSNyJaÇ I#  UFOV!+@ # 1Ӟut @ @QS+S Ȅɮ'@ # c҇L p  #  `PI- 3AH'#  s `"  I1# *ĤPQCH# HII0ĀȀF0 0 P # i bObP)Ѕ5OBO O# |.  &C @`p ĄBؠ1VMDĂ  BDc # @ DĂď u:Oʠ1HODI10H# SLL I00H # VC @•@ “@ ˠ 1D 3 `pBc # zZ2SLq j @BFAC@&A k# ~ jAGA@@k# jC@IGAB @k# 0j A@GC6"3AA A@G6B3A C@ @G6@3A @ @CGk3Q# T= @kj# jA@ SA G@@k# Gkj# # ilAkj# Bkj#  . b.B#  ( b b* A#  j %5'k#  AӉ# 1ÃAirisirpp`# ittPitiumG2G2G1G2G1G4--E7G1--G0E3----jBFAC@&A k# ~ jAGA@@k# jC@IG2 Isolite Test Program Internal Design Specification 84-93742-A0 3/17/83 1.0 Introduction 1.1 Program Name Scout Z80 Co-processor Isolite Test Program 1.2 Purpose To provide a functional test of the 54146 Z80 Co-Processor. 2.0 System Description 2.1 Size 4096 bytes 2.2 Header Space 128 bytes 2.3 Number of Non-null files 2 2.4 Test Program (File 0) Yes 2.5 Autoload (File 1) No 2.6 Board Information (File 2) No 2.8 Isolite Header Information  File Number 0 Chain bit 1 Execute bit 1 Program size Load address 0  Execution address :BE (BEgin program) 2.9 Related Documents Scout Z80 Co-Processor Theory of Operations (91-54146-01)  Scout Z80 Co-Processor Hardware Test Program External Design Specification (84-93741-00 A0) Scout Z80 Co-Processor Hardware Test Program Internal Design Specification (84-93741-00 A0) 54146 Engineering Specification (76-54146-01 A0) Scout Z80 Co-Processor Isolite Test Program External Design Specification (84-93742-00 A0) Scout Z80 Co-Processor Isolite Firmware Maintenance Document Mostek Z80 Designers Guide 3.0 Description Section 3.1 General Description The Isolite test program will provide a functional test of the 54146 Z80 Co-processor by executing test modules in the following order:  Console Runcode 1) Z80 Non-maskable interrupt test :00B1 2) Z80 Memory access  :00B2 3) Z80 Processor diagnostic :00B3 4) Z80 Input Port test :00B4 5) Z80 Output Port test :00B5 6) Z80 Interrupt Scout test :00B6 7) Scout Interrupt Z80 test :00B7 In addition an initialization and exit routine will be used to enter and exit the Isolite. The routines above will set memory flags which will trigger the Z80 code in a idle state to execute the corresponding functions given. In the event of a test failure, a code of ':BXYY' will be displayed where 'X' indicates the current test module and 'YY' is the test module error code. An error of ':BXF0' indicates an unexpected interrupt and ':BXF1' is an unexpected trap. 3.2 Macros All macros will be expanded in listing outputs as an aid to Test Engineering. The Q register is used exclusively by the macros. It is recommended to restrict the use of the Q register in the program. 3.2.1 MOVE The macro MOVE source,destination replaces all forms of the COPY instruction for memory reference and registers A,Q,X,Y. 3.2.2 COPYQ The macro COPYQ source,destination copies the source argument into the destination argument using the Q register. Used for registers S,P,L,K. 3.2.3 ADDQ The macro ADDQ source, destination adds the source argument to the destination using the Q register. 3.2.4 SUBQ The macro SUBQ source, destination subtracts the destination argument from the source argument using the Q register. 3.2.5 IF The macro IF par1,cond,par2,addr will compare par1 and par2 using the cond Assembler Mnenonics: EQ,LT,GT,LE,GE,NE and jump to addr if the cond is true. Example: IF A,EQ,B,EXIT : If A equals B then jump to EXIT. 3.2.6 TESTJMP The macro TESTJMP address, register, bit select, bit patte3 rn will test for a bit pattern in the register using bit select to mask for the desired bits and jump to address if a match is found. 3.2.7 CALL The macro CALL routine[,par1,par2,par3,par4] will place par1-par4 in P1-P4 and jump and store to routine. The parameters are used in conjunction with the BEGIN and ENDR macros see below. 3.2.8 CALLV The macro CALLV routine[,par1,par2,par3,par4] will jump and store to routine as in the CALL routine above but in addition the parameters will be treated as variables and updated to whatever values were altered in P1-P4 by the called routine. 3.2.9 BEGIN The macro label BEGIN[,noregs,var1,var2,var3,var4] defines a routine ENT instruction, saves the registers and copies the parameters from the CALL macro into the specified variables. The parameter 'noregs' specifies the number of registers to be saved. 3.2.10 ENDR The macro label ENDR[,var1,var2,var3,var4] copies the specified variables into P1-P4 for the return to the CALLer, restores the registers and executes a JMP *label return. 3.2.11 TRAP The macro TRAP vector location, service routine sets up a trap location as a data statement. 3.2.12 LDTRAP The macro LDTRAP vector location, service routine sets up a trap location dynamically. 3.2.13 ZVECTOR The macro ZVECTOR (vector location) sets up a Z80 trap vector into the Z80 code as a data statement using the ZENTRY label as the marker. 3.2.14 UNTIL The macro UNTIL par1,cond,par2,label will continue to jump back to label until the condition: EQ,LT,GT,LE,GE,NE is met. 3.2.15 FOR The macro FOR par1,start sets up a for loop variable for the EFOR macro. 3.2.16 EFOR The macro EFOR par1,cond,par2,+-step,label will jump back to label in step increments until the condition is satisfied. 3.3 Module Control Structure There will be a data control block at the beginning of the ISOLITE test program which will determine module execution. This table is filled with the addresses of the routines (except Initialization and Exit) in the order to be executed. The control block execution can be at altered run-time by stopping the ISOLITE with the switch on the remote programmer's console, changing paramters as outlined below and restarting the ISOLITE. When is pressed, the ISOLITE program will display 'IDLE'. WHEN is then pressed, the control block test index ('C0') will be displayed in the console data register. The ISOLITE can now be restarted at test index 1 by pressing again or changing parameters as follows: 1. Setting the start test index to any test by entering the console data register contents ('C0') into the memory address register and writing the desired index into location C0. 2. Setting of the step flag (loc :BF) to 0 will cause the control block to loop on the current test. 3. Control block commands which can be inserted in the block: a) 0 - skip the current position in the control block. b) E0D - halt the CPU c) CD - loop on previous test. d) D5 - return to test at control index 1. Control block format: Location Contents -------- ---------------------- :BF Step flag :C0 Current test index (Start addresses for:) :C1 Non-maskable interrupt test :C2 Z80 Memory4  Access :C3 Z80 Processor Diagnostic :C4 Z80 Input Port Test :C5 Z80 Output Port Test :C6  Z80 Interrupt Scout Test :C7 Scout Interrupt Z80 Test :C8 0 End of block 3.4 Scout Basic Flow CONTROL BLOCK TESTIND call NMITEST 1 call MACCESS 2 call PRCDIAG 3 call INPORT  4 call OUTPORT 5 call ZISCOUT 6 call SIZ80 7 PROGRAM begin call INITIAL while valid TESTIND begin if not CONTROL BLOCK (TESTIND) = 0 then begin RUNCODE = :B0 + TESTIND call DISPLAY (0, RUNCODE) do CONTROL BLOCK (TESTIND) endif if step flag then increment TESTIND end while call EXIT end PROGRAM 3.5 Processor Interface Guidelines The Scout program will communicate and synchronize the Z80 program with the Z80 control register and common data in the Z80 scratchpad. The Z80 control register values used are: SIZRUN (:FF8F) Scout interrupt Z80 SIZRUN2 (:388F) Scout interrupt Z80 mode 2 ZMERUN (:F7C0) Run at :F000 with no interrupts ZNIRUN (:F7CF) Run at :0000 with no interrupts ZRST (:F710) Reset ZISRUN (:F74F) Z80 interrupt Scout The lowest nibble offset register value of :F indicates the location of the Z80 code in 0-4K of memory. The left byte of the control register contains a restart instruction for the Z80 except mode 2. See the NM4 Z80 Co-Processor User's Manual for more information. There will be a label 'COMMON' in both the Scout and the Z80 programs which defines the location of the common data area that both programs use. The label 'ZENTRY' defines the start of the Z80 code. In the Z80 code, the Z80 COMMON = ZENTRY + Scout COMMON * 2, when the Z80 program is located in the lowest 4K of memory. The Z80 trap locations in the Scout code are loaded as vectors into the Z80 code using the ZENTRY label. Location :0 will loaded with a vector to the start of the Z80 code dynamically after the Isolite is running. The common variables are: ERROR - Isolite error value ZIMODE - Z80 interrupt mode ZREPLY - Z80 I/O test module response ZTEST - Z80 test module id The Scout test modules will maintain control over the Z80 modules using the interface between the Scout routine STARTZ80 and the Z80 driver ZDRIVER (see below). The I/O test modules use the ZREPLY flag to control the Z80 execution for each data operation with the Z80 output and input ports. The ERROR values are defined as follows: ERROR value Description ----------- ------------------------------------------- Z80 errors: 1 Test incomplete detected in Z80 code 0 Successful completion of test module 2-9 Z80 module error Scout errors: 10 Test incomplete detected in Scout code  >10 Scout detected error 3.7 Module Descriptions Note: For this version of the Isolite, functions were defined but not implemented. The functions described in the pseudocode reflect the current version of the Isolite. 3.7.1 INITIAL The INITIAL module performs the standard initialization procedures for an Isolite as well as resetting the Z80 processor. The follo5 wing functions are executed: Save device address in A register and vector address in X register. Enable Console interrupt and update interrupt status Turn off console interrupt indicator Turn off AUTOLOAD indicator which resets watchdog timer. Turn on sense switch in the console Display a run code of :00B0 to console Memory initialization Initialize the Z80 program INITIAL begin save device address found in A register in DEVADD save interrupt vector address found in X register call DISPLAY (0,:B0) set status to :150 (enable console interrupt) update interrupt status turn off console interrupt indicator turn off autoload indicator console (reset watchdog timer) turn on sense switch indicator console call MEMINIT call Z80INIT end INITIAL 3.7.2 EXIT The EXIT module uses a standard Isolite exit sequence including:  Display :00BF to the console. Resetting the Z80 Co-processor and doing a read port to clear board interrupts. Setting the CPU and interrupt status to :40 Storing a backup SAL instruction at ENDPRG+2. Executing the ENDPRG+1 SAL instruction to the next Isolite or AUTOLOAD. ENDPRG defines the end of the Scout code. EXIT begin call DISPLAY (0,BF) call RESET set status to :40 update interrupt status load backup SAL instruction at ENDPRG + 2 execute cpu SAL at end of ENDPRG +1 end EXIT 3.7.3 NMITEST The NMITEST non-maskable interrupt test will trigger the NMITEST Z80 test module to execute and then check ERROR for an error. For an error to be detected, 2K of uninstalled memory must be present and jumper E1-E2 must be installed. The Z80 status register will be used in this test. This test will set a flag 'NMIPASS' which will be used in subsequent tests. 3.7.4 MACCESS The MACCESS memory access test module will trigger the MACCESS Z80 test module to execute and then check ERROR for an error. After some memory access instructions have been tested, the Z80 offset register will be tested by placing Z80 instructions in available memory which will clear ERROR, setting the offset register to the appropiate values and examining for an error condition. IF NMIPASS has been set the Z80's NMI will be used in combination with the UIMLOC address of uimplemented memory to exercise the remaining offset register values. MACCESS begin call RESET call STARTZ80 (ZNIRUN, 10) call PRCERROR set A = ZNIRUN for x= :1000 to RAMEND step :1000 do begin load Z80 instructions at memory loc x which set x = ':9999' set A = A-1 call RESET call STARTZ80 (A, 11) check loc x for ':9999' call PRCERROR restore memory location endfor end MACCESS 3.7.5 PRCDIAG The PRCDIAG processor diagnostic test module will trigger the PRCDIAG Z80 test module to execute and then check ERROR for an error. PRCDIAG begin call RESET call STARTZ80 (ZNIRUN, 10) call PRCERROR end PRCDIAG 3.7.6 INPORT The INPORT input port test module will set ZREPLY and then trigger the INPORT Z80 test module to step through Scout data strobes at the input port. If ZREPLY is not reset after each strobe then the Scout program will call the error handler. ZWAIT defines the maximum amount of time to wait for a Z80 response before reporting an error and will be set to 1006 ms for a 60KHz clock. INPORT begin call RESET set ZREPLY=1 set A = ZNIRUN call STARTZ80 (A, 10) for test pattern = 0 to :FF begin set A = test pattern & A set Z80 control register = A set ZREPLY = 0 call WAIT (ZREPLY,1,ZWAIT)  if not ZREPLY then call PRCERROR endfor end INPORT 3.7.7 OUTPORT The OUTPORT output port test module will trigger the OUTPORT Z80 test module to step through Scout data strobes at the output port. If ZREPLY is not reset after each strobe then the Scout program will call the error handler. OUTPORT begin call RESET call STARTZ80 (ZNIRUN, 10) for test pattern = 0 to :FF begin read input pattern from Z80 output port if input pattern <> test pattern then begin set ERROR = 11 call PRCERROR endif set ZREPLY = 0 call WAIT (ZREPLY,1,ZTIME) if not ZREPLY then call PRCERROR endfor end OUTPORT 3.7.8 ZISCOUT The ZISCOUT Z80 interrupt Scout test module will first set the Co-processor IVA interrupt vector address register to a Scout return address and then trigger ZISCOUT Z80 test module to interrupt the Scout. The interrupt will vector to a Scout location which will clear ERROR. Otherwise this module will flag an error. This module will examine the NMIPASS flag to determine if the Z80 NMI can be used to interrupt to Scout locations in umimplemented memory. ZISCOUT begin set Y = :800 repeat set IVAREG = Y load return address at IVAREG address call RESET call STARTZ80 (ZHIRUN, 10) call PRCERROR (interrupt return) set S = :150 set ERROR = 0 shift Y left 1 bit if Y > RAMEND then return restore memory loc. Y until Y = :8000 end ZISCOUT 3.7.9 SIZ70 The SIZ80 Scout interrupt Z80 test will test the ability of the Scout to interrupt the Z80 co-processor. The test will take into account all interrupt modes of the Z80. The SIZ80 interrupt Z80 test module will trigger the SIZ80 test module to execute and then check ERROR for an error for each mode. SIZ80 begin call RESET call TESTINT (0, 10) call TESTINT (1, 11) call TESTINT (2, 12) end SIZ80 3.8 Interrupt Service Routines 3.8.1 CONINT The CONINT console interrupt routine is the service routine for the the console interrupt key. It will set the TESTIND = 1, turn off the console interrupt indicator, set the data register to :C0 and do a halt. Upon pressing run again the routine will restart the Scout Isolite program. CONINT begin turn off console interrupt indicator call RESET set TESTIND = 1 load console data register with top of control table (:C0) halt restore A = DEVADD restart PROGRAM end CONINT 3.8.2 INTERR The INTERR interrupt error routine is the service routine for illegal interrupts. It will call PRCERROR with an error code of :F0.  INTERR begin set ERROR = :F0 call PRCERROR end INTERR 3.8.3 TRAPERR The TRAPERR routine is the service routine for illegal traps. It will call PRCERROR with an error code of :F1. TRAPERR begin set ERROR = :F1 call PRCERROR end TRAPERR 3.9 Subroutines 3.9.1 MEMINIT The MEMINIT memory initialization routine finds and stores the end of RAM address and unimplemented memory, calls MEMFILL to fill all unused memory with jump on Y register and moves INTERR illegal interrupt service routine ad7 dress to the Y register. This routine reads, complements, and writes back the content of each memory location. The complemented value is read from memory and ANDed with the original uncomplemented value. If the result is zero, then the complemented value was actually written to memory and consequently into RAM. If not then ROM was encountered or if a unimplemented memory trap was encoutered then the RAMEND pointer is set. If no ROM is encountered before reaching the limit of 64K then RAMEND is set to the limit. The memory search begins at ENDPRG in increments of 2K (:800). Then all unused RAM (-Isolite) is filled with jumps to INTERR to catch unexpected errors. If the debug flag is set (see 4.2.1) memory traps will not be inserted. MEMINIT begin for RAMEND = ENDPRG to 0 step :800 begin if found ROM then begin set RAMEND = location EXIT endif if uinimplemented memory begin set RAMEND = location set UIMLOC = location EXIT endif endfor if not DEBUG then call MEMFILL (VINTERR, ENDPRG, RAMEND) (VINTERR = vector (0-:FF) to INTERR) end MEMINIT 3.9.2 MEMFILL The MEMFILL (fill word, start address, end address) memory fill routine will fill memory with the specified word starting at start address and ending at end address-1. MEMFILL begin (fillword, start loc, end loc) for memory = start loc to end-1 loc step 1 set memory = fillword end MEMFILL 3.9.3 Z80INIT The Z80INIT Z80 initialization routine initializes the Z80 code to an idle state in the following manner: Location 0+ is loaded with a Z80 jump to the start of Z80 code using the ZENTRY label. The Z80 program is placed in idle mode by sending a reset to the Co-processor. Z80INIT begin load loc 0 with Z80 jump to Z80START call RESET end Z80INIT 3.9.4 RESET The RESET routine will send a reset to the Z80 board, wait 30ms and clear board interrupts by doing a read of the Z80 output port. RESET begin send reset to Z80 board call WAIT (-1,0,30) read Z80 output port end RESET 3.9.5 DISPLAY The DISPLAY (left code, right code) routine calls the WAIT routine with 250 msec and displays the right bytes of both the left code and right code in the console data register. DISPLAY begin (left code, right code) call WAIT (-1,0,250) code = left code & right code send code to console end DISPLAY 3.9.6 WAIT The WAIT (flag,value,msec) routine will convert the input msec to clock ticks and call the clock routine. The minimum input will be set to 10 msec. WAIT begin (flag,value,msec) convert msec to clock ticks call CLOCK (flag,value,ticks) end WAIT 3.9.7 CLOCK The CLOCK (flag,value,ticks) routine will set the negative amount of ticks in the real-time clock timer location (:91), enable the real-time clock and wait for an interrupt if flag is -1. The interrupt vectors to the end of the clock routine where the clock will be disabled. If flag is not -1 then the routine will check for flag = value while it is waiting on the clock. If flag = value the routine will exit. CLOCK begin (flag,value,ticks) set loc :91 to -ticks enable clock S reg if flag <> -1 then begin repeat until flag = value set loc :91 to -1 to trigger clock interrupt endif else wait infinite for interrupt (interrupt return) 8  disable clock S reg end CLOCK 3.9.8 PRCERROR The PRCERROR routine is the error handler fo the Scout Isolite program. It checks ERROR and if not 0 displays RUNCODE and the ERROR on the console before doing a halt. If run is pressed again the EXIT module is called. PRCERROR begin if ERROR <> 0 then begin call DISPLAY (RUNCODE, ERROR) halt call EXIT endif end PRCERROR 3.9.9 STARTZ80 The STARTZ80 (control register value, errint) startup routine will set the Z80 control register with the specified control value to trigger the Z80 module execution. The Scout will wait the indicated time unless ERROR is reset to 0. ERROR was initialized to indicate the Scout portion of the test. STARTZ80 begin (value, errint) set ERROR = errint set ZTEST = TESTIND set Z80 control register = value if ERROR = 0 then return call WAIT (ERROR,0,ZTIME) end STARTZ80 3.9.10 TESTINT The TESTINT test interrupt routine will test the Scout interrupt of the Z80 processor for a specified Z80 interrupt mode. The routine will set ZIMODE to the input mode, start up Z80 with no interrupts to allow Z80 to set the mode and then interrupt the Z80 by setting the control register. TESTINT begin (mode, errint) set ZIMODE = mode call STARTZ80 (ZNIRUN, 0) call WAIT (ERROR,4,ZTIME) if mode = 2 then set A = SIZRUN2 else set A = SIZRUN call STARTZ80 (A, errint) call PRCERROR end TESTINT 3.10 Z80 Code 3.10.1 ZDRIVER ZDRIVER is the start of the Z80 code and is entered from loc :0 of the Scout Isolite code. ZDRIVER initializes the error to a Z80 error, sets the stack pointer, calls the appropiate Z80 test module given in ZTEST and halts. The trace routine is necessary for status information on the Z80 processor. ZDRIVER begin set ERROR = 1 (test not complete error) set SP = 2K-1 (stack pointer) call Z80TEST (ZTEST) call TRACE halt 3.10.2 MACCESS The MACCESS memory access test will test the basic ability of the Z80 to read and write memory. The test will read and write selected portions of unused memory. MACCESS begin for i = 1 to :FF begin set memory (ENDPRG+i)=i read memory (ENDPRG+i) into inbyte  if inbyte <> i then begin set ERROR = 2 halt endif call TRACE endfor jump ZDONE end MACCESS 3.10.3 PRCDIAG The PRCDIAG processor diagnostic test will exercise selected internal Z80 ALU data paths and then test some of the Z80 block instructions. PRCDIAG begin set A = :5A set B=A,C=B,D=C,E=C,H=E,L=H if A <> L then begin set ERROR = 2 halt endif load byte pattern (ENDPRG+90H) move 100H bytes from ENDPRG to ENDPRG+100H using LDIR search for byte pattern in ENDPRG+100H using CPIR if not found then set ERROR = 3 halt else jump ZDONE end PRCDIAG 3.10.4 INPORT The INPORT input port test will strobe through selected bit configurations of the Z80 input port. INPORT begin for test pattern = 0 to :FF call WAIT (for ZREPLY=0) read (Z80 inport, inpattern) if test pattern <> inpattern then begin set ERROR = 2 halt endif set ZREPLY=1 endfor jump ZDONE end INPORT 3.10.5 OUTPORT The OUTPORT output port test will strobe through selected bit configurations for the Z80 output port. OUTPORT begin for test pattern = 0 to :FF w9 rite (Z80 outport, test pattern) set ZREPLY=1 call WAIT endfor jump ZDONE end OUTPORT 3.10.6 ZISCOUT The ZISCOUT Z80 Interrupt Scout routine will test the ability of the Z80 to interrupt the Scout processor. It will set the error code to indicate an error and then interrupt the Scout with an Out instruction. ZISCOUT begin set A = :80 out (1),A to interrupt the Scout Processor end ZISCOUT 3.10.7 SIZ80 The SIZ80 test module will set the appropiate interrupt mode found in ZIMODE, set the error code to indicate an error, load the I register with 0 for mode 2 interrupts and enable interrupts. All interrupts using this module are vectored to loc :8 which points to the service routine CLRERR. ERROR will be cleared when CLRERR is executed. SIZ80 begin case ZIMODE of 0: set mode = 0 1: set mode = 1 2: set mode = 2 otherwise begin set ERROR = 2 halt end end case set ERROR = 3 enable interrupts spin wait for Scout to interrupt SIZ80 end 3.11 Z80 Interrupt Service Routines 3.11.1 ZINTERR (vector loc: all except :8) The ZINTERR interrupt error service routine will set the error code to indicate that a unexpected interrupt has occured and return. ZINTERR begin set ERROR = 9 disable interrupts halt end ZINTERR 3.11.2 CLRERR The CLRERR Scout interrupt service routine will clear the error flag. CLRERR begin set ERROR = 0 disable interrupts halt end CLRERR 3.11.3 ZDONE The ZDONE routine will check for a valid error code, then clear the error before doing a halt to indicate successful completion of Z80 test module. ZDONE begin if ERROR <> 1 then halt set ERROR = 0 disable interrupts halt end ZDONE 3.12 Z80 Subroutines 3.12.1 WAIT The WAIT routine will spin until the ZREPLY flag = 0. WAIT begin Repeat Until ZREPLY = 0 end WAIT 3.12.2 TRACE The TRACE routine will store the processor register values in reserved locations immediately following the vector jumps at the beginning of the Z80 code. The following information is stored from the last call to trace: (memory loc: 405) :CC00 program counter  [lower byte, upper byte] :AA00 A register [A],00 :CCBB  BC registers [CC,BB] :EEDD DE registers [EE,DD] :C5C5 HL registers [LL,HH] :C6C6 IX register [IX] :C7C7 IY register [IY] :C8C8 Stack Pointer [Sp] 4.0 Support Requirements 4.1 Hardware The minimum hardware required to execute Scout NM4 Isolite and Z80 test program is a Scout CPU board with 4K words of memory and a NM4 54146 Z80 Co-Processor board. 4.2 Development System The Scout Z80 Co-Processor Isolite test program and Z80 test modules will be written using the OS4 G100 development system, NM4/04 basic instruction set, ZAM Z80 cross assembler, ZTCCONV Z80 object type code conversion program and ZLK Z80 linker. 4.2.1 Debug implementation For downline or floppy testing of the Isolite, DEBUGS was linked into the end of the program. Location :E is a special jump for debug testing of the Isolite: . This location will set up the board device address in the A register, set DEBUG flag to set up debug references, turn off memory initialization and place a halt in the exit module. After loading the Isolite+debug program, the command sequence is as follows: DEBUGS version (XXXX) >JE (or Jump Debug Entry) nker. 4.2.1 Debug implementation For downline or floppy testing of the Isolite, DEBUGS was linked into the end of the program. Location :E is a special jump for debug testing of the Isolite NM4 54146 Z80 Co-processor ISOLITE Test Program External Design Specification 84-93742-00 A0 2/23/83 1.0 Introduction 1.1 Purpose The purpose of this program is to provide a functional test of the 54146 Z80 Co-processor. It will provide tests for basic operation of the Z80 card, I/O capability tests, Interrupt capability tests, address boundary tests and a Z80 processor test. 1.2 Relationship to existing products The SCOUT NM4 Co-processor ISOLITE Test Program will be based as much as possible on existing software. The program will adhere to guidelines outlined in the SCOUT NM4/04 CPU Operations Manual (4.4). 1.3 Relationship to future products Same as 1.2 1.4 Restrictions Execution initiated by sequences other than those listed in section 2.2 is undefined. The ISOLITE Test Program is not intended to be a complete functional test or a component-level fault diagnostic. If the ISOLITE Test Program is not loaded into ram and executed properly, the results are undefined. If 64K memory is present a test for unimplemented memory is not performed. 2.0 Operation 2.1 Usage The ISOLITE Test Program will be limited to a 4K ROM and will execute in approximately 15 seconds with 64K RAM. 2.2 Interface The ISOLITE test program may be initiated by a cold-start power-up with the CPU DIAGEN switch on; a sequence from the console if available; or by executing a SAL FILE ID, BOARD ID from another program or from the console. If executing a SAL from another program, interrupts should be disabled with the processor in word mode. If executing a SAL from the console, the system should be reset before placing the execution address in the P register. The sequence can be used to halt and restart the Isolite Test program. The button will also set up default parameters necessary for the control block which can be altered if desired (3.1.4). 2.2.1 Run-time codes The run-time codes will be displayed on the console in the form of :ZZBX where: ZZ = optional B = Co-Processor board type X = Test module that is executing. (See 3.1.3) 2.3 Error Conditions Predicted errors will result in the processor halting with the Co-processor LED remaining on and the corresponding error code in the console. Error codes in the form :BXYY will be displayed where X is defined in 2.2.1 and YY = the test module error code. If is again entered after an error the ISOLITE will exit to the next ISOLITE or autoload sequence. Unpredicted errors are undefined. Special error codes for YY are: :F0 - Unexpected memory access or interrupt :F1 - Unexpected trap 2.4 System Configuration 2.4.1 Configuration Management This ISOLITE test program will run in all configurations not restricted in 1.4. The program will b; e distributed in 4K rom. 2.4.2 ISOLITE ROM generation The ISOLITE ROM will be generated using OS4 ROM utility programs: AUTOGEN and ROMGEN. Procedures for generation of a file suitable for input for ROMGEN and for generation of listings will be stored in JCL files. 3.0 Implementation 3.1 Design Rules 3.1.1 Language The ISOLITE Test Program will be written in MACRO4 using the SCOUT NM4/04 basic instruction set. For the Z80 portion of the code, ZAM Z80 cross assembler will be used. 3.1.2 Format  The Z80 code will be written in standard Intel format with Z80 mnenonics. 3.1.3 Module Construction There will be ten basic modules with run-time codes as follows: Code Module ---- ------------------------------------------  00B0 Initialization 00B1 Z80 Non-Maskable Interrupt Test 00B2 Z80 Memory Access 00B3 Z80 Processor Diagnostic 00B4 Z80 Input Port Test 00B5 Z80 Ouput Port Test 00B6 Z80 Interrupt Scout Test  00B7 Scout Interrupt Z80 Test 00BF Exit 3.1.4 Module Control Structure There will be a data control block at the beginning of the ISOLITE test program which will determine module execution. This table is filled with the addresses of the routines (except Initialization and Exit) in the order to be executed. The control block execution can be at altered run-time by stopping the ISOLITE with the switch on the remote programmer's console, changing paramters as outlined below and restarting the ISOLITE. When is pressed, the ISOLITE program will display 'IDLE'. WHEN is then pressed, the control block test index ('C0') will be displayed in the console data register. The ISOLITE can now be restarted at test index 1 by pressing again or changing parameters as follows: 1. Setting the start test index to any test by entering the console  data register contents ('C0') into the memory address register and writing the desired index into location C0. 2. Setting of the step flag (loc :BF) to 0 will cause the control block to loop on the current test. 3. Control block commands which can be inserted in the block: a) 0 - skip the current position in the control block. b) E0D - halt the CPU  c) CD - loop on previous test. d) D5 - return to test at control index 1. Control block format: Location Contents -------- ---------------------- :BF Step flag :C0 Current test index (Start addresses for:) :C1 Non-maskable interrupt test :C2 Z80 Memory Access :C3 Z80 Processor Diagnostic :C4  Z80 Input Port Test :C5 Z80 Output Port Test :C6 Z80 Interrupt Scout Test :C7 Scout Interrupt Z80 Test :C8 0 End of block 3.2 Module Definition 3.2.1 Initialization This routine performs a potpourri of functions including: the saving of device and interrupt vector addresses, setting the cpu and controller status lines, console initialization, setting memory parameters and interrupt vectors for subsequent processing. 3.2.2 Non-maskable Interrupt Test This module will cause the Z80 processor to vector to an uninstalled memory location to test the Z80's NMI capability. This test < requires 2K of uninstalled memory together with the jumper E1-E2 installed to detect an error. 3.2.3 Memory access This test sends a reset to the Z80 board and then tests the basic ability of the Z80 to read and write memory. The test will read and write each location not occupied by the program within the address space which contains the main portion of the diagnostic. Then the ability of Z80 to locate its start address on 4K boundaries will be tested. 3.2.4 Processor Diagnostic This test will exercise selected internal Z80 ALU data paths and then will test some of the Z80 block instructions. 3.2.5 Input Port Test This test will strobe through selected bit configurations for the Z80 input port. 3.2.6 Output Port Test This test will strobe through selected bit configurations for the Z80 output port. 3.2.7 Z80 Interuppt SCOUT Test This will test the ability of the Z80 to interrupt the Scout processor. This test will test all bits of the read vector latch, except for the most significant bit. 3.2.8 SCOUT Interrupt Z80 Test This is a test of the ability of the SCOUT to interrupt the Z80 Co-Processor. The test will utilize all three interrupt modes of the Z80. 3.2.9 Exit This will be a standard ISOLITE exit sequence which resets the Co-processor board to a known state, resets the status register and interrupt status and executes the next chain SAL. 3.4 Schedule Days Duration Milestone 3.4.1 External Design Spec 9 2/3 - 2/15  Write 7 Review 1 2/10/83 Revise  1 3.4.2 Internal Design Spec 14 2/14 - 3/2 Write 12 Review  1 2/28/83 Revise 1 3.4.4 Code 15 3/7 - 3/25 3.4.5 Debug 15 3/21 - 4/8 3.4.6 Pilot Release 1 4/15/83 4.0 Reference Documents 4.1 NM4 54146 Co-processor Hardware Test Program External Design Specification 84-93741-00 A0 4.2 54146 Engineering Specification 76-54146-01 A0 4.3 Mostek Z80 Designers Guide 4.4 NM4/04 CPU Operations Manual 90-21304-00A0  4.5 NM4 54146 Co-processor Theory of Operations 4.6 NM4 54146 Z80 Co-processor Isolite Test Program Internal Design Specification 84-93743-00 A0 15 3/21 - 4/8 3.4.6 Pilot Release 1 4/15/83 4.0PROGRAM INTEL(INPUT,CHIN,OUTPUT,INTOUT); {*************************************************************} {* THIS PROGRAM IS INVOKED WITH THE FOLLOWING COMMAND *} {*LINE: *} {* INTEL TV=(FILE1.BIN FILE2.OBJ) *} {*WHERE *} {* FILE1.BIN IS THE INPUT FILE PRODUCED BY ZLK. *} {* FILE2.OBJ IS THE OUTPUT FILE. *} {*THE EXTENSIONS ARE MANDATORY. USE OF ANY OTHER EXTENSIONS *} {*WILL CAUSE THE INCORRECT INPUT FILE TO BE FOUND OR,ON THE *} {*OUTPUT,ANY OTHER EXTENSION WILL CAUSE A LINKER ERROR. *} {*************************************************************} CONST ZERO = 0= ; ASCII0 = 48; ASCIIS = 83; ASCIIE = 69; ASCIIG = 71; ASCIIM = 77; ASCIIN = 78; ASCIIT = 84; ASCIIB = 66; ASCIIL = 76; ASCIIA = 65; ASCIIK = 75; ASCIIZ = 90; ASCIISP= 32; {*ASCII BLANK*} ASCII2 = 50; ASCIIOP= 40; {*ASCII (*} ASCIICP= 41; {*ASCII )*} TCBGN3 = 24; TCENDA = 2; TCORGA = 4; TCORGR = 5; TCTAB = 6; TCNULL = 64; TCSGMT = 79; TCLOC = 105; TCNOTE = 109; TCSGML = 111; HEX1000 = 4096; HEX100 = 256; HEX10 = 16; HEX1 = 1; TYPE INTFILE = FILE OF INTEGER; CHFILE = FILE OF CHAR; OBJECT = RECORD HEADER : ARRAY [1..2] OF CHAR; BCNT : ARRAY [1..2] OF CHAR; HEXORG : ARRAY [1..4] OF CHAR; SPACER : ARRAY [1..2] OF CHAR; BYTES : ARRAY [1..32] OF CHAR; CHKSUM : ARRAY [1..3] OF CHAR; END;{*RECORD*} VAR INTOUT : INTFILE; CHIN : CHFILE; INCHAR : ARRAY[1..4] OF CHAR; VALCH : BOOLEAN; RESULT : INTEGER; I : INTEGER; ORIGIN : INTEGER; LENGTH : INTEGER; NEG : BOOLEAN;  ODD : BOOLEAN; WORDCNT : INTEGER; K : INTEGER; J : INTEGER; REC : OBJECT; PROCEDURE CONVERT; VAR HEX : ARRAY[1..4] OF INTEGER; I : INTEGER; BEGIN{CONVERT} NEG := FALSE; IF(ORD(INCHAR[1]) >= ORD('8')) THEN BEGIN NEG := TRUE; FOR I := 1 TO 4 DO BEGIN CASE INCHAR[I] OF '0': INCHAR[I] := 'F'; '1': INCHAR[I] := 'E'; '2': INCHAR[I] := 'D';  '3': INCHAR[I] := 'C'; '4': INCHAR[I] := 'B'; '5': INCHAR[I] := 'A'; '6': INCHAR[I] := '9'; '7': INCHAR[I] := 'A'; '8': INCHAR[I] := '7'; '9': INCHAR[I] := '6'; 'A': INCHAR[I] := '5'; 'B': INCHAR[I] := '4'; 'C': INCHAR[I] := '3';  'D': INCHAR[I] := '2'; 'E': INCHAR[I] := '1'; 'F': INCHAR[I] := '0'; END;{*CASE*} END;{*FOR*} END;{*THEN*} FOR I := 1 TO 4 DO BEGIN IF (INCHAR[I] <= '9') THEN HEX[I] := (ORD(INCHAR[I]) - 48); IF (INCHAR[I] >= 'A') THEN HEX[I] := (ORD(INCHAR[I]) - 55); END;{FOR}  RESULT := HEX[1] * HEX1000; RESULT := RESULT + (HEX[2] * HEX100); RESULT := RESULT + (HEX[3] * HEX10);  RESULT := RESULT + (HEX[4] * HEX1); IF NEG THEN RESULT := -(RESULT + 1); END;{CONVERT} PROCEDURE SEGDESC; BEGIN{*SEGDESC*} WRITE(INTOUT,TCBGN3*256,ZERO+TCSGMT,16*256+ASCII0); WRITE(INTOUT,ASCIIS*256+ASCIIE,ASCIIG*256+ASCIIM); WRITE(INTOUT,ASCIIE*256+ASCIIN,ASCIIT*256+ASCIIB); WRITE(INTOUT,ASCIIL*256+ASCIIA,ASCIIN*256+ASCIIK); WRITE(INTOUT,ASCIISP*256+ASCIISP,ASCIISP*256+TCSGML); WRITE(INTOUT,6*256,4,ZERO); END;{*SEGDESC*} PROCEDURE TRANID; BEGIN{*TRANID*} WRITE(INTOUT,TCLOC,1*256+TCORGR,ZERO); WRITE(INTOUT,TCNOTE*256+1> 5,ASCIISP*256+ASCIISP); WRITE(INTOUT,ASCIIZ*256+ASCIIL,ASCIIK*256+ASCIISP); WRITE(INTOUT,ASCIISP*256+ASCIISP,ASCIIOP*256+ASCIIA); WRITE(INTOUT,ASCII0*256+ASCII0,ASCII2*256+ASCIICP); WRITE(INTOUT,ASCIISP*256+TCNULL);  END;{*TRANID*} PROCEDURE RDREC; VAR I : INTEGER; BEGIN{*RDREC*} FOR I := 1 TO 2 DO READ(CHIN,REC.HEADER[I]); IF (REC.HEADER[2] = ':') THEN BEGIN FOR I := 1 TO 2 DO READ(CHIN,REC.BCNT[I]); FOR I := 1 TO 4 DO READ(CHIN,REC.HEXORG[I]); FOR I := 1 TO 2 DO READ(CHIN,REC.SPACER[I]); FOR I := 1 TO 2 DO INCHAR[I] := '0'; FOR I := 3 TO 4 DO INCHAR[I] := REC.BCNT[I-2]; CONVERT; LENGTH := RESULT * 2; FOR I := 1 TO LENGTH DO READ(CHIN,REC.BYTES[I]);  FOR I := 1 TO 3 DO READ(CHIN,REC.CHKSUM[I]); IF (ORD(REC.CHKSUM[3]) <> 10) THEN WRITELN(' CHECKSUM ERROR'); END{*IF} ELSE WRITELN(' RECORD HEADER ERROR'); END;{*RDREC*} BEGIN REWRITE(INTOUT);  RESET(CHIN); WRITELN(' CONSTRUCTING SEGMENT DESCRIPTOR BLOCK.'); SEGDESC; WRITELN(' CONSTRUCTING TRANSLATOR ID BLOCK.'); TRANID; WRITE(INTOUT,TCLOC*256); RDREC; FOR I := 1 TO 4 DO INCHAR[I] := REC.HEXORG[I]; CONVERT; ORIGIN := RESULT DIV 2; IF ((RESULT MOD 2) <> 0) THEN WRITELN(' ORIGIN ERROR. SOURCE ORG WAS ODD'); WRITELN(' INPUT A SINGLE HEX DIGIT TO SPECIFY THE'); WRITELN(' OFFSET REGISTER CONTENTS.'); VALCH := FALSE; WHILE NOT VALCH DO BEGIN READ(INCHAR[1]); IF (((INCHAR[1] >= '0') AND (INCHAR[1] <= '9')) OR ((INCHAR[1] >= 'A') AND (INCHAR[1] <= 'F'))) THEN VALCH := TRUE; END;{*WHILE*} FOR I := 2 TO 4 DO INCHAR[I] := '0'; CONVERT; IF NEG THEN ORIGIN := -ORIGIN; ORIGIN := ORIGIN + RESULT;  WRITE(INTOUT,TCNULL*256+TCORGA,ORIGIN); WRITE(INTOUT,TCNULL*256+TCTAB); RESET(CHIN); WORDCNT := 0; ODD := FALSE; REPEAT RDREC; FOR I := 1 TO 2 DO INCHAR[I] := '0'; FOR I := 3 TO 4 DO  INCHAR[I] := REC.BCNT[I-2]; CONVERT; IF NEG THEN WRITELN(' LENGTH ERROR'); WORDCNT := WORDCNT + (RESULT DIV 2); IF ((RESULT MOD 2 ) <> 0) THEN BEGIN WORDCNT := WORDCNT + 1; ODD := TRUE  END;{*IF*} UNTIL (RESULT < 16); WRITE(INTOUT,WORDCNT); RESET(CHIN); RDREC; FOR I := 1 TO 2 DO INCHAR[I] := '0'; FOR I := 3 TO 4 DO INCHAR[I] := REC.BCNT[I-2]; CONVERT; LENGTH := RESULT; WHILE (LENGTH = 16) DO BEGIN K := 0; WHILE ((K DIV 2) < LENGTH) DO BEGIN FOR I := 1 TO 4 DO INCHAR[I] := REC.BYTES[I + K]; CONVERT; WRITE(INTOUT,RESULT); K := K + 4; END;{*WHILE K*} RDREC; FOR I := 1 TO 2 DO INCHAR[I] := '0'; FOR I := 3 TO 4 DO INCHAR[I] := REC.BCNT[I-2]; CONVERT; LENGTH := RESULT; END;{*WHILE LENGTH*} ?  IF((RESULT <> 16) AND (RESULT <> 0)) THEN BEGIN WORDCNT := LENGTH DIV 2; K := 0; FOR I := 1 TO WORDCNT DO BEGIN FOR J := 1 TO 4 DO INCHAR[J] := REC.BYTES[J+K]; CONVERT; K := K + 4; WRITE(INTOUT,RESULT) END;{*FOR I*} IF ODD THEN BEGIN FOR I := 1 TO 2 DO  INCHAR[I] := REC.BYTES[I+K]; FOR I := 3 TO 4 DO INCHAR[I] := '0'; CONVERT;  WRITE(INTOUT,RESULT); END;{*IF*} END;{*IF*} WRITE(INTOUT,TCNULL*256+TCENDA,ORIGIN); WRITELN(' DONE'); END. FOR J := 1 TO 4 DO INCHAR[J] := REC.BYTES[J+K]; CONVERT; K := K +O0SEGMENTBLANK oim ZLK (A002) @i@@`vYRKv̻v> 2av>2av>2av>2a!:gGʝxʡxx x/ xL xU ͕ vY.>Gx͕ ʸ>2avxG ¨͕ Y>ZGHQZck>2a>23!.>͕ >!>͕ !BY>2av͊  >2avzW>2e>͕ Y zW>2e͊ >͕ Y2 >͕ v:cG>e F~ >p V~ >| >2av^>2a͕ Ç :eG>Š 2CS" "$"(s,"@COMMON EQU 0B0H ZCOMM EQU COMMON*2 ERROR EQU ZCOMM+1 ZIMODE EQU ZCOMM+3 ZREPLY EQU ZCOMM+5 ZTEST EQU ZCOMM+7 ORG 800H JP ZDRIVER HALT JP ZDONE JP NMISERV JP  ZINTERR HALT C1 DEFW 00CCH PRGC DEFW 000H C2 DEFW 00AAH RGA DEFW 000H C3 DEFW 0BBCCH RGBC DEFW 000H C4 DEFW 0DDEEH RGDE DEFW 000H C5 DEFW 0C5C5H RGHL DEFW 000H C6 DEFW  0C6C6H RGIX DEFW 000H C7 DEFW 0C7C7H RGIY DEFW 000H C8 DEFW 0C8C8H SPTR DEFW 000H SCRATCH DEFW 0 S1 DEFW 0 S2 DEFW 0 S3 DEFW 0 S4 DEFW 0 S5 DEFW 0 S6 DEFW 0 S7 DEFW 0 S8 DEFW 0 S9 DEFW 0 S10 DEFW 0 S11 DEFW 0 S12 DEFW 0 S13 DEFW 0 HALT ZINTERR LD A,9 LD (ERROR),A DI HALT NMISERV LD A,8 LD (ERROR),A  DI HALT ZDONE LD A,0 LD (ERROR),A DI HALT ZDRIVER NOP LD A,1  LD (ERROR),A INIT ERROR TO 1 LD IX,1FFEH LD SP,IX LOAD STACK POINTER AT :4K  LD A,(ZTEST) LD B,A SUB 1 JP Z,NMITEST LD A,B SUB 2 JP Z,MACCESS LD A,B SUB 3 JP Z,PRCDIAG LD A,B SUB  4 JP Z,INPORT LD A,B SUB 5 JP Z,OUTPORT LD A,B SUB  6 JP Z,ZISCOUT LD A,B SUB 7 JP Z,SIZ80 CALL TRACE HALT NMITEST NOP JP ZDONE MACCESS NOP LD DE,SCRATCH LD A,1 LD B,A  B = PATTERN TO BE USED MLOOP LD A,B CALL TRACE LD (DE),A WRITE IT TO MEMO@ RY LD A,(DE) GET IT BACK SUB B JP Z,MPASS A = B LD A,2 ERROR LD (ERROR),A HALT MPASS INC DE NEXT MEMORY LOC. LD A,B ADD A,1 NEXT PATTERN LD B,A SUB 020H JP  NZ,MLOOP CHECK FOR LAST PATTERN CALL TRACE JP ZDONE PRCDIAG NOP LD A,5AH  LD B,A LD C,B LD D,C LD E,D LD H,E LD L,E  SUB L JP Z,PASS LD A,2 LD (ERROR),A PASS LD A,0ABH PUT IN BYTE TO SEARCH FOR LD (SCRATCH+5H),A LD HL,SCRATCH BLOCK MOVE AND SEARCH TEST LD DE,SCRATCH+10H HL=SOURCE, DE=DESTINATION LD BC,010H NUMBER OF BYTES TO MOVE (AND SEARCH) LDIR  MOVE FF BYTES FROM ENDPRG TO ENDPRG+100H CALL TRACE LD BC,010H NUMBER OF BYTES TO SEARCH LD A,0ABH SEARCH FOR 0ABH LD HL,SCRATCH+10H CPIR CALL TRACE  LD HL,0 SBC HL,BC JP NZ,ZDONE BC WAS NOT ZERO - NO ERROR LD A,3  LD (ERROR),A ERROR HALT INPORT NOP LD D,0 ILOOP CALL WAIT IN A,(0)  GET BYTE AT IN PORT SUB D JP Z,IPASS IF A=D PASS LD A,2 LD (ERROR),A ERROR HALT IPASS LD A,D ADD A,1 LD D,A LD A,1 LD  (ZREPLY),A LD A,0FFH SUB D CALL TRACE JP Z,ZDONE CHECK FOR LAST PATTERN JP ILOOP OUTPORT NOP LD D,0 OLOOP LD A,D OUT (0),A SEND BYTE TO OUT PORT ADD A,1 LD D,A LD A,1 LD (ZREPLY),A CALL WAIT LD  A,0FFH SUB D CALL TRACE JP Z,ZDONE CHECK FOR LAST PATTERN JP OLOOP ZISCOUT NOP LD A,80H OUT (1),A INTERRUPT SCOUT PROCESSOR CALL TRACE  HALT SIZ80 NOP LD A,(ZIMODE) LD B,A LD A,0 SUB B JP NZ,MODE1  IM0 JP SDONE MODE1 LD A,1 SUB B JP NZ,MODE2 IM1 JP SDONE MODE2 LD A,2 SUB B JP Z,SET2 LD A,2 LD (ERROR),A HALT SET2 IM2 SDONE LD A,3 LD (ERROR),A EI CALL TRACE JP $ WAIT FOR SCOUT TO INTERRUPT WAIT LD A,(ZREPLY) LD B,A LD A,0 SUB B JP NZ,WAIT RET TRACE LD (RGA),A LD (RGBC),BC LD (RGDE),DE LD (RGHL),HL LD (RGIX),IX LD (RGIY),IY LD (SPTR),SP EX (SP),HL LD (PRGC),HL EX (SP),HL A  RET NOP END (ERROR),A EI CALL TRACE JP $ WAIT FOR SCOUT TO INTERRUPT WAIT LD A,(ZREPLY) LD B,A LD A,0 SUB B JP NZ,WAIT REonml¨Ā§ā¦ĂIvă ] I YXΛQIǓ0SĀRāQĂPă@ ʉ @@ ϋQATHCៀ 6sDžI DŽpvޟ *IǤewI vb)` nqbc IǔIgIfIdǐÌJQA@ K @@ JQAcW  x8JI I5i# @@cQCI .mIgI:I9Idcc@`K`@@`JQAh] ⥃T b@ǣAǢâ@¡ApŸI F ™0@IǏn@`όS!Ë@ÊA@`ΌQA]X12OP IǎI ǍIljI LjIDŽI ǃm Iǯ   IQ IL IǠE@ Ā؀Qʄ@ = @@ KQAs7ÏJQ(ÍM/L/ǃ`  ||7w6n sĀ@ K @@ @QAwlli ||)‡Āāttq ||# H I I@# mmj ||Ôǔ,Ǔq# ÎKQ/ILjILJId hhe ||uu8q $HmIlIlli ||ZvYu @ JSA) ''ӧLjjg+ }A’0@YKQFVVQA|HLJ ƒ0@jhPp *KQ;É$%#( q0@q= }Ǜ™II I Id?(ËJQÊDŽRb`8 IǐIt‰ĂÌKQA I@0@ f`vYJ̻v> 2av:a^>2av>2a!:gGʝxʞxx x, xI xR ͒ v->Gx͒ ʵ>2avxG ¥͒ Q>ZGHQZck>2a>22!-=͒ >!=͒ !BQ>2av͇  >2avzW>2e>͒ Q zW>2e͇ >͒ Q/ >͒ v:cG>b F{ >m V{ >y >2av^>2a͒ Ä :eG>‡ 2CS"" "$s(" mF1EBE5E3--E3E1IǓ0SĀRāQĂPă@ ʉ @@ ϋQATHCៀ 6sDžI DŽpvޟ *IǤewI vb)` nqbc IǔIgIfIdǐÌJQA@ K @@ JQAcW  x8JI I5i# @@cQCI .mIgI:I9Idcc@`K`@@`JQAh] ⥃T b@ǣAǢâ@¡ApŸI F ™0@IǏn@`όS!Ë@ÊA@`ΌQA]X12OP IǎI ǍIljI LjIDŽI ǃm Iǯ   IQ IL IǠE@ Ā؀Qʄ@ = @@ P HAS ZAM-ZLK-INTEL.JCL BEEN DONE? AS UF=DF0 //CO Z.OBJ=DM1.Z.OBJ //CO ZISO.ASM=DM1.ZISO.ASM //CO Z.ASM=DM1.Z.ASM V ZISO.ASM V Z.ASM DO ZISO DO ZISOROM V DF0 P UPDATE DF1? COPYPACK DF0 TO DF1 F74201 P COPYPACK DF0 TO DF1 F74201 P COPYPACK DF0 TO DF1 F74201 J 830408102839830408102839830503100738OVicEdDano         3pI499P9(999vv{,> IooJmx Ih{ XbaJ?S^J8RY[@KQP@ΙQ RGhgKeI^b]G;KQA9^I% Q ENIJICGBoŠ0@  iP> ‡-I ,YvB + uuI rGoβQ3lkji¨Ā§ā¦ĂIvă XI ǙVVUΛQIǓ%PĀOāNĂMă@ ʉ @@ ϋQATECៀ 11rI q.v 'IǤ%fI e")` nqbc IǔIVIUIdǐÌJQA@ K @@ JQAcW x 9I 8i# @@cQCI 0mIgI)I(Idcc@`K`@@`JQAh]ϟ ⥃R b@ǣAǢâ@¡AnŸI jD ™0@IǏn@`όS!Ë@ÊA@`ΌQA]X9:OP IǎI ǍIljI LjIDŽI ǃm, Iǰ   IQ IL IǡE@ Ā؀Q˄@ = @@ KQAs 6ÏJQ'ÍL.K.ǃ_ ||6w5n sĀ@ K @@ @QAwlli ||)‡Ā†āttq ||# HII?# mmj ||Ôǔ+Ǔq# ÎKQ/ILjILJIdhhe ||uu8q $HmIlIlli ||ZvYu @ JSA) ''Ljjg+ }A’0@YKQFVVQA|HLJ ƒ0@jhPp *KQ;É$%#( q0@q= }Ǜ™II I Id?(ËJQÊDŽRb`8 IǐIt‰ĂÌKQA I@0@ f`vYRKv̻v> 2av>2av>2av>2a!:gGʝxʡxx x/ xL xU ͕ vY.>Gx͕ ʸ>2avxG ¨͕ Y>ZGHQZck>2a>23!.>͕ >!>͕ !BY>2av͊  >2avzW>2e>͕ Y zW>2e͊ >͕ Y2 >͕ v:cG>e F~ >p V~ >| >2av^>2a͕ Ç :eG>Š 2CS" "$"(s,"mF1EBE5E3--E3E1 A = B LD A,2  ERROR LD (ERROR),A HALT MPASS INC DE NEXT MEMORY LOC.  LD A,B ADD A,1 NEXT PATTERN LD B,A SUB 020H JP NZ,MLOOP CHECK FOR LAST PATTERN CALL TRACE JP ZDONE PRCDIAG NOP LD A,5AH LD B,A LD C,B LD D,C LD E,D LD H,E LD L,E SUB L  JP Z,PASS LD A,2 LD (ERROR),A PASS LD A,0ABH PUT IN BYTE TO SEARCH FOR  LD (SCRATCH+5H),A LD HL,SCRATCH BLOCK MOVE AND SEARCH TEST LD DE,SCRATCH+10H HL=SOURCE, DE=DESTINATION LD BC,010H NUMBER OF BYTES TO MOVE (AND SEARCH) LDIR  MOVE FF BYTES FROM ENDPRG TO ENDPRG+100H CALL TRACE LD BC,010H NUMBER OF BYTES TO SEARCH  LD A,0ABH SEARCH FOR 0ABH LD HL,SCRATCH+10H CPIR CALL TRACE LD  HL,0 SBC HL,BC JP NZ,ZDONE BC WAS NOT ZERO - NO ERROR LD A,3 LD (ERROR),A ERROR HALT INPORT NOP LD D,0 ILOOP CALL WAIT IN A,(0) GET BYTE AT IN PORT SUB D JP Z,IPASS IF A=D PASS LD A,2 LD (ERROR),A  ERROR HALT IPASS LD A,D ADD A,1 LD D,A LD A,1 LD (ZREPLY)C ,A LD A,0FFH SUB D CALL TRACE JP Z,ZDONE CHECK FOR LAST PATTERN  JP ILOOP OUTPORT NOP LD D,0 OLOOP LD A,D OUT (0),A SEND BYTE TO OUT PORT  ADD A,1 LD D,A LD A,1 LD (ZREPLY),A CALL WAIT LD A,0FFH SUB D CALL TRACE JP Z,ZDONE CHECK FOR LAST PATTERN JP OLOOP ZISCOUT NOP LD A,80H OUT (1),A INTERRUPT SCOUT PROCESSOR CALL TRACE HALT SIZ80 NOP LD A,(ZIMODE) LD B,A LD A,0 SUB B JP NZ,MODE1 IM0 JP SDONE MODE1 LD A,1 SUB B JP NZ,MODE2 IM1 JP SDONE MODE2 LD  A,2 SUB B JP Z,SET2 LD A,2 LD (ERROR),A HALT SET2 IM2 SDONE LD A,3 LD (ERROR),A EI CALL TRACE JP $ WAIT FOR SCOUT TO INTERRUPT WAIT LD A,(ZREPLY) LD B,A LD A,0 SUB B JP NZ,WAIT RET TRACE  LD (RGA),A LD (RGBC),BC LD (RGDE),DE LD (RGHL),HL LD (RGIX),IX  LD (RGIY),IY LD (SPTR),SP EX (SP),HL LD (PRGC),HL EX (SP),HL RET NOP END (ERROR),A EI CALL TRACE JP $ WAIT FOR SCOUT TO INTERRUPT WAIT LD A,(ZREPLY) LD B,A LD A,0 SUB B JP NZ,WAIT RET TRACE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII TITL UTIL.MAC - UTILITY MACRO DEFINITION FILE TITL MACROS ********************************************************************** * MACRO MOVE - MOVE SOURCE ARGUMENT TO DESTINATION ARGUMENT * REPLACES ALL FORMS OF THE COPY INSTRUCTION FOR MEMORY REFERENCE * AND REGISTERS A,Q,X,Y. WHEN MORE THAN ONE CHAR APPEARS IN THE * SOURCE OR DESTINATION PARAMETER THE Q REGISTER IS USED AS AN * INTERMEDIATE. * * MOVE SOURCE,DEST * MACRO MOVE IFT #(1,?)>1 IFT #(2,?D )>1 COPY #(1),Q COPY Q,#(2) ENDC ENDC IFT #(1,?)=1 IFT #(2,?)=1  COPY #(1),#(2) ENDC ENDC IFF #(2,?)=1 IFT #(1,?)=1 COPY #(1),#(2)  ENDC ENDC IFF #(1,?)=1 IFT #(2,?)=1 COPY #(1),#(2) ENDC ENDC  ENDM TITL ********************************************************************** * MACRO COPYQ - COPY USING THE Q REGISTER * * COPYQ SOURCE,DESTINATION * MACRO COPYQ COPY #(1),Q COPY Q,#(2) ENDM ********************************************************************** * MACRO ADDQ - ADD TO MEMORY USING THE Q REGISTER * * ADDQ SOURCE,DEST *  MACRO ADDQ MOVE #(2),Q ADD #(1),Q MOVE Q,#(2) ENDM ********************************************************************** * MACRO SUBQ - SUBTRACT ARG 1 FROM ARG 2 * * SUBQ ARG1,ARG2 * MACRO SUBQ  MOVE #(2),Q SUB #(1),Q MOVE Q,#(2) ENDM TITL ********************************************************************** * MACRO TESTJMP - TEST SPECIFIED BITS IN A REGISTER USING VALUE * * TESTJMP ADDRESS,REGISTER,BIT SELECT,BIT PATTERN * MACRO TESTJMP AND #(3),#(2) XOR #(4),#(2) JEQ #(2),#(1)  ENDM TITL ********************************************************************** * MACRO CALL - JST A ROUTINE WITH PARAMETERS * * CALL ROUTINE[,PAR1,PAR2,PAR3,PAR4] * * THE MACROS BEGIN AND ENDR MAY BE USED IN PLACE OF ENT AND * JMP *RTN INSTRUCTIONS TO DEFINE A CALLED ROUTINE. THESE * MACROS WILL PRESERVE THE REGISTERS, RETRIEVE AND UPDATE * THE CALLING PARAMETERS (SEE BELOW). * MACRO CALL * * PUT ARGUMENTS INTO P1-P4 PUTVAR #(2),#(3),#(4),#(5)  JST #(1) ENDM ********************************************************************** * MACRO CALL VARIABLE - JST A ROUTINE WITH VARIABLE RETURN PARAMETERS * * CALLV ROUTINE[,PAR1,PAR2,PAR3,PAR4] * MACRO CALLV * PUT ARGUMENTS INTO P1-P4 PUTVAR #(2),#(3),#(4),#(5) JST #(1) * GET P1-P4 INTO ARGUMENTS GETPAR  #(2),#(3),#(4),#(5) ENDM TITL ********************************************************************** * MACROS BEGIN/ENDR - BEGIN A ROUTINE (ENT WITH PARAMETERS) AND * END A ROUTINE (UPDATE PARAMETERS) * * LABEL BEGIN [,#REGISTERS,PAR1,PAR2,PAR3,PAR4] * * THE MACRO BEGIN WILL SET UP A STORAGE AREA FOR REGISTERS IF ANY * PARAMETERS ARE PRESENT, SET LABEL ENT, STORE THE INDICATED NUMBER OF * REGISTERS (1=A,2=AX,3=AXY,4=AXYQ), AND MOVE P1-P4 INTO THE * SPECIFIED VARIABLES. THE LABEL RETURN CAN BE USED TO EXIT THE * SUBROUTINE. * MACRO BEGIN MACLAB RETURN SET $ JMP *#(-1) IFF #(?) NREGS SET 0 ENDC IFT #(?) NREGS SET #(1) RES NREGS,0 ENDC #(-1) ENT IFT NREGS COPY A,#(-1)-NREGS IFT NREGS>1 COPY X,#(-1)-NREGS+1 IFT NREGS>2 COPY Y,#(-1)-NREGS+2 IFT NREGS=4 COPY Q,#(-1)-NREGE S+3 ENDC ENDC ENDC ENDC IFT #(2,?) GETPAR #(2),#(3),#(4),#(5) ENDC ENDM TITL * * THE MACRO ENDR WILL MOVE THE SPECIFIED VARIABLES INTO P1-P4, * RESTORE THE REGISTERS AND RETURN. * MACRO ENDR MACLAB IFT #(2,?) PUTVAR #(2),#(3),#(4),#(5) ENDC  IFT NREGS COPY #(-1)-NREGS,A IFT NREGS>1 COPY #(-1)-NREGS+1,X IFT  NREGS>2 COPY #(-1)-NREGS+2,Y IFT NREGS=4 COPY #(-1)-NREGS+3,Q ENDC  ENDC ENDC ENDC JMP RETURN LPOOL ENDM TITL ********************************************************************** * MACRO PUTVAR - PUT ARGUMENTS INTO P1,P2,P3,P4 * * PUTVAR ARG1[,ARG2,ARG3,ARG4] * MACRO PUTVAR IFT #(1,?) MOVE #(1),P1 ENDC IFT #(2,?) MOVE #(2),P2 ENDC IFT #(3,?) MOVE #(3),P3 ENDC IFT #(4,?) MOVE #(4),P4  ENDC ENDM ********************************************************************** * MACRO GETPAR - GET P1,P2,P3,P4 INTO ARGUMENTS * * GETPAR ARG1[,ARG2,ARG3,ARG4] * MACRO GETPAR IFT #(1,?) MOVE P1,#(1) ENDC IFT #(2,?) MOVE P2,#(2) ENDC IFT #(3,?) MOVE P3,#(3) ENDC IFT #(4,?) MOVE P4,#(4) ENDC ENDM TITL ********************************************************************** * MACRO IF - TEST PAR1,PAR2 FOR COND AND JUMP TO ADDRESS IF TRUE * COND = EQ,LT,GT,LE,GE,NE * * IF PAR1,COND,PAR2,ADDRESS * MACRO IF MOVE #1,Q IFF #(3,'Q')=1 SUB #3,Q ENDC J#2 Q,#4 ENDM ********************************************************************** * MACRO ANDQ - AND PAR2 TO PAR1 USING THE Q REGISTER * * ANDQ PAR1,PAR2 * MACRO ANDQ MOVE #1,Q AND #2,Q  MOVE Q,#1 ENDM TITL ********************************************************************** * MACRO TRAP - SET TRAP VECTOR AS A DATA STATEMENT * * TRAP VECTOR LOCATION,SERVICE ROUTINE * MACRO TRAP ABS #(1,) JST *$+1 WORD #(2) ENDM ********************************************************************** * MACRO LDTRAP - LOAD TRAP LOCATION WITH HANDLING ROUTINE ADDRESS * * LDTRAP [=]VECTOR ADDRESS,[=]HANDLER ADDRESS MACRO LDTRAP MOVE =#(1,),X MOVE JSTN,0(X) MOVE =#(2,),1(X) ENDM TITL ********************************************************************** * MACRO ZVECTOR - LOAD TRAP LOCATION WITH Z80 OFFSET INTO Z80 SCRATCHPAD * * ZVECTOR ADDRESS MACRO ZVECTOR ABS #(1,) WORD ZJMP+#(2) WORD ZCODE ENDM TITL ********************************************************************** * MACRO UNTIL LOOP - REPEAT LABEL UNTIL COND IS MET * * UNTIL PAR1,COND,PAR2,LABEL * MACRO UNTIL MOVE #1,Q IFF #(3,F 'Q')=1 SUB #3,Q ENDC J#2 Q,$+2 JMP #4 ENDM TITL ********************************************************************** * MACRO FOR - ENDFOR LOOP * NOTE: STEP VALUES WILL ALWAYS BE USED AS A CONSTANT * THE LOOP WILL JUMP TO LABEL UNTIL PAR2 IS REACHED * * LABEL FOR PAR1,START *  ENDFOR PAR1,COND,PAR2,+-STEP,LABEL * MACRO FOR MOVE #(2),#(1) ENDM MACRO ENDFOR IFT  #(4,'+')=1 ADDQ =#(4,2,10),#(1) ENDC IFT #(4,'-')=1 SUBQ =#(4,2,10),#(1)  ENDC MOVE #1,Q IFF #(3,'Q')=1 SUB #3,Q ENDC J#(2) Q,$+2  JMP #5+1 ENDM ********************************************************************** * MACRO SHIFTB - SHIFT BYTE LEFT OR RIGHT * * SHIFTB VARIABLE,L[R] * MACRO SHIFTB SBIT 1,S SHIFT #(1),#(2)O,#(3) ENDM ********************************************************************** SAVE END ,10),#(1)  ENDC MOVE #1,Q IFF #(3,'Q')=1 SUB #3,Q ENDC J#(2) Q,$+2  JMP #5+1 ENDM ********************************************************************** * MACRO SHIFTB - SHIFT BYTE LEFT OR RIGHT * * SHIFTB VARIABLE,L[R] * MACRO SHIFTB SBIT 1,S SHIFT #(1),#(2)O,#(3OVicEdDano ""2I340 5,11H1 111vvs,6z  IooJmx Ih{0 XbaJ?S^J8RY[@KQP@ΙQ RGhgKeI^b]G;KQA9^I% G ENIJICGBoŠ0@  iP6x |* w·#I "O!βQ3lkji¨Ā§ā¦ĂIvă ZI VUΛQIǓ-PĀOāNĂMă@ ʉ @@ ϋQATECៀ 3sDžI DŽp vޟ 'IǤewI vb)` nqbc IǔIgIfIdǐÌJQA@ K @@ JQAcW x8JI I5i# @@cQCI .mIgI:I9Idcc@`K`@@`JQAh] ⥃T b@ǣAǢâ@¡ApŸI F ™0@IǏn@`όS!Ë@ÊA@`ΌQA]X12OP IǎI ǍIljI LjIDŽI ǃm" Iǯ   IQ IL IǠE@ Ā؀Qʄ@ = @@ KQAs7ÏJQ(ÍM/L/ǃ` ||7w6n sĀ@ K @@ @QAwlli ||)‡Āāttq ||# H I I@# mmj ||Ôǔ,Ǔq# ÎKQ/ILjILJId hhe ||uu8q $HmIlIlli ||ZvYu @ JSA) ''֧Ljjg+ }A’0@YKQFVVQA|HLJ ƒ0@jhPp *KQ;É$%#( q0@q= }Ǜ™II I Id?(ËJQÊDŽRb`8 IǐIt‰ĂÌKQA I@0@ f`vYJ̻v> 2av:a^>2av>2a!:gGʝxʞxx x, xI xRG  ͒ v->Gx͒ ʵ>2avxG ¥͒ Q>ZGHQZck>2a>22!-=͒ >!=͒ !BQ>2av͇  >2avzW>2e>͒ Q zW>2e͇ >͒ Q/ >͒ v:cG>b F{ >m V{ >y >2av^>2a͒ Ä :eG>‡ 2CS"" "$s(" mF1EBE5E3--E3E1 1 2/10/83 Revise  1 3.4.2 Internal Design Spec 14 2/14 - 3/2 Write 12 Review  1 2/28/83 Revise 1 3.4.4 Code 15 3/7 - 3/25 3.4.5 Debug 15 3/21 - 4/8 3.4.6 Pilot Release 1 4/15/83 4.0IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7D09 097D 158 CALL WAIT 0933 3EFF 00FF 159 LD A,0FFH 0935 92  160 SUB D 0936 CD8809 0988 161 CALL TRACE 0939 CA3508  0835 162 JP Z,ZDONE CHECK FOR LAST PATTERN 093C C32509 0925 163 JP OLOOP  093F 00 164 ZISCOUT NOP 0940 3E80 0080 165 LD A,80H  1ZAM (X014) ASSEMBLING Z.ASM AT 17:01:36 ON 83/04/20 PAGE 3 LOC OBJ CODE EXPR STMT SOURCE STATEMENT 0942 D301  0001 166 OUT (1),A INTERRUPT SCOUT PROCESSOR 0944 CD8809 0988 167 CALL TRACE 0947 76 168 HALT 0948 00 169 SIZ80 NOP  0949 3A6301 0163 170 LD A,(ZIMODE) 094C 47 171 LD B,A 094D 3E00 0000 172 LD A,0 094F 90 173 SUB B  0950 C25809 0958 174 JP NZ,MODE1 0953 ED46 175 IM0  0955 C37109 0971 176 JP SDONE 0958 3E01 0001 177 MODE1 LD A,1  095A 90 178 SUB B 095B C26309 0963 179 JP NZ,MODE2 095E ED56 180 IM1 0960 C37109 0971 181 JP SDONE 0963  3E02 0002 182 MODE2 LD A,2 0965 90 183 SUB B 0966 CA6F09 096F 184 JP Z,SET2 0969 3E03 0003 185 LD A,3 096B 326101  0161 186 LD (ERROR),A 096E 76 187 HALT 096F ED5E  188 SET2 IM2 0971 3E04 0004 189 SDONE LD A,4 0973 326101 0161 190 LD (ERROR),A 0976 FB 191 EI 0977 CD8809 0988  192 CALL TRACE 097A C37A09 097A 193 JP $ WAIT FOR SCOUT TO INTERRUPT  097D 3A6501 0165 194 WAIT LD A,(ZREPLY) 0980 47 195 LD B,A 0981 3E00 0000 196 LD A,0 0983 90 197 SUB B 0984  C27D09 097D 198 JP NZ,WAIT 0987 C9 199 RET 0988 321I 008 0810 200 TRACE LD (RGA),A 098B ED431408 0814 201 LD (RGBC),BC 098F ED531808 0818 202 LD (RGDE),DE 0993 221C08 081C 203 LD (RGHL),HL 0996 DD222008  0820 204 LD (RGIX),IX 099A FD222408 0824 205 LD (RGIY),IY 099E ED732808 0828 206 LD (SPTR),SP 09A2 E3 207 EX (SP),HL 09A3 220C08 080C  208 LD (PRGC),HL 09A6 E3 209 EX (SP),HL 09A7 C9 210 RET 09A8 00 211 NOP 212 ENDPRG END SYMBOL TABLE C1 080A A C2 080E A C3 0812 A C4 0816 A C5 081A A C6 081E A C7 0822 A C8 0826 A CLRERR 083D A COMMON 0160 A ENDPRG 09A9 A ERROR 0161 A HLT 0842 A ILOOP 08FE A INPORT 08FB A IPASS 090D A LBYTE 082A A MACCESS 0894 A MLOOP 089B A MODE1 0958 A MODE2 0963 A MPASS 08AB A NMITEST 0881 A OLOOP 0925 A OUTPORT 0922 A PASS 08D2 A PRCDIAG 08BB A PRGC 080C A RGA 0810 A RGBC 0814 A RGDE 0818 A RGHL 081C A RGIX 0820 A RGIY 0824 A SDONE 0971 A SET2 096F A SIZ80 0948 A SPTR 0828 A TRACE 0988 A UBYTE 082C A WAIT 097D A ZDONE  0835 A ZDRIVER 0844 A ZERO 082B A ZIMODE 0163 A ZINTERR 082E A ZISCOUT 093F A ZREPLY 0165 A ZTEST 0167 A 0 ERROR(S) IN THIS MODULE. NMITEST 0881 A OLOOP 0925 A OUTPORT 0922 A PASS 08D2 A PRCDIAG 08BB IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 1ZAM (X014) ASSEMBLING Z.ASM AT 17:01:30 ON 83/04/20 PAGE 0 LOC OBJ CODE EXPR STMT SOURCE STATEMENT 0000  0160 1 COMMON EQU 160H 0000 0161 2 ERROR EQU COMMON+1 0000  0163 3 ZIMODE EQU COMMON+3 0000 0165 4 ZREPLY EQU COMMON+5 0000 0167 5 ZTEST EQU COMMON+7 0800 6 ORG 800H 0800 C34408 0844  7 JP ZDRIVER 0803 76 8 HALT 0804 C33D08 083D 9 JP CLRERR 0807 C32E08 082E 10 JP ZINTERR 080A CC00 11 C1 DEFW 00CCH 080C 0000 12 PRGC DEFW 000H 080E AA00 13 C2  DEFW 00AAH 0810 0000 14 RGA DEFW 000H 0812 CCBB 15 C3 DJ EFW 0BBCCH 0814 0000 16 RGBC DEFW 000H 0816 EEDD 17 C4 DEFW 0DDEEH 0818 0000 18 RGDE DEFW 000H 081A C5C5 19 C5 DEFW 0C5C5H 081C 0000 20 RGHL DEFW 000H 081E C6C6 21 C6 DEFW 0C6C6H  0820 0000 22 RGIX DEFW 000H 0822 C7C7 23 C7 DEFW 0C7C7H  0824 0000 24 RGIY DEFW 000H 0826 C8C8 25 C8 DEFW 0C8C8H  0828 0000 26 SPTR DEFW 000H 082A 00 27 LBYTE DEFB 0 082B 00 28 ZERO DEFB 0 082C 00 29 UBYTE DEFB 0 082D 76 30 HALT 082E 3E09 0009 31 ZINTERR LD A,9 0830 326101 0161 32 LD (ERROR),A 0833 F3 33 DI 0834 76  34 HALT 0835 3A6101 0161 35 ZDONE LD A,(ERROR) 0838 D601  0001 36 SUB 1 083A C24208 0842 37 JP NZ,HLT 083D 3E00 0000 38 CLRERR LD A,0 083F 326101 0161 39 LD (ERROR),A 0842 F3  40 HLT DI 0843 76 41 HALT 0844 00 42 ZDRIVER NOP 0845 3E01 0001 43 LD A,1 0847 326101 0161 44  LD (ERROR),A INIT ERROR TO 1 084A DD21FF3F 3FFF 45 LD IX,3FFFH 084E DDF9  46 LD SP,IX LOAD STACK POINTER AT 2K 0850 3A6701 0167 47 LD A,(ZTEST) 0853 47 48 LD B,A 0854 D601 0001 49 SUB 1  0856 CA8108 0881 50 JP Z,NMITEST 0859 78 51 LD A,B  085A D602 0002 52 SUB 2 085C CA9408 0894 53 JP Z,MACCESS  085F 78 54 LD A,B 0860 D603 0003 55 SUB 3 1ZAM (X014) ASSEMBLING Z.ASM AT 17:01:32 ON 83/04/20 PAGE 1 LOC OBJ CODE EXPR STMT SOURCE STATEMENT 0862 CABB08  08BB 56 JP Z,PRCDIAG 0865 78 57 LD A,B 0866 D604 0004 58 SUB 4 0868 CAFB08 08FB 59 JP Z,INPORT 086B 78  60 LD A,B 086C D605 0005 61 SUB 5 086E CA2209 0922 62 JP Z,OUTPORT 0871 78 63 LD A,B 0872 D606 0006 64  SUB 6 0874 CA3F09 093F 65 JP Z,ZISCOUT 0877 78 66 K  LD A,B 0878 D607 0007 67 SUB 7 087A CA4809 0948 68 JP Z,SIZ80 087D CD8809 0988 69 CALL TRACE 0880 76 70 HALT 0881 00 71 NMITEST NOP 0882 47 72 LD B,A 0883 3A6301 0163 73 LD A,(ZIMODE) 0886 5F 74 LD E,A  0887 3A6501 0165 75 LD A,(ZREPLY) 088A 67 76 LD H,A  088B 3A6701 0167 77 LD A,(ZTEST) 088E CD8809 0988 78 CALL TRACE  0891 C33508 0835 79 JP ZDONE 0894 00 80 MACCESS NOP 0895 11AA09 09AA 81 LD DE,ENDPRG+1 USE MEMORY AT END OF PROGRAM 0898 3E01 0001 82 LD A,1 089A 47 83 LD B,A B = PATTERN TO BE USED  089B 78 84 MLOOP LD A,B 089C CD8809 0988 85 CALL TRACE 089F 12 86 LD (DE),A WRITE IT TO MEMORY 08A0 1A 87  LD A,(DE) GET IT BACK 08A1 90 88 SUB B 08A2 CAAB08  08AB 89 JP Z,MPASS A = B 08A5 3E02 0002 90 LD A,2 ERROR 08A7 326101 0161 91 LD (ERROR),A 08AA 76 92 HALT  08AB 13 93 MPASS INC DE NEXT MEMORY LOC. 08AC 78 94  LD A,B 08AD C601 0001 95 ADD A,1 NEXT PATTERN 08AF 47  96 LD B,A 08B0 D6FF 00FF 97 SUB 0FFH 08B2 C29B08 089B 98 JP NZ,MLOOP CHECK FOR LAST PATTERN 08B5 CD8809 0988 99 CALL TRACE  08B8 C33508 0835 100 JP ZDONE 08BB 00 101 PRCDIAG NOP  08BC 3E5A 005A 102 LD A,5AH 08BE 47 103 LD B,A  08BF 48 104 LD C,B 08C0 51 105 LD D,C 08C1 5A 106 LD E,D 08C2 63 107 LD H,E 08C3 6B 108 LD L,E 08C4 95 109 SUB L 08C5 CAD208 08D2 110 JP Z,PASS 1ZAM (X014) ASSEMBLING Z.ASM AT 17:01:34 ON 83/04/20 PAGE 2 LOC OBJ CODE EXPR STMT SOURCE STATEMENT 08C8 3E02 0002 111 LD A,2 08CA 326101 0161 112 LD (ERROR),A 08CD 3EAB 00AB 113 LD A,0ABH PUT IN BYTE TO SEARCH FOR L 08CF 32390A 0A39 114 LD (ENDPRG+90H),A 08D2 21A909 09A9 115 PASS LD HL,ENDPRG BLOCK MOVE AND SEARCH TEST 08D5 11A90A 0AA9 116 LD DE,ENDPRG+100H HL=SOURCE, DE=DESTINATION 08D8 01FF00 00FF 117 LD BC,0FFH NUMBER OF BYTES TO MOVE (AND SEARCH) 08DB EDB0 118  LDIR MOVE FF BYTES FROM ENDPRG TO ENDPRG+100H 08DD CD8809 0988 119 CALL TRACE 08E0 01FF00 00FF 120 LD BC,0FFH NUMBER OF BYTES TO SEARCH 08E3 3EAB 00AB 121  LD A,0ABH SEARCH FOR 0ABH 08E5 21A90A 0AA9 122 LD HL,ENDPRG+100H 08E8 EDB1  123 CPIR 08EA CD8809 0988 124 CALL TRACE 08ED 210000 0000 125 LD HL,0 08F0 ED42 126 SBC HL,BC 08F2 C23508 0835 127 JP NZ,ZDONE BC WAS NOT ZERO - NO ERROR 08F5 3E04 0004 128 LD A,4  08F7 326101 0161 129 LD (ERROR),A ERROR 08FA 76 130 HALT  08FB 00 131 INPORT NOP 08FC 1600 0000 132 LD D,0  08FE CD7D09 097D 133 ILOOP CALL WAIT 0901 DB00 0000 134 IN A,(0) GET BYTE AT IN PORT 0903 92 135 SUB D 0904 CA0D09 090D 136 JP Z,IPASS IF A=D PASS 0907 3E02 0002 137 LD A,2 0909 326101 0161 138  LD (ERROR),A ERROR 090C 76 139 HALT 090D 7A 140 IPASS LD A,D 090E C601 0001 141 ADD A,1 0910 57 142  LD D,A 0911 3E01 0001 143 LD A,1 0913 326501 0165 144  LD (ZREPLY),A 0916 3EFF 00FF 145 LD A,0FFH 0918 92 146 SUB D 0919 CD8809 0988 147 CALL TRACE 091C CA3508 0835 148 JP Z,ZDONE CHECK FOR LAST PATTERN 091F C3FE08 08FE 149 JP ILOOP 0922 00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII