* PRODUCE A PSEUDO-ASSEMBLER LISTING CORRESPONDING TO * AN ABSOLUTE BINARY TAPE * NAM IASS GENL EQU 21B IASSE NOP * SET INTERRUPT LINKAGE FOR READER LDA TAPIN STA GENL LDA TAPAD STA 53B STF 0 ENABLE INTERRUPT SYSTEM * * PHOTOREADER BASIC BINARY LOADER * LOAD CLB,RSS CONT LDB =D-11 EOTCH INB,SZB JMP L0 LDA =D-17 END OF TAPE STA BSIZE LDA EOTML STA BLOC JSB PRINT EOT MESSAGE LDA BUFLO GO TO NEW PAGE STA BCNT STA BLOC LDA LINEC INA STA BSIZE ADA =D-2 ARS L2 INA,SZA,RSS BLANK LINES NEEDED? JMP L3 NO LDB TURNP STB BCNT,I ISZ BCNT JMP L2 L3 LDB =D-1 STB LINEC RESET LINE COUNTER JSB PRINT HLT 77B JMP LOAD L0 LDA =AB INDICATE BEGINNING OF DATA BLOCK STA BLKL,I JSB CHAR SZA,RSS JMP EOTCH CMA,CLE,INA STA COUNT JSB CHAR JSB WORD STA 1 STA ADDRS LD2 JSB WORD ADB 0 JSB DECDE DECODE THIS DATA WORD ISZ ADDRS ISZ COUNT JMP LD2 JSB WORD CPB 0 JMP CONT LDA =D-20 CHECKSUM ERROR STA BSIZE LDA CHSML STA BLOC JSB PRINT JMP LOAD WORD NOP JSB CHAR ALF,ALF STA CNT1 JSB CHAR IOR CNT1 JMP WORD,I CHAR NOP STC GENL,C NOP JMP *-1 CHARA LIA GENL CLC GENL,C JMP CHAR,I * COUNT BSS 1 ADDRS BSS 1 TAPIN JMP 53B,I TAPAD DEF CHARA * * DECODE INSTRUCTIONS * DECDE NOP STA DATA STB CHKSM LDA BSTRT INITIALIZE CHAR.BUFF. ADDRESS STA BCNT LDA ADDRS JSB OCTAL 'OUTPUT' ADDRESS ISZ BCNT LDA DATA JSB OCTAL 'OUTPUT' CONTENTS * * IDENTIFY SKIP INSTRUCTIONS * LDA =D-9 STA CNT INITIALIZE COUNT LDA SLL1 STA CNT1 INITIALIZE MASK LOCATION LDA SLL2 STA CNT2 INITIALIZE COMPARE LOCATION L18 LDA DATA IOR CNT1,I CPA CNT2,I JMP L19 SKIP CODE FOUND ISZ CNT1 ISZ CNT2 ISZ CNT JMP L18 MORE CODES TO BE CHECKED LDA DATA CHECK FOR JUMP IOR JMPOR CPA JMPCP JMP *+3 LDA BUFFR NO JUMP. LOAD BLANK JMP *+4 LDA =A J JUMP CODE RSS L19 LDA =A S SKIP POSSIBLE STA BCNT,I REP 3 ISZ BCNT JMP L20 * SLL1 DEF SL1 SL1 OCT 103777,107777,4177,5767,5737 OCT 5757,5767,5775,5776 SLL2 DEF SL2 SL2 OCT 137777,157777,106377,5777 OCT 7777,7777,7777,7777,7777 JMPOR OCT 103777 JMPCP OCT 127777 CNT1 BSS 1 CNT2 BSS 1 * * DETERMINE INSTRUCTION TYPE * L20 LDB DATA CLA RRL 4 PUT TOP 4 BITS IN A SZA,RSS REGISTER REFERENCE? JMP REGRF XOR =D8 INVERT DATA BIT 15 SZA JMP MEMRF RBL SSB IS DATA BIT 10 A 1? JMP IO JMP MACRO * DATA BSS 1 COMPUTER WORD OPCOD BSS 1 VALUE OF OP CODE MNEM BSS 1 LOCATION OF 8 CHARACTER MNEMONIC CHKSM BSS 1 * * DECODE IO GROUP INSTRUCTIONS * IO LDB DATA CLA BLF RRL 1 PUT A/B BIT IN A RBL RRL 4 PUT CODE IN A RAL,RAL MULTIPLY BY 4 ADA IOLAD STA MNEM CLA RRL 6 STA OPCOD VALUE OF SELECT CODE JSB LMOP JMP DEBUT * IOLAD DEF IOLST IOLST ASC 16,HLT STF SFC SFS ASC 16,MIA LIA OTA STC ASC 16,HLT,CLF CLF SFC,CLF SFS,CLF ASC 16,MIA,CLF LIA,CLF OTA,CLF STC,CLF ASC 16, ASC 16,MIB LIB OTB CLC ASC 16, ASC 16,MIB,CLF LIB,CLF OTB,CLF CLC,CLF * * DECODE MEMORY REFERENCE GROU INSTRUCTIONS * MEMRF LDB DATA CLA RBL RRL 4 OBTAIN MNEMONIC CODE RAL,RAL ADA MEMLA STA MNEM ADA =D2 SSB ZERO PAGE? JMP L1 LDB =A,Z STB 0,I L1 LDB DATA SSB,RSS INDIRECT? JMP *+4 INA LDB =A,I STB 0,I LDB DATA RRL 6 LSR 6 STB OPCOD JSB LMOP LDA MNEM RESET MNEMONIC CODE ADA =D2 LDB BUFFR LOAD BLANK STB 0,I INA STB 0,I JMP DEBUT * MEMLA DEF MRLST-10B MRLST ASC 16,AND JSB XOR JMP ASC 16,IOR ISZ ADA ADB ASC 16,CPA CPB LDA LDB ASC 8,STA STB * * DECODE REGISTER-REFERENCE INSTRUCTIONS * REGRF LDA DATA SZA,RSS JMP L35 NOP INSTRUCTION RRL 4 CLB RRL 2 PUT INSTRUCTION GROUP IN B ADB RRGAL LDA 1,I STA RLL LDA DATA RRL 5 SSA JMP L40 ALTER-SKIP GROUP * * DECODE SHIFT-ROTATE GROUP INSTRUCTIONS * LDA DATA RRL 7 SLB,RSS COL 1 ENABLED? JMP L30 NO CLB YES. LOAD MNEMONIC RRL 3 BLS ADB RLL STB MNEM JSB LBUF4 L30 LDA DATA RRL 10 SSA,RSS COL 2 ENABLED? JMP L31 LDB RLL YES ADB =D16 STB MNEM JSB LBUF4 L31 LDA DATA RRL 12 SSA,RSS COL 3 ENABLED? JMP L32 LDB RLL YES ADB =D18 STB MNEM JSB LBUF4 L32 LDA DATA RRL 12 SLB,RSS COL 4 ENABLED? JMP L33 RAL YES CLB RRL 3 BLS ADB RLL STB MNEM JSB LBUF4 L33 JSB ASCII JMP DEBUT L35 LDB NOPL JMP *-5 * RLL BSS 1 RRGAL DEF RLL1 RLL1 DEF RL0 DEF RL1 DEF RL2 DEF RL3 NOPL DEF RL0-2 ASC 2,NOP RL0 ASC 20,ALS ARS RAL RAR ALR ERA ELA ALF CLE SLA RL2 ASC 20,BLS BRS RBL RBR BLR ERB ELB BLF CLE SLB RL1 ASC 26, CLA CMA CCA SEZ CLE CME CCE SSA SLA INA SZA RSS RL3 ASC 26, CLB CMB CCB SEZ CLE CME CCE SSB SLB INB SZB RSS INST1 RRL 11 * * DECODE ALTER-SKIP GROUP INSTRUCTIONS * L40 LDA DATA RRL 6 CLB RRL 2 SZB,RSS COL 1 ENABLED? JMP *+5 BLS YES ADB RLL STB MNEM JSB LBUF4 LDA RLL INCREMENT MNEMONIC LOCATION ADA =D8 STA RLL LDA DATA RRL 10 SSA,RSS COL 2 ENABLED? JMP *+4 LDA RLL YES STA MNEM JSB LBUF4 LDA DATA RRL 8 CLB RRL 2 SZB,RSS COL 3 ENABLED? JMP *+5 BLS YES ADB RLL STB MNEM JSB LBUF4 LDA RLL INCREMENT MNEMONIC LOCATION ADA =D8 STA RLL LDA INST1 INITIALIZE ROTATE INSTRUCTION STA L41 LDA =D-5 STA CNT L42 LDA DATA L41 NOP SSA,RSS COL ENABLED? JMP *+4 LDA RLL STA MNEM JSB LBUF4 ISZ L41 INCREMENT ROTATE INSTRUCTION ISZ RLL INCREMENT MNEMONIC LOCATION ISZ RLL ISZ CNT JMP L42 JSB ASCII JMP DEBUT * * DECODE MACRO INSTRUCTIONS * MACRO LDA =D-4 CHECK FOR MPY,DIV,DLD,DST STA CNT INITIALIZE COUNT LDA MACLA STA MNEM INITIALIZE MNEMONIC LOCATION LDA MCODL STA CODL INITIALIZE MACHINE-CODE LOCATION LDB DATA SET OPCODE RRL 6 LSR 6 STB OPCOD LDA DATA L7 CPA CODL,I JMP L9 LOAD MNEMONIC ISZ CODL REP 4 ISZ MNEM ISZ CNT JMP L7 CONTINUE CHECK CLB CHECK FOR DOUBLE SHIFT/ROTATIONS RRR 4 PUT TOP 4 BITS IN A BLF OPCODE IN B SZB,RSS LDB =D16 '0' = OPCODE 20B STB OPCOD LDB =D-6 STB CNT L8 CPA CODL,I JMP L9 LOAD MNEMONIC ISZ CODL REP 4 ISZ MNEM ISZ CNT JMP L8 CONTINUE CHECK CLA UNIDENTIFIED MACRO INSTRUCTION STA OPCOD L9 JSB LMOP JMP DEBUT * MACLA DEF MACLS MACLS ASC 16,MPY DIV DLD DST ASC 16,ASR ASL LSR LSL ASC 12,RRR RRL MACRO MCODL DEF MCODE CODL BSS 1 MCODE OCT 100200,100400,104200,104400 OCT 4041,4001,4042,4002,4044,4004 DEBUT LDB CHKSM JMP DECDE,I * * PRODUCE OCTAL CHARACTERS FROM A * OCTAL NOP CLB RRL 4 STA CNT1 ADB CODEL LDA 1,I STA BCNT,I ISZ BCNT L5 LDA =D-2 STA CNT ICI LDA CNT1 CLB RRL 6 STA CNT1 ADB CODEL LDA 1,I STA BCNT,I ISZ BCNT ISZ CNT JMP ICI JMP OCTAL,I * CODEL DEF NCODE NCODE ASC 16,00010203040506071011121314151617 ASC 16,20212223242526273031323334353637 ASC 16,40414243444546475051525354555657 ASC 16,60616263646566677071727374757677 CNT BSS 1 * * LOAD MNEMONIC & OPCODE * LMOP NOP LDB =D-4 'OUTPUT' MNEMONIC STB CNT LDB MNEM STB CNT1 LDB CNT1,I STB BCNT,I ISZ CNT1 ISZ BCNT ISZ CNT JMP *-5 ISZ BCNT LDA OPCOD 'OUTPUT' OPCODE RRL 4 STA CNT1 LDB L6L STB OCTAL JMP L5 (PSEUDO JSB) L6 ISZ BCNT JSB ASCII JMP LMOP,I * * FIND ASCII EQUIVALENT OF DATA WORD * ASCII NOP LDA BCNT PREVENT ASCII CODE FROM OVERWRITING MNEMONICS LDB ASCIL CMB,CLE,INB 2'S COMPLEMENT ADA 1 LDB ASCIL SSA,RSS LDB BCNT BCNT > ASCIL STB BCNT LDA DATA CLB RRL 8 TOP HALF IN B ALF,ALF LOW HALF IN A CPA =B12 LF IN A? JMP L10 CPA =B15 CR IN A? JMP L10 ADA =D-32 SSA >=40B ? JMP L22 ADA =D-64 SSA,RSS <=137B ? JMP L22 L10 CPB =B12 LF IN B? JMP L11 CPB =B15 JMP L11 ADB =D-32 SSB JMP L22 ADB =D-64 SSB,RSS JMP L22 * * VALID PACKED ASCII CODE FOUND * L11 LDA DATA CLB RRL 8 ALF,ALF CPA =B12 ADA LF CPA =B15 ADA CR CPA =B40 ADA BL ADA =B20000 PAD WITH BLANK CPB =B12 ADB LF CPB =B15 ADB CR CPB =B40 ADB BL ADB =B20000 STB BCNT,I LOAD CODE INTO CHAR.BUFFER ISZ BCNT STA BCNT,I ISZ BCNT ISZ BCNT PREVENT "_" FROM STOPPING BCS EOR JMP L22 * LF OCT 26074 CR OCT 21505 BL OCT 21054 * * LOAD 3-CHARACTER MNEMONIC SEQUENCES * LBUF4 NOP LDA MNEM STA CNT1 CLA CPA MFLAG JMP L25 LDA BCNT ADD COMMA TO PRECEEDING MNEMONIC ADA =D-1 LDB 0,I ADB =D12 STB 0,I L25 LDB CNT1,I STB BCNT,I ISZ CNT1 ISZ BCNT LDB CNT1,I STB BCNT,I ISZ BCNT ISZ MFLAG JMP LBUF4,I * * PRINT RESULTS * L22 LDB BUFLO STB BLOC LDA BCNT CMB,CLE,INB ADA 1 STA BSIZE JSB PRINT CLA STA MFLAG RESET LBUF4 FLAG LDA BSIZE CMA,CLE,INA STA CNT LDA BUFLO STA CNT1 LDA =B20040 STA CNT1,I CLEAR BUFFER ISZ CNT0 ISZ CNT JMP *-3 JMP ASCII,I * * OUTPUT SUBROUTINE * PRINT NOP ISZ LINEC NEW PAGE REQUIRED? JMP L4 LDA PAGSZ YES STA LINEC RESET LINE COUNTER JSB .IOC. OCT 20006 JMP REJ DEF TURNP DEC -5 JSB .IOC. OCT 40006 SSA JMP *-3 L4 JSB .IOC. OUTPUT LINE OCT 20006 JMP REJ BLOC BSS 1 BSIZE BSS 1 * LOOP UNTIL SYSTEM CLEAR JSB .IOC. OCT 40006 SSA JMP *-3 JMP PRINT,I REJ HLT 15,C JMP PRINT,I * MFLAG BSS 1 PAGSZ DEC -60 LINEC DEC -1 L6L DEF L6 CHSML DEF CHSEM CHSEM ASC 10, CHECKSUM ERROR EOTML DEF EOTM EOTM ASC 9, END OF TAPE TURNP OCT 5012,5012,5000 BWSIZ DEC 36 ASCIL DEF BUFFR+20 BSTRT DEF BUFFR+3 BLKL DEF BUFFR+2 BUFLO DEF BUFFR BCNT BSS 1 BUFFR ASC 18, ASC 18, EXT .IOC. END IASSE