Sei sulla pagina 1di 18

; RENU CPU PROM for HEEPS T ver 1.113 ; based on ; Cascades2 CPU PROM for HEEPS T ver 1.

103 ; based on ; Scifer2 CPU PROM for HEEPS T ver 1.102 ; based on ; ROPA K21 CPU PROM for HEEPS I ver 0.089 ; ;Cascades2 HT soldered in flight version is v1.102 ;Scifer2 HT soldered in flight version is v1.101 ;directives moved to front to make ASEM happy. ;directives added to make MetaLink ASM51.EXE happy: $MOD51 $TITLE(K21 CPU PROM VER: RENU 1.113 for HEEPS T) $PAGEWIDTH(132) $NOPAGING $NODEBUG $SYMBOLS $OBJECT ;ASEM will object to this directive, no problem ; scf2_he.asm(19): illegal control statement ;RENU HT v1.113 got 32? seconds between pulses, ~1/4 second long pulse due to ??? changing count from 16 to 8 ;RENU HT v1.112 got 32 seconds between pulses, 1/2 second long pulse due to decrementing on both set and reset, ; decrement on reset now commented out ;RENU HT v1.111 finished implementing using CTR instead of A0/A1 for master/slave sweep synch stuff ;RENU HT v1.110 using CTR instead of A0/A1 for master/slave sweep synch stuff ;RENU HT v1.109 continuing master/slave sweep synch stuff ;RENU HT v1.108 continue adding 1PPS sweep synch stuff and continuing master/slave sweep synch stuff ;RENU HT v1.107 adding 1PPS sweep synch stuff and continuing master/slave sweep synch stuff ;RENU HT v1.106 added parasynchs to end tags ;RENU HT v1.105 adding sweep synchronizization code using P3.1 (A0) & P3.2 (A1) to communicate ;RENU HT start version is v1.104 same as Cascades2 v1.103 same as Scifer2 v1.102 ;Cascades2 HT start version is v1.103 same as Scifer2 v1.102 ; v1.10? adds NEWSTYLE/OLDSTYLE conditional assembly flags to vary the ACK handling ; v1.102 moves data above ALL register sets ;Scifer2 HT soldered in flight version is v1.101 ; v1.101 moves CLR ACK to after any shifting w/ only one instruction before SETB ACK ; v1.100 moves ORing and ANDing to make sure that bit 6 is set and bit 7 is not set even when no shifting is done ; v1.099 adds ANDing and ORing to make sure that bit 6 is set and bit 7 is not set when shifting is done ; v1.098 adds bin number right shifting for 16 or 32 bins no hardware changes needed for differing numbers of bins ; v1.097 can be assembled with ASM51 or ASEM_51 to get identical .HEX results ; the HEXBIN.EXE from ASEM will FF pad rather than 00 pad, otherwise .BINs are the same ; v1.096 adds stepping energy on every Nth set of bins option (unused) ; v1.096 adds 16/20 and 32/40 padding options ; ; v0.89 is the same as v0.86 (with FAST_OUT on) which is what went to ; Wallops for the ROPA Pre Integration and gave apparently good data ; v0.87 added the SKIP_ONE and SKIP_TWO which HEI needed, but apparently

; ; ; ; ; ; ; ; ; ; ; ; ;

screw up HII (or the implementation foo ed something) so 0.87 and 0.88 are sidelined and we revert to 0.86 renumbered to 0.89 based on K21 CPU PROM VER: Cascades 0.81 for HEEPS I detector derived from K21 PROM VER: Sersio 0.74 for HEEPS M detector for ROPA Box 1 Tray 3 K21 CPU based on Cascades & Sersio sources which were based on SIERRA K21 source from Mark Widholm, modified to assemble with ASM51.EXE from MetaLink original Sierra code used 12 HMz processor & crystal now running on 24 MHz processor and crystal steps time 64 64 32 64 64 (64) steps 32 64 32 64 (64) sweep 128ms 128ms 64ms 128ms 256ms 256ms sweep time 64ms 128ms 64ms 128ms 128ms K21 K21 K21 K21 K21 K20 new prog 1 new prog 1 new prog 3 prog 0 prog 2 modified prog 2 modified (sweep generated for BEEPS p is shared by BEEPS O)

