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
|
**************************************************************************
** **
** MYEXEC - Verschiedene Routinen die so manches Programm braucht **
** **
** by Christian A. Weber, Zurich/Switzwerland **
** **
**************************************************************************
** **
** Version 4.4, 16-Apr-92 **
** **
**************************************************************************
OPT O+,OW-,O5-
INCLUDE "exec/types.i"
STRUCTURES_I SET 1 ; Damit's kein Chaos gibt ;-)
PP_SAVEMARGIN: EQU 32 ; Anzahl PowerPacker-Sicherheitsbytes
**************************************************************************
* Beispiel: SYSCALL AllocMem
SYSCALL: MACRO
XREF _MyExecBase
MOVE.L A6,-(SP)
MOVEA.L _MyExecBase,A6
JSR meb_\1(A6)
MOVEA.L (SP)+,A6
ENDM
**************************************************************************
* Beispiel: SYSJSR AllocMem (A6 muss auf _MyExecBase zeigen!)
SYSJSR: MACRO
JSR meb_\1(A6)
ENDM
**************************************************************************
* Beispiel: SYSGET.b CheatFlag,D0
SYSGET: MACRO
XREF _MyExecBase
MOVE.L A6,-(SP)
MOVEA.L _MyExecBase,A6
MOVE.\0 meb_\1(A6),\2
MOVEA.L (SP)+,A6
ENDM
**************************************************************************
* Beispiel: SYSPUT.l D0,UserData1
SYSPUT: MACRO
XREF _MyExecBase
MOVE.L A6,-(SP)
MOVEA.L _MyExecBase,A6
MOVE.\0 \1,meb_\2(A6)
MOVEA.L (SP)+,A6
ENDM
**************************************************************************
* Beispiel: SYSLEA UserData1,A0
SYSLEA: MACRO
XREF _MyExecBase
MOVE.L A6,-(SP)
MOVEA.L _MyExecBase,A6
LEA.L meb_\1(A6),\2
MOVEA.L (SP)+,A6
ENDM
**************************************************************************
* Beispiel: SYSTST.l TripleScreen
SYSTST: MACRO
XREF _MyExecBase
MOVE.L A6,-(SP)
MOVEA.L _MyExecBase,A6
TST.\0 meb_\1(A6)
MOVEA.L (SP)+,A6
ENDM
**************************************************************************
DISABLE MACRO
FAIL Use SYSCALL Disable
ENDM
ENABLE MACRO
FAIL Use SYSCALL Enable
ENDM
clra MACRO
suba.l \1,\1
ENDM
**************************************************************************
FUNCTION MACRO
IFNE SOFFSET&1
FAIL FUNCTION at odd address
ENDC
meb_\1 EQU SOFFSET
SOFFSET SET SOFFSET+4
ENDM
**************************************************************************
* MSG "Text" ruft ROMCrack mit "Text" auf
MSG MACRO
XREF _MyExecBase
bra.s .msg1\@
.msg2\@: dc.b \1,0
EVEN
.msg1\@: move.l a6,-(SP)
movea.l _MyExecBase,a6
move.l #.msg2\@,meb_ROMCrackDebugText ; NICHT (a6)!
jsr meb_Debug(a6)
move.l (SP)+,a6
ENDM
**************************************************************************
* SMSG <"Hello, %s!",a0> gibt Text mit printf-Argumenten auf serial port aus
SMSG MACRO
IFND DEBUG
MEXIT
ENDC
XREF _MyExecBase
movem.l d0/d1/a0/a1/a6,-(SP)
bra.b .smsg1\@
.smsg2\@: dc.b \1,13,10,0
EVEN
.smsg1\@:
IFGE NARG-9
move.l \9,-(SP)
ENDC
IFGE NARG-8
move.l \8,-(SP)
ENDC
IFGE NARG-7
move.l \7,-(SP)
ENDC
IFGE NARG-6
move.l \6,-(SP)
ENDC
IFGE NARG-5
move.l \5,-(SP)
ENDC
IFGE NARG-4
move.l \4,-(SP)
ENDC
IFGE NARG-3
move.l \3,-(SP)
ENDC
IFGE NARG-2
move.l \2,-(SP)
ENDC
movea.l _MyExecBase,a6
pea .smsg2\@(PC)
jsr meb_RawPrintf(a6)
add.w #(NARG<<2),SP
movem.l (SP)+,d0/d1/a0/a1/a6
ENDM
**************************************************************************
* BTSTW: Testet ein Bit in einem WORD
BTSTW MACRO
IFNE NARG-2
FAIL BTSW: Format= BTSTW bitno,<ea>
ENDC
IFGT \1-8
btst.b #\1,\2
ENDC
IFLE \1-8
btst.b #\1,1+\2
ENDC
ENDM
**************************************************************************
STRUCTURE Node,0
APTR ln_Succ
APTR ln_Pred
UBYTE ln_Type
BYTE ln_Pri
APTR ln_Name
LABEL ln_SIZEOF
**************************************************************************
STRUCTURE MinNode,0
APTR mln_Succ
APTR mln_Pred
LABEL mln_SIZEOF
**************************************************************************
STRUCTURE List,0
APTR lh_Head
APTR lh_Tail
APTR lh_TailPred
UBYTE lh_Type
UBYTE lh_pad
LABEL lh_SIZEOF
**************************************************************************
STRUCTURE BitMap,0
WORD bm_BytesPerRow
WORD bm_Rows
BYTE bm_Flags
BYTE bm_Depth
WORD bm_Pad
STRUCT bm_Planes,8*4
LABEL bm_SIZEOF
**************************************************************************
STRUCTURE DiskPacket,mln_SIZEOF ; Struktur für SendPacket()
LONG dp_FileName ; Filename von DiskMaker
APTR dp_Address ; Ladeadresse wenn nicht DPF_ALLOCMEM
LONG dp_FileSize ; Wird ausgefüllt von der Diskroutine
APTR dp_Reply ; Routine oder Flag-Adresse oder nix
LONG dp_UserData ; Frei benutzbar für den User
BYTE dp_Flags ; see DP-definitions below
BYTE dp_pad1 ; Strukturlänge auf WORD aufrunden
WORD dp_pad2 ; Strukturlänge auf LONG aufrunden :-)
LABEL dp_SIZEOF
BITDEF DP,REPLYHANDLER,0 ; Reply ist Routine (jsr)
BITDEF DP,REPLYBYTE,1 ; Reply ist Byte-Flag, wird $ff
BITDEF DP,ALLOCMEM,4 ; CHIP wird automatisch reserviert
BITDEF DP,ALLOCFASTMEM,5 ; FAST wird automatisch reserviert
BITDEF DP,CRUNCHED,6 ; INTERNAL USE ONLY !!!
BITDEF DP,WRITE,7 ; Auf Disk schreiben statt lesen
**************************************************************************
STRUCTURE MemoryRegionHeader,0 ; EXEC-PRIVATE STRUKTUR !
APTR mh_Lower ; Zeiger auf Anfang der Region
APTR mh_Upper ; Zeiger auf Ende der Region
APTR mh_First ; Zeiger auf 1. freien Chunk
LONG mh_Free ; Anzahl freie Bytes der Region
LABEL mh_SIZEOF
**************************************************************************
STRUCTURE MemoryChunk,0 ; EXEC-PRIVATE STRUKTUR !
APTR mc_Next ; Zeiger auf nächsten freien Chunk
LONG mc_Bytes ; Anzahl Bytes dieses Chunks
LABEL mc_SIZEOF
**************************************************************************
*** AttentionFlag - Bits
BITDEF AF,68010,0 ; also set for 68020+
BITDEF AF,68020,1 ; also set for 68030+
BITDEF AF,68030,2 ; also set for 68040+
BITDEF AF,68040,3
BITDEF AF,68881,4 ; also set for 68882
BITDEF AF,68882,5
*** Flag - Bits, only for internal use :-)
BITDEF EXEC,BUFENABLE,0
BITDEF EXEC,RESETREQUEST,4
**************************************************************************
STRUCTURE MyExecBaseStruct,$100
LONG meb_ROMCRACKMagic ; 'NCLR' oder 'DBUG' oder 0
LONG meb_ROMCrackConfigMagic ; 'ICH!'
APTR meb_ROMCrackBSS
APTR meb_ROMCrackChipMem
APTR meb_ROMCrackDebugText ; ROMCrack's Debug-Text
*** Private Einträge, SUBJECT TO CHANGE, NICHT BENUTZEN!
STRUCT meb_ChipMRHeader,mh_SIZEOF
STRUCT meb_FastMRHeader,mh_SIZEOF
APTR meb_RAMDiskBase
LONG meb_RAMDiskSize
LONG meb_MainPrgName
LONG meb_LastRnd1 ; Beide müssen nacheinander stehen
LONG meb_LastRnd2
STRUCT meb_DiskList,lh_SIZEOF ; Die Packet-Liste
STRUCT meb_FileList,lh_SIZEOF ; Die File-Cache-Liste
WORD meb_ProductCode
BYTE meb_IDNestCnt
BYTE meb_ExecFlags ; siehe EXECF_...
*** Erlaubte Einträge
APTR meb_SuperStackUpper ; SuperStack am Anfang (READ ONLY!)
WORD meb_AttnFlags ; Kopie von ExecBase->AttnFlags
WORD meb_SystemBplcon0 ; Kopie von gfxbase->system_bplcon0
BYTE meb_VBlankFrequency ; Kopie von ExecBase->VBlankFrequency
BYTE meb_expad2
BYTE meb_ActualKey ; RawKeyCode
BYTE meb_ActualQualifiers ; Qualifier-Bits, (BitNr=KeyCode-$60)
BYTE meb_ActualASCIIKey ; ASCII-Code
BYTE meb_CheatFlag ; >0 falls Cheat mode on
STRUCT meb_BobList,lh_SIZEOF ; für die Bobroutine
APTR meb_TripleScreen ; für die Bobroutine
WORD meb_SignalSet ; für die Bobroutine
LONG meb_UserData1 ; Frei für den User, am Anfang 0
LONG meb_UserData2 ; Frei für den User, am Anfang 0
STRUCT meb_exreserved,6 ; + pad auf LONG, NICHT benutzen!
*** Level 3 Interrupt-Vektoren, zum Patchen oder 0 reinschreiben
UWORD meb_VBLIntPad
UWORD meb_VBLIntJump
APTR meb_VBLIntVector
UWORD meb_CopperIntPad
UWORD meb_CopperIntJump
APTR meb_CopperIntVector
*** Cia-Interrupt-Vektoren, zum Patchen oder 0 reinschreiben
APTR meb_CiaATimerAVector
APTR meb_CiaATimerBVector
APTR meb_CiaAAlarmVector
APTR meb_CiaASerialVector
APTR meb_CiaAFlagVector
APTR meb_CiaBTimerAVector
APTR meb_CiaBTimerBVector
APTR meb_CiaBAlarmVector
APTR meb_CiaBSerialVector
APTR meb_CiaBFlagVector
*** System-Funktionen (use at your own risk!)
ULONG meb_SecretMagic ; PRIVAT
FUNCTION InitExec ; (ExecEvent) (CRP)
FUNCTION ColdReboot ; () ()
FUNCTION InitChipMem ; (Address,Size) (A0/D0)
FUNCTION InitFastMem ; (Address,Size) (A0/D0)
FUNCTION InitDisk ; (Product) (D0)
FUNCTION InitKey ; () ()
FUNCTION SetCache ; (NewCacheBits) (D0)
*** Debug-Funktionen
FUNCTION Debug ; () ()
*** Speicherverwaltung
FUNCTION AllocMem ; (Amount) (D0)
FUNCTION AllocClearMem ; (Amount) (D0)
FUNCTION AllocFastMem ; (Amount) (D0)
FUNCTION AllocFastClearMem ;(Amount) (D0)
FUNCTION FreeMem ; (Address) (A1)
FUNCTION AvailMem ; () ()
FUNCTION AvailFastMem ; () ()
FUNCTION CheckMem ; () ()
FUNCTION CopyMem ; (Src,Dest,Len) (A0/A1/D0)
FUNCTION CopyMemQuick ; (Src,Dest,Len) (A0/A1/D0)
FUNCTION ClearMem ; (Address,Len) (A0/D0)
*** Semaphoren
FUNCTION Disable ; () ()
FUNCTION Enable ; () ()
FUNCTION OwnBlitter ; () ()
FUNCTION DisownBlitter ; () ()
*** Listenverwaltung
FUNCTION NewList ; (List) (A0)
FUNCTION Enqueue ; (List,Node) (A0/A1)
FUNCTION Remove ; (Node) (A1)
FUNCTION AddHead ; (List,Node) (A0/A1)
FUNCTION AddTail ; (List,Node) (A0/A1)
FUNCTION RemHead ; (List) (A0)
*** Tastatur
FUNCTION GetKey ; () ()
FUNCTION WaitKey ; () ()
FUNCTION FlushKeyBuf ; () ()
FUNCTION SetMap ; (KeyMap oder 0) (A0)
FUNCTION SetResetHandler ; (Handler) (A0)
FUNCTION SetCheatText ; (RawKeyCodes) (A0)
*** Ausgabe
FUNCTION RawDoFmt ; (wie normal :-)) (...)
FUNCTION RawPrintf ; (Stack) (...)
FUNCTION PlayCDTrack ; (TrackNumber) (D0)
FUNCTION WaitCDTrack ; (nüt) ()
*** Zufall
FUNCTION Randomize ; (Value1,Value2) (D0/D1)
FUNCTION Random ; (Limit) (D0)
*** Disk-Routinen
FUNCTION SetNoDiskHandler ;(Routine) (A0)
FUNCTION ReadFile ; (Name,Address) (D0/A0)
FUNCTION WriteFile ; (Name,Address) (D0/A0)
FUNCTION LoadFile ; (Name) (D0)
FUNCTION LoadFastFile ; (Name) (D0)
FUNCTION LoadSeg ; (Name) (D0)
FUNCTION UnLoadSeg ; (Segment) (A1)
FUNCTION BufReadFile ; (Name,Address (D0/A0)
FUNCTION BufLoadFile ; (Name) (D0)
FUNCTION DeleteFileNode ; (Name) (D0)
FUNCTION DeleteFileList ; () ()
FUNCTION SendPacket ; (Packet) (A0)
*** Bob-Routinen
FUNCTION WaitBlit ; (Custom) (A5)
FUNCTION InitDrawBob ; (BitMap) (A0)
FUNCTION AddBob ; (NewBob) (A1)
FUNCTION RemBob ; (Bob) (A0)
FUNCTION RemAllBobs ; () ()
FUNCTION RestoreBobList ; (BitMap) (A1)
FUNCTION DrawBobList ; (BitMap) (A1)
FUNCTION RestoreOneBob ; (Bob,BitMap) (A0/A1)
FUNCTION DrawOneBob ; (Bob,BitMap) (A0/A1)
FUNCTION AnimateOneBob ; (Bob) (A0)
FUNCTION MoveOneBob ; (Bob) (A0)
FUNCTION TestPoint ; (X,Y) (D0/D1)
FUNCTION SetMovePrg ; (Bob,MPrg,Speed,Step) (A0/A1/D0/D1)
FUNCTION SetAnimPrg ; (Bob,APrg,Speed) (A0/A1/D0)
FUNCTION SetGlobalClip ; (X,Y) (D0/D1)
FUNCTION HandleCollision ; () ()
FUNCTION CollOneBob ; (Bob) (A0)
FUNCTION FlashBob ; (Bob,Time,Color) (A0/D0/D1)
FUNCTION GetBobData ; (Bob) (A0)->A2
LABEL __EXECBASESIZE
|