A large commit.
[pdp8.git] / sw / src / life / LIFE10.PA
diff --git a/sw/src/life/LIFE10.PA b/sw/src/life/LIFE10.PA
new file mode 100644 (file)
index 0000000..512844c
--- /dev/null
@@ -0,0 +1,746 @@
+/ CONWAY'S GAME OF LIFE - BREED LIFE ON YOUR PDP8
+
+/********************************************************************
+/********************************************************************
+/
+/ PAL-8 IMPLEMENTATION OF CONWAY'S GAME OF LIFE
+/
+/ PHILIPP HACHTMANN, JULY 2010
+/
+/ REVISIONS:
+/
+/            2010-07-24 - INITIAL RELEASE
+/
+/********************************************************************
+/********************************************************************
+
+
+/********************************************************************
+/********************************************************************
+/
+/ GAME CONFIGURATION PARAMETERS
+/ CHANGE ONLY IF YOU KNOW WHAT YOU'RE DOING!
+
+/ SIZE OF THE PLAYING FIELD
+/ =========================
+
+/ THE PLAYING FIELD HAS A MAXIMUM SIZE OF 32 ROWS BY 64 COLUMNS.
+/ 
+/ THE DATA IS ORGANIZED AS FOLLOWS:
+/ EVERY CELL OCCUPIES ONE BIT. THE CELLS OF EACH ROW ARE STORED IN
+/ A CONTIGUOUS PIECE OF MEMORY. BUT ONLY THE LOWER 8 BITS OF A WORD
+/ ARE USED!
+/ THE WHOLE GAME BUFFER CONSISTS OF 32 ROWS OF 8 WORDS EACH. THIS
+/ LEADS TO A MEMORY FOOTPRINT OF 256 WORDS.
+/ THERE'S ONE RESTRICTION: THE LAST COLUMN IS NOT USABLE DUE TO
+/ BORDER DETECTION. THAT MEANS THAT THE MAXIMUM SIZE OF THE ACTUAL
+/ CELL ROW IS ONLY 63!!!
+/ THE FOLLOWIN PARAMETERS DEFINE THE DIMENSIONS OF THE ACTUAL
+/ SIZE OF THE CELL ARRAY. KEEP IN MIND THAT THIS WILL NOT CHANGE
+/ THE MEMORY FOOTPRINT!
+       PROWS=37
+       PCOLS=77
+
+/ CELL ADDRESS CODING:
+/
+/      0RR RRR CCC CCC  <- AS USED THROUGHOUT THE PROGRAM
+/
+/      WHERE
+/              R - ROW ADDRESS BIT
+/              C - COLUMN ADDRESS BIT
+
+/ COLUMN ADDRESS IS SPLIT INTO 
+/
+/              WWW BBB 
+/      WHERE
+/              W - WORD ADDRESS
+/              B - BIT IN WORD ADDRESS
+/
+/ A CELL ADDRESS CAN BE TRANSLATED INTO A MEMORY OFFSET BY SIMPLY
+/ SHIFTING THREE BITS TO THE RIGHT AND MASKING WITH 0377:
+/
+/      000 0RR RRR CCC 
+/
+/ HERE THE LOWER 3 COLUMN ADDRESS BITS WHICH SPECIFY THE BIT ADDRESS
+/ IN A WORD ARE DISCARDED.
+
+/ HAS THE FIELD LIMITS OR IS IT ENDLESS? (CURRENTLY UNSUPPORTED!)
+
+/      ENDLESS=1
+
+
+/ BORDER BEHAVIOUR FOR LIMITED FIELD
+/ 0 - OFF FIELD POSITIONS ARE ASSUMED TO BE ALWAYS DEAD
+/ 1 - OFF FIELD POSITIONS ARE ASSUMED TO BE ALWAYS ALIFE
+
+       BORDER=0
+
+/ CHARACTER CODES TO USE FOR CELL DISPLAY OUTPUT
+/ 55:-
+/ 52:*
+/      DEAD=55
+       DEAD=40
+       ALIVE=52
+
+
+/********************************************************************
+/ HELP FOR PALBART - CAN BE OMITTED WITH REAL PAL-8
+
+       KCF=6030
+       SPF=6040        
+
+/********************************************************************
+/********************************************************************
+/ ZERO PAGE STUFF
+
+       *0
+INTR,  0               / INTERRUPT TARGET
+       JMP I   XIHAND  / JUMP TO INTERRUPT HANDLER
+XIHAND,        IHAND
+
+       *10
+AUTO0, 0
+AUTO1, 1
+       
+       *100
+/ MAJOR POITERS
+SPTR,  DATA0           / POINTER TO SOURCE DATA (GET, COUNT)
+TPTR,  DATA1           / POINTER TO TARGET DATA (SET, RESET)
+DPTR,  DATA0           / POINTER TO DUMP DATA
+
+/ INTERRUPT BACKUPS
+INTAC, 0               / INTERRUPT BACKUP AC
+INTLNK,        0               / INTERRUPT BACKUP OF LINK
+
+/ TYPING THREAD DATA
+SAVTLI,        0               / SAVED LINK FOR TYPING THREAD
+SAVTAC,        0               / SAVED AC FOR TYPING THREAD
+TAC,   0               / TEMPORARY AC, USED ON TYPING START
+TTACT, 0               / TYPING THREAD ACTIVE FLAG
+
+/ KEYBOARD COMMANDS
+CMKILL,        0
+CMDUMP,        0
+
+/********************************************************************
+/ ZERO PAGE CONSTANTS
+
+K7,    7
+K10,   10
+K77,   77
+K200,  200
+K377,  377
+K7700, 7700
+
+KROWS, PROWS
+KCOLS, PCOLS
+
+KDEAD, DEAD
+KALIVE,        ALIVE
+
+KNMCO, 1-PCOLS         / NEGATIVE OF LAST COLUMN ADDRESS
+KNMROW,        1-PROWS         / NEGATIVE OF LAST ROW ADDRESS
+KBORD, BORDER
+
+KCOLM1, -1
+KCOLP1, 1      
+KROWM1,        -100
+KROWP1, 100
+
+/********************************************************************
+/ ZERO PAGE POINTERS AND SHORTCUTS
+
+XDUMPS,        DUMPS           / START DATA DUMP
+XDUMPT,        DUMPT           / START DATA DUMP
+XDUMP, DUMP
+XCALC, CALC
+XTYPE, TYPE            
+XGET,  GET             / GET A CELL STATE
+XSET,  SET             / SET A CELL TO LIVING
+XCLEAR,        CLEAR           / SET A CELL TO DEAD
+XTSTRT,        TSTART 
+XTSTOP,        TSTOP
+XEXIT, EXIT
+XCOUNT,        COUNT
+/********************************************************************
+/********************************************************************
+/ MAIN PROGRAM
+       *200
+       CLA CLL
+       DCA     TTACT
+       TCF     
+       ION             / WELCOME TO HELL!
+
+MLOOP,                 / MAIN EVENT LOOP
+       JMS I   XDUMP   / START A DUMP, PLEASE
+       JMS I   XCALC   / CALCULATE NEW DATA
+       CLA CLL
+       TAD     TTACT
+       SZA
+       JMP     .-2
+       CLA CLL
+       TAD     TPTR
+       DCA     DPTR
+       TAD     SPTR
+       DCA     TPTR
+       TAD     DPTR
+       DCA     SPTR
+       JMP     MLOOP
+       
+EXIT,  CLA CLL
+       IOF
+       TAD     ADR1
+       JMS I   XCOUNT
+       HLT
+
+       JMP     200
+
+ADR1,  0202
+/********************************************************************
+/ INTERRUPT HANDLER
+
+       PAGE
+
+IHAND, DCA     INTAC   / SAVE AC AND LINK
+       RAR
+       DCA     INTLNK
+
+       KSF
+       SKP
+       JMP     TTIHAN  / TELETYPE INPUT
+       TSF
+       SKP
+       JMP     TTOHAN  / TELETYPE OUTPUT
+       
+       HLT             / OH, AN UNKNOWN INTERRUPT!
+       
+       / RESTORE AC AND LINK AND GO BACK TO WORK
+
+IEND,  CLA CLL
+       TAD     INTLNK
+       RAL
+       TAD     INTAC
+       ION
+       JMP I   INTR    / BACK TO NORMAL OPERATION
+
+/********************************************************************
+/ TELETYPE INPUT HANDLER
+
+TTIHAN,        
+       KRB             / READ AND CLEAR FLAG
+       AND     K177    / MASK TO 7 BITS - I HATE PARITY!
+       DCA     KBCHAR  / SAVE FOR USE
+       
+       TAD     KBCHAR
+       TAD     CKDMPS
+       SNA
+       JMS I   XDUMPS  / SOURCE DUMP (DEBUG)
+
+       CLA CLL
+       TAD     KBCHAR
+       TAD     CKDMPT
+       SNA
+       JMS I   XDUMPT  / TARGET DUMP (DEBUG)
+       
+       CLA CLL
+       TAD     KBCHAR
+       TAD     CKDUMP
+       SNA
+       JMS I   XDUMP   / NORMAL DUMP
+       
+       CLA CLL
+       TAD     KBCHAR
+       TAD     CKKILL
+       SNA
+       JMP I   XEXIT   
+
+       CLA CLL
+       TAD     KBCHAR
+       TAD     CKHALT
+       SNA
+       HLT
+
+       JMP     IEND
+
+K177,  177
+KBCHAR,        0
+
+/ COMMAND KEYS
+
+CKDUMP,        -104            / D
+CKDMPS,        -123            / S
+CKDMPT,        -124            / T
+
+CKKILL,        -3              / CTRL-C
+CKHALT,        -10             / CTRL-H
+
+/********************************************************************
+/ TELETYPE OUTPUT HANDLER AND MANAGEMENT
+
+TTOHAN,
+       TCF             / CLEAR FLAG
+       TAD     TTACT   / ACTIVITY GOING ON?    
+       SZA
+       JMP     TRESUM  / JUMP INTO ONGOING ACTIVITY
+       HLT             / DEBUG HALT - THIS SHOULD NEVER BE HIT!
+       JMP     IEND    / DO NOTHING, SAY GOODBYE.
+
+TSTART,        0               / SCHEDULE TYPING TO BE DONE. NEW "PROCESS"
+                       / STARTS ONE WORD AFTER THIS CALL'S REGULAR
+                       / RETURN.
+       DCA     TAC     / SAVE AC FOR NOW
+
+/ TSWAIT,      CLA CLL
+/      TAD     TTACT
+/      SZA
+/      JMP     TSWAIT  / WAIT UNTIL TYPING SYSTEM IS IDLE!
+
+       CLA CLL
+       TAD     TTACT
+       SZA
+       JMP I   TSTART  / RETURN, WE'RE BUSY!
+
+       ISZ     TTACT   / NOW IT IS ACTIVE (AGAIN?)
+       TAD     TAC     / GET BACK THE TEMPORARY AC
+       DCA     SAVTAC  / SAVE FOR NEW THREAD
+       RAR
+       DCA     SAVTLI  / SAME FOR LINK
+       TAD     TSTART  / POINTER TO MAIN THREAD RETURN CALL
+       IAC             / NOW POINTER TO FIRST EXTRA THREAD LOCATION
+       DCA     TYPE    / INSTALL AS WAKEUP ADDRESS
+       SPF             / WE WILL BE INTERRUPTED RIGHT NOW!
+       JMP I   TSTART  / RETURN TO CALLER
+
+TYPE,  0               / TYPE CHARACTER
+       TLS             / GET IT OUT!
+       DCA     SAVTAC  / SAVE AC, JUST POLITE
+       RAR
+       DCA     SAVTLI  / SAVE LINK, STILL POLITE
+       JMP     IEND    / END OF INTERRUPT HANDLING
+TRESUM,        TAD     SAVTLI
+       RAL
+       TAD     SAVTAC
+       JMP I   TYPE    / WAKE UP INTERRUPTED PROCESS
+       
+TSTOP, CLA             / JUMP HERE TO KILL TYPING THREAD
+       DCA     TTACT   / CLEAR ACTIVITY FLAG
+       TCF             / CLEAR TELEPRINTER FLAG
+       JMP     IEND    / END OF INTERRUPT HANDLING
+
+/********************************************************************
+/ 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
+
+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
+
+/ 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.
+
+CRLF,  0
+       CLA CLL
+       TAD     CR
+       JMS I   XTYPE
+       CLA CLL
+       TAD     LF
+       JMS I   XTYPE
+       JMP I   CRLF
+       
+DMSK,  0
+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
+
+
+
+/********************************************************************
+/********************************************************************
+       PAGE
+DATA0, 
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0007;0000;0000;0000;0000
+       0000;0000;0000;0005;0000;0000;0000;0000
+       0000;0000;0000;0005;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0005;0000;0000;0000;0000
+       0000;0000;0000;0005;0000;0000;0000;0000
+       0000;0000;0000;0007;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+
+       PAGE
+DATA1,
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       0000;0000;0000;0000;0000;0000;0000;0000
+       
+       
+/********************************************************************
+/********************************************************************
+/ THIS IS IT, FOLKS!
+/********************************************************************
+/********************************************************************
+$
+
+       
\ No newline at end of file