;SERSIO values: ;detector readout angle step ; rate bins time ;HEEPS T1 32K 64 2ms ;HEEPS T2 32K 64 2ms ;HEEPS M 32K 64 2ms ;HEEPS E 16K 32 2ms ;BEEPS p 4K 16 4ms ;BEEPS O 4K 16 4ms ;Scifer2 values: ;detector readout ; rate ;HEEPS E 32K* ;HEEPS T 32K ;HEEPS M 32K ;BEEPS p 32K** ;BEEPS O 32K** ;* oversampled x2 ;** oversampled x4 angle bins 32 64 64 16 16 step time 2ms 2ms 2ms 2ms 2ms

based on K21 prog 0 K21 new prog 1 K21 new prog 3 K21 prog 2 modified K20 prog 2 modified (sweep generated for BEEPS p is shared by BEEPS O)

;RENU values: ;detector readout angle ; rate bins ;HEEPS E 32K* 32 ;HEEPS T 32K 64 ;HEEPS M 32K 64 ;BEEPS p 16K** 16 ;BEEPS O 16K** 16 ;* oversampled x2 ;** oversampled x2 (or not ;OVERSAMPLE EQU OVERSAMPLE EQU 0 SAMPLE EQU 1 1

step time 2ms 2ms 2ms 2ms 2ms

steps 32 64 32 64 (64)

sweep time 64ms 128ms 64ms 128ms 128ms

based on K21 prog 0 K21 new prog 1 K21 new prog 3 K21 prog 2 modified K20 prog 2 modified (sweep generated for BEEPS p is shared by BEEPS O)

oversampled)

;DOSYNCH SET 0 DOSYNCH SET 1 IF (DOSYNCH) ;MASTER SET 0 MASTER SET 1 SLAVE SET 0 ;SLAVE SET 1 SYNC1PPS SET 0 ;don't force energy sweep to reset at 1PPS ELSE ;IF (DOSYNCH) MASTER SET 0 SLAVE SET 0 ENDIF ;IF (DOSYNCH) ;SYNC1PPS SET 1 ;force energy sweep to reset at 1PPS SYNC1PPS SET 0 ;don't force energy sweep to reset at 1PPS IF (SYNC1PPS) DOSYNCH SET 0 MASTER SET 0 SLAVE SET 0 ENDIF ;IF (SYNC1PPS) IF (DOSYNCH) IF (MASTER) SLAVE SET 0 ELSE;IF (MASTER) MASTER SET 0 ENDIF ;IF (MASTER) IF (SLAVE) MSCOUNT EQU 1 ELSE ;IF (SLAVE) ;MSCOUNT EQU 16 MSCOUNT EQU 8 ENDIF ;IF (SLAVE) ENDIF ;IF (DOSYNCH)

;v1.108

> v1.109 ;v1.108 > v1.109

;v1.108 > v1.109 ;v1.112 > v1.113

OLDSTYLE SET 1 NEWSTYLE SET 0 ;OLDSTYLE SET 0 ;NEWSTYLE SET 1 IF (OLDSTYLE) NEWSTYLE SET 0 ELSE IF (NEWSTYLE) ELSE OLDSTYLE SET 1 ;IF NEITHER IS SET, SET OLDSTYLE ON ENDIF ;IF (NEWSTYLE) ENDIF ;IF (OLDSTYLE) ;SKIP_ONE EQU 1 ;on RESET skip one word out

SKIP_ONE EQU 0 ;on RESET skip one word out ;SKIP_TWO EQU 1 ;on RESET skip two words out SKIP_TWO EQU 0 ;on RESET skip two words out ; IF 64 BINS TWO6 EQU 64 TWO5 EQU 0 TWO4 EQU 0 ;;ELSE IF 32 BINS ;TWO6 EQU 0 ;TWO5 EQU 32 ;TWO4 EQU 0 ;;ELSE IF 16 BINS ;TWO6 EQU 0 ;TWO5 EQU 0 ;TWO4 EQU 16 ;;ENDIF ;PAD EQU 1 PAD EQU 0 ;detector readout ; rate ;HEEPS I 32K ;HEEPS T 32K angle bins 64 64 step time 2ms 2ms steps 32 64 sweep time 64ms based on Sersio HM 128ms/sweep;

