Source code for the Game of Life?

Discuss software for the Apple 1/replica 1

Source code for the Game of Life?

Postby dbetz » Mar Sat 17, 2007 2:54 pm

Is the assembly language source code available for the version of Life that is posted here? I'm having trouble with the character output alignment and would like to look at the code to see if I can figure out what's going wrong. Also, I'd like a sample program that I can use to start learning 6502 assembly language for the Replica 1.

Thanks,
David
dbetz
 
Posts: 26
Joined: Mar Sat 17, 2007 2:50 pm

Postby vbriel » Mar Sat 17, 2007 7:40 pm

Larry Nelson wrote that version. I would post to Applefritter.com under the Apple 1 section and ask him for it.

Vince
User avatar
vbriel
Site Admin
 
Posts: 1184
Joined: Jul Tue 19, 2005 12:10 pm
Location: Ohio

Postby fsafstrom » Mar Mon 19, 2007 11:28 pm

Here is my Beta version of Game of Life...

It has one major flaw, the output/input doesn't work for the original Replica, only for the ACIA.

I need this for another project with another type of output, think 8x8 LED segments connected to a 24x24 grid... ;-)

Could be an easy fix, just look into the output/input section and give it a try...

Code: Select all
; Game of Life.

; Rules taken from Wikipedia, http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life...

; The universe of the Game of Life is an infinite two-dimensional orthogonal grid of square cells,
; each of which is in one of two possible states, live or dead.
; Every cell interacts with its eight neighbours, which are the cells that are directly horizontally,
; vertically, or diagonally adjacent. At each step in time, the following transitions occur:

;   1. Any live cell with fewer than two live neighbours dies, as if by loneliness.
;   2. Any live cell with more than three live neighbours dies, as if by overcrowding.
;   3. Any live cell with two or three live neighbours lives, unchanged, to the next generation.
;   4. Any dead cell with exactly three live neighbours comes to life.

; The initial pattern constitutes the 'seed' of the system.
; The first generation is created by applying the above rules simultaneously to every cell in the seed--
; births and deaths happen simultaneously, and the discrete moment at which this happens is sometimes called a tick.
; (In other words, each generation is based entirely on the one before.)
; The rules continue to be applied repeatedly to create further generations.

; ========================================================================================

; My version has a 24x24 grid displayed on the screen.
; There is no editor so edit Grid1 and re-compile.

; Note that I have two grids 26x26 bytes, but I only use 24x24 bytes for game of life.
; This is to make the calculations simpler when calculating number of neighbours.
; I don't have to do any calculations for wrap around or anything like that.

      .ORG $300

ACIA      = $C000
ACIA_CTRL   = ACIA+3
ACIA_CMD   = ACIA+2
ACIA_SR      = ACIA+1
ACIA_DAT   = ACIA

ACIA_OUTPUT    = 1

dead_cell   = '_'      ; Print this char for a dead cell.
live_cell   = '*'      ; And this one for a living.


tick      = $30      ; Even use grid 1, Odd use grid 2
row_counter   = $31      ; count the rows to print.
GridLow      = $32      ; Grid pointer.
GridHi      = $33
WorkGridLow   = $34      ; Grid Pointer for work grid.
WorkGridHi   = $35
cell_count   = $36      ; Used to count cells.

      .IF ACIA_OUTPUT
      JSR init_output
      .ENDIF

      LDA #$00
      STA tick      ; Start with grid 1
main_loop   LDA #$0D
      jsr prchar
      JSR print_grid      ; Print it.
      JSR next_tick
      INC tick      ; Next tick
      JSR getchar
      CMP #$1B
      BNE main_loop
      
      
      RTS
      
next_tick   LDA tick
      AND #$01
      BNE .load_grid2
      LDA #<Grid1      ; Load Grid1 to pointer.
      STA GridLow
      LDA #>Grid1
      STA GridHi
      LDA #<Grid2      ; Load Grid2 to Work grid pointer.
      STA WorkGridLow
      LDA #>Grid2
      STA WorkGridHi
      BRA .grid_loaded
.load_grid2   LDA #<Grid2      ; Load Grid2 to pointer.
      STA GridLow
      LDA #>Grid2
      STA GridHi
      LDA #<Grid1      ; Load Grid1 to Work grid pointer.
      STA WorkGridLow
      LDA #>Grid1
      STA WorkGridHi
.grid_loaded   CLC         ; We will count cells on Grid(Low/Hi) and put them on WorkGrid(Low/Hi).
      LDA WorkGridLow
      ADC #27         ; Add 27 bytes, that means we are on the second row, second column.
      STA WorkGridLow
      BCC .no_carry      ; If we got a carry, we need to increase the High byte.
      INC WorkGridHi
.no_carry   LDX #24         ; We want to scan 24
      STX row_counter
grid_loop   JSR count_hood      ; Count neighbours.
      LDY #0         ; Zero Y      
      LDA cell_count      ; Get result
      CMP #02         ; Two cells ?
      BCC cell_dies      ; Less than two, cell dies.
      CMP #3         ; Three cells ?
      BEQ cell_birth      ; Three cells will come a life or stay alive, just put one there.
      BCS cell_dies      ; If more than 3 cells, it dies.
      LDY #27         ; We have two cells alive, copy cell from Grid(Low/Hi).
      LDA (GridLow),Y      ; Got the cell
      LDY #0         ; Form pos 27 on Grid(*) to WorkGrid(*).
      STA (WorkGridLow),Y   ; Store cell.   
      BRA cell_count_done   ; Continue on...
cell_dies   LDA #0         ; Cell dies, A = 0
      STA (WorkGridLow),Y   ; Store cell.   
      BRA cell_count_done   ; Continue on...
cell_birth   LDA #1         ; Cell dies, A = 0
      STA (WorkGridLow),Y   ; Store cell.   
