-
Notifications
You must be signed in to change notification settings - Fork 2
/
+Monitor.s
4291 lines (4125 loc) · 83.7 KB
/
+Monitor.s
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
;_____________________________________________________________________________
;.............................................................................
;...................................................................2222222...
;................................................................22222222220..
;...................................................222........222222.....222.
;..............................................2202222222222..22000...........
;..................................22000.....20222222222200000200002..........
;.................................2002202...2222200222.220000000200000000022..
;....................220002......22222200..2200002.......2200000...20000000000
;....................22222202....2220000022200000..........200002........20000
;.....200000.........2222200000222200220000000002..........200002........20000
;.....00222202........2220022000000002200002000002........2000002000020000000.
;....2222200000.......220002200000002.2000000000000222222000000..2000000002...
;....220000200002......20000..200002..220000200000000000000002.......22.......
;...2220002.2200002....220002...22.....200002..0000000000002..................
;...220000..222000002...20000..........200000......2222.......................
;...000000000000000000..200000..........00002.................................
;..220000000022020000002.200002.........22......._____________________________
;..0000002........2000000220022.................|
;.200000............2002........................| MONITOR
;.200002........................................|
;220002.........................................|_____________________________
;_____________________________________________________________________________
;
Include "+Debug.s"
IFEQ Debug=2
Include "+AMOS_Includes.s"
Include "+Version.s"
ENDC
;_____________________________________________________________________________
; Branchements internes au moniteur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MDebut dc.l In_Editor-MDebut 0- Depuis l'editeur
dc.l In_Program-MDebut 1- Depuis le programme
dc.l MonitorChr-MDebut 2- Entree du moniteur
dc.l 0
; Equates internes au moniteur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ttt_MinTy equ 8
Ttt_MaxTy equ 16
* Numéro des ecrans
Tt_Ecran1 equ EcEdit
Tt_Ecran2 equ EcFonc
E1_Sx equ 640
E1_Sy equ 116
E2_Sx equ 640
E2_MinY equ 128
; Position de base des boutons
BtX equ 384
BtY equ 35
RedX equ 16
RedY equ 9
RedTX equ 320
RedTY equ 100
BoutInfos equ 12
NBoutons equ 16
Tjsr MACRO
jsr \1
move.l Mon_Base(a5),a4
ENDM
; ------------------------------------
;-------------------------------------- Zone de donnees spécifique TUTOR
; ------------------------------------
Tt_ChannelN equ $BBCCDDEE
Inf_Size equ 88*100 ; 100 lignes max
RsReset
Inf_Sly rs.w 1
Inf_Slp1 rs.w 1
Inf_Slp2 rs.w 1
Inf_Pos rs.l 1
Inf_YPos rs.w 1
Inf_AlertOn rs.w 1
Inf_NLigne rs.w 1
Inf_Buf rs.l 1
Tt_Dialogs rs.l 1
Tt_CurBanks rs.l 1
Tt_CurDialogs rs.l 1
Tt_Channel rs.l 1
Tt_Variables rs.l 1
Tt_Resource rs.l 1
Tt_Program rs.l 1
Tt_JError rs.l 1
Tt_PrgHelp rs.l 1
Tt_Init rs.w 1
Tt_View rs.w 1
Tt_ViewTX rs.w 1
Tt_ViewTY rs.w 1
Tt_ViewNP rs.w 1
Tt_ViewAd rs.l 1
Tt_Active rs.w 1
Tt_Accel rs.w 1
Tt_Ecran rs.w 1
Tt_YMark rs.w 1
Tt_X1Mark rs.w 1
Tt_X2Mark rs.w 1
Tt_YInfo rs.w 1
Tt_X1Info rs.w 1
Tt_X2Info rs.w 1
Tt_XNext rs.w 1
Tt_YNext rs.w 1
Tt_PLine rs.l 1
Tt_ALine rs.l 1
Tt_EvPile rs.l 1
Tt_EvDebut rs.l 1
Tt_InfOn rs.w 1
Tt_DCurLine rs.l 1
Tt_Run rs.w 1
Tt_MapAdr rs.l 1
Tt_MapLong rs.l 1
Tt_MKey rs.w 1
Tt_MFlag rs.w 1
Tt_Adress rs.l 1
Tt_Locked rs.w 1
Tt_CurLigne rs.l 1
Tt_DebProc rs.l 1
Tt_NotHere rs.b 1
rs.b 1
Tt_BufT rs.l 1
Tt_Ligne rs.l 1
Ttt_BufE rs.l 1
Ttt_XPos rs.w 1
Ttt_YPos rs.w 1
Ttt_Sy rs.w 1
Ttt_Tlh rs.w 1
Ttt_Mode rs.w 1
Ttt_Tlb rs.w 1
ttsl_hp1 rs.w 1
ttsl_hp2 rs.w 1
ttsl_vp1 rs.w 1
ttsl_vp2 rs.w 1
Step_Data rs.l 10
Step_Break rs.l 1
Step_Stop rs.w 1
Step_Mess rs.l 1
Step_Mode rs.w 1
Hlp_Map rs.l 1
Hlp_LMap rs.l 1
Hlp_Texte rs.l 1
Hlp_LTexte rs.l 1
ViewScrols rs.w 4*8
Tt_DzLong equ __RS
; ___________________________________________________________________
;
; BOUCLE PRINCIPALE
; ___________________________________________________________________
;
; Entree du moniteur par l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In_Editor
move.l Edt_Runned(a5),a3 Le programme courant
move.l Edt_Prg(a3),a3 Structure programme
bsr Tt_ColdStart
bne .OMem
clr.w Tt_Run(a4)
bra.s Tt_Tests
.OMem rts
; Entree du moniteur par le programme
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In_Program
movem.l a3-a6/d6/d7,-(sp)
move.l Mon_Base(a5),d0
bne.s .DejaLa
move.l Prg_Runned(a5),a3
bsr Tt_ColdStart
bne.s .Out
move.w #1,Tt_Init(a4)
move.w #1,Tt_Run(a4)
lea Tt_Error(pc),a0 Erreur>>> se branche au moniteur
move.l a0,Prg_JError(a5)
.Ok moveq #0,d0
.Out movem.l (sp)+,a3-a6/d6/d7
rts
.DejaLa move.l d0,a0
addq.w #1,Step_Stop(a0)
bra.s .Ok
; Boucle de tests du moniteur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Tests
move.l Mon_Base(a5),a4
clr.w Tt_Active(a4)
Tt_ReLoop
bsr Tt_TtBanks
move.l Tt_Program(a4),a3
bsr View_Act
clr.w Tt_Accel(a4)
tst.w Tt_Active(a4)
beq.s Tt_Loop
.loop bsr Tt_Multi
bsr Tt_MBout
btst #0,d1
beq.s .Out
SyCall GetZone
cmp.w #Tt_Ecran1,d1
bne.s .Out
swap d1
cmp.w Tt_Active(a4),d1
beq.s .loop
.Out move.w Tt_Active(a4),d0
clr.w Tt_Active(a4)
moveq #0,d1
bsr ABouton
Tt_Loop
; Attente multitache
bsr Tt_Multi
; Gestion des zones actives!
bsr Tt_MBout
move.w d1,Tt_MKey(a4)
and.w #$03,d1 Bouton de gauche--> normal
beq Tt_ReLoop
bsr Ttt_InfAct
bsr Ttt_AlertDel Enleve les alertes
bsr View_Act
SyCall GetZone
cmp.w #Tt_Ecran2,d1
beq Ttt_E2
cmp.w #Tt_Ecran1,d1
bne Tt_DBL
swap d1
tst.w d1
beq Tt_DBL
move.w d1,d0
; Touches HELP/BREAK/EVAL?
cmp.w #14,d0
bcc.s .Skip
cmp.w Tt_Active(a4),d1
beq.s .Skip
; Active la touche
tst.w Tt_Active(a4)
bne Tt_ReLoop
move.w d1,Tt_Active(a4)
moveq #1,d1
bsr ABouton
; Appel des fonctions
.Skip lsl.w #2,d0
lea Tt_Bra-4(pc),a0
jsr 0(a0,d0.w)
bne Tt_ReLoop
bra Tt_Loop
; Ecran de texte
; ~~~~~~~~~~~~~~~~~~~~
Ttt_E2 swap d1
subq.w #1,d1
bmi Tt_ReLoop
move.w d1,-(sp)
bsr Ttt_TttAct
move.w (sp)+,d1
lsl.w #2,d1
lea Ttt_Bra(pc),a0
jsr 0(a0,d1.w)
bra Tt_ReLoop
; Une zone DBL?
; ~~~~~~~~~~~~~~~~~~~
Tt_DBL moveq #1,d0
JJsr L_Dia_AutoTest2
move.l #Tt_ChannelN,d0
JJsr L_Dia_GetReturn
lsl.w #2,d1
beq Tt_ReLoop
move.w d1,-(sp)
bsr Ttt_TttAct
move.w (sp)+,d1
lea J_DBL(pc),a0
jsr -4(a0,d1.w)
bra Tt_ReLoop
; Table des sauts
; ~~~~~~~~~~~~~~~~~~~~~
Tt_Bra
bra Tt_Rien 1: STOP, teste separement
bra Tt_Step0 2: mode pas a pas
bra Tt_Step1 3: mode semi-rapide
bra Tt_Step2 4: mode rapide
bra Tt_Step3 5: mode ultra-rapide
bra Tt_Up 6:
bra Tt_Down 7:
bra Tt_Left 8:
bra Tt_Right 9:
bra Tt_CEc 10: Change ecran
bra Tt_Initialise 11: Init
bra Tt_Quit 12: Quit
bra Tt_See 13: Voir l'affichage
bra Tt_SHelp 14: Set Help
bra Tt_SBreak 15: Set break
bra Tt_SEval 16: Set evalue
Tt_Rien rts
Ttt_Bra bra Ttt_ListClic 1 : Zone de listing
bra Ttt_Separ 2 : Zone de separation
bra Inf_Clic 3 : Zone d'information
J_DBL bra Ttt_Slhclic 1 : Slider horizontal
bra Ttt_Slvclic 2 : Slider vertical
bra Inf_Sliclic 3 : Slider infos
bra Ttt_CText 4 : Bouton de centrage
; ___________________________________________________________________
;
; INITIALISATION GENERALE
; ___________________________________________________________________
;
Tt_ColdStart
; Reservation de la zone de datas
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.l #Tt_DzLong,d0
SyCall MemFastClear
beq .Out
move.l a0,a4
move.l a0,Mon_Base(a5)
; Init de donnees
; ~~~~~~~~~~~~~~~
move.l a3,Tt_Program(a4)
move.l Cur_Banks(a5),Tt_CurBanks(a4)
move.l Cur_Dialogs(a5),Tt_CurDialogs(a4)
move.w #-1,Tt_Ecran(a4)
move.w #-1,Tt_View(a4)
move.w #-1,Tt_YMark(a4)
move.w #-1,Tt_YNext(a4)
clr.b Tt_NotHere(a4)
move.w Ed_Sy(a5),d0
sub.w #E1_Sy,d0
tst.b Ed_Inter(a5)
beq.s .S0
sub.w #E1_Sy,d0
.S0 and.w #$FFF0,d0
cmp.w #E2_MinY,d0
bcc.s .Skip
move.w #E2_MinY,d0
.Skip move.w d0,Ttt_Sy(a4)
; Reservation des autres buffers
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lsr.w #3,d0 Buffer d'edition
mulu #256,d0
SyCall MemFastClear
beq .Out
move.l a0,Ttt_BufE(a4)
move.l #1024+512,d0 Buffer Tokenisation / Lignes
SyCall MemFastClear
beq .Out
move.l a0,Tt_BufT(a4)
lea 512(a0),a0
move.l a0,Tt_Ligne(a4)
move.l #Inf_Size,d0 Buffer infos
SyCall MemFastClear
beq .Out
move.l a0,Inf_Buf(a4)
; Trouve l'adresse de la banque de resource
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bsr Tt_TtBanks
moveq #16,d0
JJsr L_Bnk.GetAdr
beq .Out
move.l a0,Tt_Resource(a4)
; Ouvre l'écran du haut
; ~~~~~~~~~~~~~~~~~~~~~
moveq #Tt_Ecran1,d0
move.l #E1_Sx,d1
move.l #E1_Sy,d2
moveq #0,d3
moveq #0,d4 Force non interlaced!
move.l Tt_Resource(a4),a0
add.l 2(a0),a0
JJsrR L_Dia_RScOpen,a1
bne .Out
move.l T_EcCourant(a5),a0
move.w Ed_Wy(a5),EcAWY(a0)
SyCalD ResZone,NBoutons
bne .Out
; Affiche les boutons
; ~~~~~~~~~~~~~~~~~~~
moveq #1,d0
moveq #0,d1
moveq #0,d2
bsr Tt_UPack
bsr ABoutons
bsr Tt_SEval
bsr View_Cls
bsr TtReCop
; Ouvre l'ecran du bas
; ~~~~~~~~~~~~~~~~~~~~
moveq #Tt_Ecran2,d0
move.l #E2_Sx,d1
move.w Ttt_Sy(a4),d2
ext.l d2
moveq #0,d3
moveq #0,d4 Interlaced?
move.b Ed_Inter(a5),d4
move.l Ed_Resource(a5),a0
add.l 2(a0),a0
JJsrR L_Dia_RScOpen,a1
bne .Out
move.l T_EcCourant(a5),a0
move.w Ed_Wy(a5),EcAWY(a0)
add.w #E1_Sy,EcAWY(a0)
SyCalD ResZone,4
bne .Out
WiCalA Print,Ttt_WInit(pc)
; Ouvre le DBL
lea DBL(pc),a0 Programme d'essai!
move.l Ed_Resource(a5),a1
add.l 2(a1),a1
move.l #Tt_ChannelN,d0 Numero du canal
move.l #512,d1 Buffer
moveq #12,d2 Nombre de variables
moveq #0,d3 Ne PAS recopier
JJsrR L_Dia_OpenChannel,a2
tst.l d0 Une erreur?
bne .Out
move.l a0,Tt_Channel(a4)
move.l a1,Tt_Variables(a4)
; Initialisation du fond
move.w Ttt_Sy(a4),d0
lsr.w #1,d0
addq.w #8,d0
bsr Ttt_SetSize
bsr Ttt_Cls
bne .Out
bsr Ttt_NewBuf
move.l Inf_Buf(a4),a0
move.l a0,Inf_Pos(a4)
moveq #5,d0
bsr Tt_Message
move.l a0,-(sp)
moveq #2,d0
bsr Inf_PrDeb
bsr Inf_Print
bsr Inf_PrFin
move.l (sp)+,a0
moveq #4,d0
bsr Inf_PrDeb
bsr Inf_Print
bsr Inf_PrFin
; Poke les patches
lea TstPatch(pc),a0
move.l a0,ExtTests+4(a5)
lea Tt_PScFront(pc),a0
move.l a0,Patch_ScFront(a5)
lea Tt_PScCopy(pc),a0
move.l a0,Patch_ScCopy(a5)
move.w #L_Mon_MonitorChr,d0 Branche le moniteur
JJsr L_SetChrPatch
move.l Prg_JError(a5),Tt_JError(a4)
bsr Set_WPatch
; Branche les interruptions couleurs...
lea VblRout(a5),a0
.loopI tst.l (a0)+
bne.s .loopI
lea View_Inter(pc),a1
move.l a1,-4(a0)
; Prepare les affichage des ecrans
bsr View_ScUpdate
bsr View_Act
bsr View_Aff
; Force la souris...
bsr Tt_Mouse
; Verifie, au moins 4K de chip
move.l a6,-(sp)
move.l #Public|Chip,d1
move.l $4.w,a6
jsr _LVOAvailMem(a6)
move.l (sp)+,a6
cmp.l #1024*4,d0
bcs.s .Out
; Fin, pas d'erreur, flag moniteur present!
bsr TtReCop
moveq #0,d0
rts
; Out of mem!
.Out bsr Tt_Free
bsr Tt_MonFree
moveq #1,d0
rts
; Effacement de la zone de donnee monitor
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_MonFree
move.l Mon_Base(a5),d0
beq.s .Skip
move.l d0,a1
move.l #Tt_DzLong,d0
SyCall MemFree
.Skip rts
; Effacement des donnees
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Free move.l Mon_Base(a5),d0
beq .PaInit
move.l d0,a4
bsr Del_WPatch
moveq #0,d0
JJsr L_SetChrPatch
clr.l ExtTests+4(a5)
bclr #1,T_Actualise+1(a5)
bclr #1,ActuMask+1(a5)
clr.l Patch_Menage(a5)
clr.l Patch_Errors(a5)
clr.l Patch_ScFront(a5)
clr.l Patch_ScCopy(a5)
move.l Tt_JError(a4),Prg_JError(a5)
; Enleve les interruptions
lea VblRout(a5),a0
lea View_Inter(pc),a1
moveq #8-1,d0
.loopI cmp.l (a0)+,a1
dbeq d0,.loopI
tst.w d0
bmi.s .Sk
clr.l -4(a0)
; Enleve le canal DBL
.Sk bsr Tt_TtBanks
move.l #Tt_ChannelN,d0 Numero du canal
JJsr L_Dia_CloseChannel
; Enleve les ecrans
EcCalD Del,Tt_Ecran1
EcCalD Del,Tt_Ecran2
; Enleve les buffers
bsr Hlp_FreeMap Enleve les HELP
move.l Ttt_BufE(a4),d0
beq.s .B1
move.l d0,a1
move.w Ttt_Sy(a4),d0
lsr.w #3,d0 Buffer d'edition
mulu #256,d0
SyCall MemFree
.B1 move.l Tt_BufT(a4),d0
beq.s .B2
move.l d0,a1
move.l #1024+512,d0 Buffer Tokenisation / Lignes
SyCall MemFree
.B2 move.l Inf_Buf(a4),d0
beq.s .B3
move.l d0,a1
move.l #Inf_Size,d0 Buffer infos
SyCall MemFree
.B3
; Remet les banques du programme, et basta!
.PaInit bsr Tt_PrgBanks
rts
; TOUCHE: quit/ Retour à l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Quit
; Si Break Off >>> on peut pas!!!
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tst.w Tt_Init(a4)
ble.s .Quit
move.w ActuMask(a5),d0
btst #BitControl,d0
bne.s .Quit
moveq #7,d0
bsr Tt_Message
bsr Ttt_Alert
bsr Ttt_InfAct
bra Inf_AffAll
.Quit
; Effacement de tous les buffers
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bsr Tt_Free
bsr TtReCop
; Retour à l'editeur ou au programme???
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.l a4,a1
move.l #Tt_DzLong,d0
clr.l Mon_Base(a5)
tst.w Tt_Run(a4)
bne.s .torun
; Retour à l'éditeur
.parun SyCall MemFree Plus de datazone
clr.l Prg_Runned(a5) Plus de programme courant
JJsr L_Includes_Clear Libere la memoire
JJsr L_ClearVar
move.l #1000,d0 Fait un EDIT
sub.l a0,a0
move.l Prg_JError(a5),a1
jmp (a1)
; Retour au programme
.torun tst.w Tt_Init(a4)
ble.s .parun
move.l BasSp(a5),sp
move.l Prg_InsRet(a5),-(sp)
lea Step_Data(a4),a0
move.l (a0)+,-(sp)
movem.l (a0),a3-a6/d4-d5/d6-d7
SyCall MemFree
move.w ScOn(a5),d1
beq.s .skip
subq.w #1,d1
EcCall Active
.skip move.l d4,d0
move.l d5,d1
rts
;
; Actualisation des ecrans
TtReCop SyCall WaitVbl
EcCall CopForce
rts
; Montre les deux ecrans
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Show moveq #0,d2
bra.s Tth
; Cache les deux ecrans
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Hide moveq #-1,d2 Ne PAS changer!
Tth movem.l d0-d7/a0-a4,-(sp)
move.l Mon_Base(a5),a0
cmp.b Tt_NotHere(a0),d2 D2=0 si show, -1 si hide!
beq.s .Skip
move.b d2,Tt_NotHere(a0)
EcCalD EHide,Tt_Ecran1
EcCalD EHide,Tt_Ecran2
bsr TtReCop
.Skip movem.l (sp)+,d0-d7/a0-a4
rts
; Force la souris en marche
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tt_Mouse
movem.l d0-d7/a0-a3,-(sp)
SyCall Show,-1
moveq #64,d1 Nouvelles limites
moveq #30,d2
move.l #510,d3
move.l #312,d4
move.l #$01234567,d5 Magic!
SyCall LimitM
movem.l (sp)+,d0-d7/a0-a3
rts
; ___________________________________________________________________
;
; PATCH SUR AMOS.LIBRARY
; ___________________________________________________________________
;
; Branche le patch sur W
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set_WPatch
move.l a0,-(sp)
lea Old_EcVect(pc),a0
move.l T_EcVect(a5),(a0)
lea Old_SyVect(pc),a0
move.l T_SyVect(a5),(a0)
lea EcIn(pc),a0
move.l a0,T_EcVect(a5)
lea SyIn(pc),a0
move.l a0,T_SyVect(a5)
move.l (sp)+,a0
rts
; Enleve le patch sur W
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Del_WPatch
move.l a0,-(sp)
lea Old_EcVect(pc),a0
tst.l (a0)
beq.s .Skip1
move.l (a0),T_EcVect(a5)
clr.l (a0)
.Skip1 lea Old_SyVect(pc),a0
tst.l (a0)
beq.s .Skip2
move.l (a0),T_SyVect(a5)
clr.l (a0)
.Skip2 move.l (sp)+,a0
rts
; Patch des fonctions W ecrans...
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EcIn bsr TT_WPatch RAZ
bsr TT_WPatch2 Copper
bsr TT_WPatch2 Libre
bsr TT_WPatchC Cree
bsr TT_WPatch Del
bsr TT_WPatch First
bsr TT_WPatch Last
bsr TT_WPatch Active
bsr TT_WPatch2 Forcecop
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch 5 Fonctions de securite!
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
bsr TT_WPatch
; Restore les ecrans puis appelle
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_WPatch2
bsr.s Tt_first
; Patch normal...
; ~~~~~~~~~~~~~~~~~~~~~
TT_WPatch
move.l a0,-(sp)
move.l 4(sp),a0
sub.l T_EcVect(a5),a0
subq.l #4,a0
add.l Old_EcVect(pc),a0
move.l a0,4(sp)
move.l (sp)+,a0
rts
; Appelle puis restore les ecrans
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_WPatch1
move.l (sp)+,a0
sub.l T_EcVect(a5),a0
subq.l #4,a0
add.l Old_EcVect(pc),a0
jsr (a0)
; Routine: met les deux en premier...
Tt_first
movem.l a0-a6/d0-d7,-(sp)
move.l Old_EcVect(pc),a0 * Ecran Tutor1
moveq #Tt_Ecran1,d1
jsr First*4(a0)
move.l Old_EcVect(pc),a0 * Ecran Tutor2
moveq #Tt_Ecran2,d1
jsr First*4(a0)
move.l Old_EcVect(pc),a0 * Ecran FSEL
moveq #EcFsel,d1
jsr First*4(a0)
move.l Old_EcVect(pc),a0 * Ecran Requester
moveq #EcReq,d1
jsr First*4(a0)
movem.l (sp)+,a0-a6/d0-d7
tst.l d0
rts
; Patch pour CREATION ecran
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_WPatchC
; Appelle
move.l (sp)+,a0
sub.l T_EcVect(a5),a0
subq.l #4,a0
add.l Old_EcVect(pc),a0
jsr (a0)
bne.s .Err
; Change les tables du TUTOR
movem.l a0/a1/d0/d1,-(sp)
move.w EcNumber(a0),d1
cmp.w #8,d1
bcc.s .skuo
lsl.w #3,d1
move.l Mon_Base(a5),a1
lea ViewScrols(a1),a1
add.w d1,a1
clr.l (a1)
move.w EcTx(a0),4(a1)
move.w EcTy(a0),d0
tst.w EcCon0(a0)
bmi.s .skip
lsr.w #1,d0
.skip move.w d0,6(a1)
.skuo movem.l (sp)+,a0/a1/d0/d1
; Ok!
.Err tst.w d0
rts
; Patch des fonctions W systeme
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SyIn: bsr TT_SPatch ClInky ;0
bsr TT_SPatch ClVide ;1
bsr TT_SPatch ClSh ;2
bsr TT_SPatch ClInst ;3
bsr TT_SPatch ClKeyM ;4
bsr TT_SPatch ClJoy ;5
bsr TT_SPatch ClPutK ;6
bsr TT_SPatch MHide ;7
bsr TT_SPatch MShow ;8
bsr TT_SPatch MChange ;9 - ChMouse
bsr TT_SPatch MXy ;10- XY Mouse
bsr TT_SPatch CXyHard ;11- Conversion SCREEN-> HARD
bsr TT_SXyScr CXyScr ;12- Conversion HARD-> SCREEN
bsr TT_SPatch MBout ;13
bsr TT_SPatch MSetAb ;14
bsr TT_SGSIn GetSIn ;15- Get screen IN
bsr TT_SPatch CXyWi ;16- Conversion SCREEN-> WINDOW courante
bsr TT_SPatch MLimA ;17- Limit mouse
bsr TT_SZoHd SyZoHd ;18- Zone coordonnees HARD
bsr TT_SPatch SyResZ ;19- Reserve des zones
bsr TT_SPatch SyRazZ ;20- Effacement zones
bsr TT_SPatch SySetZ ;21- Set zone
bsr TT_SPatch SyMouZ ;22- Zone souris!
bsr TT_SPatch WVbl ;23
bsr TT_SPatch HsSet ;24- Affiche un hard sprite
bsr TT_SPatch HsUSet ;25- Efface un hard sprite
bsr TT_SPatch ClFFk ;26
bsr TT_SPatch ClGFFk ;27
bsr TT_SPatch HsAff ;28- Recalcule les hard sprites
bsr TT_SPatch HsBank ;29- Fixe la banque de sprites
bsr TT_SPatch HsNXYA ;30- Instruction sprite
bsr TT_SPatch HsXOff ;31- Sprite off n
bsr TT_SPatch HsOff ;32- All sprite off
bsr TT_SPatch HsAct ;33- Actualisation HSprite
bsr TT_SPatch HsSBuf ;34- Set nombre de lignes
bsr TT_SPatch HsStAct ;35- Arrete les HS sans deasctiver!
bsr TT_SPatch HsReAct ;36- Re-Active tous!
bsr TT_SPatch MStore ;37- Stocke etat souris / Show on
bsr TT_SPatch MRecall ;38- Remet la souris
bsr TT_SPatch HsPri ;39- Priorites SPRITES/PLAYFIELD
bsr TT_SPatch TokAMAL ;40- Tokenise AMAL
bsr TT_SPatch CreAMAL ;41- Demarre AMAL
bsr TT_SPatch MvOAMAL ;42- On/Off/Freeze AMAL
bsr TT_SPatch DAllAMAL ;43- Enleve TOUT!
bsr TT_SPatch Animeur ;44- Un coup d'animation
bsr TT_SPatch RegAMAL ;45- Registre!
bsr TT_SPatch ClrAMAL ;46- Clear
bsr TT_SPatch FrzAMAL ;47- FREEZE all
bsr TT_SPatch UFrzAMAL ;48- UNFREEZE all
bsr TT_SPatch BobSet ;49- Entree set bob
bsr TT_SPatch BobOff ;50- Arret bob
bsr TT_SPatch BobSOff ;51- Arret tous bobs
bsr TT_SPatch BobAct ;52- Actualisation bobs
bsr TT_SPatch BobAff ;53- Affichage bobs
bsr TT_SPatch BobEff ;54- Effacement bobs
bsr TT_SPatch ChipMM ;55- Reserve CHIP
bsr TT_SPatch FastMM ;56- Reserve FAST
bsr TT_SPatch BobLim ;57- Limite bobs!
bsr TT_SPatch SyZoGr ;58- Zone coord graphiques
bsr TT_SPatch GetBob ;59- Saisie graphique
bsr TT_SPatch Masque ;60- Calcul du masque
bsr TT_SPatch SpotH ;61- Fixe le point chaud
bsr TT_SPatch BbColl ;62- Collisions bob
bsr TT_SPatch GetCol ;63- Fonction collision
bsr TT_SPatch SpColl ;64- Collisions sprites
bsr TT_SPatch SyncO ;65- Synchro on/off
bsr TT_SPatch Sync ;66- Synchro step
bsr TT_SPatch SetPlay ;67- Set play direction...
bsr TT_SPatch BobXY ;68- Get XY Bob
bsr TT_SPatch HsXY ;69- Get XY Sprite
bsr TT_SPatch BobPut ;70- Put Bob!
bsr TT_SPatch TPatch ;71- Patch icon/bob!
bsr TT_SPatch MRout ;72- Souris relachee
bsr TT_SPatch MLimEc ;73- Limit mouse ecran
bsr TT_SPatch FreeMM ;74- Libere mem
bsr TT_SPatch HColSet ;75- Set HardCol
bsr TT_SPatch HColGet ;76- Get HardCol
bsr TT_SPatch TMovon ;77- Movon!
bsr TT_SPatch TKSpeed ;78- Key speed
bsr TT_SPatch TChanA ;79- =ChanAn
bsr TT_SPatch TChanM ;80- =ChanMv
bsr TT_SPatch TPrio ;81- Set priority
bsr TT_SPatch TGetDisc ;82- State of disc drive
bsr TT_SPatch Add_VBL ;83- Restart VBL
bsr TT_SPatch Rem_VBL ;84- Stop VBL
bsr TT_SPatch ClKwait ;85- Une touche en attente?
bsr TT_SPatch WMouScrFront ;86- Coordonnees souris devant ILLEGAL
bsr TT_SPatch WMemReserve ;87- (P) Reservation memoire secure
bsr TT_SPatch WMemFree ;88- (P) Liberation memoire secure
bsr TT_SPatch WMemCheck ;89- (P) Verification memoire
bsr TT_SPatch WMemFastClear ;90- (P)
bsr TT_SPatch WMemChipClear ;91-
bsr TT_SPatch WMemFast ;92-
bsr TT_SPatch WMemChip ;93-
bsr TT_SPatch ;94-
bsr TT_SPatch ;95-
bsr TT_SPatch ;96-
bsr TT_SPatch ;97-
bsr TT_SPatch ;98-
bsr TT_SPatch ;99-
bsr TT_SPatch ;100-
; Patch systeme normal...
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_SPatch
move.l a0,-(sp)
move.l 4(sp),a0
sub.l T_SyVect(a5),a0
subq.l #4,a0
add.l Old_SyVect(pc),a0
move.l a0,4(sp)
move.l (sp)+,a0
rts
; Patch fonction XyScr
; ~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_SXyScr
bsr TT_SHere
bne TT_SPatch
move.l a4,(sp)
move.l Mon_Base(a5),a4
bsr TT_Hard2Screen
movem.l (sp)+,a4
bpl.s .Skip
moveq #0,d1
moveq #0,d2
.Skip moveq #0,d0
rts
; Patch fonction Zone Hard
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_SZoHd
bsr TT_SHere
bne TT_SPatch
move.l a4,(sp)
move.l Mon_Base(a5),a4
bsr TT_Hard2Screen
move.l (sp)+,a4
bmi.s .Out
moveq #8,d5
move.l Old_SyVect(pc),a0
jsr ZoGr*4(a0)
.Skip rts
.Out moveq #0,d1
moveq #0,d0
rts
; Patch fonction GetSCin
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TT_SGSIn
bsr TT_SHere
bne TT_SPatch
move.l a4,(sp)