/*** TSS/8 BITMAP *** VERSION 1 ***\ /BY JOHN YOUNG (NHHS) / *0000 CLA STL RAR KSB TAD RESTRT SRA UND JMP I .+1 INIT *0010 AUX1, 0 AUX2, 0 RESTRT, .+1 CLA TAD MSG7 PRINT EXIT, CRLF KSF JMP .+3 KRB JMP .-3 STA CLOS CRLF HLT BITMAP, 4000 /ADDRESS OF THE INTERNAL BITMAP CHRBUF, 2000 /ADDRESS OF FILE BUFFER /SUBROUTINE DISPATCHES OUTNUM= JMS I . PUTNUM READER= JMS I . READR0 /DISK I/O ROUTINE GETFIL= JMS I . GETFL0 /GET FILE NAME; OPEN FILE GETCHR= JMS I . GETCH0 /GET A CHAR FROM FILE CRLF= JMS I . CRLF0 BSW= JMS I . BSW0 /REPLACE DEFINITION WITH 7002 ON PDP-8/E PUTBIT= JMS I . STORE0 /STORE A BIT IN BITMAP GETBIT= JMS I . STORE1 /FETCH A BIT IN BITMAP PRINT= JMS I . PRINT0 /MESSAGE PRINTING ROUTINE RFDT, .+1 -1 0 0 0 -400 0 OPNBLK, .+1 0 0 0 0 0 MSKTB1, .+1 0376 0375 0373 0367 0357 0337 0277 0177 MSKTB2, .+1 0001 0002 0004 0010 0020 0040 P100, 0100 0200 ADDPNT, 0 BIT, 0 BLOCK, 0 CHAR, 0 COUNT, 0 FLAG, 0 LINE, 0 LOCATN, 0 MSKPNT, 0 MSG1, MG1-1 MSG2, MG2-1 MSG3, MG3-1 MSG4, MG4-1 MSG5, MG5-1 MSG6, MG6-1 MSG7, MG7-1 MSG8, MG8-1 MSG9, MG9-1 MSG10, MG10-1 NUM, 0 PAGER, 0 PC, 0 PRGNUM, 0 PRONUM, 0 TMP0, 0 TMP1, 0 WORD, 0 P7, 7 P17, 17 P77, 77 P212, 212 P215, 215 P240, " P260, "0 P300, "@ P377, 377 P400, 400 N3, -3 N6, -6 N10, -10 N100, -100 N200, -200 N215, -215 N240, -" N400, -400 N6000, -6000 N7000, -7000 NLBRAK, -"[ NCOMA, -", NRBRAK, -"] *0200 INIT, GETFIL /GET FILENAME[P,PN] STL IAC RTR /AND OPEN IT CML RAR DCA COUNT /INITIALIZE BITMAP; CMA TAD BITMAP DCA AUX1 DCA I AUX1 ISZ COUNT JMP .-2 DCA PC MAINLP, GETCHR /GET A CHAR DCA CHAR TAD CHAR TAD N200 /IS IT L-T? SNA CLA VARY, JMP MAINLP /YES. TAD PTRAIL /NO, NEXT TIME WE GET DCA VARY /L-T, WE ARE DONE. TAD CHAR AND P300 CIA TAD P300 SNA CLA JMP FLDERR /IF WE FOUND A FIELD SETTING, TAD CHAR /GIVE HIM AN ERROR, AND EXIT! AND P100 /IS THIS AN ORIGIN? SNA CLA JMP REGLAR /NO, JUST COUNT WORD TAD CHAR /YES, ASSEMBLE WORD BSW /AND THE WORD FOLLOWING, AND N100 /AND WE'LL HAVE DCA TMP1 /NEW PC. GETCHR AND P77 TAD TMP1 DCA PC JMP MAINLP /CONTINUE. REGLAR, GETCHR CLA CLL /DON'T NEED THIS WORD TAD PC /WE JUST DO THIS TO DCA LOCATN /INCRE BUF POINTER PUTBIT /SET BIT FOR CORRESPONDING ISZ PC /LOCATION IN "LOCATN" NOP JMP MAINLP /CONTINUE. PTRAIL, JMP I .+1 TRAIL CRLF0, 0 CLA TAD P215 TLS TAD N3 TLS CLA CLL JMP I CRLF0 FLDERR, TAD MSG9 PRINT JMP EXIT BSW0, 0 DCA BSWMAN RAL DCA LINK TAD BSWMAN CLL RTR RTR RTR AND P77 DCA BSWTMP TAD BSWMAN AND P77 CLL RTL RTL RTL TAD BSWTMP DCA BSWMAN TAD LINK CLL RAR TAD BSWMAN JMP I BSW0 BSWMAN, 0 BSWTMP, 0 LINK, 0 /CO-ROUTINE: /GET ONE 8-BIT CHAR FROM FILE /OPEN ON FILE0 /ROUTINE- "GETCHR" GETCH0, 0 CLA CLL JMP I .+1 GET1, GETINI JMP I GETCH0 GETINI, TAD N200 DCA GETCNT CMA TAD CHRBUF DCA AUX1 READER GETLOP, TAD I AUX1 DCA GETM1 TAD GETM1 RTR RTR AND P377 JMS GET1 TAD GETM1 AND P17 CLL RTL RTL DCA GETM1 TAD I AUX1 DCA GETM2 TAD GETM2 RAL RTL RTL AND P17 TAD GETM1 JMS GET1 TAD GETM2 AND P377 JMS GET1 ISZ GETCNT JMP GETLOP JMP GETINI GETM1, 0 GETM2, 0 GETCNT, 0 *0400 LSTER, JMS LFEED /12 LINE FEEDS 12 TAD MSG4 PRINT CRLF JMS LFEED 1 TAD MSG5 PRINT CRLF TAD MSG6 PRINT TAD N10 /INITIALIZE COUNTERS DCA LINE TAD N10 DCA BLOCK CMA CLL RAL /AC=-2 DCA PAGER DCA PC LSTLP1, CRLF ISZ PAGER /EVERY OTHER LINE, JMP ZERET /CHECK FOR BLANK PAGES, AND CMA CLL RAL /PRINT CURRENT LOCATION COUNTER DCA PAGER JMP PAGRET ZERET, TAD PC OUTNUM CRLF JMP PAGCHK PAGRET, TAD N10 DCA LINE LSTLP2, TAD PC DCA LOCATN GETBIT /GET BIT IAC /SET BIT RETURN TAD P260 /NOT SET BIT RETURN TLS /OUTPUT IT CLA CLL /INCRE PC ISZ PC SKP JMP END /ARE WE DONE? ISZ BLOCK /PRINT SPACE, EVERY 8 CHARS JMP LSTLP2 TAD N10 DCA BLOCK TAD P240 TLS CLA CLL ISZ LINE /JUMP OUT EVERY LINE JMP LSTLP2 JMP LSTLP1 PAGCHK, TAD N10 /CHECK FOR ZERO PAGE TAD N10 DCA COUNT TAD PC /(PC/10)+ADDR OF BITMAP=WORD CLL RAR /BITS 9-11=ADDR OF BIT ON WORD CLL RAR CLL RAR TAD BITMAP DCA TMP0 SKP ZERLOP, ISZ TMP0 /INCRE TO NEXT BLOCK ISZ COUNT /DONE? JMP ZERCHK TAD N200 /YES, SKIP PAGE, CHECK CIA /FOR ALL DONE, AND GET OUT TAD PC /ALSO, GET UP FOR RETURN SNA /SO'S WE DON'T SCREW UP THE LOOP JMP END DCA PC CMA DCA PAGER CRLF CRLF JMP ZERET ZERCHK, TAD I TMP0 SNA CLA JMP ZERLOP /IF ZERO, CHECK NEXT BLOCK JMP PAGRET /IF NOT, PRINT WHOLE PAGE /LINE FEEDS, OF COURSE LFEED, 0 CLA TAD I LFEED CIA DCA TMP1 ISZ LFEED TAD P212 TLS ISZ TMP1 JMP .-2 CLA CLL JMP I LFEED END, CRLF /MAKE LISTING LOOK NEAT; JMS LFEED 14 JMP EXIT /AND EXIT. /PARMS SHOULD BE ALREADY SET FOR /LAST "PUTBIT", WIPE OUT LAST WORD SET! TRAIL, CLA CLL TAD BIT TAD MSKTB2 DCA BIT TAD I BIT CIA DCA BIT TAD PC AND P77 CIA IAC SNA CLA JMP LSTER TAD I WORD TAD BIT DCA I WORD JMP LSTER *0600 GETFL0, 0 CLA CLL KSF JMP INERR /IF NO INPUT, INCORRECT TAD N10 /INPUT FORMAT DCA TMP1 /7 CHARS LEGAL TAD CHRBUF DCA AUX1 LOOP1, ISZ TMP1 SKP JMP INERR /TOO MANY CHARS KRB DCA TMP0 TAD TMP0 TAD N215 /=EOL SNA CLA JMP STPFLG TAD TMP0 TAD NLBRAK /=ACCOUNT # INPUT SNA CLA JMP GETACT TAD TMP0 DCA I AUX1 JMP LOOP1 STPFLG, DCA I AUX1 /CLEAR OUT REST OF BUFFER ISZ COUNT JMP STPFLG TAD N3 /RESET FOR 3 WORD COUNT DCA COUNT TAD CHRBUF /GET ADDRESS OF BUFFER DCA AUX1 /AGAIN TAD OPNBLK /GET ADDR-1 OF SIXBIT CHARS IAC DCA AUX2 /TO BE PUT LOOP2, TAD I AUX1 /PACK CHARS IN SIXBIT (-240) SZA /IN OPNBLK+3 TO OPNBLK+5 TAD N240 AND P77 BSW DCA TMP0 TAD I AUX1 SZA TAD N240 AND P77 TAD TMP0 DCA I AUX2 ISZ COUNT JMP LOOP2 OPNIT, TAD OPNBLK /NOW - OPEN IT OPEN SNA /ERROR? JMP EXTCHK /NO, GREAT, NOW CHECK LEGAL EXT DCA TMP0 /YUP, LET HIM KNOW WHAT HE DID TAD TMP0 /WRONG. TAD N6000 /"PROTECTION FAILURE!" SNA CLA JMP ER1 TAD TMP0 TAD N7000 /"FILE NOT FOUND!" SNA CLA JMP ER3 TAD MSG8 /UNDEFINED ERROR. SKP ER1, TAD MSG1 SKP ER2, TAD MSG10 SKP ER3, TAD MSG2 SKP INERR, TAD MSG3 PRINT JMP EXIT /ALL ERRORS ARE FATAL!!!! GETACT, KRB /GET ACCOUNT# DCA TMP0 /INPUT FORMAT: TAD TMP0 /[P,PN] OR [ACCOUNT] TAD NRBRAK SNA CLA JMP GETOUT TAD TMP0 TAD NCOMA SNA CLA JMP PROPRG TAD TMP0 AND P7 DCA TMP0 TAD PRGNUM CLL RAL CLL RAL CLL RAL TAD TMP0 DCA PRGNUM JMP GETACT PROPRG, TAD PRGNUM AND P77 BSW DCA PRONUM DCA PRGNUM ISZ FLAG JMP GETACT GETOUT, TAD FLAG SNA CLA JMP .+5 TAD PRGNUM AND P77 TAD PRONUM SKP TAD PRGNUM DCA OPNBLK+2 JMP LOOP1+3 EXTCHK, CLA CLL DCA I CHRBUF TAD CHRBUF FINF CLA IAC RAL STL RAL TAD CHRBUF DCA TMP0 TAD I TMP0 BSW AND P77 TAD N6 SZA CLA JMP ER2 JMP I GETFL0 *1000 /THIS ROUTINE READS IN ONE SEGMENT EVERY TIME IT /IS CALLED UPON (FILE OPEN ON FILE 0) READR0, 0 CLA CLL TAD N400 DCA RFDT+3 CMA TAD CHRBUF DCA RFDT+4 TAD P400 TAD RFDT+5 SNA ISZ RFDT+1 NOP /(WHAT IF IT'S ZERO?) DCA RFDT+5 TAD RFDT RFILE TAD RFDT+6 SNA CLA JMP I READR0 TAD MSG8 PRINT TAD MSG2 PRINT JMP EXIT /STORE A BIT IN BITMAP STORE0, 0 CLA CLL TAD LOCATN AND P7 /AC9-11=BIT POSITION DCA BIT TAD LOCATN /AC0-8=WORD LOCATION*10-ADDR CLL RAR /OF BITMAP CLL RAR CLL RAR TAD BITMAP DCA WORD TAD BIT TAD MSKTB1 /MASK TO USE DCA MSKPNT TAD BIT TAD MSKTB2 DCA ADDPNT TAD I WORD /GET WORD AND I MSKPNT /MASK IT TAD I ADDPNT /ADD BIT DCA I WORD /PUT WORD BACK JMP I STORE0 /GET OUT /RETRIEVE BIT IN BITMAP STORE1, 0 CLA CLL /USE SAME METHOD AS ABOVE, TAD LOCATN /ONLY RETURN PC+1 AND P7 /IF ZERO, PC IF NO-ZERO TAD MSKTB2 DCA MSKPNT TAD LOCATN CLL RAR CLL RAR CLL RAR TAD BITMAP DCA WORD TAD I WORD AND I MSKPNT SZA CLA JMP I STORE1 ISZ STORE1 JMP I STORE1 /PAL-TEXT OUTPUT PRINT0, 0 DCA AUX1 TAD I AUX1 DCA CHAR TAD CHAR BSW JMS OUT TAD CHAR JMS OUT JMP PRINT0+2 OUT, 0 AND P77 SNA JMP I PRINT0 DCA TMP0 TAD TMP0 AND P240 SNA CLA TAD P100 TAD TMP0 TLS CLA CLL JMP I OUT /4 DIGIT OCTAL OUTPUT PUTNUM, 0 DCA NUM IAC RTL CIA DCA COUNT TAD NUM CLL RAL NUMLOP, RTL RAL DCA NUM TAD NUM AND P7 TAD P260 TLS CLA TAD NUM ISZ COUNT JMP NUMLOP CLA CLL JMP I PUTNUM MG1, TEXT *PROTECTION FAILURE!* MG2, TEXT *FILE NOT FOUND!* MG3, TEXT *.BITMAP BINARY FILE NAME[P,PN]* MG4, TEXT *BITMAP V1* MG5, TEXT * 0 10 20 30 40 50 60 70* MG6, TEXT *01234567 01234567 01234567 01234567 01234567 01234567 01234567 01234567* MG7, TEXT *^C* MG8, TEXT *END-OF-* MG9, TEXT *ILLEGAL FIELD SETTING FOUND!* MG10, TEXT *ILLEGAL FILE FORMAT!* $$$