cell_count_done   INC WorkGridLow      ; Next position
      BNE .no_inc1
      INC WorkGridHi
.no_inc1   INC GridLow      ; Next position
      BNE .no_inc2
      INC GridHi
.no_inc2   DEX         ; Next col.
      BNE grid_loop      ; Row not done, continue.
      LDX #24         ; Reset col counter.
      INC WorkGridLow      ; Next position, for each row we have to move one extra space.
      BNE .no_inc3
      INC WorkGridHi
.no_inc3   INC GridLow      ; Next position
      BNE .no_inc4
      INC GridHi
.no_inc4   Dec row_counter      ; Next row.
      BNE grid_loop      ; Row not done, continue.
      RTS
      
count_hood   LDY #0
      STY cell_count      ; Zero cell count.
      LDA (GridLow),Y      ; Y=0, neighbour top left.
      BEQ .no_add1
      INC cell_count
.no_add1   LDY #1
      LDA (GridLow),Y      ; Y=1, neighbour top middle.
      BEQ .no_add2
      INC cell_count
.no_add2   LDY #2
      LDA (GridLow),Y      ; Y=2, neighbour top right.
      BEQ .no_add3
      INC cell_count
.no_add3   LDY #26
      LDA (GridLow),Y      ; Y=26, neighbour to the left.
      BEQ .no_add4
      INC cell_count
.no_add4   LDY #28
      LDA (GridLow),Y      ; Y=28, neighbour to the right.
      BEQ .no_add5
      INC cell_count
.no_add5   LDY #52
      LDA (GridLow),Y      ; Y=52, neighbour to the bottom left.
      BEQ .no_add6
      INC cell_count
.no_add6   LDY #53
      LDA (GridLow),Y      ; Y=53, neighbour to the bottom middle.
      BEQ .no_add7
      INC cell_count
.no_add7   LDY #54
      LDA (GridLow),Y      ; Y=53, neighbour to the bottom middle.
      BEQ .no_add8
      INC cell_count
.no_add8   RTS
      
      
print_grid   LDA tick      ; Test which grid to print.
      AND #$01
      BNE .load_grid2
      LDA #<Grid1      ; Load Grid1 to pointer.
      STA GridLow
      LDA #>Grid1
      STA GridHi
      BRA .grid_loaded
.load_grid2   LDA #<Grid2      ; Load Grid2 to pointer.
      STA GridLow
      LDA #>Grid2
      STA GridHi
.grid_loaded   CLC         ; Clear carry so we can add 27 to the grid address.
      LDA GridLow
      ADC #27         ; Add 27 bytes, that means we are on the second row, second column.
      STA GridLow
      BCC .no_carry      ; If we got a carry, we need to increase the High byte.
      INC GridHi
.no_carry   LDY #0         ; Start at second row in grid, one byte in.
      LDX #24         ; We want to print 24 chars/ rows.
      STX row_counter
.grid_loop2   LDA (GridLow),Y      ; Get byte in current grid.
      BEQ .printDead      ; If, zero it's a dead cell.
      LDA #live_cell
      JSR prchar
      BRA .print_Done
.printDead   LDA #dead_cell
      JSR prchar
.print_Done   INY         ; Next byte.
      DEX         ; Count down column.
      BNE .grid_loop2      ; Are we done with this row ?
      CLC         ; Clear carry so we can add 26 to the grid address.
      LDA GridLow
      ADC #26         ; Add 26 bytes, that means we are on the next row, second column.
      STA GridLow
      BCC .no_carry2      ; If we got a carry, we need to increase the High byte.
      INC GridHi      
.no_carry2   LDY #0
      LDX #24
      LDA #$0D      ; Print a new line.
      JSR prchar
      DEC row_counter
      BNE .grid_loop2
      RTS
      
prchar      PHA         ;*Save A
      .IF ACIA_OUTPUT
      STA ACIA_DAT      ;*Send it.
.WAIT      LDA ACIA_SR      ;*Load status register for ACIA
      AND #$10      ;*Mask bit 4.
      BEQ .WAIT      ;*ACIA not done yet, wait.
      .ELSE
      ORA #$80
.WAIT2      BIT $D012
      BPL .WAIT2
      STA $D012
      .ENDIF   
      PLA         ;*Restore A
      RTS
      
getchar      NOP
      .IF ACIA_OUTPUT
.wait1      LDA ACIA_SR      ;*See if we got an incoming char
      AND #$08      ;*Test bit 3
      BEQ .wait1      ;*Wait for character
      LDA ACIA_DAT      ;*Load char
      .ELSE
.wait2      LDA $D011
      BPL .wait2
      LDA $D010
      AND #$7F
      .ENDIF
      RTS
      
   
   
init_output   LDA #$1F      ;* Init ACIA to 19200 Baud.
      STA ACIA_CTRL
      LDA #$0B      ;* No Parity.
      STA ACIA_CMD
      RTS

      
Grid1   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 1
   .BYTE 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 2
   .BYTE 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 3
   .BYTE 0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 4
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 5
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 6
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 7
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 8
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 9
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 10
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 11
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 12
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 13
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 14
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 15
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 16
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 17
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 18
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 19
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 20
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 21
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 22
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 23
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 24
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 25
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 26
   
Grid2   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 1
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 2
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 3
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 4
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 5
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 6
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 7
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 8
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 9
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 10
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 11
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 12
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 13
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 14
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 15
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 16
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 17
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 18
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 19
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 20
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 21
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 22
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 23
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 24
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 25
   .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 26   
User avatar
fsafstrom
 
Posts: 154
Joined: Dec Tue 26, 2006 2:57 pm
Location: San Antonio, Texas

Postby iceandfire » Apr Sat 07, 2007 9:55 am

Here is the source code for the Game Of Life...

