Ŀ
                                      
               "START"                
           512 bytes intro            
                 for                  
       Chaos Constructions 000        
                                      
   (c) 2000 by Ivan Roshin, Moscow    
                                      


; :

TABLE_SIN  EQU  #AA00 ; 
                      ;࠭  砩-
                      ;!

PALETTE    EQU  TABLE_SIN+#100 ; 
                      ;⮦!

; ⠭ ஫:

black      EQU  0   ; 梥⮢
blue       EQU  1
red        EQU  2
magenta    EQU  3
green      EQU  4
cyan       EQU  5
yellow     EQU  6
white      EQU  7

paper      EQU  8   ;. 㬭

;ਬ  ਡ:
;white*paper+black

border     EQU  254 ; ࠢ
                    ;梥⮬ 

; 楤  ࠡ
; ஬:

A_TO_STACK EQU  #2D28
FROM_STACK EQU  #2DD5

;ᯮ㥬  :

multiply   EQU  #04
add_       EQU  #0F
sin        EQU  #1F
stk_data   EQU  #34
end_calc   EQU  #38
stk_one    EQU  #A1


;諠 ᠬ ணࠬ:

           ORG  #8001

; #8000  쭥襬  10 
; ᯮ짮   AY.
;
; ⠭ ᫥騥 祭:
;#8007=%00111000 ( AY); -,
;訥 2      
;묨,  ᨬ  㤮⢠.
;#800A - ࠢ  - 9 (஬
;ୠ). 訥 3   
;묨,  ᨬ  㤮⢠.
;
;   "஥" 
;ணࠬ   
;.

;ந ⠡ sample  #8201 (筥,
;ࠨ  -  4 祭
;㦥 室  #81FD):

           LD   HL,#8201
           LD   BC,#0C40

;B - ⥪ ஬ (㬥蠥
;     6 int');
;C - ⠭ #40, ᯮ㥬 
;    ⠭ ᬥ饭  
;    ᮮ⢥⢨  up_2, up_0, dn_2.

;  #8007   %01111000 - 
;祭   ६ 
;㦭   LD A,B:

MAKE_SAMPL LD   A,B
           LD   (HL),B
           INC  L

;  #800A - #A9 (஬
;ୠ  ࠢ  = 9) 
;६  㦭  
;XOR C:

           XOR  C
           LD   (HL),A
           INC  L
           LD   (HL),A
           INC  L
           ADD  A,C
           LD   (HL),A
           INC  L
           SUB  C
           LD   (HL),A
           INC  L
           LD   (HL),A
           INC  L
           DJNZ MAKE_SAMPL

           LD   (HL),B ;=LD (HL),0

           HALT
           CALL CLS

