home *** CD-ROM | disk | FTP | other *** search
- #include ti82.h
- #include graph.h
-
-
- neighbors = APD_BUF
- mode = TEXT_MEM
- onflag = TEXT_MEM+1
- pointerx = TEXT_MEM+2
- pointery = TEXT_MEM+3
- flash = TEXT_MEM+4
- realflash = TEXT_MEM+5
- toggling = TEXT_MEM+6
- realpointers = TEXT_MEM+7
- realpointers2 = TEXT_MEM+8
- .org START_ADDR
- .db "Life 1.1 - Lite",0
- ld a,1
- ld (mode),a
- ld a,$8c
- out (2),a
-
- starteverything:
- ld hl,pointerx
- ld (hl),7
- inc hl
- ld (hl),7
- ld hl,realpointers
- ld (hl),45
- inc hl
- ld (hl),29
- ld a,255
- ld hl,GRAPH_MEM
- ld (hl),a
- ld de,GRAPH_MEM+1
- ld bc,$2ff
- ldir
- call cleararray
- jp gotocursor
-
-
- doitagain:
- call makeitappear
- ld hl,mode
- ld a,(hl)
- or a
- jp nz,steploop
- call GET_KEY
- cp $37
- ret z
- cp $30
- jp z,gotostep
- cp $38
- jp z, gotocursor
- cp $28
- call z,cleararray
-
-
-
- update: ld e,0
- ld hl,neighbors
- examineloop:
- ld a,(hl)
- or a
- jp m,alivenow
- deadnow:
- ld b,7
- and b
- cp 3
- jr z,birth
- jr die
-
- birth:
- set 6,(hl)
- jr endofexamine
- alivenow:
- ld b,7
- and b
- cp 3
- jr z,birth
- cp 2
- jr z,birth
- die: res 6,(hl)
-
- endofexamine:
- inc hl
- inc e
- ld a,e
- or a
- jr nz,examineloop
-
-
-
- neighborly:
- ld e,0
- ld ix,neighbors
- neighborloop1:
- ld a,(ix)
- ld b,%11000000
- and b
- cp 64
- jr z,realbirth
- cp 128
- jr z,realdeath
- inc e
- jp z,doitagain
- inc ix
- jr neighborloop1
-
- realbirth:
- set 7,(ix)
- ld c,1
- jr updateneighbors
- realdeath:
- res 7,(ix)
- ld c,255
- updateneighbors:
- ld b,e
- ld a,e
- and %11110000
- srl a
- srl a
- srl a
- srl a
- ld d,a
- ld a,e
- and %00001111
- ld e,a
-
- letsgo:
-
-
- ld a,d
- or a
- jr z,midleft
-
- ld a,e
- or a
- jr z,topmid
-
- ld a,(ix-17)
- add a,c
- ld (ix-17),a
-
- topmid:
- ld a,(ix-16)
- add a,c
- ld (ix-16),a
-
- ld a,e
- cp 15
- jr z,midleft
-
- ld a,(ix-15)
- add a,c
- ld (ix-15),a
- midleft:
- ld a,e
- or a
- jr z,midright
-
- ld a,(ix-1)
- add a,c
- ld (ix-1),a
- midright:
-
- ld a,e
- cp 15
- jr z,botleft
-
- ld a,(ix+1)
- add a,c
- ld (ix+1),a
- botleft:
- ld a,d
- cp 15
- jr z,doneupdating
-
- ld a,e
- or a
- jr z,botmid
-
- ld a,(ix+15)
- add a,c
- ld (ix+15),a
-
- botmid:
- ld a,(ix+16)
- add a,c
- ld (ix+16),a
-
- ld a,e
- cp 15
- jr z,doneupdating
-
- ld a,(ix+17)
- add a,c
- ld (ix+17),a
-
-
- doneupdating:
- ld a,(toggling)
- or a
- jr nz,returnfromtoggling
- ld e,b
- inc ix
- inc e
- jp z,doitagain
- jp neighborloop1
- returnfromtoggling:
- xor a
- ld (toggling),a
- pop bc
- jp updatescreen
-
-
-
-
-
-
-
- step:
- steploop:
- call GET_KEY
- cp $36
- jp z,update
- cp $37
- ret z
- cp $30
- jr z,gotorun
- cp $38
- jr z,gotocursor
- cp $28
- call z,cleararray
- jr steploop
-
- gotostep:
- ld hl,mode
- ld a,1
- ld (hl),a
- jr step
- gotorun:
- ld hl,mode
- xor a
- ld (hl),a
- jp doitagain
-
-
-
- gotocursor:
- xor a
- ld (flash),a
- ld (realflash),a
- inc a
- ld (onflag),a
- ld (mode),a
- ld hl,realpointers
- ld b,(hl)
- inc hl
- ld c,(hl)
-
-
-
- updatecursor:
- push bc
- call disppix
- ROM_CALL(DISP_GRAPH)
- pop bc
- ewait:
- ld hl,flash
- inc (hl)
- jr nz,noflip
- flip:
- ld hl,realflash
- inc (hl)
- ld a,(hl)
- cp 30
- jr nz,noflip
-
- xor a
- ld (hl),a
- ld hl,onflag
- ld a,1
- xor (hl)
- ld (hl),a
- jr updatecursor
- noflip:
- call GET_KEY
- cp $01
- jr z,down
- cp $02
- jr z,left
- cp $03
- jr z,right
- cp $04
- jr z,up
- cp $36
- jr z,toggle
- cp $38
- call z, pushpointer
- jp z,doitagain
- cp $28
- call z,cleararray
- cp $30
- call z,pushpointer
- jp z,gotorun
- cp $37
- ret z
- jr ewait
- up: ld hl,pointery
- ld d,(hl)
- ld a,14
- cp d
- jr c,ewait
- inc (hl)
- inc c
- inc c
- inc c
- jr updatescreen
- left: ld hl,pointerx
- ld a,(hl)
- or a
- jr z,ewait
- dec (hl)
- dec b
- dec b
- dec b
- jr updatescreen
- right: ld hl,pointerx
- ld d,(hl)
- ld a,14
- cp d
- jr c,ewait
- inc (hl)
- inc b
- inc b
- inc b
- jr updatescreen
-
- down: ld hl,pointery
- ld a,(hl)
- or a
- jr z,ewait
- dec (hl)
- dec c
- dec c
- dec c
- updatescreen:
- push bc
- call makeitappear
- pop bc
- jp ewait
- toggle:
- push bc
- ld hl,pointerx
- ld b,(hl)
- inc hl
- ld c,(hl)
- ld e,b
- ld d,c
- ld a,c
- sla a
- sla a
- sla a
- sla a
- add a,b
- ld c,a
- ld b,0
- ld ix,neighbors
- add ix,bc
- ld hl,toggling
- inc (hl)
- ld a,(ix)
- or a
- jp m,toggledeath
- ld c,1
- set 6,(ix)
- set 7,(ix)
- jp letsgo
- toggledeath:
- ld c,255
- res 6,(ix)
- res 7,(ix)
- jp letsgo
-
-
-
- ;**************************subroutines
-
- point:
- ld a,(onflag)
- or a
- jr z,Point_off
- Point_on:
- push hl
- push bc ;save bc
- push de ;save de
- call FIND_PIXEL ;get offset of pixel
- ld de, $88B8 ;add with offset
- add hl, de ;for the graph mem
- or (hl) ;set bit
- ld (hl), a ;load back
- pop de ;restore de
- pop bc ;restore bc
- pop hl
- ret
- Point_off:
- push hl
- push bc
- push de
- call FIND_PIXEL
- ld de,$88B8
- add hl,de
- ld b,255
- xor b
- and (hl)
- ld (hl),a
- pop de
- pop bc
- pop hl
- ret
-
-
- disppix:
-
- inc c
- inc c
- call point
- dec c
- call point
- dec c
- call point
- inc b
- call point
- inc c
- call point
- inc c
- call point
- inc b
- call point
- dec c
- call point
- dec c
- call point
- inc b
- ret
-
-
- makeitappear:
- ld h,16 ;h=ycounter
- ld l,16 ;l=xcounter
- ld b,24 ;xcoordinate
- ld c,8 ;ycoordinate
- ld de,neighbors-1 ;address to start with
- xloop: ;move x coordinate
- inc de ;move to next spot in array
- ld a,(de) ;load alive at x,y
- or a ;check flags
- jp m,onpix ;if not alive,off
- xor a
- ld (onflag),a
- call disppix
- jr nodraw
- onpix:
- ld a,1
- ld (onflag),a
- call disppix
-
-
- nodraw: dec l ;decrement xcounter
- ld a,l ;
- or a ;check flags
- jr nz,xloop ;not zero - do again
- ld l,16 ;reload with 16
- inc c
- inc c ;move ycoordinate
- inc c
- ld b,24 ;move xcoordinate
- dec h ;decrement ycounter
- ld a,h ;check flags
- or a
- jr nz,xloop ;again
- ROM_CALL(DISP_GRAPH)
- ret
-
-
- cleararray:
- push bc
- ld hl,neighbors
- ld (hl),0
- ld de,neighbors+1
- ld bc,255
- ldir ;clear everything
- call makeitappear
- pop bc
- ret
- pushpointer:
- push af
- ld hl,realpointers
- ld (hl),b
- inc hl
- ld (hl),c
- pop af
- ret
- .end
-