-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMAIN.L68
1893 lines (1889 loc) · 129 KB
/
MAIN.L68
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
00001AB2 Starting Address
Assembler used: EASy68K Editor/Assembler v5.15.04
Created On: 04/02/2018 20:06:34
00000000 1 ; =============================================================================
00000000 2 ; TITLE : EXAMPLE GAME
00000000 3 ; AUTHOR : ANTONI BURGUERA
00000000 4 ; CREATION : 22-OCT-2017
00000000 5 ; =============================================================================
00000000 6
00001000 7 ORG $1000
00001000 8
00001000 9 ; --- CODE INCLUDES -----------------------------------------------------------
00001000 10
00001000 11 INCLUDE "SYSCONST.X68" ; SYSTEM CONSTANTS
00001000 12 ; =============================================================================
00001000 13 ; SYSTEM CONSTANTS
00001000 14 ; =============================================================================
00001000 15
00001000 16 ; --- TRAP RELATED CONSTANTS --------------------------------------------------
00001000 17
00001000 =00000000 18 KBDTRAP EQU 0 ; KEYBOARD UPDATE TRAP
00001000 =00000001 19 SCRTRAP EQU 1 ; SCREEN REFRESH TRAP
00001000 20
00001000 21 ; --- KEY CODES (EASy68K)
00001000 22
00001000 =00000020 23 KBDCHRSP EQU $20 ; SPACE KEY
00001000 =0000004D 24 KBDCHRMK EQU 'M' ; M KEY
00001000 =00000010 25 KBDCHRSH EQU $10 ; SHIFT KEY
00001000 =00000050 26 KBDCHRPK EQU 'P' ; P KEY
00001000 =00000025 27 KBDCHRLF EQU $25 ; LEFT KEY
00001000 =00000026 28 KBDCHRUP EQU $26 ; UP KEY
00001000 =00000027 29 KBDCHRRT EQU $27 ; RIGHT KEY
00001000 =00000028 30 KBDCHRDN EQU $28 ; DOWN KEY
00001000 31
00001000 32 ; --- KEYBOARD MAPPING --------------------------------------------------------
00001000 33
00001000 =00000025 34 KBDLEFT EQU KBDCHRLF ; LEFT BUTTON
00001000 =00000026 35 KBDUP EQU KBDCHRUP ; UP BUTTON
00001000 =00000027 36 KBDRIGHT EQU KBDCHRRT ; RIGHT BUTTON
00001000 =00000028 37 KBDDOWN EQU KBDCHRDN ; DOWN BUTTON
00001000 =00000020 38 KBDFIRE1 EQU KBDCHRSP ; FIRE 1 BUTTON
00001000 =0000004D 39 KBDFIRE2 EQU KBDCHRMK ; FIRE 2 BUTTON
00001000 =00000010 40 KBDFIRE3 EQU KBDCHRSH ; FIRE 3 BUTTON
00001000 =00000050 41 KBDPAUSE EQU KBDCHRPK ; PAUSE BUTTON
00001000 42
00001000 43 ; --- KEYBOARD BITFIELD MASKS -------------------------------------------------
00001000 44 ; CONVENIENCE CONSTANTS TO ACCESS THE FOLLOWING BIT-FIELD.
00001000 45 ; THIS BIT-FIELD IS USED BY SYSTEM VARS (KBDVAL) AND (KBDEDGE).
00001000 46 ; +---+---+---+---+---+---+---+---+
00001000 47 ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
00001000 48 ; +---+---+---+---+---+---+---+---+
00001000 49 ; | | | | | | | |
00001000 50 ; | | | | | | | +---------- LEFT BUTTON
00001000 51 ; | | | | | | +-------------- UP BUTTON
00001000 52 ; | | | | | +------------------ RIGHT BUTTON
00001000 53 ; | | | | +---------------------- DOWN BUTTON
00001000 54 ; | | | +-------------------------- FIRE 1 BUTTON
00001000 55 ; | | +------------------------------ FIRE 2 BUTTON
00001000 56 ; | +---------------------------------- FIRE 3 BUTTON
00001000 57 ; +-------------------------------------- PAUSE BUTTON
00001000 58
00001000 =00000001 59 KBDMSKLF EQU %00000001
00001000 =00000002 60 KBDMSKUP EQU %00000010
00001000 =00000004 61 KBDMSKRT EQU %00000100
00001000 =00000008 62 KBDMSKDN EQU %00001000
00001000 =00000010 63 KBDMSKF1 EQU %00010000
00001000 =00000020 64 KBDMSKF2 EQU %00100000
00001000 =00000040 65 KBDMSKF3 EQU %01000000
00001000 =00000080 66 KBDMSKPS EQU %10000000
00001000 67
00001000 68 ; --- KEYBOARD BITFIELD POSITIONS ---------------------------------------------
00001000 69
00001000 =00000000 70 KBDBITLF EQU 0
00001000 =00000001 71 KBDBITUP EQU 1
00001000 =00000002 72 KBDBITRT EQU 2
00001000 =00000003 73 KBDBITDN EQU 3
00001000 =00000004 74 KBDBITF1 EQU 4
00001000 =00000005 75 KBDBITF2 EQU 5
00001000 =00000006 76 KBDBITF3 EQU 6
00001000 =00000007 77 KBDBITPS EQU 7
00001000 78
00001000 79 ; --- SCREEN RELATED CONSTANTS ------------------------------------------------
00001000 80
00001000 =00000280 81 SCRWIDTH EQU 640 ; SCREEN WIDTH (PIXELS)
00001000 =000001E0 82 SCRHEIGH EQU 480 ; SCREEN HEIGHT (PIXELS)
00001000 =00000001 83 SCRIRQ EQU 1 ; SCREEN INTERRUPT NUMBER
00001000 =00000014 84 SCRTIM EQU 20 ; SCREEN TIMER (MS)
00001000 85
00001000 86 ; --- DYNAMIC MEMORY CONSTANTS ------------------------------------------------
00001000 87
00001000 =00000040 88 DMMBSIZE EQU 64 ; BLOCK SIZE (BYTES). POWER OF TWO
00001000 =00000032 89 DMMBNUM EQU 50 ; NUMBER OF BLOCKS
00001000 =00000000 90 DMMSYSID EQU 0 ; SYSTEM OWNER ID (MUST BE 0)
00001000 =00000000 91 -------------------- end include --------------------
00001000 92 INCLUDE "SYSTEM.X68" ; SYSTEM CODE
00001000 93 ; =============================================================================
00001000 94 ; SYSTEM MANAGEMENT (SYSTEM CODE)
00001000 95 ; =============================================================================
00001000 96
00001000 97 ; -----------------------------------------------------------------------------
00001000 98 SYSINIT
00001000 99 ; INITIALIZES THE SYSTEM
00001000 100 ; INPUT - NONE
00001000 101 ; OUTPUT - NONE
00001000 102 ; MODIFIES - NONE
00001000 103 ; -----------------------------------------------------------------------------
00001000 205F 104 MOVE.L (A7)+,A0 ; GET RETURN ADDRESS
00001002 4EB9 000010A2 105 JSR KBDINIT ; INIT KEYBOARD
00001008 4EB9 0000101C 106 JSR SCRINIT ; INIT SCREEN
0000100E 4EB9 00001192 107 JSR DMMINIT ; INIT DYNAMIC MEMORY
00001014 027C DFFF 108 ANDI.W #$DFFF,SR ; SWITCH TO USER
00001018 2F08 109 MOVE.L A0,-(A7) ; PUT RETURN ADDRESS
0000101A 4E75 110 RTS
0000101C 111
0000101C 112 ; =============================================================================
0000101C 113 ; SCREEN MANAGEMENT (SYSTEM CODE)
0000101C 114 ; =============================================================================
0000101C 115
0000101C 116 ; -----------------------------------------------------------------------------
0000101C 117 SCRINIT
0000101C 118 ; INITIALIZES THE SCREEN, SCREEN-RELATED INTERRUPT AND VARS.
0000101C 119 ; INPUT - NONE
0000101C 120 ; OUTPUT - NONE
0000101C 121 ; MODIFIES - D0,D1,D2,D3
0000101C 122 ; -----------------------------------------------------------------------------
0000101C 123 ; TO DO:
0000101C 124 ; - DISABLE INTS (SET INT BITS IN SR TO 111)
0000101C 40C0 125 MOVE.W SR,D0
0000101E 807C 0700 126 OR.W #$0700,D0
00001022 46C0 127 MOVE.W D0,SR
00001024 128 ; - DISABLE ALL AUTO-IRQ (SEE TRAP #15 TASK 32)
00001024 129 ; - INSTALL SCRUPD INTO TRAP SCRTRAP
00001024 21FC 0000108C 0084 130 MOVE.L #SCRUPD,($80+SCRTRAP*4)
0000102C 131 ; - SET RESOLUTION TO SCRWIDTH X SCRHEIGHT
0000102C 7021 132 MOVEQ #33,D0
0000102E 223C 028001E0 133 MOVE.L #SCRWIDTH<<16+SCRHEIGH,D1
00001034 4E4F 134 TRAP #15
00001036 135 ; - SET WINDOWED MODE
00001036 7201 136 MOVE.L #1,D1
00001038 4E4F 137 TRAP #15
0000103A 138 ; - CLEAR VISIBLE BUFFER
0000103A 705E 139 MOVEQ #94,D0
0000103C 4E4F 140 TRAP #15
0000103E 141 ; - ENABLE DOUBLE BUFFER
0000103E 705C 142 MOVEQ #92,D0
00001040 123C 0011 143 MOVE.B #17,D1
00001044 4E4F 144 TRAP #15
00001046 145 ; - CLEAR HIDDEN BUFFER
00001046 700B 146 MOVEQ #11,D0
00001048 3239 0000FF00 147 MOVE.W $FF00,D1
0000104E 4E4F 148 TRAP #15
00001050 149 ; - INSTALL SCRISR FOR IRQ SCRIRQ (IRQ INTERRUPT VECTOR BEGINS
00001050 150 ; AT $60. INSTALLATION IS SIMILAR TO TRAP INSTALLATION)
00001050 21FC 0000107E 0064 151 MOVE.L #SCRISR,($60+SCRIRQ*4)
00001058 152 ; - ENABLE AUTO-IRQ EVERY SCRTIM MS FOR IRQ SCRIRQ (SEE TRAP #15
00001058 153 ; TASK 32)
00001058 7020 154 MOVEQ #32,D0
0000105A 123C 0006 155 MOVE.B #6,D1
0000105E 7401 156 MOVE.L #SCRIRQ,D2
00001060 843C 0080 157 OR.B #$80,D2
00001064 7614 158 MOVE.L #SCRTIM,D3
00001066 4E4F 159 TRAP #15
00001068 160 ; - CLEAR SCRINTCT AND SCRCYCCT
00001068 4239 00001ADC 161 CLR.B (SCRINTCT)
0000106E 4239 00001ADD 162 CLR.B (SCRCYCCT)
00001074 163 ; - ENABLE INTS (SET INT BITS IN SR TO 000)
00001074 40C0 164 MOVE.W SR,D0
00001076 C07C F8FF 165 AND.W #$F8FF,D0
0000107A 46C0 166 MOVE.W D0,SR
0000107C 4E75 167 RTS
0000107E 168
0000107E 169 ; -----------------------------------------------------------------------------
0000107E 170 SCRISR
0000107E 171 ; SCREEN TIMER ISR. INCREASES THE INTERRUPT COUNTER AND UPDATES DOUBLE BUFFER.
0000107E 172 ; INPUT - NONE
0000107E 173 ; OUTPUT - NONE
0000107E 174 ; MODIFIES - NONE
0000107E 175 ; -----------------------------------------------------------------------------
0000107E 5239 00001ADC 176 ADDQ.B #1,(SCRINTCT) ; UPDATE INT FLAG/COUNTER
00001084 5239 00001ADD 177 ADDQ.B #1,(SCRCYCCT) ; UPDATE CYCLE COUNTER
0000108A 4E73 178 RTE
0000108C 179
0000108C 180 ; -----------------------------------------------------------------------------
0000108C 181 SCRUPD
0000108C 182 ; TRAP SERVICE ROUTINE IN CHARGE OF VISUALIZING CURRENT FRAME AND CLEARING
0000108C 183 ; BUFFER FOR THE NEXT ONE.
0000108C 184 ; INPUT - NONE
0000108C 185 ; OUTPUT - NONE
0000108C 186 ; MODIFIES - NONE
0000108C 187 ; -----------------------------------------------------------------------------
0000108C 188 ; TO DO: UPDATE DOUBLE BUFFER AND CLEAR HIDDEN BUFFER
0000108C 48E7 C000 189 MOVEM.L D0-D1,-(A7)
00001090 705E 190 MOVEQ #94,D0
00001092 4E4F 191 TRAP #15
00001094 700B 192 MOVEQ #11,D0
00001096 323C FF00 193 MOVE.W #$FF00,D1
0000109A 4E4F 194 TRAP #15
0000109C 4CDF 0003 195 MOVEM.L (A7)+,D0-D1
000010A0 4E73 196 RTE
000010A2 197
000010A2 198 ; =============================================================================
000010A2 199 ; KEYBOARD MANAGEMENT (SYSTEM CODE)
000010A2 200 ; =============================================================================
000010A2 201
000010A2 202 ; -----------------------------------------------------------------------------
000010A2 203 KBDINIT
000010A2 204 ; INITIALIZES THE SYSTEM VARIABLES KBDSYS AND KBDVAL
000010A2 205 ; INPUT - NONE
000010A2 206 ; OUTPUT - NONE
000010A2 207 ; MODIFIES - NONE
000010A2 208 ; -----------------------------------------------------------------------------
000010A2 4239 00001ADA 209 CLR.B (KBDVAL) ; INIT VARS
000010A8 4239 00001ADB 210 CLR.B (KBDEDGE)
000010AE 21FC 000010B8 0080 211 MOVE.L #KBDREAD,($80+KBDTRAP*4) ; INSTALL
000010B6 4E75 212 RTS
000010B8 213
000010B8 214 ; -----------------------------------------------------------------------------
000010B8 215 KBDREAD
000010B8 216 ; TRAP SERVICE ROUTINE.
000010B8 217 ; UPDATES THE SYSTEM VARIABLES KBDEDGE AND KBDVAL ACCORDING TO THE BITFIELD
000010B8 218 ; DESCRIBED IN SYSCONST. KBDVAL HOLDS THE CURRENT VALUES AND KBDEDGE HOLDS
000010B8 219 ; RISING EDGES FROM PREVIOUS CALL TO THE CURRENT ONE.
000010B8 220 ; INPUT - NONE
000010B8 221 ; OUTPUT - (KBDVAL) AND (KBDEDGE)
000010B8 222 ; MODIFIES - NONE
000010B8 223 ; -----------------------------------------------------------------------------
000010B8 224 ; TO DO: UPDATE KBDVAL AND KBDEDGE
000010B8 48E7 F000 225 MOVEM.L D0-D3,-(A7)
000010BC 1639 00001ADA 226 MOVE.B (KBDVAL),D3
000010C2 227 ;PUT IN D2 THE VALUES OF KEYS: ARROW LEFT, UP, RIGHT AND DOWN
000010C2 7013 228 MOVEQ #19,D0
000010C4 223C 25262728 229 MOVE.L #KBDLEFT<<24+KBDUP<<16+KBDRIGHT<<8+KBDDOWN,D1
000010CA 4E4F 230 TRAP #15
000010CC 2401 231 MOVE.L D1,D2
000010CE 232 ;PUT IN D1 THE VALUES OF KEYS: FIRE1, FIRE2, FIRE3 AND PAUSE
000010CE 223C 204D1050 233 MOVE.L #KBDFIRE1<<24+KBDFIRE2<<16+KBDFIRE3<<8+KBDPAUSE,D1
000010D4 4E4F 234 TRAP #15
000010D6 235
000010D6 236 ;SET D3 WITH KEYS PRESSED AND NOT PRESSED
000010D6 0802 0018 237 BTST.L #24,D2
000010DA 6600 000A 238 BNE .KBDLEFT
000010DE 0203 00FE 239 ANDI.B #%11111110,D3
000010E2 6000 0006 240 BRA .COND1
000010E6 241 .KBDLEFT ;LEFT ARROW PRESSED
000010E6 0003 0001 242 ORI.B #KBDMSKLF,D3
000010EA 243
000010EA 244 .COND1
000010EA 0802 0010 245 BTST.L #16,D2
000010EE 6600 000A 246 BNE .KBDUP
000010F2 0203 00FD 247 ANDI.B #%11111101,D3
000010F6 6000 0006 248 BRA .COND2
000010FA 249 .KBDUP ;UP ARROW PRESSED
000010FA 0003 0002 250 ORI.B #KBDMSKUP,D3
000010FE 251 .COND2
000010FE 0802 0008 252 BTST.L #8,D2
00001102 6600 000A 253 BNE .KBDRT
00001106 0203 00FB 254 ANDI.B #%11111011,D3
0000110A 6000 0006 255 BRA .COND3
0000110E 256 .KBDRT ;RIGHT ARROW PRESSED
0000110E 0003 0004 257 ORI.B #KBDMSKRT,D3
00001112 258 .COND3
00001112 0802 0000 259 BTST.L #0,D2
00001116 6600 000A 260 BNE .KBDDOWN
0000111A 0203 00F7 261 ANDI.B #%11110111,D3
0000111E 6000 0006 262 BRA .COND4
00001122 263 .KBDDOWN ;DOWN ARROW PRESSED
00001122 0003 0008 264 ORI.B #KBDMSKDN,D3
00001126 265 .COND4
00001126 0801 0018 266 BTST.L #24,D1
0000112A 6600 000A 267 BNE .KBDF1
0000112E 0203 00EF 268 ANDI.B #%11101111,D3
00001132 6000 0006 269 BRA .COND5
00001136 270 .KBDF1 ;FIRE1 PRESSED
00001136 0003 0010 271 ORI.B #KBDMSKF1,D3
0000113A 272
0000113A 273 .COND5
0000113A 0801 0010 274 BTST.L #16,D1
0000113E 6600 000A 275 BNE .KBDF2
00001142 0203 00DF 276 ANDI.B #%11011111,D3
00001146 6000 0006 277 BRA .COND6
0000114A 278 .KBDF2 ;FIRE2 PRESSED
0000114A 0003 0020 279 ORI.B #KBDMSKF2,D3
0000114E 280 .COND6
0000114E 0801 0008 281 BTST.L #8,D1
00001152 6600 000A 282 BNE .KBDF3
00001156 0203 00BF 283 ANDI.B #%10111111,D3
0000115A 6000 0006 284 BRA .COND7
0000115E 285 .KBDF3 ;FIRE3 PRESSED
0000115E 0003 0040 286 ORI.B #KBDMSKF3,D3
00001162 287 .COND7
00001162 0801 0000 288 BTST.L #0,D1
00001166 6600 000A 289 BNE .KBDP
0000116A 0203 007F 290 ANDI.B #%01111111,D3
0000116E 6000 0006 291 BRA .FINISH
00001172 292 .KBDP ;PAUSE PRESSED
00001172 0003 0080 293 ORI.B #KBDMSKPS,D3
00001176 294
00001176 295 .FINISH ;PUT D3 IN (KBDVAL) AND SET (KBDEDGE)
00001176 1239 00001ADA 296 MOVE.B (KBDVAL),D1
0000117C 13C3 00001ADA 297 MOVE.B D3,(KBDVAL)
00001182 4601 298 NOT.B D1
00001184 C601 299 AND.B D1,D3
00001186 13C3 00001ADB 300 MOVE.B D3,(KBDEDGE)
0000118C 4CDF 000F 301 MOVEM.L (A7)+,D0-D3
00001190 4E73 302 RTE
00001192 303
00001192 304
00001192 305 ; =============================================================================
00001192 306 ; DYNAMIC MEMORY MANAGEMENT (SYSTEM CODE)
00001192 307 ; DYNAMIC MEMORY IS A SET OF DMMBNUM SLOTS OF DMMBSIZE BYTES EACH ONE.
00001192 308 ; DMMBSIZE MUST BE POWER OF TWO. A SLOT HAS:
00001192 309 ; - HEADER - 1 WORD. SPECIFIES THE OWNER (0 MEANS OWNED BY SYSTEM)
00001192 310 ; - DATA - DMMBSIZE - 2 BYTES. MAY CONTAIN VARS AND ANY KIND OF DATA RELATED
00001192 311 ; THE THE OWNER. IF OWNER==0, DATA IS MEANINGLESS.
00001192 312 ; =============================================================================
00001192 313
00001192 314 ; -----------------------------------------------------------------------------
00001192 315 DMMINIT
00001192 316 ; INITIALIZES THE DYNAMIC MEMORY TO ALL OWNED BY SYSTEM.
00001192 317 ; INPUT - NONE
00001192 318 ; OUTPUT - NONE
00001192 319 ; MODIFIES - NONE
00001192 320 ; -----------------------------------------------------------------------------
00001192 48E7 8080 321 MOVEM.L D0/A0,-(A7)
00001196 41F9 00001B40 322 LEA DMMDATA,A0
0000119C 303C 0031 323 MOVE.W #DMMBNUM-1,D0
000011A0 30BC 0000 324 .LOOP MOVE.W #DMMSYSID,(A0)
000011A4 D1FC 00000040 325 ADD.L #DMMBSIZE,A0
000011AA 51C8 FFF4 326 DBRA.W D0,.LOOP
000011AE 4CDF 0101 327 MOVEM.L (A7)+,D0/A0
000011B2 4E75 328 RTS
000011B4 329
000011B4 330 ; -----------------------------------------------------------------------------
000011B4 331 DMMFIRST
000011B4 332 ; SEARCHES THE FIRST MEMORY SLOT NOT OWNED BY SYSTEM AND OUTPUTS A POINTER
000011B4 333 ; TO THE CORRESPONDING DATA (SLOT ADDRESS+2)
000011B4 334 ; INPUT - NONE
000011B4 335 ; OUTPUT - A0 : POINTER TO THE DATA OR 0 IF NOT FOUND
000011B4 336 ; MODIFIES - NONE (ASIDE OF OUTPUT)
000011B4 337 ; -----------------------------------------------------------------------------
000011B4 41F9 00001B40 338 LEA DMMDATA,A0
000011BA 4A58 339 DMMFRLOP TST.W (A0)+
000011BC 6600 0016 340 BNE DMMFRFND
000011C0 D1FC 0000003E 341 ADD.L #DMMBSIZE-2,A0
000011C6 B1FC 000027BF 342 DMMFRCOM CMP.L #DMMDATA+DMMBSIZE*DMMBNUM-1,A0
000011CC 6DEC 343 BLT DMMFRLOP
000011CE 207C 00000000 344 MOVE.L #0,A0
000011D4 4E75 345 DMMFRFND RTS
000011D6 346
000011D6 347 ; -----------------------------------------------------------------------------
000011D6 348 DMMNEXT
000011D6 349 ; SEARCHES THE NEXT MEMORY SLOT NOT OWNED BY SYSTEM AND OUTPUTS A POINTER
000011D6 350 ; TO THE CORRESPONDING DATA (SLOT ADDRESS+2)
000011D6 351 ; INPUT - A0 : POINTER WITHIN THE CURRENT SLOT
000011D6 352 ; OUTPUT - A0 : POINTER TO THE DATA OR 0 IF NOT FOUND
000011D6 353 ; MODIFIES - NONE (ASIDE OF OUTPUT)
000011D6 354 ; -----------------------------------------------------------------------------
000011D6 2F00 355 MOVE.L D0,-(A7)
000011D8 2008 356 MOVE.L A0,D0
000011DA C0BC FFFFFFC0 357 AND.L #-DMMBSIZE,D0 ; TAKE ADVANTAGE OF ALIGNMENT
000011E0 0680 00000040 358 ADD.L #DMMBSIZE,D0
000011E6 2040 359 MOVE.L D0,A0
000011E8 201F 360 MOVE.L (A7)+,D0
000011EA 60DA 361 BRA DMMFRCOM
000011EC 362
000011EC 363 ; -----------------------------------------------------------------------------
000011EC 364 DMMFRSTO
000011EC 365 ; SEARCHES THE FIRST MEMORY SLOT WITH THE SPECIFIED ID AND OUTPUTS A POINTER
000011EC 366 ; TO THE CORRESPONDING DATA (SLOT ADDRESS+2)
000011EC 367 ; INPUT - D0.W : ID TO SEARCH
000011EC 368 ; OUTPUT - A0 : POINTER TO THE DATA OR 0 IF NOT FOUND
000011EC 369 ; MODIFIES - NONE (ASIDE OF OUTPUT)
000011EC 370 ; -----------------------------------------------------------------------------
000011EC 41F9 00001B40 371 LEA DMMDATA,A0
000011F2 B058 372 DMMFLOOP CMP.W (A0)+,D0
000011F4 6700 0016 373 BEQ DMMFFND
000011F8 D1FC 0000003E 374 ADD.L #DMMBSIZE-2,A0
000011FE B1FC 000027BF 375 DMMFCOM CMP.L #DMMDATA+DMMBSIZE*DMMBNUM-1,A0
00001204 6DEC 376 BLT DMMFLOOP
00001206 207C 00000000 377 MOVE.L #0,A0
0000120C 4E75 378 DMMFFND RTS
0000120E 379
0000120E 380 ; -----------------------------------------------------------------------------
0000120E 381 DMMNEXTO
0000120E 382 ; SEARCHES THE NEXT MEMORY SLOT WITH THE SPECIFIED ID AND OUTPUTS A POINTER
0000120E 383 ; TO THE CORRESPONDING DATA (SLOT ADDRESS+2)
0000120E 384 ; INPUT - D0.W : ID TO SEARCH
0000120E 385 ; A0 : POINTER WITHIN THE CURRENT SLOT
0000120E 386 ; OUTPUT - A0 : POINTER TO THE DATA OR 0 IF NOT FOUND
0000120E 387 ; MODIFIES - NONE (ASIDE OF OUTPUT)
0000120E 388 ; -----------------------------------------------------------------------------
0000120E 2F00 389 MOVE.L D0,-(A7)
00001210 2008 390 MOVE.L A0,D0
00001212 C0BC FFFFFFC0 391 AND.L #-DMMBSIZE,D0 ; TAKE ADVANTAGE OF ALIGNMENT
00001218 0680 00000040 392 ADD.L #DMMBSIZE,D0
0000121E 2040 393 MOVE.L D0,A0
00001220 201F 394 MOVE.L (A7)+,D0
00001222 60DA 395 BRA DMMFCOM
00001224 396
00001224 397 ; -----------------------------------------------------------------------------
00001224 398 DMMALLOC
00001224 399 ; SEARCHES THE FIRST FREE (SYS OWNED) SLOT, ASSIGNS TO THE SPECIFIED OWNER
00001224 400 ; AND RETURNS A POINTER TO THE CORRESPONDING DATA (SLOT ADDRESS + 2)
00001224 401 ; INPUT - D0.W : ID TO ASSIGN
00001224 402 ; OUTPUT - A0 : POINTER TO THE DATA OR 0 IF NOT FREE SPACE
00001224 403 ; MODIFIES - NONE (ASIDE OF OUTPUT)
00001224 404 ; -----------------------------------------------------------------------------
00001224 3F00 405 MOVE.W D0,-(A7)
00001226 4240 406 CLR.W D0
00001228 4EB8 11EC 407 JSR DMMFRSTO
0000122C 301F 408 MOVE.W (A7)+,D0
0000122E B1FC 00000000 409 CMP.L #0,A0
00001234 6700 0006 410 BEQ .END
00001238 3140 FFFE 411 MOVE.W D0,-2(A0)
0000123C 4E75 412 .END RTS
0000123E 413
0000123E 414 ; -----------------------------------------------------------------------------
0000123E 415 DMMFREE
0000123E 416 ; FREES THE SLOT TO WHICH THE PROVIDED POINTER BELONGS BY SETTING ITS OWNED TO
0000123E 417 ; SYSTEM (0)
0000123E 418 ; INPUT - A0 : POINTER BELONGING TO THE SLOT TO FREE
0000123E 419 ; OUTPUT - NONE
0000123E 420 ; MODIFIES - NONE
0000123E 421 ; -----------------------------------------------------------------------------
0000123E 48E7 8080 422 MOVEM.L D0/A0,-(A7)
00001242 2008 423 MOVE.L A0,D0
00001244 C0BC FFFFFFC0 424 AND.L #-DMMBSIZE,D0 ; TAKE ADVANTAGE OF ALIGNMENT
0000124A 2040 425 MOVE.L D0,A0
0000124C 4250 426 CLR.W (A0)
0000124E 4CDF 0101 427 MOVEM.L (A7)+,D0/A0
00001252 4E75 428 RTS
00001254 429
00001254 430
00001254 431
00001254 432
00001254 433
00001254 434
00001254 435
00001254 436
00001254 437
00001254 438
00001254 439
00001254 440
00001254 441
00001254 442
00001254 443
00001254 444
00001254 445
00001254 446
00001254 447
00001254 448
00001254 449
00001254 450
00001254 451
00001254 452
00001254 453
00001254 454
00001254 455
00001254 456
00001254 457
00001254 458
00001254 459
00001254 460
00001254 461
00001254 462
00001254 463
00001254 464 -------------------- end include --------------------
00001254 465 INCLUDE "CONST.X68" ; USER CONSTANTS
00001254 466 ; =============================================================================
00001254 467 ; SYSTEM CONSTANTS
00001254 468 ; =============================================================================
00001254 469
00001254 470 ; --- GAME STATES -------------------------------------------------------------
00001254 471
00001254 =FFFFFFFF 472 STANONE EQU -1 ; PLACEHOLDER TO FORCE CHANGE
00001254 =00000000 473 STAINTR EQU 0 ; INTRO/PRESS SPACE BAR STATE
00001254 =00000001 474 STAPLAY EQU 1 ; NORMAL GAME STATE
00001254 =00000002 475 STAGOVR EQU 2 ; GAME OVER STATE
00001254 476
00001254 477 ; --- AGENT TYPES -------------------------------------------------------------
00001254 478
00001254 =00000001 479 SHTTYPE EQU 1
00001254 =00000002 480 ASTTYPE EQU 2
00001254 =00000003 481 XPLTYPE EQU 3
00001254 =00000004 482 COINTYPE EQU 4
00001254 483
00001254 484 ; --- PLAYER RELATED CONSTANTS ------------------------------------------------
00001254 485
00001254 =0000001E 486 PLRWIDTH EQU 30 ; PLAYER WIDTH (PIXELS)
00001254 =0000001E 487 PLRHEIGH EQU 30 ; PLAYER HEIGHT (PIXELS)
00001254 =00000005 488 PLRSPDX EQU 5 ; PLAYER SPEED UPON X AXIS
00001254 =00000001 489 PLRACCY EQU 1 ; PLAYER ACCELERATION UPON Y AXIS (USED FOR GRAVITATIONAL PURPOSES)
00001254 =000000FF 490 PLRCOLOR EQU $000000FF ; PLAYER COLOR
00001254 =00FFFFFF 491 PLRTXTCL EQU $00FFFFFF ; FONT COLOR
00001254 =00000002 492 PLRTXTX EQU 2 ; SCORE X COORDINATE
00001254 =00000001 493 PLRTXTY EQU 1 ; SCORE Y COORDINATE
00001254 494
00001254 495 ; --- PIPE RELATED CONSTANTS ----------------------------------------------
00001254 496
00001254 =00000078 497 HOLHEIGH EQU 120 ; HOLE HEIGH
00001254 =0000003C 498 PIPWIDTH EQU 60
00001254 =00FFFFFF 499 PIPPENCL EQU $00FFFFFF ; PIPE PEN COLOR
00001254 =00008000 500 PIPFILCL EQU $00008000 ; PIPE FIL COLOR
00001254 =00000005 501 PIPEDGE EQU 5 ; PIPE EDGE WIDTH
00001254 =00000005 502 PIPXSPD EQU 5 ; PIPE X SPEED
00001254 =00000003 503 PIPYSPD EQU 3 ; PIPE Y SPEED
00001254 =00000005 504 PIPSCORE EQU 5 ; SCORE FOR PIPE
00001254 505
00001254 506 ; --- COIN RELATED CONSTANTS ---------------------------------------------
00001254 507
00001254 =00000019 508 COINSIZE EQU 25 ; COIN DIAMETER (PIXELS)
00001254 =00000000 509 CNPENCL EQU $00000000 ; COIN PEN COLOR
00001254 =0000FFFF 510 CNFILCL EQU $0000FFFF ; COIN FIL COLOR
00001254 =00000005 511 COINXSPD EQU 5 ; COIN SPEED UPON X AXIS
00001254 512
00001254 513 ; --- INTRO STATE RELATED CONSTANTS -------------------------------------------
00001254 514
00001254 =00000019 515 INTTITX EQU 25 ; TITLE X COORDINATE
00001254 =00000005 516 INTTITY EQU 5 ; TITLE Y COORDINATE
00001254 =000000FF 517 INTTITC EQU $000000FF ; TITLE COLOR
00001254 =0000001F 518 INTPRSX EQU 31 ; SPACE BAR X COORDINATE
00001254 =00000017 519 INTPRSY EQU 23 ; SPACE BAR Y COORDINATE
00001254 =00FFFFFF 520 INTPRSC EQU $00FFFFFF ; PRESS SPACE BAR COLOR
00001254 521
00001254 522 ; --- GAME OVER STATE RELATED CONSTANTS ---------------------------------------
00001254 523
00001254 =00000023 524 GOVSTRX EQU 35 ; TITLE X COORDINATE
00001254 =0000000F 525 GOVSTRY EQU 15 ; TITLE Y COORDINATE
00001254 =00FFFFFF 526 GOVSTRC EQU $00FFFFFF ; TITLE COLOR
00001254 527
00001254 528
00001254 529
00001254 530 -------------------- end include --------------------
00001254 531 INCLUDE "UTIL.X68" ; UTILITY MACRO AND SUBROUTINES
00001254 532 ; =============================================================================
00001254 533 ; UTILITY MACROS
00001254 534 ; =============================================================================
00001254 535
00001254 536 ; -----------------------------------------------------------------------------
00001254 537 UTLSPEN MACRO
00001254 538 ; WRAPPER FOR SET PEN TRAP 15 TASK.
00001254 539 ; INPUT - \1 COLOR IN FORMAT $00BBGGRR
00001254 540 ; OUTPUT - NONE
00001254 541 ; MODIFIES - D0,D1
00001254 542 ; -----------------------------------------------------------------------------
00001254 543 MOVE.B #80,D0
00001254 544 MOVE.L \1,D1
00001254 545 TRAP #15
00001254 546 ENDM
00001254 547
00001254 548 ; -----------------------------------------------------------------------------
00001254 549 UTLSFIL MACRO
00001254 550 ; WRAPPER FOR SET FIL TRAP 15 TASK.
00001254 551 ; INPUT - \1 COLOR IN FORMAT $00BBGGRR
00001254 552 ; OUTPUT - NONE
00001254 553 ; MODIFIES - D0,D1
00001254 554 ; -----------------------------------------------------------------------------
00001254 555 MOVE.B #81,D0
00001254 556 MOVE.L \1,D1
00001254 557 TRAP #15
00001254 558 ENDM
00001254 559
00001254 560 ; -----------------------------------------------------------------------------
00001254 561 UTLLOCT MACRO
00001254 562 ; WRAPPER TO TEXT POSITIONNING FROM TRAP 15
00001254 563 ; INPUT - \1 X, \2 Y
00001254 564 ; OUTPUT - NONE
00001254 565 ; MODIFIES - D0,D1
00001254 566 ; -----------------------------------------------------------------------------
00001254 567 MOVE.W #\1<<8|\2, D1
00001254 568 MOVE.B #11,D0
00001254 569 TRAP #15
00001254 570 ENDM
00001254 571
00001254 572 ; -----------------------------------------------------------------------------
00001254 573 UTLSND MACRO
00001254 574 ; WRAPPER FOR PLAYING WAV FILE TRAP 15 TASK
00001254 575 ; INPUT - \1 ADDRESS TO STRING WITH NAME OF THE FILE
00001254 576 ; OUTPUT - D0.W=0 IF SOUND NOT PLAYED, NON ZERO IF PLAYED
00001254 577 ; MODIFIES - D0,A1
00001254 578 ; -----------------------------------------------------------------------------
00001254 579 LEA \1, A1 ;PLAY EXPLOSION SOUND
00001254 580 ;MOVE.L #0,D1
00001254 581 ;MOVE.L #0,D2
00001254 582 MOVE.L #73,D0
00001254 583 TRAP #15
00001254 584 ENDM
00001254 585
00001254 586 ; =============================================================================
00001254 587 ; UTILITY SUBROUTINES
00001254 588 ; =============================================================================
00001254 589
00001254 590 ; -----------------------------------------------------------------------------
00001254 591 UTLINIT
00001254 592 ; INITIALIZES UTILITY CODE
00001254 593 ; INPUT - NONE
00001254 594 ; OUTPUT - NONE
00001254 595 ; MODIFIES - NONE
00001254 596 ; -----------------------------------------------------------------------------
00001254 4239 000027D6 597 CLR.B (UTLRNDIX)
0000125A 4E75 598 RTS
0000125C 599 ; -----------------------------------------------------------------------------
0000125C 600 UTLCHCOL
0000125C 601 ; CHECKS COLLISION BETWEEN PLAYER AND PIPE
0000125C 602 ; INPUT - D0.W X0 COORDINATE
0000125C 603 ; D1.W Y0 COORDINATE
0000125C 604 ; D2.W X1 COORDINATE
0000125C 605 ; D3.W Y1 COORDINATE
0000125C 606 ; D4.W WIDTH 0
0000125C 607 ; D5.W WIDTH 1
0000125C 608 ; D6.W HEIGHT 0
0000125C 609 ; D7.W HEIGHT 1
0000125C 610 ; OUTPUT - D0.B=FF - COLLISION, =0 - NO COLLISION
0000125C 611 ; MODIFIES - NONE
0000125C 612 ; -----------------------------------------------------------------------------
0000125C 48A7 0F00 613 MOVEM.W D4-D7,-(A7)
00001260 D840 614 ADD.W D0,D4
00001262 B842 615 CMP.W D2,D4
00001264 6F00 0022 616 BLE .NOCOL
00001268 DA42 617 ADD.W D2,D5
0000126A BA40 618 CMP.W D0,D5
0000126C 6F00 001A 619 BLE .NOCOL
00001270 DC41 620 ADD.W D1,D6
00001272 BC43 621 CMP.W D3,D6
00001274 6F00 0012 622 BLE .NOCOL
00001278 DE43 623 ADD.W D3,D7
0000127A BE41 624 CMP.W D1,D7
0000127C 6F00 000A 625 BLE .NOCOL
00001280 103C 00FF 626 MOVE.B #$FF,D0
00001284 6000 0004 627 BRA .END
00001288 4200 628 .NOCOL CLR.B D0
0000128A 4C9F 00F0 629 .END MOVEM.W (A7)+,D4-D7
0000128E 4E75 630 RTS
00001290 631 ; -----------------------------------------------------------------------------
00001290 632 UTLRAND
00001290 633 ; PROVIDES A PSEUDO-RANDOM BYTE
00001290 634 ; INPUT - NONE
00001290 635 ; OUTPUT - D0.L RANDOM VALUE (ONLY BYTE)
00001290 636 ; MODIFIES - NONE (ASIDE OF OUTPUT)
00001290 637 ; -----------------------------------------------------------------------------
00001290 2F08 638 MOVE.L A0,-(A7)
00001292 41F9 000012AE 639 LEA .RANDVEC,A0
00001298 4280 640 CLR.L D0
0000129A 1039 000027D6 641 MOVE.B (UTLRNDIX),D0
000012A0 1030 0800 642 MOVE.B (A0,D0.L),D0
000012A4 5239 000027D6 643 ADDQ.B #1,(UTLRNDIX)
000012AA 205F 644 MOVE.L (A7)+,A0
000012AC 4E75 645 RTS
000012AE 646
000012AE 647
000012AE= A2 EE 9A 0C F5 24 ... 648 .RANDVEC DC.B 162, 238, 154, 12 , 245, 36 , 32 , 103
000012B6= 2A A3 51 26 E0 AC ... 649 DC.B 42 , 163, 81 , 38 , 224, 172, 19 , 69
000012BE= 75 51 CA FD 33 EB ... 650 DC.B 117, 81 , 202, 253, 51 , 235, 108, 154
000012C6= 60 CC E7 B8 9A EB ... 651 DC.B 96 , 204, 231, 184, 154, 235, 34 , 203
000012CE= 1D 76 B5 95 B0 89 ... 652 DC.B 29 , 118, 181, 149, 176, 137, 62 , 108
000012D6= 39 15 48 C9 6E CA ... 653 DC.B 57 , 21 , 72 , 201, 110, 202, 159, 41
000012DE= 43 E7 E2 7C 37 25 ... 654 DC.B 67 , 231, 226, 124, 55 , 37 , 84 , 62
000012E6= E9 94 CE E9 E4 52 ... 655 DC.B 233, 148, 206, 233, 228, 82 , 243, 78
000012EE= 37 6D 9A 84 A2 28 ... 656 DC.B 55 , 109, 154, 132, 162, 40 , 30 , 39
000012F6= 19 E2 C6 77 80 D4 ... 657 DC.B 25 , 226, 198, 119, 128, 212, 232, 225
000012FE= 0A 5A 32 67 33 C2 ... 658 DC.B 10 , 90 , 50 , 103, 51 , 194, 222, 40
00001306= 59 80 DC 0E 57 FC ... 659 DC.B 89 , 128, 220, 14 , 87 , 252, 243, 252
0000130E= 8A AB BC F7 07 4D ... 660 DC.B 138, 171, 188, 247, 7 , 77 , 29 , 234
00001316= EF D5 77 6E 1E BB ... 661 DC.B 239, 213, 119, 110, 30 , 187, 131, 23
0000131E= D6 E0 2A 8F BD 28 ... 662 DC.B 214, 224, 42 , 143, 189, 40 , 212, 130
00001326= 13 4F 66 EC 0A 64 ... 663 DC.B 19 , 79 , 102, 236, 10 , 100, 122, 188
0000132E= 56 52 9A 16 9B 90 ... 664 DC.B 86 , 82 , 154, 22 , 155, 144, 7 , 199
00001336= 06 8A A4 F7 01 DA ... 665 DC.B 6 , 138, 164, 247, 1 , 218, 166, 82
0000133E= F2 E7 77 28 B1 76 ... 666 DC.B 242, 231, 119, 40 , 177, 118, 220, 102
00001346= A4 42 E3 81 B1 67 ... 667 DC.B 164, 66 , 227, 129, 177, 103, 165, 108
0000134E= BF CE FA 16 BF 38 ... 668 DC.B 191, 206, 250, 22 , 191, 56 , 30 , 161
00001356= D1 8B 50 0C 5F 49 ... 669 DC.B 209, 139, 80 , 12 , 95 , 73 , 168, 56
0000135E= DE 4C 14 A2 40 DC ... 670 DC.B 222, 76 , 20 , 162, 64 , 220, 93 , 12
00001366= B6 9B 0A 38 5D AB ... 671 DC.B 182, 155, 10 , 56 , 93 , 171, 89 , 6
0000136E= E2 1B DD 75 15 82 ... 672 DC.B 226, 27 , 221, 117, 21 , 130, 101, 18
00001376= 8A 26 51 30 9F 47 ... 673 DC.B 138, 38 , 81 , 48 , 159, 71 , 57 , 21
0000137E= 1E 8A BB 71 C6 6E ... 674 DC.B 30 , 138, 187, 113, 198, 110, 185, 152
00001386= 9F 47 E5 34 94 27 ... 675 DC.B 159, 71 , 229, 52 , 148, 39 , 77 , 6
0000138E= 7D 06 D6 BA 30 0F ... 676 DC.B 125, 6 , 214, 186, 48 , 15 , 212, 22
00001396= EC 7F 7E 03 CF 2D ... 677 DC.B 236, 127, 126, 3 , 207, 45 , 193, 2
0000139E= 94 5B 23 F2 8B CD ... 678 DC.B 148, 91 , 35 , 242, 139, 205, 248, 237
000013A6= 74 33 EC B9 0F D5 ... 679 DC.B 116, 51 , 236, 185, 15 , 213, 221, 6
000013AE 680
000013AE 681
000013AE 682
000013AE 683
000013AE 684
000013AE 685
000013AE 686
000013AE 687
000013AE 688
000013AE 689
000013AE 690 -------------------- end include --------------------
000013AE 691 INCLUDE "PLAYER.X68" ; PLAYER MANAGEMENT
000013AE 692 ; =============================================================================
000013AE 693 ; PLAYER MANAGEMENT
000013AE 694 ; =============================================================================
000013AE 695
000013AE 696 ; -----------------------------------------------------------------------------
000013AE 697 PLRINIT
000013AE 698 ; INITIALIZES THE PLAYER
000013AE 699 ; INPUT - NONE
000013AE 700 ; OUTPUT - NONE
000013AE 701 ; MODIFIES - NONE
000013AE 702 ; -----------------------------------------------------------------------------
000013AE 33FC 0140 000027C4 703 MOVE.W #SCRWIDTH/2,(PLRPOSX)
000013B6 33FC 0118 000027C6 704 MOVE.W #SCRHEIGH-200,(PLRPOSY)
000013BE 4279 000027C8 705 CLR.W (PLRSPDY)
000013C4 4279 000027D8 706 CLR.W (PIPCOUNT)
000013CA 4279 000027CA 707 CLR.W (PLRSCORE)
000013D0 4279 000027CC 708 CLR.W (PLRDEAD)
000013D6 709
000013D6 710 ; -----------------------------------------------------------------------------
000013D6 711 PLRUPD
000013D6 712 ; UPDATES THE PLAYER MOTION
000013D6 713 ; INPUT - NONE (ACCESSES KBDVAL AND KBDEDGE)
000013D6 714 ; OUTPUT - NONE (MODIFIES PLAYER DATA)
000013D6 715 ; MODIFIES - NONE
000013D6 716 ; -----------------------------------------------------------------------------
000013D6 2F00 717 MOVE.L D0,-(A7)
000013D8 3039 000027C8 718 MOVE.W (PLRSPDY),D0
000013DE D079 000027C6 719 ADD.W (PLRPOSY),D0
000013E4 B07C 01C2 720 CMP.W #SCRHEIGH-PLRHEIGH,D0
000013E8 6500 0006 721 BLO .BOUNDUP
000013EC 6000 002C 722 BRA .DEATH ; GAME OVER IF BENEATH THE BOTTOM LIMIT
000013F0 B07C 0000 723 .BOUNDUP CMP.W #0,D0
000013F4 6E00 0006 724 BGT .BOUNDWN
000013F8 6000 0020 725 BRA .DEATH ; GAME OVER IF OVER THE TOP LIMIT
000013FC 33C0 000027C6 726 .BOUNDWN MOVE.W D0,(PLRPOSY)
00001402 5279 000027C8 727 ADD.W #PLRACCY,(PLRSPDY)
00001408 0C39 0000 000027CC 728 CMP.B #0,(PLRDEAD)
00001410 6700 001A 729 BEQ .NOTOUCH
00001414 4239 000027CC 730 CLR.B (PLRDEAD)
0000141A 33FC 0002 000027C2 731 .DEATH MOVE.W #STAGOVR,(STANEXT) ; GAME OVER STATE
00001422 732m UTLSND .EXPSOUN ;PLAY EXPLOSION SOUND
00001422 733m ; WRAPPER FOR PLAYING WAV FILE TRAP 15 TASK
00001422 734m ; INPUT - .EXPSOUN ADDRESS TO STRING WITH NAME OF THE FILE
00001422 735m ; OUTPUT - D0.W=0 IF SOUND NOT PLAYED, NON ZERO IF PLAYED
00001422 736m ; MODIFIES - D0,A1
00001422 737m ; -----------------------------------------------------------------------------
00001428 738m ;MOVE.L #0,D1
00001428 739m ;MOVE.L #0,D2
0000142C 201F 740 .NOTOUCH MOVE.L (A7)+,D0
0000142E 3F01 741 MOVE.W D1,-(A7)
00001430 1239 00001ADA 742 MOVE.B (KBDVAL),D1 ; PERFORM MOTION
00001436 E219 743 ROR.B #1,D1 ; CHECK LEFT ARROW
00001438 6400 0018 744 BCC .CHKUP
0000143C 5B79 000027C4 745 SUB.W #PLRSPDX,(PLRPOSX)
00001442 4A79 000027C4 746 TST.W (PLRPOSX)
00001448 6C00 0008 747 BGE .CHKUP
0000144C 4279 000027C4 748 CLR.W (PLRPOSX)
00001452 E219 749 .CHKUP ROR.B #1,D1 ; CHECK UP ARROW
00001454 6400 0016 750 BCC .CHKRT
00001458 0839 0001 00001ADB 751 BTST.B #KBDBITUP,(KBDEDGE)
00001460 6700 000A 752 BEQ .CHKRT
00001464 33FC FFF6 000027C8 753 MOVE.W #-10,(PLRSPDY)
0000146C E219 754 .CHKRT ROR.B #1,D1 ; CHECK RIGHT ARROW
0000146E 6400 001C 755 BCC .MDONE
00001472 5A79 000027C4 756 ADD.W #PLRSPDX,(PLRPOSX)
00001478 0C79 0262 000027C4 757 CMP.W #SCRWIDTH-PLRWIDTH,(PLRPOSX)
00001480 6F00 000A 758 BLE .MDONE
00001484 33FC 0262 000027C4 759 MOVE.W #SCRWIDTH-PLRWIDTH,(PLRPOSX)
0000148C 321F 760 .MDONE MOVE.W (A7)+,D1
0000148E 4E75 761 RTS
00001490= 4578706C 6F73696F ... 762 .EXPSOUN DC.L 'Explosion.wav',0 ; EXPLOSION SOUND
000014A4 763
000014A4 764 ; -----------------------------------------------------------------------------
000014A4 765 PLRPLOT
000014A4 766 ; PLOTS THE PLAYER ITS LIFE AND THE SCORE
000014A4 767 ; INPUT - NONE
000014A4 768 ; OUTPUT - NONE
000014A4 769 ; MODIFIES - NONE
000014A4 770 ; -----------------------------------------------------------------------------
000014A4 48E7 F800 771 MOVEM.L D0-D4,-(A7)
000014A8 223C 000000FF 772 MOVE.L #PLRCOLOR,D1 ;SET COLOR OF PLAYER
000014AE 103C 0050 773 MOVE.B #80,D0
000014B2 4E4F 774 TRAP #15
000014B4 5200 775 ADDQ.B #1,D0
000014B6 4E4F 776 TRAP #15
000014B8 3239 000027C4 777 MOVE.W (PLRPOSX),D1 ; PLOT THE PLAYER
000014BE 3439 000027C6 778 MOVE.W (PLRPOSY),D2
000014C4 3601 779 MOVE.W D1,D3
000014C6 3802 780 MOVE.W D2,D4
000014C8 0643 001E 781 ADD.W #PLRWIDTH,D3
000014CC 0644 001E 782 ADD.W #PLRHEIGH,D4
000014D0 103C 0058 783 MOVE.B #88,D0
000014D4 4E4F 784 TRAP #15
000014D6 0443 000F 785 SUB.W #PLRWIDTH/2,D3
000014DA 103C 0057 786 MOVE.B #87,D0
000014DE 4E4F 787 TRAP #15
000014E0 788
000014E0 789 ;PLOT EYE OF CHARACTER
000014E0 7200 790 MOVE.L #$00000000,D1 ; SET COLOR
000014E2 103C 0050 791 MOVE.B #80,D0
000014E6 4E4F 792 TRAP #15
000014E8 5200 793 ADDQ.B #1,D0
000014EA 4E4F 794 TRAP #15
000014EC 795
000014EC 3239 000027C4 796 MOVE.W (PLRPOSX),D1 ; SET BOUNDS
000014F2 0641 0014 797 ADD.W #PLRWIDTH-10,D1
000014F6 3639 000027C4 798 MOVE.W (PLRPOSX),D3
000014FC 0643 0018 799 ADD.W #PLRWIDTH-6,D3
00001500 3439 000027C6 800 MOVE.W (PLRPOSY),D2
00001506 5A42 801 ADD.W #PLRHEIGH/2-10,D2
00001508 3839 000027C6 802 MOVE.W (PLRPOSY),D4
0000150E 0644 0009 803 ADD.W #PLRHEIGH/2-6,D4
00001512 103C 0058 804 MOVE.B #88,D0
00001516 4E4F 805 TRAP #15
00001518 806
00001518 807 ; PLOT THE SCORE TEXT
00001518 808m UTLSPEN #PLRTXTCL
00001518 809m ; WRAPPER FOR SET PEN TRAP 15 TASK.
00001518 810m ; INPUT - #PLRTXTCL COLOR IN FORMAT $00BBGGRR
00001518 811m ; OUTPUT - NONE
00001518 812m ; MODIFIES - D0,D1
00001518 813m ; -----------------------------------------------------------------------------
00001524 814m UTLSFIL #$00000000
00001524 815m ; WRAPPER FOR SET FIL TRAP 15 TASK.
00001524 816m ; INPUT - #$00000000 COLOR IN FORMAT $00BBGGRR
00001524 817m ; OUTPUT - NONE
00001524 818m ; MODIFIES - D0,D1
00001524 819m ; -----------------------------------------------------------------------------
0000152C 820m UTLLOCT PLRTXTX,PLRTXTY
0000152C 821m ; WRAPPER TO TEXT POSITIONNING FROM TRAP 15
0000152C 822m ; INPUT - PLRTXTX X, PLRTXTY Y
0000152C 823m ; OUTPUT - NONE
0000152C 824m ; MODIFIES - D0,D1
0000152C 825m ; -----------------------------------------------------------------------------
00001536 43F9 00001550 826 LEA .SCORESTR,A1
0000153C 4281 827 CLR.L D1
0000153E 3239 000027CA 828 MOVE.W (PLRSCORE),D1
00001544 103C 0011 829 MOVE.B #17,D0
00001548 4E4F 830 TRAP #15
0000154A 4CDF 001F 831 MOVEM.L (A7)+,D0-D4
0000154E 4E75 832 RTS
00001550= 53 43 4F 52 45 3A ... 833 .SCORESTR DC.B 'SCORE: ',0
00001558 834
00001558 835
00001558 836
00001558 837
00001558 838
00001558 839
00001558 840
00001558 841
00001558 842
00001558 843
00001558 844
00001558 845
00001558 846
00001558 847
00001558 848
00001558 849
00001558 850
00001558 851
00001558 852
00001558 853
00001558 854
00001558 855
00001558 856
00001558 857
00001558 858
00001558 859
00001558 860
00001558 861
00001558 862
00001558 863
00001558 864
00001558 865
00001558 866
00001558 867
00001558 868
00001558 869
00001558 870
00001558 871
00001558 872
00001558 873
00001558 874
00001558 875 -------------------- end include --------------------
00001558 876 INCLUDE "AGENTLST.X68" ; AGENT LIST MANAGEMENT
00001558 877 ; =============================================================================
00001558 878 ; AGENT MANAGEMENT
00001558 879 ; EACH AGENT HAS A DATA BLOCK FROM DMM AS FOLLOWS:
00001558 880 ; +0 - LONG : UPDATE SUBROUTINE POINTER
00001558 881 ; +4 - LONG : PLOT SUBROUTINE POINTER
00001558 882 ; +8:END : DATA (AGENT SPECIFIC)
00001558 883 ; =============================================================================
00001558 884
00001558 885 ; -----------------------------------------------------------------------------
00001558 886 AGLADD
00001558 887 ; CREATES A NEW AGENT
00001558 888 ; INPUT - A1 - POINTER TO AGENT INIT FUNCTION
00001558 889 ; A2 - POINTER TO AGENT UPDATE FUNCTION
00001558 890 ; A3 - POINTER TO AGENT PLOT FUNCTION
00001558 891 ; D0 - AGENT TYPE (USED AS OWNED BY DMM)
00001558 892 ; D1 - AGENT INITIALIZATION PARAMETER 1
00001558 893 ; D2 - AGENT INITIALIZATION PARAMETER 2
00001558 894 ; D3 - AGENT INITIALIZATION PARAMETER 3
00001558 895 ; OUTPUT - NONE
00001558 896 ; MODIFIES - NONE
00001558 897 ; -----------------------------------------------------------------------------
00001558 2F08 898 MOVE.L A0,-(A7)
0000155A 4EB8 1224 899 JSR DMMALLOC
0000155E B1FC 00000000 900 CMP.L #0,A0
00001564 6700 0008 901 BEQ .END
00001568 20CA 902 MOVE.L A2,(A0)+
0000156A 20CB 903 MOVE.L A3,(A0)+
0000156C 4E91 904 JSR (A1)
0000156E 205F 905 .END MOVE.L (A7)+,A0
00001570 4E75 906 RTS
00001572 907
00001572 908 ; -----------------------------------------------------------------------------
00001572 909 AGLUPD
00001572 910 ; UPDATES THE AGENT LIST. PRIOR TO CALLING THE UPDATE FUNCTIONS, A0 IS SET
00001572 911 ; TO THE DATA BLOCK OF THE CORRESPONDING SLOT.
00001572 912 ; INPUT - NONE
00001572 913 ; OUTPUT - NONE
00001572 914 ; MODIFIES - NONE
00001572 915 ; -----------------------------------------------------------------------------
00001572 48E7 00C0 916 MOVEM.L A0-A1,-(A7)
00001576 4EB8 11B4 917 JSR DMMFIRST
0000157A B1FC 00000000 918 .LOOP CMP.L #0,A0
00001580 6700 000E 919 BEQ .END
00001584 2250 920 MOVE.L (A0),A1
00001586 5088 921 ADD.L #8,A0
00001588 4E91 922 JSR (A1)
0000158A 4EB8 11D6 923 JSR DMMNEXT
0000158E 60EA 924 BRA .LOOP
00001590 4CDF 0300 925 .END MOVEM.L (A7)+,A0-A1
00001594 4E75 926 RTS
00001596 927
00001596 928 ; -----------------------------------------------------------------------------
00001596 929 AGLPLOT
00001596 930 ; PLOTS THE AGENT LIST. PRIOR TO CALLING THE UPDATE FUNCTIONS, A0 IS SET
00001596 931 ; TO THE DATA BLOCK OF THE CORRESPONDING SLOT.
00001596 932 ; INPUT - NONE
00001596 933 ; OUTPUT - NONE
00001596 934 ; MODIFIES - NONE
00001596 935 ; -----------------------------------------------------------------------------
00001596 48E7 00C0 936 MOVEM.L A0-A1,-(A7)
0000159A 4EB8 11B4 937 JSR DMMFIRST
0000159E B1FC 00000000 938 .LOOP CMP.L #0,A0
000015A4 6700 0010 939 BEQ .END
000015A8 2268 0004 940 MOVE.L 4(A0),A1
000015AC 5088 941 ADD.L #8,A0
000015AE 4E91 942 JSR (A1)
000015B0 4EB8 11D6 943 JSR DMMNEXT
000015B4 60E8 944 BRA .LOOP
000015B6 4CDF 0300 945 .END MOVEM.L (A7)+,A0-A1
000015BA 4E75 946 RTS
000015BC 947
000015BC 948 ; -----------------------------------------------------------------------------
000015BC =0000123E 949 AGLKILL EQU DMMFREE
000015BC 950 ; KILLS THE AGENT BY RELEASING ITS MEMORY
000015BC 951 ; INPUT - A0 POINTER WITHIN THE AGENT MEMORY
000015BC 952 ; OUTPUT - NONE
000015BC 953 ; MODIFIES - NONE
000015BC 954 ; NOTE - IT IS JUST A WRAPPER FOR DMMFREE
000015BC 955 ; -----------------------------------------------------------------------------
000015BC 956
000015BC 957
000015BC 958 -------------------- end include --------------------
000015BC 959 INCLUDE "PIPE.X68" ; ASTEROID AGENT MANAGEMENT
000015BC 960 ; =============================================================================
000015BC 961 ; ASTEROID MANAGEMENT. IT IS AN AGENT.
000015BC 962 ; LOCAL MEMORY IS:
000015BC 963 ; +0 WORD X COORDINATE
000015BC 964 ; +2 WORD Y COORDINATE
000015BC 965 ; +4 WORD X SPEED
000015BC 966 ; +6 WORD Y SPEED
000015BC 967 ; +8 WORD PIPE SCORE
000015BC 968 ; =============================================================================
000015BC 969
000015BC 970 ; -----------------------------------------------------------------------------
000015BC 971 PIPINIT
000015BC 972 ; INITALIZES A PIPE
000015BC 973 ; INPUT - A0 POINTER TO THE LOCAL MEMORY
000015BC 974 ; OUTPUT - NONE
000015BC 975 ; MODIFIES - NONE
000015BC 976 ; NOTE - ASSUMES SCRHEIGH IS GREATER THAN 255
000015BC 977 ; -----------------------------------------------------------------------------
000015BC 3F00 978 MOVE.W D0,-(A7)
000015BE 4268 0008 979 CLR.W 8(A0) ; PIPE SCORED
000015C2 5279 000027D8 980 ADDQ.W #1,(PIPCOUNT) ; NUMBER OF PIPES +1
000015C8 30BC 0280 981 MOVE.W #SCRWIDTH,(A0) ; X POSITION
000015CC 4EB8 1290 982 JSR UTLRAND
000015D0 3140 0002 983 MOVE.W D0,2(A0) ; Y POSITION (PSEUDO-RANDOM)
000015D4 317C 0005 0004 984 MOVE.W #PIPXSPD,4(A0) ; X SPEED (PSEUDO-RANDOM)
000015DA 3039 000027D8 985 MOVE.W (PIPCOUNT),D0
000015E0 48C0 986 EXT.L D0
000015E2 C0BC 0000FFFF 987 AND.L #$0000FFFF,D0
000015E8 0C79 00FA 000027CA 988 CMP.W #250,(PLRSCORE)
000015F0 6C00 0034 989 BGE .YMOVE ; IF PIPES>=20: ALL MOVING PIPES
000015F4 0C79 0064 000027CA 990 CMP.W #100,(PLRSCORE)
000015FC 6500 000E 991 BLO .EASY
00001600 0800 0000 992 BTST #0,D0 ; WHILE 300>SCORE>=150: 1/2 MOVING PIPE
00001604 6700 0020 993 BEQ .YMOVE
00001608 6000 0012 994 BRA .YNOTMOV
0000160C 0800 0001 995 .EASY BTST #1,D0 ; WHILE SCORE<15: 1/4 MOVING PIPE
00001610 6600 000A 996 BNE .YNOTMOV