10 REM HexLife - Machine Code version 20 REM by M.Bobrowski for 8-BS 30 : 40 PROCassemble 50 CALL&900:END 60 : 70 DEF PROCassemble 80 oswrch=&FFEE:osword=&FFF1 90 osbyte=&FFF4 100 left=&70:right=&72:down=&74:up=&76 110 x=&78:y=&7A:colour=&7C:nextcol=&7D 120 count=&7E:gen=&7F:px=&80:py=&82 130 pix=&84:col=&85:bx=&86:by=&88 140 : 150 FOR pass=0 TO 2 STEP 2 160 P%=&900 170 [OPT pass 180 .init 190 LDA #0:STA &06:LDA #&30:STA &07 200 LDY #0 210 .initloop 220 LDA initdata,Y 230 JSR oswrch 240 INY:CPY #30:BNE initloop 250 : 260 \set variables for design 270 LDA #624 MOD 256:STA px 280 LDA #624 DIV 256:STA px+1 290 LDX #3 300 .outer 310 TXA:PHA 320 LDA #496 MOD 256:STA py 330 LDA #496 DIV 256:STA py+1 340 LDY #3 350 .inner 360 LDA #3:STA col:JSR plot 370 CLC:LDA py:ADC #16:STA py 380 LDA py+1:ADC #0:STA py+1 390 DEY:BNE inner 400 CLC:LDA px:ADC #16:STA px 410 LDA px+1:ADC #0:STA px+1 420 PLA:TAX 430 DEX:BNE outer 440 \end of initial design 450 : 460 \set initial values for main loop 470 LDA #576 MOD 256:STA left:STA up 480 LDA #576 DIV 256:STA left+1:STA up+1 490 LDA #704 MOD 256:STA right 500 LDA #704 DIV 256:STA right+1 510 LDA #448 MOD 256:STA down 520 LDA #448 DIV 256:STA down+1 530 LDA #0:STA gen:STA colour 540 : 550 .main 560 INC gen:LDA gen:CMP #15:BEQ exit 570 JSR pgen 580 INC colour:LDA colour:CMP #3:BNE notblack 590 LDA #0:STA colour 600 .notblack 610 LDA colour:STA nextcol:INC nextcol 620 JSR subroutine 630 SEC:LDA left:SBC #32:STA left 640 LDA left+1:SBC #0:STA left+1 650 CLC:LDA right:ADC #32:STA right 660 LDA right+1:ADC #0:STA right+1 670 CLC:LDA up:ADC #32:STA up 680 LDA up+1:ADC #0:STA up+1 690 SEC:LDA down:SBC #32:STA down 700 LDA down+1:SBC #0:STA down+1 710 JMP main 720 : 730 .exit 740 LDX #6 750 .exitloop 760 LDA exitdata,X:JSR oswrch 770 DEX:BPL exitloop 780 RTS 790 : 800 .subroutine 810 LDA left:STA x:LDA left+1:STA x+1 820 .xloop 830 LDA down:STA y:LDA down+1:STA y+1 840 .yloop 850 LDA &FF:ROL A:BCC notesc 860 LDA #&7E:JSR osbyte 870 BRK:EQUB 17:EQUS "Escape":BRK 880 .notesc 890 LDA #0:STA count 900 \x-32 910 SEC:LDA x:SBC #32:STA px 920 LDA x+1:SBC #0:STA px+1 930 \y-16 940 SEC:LDA y:SBC #16:STA py 950 LDA y+1:SBC #0:STA py+1 960 JSR readpixel:JSR examine 970 \y+16 980 CLC:LDA y:ADC #16:STA py 990 LDA y+1:ADC #0:STA py+1 1000 JSR readpixel:JSR examine 1010 \x+32 1020 CLC:LDA x:ADC #32:STA px 1030 LDA x+1:ADC #0:STA px+1 1040 \y-16 1050 SEC:LDA y:SBC #16:STA py 1060 LDA y+1:SBC #0:STA py+1 1070 JSR readpixel:JSR examine 1080 \y+16 1090 CLC:LDA y:ADC #16:STA py 1100 LDA y+1:ADC #0:STA py+1 1110 JSR readpixel:JSR examine 1120 \x 1130 LDA x:STA px:LDA x+1:STA px+1 1140 \y-32 1150 SEC:LDA y:SBC #32:STA py 1160 LDA y+1:SBC #0:STA py+1 1170 JSR readpixel:JSR examine 1180 \y+32 1190 CLC:LDA y:ADC #32:STA py 1200 LDA y+1:ADC #0:STA py+1 1210 JSR readpixel:JSR examine 1220 \end of inner loops 1230 : 1240 \point(x,y) 1250 LDA y:STA py:LDA y+1:STA py+1 1260 JSR readpixel 1270 CMP nextcol:BEQ black 1280 LDA count:CMP #1:BEQ notblack2 1290 CMP #3:BEQ notblack2 1300 CMP #5:BEQ notblack2 1310 JMP notplot 1320 .notblack2 1330 LDA pix:CMP #0:BNE notplot 1340 LDA nextcol:CMP #4:BEQ black 1350 STA col:JMP coord 1360 .black 1370 LDA #0:STA col 1380 .coord 1390 LDA x:STA px:LDA x+1:STA px+1 1400 LDA y:STA py:LDA y+1:STA py+1 1410 JSR plot 1420 .notplot 1430 \check yloop condition 1440 CLC:LDA y:ADC #16:STA y 1450 LDA y+1:ADC #0:STA y+1 1460 CMP up+1:BNE notyend 1470 LDA y:CMP up:BEQ yloopend 1480 .notyend:JMP yloop 1490 .yloopend 1500 CLC:LDA x:ADC #16:STA x 1510 LDA x+1:ADC #0:STA x+1 1520 LDA x:CMP right:BNE notequal:CLC 1530 .notequal 1540 LDA x+1:SBC right+1:BCS xloopend 1550 JMP xloop 1560 .xloopend 1570 RTS 1580 : 1590 .readpixel 1600 LDX #px:LDY #0 1610 LDA #9:JSR osword 1620 LDA pix 1630 RTS 1640 : 1650 .examine 1660 CMP #0:BEQ endk 1670 CMP nextcol:BEQ endk 1680 INC count 1690 .endk 1700 RTS 1710 : 1720 .plot 1730 LDA #18:JSR oswrch:LDA #0:JSR oswrch:LDA col:JSR oswrch 1740 LDA #25:JSR oswrch:LDA #4:JSR oswrch 1750 SEC:LDA px:SBC #4:STA bx 1760 LDA px+1:SBC #0:STA bx+1 1770 LDA bx:JSR oswrch:LDA bx+1:JSR oswrch 1780 SEC:LDA py:SBC #4:STA by 1790 LDA py+1:SBC #0:STA by+1 1800 LDA by:JSR oswrch:LDA by+1:JSR oswrch 1810 LDX #0 1820 .plotloop 1830 LDA plotdata,X:JSR oswrch 1840 INX:CPX #18:BNE plotloop 1850 RTS 1860 : 1870 .pgen 1880 PHA:LDA #31:JSR oswrch:LDA #0:JSR oswrch 1890 LDA #31:JSR oswrch:PLA:CMP #10:BCC digit 1900 LDA #49:JSR oswrch:SEC:LDA gen:SBC #10 1910 .digit 1920 CLC:ADC #48:JMP oswrch 1930 : 1940 .initdata 1950 EQUB 22:EQUB 1 1960 EQUW 23:EQUW 8202:EQUW 0:EQUD 0 1970 EQUB 19:EQUB 1:EQUW 3:EQUW 0 1980 EQUB 19:EQUB 2:EQUW 5:EQUW 0 1990 EQUB 19:EQUB 3:EQUW 6:EQUW 0 2000 .plotdata 2010 EQUB 25:EQUB 0:EQUW 8:EQUW 0 2020 EQUB 25:EQUB 81:EQUW -8:EQUW 8 2030 EQUB 25:EQUB 81:EQUW 8:EQUW 0 2040 .exitdata 2050 EQUB 7:EQUB 30:EQUB 32:EQUB 32 2060 EQUB 31:EQUB 0:EQUB 31 2070 : 2080 ] 2090 NEXT:ENDPROC