.PREL .IDENT TAPE .INSERT HVG.LIB .INSERT MACRO.LIB .INSERT BBEQU.ASM .RELOC ; COMMAND TO ESTABLISH TAPE UNIT AS INPUT DEVICE TINPUT:: CALL TINPES# RSTFIN ; GO HOME ; COMMAND TO LIST STUFF ON CRT TLIST:: CALL TINPES# TLIST1: CALL CHKIO# ; GET CHARACTER RSTOCH ; PRINT IT JMPR TLIST1 ; FOREVER 1 ; COMMAND TO ESTABLISH PRINTING THRU THE TAPE INTERFACE TPRINT:: MVI A,6 ; SET PRINT FLAG .BYTE 01H ; LXI B,$$$$ OPCODE TO EFFECT SKIP ; COMMAND TO ESTABLISH OUTPUT TO TAPE TOUTPU:: MVI A,2 ; SET OUTPUT FLAG STA TAPEST# RSTFIN ; COMMAND TO LOAD 128 BYTE BOOTSTRAP FROM TAPE TLOAD:: CALL TINPES# ; START TAPE READING LXI H,NORMEM PUSH H TLOAD1: PUSH H CALL CHKIO# POP H MOV M,A INX H BIT 7,L JRZ TLOAD1 RET ; ENTER VIA RETURNING TOUTCK:: LDA TAPEST# CPI 6 JRZ VDMFRG TURDC1: ANI 2 ; WRITE TO TAPE WANTED? RZ TURDC2: MOV C,D RLCR C ; YEP ; WRITE START BIT TAPCH0: IN TAPEIO ; INPUT FF STATE ANI 2 ; WAIT FOR IT TO GO NONZERO JRZ TAPCH0 ; MEANING START BIT WRITTEN MVI B,10 ; B = # OF BITS TO WRITE ; WAIT ABOUT 1.8 MILLISECONDS TO MOVE BEYOND CHANGE WINDOW TAPCH1: MVI A,192 TAPCH2: DCR A JRNZ TAPCH2 ; ARE WE DONE WRITING? DCR B RZ ; (POSITION IS BIT 1 ) IN TAPEIO ; KEEP READING INPUT MOV E,A TAPCH3: IN TAPEIO ; UNTIL IT TOGGLES XRA E ANI 2 JRZ TAPCH3 MOV A,E ; E = WHAT WE GOT NOW XRA C ; C = WHAT WE WANT ANI 2 ; DID WE 'GET IT?' JRZ TAPCH4 ; JUMP IF SO IN TAPEIO ; NO - READ AGAIN TO TOGGLE TAPCH4: SET 1,C ; SET EACH BIT WRITTEN TO 1 RRCR C ; SHIFT INTO NEXT POSITION JMPR TAPCH1 ; SO STOP BIT WILL GO OUT ; MODE 6 - TOKEN COMING THRU? VDMFRG: MOV A,D CPI 68H JRC TURDC2 ; NO - TWEEDLE IT TO TAPE RET .END