CONWAY’S GAME OF LIFE

ORIGINALLY CREATED BY JOHN CONWAY

2000: A2 00 LIFE LDX #00 ;ENTRY POINT
2002: A9 A0 LDA <SPACE> ;PUT SPACES ON MAP

2004: 9D 00 24 CLEAR STA 2400,X ;BY STORING
2007: 9D 00 25 STA 2500,X ;ON EACH PAGE
200A: 9D 00 26 STA 2600,X ;OF THE FOUR
200D: 9D 00 27 STA 2700,X ;PAGES USED
2010: E8 INX ;DONE YET?
2011: D0 F1 BNE CLEAR ;LOOP BACK

2013: BD 80 21 MESS LDA MESGE,X ;GET THE OPENING MESSAGE
2016: 20 EF FF JSR ECHO ;AND PRINT IT ALL
2019: E8 INX ;UNTIL DONE
201A: E0 38 CPX #38 ;
201C: D0 F5 BNE MESS ;

201E: 20 02 21 NAMEIN JSR INPUT ;INPUT USER’S NAME
2021: C9 8D CMP <CR> ;JUST TO RANDOMIZE
2023: D0 F9 BNE NAMEIN ;THE RANDOM SEED
2025: 20 3F 21 JSR RANDOM ;GET RANDOM NUMBER FOR START
2028: 29 3F AND #3F ;RESULT IS 0 TO $3F
202A: 69 20 ADC #20 ;NOW RESULT IS $20 TO $5F
202C: 85 F9 STA F9 ;NUMBER OF STARS TO START
202E: A0 00 LDY #00 ;ZERO THE INDIRECT POINTER

2030: 20 3F 21 RAND JSR RANDOM ;NOW WE WILL PLACE
2033: 29 03 AND #03 ;STARS ON MAP RANDOMLY
2035: 18 CLC ;FIRST CHOOSE A LOCATION
2036: 69 24 ADC #24 ;FROM PAGE
2038: 85 F1 STA F1 ;$2400 TO PAGE
203A: A5 FA LDA FA ;$27FF
203C: 85 F0 STA F0 ;AND STORE IT AT $F0,$F1
203E: A9 AA LDA “*” ;GET A “STAR”
2040: 91 F0 STA (F0),Y ;PUT IT ON THE MAP
2042: C6 F9 DEC F9 ;ARE WE DONE?
2044: D0 EA BNE RAND ; NO, LOOP BACK.

2046: A9 24 PRINTOUT LDA #24 ;PRINT BORDER ON SCREEN
2048: 85 F9 STA F9 ;BY STORING START
204A: A9 40 LDA #40 ;LOCATION OF MAP
204C: 85 F8 STA F8 ;AND
204E: A2 27 LDX #27 ;NUMBER OF ONE LINE
2050: A9 AD LDA “-” ;OF “DASHES”

2052: 9D D8 27 LOOP3 STA 27D8,X ;PUT “DASHES” AT BOTTOM
2055: 9D 40 24 STA 2440,X ;AND TOP OF MAP
2058: CA DEX ;UNTIL WE’VE DONE 40D
2059: 10 F7 BPL LOOP3 ;LOOPS

205B: B1 F8 PRSCREEN LDA (F8),Y ;NOW PRINT THE MAP
205D: 20 EF FF JSR ECHO ;TO THE SCREEN
2060: E6 F8 INC F8 ;INCREMENT THE POINTERS
2062: D0 F7 BNE PRSCREEN;NOT A NEW PAGE
2064: E6 F9 INC F9 ;NEW PAGE
2066: A5 F9 LDA F9 ;TEST IF DONE
2068: C9 28 CMP #28 ;BY COMPARING
206A: D0 EF BNE PRSCREEN;AND LOOPING

206C: 20 02 21 PAUSE JSR INPUT ;PAUSE AFTER PRINTING
206F: A0 00 LDY #00 ;AND START OVER

2071: 20 F3 20 DUPLICATE JSR STRTBRD ;BY ZEROING POINTERS
2074: B1 F0 DUP2 LDA (F0),Y ;THEN MAKING A
2076: 91 F2 STA (F2),Y ;DUPLICATE OF THE MAP.
2078: E6 F0 INC F0 ;IN ANOTHER MEMORY
207A: E6 F2 INC F2 ;LOCATION
207C: D0 F6 BNE DUP2 ;INCREMENT THE PAGES
207E: E6 F1 INC F1 ;FROM AND TO
2080: E6 F3 INC F3 ;
2082: A5 F1 LDA F1 ;TEST FOR DONE
2084: C9 28 CMP #28 ;
2086: D0 EC BNE DUP2 ;AND LOOP IF NOT
2088: 20 61 21 JSR ZEROS ;FILL MAP WITH ZEROS

208B: A0 00 LOOP1 LDY #00 ;AND INDIRECT POINTER
208D: B1 F2 LDA (F2),Y ;IS THIS LOCATION
208F: C9 AA CMP “*” ;A “STAR”?
2091: D0 0A BNE INCR ;NO THEN NEXT LOCATION
2093: A0 27 LDY #27 ;MUST BE A STAR
2095: 20 14 21 JSR SETMAP ;ADD ONE TO EACH NEIGHBOR
2098: A0 01 LDY #01 ;ALL EIGHT LOCATIONS
209A: 20 1D 21 JSR INCMAP ;

209D: E6 F0 INCR INC F0 ;TRY NEXT LOCATION
209F: E6 F2 INC F2 ;BOTH MAPS
20A1: D0 E8 BNE LOOP1 ;NEW PAGE?
20A3: E6 F1 INC F1 ;
20A5: E6 F3 INC F3 ;
20A7: A5 F1 LDA F1 ;TEST FOR DONE
20A9: C9 28 CMP #28 ;
20AB: D0 DE BNE LOOP1 ;AND LOOP IF NOT
20AD: 18 CLC ;NOW TO ADD THE TOP

