-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathparachute.lst
3073 lines (3073 loc) · 117 KB
/
parachute.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# file opened: /home/carles/Projectes/zx/parachute/parachute.asm
1 0000 if 1
2 0000
3 0000 DEVICE ZXSPECTRUM48
4 0000 SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
5 0000 else
6 0000 ~ print pink,"Compiling RPS DUEL\n"
7 0000 endif
8 0000
9 0000 stack_top: equ 0xf9ff
10 0000
11 0000 include "libs/screen_macros.asm"
# file opened: /home/carles/Projectes/zx/parachute/libs/screen_macros.asm
1+ 0000
2+ 0000
3+ 0000 screen_width_pixels equ 256 ; 0x100
4+ 0000 screen_height_pixels equ 192 ; 0xc0
5+ 0000 screen_width_chars equ 32 ; 0x20
6+ 0000 screen_height_chars equ 24 ; 0x18
7+ 0000
8+ 0000 screen_start equ 0x4000
9+ 0000
10+ 0000 screen_size equ (screen_width_chars * screen_height_pixels)
11+ 0000 screen3_size equ (screen_width_chars * screen_height_pixels / 3) ; 0x800
12+ 0000
13+ 0000 screen_start_2_3 equ (screen_start + screen3_size)
14+ 0000 screen_start_3_3 equ (screen_start + screen3_size * 2)
15+ 0000
16+ 0000 linedif_in3 equ 256 ; distance from one pointer in screen to inferior next in 1/3 block
17+ 0000
18+ 0000
19+ 0000 attributes_start equ 0x5800 ; 22528
20+ 0000 attr_start equ attributes_start
21+ 0000 attributes_length equ (screen_width_chars * screen_height_chars)
22+ 0000 attributes_size equ attributes_length
23+ 0000
24+ 0000 full_screen_size equ (screen_size + attributes_length)
25+ 0000
26+ 0000 BLACK equ %000000
27+ 0000 BLUE equ %000001
28+ 0000 RED equ %000010
29+ 0000 MAGENTA equ %000011
30+ 0000 GREEN equ %000100
31+ 0000 CYAN equ %000101
32+ 0000 YELLOW equ %000110
33+ 0000 WHITE equ %000111
34+ 0000
35+ 0000 PAPER_BLACK equ (BLACK << 3)
36+ 0000 PAPER_BLUE equ (BLUE << 3)
37+ 0000 PAPER_RED equ (RED << 3)
38+ 0000 PAPER_MAGENTA equ (MAGENTA << 3)
39+ 0000 PAPER_GREEN equ (GREEN << 3)
40+ 0000 PAPER_CYAN equ (CYAN << 3)
41+ 0000 PAPER_YELLOW equ (YELLOW << 3)
42+ 0000 PAPER_WHITE equ (WHITE << 3)
43+ 0000
44+ 0000 BRIGHT equ %01000000
45+ 0000 NO_BRIGHT equ %00000000
46+ 0000
47+ 0000 FLASH equ %10000000
48+ 0000 NO_FLASH equ %00000000
49+ 0000
50+ 0000 ;Atributs Bit 7 6 543 210
51+ 0000 ; FLASH BRIGHT PAPER INK
52+ 0000
53+ 0000
54+ 0000
55+ 0000
56+ 0000 ; ULA Bit 7 6 5 4 3 2 1 0
57+ 0000 ; out +-------------------------------+
58+ 0000 ; 0xFE | | | | E | M | Border |
59+ 0000 ; +-------------------------------+
60+ 0000
61+ 0000
62+ 0000
63+ 0000 ; ref http://www.overtakenbyevents.com/lets-talk-about-the-zx-specrum-screen-layout/
64+ 0000
65+ 0000
66+ 0000
67+ 0000
68+ 0000
69+ 0000
70+ 0000
71+ 0000
72+ 0000
# file closed: /home/carles/Projectes/zx/parachute/libs/screen_macros.asm
12 0000 include "libs/key_macros.asm"
# file opened: /home/carles/Projectes/zx/parachute/libs/key_macros.asm
1+ 0000
2+ 0000 KEYSEG_MNB equ %01111111
3+ 0000 KEYSEG_LKJH equ %10111111
4+ 0000 KEYSEG_POIUY equ %11011111
5+ 0000 KEYSEG_09876 equ %11101111
6+ 0000 KEYSEG_12345 equ %11110111
7+ 0000 KEYSEG_QWERT equ %11111011
8+ 0000 KEYSEG_ASDFG equ %11111101
9+ 0000 KEYSEG_ZXCV equ %11111110
10+ 0000
11+ 0000 KEY_CAPS_SHIFT equ %00000001
12+ 0000 KEY_Z equ %00000010
13+ 0000 KEY_X equ %00000100
14+ 0000 KEY_C equ %00001000
15+ 0000 KEY_V equ %00010000
16+ 0000
17+ 0000 KEY_A equ %00000001
18+ 0000 KEY_S equ %00000010
19+ 0000 KEY_D equ %00000100
20+ 0000 KEY_F equ %00001000
21+ 0000 KEY_G equ %00010000
22+ 0000
23+ 0000 KEY_Q equ %00000001
24+ 0000 KEY_W equ %00000010
25+ 0000 KEY_E equ %00000100
26+ 0000 KEY_R equ %00001000
27+ 0000 KEY_T equ %00010000
28+ 0000
29+ 0000 KEY_1 equ %00000001
30+ 0000 KEY_2 equ %00000010
31+ 0000 KEY_3 equ %00000100
32+ 0000 KEY_4 equ %00001000
33+ 0000 KEY_5 equ %00010000
34+ 0000
35+ 0000 KEY_0 equ %00000001
36+ 0000 KEY_9 equ %00000010
37+ 0000 KEY_8 equ %00000100
38+ 0000 KEY_7 equ %00001000
39+ 0000 KEY_6 equ %00010000
40+ 0000
41+ 0000 KEY_P equ %00000001
42+ 0000 KEY_O equ %00000010
43+ 0000 KEY_I equ %00000100
44+ 0000 KEY_U equ %00001000
45+ 0000 KEY_Y equ %00010000
46+ 0000
47+ 0000 KEY_ENTER equ %00000001
48+ 0000 KEY_L equ %00000010
49+ 0000 KEY_K equ %00000100
50+ 0000 KEY_J equ %00001000
51+ 0000 KEY_H equ %00010000
52+ 0000
53+ 0000 KEY_SPACE equ %00000001
54+ 0000 KEY_SYMBOL_SHIFT equ %00000010
55+ 0000 KEY_M equ %00000100
56+ 0000 KEY_N equ %00001000
57+ 0000 KEY_B equ %00010000
58+ 0000
# file closed: /home/carles/Projectes/zx/parachute/libs/key_macros.asm
13 0000
14 0000 org 0x4000
15 4000 fons:
16 4000 incbin "boot.scr"
17 5B00 fi_fons:
18 5B00 org 0x8000
19 8000 inici:
20 8000 main:
21 8000 31 FF FF ld sp, 0xFFFF
22 8003 11 4B 84 ld de, rpsinterrupt
23 8006 CD 48 91 call setInterruptTo
24 8009
25 8009 AF xor a ; posem el marge negre
26 800A D3 FE out (0xfe), a ;
27 800C 32 48 5C ld ($5C48), a
28 800F
29 800F ;call waitkey
30 800F ;call waitnokey
31 800F CD F4 80 call swap_logo
32 8012
33 8012 21 00 40 ld hl, screen_start ; clear vars
34 8015 11 01 40 ld de, screen_start+1
35 8018 01 1F 00 ld bc, 31
36 801B AF xor a
37 801C 77 ld (hl), a
38 801D ED B0 ldir
39 801F
40 801F CD 1C 84 call showallandhideforfun
41 8022 CD D0 84 call hideAll
42 8025 CD 94 84 call update_screen
43 8028 CD 28 90 call randomize
44 802B
45 802B 3E 08 ld a, 8
46 802D 32 88 84 ld (step_speed), a
47 8030 AF xor a
48 8031 32 76 84 ld (playing), a
49 8034
50 8034 CD 07 8F call update_clock
51 8037 CD 55 82 call start_machine
52 803A
53 803A main_loop:
54 803A
55 803A
56 803A 21 6E 84 ld hl, counter
57 803D CD 8D 85 call inc32counter
58 8040
59 8040 3A 86 84 ld a, (step)
60 8043 B7 or a
61 8044 28 1C jr z, main_no_step
62 8046 AF xor a
63 8047 32 86 84 ld (step), a
64 804A ; every step
65 804A
66 804A 3A 76 84 ld a,(playing)
67 804D B7 or a
68 804E 28 0F jr z, step_noplay
69 8050 CD 75 81 call check_parachute_saved
70 8053 CD DE 83 call heli_blades
71 8056 CD B3 83 call shark_move
72 8059 CD AB 81 call move_parachutes
73 805C CD 27 81 call add_parachute_if_possible
74 805F
75 805F step_noplay:
76 805F CD 79 8F call clock_keys
77 8062
78 8062 main_no_step:
79 8062
80 8062 3A 89 84 ld a, (second_update)
81 8065 B7 or a
82 8066 28 10 jr z, main_no_second
83 8068 AF xor a
84 8069 32 89 84 ld (second_update), a
85 806C ; every second
86 806C 3A 76 84 ld a,(playing)
87 806F B7 or a
88 8070 28 03 jr z, second_noplay
89 8072 CD 98 83 call start_shark_if_need
90 8075 second_noplay:
91 8075 CD 07 8F call update_clock
92 8078
93 8078 main_no_second:
94 8078
95 8078 3A 76 84 ld a,(playing)
96 807B B7 or a
97 807C 28 05 jr z, main_noplay
98 807E
99 807E CD 2F 85 call parachute_keys
100 8081 18 59 jr main_cont
101 8083
102 8083 main_noplay:
103 8083 CD E2 8E call update_clock_dots
104 8086
105 8086 3A 6F 84 ld a, (counter+1)
106 8089 E6 01 and 1
107 808B 20 10 jr nz, anim_buttons_2
108 808D
109 808D 0E 46 ld c, PAPER_BLACK | YELLOW | BRIGHT
110 808F 3E 38 ld a, low i_button_a
111 8091 CD 05 85 call IImageAttributes
112 8094 0E 40 ld c, PAPER_BLACK | BLACK | BRIGHT
113 8096 3E 39 ld a, low i_button_b
114 8098 CD 05 85 call IImageAttributes
115 809B 18 0E jr fi_anim_buttons
116 809D
117 809D anim_buttons_2:
118 809D 0E 40 ld c, PAPER_BLACK | BLACK | BRIGHT
119 809F 3E 38 ld a, low i_button_a
120 80A1 CD 05 85 call IImageAttributes
121 80A4 0E 46 ld c, PAPER_BLACK | YELLOW | BRIGHT
122 80A6 3E 39 ld a, low i_button_b
123 80A8 CD 05 85 call IImageAttributes
124 80AB
125 80AB fi_anim_buttons:
126 80AB
127 80AB 06 FD ld b, KEYSEG_ASDFG
128 80AD 16 01 ld d, KEY_A
129 80AF CD 76 85 call checkkey
130 80B2 28 0F jr z, game_keys_cont
131 80B4 AF xor a
132 80B5 32 7F 84 ld (game), a
133 80B8 CD 94 82 call start_game
134 80BB 3E 01 ld a, 1
135 80BD 32 0B 86 ld (i_gamea), a
136 80C0 CD DE 8F call move_parachute_sound
137 80C3
138 80C3 game_keys_cont:
139 80C3
140 80C3 06 7F ld b, KEYSEG_MNB
141 80C5 16 10 ld d, KEY_B
142 80C7 CD 76 85 call checkkey
143 80CA 28 10 jr z, game_keys_cont2
144 80CC 3E 01 ld a, 1
145 80CE 32 7F 84 ld (game), a
146 80D1 CD 94 82 call start_game
147 80D4 3E 01 ld a, 1
148 80D6 32 0C 86 ld (i_gameb), a
149 80D9 CD DE 8F call move_parachute_sound
150 80DC
151 80DC game_keys_cont2:
152 80DC
153 80DC
154 80DC
155 80DC main_cont:
156 80DC CD 94 84 call update_screen
157 80DF
158 80DF 06 FE ld b, KEYSEG_ZXCV
159 80E1 16 08 ld d, KEY_C
160 80E3 CD 76 85 call checkkey
161 80E6 C2 00 80 jp nz, main
162 80E9
163 80E9 06 FE ld b, KEYSEG_ZXCV
164 80EB 16 04 ld d, KEY_X
165 80ED CD 76 85 call checkkey
166 80F0 CA 3A 80 jp z, main_loop
167 80F3
168 80F3 end_main_return:
169 80F3 C7 rst 0 ; reset on exit
170 80F4
171 80F4
172 80F4
173 80F4
174 80F4 swap_logo:
175 80F4 21 00 58 ld hl, attributes_start
176 80F7 11 C6 8A ld de, logo
177 80FA 01 00 03 ld bc, attributes_size
178 80FD
179 80FD EB ex hl, de
180 80FE ED B0 ldir
181 8100 //call swap_memory
182 8100
183 8100 C9 ret
184 8101
185 8101 ; hl starting pos, b len
186 8101 ; move bytes
187 8101 ; modifies de, hl, a, b
188 8101 scroll_bytes:
189 8101 54 ld d,h
190 8102 5D ld e,l
191 8103 scroll_bytes_loop:
192 8103 1B dec de
193 8104 1A ld a,(de)
194 8105 77 ld (hl), a
195 8106 2B dec hl
196 8107 10 FA djnz scroll_bytes_loop
197 8109 36 00 ld (hl), 0
198 810B C9 ret
199 810C
200 810C
201 810C
202 810C ; column in a
203 810C add_parachute:
204 810C 21 17 86 ld hl, i_parachute_1_1
205 810F FE 01 cp 1
206 8111 20 03 jr nz, $+5
207 8113 21 1E 86 ld hl, i_parachute_2_1
208 8116 FE 02 cp 2
209 8118 20 03 jr nz, $+5
210 811A 21 24 86 ld hl, i_parachute_3_1
211 811D
212 811D 36 01 ld (hl), 1
213 811F
214 811F CD DE 8F call move_parachute_sound
215 8122
216 8122 21 8D 84 ld hl, num_parachutes
217 8125 34 inc (hl)
218 8126
219 8126 C9 ret
220 8127
221 8127 ; a= current row
222 8127 add_parachute_if_possible:
223 8127 3A 8C 84 ld a, (max_parachutes)
224 812A 47 ld b, a
225 812B 3A 8D 84 ld a, (num_parachutes)
226 812E B8 cp b
227 812F D0 ret nc
228 8130
229 8130
230 8130 CD 14 90 call random
231 8133 FE C0 cp 0xc0
232 8135 D8 ret c
233 8136
234 8136 3A 8F 84 ld a, (parachute_step_index)
235 8139 E6 03 and %11
236 813B FE 03 cp %11
237 813D C8 ret z
238 813E
239 813E CD 0C 81 call add_parachute
240 8141
241 8141 C9 ret
242 8142
243 8142 parachute_saved:
244 8142 2A 7B 84 ld hl,(score)
245 8145 23 inc hl
246 8146 22 7B 84 ld (score),hl
247 8149
248 8149 ; limit score = 1000
249 8149 01 E8 03 ld bc, 0x3e8
250 814C ED 42 sbc hl, bc
251 814E 20 03 jr nz, parachute_saved_not1000
252 8150 22 7B 84 ld (score),hl
253 8153 parachute_saved_not1000:
254 8153
255 8153 ; The following routine divides hl by c and places the quotient in hl and the remainder in a
256 8153
257 8153
258 8153 2A 7B 84 ld hl,(score)
259 8156 7D ld a, l
260 8157 ;sub a, 4
261 8157 ;add a,18
262 8157 C6 0E add a, 14
263 8159 6F ld l, a
264 815A
265 815A 0E 12 ld c, 18
266 815C CD 91 90 call div_hl_c
267 815F
268 815F 23 inc hl
269 8160 7D ld a, l
270 8161 FE 06 cp 6
271 8163 38 02 jr c, parachute_saved_max6_cont
272 8165 3E 06 ld a, 6
273 8167 parachute_saved_max6_cont:
274 8167 32 8C 84 ld (max_parachutes), a
275 816A
276 816A CD 07 8F call update_clock
277 816D CD 94 84 call update_screen
278 8170
279 8170 21 8D 84 ld hl, num_parachutes
280 8173 35 dec (hl)
281 8174
282 8174 C9 ret
283 8175
284 8175 check_parachute_saved:
285 8175
286 8175 3A 14 86 ld a,( i_boat_left )
287 8178 B7 or a
288 8179 28 0E jr z, check_parachute_saved_middle
289 817B 3A 1D 86 ld a,( i_parachute_1_7 )
290 817E B7 or a
291 817F C8 ret z
292 8180 CD E8 8F call parachute_rescued_sound
293 8183 AF xor a
294 8184 32 1D 86 ld (i_parachute_1_7), a
295 8187 18 B9 jr parachute_saved
296 8189
297 8189 check_parachute_saved_middle:
298 8189 3A 15 86 ld a,( i_boat_middle)
299 818C B7 or a
300 818D 28 0E jr z, check_parachute_saved_right
301 818F 3A 23 86 ld a, (i_parachute_2_6)
302 8192 B7 or a
303 8193 C8 ret z
304 8194 CD E8 8F call parachute_rescued_sound
305 8197 AF xor a
306 8198 32 23 86 ld (i_parachute_2_6), a
307 819B 18 A5 jr parachute_saved
308 819D
309 819D check_parachute_saved_right:
310 819D 3A 28 86 ld a,( i_parachute_3_5 )
311 81A0 B7 or a
312 81A1 C8 ret z
313 81A2 CD E8 8F call parachute_rescued_sound
314 81A5 AF xor a
315 81A6 32 28 86 ld (i_parachute_3_5), a
316 81A9 18 97 jr parachute_saved
317 81AB
318 81AB
319 81AB move_parachutes:
320 81AB 3A 8F 84 ld a, (parachute_step_index)
321 81AE 3C inc a
322 81AF FE 03 cp %11
323 81B1 20 01 jr nz, moveparachutes_cont
324 81B3 AF xor a
325 81B4 moveparachutes_cont:
326 81B4 32 8F 84 ld (parachute_step_index), a
327 81B7 B7 or a
328 81B8 20 24 jr nz, move_parachutes_row2
329 81BA 21 17 86 ld hl, i_parachute_1_1
330 81BD 06 07 ld b, 7
331 81BF CD CA 85 call checksum8
332 81C2 C4 DE 8F call nz, move_parachute_sound
333 81C5
334 81C5 3A 1D 86 ld a, (i_parachute_1_7)
335 81C8 B7 or a
336 81C9 28 09 jr z, move_parachutes_row1_cont
337 81CB AF xor a
338 81CC 32 1D 86 ld (i_parachute_1_7), a
339 81CF 0E 2E ld c, low i_manwater_3 - 1
340 81D1 CD E3 82 call man_lost
341 81D4 move_parachutes_row1_cont:
342 81D4 21 1D 86 ld hl, i_parachute_1_7
343 81D7 06 06 ld b, 6
344 81D9 CD 01 81 call scroll_bytes
345 81DC
346 81DC 18 4E jr move_parachutes_end
347 81DE
348 81DE
349 81DE
350 81DE move_parachutes_row2:
351 81DE FE 01 cp 1
352 81E0 20 24 jr nz, move_parachutes_row3
353 81E2 21 1E 86 ld hl, i_parachute_2_1
354 81E5 06 06 ld b, 6
355 81E7 CD CA 85 call checksum8
356 81EA C4 DE 8F call nz, move_parachute_sound
357 81ED
358 81ED 3A 23 86 ld a, (i_parachute_2_6)
359 81F0 B7 or a
360 81F1 28 09 jr z, move_parachutes_row2_cont
361 81F3 AF xor a
362 81F4 32 23 86 ld (i_parachute_2_6), a
363 81F7 0E 2C ld c, low i_manwater_2 - 1
364 81F9 CD E3 82 call man_lost
365 81FC move_parachutes_row2_cont:
366 81FC 21 23 86 ld hl, i_parachute_2_6
367 81FF 06 05 ld b, 5
368 8201 CD 01 81 call scroll_bytes
369 8204 18 26 jr move_parachutes_end
370 8206
371 8206
372 8206
373 8206 move_parachutes_row3:
374 8206 FE 02 cp 2
375 8208 20 22 jr nz, move_parachutes_end
376 820A 21 24 86 ld hl, i_parachute_3_1
377 820D 06 05 ld b, 5
378 820F CD CA 85 call checksum8
379 8212 C4 DE 8F call nz, move_parachute_sound
380 8215
381 8215 3A 28 86 ld a, (i_parachute_3_5)
382 8218 B7 or a
383 8219 28 09 jr z, move_parachutes_row3_cont
384 821B AF xor a
385 821C 32 28 86 ld (i_parachute_3_5), a
386 821F 0E 2A ld c, low i_manwater_1 - 1
387 8221 CD E3 82 call man_lost
388 8224
389 8224 move_parachutes_row3_cont:
390 8224 21 28 86 ld hl, i_parachute_3_5
391 8227 06 04 ld b, 4
392 8229 CD 01 81 call scroll_bytes
393 822C
394 822C move_parachutes_end:
395 822C
396 822C C9 ret
397 822D
398 822D show_lives:
399 822D 3A 7D 84 ld a, (lives)
400 8230 B7 or a
401 8231 C8 ret z
402 8232
403 8232 3E 01 ld a, 1
404 8234 32 04 86 ld (i_miss), a
405 8237
406 8237 3A 7D 84 ld a,(lives)
407 823A 47 ld b,a
408 823B
409 823B show_lives_loop:
410 823B C5 push bc
411 823C 3E 08 ld a, low i_live_3+1 ; i_screen is align 256 so low byte of the pointer is also the index
412 823E 90 sub b
413 823F CD 14 85 call showImage
414 8242 C1 pop bc
415 8243 10 F6 djnz show_lives_loop
416 8245
417 8245
418 8245 C9 ret
419 8246
420 8246 start_live:
421 8246 AF xor a
422 8247 32 83 84 ld (shark_walk_pos), a
423 824A CD 2D 82 call show_lives
424 824D
425 824D AF xor a
426 824E 32 87 84 ld (step_counter), a
427 8251 32 86 84 ld (step), a
428 8254
429 8254 C9 ret
430 8255
431 8255 start_machine:
432 8255 CD D0 84 call hideAll
433 8258
434 8258 3E 01 ld a, 1
435 825A 32 08 86 ld (i_monkey), a
436 825D 32 01 86 ld (i_heli), a
437 8260 32 02 86 ld (i_heli_blade_front), a
438 8263 32 03 86 ld (i_heli_blade_back), a
439 8266 32 0F 86 ld (i_digit_1), a
440 8269 32 10 86 ld (i_digit_2), a
441 826C 32 11 86 ld (i_digit_separator), a
442 826F 32 12 86 ld (i_digit_3), a
443 8272 32 13 86 ld (i_digit_4), a
444 8275 32 15 86 ld (i_boat_middle), a
445 8278 32 7E 84 ld (boatpos), a
446 827B
447 827B AF xor a
448 827C 32 0D 86 ld (i_am), a
449 827F
450 827F CD 87 82 call show_buttons
451 8282
452 8282
453 8282 C9 ret
454 8283
455 8283
456 8283 0E 40 hide_buttons: ld c, PAPER_BLACK | BLACK | BRIGHT
457 8285 18 02 jr show_buttons_i
458 8287 0E 46 show_buttons: ld c, PAPER_BLACK | YELLOW | BRIGHT
459 8289 3E 38 show_buttons_i: ld a, low i_button_a
460 828B CD 05 85 call IImageAttributes
461 828E 3E 39 ld a, low i_button_b
462 8290 CD 05 85 call IImageAttributes
463 8293 C9 ret
464 8294
465 8294 start_game:
466 8294 CD D0 84 call hideAll
467 8297 CD 83 82 call hide_buttons
468 829A
469 829A 3E 01 ld a, 1
470 829C 32 08 86 ld (i_monkey), a
471 829F 32 01 86 ld (i_heli), a
472 82A2 32 02 86 ld (i_heli_blade_front), a
473 82A5 32 03 86 ld (i_heli_blade_back), a
474 82A8 32 0F 86 ld (i_digit_1), a
475 82AB 32 10 86 ld (i_digit_2), a
476 82AE 32 12 86 ld (i_digit_3), a
477 82B1 32 15 86 ld (i_boat_middle), a
478 82B4 32 8C 84 ld (max_parachutes), a
479 82B7
480 82B7 32 76 84 ld (playing), a
481 82BA 32 7E 84 ld (boatpos), a
482 82BD
483 82BD 21 00 00 ld hl,0
484 82C0 22 7B 84 ld (score), hl
485 82C3 22 72 84 ld (frame_counter), hl
486 82C6 22 74 84 ld (frame_counter+2), hl
487 82C9 22 6E 84 ld (counter), hl
488 82CC 22 70 84 ld (counter+2), hl
489 82CF
490 82CF AF xor a
491 82D0 32 7D 84 ld (lives), a
492 82D3 32 0D 86 ld (i_am), a
493 82D6 32 0E 86 ld (i_pm), a
494 82D9 32 11 86 ld (i_digit_separator), a
495 82DC 32 8D 84 ld (num_parachutes), a
496 82DF
497 82DF CD 46 82 call start_live
498 82E2 C9 ret
499 82E3
500 82E3
501 82E3 man_lost:
502 82E3 CD 4C 83 call man_overboard
503 82E6
504 82E6 3A 7D 84 ld a,(lives)
505 82E9 3C inc a
506 82EA 32 7D 84 ld (lives), a
507 82ED
508 82ED FE 03 cp 3
509 82EF 20 08 jr nz, man_lost_not_last
510 82F1 AF xor a
511 82F2 32 76 84 ld (playing), a
512 82F5 CD 2D 82 call show_lives
513 82F8 C9 ret
514 82F9
515 82F9 man_lost_not_last:
516 82F9 21 8D 84 ld hl, num_parachutes
517 82FC 35 dec (hl)
518 82FD
519 82FD CD 46 82 call start_live
520 8300 C9 ret
521 8301
522 8301 ;modifies a
523 8301 hide_sharks:
524 8301 AF xor a
525 8302 32 2C 86 ld (i_shark_1), a
526 8305 32 2E 86 ld (i_shark_2), a
527 8308 32 30 86 ld (i_shark_3), a
528 830B 32 32 86 ld (i_shark_4), a
529 830E 32 34 86 ld (i_shark_5), a
530 8311 C9 ret
531 8312
532 8312
533 8312 ; delays 50s of seconds
534 8312 ; bc=delay time
535 8312 ; 50 = 1s, 3000 = 1m
536 8312 2A 72 84 delay50s: ld hl, (frame_counter)
537 8315 09 add hl, bc
538 8316 54 ld d, h
539 8317 5D ld e, l
540 8318
541 8318 delay50s_loop:
542 8318 ;halt ; at least 1 frame = 1/50s
543 8318 E5 push hl
544 8319 D5 push de
545 831A CD 2F 85 call parachute_keys
546 831D CD 94 84 call update_screen
547 8320 D1 pop de
548 8321 E1 pop hl
549 8322
550 8322 2A 72 84 ld hl, (frame_counter)
551 8325 ;and a
552 8325 ED 52 sbc hl, de
553 8327 FA 18 83 jp m, delay50s_loop
554 832A
555 832A C9 ret
556 832B
557 832B
558 832B man_overboard_beep:
559 832B 01 05 00 ld bc, 5
560 832E CD 12 83 call delay50s
561 8331
562 8331 3A 8B 84 ld a, (man_overboard_entry)
563 8334 B7 or a
564 8335 28 11 jr z, man_overboard_beep_regular
565 8337 CD FE 8F call parachute_lost_sound
566 833A CD FE 8F call parachute_lost_sound
567 833D CD FE 8F call parachute_lost_sound
568 8340 CD FE 8F call parachute_lost_sound
569 8343
570 8343 AF xor a
571 8344 32 8B 84 ld (man_overboard_entry), a
572 8347 C9 ret
573 8348
574 8348 man_overboard_beep_regular:
575 8348 CD FE 8F call parachute_lost_sound
576 834B
577 834B C9 ret
578 834C
579 834C ; c = start position
580 834C man_overboard:
581 834C CD 01 83 call hide_sharks
582 834F 79 ld a, c
583 8350 32 8A 84 ld (man_overboard_position), a
584 8353 3E 01 ld a, 1
585 8355 32 8B 84 ld (man_overboard_entry), a
586 8358
587 8358 man_overboard_loop:
588 8358 ; Mostrem tauró
589 8358 3A 8A 84 ld a, (man_overboard_position)
590 835B FE 2A cp low i_manwater_1 - 1
591 835D C4 14 85 call nz, showImage
592 8360 ; Mostrem paracaigudista
593 8360 3C inc a
594 8361 CD 14 85 call showImage
595 8364
596 8364 CD 94 84 call update_screen
597 8367 CD 2B 83 call man_overboard_beep
598 836A
599 836A 3A 8A 84 ld a, (man_overboard_position) ; extra delay last pos
600 836D FE 33 cp low i_shark_5 - 1
601 836F 20 06 jr nz, man_overboard_nofinal
602 8371 01 2D 00 ld bc, 15*3
603 8374 CD 12 83 call delay50s
604 8377
605 8377
606 8377 man_overboard_nofinal:
607 8377
608 8377 ; Amaguem tauró
609 8377 3A 8A 84 ld a, (man_overboard_position)
610 837A FE 2A cp low i_manwater_1 - 1
611 837C C4 22 85 call nz, hideImage
612 837F ; Amaguem paracaigudista
613 837F 3C inc a
614 8380 CD 22 85 call hideImage
615 8383 3C inc a
616 8384 32 8A 84 ld (man_overboard_position), a
617 8387 FE 36 cp low i_manwater_6 + 1
618 8389 20 CD jr nz, man_overboard_loop
619 838B
620 838B CD FE 8F call parachute_lost_sound
621 838E CD FE 8F call parachute_lost_sound
622 8391 CD FE 8F call parachute_lost_sound
623 8394 CD FE 8F call parachute_lost_sound
624 8397
625 8397
626 8397 C9 ret
627 8398
628 8398
629 8398
630 8398 ; called every second
631 8398 start_shark_if_need:
632 8398
633 8398 3A 85 84 ld a, (shark_walk_counter)
634 839B 3C inc a
635 839C 32 85 84 ld (shark_walk_counter), a
636 839F FE 07 cp 7
637 83A1
638 83A1 C0 ret nz
639 83A2
640 83A2 AF xor a
641 83A3 32 85 84 ld (shark_walk_counter), a
642 83A6 3E 2C ld a, low i_shark_1 ; low byte pointer is index images aligned to 256
643 83A8 32 83 84 ld (shark_walk_pos), a
644 83AB CD 14 85 call showImage
645 83AE AF xor a
646 83AF 32 84 84 ld (shark_walk_delay), a
647 83B2
648 83B2 C9 ret
649 83B3
650 83B3 shark_move:
651 83B3 3A 83 84 ld a,(shark_walk_pos) ; is shark moving
652 83B6 B7 or a
653 83B7 C8 ret z ; return if not
654 83B8
655 83B8 3A 84 84 ld a, (shark_walk_delay) ; move once every 4 steps
656 83BB 3C inc a
657 83BC 32 84 84 ld (shark_walk_delay), a
658 83BF FE 04 cp 4
659 83C1 C0 ret nz ; return if not
660 83C2 AF xor a
661 83C3 32 84 84 ld (shark_walk_delay), a ; reset move delay counter
662 83C6
663 83C6 3A 83 84 ld a,(shark_walk_pos)
664 83C9 CD 22 85 call hideImage
665 83CC 3C inc a
666 83CD 3C inc a
667 83CE FE 36 cp low i_shark_5+2 ; low byte pointer is index images aligned to 256
668 83D0 20 05 jr nz, shark_move_next
669 83D2 AF xor a
670 83D3 32 83 84 ld (shark_walk_pos), a
671 83D6 C9 ret
672 83D7
673 83D7 shark_move_next:
674 83D7 32 83 84 ld (shark_walk_pos), a
675 83DA CD 14 85 call showImage
676 83DD
677 83DD C9 ret
678 83DE
679 83DE heli_blades:
680 83DE 3A 82 84 ld a, (last_heli)
681 83E1 3C inc a
682 83E2 32 82 84 ld (last_heli), a
683 83E5
684 83E5 47 ld b, a
685 83E6
686 83E6 1F rra
687 83E7 E6 01 and 1
688 83E9 32 03 86 ld (i_heli_blade_back), a
689 83EC
690 83EC 78 ld a, b
691 83ED 3D dec a
692 83EE 1F rra
693 83EF E6 01 and 1
694 83F1 32 02 86 ld (i_heli_blade_front), a
695 83F4
696 83F4 C9 ret
697 83F5
698 83F5
699 83F5 moveright:
700 83F5 3A 7E 84 ld a, (boatpos)
701 83F8 FE 02 cp 2
702 83FA C8 ret z ; we are max right just return
703 83FB 3C inc a
704 83FC
705 83FC 18 06 jr boat_repos
706 83FE
707 83FE moveleft:
708 83FE
709 83FE 3A 7E 84 ld a, (boatpos)
710 8401 B7 or a
711 8402 C8 ret z ; we are max left just return
712 8403 3D dec a
713 8404
714 8404 boat_repos:
715 8404
716 8404 32 7E 84 ld (boatpos), a
717 8407 47 ld b, a
718 8408 AF xor a
719 8409 32 14 86 ld (i_boat_left),a
720 840C 32 16 86 ld (i_boat_right),a
721 840F 32 15 86 ld (i_boat_middle),a
722 8412 78 ld a,b
723 8413
724 8413 21 14 86 ld hl, i_boat_left
725 8416 85 add l
726 8417 6F ld l, a
727 8418 3E 01 ld a, 1
728 841A 77 ld (hl), a
729 841B
730 841B C9 ret
731 841C
732 841C
733 841C showallandhideforfun:
734 841C
735 841C CD D0 84 call hideAll
736 841F CD 94 84 call update_screen
737 8422 76 halt
738 8423 00 nop
739 8424
740 8424
741 8424 3E 01 ld a, 1
742 8426 slowshowAll_loop:
743 8426 F5 push af
744 8427 CD 14 85 call showImage
745 842A CD 94 84 call update_screen
746 842D 76 halt
747 842E 00 nop
748 842F
749 842F F1 pop af
750 8430 3C inc a
751 8431 FE 3A cp number_of_images
752 8433 20 F1 jr nz, slowshowAll_loop
753 8435
754 8435 C9 ret
755 8436
756 8436
757 8436 update_time_int:
758 8436
759 8436 21 77 84 ld hl, time_50s
760 8439 3A 78 84 ld a, (time_second)
761 843C 47 ld b, a
762 843D CD 98 85 call update_time
763 8440
764 8440 3A 78 84 ld a, (time_second)
765 8443 B8 cp b
766 8444 C8 ret z
767 8445 3E 01 ld a, 1
768 8447 32 89 84 ld (second_update), a
769 844A
770 844A C9 ret
771 844B
772 844B
773 844B rpsinterrupt:
774 844B
775 844B 21 72 84 ld hl, frame_counter
776 844E CD 8D 85 call inc32counter
777 8451 CD 36 84 call update_time_int
778 8454
779 8454 step_counter_interrupt:
780 8454 3A 88 84 ld a, (step_speed)
781 8457 47 ld b, a
782 8458 3A 87 84 ld a, (step_counter)
783 845B
784 845B B8 cp b
785 845C 20 0B jr nz, step_counter_nostep
786 845E 3E 01 ld a, 1
787 8460 32 86 84 ld (step), a
788 8463 AF xor a
789 8464 32 87 84 ld (step_counter), a
790 8467 18 04 jr step_counter_segueix
791 8469 step_counter_nostep:
792 8469 3C inc a
793 846A 32 87 84 ld (step_counter), a
794 846D
795 846D step_counter_segueix:
796 846D
797 846D C9 ret
798 846E
799 846E
800 846E
801 846E
802 846E 00 00 counter: defw 0 ; global loop counter (useless?)
803 8470 00 00 defw 0
804 8472
805 8472 00 00 frame_counter: defw 0 ; global frame counter every 50s
806 8474 00 00 defw 0
807 8476
808 8476 00 playing defb 0 ; game running 0 = menu, 1 = playing
809 8477
810 8477 00 time_50s: defb 0 ; time structure
811 8478 00 time_second: defb 0
812 8479 00 time_minute: defb 0
813 847A 00 time_hour: defb 0
814 847B
815 847B 00 00 score: defw 0
816 847D 00 lives: defb 0
817 847E 00 boatpos: defb 0
818 847F 00 game: defb 0
819 8480
820 8480 00 left_debounce: defb 0
821 8481 00 right_debounce: defb 0
822 8482
823 8482 00 last_heli: defb 0
824 8483
825 8483 00 shark_walk_pos: defb 0
826 8484 00 shark_walk_delay: defb 0
827 8485 00 shark_walk_counter: defb 0
828 8486
829 8486
830 8486 00 step: defb 0
831 8487 00 step_counter: defb 0
832 8488 00 step_speed: defb 0
833 8489
834 8489 00 second_update: defb 0
835 848A 00 man_overboard_position: defb 0 ; -1
836 848B 00 man_overboard_entry: defb 0
837 848C
838 848C 00 max_parachutes: defb 0
839 848D
840 848D 00 num_parachutes: defb 0
841 848E 00 defb 0
842 848F
843 848F
844 848F 00 parachute_step_index: defb 0
845 8490
846 8490 00 00 gamea_highcore: defw 0
847 8492 00 00 gameb_highcore: defw 0
848 8494
849 8494 useloader: equ 1
850 8494
851 8494
852 8494 include "parachute_lcd.asm"
# file opened: /home/carles/Projectes/zx/parachute/parachute_lcd.asm
1+ 8494
2+ 8494 update_screen:
3+ 8494
4+ 8494 3E 00 ld a, 0
5+ 8496 11 00 86 ld de, i_screen
6+ 8499 21 3A 86 ld hl, i_screen_last
7+ 849C
8+ 849C update_screen_loop:
9+ 849C 3C inc a ; there's no object 0
10+ 849D FE 3A cp number_of_images
11+ 849F C8 ret z
12+ 84A0 13 inc de