* PRINT CHAR - BUFFERED VERSION * * ****** USAGE * * JST PCHAR * DAC Arg1 * * * SUBR PCHAR,PC SUBR PWAIT,PW SUBR BUFF SUBR INTH SUBR EXF SUBR RPOS SUBR WPOS SUBR FILL REL * ABS INTERRUPT HANDLER IN ABSOLUTE MODE ORG '63 STANDARD INTERRUPT VECTOR DAC INTH INTERRUPT HANDLER ADDRESS * REL PROGRAM IS RELOCATABLE ORG 0 * INTH STA SAVA SAVE A REGISTER IAB STA SAVB INK STA SAVK SAVE KEYS STX SAVX SAVE X REGISTER LDA RPOS SUB WPOS SZE SKIP IF NOTHING IN BUFFER JMP GOGO GO ON LDA SAVB IAB LDA SAVK EXIT FROM INTERRUPT WITHOUT RESTORING OTK LDA SAVA JMP* INTH RETURN FROM INTERRUPT, NOT ENABLED ANY MORE. GOGO LDA RPOS LGR 1 SHIFT TO WORD ADDRESS STA 0 WRITE TO X REG LDA RPOS SLN SKIP IF LAST BIT IN A SET JMP RUPP FETCH UPPER CHARACTER LDA BUFF,1 FETCH LOWER CHARACTER JMP LDED RUPP LDA BUFF,1 READ FROM BUFFER ICA LDED OTA 4 OUTPUT TO ASR JMP *-1 SHOULD NOT HAPPEN! * LDA RPOS NEW READ POS AOA ANA BMSK STA RPOS LDA FILL ADD =-1 STA FILL * LDA SAVK OTK LDA SAVB IAB LDA SAVA RESTORE A LDX SAVX RESTORE X ENB RE-ENABLE INTERRUPTS JMP* INTH RETURN TO ELSEWHERE * ********************************************************************** ********************************************************************** * PC DAC ** INH DISABLE INTERRUPT STA SA SAVE REGISTERS INK STA SK IAB STA SB STX SX * LDA* PC FIRST ARGUMENT ADDRESS STA PTR STORE TO POINTER IRS PC TALLY RETURN ADDRESS * LDA FILL SZE JMP NINI NO INITIALISATION SKS '104 TEST IF ASR BUSY JMP *-1 JUMP BACK OCP '104 ASR START NINI ENB ENABLE INTERRUPT LDA FILL CAS BS HLT THAT SHOULD NEVER HAPPEN! JMP NINI LOOP UNTIL ROOM IN BUFFER INH DISABLE INTERRUPT LDA WPOS WRITE BYTE POSITION LGR 1 SHIFT RIGHT, NOW WORD OFFSET STA 0 TO INDEX REGISTER * LDA WPOS SLZ SKIP IF LAST BIT 0 JMP WLOW WRITE TO LOWER CHAR WHIG LDA BUFF,1 LRR 8 SHIFT LOWER BITS TO B UPPER LDA* PTR GET DATA LLR 8 SHIFT BACK JMP WRDY WRITE READY WLOW LDA BUFF,1 ICA LRR 8 LDA* PTR LLR 8 ICA WRDY STA BUFF,1 IRS FILL ONE MORE IN BUFFER * LDA WPOS LOAD WRITE POSITION AOA INCREMENT ANA BMSK TALLY ROLLOVER STA WPOS * LDA ='60 INTERRUPT MASK FOR ASR33 SMK '20 SET INTERRUPT MASK * LDA SB RESTORE REGISTERS IAB LDA SK OTK LDA SA LDX SX * EXF ENB ENABLE INTERRUPT JMP* PC RETURN TO MAIN PROGRAM * ************************************************************ ************************************************************ * PW DAC ** LDA FILL SNZ JMP* PW JMP *-3 * * ******* FILL DAC ** AMOUNT OF BUFFERED DATA PTR DAC ** UNIVERSAL POINTER SAVB DAC ** SAVK DAC ** SAVED KEYS IN INTERRUPT-ROUTINE SAVA DAC ** SAVED A-REG IN INTERRUPT-ROUTINE SAVX DAC ** SAVED X-REG IN INTERRUPT-ROUTINE SB DAC ** SAVED B-REG IN MAIN ROUTINE SX DAC ** SAVED X-REG IN MAIN ROUTINE SA DAC ** SAVED A-REG IN MAIN ROUTINE SK DAC ** SAVED KEYS IN MAIN ROUTINE RPOS DAC ** READ POSITION WPOS DAC ** WRITE POSITION BMSK OCT '77 BS OCT '100 BUFF BSS '40 ******* END