* * OCTAL:S Written by Joe Maguire. 1979 * * OCTAL UTILITY PROGRAM FOR USE WITH SOLOS PM * * THIS PROGRAM PROVIDES OCTAL ENTER AND DUMP * ROUTINES WHICH CAN BE USED WITH THE SOL AND * COMPLEMENTS THE HEX ROUTINES FOUND IN SOLOS. * THE OCTAL DUMP IS IN THE SOLOS FORMAT WITH * THE ADDRESS APPEARING FIRST (IN SPLIT OCTAL) * FOLLOWED BY EIGHT BYTES TO A LINE. ALSO GIVEN * ARE THE ASCII VALUES FOLLOWED BY THE HEX ADDRESS * OF THE LINE FOR REFERENCE. THE ENTER ROUTINE * ALSO FOLLOWS THE SOLOS FORMAT WITH BLANKS, * COLONS AND SLASH MARKS OPERATING EXACTLY AS * THEY DO WHEN ENTERING HEX UNDER SOLOS. ERROR * TRAPPING IS PRESENT TO INSURE ONLY LEGAL SPLIT * OCTAL VALUES ARE ENTERED. NOTE: THE DATA VALUES * IN THE ENTER ROUTINE CAN BE UP TO 6 DIGITS LONG * BUT ONLY THE LAST 3 ARE ACCEPTED. * * A RECOMMENDED PROCEDURE IS TO SET UP TWO CUSTOM * COMMANDS WITH SOLOS AFTER LOADING "OCTAL". * * EXAMPLE: CUST QE C900 (FOR OCTAL ENTER) * CUST QD C970 (FOR OCTAL DUMP) * * AN OCTAL DUMP WOULD THEN BE EXECUTED AS FOLLOWS: * QD 311000 313377 (FOR DUMPING C900 THRU CBFF) * * AN OCTAL ENTER CAN BE EXECUTED BY: * QE 360 (FOR ENTER AT ADDRESS F0 HEX) * * NOTE: IF AN ADDRESS CONTAINS MORE THAN 3 DIGITS, * TYPE IT AS ONE STRING WITHOUT THE CUSTOMARY * BLANK FOUND IN SPLIT OCTAL. * ORG 0C900H * * Octal Enter Routine * ENTER CALL SCONV Some routines are the PUSH H same as found in SOLOS XRA A but are required to be STA 0C807H duplicated to keep * ENLOP CALL CRLF from falling through MVI B,':' to the Hex handling CALL CONT routines found in CALL CREM SOLOS MVI C,1 CALL VDAD2 XCHG * ENLO1 MVI C,3 CALL SCHR1 JZ ENLOP CPI '/' JZ COMM1 CALL SOCT CPI ':' JZ ENLO3 MOV A,L POP H MOV M,A INX H PUSH H JMP ENLO1 * ENLO3 XTHL INX D JMP ENLO1 * SOCT LXI H,0 This is the routine LXI B,0 which converts Octal * SOC1 LDAX D to binary similar CPI ' ' to SHEX in SOLOS JZ HADJ CPI '/' JZ HADJ CPI ':' JZ HADJ DAD H DAD H DAD H CC ADDB SUI 030H CPI 8 Test for legal Octal JNC ERR1 Max value is a 7 ADD L MOV L,A INX D INX B JMP SOC1 * HADJ PUSH PSW Here straight Octal CALL TEST is converted to MOV A,H Split Octal RRC ADD B MOV H,A POP PSW RET NOP * * Octal Dump Routine * ORG 0C970H * QDUMP CALL SCONV More SOLOS PUSH H Duplication CALL PSCAN POP D XCHG * DLOOP CALL CRLF SHLD TEMP Save address for hex output CALL ADOUT Put out address CALL BOUT Two blanks for neatness CALL BOUT MVI C,8 8 bytes per line PUSH H Save H for ASCII display * DLP1 MOV A,M PUSH B CALL QBOUT Put 'em out MOV A,L SUB E MOV A,H SBB D JNC COMD POP B INX H DCR C JNZ DLP1 MVI C,8 Now the ASCII CALL BOUT Two spaces for neatness CALL BOUT POP H Get starting address back * ASCII MOV A,M ANI 7FH PUSH B CPI 7FH Delete gets a period JZ PERIOD CPI 5FH Backspace too JZ PERIOD CPI 20H All control characters get a . JP SKIP PERIOD MVI A,'.' SKIP MOV B,A CALL SOUT Now put out the ASCII POP B INX H DCR C JNZ ASCII * CALL BOUT Now the hex address for info CALL BOUT A few spaces look pretty CALL BOUT PUSH H LHLD TEMP CALL ADOU This is SOLOS ADOUT POP H JMP DLOOP * PSCAN CALL SBLK MVI A,1 RZ CALL SOCT MOV A,L RET * ADOUT MOV A,H CALL QOUT CALL BOUT MOV A,L * QBOUT CALL QOUT BOUT MVI B,' ' JMP SOUT * QOUT MOV C,A This is the Octal RLC . conversion routine RLC ANI 3 ADI 30H MOV B,A CALL SOUT MOV A,C RRC RRC RRC ANI 7 ADI 30H MOV B,A CALL SOUT MOV A,C ANI 7 ADI 30H MOV B,A JMP SOUT * TEST MOV A,C Legal Octal? CPI 3 A 3 is always legal JNC TEST1 If more we gotta test 'em RET * TEST1 CPI 7 A 7 is maximun except in JC TEST2 the first or fourth digit POP PSW JMP ERR1 Oops! not legal * TEST2 PUSH D Now test if in first DCX D or fourth digit DCX D Back up pointer DCX D CALL TEST3 Go test it MOV A,C See how many digits we have CPI 6 6 is maximum JNZ FINIS OK no need to test more DCX D Back up to the first one DCX D DCX D CALL TEST3 Go test it * FINIS POP D Testing all done RET * TEST3 LDAX D Get character from screen SUI 30H Remove ASCII bias CPI 4 Bigger than 3? RC . It's OK POP PSW JMP ERR1 Oops! It was too big * SCONV CALL SBLK JZ ERR1 JMP SOCT * ADDB MVI B,80H RET * * System Equates from SOLOS * CRLF EQU 0C2F9H CONT EQU 0C1FFH CREM EQU 0C136H VDAD2 EQU 0C120H SCHR1 EQU 0C330H COMM1 EQU 0C1C0H ERR1 EQU 0C480H COMD EQU 0C1C9H SBLK EQU 0C31BH SINP EQU 0C01FH SOUT EQU 0C019H SCON EQU 0C33AH PSCA EQU 0C310H ADOU EQU 0C3E8H HBOU EQU 0C3EDH TEMP DS 2 *.