C64Power Forum
Software => Programowanie => Wątek zaczęty przez: Exosoft w 18 Stycznia 2017, 05:05
-
Witam :)
Widzę, że ciekawe forum i coś się dzieje to mam pytanko odnośnie wektorowych rzeczy na C64 (obliczane realtime oczywiście) . Ja jestem trochę początkującym i nie, koderem na C64 to nie brałem się jeszcze za robienie wektorów bo nie wiem na czym wyliczyć tablice oraz myślę, że z kodem jakoś sobie poradzę. Czytałem gdzieś w jakimś info, że jest sporo softu na PC i C64, które obliczają tablice wyglądu wektorów i innych podobnych rzeczy, więc może ktoś zna nazwy takich programów albo jakiś help np. być może są funkcje w kompilatorach ASM na PC do robienia takich rzeczy, jak np. obliczanie tablic sinus w 64tass itp. Ja oczywiście pod koniec tego postu podałem to jako przykład, a ogólnie to myślę, że ten temat przyda się też innym koderom, którzy np. planują zrobić własne demo . Pozdrawiam :)
-
[...]
że jest sporo softu na PC i C64, które obliczają tablice wyglądu wektorów
[...]
obliczanie tablic sinus w 64tass itp.
[...]
Tablice wyglądu wektorów ?
Tablice sinusa możesz sobie policzyć choćby w Basic'u, a natywnie takie rzeczy obsługuje KickASS
.fill 512,<round(0+16256*sin(toRadians(i*360/256+360/512)))
.fill 512,>round(0+16256*sin(toRadians(i*360/256+360/512)))
Kradnąc własnego posta załączony przykład liczy 128 dot ball 50FPS bez perspektywy
Dalsze rozważania, w szczególności informacje od Oswalda warte śledzenia tu:
http://formatwar.net/forums/viewtopic.php?f=5&t=493
i tu:
http://formatwar.net/forums/viewtopic.php?f=5&t=491
Commodorowskie (i nie tylko) ABC obliczania wektorów tu:
http://codebase64.org/doku.php?id=magazines:chacking8
!to "any128ball.prg" , CBM
;=================================
;= A simple 128 vector dots ball =
;= code by wegi =
;= in 2015.02.01 =
;=================================
;----------------------------
;- very unoptimized version -
;- make this better -
;- and faster :) -
;----------------------------
;show_free_time = -1
;save_regs = -1
;check_80 = -1
;recall_01 = -1
plot_by_ora = -1
many_dots = 16 ;so ball 128 -> 16*8 dots
;--- screen setup data ---
screen = $2000 ;our screen 256/200 px
rcolor = $0400
value_d018 = $18
value_dd00 = $03
;-------------------------
;- a tables declarations -
;-------------------------
tb_bit1 = $4000
tb_adlo1 = tb_bit1 + $80
tb_adhi1 = tb_adlo1 + $80
tb_bit2 = tb_adhi1 + $80
tb_adlo2 = tb_bit2 + $80
tb_adhi2 = tb_adlo2 + $80
;---
tb_fact1 = tb_bit1 + $0300 ;start plot coord.
tb_fact2 = tb_fact1 + many_dots
tb_fact3 = tb_fact2 + many_dots
replic_tab = tb_fact3 + many_dots
;---
trashcan = tb_bit1 + $0400 ;here go out all plots where Y is bellow 28 and above 228
;-
tbadlo = tb_bit1 + $0500 ;lo byte plot addres
tbadhi = tb_bit1 + $0600 ;hi byte plot address
tabxm = tb_bit1 + $0700 ;offset for x value
tbbit = tb_bit1 + $0800 ;a plot value
;- inverse tables
tbadlo2 = tb_bit1 + $0900
tbadhi2 = tb_bit1 + $0a00
tabxm2 = tb_bit1 + $0b00
tbbit2 = tb_bit1 + $0c00
;---
tbscale = tb_bit1 + $0d00 ;a prescale tables start address
;---
;------------------
;- some variables -
;------------------
;***********************
lo_angle_x = $12
lo_angle_y = $13
lo_angle_z = $14
hi_angle_x = $15 ;sx
hi_angle_y = $16 ;sy
hi_angle_z = $17 ;sz
lo_delta_x = $19
lo_delta_y = $1a
lo_delta_z = $1b
hi_delta_x = $1c
hi_delta_y = $1d
hi_delta_z = $1e
;************************
mat_A_lo = $20 ; A = (cos(sy-sz)+cos(sy+sz))/4
mat_B_lo = $21 ; B = (sin(sy-sz)-sin(sy+sz))/4
mat_C_lo = $22 ; C = sin(sy)/2
mat_D_lo = $23 ; D = (cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz)/2 + sin(sx+sz)-sin(sx-sz))/4
mat_E_lo = $24 ; E = (sin(sx+sy+sz)-sin(sx-sy+sz)-sin(sx+sy-sz)-sin(sy+sz-sx)/2 + cos(sx+sz)+cos(sx-sz))/4
mat_F_lo = $25 ; F = (sin(sy-sx)-sin(sy+sx))/4
mat_A_hi = $27 ;hi byte of matrix
mat_B_hi = $28
mat_C_hi = $29
mat_D_hi = $2a
mat_E_hi = $2b
mat_F_hi = $2c
;********************
t1 = $2e ;sy-sz
t2 = $2f ;sy+sz
t3 = $30 ;sx+sz
t4 = $31 ;sx-sz
t5 = $32 ;sx+sy+sz = sx+t2
t6 = $33 ;sx-sy+sz = sx-t1
t7 = $34 ;sx+sy-sz = sx+t1
t8 = $35 ;sy+sz-sx = t2-sx
v1 = $2e ;(A*fact2)
v2 = $2f ;(B*fact1)
v3 = $30 ;(C*fact3)
v4 = $31 ;(D*fact2)
v5 = $32 ;(E*fact1)
v6 = $33 ;(F*fact3)
tmpr1 = $37
tmpr2 = $38
vect1 = $3a ;$3a-$3b
vect2 = $3c ;$3c-$3d
tmpr3 = $3f
tmpr4 = $40
t_x = $41
t_y = $42
dotcount = $44
pointer = $45
count_check = $46
;-----------------
;- variables end -
;-----------------
;-----------------
;- program start -
;-----------------
;===========================
;=== basiline 0 sys 2061 ===
;===========================
*=$0801
!byte $0b,$08,$00,$00,$9e,$32
!byte $30,$36,$31,$00,$00,$00
;-------------
;======================
sei
cld
jsr initirq
jsr setup_scr
lda #$3b
sta $d011
jsr make_tables
jsr insert_dots
lda #0
sta vect1
inc $d019
cli
;---
-
!ifdef show_free_time {
inc $d020
}
jmp -
;---
;---------------------
;- quarter of sin -
;- this sine have a -
;- -255 to + 255 -
;- values -
;---------------------
tbsine
!byte $00
!byte $06,$0c,$12,$19
!byte $1f,$25,$2b,$31
!byte $38,$3e,$44,$4a
!byte $50,$56,$5c,$61
!byte $67,$6d,$73,$78
!byte $7e,$83,$88,$8e
!byte $93,$98,$9d,$a2
!byte $a7,$ab,$b0,$b5
!byte $b9,$bd,$c1,$c5
!byte $c9,$cd,$d1,$d4
!byte $d8,$db,$de,$e1
!byte $e4,$e7,$ea,$ec
!byte $ee,$f1,$f3,$f4
!byte $f6,$f8,$f9,$fb
!byte $fc,$fd,$fe,$fe
!byte $ff,$ff,$ff,$00
;-------------------------------------
;- ///////////////////////////////// -
;-------------------------------------
;-------------
irq
!ifdef save_regs {
sta acc_reg
stx reg_x
sty reg_y
}
;---
!ifdef recall_01 {
lda $01
pha
lda #$35
sta $01
}
;---
!ifdef show_free_time {
lda #0
sta $d020
}
;---
inc $d019
;***********************************************
;****************** mainloop *******************
;***********************************************
tst_01= *+1
lda #$00
eor #$ff
sta tst_01
bne next_01
;-------------------
lda #$00
tax
- ldy tb_adhi2,x
sty vect1+1
ldy tb_adlo2,x
sta (vect1),y
inx
bpl -
tax
-
ldy tb_adhi1,x
sty vect1+1
ldy tb_adlo1,x
lda tb_bit1,x
;---
!ifdef plot_by_ora {
ora (vect1),y
}
;---
sta (vect1),y
inx
bpl -
jsr update_angles ;+ calculate and check matrix
jmp loop2
;***********************
next_01
lda #$00
tax
- ldy tb_adhi1,x
sty vect1+1
ldy tb_adlo1,x
sta (vect1),y
inx
bpl -
tax
-
ldy tb_adhi2,x
sty vect1+1
ldy tb_adlo2,x
lda tb_bit2,x
;---
!ifdef plot_by_ora {
ora (vect1),y
}
;---
sta (vect1),y
inx
bpl -
jsr update_angles ;+ calculate and check matrix
jmp loop1
;**********************************
;*** this is all off mainloop ***
;**********************************
irq_exit
;-------------------
!ifdef recall_01 {
pla
sta $01
}
!ifdef save_regs {
acc_reg = *+1
lda #$00
reg_x = *+1
ldx #$00
reg_y = *+1
ldy #$00
}
nmiex
rti
;------
;================================
;=== o.k. irq works fine :) ! ===
;================================
;*****************************
;**** this is a main stub ****
;*****************************
;=============================
;=== update angles ===
;=============================
update_angles
ldx #2
clc
- lda lo_angle_x,x
adc lo_delta_x,x
sta lo_angle_x,x
lda hi_angle_x,x
adc hi_delta_x,x
sta hi_angle_x,x
dex
bpl -
;rts
;===========================
;= calculate 16 bit matrix =
;= [ A B C ] =
;= [ D E F ] =
;===========================
; A = (cos(t1)+cos(t2))/4
; B = (sin(t1)-sin(t2))/4
; C = sin(sy)/2
; D = (sin(t3)-sin(t4))/4 + (cos(t6)-cos(t5)+cos(t8)-cos(t7))/8
; E = (cos(t3)+cos(t4))/4 + (sin(t5)-sin(t6)-sin(t7)-sin(t8))/8
; F = (sin(t9)-sin(t10))/4
;where
; t1 = sy-sz
; t2 = sy+sz
; t3 = sx+sz
; t4 = sx-sz
; t5 = sx+sy+sz = sx+t2
; t6 = sx-sy+sz = sx-t1
; t7 = sx+sy-sz = sx+t1
; t8 = sy+sz-sx = t2-sx
; t9 = sy-sx
; t10= sy+sx
;------------------------------
; A = (cos(sy-sz)+cos(sy+sz))/4
;------------------------------
;-------------------------------
; B = (sin(sy-sz)-sin(sy+sz))/4
;-------------------------------
;--------------
; C = sin(sy)/2
;--------------
;------------------------------------------------------------------------------------------
; D = (cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz)/2 + sin(sx+sz)-sin(sx-sz))/4
;------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------
; E = (sin(sx+sy+sz)-sin(sx-sy+sz)-sin(sx+sy-sz)-sin(sy+sz-sx)/2 + cos(sx+sz)+cos(sx-sz))/4
;------------------------------------------------------------------------------------------
;------------------------------
; F = (sin(sy-sx)-sin(sy+sx))/4
;------------------------------
calculate_matrix
;**********************************************************
;---
;CALC A
;---
;------------------------------
; A = (cos(sy-sz)+cos(sy+sz))/4
;------------------------------
ldx #$00
stx tmpr1
stx tmpr2
lda hi_angle_y ;(sy)
sec
sbc hi_angle_z ;(sy-sz)
sta t1 ;t1 = (sy-sz)
jsr offs64_calc ;cos(sy-sz)
lda hi_angle_y ;(sy)
clc
adc hi_angle_z ;(sy+sz)
sta t2 ;t2 = (sy+sz)
jsr offs64_calc ;cos(sy+sz)
;in acc is tmpr2
cmp #$80 ;div 4
ror
sta mat_A_hi
ror tmpr1
asl
lda tmpr1
ror
sta mat_A_lo
;(cos(t1)+cos(t2))/4 = (cos(sy-sz)+cos(sy+sz))/4
;---
;CALC B
;---
;-------------------------------
; B = (sin(sy-sz)-sin(sy+sz))/4
;-------------------------------
lda #$00
sta tmpr1
sta tmpr2
lda t1 ;(sy-sz)
jsr part_calc ;sin(sy-sz)
lda t2 ;(sy+sz)
eor #$80 ;-sin
jsr part_calc ;-sin(sy+sz)
;in acc is tmpr2
cmp #$80 ;div 4
ror
sta mat_B_hi
ror tmpr1
asl
lda tmpr1
ror
sta mat_B_lo
;(sin(t1)-sin(t2))/4 = (sin(sy-sz)-sin(sy+sz))/4
;---
;CALC C
;---
;--------------
; C = sin(sy)/2
;--------------
ldx #$00
stx tmpr1
stx tmpr2
lda hi_angle_y ;(sy)
jsr part_calc ;sin(sy)
;in acc is tmpr2
cmp #$80 ;div 2
ror
sta mat_C_hi
lda tmpr1
ror
sta mat_C_lo ;sin(sy)/2
;---
;CALC D
;---
;------------------------------------------------------------------------------------------
; D = (cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz)/2 + sin(sx+sz)-sin(sx-sz))/4
;------------------------------------------------------------------------------------------
lda #$00
sta tmpr1
sta tmpr2
lda hi_angle_x ;(sx)
sec
sbc t1 ;(sx-t1) = (sx-sy+sz)
sta t6 ;t6 = (sx-sy+sz)
jsr offs64_calc ;cos(sx-sy+sz)
lda hi_angle_x ;(sx)
clc
adc t2 ;(sx+t2) = (sx+sy+sz)
sta t5 ;t5 = (sx+sy+sz)
adc #$c0 ;-cos
jsr part_calc ;-cos(sx+sy+sz)
lda t2 ;s(y+sz)
sec
sbc hi_angle_x ;(t2-sx) = (sy+sz-sx)
sta t8 ;t8 = (sy+sz-sx)
jsr offs64_calc ;cos(sy+sz-sx)
lda hi_angle_x ;(sx)
clc
adc t1 ;(sx+t1) = (sx+sy-sz)
sta t7 ;t7 = (sx+sy-sz)
adc #$c0 ;-cos
jsr part_calc ;-cos(sx+sy-sz)
;in acc tmpr2
asl ;div 2
ror tmpr2
ror tmpr1
;(cos(t6)-cos(t5)+cos(t8)-cos(t7))/2 =
; = (cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz))/2
lda hi_angle_x ;(sx)
clc
adc hi_angle_z ;(sx+sz)
sta t3 ;t3 = (sx+sz)
jsr part_calc ;sin(sx+sz)
lda hi_angle_x ;(sx)
sec
sbc hi_angle_z ;(sx-sz)
sta t4 ;t4 = (sx-sz)
eor #$80 ;-sin
jsr part_calc ;-sin(sx-sz)
;in acc is tmpr2
cmp #$80 ;div 4
ror
sta mat_D_hi
ror tmpr1
asl
lda tmpr1
ror
sta mat_D_lo
;[(sin(t3)-sin(t4))/4] + [(cos(t6)-cos(t5)+cos(t8)-cos(t7))/8] =
;= [(cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz)/2 + sin(sx+sz)-sin(sx-sz))]/4
;---
;CALC E
;---
;------------------------------------------------------------------------------------------
; E = (sin(sx+sy+sz)-sin(sx-sy+sz)-sin(sx+sy-sz)-sin(sy+sz-sx)/2 + cos(sx+sz)+cos(sx-sz))/4
;------------------------------------------------------------------------------------------
lda #$00
sta tmpr1
sta tmpr2
lda t5 ;(sx+sy+sz)
jsr part_calc ;sin(sx+sy+sz)
lda t6 ;(sx-sy+sz)
eor #$80 ;-sin
jsr part_calc ;-sin(sx-sy+sz)
lda t7 ;(sx+sy-sz)
eor #$80 ;-sin
jsr part_calc ;-sin(sx+sy-sz)
lda t8 ;(sy+sz-sx)
eor #$80 ;-sin
jsr part_calc ;-sin(sy+sz-sx)
;in acc tmpr2
asl ;div 2
ror tmpr2
ror tmpr1
;(sin(t5)-sin(t6)-sin(t7)-sin(t8))/2 =
; = (cos(sx-sy+sz)-cos(sx+sy+sz)+cos(sy+sz-sx)-cos(sx+sy-sz))/2
lda t3 ;(sx+sz)
jsr offs64_calc ;cos(sx+sz)
lda t4 ;(sx-sz)
jsr offs64_calc ;cos(sx-sz)
;in acc is tmpr2
cmp #$80 ;div 4
ror
sta mat_E_hi
ror tmpr1
asl
lda tmpr1
ror
sta mat_E_lo
;[(cos(t3)+cos(t4))]/4 + [(sin(t5)-sin(t6)-sin(t7)-sin(t8))]/8 =
; = [(sin(sx+sy+sz)-sin(sx-sy+sz)-sin(sx+sy-sz)-sin(sy+sz-sx)/2 + cos(sx+sz)+cos(sx-sz))]/4
;---
;CALC F
;---
;------------------------------
; F = (sin(sy-sx)-sin(sy+sx))/4
;------------------------------
lda #$00
sta tmpr1
sta tmpr2
lda hi_angle_y ;(sy)
sec
sbc hi_angle_x ;(sy-sx)
jsr part_calc ;sin(sy-sx)
lda hi_angle_y ;(sy)
clc
adc hi_angle_x ;(sy+sx)
eor #$80 ;-sin
jsr part_calc ;-sin(sy+sx)
;in acc is tmpr2
cmp #$80 ;div 4
ror
sta mat_F_hi
ror tmpr1
asl
lda tmpr1
ror
sta mat_F_lo ;(sin(sy-sx)-sin(sy+sx))/4
;rts
;======================
;= now a little check =
;======================
check_matrix
ldx #$05
- lda mat_A_hi,x
!ifdef check_80 {
bne +
lda mat_A_lo,x
cmp #$80
bne not_do
beq do_it
+
}
;cmp #$FE
;bne +
;lda #$80
;bne repair
+ cmp #$01
bne not_do
do_it lda #$7F
repair sta mat_A_lo,x
not_do dex
bpl -
rts
;=================
;= check end =
;=================
;==========================
;= end calculate_matrix =
;==========================
;----------------------------------
;- subrotine to calc matrix -
;- sum to tmpr1 and tmpr2 -
;- needed sin/cos([S(x|y|z)] -
;----------------------------------
offs64_calc ;cos
clc
adc #$40
;-
part_calc ;sin
ldy #$00
tax
and #$7F
cmp #$40
bcc less_64
bne no_iny
iny
no_iny and #$3F
eor #$ff ;c =1
adc #$40
;---
less_64 ;sign(+)
cpx #$80
tax
bcs over_128
lda tbsine,x
adc tmpr1
sta tmpr1
tya
adc tmpr2
sta tmpr2
rts
;---
over_128 ;sign(-)
lda tmpr1
sbc tbsine,x
sta tmpr1
tya
eor #$ff ;Carry is cummulated with sbc
adc tmpr2
sta tmpr2
rts
;--------------------------------
;- end subrotine to calc matrix -
;--------------------------------
;============================
; *** this code make : ***
; ** X and Y [X;Y] **
; * coordinates *
; ** as [ X ; Y ] **
;-------------------------------------------------------------------------------
; plot 1/2 [ (A*fact2 + B*fact1 + C*fact3) ; (D*fact2 + E*fact1 + F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; plot 3/4 [ (A*fact2 + B*fact1 - C*fact3) ; (D*fact2 + E*fact1 - F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; plot 5/6 [ (A*fact2 - B*fact1 - C*fact3) ; (D*fact2 - E*fact1 + F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; plot 7/8 [ (A*fact2 - B*fact1 - C*fact3) ; (D*fact2 - E*fact1 - F*fact3) ]
;-------------------------------------------------------------------------------
Po tak solidnej dawce informacji popartej żywymi, działającymi przykładami możesz nam teraz pacnąć gorauda (żerom)
-
Ciąg dalszy kodu, bo się nie zmieściło w jednym poście.
loop1
;-----------------------
;- get the all factors -
;-----------------------
;---
lda #$0f
sta dotcount
lda #$00
sta tmpr3
loop1a
ldx dotcount
;---
lda tb_fact3,x
sta vect1+1
ldy mat_F_lo
lda (vect1),y
sta v6 ;(F*fact3)
;---
ldy mat_C_lo
lda (vect1),y
sta v3 ;(C*fact3)
;---
lda tb_fact1,x
sta vect1+1
ldy mat_E_lo
lda (vect1),y
sta v5 ;(E*fact1)
;---
ldy mat_B_lo
lda (vect1),y
sta v2 ;(E*fact1)
;---
lda tb_fact2,x
sta vect1+1
ldy mat_D_lo
lda (vect1),y
sta v4 ;(D*fact2)
;---
ldy mat_A_lo
lda (vect1),y
sta v1 ;(A*fact2)
;-------------------------------------------------------------------------------
; plot 1/2 [ (A*fact2 + B*fact1 + C*fact3) ; (D*fact2 + E*fact1 + F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------
;- calculations plot 1/2 -
;-------------------------
;lda v1
;acc = v1
adc v2 ;(A*fact2 + B*fact1)
adc v3 ;(A*fact2 + B*fact1 + C*fact3)
tax ;x plot 5/6 ;(A*fact2 + B*fact1 + C*fact3)
ldy tmpr3
lda tbbit,x
sta tb_bit1,y
lda tbbit2,x
sta tb_bit1+1,y
lda v4
adc v5 ;(D*fact2 + E*fact1)
adc v6 ;(D*fact2 + E*fact1 + F*fact3)
tay ;y plot 5/6 ;(D*fact2 + E*fact1 + F*fact3)
;------------------------
;- now prepare plot 1/2 -
;------------------------
;x = (A*fact2 + B*fact1 + C*fact3)
;y = (D*fact2 + E*fact1 + F*fact3)
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo1,x
lda tbadhi,y
adc #0
sta tb_adhi1,x
ldx tmpr4
lda tbadlo2,y
;clc - no - C = 0
adc tabxm2,x
ldx tmpr3
sta tb_adlo1+1,x
lda tbadhi2,y
adc #0
sta tb_adhi1+1,x
;-------------------------------------------------------------------------------
; plot 3/4 [ (A*fact2 + B*fact1 - C*fact3) ; (D*fact2 + E*fact1 - F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------
;- calculations plot 3/4 -
;-------------------------
lda v1 ;(A*fact2)
adc v2 ;(A*fact2 + B*fact1)
sbc v3 ;(A*fact2 + B*fact1 - C*fact3)
tax ;(A*fact2 + B*fact1 - C*fact3)
ldy tmpr3
lda tbbit,x
sta tb_bit1+2,y
lda tbbit2,x
sta tb_bit1+3,y
lda v4 ;(D*fact2)
adc v5 ;(D*fact2 + E*fact1)
sbc v6 ;(D*fact2 + E*fact1 - F*fact3)
tay ;y plot 1/2 ;(D*fact2 + E*fact1 - F*fact3)
;------------------------
;- now prepare plot 3/4 -
;------------------------
;x = (A*fact2 + B*fact1 - C*fact3)
;y = (D*fact2 + E*fact1 - F*fact3)
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo1+2,x
lda tbadhi,y
adc #0
sta tb_adhi1+2,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo1+3,x
lda tbadhi2,y
adc #0
sta tb_adhi1+3,x
;-------------------------------------------------------------------------------
; plot 5/6 [ (A*fact2 - B*fact1 - C*fact3) ; (D*fact2 - E*fact1 + F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------
;- calculations plot 5/6 -
;-------------------------
lda v1 ;(A*fact2)
sbc v2 ;(A*fact2 - B*fact1)
adc v3 ;(A*fact2 - B*fact1 - C*fact3)
tax ;x plot 3/4 ;(A*fact2 - B*fact1 - C*fact3)
ldy tmpr3
lda tbbit,x
sta tb_bit1+4,y
lda tbbit2,x
sta tb_bit1+5,y
lda v4 ;(D*fact2)
sbc v5 ;(D*fact2 - E*fact1)
adc v6 ;(D*fact2 - E*fact1 + F*fact3)
tay ;y plot 3/4 ;(D*fact2 - E*fact1 + F*fact3)
;------------------------
;- now prepare plot 5/6 -
;------------------------
;x = (A*fact2 - B*fact1 - C*fact3)
;y = (D*fact2 - E*fact1 + F*fact3)
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo1+4,x
lda tbadhi,y
adc #0
sta tb_adhi1+4,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo1+5,x
lda tbadhi2,y
adc #0
sta tb_adhi1+5,x
;-------------------------------------------------------------------------------
; plot 7/8 [ (A*fact2 - B*fact1 - C*fact3) ; (D*fact2 - E*fact1 - F*fact3) ]
;-------------------------------------------------------------------------------
;-------------------------
;- calculations plot 7/8 -
;-------------------------
lda v1 ;(A*fact2)
sbc v2 ;(A*fact2 - B*fact1)
sbc v3 ;(A*fact2 - B*fact1 - C*fact3)
tax ;x plot 7/8 ;(A*fact2 - B*fact1 - C*fact3)
ldy tmpr3
lda tbbit,x
sta tb_bit1+6,y
lda tbbit2,x
sta tb_bit1+7,y
lda v4
sbc v5 ;(D*fact2 - E*fact1)
sbc v6 ;(D*fact2 - E*fact1 - F*fact3)
tay ;y plot 7/8 ;(D*fact2 - E*fact1 - F*fact3)
;------------------------
;- now prepare plot 7/8 -
;------------------------
;y = (D*fact2 - E*fact1 - F*fact3)
;x = (A*fact2 - B*fact1 - C*fact3)
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo1+6,x
lda tbadhi,y
adc #0
sta tb_adhi1+6,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo1+7,x
lda tbadhi2,y
adc #0
sta tb_adhi1+7,x
;-
lda tmpr3
clc
adc #8
sta tmpr3
dec dotcount
bmi +
jmp loop1a
+ jmp irq_exit
;============
loop2
;-----------------------
;- get the all factors -
;-----------------------
lda #$0f
sta dotcount
lda #$00
sta tmpr3
loop2a
;---
ldx dotcount
;---
lda tb_fact3,x
sta vect1+1
ldy mat_F_lo
lda (vect1),y
sta v6 ;(F*fact3)
;---
ldy mat_C_lo
lda (vect1),y
sta v3 ;(C*fact3)
;---
lda tb_fact1,x
sta vect1+1
ldy mat_E_lo
lda (vect1),y
sta v5 ;(E*fact1)
;---
ldy mat_B_lo
lda (vect1),y
sta v2 ;(E*fact1)
;---
lda tb_fact2,x
sta vect1+1
ldy mat_D_lo
lda (vect1),y
sta v4 ;(D*fact2)
;---
ldy mat_A_lo
lda (vect1),y
sta v1 ;(A*fact2)
;-------------------------
;- calculations plot 1/2 -
;-------------------------
;lda v1
;acc = v1
adc v2
adc v3
tax
ldy tmpr3
lda tbbit,x
sta tb_bit2,y
lda tbbit2,x
sta tb_bit2+1,y
lda v4
adc v5
adc v6
tay
;------------
;- plot 1/2 -
;------------
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo2,x
lda tbadhi,y
adc #0
sta tb_adhi2,x
ldx tmpr4
lda tbadlo2,y
;clc - no - C = 0
adc tabxm2,x
ldx tmpr3
sta tb_adlo2+1,x
lda tbadhi2,y
adc #0
sta tb_adhi2+1,x
;-------------------------
;- calculations plot 3/4 -
;-------------------------
lda v1
adc v2
sbc v3
tax
ldy tmpr3
lda tbbit,x
sta tb_bit2+2,y
lda tbbit2,x
sta tb_bit2+3,y
lda v4
adc v5
sbc v6
tay
;------------
;- plot 3/4 -
;------------
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo2+2,x
lda tbadhi,y
adc #0
sta tb_adhi2+2,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo2+3,x
lda tbadhi2,y
adc #0
sta tb_adhi2+3,x
;-------------------------
;- calculations plot 5/6 -
;-------------------------
lda v1
sbc v2
adc v3
tax
ldy tmpr3
lda tbbit,x
sta tb_bit2+4,y
lda tbbit2,x
sta tb_bit2+5,y
lda v4
sbc v5
adc v6
tay
;------------
;- plot 5/6 -
;------------
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo2+4,x
lda tbadhi,y
adc #0
sta tb_adhi2+4,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo2+5,x
lda tbadhi2,y
adc #0
sta tb_adhi2+5,x
;-------------------------
;- calculations plot 7/8 -
;-------------------------
lda v1
sbc v2
sbc v3
tax
ldy tmpr3
lda tbbit,x
sta tb_bit2+6,y
lda tbbit2,x
sta tb_bit2+7,y
lda v4
sbc v5
sbc v6
tay
;------------
;- plot 7/8 -
;------------
lda tbadlo,y
clc
adc tabxm,x
stx tmpr4
ldx tmpr3
sta tb_adlo2+6,x
lda tbadhi,y
adc #0
sta tb_adhi2+6,x
ldx tmpr4
lda tbadlo2,y
adc tabxm2,x
ldx tmpr3
sta tb_adlo2+7,x
lda tbadhi2,y
adc #0
sta tb_adhi2+7,x
;-
lda tmpr3
clc
adc #8
sta tmpr3
dec dotcount
bmi +
jmp loop2a
+ jmp irq_exit
;=================================
;******************************
;**** THE END of main stub ****
;******************************
;-----------------------------
;- bellow a helps procedures -
;- to graph init, irq, -
;- calc tables etc... -
;-----------------------------
;==========================
;= simple init irq, init =
;= timer, colors etc... =
;==========================
initirq
lda #$00
sta $d015
lda #<irq
sta $fffe
lda #<nmiex
sta $fffa
lda #>irq
sta $ffff
sta $fffb
lda #$7f
sta $dc0d
lda $dc0d
bit $d011
bpl *-3
lda #$c8
sta $d016
lda #value_d018
sta $d018
lda #value_dd00
sta $dd00
lda #$01
sta $d01a
lda #$0b
sta $d011
lda #$fa
sta $d012
rts
;=====================
;= end init irq... =
;=====================
;=======================================
;= now make all needed tables : =
;= make tbbits for plotting, =
;= tab address of plots and =
;= prepare them to sign (-128/127) =
;=======================================
make_tables
lda #$00
tax
tay
sec
;x=0 y=0 a=0 C=1
;sec ;C=1
- ror
bne *+3
ror
sta tbbit,x
dey
sta tbbit2,y
inx
bne -
;---
;x=0
- txa
and #$f8
sta tabxm,x
lda #0
sta tbadlo,x
lda #>trashcan
sta tbadhi,x
inx
bne -
;---
- lda #>trashcan
sta tb_adhi1,x
sta tb_adhi2,x
lda #0
sta tb_bit1,x
sta tb_bit2,x
sta tb_adlo1,x
sta tb_adlo2,x
inx
bpl -
tax
;---
lda #>screen
sta tmpr4
lda #32 ;many pixel to the rigt
sta tmpr3
;x=0 C=0
calc lda tmpr3
sta tmpr1
sta tbadlo+28,x
lda tmpr4
sta tmpr2
sta tbadhi+28,x
inx
ldy #$07
calc2 inc tmpr1
bne *+4
inc tmpr2
lda tmpr1
sta tbadlo+28,x
lda tmpr2
sta tbadhi+28,x
inx
dey
bne calc2
lda tmpr3
;clc ;C=0
adc #$40
sta tmpr3
lda tmpr4
adc #$01
sta tmpr4
cpx #200
bcc calc
;--- hocus-pocus #1 for tables :)
;============
lda #>tbadlo
sta vect2+1
sty vect2
ldx #3
stx tmpr3
- lda (vect2),y
pha
tya
eor #$80
tay
lda (vect2),y
tax
pla
sta (vect2),y
tya
eor #$80
tay
txa
sta (vect2),y
iny
bpl -
ldy #0
inc vect2+1
dec tmpr3
bne -
;----------
ldx #0
; --- yep :) hocus-pocus #2 for tables...
;x=0
;y=0
- dey
lda tabxm,y
sta tabxm2,x
lda tbadlo,y
sta tbadlo2,x
lda tbadhi,y
sta tbadhi2,x
inx
bne -
rts
;-----------------------------
;- uff... maketables done :) -
;-----------------------------
setup_scr
lda #$34
sta $01
lda #$10 ;fill hires bitmap color ram - plot = white, background = black
ldx #$00
- sta rcolor,x
sta rcolor+$0100,x
sta rcolor+$0200,x
sta rcolor+$0300,x
inx
bne -
inc $01
;-----------------------
;- simple clear screen -
;-----------------------
lda #>screen
sta fll+2
txa ;x=0
ldy #$1f
fll
sta screen,x
inx
bne fll
inc fll +2
dey
bne fll
- sta screen+$1e40,x
inx
bne -
rts
;-------------
;============================
;=== make a ball dots ... ===
;= and place on the sphere =
;============================
;-----------------------
;- to calulation using -
;- [ C F ] where : -
;-----------------------
;--------------
; C = sin(sy)/2
;--------------
;------------------------------
; F = (sin(sy-sx)-sin(sy+sx))/4
;------------------------------
;---
insert_dots
lda #$48
sta t_x
;lda #$48
sta t_y
;---
ldx #many_dots-1
-
lda t_x
sec
sbc #$10
sta t_x
and #$3f
sta hi_angle_x
lda #0
sta hi_angle_z
txa
and #3
cmp #3
bne +
lda t_y
sec
sbc #16
sta t_y
+ lda t_y
eor #$7f
clc
adc #1
sta hi_angle_y
txa ;safe x value
pha
jsr calculate_matrix ;make C and F
pla
tax ;restore x
lsr mat_F_hi ; div 2
lda mat_F_lo
ror
;---
sta tb_fact1,x
pha ;hehe
txa ;fast make 3rd value without calculatons :-)
eor #3
tay
pla
sta tb_fact2,y
lsr mat_C_hi ; div 2
lda mat_C_lo
ror
;---
sta tb_fact3,x
dex
bpl -
ldx #5
- lda delty,x
sta lo_delta_x,x
txa
sta lo_angle_x,x
dex
bpl -
;=======================
lda #>tbscale
sta pointer
ldx #many_dots*3-1
lda #$ff
- sta replic_tab,x
dex
bpl -
;x=#$ff
inx
findloop
txa
tay
iny
lda #0
sta count_check
count_find
lda replic_tab,y
cmp #$ff
bne nofind
lda tb_fact1,x
cmp tb_fact1,y
bne nofind
;find here
lda pointer
sta outp+2
sta outp2+2
sta inp+2
sta replic_tab,x
sta replic_tab,y
inc count_check
nofind iny
cpy #many_dots*3
bcc count_find
lda count_check
beq +
txa
pha ;safe x
;------------------------------------
;- make one block table for a point -
;------------------------------------
;do_one_table
lda tb_fact1,x
;--- ;in acc dot factor value
asl ; muls 4
asl
tay
;clc ;after asl Carry = 0
lda #0
tax
sta tmpr1
sta tmpr2
;---
outp sta tbscale,x
;---
tya
adc tmpr1
sta tmpr1
lda tmpr2
adc #0
sta tmpr2
inx
bpl outp
;-
;x=#$80
ldy #$7f
inv lda #0
sec
inp sbc tbscale,y
outp2 sta tbscale,x
dey
inx
bne inv
;--------------------
pla
tax ;restore x
inc pointer
+ inx
cpx #many_dots*3-1
bcc findloop
-
lda replic_tab,x
sta tb_fact1,x
dex
bpl -
rts
;====================================
;=== the end of inserting dots ====
;====================================
;---------------------------------------
;lo & hi delta rotation x y z (sx;sy;sz)
delty !byte $00,$00,$00,$01,$ff,$ff
;---------------------------------------
;eof
;-
-
Ja tam z przeszłości pamiętam że takie wątki kończą się zrób to za mnie.
-
Dzięki Wegi i już cofnąłem się wstecz do postów w "programowanie" to sporo czytałem na temat dotsów i innych podobnych ciekawych rzeczy na wektorach, które zapewne się przydadzą przy robieniu np. dema ! ...Mialem też na myśli coś, co np. obliczy kształt obracanych liter logo po osi X,Y,Z na wektorach 3D . Znalazłem coś "3D construction kit", więc może ktoś już coś robił podobnego na tym programie ?
Zapewne można to też jakoś wyliczyć w innym języku programowania np. MINGW, GCC itp.
http://csdb.dk/release/?id=31655
-
Jako przykład autor tego intra "Hain/ESM", z tego co widać już jest nieaktywny na C64 ale może Mr Wegi jako, że dołączyłeś do tematu i jesteś memberem ESM to może mógłbyś się jakoś dowiedzieć na czym Hain wyliczył logo ESM w tym intrze ?
http://intros.c64.org/inc_download.php?iid=2691
-
Chyba źle zrozumiałeś koncepcję grafiki wektorowej, albo chodzi ci o zrobienie "prekalkulowanej" animacji, raczej tego drugiego rozwiązania nie stosuje się dla obiektów składających się z kilku do kilkunastu punktów, chyba że chodzi o naprawdę bardzo prostą animację. Przeczytałeś artykuł z linku który zapodał Wegi, zwłaszcza ten z codebase64 o grafice 3D? Jeśli nie to polecam.
-
Dla niedowidzących ściągających przykład z formatwar.net - w pierwszym moim poście dołączyłem zipa z ASM i PRG.
Jako ciekawostkę dodaję program, który sobie pisałem, żeby popatrzeć jak przez matryce liczą się wierzchołki. Prawdopodobnie zupełnie nieprzydatny.
Z twoich life is code nie widać za bardzo chęci kodowania. W zasadzie nie rozumiem co chcesz zrobić.
-
ja sobie myślę tak, że jak ludzie mogą teraz iphona można kupic to komputer sam wektorówkę zrobi tylko trzeba znaleść do tego program... konsumpcja panie.
Dałeś mi już tyle tematów do przemyśleń że chyba coś zakoduje na cm0 :)
-
Chyba źle zrozumiałeś koncepcję grafiki wektorowej, albo chodzi ci o zrobienie "prekalkulowanej" animacji, raczej tego drugiego rozwiązania nie stosuje się dla obiektów składających się z kilku do kilkunastu punktów, chyba że chodzi o naprawdę bardzo prostą animację. Przeczytałeś artykuł z linku który zapodał Wegi, zwłaszcza ten z codebase64 o grafice 3D? Jeśli nie to polecam.
Ja powiem szczerze, że ogólnie to nie tylko to, że nie zrozumiałem koncepcji ale nie bardzo mam o tym pojęcie. Nie będę też udawał, że coś wiem, skoro wiem nie wiele bo jak wiadomo to do niczego dobrego nie prowadzi. Dzięki jeszcze raz za pomoc ! dzisiaj jest niedziela to sobie odpuszczę ale byłem chwilę na "Format War" w dziale "Coding corner" to wystarczy, że zobaczyłem tak znane ksywy jak Wegi, TMR, Oswald to już wiem, że będzie ciekawie i zapewne pochłonie mnie lektura :) Zapewne wszystkie materiały i pomoce jakie tutaj zostawiliście lub jeszcze zostawicie to przydadzą się do stworzenia dema. Wracając do działu "programowanie" na tym forum i np. topic "po 12-tu latach" to można by powiedzieć, że również i ja jestem tego pokroju. Zaczynałem kiedyś w latach 90-tych na scenie C64, mając wtedy 14-15 lat to zawsze kiedy przeglądałem produkcje scenowe znanych polskich grup, a szczególnie koderów to w mojej głowie zapalała się lampka z pytaniem "jak oni to zrobili?". Pamiętam wtedy, że umiałem np. wyjść z ramek bocznych, zrobić DYCP scroll'a i kilka innych rzeczy, które uczyłem się z jakichś tam magazynów papierowych np. C&A lub dyskowych z działem "kodowanie" . Poznałem wtedy też zaledwie kilka osób, a były to jeszcze czasy swapu to pisałem nawet kod edytora tekstu do jakiegoś magazynu grupy Undying, o który poprosił mnie wtedy Human/Undying lecz niestety chyba z przyczyn braku czasu to nigdy tego nie ukończyłem. Znałem też wtedy takich ludzi jak TLH (The Last Hacker) czy ZAN z Dzierżoniowa to raz na miesiąc lub dwa odwiedzałem ZAN'a aby zgrać na dyskietki jakieś nowości (stuff) i niekiedy przebywałem u TLH na chacie to nawet pamiętam do dziś, kiedy TLH składał jeszcze przy mnie np. pierwszy numer magazynu "Brukowiec". Pisałem kod wtedy z dużym zapałem lecz też szedłem z postępem to jakoś w roku 1998 kupiłem Amige 500 i sprzedałem mojego real C64 ze wszystkimi dyskietkami, na których było sporo moich kodów źródłowych, które zapewne kiedy sprzedałem wraz z C64 to zostały sformatowane pod gry :/ Później była już w moim domu Amiga 1200 i dalej PC. Nigdy nie sądziłem, że do tego wrócę tzn. do kodowania na C64, więc dzisiaj cholernie żałuję, że sprzedałem moją 8-mio bitową maszynę bo pewnie jeszcze by posłużył, chociażby do testowania tego, co zrobiłem pod emulator Vice, a za ileś tam lat stał by już może ten mój real C64 na półce oprawiony w ramkę, kto wie ? :) ...Jak w tym artykule "po 12-tu latach", tak samo i ja ponownie miałem styczność ze sceną C64 po tylu latach to można by powiedzieć, że prawie wszystko zapomniałem. Poznałem kilka osób przez internet z zagranicy, którzy od nowa naprowadzili mnie odnośnie podstaw programowania na C64, cross kompilatorów itp. Ja byłem jakiś czas pod inną ksywą lecz nie chce pisać jaką bo stawiałem na nowo swoje początki, więc aby nie zrobić sobie "siary", że tak powiem. Minęło ze 2-3 lata moich zmagań z początkami "na nowo" i dzisiaj mogę szczerze powiedzieć, że trochę do tego wróciłem i mam już tam jakieś pojęcie, więc chciałbym zrobić coś, co kiedyś było dla mnie niemożliwe tzn. demo, dogrywanie z dyskietki przez jakiś IRQ loader. Na pewno jeszcze poczytam sporo na tym forum, na "Format War", "Codebase" i będę chciał powoli ruszyć z takim demem, więc super, że jest to forum C64power i jacyś aktywni ludzie, a nawet znani koderzy ze sceny komputerowej, którzy mogą coś doradzić. Na pewno też może nie to, że będę się "chwalił" ale zwyczajnie pisał na tym forum o postępach kodowania dema. Dzięki jeszcze raz dla Wegi za materiały, linki, które na pewno nie wstawiłeś tu na darmo bo na razie to zbieram co się da, analizuje i niedługo będę próbował zacząć to składać w jedną całość, co mam nadzieje, że zaowocuje właśnie stworzeniem i wydaniem jakiegoś dema ale przede wszystkim na jako takim poziomie :)
-
Kisiel cm0 to już cienka blacha jak 6502 teraz ja się zabawiam STM32F407VG i Spartanem 6 który też już jest ponoć archeo ! :)
-
Nie robi to na mnie wrażenia, muchę można czołgiem zabić. Ja się staram dobierać sprzęt do celu a nie odwrotnie, nie udało mi sie zrobić sensownej emulacji na msp430 to przesiadłem sie na cortexa z 40MPIS. Czym bardziej skomplikowany procek tym gorzej, tracisz kontrolę nadtym co się dzieje. Czego np. jest przykładem uDrive, i chuj że nie dziala ale autor pisze"wziąłem analizator (po 3latach) i zacząłem sprawdzać przebiegi.. ale wszystko działa tip top itd"
Wracając do tematu, był już tutaj taki jeden co zrobił sobie kronikę z tworzenia gry MelonLevel, uznaje go za level expert w temacie kronik/blogów. Nawet ufundowałem mu nagrodę jak skończy grę i nic. Masz więc szanse też :)
PS. Wegi byś lepiej demo zakodował na SP8, chłopaki się spuszczają a feedback chujowy.
-
[...]
Czym bardziej skomplikowany procek tym gorzej, tracisz kontrolę nadtym co się dzieje. Czego np. jest przykładem uDrive, i chuj że nie dziala ale autor pisze"wziąłem analizator (po 3latach) i zacząłem sprawdzać przebiegi.. ale wszystko działa tip top itd"
[...]
LOL najwięcej tracisz kontrolę zdając się na "niezawodny C/C++" który śmieci, wpieprza swoje nieoptymalne pętle ale za to jest PORTABLE >:(
W sumie jak patrzę na wyczyny z tych devboardów czy w FPGA czy STM32 to oczywiście można zatrudnić Spartana6 50MHZ żeby mrugać diodą, zamiast kondensatora, rezystora i 7400 :) W dupie strzyka zanim ujrzysz coś sensownego.
S6 generuje sygnał VGA wielkie sranie, a producent podłączył do RGB po 1 rezystorze co daje możliwość max 8 kolorów LOL Już nie mówię żeby DAC, ale chociaż po 3-4 rezystory na sygnał dałyby od 512 kolorów wzwyż - w dupę wolnych portów i żal na kilka rezystorów ?
Albo patrzę wielki wyczyn VGA sygnał z STM32, nieważnie jaka rozdzielczość, jak poziomy "pixel" zajmuje cały ekran w poprzek LOL
A ty w czym oprogramowałeś cortexa do UK1541 ? W C czy w ASM ?
Edit:
Na SP nic nie zrobię, bo ostatnio jak zrobiłem to nie dostałem nagrody za brak obecności ! :)
-
Ciężko jest napisać w C coś cycle exact.... ale zawsze się można z koniem kopać.
Nie planujesz być na jedynym C= w PL ?
-
Mam jeszcze takie pytanie do adminów tego forum, zanim utworze nowy topic. Myślę, że będzie to coś ciekawego i być może nowego na tego typu forach. Chciałbym utworzyć topic "Robimy demo od podstaw", gdzie zacznę od organizacji wszystkiego, co niezbędne na początku oraz dalszy ciąg to pomysły ludzi, ewentualnie grafika, muzyka i wreszcie kod lub cały part dema omawiany w wątku. Wiele, wiele innych rzeczy, a w kilku słowach to robimy demo aby być może kiedyś wrócić do wątku jeśli coś się zapomni, jak w moim przypadku. Przede wszystkim może to ożywi polską scene i ktoś zaczerpnie z tego inspiracje do stworzenia kolejnego dema. Nie wiem czy to dobry pomysł lecz ja się deklaruję, że najwięcej będę robił, a pomoc, pomysły będą oczywiście w creditsach, o ile ktoś wyrazi na to zgodę. Myślę też, że może być ciekawie, w połączeniu z nauką i dobrą zabawą :)
-
Mam jeszcze takie pytanie do adminów tego forum, zanim utworze nowy topic. Myślę, że będzie to coś ciekawego i być może nowego na tego typu forach. Chciałbym utworzyć topic "Robimy demo od podstaw", gdzie zacznę od organizacji wszystkiego, co niezbędne na początku oraz dalszy ciąg to pomysły ludzi, ewentualnie grafika, muzyka i wreszcie kod lub cały part dema omawiany w wątku.
Spóźniłeś się z inicjatywą o jakieś 15 lat co najmniej. Wszystko to już było (chociaż często rozdzielone na różne wątki na forach) + w dobie internetu gdzie można znaleźć to wszystko w parę minut (setki for i poradników, skany map pamięci, gazet z najlepszych lat Komodora itd.). Obecnie dostawa świeżej krwi na scenę C64 oscyluje w granicach +-1 nowy człowiek / rok, a reszta to już scenowi weterani mający rodziny, pracę oraz setki innych zainteresowań. Ale spróbuj. Może zacznij to kompletować do kopy, może na koniec skończysz z własną stroną internetową. Zapału życzę!
-
Jak byś chciał liczyć wektory w stacji, to jeszcze popełniłem taki artykuł 2 częściowy "Wektory na komodory" w C&A Fan.
Ten kod liczył wektory w Dream Travel
https://youtu.be/4M12-T5KsfU?t=7m8s
czy I love the cube
https://youtu.be/7lOwesBxFQo?t=4m53s
-
Nie chcę krakać ale czy tylko ja odnoszę wrażenie że kolega ExoSoft albo naprawdę nie wie o czym mówi albo świetnie się bawi kosztem Wegiego i innych chętnych do pomocy ludzi. Styl wypowiedzi, gramatyka itp sugerują bardzo młodego człowieka. Opowieści o C&A i dawnej scenie z okolic 95 sugerują coś odwrotnego. A ja bym po prostu poczekał na kod który po takiej dawce lektury powinien powstać bez problemu biorąc pod uwagę zapał do pisania.
-
Miałem na myśli, że może ktoś będzie chciał coś dorzucić od siebie do tego dema ale ok bo chyba trochę mnie poniosło :/ Wegi marnuje czas ? ...to co napisał pozostanie w tym wątku, co może się również przydać komuś innemu :)
-
A ja bym po prostu poczekał na kod który po takiej dawce lektury powinien powstać bez problemu biorąc pod uwagę zapał do pisania.
Skoro ma być na poziomie to może za pół roku... Nikt nas do tego nie goni i ja traktuje to tylko jako hobby, wspominając przy tym stare czasy... Mówisz, że spóźniłem się z inicjatywą o 15 lat ? Pewnie za następne 15 lat, jak dożyję to wiedz, że zrobię to samo ;) Gdybym był małolatem to raczej bym nie doceniał potencjału jaki daje nam możliwość poznania na nowo wszystkiego co związane z C64 w tych czasach !
-
Ja moze sie nie znam, bo nie bylem na scenie, ale robienie dem to chyba rywalizacja na autorskie pomysly, a nie ogladanie sie na innych?
-
rywalizacja na autorskie pomysly
prawie.
-
nagrałem moje zabawy z kulkami :) Ten program wklejony w pierwszym poście tam jest odpalony. Ciut zmodyfikowany, ale to on...
https://www.youtube.com/watch?v=Sf5a4Muyg0M
Pół roku ? To musisz być mega zdolny !!! Jak przeczytasz note do Edge of disgrace to zobaczysz takie ciekawostki jak:
"Linking tego dema zajął mi rok"
"Na ten pomysł wpadłem w trakcie podróży dookoła świata z moją żoną" :)))))))))
No ale... może komuś się kiedyś ten wątek faktycznie przyda :)
Miłego oglądania
-
Sylwester zdolny jest:)
-
A co tak zniechęcacie?
Ja tam z chęcią śledzę wątek, akurat sam coś zaczynam dłubać przy vektorach. Oczywiście że nie ma sensu wyważać otwartych drzwi.
Na początek trzeba przeczytać artykuł Wegiego w C&A, potem C= Hacking Issue 8, C= Hacking Issue 9, codebase64.org a tam Maths & Algorithms, Demo effects, no i fora zaczynając od csdb (nawet na c64scene.pl coś można znaleźć).
-
Ale to nie jest żadnr zniechęcanie. Po prostu przy dzisiejszym dostępie do informacji, zawartości codebase64 trzeba tylko usiąść i przeczytać a potem spróbować zakodować. Dzisiaj koderskie okno na świat jest nieograniczone względem lat 90 i oryginalnego C&A... dlatego powątpiewam. A wszystkie informacje w tym wątku po odsianiu szumu są od dawna dostępne w necie. Jak ktoś ma problem z poszukaniem to słabo widzę zakodowanie linii kodu bo jest trudniejsze. Duże brawa i uznanie dla Wegiego że mu się chce pomagać no i jego crunchera używam do dziś gdy nie korzystam z exo.
-
Masz racje Wegi bo zrobic dobre demo w tych czasach to chyba juz nie tylko koderskie efekty na wysokim poziomie. Prawie wszystko juz bylo jak ktos tam napisal, wiec może lepiej pomyśleć najpierw nad ciekawym scenariuszem dema, ktory oczywiscie bedzie polączony z dobrymi efektami koderskimi. Podobnie jak z muzyką, że nikomu nie będzie się chciało słuchać fałszującej melodii w utworze, mimo iż będzie zrobiona na najwyższej jakości dźwiękach. Co niektórzy ludzie tutaj, jak i na CSDB to chyba za bardzo sie przejmują bo dla mnie kod,grafika czy muzyka na C64 to tylko ART. Ja chyba pomyliłem daty bo jednak w 1997 roku na pewnym party wystawiałem wraz z przyjaciółmi demo na Amige 1200, które niestety nie wystartowało na tej imprezie. Po prostu chyba za krótko byłem kiedyś na scenie C64 i jak napisał Skull to jest zupełnie odwrotnie bo raczej nikt nikogo tutaj nie zniechęca, skoro jesteśmy wszyscy w odpowiednim miejscu tzn. na c64power . Myśle, że każda wypowiedź kryje w sobie jakiś przekaz do przemyśleń i ulepszenia pomysłów, a nie do zniechęcania. Zresztą nikt ani nic mnie nie zniechęci bo kiedyś poszedłem chyba złą drogą tzn. nie doceniłem tego, co jeszcze niosła ze sobą scena C64, oprócz rywalizacji. Miałem kilku zajebistych kolegów w PL, z którymi urwałem kontakt z dnia na dzień bo sprzedałem mojego real C64 i kupiłem Amige, PC . ... Axa ty być może już siedzisz sporo w kodowaniu na koma to jest dla ciebie bardzo łatwe ale nie wiem czy wystarczy tylko wejść np. na codebase i poczytać bo jak ci później dojdzie jeszcze cyklowanie, zmagania z procesorem 1 MHZ, a jeszcze w demie, gdzie co chwilę zmieniają się efekty, które zazwyczaj są trickami np. wykorzystują prawie całą moc procesora C64 itd.
-
No teraz to wiele wyjaśnia.
-
[...]
Obecnie dostawa świeżej krwi na scenę C64 oscyluje w granicach +-1 nowy człowiek / rok,
[...]
Rzadko kiedy ktoś potrafi zaskoczyć, ale mamy tu takie nasze objawienie co dołączył do C64 to jest ZBYCH
-
W poprzednim filmiku brzydko się nagrała 256 plotowa kulka, nagrałem jeszcze raz.
https://www.youtube.com/watch?v=IsHjg2qanyw
-
W poprzednim filmiku brzydko się nagrała 256 plotowa kulka, nagrałem jeszcze raz.
https://www.youtube.com/watch?v=IsHjg2qanyw
Fajnie to wygląda, a ja zawsze gdy widziałem takie rzeczy na ekranie monitora C64 to wiedziałem, że nie jest łatwo zakodować coś podobnego, więc spokojnie można by powiedzieć, że jest to na poziomie . Myślałem aby demo zacząć od jakiegoś ciekawego wygaszacza ekranu, a dalej credts'y i dopiero jakiś part. Sidwizard daje możliwość konwersji do tego formatu, gdzie jest już podobnie jak np. format XM na PC, gdzie można pobierać wartości z patternów, które dalej można użyć jako synchronizację dema z muzyką, zamiast bawić się pętlami "wait" ale czy to na pewno dobre rozwiązanie ? . Z tego co już wiem to muzyka będzie na dobrym poziomie, zarówno od strony linii melodycznej po jakość dźwięków. Podobny styl jaki kiedyś tworzył Shogoon/Taboo, gorzej może być z grafiką ale zapewne ktoś się znajdzie bo jest jeszcze sporo czasu :)
-
Tak sobie zerknąłem ile wolnego rastra zostaje w tej wersji 128 punktowej i za wiele tego nie było, ciekawi mnie jak uzyskałeś wersję 256 punktów, wykorzystałeś trick z odbiciem współrzędnych, jak to było opisane na forum, czy po prostu zoptymalizowałeś jakoś całość?
Bo tak sobie myślałem że teoretycznie można "stablicować" całe macierze, oczywiście przy pewnych założeniach odnośnie wartości kątów jakie są wykorzystane. Myślę że to takie małe oszukaństwo by było... chociaż liczy się efekt, no i bardzo ograniczyłoby ruchliwość piłki do z góry zdefiniowanego wzorca.
-
@Zbych pomysł całkiem niezły, ale problem w tym że jest to kombinacja 3 kątów (x,y,z) czyli taka tablica nawet dla pojedynczej wartości (a jest ich 9) daje 256x256x256 (gdzie 256x256 to cała pamięć c64), nawet krok co 8 dla jednej wartości to 32Kb - za mało ramu :)
-
Od liczenia większym problemem jest stawianie i czyszczenie plotów. W trakcie trwania borderów trzeba wyczyścić 256 starych plotów i postawić nowych 256. A to jest prawdziwa bitmapa tutaj. Mirroring przy takim obiekcie jest naturalny. Nie trzeba ograniczać obrotów. Tą kulkę można zatrzymać, zmieniać obroty w dowolnych osiach, można też skalować każdą oś osobno.
-
O ile byś mógł przyśpieszyć prockę bez czyszczenia?
Dokładnie algo, rysujesz, robisz switch, vic czyta i zeruje komórkę.
-
To nie tak. Najpierw trzeba policzyć adresy plotów, żeby je zapalać i gasić. W tym konkretnym przypadku gaszenie plotów jest 6 cykli na plot, co daje 256*6 około 25 linii rastra.
-
No to nie zajmuje dużo, pytanie więc czy warto takie cuś wprowadzić do tdc.
-
W formie blittera stawiającego/gaszącego/eorującego wskazany plot z wyborem układu [0...319] X ; [0...199] Y albo [-159...159] X ; [-99...100] Y. Z takim samym wyborem blitter rysujący linie od/do wskazanych plotów no i wisienka na torcie narzucanie własnych kawałków bitmapy - wtedy w asteroidy można by grać 50 FPS ! :)
edit:
Jeszcze opcja czyszczenia/wypełniania/ eorowania całej bitmapy, albo wybranych "pasków" i ich długości plus druga opcja eorowania pojedynczych linii w poprzek :D
-
RMW, trigger może być na irq on i off. ustalasz sobie raster do skasowania za pomocą rejestu vica jako irq , potem go w irq podmieniasz na końcową wartość, potem ustawiasz w irq na pierwszą wartość i tak w koło. prawie automat.Kasuje wszystko pomiędzy. Paniał? Robienie xy to więcej czasu zejdzie na przeladowanie rejestrów niz wykasowanie w normalny sposób. AB cruncher jest wolniejszy na reu z tego powodu.
-
@Zbych pomysł całkiem niezły, ale problem w tym że jest to kombinacja 3 kątów (x,y,z) czyli taka tablica nawet dla pojedynczej wartości (a jest ich 9) daje 256x256x256 (gdzie 256x256 to cała pamięć c64), nawet krok co 8 dla jednej wartości to 32Kb - za mało ramu :)
Tak jak pisałem to zależy jakie wartości kątów zastosujemy. To jest apka którą sprawdzałem sobie wyliczanie macierzy opisane w linku który wrzuciłeś. Usunąłem z kodu zbędne rzeczy zostawiłem tylko tą część która generuje listę 256 macierzy (czyli to by było lekko ponad 2kb), następnie na podstawie tej listy wykonuje animację 8 wierzchołków. Apka napisana w C# (główny plik to Form1.cs), nie wiem czy używałeś C# ale myślę że nie ma tam nic niezrozumiałego, jedyne co może być dziwne to że część miejsc zawiera bajty ze znakiem a część bez znaku - nie chce mi się tłumaczyć dlaczego, ale tak musi być, bajty zastosowałem specjalnie żeby zobaczyć czy coś wychodzi poza zakres.
Wartości o jakie zmieniają się kąty obrotu teoretycznie mogą być dowolne ważne żeby ostatnia wartość pokrywała się z pierwszą tak, żeby było zapętlenie animacji. Najprościej było to zrobić zwiększając o 1 , 2 i 4 odpowiednio kąty X,Y i Z.
W załączniku jest projekt, w podkatalogu bin\debug jest gotowy exec jeśli nie masz czym skompilować.
-
@Zbych dorób pliz opóźnienie klatki animacji o 1/50 s i możliwość sterowania wielkościami kąta obrotu dla poszczególnych osi.
Notabene co wy się tych obliczeń tak boicie, zoptymalizowane obliczenie matrycy to 8 linii rastra nie tutaj jest wąskie gardło.
-
No jak tam @Exosoft ?
Ja na razie tyle:
-
(...)
Ja na razie tyle:
Wiedziałem że można rysować na znakach ale chyba nie wymyśliłbym takiego ich układu, albo tego że jeden z kolorów ściany to 0. No i mógłbym sobie szukać tego irq gdzie zmieniany jest kolor tła :D ale coś mi nie pasiło że jest SEI a nie ma CLI.
-
Myślę, że w tym parcie będą ciekawe vectory na spritach, a jak graficy jeszcze pomogą i koderzy to może szału nie będzie ale zdążymy z demem na SP8 . Na pewno ciekawie też będzie od strony muzycznej dema ! Nie będę więcej pokazywał screen'ów bo lepiej, aby całość obejrzało się na SP8 jako first release :)
-
vaudevile ? coś mi to mówi.
-
Doradzam demo bez chamskich konwertów graficznych
-
Doradzam demo bez chamskich konwertów graficznych
To prawda Wegi, na screen'ie jest moja była kobieta :D Logo oryginalne by Bladee ! Myślałem, że może na pamiątkę ale rzeczywiście jest lame konwert postaci kobiety ze zdjęcia i retusz zrobiony przeze mnie na Pixcen. Niestety nie jestem grafikiem ale napisze na weekend do znajomych grafików i może pomogą to będzie ładnie wyglądało graficznie, a jeśli nie to tak jak napisałem przedtem, że większość efektów zsynchronizowane pod muzykę, aby chociaż muzyka wpadała w ucho + ciekawe efekty :)
-
No jak tam @Exosoft ?
Ja na razie tyle:
Super zrobione Skull i jeszcze w tle barwy narodowe :) W sumie to ja robiłem kiedyś zdjęcie tej mojej byłej kobiecie...no ale konwert i jednak lame. Przerysować jak bym chciał ze zdjęcia to pewnie wyszedł by jakiś kosmita bez tzw. proporcji :D Zresztą jak napisał gdzieś tam jakiś grafik, zdaje się nawet na tym forum to cała zabawa zaczyna się z procesem i w moim przypadku retuszu :) Wezmę się lepiej za kodowanie, a z grafiką to się później coś pomyśli. Sporo i tak jeszcze zostało czasu do SP8 :)
-
EEEtam lame - wielcy graficy konwertują i się nie przejmują... :)
-
nie wiem co na to cmk:)
-
nie wiem co na to cmk:)
Kisiel "cmk" to w skrócie Comankh ? Ja też jestem ciekaw co on na to i ewentualnie jakaś podpowiedź, aby było ok i nie było chamsko-lame jak napisał Wegi bo jednak szacunek dla niego i innych koderów, że dołączyli do tematu i chcą coś pomóc, doradzić :) . Ja można by powiedzieć to jestem początkującym grafikiem i coś tam się uczę. Napisałem do dwóch znajomych grafików z prośbą o pomoc i jak na razie to żadnej odpowiedzi ale zapewne z braku czasu. Ja jak znam życie to może coś tam pomogą ale większość i tak będę musiał jakoś zrobić sam do tego dema na SP8 :)
-
nie wiem co na to cmk:)
Kisiel "cmk" to w skrócie Comankh ? Ja też jestem ciekaw co on na to i ewentualnie jakaś podpowiedź, aby było ok i nie było chamsko-lame jak napisał Wegi bo jednak szacunek dla niego i innych koderów, że dołączyli do tematu i chcą coś pomóc, doradzić :) . Ja można by powiedzieć to jestem początkującym grafikiem i coś tam się uczę. Napisałem do dwóch znajomych grafików z prośbą o pomoc i jak na razie to żadnej odpowiedzi ale zapewne z braku czasu. Ja jak znam życie to może coś tam pomogą ale większość i tak będę musiał jakoś zrobić sam do tego dema na SP8 :)
Nie przejmuj się , cmk to powie srsly mawa faka? albo coś takiego ze r2d2 nie deskrambluje... ludzie sceny ;)
-
Nie przejmuj się , cmk to powie srsly mawa faka? albo coś takiego ze r2d2 nie deskrambluje... ludzie sceny ;)
Ja już ci mówiłem gdzieś tam kiedyś Kisiel, ze wcale się tym nie przejmuje, a nawet zacząłem ignorować ludzi, którzy np. próbują wygrzebać coś zupełnie innego, niż to, co jest w temacie, aby ciebie zaczepić, wkurzyć itp. Później w nerwach wychodzą głupie sytuacje, a ja już to kiedyś przerabiałem, wiec dobrze wiem, że to nie prowadzi do niczego dobrego. Ja sobie założyłem cel, że zrobię demo na SP8, więc nic mnie nie powstrzyma, a jedynie czytam uważnie odpowiedzi na tym forum bo jest tutaj wielu ludzi ze sceny, którzy mają o wiele większe pojęcie ode mnie. Ja może mam w innej dziedzinie spore pojęcie ale nawet o tym nie piszę, aby ktoś nie odebrał tego tak, że się próbuję tutaj wywyższać lub coś podobnego ! Szacunek ponownie dla was wszystkich, o czym mam nadzieję to będziemy mogli jeszcze podyskutować przy browarku smakowym na SP8 :)
-
Zastanawiałem się jeszcze jaki by tu wybrać IRQ loader-depacker, który najlepiej spełni swoje zadanie ? Wydaje mi się, że ostatnio modne jest wydawanie dem przez wielu ludzi z różnych grup. Jak wiadomo to nie jest łatwo zrobić samemu całe demo ale gdy robi to kilku koderów i grafików, muzyków to wtedy idzie szybciej i łatwiej. Ja dodałem logo "Vaudeville" przy postaci kobiety ale to tak na przykład bo gdyby ktoś się chciał przyłączyć z jakimś partem lub co kolwiek to wtedy było by zamiast tego logo np. "Silesia Party 8" i ogólnie to bez nazw grup, tylko wszędzie "Silesia Party 8", a już tam w creditsach by sobie każdy zobaczył, że kto co zrobił i do jakiej grupy komputerowej należy . W sumie to z czasem mam w planach zrobić cały "engine" do robienia dem na C64, gdzie będzie można np. pozmieniać sceny, muzykę, grafikę... kod pozostanie podobny ale każde następne demo będzie zupełnie inne. Fajnie by było wystawiać więcej dem w PL i zagranicą na party oraz na w miarę ciekawym poziomie :) Nie wiem czy zwróciliście uwagę, że te nowe zespołowe dema grup Fairlight, Noice, Offence są jak gdyby podobne, więc może już powstają na jakimś silniku ? ... Nie mam na myśli braku kreatywności koderów, tylko samo to, że przynajmniej coś wydają konkretnego np. demo i coś o nich słychać. Większość z tych ludzi chyba jest już około 40-tki to nie mają może czasu robić każde demo od podstaw, a wy co o tym myślicie ?
-
No jak tam @Exosoft ?
Ja na razie tyle:
Generator speedcodu skróci niebywale plik wynikowy
Zastanawiałem się jeszcze jaki by tu wybrać IRQ loader-depacker, który najlepiej spełni swoje zadanie ?
Made in Poland można spróbować :-)
http://csdb.dk/release/?id=117165
razem z kilkunastoma przykładami użycia i wieloma testami
Taki wyciąga linking tzn - to demo było tym linkowane
http://csdb.dk/release/?id=122328
Przy okazji w temacie wektorów
http://csdb.dk/release/?id=87341
http://codebase64.org/doku.php?id=base:drivecalc_vectors
http://codebase64.org/doku.php?id=base:filling_the_vectors
-
Sorki za małe zamieszanie ostatnio ale jeśli można to wróćmy na nowo do tematu. Ja już kiedyś testowałem "Bongo" i dawał całkiem niezłe rezultaty. Nie chodzi już o te kilka bajtów różnicy, jak np. z Exomizer . Super, aby było Polskiej produkcji wszystko. Ja miałem zostawić to jako niespodziankę ale może napiszę już teraz, że po co proszę innych o pomoc, skoro i tak nic na tym nie zyskam oraz ogólnie to dlaczego uparłem się, aby wydać to demo na party. Chodzi oczywiście o św.p. Mariusz 'Ramos' Rozwadowski, który jednak był moim najlepszym przyjacielem na scenie C64. Pamiętam jeszcze naszą ostatnią rozmowę telefoniczną niedługo przed jego śmiercią, kiedy mu mówiłem o kilku efektach, które zakodowałem w ASM. Niestety nie mam już tych efektów bo stało się, że spalił mi się dysk i nie zdążyłem zrobić kopii na moim dysku wirtualnym ale kto by się spodziewał... Ramos - człowiek "idea" już miał w głowie pomysł, aby zrobić z tym demo i samo to, jak o tym mówił podekscytowany, że zabierze ze sobą kolejne Polskie demo na jakieś party. Minęło już trochę czasu i często tak jest, że dopiero po śmierci danego człowieka to zaczynamy rozumieć kim on tak na prawdę był ! Nie wiem czy poza grupą Quartet to będzie jeszcze ktoś taki na Polskiej scenie C64 jak Mariusz Rozwadowski ? Pewnie Ramos gdyby żył to zabrał by ze sobą to demo na SP8, jak wiele innych rzeczy wystawiał na parties, które ja zrobiłem. Postanawiam sam się udać na SP8 i wystawić to demo dla upamiętnienia na zawsze tej naszej dawnej przyjaźni ! Dzięki jeszcze raz Wegi i inni oraz mam nadzieję, że teraz kiedy już wiecie dlaczego chce wydać to demo na SP8 to coś jeszcze pomożecie. Ja już zacząłem robić taki szkielet z inicjalizacjami w ASM i może na weekend już będę testował pierwszy part ...
-
Szczerze to nie wiem czy dam radę zakodować takie "prawdziwe" demo z wysokiej jakości efektami bo to rzeczywiście wymaga sporo czasu, którego aż tyle nie mam oraz też nie jestem na tyle dobrym koderem. Na pewno coś tam zrobię z dedykacją dla św.p. Ramos'a, tylko nie będę już o tym wspominał w samym demie. Myślałem, że może ciekawy scenariusz dema, połączony z synchronizacją muzyki tzn. co umiem, co jestem w stanie zrobić. Na pewne bój się już Jammer na SP8 :D Zacząłem już robić muzykę na 2sid pod Goat tracker i 1sid, tylko to raczej będzie pod DMC V7 bo rzeczywiście od strony jakości dźwięków to Goat tracker trochę jest w tyle, a zapewne ludzie też będą na to patrzeć podczas głosowania ... Na SP7 to chyba nawet jeszcze RAF pamięta, że wszystko robiłem na ostatnią chwilę, a tym razem to się trochę lepiej przygotuję :)
-
Kurdę co to jest i kto to napisał ? Bez przesady, że ja głodny chodzę to niby miałbym przyjechać na Silesia Party na obiad, bo coś tam przeczytałem w śmietniku na tym forum. Ja mam w domu co jeść !
-
hehe z tym obiadem to dobre :D ... Z braku czasu, odnośnie jeszcze teraz dodatkowej pracy to wiem na pewno, że nie wydam już nigdy "Buddha music disk #02", więc chociaż wrzucam "menu", które zrobił Andy 'Shine' Zeidler . Napisałem już połowę kodu do tego music disk'a w 64tass i szkoda, aby się zmarnował to postanowiłem przerobić na mój player z różnymi ciekawymi efektami np. equalizer na wektorowych sprajtach itp. Dogadałem się z Shine, że wykorzystam tylko logo "Buddha" oraz jeden pasek, gdzie miały być nazwy song'ów w tym menu. Player będzie mi potrzebny jedynie już tylko do publikowania jakichś moich pojedynczych kawałków w music competitions np. na jakichś C64 party :)
-
Wynik mojego wczorajszego treningu z układaniem nut na patternach, na trzech oktawach i tylko jednym dźwiękiem + filtry i efekt vibrato . Z dedykacją dla kompozytora Jens-Christian Huus, który w rozmowach ze mną ostatnio to próbuje powrócić do tworzenia muzyki po bardzo długim czasie :) Ogólnie to człowiek, który w moich oczach zasługuje na ogromny szacunek, odnośnie sceny C64 !
Tutaj link do preview pt. JCH IS BACK 3 : https://clyp.it/buqcrjap