FAST_OUT EQU 1 ;probably keep on for flight ;FAST_OUT EQU 0 ;PARANOID EQU 1 ;probably turn off for flight ;;PARANOID EQU 0 ;;METANOID EQU 1 ;definitely turn off for flight ;METANOID EQU 0 PARANOID EQU 0 USING ; ; ; ; ; 0 ;Select addresses for Bank 0

PORT USAGE P0 FIFO output P1 BNn input P2 DAC output K21 (not used on K20) P3 single bit IO

; IO BITS TST BIT P3.0 A0 BIT P3.1 A1 BIT P3.2 PPS1 EQU A1 ;INT1 BIT P3.3

CTR BIT P3.4 ;SwpRst EQU A0 SwpRst EQU CTR EVENT BIT P3.5 ;WR BIT P3.6 ;LOAD FIFO ACK BIT P3.7 ; the AD 7111A can only sweep down when presented ; an ascending count, so the count must be provided as a count down to get an ; upward sweep with the AD 7111A ; ;tailored sweep information ;HEEPS T sweep simulation program SWEEPT.FOR ; khi = 2.3? 2.7? DETECTOR FACTOR ; hv = 1.0 HV BOARD AMPLIFICATION FACTOR ; board = 1.0 K21 BOARD DE AMPLIFICATION FACTOR ; numsteps = 64 RESTART_HT EQU 198 ;195 3 == START_HT INC_HT START_HT EQU 195 INC_HT EQU 3 LAST_HT EQU 6 END_HT EQU LAST_HT + INC_HT ;;;Sersio HT sweep ;;;HEEPS T1, HEEPS T2, BEEPS T sweep simulation program SWEEPT.FOR ;;; kht1 = 7.3 DETECTOR FACTOR ;;; hv = 1.0 NO HV BOARD AMPLIFICATION ;;; board = 3.5 K21 BOARD DE AMPLIFICATION FACTOR ;;; numsteps = 64 ;;START_HT1 EQU 131 ;;INC_HT1 EQU 2 ;;LAST_HT1 EQU 5 ;;END_HT1 EQU 3 ;5 + 2 ;INTERNAL RAM ;directive added to make MetaLink ASM51.EXE happy: DSEG ;directly addressable Data memory SEGment definition ; ORG 8H ORG 20H SWP: DS 1 VECL: DS 1 VECH: DS 1 DS 8 IGNORE: DS 3 FLAG ;1.101 > 1.102 ;skip over register banks 0..3 ;SWEEP STEP NUMBER ;1.101 > 1.102

EQU R7

IF (OVERSAMPLE) SKIP: DS 1 ENDIF ;IF (OVERSAMPLE) IF (DOSYNCH) MSCOUNTER: DS 1 ENDIF ;IF (DOSYNCH) ORG BIN0: BIN1: BIN15: BIN16: BIN19: BIN20: BIN31: BIN32: BIN39: BIN40: BIN64: 40H ;IMAGE BINS. MUST BE AT 40H FOR HARDWARE DS 1 DS 14 DS 1 DS 3 DS 1 DS 11 DS 1 DS 7 DS 1 DS 24 DS 0

;directive added to make MetaLink ASM51.EXE happy: CSEG ;code memory SEGment definition ORG 0 JMP RESET_ ;1us JUMP AROUND INTR HANDLER ; ORG 13H ; External INT 1 vectors to here, so each external INT 1 will jump via this ; dispatch code to the appropriate PROGn INTV1: MOV SP,#VECH ;1us JUMP INDIRECT THRU VEC BY LOADING SP RETI ;1us AND DOING A RET ; ; RESET HAPPENS ONLY ON POWER UP (OR ATTEMPT TO READ EMPTY FIFO) RESET_: ;; IF (FAST_OUT) ; write out data to FIFO a.s.a.p. ; CLR A MOVX @R0,A ;WRITE 0 TO FIFO BIN0 (ADDR NOT USED) MOV R0,#BIN0 ; LPRESET: SET DATA TO TEST RAMP and output test ramp

MOV @R0,A INC R0 IF (TWO6) ADD A,#3 ELSE IF (TWO5) ADD A,#7 ELSE IF (TWO4) ADD A,#15 ENDIF ENDIF ENDIF MOVX @R0,A ;WRITE TEST IF (TWO6) CJNE R0,#BIN64,LPRESET ELSE IF (TWO5) IF (PAD) CJNE R0,#BIN40,LPRESET ELSE ;IF (PAD) CJNE R0,#BIN32,LPRESET ENDIF ;IF (PAD) ELSE ;IF (TWO5) IF (TWO4) IF (PAD) CJNE R0,#BIN20,LPRESET ELSE ;IF (PAD) CJNE R0,#BIN16,LPRESET ENDIF ;IF (PAD) ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6) ;