20AE: A2 27 TRANSFR LDX #27 ;AND BOTTOM LINES
20B0: BD D8 27 XFR1 LDA 27D8,X ;TO MAKE THE MAP
20B3: 7D 68 24 ADC 2468,X ;A SPHERE
20B6: 9D 68 24 STA 2468,X ;BY TTESTING FOR NEIGHBORS
20B9: BD 40 24 LDA 2440,X ;AT THE OTHER EDGE
20BC: 7D B0 27 ADC 27B0,X ;AND ADDING THEM TO
20BF: 9D B0 27 STA 27B0,X ;THE RESULTS STORED.
20C2: CA DEX ;ONLY HAVE TO DO
20C3: 10 EB BPL XFR1 ;THIS 40 TIMES
20C5: 20 F3 20 JSR STRTBRD ;THEN APPLY

20C8: A0 00 MAKE LDY #00 ;CONWAYS RULES
20CA: B1 F0 LDA (F0),Y ;FOR LIFE
20CC: C9 02 CMP #02 ;OR DEATH OF THE
20CE: D0 04 BNE NOT2 ;STARS
20D0: B1 F2 LDA (F2),Y ;ONLY SITES WITH
20D2: D0 0A BNE FOUND ;THE RIGHT NUMBER

20D4: C9 03 NOT2 CMP #03 ;OF NEIGHBORS WILL
20D6: D0 04 BNE NOT3 ;LIVE OR BIRTH
20D8: A9 AA LDA “*” ;3 GIVES BIRTH
20DA: D0 02 BNE FOUND ;JUMP OVER

20DC: A9 A0 NOT3 LDA <SPACE> ;SPACE IS DEATH

20DE: 91 F0 FOUND STA (F0),Y ;STORE SYMBOL
20E0: E6 F0 INC F0 ;AND GO TO NEXT
20E2: E6 F2 INC F2 ;SPACE
20E4: D0 E2 BNE MAKE ;
20E6: E6 F1 INC F1 ;
20E8: E6 F3 INC F3 ;
20EA: A5 F3 LDA F3 ;
20EC: C9 2C CMP #2C ;
20EE: D0 D8 BNE MAKE ;UNTIL
20F0: 4C 46 20 JMP PRINTOUT;DONE

20F3: A9 24 STRTBRD LDA #24 ;SET UP POINTERS
20F5: 85 F1 STA F1 ;BY STORING
20F7: A9 28 LDA #28 ;VALUES
20F9: 85 F3 STA F3 ;AT
20FB: A9 40 LDA #40 ;FO,F1
20FD: 85 F0 STA F0 ;AND F2,F3
20FF: 85 F2 STA F2
2101: 60 RTS

2102: E6 FA INPUT INC FA ;ADD ONE TO LOW BYTE
2104: D0 02 BNE NEXT2 ;IF ZERO,
2106: E6 FB INC FB ;ADD 1 TO HIGH BYTE

2108: AD 11 D0 NEXT2 LDA D011 ;IS KEYBOARD ACTIVE?
210B: 10 F5 BPL INPUT ;TIME TO INCREMENT RANDOM
210D: AD 10 D0 LDA D010 ;ELSE GET THE KEY PRESS
2110: 20 EF FF JSR ECHO ;AND PRINT TO SCREEN
2113: 60 RTS ;THEN REURN

2114: 20 1D 21 SETMAP JSR INCMAP ;THE NEIGHBORS OF A STAR
2117: C8 INY ;ARE +/-27,28,29
2118: C0 2A CPY #2A ;AND +/-1
211A: D0 F8 BNE SETMAP ;LOOP UNTIL
211C: 60 RTS ;DONE

211D: 18 INCMAP CLC ;Y HAS 1,27,28 OR 29
211E: B1 F0 LDA (F0),Y ;SO WE CAN
2120: 69 01 ADC #01 ;ADD 1 TO THE POSITIVE
2122: 91 F0 STA (F0),Y ;NEIGHBOR
2124: 84 F9 STY F9 ;AND SAVE Y
2126: 38 SEC ;SO WE CAN
2127: A5 F0 LDA F0 ;GET THE NEGATIVE
2129: E5 F9 SBC F9 ;NEIGHBOR
212B: 85 F6 STA F6 ;ADDRESS
212D: A5 F1 LDA F1 ;LOW AND HIGH
212F: E9 00 SBC #00 ;AND STORE
2131: 85 F7 STA F7 ;THE NEW ADDRESS
2133: A0 00 LDY #00 ;NOW SET POINTER
2135: B1 F6 LDA(F6),Y ;LOAD NEIGHBOR
2137: 18 CLC ;GET READY TO ADD
2138: 69 01 ADC #01 ;ONE TO NEIGHBOR
213A: 91 F6 STA (F6),Y ;AND SAVE RESULT
213C: A4 F9 LDY F9 ;RESTORE Y
213E: 60 RTS ;RETURN

213F: A5 FB RANDOM LDA FB ;RANDOM NUMBER GENERATOR
2141: 85 F6 STA F6 ;SAVE HI BYTE TO TEMP
2143: A5 FA LDA FA ;GET LO BYTE
2145: 0A ASL ;SHIFT LEFT
2146: 26 F6 ROL F6 ;ROL INTO TEMP
2148: 0A ASL ;DO IT AGAIN
2149: 26 F6 ROL F6 ;NOW 4 TIMES ORIGINAL
214B: 18 CLC ;CLEAR CARRY FLAG
214C: 65 FA ADC FA ;ADD LO TO RESULT
214E: 48 PHA ;SAVE ACCUMULATOR ON STACK
214F: A5 F6 LDA F6 ;GET TEMP
2151: 65 FB ADC FB ;ADD HI BYTE
2153: 85 FB STA FB ;SAVE
2155: 68 PLA ;RESTORE ACCUMULATOR
2156: 69 11 ADC 11 ;ADD 17D
2158: 85 FA STA FA ;STORE IT FOR SEED
215A: A5 FB LDA FB ;GET HI BYTE
215C: 69 36 ADC 36 ;ADD 54D – TOTAL =13841
215E: 85 FB STA FB ;SAVE FOR SEED
2160: 60 RTS ;RETURN W/HI BYTE IN ACCUM.

