**************************************************************** * * * *** *** * ***** * * * * * * * * * * * * * * * * * *** * * * * * * * * * * * * * * * * * * * * * *** *** ***** * * * * * * * * * SOLT 1.0 (MOD 0) * * AUGUST 2, 1978 * * * * COPYRIGHT (C) 1978 * * PROCESSOR TECHNOLOGY CORPORATION * * ALL RIGHTS RESERVED * * * **************************************************************** * ORG 0E000H XEQ START ASCF 0 * START LXI SP,STACK CALL CLEAR CLEAR SCREEN LXI D,SMSG CALL PRINT PRINT LIST OF COMMANDS SCN CALL INN INPUT COMMAND CHARACTER CALL DELAY DELAY AWHILE TO LET PERSON SEE WHAT WAS TYPED CALL SCT1 GET JUMP TABLE INDEX JZ SCN1 ILLEGAL COMMAND CHARACTER CALL GO LOOK UP ADDRESS IN JUMP TABLE AND GO ... DONE JMP START WHEN DONE COMMAND, START OVER * * IF ILLEGAL COMMAND WAS TYPED * SCN1 LXI D,MSS PRINT OUT LIST OF VALID COMMANDS LXI H,0CF80H CALL PRINT DCX H JMP SCN GO BACK FOR NEW COMMAND * * * SEARCH TNAMES FOR INPUTTED CHARACTER. * RETURN INDEX OF MATCH IN B. * ZERO FLAG IS SET IF NO MATCH. * SCT1 LXI D,TNAMES MVI B,0 MOV C,A SCT2 LDAX D TABLE VALUE ORA A RZ . END OF TABLE CMP C JZ SCT3 INX D INR B JMP SCT2 SCT3 ORA A SET NZ=MATCH RET * * USE INDEX (PASSED IN B) TO INDEX INTO TATAB * AND JUMP TO LOCATION SPECIFIED THERE * GO LXI H,TATAB XCHG . MVI H,0 MOV L,B HL=INDEX DAD H HL=HL*2 DAD D HL=TABLE ADDRESS MOV A,M INX H MOV H,M MOV L,A HL=ADDRESS OF SUBROUTINE TO BE RUN PCHL . GO TO IT * * TEST NAME TABLE * TNAMES ASC "CMFVSPWRA" DB 0 * * TEST ADDRESS TABLE * TATAB EQU $ DW CRCTST C - CRC TEST DW MEMTST M - MEMORY TEST DW SSWTST F - SENSE SWITCH TEST DW VIDTST V - VIDEO TEST DW SERTST S - SERIAL TEST DW PARTST P - PARALLEL TEST DW TPWTST W - TAPE WRITE TEST DW TPRTST R - TAPE READ TEST DW AUTO A - AUTOMATIC MODE * * INPUT CHARACTER FROM KEYBOARD * INN MVI A,0 INPUT FROM KEYBOARD CALL AINP JZ INN ANI 7FH CPI 1BH ESCAPE? JZ EXIT YES-RETURN TO SOLOS CPI 7FH DELETE? JZ START YES-RETURN TO COMMAND INTERPRETER MOV M,A ECHO IT ON SCREEN INX H CALL MAP UPSHIFT IT RET . * * UPSHIFT CHARACTER * MAP CPI 'a' RC . CPI 'z'+1 RNC . SUI 'a'-'A' RET . * * DELAY PUSH H PUSH B LXI B,2 LXI H,0 DELA1 DCR L JNZ DELA1 DCR H JNZ DELA1 DCR C JNZ DELA1 POP B POP H RET . * * TEST FOR ESC OR DEL KEYS BEING PRESSED * ESCTEST MVI A,0 INPUT FROM KEYBOARD CALL AINP JZ ESCT1 ANI 7FH CPI 1BH ESCAPE? JZ EXIT YES-RETURN TO SOLOS CPI 7FH DEL? RZ . YES-RETURN WITH ZERO FLAG SET CALL MAP UPSHIFT CPI 'S' 'S' KEY? JNZ ESCT1 NO ORI 0FFH CLEAR ZERO FLAG STC . RET . YES-RETURN WITH CARRY FLAG SET ESCT1 ORI 0FFH CLEAR ZERO FLAG IF NO INPUT RET . * * CLEAR SCREEN * CLEAR LXI H,0CC00H MVI A,0D0H CLEA1 MVI M,' ' INX H CMP H JNZ CLEA1 XRA A OUT 0FEH LXI H,0CC00H RET . * * PRINT MESSAGE AT DE AT POSITION HL ON SCREEN * \ WILL ACT AS A CARRIAGE RETURN-LINEFEED * STRING TO BE PRINTED ENDS WITH ZERO BYTE (NULL) * PRINT LDAX D ORA A RZ . CPI '\' JZ PRT1 MOV M,A INX H INX D JMP PRINT * PRT1 MOV A,L HANDLE \ ANI 0C0H MOVE TO BEGINING OF LINE ADI 040H MOVE TO NEXT LINE MOV L,A MOV A,H ACI 0 MOV H,A INX D JMP PRINT * * OUTPUT BIT MAP FOR MEMORY AND I/O TESTS * ERROR BYTE SHOULD BE PASSED IN A * SET BITS INDICATE ERRORS IN THOSE BITS * BOUT MVI C,8 BOUT1 RRC . MVI B,'X' JC BOUT2 MVI B,'G' BOUT2 MOV M,B INX H INX H DCR C JNZ BOUT1 RET . * * EXIT CALL CLEAR CLEAR SCREEN XRA A STOP TAPE MOTORS OUT 0FAH JMP RETRN RETURN TO SOLOS * ********** * MSS ASC "Valid choices are: C, M, F, V, S, P, W, R, or A." ASC " Try again: " DB 0 * SMSG ASC " SOLT: A Sol test diagnostic\\" ASC "Tests available:\" ASC " C) CRC: Runs CRC test on Solos.\" ASC " M) MEMORY: Tests system and video RAM.\" ASC " F) SENSE SWITCHES: Tests sense switches (Port FF).\" ASC " V) VIDEO: Tests character generation and windowshade.\" ASC " S) SERIAL: Tests EIA and current loop I/O port F9.\" ASC " P) PARALLEL: Tests parallel port FD.\" ASC " W) ACI: Tests CUTS write function port FB.\" ASC " R) ACI: Tests CUTS read function port FB.\" ASC " A) AUTOMATIC: Runs all tests in sequence.\" ASC "\Type letter corresponding to test wanted: " DB 0 * AINP EQU 0C022H AOUT EQU 0C01CH RETRN EQU 0C004H * ********************* * AUTO EQU $ AUTOMATIC MODE MVI A,-1 SET AUTO SWITCH STA AUTOSW CALL CRCTST CALL MEMTST CALL SSWTST CALL VIDTST CALL SERTST CALL PARTST CALL TPWTST CALL TPRTST XRA A RESET AUTO SWITCH STA AUTOSW JMP START * AUTOSW DB 0 * **************************************************************** * COPY SOLT2.A * * DS 50 STACK EQU $ * ****************************************************************