VALUE TO FIFO BIN?? (ADDR NOT USED) ;LOOP FOR 64 BINS

;LOOP FOR 40 BINS ;LOOP FOR 32 BINS

;LOOP FOR 20 BINS ;LOOP FOR 16 BINS

END

SET DATA TO TEST RAMP

; now that FIFO is filled, do rest of initialization ENDIF ;IF (FAST_OUT) ;; MOV TCON,#04H ; MOV SWP,#START_HT ;RESET VALUE IF (DOSYNCH) IF (MASTER) SETB SwpRst ;TOGGLE SYNCH BIT ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH) ;1us EDGE TRIG FOR INT1

GOES ON HERE, OFF LATER

MOV MOV MOV MOV

FLAG,#0 VECH,#00H VECL,#80H SP,#IGNORE

;1us 80H LEAVES ROOM FOR RESET CODE ;1us PLACE TO PUT PC IF INTERUPTED

MOV R0,#BIN0 CLR A IF (OVERSAMPLE) MOV SKIP,#SAMPLE ENDIF ;IF (OVERSAMPLE) IF (DOSYNCH) MOV MSCOUNTER,#MSCOUNT ENDIF ;IF (DOSYNCH) IF (SYNC1PPS) CLR SwpRst ENDIF ;IF (SYNC1PPS) ; LPRESET2: MOV @R0,A INC R0 IF (TWO6) ADD A,#3 ELSE IF (TWO5) ADD A,#7 ELSE IF (TWO4) ADD A,#15 ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6) IF (TWO6) CJNE R0,#BIN64,LPRESET2 ;LOOP FOR 64 BINS ELSE IF (TWO5) IF (PAD) CJNE R0,#BIN40,LPRESET2 ;LOOP FOR 40 BINS ELSE ;IF (PAD) CJNE R0,#BIN32,LPRESET2 ;LOOP FOR 32 BINS ENDIF ;IF (PAD) ELSE IF (TWO4) IF (PAD) CJNE R0,#BIN20,LPRESET2 ;LOOP FOR 20 BINS SET DATA TO TEST RAMP ;v1.108 > v1.109

ELSE ;IF (PAD) CJNE R0,#BIN16,LPRESET2 ;LOOP FOR 16 BINS ENDIF ;IF (PAD) ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6) ; IF (DOSYNCH) IF (MASTER) CLR SwpRst ;TOGGLE SYNCH BIT ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH) END SET DATA TO TEST RAMP

GOES OFF HERE, ON EARLIER

; ;

MOV IE,#84H ;1us ENABLE EXT INT1 JMP INTV1 ;1us JMP PROG0 ;1us ;why not just jump to PROG0?

Does the RETI @

; EVENT WAIT LOOP (USED BY ALL PROGS) IF (SYNC1PPS) SWEEPSYNC: CJNE FLAG,#0,WT_FOO SETB SwpRst MOV SWP,#RESTART_HT ;RESET VALUE MOV FLAG,#255 CLR SwpRst JMP WT_FOO ENDIF ;IF (SYNC1PPS) IF (DOSYNCH) IF (SLAVE) SWEEPSYNC: CJNE FLAG,#0,WT_FOO DJNZ MSCOUNTER,WT_FOO ;v1.108 MOV SWP,#RESTART_HT ;RESET VALUE MOV FLAG,#255 MOV MSCOUNTER,#MSCOUNT ;v1.108 JMP WT_FOO ENDIF ;IF (SLAVE) ENDIF ;IF (DOSYNCH) OK: INC @R0 ;1/2us COUNT EVENT WT:

> v1.109 > v1.109

IF

