Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

KFest 2008 (code/demo)

57 views
Skip to first unread message

Dagen Brock

unread,
Apr 2, 2013, 4:09:48 PM4/2/13
to
Some of you may have seen a demo I put out a few months ago that I did for KansasFest 2013. It was really just an excuse for me to port my flame demo to 65c02 instructions and then I added some more little routines just to make it more of a demo.

It actually wasn't the first time I thought I should make a demo for KansasFest. Back in 2008, I was thinking about playing around with double lo-res graphics in BASIC, so that's what I did.

As a kid, I never really tried to learn to program properly in BASIC. I just wrote lots of crazy procedural spaghetti code. So for this project, I tried to play around with some language features like multi-dimensional arrays and data statements. The thing I found most annoying during the prototyping of these graphics routines was line numbers in BASIC. This led me to develop a meta language (more of a pre-processor) in PHP that "compiled" down to BASIC. It allowed me to add some features like named functions, subroutines and variables as well as integrate a little toolchain for asset pipelining.

I made some Double Lo-Res routines to display images converted by my PHP tools, but I quickly found that it ate up a bunch of space to have these DATA statements in BASIC. I decided to make a simple (and very poor) RLE compression routine to save some space. It would have been trivial to achieve much better compression, but I had already spent too much time on this plaything to invest more time.

Anyway, I decided to make the theme about KansasFest and I posted a disk image to the a2central irc channel and it evoked many yawns. I had forgotten about it for a while, but I figure maybe someone out there is bored and would like to see what this does. I'd post a disk image, but maybe it's more fun to get the code on your system yourself, kind of like the old magazine days. Of course it could all get mangled horribly and fail to run.

(If you really want to see it, and really can't or don't know how to get it to your computer/emulator, just send me an email and I'll send you a disk image. It's really nothing amazing.)


KFest 2008 by Dagen Brock

---- vvvv ---- CUT HERE ---- vvvv ----

10 PR#3
20 POKE 49232,0:POKE 49246,0:POKE 49165,0
25 NOTRACE
30 VC = PEEK (49186)
40 BC = INT (PEEK (49204)): BC = BC - INT(BC/16) *16
REM INSTALL BORDERCOLOR CODE
60 POKE 768,169 : POKE 769,15 : POKE 770,28 : POKE 771,52 : POKE 772,192 : POKE 773,173
70 POKE 774,12 : POKE 775,03 : POKE 776,12 : POKE 777,52 : POKE 778,192 : POKE 779,96
80 POKE 780,0 : CALL 768

REM POKE 49186, VC
REM 10 HOME
REM 20 PRINT CHR$(18) : POKE 49232,0 : POKE 49246,0 : POKE 49165,0
100 GOSUB 40100
REM GOSUB clrgr()
150 GOSUB 40000
REM GOSUB renderimg()
200 GOSUB 40200
REM GOSUB pause()
REM adhoc line scroll/draw
300 FOR Y = 1 TO 8 : COLOR = 0 : CALL -912 : HLIN 0,79 AT 46 : HLIN 0,79 AT 47
310 FOR X = 0 TO 79 : READ C : COLOR = C : PLOT X,46 : NEXT X
320 FOR X = 0 TO 79 : READ C : COLOR = C : PLOT X,47 : NEXT X
330 NEXT Y
350 GOSUB 40300
REM GOSUB blackscroll()
REM --------------------------------------------------------------------------
35000 END
REM --------------------------------------------renderimg()
40000 FOR Y = 0 TO 47 : FOR X = 0 TO 79 : READ C : COLOR = C : PLOT X,Y : NEXT : NEXT
40010 RETURN
REM --------------------------------------------clrgr()
40100 COLOR = 0 : FOR Y = 0 TO 47 : HLIN 0,79 AT Y : NEXT
40110 RETURN
REM --------------------------------------------pause()
40200 FOR T = 1 TO 5000 : NEXT
40210 RETURN
REM --------------------------------------------blackscroll()
40300 COLOR = 0
40310 FOR Y = 1 TO 24 : CALL -912 : HLIN 0,79 AT 46 : HLIN 0,79 AT 47 : FOR T = 1 TO 250 : NEXT : NEXT
40320 RETURN
500 END
REM ----------------------------------- starinit()
500 TEXT : HOME : POKE 49186,240 : SN = 9 : MC = 0 : ST = 0

REM -- make the actual stars
510 DIM SX(SN) : DIM SY(SN) : FOR I = 0 TO SN : SX(I) = INT ( RND (1) * 79) + 1 : SY(I) = INT ( RND (1) * 23) + 1 : NEXT


REM ----------------------------------- MAIN
600 GOSUB 5600
610 IF DR = 1 THEN GOSUB 5000
REM GOSUB drawtext()
620 IF DR = 2 THEN GOSUB 5500
REM GOSUB cleartext()
630 MC = MC + 1 : IF MC < 75 THEN GOTO 600
640 MC = 0 : ST = ST + 1
700 IF ST = 1 THEN GOSUB 30800
710 IF ST = 2 THEN GOSUB 30950
720 IF ST = 3 THEN GOSUB 30850
730 IF ST = 4 THEN GOSUB 30950
740 IF ST = 5 THEN GOSUB 30900
750 IF ST = 6 THEN GOSUB 30950
760 IF ST = 7 THEN GOTO 1000
780 GOTO 600

1000 GOSUB 31000
REM GOSUB vertscroll()
1100 GOTO 6000

REM ----------------------------------- drawtext()
5000 HTAB OF + SP : VTAB 11 : W= PEEK ( - 16336 ) : PRINT MID$ (S$, SP, 1) : W= PEEK ( - 16336 ) : SP = SP + 1 : IF SP < L THEN RETURN
5020 DR = 0 : RETURN

REM ----------------------------------- cleartext()
5500 HTAB OF + SP : VTAB 11 : W= PEEK ( - 16336 ) : PRINT " " : W= PEEK ( - 16336 ): SP = SP + 1 : IF SP < L THEN RETURN
5520 DR = 0 : RETURN




REM ----------------------------------- UPDATESTARS
5600 FOR Q = 0 TO SN
5610 IF SX(Q) = 0 THEN GOSUB 5700
5620 HTAB SX(Q) : VTAB SY(Q) : PRINT ". " : SX(Q) = SX(Q) - 1 : NEXT
5650 RETURN

REM ----------------------------------- FLIPSTAR
5700 HTAB 1 : VTAB SY(Q) : PRINT " " : SX(Q) = 79 : SY(Q) = INT ( RND (1) * 22) + 1
5710 IF SY(Q) = 11 THEN SY(Q) = 10
5720 RETURN

6000 REM part3

29999 END




REM ----------------------------------- INITTEXT1
30800 S$ = "Remember when personal computers were . . . personal?"
30810 L = LEN (S$) + 1 : OF = (80 - L) / 2 : SP = 1 : DR = 1
30820 RETURN

REM ----------------------------------- INITTEXT2
30850 S$ = "With the Apple II you could create anything you desired."
30860 L = LEN (S$) + 1 : OF = (80 - L) / 2 : SP = 1 : DR = 1
30870 RETURN

REM ----------------------------------- INITTEXT3
30900 S$ = "Celebrate over 30 years of living the dream."
30910 L = LEN (S$) + 1 : OF = (80 - L) / 2 : SP = 1 : DR = 1
30920 RETURN

REM ----------------------------------- INITCLEAR
30950 SP = 1 : DR = 2
30960 RETURN

REM ----------------------------------- VERTICAL STARLOOP MAIN
31000 GOSUB 31100 : GOSUB 31200 : GOSUB 31300 : POKE 49186, 160 : GOSUB 31300 : POKE 49186, 80 : GOSUB 31300 : GOSUB 31200
31070 FOR I = 1 TO 24 : CALL -912 : NEXT
31090 RETURN

REM ----------------------------------- VERTICAL STARLOOP SLOW
31100 FOR I = 1 TO 70 : HTAB INT ( RND (1) * 79) + 1: VTAB 23 : PRINT "." : CALL -912 : FOR J = 0 TO 240 - (I * 4) : NEXT : NEXT
31110 RETURN

REM ----------------------------------- VERTICAL STARLOOP NORMAL
31200 FOR I = 1 TO 80 : HTAB INT ( RND (1) * 79) + 1: VTAB 23 : PRINT "." : CALL -912 : NEXT
31210 RETURN

REM ----------------------------------- VERTICAL STARLOOP WARP
31300 FOR I = 1 TO 80 : HTAB INT ( RND (1) * 79) + 1: VTAB 23 : PRINT "." : CALL -912 : HTAB INT ( RND (1) * 79) + 1: VTAB 23 : PRINT "|" : CALL -912 : NEXT
31310 RETURN