;㥬  (HL=#57FF):

; 楤 ᯥ樠쭮 ⠪ ᠭ,
;⮡  ࠣ JR $+3, . ᬥ饭
; JR, ࠢ 1, 㤥 ᯮ짮
;⥬  ⢥  (६
;QUARK).

GRID_1     LD   D,%10101010
           BIT  0,H
           JR   Z,GRID_2
           LD   DE,%0001000101000100
           BIT  1,H
           JR   Z,GRID_2
QUARK      EQU  $-1 ;  ࠢ 1
           LD   D,E
GRID_2     LD   (HL),D
           DEC  HL
           BIT  6,H
           JR   NZ,GRID_1

;᫥ ᮢ ⪨ HL=#3FFF, D=#AA,
;A=0 (  ᫥ CLS)!

;ନ㥬 ⠡ sin:

           LD   E,A ;DE=#AA00=TABLE_SIN!

LOOP_SIN   PUSH DE

;᫨ ᯮ짮 ॣ஢  BC
; DE,   
;( LD A,C: CALL A_TO_STACK ⠢
;CALL A_TO_STACK+1).  ᮦ,  ⮩
;ணࠬ ᯮ짮 BC  DE
; ( ⮬  塞)...

           LD   A,E
           CALL A_TO_STACK

;᫥
;int ((1+sin((2*Pi/255)*COUNTER))*127)

           RST  #28
           DB   stk_data ;2*Pi/255
           DB   #EB,#49,#D9,#B4,#56
           DB   multiply
           DB   sin
           DB   stk_one
           DB   add_
           DB   stk_data ;127
           DB   #40,#B0,#00,#7F
           DB   multiply
           DB   end_calc

           CALL FROM_STACK
           POP  DE
           LD   (DE),A
           INC  E
           JR   NZ,LOOP_SIN

;ନ㥬  (DE=TABLE_SIN!):

           LD   HL,COLORS-#74

;饭 -#74 ࠭ ᯥ樠쭮.
;  ⮬,  256    12.

           INC  D ;DE:=PALETTE!

MAKE_PAL_1 LD   A,(HL)
           INC  HL
           LD   B,0+(256+11)/12
MAKE_PAL_2 LD   (DE),A
           INC  E
           DJNZ MAKE_PAL_2
           JR   NZ,MAKE_PAL_1

;PLASMA - । ॣ஢:
;
;DE -   䠩 ਡ⮢
; C - न y  ࠭
; (न x 砥  E AND 31)
; H - 訩   ⠡ sin
;       (ࠧ  1)
; L - ᯮ  㯠  ⠡
; B - ᬥ饭  x
;XH - ᬥ饭  y
;XL - ᬥ饭  ⠡ SIN ( ⮬
;     ᬥ饭  ᬥ饭  x,y),
;     砫쭮 祭 XL  

PLASMA     HALT
           CALL PLAY

;饭  x,y ६  ⠡ sin,
;⮣  㤥   䨣ࠬ
;ᠦ (  砥 - ):

           LD   H,TABLE_SIN/256
           INC  XL

           LD   A,XL
           LD   L,A
           LD   B,(HL)

           ADD  A,H ;ᤢ 䠧 = #AA
           LD   L,A
           LD   A,(HL)
           LD   XH,A

           LD   DE,#5800
           LD   C,24
           XOR  A

;sin (2*x+sm_x) + sin (2*y+sm_y) + sm_x

LOOP       ADD  A,A      ;2*x
           ADD  A,B      ;2*x+sm_x
           LD   L,A
           LD   A,(HL)   ;sin(2*x+sm_x)
           EX   AF,AF' 
           LD   A,C      ;y
           ADD  A,A      ;2*y
           ADD  A,XH     ;2*y+sm_y
           LD   L,A
           EX   AF,AF' 
           ADD  A,(HL)   ;㬬 ᨭᮢ
           ADD  A,B      ;+sm_x
           LD   L,A

           INC  H ;= LD H,PALETTE/256

           LD   A,(HL)
           LD   (DE),A
           INC  E
           LD   (DE),A
           INC  DE

           DEC  H ;⠭ H

           LD   A,E
           AND  31
           JR   NZ,LOOP ;横  x

           DEC  C
           JR   NZ,LOOP ;横  y

           JR   PLASMA  ; ᭠砫

;---------------------------------------
; 梥⮢  :

COLORS     DB   yellow*paper+yellow
           DB   yellow*paper+red
           DB   red*paper+yellow
           DB   red*paper+red
           DB   red*paper+magenta
           DB   magenta*paper+red
           DB   magenta*paper+magenta
           DB   magenta*paper+green
           DB   green*paper+magenta
           DB   green*paper+green
           DB   green*paper+yellow
           DB   yellow*paper+green

;---------------------------------------
; । ࠢ, 
; 稢:

END        POP  AF ;᫥ ⮣ A=0!
           LD   (TRIGGER),A ;ᬥ饭
                            ; JR=0
           POP  AF ; 

           CALL CLS

; :

           LD   B,#4D
ACCORD     PUSH BC
           LD   DE,freq_e5-freq_shift
           CALL NE_NOTE_F
           HALT
           POP  BC
           DJNZ ACCORD

;---------------------------------------
;楤 ⪨ ࠭:

CLS        XOR  A
           OUT  (border),A

           LD   HL,#5AFF
CLS_1      LD   (HL),A
           DEC  L

;뢠 横 -    2
;,   맮 CLS ᫥ HALT
;ਡ  ०, 祬 
; .

           LD   (HL),A
           DEC  HL
           BIT  3,H
           JR   NZ,CLS_1

           RET

END_MAIN

;---------------------------------------

           ORG  #80C6

 

 ⠭

tempo      EQU  12    ;ࢠ 
                      ;⠬  1/50 

length     EQU  24    ; 
                      ; ୠ

patt_size  EQU  8     ;⢮ 
                      ; ୥

note_g4    EQU  0     ; 
note_b4    EQU  1     ;( 砩 
note_a4    EQU  2     ;  ⠪
note_c5    EQU  3     ;浪 - 
note_e5    EQU  4     ; ᮢ-
note_g5    EQU  5     ; ⠡
note_b5    EQU  6     ;FREQ_TABLE 
note_d5    EQU  7     ;ORNAMENTS)
note_f5    EQU  8
note_a5    EQU  9

freq_g4    EQU  #114  ;祭 ⥫
freq_a4    EQU  #F8   ; 
freq_b4    EQU  #DD   ; 
freq_c5    EQU  #CF   ;ᯮ㥬 
freq_d5    EQU  #B8   ;
freq_e5    EQU  #A5   ;(ᯮ
freq_f5    EQU  #9B   ; , 
freq_g5    EQU  #8A   ; ⥬஢-
freq_a5    EQU  #7C   ;)
freq_b5    EQU  #6E

freq_shift EQU  freq_g4-#C9
                      ;⠪ 祭,
                      ;⮡  -
                      ; freq ᫮
                      ;freq-freq_shift
                      ;뫮 0..#FF

code_up    EQU  #00 ;⨬ 祭ﬨ
code_dn    EQU  #40 ;, 㤥
code_max   EQU  #80 ; ஬ 
                    ;୥ -
                    ;,  
                    ; ᨬ쭮

code_pack  EQU  #20 ;㯠 
                    ;(2  
                    ;4 ࠧ)

ornament_0 EQU  1   ;ᬥ饭 ᯮ-
ornament_1 EQU  5   ; ୠ⮢ 
ornament_2 EQU  2   ;⠡ ORNAMENTS
ornament_3 EQU  0


 ६

; positions
;
;࠭ 訩  砫 
;ୠ.

POSITIONS  DB   PATTERN_0\256
           DB   PATTERN_1\256
           DB   PATTERN_2\256
           DB   PATTERN_3\256

           DB   PATTERN_0\256
           DB   PATTERN_1\256
           DB   PATTERN_2\256
           DB   PATTERN_4\256

           DB   PATTERN_5\256
           DB   PATTERN_6\256
           DB   PATTERN_2\256
           DB   PATTERN_3\256

           DB   PATTERN_5\256
           DB   PATTERN_7\256
           DB   PATTERN_8\256
           DB   PATTERN_9\256

           DB   PATTERN_10\256
           DB   PATTERN_11\256
           DB   PATTERN_12\256
           DB   PATTERN_12\256

           DB   PATTERN_10\256
           DB   PATTERN_11\256
           DB   PATTERN_12\256
           DB   PATTERN_12\256

 楤

PLAY

;஢塞:  ३  ᫥饩
;?

           LD   HL,QUARK
           DEC  (HL)
           JR   NZ,NE_NOTE ;

           LD   (HL),tempo

; 室 - ࠧ 㥬 祭
;  ஬   A  B:

           LD   HL,(FREQ_A)
           LD   (FREQ_B),HL

; ⠭   SAMPLE 
; A:

           LD   HL,SAMPLE
           LD   (POS_IN_S_A),HL

;   ⠭ ਣ 
; ...

           LD   (POS_IN_S_B),HL

;஢ઠ:  ३  ᫥饩
;position?

           LD   A,patt_size-1
NOTE       EQU  $-1
           INC  A
           AND  7
           PUSH AF ;!
           LD   (NOTE),A
           JR   NZ,NE_POSIT

;室  ᫥饩 position:

           LD   D,A ;=LD DE,0
           LD   E,A ;(⮬ ਣ)

           LD   HL,POSITIONS-1
POSITION   EQU  $-2
           INC  HL
           LD   (POSITION),HL

           LD   A,L
           CP   PLAY
           JR   Z,END

           LD   L,(HL)
           INC  H ;=LD H,PATTERN_0/256
           LD   A,(HL)

;    
;室 祭, ࠪਧ饥
; ஬  ୥:
;%00  up, %10  dn, %01  max.
; ᨬ  ⮣ 祭
;⠭   CODE_I_D_N
;   INC (HL), DEC (HL), NOP,
; ⠪ ⠭ ⥪ ஬
;ALL_AMP

           ADD  A,A       ;code_max=#80
           JR   C,SET_PAR ; DE=#0000

           LD   DE,#34FF
           ADD  A,A       ;code_dn=#40
           JR   C,SET_PAR

           LD   DE,#3505  ;code_up=#00

;  D - ,   
; CODE_I_D_N,  E - ALL_AMP.

SET_PAR    LD   A,D
           LD   (CODE_I_D_N),A
           LD   A,E
           LD   (A_AMP),A

;᫨  㯠 (..  ୥
; 2 ), 頥 
;NOP (#00),   INC HL (#23):

           BIT  5,(HL)
           LD   A,#23
           JR   Z,SET_COD
           XOR  A
SET_COD    LD   (ADR_CODE),A

;訥 5  -  ୠ

           LD   A,(HL)
           AND  %00011111
           LD   (ORNAMENT),A

;⠭  砫 ୠ:

           INC  HL
           LD   (POS_IN_PAT),HL

;ࠡ⪠ । NOTE.
;頥  㪠⥫ 樨
; sample   B ( A 
;饭 ࠭):

NE_POSIT   LD   HL,SAMPLE+12
           LD   (POS_IN_S_B),HL

;  । 㤥  訥
;4   訥: ᫨ .  NOTE
;=0,  訥, ᫨ 1,  訥.

           LD   HL,0
POS_IN_PAT EQU  $-2

           POP  AF ;NOTE
           RRCA
           LD   A,(HL)
           JR   C,NOTE_LOW

           RRCA
           RRCA
           RRCA
           RRCA

;塞 ஬:

           LD   HL,A_AMP
CODE_I_D_N NOP  ; INC (HL), DEC (HL)

           JR   NOTE_TO_AY

NOTE_LOW   INC  HL ; NOP  PACKED
ADR_CODE   EQU  $-1
           LD   (POS_IN_PAT),HL

NOTE_TO_AY AND  %00001111
           ADD  A,FREQ_TABLE\256
           LD   L,A

; H 㦥 ⠭ FREQ_TABLE/256

           LD   A,(HL)
           LD   (FREQ_A),A

NE_NOTE

;ࠡ⪠  A (業ࠫ쭮):

; ᠬ 砫   A ⮨  g4
; ஬ -9 (. ).  ࢮ
;맮 PLAY  祭 
;᪮஢   B,  ⠬ 㤥
; (㤠 2->1->0)  
; (  - ..   
;⠬ ᯮ). -  
;B  ᠬ 砫   設 -
; ⠪ ᤥ :

           LD   DE,9*256+(freq_g4-freq_shift)
FREQ_A     EQU  $-2   ;E
A_AMP      EQU  $-1   ;D

NE_NOTE_F  LD   HL,0
POS_IN_S_A EQU  $-2
           LD   A,(HL)
           INC  HL
           LD   (POS_IN_S_A),HL

           LD   L,8
           CALL IZM_FRQ

;ࠡ⪠  B ():

           LD   HL,0
POS_IN_S_B EQU  $-2
           LD   A,(HL)
           PUSH AF ; 䨭. ठ
           INC  HL
           LD   (POS_IN_S_B),HL

           LD   L,9
           LD   DE,0
FREQ_B     EQU  $-2   ;E
B_AMP      EQU  $-1   ;D
           CALL IZM_FRQ
           POP  AF

;ࠡ⪠  C (ࠢ):

           JR   C_NORM
TRIGGER    EQU  $-1

;   (䨭 )
; TRIGGER 뢠 0,  砥
;室  ᫥饩 .

           LD   L,#A
           LD   E,freq_g5-freq_shift
           CALL IZM_FRQ
           JR   OUT_AY

C_NORM     LD   A,2            ;諮
SM_IN_ORN  EQU  $-1            ;ᬥ饭
                               ; .
           INC  A
           CP   3
           JR   NZ,SAVE_SM
           XOR  A
SAVE_SM    LD   (SM_IN_ORN),A

           ADD  A,ornament_0 ;N ⥪.
ORNAMENT   EQU  $-1
           ADD  A,ORNAMENTS\256

           LD   H,ORNAMENTS/256
           LD   L,A

;HL 㪠뢠  祭 ⥫
;.

           LD   A,(HL)
           LD   HL,#8004
           CALL IZM_FRQ_2

;뢮  AY:

OUT_AY     LD   L,#0A     ;H=#80
OUT_AY_1   LD   BC,#FFFD
           OUT  (C),L
           LD   B,#BF
           OUTD

;᫥ OUTD 䫠 C=0, ᫨ 祭 H 
; ᫥ 㬥襭,  C=1,
;᫨  ( ᫨  (HL)  0).
;   ? ;-)

           JR   NC,OUT_AY_1
           RET

;---------------------------------------

IZM_FRQ    SUB  D
           LD   H,#80
           LD   (HL),A ;஬

;  ॣ L  ॣ AY
;  , ८ࠧ㥬 
;  ॣ AY  襣 
; ⮣  :

           SLA  L       ;*2
           RES  4,L     ;-16

           RLCA
           RLCA
           RLCA
           AND  7
           ADD  A,E
           SUB  2

IZM_FRQ_2  ADD  A,freq_shift

;᫥ ਡ freq_shift  A 㤥
;訩  ⥫,   䫠 C -
;訩 .

           LD   (HL),A

           INC  L
           LD   A,0   ;砥 祭
           ADC  A,A   ;襣 
                      ; 뢮 
           LD   (HL),A

;           RET   (.)

;  (   ⠡
;ᮮ⢥ 祭 ⥫ 
; ᬥ饭 freq_shift, ..  
;   ,   ).
;
;祭 freq_shift ࠭ ⠪
;ࠧ, ⮡   ⠡
;ࠢ #C9  㦨 ६
; RET,  ᮪頥 
; ணࠬ.
;
;freq_shift min = #15
;freq_shift max = #6E
;
;1- .  ⠡ (g4): .. #A6-#FF
;
;饭  ⠡楩 ORNAMENTS.
;
; ornaments (8 )
;
;࠭ 祭 freq.  ᯮ짮-
; 㦭  ᬥ饭  ⮩ ⠡-
;, ⮣ ornament -  3 , -
;뢠  ⮣ ᬥ饭.

FREQ_TABLE DB   freq_g4-freq_shift
           DB   freq_b4-freq_shift
ORNAMENTS  DB   freq_a4-freq_shift
           DB   freq_c5-freq_shift
           DB   freq_e5-freq_shift
           DB   freq_g5-freq_shift
           DB   freq_b5-freq_shift
           DB   freq_d5-freq_shift
           DB   freq_f5-freq_shift
           DB   freq_a5-freq_shift

;    ୥
;
;1  - ஬ + ୠ
;4  - ,   2 

PATTERN_0  DB   code_dn+code_pack+ornament_0
           DB   note_c5*16+note_g4

PATTERN_1  DB   code_dn+code_pack+ornament_1
           DB   note_d5*16+note_a4

PATTERN_2  DB   code_dn+code_pack+ornament_0
           DB   note_e5*16+note_b4

PATTERN_3  DB   code_up+code_pack+ornament_0
           DB   note_e5*16+note_b4

PATTERN_4  DB   code_up+ornament_0
           DB   note_e5*16+note_c5
           DB   note_d5*16+note_e5
           DB   note_a5*16+note_g5
           DB   note_f5*16+note_e5

PATTERN_5  DB   code_dn+code_pack+ornament_1
           DB   note_a5*16+note_d5

PATTERN_6  DB   code_max+code_pack+ornament_2
           DB   note_g5*16+note_d5

PATTERN_7  DB   code_dn+code_pack+ornament_2
           DB   note_b5*16+note_e5

PATTERN_8  DB   code_dn+code_pack+ornament_0
           DB   note_f5*16+note_c5

PATTERN_9  DB   code_up+ornament_0
           DB   note_g5*16+note_c5
           DB   note_g5*16+note_c5
           DB   note_a5*16+note_c5
           DB   note_a5*16+note_c5

PATTERN_10 DB   code_max+ornament_1
           DB   note_a5*16+note_d5
           DB   note_f5*16+note_d5
           DB   note_a5*16+note_d5
           DB   note_f5*16+note_d5

PATTERN_11 DB   code_max+ornament_3
           DB   note_e5*16+note_a4
           DB   note_c5*16+note_a4
           DB   note_e5*16+note_a4
           DB   note_c5*16+note_a4

PATTERN_12 DB   code_max+ornament_0
           DB   note_g5*16+note_c5
           DB   note_e5*16+note_c5
           DB   note_g5*16+note_c5
           DB   note_e5*16+note_c5

END_PLAY

           ORG  #81FD

;⠭, ਡ塞  祭
;  sample  㪠뢠騥 
;ᬥ饭 :

up_2       EQU  #80
up_0       EQU  #40
dn_2       EQU  #00

; 4  ⠡ sample:

SAMPLE     DB   #F+up_0
           DB   #E+up_0
           DB   #D+up_0
           DB   #D+up_0