(SYNC1PPS) JB PPS1,SWEEPSYNC MOV FLAG,#0 WT_FOO: ENDIF ;IF (SYNC1PPS) IF (DOSYNCH) IF (SLAVE) JB A1,SWEEPSYNC MOV FLAG,#0 WT_FOO: ENDIF ;IF (SLAVE) ENDIF ;IF (DOSYNCH) JNB EVENT,WT ;1us WAIT FOR: NEXT EVENT OR INTR MOV A,P1 ;GET BIN # INTO A IF (OLDSTYLE) CLR ACK ;1/2us PULSE ACK TO ENABLE NEXT EVENT ENDIF ;IF (OLDSTYLE) ;; The AND and the OR following prevent unused input bits from being seen. While hardware should force these bits to proper values, ;; damage to the internal pull ups of the chips can prevent pins that should be high from being high. ;;IF (METANOID) ;;; ANL A,#7FH ;64 BINS ;anding this bit out prior to setting it is unnecessary ;; ORL A,#40H ;;ENDIF ;IF (METANOID) ; mask out high bits ANL A,#3FH ;1/2us IF (TWO6) ; do nothing ELSE ;IF (TWO6) ; mask out high bits IF (TWO5) CLR C ;1/2us RRC ;1/2us ELSE ; IF (TWO5) IF (TWO4) CLR C ;1/2us RRC ;1/2us CLR C ;1/2us RRC ;1/2us ELSE ; IF (TWO4) ; do nothing ENDIF ; IF (TWO4) ENDIF ; IF (TWO5) ENDIF ; IF (TWO6) ORL A,#40H ;1/2us

64 > 32 mapping shift bin number right 1 bit 64 > shift 32 > shift 32 mapping bin number right 1 bit 16 mapping bin number right 1 bit

CLR ACK ;1/2us PULSE ACK MOV R0,A SETB ACK ;1/2us

TO ENABLE NEXT EVENT

CJNE @R0,#255,OK ;1us CHECK FOR WRAP JMP WT ;1us IGNORE EVENT IF AT 255 ; ORG 80H ;detector readout angle step steps sweep ; rate bins time time ;HEEPS T 32K 64 2ms 64 128ms K21 ;START_HT EQU 195 ;INC_HT EQU 3 ;LAST_HT EQU 6 ;END_HT EQU 3 ;3 = 6 + 3 == LAST_HT + INC_HT PROG0: MOV SP,#IGNORE MOV A,BIN0 MOVX @R0,A MOV BIN0,#0 MOV A,SWP MOV P2,A

new prog 1

;PLACE TO PUT PC IF INTERUPTED ;1/2us ;1us WRITE BIN0 TO FIFO (ADDR NOT USED) ;1us CLEAR BIN0 ;OUTPUT SWEEP STEP TO DAC

; ADD A,#INC_HT IF (OVERSAMPLE) DJNZ SKIP,SKIPIT ADD A,#INC_HT MOV SKIP,#SAMPLE SKIPIT: ELSE ;IF (OVERSAMPLE) ADD A,#INC_HT ENDIF ;IF (OVERSAMPLE) ; ; since this next is an EQUAL compare, and the increment is not required to ; be +1 or 1, the starting value needs to be carefully chosen both for use ; here in restarting the next sweep and initially on RESET ; CJNE A,#END_HT,FOO0 ;otherwise do restart of sweep when end value seen MOV A,#START_HT ;RESET VALUE IF OVERFLOW IF (DOSYNCH) IF (MASTER) DJNZ MSCOUNTER,MS_FOO ;Oh Oh ;v1.108 > v1.109 SETB SwpRst ;TOGGLE SYNCH BIT GOES ON HERE, OFF LATER MS_FOO: ;Oh Oh ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH)

FOO0: MOV SWP,A JB TST,TST0 MOV R0,#BIN1 LP0: MOV A,@R0 MOVX @R0,A CLR A MOV @R0,A INC R0

;UPDATE SWEEP ; go do test ramp if TST bit set ;OUTPUT BINS TO FIFO

;GET BIN ;WRITE TO FIFO. (ADDR NOT USED) ;CLEAR BIN

IF (TWO6) CJNE R0,#BIN64,LP0 ELSE IF (TWO5) IF (PAD) CJNE R0,#BIN40,LP0 ELSE ;IF (PAD) CJNE R0,#BIN32,LP0 ENDIF ;IF (PAD) ELSE IF (TWO4) IF (PAD) CJNE R0,#BIN20,LP0 ELSE ;IF (PAD) CJNE R0,#BIN16,LP0 ENDIF ;IF (PAD) ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6)

;LOOP FOR 64 BINS

;LOOP FOR 40 BINS ;LOOP FOR 32 BINS