6000 POKE 49232,0 : POKE 49246,0 : POKE 49165,0 : COLOR = 0
6030 FOR Y = 0 TO 47 : HLIN 0, 79 AT Y : NEXT Y

REM ----------------------------------drawscore()
6040 COLOR = 15 : VLIN 0,4 AT 19 : VLIN 0,4 AT 21 : VLIN 0,4 AT 60 : PLOT 20,4 : PLOT 20,0

REM BX(Number, Setpos)
6100 DIM BX(4,4) : DIM BY(4,4) : DIM BH(4) : DIM BV(4) : PL = 23 : PR = 23
6110 BX(0,0) = 40 : BY(0,0) = 23 : BV(0) = 0 : BH(0) = 0
6160 VLIN PL - 3 , PL + 3 AT 2 : VLIN PL - 3 , PL + 3 AT 77
6170 MC = 0

REM ----------------------------------pongmain()
6200 X = BX(0,0) : Y = BY(0,0)
6210 MC = MC + 1
6220 IF MC = 350 GOTO 6900
REM GOTO transition()

REM ----------------------------------vertloop()
6300 IF BV(0) THEN GOTO 6400
REM GOTO balldown()
REM ----------------------------------ballup()
6310 Y = Y - 1
6320 IF Y = 6 THEN BV(0) = 1
6330 GOTO 6500
REM GOTO horizloop()

REM ----------------------------------balldown()
6400 Y = Y + 1
6410 IF Y = 47 THEN BV(0) = 0

REM --------fallthru




REM ----------------------------------horizloop()
6500 IF BH(0) THEN GOTO 6700
REM GOTO ballright()
REM ----------------------------------ballleft()
6510 X = X - 1
6520 IF X = 3 THEN BH(0) = 1
6530 IF X = 3 THEN GOSUB 7600
REM GOSUB beep()

6540 GOSUB 7500
REM GOSUB updateball()
6550 IF Y < PL GOTO 6600
REM GOTO padLup()
REM ----------------------------------padLdn()
6560 IF PL + 4 = 47 GOTO 6200
REM GOTO pongloop()
6570 PL = PL + 1 : COLOR = 15 : VLIN PL - 3 , PL + 3 AT 2 : COLOR = 0 : PLOT 2, PL - 4
6580 GOTO 6200
REM GOTO pongloop()

REM ----------------------------------padLup()
6600 IF PL - 4 = 0 GOTO 6200
REM GOTO pongloop()
6610 PL = PL - 1 : COLOR = 15 : VLIN PL - 3 , PL + 3 AT 2 : COLOR = 0 : PLOT 2, PL + 4
6620 GOTO 6200
REM GOTO pongloop()


REM ----------------------------------ballright()
6700 X = X + 1
6710 IF X = 76 THEN BH(0) = 0
6720 IF X = 76 THEN GOSUB 7600
REM GOSUB beep()
6730 GOSUB 7500
REM GOSUB updateball
6740 IF Y < PR GOTO 6800
REM GOTO padRup()
REM ----------------------------------padRdn()
6750 IF PR + 4 = 47 GOTO 6200
REM GOTO pongloop()
6760 PR = PR + 1 : COLOR = 15 : VLIN PR - 3 , PR + 3 AT 77 : COLOR = 0 : PLOT 77, PR - 4
6770 GOTO 6200
REM GOTO pongloop()

REM ----------------------------------padRup()
6800 IF PR - 4 = 0 GOTO 6200
REM GOTO pongloop()
6810 PR = PR - 1 : COLOR = 15 : VLIN PR - 3 , PR + 3 AT 77 : COLOR = 0 : PLOT 77, PR + 4
6820 GOTO 6200
REM GOTO pongloop()

REM ----------------------------------transition()
6900 FOR Y = 0 TO 7
6910 COLOR = 5 : GOSUB 6970
6920 COLOR = 0 : GOSUB 6970
6930 COLOR = INT ( RND (1) * 14) + 1
6940 PLOT BX(0,0) , BY(0,0)
6950 NEXT Y
6960 GOTO 9000
REM GOTO sparkinit()
6970 FOR W = 0 TO 47 STEP 8 : HLIN 0,79 AT Y + W : NEXT W
6980 RETURN


REM ----------------------------------updateball()
7500 COLOR = 0
7510 PLOT BX(0,0) , BY(0,0)
7520 COLOR = 15
7530 PLOT X,Y
7540 BX(0,0) = X : BY(0,0) = Y
7550 RETURN

REM ----------------------------------beep()
7600 FOR P = 1 TO 10: W = PEEK (-16336) : NEXT P
7610 RETURN





REM ----------------------------------sparkinit()
9000 FOR N = 1 TO 3
9010 BX(N,0) = INT (RND (1) * 70 + 5) : BY(N,0) = INT (RND (1) * 40 + 4)
9020 BH(N) = INT (RND (1) * 2) : BV(N) = INT (RND (1) * 2)
9030 NEXT N
9040 FOR N = 0 TO 3 : FOR S = 1 TO 3
9050 BX(N,S) = BX(N,S-1) : BY(N,S) = BY(N,S-1)
9060 NEXT S : NEXT N

9080 MC = 0
REM ----------------------------------sparkloop()
10000 MC = MC + 1
10010 IF MC = 150 THEN GOTO 12000

10050 COLOR = 0
10100 FOR N = 0 TO 3
10110 GOSUB 11000
REM GOSUB sparkmover()
10120 NEXT N

REM plot routines
10400 COLOR = 15 : PLOT BX(0,0), BY(0,0)
10410 COLOR = 10 : PLOT BX(0,1), BY(0,1)
10420 COLOR = 5 : PLOT BX(0,2), BY(0,2)

10500 COLOR = 13 : PLOT BX(1,0), BY(1,0)
10510 COLOR = 9 : PLOT BX(1,1), BY(1,1)
10520 COLOR = 8 : PLOT BX(1,2), BY(1,2)

10600 COLOR = 7 : PLOT BX(2,0), BY(2,0)
10610 COLOR = 6 : PLOT BX(2,1), BY(2,1)
10620 COLOR = 2 : PLOT BX(2,2), BY(2,2)

10700 COLOR = 14 : PLOT BX(3,0), BY(3,0)
10710 COLOR = 12 : PLOT BX(3,1), BY(3,1)
10720 COLOR = 4 : PLOT BX(3,2), BY(3,2)

10800 GOTO 10000


REM ----------------------------------sparkmover()
11000 PLOT BX(N,2) , BY(N,2)
11010 BX(N,2) = BX(N,1) : BY(N,2) = BY(N,1)
11020 BX(N,1) = BX(N,0) : BY(N,1) = BY(N,0)
11030 X = BX(N,0) : Y = BY(N,0)


11090 IF BH(N) THEN GOTO 11200
REM GOTO sparkright()

REM ----------------------------------sparkleft()
11100 X = X - 1
11110 IF X = 0 THEN BH(N) = 1
11120 GOTO 11300
REM GOTO sparkvert()
REM ----------------------------------sparkright()
11200 X = X + 1
11210 IF X = 79 THEN BH(N) = 0
REM fallthru

REM ----------------------------------sparkvert()
11300 IF BV(N) THEN GOTO 11400
REM GOTO sparkdown()
11310 Y = Y - 1
11320 IF Y = 0 THEN BV(N) = 1
11330 GOTO 11500
REM GOTO sparkfin()
11400 Y = Y + 1
11410 IF Y = 47 THEN BV(N) = 0
REM fallthru
11500 BX(N,0) = X : BY(N,0) = Y
11510 RETURN



12000 end


















12000 GOSUB 40100

REM GOSUB clrgr()



12010 GOSUB 40000

REM GOSUB renderimg()



12020 GOSUB 40200

REM GOSUB pause()



12030 TEXT
12040 HOME
12050 PRINT "Register online ..."
12060 VTAB 10: HTAB 20 : PRINT "http://kfest.org/";
12070 VTAB 18
12080 POKE 780,BC : CALL 768
12090 POKE 49186, VC


12100 END

