/ SELF-STARTING BINARY LOADER (FOR EDU20C BASIC) / SIGNIFICANTLY MODIFIED FROM ORIGINAL BINARY LOADER: / DEC-08-LBAA-LA / / NOTES: / NOT RE-START-ABLE, RE-LOAD FOR EACH USE / RUNS ONLY IN INSTRUCTION FIELD 0 / SENSES LOW VS. HIGH SPEED BY QUERYING RIM LOADER / SELF-STARTS FROM RIM TO BIN BY PATCHING 07774 / YOU NEED TO RESET IT TO 3376 TO REUSE RIM / SELF-STARTS FROM BIN TO READ-IN .BN TAPE THROUGH / THE FOLLOWING TWO DEFINITIONS: STFLD=CIF CDF 10 / EDU20C BASIC STARTS IN FIELD 1 STADDR=2000 / AT ADDRESS 2000 *7600 BEGIN, KCC / START LOW SPEED READER RFC / START HIGH SPEED READER TAD RIM1 / GET FIRST WORD OF RIM LOADER TAD MKCC SNA CLA / USE WHICH READER? JMP .+3 / USE LOW SPEED TAD HSRDR / USE HIGH SPEED DCA READ+1 JMS BEGG JMP .-1 / IGNORE LEADER GO, DCA CHKSUM / NOT LEADER (ANY MORE) TAD MEMTEM DCA MEMFLD / SET DATA FIELD TO STORE INTO TAD CHAR DCA WORD1 / SAVE 1ST CHAR OF NEXT WORD JMS READ DCA WORD2 / SAVE 2ND CHAR OF NEXT WORD JMS BEGG / LOOK AHEAD JMP BEND / IS TRAILER: SO FINISH UP JMS ASSEMB / ISN'T TRAILER: COMBINE PARTS SNL / NEW ORIGIN SETTING? JMP MEMFLD / ISN'T NEW ORIGIN: SAVE DATA DCA ORIGIN / IS NEW ORIGIN: SAVE IT CHEX, TAD WORD1 / UPDATE CURRENT CHECKSUM TAD WORD2 TAD CHKSUM JMP GO MEMFLD, 0 / NOT ORIGIN, SET DATA FIELD DCA I ORIGIN / SAVE THE DATA ISZ ORIGIN / INCREMENT THE ADDRESS M200, 7600 / SAFETY FOR ORIGIN == 7777 JMP CHEX / GO TO CHECKSUM CALCULATION / TRAILER CODE SEEN, FINISH UP BEND, JMS ASSEMB / ASSEMBLE CHECKSUM FROM TAPE CIA TAD CHKSUM / COMPARE TO COMPUTED CHECKSUM SZA / SAME? M376, HLT / NO: BAD READ, DON'T SELF-START STFLD / YES: SET STARTING FIELD JMP I .+1 / AND GO TO STARTING ADDR STADDR / EXTRACT ERRORS, FIELDS, LEADER/TRAILER / REQUIRES / AC == 0 / GUARANTEES / ANY ASSEMBLER ERROR OUTPUT HAS BEEN SKIPPED / LAST (IF ANY) NEW FIELD SETTING HAS BEEN SAVED / AC == 0 / RETURNS TO CALL+1 WHEN LEADER/TRAILER WAS READ / RETURNS TO CALL+2 WHEN NOT LEADER/TRAILER READ BEGG, 0 DCA SWITCH / SET SWITCH FOR ERROR DATA JMS READ / GET THE NEXT CHARACTER TAD M376 / TEST FOR ASSEMBLER ERROR SPA SNA CLA / FOUND A RUBOUT (377)? JMP .+4 / NO ISZ SWITCH / YES: COMPLEMENT SWITCH CMA JMP BEGG+1 TAD SWITCH / IT'S NOT RUBOUT (377) SZA CLA / IS SWITCH SET? JMP BEGG+2 / YES; IGNORE? TAD CHAR / NO; TEST FOR CODE AND MASK / SAVE ONLY X00 BITS TAD M200 SPA ISZ BEGG / IT'S EITHER DATA OR ORIGIN SPA SNA CLA JMP I BEGG / DATA, ORIGIN, OR LDR/TRLR TAD CHAR / IT'S A FIELD SETTING AND FMASK TAD CHANGE DCA MEMTEM JMP BEGG+2 / CONTINUE INPUT / ASSEMBLE WORD1, WORD2 INTO A FULL WORD / REQUIRES / AC == 0 / FIRST CHAR (HIGH HALF) IN WORD1 / SECOND CHAR (LOW HALF) IN WORD2 / GUARANTEES / ASSEMBLED WORD IN AC / LINK == 1 IFF IT'S A NEW ORIGIN SETTING ASSEMB, 0 TAD WORD1 / GET THE HIGH HALF CLL RTL / SHIFT IT INTO PLACE RTL RTL TAD WORD2 / ADD IN THE LOW HALF JMP I ASSEMB / READS THE NEXT CHAR OFF THE CORRECT TAPE DEVICE / REQUIRES / AC == 0 / GUARANTEES / TAPE DEVICE IS ADVANCING TO NEXT CHARACTER / LAST CHARACTER READ IN BOTH AC AND CHAR READ, 0 NOP / TTY: --> NOP, PTR: --> JMP HIR LOR, KSF / WAIT FOR TTY: READER FLAG JMP .-1 KRB / GET NEXT TTY: CHARACTER JMP GOTCH HIR, RSF JMP .-1 / WAIT FOR PTR: FLAG RRB RFC / GET NEXT PTR: CHARACTER GOTCH, DCA CHAR / SAVE THE CHARACTER JUST READ TAD CHAR / RECALL IT FOR RETURN JMP I READ MKCC, -KCC / -FIRST WORD OF LOW SPEED RIM HSRDR, JMP HIR / JMP HIR IS FOR HIGH SPEED MASK, 300 / TO LOOK FOR FIELD SETTINGS FMASK, 70 / MASK TO GET NEW FIELD SETTING CHANGE, CDF / RAW NEW FIELD SETTING MEMTEM, CDF 0 / CURRENT FIELD SETTING (DEFAULT 0) CHKSUM, 0 / RUNNING COMPUTED CHECKSUM CHAR, 0 / LAST CHAR READ FROM READER ORIGIN, 0 / CURRENT ADDRESS WORD1, 0 / HIGH HALF OF NEW WORD WORD2, 0 / LOW HALF OF NEW WORD SWITCH, 0 / FOR SKIPPING ASSEMBLER ERRORS RIM1=7756 / ADDRESS OF FIRST WORD OF RIM / THIS IS THE RIM TO BIN SELF-START PATCH *7774 JMP BEGIN $