2161: 20 F3 20 ZEROS JSR STRTBRD ;SET UP POINTERS
2164: A9 00 LDA #00 ;CLEAR MAP
2166: A8 TAY ;ZERO Y
2167: 91 F0 ZERO1 STA (F0),Y ;WORK THROUGH
2169: E6 F0 INC F0 ;ALL MEMORY LOCATIONS
216B: DO FA BNE ZERO1 ;IN ALL FOUR PAGES
216D: E6 F1 INC F1 ;
216F: A6 F1 LDX F1 ;
2171: E0 28 CPX #28 ;UNTIL DONE
2173: D0 F2 BNE ZERO1 ;
2175: 20 F3 20 JSR STRTBRD ;SET UP POINTERS AGAIN
2178: 60 RTS ;


DATA: MESSGE ;OPENING MESSAGE
;
;
2180: 8D 8D 8D 8D C3 CF CE D7 ;
2188: C1 D9 A7 D3 A0 C7 C1 CD ;
2190: C5 A0 CF C6 A0 CC C9 C6 ;CONWAY’S GAME OF LIFE
2198: C5 8D 8D D0 CC C5 C1 D3 ;
21A0: C5 A0 D4 D9 D0 C5 A0 D9 ;PLEASE TYPE YOUR FULL NAME.
21A8: CF D5 D2 A0 C6 D5 CC CC ;
21A0: A0 CE C1 CD C5 AE 8D 8D ;
iceandfire
 
Posts: 5
Joined: Dec Tue 27, 2005 8:06 am
Location: Southern Indiana

Postby Kallikak » Apr Mon 09, 2007 8:43 pm

Thanks for posting the code. Here it is ported to Krusader. Please note there are some memory conflicts with Krusader - see the comment below about loading this code into memory above $3000 hex. A better solution is to make the program use other free memory, but since the memory locations are all hardcoded I have opted at the moment for the easier fix.

Code: Select all
; JOHN CONWAY'S GAME OF LIFE
; CODE BY LARRY NELSON
; KRUSADER PORT BY KEN WESSEN

; NOTE BOARD MEMORY AT $2400+
; CLASHES WITH KRUSADER DEFAULT
; PROGRAM STORAGE LOCATION

; ZERO PAGE USAGE MOVED TO $Dn

ECHO    .= $FFEF
SP      .= $A0
CR      .= $8D

LIFE    .M
        LDX #$00        ENTRY POINT
        LDA #SP         PUT SPACES ON MAP
.CLEAR  STA $2400,X     BY STORING
        STA $2500,X     ON EACH PAGE
        STA $2600,X     OF THE FOUR
        STA $2700,X     PAGES USED
        INX             DONE YET?
        BNE .CLEAR      LOOP BACK

.MESS   LDA MESGE,X     GET THE OPENING MESSAGE
        JSR ECHO        AND PRINT IT ALL
        INX             UNTIL DONE
        CPX #$38       
        BNE .MESS       

.NAME   JSR INPUT       INPUT USER’S NAME
        CMP #CR         JUST TO RANDOMIZE
        BNE .NAME       THE RANDOM SEED
        JSR RANDOM      GET RANDOM NUMBER FOR START
        AND #$3F        RESULT IS 0 TO $3F
        ADC #$20        NOW RESULT IS $20 TO $5F
        STA $D9         NUMBER OF STARS TO START
        LDY #$00        ZERO THE INDIRECT POINTER

.RAND   JSR RANDOM      NOW WE WILL PLACE
        AND #$03        STARS ON MAP RANDOMLY
        CLC             FIRST CHOOSE A LOCATION
        ADC #$24        FROM PAGE
        STA $D1         $2400 TO PAGE
        LDA $DA         $27FF
        STA $D0         AND STORE IT AT $D0,$D1
        LDA #'*'        GET A 'STAR'
        STA ($D0),Y     PUT IT ON THE MAP
        DEC $D9         ARE WE DONE?
        BNE .RAND       NO, LOOP BACK.

PROUT   .M
        LDA #$24        PRINT BORDER ON SCREEN
        STA $D9         BY STORING START
        LDA #$40        LOCATION OF MAP
        STA $D8         AND
        LDX #$27        NUMBER OF ONE LINE
        LDA #'-'        OF 'DASHES'

.LOOP3  STA $27D8,X     PUT 'DASHES' AT BOTTOM
        STA $2440,X     AND TOP OF MAP
        DEX             UNTIL WE’VE DONE 40D
        BPL .LOOP3      LOOPS

.PRSCR  LDA ($D8),Y     NOW PRINT THE MAP
        JSR ECHO        TO THE SCREEN
        INC $D8         INCREMENT THE POINTERS
        BNE .PRSCR      NOT A NEW PAGE
        INC $D9         NEW PAGE
        LDA $D9         TEST IF DONE
        CMP #$28        BY COMPARING
        BNE .PRSCR      AND LOOPING

PAUSE   JSR INPUT       PAUSE AFTER PRINTING
        LDY #$00        AND START OVER

DUPL    .M     
        JSR STBRD       BY ZEROING POINTERS
