; program: parabolic star - marcello of retro64 blog * = $801 byteaddr = $fc ;fc, fd used basic byte 11,8,10,0,158,50,48,54,49,0,0,0 ;basic program for autostart bmpscreen = 24576 ;bmpscreen start dummy = $0 lda #>bmpscreen ;initialize self-mod code sta mod1+2 lda #(260+10) bne loop_drawing_2 lda #60 sta xw+1 lda #0 sta xw loop_drawing_3 lda xw+1 sta x1+1 lda xw sta x1 clc lda xw+1 adc #50 sta y2 cmp #200 bne continue_dr3 sec lda y2 sbc #1 sta y2 ;fix to avoid y2 = 200 (maximum value is 199 for y) continue_dr3 jsr line_subroutine ;jmp end_drawing clc lda xw+1 adc #10 sta xw+1 lda xw adc #00 sta xw lda xw+1 cmp #150+10 bne loop_drawing_3 ;jmp end_drawing lda #170 sta xw+1 lda #00 sta xw loop_drawing_4 lda xw+1 sta x1+1 lda xw sta x1 sec lda #<370 sbc xw+1 sta y2 cmp #200 bne continue_dr4 sec lda y2 sbc #1 sta y2 ;fix to avoid y2 = 200 (maximum value is 199 for y) continue_dr4 jsr line_subroutine clc lda xw+1 adc #10 sta xw+1 lda xw adc #00 sta xw lda xw+1 cmp #<(260+10) bne loop_drawing_4 lda xw cmp #>(260+10) bne loop_drawing_4 lda #60 sta x1+1 lda #0 sta x1 lda #100 sta y1 lda #<260 sta x2+1 lda #>260 sta x2 lda #100 sta y2 jsr line_subroutine lda #160 sta x1+1 lda #0 sta x1 lda #0 sta y1 lda #160 sta x2+1 lda #0 sta x2 lda #199 sta y2 jsr line_subroutine end_drawing lda #15 sta $d020 spacechk lda $dc01 cmp #$ef bne spacechk lda #$9b sta $d011 lda #4 sta 648 lda #21 sta $d018 lda #151 sta $dd00 ;default vic-ii bank lda #147 jsr $ffd2 lda #15 sta $286 lda #00 sta 198 rts line_subroutine ; computes deltax, deltay, decides what routine to be used lda x1 cmp x2 bcc compute_delta_x2_x1 bne compute_delta_x1_x2 lda x1+1 cmp x2+1 bcc compute_delta_x2_x1 ;compares x1 and x2 compute_delta_x1_x2 sec lda x1+1 sbc x2+1 sta delta_x+1 lda x1 sbc x2 sta delta_x ;delta_x = x1-x2 lda #$01 sta x_n ;delta_x negative jmp skip_compute_delta_x2_x1 compute_delta_x2_x1 sec lda x2+1 sbc x1+1 sta delta_x+1 lda x2 sbc x1 sta delta_x ;delta_x = x2-x1 lda #$00 sta x_n ;delta_x positive skip_compute_delta_x2_x1 lda y1 cmp y2 bcc compute_delta_y2_y1 ;compares y1 and y2 sec lda y1 sbc y2 sta delta_y ;delta_y = y1 - y2 lda #$01 sta y_n ;delta_y negative jmp skip_compute_delta_y2_y1 compute_delta_y2_y1 sec lda y2 sbc y1 sta delta_y ;delta_y = y2 - y1 lda #$00 sta y_n ;delta_y positive skip_compute_delta_y2_y1 lda delta_x bne jump_110 ;if high byte delta_x <> 0 then delta_x > delta_y lda delta_x+1 cmp delta_y bcc jump_170 ;if delta_x+1 < delta_y use routine 170 jump_110 jsr line_110 ;else use routine 110 jmp skip_jump_170 jump_170 jsr line_170 skip_jump_170 rts ;subroutine: line_110 (deltax > deltay) line_110 lda #$00 sta to_mult ;delta_y_highest = 0 lda #$00 sta to_mult+1 ;delta_y_high = 0 lda delta_y sta to_mult+2 jsr off_multiply ;delta_y * offset = to_mult (24 bit) lda #$00 sta a ;higher byte of a unused lda to_mult sta a+1 lda to_mult+1 sta a+2 lda to_mult+2 sta a+3 ;lower bytes used (delta_y * offset = to_mult is 24 bit) ;a is dividend lda delta_x sta b lda delta_x+1 sta b+1 ;delta x on b (b is divisor) jsr divide_ab ;computes to_mult/b lda rs+1 sta m lda rs+2 sta m+1 lda rs+3 sta m+2 ;m = to_mult/b (24 bit) ;rs: higher bytes of quotient: unused ;rs+1, rs+2 and rs+3: lower bytes of quotient: used lda y_n eor x_n sta m_s ;determines sign of m lda m_s lda x2 cmp x1 bcc x_increment_sign_negative bne x_increment_sign_positive lda x2+1 cmp x1+1 bcc x_increment_sign_negative bne x_increment_sign_positive x_increment_sign_negative lda #$01 sta x_increment_sign jmp skip_x_increment_sign_positive x_increment_sign_positive lda #$00 sta x_increment_sign ;determines sign of increment of x during line plotting skip_x_increment_sign_positive lda x1 sta multiplier lda x1+1 sta multiplier+1 lda m sta multiplicand lda m+1 sta multiplicand+1 lda m+2 sta multiplicand+2 ;prepares to perform 32 bit multiply ;operation: x1 * m = TT jsr multiply_ab ;performs multiplication lda multiplier+1 sta mc lda sum sta mc+1 lda sum+1 sta mc+2 ;MC = x1 * M, used later jsr divide_off ;divides result of multiplication by offset lda multiplier+1 sta tt lda sum sta tt+1 lda sum+1 sta tt+2 ;TT (24 bit) = (x1*M)/offset ;16 bit are not enough! ;now ready to draw the line lda x1 sta x_domain lda x1+1 sta x_domain+1 ;starting point for line plotting lda x_increment_sign bne x2_minus_1 clc lda x2+1 adc #01 sta x_limit+1 lda x2 adc #$00 sta x_limit ;x_limit = x2+1 or x2-1 so that last point is plotted jmp skip_x2_minus_1 x2_minus_1 sec lda x2+1 sbc #$01 sta x_limit+1 lda x2 sbc #$00 sta x_limit skip_x2_minus_1 ; tests if tn = tt+y1 can be calculated outside loop lda m_s beq draw_loop clc ;calculates tn lda tt+2 adc y1 sta tn+2 lda tt+1 adc #$00 ;higher bytes of y seen as a 24 bit number are 0 sta tn+1 lda tt adc #$00 sta tn ;tn = tt + y1 draw_loop lda mc+1 sta mx+2 lda mc sta mx+1 lda #$00 sta mx ;MX = MC/offset ;take MC, divide it by 256 and store result in MX ;MC is unchanged lda m_s beq m_s_zero_formula ;y calculation if m is negative sec lda tn+2 sbc mx+2 sta y_calc+2 lda tn+1 sbc mx+1 sta y_calc+1 lda tn sbc mx sta y_calc ;y_calc = y_calc -mx ;(y_calc = tt + y1 - mx) ==> y_calc = tn - mx jmp skip_ms_zero_formula m_s_zero_formula clc ;y calculation if m is positive lda mx+2 ;lower byte of mx+2 adc y1 ;add to y1 sta y_calc+2 lda mx+1 adc #$00 ;medium byte of y seen as a 24 bit number sta y_calc+1 lda mx ;higher byte of y seen as a 24 bit number adc #$00 sta y_calc ;y_calc = mx + y1 sec lda y_calc+2 sbc tt+2 sta y_calc+2 lda y_calc+1 sbc tt+1 sta y_calc+1 lda y_calc sbc tt sta y_calc ;y_calc = y_calc - tt ;(y_calc = mx + y1 - tt) skip_ms_zero_formula lda x_domain sta xp lda x_domain+1 sta xp+1 lda y_calc+2 sta yp ;prepares values for point plotting jsr plot ;plots the point lda x_increment_sign beq increment_mc sec lda mc+2 sbc m+2 sta mc+2 lda mc+1 sbc m+1 sta mc+1 lda mc sbc m sta mc ;MC = MC - M dec x_domain+1 ;x_domain = x_domain -1 (16 bit) lda x_domain+1 cmp #$ff bne skip_increment_mc dec x_domain jmp skip_increment_mc increment_mc clc lda mc+2 adc m+2 sta mc+2 lda mc+1 adc m+1 sta mc+1 lda mc adc m sta mc ;MC = MC + M inc x_domain+1 ;x_domain = x_domain + 1 (16 bit) lda x_domain+1 bne skip_increment_mc inc x_domain skip_increment_mc lda x_domain cmp x_limit bne draw_loop_jump lda x_domain+1 cmp x_limit+1 bne draw_loop_jump rts draw_loop_jump jmp draw_loop ;subroutine: line_170 (deltax < deltay) line_170 lda #$00 sta to_mult ;highest byte of delta_x is 0 lda delta_x sta to_mult+1 ;delta_x_high lda delta_x+1 sta to_mult+2 jsr off_multiply ;delta_x * offset = to_mult (24 bit) lda #$00 sta a ;higher bytes of a unused lda to_mult sta a+1 lda to_mult+1 sta a+2 lda to_mult+2 sta a+3 ;lower bytes used (delta_y * offset = to_mult is 16 bit) ;a is dividend lda #$00 ;high byte of delta_x is 0 sta b lda delta_y sta b+1 ;delta y on b (b is divisor) jsr divide_ab ;computes to_mult/b lda rs+1 sta m lda rs+2 sta m+1 lda rs+3 sta m+2 ;m = to_mult/b (24 bit) ;rs: higher byte of quotient: unused ;rs+1, rs+2 and rs+3: lower bytes of quotient: used lda y_n eor x_n sta m_s ;determines sign of m lda m_s lda y2 cmp y1 bcc y_increment_sign_negative bne y_increment_sign_positive y_increment_sign_negative lda #$01 sta y_increment_sign jmp skip_y_increment_sign_positive y_increment_sign_positive lda #$00 sta y_increment_sign ;determines sign of increment of x during line plotting skip_y_increment_sign_positive lda y_increment_sign lda #$00 ;high byte of y1 is 0 sta multiplier lda y1 sta multiplier+1 ;only low bytes of multiplier used lda m sta multiplicand lda m+1 sta multiplicand+1 lda m+2 sta multiplicand+2 ;prepares to perform 32 bit multiply ;operation: y1 * m = TT jsr multiply_ab ;performs multiplication lda multiplier+1 sta mc lda sum sta mc+1 lda sum+1 sta mc+2 ;MC = y1 * M, used later jsr divide_off ;divides result of multiplication by offset lda multiplier+1 sta tt lda sum sta tt+1 lda sum+1 sta tt+2 ;TT (24 bit) = (y1*M)/offset ;16 bit are not enough! ;now ready to draw the line lda y1 sta y_domain ;starting point for line plotting lda y2 sta y_limit lda y_increment_sign bne y2_minus_1 inc y_limit jmp skip_y2_minus_1 y2_minus_1 dec y_limit skip_y2_minus_1 lda m_s beq draw_loop_170 ;checks if tn can be calculated outside loop clc ;calculates tt lda tt+2 adc x1+1 sta tn+2 lda tt+1 adc x1 ;higher bytes of y seen as a 24 bit number are 0 sta tn+1 lda tt adc #$00 sta tn ;tn = tt + x1 draw_loop_170 lda mc+1 sta my+2 lda mc sta my+1 lda #$00 sta my ;MY = MC/offset ;take MC, divide it by 256 and store result in MY ;MC is unchanged lda m_s beq m_s_zero_formula_170 sec ;x calculation if m is negative lda tn+2 sbc my+2 sta x_calc+2 lda tn+1 sbc my+1 sta x_calc+1 lda tn sbc my sta x_calc ;x_calc = x_calc -my ;(x_calc = tt + x1 - my) ==> x_calc = tn - my jmp skip_ms_zero_formula_170 m_s_zero_formula_170 clc ;x calculation if m is positive lda my+2 ;lower byte of my+2 adc x1+1 ;add to x1+1 (lower byte of x1) sta x_calc+2 lda my+1 adc x1 ;high byte of x1 now added sta x_calc+1 lda my ;highest byte of x1 seen as a 24 bit number is 0 adc #$00 sta x_calc ;x_calc = my + x1 sec lda x_calc+2 sbc tt+2 sta x_calc+2 lda x_calc+1 sbc tt+1 sta x_calc+1 lda x_calc sbc tt sta x_calc ;x_calc = x_calc - tt ;(x_calc = my + x1 - tt) skip_ms_zero_formula_170 lda y_domain sta yp lda x_calc+1 sta xp lda x_calc+2 sta xp+1 ;prepares values for point plotting jsr plot ;plots the point lda y_increment_sign beq increment_mc_170 sec lda mc+2 sbc m+2 sta mc+2 lda mc+1 sbc m+1 sta mc+1 lda mc sbc m sta mc ;MC = MC - M dec y_domain jmp skip_increment_mc_170 increment_mc_170 clc lda mc+2 adc m+2 sta mc+2 lda mc+1 adc m+1 sta mc+1 lda mc adc m sta mc ;MC = MC + M inc y_domain skip_increment_mc_170 lda y_domain cmp y_limit bne draw_loop_jump_170 rts draw_loop_jump_170 jmp draw_loop_170 ;subroutine: multiply by 256 (to_mult) ;to_mult is 24 bit (three bytes) off_multiply lda to_mult+1 sta to_mult lda to_mult+2 sta to_mult+1 lda #$00 sta to_mult+2 rts ; 31 bit by 15 bit divide (2 bilions etc... maximum value for a, 32767 for b) ; marcello of retro64 blog divide_ab lda #$00 sta rs sta rs+1 ;rs = 0 sta rs+2 sta rs+3 sta k sta k+1 ;k = 0 sta k+2 sta k+3 ;lda a ;sta oa ;lda a+1 ;sta oa+1 ;oa = a ;lda a+2 ;sta oa+2 ;lda a+3 ;sta oa+3 lda a bmi skip_ab_check_close lda b bmi skip_ab_check_close ;exits if b >32767 or a > 4 bilions etc... jmp label_40 skip_ab_check_close rts label_40 sec lda a+3 sbc k+3 sta a+3 lda a+2 sbc k+2 sta a+2 lda a+1 sbc k+1 sta a+1 lda a sbc k sta a ;a = a-k lda a cmp #$00 bcc label_50 bne label_48 lda a+1 cmp #$00 bcc label_50 bne label_48 lda a+2 cmp b bcc label_50 bne label_48 lda a+3 cmp b+1 bcc label_50 ;if a < b then goto 50 label_48 jsr routine_1000 clc lda rs+3 adc q+3 sta rs+3 lda rs+2 adc q+2 sta rs+2 lda rs+1 adc q+1 sta rs+1 lda rs adc q sta rs ;rs=rs+q jmp label_40 label_50 lda a cmp #$00 bne skip_ab_check lda a+1 cmp #$00 bne skip_ab_check lda a+2 cmp b bne skip_ab_check lda a+3 cmp b+1 beq inc_rs_low ;if a = b then rs = 1 skip_ab_check rts inc_rs_low inc rs+3 rts routine_1000 lda #$00 sta k lda #$00 sta k+1 lda b sta k+2 lda b+1 sta k+3 ;k = b lda b bne skip_b_0_check lda b+1 beq end ;return to caller of main program if b = 0 skip_b_0_check lda #$00 sta ct ;ct = 0 label_1010 asl k+3 rol k+2 rol k+1 rol k ;k = k * 2 lda k+3 bne skip_check_k lda k+2 bne skip_check_k lda k+1 bne skip_check_k lda k beq end ;if k = 0 (low and hi byte) then return to caller of main program ;overflow condition skip_check_k lda k cmp a bcc inc_ct bne label_1020 lda k+1 cmp a+1 bcc inc_ct bne label_1020 lda k+2 cmp a+2 bcc inc_ct bne label_1020 lda k+3 cmp a+3 bcc inc_ct label_1020 lsr k ror k+1 ror k+2 ror k+3 ;a = a/2 ldx ct lda power,x sta q inx lda power,x sta q+1 inx lda power,x sta q+2 inx lda power,x sta q+3 ; q = 2 ^ ct rts end pla pla rts inc_ct inc ct inc ct inc ct inc ct ;four times because power table is 32 bit jmp label_1010 ;subroutine: plot a point (codebase64.org) plot ;bmpscreen = start of bitmap screen ;byteaddr = address of the byte where the point to plot lies ldy yp ldx xp+1 lda #>xtablehigh sta XTBmdf+2 lda xp beq skipadj lda #>(xtablehigh + $ff) ;added brackets, otherwise it won't work sta XTBmdf+2 skipadj: lda ytablelow,y clc adc xtablelow,x sta byteaddr lda ytablehigh,y XTBmdf: adc xtablehigh,x sta byteaddr+1 lda byteaddr clc adc #bmpscreen sta byteaddr+1 ldy #$00 lda (byteaddr),y ora bitable,x sta (byteaddr),y rts ; clear bitmap screen clear_screen ldy #32 loopbmp ldx #$00 lda #$00 mod1 sta bmpscreen,x inx cpx #250 bne mod1 clc lda mod1+1 adc #250 sta mod1+1 lda mod1+2 adc #00 sta mod1+2 dey bne loopbmp lda #bmpscreen sta mod1+2 rts ; 17 * 9 bit multiply - 32 bit result ; multiplicand is 17 bit! multiplier is 9 bit ; multiplicand can be up to 24 bit, but with any multiplicand bigger than 16 bit, ; overflow can happen. This routine is designed to multiply an 8 or 9 bit number ; by a 17 bit number... on that case overflow should not happen. multiply_ab lda #$00 sta sum sta sum+1 ldx #9 ;number of bits, skips eight null shifts as multiplier is 9 bit lda multiplier beq clear_carry sec jmp skip_clear_carry clear_carry clc skip_clear_carry lda multiplier+1 sta multiplier jmp entry loop asl sum+1 rol sum rol multiplier+1 rol multiplier entry bcc skip_add clc lda sum+1 adc multiplicand+2 sta sum+1 lda sum adc multiplicand+1 sta sum lda multiplier+1 adc multiplicand sta multiplier+1 skip_add dex bne loop rts ;subroutine: divide result of multiply_ab (32 bit) by 256 ;divide_result_of_32bit_multiply_by_256 ;multiplier, multiplier+1, sum, sum+1 (32 bits, 4 bytes) divide_off lda sum sta sum+1 lda multiplier+1 sta sum lda multiplier sta multiplier+1 lda #$00 sta multiplier rts ;storage locations for main program x1 byte 0,0 y1 byte 0 x2 byte 0,0 y2 byte 0 delta_x byte 0,0 delta_y byte 0 to_mult byte 0,0,0 x_n byte 0 y_n byte 0 m byte 0,0,0 x_increment_sign byte 0 tt byte 0,0,0 mx byte 0,0,0 x_domain byte 0,0 y_calc byte 0,0,0 m_s byte 0 y_increment_sign byte 0 y_domain byte 0 x_calc byte 0,0,0 my byte 0,0,0 x_limit byte 0,0 y_limit byte 0 mc byte 0,0,0 tn byte 0,0,0 xw byte 0,0 ;storage locations for plot routine xp byte 0,0 yp byte 0 bit_table byte 128,64,32,16,8,4,2,1 temp byte 0 temp2 byte 0,0 byteaddr_y byte 0,0 yp_old byte 0 xp_old byte 0,0 ;storage locations and table for divide routine power byte 0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128 byte 0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128,0 byte 0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128,0,0 byte 1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128,0,0,0 ct byte 0 q byte 0,0,0,0 k byte 0,0,0,0 oa byte 0,0,0,0 a byte 0,0,0,0 b byte 0,0 rs byte 0,0,0,0 ;storage locations for 17 * 16 bit multiply multiplicand byte 0,0,0 multiplier byte 0,0 sum byte 0,0 ; result on multiplier and sum ;******************** PLOT TABLE ********************* ytablelow byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 byte 64,65,66,67,68,69,70,71 byte 128,129,130,131,132,133,134,135 ;********************* byte 192,193,194,195,196,197,198,199 byte 0,1,2,3,4,5,6,7 ytablehigh byte 0,0,0,0,0,0,0,0 byte 1,1,1,1,1,1,1,1 byte 2,2,2,2,2,2,2,2 byte 3,3,3,3,3,3,3,3 byte 5,5,5,5,5,5,5,5 byte 6,6,6,6,6,6,6,6 byte 7,7,7,7,7,7,7,7 byte 8,8,8,8,8,8,8,8 byte 10,10,10,10,10,10,10,10 byte 11,11,11,11,11,11,11,11 byte 12,12,12,12,12,12,12,12 byte 13,13,13,13,13,13,13,13 byte 15,15,15,15,15,15,15,15 byte 16,16,16,16,16,16,16,16 byte 17,17,17,17,17,17,17,17 byte 18,18,18,18,18,18,18,18 byte 20,20,20,20,20,20,20,20 byte 21,21,21,21,21,21,21,21 byte 22,22,22,22,22,22,22,22 ;********************* byte 23,23,23,23,23,23,23,23 byte 25,25,25,25,25,25,25,25 byte 26,26,26,26,26,26,26,26 byte 27,27,27,27,27,27,27,27 byte 28,28,28,28,28,28,28,28 byte 30,30,30,30,30,30,30,30 xtablelow byte 0,0,0,0,0,0,0,0 byte 8,8,8,8,8,8,8,8 byte 16,16,16,16,16,16,16,16 byte 24,24,24,24,24,24,24,24 byte 32,32,32,32,32,32,32,32 byte 40,40,40,40,40,40,40,40 byte 48,48,48,48,48,48,48,48 byte 56,56,56,56,56,56,56,56 byte 64,64,64,64,64,64,64,64 byte 72,72,72,72,72,72,72,72 byte 80,80,80,80,80,80,80,80 byte 88,88,88,88,88,88,88,88 byte 96,96,96,96,96,96,96,96 byte 104,104,104,104,104,104,104,104 byte 112,112,112,112,112,112,112,112 ;********************* byte 120,120,120,120,120,120,120,120 byte 128,128,128,128,128,128,128,128 byte 136,136,136,136,136,136,136,136 byte 144,144,144,144,144,144,144,144 byte 152,152,152,152,152,152,152,152 byte 160,160,160,160,160,160,160,160 byte 168,168,168,168,168,168,168,168 byte 176,176,176,176,176,176,176,176 byte 184,184,184,184,184,184,184,184 byte 192,192,192,192,192,192,192,192 byte 200,200,200,200,200,200,200,200 byte 208,208,208,208,208,208,208,208 byte 216,216,216,216,216,216,216,216 byte 224,224,224,224,224,224,224,224 byte 232,232,232,232,232,232,232,232 byte 240,240,240,240,240,240,240,240 byte 248,248,248,248,248,248,248,248 byte 0,0,0,0,0,0,0,0 byte 8,8,8,8,8,8,8,8 byte 16,16,16,16,16,16,16,16 byte 24,24,24,24,24,24,24,24 byte 32,32,32,32,32,32,32,32 byte 40,40,40,40,40,40,40,40 ;********************* byte 48,48,48,48,48,48,48,48 byte 56,56,56,56,56,56,56,56 xtablehigh byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 ;********************* byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 0,0,0,0,0,0,0,0 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 byte 1,1,1,1,1,1,1,1 bitable byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 ;********************* byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 ;those values from here should not be necessary, but leaved in place for safety byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1 byte 128,64,32,16,8,4,2,1