Skip to content

Instantly share code, notes, and snippets.

@svofski
Last active August 3, 2022 11:18
Show Gist options
  • Save svofski/19aeb8641cbcce4fa56fa79f3400fca4 to your computer and use it in GitHub Desktop.
Save svofski/19aeb8641cbcce4fa56fa79f3400fca4 to your computer and use it in GitHub Desktop.
relocatable pt2 player
; player + songe ripped from polet4k ~ 50 lines
; tune: DOCZak1 by DOC'NEONSOFT
.project p4kplayer.rom
.tape v06c-rom
.org $100
di
xra a
out $10
mvi a, $c9
sta $38
main:
lxi h, songe1
call player_init_X36b5
eternal_loop:
ei
hlt
call player_frame_X3698
call player_flush_X3be0
jmp eternal_loop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PLAYER STUFF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmp player_init_X36b5
jmp player_frame_X3698
jmp player_flush_X3be0
jmp player_stfu_X36a3
player_enable: .db 0x2
;
player_frame_X3698:
lxi h, player_enable; 3698 21 97 36 !.6
xra a ; 369b af /
cmp m ; 369c be >
rz ; 369d c8 H
mvi m,0x2 ; 369e 36 02 6.
jmp X382f ; 36a0 c3 2f 38 C/8
;
player_stfu_X36a3:
lxi b,$0010 ; 36a3 01 10 00 ...
X36a6: mov a,b ; 36a6 78 x
out 0x15 ; 36a7 d3 15 S.
xra a ; 36a9 af /
out 0x14 ; 36aa d3 14 S.
inr b ; 36ac 04 .
dcr c ; 36ad 0d .
X36ae: jnz X36a6 ; 36ae c2 a6 36 B&6
sta player_enable ; 36b1 32 97 36 2.6
ret ; 36b4 c9 I
;
player_init_X36b5:
mvi a,0x1 ; 36b5 3e 01 >.
sta player_enable ; 36b7 32 97 36 2.6
mov a,m ; 36ba 7e ~
sta X3731 ; 36bb 32 31 37 217
shld X3773+1 ; 36be 22 74 37 "t7
inx h ; 36c1 23 #
call X376e ; 36c2 cd 6e 37 Mn7
ldax d ; 36c5 1a .
inx d ; 36c6 13 .
inr a ; 36c7 3c <
sta X3733 ; 36c8 32 33 37 237
xchg ; 36cb eb k
shld X3729 ; 36cc 22 29 37 ")7
xchg ; 36cf eb k
call X376e ; 36d0 cd 6e 37 Mn7
xchg ; 36d3 eb k
shld X372b ; 36d4 22 2b 37 "+7
xchg ; 36d7 eb k
push d ; 36d8 d5 U
call X376e ; 36d9 cd 6e 37 Mn7
xchg ; 36dc eb k
shld X372d ; 36dd 22 2d 37 "-7
xchg ; 36e0 eb k
lxi h,$001b ; 36e1 21 1b 00 !..
call X3773 ; 36e4 cd 73 37 Ms7
xchg ; 36e7 eb k
shld X372f ; 36e8 22 2f 37 "/7
lxi h,X373a ; 36eb 21 3a 37 !:7
shld X3734 ; 36ee 22 34 37 "47
lxi h,X373b ; 36f1 21 3b 37 !;7
lxi d,X373c ; 36f4 11 3c 37 .<7
lxi b,$002c ; 36f7 01 2c 00 .,.
mov m,b ; 36fa 70 p
X36fb: mov a,m ; 36fb 7e ~
stax d ; 36fc 12 .
inx h ; 36fd 23 #
inx d ; 36fe 13 .
dcr c ; 36ff 0d .
jnz X36fb ; 3700 c2 fb 36 B{6
pop h ; 3703 e1 a
lxi b,$0021 ; 3704 01 21 00 .!.
xra a ; 3707 af /
call X3768 ; 3708 cd 68 37 Mh7
dcr a ; 370b 3d =
sta X3744 ; 370c 32 44 37 2D7
sta X374e ; 370f 32 4e 37 2N7
sta player_ayreg0+2 ;X3758 ; 3712 32 58 37 2X7
mvi a,0x1 ; 3715 3e 01 >.
sta X3732 ; 3717 32 32 37 227
inx h ; 371a 23 #
shld X3742 ; 371b 22 42 37 "B7
shld X374c ; 371e 22 4c 37 "L7
shld player_ayreg0 ; 3721 22 56 37 "V7
call X3bdd ; 3724 cd dd 3b M];
ret ; 3727 c9 I
;;;
;; data
;;;
X3728: .db $01
X3729: .db $fa ; 3728 01 fa .z
;
.db $23,
X372b: .db $0e
;
.db 0x24 ; 372c $
X372d: .db 0xf5,0x24 ; 372d u$
X372f: .dw $201b ; 372f 1b 20 .
;
X3731: .db 0x5 ; 3731 .
X3732: .db 0x1 ; 3732 .
X3733: .db $0a ; 3733 0a 34 .4
X3734: .db $34
.db $25
X3736: .db $5c ; 3735 25 5c %\
.db 0x25 ; 3737 %
X3738: .db 0xc9 ; 3738 I
.db $25 ; 3739 25 ff %.
X373a: .db $ff
;
X373b: .db 0x0 ; 373b .
X373c: .db $03 ; 373c 03 0f ..
X373d: .db $0f
.dw $012f ; 373e 2f 01 /.
X3740: .db 0xb ; 3740 .
X3741: .db $22
X3742: .db $93 ; 3741 22 93 ".
.db 0x24 ; 3743 $
X3744: .db 0x11,0x0,0x0 ; 3744 ...
X3747: .dw $1005 ; 3747 05 10 ..
;
.db 0x0 ; 3749 .
;
X374a: .db $1c ; 374a 1c .
.db 0x20 ; 374b 20
X374c: .db $f ; 374c 0f .
.db $24 ; 374d 24 $
X374e: .db $1b ; 374e 1b .
X374f: .db 0 ; 374f 00 .
.db 0 ; 3750 00 .
X3751: .db 5 ; 3751 05 .
X3752: .db 0x38 ; 3752 38 8
.db 0 ; 3753 00 .
X3754: .db $6e
.db $22
player_ayreg0:
.db 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0
X3764: .db $0b ; 3764 0b .
X3765: .db 0 ; 3765 00 .
.db 0 ; 3766 00 .
X3767: .db 0 ; 3767 00 .
X3768: cmp m ; 3768 be >
rz ; 3769 c8 H
dad b ; 376a 09 .
jmp X3768 ; 376b c3 68 37 Ch7
;
X376e: mov e,m ; 376e 5e ^
inx h ; 376f 23 #
mov d,m ; 3770 56 V
inx h ; 3771 23 #
xchg ; 3772 eb k
X3773: lxi b, $2000 ; 3773 01 00 20 ..
dad b ; 3776 09 .
xchg ; 3777 eb k
ret ; 3778 c9 I
;
X3779: mvi d,0x0 ; 3779 16 00 ..
mov e,a ; 377b 5f _
add a ; 377c 87 .
add e ; 377d 83 .
mov e,a ; 377e 5f _
push h ; 377f e5 e
lhld X3bde ; 3780 2a de 3b *^;
dad d ; 3783 19 .
shld X3bde ; 3784 22 de 3b "^;
inx h ; 3787 23 #
mov a,m ; 3788 7e ~
pop h ; 3789 e1 a
sta X378f+1 ; 378a 32 90 37 2.7
ani 0x80 ; 378d e6 80 f.
X378f: mvi a,0x80 ; 378f 3e 80 >.
mvi c,0x10 ; 3791 0e 10 ..
jnz X3797 ; 3793 c2 97 37 B.7
mov c,d ; 3796 4a J
X3797: sta X379c+1 ; 3797 32 9d 37 2.7
ani 0x40 ; 379a e6 40 f@
X379c: mvi a,0x80 ; 379c 3e 80 >.
mvi b,0x2 ; 379e 06 02 ..
jnz X37a4 ; 37a0 c2 a4 37 B$7
mov b,d ; 37a3 42 B
X37a4: ani 0x1f ; 37a4 e6 1f f.
mov h,a ; 37a6 67 g
push h ; 37a7 e5 e
lhld X3bde ; 37a8 2a de 3b *^;
mov a,m ; 37ab 7e ~
inx h ; 37ac 23 #
inx h ; 37ad 23 #
mov e,m ; 37ae 5e ^
pop h ; 37af e1 a
push psw ; 37b0 f5 u
ani 0xf0 ; 37b1 e6 f0 fp
rrc ; 37b3 0f .
rrc ; 37b4 0f .
rrc ; 37b5 0f .
rrc ; 37b6 0f .
mov d,a ; 37b7 57 W
pop psw ; 37b8 f1 q
ani 0xf ; 37b9 e6 0f f.
mov l,a ; 37bb 6f o
sta X37c8+1 ; 37bc 32 c9 37 2I7
push h ; 37bf e5 e
lhld X3bde ; 37c0 2a de 3b *^;
inx h ; 37c3 23 #
mov a,m ; 37c4 7e ~
ani 0x20 ; 37c5 e6 20 f
pop h ; 37c7 e1 a
X37c8: mvi a,0xb ; 37c8 3e 0b >.
rz ; 37ca c8 H
push psw ; 37cb f5 u
mov a,d ; 37cc 7a z
ori 0x10 ; 37cd f6 10 v.
mov d,a ; 37cf 57 W
pop psw ; 37d0 f1 q
ret ; 37d1 c9 I
;
X37d2: lda player_ayreg0+3 ; X3759 ; 37d2 3a 59 37 :Y7
mov c,a ; 37d5 4f O
lxi h,X3733 ; 37d6 21 33 37 !37
cmp m ; 37d9 be >
jc X37df ; 37da da df 37 Z_7
xra a ; 37dd af /
mov c,a ; 37de 4f O
X37df: inr a ; 37df 3c <
sta player_ayreg0+3 ; 37e0 32 59 37 2Y7
mov l,c ; 37e3 69 i
mvi h,0x0 ; 37e4 26 00 &.
dad h ; 37e6 29 )
xchg ; 37e7 eb k
lhld X3729 ; 37e8 2a 29 37 *)7
xchg ; 37eb eb k
dad d ; 37ec 19 .
mov c,m ; 37ed 4e N
inx h ; 37ee 23 #
mov a,m ; 37ef 7e ~
sta X3aed+1 ; 37f0 32 ee 3a 2n:
mov a,c ; 37f3 79 y
sta X3728 ; 37f4 32 28 37 2(7
lhld X372d ; 37f7 2a 2d 37 *-7
lxi b,$0007 ; 37fa 01 07 00 ...
call X3768 ; 37fd cd 68 37 Mh7
inx h ; 3800 23 #
call X376e ; 3801 cd 6e 37 Mn7
xchg ; 3804 eb k
shld X3734 ; 3805 22 34 37 "47
xchg ; 3808 eb k
call X376e ; 3809 cd 6e 37 Mn7
xchg ; 380c eb k
shld X3736 ; 380d 22 36 37 "67
X3810: xchg ; 3810 eb k
call X376e ; 3811 cd 6e 37 Mn7
xchg ; 3814 eb k
shld X3738 ; 3815 22 38 37 "87
X3818: xchg ; 3818 eb k
ret ; 3819 c9 I
;
X381a: push h ; 381a e5 e
lhld X3bde ; 381b 2a de 3b *^;
inx h ; 381e 23 #
inx h ; 381f 23 #
dcr m ; 3820 35 5
pop h ; 3821 e1 a
rp ; 3822 f0 p
push h ; 3823 e5 e
lhld X3bde ; 3824 2a de 3b *^;
dcx h ; 3827 2b +
mov a,m ; 3828 7e ~
inx h ; 3829 23 #
inx h ; 382a 23 #
inx h ; 382b 23 #
mov m,a ; 382c 77 w
pop h ; 382d e1 a
ret ; 382e c9 I
;
X382f: lda X3732 ; 382f 3a 32 37 :27
dcr a ; 3832 3d =
sta X3732 ; 3833 32 32 37 227
jnz X39ef ; 3836 c2 ef 39 Bo9
lda X3731 ; 3839 3a 31 37 :17
sta X3732 ; 383c 32 32 37 227
push h ; 383f e5 e
lxi h,X373d ; 3840 21 3d 37 !=7
shld X3bde ; 3843 22 de 3b "^;
pop h ; 3846 e1 a
call X381a ; 3847 cd 1a 38 M.8
jp X385e ; 384a f2 5e 38 r^8
lhld X3734 ; 384d 2a 34 37 *47
mov a,m ; 3850 7e ~
inr a ; 3851 3c <
cz X37d2 ; 3852 cc d2 37 LR7
lhld X3734 ; 3855 2a 34 37 *47
call X388f ; 3858 cd 8f 38 M.8
shld X3734 ; 385b 22 34 37 "47
X385e: push h ; 385e e5 e
lxi h,X3747 ; 385f 21 47 37 !G7
shld X3bde ; 3862 22 de 3b "^;
pop h ; 3865 e1 a
call X381a ; 3866 cd 1a 38 M.8
jp X3875 ; 3869 f2 75 38 ru8
lhld X3736 ; 386c 2a 36 37 *67
call X388f ; 386f cd 8f 38 M.8
shld X3736 ; 3872 22 36 37 "67
X3875: push h ; 3875 e5 e
lxi h,X3751 ; 3876 21 51 37 !Q7
shld X3bde ; 3879 22 de 3b "^;
X387c: pop h ; 387c e1 a
call X381a ; 387d cd 1a 38 M.8
jp X39ef ; 3880 f2 ef 39 ro9
lhld X3738 ; 3883 2a 38 37 *87
call X388f ; 3886 cd 8f 38 M.8
shld X3738 ; 3889 22 38 37 "87
jmp X39ef ; 388c c3 ef 39 Co9
;
X388f: mov a,m ; 388f 7e ~
cpi 0x60 ; 3890 fe 60 ~`
jc X38c2 ; 3892 da c2 38 ZB8
cpi 0x70 ; 3895 fe 70 ~p
jc X38d5 ; 3897 da d5 38 ZU8
cpi 0x80 ; 389a fe 80 ~.
jc X3908 ; 389c da 08 39 Z.9
jz X38f4 ; 389f ca f4 38 Jt8
cpi 0x81 ; 38a2 fe 81 ~.
jz X38d3 ; 38a4 ca d3 38 JS8
cpi 0x82 ; 38a7 fe 82 ~.
jz X3904 ; 38a9 ca 04 39 J.9
cpi 0x8f ; 38ac fe 8f ~.
jc X392f ; 38ae da 2f 39 Z/9
sui 0xa1 ; 38b1 d6 a1 V!
push h ; 38b3 e5 e
lhld X3bde ; 38b4 2a de 3b *^;
dcx h ; 38b7 2b +
mov m,a ; 38b8 77 w
inx h ; 38b9 23 #
inx h ; 38ba 23 #
inx h ; 38bb 23 #
mov m,a ; 38bc 77 w
pop h ; 38bd e1 a
inx h ; 38be 23 #
jmp X388f ; 38bf c3 8f 38 C.8
;
X38c2: push h ; 38c2 e5 e
lhld X3bde ; 38c3 2a de 3b *^;
mvi m,0x0 ; 38c6 36 00 6.
inx h ; 38c8 23 #
mov m,a ; 38c9 77 w
inx h ; 38ca 23 #
inx h ; 38cb 23 #
inx h ; 38cc 23 #
inx h ; 38cd 23 #
inx h ; 38ce 23 #
inx h ; 38cf 23 #
mvi m,0x20 ; 38d0 36 20 6
pop h ; 38d2 e1 a
X38d3: inx h ; 38d3 23 #
ret ; 38d4 c9 I
;
X38d5: sui 0x60 ; 38d5 d6 60 V`
push h ; 38d7 e5 e
lxi b,$0063 ; 38d8 01 63 00 .c.
lhld X372f ; 38db 2a 2f 37 */7
call X3768 ; 38de cd 68 37 Mh7
inx h ; 38e1 23 #
push d ; 38e2 d5 U
xchg ; 38e3 eb k
lhld X3bde ; 38e4 2a de 3b *^;
inx h ; 38e7 23 #
inx h ; 38e8 23 #
inx h ; 38e9 23 #
mov m,e ; 38ea 73 s
inx h ; 38eb 23 #
mov m,d ; 38ec 72 r
xchg ; 38ed eb k
pop d ; 38ee d1 Q
pop h ; 38ef e1 a
inx h ; 38f0 23 #
jmp X388f ; 38f1 c3 8f 38 C.8
;
X38f4: inx h ; 38f4 23 #
X38f5: push h ; 38f5 e5 e
lhld X3bde ; 38f6 2a de 3b *^;
X38f9: inx h ; 38f9 23 #
inx h ; 38fa 23 #
inx h ; 38fb 23 #
inx h ; 38fc 23 #
inx h ; 38fd 23 #
inx h ; 38fe 23 #
inx h ; 38ff 23 #
mvi m,0xff ; 3900 36 ff 6.
pop h ; 3902 e1 a
ret ; 3903 c9 I
;
X3904: xra a ; 3904 af /
jmp X390a ; 3905 c3 0a 39 C.9
;
X3908: sui 0x70 ; 3908 d6 70 Vp
X390a: push h ; 390a e5 e
lxi b,$0021 ; 390b 01 21 00 .!.
lhld X372b ; 390e 2a 2b 37 *+7
call X3768 ; 3911 cd 68 37 Mh7
inx h ; 3914 23 #
push d ; 3915 d5 U
xchg ; 3916 eb k
lhld X3bde ; 3917 2a de 3b *^;
dcx h ; 391a 2b +
dcx h ; 391b 2b +
mvi m,0x0 ; 391c 36 00 6.
inx h ; 391e 23 #
inx h ; 391f 23 #
inx h ; 3920 23 #
inx h ; 3921 23 #
inx h ; 3922 23 #
inx h ; 3923 23 #
inx h ; 3924 23 #
mov m,e ; 3925 73 s
inx h ; 3926 23 #
mov m,d ; 3927 72 r
pop h ; 3928 e1 a
xchg ; 3929 eb k
pop h ; 392a e1 a
inx h ; 392b 23 #
jmp X388f ; 392c c3 8f 38 C.8
;
X392f: sui 0x80 ; 392f d6 80 V.
sta X3767 ; 3931 32 67 37 2g7
inx h ; 3934 23 #
mov a,m ; 3935 7e ~
inx h ; 3936 23 #
sta X3765 ; 3937 32 65 37 2e7
X393a: push h ; 393a e5 e
lhld X3bde ; 393b 2a de 3b *^;
dcx h ; 393e 2b +
dcx h ; 393f 2b +
mvi m,0x1 ; 3940 36 01 6.
xra a ; 3942 af /
lxi b,$0021 ; 3943 01 21 00 .!.
lhld X372b ; 3946 2a 2b 37 *+7
call X3768 ; 3949 cd 68 37 Mh7
inx h ; 394c 23 #
push d ; 394d d5 U
xchg ; 394e eb k
lhld X3bde ; 394f 2a de 3b *^;
inx h ; 3952 23 #
inx h ; 3953 23 #
inx h ; 3954 23 #
inx h ; 3955 23 #
inx h ; 3956 23 #
mov m,e ; 3957 73 s
inx h ; 3958 23 #
mov m,d ; 3959 72 r
pop d ; 395a d1 Q
pop h ; 395b e1 a
jmp X388f ; 395c c3 8f 38 C.8
;
X395f: push h ; 395f e5 e
lhld X3bde ; 3960 2a de 3b *^;
inx h ; 3963 23 #
inx h ; 3964 23 #
inx h ; 3965 23 #
inx h ; 3966 23 #
inx h ; 3967 23 #
inx h ; 3968 23 #
inx h ; 3969 23 #
mov a,m ; 396a 7e ~
shld X3973+1 ; 396b 22 74 39 "t9
pop h ; 396e e1 a
inr a ; 396f 3c <
rz ; 3970 c8 H
dcr a ; 3971 3d =
dcr a ; 3972 3d =
X3973: sta player_ayreg0+2 ; X3758 ; 3973 32 58 37 2X7
push psw ; 3976 f5 u
push h ; 3977 e5 e
lhld X3bde ; 3978 2a de 3b *^;
mov a,m ; 397b 7e ~
mov c,a ; 397c 4f O
inr a ; 397d 3c <
ani 0x1f ; 397e e6 1f f.
mov m,a ; 3980 77 w
pop h ; 3981 e1 a
pop psw ; 3982 f1 q
rnz ; 3983 c0 @
lhld X3bde ; 3984 2a de 3b *^;
inx h ; 3987 23 #
inx h ; 3988 23 #
inx h ; 3989 23 #
mov e,m ; 398a 5e ^
inx h ; 398b 23 #
mov d,m ; 398c 56 V
lxi h, $0060 ; 398d 21 60 00 !`.
dad d ; 3990 19 .
mov a,m ; 3991 7e ~
dcr a ; 3992 3d =
jm X38f5 ; 3993 fa f5 38 zu8
mov c,a ; 3996 4f O
inr a ; 3997 3c <
ani 0x1f ; 3998 e6 1f f.
push h ; 399a e5 e
lhld X3bde ; 399b 2a de 3b *^;
mov m,a ; 399e 77 w
pop h ; 399f e1 a
inx h ; 39a0 23 #
mov a,m ; 39a1 7e ~
inr a ; 39a2 3c <
push h ; 39a3 e5 e
lhld X3bde ; 39a4 2a de 3b *^;
inx h ; 39a7 23 #
inx h ; 39a8 23 #
inx h ; 39a9 23 #
inx h ; 39aa 23 #
inx h ; 39ab 23 #
inx h ; 39ac 23 #
inx h ; 39ad 23 #
mov m,a ; 39ae 77 w
pop h ; 39af e1 a
ret ; 39b0 c9 I
;
X39b1: mov a,c ; 39b1 79 y
ora a ; 39b2 b7 7
rnz ; 39b3 c0 @
mov a,h ; 39b4 7c |
sta player_ayreg0+10;X3760 ; 39b5 32 60 37 2`7
ret ; 39b8 c9 I
;
X39b9: push h ; 39b9 e5 e
lhld X3bde ; 39ba 2a de 3b *^;
inx h ; 39bd 23 #
inx h ; 39be 23 #
inx h ; 39bf 23 #
inx h ; 39c0 23 #
inx h ; 39c1 23 #
inx h ; 39c2 23 #
inx h ; 39c3 23 #
mov a,m ; 39c4 7e ~
pop h ; 39c5 e1 a
inr a ; 39c6 3c <
rz ; 39c7 c8 H
push h ; 39c8 e5 e
lhld X3bde ; 39c9 2a de 3b *^;
dcx h ; 39cc 2b +
dcx h ; 39cd 2b +
shld X39dd+1 ; 39ce 22 de 39 "^9
mov a,m ; 39d1 7e ~
pop h ; 39d2 e1 a
ora a ; 39d3 b7 7
rz ; 39d4 c8 H
cpi 0x2 ; 39d5 fe 02 ~.
jz X39e4 ; 39d7 ca e4 39 Jd9
push psw ; 39da f5 u
mvi a,0x2 ; 39db 3e 02 >.
X39dd: sta X374f ; 39dd 32 4f 37 2O7
pop psw ; 39e0 f1 q
jmp X39e8 ; 39e1 c3 e8 39 Ch9
;
X39e4: xra a ; 39e4 af /
sta X3767 ; 39e5 32 67 37 2g7
X39e8: push psw ; 39e8 f5 u
mov a,m ; 39e9 7e ~
ori 0x10 ; 39ea f6 10 v.
mov m,a ; 39ec 77 w
pop psw ; 39ed f1 q
ret ; 39ee c9 I
;
X39ef: push h ; 39ef e5 e
lxi h,X373d ; 39f0 21 3d 37 !=7
shld X3bde ; 39f3 22 de 3b "^;
pop h ; 39f6 e1 a
call X395f ; 39f7 cd 5f 39 M_9
mov a,c ; 39fa 79 y
sta X3ae5+1 ; 39fb 32 e6 3a 2f:
push h ; 39fe e5 e
lhld X3740 ; 39ff 2a 40 37 *@7
shld X3bde ; 3a02 22 de 3b "^;
pop h ; 3a05 e1 a
call X3779 ; 3a06 cd 79 37 My7
mov a,c ; 3a09 79 y
ora b ; 3a0a b0 0
rrc ; 3a0b 0f .
sta player_ayreg0+11; X3761 ; 3a0c 32 61 37 2a7
push h ; 3a0f e5 e
lxi h,X373d ; 3a10 21 3d 37 !=7
shld X3bde ; 3a13 22 de 3b "^;
inx h ; 3a16 23 #
inx h ; 3a17 23 #
inx h ; 3a18 23 #
inx h ; 3a19 23 #
inx h ; 3a1a 23 #
inx h ; 3a1b 23 #
inx h ; 3a1c 23 #
mov a,m ; 3a1d 7e ~
pop h ; 3a1e e1 a
inr a ; 3a1f 3c <
jz X3a2c ; 3a20 ca 2c 3a J,:
call X39b1 ; 3a23 cd b1 39 M19
call X3ad2 ; 3a26 cd d2 3a MR:
shld player_ayreg0+4 ; 3a29 22 5a 37 "Z7
X3a2c: lxi h,player_ayreg0+12; X3762 ; 3a2c 21 62 37
mov m,a ; 3a2f 77 w
call X39b9 ; 3a30 cd b9 39 M99
push h ; 3a33 e5 e
lxi h,X3747 ; 3a34 21 47 37 !G7
shld X3bde ; 3a37 22 de 3b "^;
pop h ; 3a3a e1 a
X3a3b: call X395f ; 3a3b cd 5f 39 M_9
push h ; 3a3e e5 e
lhld X3bde ; 3a3f 2a de 3b *^;
inx h ; 3a42 23 #
inx h ; 3a43 23 #
X3a44: inx h ; 3a44 23 #
inx h ; 3a45 23 #
inx h ; 3a46 23 #
inx h ; 3a47 23 #
inx h ; 3a48 23 #
mov a,m ; 3a49 7e ~
pop h ; 3a4a e1 a
inr a ; 3a4b 3c <
jz X3a77 ; 3a4c ca 77 3a Jw:
mov a,c ; 3a4f 79 y
sta X3ae5+1 ; 3a50 32 e6 3a 2f:
push h ; 3a53 e5 e
lhld X374a ; 3a54 2a 4a 37 *J7
shld X3bde ; 3a57 22 de 3b "^;
pop h ; 3a5a e1 a
call X3779 ; 3a5b cd 79 37 My7
lda player_ayreg0+11; 3a5e 3a 61 37 :a7
ora c ; 3a61 b1 1
ora b ; 3a62 b0 0
sta player_ayreg0+11; 3a63 32 61 37 2a7
call X39b1 ; 3a66 cd b1 39 M19
push h ; 3a69 e5 e
lxi h,X3747 ; 3a6a 21 47 37 !G7
shld X3bde ; 3a6d 22 de 3b "^;
pop h ; 3a70 e1 a
call X3ad2 ; 3a71 cd d2 3a MR:
shld player_ayreg0+6 ;X375c ; 3a74 22 5c 37 "\7
X3a77: lxi h,player_ayreg0+13 ; 3a77 21 63 37 !c7
mov m,a ; 3a7a 77 w
call X39b9 ; 3a7b cd b9 39 M99
push h ; 3a7e e5 e
X3a7f: lxi h,X3751 ; 3a7f 21 51 37 !Q7
shld X3bde ; 3a82 22 de 3b "^;
pop h ; 3a85 e1 a
call X395f ; 3a86 cd 5f 39 M_9
push h ; 3a89 e5 e
lhld X3bde ; 3a8a 2a de 3b *^;
inx h ; 3a8d 23 #
inx h ; 3a8e 23 #
inx h ; 3a8f 23 #
inx h ; 3a90 23 #
inx h ; 3a91 23 #
inx h ; 3a92 23 #
inx h ; 3a93 23 #
mov a,m ; 3a94 7e ~
pop h ; 3a95 e1 a
inr a ; 3a96 3c <
jz X3ac8 ; 3a97 ca c8 3a JH:
mov a,c ; 3a9a 79 y
sta X3ae5+1 ; 3a9b 32 e6 3a 2f:
push h ; 3a9e e5 e
lhld X3754 ; 3a9f 2a 54 37 *T7
shld X3bde ; 3aa2 22 de 3b "^;
pop h ; 3aa5 e1 a
call X3779 ; 3aa6 cd 79 37 My7
mov a,c ; 3aa9 79 y
rlc ; 3aaa 07 .
mov c,a ; 3aab 4f O
mov a,b ; 3aac 78 x
rlc ; 3aad 07 .
mov b,a ; 3aae 47 G
lda player_ayreg0+11; 3aaf 3a 61 37 :a7
ora b ; 3ab2 b0 0
ora c ; 3ab3 b1 1
sta player_ayreg0+11; 3ab4 32 61 37 2a7
call X39b1 ; 3ab7 cd b1 39 M19
push h ; 3aba e5 e
lxi h,X3751 ; 3abb 21 51 37 !Q7
shld X3bde ; 3abe 22 de 3b "^;
pop h ; 3ac1 e1 a
call X3ad2 ; 3ac2 cd d2 3a MR:
shld player_ayreg0+8 ; 3ac5 22 5e 37 "^7
X3ac8: lxi h,X3764 ; 3ac8 21 64 37 !d7
mov m,a ; 3acb 77 w
call X39b9 ; 3acc cd b9 39 M99
jmp X3bdd ; 3acf c3 dd 3b C];
;
X3ad2: mov a,l ; 3ad2 7d }
push psw ; 3ad3 f5 u
push d ; 3ad4 d5 U
xchg ; 3ad5 eb k
lhld X3bde ; 3ad6 2a de 3b *^;
inx h ; 3ad9 23 #
shld X3ae9+1 ; 3ada 22 ea 3a "j:
inx h ; 3add 23 #
inx h ; 3ade 23 #
inx h ; 3adf 23 #
inx h ; 3ae0 23 #
mov e,m ; 3ae1 5e ^
inx h ; 3ae2 23 #
mov d,m ; 3ae3 56 V
xchg ; 3ae4 eb k
X3ae5: lxi d, $0004 ; 3ae5 11 04 00 ...
dad d ; 3ae8 19 .
X3Ae9: lda X3752 ; 3ae9 3a 52 37 :R7
add m ; 3aec 86 .
X3aed: adi 0xfe ; 3aed c6 fe F~
add a ; 3aef 87 .
mov e,a ; 3af0 5f _
mvi d,0x0 ; 3af1 16 00 ..
lxi h,tonetbl_X3b1d ; 3af3 21 1d 3b !.;
dad d ; 3af6 19 .
mov e,m ; 3af7 5e ^
inx h ; 3af8 23 #
mov d,m ; 3af9 56 V
xchg ; 3afa eb k
pop d ; 3afb d1 Q
pop psw ; 3afc f1 q
sta X3b03+1 ; 3afd 32 04 3b 2.;
mov a,d ; 3b00 7a z
ani 0x10 ; 3b01 e6 10 f.
X3b03: mvi a,0xb ; 3b03 3e 0b >.
jz X3b10 ; 3b05 ca 10 3b J.;
push psw ; 3b08 f5 u
X3b09: mov a,d ; 3b09 7a z
ani 0xef ; 3b0a e6 ef fo
mov d,a ; 3b0c 57 W
X3b0d: pop psw ; 3b0d f1 q
dad d ; 3b0e 19 .
ret ; 3b0f c9 I
;
X3b10: ana a ; 3b10 a7 '
sta X3b1a+1 ; 3b11 32 1b 3b 2.;
mov a,l ; 3b14 7d }
sub e ; 3b15 93 .
mov l,a ; 3b16 6f o
mov a,h ; 3b17 7c |
sbb d ; 3b18 9a .
mov h,a ; 3b19 67 g
X3b1a: mvi a,0xb ; 3b1a 3e 0b >.
ret ; 3b1c c9 I
tonetbl_X3b1d:
.db $f8, $0e, $10, $0e, $60, $0d, $80, $0c, $d8, $0b, $28, $0b, $88, $0a, $f0, $09
.db $60, $09, $e0, $08, $58, $08, $e0, $07, $7c, $07, $08, $07, $b0, $06, $40, $06
.db $ec, $05, $94, $05, $44, $05, $f8, $04, $b0, $04, $70, $04, $2c, $04, $f0, $03
.db $be, $03, $84, $03, $58, $03, $20, $03, $f6, $02, $ca, $02, $a2, $02, $7c, $02
.db $58, $02, $38, $02, $16, $02, $f8, $01, $df, $01, $c2, $01, $ac, $01, $90, $01
.db $7b, $01, $65, $01, $51, $01, $3e, $01, $2c, $01, $1c, $01, $0b, $01, $fc, $00
.db $ef, $00, $e1, $00, $d6, $00, $c8, $00, $bd, $00, $b2, $00, $a8, $00, $9f, $00
.db $96, $00, $8e, $00, $85, $00, $7e, $00, $77, $00, $70, $00, $6b, $00, $64, $00
.db $5e, $00, $59, $00, $54, $00, $4f, $00, $4b, $00, $47, $00, $42, $00, $3f, $00
.db $3b, $00, $38, $00, $35, $00, $32, $00, $2f, $00, $2c, $00, $2a, $00, $27, $00
.db $25, $00, $23, $00, $21, $00, $1f, $00, $1d, $00, $1c, $00, $1a, $00, $19, $00
.db $17, $00, $16, $00, $15, $00, $13, $00, $12, $00, $11, $00, $10, $00, $0f, $00
X3bdd: ret ; 3bdd c9 I
;
X3bde: .db 0x51,0x37 ; 3bde Q7
;
player_flush_X3be0:
lda player_enable ; 3be0 3a 97 36 :.6
cpi 0x2 ; 3be3 fe 02 ~.
rnz ; 3be5 c0 @
lxi h,X3767 ; 3be6 21 67 37 !g7
xra a ; 3be9 af /
ora m ; 3bea b6 6
mvi a,0xd ; 3beb 3e 0d >.
jnz X3bf5 ; 3bed c2 f5 3b Bu;
sui 0x3 ; 3bf0 d6 03 V.
dcx h ; 3bf2 2b +
dcx h ; 3bf3 2b +
dcx h ; 3bf4 2b +
X3bf5: mov c,a ; 3bf5 4f O
X3bf6: mov a,c ; 3bf6 79 y
out 0x15 ; 3bf7 d3 15 S.
mov a,m ; 3bf9 7e ~
out 0x14 ; 3bfa d3 14 S.
dcx h ; 3bfc 2b +
dcr c ; 3bfd 0d .
jp X3bf6 ; 3bfe f2 f6 3b rv;
ret ; 3c01 c9 I
;
; DOCZak01.STC by DOC'NEONSOF
; https://zxart.ee/spa/autores/d/doc/doczak01/
;
songe1:
.db $05,$f9,$03,$0e,$04,$f5,$04,$44,$4f,$43,$27,$4e,$45,$4f,$4e,$53
.db $4f,$46,$54,$20,$20,$20,$20,$20,$20,$7b,$08,$01,$0f,$20,$00,$0f
.db $a0,$00,$0e,$a0,$00,$0e,$a0,$00,$0d,$a0,$00,$0c,$a0,$00,$0b,$a0
.db $00,$0a,$80,$00,$09,$80,$00,$08,$80,$00,$07,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$00,$02,$0f
.db $22,$80,$1f,$23,$00,$0e,$24,$00,$0d,$25,$00,$0c,$06,$00,$0b,$07
.db $00,$0a,$09,$00,$09,$00,$00,$08,$80,$00,$07,$80,$00,$06,$80,$00
.db $05,$80,$00,$04,$80,$00,$02,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $00,$03,$0d,$40,$00,$0a,$40,$00,$08,$40,$00,$05,$40,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$05,$0f,$24,$00,$0e,$25,$2f,$0d,$25,$5e,$0c,$26
.db $8d,$0b,$27,$bc,$0a,$27,$eb,$19,$67,$1a,$18,$67,$49,$16,$67,$78
.db $15,$67,$a7,$14,$67,$d6,$23,$67,$05,$22,$67,$34,$21,$60,$63,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$07,$2f,$a0,$00,$3e,$a0,$80,$4d,$a0
.db $00,$6b,$a0,$00,$78,$a0,$80,$86,$a0,$80,$04,$80,$00,$02,$80,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$0f,$a0,$01,$0f,$a0
.db $02,$0e,$a0,$03,$0d,$a0,$03,$0e,$a0,$02,$0e,$a0,$02,$0e,$a0,$01
.db $0e,$a0,$01,$0e,$a0,$01,$0e,$a0,$00,$0e,$a0,$00,$0e,$a0,$00,$0e
.db $a0,$00,$0e,$a0,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$a0
.db $01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00
.db $0e,$80,$01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e
.db $a0,$01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$10,$0e,$0b,$0c,$80
.db $00,$0c,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00
.db $0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b
.db $80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80
.db $00,$0b,$a0,$01,$0b,$a0,$02,$0b,$a0,$01,$0b,$80,$00,$0b,$80,$01
.db $0b,$80,$02,$0b,$80,$01,$0b,$80,$00,$0b,$a0,$01,$0b,$a0,$02,$0b
.db $a0,$01,$0b,$80,$00,$0b,$80,$01,$0b,$80,$02,$0b,$80,$01,$0e,$11
.db $0c,$0f,$3b,$80,$1f,$a0,$00,$0e,$a0,$00,$0e,$80,$00,$0d,$80,$00
.db $0c,$80,$00,$0b,$80,$00,$0a,$80,$00,$09,$80,$00,$08,$80,$00,$07
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$00,$0e,$0f,$a0,$00,$0f,$a0,$00,$0f,$a0,$00,$0e,$80,$00
.db $0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e
.db $80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80
.db $00,$0e,$80,$00,$0e,$a0,$02,$0e,$a0,$04,$0e,$a0,$02,$0e,$80,$00
.db $0e,$80,$02,$0e,$80,$04,$0e,$80,$02,$0e,$80,$00,$0e,$a0,$02,$0e
.db $a0,$04,$0e,$a0,$02,$0e,$80,$00,$0e,$80,$02,$0e,$80,$04,$0e,$80
.db $02,$0e,$80,$00,$0c,$11,$0f,$0e,$a0,$00,$0e,$a0,$00,$0d,$a0,$00
.db $0d,$80,$00,$0c,$80,$00,$0c,$80,$00,$0b,$80,$00,$0b,$80,$00,$0a
.db $80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80
.db $00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00
.db $0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a
.db $80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80
.db $00,$0a,$80,$00,$0a,$80,$00,$00,$00,$09,$01,$fe,$02,$fe,$03,$fe
.db $04,$fe,$01,$fe,$02,$fe,$05,$fe,$07,$fe,$06,$fe,$08,$fe,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
.db $00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c
.db $00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c
.db $09,$0c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$0a,$00,$00,$ff,$fe,$fd,$fc,$fb,$fa,$f9,$f8,$f7,$f6,$f5,$f4
.db $f3,$f2,$f1,$f0,$ef,$ee,$ed,$ec,$eb,$ea,$e9,$e8,$e7,$e6,$e5,$e4
.db $e3,$e2,$0c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$0d,$fc,$fd,$fe,$ff,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$0e,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03
.db $0c,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03
.db $0c,$00,$07,$03,$0c,$01,$2e,$05,$3f,$05,$b8,$05,$02,$fb,$05,$3f
.db $05,$b8,$05,$03,$11,$06,$3f,$05,$b8,$05,$04,$40,$06,$3f,$05,$b8
.db $05,$05,$68,$06,$85,$06,$d7,$06,$06,$df,$06,$3f,$05,$b8,$05,$07
.db $2c,$07,$4f,$07,$d7,$06,$08,$bb,$07,$06,$08,$b8,$05,$ff,$ac,$68
.db $7c,$2c,$a4,$2f,$b0,$31,$ae,$2a,$a1,$2f,$2e,$b0,$70,$2c,$ff,$a2
.db $6c,$79,$14,$a1,$61,$70,$20,$20,$a2,$62,$79,$14,$61,$70,$20,$6c
.db $79,$14,$61,$70,$20,$62,$79,$14,$a1,$61,$70,$10,$0f,$a2,$6c,$79
.db $0d,$a1,$61,$70,$19,$19,$a2,$62,$79,$0d,$61,$70,$19,$6c,$79,$0d
.db $61,$70,$19,$62,$79,$0d,$a1,$61,$70,$16,$14,$a2,$6c,$79,$12,$a1
.db $61,$70,$1e,$1e,$a2,$62,$79,$12,$61,$70,$1e,$6c,$79,$12,$61,$70
.db $1e,$62,$79,$12,$a1,$61,$70,$17,$16,$a2,$6c,$79,$14,$a1,$61,$70
.db $20,$20,$a2,$62,$79,$14,$61,$70,$20,$6c,$79,$14,$61,$70,$20,$62
.db $79,$14,$a1,$61,$70,$17,$16,$ff,$a1,$6b,$2c,$2f,$33,$38,$3b,$3f
.db $38,$3b,$2c,$2f,$33,$38,$3b,$3f,$38,$3b,$25,$28,$2c,$31,$34,$38
.db $31,$34,$25,$28,$2c,$31,$34,$38,$31,$34,$2a,$2e,$31,$36,$3a,$31
.db $36,$3a,$2a,$2e,$31,$36,$3a,$31,$36,$3a,$2c,$2f,$33,$38,$3b,$3f
.db $38,$3b,$2c,$2f,$33,$38,$3b,$3f,$38,$3b,$ff,$ac,$68,$7c,$2c,$a4
.db $2f,$b0,$31,$ae,$36,$a1,$3b,$3a,$a8,$7d,$38,$a7,$7a,$38,$a1,$80
.db $ff,$a2,$6e,$7d,$2c,$a4,$7c,$2f,$a1,$31,$2f,$a4,$33,$a1,$33,$6f
.db $70,$2f,$a4,$6e,$7c,$33,$34,$a1,$34,$6f,$33,$a8,$6e,$31,$a1,$2a
.db $6f,$28,$a4,$6e,$2a,$a1,$2e,$2f,$a2,$31,$34,$33,$31,$b0,$2c,$ff
.db $a2,$6e,$7c,$2c,$a4,$2f,$a1,$31,$2f,$a4,$33,$a1,$33,$6f,$2f,$a4
.db $6e,$33,$a2,$34,$38,$36,$a8,$34,$a2,$36,$a4,$38,$a1,$36,$38,$a2
.db $36,$34,$33,$31,$b0,$7d,$38,$ff,$a4,$68,$7c,$2c,$a2,$2c,$a6,$2f
.db $a4,$2c,$a2,$31,$ac,$34,$a1,$33,$31,$a2,$2a,$2e,$2f,$2e,$31,$34
.db $33,$31,$b0,$2c,$ff,$a2,$63,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25
.db $a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2
.db $25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25
.db $a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1
.db $25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25
.db $25,$a2,$25,$a1,$25,$25,$ff,$b0,$6b,$7c,$14,$0d,$12,$14,$ff,$a2
.db $6e,$7e,$38,$a1,$80,$a2,$38,$a1,$80,$38,$80,$38,$80,$38,$80,$38
.db $80,$38,$80,$a2,$31,$a1,$80,$a2,$31,$a1,$80,$31,$80,$31,$80,$31
.db $80,$31,$80,$31,$80,$a2,$71,$36,$a1,$80,$a2,$36,$a1,$80,$36,$80
.db $36,$80,$36,$80,$36,$80,$36,$80,$a2,$7e,$38,$a1,$80,$a2,$38,$a1
.db $80,$38,$80,$38,$80,$38,$80,$38,$80,$38,$80,$ff,$a4,$68,$7c,$2c
.db $a2,$2c,$a6,$2f,$a4,$2c,$a2,$31,$ac,$34,$a1,$33,$31,$a2,$2a,$2e
.db $2f,$2e,$31,$34,$33,$31,$a8,$2c,$a3,$7a,$38,$36,$a2,$33,$ff,$a2
.db $67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25
.db $a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63
.db $25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25
.db $a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65
.db $25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1
.db $63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25
.db $25,$65,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$ff,$a2,$6e,$7e,$38,$a1
.db $80,$a2,$38,$a1,$80,$38,$80,$38,$80,$38,$80,$38,$80,$38,$80,$a2
.db $31,$a1,$80,$a2,$31,$a1,$80,$31,$80,$31,$80,$31,$80,$31,$80,$31
.db $80,$a2,$71,$36,$a1,$80,$a2,$36,$a1,$80,$36,$80,$36,$80,$36,$80
.db $36,$80,$36,$80,$a2,$7e,$38,$a1,$80,$a2,$38,$a1,$80,$38,$80,$a3
.db $7a,$38,$36,$a2,$33,$ff,$a2,$6c,$79,$14,$a1,$61,$70,$20,$20,$a2
.db $62,$79,$14,$61,$70,$20,$6c,$79,$14,$61,$70,$20,$62,$79,$14,$a1
.db $61,$70,$10,$0f,$a2,$6c,$79,$0d,$a1,$61,$70,$19,$19,$a2,$62,$79
.db $0d,$61,$70,$19,$6c,$79,$0d,$61,$70,$19,$62,$79,$0d,$a1,$61,$70
.db $16,$14,$a2,$6c,$79,$12,$a1,$61,$70,$1e,$1e,$a2,$62,$79,$12,$61
.db $70,$1e,$6c,$79,$12,$61,$70,$1e,$62,$79,$12,$a1,$61,$70,$17,$16
.db $a2,$6c,$79,$14,$a1,$61,$70,$20,$20,$a2,$62,$79,$14,$61,$70,$20
.db $a1,$65,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$ff
.end
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;°°°° This file was created by °°°°
;°°°° PROGRAM RECOMPILE SYSTEM v(1.15) °°°°
;°°°° (C) 1995 by FRIENDS Software °°°°
;°°°° (C) 2008 by TIMSoft (i8080/i8085 rebuild) °°°°
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.project player-fml.rom
player_org equ $1000
.org 256
xra a
out $10
mvi a, $c9
sta $38
lxi sp, $100
lxi h, flash_pt2
call player_org
zaloop:
ei
hlt
call player_org+6
call player_org+3
jmp zaloop
flash_pt2:
db 0x03, 0x09, 0x00, 0x00, 0x00, 0x9c, 0x03, 0x5e, 0x04, 0x8a, 0x04, 0xc5,
db 0x04, 0xca, 0x04, 0xf3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x05, 0x55, 0x05, 0x00,
db 0x00, 0x00, 0x00, 0x5b, 0x05, 0x61, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
db 0x00, 0x67, 0x05, 0x8d, 0x00, 0x46, 0x4c, 0x41, 0x53, 0x48, 0x20, 0x49,
db 0x4e, 0x20, 0x50, 0x41, 0x52, 0x41, 0x44, 0x49, 0x53, 0x45, 0x2f, 0x50,
db 0x52, 0x4f, 0x47, 0x20, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x20, 0x02,
db 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xa7, 0x00, 0xee,
db 0x01, 0x40, 0x02, 0x75, 0x02, 0x1a, 0x03, 0x45, 0x03, 0x75, 0x02, 0x60,
db 0x03, 0x7d, 0x03, 0x89, 0x03, 0x89, 0x03, 0x8c, 0x03, 0x00, 0x00, 0x20,
db 0xe1, 0x7c, 0x50, 0x00, 0x6f, 0x1f, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0x60,
db 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1,
db 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x5a,
db 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00, 0xb0, 0xe1, 0x7c, 0x5a, 0x00, 0xa4,
db 0xe4, 0x7e, 0x1e, 0x00, 0xb0, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e,
db 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00,
db 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1,
db 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50,
db 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6,
db 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e,
db 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00,
db 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1,
db 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00, 0xb0, 0xe1, 0x7c, 0x4b,
db 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x50, 0x00, 0x6f,
db 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0x60, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6,
db 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e,
db 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00,
db 0xb0, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00, 0xb0, 0xe1,
db 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b,
db 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7,
db 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e,
db 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00,
db 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1,
db 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x4b,
db 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7,
db 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e,
db 0x1e, 0x00, 0xb0, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00,
db 0xb3, 0x00, 0x21, 0xe1, 0x7c, 0x50, 0x00, 0x6f, 0x1f, 0xc8, 0x20, 0xc9,
db 0xe0, 0xca, 0xe0, 0xcb, 0xe0, 0x21, 0xcc, 0x20, 0xcd, 0xe0, 0xce, 0xe0,
db 0xcf, 0xe0, 0x21, 0xd0, 0x20, 0xd1, 0xe0, 0xd2, 0xe0, 0xd3, 0xe0, 0x21,
db 0xd4, 0x20, 0xd5, 0xe0, 0xd6, 0xe0, 0xd7, 0xe0, 0x21, 0x7c, 0x50, 0x00,
db 0xc8, 0x20, 0xc9, 0xe0, 0xca, 0xe0, 0xcb, 0xe0, 0x21, 0xcc, 0x20, 0xcd,
db 0xe0, 0xce, 0xe0, 0xcf, 0xe0, 0x21, 0xd0, 0x20, 0xd1, 0xe0, 0xd2, 0xe0,
db 0xd3, 0xe0, 0x21, 0xd4, 0x20, 0xd5, 0xe0, 0xd6, 0xe0, 0xd7, 0xe0, 0x00,
db 0x23, 0xe2, 0x7f, 0x61, 0x1f, 0xb7, 0xe5, 0xb7, 0xe3, 0xb7, 0x21, 0xe5,
db 0xb7, 0xb7, 0x23, 0xe2, 0x64, 0xb7, 0xe5, 0x65, 0xb7, 0xe3, 0x64, 0xb7,
db 0x20, 0x61, 0xb7, 0xb0, 0xb0, 0xb0, 0x23, 0xe2, 0xb7, 0xe5, 0xb7, 0xe3,
db 0xb7, 0x21, 0xe5, 0xb7, 0xb7, 0xe2, 0x65, 0xb7, 0xb7, 0x23, 0xe5, 0xb7,
db 0xe3, 0xb7, 0xe5, 0xb7, 0x00, 0x20, 0xe1, 0x7c, 0x50, 0x00, 0x6f, 0x1f,
db 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0x60, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6,
db 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e,
db 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00,
db 0xb0, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e, 0x1e, 0x00, 0xb0, 0xe1,
db 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b,
db 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7,
db 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e,
db 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00,
db 0xb2, 0xe1, 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1,
db 0x7c, 0x50, 0x00, 0xa6, 0xe4, 0x7e, 0x1b, 0x00, 0xb2, 0xe1, 0x7c, 0x4b,
db 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x4b, 0x00, 0xa7,
db 0xe4, 0x7e, 0x19, 0x00, 0xb3, 0xe1, 0x7c, 0x5a, 0x00, 0xa4, 0xe4, 0x7e,
db 0x1e, 0x00, 0xb0, 0xe1, 0x7c, 0x4b, 0x00, 0xa7, 0xe4, 0x7e, 0x19, 0x00,
db 0xb3, 0x00, 0x21, 0xe1, 0x7c, 0x50, 0x00, 0x6f, 0x1f, 0xc8, 0x20, 0xc9,
db 0xe0, 0xca, 0xe0, 0xcb, 0xe0, 0x21, 0xcc, 0x20, 0xcd, 0xe0, 0xce, 0xe0,
db 0xcf, 0xe0, 0x21, 0xd0, 0x20, 0xd1, 0xe0, 0xd2, 0xe0, 0xd3, 0xe0, 0x21,
db 0xd4, 0x20, 0xd5, 0xe0, 0xd6, 0xe0, 0xd7, 0xe0, 0x00, 0x21, 0xe6, 0x7f,
db 0x61, 0x1f, 0xa4, 0x23, 0xa4, 0xa4, 0x21, 0xa4, 0x23, 0xa4, 0xa4, 0x21,
db 0xa4, 0xa4, 0x20, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0x00,
db 0x20, 0xe1, 0x7c, 0x50, 0x00, 0x6f, 0x1f, 0xc8, 0xe0, 0xc9, 0xe0, 0xca,
db 0x25, 0xe0, 0x20, 0xd4, 0xe0, 0xe0, 0xcf, 0xe0, 0x21, 0xd0, 0x20, 0xd1,
db 0xe0, 0xd2, 0x2a, 0xe0, 0x00, 0x21, 0xe6, 0x7f, 0x61, 0x1f, 0xa4, 0x25,
db 0xa4, 0x37, 0x1a, 0xa4, 0x00, 0x5f, 0xe0, 0x00, 0x27, 0xe6, 0x7f, 0x6f,
db 0x1f, 0xa4, 0x1a, 0xa4, 0x16, 0xa4, 0x13, 0xa4, 0x3f, 0x11, 0xa4, 0x00,
db 0x40, 0x24, 0x01, 0xf0, 0x09, 0x01, 0xf0, 0x00, 0x01, 0xf0, 0x00, 0x01,
db 0xe0, 0x00, 0x01, 0xd0, 0x01, 0x01, 0xd0, 0x00, 0x01, 0xd0, 0x00, 0x01,
db 0xd0, 0x00, 0x01, 0xd0, 0x01, 0x01, 0xd0, 0x00, 0x01, 0xc0, 0x05, 0x01,
db 0xc0, 0x00, 0x01, 0xc0, 0x02, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01,
db 0xc0, 0x01, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01, 0xb0, 0x02, 0x01,
db 0xb0, 0x00, 0x01, 0xb0, 0x00, 0x01, 0xb0, 0x05, 0x01, 0xb0, 0x00, 0x01,
db 0xb0, 0x01, 0x01, 0xa0, 0x00, 0x01, 0xa0, 0x00, 0x01, 0xa0, 0x00, 0x01,
db 0xa0, 0x02, 0x01, 0x90, 0x00, 0x01, 0x90, 0x05, 0x01, 0x90, 0x01, 0x01,
db 0x90, 0x00, 0x01, 0x90, 0x00, 0x01, 0x90, 0x02, 0x01, 0x90, 0x00, 0x01,
db 0x90, 0x05, 0x01, 0x80, 0x00, 0x01, 0x80, 0x01, 0x01, 0x80, 0x00, 0x01,
db 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01,
db 0x80, 0x01, 0x01, 0x80, 0x03, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01,
db 0x80, 0x02, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x01, 0x01,
db 0x80, 0x00, 0x01, 0x80, 0x00, 0x05, 0x80, 0x01, 0x01, 0x80, 0x00, 0x01,
db 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x05, 0x80, 0x01, 0x05,
db 0x80, 0x01, 0x05, 0x80, 0x01, 0x05, 0x80, 0x02, 0x05, 0x80, 0x02, 0x01,
db 0x80, 0x00, 0x0e, 0x05, 0xfc, 0xf2, 0x00, 0x05, 0xf4, 0x00, 0x05, 0xe5,
db 0x80, 0x05, 0xd7, 0x80, 0x05, 0xc8, 0x80, 0x05, 0xc0, 0x01, 0x05, 0xc0,
db 0x01, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0x01, 0xc0,
db 0x01, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x13, 0x07,
db 0x2c, 0xf0, 0xc0, 0x2c, 0xf1, 0x80, 0x2c, 0xf2, 0x40, 0x2c, 0xe2, 0x80,
db 0x2e, 0xe3, 0x40, 0x26, 0xd2, 0x00, 0x1e, 0xc2, 0x40, 0x10, 0xb0, 0x01,
db 0x09, 0xc0, 0x01, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x05, 0xc0, 0x01,
db 0x05, 0xc0, 0x01, 0x01, 0xc0, 0x00, 0x05, 0xc0, 0x02, 0x05, 0xc0, 0x02,
db 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x01, 0x00, 0x03,
db 0x00, 0x04, 0x0d, 0x03, 0x22, 0xd0, 0x00, 0x12, 0xb0, 0x00, 0x08, 0xc0,
db 0x00, 0x05, 0xc0, 0x01, 0x05, 0xc0, 0x01, 0x01, 0xc0, 0x00, 0x05, 0xc0,
db 0x02, 0x05, 0xc0, 0x02, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0x01, 0xc0,
db 0x01, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x1f, 0x1e, 0x3c, 0xf0, 0x40,
db 0x3c, 0xf0, 0x80, 0x3c, 0xf0, 0xc0, 0x3c, 0xe1, 0x00, 0x34, 0xe1, 0xc0,
db 0x34, 0xe1, 0x40, 0x34, 0xd1, 0x00, 0x34, 0xd1, 0xc0, 0x2c, 0xd1, 0x40,
db 0x2c, 0xc2, 0x80, 0x2c, 0xc2, 0x80, 0x2c, 0xc3, 0x00, 0x2c, 0xc3, 0x80,
db 0x24, 0xb3, 0x40, 0x24, 0xb3, 0x40, 0x24, 0xb3, 0x80, 0x24, 0xb3, 0x40,
db 0x24, 0xa3, 0x40, 0x24, 0xa3, 0x40, 0x1c, 0x92, 0xc0, 0x1c, 0x91, 0x40,
db 0x1e, 0x91, 0x40, 0x1e, 0x81, 0x80, 0x1e, 0x70, 0x00, 0x16, 0x70, 0x00,
db 0x16, 0x60, 0x00, 0x16, 0x50, 0x00, 0x16, 0x40, 0x00, 0x0e, 0x30, 0x00,
db 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x07,
db 0x03, 0x07, 0x00, 0x04, 0x00, 0x07, 0x05, 0x07, 0x00, 0x04, 0x00, 0x07,
db 0x02, 0x07, 0x00, 0x01, 0x00, 0x00
;unsigned int flash_pt2_len = 1386;
.org player_org
ram_F000 equ 0f000h
START: jmp INIT
LA003: jmp LA00F
LA006: jmp LA031
LA009: jmp LA016
LA00C: jmp LA05E
M0A010 equ $+1
LA00F: mvi a, 000h
ora a
rz
jmp LA6D9
LA016: mvi a, 001h
sta M0ABF6
mvi a, 008h
sta M0A042
ret
INIT: xra a
sta M0ABF6
inr a
sta M0A010
jmp LA2C1
LA02C: inr a
sta M0A010
ret
LA031: lda M0A010
cpi 001h
rc
jz LA02C
lda M0ABF6
ora a
jz LA642
M0A042 equ $+1
mvi a, 000h
dcr a
sta M0A042
jnz LA642
mvi a, 008h
sta M0A042
lda M0ABF6
cpi 00Fh
jz LA05E
inr a
sta M0ABF6
jmp LA642
LA05E: xra a
sta M0A010
lxi b, 00010h
LA065: mov a, b
out 015h
xra a
out 014h
inr b
dcr c
jnz LA065
ret
.db 020h,050h,052h,04Fh
.db 054h,052h,041h,043h
.db 04Bh,045h,052h,020h
.db 032h,02Eh,031h,020h
.db 042h,059h,020h,047h
.db 04Fh,04Ch,044h,045h
.db 04Eh,020h,044h,049h
.db 053h,04Bh,020h
LA090: .db 0F8h,00Eh,010h,00Eh
.db 060h,00Dh,080h,00Ch
.db 0D8h,00Bh,028h,00Bh
.db 088h,00Ah,0F0h,009h
.db 060h,009h,0E0h,008h
.db 058h,008h,0E0h,007h
.db 07Ch,007h,008h,007h
.db 0B0h,006h,040h,006h
.db 0ECh,005h,094h,005h
.db 044h,005h,0F8h,004h
.db 0B0h,004h,070h,004h
.db 02Ch,004h,0FDh,003h
.db 0BEh,003h,084h,003h
.db 058h,003h,020h,003h
.db 0F6h,002h,0CAh,002h
.db 0A2h,002h,07Ch,002h
.db 058h,002h,038h,002h
.db 016h,002h,0F8h,001h
.db 0DFh,001h,0C2h,001h
.db 0ACh,001h,090h,001h
.db 07Bh,001h,065h,001h
.db 051h,001h,03Eh,001h
.db 02Ch,001h,01Ch,001h
.db 00Ah,001h,0FCh,000h
.db 0EFh,000h,0E1h,000h
.db 0D6h,000h,0C8h,000h
.db 0BDh,000h,0B2h,000h
.db 0A8h,000h,09Fh,000h
.db 096h,000h,08Eh,000h
.db 085h,000h,07Eh,000h
.db 077h,000h,070h,000h
.db 06Bh,000h,064h,000h
.db 05Eh,000h,059h,000h
.db 054h,000h,04Fh,000h
.db 04Bh,000h,047h,000h
.db 042h,000h,03Fh,000h
.db 03Bh,000h,038h,000h
.db 035h,000h,032h,000h
.db 02Fh,000h,02Ch,000h
.db 02Ah,000h,027h,000h
.db 025h,000h,023h,000h
.db 021h,000h,01Fh,000h
.db 01Dh,000h,01Ch,000h
.db 01Ah,000h,019h,000h
.db 017h,000h,016h,000h
.db 015h,000h,013h,000h
.db 012h,000h,011h,000h
.db 010h,000h,00Fh,000h
LA150: .db 000h,000h,000h,000h
.db 000h,000h,000h,000h
.db 000h,000h,000h,000h
.db 000h,000h,000h,000h
.db 000h,000h,000h,000h
.db 000h,000h,000h,000h
.db 001h,001h,001h,001h
.db 001h,001h,001h,001h
.db 000h,000h,000h,000h
.db 001h,001h,001h,001h
.db 001h,001h,001h,001h
.db 002h,002h,002h,002h
.db 000h,000h,000h,001h
.db 001h,001h,001h,001h
.db 002h,002h,002h,002h
.db 002h,003h,003h,003h
LA190: .db 000h,000h,001h,001h
.db 001h,001h,002h,002h
.db 002h,002h,003h,003h
.db 003h,003h,004h,004h
.db 000h,000h,001h,001h
.db 001h,002h,002h,002h
.db 003h,003h,003h,004h
.db 004h,004h,005h,005h
.db 000h,000h,001h,001h
.db 002h,002h,002h,003h
.db 003h,004h,004h,004h
.db 005h,005h,006h,006h
.db 000h,000h,001h,001h
.db 002h,002h,003h,003h
.db 004h,004h,005h,005h
.db 006h,006h,007h,007h
.db 000h,001h,001h,002h
.db 002h,003h,003h,004h
.db 004h,005h,005h,006h
.db 006h,007h,007h,008h
.db 000h,001h,001h,002h
.db 002h,003h,004h,004h
.db 005h,005h,006h,007h
.db 007h,008h,008h,009h
.db 000h,001h,001h,002h
.db 003h,003h,004h,005h
.db 005h,006h,007h,007h
.db 008h,009h,009h,00Ah
.db 000h,001h,001h,002h
.db 003h,004h,004h,005h
.db 006h,007h,007h,008h
.db 009h,00Ah,00Ah,00Bh
LA210: .db 000h,001h,002h,002h
.db 003h,004h,005h,006h
.db 006h,007h,008h,009h
.db 00Ah,00Ah,00Bh,00Ch
LA220: .db 000h,001h,002h,003h
.db 003h,004h,005h,006h
.db 007h,008h,009h,00Ah
.db 00Ah,00Bh,00Ch,00Dh
.db 000h,001h,002h,003h
.db 004h,005h,006h,007h
.db 007h,008h,009h,00Ah
.db 00Bh,00Ch,00Dh,00Eh
LA240: .db 000h,001h,002h,003h
.db 004h,005h,006h,007h
.db 008h,009h,00Ah,00Bh
.db 00Ch,00Dh,00Eh,00Fh
LA250: .db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 050h,095h,079h,095h
.db 02Fh,08Ah,02Fh,08Ah
.db 0AEh,095h,0C2h,095h
.db 054h,096h,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
LA290: .db 0B6h,096h,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
.db 02Fh,08Ah,02Fh,08Ah
LA2B0: .db 000h
LA2B1: .db 001h
LA2B2: .db 000h
LA2B3: .db 0C2h
LA2B4: .db 001h
LA2B5: .db 02Ch,001h
M0A2B9 equ $+2
LA2B7: .db 02Ch,001h,000h
LA2BA: .db 000h
LA2BB: .db 006h
LA2BC: .db 003h
LA2BD: .db 00Ah
LA2BE: .db 000h,000h
LA2C0: .db 000h
LA2C1: push h
shld LA3D5_+1
push h
mov a, m
sta M0A81A
sta M0A6DF
inx h
inx h
mov a, m
inx h
shld LA36E_+1
lxi d, 00020h
dad d
dad d
shld LA382_+1
dad d
mov e, m
inx h
mov d, m
inx h
lxi b, 0001Eh
dad b
shld LA3C1_+1
mov c, a
dad b
shld LA3AC_+1
pop h
dad d
shld LA3D0_+1
lxi h, LA2B3
lxi d, LA2B4
lxi b, 0000Dh
mov m, b
LA2FC: mov a, b
ora c
jz LA309
mov a, m
stax d
inx h
inx d
dcx b
jmp LA2FC
LA309: nop
xra a
sta LA2B0
sta LA2B1
sta LA2B2
sta M0A76C
sta M0A7D5
sta M0A49A
sta M0A537
sta M0A5D7
sta M0A767
sta M0A7D0
sta M0A4FC
sta M0A59C
sta M0A63D
mov b, a
cma
sta MA464
sta MA501
sta MA5A1
mvi a, 02Fh
sta M0A7B8
sta LA74F
lxi h, LA240
shld LA771_+1
shld LA7DA_+1
shld LA4F7_+1
shld LA597_+1
shld LA638_+1
call LA3B3
xchg
shld LA6F9_+1
xchg
pop b
shld LA36B_+1
lxi h, 00000h
dad sp
shld LA396_+1
LA36B_ lxi h, 00000h
LA36E_ lxi sp, 08A32h
lxi d, LA250
mvi a, 020h
LA375: pop h
dad b
xchg
mov m, e
inx h
mov m, d
inx h
xchg
dcr a
jnz LA375
LA382_ lxi sp, 08A72h
lxi d, LA290
mvi a, 010h
LA389: pop h
dad b
xchg
mov m, e
inx h
mov m, d
inx h
xchg
dcr a
jnz LA389
LA396_ lxi sp, 05FF5h
lhld LA290
shld LA782_+1
shld LA7EB_+1
shld LA470_+1
shld LA50D_+1
shld LA5AD_+1
ret
LA3AB
LA3AC_ lxi h, 08ACEh
mov a, m
add a
jmp LA3C8
LA3B3: shld LA3BE_+1
lxi h, 00000h
dad sp
shld LA3E5_+1
LA3BE_ lxi h, 00000h
LA3C1_ lxi h, 08AB6h
mov a, m
add a
jc LA3AB
LA3C8: add m
add a
inx h
shld LA3C1_+1
mov c, a
LA3D0_ lxi h, 08AD0h
dad b
sphl
LA3D5_ lxi b, 08A2Fh
pop h
dad b
xchg
pop h
dad b
shld LA718_+1
pop h
dad b
shld LA732_+1
LA3E5_ lxi sp, 05FDFh
mvi b, 000h
ret
LA3EA: mov a, e
add a
add e
mov e, a
mvi d, 000h
dad d
mov a, m
rar
jnc LA3F8
mvi d, 004h
LA3F8: rar
sta M0A400
mov a, d
ral
mov d, a
M0A400 equ $+1
mvi a, 000h
rar
call LABC4
inx h
mov a, m
rrc
rrc
rrc
rrc
ani 00Fh
call LABC4
sta M0A418
push psw
mov a, d
ani 008h
M0A418 equ $+1
mvi a, 000h
jnz LABF1
pop psw
push psw
add b
sta M0A2B9
pop psw
LA423: mov a, m
ral
ani 01Fh
inx h
mov l, m
mov h, a
sta M0A432
mov a, d
sta VABC3
M0A432 equ $+1
mvi a, 000h
xchg
mvi b, 000h
LA437_ lxi h, 096B8h
dad b
lda VABC2
add m
add a
mov c, a
lxi h, LA090
dad b
mov a, m
inx h
mov h, m
mov l, a
sta M0A451
mov a, d
stc
cmc
rar
mov d, a
M0A451 equ $+1
mvi a, 000h
jc LA461
sta M0A45F
mov a, l
sub e
mov l, a
mov a, h
sbb d
mov h, a
M0A45F equ $+1
mvi a, 000h
ret
LA461: dad d
ret
MA464 equ $+1
LA463: mvi a, 000h
inr a
jz LA4FD
LA46A_ lxi b, 02800h
LA46D_ lxi d, 095C2h
LA470_ lxi h, 096B6h
mov a, c
inr a
cmp m
inx h
jnz LA47A
mov a, m
LA47A: sta LA46A_+1
inx h
shld LA437_+1
xchg
mov a, b
mov e, a
inr a
cmp m
inx h
jnz LA48B
mov a, m
LA48B: sta LA46A_+2 ; LA46A_+2
inx h
sta M0A498
M0A493 equ $+1
mvi a, 000h
sta VABC2
M0A498 equ $+1
mvi a, 000h
M0A49A equ $+1
mvi b, 000h
call LA3EA
LA49F_ lxi d, 00000h
dad d
shld LA2B3
xchg
M0A4A8 equ $+2
LA4A7_ lxi d, 00000h
dcr d
jm LA4EC
jz LA4E6
push h
LA4B2_ lxi h, 00000h
mov a, e
ana a
jp LA4C0
sta M0A4BF
mvi a, 000h
M0A4BF equ $+1
sui 000h
LA4C0: mov c, a
ana a
sta M0A4CC
mov a, l
sbb c
mov l, a
mov a, h
sbb b
mov h, a
M0A4CC equ $+1
mvi a, 000h
jnc LA4E2
pop h
M0A4D2 equ $+1
mvi a, 000h
sta M0A493
xra a
sta M0A4A8
mov h, a
mov l, a
shld LA49F_+1
jmp LA4EC
LA4E2: shld LA4B2_+1
pop h
M0A4E7 equ $+1
LA4E6: mvi d, 000h
dad d
shld LA49F_+1
LA4EC: lda VABC3
sta LA2BA
call LABC4
mov c, a
LA4F7_ lxi h, LA210
dad b
mov a, m
M0A4FC equ $+1
ori 000h
LA4FD: sta LA2BB
MA501 equ $+1
mvi a, 000h
inr a
jz LA59D
M0A507 equ $+1
LA507_ lxi b, 00A00h
LA50A_ lxi d, 09654h
LA50D_ lxi h, 096B6h
mov a, c
inr a
cmp m
inx h
jnz LA517
mov a, m
LA517: sta M0A507
inx h
shld LA437_+1
xchg
mov a, b
mov e, a
inr a
cmp m
inx h
jnz LA528
mov a, m
LA528: sta LA507_+2 ; LA507_+2
inx h
sta M0A535
M0A530 equ $+1
mvi a, 000h
sta VABC2
M0A535 equ $+1
mvi a, 000h
M0A537 equ $+1
mvi b, 000h
call LA3EA
LA53C_ lxi d, 00000h
dad d
shld LA2B5
xchg
M0A545 equ $+2
LA544_ lxi d, 00000h
dcr d
jm LA589
jz LA583
push h
LA54F_ lxi h, 00000h
mov a, e
ana a
jp LA55D
sta M0A55C
mvi a, 000h
M0A55C equ $+1
sui 000h
LA55D: mov c, a
ana a
sta M0A569
mov a, l
sbb c
mov l, a
mov a, h
sbb b
mov h, a
M0A569 equ $+1
mvi a, 000h
jnc LA57F
pop h
M0A56F equ $+1
mvi a, 000h
sta M0A530
xra a
sta M0A545
mov h, a
mov l, a
shld LA53C_+1
jmp LA589
LA57F: shld LA54F_+1
pop h
M0A584 equ $+1
LA583: mvi d, 000h
dad d
shld LA53C_+1
LA589: lda VABC3
lxi h, LA2BA
rlc
ora m
mov m, a
call LABC4
mov c, a
LA597_ lxi h, LA190
dad b
mov a, m
M0A59C equ $+1
ori 000h
LA59D: sta LA2BC
MA5A1 equ $+1
mvi a, 000h
inr a
jz LA63E
LA5A7_ lxi b, 00A00h
LA5AA_ lxi d, 09654h
LA5AD_ lxi h, 096B6h
mov a, c
inr a
cmp m
inx h
jnz LA5B7
mov a, m
LA5B7: sta LA5A7_+1
inx h
shld LA437_+1
xchg
mov a, b
mov e, a
inr a
cmp m
inx h
jnz LA5C8
mov a, m
LA5C8: sta LA5A7_+2
inx h
sta M0A5D5
MA5D0 equ $+1
mvi a, 000h
sta VABC2
M0A5D5 equ $+1
mvi a, 000h
M0A5D7 equ $+1
mvi b, 000h
call LA3EA
LA5DC_ lxi d, 00000h
dad d
shld LA2B7
xchg
M0A5E5 equ $+2
LA5E4_ lxi d, 00000h
dcr d
jm LA629
jz LA623
push h
LA5EF_ lxi h, 00000h
mov a, e
ana a
jp LA5FD
sta M0A5FC
mvi a, 000h
M0A5FC equ $+1
sui 000h
LA5FD: mov c, a
ana a
sta M0A609
mov a, l
sbb c
mov l, a
mov a, h
sbb b
mov h, a
M0A609 equ $+1
mvi a, 000h
jnc LA61F
M0A60E equ $+1
mvi a, 000h
sta MA5D0
xra a
sta M0A5E5
mov h, a
mov l, a
shld LA5DC_+1
pop h
jmp LA629
LA61F: shld LA5EF_+1
pop h
M0A624 equ $+1
LA623: mvi d, 000h
dad d
shld LA5DC_+1
LA629: lda VABC3
lxi h, LA2BA
rlc
rlc
ora m
mov m, a
call LABC4
mov c, a
LA638_ lxi h, LA220
dad b
mov a, m
M0A63D equ $+1
ori 000h
LA63E: sta LA2BD
ret
LA642: lxi h, LA2C0
lxi d, ram_F000+0FBFh
mvi c, 0FDh
xra a
ora m
mvi a, 00Dh
jnz LA659
sui 003h
lxi h, LA2BD
jmp LA672
LA659: out 015h
mov c, a
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
out 014h
dcx h
dcr c
mov a, c
out 015h
mov a, m
out 014h
dcx h
dcr c
mov a, c
LA672: out 015h
mov c, a
mov a, m
dcx h
call LABF5
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
call LABF5
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
call LABF5
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
dcx h
out 014h
dcr c
mov a, c
out 015h
mov a, m
out 014h
dcx h
dcr c
mov a, c
out 015h
mov a, m
out 014h
dcx h
dcr c
mov a, c
out 015h
mov a, m
out 014h
mov a, c
sta LA2BA
sta LA2C0
ret
LA6D9: xra a
mov b, a
call LABC4
M0A6DF equ $+1
mvi a, 001h
dcr a
sta M0A6DF
jz LA728
dcr a
jz LA70E
dcr a
jnz LA463
lxi h, LA2B0
dcr m
jp LA463
M0A6F7 equ $+1
mvi m, 000h
LA6F9_ lxi d, 08C6Fh
ldax d
ana a
cz LA3B3
call LA8BA
sta M0A73D
xchg
shld LA6F9_+1
xchg
jmp LA463
LA70E: lxi h, LA2B1
dcr m
jp LA463
M0A716 equ $+1
mvi m, 001h
LA718_ lxi d, 08D01h
call LAA00
sta LA7A6
xchg
shld LA718_+1
xchg
jmp LA463
LA728: lxi h, LA2B2
dcr m
jp LA73C
M0A730 equ $+1
mvi m, 001h
LA732_ lxi d, 08D38h
call LAB25
xchg
shld LA732_+1
xchg
LA73C: xra a
M0A73D: stc
jnc LA75F
sta M0A73D
sta M0A4A8
mov h, a
mov l, a
shld LA46A_+1
shld LA49F_+1
LA74F: nop
sta MA464
M0A754 equ $+1
mvi a, 023h
sta M0A493
LA759_ lxi h, 095C2h
shld LA46D_+1
xra a
LA75F: stc
jnc LA777
sta LA75F
M0A767 equ $+1
mvi a, 000h
sta M0A4FC
M0A76C equ $+1
mvi a, 000h
sta M0A49A
LA771_ lxi h, 08198h
shld LA4F7_+1
xra a
LA777: nop
jnc LA788
sta LA46A_+1
sta LA777
LA782_ lxi h, 096B6h
shld LA470_+1
xra a
LA788: nop
jnc LA7A6
sta LA788
M0A790 equ $+1
mvi a, 000h
sta M0A4D2
LA795_ lxi h, 00000h
shld LA4B2_+1
M0A79B equ $+1
mvi a, 000h
sta M0A4E7
M0A7A1 equ $+2
LA7A0_ lxi h, 00000h
shld LA4A7_+1
xra a
LA7A6: stc
jnc LA7C8
mov h, a
mov l, a
sta M0A545
shld LA53C_+1
shld LA507_+1
sta LA7A6
M0A7B8: nop
sta MA501
M0A7BD equ $+1
mvi a, 036h
sta M0A530
LA7C2_ lxi h, 09654h
shld LA50A_+1
xra a
LA7C8: stc
jnc LA7E0
sta LA7C8
M0A7D0 equ $+1
mvi a, 000h
sta M0A59C
M0A7D5 equ $+1
mvi a, 000h
sta M0A537
LA7DA_ lxi h, 081A8h
shld LA597_+1
xra a
LA7E0: nop
jnc LA7F1
sta M0A507
sta LA7E0
LA7EB_ lxi h, 096B6h
shld LA50D_+1
xra a
LA7F1: nop
jnc LA80E
sta LA7F1
LA7F9_ lxi h, 00000h
shld LA54F_+1
M0A7FF equ $+1
mvi a, 000h
sta M0A56F
M0A804 equ $+1
mvi a, 000h
sta M0A584
M0A80A equ $+2
LA809_ lxi h, 00000h
shld LA544_+1
M0A80F equ $+1
LA80E: mvi a, 000h
sta LA2C0
M0A814 equ $+1
M0A815 equ $+2
lxi h, 00000h
shld LA2BE
M0A81A equ $+1
mvi a, 005h
sta M0A6DF
xra a
sta M0A80F
jmp LA463
LA825: sta M0A790
lda M0A7A1
dcr a
jz LA834
mov a, c
sta M0A754
xra a
LA834: sta LA74F
mvi a, 037h
sta LA788
ret
LA83D: call LABC4
sta LA75F
lda M0A493
mov c, a
call LABC4
sta M0A754
inr b
jz LA825
xra a
sta M0A7A1
sta LA74F
mvi a, 037h
ret
LA85B: add a
add a
add a
add a
lxi h, LA150
mov c, a
dad b
shld LA771_+1
mvi a, 037h
call LABC4
jmp LA8BA
LA86F: mvi a, 037h
sta LA788
ldax d
inx d
mvi h, 001h
mov l, a
shld LA7A0_+1
ana a
mov a, b
jp LA882
cma
LA882: sta M0A79B
dcr b
jmp LA8BA
LA889: ldax d
inx d
mvi h, 002h
mov l, a
shld LA7A0_+1
ana a
mov a, b
jp LA897
cma
LA897: sta M0A79B
ldax d
mov l, a
inx d
ldax d
inx d
mov h, a
shld LA795_+1
dcr b
jmp LA8BA
LA8A7: ldax d
inx d
sta M0A76C
mvi a, 037h
call LABC4
jmp LA8BA
LA8B4: sta LA2B0
sta M0A6F7
LA8BA: ldax d
inx d
adi 020h
jc LA8F6
adi 060h
jc LA83D
adi 010h
jc LA941
adi 010h
jc LA909
adi 040h
jc LA8B4
adi 010h
jc LA85B
inr a
jz LA963
inr a
jz LA86F
inr a
jz LA889
inr a
jnz LA8A7
xra a
sta M0A7A1
mvi a, 037h
sta LA788
jmp LA8BA
LA8F6: jz LA91E
add a
lxi h, LA250
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA759_+1
jmp LA8BA
LA909: lxi h, LA290
add a
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA782_+1
mvi a, 037h
sta LA777
jmp LA8BA
LA91E: call LABC4
sta LA75F
mvi a, 02Fh
sta LA74F
mvi a, 037h
ret
LA92C: call LABC4
sta LA75F
mvi a, 0A7h
ret
LA935: xra a
sta M0A767
mvi a, 037h
call LABC4
jmp LA8BA
LA941: jz LA92C
cpi 00Fh
jz LA935
sta M0A80F
mvi a, 010h
sta M0A767
ldax d
sta M0A814
inx d
ldax d
sta M0A815
inx d
mvi a, 037h
call LABC4
jmp LA8BA
LA963: ldax d
inx d
sta M0A81A
jmp LA8BA
LA96B: sta M0A7FF
lda M0A80A
dcr a
jz LA97A
mov a, c
sta M0A7BD
xra a
LA97A: sta M0A7B8
mvi a, 037h
sta LA7F1
ret
LA983: call LABC4
sta LA7C8
lda M0A530
mov c, a
call LABC4
sta M0A7BD
inr b
jz LA96B
xra a
sta M0A80A
sta M0A7B8
mvi a, 037h
ret
LA9A1: add a
add a
add a
add a
lxi h, LA150
mov c, a
dad b
shld LA7DA_+1
mvi a, 037h
call LABC4
jmp LAA00
LA9B5: mvi a, 037h
sta LA7F1
ldax d
inx d
mvi h, 001h
mov l, a
shld LA809_+1
ana a
mov a, b
jp LA9C8
cma
LA9C8: sta M0A804
dcr b
jmp LAA00
LA9CF: ldax d
inx d
mvi h, 002h
mov l, a
shld LA809_+1
ana a
mov a, b
jp LA9DD
cma
LA9DD: sta M0A804
ldax d
mov l, a
inx d
ldax d
inx d
mov h, a
shld LA7F9_+1
dcr b
jmp LAA00
LA9ED: ldax d
inx d
sta M0A7D5
mvi a, 037h
call LABC4
jmp LAA00
LA9FA: sta LA2B1
sta M0A716
LAA00: ldax d
inx d
adi 020h
jc LAA3C
adi 060h
jc LA983
adi 010h
jc LAA87
adi 010h
jc LAA4F
adi 040h
jc LA9FA
adi 010h
jc LA9A1
inr a
jz LAAA9
inr a
jz LA9B5
inr a
jz LA9CF
inr a
jnz LA9ED
xra a
sta M0A80A
mvi a, 037h
sta LA7F1
jmp LAA00
LAA3C: jz LAA64
add a
lxi h, LA250
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA7C2_+1
jmp LAA00
LAA4F: lxi h, LA290
add a
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA7EB_+1
mvi a, 037h
sta LA7E0
jmp LAA00
LAA64: call LABC4
sta LA7C8
mvi a, 02Fh
sta M0A7B8
mvi a, 037h
ret
LAA72: call LABC4
sta LA7C8
mvi a, 0A7h
ret
LAA7B: xra a
sta M0A7D0
mvi a, 037h
call LABC4
jmp LAA00
LAA87: jz LAA72
cpi 00Fh
jz LAA7B
sta M0A80F
mvi a, 010h
sta M0A7D0
ldax d
sta M0A814
inx d
ldax d
sta M0A815
inx d
mvi a, 037h
call LABC4
jmp LAA00
LAAA9: ldax d
inx d
sta M0A81A
jmp LAA00
LAAB1: call LABC4
lda MA5D0
mov c, a
call LABC4
sta MA5D0
inr b
jz LAAC9
xra a
sta M0A5E5
jmp LAAD8
LAAC9: sta M0A60E
lda M0A5E5
dcr a
jz LAAD8
mov a, c
sta MA5D0
xra a
LAAD8: mov h, a
mov l, a
shld LA5DC_+1
sta MA5A1
shld LA5A7_+1
ret
LAAE4: ldax d
inx d
mvi h, 001h
mov l, a
shld LA5E4_+1
ana a
mov a, b
jp LAAF2
cma
LAAF2: sta M0A624
dcr b
jmp LAB25
LAAF9: ldax d
inx d
mov l, a
mvi h, 002h
shld LA5E4_+1
ana a
mov a, b
jp LAB07
cma
LAB07: sta M0A624
ldax d
mov l, a
inx d
ldax d
inx d
mov h, a
shld LA5EF_+1
dcr b
jmp LAB25
LAB17: ldax d
inx d
sta M0A5D7 ; M0A5D7
jmp LAB25
LAB1F: sta LA2B2
sta M0A730
LAB25: ldax d
inx d
adi 020h
jc LAB5C
adi 060h
jc LAAB1
adi 010h
jc LAB89
adi 010h
jc LAB6F
adi 040h
jc LAB1F
adi 010h
jc LABB3
inr a
jz LABAB
inr a
jz LAAE4
inr a
jz LAAF9
inr a
jnz LAB17
xra a
sta M0A5E5
jmp LAB25
LAB5C: jz LAB83
add a
lxi h, LA250
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA5AA_+1
jmp LAB25
LAB6F: lxi h, LA290
add a
mov c, a
dad b
mov a, m
inx h
mov h, m
mov l, a
shld LA5AD_+1
xra a
sta LA5A7_+1
jmp LAB25
LAB83: mvi a, 0FFh
sta MA5A1
ret
LAB89: rz
cpi 00Fh
jz LABA4
sta M0A80F
mvi a, 010h
sta M0A63D
ldax d
sta M0A814
inx d
ldax d
sta M0A815
inx d
jmp LAB25
LABA4: xra a
sta M0A63D
jmp LAB25
LABAB: ldax d
inx d
sta M0A81A
jmp LAB25
LABB3: add a
add a
add a
add a
lxi h, LA150
mov c, a
dad b
shld LA638_+1
jmp LAB25
VABC2: .db 0
VABC3: .db 0
LABC4: shld LABDB_+1
push psw
pop h
LABCA_ jmp LABCC
LABCC: shld LABED
lxi h, LABDE
shld LABCA_+1
lhld LABEF
LABD8: push h
pop psw
LABDB_ lxi h, 00000h
ret
LABDE: shld LABEF ; .db 022h,0EFh,0ABh,
lxi h, LABCC
shld LABCA_+1
lhld LABED
jmp LABD8
LABED: .db 000h,000h
LABEF: .db 000h,000h
LABF1: pop psw
jmp LA423
M0ABF6 equ $+1
LABF5: sui 000h
cpi 080h
rc
xra a
ret
.end
; STC player by DemonID7: 33-48 lines без визуализации
; худший случай: 45 строк
; tune: DOCZak1 by DOC'NEONSOFT
.project stcplay-demonid7.rom
.tape v06c-rom
.org $100
di
xra a
out $10
mvi a, $c9
sta $38
main:
lxi b, songe1
call STINIT
eternal_loop:
ei
hlt
call STPLAY
jmp eternal_loop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PLAYER STUFF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; EQUHEIGHT equ 6 ; высота полос эквалайзера
;------------------------------------------------------------------------
; сброс "эквалайзера" в исходное положение
;------------------------------------------------------------------------
RstEqu:
ret
;------------------------------------------------------------------------
; отрисовывает строку "эквалайзера"
;------------------------------------------------------------------------
; на входе:
; BC - адрес видеопамяти
PutEql:
ret
STSTOP:
di
mvi A, 7
out 15h ; номер регистра AY - адрес в спектруме FFFDh
mvi A, 3Fh
out 14h
mvi A, 8
out 15h
mvi A, 0
out 14h
mvi A, 9
out 15h
mvi A, 0
out 14h
mvi A, 10
out 15h
mvi A, 0
out 14h
; убираем свой обработчик IRQ
; lxi B, OLDISR
; call DelVec
ret
;------------------------------------------------------------------------
; Инициализация проигрывателя
;------------------------------------------------------------------------
; на входе:
; BC - адрес музона
STINIT:
call RstEqu
lda plFlag
ani 0FEh
sta plFlag ; сбрасываем флаг остановки
mov L, C
mov H, B
mov A, M
sta nDelay
shld musAdr+1
inx H
call cnvAdr ; DE = &OrderList
ldax D
inx D
inr A
sta lenOrd
xchg
shld ordAdr
xchg
call cnvAdr ; DE = &Ornaments
xchg
shld ornAdr
xchg
push D ; save ornament address
call cnvAdr ; DE = &Patterns
xchg
shld patAdr
xchg
lxi H, 1Bh
call musAdr ; DE = &Samples
xchg
shld smpAdr
lxi H, nulPat
mvi M, 0FFh
shld patA ; patA = &numPat // ставим заглушку на паттерн
; инициализируем остальные данные значением 0x2C
lxi H, ul7c46
lxi D, ul7c46+1
lxi B, 2ch
mov M, B
LDIR1: ; ldir
mov A, M
stax D ; [DE++] = [HL++]
inx H
inx D
dcx B
mov A,B
ora C
jnz LDIR1
pop H ; HL = &Ornaments
lxi B, 21h
xra A
call fndRec
dcr A ; A = 0xFF
sta smCntA ; осталось позиций в сэмпле канала
sta smCntB
sta smCntC
mvi A, 1
sta delCnt
inx H
shld nOrnmA ; адрес таблицы орнамента
shld nOrnmB
shld nOrnmC
call ldRegs
; вешаем обработчик прерывания
; lxi B, ISR
; lxi D, OLDISR
; call SetVec
ret
ISR:
call STPLAY
lhld eqStep
xchg
lhld eqTick
lda eqUpd
dad D
aci 0
shld eqTick
sta eqUpd
OLDISR: ; jmp old interrupt
ret
ret
ret
;------------------------------------------------------------------------
; поиск элемента в таблице
;------------------------------------------------------------------------
; на входе:
; A - номер записи
; HL - массив записей
; BC - размер одной записи
; на выходе:
; HL - адрес найденной записи
fndRec:
cmp M ; это заданный элемент?
rz ; -> да
dad B ; нет, переходим к следующему
jmp fndRec
;------------------------------------------------------------------------
; преобразует смещение от начала файла в абсолютный адрес
;------------------------------------------------------------------------
; на входе:
; HL - указатель на смещание относительно нач. файла
; DE - адрес для результата
; destroy: BC
cnvAdr:
mov E, M
inx H
mov D, M
inx H
xchg
musAdr:
lxi B, 0
dad B
xchg
ret ; return musAddr + [HL++]
;------------------------------------------------------------------------
; извлекает данные из текущего инструмента
;------------------------------------------------------------------------
; на входе:
; A - текущая позиция в сэмпле [0..31]
; IX - &Sample[n]
; на выходе:
; DE - смещение тона (12 бит)
; L - громкость
; H - значение шума
; C - флаг включения шума
; B - флаг включения тона
; destroy: A
getSmp:
mvi D, 0
mov E, A
add A
add E
mov E, A ; DE = A*3
;add ix,de
lhld IX
dad D
shld IX ; IX = &Sample.Data[curPos]
;ld a,1(ix)
inx H
mov A, M
push PSW
; --
; bit 7,a
mov B, A
ani 80h ; шум включен?
; --
mvi C, 10h
jnz l7c97 ; -> нет, выключен
mov C, D ; C = 0 // шум включен
l7c97:
; bit 6,a
mov A, B
ani 40h ; тон включен?
mov A, B
; --
mvi B, 2
jnz l7c9f ; -> нет
mov B, D ; B = 0 // тон включен
l7c9f:
; ld e,2(ix)
dcx H
; ld a,0(ix)
mov D, M ; A = bit 0-3 - громкость, 4-7 - старшие биты смещения тона
inx H
inx H
mov E, M ; E = смещение тона (младший байт)
; --
ani 1Fh
mov H, A ; H = значение шума
mov A, D
ani 0Fh
mov L, A ; L = громкость
mov A, D
rrc
rrc
rrc
rrc
ani 0Fh
mov D, A ; D = старшие биты смещения тона
; bit 5,1(ix)
pop PSW
ani 20h ; A = направление сдвига (0- минус к частоте, 1-плюс к частоте)
; --
rz
; set 4,d
mov A, D
ori 10h
mov D, A ; устанавливаем признак прибавки тона к частоте
; --
ret
;------------------------------------------------------------------------
; переход к следующему паттерну
;------------------------------------------------------------------------
; на входе:
; curOrd - номер текущего паттерна в order list
; на выходе:
; destroy: ALL
nexPat:
lda curOrd
mov C, A
lxi H, lenOrd
cmp M
jc _nwOrd
; достигли конца таблицы Orders
lda plFlag
ori 1
sta plFlag ; выставляем признак окончания
xra A ; переходим в начало списка паттернов
mov C, A
_nwOrd:
inr A
sta curOrd
; ld de,(ordAdr)
lhld ordAdr
xchg
; --
mov L, C
mvi H, 0
dad H
dad D ; HL = &OrderList[curOrd-1]
mov A, M
mov C, A ; C = номер паттерна для данной позиции
sta patNum
inx H
mov A, M ; A = смещение тона для паттерна
sta shTone+1
mov A, C
lhld patAdr
lxi B, 7 ; BC = sizeof (PATTERN_ELEM)
call fndRec
inx H ; пропускаем номер элемента
call cnvAdr
; ld (patA),de
xchg
shld patA
xchg
; --
call cnvAdr
; ld (patB),de
xchg
shld patB
xchg
; --
call cnvAdr
; ld (patC),de
xchg
shld patC
xchg
; --
ret
;------------------------------------------------------------------------
; декремент счетчика задержки между проигрыванием нот
;------------------------------------------------------------------------
; на входе:
; HL - адрес блока параметров (IX)
; destroy: A, HL
decCnt:
; dec 2(ix)
inx H
inx H
dcr M ; (IX+2) = (IX+2) - 1
; --
rp ; if (IX+2) >= 0 then RETURN
; ld a,-1(ix)
dcx H
dcx H
dcx H
mov A, M
; ld 2(ix),a
inx H
inx H
inx H
mov M, A ; (IX+2) = (IX-1)
; --
ret
;------------------------------------------------------------------------
; проигрывание музона (вызывается раз в 1/50 секунды)
;------------------------------------------------------------------------
STPLAY:
lda plFlag
mov C, A
ani 10b ; loop enable?
jnz _RUNPL ; -> yes
mov A, C
ani 1 ; stop play?
rnz ; -> yes
_RUNPL:
lda delCnt
dcr A
sta delCnt
jnz doPlay
; пора делать выборку данных для проигрывателя
lda nDelay
sta delCnt ; delCnt = nDelay
; канал A
; ld ix,#IXchA
lxi H, IXchA
shld IX
; --
call decCnt ; не пора ли играть след. ноту на канале A?
jp _playB
lhld patA
mov A, M
inr A ; if (A = 0xFF) then
cz nexPat ; подгружаем следующий паттерн
lhld patA
call getPat ; обрабатываем очередную ноту
shld patA ; сохраняем текущую позицию в паттерне A
_playB:
; ld ix,#IXchB
lxi H, IXchB
shld IX
; --
call decCnt
jp _playC
lhld patB
call getPat
shld patB
_playC:
; ld ix,#IXchC
lxi H, IXchC
shld IX
; --
call decCnt
jp doPlay
lhld patC
call getPat
shld patC
jmp doPlay
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
; на входе:
; HL - адрес паттерна для текущего канала
; IX - блок данных канала
; на выходе:
; HL - новый адрес паттерна для текущего канала
; destroy: BC, DE, A
getPat:
mov A, M
cpi 60h
jc cNote
cpi 70h
jc cInstr
cpi 80h
jc cOrmn
jz cPause
cpi 81h
jz cEmpty
cpi 82h
jz cEfOff
cpi 8fh
jc cEnvil
; 0xA1 - 0xFE - значение задержки между нотами в канале (в прерываниех)
sui 0a1h ; A = значение задержки
; ld -1(ix),a
xchg
lhld IX
dcx H
mov M, A ; (IX-1) = A
; ld 2(ix),a
inx H
inx H
inx H
mov M, A ; (IX+2) = A
xchg
; --
inx H
jmp getPat
cNote: ; 0..0x5F - номер ноты (позиция завершается)
; ld 1(ix),a
; ld 0(ix),#0x00
; ld 7(ix),#0x20
xchg
lhld IX
mvi M, 0 ; текущая позиция в сэмпле = 0
inx H
mov M, A ; нота = A
inx H
inx H
inx H
inx H
inx H
inx H
mvi M, 32 ; осталось позиций в сэмпле = 32
xchg
; --
cEmpty: ; 0x81 - пустая нота, позиция завершается
inx H
ret
cInstr: ; 0x60-0x6F - номер инструмента (samples)
sui 60h
xchg
; ищем нужный инструмент по его номеру
lxi B, 63h
lhld smpAdr
call fndRec
inx H ; skip номер инструмента
; ld 3(ix),l
mov C, L
mov B, H
lhld IX
inx H
inx H
inx H
mov M, C ; (IX+3) = LO( &Samples[n] )
; ld 4(ix),h
inx H
mov M, B ; (IX+4) = HI( &Samples[n] )
; --
xchg
inx H
jmp getPat
cPause: ; 0x80 - пауза (отключение канала и завершение позиции)
inx H
chOff:
; ld 7(ix),#0x0ff
xchg
lhld IX
inx H
inx H
inx H
inx H
inx H
inx H
inx H
mvi M, 0FFh
xchg
; --
ret
cEfOff: ; 0x82 - отключение огибающей эффекта (орнамента)
xra A
jmp doOrmn
cOrmn: ; 0x70-0x7F - номер эффекта (орнамента)
sui 70h ; A - номер эффекта (0 - отключение огибающей)
doOrmn:
push H
; ищем нужный орнамент по его номеру
lxi B, 21h
lhld ornAdr
call fndRec
inx H ; skip номер орнамента
; ld 5(ix),l
; ld 6(ix),h
; ld -2(ix),#00
push H
lhld IX
dcx H
dcx H
mvi M, 0 ; (IX-2) = 0
lxi D, 7
dad D
pop D
mov M, E ; (IX+5) = LO( &Ornaments[n] )
inx H
mov M, D ; (IX+6) = HI( &Ornaments[n] )
; --
pop H
inx H
jmp getPat
cEnvil: ; 0x83-0x8E - номер огибающей (3..14)
sui 80h
sta rg0x0D
inx H
mov A, M
inx H
sta rg0x0B
; ld -2(ix),#01
xchg
lhld IX
dcx H
dcx H
mvi M, 1 ; (IX-2) = 1
xchg
; --
push H
xra A
lxi B, 21h
lhld ornAdr
call fndRec
inx H
; ld 5(ix),l
; ld 6(ix),h
push H
lhld IX
lxi D, 5
dad D
pop D
mov M,E ; (IX+5) = LO( &Effects[0] )
inx H
mov M,D ; (IX+6) = HI( &Effects[0] )
; --
pop H
jmp getPat
;------------------------------------------------------------------------
; выборка следующей позиции в текущем сэмпле
;------------------------------------------------------------------------
; на входе:
; IX -
; на выходе:
; C - текущая позиция в сэмпле (????? при достижении конца сэмпла будет неопределен ?????)
; (IX+0) - след. позиция в сэмпле
; (IX+7) - количество оставшихся выборок в сэмпле
; destroy: HL, DE, A
sNxPos:
mvi C, 0 ; ?????
; ld a,7(ix)
lhld IX
lxi D, 7
dad D
mov A, M ; A - осталось позиций в сэмпле
; --
inr A ; if (IX+7) = 0xFF then
rz ; return
dcr A
; уменьшаем количество оставшихся выборок в сэмпле (IX+7)
dcr A
; ld 7(ix),a
mov M, A ; (IX+7) = (IX+7) - 1
; --
; инкрементируем текущую позицию в сэмпле (IX+0)
push PSW
; ld a,0(ix)
lhld IX
mov A, M ; A = текущая позиция в сэмпле
; --
mov C, A ; C = текущая позиция в сэмпле
inr A ; smpPos++
ani 1Fh
; ld 0(ix),a
lhld IX
mov M, A ; (IX+0) = ( (IX+0) + 1) & 0x1F;
; --
pop PSW
rnz ; if ( (IX+7)-1) > 0 then RETURN
; достигли конца сэмпла
; ld e,3(ix)
; ld d,4(ix)
lhld IX
inx H
inx H
inx H
mov E, M
inx H
mov D, M ; DE = &Sample[curSample]
; --
lxi H, 60h ; HL = &Sample[curSample].RepeatPosition
dad D
mov A, M ; A - позиция с которой начинать проигрывание семпла и орнамента
dcr A ; if pos == 0 then
jm chOff ; выключаем канал
mov C, A ; C = текущая позиция в сэмпле
inr A ; smpPos++
ani 1Fh
inx H ; HL = &Sample[curSample].RepeatLength
mov D, M ; A - длина сэмпла (количество позиций)
; ld 0(ix),a
lhld IX
mov M, A ; (IX+0) = ( (IX+0) + 1) & 0x1F;
; ld 7(ix),a
mov A, D
inr A
lxi D, 7
dad D
mov M, A ; (IX+7) = осталось поз. в сэмпле
ret
;------------------------------------------------------------------------
; заносит в буф. регистр значение для генератора шума
;------------------------------------------------------------------------
; на входе:
; C - флаг включения шума (0 - разрешен, >0 - отключен)
; H - значение шума
; destroy: A
stNois:
mov A, C
ora A ; шум требуется включить?
rnz ; -> нет
mov A, H
sta rg0x06
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
; на входе:
; HL - адрес регистра громкости
; A - громкость
; destroy: A, BC, DE
l7e35:
mov M, A
xchg ; DE = адрес регистра громкости
; ld a,7(ix)
lhld IX
lxi B, 7
dad B
mov A, M ; A - количество оставшихся позиций в сэмпле
; --
inr A ; if (IX+7) == 0xFF then
rz ; return
; ld a,-2(ix)
lxi B, -9
dad B
mov A, M
; --
ora A ; if (IX-2) == 0 then
rz ; return
cpi 2 ; if (IX-2) == 0 then
jz envOff ; отключаем генератор огибающей
; ld 2(ix),#2 ; ??????? bags ???????
mvi M, 2 ; (IX-2) = 2
; --
jmp l7e4f
envOff:
xra A
sta rg0x0D
l7e4f:
; set 4,(hl)
xchg
mvi A, 10h
ora M ; уровень громкости определяется битами
mov M, A ; генератора огибающей
ret
;------------------------------------------------------------------------
; выборка данных паттерна и их проигрывание
;------------------------------------------------------------------------
doPlay:
; канал A
; ld ix,#IXchA
lxi H, IXchA
shld IX
; --
call sNxPos ; переход на след. позицию сэмпла
mov A, C ; A - текущая позиция в сэмпле
sta smpPos+1
; ld ix,(pSampA)
lhld pSampA
shld IX
; --
call getSmp
; формируем биты разрешения шума и тона для регистра смесителя
mov A, C ; A = бит включения шума
ora B ; A = бит включения шума + бит включения тона
rar
sta rg0x07
; ld ix,#IXchA
push H
lxi H, IXchA
shld IX
; ld a,7(ix)
push D
lxi D, 7
dad D
pop D
mov A, M ; A = остаток позиций в сэмпле
pop H
; --
inr A
jz _volA
call stNois ; задаем значение шума, если нужно
call getFrq ; HL = частота канала A, A - громкость
shld rg0x00
_volA:
lxi H, rgVolA
call l7e35
; канал B
; ld ix,#IXchB
lxi H, IXchB
shld IX
; --
call sNxPos ; переход на след. позицию сэмпла
; ld a,7(ix)
lhld IX
lxi D, 7
dad D
mov A, M ; A - осталось позиций в сэмпле
; --
inr A
jz _volB
mov A, C ; A - текущая позиция в сэмпле
sta smpPos+1
; ld ix,(pSampB)
lhld pSampB
shld IX
call getSmp
; формируем биты разрешения шума и тона для регистра смесителя
lda rg0x07
ora B
ora C
sta rg0x07
call stNois ; задаем значение шума, если нужно
; ld ix,#IXchB
push H
lxi H, IXchB
shld IX
pop H
; --
call getFrq ; HL = частота канала A, A - громкость
shld rg0x02
_volB:
lxi H, rgVolB
call l7e35
; канал C
; ld ix,#IXchC
lxi H, IXchC
shld IX
; --
call sNxPos ; переход на след. позицию сэмпла
; ld a,7(ix)
lhld IX
lxi D, 7
dad D
mov A, M ; A - осталось позиций в сэмпле
; --
inr A
jz _volC
mov A, C ; A - текущая позиция в сэмпле
sta smpPos+1
; ld ix,(pSampC)
lhld pSampC
shld IX
; --
call getSmp
; формируем биты разрешения шума и тона для регистра смесителя
mov A, C
ora B ; clear carry
ani 10010b
ral
mov C, A
lda rg0x07
ora C
sta rg0x07
call stNois ; задаем значение шума, если нужно
; ld ix,#IXchC
push H
lxi H, IXchC
shld IX
pop H
; --
call getFrq ; HL = частота канала A, A - громкость
shld rg0x04
_volC:
lxi H, rgVolC
call l7e35
jmp ldRegs
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
; на входе:
; IX - блок параметров
; DE - смещение тона (12 бит)
; L - громкость
; B - флаг включения тона
; на выходе:
; HL - частота для генератора
; A - громкость
; destroy:
getFrq:
mov A, L
push PSW
push D
; ld l,5(ix)
; ld h,6(ix)
lhld IX
lxi D, 5
dad D
mov E, M
inx H
mov D, M
xchg ; HL = &Ornaments[curOrnm]
; --
smpPos:
lxi D, 0 ; DE - текущая позиция в сэмпле
dad D ; HL = &Ornaments[curOrnm].smpPos
; ld a,1(ix)
push H
lhld IX
inx H
mov A, M ; A = нота
pop H
; --
add M ; A = нота+октава
shTone:
adi 0 ; A = нота+эффект+смещение тона
; преобразуем ноту в частоту
add A
mov E, A
mvi D, 0
lxi H, frqTbl
dad D
mov E, M
inx H
mov D, M
xchg ; HL = freqTable[нота+эффект+смещение тона]
pop D ; DE = смещение тона (12 бит)
; bit 4,d
mov A, D
ani 10h ; знак смещения?
jz subTon
mov A, D
ani 0Fh ; убираем бит знака смещения тона
mov D, A
pop PSW ; A = громкость
dad D ; HL = freq + смещение тона
ret
subTon: ; вычитаем тон из частоты
; and a ; сброс CF
; sbc hl,de
mov A, L
sub E
mov L, A
mov A, H
sbb D
mov H, A ; HL = freq - смещение тона
pop PSW ; A = громкость
ret
; загружаем регистры AY
ldRegs:
lxi H, rg0x0D
xra A
ora M
mvi A, 0Dh
jnz l7ff1
sui 3
dcx H
dcx H
dcx H
l7ff1:
push PSW
out 15h ; номер регистра AY
mov A, M
out 14h ; данные AY
dcx H
pop PSW
dcr A
jp l7ff1
ret
frqTbl: ; таблица частот для нот
dw 0ef8h, 0e10h, 0d60h, 0c80h, 0bd8h, 0b28h, 0a88h, 09f0h
dw 0960h, 08e0h, 0858h, 07e0h, 077ch, 0708h, 06b0h, 0640h
dw 05ech, 0594h, 0544h, 04f8h, 04b0h, 0470h, 042ch, 03f0h
dw 03beh, 0384h, 0358h, 0320h, 02f6h, 02cah, 02a2h, 027ch
dw 0258h, 0238h, 0216h, 01f8h, 01dfh, 01c2h, 01ach, 0190h
dw 017bh, 0165h, 0151h, 013eh, 012ch, 011ch, 010bh, 00fch
dw 00efh, 00e1h, 00d6h, 00c8h, 00bdh, 00b2h, 00a8h, 009fh
dw 0096h, 008eh, 0085h, 007eh, 0077h, 0070h, 006bh, 0064h
dw 005eh, 0059h, 0054h, 004fh, 004bh, 0047h, 0042h, 003fh
dw 003bh, 0038h, 0035h, 0032h, 002fh, 002ch, 002ah, 0027h
dw 0025h, 0023h, 0021h, 001fh, 001dh, 001ch, 001ah, 0019h
dw 0017h, 0016h, 0015h, 0013h, 0012h, 0011h, 0010h, 000fh
eqTick: ds 2 ; отсчет времени до обновления эквалайзера
eqStep: ds 2 ; 20 fps для прерывания в 1/50 секунды
eqUpd: ds 1 ; флаг разрешения обновления эквалайзера
eqNew: ds 1
plFlag: ds 1 ; bit 0: stop play
; bit 1: loop flag
IX: ds 2
ordAdr: ds 2 ; адрес таблицы позиций (Order Lists)
ornAdr: ds 2 ; адрес таблицы Ornaments
patAdr: ds 2 ; адрес таблицы паттернов (Patterns)
smpAdr: ds 2 ; адрес таблицы сэмплов (инструментов) Samples
patNum: ds 1 ; номер текущего паттерна
nDelay: ds 1 ; число прерываний (задержка) между нотами
delCnt: ds 1 ; осталось прерываний между нотами
lenOrd: ds 1 ; количество элементов в списке позиций (orders)
patA: ds 2 ; адрес паттерна для канала A
patB: ds 2 ; адрес паттерна для канала B
patC: ds 2 ; адрес паттерна для канала C
nulPat: ds 1 ; = 0xff ( pattern-заглушка нулевой длины )
; канал A
ul7c46: ds 1 ; -2: 1-огибающая, 2-откл. генератора огибающей,0-нет огибающей
ds 1 ; -1: задержка между нотами
IXchA: ds 1 ; 0: текущая позиция в сэмпле
ds 1 ; +1: нота
ds 1 ; +2: счетчик задержки между нотами
pSampA: ds 2 ; +3: адрес инструмента (Sample)
nOrnmA: ds 2 ; +5: адрес орнамента (Ornaments, Effects)
smCntA: ds 1 ; +7: осталось позиций в сэмпле канала
; канал B
ds 1
ds 1
IXchB: ds 1
ds 1
ds 1
pSampB: ds 2
nOrnmB: ds 2
smCntB: ds 1
; канал C
ds 1
ds 1
IXchC: ds 1
ds 1
ds 1
pSampC: ds 2
nOrnmC: ds 2
smCntC: ds 1
curOrd: ds 1 ; позиция в Order List [1..lenOrd]
; регистры AY
rg0x00: ds 2 ; делитель входной частоты канала A
rg0x02: ds 2 ; делитель входной частоты канала B
rg0x04: ds 2 ; делитель входной частоты канала C
rg0x06: ds 1 ; 5-разрядное значение периода для псевдослучайного генератора шума
rg0x07: ds 1 ; микшер, содержащий по два бита для каждого канала,
; в зависимости от которых к каналам подмешивается
; сигнал генератора шума, либо генератор огибающей.
rgVolA: ds 1 ; громкость канала A + бит разрешения использования огибающей
rgVolB: ds 1 ; громкость канала B + бит разрешения использования огибающей
rgVolC: ds 1 ; громкость канала C + бит разрешения использования огибающей
rg0x0B: ds 2 ; частота
rg0x0D: ds 1 ; и форма огибающей
I
;
; DOCZak01.STC by DOC'NEONSOF
; https://zxart.ee/spa/autores/d/doc/doczak01/
;
songe1:
.db $05,$f9,$03,$0e,$04,$f5,$04,$44,$4f,$43,$27,$4e,$45,$4f,$4e,$53
.db $4f,$46,$54,$20,$20,$20,$20,$20,$20,$7b,$08,$01,$0f,$20,$00,$0f
.db $a0,$00,$0e,$a0,$00,$0e,$a0,$00,$0d,$a0,$00,$0c,$a0,$00,$0b,$a0
.db $00,$0a,$80,$00,$09,$80,$00,$08,$80,$00,$07,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$00,$02,$0f
.db $22,$80,$1f,$23,$00,$0e,$24,$00,$0d,$25,$00,$0c,$06,$00,$0b,$07
.db $00,$0a,$09,$00,$09,$00,$00,$08,$80,$00,$07,$80,$00,$06,$80,$00
.db $05,$80,$00,$04,$80,$00,$02,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $00,$03,$0d,$40,$00,$0a,$40,$00,$08,$40,$00,$05,$40,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$05,$0f,$24,$00,$0e,$25,$2f,$0d,$25,$5e,$0c,$26
.db $8d,$0b,$27,$bc,$0a,$27,$eb,$19,$67,$1a,$18,$67,$49,$16,$67,$78
.db $15,$67,$a7,$14,$67,$d6,$23,$67,$05,$22,$67,$34,$21,$60,$63,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$07,$2f,$a0,$00,$3e,$a0,$80,$4d,$a0
.db $00,$6b,$a0,$00,$78,$a0,$80,$86,$a0,$80,$04,$80,$00,$02,$80,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$0f,$a0,$01,$0f,$a0
.db $02,$0e,$a0,$03,$0d,$a0,$03,$0e,$a0,$02,$0e,$a0,$02,$0e,$a0,$01
.db $0e,$a0,$01,$0e,$a0,$01,$0e,$a0,$00,$0e,$a0,$00,$0e,$a0,$00,$0e
.db $a0,$00,$0e,$a0,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$a0
.db $01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00
.db $0e,$80,$01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e
.db $a0,$01,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$10,$0e,$0b,$0c,$80
.db $00,$0c,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00
.db $0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b
.db $80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80,$00,$0b,$80
.db $00,$0b,$a0,$01,$0b,$a0,$02,$0b,$a0,$01,$0b,$80,$00,$0b,$80,$01
.db $0b,$80,$02,$0b,$80,$01,$0b,$80,$00,$0b,$a0,$01,$0b,$a0,$02,$0b
.db $a0,$01,$0b,$80,$00,$0b,$80,$01,$0b,$80,$02,$0b,$80,$01,$0e,$11
.db $0c,$0f,$3b,$80,$1f,$a0,$00,$0e,$a0,$00,$0e,$80,$00,$0d,$80,$00
.db $0c,$80,$00,$0b,$80,$00,$0a,$80,$00,$09,$80,$00,$08,$80,$00,$07
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00
.db $00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00
.db $80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80,$00,$00,$80
.db $00,$00,$00,$0e,$0f,$a0,$00,$0f,$a0,$00,$0f,$a0,$00,$0e,$80,$00
.db $0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e
.db $80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80,$00,$0e,$80
.db $00,$0e,$80,$00,$0e,$a0,$02,$0e,$a0,$04,$0e,$a0,$02,$0e,$80,$00
.db $0e,$80,$02,$0e,$80,$04,$0e,$80,$02,$0e,$80,$00,$0e,$a0,$02,$0e
.db $a0,$04,$0e,$a0,$02,$0e,$80,$00,$0e,$80,$02,$0e,$80,$04,$0e,$80
.db $02,$0e,$80,$00,$0c,$11,$0f,$0e,$a0,$00,$0e,$a0,$00,$0d,$a0,$00
.db $0d,$80,$00,$0c,$80,$00,$0c,$80,$00,$0b,$80,$00,$0b,$80,$00,$0a
.db $80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80
.db $00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00
.db $0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a
.db $80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80,$00,$0a,$80
.db $00,$0a,$80,$00,$0a,$80,$00,$00,$00,$09,$01,$fe,$02,$fe,$03,$fe
.db $04,$fe,$01,$fe,$02,$fe,$05,$fe,$07,$fe,$06,$fe,$08,$fe,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
.db $00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c
.db $00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c,$00,$07,$04,$0c
.db $09,$0c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$0a,$00,$00,$ff,$fe,$fd,$fc,$fb,$fa,$f9,$f8,$f7,$f6,$f5,$f4
.db $f3,$f2,$f1,$f0,$ef,$ee,$ed,$ec,$eb,$ea,$e9,$e8,$e7,$e6,$e5,$e4
.db $e3,$e2,$0c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$0d,$fc,$fd,$fe,$ff,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$0e,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03
.db $0c,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03,$0c,$00,$07,$03
.db $0c,$00,$07,$03,$0c,$01,$2e,$05,$3f,$05,$b8,$05,$02,$fb,$05,$3f
.db $05,$b8,$05,$03,$11,$06,$3f,$05,$b8,$05,$04,$40,$06,$3f,$05,$b8
.db $05,$05,$68,$06,$85,$06,$d7,$06,$06,$df,$06,$3f,$05,$b8,$05,$07
.db $2c,$07,$4f,$07,$d7,$06,$08,$bb,$07,$06,$08,$b8,$05,$ff,$ac,$68
.db $7c,$2c,$a4,$2f,$b0,$31,$ae,$2a,$a1,$2f,$2e,$b0,$70,$2c,$ff,$a2
.db $6c,$79,$14,$a1,$61,$70,$20,$20,$a2,$62,$79,$14,$61,$70,$20,$6c
.db $79,$14,$61,$70,$20,$62,$79,$14,$a1,$61,$70,$10,$0f,$a2,$6c,$79
.db $0d,$a1,$61,$70,$19,$19,$a2,$62,$79,$0d,$61,$70,$19,$6c,$79,$0d
.db $61,$70,$19,$62,$79,$0d,$a1,$61,$70,$16,$14,$a2,$6c,$79,$12,$a1
.db $61,$70,$1e,$1e,$a2,$62,$79,$12,$61,$70,$1e,$6c,$79,$12,$61,$70
.db $1e,$62,$79,$12,$a1,$61,$70,$17,$16,$a2,$6c,$79,$14,$a1,$61,$70
.db $20,$20,$a2,$62,$79,$14,$61,$70,$20,$6c,$79,$14,$61,$70,$20,$62
.db $79,$14,$a1,$61,$70,$17,$16,$ff,$a1,$6b,$2c,$2f,$33,$38,$3b,$3f
.db $38,$3b,$2c,$2f,$33,$38,$3b,$3f,$38,$3b,$25,$28,$2c,$31,$34,$38
.db $31,$34,$25,$28,$2c,$31,$34,$38,$31,$34,$2a,$2e,$31,$36,$3a,$31
.db $36,$3a,$2a,$2e,$31,$36,$3a,$31,$36,$3a,$2c,$2f,$33,$38,$3b,$3f
.db $38,$3b,$2c,$2f,$33,$38,$3b,$3f,$38,$3b,$ff,$ac,$68,$7c,$2c,$a4
.db $2f,$b0,$31,$ae,$36,$a1,$3b,$3a,$a8,$7d,$38,$a7,$7a,$38,$a1,$80
.db $ff,$a2,$6e,$7d,$2c,$a4,$7c,$2f,$a1,$31,$2f,$a4,$33,$a1,$33,$6f
.db $70,$2f,$a4,$6e,$7c,$33,$34,$a1,$34,$6f,$33,$a8,$6e,$31,$a1,$2a
.db $6f,$28,$a4,$6e,$2a,$a1,$2e,$2f,$a2,$31,$34,$33,$31,$b0,$2c,$ff
.db $a2,$6e,$7c,$2c,$a4,$2f,$a1,$31,$2f,$a4,$33,$a1,$33,$6f,$2f,$a4
.db $6e,$33,$a2,$34,$38,$36,$a8,$34,$a2,$36,$a4,$38,$a1,$36,$38,$a2
.db $36,$34,$33,$31,$b0,$7d,$38,$ff,$a4,$68,$7c,$2c,$a2,$2c,$a6,$2f
.db $a4,$2c,$a2,$31,$ac,$34,$a1,$33,$31,$a2,$2a,$2e,$2f,$2e,$31,$34
.db $33,$31,$b0,$2c,$ff,$a2,$63,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25
.db $a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2
.db $25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25
.db $a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1
.db $25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25,$25,$a2,$25,$a1,$25
.db $25,$a2,$25,$a1,$25,$25,$ff,$b0,$6b,$7c,$14,$0d,$12,$14,$ff,$a2
.db $6e,$7e,$38,$a1,$80,$a2,$38,$a1,$80,$38,$80,$38,$80,$38,$80,$38
.db $80,$38,$80,$a2,$31,$a1,$80,$a2,$31,$a1,$80,$31,$80,$31,$80,$31
.db $80,$31,$80,$31,$80,$a2,$71,$36,$a1,$80,$a2,$36,$a1,$80,$36,$80
.db $36,$80,$36,$80,$36,$80,$36,$80,$a2,$7e,$38,$a1,$80,$a2,$38,$a1
.db $80,$38,$80,$38,$80,$38,$80,$38,$80,$38,$80,$ff,$a4,$68,$7c,$2c
.db $a2,$2c,$a6,$2f,$a4,$2c,$a2,$31,$ac,$34,$a1,$33,$31,$a2,$2a,$2e
.db $2f,$2e,$31,$34,$33,$31,$a8,$2c,$a3,$7a,$38,$36,$a2,$33,$ff,$a2
.db $67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25
.db $a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63
.db $25,$25,$a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25
.db $a2,$65,$25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65
.db $25,$a1,$63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1
.db $63,$25,$25,$a2,$67,$25,$a1,$63,$25,$25,$a2,$65,$25,$a1,$63,$25
.db $25,$65,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$ff,$a2,$6e,$7e,$38,$a1
.db $80,$a2,$38,$a1,$80,$38,$80,$38,$80,$38,$80,$38,$80,$38,$80,$a2
.db $31,$a1,$80,$a2,$31,$a1,$80,$31,$80,$31,$80,$31,$80,$31,$80,$31
.db $80,$a2,$71,$36,$a1,$80,$a2,$36,$a1,$80,$36,$80,$36,$80,$36,$80
.db $36,$80,$36,$80,$a2,$7e,$38,$a1,$80,$a2,$38,$a1,$80,$38,$80,$a3
.db $7a,$38,$36,$a2,$33,$ff,$a2,$6c,$79,$14,$a1,$61,$70,$20,$20,$a2
.db $62,$79,$14,$61,$70,$20,$6c,$79,$14,$61,$70,$20,$62,$79,$14,$a1
.db $61,$70,$10,$0f,$a2,$6c,$79,$0d,$a1,$61,$70,$19,$19,$a2,$62,$79
.db $0d,$61,$70,$19,$6c,$79,$0d,$61,$70,$19,$62,$79,$0d,$a1,$61,$70
.db $16,$14,$a2,$6c,$79,$12,$a1,$61,$70,$1e,$1e,$a2,$62,$79,$12,$61
.db $70,$1e,$6c,$79,$12,$61,$70,$1e,$62,$79,$12,$a1,$61,$70,$17,$16
.db $a2,$6c,$79,$14,$a1,$61,$70,$20,$20,$a2,$62,$79,$14,$61,$70,$20
.db $a1,$65,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c,$ff
.end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment