ASMB,A,B,C,L HED XFORM - PROGRAM TO PRODUCE LOADER LOADERS 13 NOV 1973 * * THIS PROGRAM PRODUCES THE BOOTSTRAP TAPE WHICH CAN BE USED TO * EITHER RESTORE A COMPLETELY BOMBED LOADER, OR TO SWITCH FROM * ONE LOADER TO ANOTHER, GIVEN THAT A PAPER-TAPE TYPE LOADER CURRENTLY * EXISTS IN THE MACHINE. * * TO OPERATE, LOAD THIS PROGRAM; SET P TO 2, SET THE SELECT CODE OF * THE PUNCH INTO SWITCH REGISTER BITS 11 - 6, AND THE READER SELECT CODE * INTO BITS 5 - 0. PRESS RUN. A HALT 0 OR HLT 1 MEANS THAT THE * PUNCH OR READER SELECT CODES, RESPECTIVELY, ARE NOT IN THE RANGE 10 - 77. * RESET THE SWITCH REGISTER TO THE PROPER SELECT CODES, AND PRESS RUN. * A HALT 77 INDICATES A SUCCESSFUL CONFIGURATION. THEN PLACE THE FUNNY * ABSOLUTE BINARY INTO THE READER, SET P TO 2000, AND PRESS RUN. * THE FUNNY PORTION OF THE TAPE WILL BE PRODUCED, ALONG WITH SOME * BLANK TAPE. A HALT 76 INDICATES THAT THE PROGRAM IS READY FOR THE * NEXT BINARY TAPE. PLACE THE LOADER LOADER TAPE INTO THE READER, AND * PRESS RUN. THE"NORMAL" PORTION OF THE TAPE WILL BE PRODUCED, FOLLOWED * BY SOME BLANK TAPE. THE PROGRAM IS NOW READY TO PRODUCE ANOTHER COMPLETE * BOOTSTRAP TAPE. * ORG 2 PUNSC EQU 0 RDR EQU 0 * * JMP *+1,I DEF CONFG SPC 1 ORG 2000B SPC 1 START CLC 0,C CLA RSS SPC 2 * RESET THE BUFFER-START NEXT BLOCK SPC 2 NEWBL LDA MTEN GET FEED FRAME COUNTER LDB BPNTR STB BPNT CLB,CCE JSB READ GET A BYTE CMB,CCE,INB,SZB ZERO BYTE? JMP NONZR GOT WORD COUNT INA,SZA END OF TAPE? JMP *-5 JMP STRT2 NONZR STB WDCNT STB TEMP JSB READ JSB READ GET ADDRESS STB 0 START CHECKSUM STB ADDR STB TEMP0 CHECK LDB ADDR ADB MAXAD SEZ JMP HLT55 ADDRESS TOO LARGE! JSB READ GET NEXT DATA WORD ADA 1 UPDATE CHECKSUM STB BPNT,I STORE INTO BUFFER ISZ ADDR ISZ BPNT CLE ISZ WDCNT JMP CHECK GET NEXT WORD JSB READ GET TAPE CHECKSUM CPB 0 CHECKSUMS MATCH? TRAN1 JMP PNCH YES,GO PUNCH HLT 11B CHECKSUM ERROR JMP START HLT55 HLT 55B ADDRESS TOO LARGE! JMP START READ NOP IF E=0,READ WORD;=1 READ BYTE CLB,CME RDR1 STC RDR,C RDR2 SFS RDR JMP *-1 RDR3 MIB RDR SEZ,RSS JMP READ,I BLF,CLE,BLF JMP READ+2 BPNTR DEF BUFFR MTEN DEC -10 MAXAD OCT 100100 * * PUNCH THE BUFFER IN THE FUNNY FORMAT * PNCH LDA BPNTR RESET THE POINTER STA BPNT LDA TEMP AND THE COUNT STA WDCNT PUN1 LDB BPNT,I LDA 1 ALF AND B17 IOR B20 JSB PUNCH LDA 1 ALF,ALF AND B17 JSB PUNCH LDA 1 ALF,ALF ALF AND B17 JSB PUNCH LDA 1 AND B17 JSB PUNCH ISZ BPNT ISZ WDCNT JMP PUN1 JMP NEWBL B17 OCT 17 B20 OCT 20 B377 OCT 377 B77 OCT 77 SPC 1 PUNCH NOP OUTPUT THE A REGISTER PN1 OTA PUNSC PN2 STC PUNSC,C PN3 SFS PUNSC JMP *-1 JMP PUNCH,I * * THIS SECTION OF CODE SWITCHES THE BRANCH POINT * OF THE DONE-WITH-A-BLOCK SECTION. * STRT2 CLA LDB M80 JSB PUNCH PUNCH TWENTY FEED FRAMES INB,SZB JMP *-2 HLT 76B WAIT FOR NEXT TAPE. LDA TRCPY LDB TRAN1 STB TRCPY STA TRAN1 JMP START * TRCPY JMP COPY M80 DEC -80 M8 DEC -8 STCC STC 0,C SFSI SFS 0 OTAI OTA 0 MIBI MIB 0 * * THIS SECTION DUPLICATES THE TAPE IN THE PHOTOREADER * IT IS ENTERED ALTERNATELY WITH THE FUNNY CODE PRODUCER * COPY LDA BPNTR RESET BUFFER POINTER STA BPNT LDA TEMP STA WDCNT RESET WORD COUNT CMA,INA JSB PUNCH OUTPUT WORD COUNT CLA JSB PUNCH FOLLOWED BY A BLANK FRAME LDA TEMP0 ALF,ALF AND B377 JSB PUNCH LDA TEMP0 AND B377 JSB PUNCH * COPY1 LDA BPNT,I ALF,ALF AND B377 JSB PUNCH LDA BPNT,I AND B377 JSB PUNCH ISZ BPNT ISZ WDCNT JMP COPY1 LDA 1 ALF,ALF AND B377 JSB PUNCH LDA 1 AND B377 JSB PUNCH CLA PUNCH TWO FEED FRAMES JSB PUNCH JSB PUNCH JMP NEWBL TEMP0 BSS 1 TEMP BSS 1 ADDR BSS 1 WDCNT BSS 1 BPNT BSS 1 BUFFR BSS 0 SPC 2 * * CONFIGURE THE I/O INSTRUCTIONS * ASSUMES SWITCH REGISTER BITS: * 11-6 = PUNCH SELECT CODE * 5-0 = READER SELECT CODE * CONFG LIA 1 AND B77 GET READER S.C. STA 1 ADA M8 SSA,RSS JMP OK1 HLT 00B BAD READER SELECT CODE JMP CONFG OK1 LDA 1 IOR STCC STA RDR1 LDA 1 IOR SFSI STA RDR2 LDA 1 IOR MIBI STA RDR3 LIA 1 ALF,ALF RAL,RAL AND B77 STA 1 ADA M8 SSA,RSS JMP OK2 HLT 01B BAD PUNCH SELECT CODE JMP CONFG OK2 LDA 1 IOR STCC STA PN2 LDA 1 IOR OTAI STA PN1 LDA 1 IOR SFSI STA PN3 OCT 107077 * END