*NAME TMEMTEST TIME WITH MEMORY TEST PROGRAM ** THIS IS A SAMPLE PROGRAM WHICH WILL TEST THE MEMORY ON A SYM-1. ** AFTER LOADING INTO THE SYM, BEGIN OPERATING AT $0200. ** IT WILL ASK FOR INPUT AND KEEP TRACK OF THE TIME AS IT RUNS. ** WRITTEN BY DALE HOLT, TIJERAS, NM 87059 JANUARY, 1981 *LOCATE $0200 BEGIN JSR ACCESS UN:WRITE:PROTECT LDA $0C CLEAR SCREEN JSR OUTCHR JSR BEEP JSR BEEP JSR BEEP LDA 'START LOW ADDRESS STA LNTVEC INTERRUPT VECTOR LDA "START HIGH ADDRESS STA HNTVEC INTERRUPT VECTOR GETDAY JSR CRLF LDA #0 STA DAYO PRI MES11 WHICH DAY JSR INCHR AND $0F EXTRACT DIGIT FROM ASCII LDX #0 SEC TAY LDA #0 RY ROL A PHA LDA #3 ADC DAYO STA DAYO PLA DEY BNE RY STA DAY GETAM JSR CRLF PRI MES9 AM OR PM JSR INCHR GET ONE CHARACTER CMP @A BEQ AMSET CMP @P BEQ PMSET JMP GETAM AMSET LDA $00 STA AMPM JMP PRINT PMSET LDA $F0 STA AMPM PRINT JSR CRLF PRI MES3 ENTER TIME GETTIM JSR PARM GET STARTING TIME LDA P1L GET PARAMETER ONE STA HOURS STORE IN HOURS LDA P2L GET PARAMETER TWO STA MINUTE STORE IN MINUTE LDA P3L GET PARAMETER THREE STA SECOND STORE IN SECOND JSR CRLF PRINT CR,LF LDA $FF PORT A AS OUTPUT STA DDRA DDRA LDA $40 SET T1 TO FREE RUN STA ACR ACR LDA $C0 ENABLE INTERRUPTS STA IER IER LDA $50 GET DECIMAL 50 000 STA T1L:L STORE IN LOW LATCH LDA $C3 GET REST OF 50 000 STA T1L:H STORE IN HIGH LATCH STA T1C:H STORE IN HIGH COUNTER INIT JMP WAIT WAIT FOR INTERRUPT START JSR INTER GO TO INTERRUPT SUBROUTINE RTI RETURN TO WAITING INTER JSR SAVER SAVE ALL REGS LDA IFR CLEAR INTERRUPT STA IFR CLEAR INTERRUPT INC TICK COUNT INTERRUPTS LDA #20 20 TICKS/SEC (BIN MODE ADD) CMP TICK SET Z=1 IF ZERO BEQ NEXTS UPDATE THE CLOCK RETURN JMP RESALL RESTORE ALL REGS & RTS NEXTS LDA #00 GET ZERO STA TICK SET TICK TO ZERO CLC CLEAR CARRY SED SET DECIMAL MODE LDA SECOND GET SECONDS ADC #01 ADD 1 STA SECOND STORE CMP $60 CHECK FOR 60 BNE DISPLA IF NOT, CHECK DISPLA LDA #00 GET ZERO STA SECOND CLEAR SECONDS LDA MINUTE GET MINUTES CLC FOR ADD ADC #01 ADD 1 STA MINUTE STORE CMP $60 CHECK FOR 60 BNE DISPLA IF NOT, CHECK DISPLA LDA $00 GET ZERO STA MINUTE CLEAR MINUTES CLC FOR ADD LDA HOURS GET HOURS ADC #01 ADD 1 STA HOURS STORE CMP $12 IS IT 12 BNE NEXTH IF NOT,CHECK NEXT LDA AMPM GET INDICATOR EOR $F0 REVERSE 00=AM F0=PM STA AMPM STORE BNE DISPLA BRANCH IF PM CLC CLEAR CARRY ROL DAY INCREMENT DAY CLC CLEAR CARRY CLD CLEAR DECIMAL MODE LDA #3 INCREMENT BY 3 PER DAY ADC DAYO 3 * DAY STA DAYO STORE IT AGAIN SED SET DECIMAL MODE AGAIN LDA $80 EQUALS DAY 8 CMP DAY COMPARE WITH DAY BNE NEXTH BRANCH IF NOT SAME LDA #3 STA DAYO SET TO 3 LDA #01 GET A 1 STA DAY STORE BNE DISPLA BRANCH TO DISPLA NEXTH LDA HOURS GET HOURS CMP $13 IS IT 13? BNE DISPLA BRANCH IF NOT LDA #01 GET A 1 STA HOURS SET HOURS TO 1 BNE DISPLA CHECK FOR DISPLA DISPLA CLD JMP RETURN RETURN FROM INTERRUPT ** MEMORY TEST PROGRAM WAIT LDA $00 GET ZERO STA ERRCNT STA ERRCNT+1 STA ERRCNT+2 SET TO ZERO STA CYCLE STA CYCLE+1 STA CYCLE+2 JSR CRLF PRI MES1 START AND END PARMIN JSR PARM PARM LDA P2H STA P2HH LDA P2L STA P2LL LDA P3H STA P3HH LDA P3L STA P3LL BEEP? PRC MES13 LDA $00 STA BEEEP JSR INCHR CMP @Y BNE REPEAT BRANCH IF NO INC BEEEP INCREMENT IF YES REPEAT JSR CRLF CLC JSR TSTAT SEE IF BRK KEY DOWN BCC NOPE JSR BEEP YES IT IS, SO TELL OPERATOR BACK CLC JSR TSTAT BCS BACK JMP WARM GO TO MONITOR WHEN RELEASED NOPE SED INCREMENT CYCLE COUNTER CLC LDA #1 ADC CYCLE+2 STA CYCLE+2 LDA #0 ADC CYCLE+1 STA CYCLE+1 LDA #0 ADC CYCLE STA CYCLE CLD LDA P2HH BEGIN HIGH STA GET+2 STA PUT+2 LDA P2LL BEGIN LOW STA PUT+1 STA GET+1 LDA P3HH END HIGH LDA P3LL END LOW TEST LDY $FF START WITH FF, 256 PATTERNS LDA PUT+1 SAVE AND RESTORE STA SAVE1+1 ORIGINAL MEM CONTENTS STA SAVE2+1 LDA PUT+2 STA SAVE1+2 STA SAVE2+2 SAVE1 LDA $0000 STA SAVE JMP LUP2 SAVE $00 LUP1 DEY LUP2 TYA Y IS THE PATTERN STA MASK PUT STA $0000 PUT IN MEMORY GET LDA $0000 GET FROM MEMORY GETN CMP MASK BEQ OK1 JMP ERROR OK1 TYA BNE LUP1 INC CLC INCREMENT ADDRESSES LDA GET+1 ADC #1 STA GET+1 LDA GET+2 ADC $00 STA GET+2 STA PUT+2 LDA GET+1 STA PUT+1 LDA SAVE SAVE2 STA $0000 FINCHK SEC TWO BYTE SUBTRACT LDA P3L END LOW SBC GET+1 PRESENT LOW LDA P3H END HIGH SBC GET+2 PRESENT HIGH BCC FIN1 ALL THROUGH JMP TEST ELSE REPEAT FIN1 JMP FINISH ERROR STA STOR+1 SAVE BAD VALUE CMP GET+2 HIGH BYTE OF ADDRESS? BEQ FURTHR CHECK FURTHER JMP ERR1 FURTHR LDA GETN SAVE OP CODE STA RGETN+1 LDA $60 RTS OP CODE STA GETN LDA $00 TEST WITH ZERO JSR PUT PHA RGETN LDA $00 RESTORE OP CODE STA GETN PLA CMP GET+2 HIGH BYTE OF ADDRESS BEQ NOMEM JMP ERR1 NOMEM JSR CRLF PRI MES2 LDA GET+2 JSR OUTBYT LDA GET+1 JSR OUTBYT PRI MES12 TEST ABORTED JSR CRLF LDA GET+1 STA P3LL LDA GET+2 STA P3HH JMP FINISH JMP OK1 ERR1 CLC INCREMENT ERROR COUNT LDA STOR+1 GET BAD DATA SED LDA #1 ADC ERRCNT+2 STA ERRCNT+2 LDA #0 ADC ERRCNT+1 STA ERRCNT+1 LDA #0 ADC ERRCNT STA ERRCNT CLD JSR CRLF ERRMES TYA PHA PRI MES6 PRINT ERROR MESSAGE LDA GET+2 JSR OUTBYT LDA GET+1 JSR OUTBYT PRI MES4 LDA MASK JSR OUTBYT JSR SPACE LDA @V JSR OUTCHR JSR SPACE STOR LDA $00 MODIFIED BY ERROR JSR OUTBYT PLA TAY JMP OK1 FINISH LDA BEEEP GET FLAG BEQ QUIET IF ZERO KEEP QUIET JSR BEEP IF ONE , MAKE SOUND QUIET JSR CRLF PRINT FINISH MESSAGE PRI MES8 PRINT TIME LDA HOURS JSR OUTBYT LDA @: JSR OUTCHR LDA MINUTE JSR OUTBYT LDA @: JSR OUTCHR LDA SECOND JSR OUTBYT JSR SPACE LDA AMPM BEQ AMPR LDA @P JSR OUTCHR JMP MPR AMPR LDA @A JSR OUTCHR MPR LDA @M JSR OUTCHR JSR SPACE DAYPR LDY DAYO LDA DAYL,Y JSR OUTCHR LDA DAYL-1,Y JSR OUTCHR LDA DAYL-2,Y JSR OUTCHR JSR CRLF PRI MES10 'MEMORY ' LDA P2HH START HIGH JSR OUTBYT LDA P2LL START LOW JSR OUTBYT LDA @- JSR OUTCHR LDA P3HH END HIGH JSR OUTBYT LDA P3LL END LOW JSR OUTBYT PRI MES5 PRINT FINISH MESSAGE LDA ERRCNT JSR OUTBYT LDA ERRCNT+1 JSR OUTBYT LDA ERRCNT+2 JSR OUTBYT PRI MES7 PRINT CYCLE NUMBER LDA CYCLE JSR OUTBYT LDA CYCLE+1 JSR OUTBYT LDA CYCLE+2 JSR OUTBYT JSR CRLF J2 JMP REPEAT REPEAT THE TEST ** MESSAGE TEXTS MES1 @START & END ADDRESSES? @ MES2 @NO MEMORY AT $@ MES3 @ENTER TIME (HH-MM-SS):@ MES4 @' WITH PATTERN @ MES5 @ TESTED. CUM ERRORS: @ MES6 @ERROR AT '$@ MES7 @ CYCLE #@ MES8 @TIME @ MES9 @AM OR PM (A/P)? @ MES10 @MEMORY @ MES11 @WHICH DAY (1-7)? @ MES12 @. TEST ABORTED HERE.@ MES13 @DO YOU WISH FOR THE BEEPER TO SOUND FOR EACH PASS (Y/N)? @ ** VARIABLES BEEEP $00 0=NO, 1=YES MASK $00 ERRCNT $00 00 00 CYCLE $00 00 00 P2HH #00 P2LL #00 P3HH #00 P3LL #00 TICK $00 0:19 SECOND $00 0:59 MINUTE $00 0:59 HOURS $00 1:12 AMPM $00 AM=00,PM=F0 DAY $01 =2^(X-1) WHERE X=DAY OF WEEK DAYL @SATFRITHUWEDTUEMONSUN@ DAYO #0 *END