;LOOP FOR 20 BINS ;LOOP FOR 16 BINS

IF (DOSYNCH) IF (MASTER) ; DJNZ MSCOUNTER,MS_F00 ;Zero Zero ;v1.108 > v1.109 CLR SwpRst ;TOGGLE SYNCH BIT GOES OFF HERE, ON EARLIER ;MS_F00: ;Zero Zero ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH) SETB ACK JMP WT ;MAKE SURE ACK IS HI

; commented out in v1.112, don't need count in BOTH places

; 16/64 BIN TEST PATTERN GENERATOR. ; LOADS RAMP INTO 16/64 BINS WHEN TST BIT IS HIGH TST0: IF (DOSYNCH)

IF (MASTER) SETB SwpRst ;TOGGLE SYNCH BIT ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH) MOV BIN0,#1 MOV R1,#1 MOV R0,#BIN1 TLP0: MOV A,@R0 MOVX @R0,A MOV A,R1 MOV @R0,A IF (TWO6) ADD A,#3 ELSE IF (TWO5) ADD A,#7 ELSE IF (TWO4) ADD A,#15 ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6)

GOES ON HERE, OFF LATER

always reset on Test ; v1.113

;BIN0 RAMP VALUE ;R1 IS RAMP COUNTER ;OUTPUT BINS TO FIFO ;GET BIN ;WRITE TO FIFO. (ADDR NOT USED) ;SET BIN TO RAMP VALUE

MOV R1,A ;BUMP RAMP BY INCREMENT INC R0 IF (TWO6) CJNE R0,#BIN64,TLP0 ;LOOP FOR 64 BINS ELSE IF (TWO5) IF (PAD) CJNE R0,#BIN40,TLP0 ;LOOP FOR 40 BINS ELSE ;IF (PAD) CJNE R0,#BIN32,TLP0 ;LOOP FOR 32 BINS ENDIF ;IF (PAD) ELSE IF (TWO4) IF (PAD) CJNE R0,#BIN20,TLP0 ;LOOP FOR 20 BINS ELSE ;IF (PAD) CJNE R0,#BIN16,TLP0 ;LOOP FOR 16 BINS ENDIF ;IF (PAD) ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6) IF (DOSYNCH) IF (MASTER)

DJNZ MSCOUNTER,MS_F0O ;Zero Oh ;v1.108 > v1.109 ; commented out in v1.112, don't need count in BOTH places CLR SwpRst ;TOGGLE SYNCH BIT GOES OFF HERE, ON EARLIER ;MS_F0O: ;Zero Oh ENDIF ;IF (MASTER) ENDIF ;IF (DOSYNCH) SETB ACK JMP WT ;MAKE SURE ACK IS HI

;IF (PARANOID) ; JMP RESET ;should never get here, so if we do RESET ;ENDIF ;IF (PARANOID) ;"Step", ;000, ;001, ;002, ;003, ;004, ;005, ;006, ;007, ;008, ;009, ;010, ;011, ;012, ;013, ;014, ;015, ;016, ;017, ;018, ;019, ;020, ;021, ;022, ;023, ;024, ;025, ;026, ;027, ;028, ;029, ;030, ;031, ;032, ;033, ;034, ;035, "N" , 195, 192, 189, 186, 183, 180, 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 141, 138, 135, 132, 129, 126, 123, 120, 117, 114, 111, 108, 105, 102, 099, 096, 093, 090, "Vout" .264808E .301426E .343108E .390554E .444561E .506036E .576012E .655664E .746331E .849535E .967011E .110073E .125294E .142620E .162342E .184791E .210345E .239431E .272541E .310228E .353127E .401959E .457542E .520812E .592831E .674810E .768124E .874342E .995248E .113287 .128953 .146785 .167083 .190187 .216487 .246423 , "Scaled" 02, .264808E 02, .301426E 02, .343108E 02, .390554E 02, .444561E 02, .506036E 02, .576012E 02, .655664E 02, .746331E 02, .849535E 02, .967011E 01, .110073E 01, .125294E 01, .142620E 01, .162342E 01, .184791E 01, .210345E 01, .239431E 01, .272541E 01, .310228E 01, .353127E 01, .401959E 01, .457542E 01, .520812E 01, .592831E 01, .674810E 01, .768124E 01, .874342E 01, .995248E , .113287 , .128953 , .146785 , .167083 , .190187 , .216487 , .246423 02 02 02 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01