.DUP2   LDA ($D0),Y     THEN MAKING A
        STA ($D2),Y     DUPLICATE OF THE MAP.
        INC $D0         IN ANOTHER MEMORY
        INC $D2         LOCATION
        BNE .DUP2       INCREMENT THE PAGES
        INC $D1         FROM AND TO
        INC $D3         
        LDA $D1         TEST FOR DONE
        CMP #$28       
        BNE .DUP2       AND LOOP IF NOT
        JSR ZEROS       FILL MAP WITH ZEROS

.LOOP1  LDY #$00        AND INDIRECT POINTER
        LDA ($D2),Y     IS THIS LOCATION
        CMP #'*'        A 'STAR'?
        BNE .INCR       NO THEN NEXT LOCATION
        LDY #$27        MUST BE A STAR
        JSR SETMAP      ADD ONE TO EACH NEIGHBOR
        LDY #$01        ALL EIGHT LOCATIONS
        JSR INCMAP     

.INCR   INC $D0         TRY NEXT LOCATION
        INC $D2         BOTH MAPS
        BNE .LOOP1      NEW PAGE?
        INC $D1         
        INC $D3         
        LDA $D1         TEST FOR DONE
        CMP #$28       
        BNE .LOOP1      AND LOOP IF NOT
        CLC             NOW TO ADD THE TOP

XFR     LDX #$27        AND BOTTOM LINES
.XFR1   LDA $27D8,X     TO MAKE THE MAP
        ADC $2468,X     A SPHERE
        STA $2468,X     BY TTESTING FOR NEIGHBORS
        LDA $2440,X     AT THE OTHER EDGE
        ADC $27B0,X     AND ADDING THEM TO
        STA $27B0,X     THE RESULTS STORED.
        DEX             ONLY HAVE TO DO
        BPL .XFR1       THIS 40 TIMES
        JSR STBRD       THEN APPLY

.MAKE   LDY #$00        CONWAYS RULES
        LDA ($D0),Y     FOR LIFE
        CMP #$02        OR DEATH OF THE
        BNE .NOT2       STARS
        LDA ($D2),Y     ONLY SITES WITH
        BNE .FOUND      THE RIGHT NUMBER

.NOT2   CMP #$03        OF NEIGHBORS WILL
        BNE .NOT3       LIVE OR BIRTH
        LDA #'*'        3 GIVES BIRTH
        BNE .FOUND      JUMP OVER

.NOT3   LDA #SP         SPACE IS DEATH

.FOUND  STA ($D0),Y     STORE SYMBOL
        INC $D0         AND GO TO NEXT
        INC $D2         SPACE
        BNE .MAKE       
        INC $D1         
        INC $D3         
        LDA $D3         
        CMP #$2C       
        BNE .MAKE       UNTIL
        JMP PROUT       DONE

STBRD   .M
        LDA #$24        SET UP POINTERS
        STA $D1         BY STORING
        LDA #$28        VALUES
        STA $D3         AT
        LDA #$40        FO,D1
        STA $D0         AND D2,D3
        STA $D2
        RTS

INPUT   .M
        INC $DA         ADD ONE TO LOW BYTE
        BNE .NEXT       IF ZERO,
        INC $DB         ADD 1 TO HIGH BYTE
       
.NEXT   LDA $D011       IS KEYBOARD ACTIVE?
        BPL INPUT       TIME TO INCREMENT RANDOM
        LDA $D010       ELSE GET THE KEY PRESS
        JSR ECHO        AND PRINT TO SCREEN
        RTS             THEN REURN

SETMAP  .M
        JSR INCMAP      THE NEIGHBORS OF A STAR
        INY             ARE +/-27,28,29
        CPY #$2A        AND +/-1
        BNE SETMAP      LOOP UNTIL
        RTS             DONE

INCMAP  .M
        CLC             Y HAS 1,27,28 OR 29
        LDA ($D0),Y     SO WE CAN
        ADC #$01        ADD 1 TO THE POSITIVE
        STA ($D0),Y     NEIGHBOR
        STY $D9         AND SAVE Y
        SEC             SO WE CAN
        LDA $D0         GET THE NEGATIVE
        SBC $D9         NEIGHBOR
        STA $D6         ADDRESS
        LDA $D1         LOW AND HIGH
        SBC #$00        AND STORE
        STA $D7         THE NEW ADDRESS
        LDY #$00        NOW SET POINTER
        LDA ($D6),Y     LOAD NEIGHBOR
        CLC             GET READY TO ADD
        ADC #$01        ONE TO NEIGHBOR
        STA ($D6),Y     AND SAVE RESULT
        LDY $D9         RESTORE Y
        RTS             RETURN

RANDOM  .M
        LDA $DB         RANDOM NUMBER GENERATOR
        STA $D6         SAVE HI BYTE TO TEMP
        LDA $DA         GET LO BYTE
        ASL             SHIFT LEFT
        ROL $D6         ROL INTO TEMP
        ASL             DO IT AGAIN
        ROL $D6         NOW 4 TIMES ORIGINAL
        CLC             CLEAR CARRY FLAG
        ADC $DA         ADD LO TO RESULT
        PHA             SAVE ACCUMULATOR ON STACK
        LDA $D6         GET TEMP
        ADC $DB         ADD HI BYTE
        STA $DB         SAVE
        PLA             RESTORE ACCUMULATOR
        ADC $11         ADD 17D
        STA $DA         STORE IT FOR SEED
        LDA $DB         GET HI BYTE
        ADC $36         ADD 54D – TOTAL =13841
        STA $DB         SAVE FOR SEED
        RTS             RETURN W/HI BYTE IN ACCUM.

ZEROS   .M
        JSR STBRD       SET UP POINTERS
        LDA #$00        CLEAR MAP
        TAY             ZERO Y
