X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fsrc%2Flife%2Fmain.pa;fp=sw%2Fsrc%2Flife%2Fmain.pa;h=fb46851714283ea604fab144b6399a450fcafe20;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/src/life/main.pa b/sw/src/life/main.pa new file mode 100644 index 0000000..fb46851 --- /dev/null +++ b/sw/src/life/main.pa @@ -0,0 +1,372 @@ +/******************************************************************** +/******************************************************************** +/ MAIN PROGRAM + *200 + CLA CLL + JMS I XDINIT + ION / WELCOME TO HELL! + +MLOOP, / MAIN EVENT LOOP + JMS I XDUMP / START A DUMP, PLEASE + JMS I XCALC / CALCULATE NEW DATA + CLA CLL + + TAD TPTR + DCA DPTR + TAD SPTR + DCA TPTR + TAD DPTR + DCA SPTR + JMP MLOOP + +/******************************************************************** +/ THE CALCULATION + PAGE +CCADDR, 0 / CURRENT CELL ADDRESS +CROW, 0 +CCOL, 0 +NBORS, 0 + +CALC, 0 + CLA CLL + DCA CCADDR + + TAD KROWS + CIA + DCA CROW + +CRLOOP, CLA CLL + TAD KCOLS + CIA + DCA CCOL + +CCLOOP, + / NOW, DO IT, PLEASE! + TAD CCADDR + JMS I XCOUNT + DCA NBORS + + TAD CCADDR + JMS I XGET + SNA + JMP ISDEAD + +ISALIV, CLA CLL + TAD NBORS + TAD KN4 + SMA + JMP DIE + + CLA CLL + TAD NBORS + TAD KN2 + SMA + JMP LIVE + JMP DIE + +ISDEAD, TAD NBORS + TAD KN3 + SZA + JMP DIE + JMP LIVE + +LIVE, CLA CLL + TAD CCADDR + JMS I XSET / NOW, IT'S ALIVE! + JMP CDONE +DIE, CLA CLL + TAD CCADDR + JMS I XCLEAR +CDONE, CLA CLL + + ISZ CCADDR + ISZ CCOL + JMP CCLOOP + + TAD CCADDR + TAD K100 + AND K7700 + ISZ CROW + JMP CRLOOP + + JMP I CALC +KN2, -2 +KN3, -3 +KN4, -4 +K100, 100 + +/******************************************************************** +/ DATA DUMPING + PAGE + NLINE=JMS CRLF + HOME=JMS HOM + +DBASE, 0 +DDPTR, 0 +DOFF, 0 + +DUMPS, 0 + JMS I XTSTRT + JMP I DUMPS + CLA + TAD SPTR + DCA DBASE + JMP DMPINT + +DUMPT, 0 + JMS I XTSTRT + JMP I DUMPT + CLA + TAD TPTR + DCA DBASE + JMP DMPINT + +DUMP, 0 + JMS I XTSTRT + JMP I DUMP + CLA + TAD DPTR + DCA DBASE + +DMPINT, DCA DOFF + + TAD KROWS + CIA + DCA ROWCNT + +// NLINE;NLINE + HOME + +/ START OF ROW +RLOOP, CLA CLL + TAD KCOLS + CIA + DCA COLCNT + TAD K200 + DCA DMSK + + TAD DBASE / BUFFER BASE ADDRESS + TAD DOFF / CURRENT WORD OFFSET + DCA DDPTR / TO INTERNAL POINTER + +/ START OF COLUMN +CLOOP, TAD DMSK / BIT MASK, DYNAMIC + AND I DDPTR / COMBINE CURRENT WORD + SZA + JMP ONE +ZERO, TAD KDEAD + JMP TT +ONE, CLA + TAD KALIVE +TT, JMS I XTYPE + + CLA CLL + TAD DMSK + RAR + SZA + JMP MASKOK + TAD K200 + ISZ DDPTR +MASKOK, DCA DMSK + + ISZ COLCNT + JMP CLOOP + + NLINE + + CLA CLL + TAD DOFF + TAD K10 + DCA DOFF + + ISZ ROWCNT + JMP RLOOP + + JMP I XTSTOP / STOP INTERRUPT MADNESS. + +HOM, 0 + CLA CLL + TAD K035 + JMS I XTYPE + CLA CLL + JMS I XTYPE / FILLER CHARACTERS! + JMS I XTYPE + JMS I XTYPE + JMS I XTYPE + JMP I HOM + +CRLF, 0 + CLA CLL + TAD CR + JMS I XTYPE + CLA CLL + TAD LF + JMS I XTYPE + JMP I CRLF + +DMSK, 0 +K035, 35 +CR, 215 +LF, 212 + +ROWCNT, 0 +COLCNT, 0 + +/******************************************************************** +/ NEIGHBORHOOD COUNTING +/ (ADDRESS IN AC) + PAGE +POS, 0 + +COUNT, 0 + DCA POS + DCA CNT + + TAD POS + TAD KCOLM1 / STEP LEFT + TAD KROWM1 / STEP UP + JMS ACCNT + + TAD KCOLP1 + JMS ACCNT + + TAD KCOLP1 + JMS ACCNT + + TAD KROWP1 + JMS ACCNT + + TAD KROWP1 + JMS ACCNT + + TAD KCOLM1 + JMS ACCNT + + TAD KCOLM1 + JMS ACCNT + + TAD KROWM1 + JMS ACCNT + + CLA CLL + TAD CNT + JMP I COUNT + +ACCNT, 0 + DCA POS + TAD POS + JMS I XGET + SZA + ISZ CNT + CLA CLL + TAD POS + JMP I ACCNT + +CNT, 0 / COUNTER VARIABLE + + +/******************************************************************** +/ DATA HOLDING AND ACCESS + + PAGE / START ON NEW PAGE + +/ INTERNAL DATA + +CADR, 0 / CURRENT CELL ADDRESS +MASK, 0 / BIT MASK TO CURRENT CELL BIT +APTR, 0 / ACCESS POINTER TO CURRENT CELL WORD + +/ GET A BIT OF DATA +GET, 0 / GET POSITION'S VALUE + JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC. + JMP I GET / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC + TAD APTR + TAD SPTR / ADD SOURCE DATA BASE + DCA APTR + TAD I APTR / LOAD DATA + AND MASK / MASK OUT DESIRED BIT + SZA + CLA CLL IAC / MAKE A ONE OUT OF AC CONTENTS + JMP I GET / RETURN + +SET, 0 / SET POSITION'S VALUE TO 1 + JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC. + JMP I SET / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC + TAD APTR + TAD TPTR / ADD SOURCE DATA BASE + DCA APTR + TAD MASK / GET MASK + CMA / INVERT + AND I APTR / COMBINE WITH DATA + TAD MASK / SET BIT + DCA I APTR / UPDATE DATA + JMP I SET / RETURN + +CLEAR, 0 / CLEAR POSITION'S VALUE TO 0 + JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC. + JMP I CLEAR / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC + TAD APTR + TAD TPTR / ADD SOURCE DATA BASE + DCA APTR + TAD MASK / GET MASK + CMA / INVERT + AND I APTR / COMBINE WITH DATA + DCA I APTR / UPDATE DATA + JMP I CLEAR / RETURN + +ASETUP, 0 + DCA CADR / SAVE ADDRESS FOR LATER USE + +/ LIMIT CHECK + TAD CADR + BSW / NOW ROW ADDRESS IN LOWER BITS + AND K77 / MASK OUT UPPER BITS + TAD KNMROW + SPA + JMP LGD1 / ONE LIMIT GOOD + CLA + TAD KBORD / BORDER STANDARD RETURN VALUE + JMP I ASETUP / ERROR RETURN +LGD1, CLA CLL + TAD CADR + AND K77 + TAD KNMCO + SPA + JMP LGD2 + CLA CLL + TAD KBORD + JMP I ASETUP / ERROR RETURN +LGD2, CLA CLL + +/ SETUP POINTER AND MASK + TAD CADR + RTR + RAR + AND K377 + DCA APTR / ACCESS POINTER + TAD CADR + AND K7 + TAD MASKSP + DCA MPTR + TAD I MPTR + DCA MASK + + ISZ ASETUP / PREPARE GOOD RETURN + JMP I ASETUP / GOOD RETURN + + + +MPTR, 0 +MASKSP, MASKS +MASKS, 200 + 100 + 040 + 020 + 010 + 004 + 002 + 001 + + + +