UrForth: redesigned compilation words to look nicer, and being easier to use
[urasm.git] / samples / pt3player / pt3time.zas
blobf55a5a39ce5c214e0bed005a727f433719bc8faa
1 ;PT3 Duration Calculator
2 ;Author Sergey Bulba <vorobey@mail.khstu.ru>
3 ;Support page http://bulba.at.kz/
4 ;(c)2005 S.V.Bulba
6 ;Based on Ay_Emul's GetTime function and
7 ;on VT II PT3 player for ZX Spectrum
9 ;Calculation delay is about from 0.1 to 0.5 second
10 ;(depending of given PT3 module)
12 ;Precision of calculation is 1 interrupt
14 ;Limitations
15 ;-----------
16 ;No any checkings of module structure, so, can
17 ;deadlock on damaged modules or on random data.
18 ;If you want, you can add deadlock and crash
19 ;checking from Ay_Emul (will decrease speed).
21   MODULE PT3Time
23 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
24 ;; IN:
25 ;;   HL: PT3 MODULE ADDRESS
26 ;; OUT:
27 ;;   HL: # of interrupts
28 ;;   (PT3TIME): # of interrupts
29 GetTimeHL:
30   DI ;SP is used, any interrupts are not allowed
32   LD (PT3TMdAd),HL
33   PUSH HL
34   PUSH HL
35   LD DE,100
36   ADD HL,DE
37   LD A,(HL)
38   LD (PT3T_Dl),A
39   LD E,3
40   ADD HL,DE
41   LD C,(HL)
42   INC HL
43   LD B,(HL)
44   LD H,D
45   LD L,D
46   LD (PT3TIME),HL
47   POP HL
48   ADD HL,BC
49   LD (PT3TPtPtr),HL
50   POP HL
51   LD E,201
52   ADD HL,DE
53   PUSH HL
55 PT3TLP POP HL
56   LD A,(HL)
57   INC HL
58   INC A
59   JP Z,PT3T_EXIT
60   PUSH HL
61   DEC A
62   ADD A,A
63   LD E,A
64   LD D,0
65   RL D
66 PT3TPtPtr EQU $+1
67   LD HL,#2121
68   ADD HL,DE
69 PT3TMdAd EQU $+1
70   LD DE,#1111
71   LD (PT3TSP_+1),SP
72   LD SP,HL
73   POP HL
74   ADD HL,DE
75   LD (PT3TAdInPtA),HL
76   POP HL
77   ADD HL,DE
78   LD (PT3TAdInPtB),HL
79   POP HL
80   ADD HL,DE
81   LD (PT3TAdInPtC),HL
82 PT3TSP_ LD SP,#3131
83   LD A,1
84   LD (PT3TSKACNT),A
85   LD (PT3TSKBCNT),A
86   LD (PT3TSKCCNT),A
89 PT3TLP2 LD HL,PT3TSKACNT
90   DEC (HL)
91   JR NZ,PT3TCHB
92 PT3TAdInPtA EQU $+1
93   LD BC,#0101
94   LD A,(BC)
95   AND A
96   JR Z,PT3TLP
97 PT3TSKPA EQU $+2
98   LD IXL,#2E
99   CALL PT3TPD
100   LD A,IXL
101   LD (PT3TSKPA),A
102   LD (PT3TSKACNT),A
103   LD (PT3TAdInPtA),BC
105 PT3TCHB LD HL,PT3TSKBCNT
106   DEC (HL)
107   JR NZ,PT3TCHC
108 PT3TSKPB EQU $+2
109   LD IXL,#2E
110 PT3TAdInPtB EQU $+1
111   LD BC,#0101
112   CALL PT3TPD
113   LD A,IXL
114   LD (PT3TSKPB),A
115   LD (PT3TSKBCNT),A
116   LD (PT3TAdInPtB),BC
118 PT3TCHC LD HL,PT3TSKCCNT
119   DEC (HL)
120   JR NZ,EXTMP
121 PT3TSKPC EQU $+2
122   LD IXL,#2E
123 PT3TAdInPtC EQU $+1
124   LD BC,#0101
125   CALL PT3TPD
126   LD A,IXL
127   LD (PT3TSKPC),A
128   LD (PT3TSKCCNT),A
129   LD (PT3TAdInPtC),BC
131 EXTMP
132 PT3T_Dl EQU $+1
133   LD DE,#11
134 PT3TIME EQU $+1
135   LD HL,#2121
136   ADD HL,DE
137   LD (PT3TIME),HL
138   JP PT3TLP2
140 PT3TSETSK LD A,(BC)
141   LD IXL,A
142   JR PT3TPD2
143 PT3TPD4 INC BC
144 PT3TPD3 INC BC
145 PT3TPD2 INC BC
146 PT3TPD1 LD A,(BC)
147   INC BC
148   ADD A,D
149   JR C,PT3TPD2
150   ADD A,E
151   RET Z
152   JR C,PT3TPD1
153   ADD A,D
154   RET Z
155   JR C,PT3TPD1
156   ADD A,14
157   JR C,PT3TPD3
158   INC A
159   JR Z,PT3TSETSK
160   INC A
161   JR Z,PT3TPD1
162   ADD A,96
163   RET C
164   ADD A,48
165   JR C,PT3TPD1
166   ADD A,15
167   JR C,PT3TPD4
168   INC A
169   JR Z,PT3TPD2
170   ADD A,A
171   LD E,A
172   LD HL,0+(PT3TSPCCOMS+#FF20-#1000)&#FFFF
173   ADD HL,DE
174   LD E,(HL)
175   INC HL
176   LD D,(HL)
177   PUSH DE
178 PT3TPD  LD DE,#1020
179   JR PT3TPD1
182 PT3TC_DELAY LD A,(BC)
183   INC BC
184   LD (PT3T_Dl),A
185   RET
187 PT3TC_PORTM INC BC
188   INC BC
189 PT3TC_GLISS
190 PT3TC_ENGLS INC BC
191 PT3TC_VIBRT INC BC
192 PT3TC_SMPOS
193 PT3TC_ORPOS INC BC
194 PT3TC_NOP RET
196 ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
197 PT3TSPCCOMS DW PT3TC_NOP
198   DW PT3TC_GLISS
199   DW PT3TC_PORTM
200   DW PT3TC_SMPOS
201   DW PT3TC_ORPOS
202   DW PT3TC_VIBRT
203   DW PT3TC_NOP
204   DW PT3TC_NOP
205   DW PT3TC_ENGLS
206   DW PT3TC_DELAY
207   DW PT3TC_NOP
208   DW PT3TC_NOP
209   DW PT3TC_NOP
210   DW PT3TC_NOP
211   DW PT3TC_NOP
212   DW PT3TC_NOP
214 PT3T_EXIT
215   LD   HL,(PT3TIME)
216   EI ;REMOVE TO DISABLE INTERRUPTS
217   RET
219 PT3TSKACNT  EQU $
220 PT3TSKBCNT  EQU $+1
221 PT3TSKCCNT  EQU $+2
223   ENDMODULE