.ZERO   STA ($D0),Y     WORK THROUGH
        INC $D0         ALL MEMORY LOCATIONS
        BNE .ZERO       IN ALL FOUR PAGES
        INC $D1         
        LDX $D1         
        CPX #$28        UNTIL DONE
        BNE .ZERO       
        JSR STBRD       SET UP POINTERS AGAIN
        RTS     

MESGE   .B  CR
        .B  CR
        .S  'CONWAY'    OPENING MESSAGE
        .B  $A7
        .S  'S'
        .B  SP
        .S  'GAME'
        .B  SP
        .S  'OF'
        .B  SP
        .S  'LIFE'
        .B  CR
        .B  CR
        .S  'PLEASE'
        .B  SP
        .S  'TYPE'
        .B  SP
        .S  'YOUR'
        .B  SP
        .S  'FULL'
        .B  SP
        .S  'NAME.'
        .B  CR
        .B  CR

and here it is in an uploadable format:

Edit: because of memory conflicts (both the code and Krusader use $2400-$2700) best to load this into $3000 and higher. To do that, after starting Krusader, break into the monitor (using '$') and type 'FF:30' then resume with 'F01CR')

Code: Select all
FF:30
3000: 45 43 48 4F 01 3E 24 46 46 45 46 00 53 50 01 3E
3010: 24 41 30 00 43 52 01 3E 24 38 44 00 02 00 4C 49
3020: 46 45 01 4E 00 01 36 23 24 30 30 00 01 2E 23 53
3030: 50 00 2E 43 4C 45 41 52 01 2D 24 32 34 30 30 2C
3040: 58 00 01 2D 24 32 35 30 30 2C 58 00 01 2D 24 32
3050: 36 30 30 2C 58 00 01 2D 24 32 37 30 30 2C 58 00
3060: 01 0F 00 01 20 2E 43 4C 45 41 52 00 02 00 2E 4D
3070: 45 53 53 01 2E 4D 45 53 47 45 2C 58 00 01 22 45
3080: 43 48 4F 00 01 0F 00 01 28 23 24 33 38 00 01 20
3090: 2E 4D 45 53 53 00 02 00 2E 4E 41 4D 45 01 22 49
30A0: 4E 50 55 54 00 01 2F 23 43 52 00 01 20 2E 4E 41
30B0: 4D 45 00 01 22 52 41 4E 44 4F 4D 00 01 2A 23 24
30C0: 33 46 00 01 2C 23 24 32 30 00 01 2D 24 44 39 00
30D0: 01 26 23 24 30 30 00 02 00 2E 52 41 4E 44 01 22
30E0: 52 41 4E 44 4F 4D 00 01 2A 23 24 30 33 00 01 02
30F0: 00 01 2C 23 24 32 34 00 01 2D 24 44 31 00 01 2E
3100: 24 44 41 00 01 2D 24 44 30 00 01 2E 23 27 2A 27
3110: 00 01 2D 28 24 44 30 29 2C 59 00 01 37 24 44 39
3120: 00 01 20 2E 52 41 4E 44 00 02 00 50 52 4F 55 54
3130: 01 4E 00 01 2E 23 24 32 34 00 01 2D 24 44 39 00
3140: 01 2E 23 24 34 30 00 01 2D 24 44 38 00 01 36 23
3150: 24 32 37 00 01 2E 23 27 2D 27 00 02 00 2E 4C 4F
3160: 4F 50 33 01 2D 24 32 37 44 38 2C 58 00 01 2D 24
3170: 32 34 34 30 2C 58 00 01 15 00 01 1A 2E 4C 4F 4F
3180: 50 33 00 02 00 2E 50 52 53 43 52 01 2E 28 24 44
3190: 38 29 2C 59 00 01 22 45 43 48 4F 00 01 38 24 44
31A0: 38 00 01 20 2E 50 52 53 43 52 00 01 38 24 44 39
31B0: 00 01 2E 24 44 39 00 01 2F 23 24 32 38 00 01 20
31C0: 2E 50 52 53 43 52 00 02 00 50 41 55 53 45 01 22
31D0: 49 4E 50 55 54 00 01 26 23 24 30 30 00 02 00 44
31E0: 55 50 4C 01 4E 00 01 22 53 54 42 52 44 00 2E 44
31F0: 55 50 32 01 2E 28 24 44 30 29 2C 59 00 01 2D 28
3200: 24 44 32 29 2C 59 00 01 38 24 44 30 00 01 38 24
3210: 44 32 00 01 20 2E 44 55 50 32 00 01 38 24 44 31
3220: 00 01 38 24 44 33 00 01 2E 24 44 31 00 01 2F 23
3230: 24 32 38 00 01 20 2E 44 55 50 32 00 01 22 5A 45
3240: 52 4F 53 00 02 00 2E 4C 4F 4F 50 31 01 26 23 24
3250: 30 30 00 01 2E 28 24 44 32 29 2C 59 00 01 2F 23
3260: 27 2A 27 00 01 20 2E 49 4E 43 52 00 01 26 23 24
3270: 32 37 00 01 22 53 45 54 4D 41 50 00 01 26 23 24
3280: 30 31 00 01 22 49 4E 43 4D 41 50 00 02 00 2E 49
3290: 4E 43 52 01 38 24 44 30 00 01 38 24 44 32 00 01
32A0: 20 2E 4C 4F 4F 50 31 00 01 38 24 44 31 00 01 38
32B0: 24 44 33 00 01 2E 24 44 31 00 01 2F 23 24 32 38
32C0: 00 01 20 2E 4C 4F 4F 50 31 00 01 02 00 02 00 58
32D0: 46 52 01 36 23 24 32 37 00 2E 58 46 52 31 01 2E
32E0: 24 32 37 44 38 2C 58 00 01 2C 24 32 34 36 38 2C
32F0: 58 00 01 2D 24 32 34 36 38 2C 58 00 01 2E 24 32
3300: 34 34 30 2C 58 00 01 2C 24 32 37 42 30 2C 58 00
3310: 01 2D 24 32 37 42 30 2C 58 00 01 15 00 01 1A 2E
3320: 58 46 52 31 00 01 22 53 54 42 52 44 00 02 00 2E
3330: 4D 41 4B 45 01 26 23 24 30 30 00 01 2E 28 24 44
3340: 30 29 2C 59 00 01 2F 23 24 30 32 00 01 20 2E 4E
3350: 4F 54 32 00 01 2E 28 24 44 32 29 2C 59 00 01 20
3360: 2E 46 4F 55 4E 44 00 02 00 2E 4E 4F 54 32 01 2F
3370: 23 24 30 33 00 01 20 2E 4E 4F 54 33 00 01 2E 23
3380: 27 2A 27 00 01 20 2E 46 4F 55 4E 44 00 02 00 2E
3390: 4E 4F 54 33 01 2E 23 53 50 00 02 00 2E 46 4F 55
33A0: 4E 44 01 2D 28 24 44 30 29 2C 59 00 01 38 24 44
33B0: 30 00 01 38 24 44 32 00 01 20 2E 4D 41 4B 45 00
33C0: 01 38 24 44 31 00 01 38 24 44 33 00 01 2E 24 44
33D0: 33 00 01 2F 23 24 32 43 00 01 20 2E 4D 41 4B 45
33E0: 00 01 24 50 52 4F 55 54 00 02 00 53 54 42 52 44
33F0: 01 4E 00 01 2E 23 24 32 34 00 01 2D 24 44 31 00
3400: 01 2E 23 24 32 38 00 01 2D 24 44 33 00 01 2E 23
3410: 24 34 30 00 01 2D 24 44 30 00 01 2D 24 44 32 00
3420: 01 19 00 02 00 49 4E 50 55 54 01 4E 00 01 38 24
3430: 44 41 00 01 20 2E 4E 45 58 54 00 01 38 24 44 42
3440: 00 02 00 2E 4E 45 58 54 01 2E 24 44 30 31 31 00
3450: 01 1A 49 4E 50 55 54 00 01 2E 24 44 30 31 30 00
3460: 01 22 45 43 48 4F 00 01 19 00 02 00 53 45 54 4D
3470: 41 50 01 4E 00 01 22 49 4E 43 4D 41 50 00 01 0D
3480: 00 01 27 23 24 32 41 00 01 20 53 45 54 4D 41 50
3490: 00 01 19 00 02 00 49 4E 43 4D 41 50 01 4E 00 01
34A0: 02 00 01 2E 28 24 44 30 29 2C 59 00 01 2C 23 24
34B0: 30 31 00 01 2D 28 24 44 30 29 2C 59 00 01 25 24
34C0: 44 39 00 01 04 00 01 2E 24 44 30 00 01 30 24 44
34D0: 39 00 01 2D 24 44 36 00 01 2E 24 44 31 00 01 30
34E0: 23 24 30 30 00 01 2D 24 44 37 00 01 26 23 24 30
34F0: 30 00 01 2E 28 24 44 36 29 2C 59 00 01 02 00 01
3500: 2C 23 24 30 31 00 01 2D 28 24 44 36 29 2C 59 00
3510: 01 26 24 44 39 00 01 19 00 02 00 52 41 4E 44 4F
3520: 4D 01 4E 00 01 2E 24 44 42 00 01 2D 24 44 36 00
3530: 01 2E 24 44 41 00 01 31 00 01 32 24 44 36 00 01
3540: 31 00 01 32 24 44 36 00 01 02 00 01 2C 24 44 41
3550: 00 01 05 00 01 2E 24 44 36 00 01 2C 24 44 42 00
3560: 01 2D 24 44 42 00 01 07 00 01 2C 24 31 31 00 01
3570: 2D 24 44 41 00 01 2E 24 44 42 00 01 2C 24 33 36
3580: 00 01 2D 24 44 42 00 01 19 00 02 00 5A 45 52 4F
3590: 53 01 4E 00 01 22 53 54 42 52 44 00 01 2E 23 24
35A0: 30 30 00 01 0B 00 2E 5A 45 52 4F 01 2D 28 24 44
35B0: 30 29 2C 59 00 01 38 24 44 30 00 01 20 2E 5A 45
35C0: 52 4F 00 01 38 24 44 31 00 01 36 24 44 31 00 01
35D0: 28 23 24 32 38 00 01 20 2E 5A 45 52 4F 00 01 22
35E0: 53 54 42 52 44 00 01 19 00 02 00 4D 45 53 47 45
35F0: 01 43 43 52 00 01 43 43 52 00 01 54 27 43 4F 4E
3600: 57 41 59 27 00 01 43 24 41 37 00 01 54 27 53 27
3610: 00 01 43 53 50 00 01 54 27 47 41 4D 45 27 00 01
3620: 43 53 50 00 01 54 27 4F 46 27 00 01 43 53 50 00
3630: 01 54 27 4C 49 46 45 27 00 01 43 43 52 00 01 54
3640: 27 50 4C 45 41 53 45 27 00 01 43 53 50 00 01 54
3650: 27 54 59 50 45 27 00 01 43 53 50 00 01 54 27 59
3660: 4F 55 52 27 00 01 43 53 50 00 01 54 27 46 55 4C
3670: 4C 27 00 01 43 53 50 00 01 54 27 4E 41 4D 45 2E
3680: 27 00 01 43 43 52 00 01 43 43 52 00 00


Ken
Kallikak
 
Posts: 172
Joined: Jan Sun 29, 2006 6:42 pm
Location: Sydney


Return to Software

Who is online

Users browsing this forum: No registered users and 2 guests

cron