ORG 0F000H ; CUTS SOURCE ; R.J.S. 08/27/77 ; START MOV A,A INIT JMP STRTA RETRN JMP COMND FOPEN JMP BOPEN FCLOS JMP PCLOS RDBYT JMP RTBYT WRBYT JMP WTBYT RDBLK JMP RTAPE WRBLK JMP WTAPE ; SOUT LDA OPORT AOUT JMP OUTPR SINP LDA IPORT AINP EQU $ ; PUSH H LXI H,ITAB IOPRC ANI 3 RLC ADD L MOV L,A JMP DISPT ; OUTPR EQU $ PUSH H LXI H,OTAB JMP IOPRC ; KREA1 EQU $ IN STAPT CMA ANI KDR RZ IN KDATA RET ; SREA1 EQU $ IN STAPT ANI SDR RZ IN SDATA ANI 7FH RET ; SEROT EQU $ IN STAPT RAL JC SEROT MOV A,B OUT SDATA RET ; PARIT EQU $ IN STAPT CMA ANI PDR RZ IN PDATA RET ; PAROT EQU $ IN STAPT ANI PXDR JNZ PAROT MOV A,B OUT PDATA RET ; ERRIT EQU $ PUSH H LHLD UIPRT JMP ERRO1 ERROT EQU $ PUSH H LHLD UOPRT ERRO1 EQU $ MOV A,L ORA H JNZ DISP1 JMP STRTD ; ; VDMO1 EQU $ PUSH H PUSH D PUSH B ; LDA ESCFL ORA A JNZ ESCS MOV A,B ANI 7FH MOV B,A JZ GOBK LXI H,TBL CALL TSRCH GOBACK EQU $ CALL VDADD MOV A,M ORI 80H MOV M,A LHLD SPEED-1 INR L XRA A TIMER DCX H CMP H JNZ TIMER GOBK POP B POP D POP H RET ; NEXT EQU $ INX H INX H ; TSRCH MOV A,M ORA A JZ CHAR CMP B INX H JNZ NEXT PUSH H CALL CREM XTHL JMP DISPT ; CHAR EQU $ MOV A,B CPI 7FH RZ ; OCHAR CALL VDADD MOV M,B LDA NCHAR CPI 63 JC OK LDA LINE CPI 15 JNZ OK ; END OF SCREEN-ROLL UP 1 SCROLL XRA A STA NCHAR SROL MOV C,A CALL VDAD XRA A CALL CLIN1 LDA BOT INR A ANI 0FH JMP ERAS3 ;INCREMENT LINE COUNTER IF NECESSARY OK LDA NCHAR INR A ANI 03FH STA NCHAR RNZ PDOWN EQU $ LDA LINE INR A CURSC ANI 0FH CUR STA LINE RET ;ERASE LINE PERSE LXI H,VDMEM MVI M,80H+' ' INX H ERAS1 EQU $ MVI M,' ' INX H MOV A,H CPI 0D0H JC ERAS1 STC PHOME EQU $ MVI A,0 STA LINE STA NCHAR RNC ERAS3 OUT DSTAT STA BOT RET CLIN2 EQU $ LDA OPORT ORA A RNZ CLINE CALL VDADD LDA NCHAR CLIN1 CPI 64 RNC MVI M,' ' INX H INR A JMP CLIN1 ; ROUT TO MOVE CURSOR UP 1 LINE PUP LDA LINE DCR A JMP CURSC ; MOVE CUR LEFT 1 PLEFT LDA NCHAR DCR A PCUR EQU $ ANI 03FH STA NCHAR RET ; CURSOR RIGHT 1 PRIT LDA NCHAR INR A JMP PCUR ; ROUTINE TO CALCULATE SCREEN ADDR VDADD LDA NCHAR MOV C,A VDAD2 LDA LINE VDAD MOV L,A LDA BOT ADD L RRC RRC MOV L,A ANI 3 ADI VDMEM1 MOV H,A MOV A,L ANI 0C0H ADD C MOV L,A RET ; ROUTINT TO REMOVE CURSOR CREM CALL VDADD MOV A,M ANI 07FH MOV M,A RET ; ROUTINE TO BACKKSPACE PBACK CALL PLEFT CALL VDADD MVI M,' ' RET ; PROCESS CARRIAGE RETURN PCR CALL CLINE JMP PCUR ; PROCESS LF PLF LDA LINE INR A ANI 15 JNZ CUR JMP SROL ; SET1 ESCAPE PROCESS FLAG PESC MVI A,-1 STA ESCFL RET ; PROCESS ESCAPE SEQUENCE ESCS CALL CREM CALL ESCSP JMP GOBACK ESCSP LDA ESCFL CPI -1 JZ SECOND ; PROCESS THIRD CHR OF ESC SEQUENCE LXI H,ESCFL MVI M,0 CPI 2 JC SET1X JZ SET1Y CPI 8 JZ STSPD CPI 9 JC OCHAR RNZ ; TAB ABSOLUTE TO VALUE IN REG B SET1X MOV A,B JMP PCUR ; SET1 CUR TO LINE "B" SET1Y MOV A,B JMP CURSC ; PROC SECOND CHR OF ESC SEQUENCE SECOND MOV A,B CPI 3 JZ CURET CPI 4 JNZ ARET2 ARET MOV B,H MOV C,L ARET1 POP H POP D PUSH B PUSH H XRA A ARET2 STA ESCFL RET ; RET PRESENT SCREEN PARAMETERS IN BC CURET LXI H,NCHAR MOV B,M INX H MOV C,M JMP ARET1 ; ; START UP SYSTEM ; STRTA XRA A MOV C,A LXI H,DFLTS CLERA MOV M,A INX H INR C JNZ CLERA ; DETERMINE DEFAULT PORTS IN SENSE MOV B,A ANI 3 STA DFLTS+1 ORA A JNZ STRTB LXI SP,SYSTP CALL PERSE STRTB EQU $ LXI H,0 CPI 3 JZ STRTC SHLD UOPRT STRTC EQU $ MOV A,B RAR RAR ANI 3 STA DFLTS CPI 3 JZ STRTD SHLD UIPRT STRTD EQU $ LHLD DFLTS SHLD IPORT COMN1 EQU $ XRA A OUT TAPPT ; ; COMMAND MODE ; ; PROCESS COMANDS ; COMND LXI SP,SYSTP CALL PROMPT CALL GCLIO CALL COPRC JMP COMND ; READS COMMAND LINE GCLIO EQU $ LXI H,INLIN-1 MVI M,7 INX H SHLD INPTR MVI M,80 GCLI1 EQU $ MVI M,' ' INX H DCR A JNZ GCLI1 GCLIN CALL SINP JZ GCLIN ANI 7FH JZ STRTD MOV B,A CPI CR JZ CLIN2 CPI LF RZ LHLD INPTR CPI 7FH JNZ GCLI2 MVI B,BACKS DCX H MVI A,'G'-40H CMP M JNZ GCLI3 MOV B,A GCLI2 EQU $ MOV M,B INX H GCLI3 EQU $ SHLD INPTR CONT CALL SOUT JMP GCLIN ; FIND AND PROCESS COMAND COPRC EQU $ CALL STUP XCHG LXI H,START PUSH H CALL SCHR JZ ERR1 XCHG LXI D,COMTAB CALL FDCOM CZ FDCOU DISPO EQU $ JZ ERR2 INX D XCHG ; GOES TO CONTENTS HL DISPT EQU $ MOV A,M INX H MOV H,M MOV L,A DISP1 EQU $ XTHL MOV A,L RET ; ; FDCOU EQU $ LXI D,CUTAB FDCOM LDAX D ORA A RZ PUSH H CMP M INX D JNZ NCOM INX H LDAX D CMP M JNZ NCOM POP H ORA A RET NCOM INX D INX D INX D POP H JMP FDCOM ; SET1 UP TO PROCESS INPUT LINE STUP EQU $ LXI H,INLIN SHLD INPTR LDA OPORT ORA A RNZ CALL CREM MVI C,1 JMP VDAD2 ; COMMAND TABLE COMTAB EQU $ DB 'DU' DW DUMP DB 'EN' DW ENTER DB 'EX' DW EXEC DB 'GE' DW TLOAD DB 'SA' DW TSAVE DB 'XE' DW TXEQ DB 'CA' DW TLIST DB 'SE' DW SET1 DB 'CU' DW CUSET1 DB 0 ; DISPLAY DRIVER COMMAND TABLE TBL DB CLEAR DW PERSE DB UP DW PUP DB DOWN DW PDOWN DB LEFT DW PLEFT DB RIGHT DW PRIT DB HOME DW PHOME DB CR DW PCR DB LF DW PLF DB BACKS DW PBACK DB ESC DW PESC DB 0 ; OUTPUT DEVICE TABLE OTAB DW VDMO1 DW SEROT DW PAROT DW ERROT ; INPUT DEVICE TABLE ITAB DW KREA1 DW SREA1 DW PARIT DW ERRIT ; SECONDARY COMMAND TABLE FOR SET1 SETAB DB 'TA' DW TASPD DB 'S=' DW DISPD DB 'I=' DW SET1IN DB 'O=' DW SET1OT DB 'CI' DW SET1CI DB 'CO' DW SET1CO DB 'XE' DW SET1XQ DB 'TY' DW SET1TY DB 'N=' DW SET1NU DB 'CR' DW SET1CR DB 0 ; OUT A CR FOLLOWED BY PROMPT PROMPT CALL CRLF MVI B,'>' JMP SOUT CRLF MVI B,LF CALL SOUT MVI B,CR CALL SOUT LDA NUCNT MOV C,A NULOT DCR C RM XRA A CALL OUTH JMP NULOT ; SCAN OVER UP TO 12 CHARS LOOKINF FOR BLANK SBLK MVI C,12 SBLK1 LDAX D CPI BLANK JZ SCHR INX D CPI '=' JZ SCHR DCR C JNZ SBLK1 RET ; SCAN PAST UP TO 10 BLANK CHARS FO A NON BLANK CHAR SCHR MVI C,10 SCHR1 LDAX D CPI SPACE RNZ INX D DCR C RZ JMP SCHR1 ; SCONV CALL SBLK JZ ERR1 ; ASCII TO BINARY SHEX LXI H,0 SHE1 LDAX D CPI 20H RZ CPI '/' RZ CPI ':' RZ HCONV DAD H DAD H DAD H DAD H CALL HCOV1 JNC ERR1 ADD L MOV L,A INX D JMP SHE1 HCOV1 SUI 48 CPI 10 RC SUI 7 CPI 10H RET ; PSCAN EQU $ CALL SBLK RZ CALL SHEX RET ; ; DUMP COMMAND ; DUMP EQU $ CALL SCONV PUSH H CALL PSCAN POP D XCHG DLOOP CALL CRLF CALL ADOUT CALL BOUT MVI C,16 DLP1 MOV A,M PUSH B CALL HBOUT MOV A,H CMP D JC DLP1A MOV A,L CMP E JNC COMND DLP1A EQU $ POP B INX H DCR C JNZ DLP1 JMP DLOOP ; OUT HL AS HEX 16 BIT VALUE ADOUT MOV A,H CALL HEOUT MOV A,L HBOUT CALL HEOUT CALL SINP JZ BOUT ANI 7FH JZ COMND CPI ' ' JNZ BOUT WTLP1 CALL SINP JZ WTLP1 BOUT MVI B,' ' JMP SOUT HEOUT MOV C,A RRC RRC RRC RRC CALL HEOU1 MOV A,C HEOU1 ANI 0FH ADI 48 CPI 58 JC OUTH ADI 7 OUTH MOV B,A JMP SOUT ; ENTR COMMAND ENTER CALL SCONV PUSH H ENLOP CALL CRLF MVI B,':' CALL SOUT CALL GCLIO CALL STUP XCHG ENLO1 MVI C,3 CALL SCHR1 JZ ENLOP CPI '/' JZ COMND CALL SHEX CPI ':' JZ ENLO3 MOV A,L POP H MOV M,A INX H PUSH H JMP ENLO1 ENLO3 XTHL INX D JMP ENLO1 ; EXECUTE COMMAND EXEC CALL SCONV EXEC1 EQU $ PUSH H LXI H,START RET ; NAMEO EQU $ LXI H,THEAD NAME CALL SBLK MVI B,6 NAME1 LDAX D CPI ' ' JZ NFIL CPI '/' JZ NFIL MOV M,A INX D INX H DCR B JNZ NAME1 ; ERROR HANDLER ERR1 XCHG ERR2 MVI M,'?' LDA OPORT ORA A JZ COMND CALL CRLF MVI B,'?' CALL SOUT JMP COMND ; NFIL MVI M,0 INX H DCR B JNZ NFIL CPI '/' MVI A,1 JNZ DEFLT INX D CALL SCHR SUI '0' DEFLT EQU $ ANI 1 MVI A,TAPE1 JNZ STUNT RAR STUNT STA FNUMF RET ; XEQ & GET TXEQ DB 3EH TLOAD XRA A PUSH PSW LXI H,DHEAD CALL NAME LXI H,0 CALL PSCAN TLOA2 XCHG LXI H,DHEAD MOV A,M ORA A JNZ TLOA3 LXI H,THEAD TLOA3 PUSH H CALL ALOAD POP H CALL RTAPE JC TAERR CALL NAOUT POP PSW ORA A RZ LDA HTYPE ORA A JM TAERR LDA THEAD+5 ORA A JNZ TAERR LHLD XEQAD JMP EXEC1 ; SAVE PROGRAMS ON CASSET1TE TSAVE EQU $ CALL NAMEO CALL SCONV PUSH H CALL SCONV XTHL PUSH H CALL PSCAN SHLD LOADR POP H POP D PUSH H MOV A,E SUB L MOV L,A MOV A,D SBI 0 SUB H MOV H,A INX H SHLD BLOCK PUSH H CALL ALOAD LXI H,THEAD CALL WHEAD POP D POP H JMP WTAP1 ; OUTPUT ERROR AND HEADER TAERR CALL CRLF MVI D,6 LXI H,ERRM CALL NLOOP CALL NAOUT JMP COMN1 ERRM DB 'ERROR !' ; CAT COMMAND TLIST EQU $ CALL NAMEO CALL CRLF LLIST CALL ALOAD MVI B,1 CALL TON LIST1 CALL RHEAD JC COMN1 JNZ LIST1 CALL NAOUT JMP LLIST ; ALOAD LXI H,FNUMF LDA TSPD ORA M RET ; NAOUT MVI D,8 LXI H,THEAD-1 CALL NLOOP CALL BOUT LHLD LOADR CALL ADOUT LHLD BLOCK CALL ADOUT JMP CRLF NLOOP MOV A,M ORA A JNZ CHRLI MVI A,' ' CHRLI EQU $ CALL OUTH INX H DCR D JNZ NLOOP RET ; SET1 COMMAND SET1 CALL SBLK JZ ERR1 PUSH D CALL SCONV XTHL LXI D,SETAB CALL FDCOM JMP DISPO ; TAPE SPEED TASPD EQU $ ORA A JZ SET1SP MVI A,32 SET1SP STA TSPD RET STSPD EQU $ MOV A,B DISPD EQU $ STA SPEED RET SET1IN EQU $ STA IPORT RET SET1OT EQU $ STA OPORT RET SET1CI EQU $ SHLD UIPRT RET SET1CO EQU $ SHLD UOPRT RET SET1TY EQU $ STA HTYPE RET SET1XQ EQU $ SHLD XEQAD RET SET1NU EQU $ STA NUCNT RET SET1CR EQU $ STA IGNCR RET CUSET1 EQU $ CALL NAMEO LXI H,COMND CALL PSCAN PUSH H LXI H,THEAD CALL FDCOU JZ CUSE2 DCX D MVI M,0 CUSE2 EQU $ MOV A,M STAX D INX D INX H MOV A,M STAX D INX D POP H XCHG MOV M,E INX H MOV M,D RET ; CUTTER TAPE ROUTINES ; BOPEN PUSH H CALL LFCB JNZ TERE2 MVI M,1 INX H MOV M,A INX H MOV M,A LXI D,FBUF1 LDA FNUMF ADD D MOV D,A UBUF POP B ORA A JMP PSTOR ; ERROR RETURNS TERE2 POP H TERE1 POP D TEREO XRA A STC RET EOFER DCR A STC POP D RET ; ; PCLOS CALL LFCB RZ ORA A INR A MVI M,0 RZ ; INX H INX H MOV A,M CALL PLOAD PUSH B LXI H,BLKOF DAD B ORA A JZ EOFW ; PUSH H MOV M,A INX H MVI M,0 INX H MOV M,E INX H MOV M,D MOV H,B MOV L,C CALL WFBLK POP H EOFW XRA A MOV M,A INX H MOV M,A POP H JMP WFBLK ; LFCB LXI H,FCBAS RAR ANI 1 STA FNUMF JZ LFCB1 LXI H,FCBA2 LFCB1 EQU $ MOV A,M ORA A STC RET ; READ TAPE BYTE RTBYT CALL LFCB RZ INR A JM TEREO MVI M,-1 INX H MOV A,M PUSH H INX H CALL PLOAD POP H ORA A JNZ GTBYT ; RDNBLK PUSH D PUSH H INX H CALL PHEAD CALL RFBLK JC TERE2 POP H MOV A,E ORA D JZ EOFER MOV M,E INX H MVI M,0 DCX H MOV A,E POP D ; GTBYT DCR A MOV M,A INX H MOV A,M INR M ADD E MOV E,A JNC RT1 INR D RT1 LDAX D ORA A RET ; WRITE BYTE WTBYT CALL LFCB RZ INR A RZ MVI M,0FEH INX H INX H MOV A,B PUSH PSW PUSH H ; CALL PLOAD POP H MOV A,M ADD E MOV E,A JNC WT1 INR D WT1 POP PSW STAX D ORA A INR M RNZ ; CALL PHEAD JMP WFBLK ; PHEAD CALL PLOAD PUSH B LXI H,BLKOF-1 DAD B LXI B,256 CALL PSTOR POP H RET PSTOR INX H MOV M,C INX H MOV M,B INX H MOV M,E INX H MOV M,D RET PLOAD INX H MOV C,M INX H MOV B,M INX H MOV E,M INX H MOV D,M RET ; RFBLK CALL GTUNT RTAPE PUSH D MVI B,3 CALL TON IN TDATA PTAP1 PUSH H CALL RHEAD POP H JC TERR JNZ PTAP1 PUSH H LXI D,THEAD CALL DHCMP POP H JNZ PTAP1 POP D MOV A,D ORA E LHLD BLOCK XCHG JNZ RTAP LHLD LOADR RTAP PUSH D RTAP2 EQU $ CALL DCRCT JZ RTOFF CALL RHED1 JC TERR JZ RTAP2 ; ERROR RET TERR XRA A STC JMP RTOF1 TOFF MVI B,1 CALL DELAY RTOFF XRA A RTOF1 OUT TAPPT POP D RET DCRCT EQU $ XRA A MOV B,A ORA D JNZ DCRC2 ORA E RZ MOV B,E MOV E,D RET DCRC2 EQU $ DCR D ORA A RET ; RHEAD MVI B,10 RHEA1 CALL STAT RC IN TDATA ORA A JNZ RHEAD DCR B JNZ RHEA1 SOHL CALL TAPIN RC CPI 1 JC SOHL JNZ RHEAD LXI H,THEAD MVI B,HLEN RHED1 EQU $ MVI C,0 RHED2 EQU $ CALL TAPIN RC MOV M,A INX H CALL DOCRC DCR B JNZ RHED2 ; CALL TAPIN XRA C RZ LDA IGNCR INR A RET ; STAT IN TAPPT ANI TDR RNZ CALL SINP JZ STAT ANI 7FH JNZ STAT STC RET TAPIN CALL STAT RC TREDY IN TAPPT ANI TFE+TOE IN TDATA RZ STC RET WFBLK CALL GTUNT WTAPE EQU $ PUSH H CALL WHEAD POP H LXI D,BLKOF DAD D MOV E,M INX H MOV D,M INX H MOV A,M INX H MOV H,M MOV L,A ; WTAP1 EQU $ PUSH H WTAP2 EQU $ CALL DCRCT JZ TOFF CALL WTBL JMP WTAP2 WRTAP PUSH PSW WRWAT IN TAPPT ANI TTBE JZ WRWAT POP PSW OUT TDATA DOCRC EQU $ SUB C MOV C,A XRA C CMA SUB C MOV C,A RET ; WHEAD EQU $ CALL WTON MVI D,50 NULOP XRA A CALL WRTAP DCR D JNZ NULOP MVI A,1 CALL WRTAP MVI B,HLEN WTBL MVI C,0 WLOOP MOV A,M CALL WRTAP DCR B INX H JNZ WLOOP MOV A,C JMP WRTAP DHCMP MVI B,5 DHLOP LDAX D CMP M RNZ DCR B RZ INX H INX D JMP DHLOP GTUNT EQU $ LDA FNUMF ORA A LDA TSPD JNZ GTUN2 ADI TAPE2 GTUN2 ADI TAPE2 RET WTON MVI B,4 TON EQU $ OUT TAPPT DELAY LXI D,0 DLOP1 DCX D MOV A,D ORA E JNZ DLOP1 DCR B JNZ DELAY RET ; ; END ; VDMEM EQU 0E000H DOWN EQU 1AH UP EQU 17H LEFT EQU 01H RIGHT EQU 13H CLEAR EQU 0BH HOME EQU 0EH MODE EQU 03 ;CONTROL C FOR RANDY BACKS EQU 5FH LF EQU 10 CR EQU 13 BLANK EQU ' ' SPACE EQU BLANK CX EQU 'X'-40H ESC EQU 1BH ; ; PORT ASSIGNMENTS ; STAPT EQU 0 SDATA EQU 1 PDATA EQU 2 KDATA EQU 1 DSTAT EQU 0E0H TAPPT EQU 0EAH TDATA EQU 0EBH SENSE EQU 0FFH SCD EQU 1 SDSR EQU 2 SPE EQU 4 SFE EQU 8 SOE EQU 16 SCTS EQU 32 SDR EQU 64 STBE EQU 128 KDR EQU 1 PDR EQU 2 PXDR EQU 4 TFE EQU 8 TOE EQU 16 TDR EQU 64 TTBE EQU 128 SOK EQU 1 TAPE1 EQU 80H TAPE2 EQU 40H ; ; SYSTEM GLOBAL EREA ; ORG START+800H SYSRAM EQU $ SYSTP EQU SYSRAM+3FFH ; UIPRT DS 2 UOPRT DS 2 DFLTS DS 2 IPORT DS 1 OPORT DS 1 NCHAR DS 1 LINE DS 1 BOT DS 1 SPEED DS 1 ESCFL DS 1 TSPD DS 1 INPTR DS 2 NUCNT DS 1 IGNCR DS 1 DS 10 ; THEAD DS 5 DS 1 HTYPE DS 1 BLOCK DS 2 LOADR DS 2 XEQAD DS 2 HSPR DS 3 HLEN EQU $-THEAD BLKOF EQU BLOCK-THEAD DHEAD DS HLEN CUTAB DS 6*4 FNUMF DS 1 FCBAS DS 7 FCBA2 DS 7 FBUF1 DS 2*256 DS 1 INLIN DS 80 USARE EQU $ VDMEM1 EQU 0E0H ;FOR THIS ASSM END