;036, ;037, ;038, ;039, ;040, ;041, ;042, ;043, ;044, ;045, ;046, ;047, ;048, ;049, ;050, ;051, ;052, ;053, ;054, ;055, ;056, ;057, ;058, ;059, ;060, ;061, ;062, ;063,

087, 084, 081, 078, 075, 072, 069, 066, 063, 060, 057, 054, 051, 048, 045, 042, 039, 036, 033, 030, 027, 024, 021, 018, 015, 012, 009, 006,

.280499 .319287 .363439 .413696 .470903 .536020 .610142 .694514 .790554 .899873 1.02431 1.16595 1.32718 1.51071 1.71962 1.95741 2.22808 2.53619 2.88690 3.28610 3.74051 4.25776 4.84653 5.51672 6.27959 7.14795 8.13638 9.26150

, , , , , , , , , , , , , , , , , , , , , , , , , , , ,

.280499 .319287 .363439 .413696 .470903 .536020 .610142 .694514 .790554 .899873 1.02431 1.16595 1.32718 1.51071 1.71962 1.95741 2.22808 2.53619 2.88690 3.28610 3.74051 4.25776 4.84653 5.51672 6.27959 7.14795 8.13638 9.26150

; ;PARASYNC MACRO ;EOC SET ($/16) ;EOC SET (EOC+1)*16 ; ORG EOC ; ENDM ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC ROM_ID: DB 'K21 CPU PROM VER: RENU 1.113 for HEEPS T; 40.026 ' ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC SWEEPDATA:

IF (OVERSAMPLE) DB 'HEEPS T 32 K 64 bins 2 DB 'Step energy sweep every ELSE DB 'HEEPS T 32 K 64 bins 2 DB 'Step energy sweep every ENDIF ;IF (OVERSAMPLE) ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC OPTIONS: IF (FAST_OUT) DB 'Fast_Out; ' ELSE DB 'NO_Fast_Out; ' ENDIF ;IF (FAST_OUT)

ms/Step 64 Steps set of bins ' ms/Step 64 Steps set of bins '

128 ms/sweep; 128 ms/sweep;

' '

; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC IF (SKIP_TWO) DB 'on RESET skip two words out; ' ELSE ;IF (SKIP_TWO) IF (SKIP_ONE) DB 'on RESET skip ONE word out; ' ELSE ;IF (SKIP_ONE) DB 'on RESET DO NOT Skip ANY words out; ENDIF ;IF (SKIP_ONE) ENDIF ;IF (SKIP_TWO) ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC IF (SYNC1PPS) DB 'force energy sweep to reset at 1PPS; ELSE DB 'NO_SYNC1PPS; ' ENDIF ;IF (SYNC1PPS)

'

'

; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC IF (DOSYNCH) IF (MASTER) DB 'MASTER: SEND COMMAND TO force energy sweep reset in other 8051s '

DB 'every 8 sweep resets ' ;IF (MASTER) DB 'SLAVE: SYNC energy sweep on command DB 'every time received ' ENDIF ;IF (MASTER) ELSE ; IF (DOSYNCH) DB 'NO Master/Slave SweepSynch; ' ENDIF ;IF (DOSYNCH) ELSE ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 IF (TWO6) DB '64 bins output; ELSE IF (TWO5) IF (PAD) DB '40 bins output; ELSE ;IF (PAD) DB '32 bins output; ENDIF ;IF (PAD) ELSE IF (TWO4) IF (PAD) DB '20 bins output; ELSE ;IF (PAD) DB '16 bins output; ENDIF ;IF (PAD) ENDIF ;IF (TWO4) ENDIF ;IF (TWO5) ENDIF ;IF (TWO6)

'

'

' '

' '

; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC IF (OLDSTYLE) DB 'OLDSTYLE ack handling; ' ELSE ;IF (OLDSTYLE) IF (NEWSTYLE) DB 'NEWSTYLE ack handling; ' ELSE ;IF (NEWSTYLE) DB 'NOT_OLDSTYLE ack handling; ENDIF ;IF (NEWSTYLE) ENDIF ;IF (OLDSTYLE) ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC

'

IF (PARANOID) DB 'PARANOID; ' ELSE DB 'NOT_PARANOID; ENDIF ;IF (PARANOID) END

'