60000 REM by Dagen Brock
60010 REM April 11, 2008
60020 REM 100% Basic
60030 REM (the asm for doing border color doesn't
60040 REM count since there's no other way to do TSB/TRB)
60050 REM Yes, the colored dot section could have been
60060 REM faster if I didn't actually move values in the
60070 REM array and instead used a round robin pointer
60080 REM but i've already spent too much time on this.
60090 REM -DGB

60100 REM - - - - // Infinitum - - -





50000 DATA 9,1,8,8,8,1,1,9,1,8,1,1,8,1,8,1,8,1,9,1,1,1,8,8,8,1,8,1,8,8,8,8,8,1,8,1,8,1,8,1,8,8,1,8,1,1,1,8,8,8,0,8,8,0,8,8,8,8,8,8,8
50005 DATA 1,8,8,8,8,1,8,8,8,1,8,9,8,1,8,8,9,9,8,9,8,8,9,8,1,9,1,8,9,8,9,1,8,9,8,9,9,1,8,1,8,8,1,1,8,1,8,8,1,8,1,1,1,8,1,8,1,1,8,1,1
50010 DATA 8,1,8,1,0,8,5,8,10,10,8,8,8,5,10,8,5,8,8,0,8,8,8,8,5,8,1,8,8,8,8,1,8,8,9,1,9,8,1,8,1,9,8,1,8,8,8,8,9,1,8,8,8,8,1,9,9,1,1,1,8
50015 DATA 8,8,8,1,1,8,1,1,8,8,8,1,0,1,0,1,8,8,1,8,1,8,0,8,10,10,15,15,15,10,10,15,15,15,15,15,10,8,8,10,10,15,15,10,10,5,8,0,8,8,9,1,8,1,8,1,1,8,9,8,8
50020 DATA 1,9,8,9,8,9,1,8,9,8,8,9,9,1,8,8,8,8,1,1,1,1,1,8,8,1,8,1,1,8,8,1,8,8,8,1,1,8,8,1,0,8,10,15,15,15,10,15,15,15,15,10,5,10,10,15,10,10,15,15,10
50025 DATA 15,15,15,10,10,8,8,8,1,9,1,9,8,1,9,1,8,9,8,8,8,1,8,1,8,8,1,8,1,1,9,9,9,1,1,8,1,1,8,1,8,1,8,8,8,1,8,0,1,1,8,0,8,8,8,0,1,0,0,1,5
50030 DATA 10,15,5,0,0,10,15,10,0,0,0,0,0,10,15,15,15,0,0,0,5,10,15,15,10,8,0,8,1,8,1,8,1,9,9,1,8,1,8,1,8,1,8,1,8,9,8,1,9,8,1,1,9,8,1,1,8,8,1,8,1
50035 DATA 8,8,1,8,8,1,8,1,0,8,8,1,1,0,0,0,8,0,5,10,15,5,0,0,10,15,5,0,0,0,0,0,0,15,15,5,0,0,0,0,0,5,15,15,5,8,1,8,1,8,1,1,8,8,1,8,1,8,1,8,8
50040 DATA 1,8,1,8,1,9,8,8,9,1,9,9,1,8,1,8,8,1,8,1,8,0,1,8,1,8,1,1,1,0,0,0,0,8,5,10,8,0,10,15,5,0,0,10,15,0,0,0,5,0,0,0,10,15,5,0,0,0,0,0,0
50045 DATA 5,15,10,5,0,1,8,8,8,9,1,1,8,1,8,1,8,1,8,1,1,9,1,8,8,8,9,1,8,1,1,8,1,1,8,1,1,1,8,1,8,8,0,8,1,1,0,1,0,8,5,8,10,15,15,10,5,8,15,10,0
50050 DATA 0,10,10,0,0,0,15,5,0,0,5,15,10,0,0,0,5,0,0,0,10,15,10,0,8,1,1,8,1,9,1,8,1,8,1,8,8,1,1,8,1,8,1,8,1,8,1,8,1,1,1,8,8,1,0,8,1,8,1,0,8
50055 DATA 0,8,0,8,0,0,0,5,10,15,15,10,15,15,10,15,15,15,10,0,10,15,0,0,0,15,10,0,0,0,15,10,0,0,0,15,10,0,0,5,15,10,8,0,8,8,1,9,9,8,1,8,1,8,9,1,9,8,8,8,1
50060 DATA 8,8,1,8,1,8,1,8,8,8,1,8,1,1,1,8,1,0,1,0,8,0,0,0,0,5,10,15,15,5,0,10,15,15,15,10,15,10,0,15,15,0,0,0,10,10,0,0,0,15,15,0,0,0,15,15,0,0,0,15,15
50065 DATA 5,0,8,1,9,8,9,1,8,8,8,8,1,9,1,8,8,9,8,1,8,8,1,1,8,8,1,1,8,8,0,8,1,8,0,8,0,1,0,0,0,5,5,5,5,10,15,5,0,0,5,15,10,0,0,10,5,0,15,15,5
50070 DATA 0,0,10,15,0,0,0,10,15,5,0,0,10,15,0,0,0,10,15,8,0,0,8,1,8,1,8,1,1,8,1,8,1,8,1,8,1,8,8,1,1,9,1,9,1,8,8,8,1,8,1,1,0,1,0,1,0,0,5,5,10
50075 DATA 10,15,10,10,15,5,0,0,0,5,0,0,0,10,10,10,15,15,5,0,0,5,15,5,0,0,10,15,15,5,0,0,5,0,0,0,10,15,5,5,0,1,8,1,9,8,1,8,9,8,1,9,9,9,1,8,1,8,8,8,1
50080 DATA 1,8,1,8,1,8,8,8,0,1,8,1,0,1,0,5,10,10,15,15,15,15,15,15,10,0,0,0,0,0,0,0,10,15,15,10,15,10,0,0,0,15,5,0,0,5,15,15,10,0,0,0,0,0,0,10,15,10,0,0,8
50085 DATA 8,1,9,8,9,9,1,8,1,9,1,1,9,9,8,8,1,1,1,8,1,8,1,1,8,1,0,8,0,0,1,0,0,5,10,15,15,10,0,0,0,15,15,5,0,0,0,0,0,5,15,15,15,10,5,15,10,0,0,0,15
50090 DATA 10,0,0,5,15,15,0,0,0,0,0,0,5,15,15,5,0,8,8,1,8,8,1,8,1,8,1,8,8,8,8,9,9,1,1,8,8,1,8,8,1,8,0,1,0,8,0,0,0,0,0,0,5,15,15,5,0,0,0,0,5
50095 DATA 15,0,0,0,0,5,10,15,15,10,5,0,5,10,15,0,0,0,10,10,0,0,0,15,10,0,0,0,5,5,0,5,15,15,10,0,0,0,8,8,1,8,8,8,8,8,0,8,8,1,8,1,8,1,8,1,8,8,1,1,0
50100 DATA 1,8,0,0,0,8,5,8,5,5,10,15,5,0,0,0,0,0,0,15,0,0,0,0,10,15,10,5,5,0,0,5,10,15,5,0,0,10,15,0,0,0,15,15,0,0,0,10,15,0,0,5,15,10,5,0,8,8,8,9,1
50105 DATA 8,8,8,8,10,5,8,8,8,8,0,1,8,1,8,8,0,8,1,0,0,0,8,5,10,15,15,15,10,15,10,0,0,0,0,0,0,0,15,5,0,0,0,5,15,10,0,5,5,5,5,10,15,5,0,0,5,15,0,0,0
50110 DATA 10,15,0,0,0,10,15,5,0,0,10,15,8,0,0,8,8,8,8,8,0,10,15,15,15,10,8,8,8,8,0,8,0,0,8,8,8,0,8,8,5,10,15,15,15,10,10,15,15,5,0,0,5,10,0,0,0,10,15,10,0
50115 DATA 0,5,15,10,5,10,15,10,5,5,15,10,0,0,5,15,5,0,0,5,15,5,0,0,5,15,5,0,0,5,15,10,5,0,1,8,1,8,1,8,10,15,10,15,15,15,10,10,10,10,8,10,8,5,8,10,10,10,15,10,15
50120 DATA 15,5,0,0,0,10,15,5,0,0,10,15,5,0,10,15,15,10,0,0,0,15,15,15,15,15,15,10,5,15,10,0,0,0,15,5,0,0,5,15,5,0,0,5,15,10,0,0,5,15,10,8,0,0,8,8,1,8,0,10,15
50125 DATA 5,0,5,10,15,15,15,15,15,15,15,15,15,15,15,15,15,15,10,0,0,0,0,0,0,15,5,0,0,5,15,10,15,15,10,15,10,0,0,0,10,15,10,5,5,15,10,5,15,10,0,0,0,5,0,0,0,5,15,10,0
50130 DATA 0,0,5,5,0,0,0,15,10,5,0,8,1,8,8,1,8,10,15,10,0,0,5,15,15,5,10,10,10,10,10,10,5,5,0,10,15,5,0,0,0,0,0,0,10,5,0,0,5,15,15,15,15,15,10,15,0,0,0,10,15
50135 DATA 0,0,0,15,10,5,10,15,5,0,0,0,0,0,0,5,15,15,5,0,0,0,0,0,0,0,10,15,5,0,0,8,8,1,1,8,5,15,10,0,0,0,15,15,0,0,0,5,0,0,0,0,0,0,10,15,0,0,0,10,5
50140 DATA 0,0,10,10,0,0,0,0,5,5,5,15,15,15,5,0,0,5,15,5,0,0,10,15,5,10,15,10,0,0,0,0,0,0,15,15,15,15,0,0,0,0,0,0,0,10,15,5,0,8,8,1,1,8,0,8,15,15,0,0,0
50145 DATA 15,15,0,0,0,10,0,0,0,0,0,0,5,15,0,0,0,15,10,0,0,5,10,0,0,0,0,0,0,0,5,15,15,5,0,0,5,15,5,0,0,10,15,5,5,10,15,10,5,5,5,10,15,15,10,10,15,15,10,0,0
50150 DATA 0,0,0,10,15,8,0,0,0,8,8,1,8,5,10,15,0,0,0,10,15,0,0,0,10,0,0,0,0,0,5,10,15,0,0,0,10,15,0,0,5,15,5,0,0,0,0,0,0,0,10,15,10,0,0,0,10,0,0,0,15
50155 DATA 15,5,0,5,10,15,15,15,15,15,15,10,5,5,10,15,15,15,10,10,5,5,15,15,5,0,8,8,8,1,1,0,8,10,15,5,0,0,10,10,0,0,0,15,5,0,0,5,15,15,15,15,0,0,0,10,15,0,0,0,15
50160 DATA 10,5,0,0,0,0,0,0,5,15,10,0,0,0,0,0,0,5,15,10,5,0,0,5,10,10,10,10,5,5,0,0,0,0,5,10,10,15,15,15,15,15,10,5,0,0,0,8,1,8,8,8,10,15,5,0,0,5,10,0,0
50165 DATA 0,15,5,0,0,5,15,10,10,15,5,0,0,5,15,5,0,0,10,15,15,15,10,10,0,0,0,5,15,15,0,0,0,0,0,0,15,15,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,5,5,10,10,10,5
50170 DATA 5,0,0,8,8,8,8,8,1,8,8,15,10,0,0,5,10,0,0,0,15,10,0,0,0,15,10,10,15,5,0,0,5,15,5,0,0,10,15,10,15,15,15,10,0,0,0,15,15,5,0,0,0,5,15,15,10,5,0,0,0
50175 DATA 0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,5,0,0,0,0,0,0,8,1,9,8,0,8,15,10,0,0,0,10,0,0,5,15,10,0,0,0,15,15,10,15,10,0,0,0,15,5,0,0,5,15,15,15,10
50180 DATA 15,10,0,0,0,15,15,15,10,5,10,15,15,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,8,0,8,8,1,8,9,1,8,8,5,15,15,0,0,0,5,0,0,5,15,15,0
50185 DATA 0,0,10,15,15,10,10,0,0,0,0,0,0,0,5,15,15,5,0,15,10,0,0,0,15,10,15,15,15,15,10,5,5,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,1,0,1,8,1,8,0,8,0,8,0,8,8
50190 DATA 1,8,1,9,8,8,8,10,15,5,0,0,0,0,0,5,15,15,0,0,0,5,0,0,0,15,0,0,0,0,0,0,5,15,15,0,0,0,0,0,0,0,5,15,10,5,10,10,5,5,0,0,0,0,0,0,0,0,0,1,0
50195 DATA 1,0,1,0,1,0,8,1,8,8,1,0,1,8,0,1,8,1,8,8,1,8,9,1,0,8,10,15,5,0,0,0,0,0,5,15,15,5,0,0,0,0,0,0,10,5,0,0,0,10,15,15,10,10,5,0,0,0,0,0,0
50200 DATA 10,15,10,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,8,1,0,8,1,0,1,8,8,8,1,8,1,8,1,8,1,8,8,1,8,1,9,1,8,8,8,10,15,10,0,0,0,0,0,0,5,15,5,0,0,0,0
50205 DATA 0,0,10,5,0,0,5,15,10,0,0,10,5,0,0,0,0,0,5,15,10,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,8,1,8,1,8,1,8,1,1,8,1,8,1,8,1,8,1,1,8,8,1,1,8
50210 DATA 8,1,8,5,15,10,0,0,0,5,0,0,0,10,10,0,0,0,0,5,5,15,10,0,0,5,15,5,0,0,10,15,0,0,0,0,10,15,15,5,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,8,1,8,1,1
50215 DATA 8,1,1,8,1,8,1,8,1,8,1,8,8,1,8,1,8,1,8,9,8,0,8,15,15,0,0,0,15,5,0,0,5,15,0,0,0,10,15,15,15,10,0,0,0,15,5,0,0,10,15,10,5,10,15,15,10,5,0,0,0
50220 DATA 0,0,0,0,0,0,0,0,0,0,1,0,0,8,0,1,0,1,8,1,9,1,8,1,8,1,8,8,1,8,1,9,8,8,1,9,9,1,8,1,8,8,10,15,0,0,0,10,10,0,0,0,15,0,0,0,10,15,10,10,15
50225 DATA 0,0,0,0,0,0,0,10,15,15,15,15,15,10,5,0,0,0,0,0,0,0,0,0,0,8,0,1,0,0,1,0,8,8,8,1,8,1,1,8,8,8,8,8,8,1,8,8,9,9,1,8,8,1,9,9,1,9,1,8,5
50230 DATA 10,15,5,0,0,10,15,0,0,0,15,5,0,0,10,15,10,10,15,0,0,0,0,0,0,5,15,10,10,10,10,5,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,8,1,1,1,1,1,1,8,8,8,1
50235 DATA 8,8,1,8,1,1,9,1,8,1,1,8,1,8,1,9,8,0,8,10,15,5,0,0,5,15,0,0,0,10,5,0,0,5,15,10,10,15,10,0,0,0,0,5,15,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0
50240 DATA 0,1,0,0,0,1,0,1,8,8,8,8,8,8,8,1,8,8,9,1,9,1,9,8,1,9,1,9,9,8,1,9,8,1,8,8,1,0,10,15,15,5,0,5,15,5,0,0,10,10,0,0,5,15,10,5,10,15,10,5,5
50245 DATA 10,15,15,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,8,1,0,1,1,1,8,8,1,8,8,1,1,8,1,8,1,8,1,8,1,8,1,1,1,9,8,8,8,1,8,8,8,10,15,15
50250 DATA 15,10,15,5,0,0,5,10,0,0,0,15,15,5,10,10,15,15,15,15,10,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,8,1,8,1,8,1,1,8,1,8,8,1,1,8,1,8
50255 DATA 9,8,8,1,8,1,9,8,1,8,1,8,8,8,1,0,8,10,10,15,15,15,15,15,10,10,15,10,10,10,15,10,5,0,5,10,10,10,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,8,0
50260 DATA 8,1,8,1,8,1,1,8,1,8,1,8,1,8,1,8,1,8,8,1,8,1,8,1,9,1,1,9,1,1,1,1,8,8,8,8,0,5,5,5,10,10,15,15,15,15,15,15,15,15,10,5,0,0,0,0,0,0,0,0,0
50265 DATA 0,0,0,0,0,0,0,0,1,0,0,1,0,0,8,0,1,0,1,8,0,1,8,1,8,1,8,1,9,9,8,1,9,1,8,8,8,1,8,1,8,9,9,1,9,9,1,1,9,1,8,8,1,8,1,0,0,0,0,5,5
50270 DATA 5,5,5,5,10,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,8,0,0,0,1,1,0,1,1,1,8,1,8,1,1,1,8,8,1,1,1,9,1,8,9,1,9,1,8,1,9,1
50275 DATA 1,9,1,9,8,8,1,8,8,8,1,8,8,8,8,8,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,0,0,0,0,8,0,1,0,1,0,0,1,8,1,8,8,1,8,8
50280 DATA 8,1,8,1,1,8,8,1,8,1,8,8,8,1,1,9,9,1,9,8,9,9,1,8,1,1,8,8,1,8,8,1,8,8,0,8,0,8,0,0,0,0,0,0,0,0,0,8,0,0,8,0,0,1,0,8,0,8,0,1,0
50285 DATA 1,8,1,1,8,1,1,0,1,1,8,1,8,1,1,1,8,1,9,1,8,1,1,9,1,1,8,8,1,8,9,1,8,8,9,8,1,9,1,1,1,8,1,9,8,1,8,8,8,9,1,8,1,8,1,8,1,8,8,8,8
50290 DATA 0,8,0,8,0,8,0,8,0,8,0,8,8,0,8,0,8,0,8,0,1,8,8,1,8,1,1,0,1,0,8,1,8,8,1,8,1,8,8,1,9,1,8,1,1,1,1,9,1,8,1,1,1,1,8,9,8,1,8,1,9
50295 DATA 8,8,1,8,1,8,1,9,8,1,8,1,8,8,0,8,1,8,1,8,0,1,8,0,1,0,8,8,0,1,8,1,1,8,1,8,1,8,1,8,1,1,8,1,0,1,1,8,1,1,1,8,1,1,1,1,8,8,1,8,1
50300 DATA 9,1,8,9,8,9,1,1,9,1,8,8,8,8,1,8,1,8,9,1,8,1,8,9,8,1,1,8,8,8,8,1,8,8,1,8,8,8,1,8,8,1,8,1,8,1,8,8,0,1,8,8,8,8,8,8,8,8,8,8,1
50305 DATA 8,8,8,8,1,0,1,8,8,1,8,1,8,8,1,1,1,8,8,1,9,9,1,8,8,8,1,1,8,1,1,8,8,1,8,9,1,8,8,8,8,1,8,8,9,8,8,1,8,8,1,8,1,8,8,8,1,8,8,1,8
50310 DATA 1,8,1,8,8,1,1,8,8,1,8,1,8,1,1,8,8,1,8,8,8,1,1,1,8,1,8,8,1,8,1,1,8,1,8,1,8,1,9,8,9,1,8,8,1,9,8,1,8,1,1,1,8,1,8,1,8,1,8,1,8
50315 DATA 9,1,9,1,9,1,8,1,8,8,1,8,1,8,8,1,8,1,8,9,1,8,1,1,8,8,1,8,8,1,8,8,1,8,1,8,1,1,8,1,8,8,1,1,8,1,8,8,1,8,1,8,1,8,8,8,8,1,8,9,8
50320 DATA 8,1,8,1,8,8,1,8,1,8,1,8,1,9,1,8,9,1,8,1,8,9,8,8,1,8,8,8,8,9,1,8,8,8,8,8,8,8,1,8,1,9,9,1,1,8,8,1,8,8,1,8,1,8,8,1,8,1,1,8,1
50325 DATA 8,8,1,8,8,1,1,8,8,1,9,1,8,1,8,8,8,1,8,8,8,8,8,8,9,1,9,8,8,1,8,1,9,9,8,1,9,8,9,8,1,9,8,9,1,8,9,8,1,8,1,1,8,1,8,1,8,9,1,8,9
50330 DATA 8,9,1,8,8,8,1,8,1,1,1,8,1,9,1,9,8,1,8,1,8,8,1,8,1,8,1,8,8,8,8,1,9,1,9,8,1,9,1,8,1,1,8,8,1,8,1,8,8,1,9,9,1,9,8,9,1,8,1,9,8
50335 DATA 9,1,9,1,8,8,1,8,1,8,1,9,9,8,1,1,1,8,1,9,8,1,8,1,8,8,1,8,8,1,8,9,8,9,1,8,1,8,1,8,1,8,8,1,1,8,8,1,8,1,9,8,1,8,1,9,9,1,8,1,8
50340 DATA 1,9,8,8,9,8,1,9,8,1,9,9,1,9,1,9,9,8,1,9,9,9,8,1,8,8,9,8,1,9,9,1,8,1,8,1,9,9,1,9,1,1,8,1,1,8,8,8,8,9,9,9,8,1,9,8,8,1,9,1,8
50345 DATA 8,1,8,1,8,9,8,8,8,1,9,1,8,1,1,8,1,8,8,8,1,1,8,9,1,8,8,1,9,8,1,9,9,8,1,8,1,9,9,8,1,8,8,8,9,1,1,1,8,9,8,9,9,9,1,9,8,1,9,1,8
50350 DATA 1,9,8,1,8,1,8,1,9,1,8,8,8,8,8,1,8,1,8,8,8,1,8,8,1,8,1,8,1,8,9,1,8,8,1,8,8,1,8,8,8,1,8,1,9,1,8,1,1,9,9,1,8,8,1,9,9,1,8,8,9
50355 DATA 1,8,8,8,9,1,1,9,1,9,8,9,8,1,8,1,8,9,1,9,1,8,8,1,8,1,8,8,8,9,1,1,8,1,8,9,8,1,8,8,8,1,1,8,1,1,1,8,1,9,1,9,1,8,1,8,1,9,1,8,9
50360 DATA 8,8,8,1,8,1,8,1,1,8,8,1,8,8,1,8,8,8,8,8,8,1,1,1,8,1,9,1,8,8,1,8,9,8,1,8,1,8,1,8,8,8,8,8,1,8,1,1,9,1,8,1,8,1,1,8,1,8,8,1,1
50365 DATA 8,1,8,8,8,1,8,1,8,8,1,8,9,8,1,8,1,8,1,8,8,1,1,8,1,8,1,8,1,1,8,8,8,1,8,1,8,8,1,8,1,8,1,8,8,8,8,9,8,1,8,8,8,8,1,1,8,8,1,8,1
50370 DATA 8,1,8,8,8,8,1,8,8,1,8,8,8,1,8,1,8,8,1,8,1,8,1,8,8,1,8,1,8,1,8,8,8,8,8,1,8,1,8,8,8,1,1,8,8,8,1,8,8,8,1,8,1,8,8,8,1,8,1,8,8
50375 DATA 1,8,8,1,8,8,1,8,8,1,8,1,8,8,8,1,8,8,8,8,8,8,8,8,8,8,8,1,8,1,8,1,8,8,1,8,1,8,8,8,8,8,8,8,8,8,1,8,1,8,8,8,1,8,1,8,8,8,8,8,8
50380 DATA 8,8,1,8,1,0,8,8,1,8,8,1,0,1,8,8,8,8,1,8,1,0,8,8,1,8,8,1,8,8,8,1,0,8,0,8,0,8,8,1,0,8,0,8,1,8,8,8,8,0,8,1,8,8,1,8,1,8,1,0,8
50385 DATA 1,0,1,0,1,8,8,1,8,1,8,8,1,0,1,8,1,8,1,8,8,1,8,0,8,8,0,8,0,8,1,0,8,8,8,8,8,0,8,0,8,1,8,0,8,1,8,0,8,8,8,8,0,8,0,8,8,1,0,8,1
50390 DATA 8,8,0,8,1,8,0,1,8,0,8,0,8,0,8,0,8,8,8,0,8,8,0,8,8,0,8,8,0,8,8,0,8,8,0,1,0,8,0,0,0,8,8,0,8,0,1,8,0,8,8,0,8,0,8,0,1,8,0,8,0
50395 DATA 8,8,0,0,8,0,8,0,0,8,0,0,8,0,8,0,8,0,8,0,0,8,0,0,0,8,0,0,8,8,0,8,0,1,8,0,0,0,8,0,0,8,0,8,0,1,0,8,0,8,0,1,0,8,0,8,0,8,0,8,0
50400 DATA 0,0,0,0,8,0,8,0,0,0,0,0,8,0,0,0,8,0,8,0,0,0,8,0,8,0,0,8,0,0,8,0,0,0,0,8,0,8,0,8,0,0,8,0,0,0,8,0,0,8,0,0,8,0,0,8,0,0,8,0,0
50405 DATA 8,0,8,0,0,8,0,8,0,0,8,0,0,8,0,8,0,0,0,8,0,8,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,8,0
50410 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,8,0,0,8,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,0,0,0,0
50415 DATA 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,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,0,0,0,0,0


REM --------------------------------------------------------------------------








55000 DATA 9,9,9,8,13,9,11,13,11,13,11,9,11,8,8,8,9,8,9,8,9,8,8,1,9,8,9,9,9,9,9,8,11,1,9,8,8,8,11,8,8,11,8,11,9,13,9,13,9,8,11,8,11,9,9,8,8,9,9,9,13
55005 DATA 8,13,11,9,9,9,10,9,8,9,9,11,8,11,10,9,9,11,11,8,8,11,11,8,11,11,11,15,11,10,13,8,11,11,8,8,9,8,11,1,8,9,9,8,9,9,9,9,9,9,11,9,9,8,9,8,9,3,8,11,9
55010 DATA 8,9,10,8,11,8,9,11,8,9,9,8,11,8,9,8,8,10,8,13,9,10,13,9,13,11,9,9,11,9,8,11,9,10,9,11,9,9,9,8,8,8,11,9,13,11,11,11,13,9,11,8,9,9,1,9,9,1,9,9,9
55015 DATA 1,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,13,9,10,8,8,11,8,9,9,8,9,9,8,9,9,8,10,9,13,10,13,9,11,10,13,8,9,13,9,9,10,11,9,11,9,1,9,8,9
55020 DATA 9,9,9,11,13,13,9,11,10,9,11,1,11,9,1,11,1,9,8,11,9,9,9,1,11,9,11,9,11,9,9,9,9,9,9,9,9,13,11,8,10,10,8,10,9,11,8,9,8,9,9,1,8,9,8,9,10,8,13,10,10
55025 DATA 13,11,13,11,9,13,13,9,13,11,11,9,11,9,11,8,9,8,9,9,9,13,9,11,13,11,9,9,11,1,11,9,8,9,3,9,9,9,8,9,1,9,8,9,9,9,9,9,9,11,9,9,11,8,13,8,9,9,13,8,10
55030 DATA 10,8,8,8,9,8,8,9,1,9,8,8,9,8,9,11,9,13,11,11,11,11,11,13,9,11,11,13,9,11,9,9,11,9,8,1,11,1,11,9,9,13,13,9,13,11,11,8,11,9,11,8,9,11,1,11,9,9,9,9,1
55035 DATA 9,1,9,8,9,11,13,9,11,11,8,11,8,13,10,10,10,13,8,8,10,8,9,9,8,8,9,8,9,1,11,9,9,13,9,9,11,11,11,13,9,11,9,13,9,13,9,13,11,11,11,9,9,8,11,1,11,8,9,13,9
55040 DATA 11,13,9,11,9,11,9,9,1,11,9,1,9,9,1,11,1,1,9,1,9,9,9,9,9,9,13,9,11,13,13,11,9,13,13,8,10,9,10,8,9,8,8,8,11,3,1,9,8,8,9,9,8,11,11,11,11,11,11,13,9
55045 DATA 13,9,13,9,11,11,9,11,9,11,9,8,1,9,8,11,9,8,11,13,9,13,11,9,11,9,9,11,9,9,9,11,9,11,1,8,9,8,9,9,8,8,11,9,13,9,13,11,13,9,13,13,10,13,13,8,13,9,9,8,8
55050 DATA 9,9,1,9,11,1,11,9,8,10,9,9,13,9,11,9,11,9,11,9,13,9,11,9,11,10,10,11,9,11,9,11,8,11,8,11,13,13,11,13,9,11,13,9,11,11,9,11,11,9,9,8,8,9,9,1,8,8,8,8,9
55055 DATA 9,9,9,13,11,13,11,13,11,11,13,13,8,13,8,9,10,10,11,8,8,11,8,9,9,8,9,9,9,9,9,9,11,11,9,9,11,9,11,9,9,11,9,8,10,11,8,9,9,9,8,9,8,10,9,10,13,11,13,11,13
55060 DATA 9,13,11,9,11,9,11,11,9,9,9,8,1,8,9,1,9,9,9,8,11,10,13,11,13,13,13,13,13,10,10,13,9,13,9,10,8,11,9,11,9,8,9,9,9,9,9,9,13,11,13,9,11,11,11,9,11,1,11,11,8
55065 DATA 9,11,8,9,11,10,9,8,9,9,11,11,9,11,13,13,11,13,9,13,9,11,11,11,9,11,11,9,11,9,8,9,9,1,8,8,8,9,9,9,9,11,11,15,13,13,10,13,13,10,13,13,11,10,9,11,8,9,9,8,11
55070 DATA 9,9,11,9,11,9,9,9,11,9,9,9,9,9,9,11,1,11,8,9,9,11,11,8,9,11,13,9,9,9,9,11,13,13,13,15,11,13,11,11,11,9,11,11,11,10,10,8,9,8,8,8,9,8,8,9,8,9,9,13,13
55075 DATA 13,13,15,13,15,13,13,13,13,13,10,11,9,11,11,10,9,11,9,11,9,11,9,11,9,13,11,9,9,11,9,11,9,9,9,11,1,11,8,9,8,8,11,13,9,8,13,10,11,13,11,13,11,13,11,15,11,13,11,13,11
55080 DATA 13,11,11,11,10,9,9,11,8,9,8,9,8,8,9,9,11,9,13,13,13,13,11,13,15,13,15,10,13,13,11,13,11,9,13,9,11,9,11,13,9,13,9,11,9,9,9,11,9,11,9,9,11,9,8,11,1,9,11,10,10
55085 DATA 8,9,13,13,9,13,11,11,13,11,11,13,11,11,13,13,13,11,13,11,11,13,9,13,9,9,8,8,8,9,8,9,9,9,8,13,13,11,11,13,11,13,11,13,13,13,15,13,13,13,13,10,13,9,13,11,11,11,9,13,9
55090 DATA 11,9,11,9,11,11,9,9,11,9,11,8,9,9,8,9,8,9,8,13,8,9,13,11,11,11,13,11,11,13,9,11,13,11,11,13,13,11,13,11,11,13,9,13,8,9,9,8,9,8,10,8,9,11,8,13,13,11,11,13,11
55095 DATA 11,13,11,13,11,13,13,13,13,13,13,13,9,11,11,11,11,9,13,9,11,9,9,9,1,11,9,9,9,9,9,9,8,9,8,11,8,9,10,9,11,11,13,11,11,11,11,11,11,15,15,11,11,13,11,11,13,9,13,11,15
55100 DATA 13,11,15,11,8,11,8,11,8,13,11,10,11,10,9,11,11,11,11,13,11,13,13,11,11,13,13,13,13,11,13,15,15,11,11,9,9,11,15,11,15,11,15,11,9,11,1,11,11,8,15,11,15,10,10,9,10,8,10,8,11
55105 DATA 13,11,11,11,9,13,15,10,15,15,11,11,11,13,11,11,13,15,10,10,15,10,15,15,8,9,8,13,8,9,9,11,11,11,11,9,11,11,11,9,11,11,13,13,11,13,13,13,15,15,15,10,15,11,11,11,15,15,15,10,15
55110 DATA 15,15,11,11,11,9,11,15,10,15,10,15,15,11,8,11,8,9,13,11,13,9,11,11,11,10,0,0,15,13,11,11,15,9,15,15,5,0,0,0,0,10,15,9,8,11,8,9,11,9,13,9,11,11,13,9,11,11,11,15,15
55115 DATA 15,11,13,13,11,13,13,10,0,0,15,11,15,15,10,5,0,0,0,0,10,15,15,9,13,15,5,0,0,0,5,10,15,11,8,9,11,11,11,11,11,9,9,15,15,0,0,10,15,15,15,15,15,15,5,0,0,0,0,0,10
55120 DATA 15,11,9,8,11,10,11,9,11,9,11,9,9,9,11,11,11,15,5,5,15,11,13,15,11,15,5,0,0,5,15,15,5,0,0,0,0,0,0,0,0,15,15,11,10,0,0,0,0,0,5,15,10,9,8,9,13,11,13,9,11
55125 DATA 11,11,10,0,0,15,15,10,0,5,15,15,0,0,5,10,10,15,15,11,1,15,15,15,15,15,15,11,9,11,9,11,15,15,15,15,10,0,0,10,15,15,15,15,15,10,0,0,10,15,5,0,0,0,10,10,15,5,0,0,0
55130 DATA 15,15,5,0,5,10,5,0,0,10,11,8,9,8,11,11,9,11,9,9,15,10,0,0,10,15,5,0,5,15,10,0,0,10,15,15,15,11,11,11,15,10,5,5,5,10,15,15,11,11,15,10,10,5,10,15,0,0,5,5,5
55135 DATA 5,5,15,5,0,0,10,10,0,0,5,15,15,11,15,15,10,0,0,5,15,0,0,5,15,15,0,0,10,15,9,8,9,13,11,11,9,11,9,15,10,0,0,10,10,0,0,10,15,10,0,0,15,15,15,15,15,11,15,5,0
55140 DATA 0,0,0,0,10,15,11,15,10,5,0,0,5,10,0,0,0,0,0,0,0,10,15,5,5,15,10,0,0,15,11,11,9,11,11,15,5,0,5,15,5,0,0,0,0,0,0,10,15,9,8,9,13,9,11,11,9,9,15,10,0
55145 DATA 0,0,0,0,0,5,15,10,0,0,0,5,5,5,10,15,5,0,0,0,5,0,0,0,15,11,15,5,0,0,0,10,15,0,0,0,5,5,5,5,10,15,15,15,15,0,0,5,15,11,9,1,9,11,15,10,0,0,15,10,0
55150 DATA 0,0,0,0,5,15,11,1,9,9,11,13,11,9,11,11,15,10,0,0,0,0,0,0,0,5,10,0,0,0,0,0,0,10,15,0,0,5,15,5,0,0,10,15,15,15,5,0,10,15,15,10,0,0,15,15,15,15,15,15,11
55155 DATA 11,11,15,5,0,5,15,11,9,11,9,9,15,10,0,0,15,5,0,0,0,5,0,0,15,11,9,1,9,11,9,9,11,9,11,11,10,0,0,10,10,10,5,0,5,10,0,0,5,5,0,5,10,10,0,0,15,0,0,0,10
55160 DATA 15,11,11,15,0,0,5,15,15,10,0,0,10,15,15,5,5,10,15,1,11,15,5,0,0,15,15,1,11,9,11,15,10,0,5,10,0,0,5,15,10,5,0,5,15,1,9,9,13,11,11,9,11,9,15,10,0,0,15,15,15
55165 DATA 10,0,0,10,0,0,15,15,15,15,15,10,0,0,10,5,0,10,15,11,9,15,10,5,0,10,15,15,10,0,0,15,15,10,5,0,10,15,11,11,15,10,0,0,10,15,15,11,11,15,15,0,0,0,10,0,0,10,15,15,5
55170 DATA 0,5,15,11,9,9,9,13,9,13,9,9,11,10,0,0,10,11,15,5,0,0,10,0,0,10,15,11,11,11,15,0,0,5,10,15,15,15,15,15,15,15,0,0,10,11,15,10,0,0,5,15,15,0,0,10,15,11,1,15,15
55175 DATA 5,0,5,10,15,15,15,10,0,0,0,15,10,0,0,10,15,15,5,0,5,15,9,9,9,13,9,13,9,13,9,15,10,0,0,15,15,15,10,0,0,10,0,0,10,11,9,9,13,15,5,0,0,0,5,5,10,15,15,5,0
55180 DATA 0,0,10,15,11,15,0,0,0,5,0,0,0,15,15,8,9,11,15,10,0,0,0,0,5,5,0,0,0,10,15,15,0,0,0,5,0,0,0,10,15,9,11,9,11,13,13,9,13,9,15,10,0,0,10,11,15,10,0,5,10
55185 DATA 0,0,10,15,9,9,9,11,15,5,0,0,0,0,0,15,10,0,0,0,5,15,11,8,15,10,0,0,0,0,0,10,15,9,11,8,9,11,15,10,5,0,0,0,0,0,5,5,15,11,15,10,5,0,0,0,0,5,15,11,11
55190 DATA 9,13,13,11,13,13,9,9,11,15,5,10,15,11,11,10,0,5,10,5,5,15,11,9,9,9,13,15,15,10,5,0,5,5,15,15,5,5,10,15,15,9,9,11,15,15,5,5,5,15,15,13,8,9,11,9,9,13,15,15,10
55195 DATA 5,5,5,10,15,15,11,9,9,15,10,10,5,5,10,15,15,11,9,13,9,13,13,9,11,9,13,11,15,15,15,15,1,15,10,0,0,10,15,15,15,9,8,9,9,1,9,15,15,15,15,15,15,11,11,15,15,15,11,8,9
55200 DATA 8,9,11,11,15,15,15,15,13,8,11,9,9,11,11,9,11,15,15,15,15,15,15,15,9,11,9,9,11,15,15,15,15,15,11,9,11,9,11,11,13,13,13,9,13,9,9,9,11,9,9,9,11,15,5,0,0,0,10,15,11
55205 DATA 9,8,9,9,11,9,9,11,11,9,11,9,9,11,9,9,8,9,8,13,8,8,13,10,13,10,13,8,9,11,9,11,11,9,11,9,13,9,13,11,11,11,9,9,9,9,9,9,9,11,9,11,9,13,9,9,11,9,9,13,13
55210 DATA 9,13,11,9,11,11,9,9,9,11,8,15,15,5,0,0,5,15,9,8,9,1,11,1,9,11,9,9,9,9,9,1,9,9,8,9,9,9,8,13,8,10,13,13,12,10,13,13,8,13,9,13,9,13,9,9,13,9,13,11,9
55215 DATA 9,9,9,9,9,9,9,9,9,9,9,9,13,11,9,11,9,13,13,13,13,9,11,9,9,11,9,9,9,9,11,11,15,15,10,15,10,8,9,9,9,1,11,9,11,9,11,1,11,1,11,1,9,8,9,9,9,9,11,10,8
55220 DATA 13,8,13,10,9,13,13,9,13,11,13,9,9,13,9,13,9,9,9,9,9,9,1,9,9,9,9,11,9,13,9,11,9,11,9,9,10,15,11,11,13,9,13,9,11,9,9,9,9,8,11,11,10,15,11,9,9,1,8,9,9
55225 DATA 9,9,1,9,8,9,8,9,8,8,9,8,8,9,9,9,9,8,13,13,13,8,13,13,13,13,13,13,13,13,13,13,11,13,9,13,9,11,9,9,9,11,9,9,9,9,9,13,9,13,11,11,9,11,9,13,13,13,11,13,11
55230 DATA 11,13,9,13,9,9,9,11,8,9,9,8,8,9,8,9,9,1,11,1,9,11,9,9,9,8,9,9,1,9,8,8,11,8,13,9,9,13,9,12,13,12,13,10,13,13,13,13,13,13,13,13,13,13,9,13,9,11,9,9,9
55235 DATA 9,9,9,9,11,9,11,9,9,11,11,9,9,13,13,13,13,11,11,13,9,11,9,10,10,8,9,10,8,10,9,9,8,8,9,1,11,8,11,9,8,9,9,1,8,9,1,11,8,9,9,8,13,8,13,10,13,13,13,13,13
55240 DATA 13,13,9,13,9,13,13,9,13,13,13,13,13,9,13,9,11,9,9,9,9,9,11,1,11,9,13,9,11,9,9,9,10,13,13,10,13,13,11,11,13,11,9,10,9,10,8,9,9,9,8,11,8,9,8,9,11,1,9,9,9
55245 DATA 11,9,9,8,8,9,8,9,8,11,8,11,9,11,13,13,13,9,13,9,9,13,9,9,13,13,9,13,13,13,13,13,9,9,11,9,9,1,9,9,9,1,9,9,9,9,11,11,9,11,9,12,10,13,13,10,13,13,11,11,11
55250 DATA 13,9,13,8,13,13,9,10,9,9,8,9,11,8,9,9,11,11,9,9,8,9,9,8,9,9,8,8,8,9,9,9,13,13,9,9,13,13,9,13,9,13,13,9,9,9,13,9,13,9,9,13,9,9,9,9,1,9,1,9,9
55255 DATA 1,9,9,11,11,9,9,9,9,13,10,13,12,13,10,13,13,13,11,13,10,10,13,8,13,9,9,8,9,11,8,8,11,8,11,8,8,9,11,9,8,11,8,11,8,10,10,13,8,13,11,13,12,13,13,9,9,13,9,9,9
55260 DATA 9,13,9,9,9,13,9,13,9,9,9,9,9,1,9,1,9,9,1,9,9,9,9,11,11,9,11,9,10,12,12,13,10,13,15,11,13,13,10,13,13,10,13,9,10,11,11,9,8,9,9,9,11,8,11,9,9,8,9,9,10
55265 DATA 9,8,13,9,8,11,9,10,10,11,13,13,8,13,13,9,11,9,9,9,9,9,9,13,9,13,9,9,9,9,9,9,9,1,1,9,1,9,1,9,9,9,11,11,11,9,9,8,13,12,13,12,10,13,15,13,13,15,10,13,10
55270 DATA 11,11,13,9,8,10,9,9,11,9,9,9,1,11,8,8,9,8,8,9,9,9,8,13,8,13,8,13,8,9,10,9,9,9,9,9,9,1,9,9,9,9,9,13,9,13,9,9,9,9,9,1,9,9,9,9,9,9,9,9,11
55275 DATA 9,11,9,11,11,10,12,12,12,13,13,13,10,15,13,13,13,10,13,13,9,8,13,11,9,11,9,9,8,9,8,11,8,9,8,11,8,8,11,9,8,13,10,11,10,13,13,9,9,8,11,9,11,9,9,9,9,9,9,9,1
55280 DATA 9,8,9,9,9,9,9,9,9,9,1,9,1,9,1,9,9,11,9,11,11,13,9,9,12,12,12,10,10,12,13,13,13,11,13,13,11,11,9,9,13,9,9,9,9,9,9,9,9,9,1,8,8,8,8,11,9,8,10,13,8
55285 DATA 13,8,13,8,8,9,9,11,8,11,9,9,1,9,9,1,9,1,9,1,9,8,9,8,13,9,8,9,9,9,9,9,9,9,9,9,9,9,11,11,9,11,13,10,12,12,10,12,13,14,13,13,13,13,11,11,9,13,11,9,11
55290 DATA 9,11,11,8,9,9,8,1,11,8,8,9,8,8,11,9,10,8,10,13,13,8,9,9,9,9,8,11,9,9,9,11,1,9,1,9,9,9,9,9,9,9,9,8,9,9,8,9,9,1,9,9,9,9,9,11,11,13,9,13,9
55295 DATA 11,12,12,10,12,13,12,13,13,11,13,11,9,11,11,11,9,11,9,9,9,8,11,8,8,9,9,1,8,8,8,9,9,8,9,8,13,10,13,8,13,10,8,10,8,11,9,9,8,11,9,9,9,1,1,1,9,1,9,8,9
55300 DATA 8,9,9,8,9,8,9,9,9,9,9,9,13,9,9,9,13,13,13,11,12,12,10,13,12,13,10,13,11,11,13,13,9,11,9,11,9,9,9,9,11,9,9,9,1,9,9,8,8,8,8,8,10,8,13,8,13,9,13,8,8
55305 DATA 13,8,9,8,11,8,11,9,9,1,1,9,9,8,9,8,9,1,8,8,8,8,9,8,9,9,8,9,9,9,9,9,11,13,13,13,13,13,13,12,12,13,12,13,14,13,11,13,11,9,11,9,11,9,9,9,11,9,9,9,8
55310 DATA 9,8,11,1,8,9,8,8,9,8,8,10,8,13,10,8,9,13,9,9,9,9,9,9,9,1,9,11,9,9,1,9,8,1,9,1,9,8,9,1,9,8,8,9,8,13,9,9,9,13,9,11,13,11,13,13,13,13



---- ^^^^ ---- CUT HERE ---- ^^^^ ----

BLuRry

unread,
Apr 3, 2013, 12:14:28 AM4/3/13
to
On Tuesday, April 2, 2013 4:09:48 PM UTC-4, Dagen Brock wrote:
> Some of you may have seen a demo I put out a few months ago that I did for KansasFest 2013. It was really just an excuse for me to port my flame demo to 65c02 instructions and then I added some more little routines just to make it more of a demo.
>

Cool concept! I couldn't get it to work with an Apple //e basic rom since the in-rom applesoft does not support 80-col double-lores graphics natively. I changed line 40000 to put x/2 in there and line 40100 to hlin from 0 to 39 and that got past the illegal quantity errors. However, I think that Jace has a display bug for double-lores and I've not tested that mode in a very long time.

*scratches head*

Unfortunately right now my local copy of Jace is so whacked out since there is currently no way to insert disk images. (this is because of a very good reason, it's just that disk handling is being changed to something else and it's in flux right now so I've been awfully quiet about it.)

If you PM me I can send you something that I've been working on that you might like.

-B

Bill Buckels

unread,
Apr 3, 2013, 10:39:21 PM4/3/13
to

"BLuRry" <brendan...@gmail.com> wrote:

> *scratches head*

You need to rotate the auxiliary colors, that's all. Here's two translation
tables and a c program that explains. Unfortunately I am not finished
writing my book about this yet, a little later in the week perhaps, when I
do you can read the novel...

code snippets and some explanation follows... I am assuming that you know
how packed pixels work between the even and odd scanlines that sort of
thing. If not *YOU* can send me PM and ask for more:)

Color Indices for Auxiliary Memory - Rotating the Bits of the Nibbles

The "packed pixel" colors for DLGR main memory (bank 0) use the same color
indices (color numbers) as normal Lo-Res. In a manner of speaking, auxiliary
memory uses the same numbers too, but they are stored in memory differently;
when writing a Lo-Res color index number to bank1 (auxiliary memory), a
right rotate no carry (right circular shift) of the 4-bit color number is
needed, and when reading a Lo-Res color number from bank 1, a left rotate no
carry (left circular shift) is needed.

In English, a circular shift is the operation of rearranging the entries in
a "tuple", (in the case of moving a pixel between main and auxiliary memory,
the four-tuple of bits in the Lo-Res color or color nibble), either by
moving the final entry to the first position, while shifting all other
entries to the next position, or by performing the inverse operation.

/* the following is used to remap double lo res 4 bit colors
from bank 0 to bank 1 */
unsigned char dloauxcolor[16] = {
0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15};

/* the following is used to remap double lo res 4 bit colors
from bank 1 back to bank 0 */
unsigned char dlomaincolor[16] = {
0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15};


Program Listing - DLGR Conversion Table Generator

int main()
{
int color;
unsigned char nib,big,bit;

/* produce conversion tables for DLGR color indices */
puts("/* the following is used to remap\n"
"double lo res 4 bit colors\n"
"from bank 0 to bank 1 */\n"
"unsigned char dloauxcolor[16] = {");

for (color=0; color< 16; color++) {
/* right circular shift */
nib = (unsigned char )color;
big = (nib >> 1);
bit = (nib &1) << 3;
nib = (big | bit);

if (color) putchar(',');
printf("%d",(int)nib);
}
puts("};");

puts("/* the following is used to remap\n"
"double lo res 4 bit colors\n"
"from bank 1 back to bank 0 */\n"
"unsigned char dlomaincolor[16] = {");

for (color=0; color< 16; color++) {
/* left circular shift */
nib = (unsigned char )color;
big = (nib << 1) &0xF;
bit = (nib >> 3) &1;
nib = (big | bit);

if (color) putchar(',');
printf("%d",(int)nib);

}
puts("};");

return 0;
}

The working code above produced the DLGR color conversion tables listed
earlier. The programming example that follows demonstrates how the
conversion table is used on the Apple II. These tables are also used for
color conversion in AWINDLO and BMP2LO.

Programming Example - Plotting a DLGR Pixel using Apple II Rom Routines

/* bank 0 color remapping to bank 1 color */
unsigned char dloauxcolor[16] = {
0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15};
#define XREG 0
#define YREG 1
#define COLOREG 0
#asm
instxt <zpage.h>
XVAL equ REGS
YVAL equ REGS+1
COLOR equ REGS
#endasm
unsigned char *dlobyteregptr = (unsigned char *)0x80;
dloplot(x, y, color)
{
int w, z = x;
/* Double Lo-Res works the same way 80-column text does:
columns 0, 2, 4, ...78 are stored in AuxRAM,
and columns 1, 3, 5, ...79 are stored in MainRAM. */
x = z / 2;
w = x * 2;
if (z==w) dlobyteregptr[COLOREG] = dloauxcolor[color];
else dlobyteregptr[COLOREG] = (unsigned char)color;
#asm
LDA COLOR ; Sets the plotting color to N, 0 <= N <= 15
JSR $F864
#endasm
if (z!=w)
{
#asm
sta $c054
#endasm
}
else {
#asm
sta $c055
#endasm
}
/* load parameters into user regs */
dlobyteregptr[XREG] = x;
dlobyteregptr[YREG] = y;
/* make ml call */
#asm
LDY XVAL ; Lo-Res Plot X (Horizontal) Coordinate (0-39)
LDA YVAL ; Lo-Res Plot Y (Vertical) Coordinate (0-39)
JSR $F800
#endasm
}

The above routine is written in Aztec C65 for Apple IIe ProDOS. It is a
working code excerpt from the AppleX MS-DOS/Windows cross-compiler
distribution.


BLuRry

unread,
Apr 3, 2013, 10:48:10 PM4/3/13
to
> You need to rotate the auxiliary colors, that's all. Here's two translation
>
> tables and a c program that explains. Unfortunately I am not finished
>
> writing my book about this yet, a little later in the week perhaps, when I
>
> do you can read the novel...

Oh I knew that part of it -- I used a test DGR program that I knew worked long long ago. The problem with Jace DGR is that the renderer for double-lo doesn't do anything at all at the moment for some strange reason.

Because Jace has no way to insert media at the moment (well not my working copy, the download version in sourceforge stil works of course) I can't boot my prodos HDV with all my test programs, etc. I could get around this easily but leaving my local copy broken means I can't use Jace until I fix it. And it won't be fixed until I finish the new features, etc.

Self-imposed punishment. But I digress, I'll moan about that in another thread in the next day or two.

-B
0 new messages