4535 lines
96 KiB
ArmAsm
4535 lines
96 KiB
ArmAsm
;
|
||
; *************************************************************
|
||
; * *
|
||
; * FireWorks(c)1995 AmosProfessionnal Personnal Library V1.0 *
|
||
; * *
|
||
; *************************************************************
|
||
;
|
||
|
||
Version MACRO
|
||
Dc.b "1.0b"
|
||
ENDM
|
||
|
||
ExtNb Equ 13-1
|
||
|
||
Include "Includes:amos_includes.s"
|
||
; Include "Includes:_Chips.s"
|
||
;
|
||
; DLea et Dload INCOMPILABLES pour la version de demonstration 1.0b
|
||
;DLea MACRO
|
||
; Lea \1(pc),\2
|
||
; ENDM
|
||
;Dload MACRO
|
||
; Lea FWC(pc),\1
|
||
; ENDM
|
||
|
||
|
||
; DLea et Dload COMPILABLES pour la version COMPLETE 1.1
|
||
DLea MACRO
|
||
Move.l ExtAdr+ExtNb*16(a5),\2
|
||
Add.w #\1-FWC,\2
|
||
ENDM
|
||
Dload MACRO
|
||
Move.l ExtAdr+ExtNb*16(a5),\1
|
||
ENDM
|
||
;
|
||
SaveRegisters MACRO
|
||
DLea Registers,a0
|
||
Move.l a3,(a0)
|
||
ENDM
|
||
|
||
LoadRegisters MACRO
|
||
DLea Registers,a0
|
||
Move.l (a0),a3
|
||
ENDM
|
||
|
||
Start Dc.l C_TK-C_OFF
|
||
Dc.l C_LIB-C_TK
|
||
Dc.l C_TITLE-C_LIB
|
||
Dc.l C_END-C_TITLE
|
||
Dc.w 0
|
||
|
||
C_OFF Dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2,(L5-L4)/2
|
||
Dc.w (L6-L5)/2,(L7-L6)/2,(L8-L7)/2,(L9-L8)/2
|
||
Dc.w (L10-L9)/2,(L11-L10)/2,(L12-L11)/2,(L13-L12)/2
|
||
Dc.w (L14-L13)/2,(L15-L14)/2,(L16-L15)/2,(L17-L16)/2
|
||
Dc.w (L18-L17)/2,(L19-L18)/2,(L20-L19)/2,(L21-L20)/2
|
||
Dc.w (L22-L21)/2,(L23-L22)/2,(L24-L23)/2,(L25-L24)/2
|
||
Dc.w (L26-L25)/2,(L27-L26)/2,(L28-L27)/2,(L29-L28)/2
|
||
Dc.w (L30-L29)/2,(L31-L30)/2,(L32-L31)/2,(L33-L32)/2
|
||
Dc.w (L34-L33)/2,(L35-L34)/2,(L36-L35)/2,(L37-L36)/2
|
||
Dc.w (L38-L37)/2,(L39-L38)/2,(L40-L39)/2,(L41-L40)/2
|
||
Dc.w (L42-L41)/2,(L43-L42)/2,(L44-L43)/2,(L45-L44)/2
|
||
Dc.w (L46-L45)/2,(L47-L46)/2,(L48-L47)/2,(L49-L48)/2
|
||
Dc.w (L50-L49)/2,(L51-L50)/2,(L52-L51)/2,(L53-L52)/2
|
||
Dc.w (L54-L53)/2,(L55-L54)/2,(L56-L55)/2,(L57-L56)/2
|
||
Dc.w (L58-L57)/2,(L59-L58)/2,(L60-L59)/2,(L61-L60)/2
|
||
Dc.w (L62-L61)/2,(L63-L62)/2,(L64-L63)/2,(L65-L64)/2
|
||
Dc.w (L66-L65)/2,(L67-L66)/2,(L68-L67)/2,(L69-L68)/2
|
||
Dc.w (L70-L69)/2,(L71-L70)/2,(L72-L71)/2,(L73-L72)/2
|
||
Dc.w (L74-L73)/2,(L75-L74)/2,(L76-L75)/2,(L77-L76)/2
|
||
Dc.w (L78-L77)/2,(L79-L78)/2,(L80-L79)/2,(L81-L80)/2
|
||
Dc.w (L82-L81)/2,(L83-L82)/2,(L84-L83)/2,(L85-L84)/2
|
||
Dc.w (L86-L85)/2,(L87-L86)/2,(L88-L87)/2,(L89-L88)/2
|
||
Dc.w (L90-L89)/2,(L91-L90)/2,(L92-L91)/2,(L93-L92)/2
|
||
Dc.w (L94-L93)/2,(L95-L94)/2,(L96-L95)/2,(L97-L96)/2
|
||
Dc.w (L98-L97)/2,(L99-L98)/2,(L100-L99)/2
|
||
Dc.w (L101-L100)/2,(L102-L101)/2,(L103-L102)/2
|
||
Dc.w (L104-L103)/2,(L105-L104)/2,(L106-L105)/2
|
||
Dc.w (L107-L106)/2,(L108-L107)/2,(L109-L108)/2
|
||
Dc.w (L110-L109)/2,(L111-L110)/2,(L112-L111)/2
|
||
Dc.w (L113-L112)/2,(L114-L113)/2,(L115-L114)/2
|
||
Dc.w (L116-L115)/2,(L117-L116)/2,(L118-L117)/2
|
||
Dc.w (L119-L118)/2,(L120-L119)/2,(L121-L120)/2
|
||
Dc.w (L122-L121)/2,(L123-L122)/2,(L124-L123)/2
|
||
|
||
|
||
|
||
; Dc.w ...
|
||
|
||
C_TK Dc.w 1,0
|
||
Dc.b $80,-1
|
||
Dc.w L_SNTSC,-1
|
||
Dc.b "set nts","c"+$80,"I",-1
|
||
Dc.w L_SPAL,-1
|
||
Dc.b "set pa","l"+$80,"I",-1
|
||
Dc.w -1,L_RCLICK
|
||
Dc.b "right clic","k"+$80,"0",-1
|
||
Dc.w -1,L_FIRE2
|
||
Dc.b "fire(1,2",")"+$80,"0",-1
|
||
Dc.w -1,L_FIRE3
|
||
Dc.b "fire(1,3",")"+$80,"0",-1
|
||
Dc.w -1,L_HAM
|
||
Dc.b "ha","m"+$80,"0",-1
|
||
Dc.w -1,L_EHB
|
||
Dc.b "eh","b"+$80,"0",-1
|
||
Dc.w L_CREATECOPPER,-1
|
||
Dc.b "create ag","a"+$80,"I0",-1
|
||
Dc.w -1,L_TESTA3
|
||
Dc.b "tes","t"+$80,"0",-1
|
||
Dc.w L_SETCOLOR,-1
|
||
Dc.b "set colo","r"+$80,"I0,0,0,0",-1
|
||
Dc.w L_XFADE,-1
|
||
Dc.b "x fad","e"+$80,"I",-1
|
||
Dc.w -1,L_COPPERBASE
|
||
Dc.b "copper bas","e"+$80,"0",-1
|
||
Dc.w L_CHANGECOPPER,-1
|
||
Dc.b "copper bas","e"+$80,"I0",-1
|
||
Dc.w L_SETPLANE,-1
|
||
Dc.b "set plan","e"+$80,"I0,0",-1
|
||
Dc.w -1,L_PLANEBASE
|
||
Dc.b "plane bas","e"+$80,"00",-1
|
||
Dc.w -1,L_COLORREAD
|
||
Dc.b "set colo","r"+$80,"00",-1
|
||
Dc.w L_LINEWAIT,-1
|
||
Dc.b "copper next lin","e"+$80,"I",-1
|
||
Dc.w -1,L_LINESEE
|
||
Dc.b "copper lin","e"+$80,"0",-1
|
||
Dc.w L_VIEW2,-1
|
||
Dc.b "set view plane","s"+$80,"I0",-1
|
||
Dc.w L_COLORWAIT,-1
|
||
Dc.b "new color valu","e"+$80,"I0,0,0,0",-1
|
||
Dc.w L_SCREENSIZE,-1
|
||
Dc.b "set screen size","s"+$80,"I0,0",-1
|
||
Dc.w -1,L_XSIZE
|
||
Dc.b "screen x siz","e"+$80,"0",-1
|
||
Dc.w -1,L_YSIZE
|
||
Dc.b "screen y siz","e"+$80,"0",-1
|
||
Dc.w L_CREATECOPPER2,-1
|
||
Dc.b "create standar","d"+$80,"I0",-1
|
||
Dc.w L_SCREENOFFSET,-1
|
||
Dc.b "screen positio","n"+$80,"I0,0,0",-1
|
||
Dc.w L_DUALPLAYFIELD,-1
|
||
Dc.b "set dual mod","e"+$80,"I0",-1
|
||
Dc.w L_RESOLUTION,-1
|
||
Dc.b "set resolutio","n"+$80,"I0",-1
|
||
Dc.w L_SETLACE,-1
|
||
Dc.b "set lac","e"+$80,"I0",-1
|
||
Dc.w L_COPPERLINE2,-1
|
||
Dc.b "copper wait lin","e"+$80,"I0",-1
|
||
Dc.w L_MOSAICx2,-1
|
||
Dc.b "mosaic x","2"+$80,"I0",-1
|
||
Dc.w L_MOSAICx4,-1
|
||
Dc.b "mosaic x","4"+$80,"I0",-1
|
||
Dc.w L_Mosaicx8,-1
|
||
Dc.b "mosaic x","8"+$80,"I0",-1
|
||
Dc.w L_Mosaicx16,-1
|
||
Dc.b "mosaic x1","6"+$80,"I0",-1
|
||
Dc.w L_MOSAICx32,-1
|
||
Dc.b "mosaic x3","2"+$80,"I0",-1
|
||
Dc.w L_ACTIVECOP,-1
|
||
Dc.b "active coppe","r"+$80,"I",-1
|
||
Dc.w L_SETHAMMODE,-1
|
||
Dc.b "ham mod","e"+$80,"I0",-1
|
||
Dc.w L_IFFTOSCREEN,-1
|
||
Dc.b "iff conver","t"+$80,"I0",-1
|
||
Dc.w L_ALLOWPLANES,-1
|
||
Dc.b "allow plane co","l"+$80,"I0",-1
|
||
Dc.w L_FORBIDPLANES,-1
|
||
Dc.b "forbid plane co","l"+$80,"I0",-1
|
||
Dc.w L_RESERVEDPF,-1
|
||
Dc.b "inverse playfield","s"+$80,"I",-1
|
||
Dc.w L_NORMALDPF,-1
|
||
Dc.b "normal playfield","s"+$80,"I",-1
|
||
Dc.w -1,L_CHECKCOL
|
||
Dc.b "sprite co","l"+$80,"00,0",-1
|
||
Dc.w -1,L_CHECKCOL2
|
||
Dc.b "playfields co","l"+$80,"0",-1
|
||
Dc.w -1,L_CHECKCOL3
|
||
Dc.b "pf sprites co","l"+$80,"00,0",-1
|
||
Dc.w -1,L_COS1000
|
||
Dc.b "fc co","s"+$80,"00",-1
|
||
Dc.w -1,L_SIN1000
|
||
Dc.b "fc si","n"+$80,"00",-1
|
||
Dc.w -1,L_TAN1000
|
||
Dc.b "fc ta","n"+$80,"00",-1
|
||
Dc.w -1,L_IFFXSize
|
||
Dc.b "iff x siz","e"+$80,"00",-1
|
||
Dc.w -1,L_IFFYSize
|
||
Dc.b "iff y siz","e"+$80,"00",-1
|
||
Dc.w -1,L_IFFDepth
|
||
Dc.b "iff plane","s"+$80,"00",-1
|
||
Dc.w L_DoubleMASK,-1
|
||
Dc.b "double mas","k"+$80,"I0t0,0",-1
|
||
Dc.w L_DoubleMASK2,-1
|
||
Dc.b "l double mas","k"+$80,"I0,0,0t0,0",-1
|
||
Dc.w L_RESERVESPRITE,-1
|
||
Dc.b "f set sprite buffe","r"+$80,"I0,0",-1
|
||
Dc.w L_GETEVENSPRITE,-1
|
||
Dc.b "get even sprit","e"+$80,"I0,0,0,0t0",-1
|
||
Dc.w L_GETODDSPRITE,-1
|
||
Dc.b "get odd sprit","e"+$80,"I0,0,0,0t0",-1
|
||
Dc.w L_ACTIVESPRITE,-1
|
||
Dc.b "f sprit","e"+$80,"I0t0,0,0,0",-1
|
||
Dc.w L_DOUBLEMASKB,-1 ; Src1,Msk,Src2,Cible.
|
||
Dc.b "blit mas","k"+$80,"I0,0,0t0",-1
|
||
Dc.w L_DOUBLEMASKB2,-1 ; Src1,Msk,Src2 To Cible,Ys,Ye.
|
||
Dc.b "l blit mas","k"+$80,"I0,0,0t0,0,0",-1
|
||
Dc.w L_PATCH13,-1
|
||
Dc.b "aga of","f"+$80,"I",-1
|
||
Dc.w L_LFILTER1,-1
|
||
Dc.b "low filter.","b"+$80,"I0t0,0",-1
|
||
Dc.w L_LFILTER2,-1
|
||
Dc.b "low filter.","w"+$80,"I0t0,0",-1
|
||
Dc.w L_LFILTER3,-1
|
||
Dc.b "low filter.","l"+$80,"I0t0,0",-1
|
||
Dc.w L_2NDPAL,-1
|
||
Dc.b "set dual palett","e"+$80,"I0",-1
|
||
Dc.w -1,L_READIFFCOLOR
|
||
Dc.b "iff colo","r"+$80,"00,0",-1
|
||
Dc.w L_ADD2SCREEN,-1
|
||
Dc.b "active second scree","n"+$80,"I",-1
|
||
Dc.w L_SET2PLANES,-1
|
||
Dc.b "set second plane","s"+$80,"I0,0",-1
|
||
Dc.w L_SET2VIEW,-1
|
||
Dc.b "set second vie","w"+$80,"I0",-1
|
||
Dc.w L_SET2PAL,-1
|
||
Dc.b "set second colo","r"+$80,"I0,0,0,0",-1
|
||
Dc.w -1,L_CMAP
|
||
Dc.b "cmap bas","e"+$80,"00",-1
|
||
Dc.w L_BPALETTE,-1
|
||
Dc.b "change palett","e"+$80,"I0,0",-1
|
||
Dc.w L_IPALETTE,-1
|
||
Dc.b "iff8bits palette to coppe","r"+$80,"I0,0",-1
|
||
Dc.w L_VBLWAIT,-1
|
||
Dc.b "vb line wai","t"+$80,"I0",-1
|
||
Dc.w L_JPALETTE,-1
|
||
Dc.b "iff4bits palette to coppe","r"+$80,"I0,0",-1
|
||
Dc.w L_FPALETTE,-1
|
||
Dc.b "fade palett","e"+$80,"I0,0,0",-1
|
||
Dc.w L_CPALETTE,-1
|
||
Dc.b "attribute palett","e"+$80,"I0,0,0,0,0t0",-1
|
||
Dc.w L_2VIEW,-1
|
||
Dc.b "second y siz","e"+$80,"I0",-1
|
||
Dc.w L_IFF8TO4,-1
|
||
Dc.b "iff8bits to iff4bit","s"+$80,"I0,0t0",-1
|
||
Dc.w L_SETCOLORCOMP,-1
|
||
Dc.b "set aga colo","r"+$80,"I0,0,0,0",-1
|
||
Dc.w L_MFILL,-1
|
||
Dc.b "octets fil","l"+$80,"I0,0t0",-1
|
||
Dc.w L_BLITCOPY,-1
|
||
Dc.b "blitter cop","y"+$80,"I0t0",-1
|
||
Dc.w L_CONFORM32,-1
|
||
Dc.b "s32 block to scree","n"+$80,"I0",-1
|
||
Dc.w L_CONFORM32B,-1
|
||
Dc.b "s32 vertice to scree","n"+$80,"I0",-1
|
||
Dc.w L_SETDPLANE,-1
|
||
Dc.b "set d plan","e"+$80,"I0,0",-1
|
||
Dc.w L_SWAPPLANES,-1
|
||
Dc.b "swap plane","s"+$80,"I",-1
|
||
Dc.w L_RESICON,-1
|
||
Dc.b "aga reserve ico","n"+$80,"I0",-1
|
||
Dc.w L_ERAICON,-1
|
||
Dc.b "aga erase ico","n"+$80,"I",-1
|
||
Dc.w L_GETICON,-1
|
||
Dc.b "aga get ico","n"+$80,"I0,0,0",-1
|
||
Dc.w L_PASICON,-1
|
||
Dc.b "aga paste ico","n"+$80,"I0,0,0",-1
|
||
Dc.w -1,L_ICONBASE
|
||
Dc.b "aga icon bas","e"+$80,"0",-1
|
||
Dc.w L_SAVEICON,-1
|
||
Dc.b "aga icon sav","e"+$80,"I2",-1
|
||
Dc.w L_LOADICON,-1
|
||
Dc.b "aga icon loa","d"+$80,"I2",-1
|
||
Dc.w L_MPRESERVE,-1
|
||
Dc.b "mplot reserv","e"+$80,"I0",-1
|
||
Dc.w L_MPERASE,-1
|
||
Dc.b "mplot eras","e"+$80,"I",-1
|
||
Dc.w L_MPLOAD,-1
|
||
Dc.b "mplot loa","d"+$80,"I2",-1
|
||
Dc.w L_MPSAVE,-1
|
||
Dc.b "mplot sav","e"+$80,"I2",-1
|
||
Dc.w L_MPDEFINE,-1
|
||
Dc.b "mplot defin","e"+$80,"I0,0,0,0",-1
|
||
Dc.w -1,L_MPBASE
|
||
Dc.b "mplot bas","e"+$80,"0",-1
|
||
Dc.w L_MPDRAW,-1
|
||
Dc.b "mplot dra","w"+$80,"I0t0",-1
|
||
Dc.w -1,L_MPX
|
||
Dc.b "x mplo","t"+$80,"00",-1
|
||
Dc.w -1,L_MPY
|
||
Dc.b "y mplo","t"+$80,"00",-1
|
||
Dc.w -1,L_MPC
|
||
Dc.b "c mplo","t"+$80,"00",-1
|
||
Dc.w L_MPMODIFY,-1
|
||
Dc.b "mplot modif","y"+$80,"I0t0,0,0",-1
|
||
Dc.w L_MPMODIFY2,-1
|
||
Dc.b "mplot x defin","e"+$80,"I0,0",-1
|
||
Dc.w L_MPMODIFY3,-1
|
||
Dc.b "mplot y defin","e"+$80,"I0,0",-1
|
||
Dc.w L_MPMODIFY4,-1
|
||
Dc.b "mplot c defin","e"+$80,"I0,0",-1
|
||
Dc.w L_MPORIGIN,-1
|
||
Dc.b "mplot origi","n"+$80,"I0,0",-1
|
||
Dc.w L_MPPLANES,-1
|
||
Dc.b "mplot plane","s"+$80,"I0",-1
|
||
Dc.w L_LSRL,-1
|
||
Dc.b "lsr zon","e"+$80,"I0t0",-1
|
||
Dc.w L_MPDRAWDPF1,-1
|
||
Dc.b "mplot dpf1 dra","w"+$80,"I0t0",-1
|
||
Dc.w L_MPDRAWDPF2,-1
|
||
Dc.b "mplot dpf2 dra","w"+$80,"I0t0",-1
|
||
; Dc.w ...
|
||
; Dc.b ...
|
||
Dc.w 0
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
C_LIB
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L0 movem.l a3-a6,-(sp)
|
||
Lea FWC(pc),a2
|
||
Move.l a2,ExtAdr+ExtNb*16(a5)
|
||
Lea RouDef(pc),a0
|
||
Move.l a0,ExtAdr+ExtNb*16+4(a5)
|
||
Lea RouEnd(pc),a0
|
||
Move.l a0,ExtAdr+ExtNb*16+8(a5)
|
||
; Bra _nofucktime
|
||
; OUVERTURE ET ECRITURE DU REQUEST POUR LA VERSION UNREGISTERED!!!
|
||
Move.l $4,a6
|
||
DLea _DName,a1
|
||
Move.l #0,d0
|
||
Jsr -552(a6) ; Open Library
|
||
DLea _DBase,a0
|
||
Move.l d0,(a0)
|
||
Move.l d0,a1
|
||
Jsr -414(a6)
|
||
DLea WIN,a0
|
||
Move.l a0,d1
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6
|
||
Move.l #1005,d2
|
||
Jsr -30(a6) ; Open Window
|
||
DLea WINH,a0
|
||
Move.l d0,(a0)
|
||
Move.l d0,d1
|
||
DLea WINT,a0
|
||
Move.l a0,d2
|
||
DLea WINT2,a3
|
||
DLea WINT,a4
|
||
Sub.l a4,a3
|
||
Move.l a3,d3
|
||
Jsr -48(a6)
|
||
Move.l #$300000,d0
|
||
_xxc Sub.l #1,d0
|
||
Bpl _xxc
|
||
DLea WINH,a0
|
||
Move.l (a0),d1
|
||
Jsr -36(a6)
|
||
_nofucktime
|
||
Movem.l (sp)+,a3-a6
|
||
Moveq #ExtNb,D0 ; OK
|
||
Rts
|
||
******** Initialise.
|
||
; Remise a zero de tous les compteurs.
|
||
RouDef Move.w #$0,$dff1fc ; Disable DOUBLE SCANNING.
|
||
Move.w #$c00,$dff106 ; GRAPHICS PALETTE=0 to 31
|
||
Rts
|
||
******** Quit.
|
||
RouEnd DLea _Mplots,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #0,d0
|
||
Beq _re1
|
||
Rbra L_MPERASE
|
||
_re1 DLea _Icons,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #0,d0
|
||
Beq _re2
|
||
Rbra L_ERAICON
|
||
_re2 Rts
|
||
;
|
||
;
|
||
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DATA ZONE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
FWC
|
||
; BANQUE DE DONNEES ACCESSIBLES A L'UTILISATEUR.
|
||
_BitsPlanes Dc.l 0,0,0,0,0,0,0,0,0 ; All 8 planes adresses.
|
||
_CopperBase Dc.l 0 ; Copper base adress.
|
||
_XYOff Dc.l 0,0,0,0 ; 2 Ecrans Maxi (Dual Playfield)
|
||
_Aga Dc.l 0 ; AGA=1 NONAGA=0 SCREENS COPPER MODE.
|
||
_XY Dc.l $140,$C0 ; X.l,Y.l Screen Sizes(320,192).
|
||
_Line Dc.l $32 ; Line pour la Wait
|
||
_CurrentLine Dc.l 0 ; Copper position to add Color change.
|
||
; Icons Data List...
|
||
_Icons Dc.l 0 ; Nombre d'icones au maximum.
|
||
_IcBase Dc.l 0 ; adresse de la banque d'icones.
|
||
; Mplot data list...
|
||
_Mplots Dc.l 0
|
||
_MpBase Dc.l 0
|
||
_Origin Dc.l 0,0 ; Mplot x,y origin for origin axes.
|
||
_MpP Dc.l 8 ; Mplot Max Planes.
|
||
; En premier obligatoirement.
|
||
_PlanesMask Dc.l $0,$1000,$2000,$3000,$4000,$5000,$6000,$7000,$10
|
||
_Debuto Dc.b "FrWk"
|
||
_2nd Dc.l 0
|
||
; Pour la version UNREGISTERED
|
||
WIN Dc.b "CON:0/16/640/128/"
|
||
Dc.b " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Amos Request Window <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||
; Dc.b "/CLOSE",0
|
||
WINH Dc.l 0
|
||
WINT Dc.b $9b,"1m"
|
||
Dc.b " Amos 1.3 ET Amos Professionnal Personnal library",10
|
||
Dc.b $9b,"3;32m"
|
||
Dc.b " Version SHAREWARE de demonstration : 1.0b",10
|
||
Dc.b $9b,"33m"
|
||
Dc.b " Date d'edition : July 1996",10
|
||
Dc.b " Auteur : Frederic Cordier",10
|
||
Dc.b " ",10
|
||
Dc.b $9b,"0;32m"
|
||
Dc.b " Cette version est la version de demonstration 1.0b",10
|
||
Dc.b " ",10
|
||
Dc.b " Elle a pour protection le fait d'etre INCOMPILABLE.",10
|
||
Dc.b "Pour obtenir la version Compilable , se referer aux",10
|
||
Dc.b "documentations fournies avec la librairie.",10,10
|
||
Dc.b " "
|
||
Dc.b $9b,"4;33m"
|
||
Dc.b "Good Work with AMOS...",10
|
||
Dc.b $9b,"0m"
|
||
Dc.b " ",10
|
||
WINT2 Dc.l 0
|
||
;
|
||
; Pour les sprites.
|
||
_SpriteBase Dc.l 0
|
||
_SpriteLength Dc.l 0
|
||
_SprXPos Dc.l 0,0,0,0,0,0,0,0 ; 08 Sprites au
|
||
_SprYPos Dc.l 0,0,0,0,0,0,0,0 ; Maximum (2C.L-)
|
||
_SprBase Dc.l 0,0,0,0,0,0,0,0
|
||
_SprLen Dc.l 0,0,0,0,0,0,0,0
|
||
_SprVis Dc.l 0,0,0,0,0,0,0,0
|
||
_Temp Dc.l 0
|
||
;
|
||
; Registres
|
||
Registers Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
_DoubleCopper Dc.l 0 ; Mode Double COPPER-LIST Actif/Inactif.
|
||
_BPlanesMask Dc.l 0 ; Mask pour ALLOW PLANES instruction.
|
||
_SprPtBase Dc.l 0 ; Adresse de base des sprites.
|
||
_ColorBase Dc.l 0 ; In Copper Color00 Position.
|
||
_ColorBase2 Dc.l 0 ; In Copper Color00 Complement Position.
|
||
_BplConBase Dc.l 0 ; In Copper BplCon0 Position.
|
||
_BplPtBase Dc.l 0 ; In Copper BplPth0 Position.
|
||
_BitsPlanesD Dc.l 0,0,0,0,0,0,0,0,0
|
||
_BitsPlanes2 Dc.l 0,0,0,0,0,0,0,0,0 ; during SCREEN OFFSETs.
|
||
_CurrentPal Dc.l 0
|
||
_Others Dc.l 0 ; DIWSTRT,DIWSTOP,DDFSTRT,DDFSTOP,BPLMODS
|
||
_AgaPalette Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||
; Autres Registres.
|
||
_MosaicBase Dc.l 0,0
|
||
_MosaicPlanes Dc.l 0,0,0,0,0,0,0,0,0
|
||
; Iff CONVERT.
|
||
_IffBase Dc.l 0 ; Ilbm Base.
|
||
_Bmhd Dc.l 0 ; Ilbm 'BMHD' Base.
|
||
_Cmap Dc.l 0 ; Ilbm 'CMAP' Base.
|
||
_Body Dc.l 0 ; Ilbm 'BODY' Base.
|
||
_LbmXs Dc.l 0 ; Ilbm X Size.
|
||
_LbmYs Dc.l 0 ; Ilbm Y Size.
|
||
_LbmDp Dc.l 0 ; Ilbm Depth.
|
||
_BitsPlanes3 Dc.l 0,0,0,0,0,0,0,0,0 ; during IFF Convertion.
|
||
; DOUBLE MASK
|
||
_MaskBase Dc.l 0
|
||
_MScrn1 Dc.l 0
|
||
_MScrn2 Dc.l 0
|
||
_MLen Dc.l 0
|
||
_DMY Dc.l 0,0
|
||
_MScroll Dc.l 0,0
|
||
_dx1 Dc.l 0 ; FrontGround.
|
||
_dx2 Dc.l 0 ; Mask.
|
||
_dx3 Dc.l 0 ; Background.
|
||
_dx4 Dc.l 0 ; Cible.
|
||
_a3 Dc.l 0
|
||
_D4 Dc.l 0
|
||
; 2eme ecran
|
||
_2pal Dc.l 0
|
||
_2bpl Dc.l 0
|
||
_2act Dc.l 0
|
||
_2bplcon Dc.l 0
|
||
; En Dernier Obligatoirement !!!
|
||
Dc.l 0,0,0,0,0,0,0,0 ; 8 registres pour les valeurs
|
||
; Conform Data list...
|
||
_c1 Dc.l 0
|
||
|
||
_Finito Dc.b "ENDL"
|
||
; Icon Bank.
|
||
_IcN Dc.b " "
|
||
Dc.b " ",0
|
||
EVEN
|
||
_DName Dc.b "dos.library",0
|
||
EVEN
|
||
_DBase Dc.l 0 ; Dos.Library Base.
|
||
_IHnd Dc.l 0 ; Icon File Handle.
|
||
_IcLoad Dc.l 0,0,0,0 ; Chargement des 8 octets des fichiers Icons.
|
||
; Multi plots.
|
||
; Tables pour les COSINUS SINUS et TANGENTES.
|
||
_Cosinus IncBin "_TABLES/_CosTable.Bin"
|
||
_Sinus IncBin "_TABLES/_SinTable.Bin"
|
||
_Tangente IncBin "_TABLES/_TanTable.Bin"
|
||
;
|
||
;
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L1
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L2
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SNTSC Equ 3 ; OK
|
||
L3 Move.w #$0000,$DFF1DC
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SPAL Equ 4 ; OK
|
||
L4 Move.w #$0020,$DFF1DC
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_RCLICK Equ 5 ; OK
|
||
L5 Move.l #0,d2
|
||
Move.l #0,d3
|
||
Btst #2,$Dff016
|
||
Bne.b F1
|
||
Move.l #$ffffffff,d3
|
||
F1 Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_FIRE2 Equ 6 ; OK
|
||
L6 Move.l #0,d2
|
||
Move.l #0,d3
|
||
Btst #6,$dff016
|
||
Bne.b F2
|
||
Move.l #$ffffffff,d3
|
||
F2 Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_FIRE3 Equ 7 ; OK
|
||
L7 Move.l #0,d2
|
||
Move.l #0,d3
|
||
Btst #4,$dff016
|
||
Bne.b F3
|
||
Move.l #$ffffffff,d3
|
||
F3 Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_HAM: Equ 8
|
||
L8 Move.l #4096,d3
|
||
Move.l #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_EHB Equ 9
|
||
L9 Move.l #64,d3
|
||
Move.l #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CREATECOPPER Equ 10
|
||
L10 Move.l (a3)+,a0
|
||
Cmp.l #0,a0
|
||
Beq _NoCopper
|
||
; SAUVEGARDE DE L'ADRESSE DE BASE DU COPPER-LIST A CREER.
|
||
DLea _CopperBase,a1
|
||
Move.l a0,(a1)
|
||
; COP WAIT ...
|
||
Move.l #$1003FFFE,(a0)+
|
||
Move.l #$01fc0000,(a0)+ ; Anti Double scanning !!!.
|
||
; CREATION DES SPRITES POUR LE COPPER-LIST.
|
||
DLea _SprPtBase,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$01200000,d0
|
||
_cc1 Move.l d0,(a0)+
|
||
Add.l #$20000,d0
|
||
Cmp.l #$01400000,d0
|
||
Bne _cc1
|
||
; CREATION DE LA PALETTE DE 256 COULEURS AGA SEULEMENT !!!
|
||
Move.l #$1803FFFE,(a0)+
|
||
; Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
DLea _ColorBase,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$01060000,d0
|
||
; SELECTION DU BLOC MEMOIRE.
|
||
_cc2 Move.l d0,(a0)+
|
||
Move.l #$01800000,d1
|
||
; BLOCS DE 32 COULEURS A CODER SEPAREMENT.
|
||
_cc3 Move.l d1,(a0)+
|
||
Add.l #$00020000,d1
|
||
Cmp.l #$01C00000,d1
|
||
Bne _cc3
|
||
Add.l #$00002000,d0
|
||
Cmp.l #$01070000,d0
|
||
Bne _cc2
|
||
; COULEURS COMPLEMENTAIRES (AGA)
|
||
DLea _ColorBase2,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$01060200,d0
|
||
; SELECTION DU BLOC MEMOIRE.
|
||
_cd2 Move.l d0,(a0)+
|
||
Move.l #$01800000,d1
|
||
; BLOCS DE 32 COULEURS A CODER SEPAREMENT.
|
||
_cd3 Move.l d1,(a0)+
|
||
Add.l #$00020000,d1
|
||
Cmp.l #$01C00000,d1
|
||
Bne _cd3
|
||
Add.l #$00002000,d0
|
||
Cmp.l #$01070200,d0
|
||
Bne _cd2
|
||
; CREATION DE L'ECRAN.
|
||
Move.l #$3103FFFE,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
DLea _BplPtBase,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$00E00000,d0 ; Bpl0PTH
|
||
; BPLPTH\L INSTALLATION POUR LES 8 BIT-PLANS.
|
||
_cc4 Move.l d0,(a0)+
|
||
Add.l #$00020000,d0
|
||
Cmp.l #$01000000,d0
|
||
Bne _cc4
|
||
; OTHERS REGISTERS.
|
||
DLea _Others,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$008E0181,(a0)+ ; DIWSTRT ???
|
||
Move.l #$009037C1,(a0)+ ; DIWSTOP ???
|
||
Move.l #$00920038,(a0)+ ; DDFSTRT =38 no scrl,=30 scroll.
|
||
Move.l #$009400D0,(a0)+ ; DDFSTOP
|
||
Move.l #$01080000,(a0)+ ; BPL1MOD
|
||
Move.l #$010A0000,(a0)+ ; BPL2MOD
|
||
Move.l #$0098FFC0,(a0)+ ; CLXCON Enable/Disable Planes.
|
||
DLea _BplConBase,a1
|
||
Move.l a0,(a1)
|
||
; BPLCON REGISTERS.
|
||
Move.l #$01000010,(a0)+ ; BPLCON0
|
||
Move.l #$01020000,(a0)+ ; BPLCON1
|
||
Move.l #$01040224,(a0)+ ; BPLCON2
|
||
Move.l #$01061000,(a0)+ ; BPLCON3=$1000 pour 2nd pf palette.
|
||
;
|
||
Move.l #$3203FFFE,(a0)+
|
||
Move.l #$00968300,(a0)+
|
||
Move.l #$3103FFFE,(a0)+
|
||
DLea _CurrentLine,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$F203FFFE,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
Move.l #$F303FFFE,(a0)+
|
||
Move.l #$FFFFFFFE,(a0)+
|
||
DLea _Line,a1
|
||
Move.l #$32,(a1)
|
||
DLea _2nd,a1
|
||
Move.l #0,(a1)
|
||
DLea _Aga,a1
|
||
Move.l #$1,(a1) ;AGA SCREEN.
|
||
Rts
|
||
_NoCopper
|
||
Moveq #0,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_TESTA3 Equ 11
|
||
L11 DLea _MpP,a1
|
||
Move.l (a1),d3
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETCOLOR Equ 12
|
||
L12 Move.l (a3)+,d3 ; D3=Blue.
|
||
Move.l (a3)+,d2 ; D2=Green.
|
||
Move.l (a3)+,d1 ; D1=Red.
|
||
Move.l (a3)+,d0 ; D0=Register
|
||
_sc1b Lsl.l #8,d1
|
||
Lsl.l #4,d2
|
||
Or.l d1,d2
|
||
Or.l d2,d3
|
||
DLea _ColorBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
bne _sc2b
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_sc2b Move.l #0,d6
|
||
Add.l #1,d0
|
||
_sc2 Move.w (a0),d7
|
||
Cmp.w #$0106,d7
|
||
Bne _sc3
|
||
Add.l #4,a0
|
||
_sc3 Add.l #1,d6
|
||
Cmp.l d6,d0
|
||
Beq _sc4
|
||
Add.l #4,a0
|
||
Bra _sc2
|
||
_sc4 Add.l #2,a0
|
||
Move.w d3,(a0)
|
||
_lsend RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_XFADE Equ 13
|
||
L13 DLea _CopperBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
bne _lx1
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_lx1 Clr.l d0
|
||
Clr.l d1
|
||
Move.w (a0)+,d0 ; D0=register
|
||
Move.w (a0),d1 ; D1=Value
|
||
Cmp.l #$0180,d0
|
||
blt _lx2 ; D0<COLOR00
|
||
Cmp.l #$1BE,d0
|
||
Bgt _lx2 ; D0>COLOR31
|
||
Move.l d1,d2
|
||
Lsr.l #8,d2
|
||
Lsl.l #8,d2 ; D2=Red.
|
||
Move.l d1,d3
|
||
Lsr.l #4,d3
|
||
Lsl.l #4,d3 ; D3=Green.
|
||
Move.l d1,d4
|
||
Sub.l d2,d3
|
||
Sub.l d2,d4
|
||
Sub.l d3,d4 ; D4=Blue.
|
||
Cmp.l #0,d2
|
||
Beq _lx3
|
||
Sub.l #$100,d2
|
||
_lx3 Cmp.l #0,d3
|
||
Beq _lx4
|
||
Sub.l #$10,d3
|
||
_lx4 Cmp.l #0,d4
|
||
Beq _lx5
|
||
Sub.l #1,d4
|
||
_lx5 Add.l d3,d2
|
||
Add.l d4,d2
|
||
Move.w d2,(a0) ; NEW COLOR VALUE.
|
||
_lx2 Add.l #2,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #$FFFFFFFE,d0
|
||
Bne _lx1
|
||
_lxend RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_COPPERBASE Equ 14
|
||
L14
|
||
DLea _CopperBase,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CHANGECOPPER Equ 15
|
||
L15
|
||
Move.l (a3)+,d0
|
||
DLea _CopperBase,a1
|
||
Move.l d0,(a1)
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETPLANE Equ 16
|
||
L16
|
||
Move.l (a3)+,d1 ; D1=Plane Adresse.
|
||
Move.l (a3)+,d0 ; D0=Bit Plane.
|
||
DLea _CopperBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Bne _spx
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_spx DLea _BitsPlanes,a0
|
||
Cmp.l #1,d0
|
||
Blt _spend
|
||
Cmp.l #8,d0
|
||
Bgt _spend
|
||
Sub.l #1,d0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l d1,(a0)
|
||
DLea _BplPtBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #2,a1
|
||
DLea _BitsPlanes,a0
|
||
DLea _Aga,a2
|
||
Cmp.l #0,(a2)
|
||
Bne _sp1
|
||
Move.l #11,d0 ; NON AGA SCREEN.
|
||
Bra _spb
|
||
_sp1 Move.l #15,d0 ; AGA SCREEN.
|
||
; MISE EN PLACE DES 8 BITS PLANS DANS LE COPPER LIST AGA.
|
||
_spb Move.w (a0)+,(a1)
|
||
Add.l #4,a1
|
||
Sub.l #1,d0
|
||
Bpl _spb
|
||
_spend RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_PLANEBASE Equ 17
|
||
L17 Move.l #0,d3
|
||
Move.l (a3)+,d0
|
||
Cmp.l #1,d0
|
||
Blt _pbend
|
||
Cmp.l #8,d0
|
||
Bgt _pbend
|
||
Sub.l #1,d0
|
||
Lsl.l #2,d0
|
||
DLea _BitsPlanes,a0
|
||
Add.l d0,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
Move.l #0,a0
|
||
_pbend Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_COLORREAD Equ 1
|
||
L18 Move.l #$FFFFFFFF,d3
|
||
Move.l (a3)+,d0
|
||
Cmp.l #0,d0
|
||
Blt _crend
|
||
Cmp.l #255,d0
|
||
Bgt _crend
|
||
DLea _Aga,a0
|
||
Cmp.l #0,(a0)
|
||
Bne _cr1
|
||
Cmp.l #31,d0
|
||
Bgt _crend
|
||
_cr1 DLea _AgaPalette,a0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
Move.l #0,a0
|
||
_crend RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LINEWAIT Equ 19
|
||
L19 DLea _CopperBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Bne _lwx
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_lwx DLea _CurrentLine,a2
|
||
Move.l (a2),a0
|
||
DLea _Line,a1
|
||
Move.l (a1),d0
|
||
Add.l #1,d0
|
||
Cmp.l #$100,d0
|
||
Blt _lw
|
||
Sub.l #$100,d0
|
||
_lw Move.b d0,(a0)+
|
||
Move.b #$01,(a0)+
|
||
Move.w #$FFFE,(a0)+
|
||
Move.l a0,(a2)
|
||
Move.l d0,(a1)
|
||
DLea _2nd,a2
|
||
Move.l (a2),d0
|
||
Cmp.l #1,d0
|
||
Beq _ll2
|
||
Move.l #$F201FFFE,(a0)+
|
||
Move.l #$01000000,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
Move.l #$F301FFFE,(a0)+
|
||
Move.l #$FFFFFFFE,(a0)+
|
||
_lwend RTS
|
||
_ll2 Move.l #$1403fffe,(a0)+
|
||
Move.l #$01000000,(a0)+
|
||
Move.l #$00960100,(a0)+
|
||
Move.l #$fffffffe,(a0)
|
||
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LINESEE Equ 20
|
||
L20 DLea _Line,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_VIEW2 Equ 21
|
||
L21 Move.l (a3)+,d0
|
||
DLea _Aga,a0
|
||
Move.l (a0),d1
|
||
Cmp.l #0,d1
|
||
Bne _vw1
|
||
Cmp.l #6,d0
|
||
Bgt _lvend
|
||
_vw1 DLea _CopperBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Bne _lvx
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_lvx DLea _PlanesMask,a0
|
||
Cmp.l #0,d0
|
||
Blt _lvend
|
||
Cmp.l #8,d0
|
||
Bgt _lvend
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d0 ; D0=Planes MASK
|
||
DLea _BplConBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #2,a1
|
||
Move.w (a1),d1
|
||
Bclr #12,d1 ; BPU0
|
||
Bclr #13,d1 ; BPU1
|
||
Bclr #14,d1 ; BPU2
|
||
Bclr #04,d1 ; BPU3
|
||
Or.l d1,d0
|
||
Move.w d0,(a1)
|
||
_lvend RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_COLORWAIT Equ 22
|
||
L22 DLea _DoubleCopper,a0
|
||
Move.l (a3)+,d4 ; D4=Bleu.
|
||
Move.l (a3)+,d3 ; D3=Vert.
|
||
Move.l (a3)+,d2 ; D2=Rouge.
|
||
Move.l (a3)+,d1 ; D1=REGISTRE COULEUR.
|
||
Move.l (a0),d0
|
||
Cmp.l #0,d0
|
||
Bne _cwend
|
||
DLea _CopperBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Bne _cwx
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
_cwx Cmp.l #0,d1
|
||
Blt _cwx2
|
||
Cmp.l #255,d1
|
||
Bgt _cwx2
|
||
Lsl.l #8,d2
|
||
Lsl.l #4,d3
|
||
Add.l d2,d4
|
||
Add.l d3,d4 ; D4=Valeur RGB Couleur.
|
||
Move.l d1,d0 ; D0=REGISTRE COULEUR.
|
||
Lsr.l #5,d1 ; D1=PALETTE 0,1,2,3,4,5,6,7 ???
|
||
DLea _CurrentPal,a2
|
||
Move.l (a2),d5
|
||
DLea _CurrentLine,a1 ; A0=Adresse COPPER LIST.
|
||
Move.l (a1),a0
|
||
Cmp.l d1,d5
|
||
Beq _cw2
|
||
Move.l d1,d5
|
||
Move.l d1,(a2)
|
||
Mulu #$2000,d1
|
||
Add.l #$01060000,d1
|
||
Move.l d1,(a0)+
|
||
_cw2 Move.l d0,d1
|
||
Lsr.l #5,d1
|
||
Lsl.l #5,d1
|
||
Sub.l d1,d0
|
||
Lsl.l #1,d0
|
||
Add.l #$0180,d0
|
||
Move.w d0,(a0)+
|
||
Move.w d4,(a0)+
|
||
DLea _CurrentLine,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$F201FFFE,(a0)+
|
||
Move.l #$01000000,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
Move.l #$F301FFFE,(a0)+
|
||
Move.l #$FFFFFFFE,(a0)+
|
||
_cwend RTS
|
||
_cwx2 Moveq #2,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SCREENSIZE Equ 23
|
||
L23 Move.l (a3)+,d1 ; D1=Y SCREEN SIZE.
|
||
Move.l (a3)+,d0 ; D0=X SCREEN SIZE.
|
||
Cmp.l #320,d0
|
||
Bgt _lss2
|
||
Move.l #320,d0
|
||
_lss2 Cmp.l #192,d1
|
||
Bgt _lss3
|
||
Move.l #192,d1
|
||
; SAUVEGARDE DES TAILLES DANS LES REGISTRES MEMOIRE.
|
||
_lss3 DLea _XY,a0
|
||
Move.l d0,(a0)+
|
||
Move.l d1,(a0)
|
||
; INSCRIPTION DE LA TAILLE EN X SUR LA COPPER LIST.
|
||
DLea _Others,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Beq Llss4
|
||
Add.l #18,a0
|
||
Sub.l #320,d0
|
||
Lsr.l #3,d0
|
||
Move.w d0,(a0)
|
||
Add.l #4,a0
|
||
Move.w d0,(a0)
|
||
Rts
|
||
Llss4 Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_XSIZE Equ 24
|
||
L24 DLea _XY,a1
|
||
Move.l (a1),d3
|
||
cmp.l #320,d3
|
||
Bgt _l1
|
||
Move.l #320,d3
|
||
_l1 Move.l #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_YSIZE Equ 25
|
||
L25 DLea _XY,a1
|
||
Add.l #4,a1
|
||
Move.l (a1),d3
|
||
cmp.l #192,d3
|
||
Bgt _ly1
|
||
Move.l #192,d3
|
||
_ly1 Move.l #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CREATECOPPER2 Equ 26
|
||
L26 SaveRegisters
|
||
Move.l (a3),a0
|
||
Cmp.l #0,a0
|
||
Bne _ccz
|
||
Moveq #0,d0
|
||
Rbra L_CUSTOM
|
||
; SAUVEGARDE DE L'ADRESSE DE BASE DU COPPER-LIST A CREER.
|
||
_ccz DLea _CopperBase,a1
|
||
Move.l a0,(a1)
|
||
; COP WAIT ...
|
||
Move.l #$1003FFFE,(a0)+
|
||
Move.l #$01fc0000,(a0)+ ; Anti Double Scanning.
|
||
; CREATION DES SPRITES POUR LE COPPER-LIST.
|
||
DLea _SprPtBase,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$01200000,d0
|
||
_cd1 Move.l d0,(a0)+
|
||
Add.l #$20000,d0
|
||
Cmp.l #$01400000,d0
|
||
Bne _cd1
|
||
; CREATION DE LA PALETTE DE 256 COULEURS AGA SEULEMENT !!!
|
||
Move.l #$1803FFFE,(a0)+
|
||
; Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
DLea _ColorBase,a1
|
||
Move.l a0,(a1)
|
||
; SELECTION DU BLOC MEMOIRE.
|
||
Move.l #$01800000,d1
|
||
; BLOCS DE 32 COULEURS A CODER SEPAREMENT.
|
||
_cf3 Move.l d1,(a0)+
|
||
Add.l #$00020000,d1
|
||
Cmp.l #$01C00000,d1
|
||
Bne _cf3
|
||
; CREATION DE L'ECRAN.
|
||
Move.l #$3103FFFE,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
DLea _BplPtBase,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$00E00000,d0 ; Bpl0PTH
|
||
; BPLPTH\L INSTALLATION POUR LES 8 BIT-PLANS.
|
||
_cd4 Move.l d0,(a0)+
|
||
Add.l #$00020000,d0
|
||
Cmp.l #$01000000,d0
|
||
Bne _cd4
|
||
; OTHERS REGISTERS.
|
||
DLea _Others,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$008E0181,(a0)+ ; DIWSTRT ???
|
||
Move.l #$009037C1,(a0)+ ; DIWSTOP ???
|
||
Move.l #$00920038,(a0)+ ; DDFSTRT =38 no scrl,=30 scroll.
|
||
Move.l #$009400D0,(a0)+ ; DDFSTOP
|
||
Move.l #$01080000,(a0)+ ; BPL1MOD
|
||
Move.l #$010A0000,(a0)+ ; BPL2MOD
|
||
Move.l #$0098FFC0,(a0)+ ; CLXCON Enable/Disable Planes.
|
||
DLea _BplConBase,a1
|
||
Move.l a0,(a1)
|
||
; BPLCON REGISTERS.
|
||
Move.l #$01001000,(a0)+ ; BPLCON0
|
||
Move.l #$01020000,(a0)+ ; BPLCON1
|
||
Move.l #$01040024,(a0)+ ; BPLCON2
|
||
Move.l #$01060c00,(a0)+ ; BPLCON3=$c00 For 2nd field PAL.
|
||
;
|
||
Move.l #$3203FFFE,(a0)+
|
||
Move.l #$00968300,(a0)+
|
||
DLea _CurrentLine,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$F203FFFE,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos ?!?
|
||
Move.l #$F303FFFE,(a0)+
|
||
Move.l #$01060000,(a0)+ ; BPLCON3 Default For AMOS BACK.
|
||
Move.l #$FFFFFFFE,(a0)+
|
||
DLea _Line,a1
|
||
Move.l #$32,(a1)
|
||
DLea _Aga,a1
|
||
Move.l #$0,(a1) ; NONAGA SCREEN.
|
||
DLea _2nd,a1
|
||
Move.l #0,(a1)
|
||
LoadRegisters
|
||
Add.l #4,a3 ; 1 donnee lue !!!
|
||
Move.l #0,d3 ; Copper cree normalement .
|
||
Rts
|
||
_NoCopper2
|
||
DLea _Line,a1
|
||
Move.l #$32,(a1)
|
||
LoadRegisters
|
||
Move.l #$ffffffff,d3 ; Copper non cree !!!
|
||
Add.l #4,a3 ; 1 donnee lue !!!
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SCREENOFFSET Equ 27
|
||
L27 Move.l (a3)+,d1 ; D1=Y Offset.
|
||
Move.l (a3)+,d0 ; D0=X Offset.
|
||
Move.l (a3)+,d4 ; D4=Offset Type 1=Sc1 2=Sc2 0=No dual pf
|
||
DLea _D4,a0
|
||
Move.l d4,(a0)
|
||
DLea _XYOff,a0
|
||
Cmp.l #1,d4
|
||
Beq _Scrn1
|
||
Cmp.l #2,d4
|
||
Beq _Scrn2
|
||
_Scrn0 Move.l d0,(a0)+
|
||
Move.l d1,(a0)+
|
||
Move.l d0,(a0)+
|
||
Move.l d1,(a0)
|
||
Bra _S3
|
||
_Scrn1 Move.l d0,(a0)+
|
||
Move.l d1,(a0)
|
||
Bra _S3
|
||
_Scrn2 Add.l #8,a0
|
||
Move.l d0,(a0)+
|
||
Move.l d1,(a0)
|
||
_S3 DLea _XYOff,a0
|
||
Move.l (a0)+,d0 ; D0=X Offset #1.=D4
|
||
Move.l (a0)+,d2 ; D1=X Offset #2.=D5
|
||
Move.l (a0)+,d1 ; D2=Y Offset #1.
|
||
Move.l (a0),d3 ; D3=Y Offset #2.
|
||
DLea _XY,a0
|
||
Move.l (a0),d7 ; D7=X Screen Size.
|
||
Lsr.l #3,d7 ; D7=X Bytes Screen Size.
|
||
Mulu d7,d2
|
||
Mulu d7,d3
|
||
Move.l d0,d4
|
||
Move.l d1,d5
|
||
Lsr.l #4,d4
|
||
Lsr.l #4,d5
|
||
Lsl.l #1,d4
|
||
Lsl.l #1,d5
|
||
Add.l d4,d2 ; D2=Bytes to add #1.
|
||
Add.l d5,d3 ; D3=Bytes to add #2.
|
||
Lsl.l #3,d4
|
||
Lsl.l #3,d5
|
||
Sub.l d4,d0
|
||
Sub.l d5,d1
|
||
Move.l #16,d4
|
||
Move.l #16,d5
|
||
Sub.l d0,d4
|
||
Sub.l d1,d5
|
||
Cmp.l #16,d4
|
||
Bne _S3a
|
||
Move.l #0,d4
|
||
_S3a Cmp.l #16,d5
|
||
Bne _S3b
|
||
Move.l #0,d5
|
||
_S3b Lsl.l #4,d5
|
||
Move.l d5,d6
|
||
Add.l d4,d5 ; D5=BPLCON1 NEW VALUE.
|
||
; calcul desnouveaux bits plans.
|
||
DLea _BitsPlanes,a0
|
||
DLea _BitsPlanes2,a1
|
||
Cmp.l #0,(a0)
|
||
Beq xxw
|
||
Move.l #3,d7
|
||
_S3c Move.l (a0)+,d0
|
||
Move.l (a0)+,d1
|
||
Add.l d2,d0
|
||
; Added in case of no DUAL PLAYFIELD.
|
||
DLea _D4,a2
|
||
Cmp.b #0,d4
|
||
Bne _s3cc
|
||
Cmp.l #0,(a2)
|
||
Beq _s3cc
|
||
Sub.l #2,d0
|
||
_s3cc Add.l d3,d1
|
||
Cmp.b #0,d6
|
||
Bne _s3cd
|
||
Cmp.l #0,(a2)
|
||
Beq _s3cd
|
||
Sub.l #2,d1
|
||
_s3cd Move.l d0,(a1)+
|
||
Move.l d1,(a1)+
|
||
Sub.l #1,d7
|
||
Bpl _S3c
|
||
; Placement des bits plans dans la copper liste.
|
||
DLea _BitsPlanes2,a0
|
||
DLea _BplPtBase,a2
|
||
Move.l (a2),a1
|
||
Add.l #2,a1
|
||
Move.l #15,d0
|
||
_S3d Move.w (a0)+,(a1)
|
||
Add.l #4,a1
|
||
Sub.l #1,d0
|
||
Bpl _S3d
|
||
; calcul si valeur scrolling=0 ou<>0
|
||
DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Add.l #6,a0
|
||
Move.w d5,(a0)
|
||
Cmp.w #0,d5
|
||
Bne _Unequ
|
||
_Equ DLea _Others,a2
|
||
Move.l (a2),a0
|
||
Add.l #10,a0
|
||
Move.w #$38,(a0)
|
||
Add.l #8,a0
|
||
DLea _XY,a1
|
||
Move.l (a1),d0
|
||
Sub.l #320,d0
|
||
Lsr.l #3,d0
|
||
Move.w d0,(a0)
|
||
Add.l #4,a0
|
||
Move.w d0,(a0)
|
||
Bra _eend
|
||
;
|
||
_Unequ DLea _Others,a2
|
||
Move.l (a2),a0
|
||
Add.l #10,a0
|
||
Move.w #$30,(a0)
|
||
Add.l #8,a0
|
||
DLea _XY,a1
|
||
Move.l (a1),d0
|
||
Sub.l #320,d0
|
||
Lsr.l #3,d0
|
||
Sub.l #2,d0
|
||
Move.w d0,(a0)
|
||
Add.l #4,a0
|
||
Move.w d0,(a0)
|
||
_eend RTS
|
||
xxw Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_DUALPLAYFIELD Equ 28
|
||
L28 Move.l (a3)+,d2
|
||
DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _dpx
|
||
Add.l #2,a0
|
||
Move.w (a0),d0
|
||
Cmp.l #0,d2
|
||
Bne _Dual
|
||
BClr #10,d0
|
||
Bra _Dpend
|
||
_Dual Bset #10,d0
|
||
_Dpend Move.w d0,(a0)
|
||
Rts
|
||
_dpx Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_RESOLUTION Equ 29
|
||
L29 Move.l (a3)+,d2
|
||
DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _rx
|
||
Add.l #2,a0
|
||
Move.w (a0),d0
|
||
Cmp.l #0,d2
|
||
Beq _Low
|
||
_High Bset #15,d0
|
||
Bra _Rend
|
||
_Low Bclr #15,d0
|
||
_Rend Move.w d0,(a0)
|
||
RTS
|
||
_rx Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETLACE Equ 30
|
||
L30 Move.l (a3)+,d2
|
||
DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _lsq
|
||
Add.l #2,a0
|
||
Move.w (a0),d0
|
||
Cmp.l #0,d2
|
||
Beq _Nolace
|
||
_Lace Bset #2,d0
|
||
Bra _lend
|
||
_Nolace Bclr #2,d0
|
||
_lend Move.w d0,(a0)
|
||
Rts
|
||
_lsq Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_COPPERLINE2 Equ 31
|
||
L31 DLea _Line,a0
|
||
Move.l (a3)+,d0
|
||
DLea _DoubleCopper,a1
|
||
Move.l (a1),d1
|
||
Cmp.l #0,d1
|
||
Bne _clend
|
||
Move.l d0,(a0)
|
||
DLea _CurrentLine,a0
|
||
Move.l (a0),a1
|
||
Cmp.l #0,a1
|
||
Beq _clw
|
||
Move.b d0,(a1)+
|
||
Move.b #$03,(a1)+
|
||
Move.w #$FFFE,(a1)+
|
||
Move.l a1,(a0)
|
||
DLea _2nd,a2
|
||
Move.l (a2),d0
|
||
Cmp.l #1,d0
|
||
Beq _ll3
|
||
Move.l #$F201FFFE,(a1)+
|
||
Move.l #$01000000,(a1)+
|
||
Move.l #$00960100,(a1)+ ; DMACON Pour l'amos ?!?
|
||
Move.l #$F301FFFE,(a1)+
|
||
Move.l #$FFFFFFFE,(a1)+
|
||
_clend RTS
|
||
_ll3 Move.l #$1403fffe,(a1)+
|
||
Move.l #$01000000,(a1)+
|
||
Move.l #$00960100,(a1)+
|
||
Move.l #$fffffffe,(a1)
|
||
Rts
|
||
_clw Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MOSAICx2 Equ 32
|
||
L32 SaveRegisters
|
||
; SAVE SCREEN BASE IN DATA BANK.
|
||
Move.l (a3),d0 ; D0=Screen Base.
|
||
DLea _MosaicBase,a0
|
||
Move.l d0,(a0)
|
||
; TRANSFERT DES 6 BITS PLANES IN DATA BANK.
|
||
DLea _MosaicPlanes,a0
|
||
Move.l d0,a1
|
||
Move.l #5,d1
|
||
_m1 Move.l (a1)+,(a0)+
|
||
Sub.l #1,d1
|
||
Bpl _m1
|
||
; POSITIONNEMENT DES DONNEES.
|
||
DLea _MosaicBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #76,a1
|
||
Clr.l d6
|
||
Move.w (a1)+,d6 ; D6=X SCREEN SIZE.
|
||
Clr.l d7
|
||
Move.w (a1)+,d7 ; D7=Y SCREEN SIZE.
|
||
Lsr.l #1,d7
|
||
Lsl.l #1,d7 ; D7 Paire
|
||
DLea _MosaicPlanes,a0 ; A0=BASE DES BITS PLANS.
|
||
Move.l d6,d3
|
||
Lsr.l #3,d3 ; D3=X OCTETS SCREEN SIZE.
|
||
; TESTE SI IL EXISTE UN AUTRE BIT PLAN.
|
||
_m2 Move.l (a0)+,a1
|
||
Cmp.l #0,a1 ; A1=CURRENT SCREEN LINE.
|
||
Beq _mend
|
||
Move.l #0,d1 ; D1=CURRENT SCREEN LINE POS.
|
||
Move.l a1,a2
|
||
Add.l d3,a2 ; A2=CURRENT SCREEN LINE +1.
|
||
Move.l a2,a3 ; A3= '' '' '' '' '' '' '' .
|
||
_m3 Move.l (a1),d0 ; D0=Donnee Lue.
|
||
Move.l #$AAAAAAAA,d2 ; D2=Masque
|
||
And.l d0,d2
|
||
Move.l d2,d0
|
||
Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Move.l d0,(a1)+
|
||
Move.l d0,(a2)+
|
||
Cmp.l a1,a3
|
||
Bne _m3
|
||
; UNE LIGNE TERMINEE.
|
||
Add.l d3,a1 ; A1 = A1 + 1 Ligne.
|
||
Add.l d3,a2 ; A2 = A2 + 1 Ligne.
|
||
Add.l d3,a3
|
||
Add.l d3,a3 ; A3 = A3 + 2 Lignes. !!!
|
||
Add.l #2,d1
|
||
Cmp.l d1,d7
|
||
Bne _m3
|
||
Bra _m2
|
||
_mend LoadRegisters
|
||
Add.l #4,a3 ; 2 donnees lues.
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MOSAICx4 Equ 33
|
||
L33 SaveRegisters
|
||
; SAVE SCREEN BASE IN DATA BANK.
|
||
Move.l (a3),d0 ; D0=Screen Base.
|
||
DLea _MosaicBase,a0
|
||
Move.l d0,(a0)
|
||
; TRANSFERT DES 6 BITS PLANES IN DATA BANK.
|
||
DLea _MosaicPlanes,a0
|
||
Move.l d0,a1
|
||
Move.l #5,d1
|
||
_mb1 Move.l (a1)+,(a0)+
|
||
Sub.l #1,d1
|
||
Bpl _mb1
|
||
; POSITIONNEMENT DES DONNEES.
|
||
DLea _MosaicBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #76,a1
|
||
Clr.l d6
|
||
Move.w (a1)+,d6 ; D6=X SCREEN SIZE.
|
||
Clr.l d7
|
||
Move.w (a1)+,d7 ; D7=Y SCREEN SIZE.
|
||
Lsr.l #2,d7
|
||
Lsl.l #2,d7 ; D7 Multiple de 4
|
||
DLea _MosaicPlanes,a0 ; A0=BASE DES BITS PLANS.
|
||
Move.l d6,d3
|
||
Lsr.l #3,d3 ; D3=X OCTETS SCREEN SIZE.
|
||
; TESTE SI IL EXISTE UN AUTRE BIT PLAN.
|
||
_mb2 Move.l (a0)+,a1
|
||
Cmp.l #0,a1 ; A1=CURRENT SCREEN LINE.
|
||
Beq _mbend
|
||
Move.l #0,d1 ; D1=CURRENT SCREEN LINE POS.
|
||
Move.l a1,a2
|
||
Add.l d3,a2 ; A2=CURRENT SCREEN LINE +1.
|
||
Move.l a2,a3 ; A3= '' '' '' '' '' '' '' .
|
||
_mb3 Move.l (a1),d0 ; D0=Donnee Lue.
|
||
Move.l #$88888888,d2 ; D2=Masque
|
||
And.l d0,d2
|
||
Move.l d2,d0
|
||
Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Move.l d0,(a1)+
|
||
Move.l d0,(a2)
|
||
Add.l d3,a2
|
||
Move.l d0,(a2)
|
||
Add.l d3,a2
|
||
Move.l d0,(a2)+
|
||
Sub.l d3,a2
|
||
Sub.l d3,a2
|
||
Cmp.l a1,a3
|
||
Bne _mb3
|
||
; UNE LIGNE TERMINEE.
|
||
add.l d3,a1
|
||
Add.l d3,a2
|
||
Lsl.l #1,d3
|
||
Add.l d3,a1 ; A1 = A1 + 3 Ligne.
|
||
Add.l d3,a2 ; A2 = A2 + 3 Ligne.
|
||
Add.l d3,a3
|
||
Add.l d3,a3 ; A3 = A3 + 4 Lignes. !!!
|
||
Lsr.l #1,d3
|
||
Add.l #4,d1
|
||
Cmp.l d1,d7
|
||
Bne _mb3
|
||
Bra _mb2
|
||
_mbend LoadRegisters
|
||
Add.l #4,a3 ; 2 donnees lues.
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_Mosaicx8 Equ 34
|
||
L34 SaveRegisters
|
||
; SAVE SCREEN BASE IN DATA BANK.
|
||
Move.l (a3),d0 ; D0=Screen Base.
|
||
DLea _MosaicBase,a0
|
||
Move.l d0,(a0)
|
||
; TRANSFERT DES 6 BITS PLANES IN DATA BANK.
|
||
DLea _MosaicPlanes,a0
|
||
Move.l d0,a1
|
||
Move.l #5,d1
|
||
_mc1 Move.l (a1)+,(a0)+
|
||
Sub.l #1,d1
|
||
Bpl _mc1
|
||
; POSITIONNEMENT DES DONNEES.
|
||
DLea _MosaicBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #76,a1
|
||
Clr.l d6
|
||
Move.w (a1)+,d6 ; D6=X SCREEN SIZE.
|
||
Clr.l d7
|
||
Move.w (a1)+,d7 ; D7=Y SCREEN SIZE.
|
||
Lsr.l #3,d7
|
||
Lsl.l #3,d7 ; D7 Multiple de 4
|
||
DLea _MosaicPlanes,a0 ; A0=BASE DES BITS PLANS.
|
||
Move.l d6,d3
|
||
Lsr.l #3,d3 ; D3=X OCTETS SCREEN SIZE.
|
||
; TESTE SI IL EXISTE UN AUTRE BIT PLAN.
|
||
_mc2 Move.l (a0)+,a1
|
||
Cmp.l #0,a1 ; A1=CURRENT SCREEN LINE.
|
||
Beq _mcend
|
||
Move.l #0,d1 ; D1=CURRENT SCREEN LINE POS.
|
||
Move.l a1,a2
|
||
Add.l d3,a2 ; A2=CURRENT SCREEN LINE +1.
|
||
Move.l a2,a3 ; A3= '' '' '' '' '' '' '' .
|
||
_mc3 Move.l (a1),d0 ; D0=Donnee Lue.
|
||
Move.l #$80808080,d2 ; D2=Masque.
|
||
And.l d0,d2
|
||
Move.l d2,d0
|
||
Move.l #7,d4
|
||
_mcw Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mcw
|
||
Move.l d0,(a1)+
|
||
Move.l #6,d4
|
||
_mcx Move.l d0,(a2)
|
||
Add.l d3,a2
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mcx
|
||
Move.l d0,(a2)+
|
||
Mulu #6,d3
|
||
Sub.l d3,a2
|
||
Divu #6,d3
|
||
Cmp.l a1,a3
|
||
Bne _mc3
|
||
; UNE LIGNE TERMINEE.
|
||
Mulu #7,d3
|
||
Add.l d3,a1
|
||
Add.l d3,a2
|
||
Add.l d3,a3
|
||
Divu #7,d3
|
||
Add.l d3,a3 ; A3=1 ligne de plus que les autres (a1,a2)
|
||
Add.l #8,d1
|
||
Cmp.l d1,d7
|
||
Bne _mc3
|
||
Bra _mc2
|
||
_mcend LoadRegisters
|
||
Add.l #4,a3 ; 2 donnees lues.
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_Mosaicx16 Equ 35
|
||
L35 SaveRegisters
|
||
; SAVE SCREEN BASE IN DATA BANK.
|
||
Move.l (a3),d0 ; D0=Screen Base.
|
||
DLea _MosaicBase,a0
|
||
Move.l d0,(a0)
|
||
; TRANSFERT DES 6 BITS PLANES IN DATA BANK.
|
||
DLea _MosaicPlanes,a0
|
||
Move.l d0,a1
|
||
Move.l #5,d1
|
||
_md1 Move.l (a1)+,(a0)+
|
||
Sub.l #1,d1
|
||
Bpl _md1
|
||
; POSITIONNEMENT DES DONNEES.
|
||
DLea _MosaicBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #76,a1
|
||
Clr.l d6
|
||
Move.w (a1)+,d6 ; D6=X SCREEN SIZE.
|
||
Clr.l d7
|
||
Move.w (a1)+,d7 ; D7=Y SCREEN SIZE.
|
||
Lsr.l #4,d7
|
||
Lsl.l #4,d7 ; D7 Multiple de 4
|
||
DLea _MosaicPlanes,a0 ; A0=BASE DES BITS PLANS.
|
||
Move.l d6,d3
|
||
Lsr.l #3,d3 ; D3=X OCTETS SCREEN SIZE.
|
||
; TESTE SI IL EXISTE UN AUTRE BIT PLAN.
|
||
_md2 Move.l (a0)+,a1
|
||
Cmp.l #0,a1 ; A1=CURRENT SCREEN LINE.
|
||
Beq _mdend
|
||
Move.l #0,d1 ; D1=CURRENT SCREEN LINE POS.
|
||
Move.l a1,a2
|
||
Add.l d3,a2 ; A2=CURRENT SCREEN LINE +1.
|
||
Move.l a2,a3 ; A3= '' '' '' '' '' '' '' .
|
||
_md3 Move.l (a1),d0 ; D0=Donnee Lue.
|
||
Move.l #$80008000,d2 ; D2=Masque.
|
||
And.l d0,d2
|
||
Move.l d2,d0
|
||
Move.l #15,d4
|
||
_mdw Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mdw
|
||
Move.l d0,(a1)+
|
||
Move.l #14,d4
|
||
_mdx Move.l d0,(a2)
|
||
Add.l d3,a2
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mdx
|
||
Move.l d0,(a2)+
|
||
Mulu #14,d3
|
||
Sub.l d3,a2
|
||
Divu #14,d3
|
||
Cmp.l a1,a3
|
||
Bne _md3
|
||
; UNE LIGNE TERMINEE.
|
||
Mulu #15,d3
|
||
Add.l d3,a1
|
||
Add.l d3,a2
|
||
Add.l d3,a3
|
||
Divu #15,d3
|
||
Add.l d3,a3 ; A3=1 ligne de plus que les autres (a1,a2)
|
||
Add.l #16,d1
|
||
Cmp.l d1,d7
|
||
Bne _md3
|
||
Bra _md2
|
||
_mdend LoadRegisters
|
||
Add.l #4,a3
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MOSAICx32 Equ 36
|
||
L36 SaveRegisters
|
||
; SAVE SCREEN BASE IN DATA BANK.
|
||
Move.l (a3),d0 ; D0=Screen Base.
|
||
DLea _MosaicBase,a0
|
||
Move.l d0,(a0)
|
||
; TRANSFERT DES 6 BITS PLANES IN DATA BANK.
|
||
DLea _MosaicPlanes,a0
|
||
Move.l d0,a1
|
||
Move.l #5,d1
|
||
_me1 Move.l (a1)+,(a0)+
|
||
Sub.l #1,d1
|
||
Bpl _me1
|
||
; POSITIONNEMENT DES DONNEES.
|
||
DLea _MosaicBase,a0
|
||
Move.l (a0),a1
|
||
Add.l #76,a1
|
||
Clr.l d6
|
||
Move.w (a1)+,d6 ; D6=X SCREEN SIZE.
|
||
Clr.l d7
|
||
Move.w (a1)+,d7 ; D7=Y SCREEN SIZE.
|
||
Lsr.l #5,d7
|
||
Lsl.l #5,d7 ; D7 Multiple de 32
|
||
DLea _MosaicPlanes,a0 ; A0=BASE DES BITS PLANS.
|
||
Move.l d6,d3
|
||
Lsr.l #3,d3 ; D3=X OCTETS SCREEN SIZE.
|
||
; TESTE SI IL EXISTE UN AUTRE BIT PLAN.
|
||
_me2 Move.l (a0)+,a1
|
||
Cmp.l #0,a1 ; A1=CURRENT SCREEN LINE.
|
||
Beq _meend
|
||
Move.l #0,d1 ; D1=CURRENT SCREEN LINE POS.
|
||
Move.l a1,a2
|
||
Add.l d3,a2 ; A2=CURRENT SCREEN LINE +1.
|
||
Move.l a2,a3 ; A3= '' '' '' '' '' '' '' .
|
||
_me3 Move.l (a1),d0 ; D0=Donnee Lue.
|
||
Move.l #$80000000,d2 ; D2=Masque.
|
||
And.l d0,d2
|
||
Move.l d2,d0
|
||
Move.l #31,d4
|
||
_mew Lsr.l #1,d2
|
||
Or.l d2,d0 ; D0=Nouvelle Donnee.
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mew
|
||
Move.l d0,(a1)+
|
||
Move.l #30,d4
|
||
_mex Move.l d0,(a2)
|
||
Add.l d3,a2
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _mex
|
||
Move.l d0,(a2)+
|
||
Mulu #30,d3
|
||
Sub.l d3,a2
|
||
Divu #30,d3
|
||
Cmp.l a1,a3
|
||
Bne _me3
|
||
; UNE LIGNE TERMINEE.
|
||
Mulu #31,d3
|
||
Add.l d3,a1
|
||
Add.l d3,a2
|
||
Add.l d3,a3
|
||
Divu #31,d3
|
||
Add.l d3,a3 ; A3=1 ligne de plus que les autres (a1,a2)
|
||
Add.l #32,d1
|
||
Cmp.l d1,d7
|
||
Bne _me3
|
||
Bra _me2
|
||
_meend LoadRegisters
|
||
Add.l #4,a3 ; 2 donnees lues.
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ACTIVECOP Equ 37
|
||
L37 DLea _CopperBase,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #0,d0
|
||
Beq _acx
|
||
Move.l d0,$dff080
|
||
Rts
|
||
_acx Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETHAMMODE Equ 38
|
||
L38 Move.l (a3)+,d0
|
||
DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _shm
|
||
Add.l #2,a0
|
||
Move.w (a0),d1
|
||
Cmp.l #0,d0
|
||
Bne _Set
|
||
_Unset Bclr #11,d1
|
||
Bra _rp
|
||
_Set Bset #11,d1
|
||
_rp Move.w d1,(a0)
|
||
RTS
|
||
_shm Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IFFTOSCREEN Equ 39
|
||
L39 DLea _IffBase,a0
|
||
Move.l (a3)+,(a0)
|
||
; Find BMHD Header
|
||
DLea _IffBase,a0
|
||
Move.l (a0),a2
|
||
; Bclr #0,a2
|
||
Move.l #16384,d0
|
||
Move.l a2,a0
|
||
_bm Move.l (a0),d1
|
||
Cmp.l #"BMHD",d1
|
||
Beq _bm2
|
||
Sub.l #1,d0
|
||
Add.l #2,a0
|
||
Cmp.l #0,d0
|
||
Bne _bm
|
||
Bra _its ; BMHD Non trouve !!!
|
||
_bm2 Add.l #4,a0
|
||
DLea _Bmhd,a1
|
||
Move.l a0,(a1)
|
||
; Find CMAP Header
|
||
Move.l #16384,d0
|
||
Move.l a2,a0
|
||
_cm Move.l (a0),d1
|
||
Cmp.l #"CMAP",d1
|
||
Beq _cm2
|
||
Sub.l #1,d0
|
||
Add.l #2,a0
|
||
Cmp.l #0,d0
|
||
Bne _cm
|
||
Bra _its ; CMAP Non trouve !!!
|
||
_cm2 Add.l #4,a0
|
||
DLea _Cmap,a1
|
||
Move.l a0,(a1)
|
||
; Find BODY Header
|
||
Move.l #16384,d0
|
||
Move.l a2,a0
|
||
_bo Move.l (a0),d1
|
||
Cmp.l #"BODY",d1
|
||
Beq _bo2
|
||
Sub.l #1,d0
|
||
Add.l #2,a0
|
||
Cmp.l #0,d0
|
||
Bne _bo
|
||
Bra _its ; CMAP Non trouve !!!
|
||
_bo2 Add.l #4,a0
|
||
DLea _Body,a1
|
||
Move.l a0,(a1)
|
||
DLea _Bmhd,a2
|
||
Move.l (a2),a0
|
||
Add.l #4,a0
|
||
Clr.l d0
|
||
Move.w (a0)+,d0
|
||
Clr.l d1
|
||
Move.w (a0),d1
|
||
DLea _Bmhd,a2
|
||
Move.l (a2),a0
|
||
Add.l #12,a0
|
||
Clr.l d7
|
||
Move.b (a0),d7
|
||
DLea _LbmXs,a0
|
||
Move.l d0,(a0)
|
||
DLea _LbmYs,a0
|
||
Move.l d1,(a0)
|
||
DLea _LbmDp,a0
|
||
Move.l d7,(a0)
|
||
DLea _BitsPlanes,a0
|
||
Sub.l #1,d7
|
||
Lsl.l #2,d7
|
||
Add.l d7,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #0,d0
|
||
Beq _its
|
||
; Copier les _bitsPlanes: dans _BitsPlanes3:
|
||
DLea _BitsPlanes,a0
|
||
DLea _BitsPlanes3,a1
|
||
Move.l #7,d0
|
||
_bp Move.l (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _bp
|
||
;
|
||
; CONVERTION ILBM TO AMOS COPPER DEFINED SCREEN V1.0
|
||
;
|
||
_TRACE
|
||
; A3 Replaced by A2. Two lines.
|
||
DLea _Body,a2
|
||
Move.l (a2),a0
|
||
Add.l #4,a0
|
||
; For D0=1 To _YSIZE
|
||
Move.l #1,d0
|
||
_01
|
||
; For d1=0 To _NBPL-1
|
||
Move.l #0,d1
|
||
_02
|
||
; For d2=1 To(_XSIZE/8)
|
||
Move.l #1,d2
|
||
_03
|
||
; D3=Peek(A0)
|
||
Clr.l d3
|
||
Move.b (a0),d3
|
||
; Add a0,1
|
||
Add.l #1,a0
|
||
; D4=Peek(A0)
|
||
Move.b (a0),d4
|
||
; Add A0,1
|
||
Add.l #1,a0
|
||
; If D3>$80 Then Goto _COMPRESSED
|
||
Cmp.l #$80,d3
|
||
Bgt _COMPRESSED
|
||
_NOCOMPRESSION
|
||
; Dec A0
|
||
Sub.l #1,a0
|
||
; For D5=0 To D3
|
||
Move.l #0,d5
|
||
_04
|
||
; Poke _BPL(d1),Peek(A0)
|
||
Move.l d1,d7
|
||
Lsl.l #2,d7
|
||
DLea _BitsPlanes3,a1
|
||
Add.l d7,a1
|
||
Move.l (a1),a2
|
||
Move.b (a0),(a2)
|
||
; Inc _BPL(d1)
|
||
Add.l #1,a2
|
||
Move.l a2,(a1)
|
||
; Inc A0
|
||
Add.l #1,a0
|
||
; Next D5
|
||
Add.l #1,d5
|
||
Move.l d3,d7
|
||
Add.l #1,d7
|
||
Cmp.l d7,d5
|
||
Bne _04
|
||
; D2=D2+D3
|
||
Add.l d3,d2
|
||
; Goto _CONTINUE
|
||
Bra _CONTINUE
|
||
|
||
_COMPRESSED:
|
||
; D5=(257-D3)
|
||
Move.l #257,d5
|
||
Sub.l d3,d5
|
||
; If D5>(_XSIZE/8) Then Bell : Goto _END
|
||
; A3 Replaced by A1. Two lines.
|
||
DLea _LbmXs,a1
|
||
Move.l (a1),d7
|
||
Lsr.l #3,d7
|
||
Cmp.l d7,d5
|
||
Bgt _END
|
||
; For D6=1 To D5
|
||
Move.l #1,d6
|
||
_05
|
||
; Poke _BPL(d1),D4
|
||
DLea _BitsPlanes3,a1
|
||
Move.l d1,d7
|
||
Lsl.l #2,d7
|
||
Add.l d7,a1
|
||
Move.l (a1),a2
|
||
Move.b d4,(a2)
|
||
; Inc _BPL(d1)
|
||
Add.l #1,a2
|
||
Move.l a2,(a1)
|
||
; Next D6
|
||
Add.l #1,d6
|
||
Move.l d5,d7
|
||
Add.l #1,d7
|
||
Cmp.l d7,d6
|
||
Bne _05
|
||
; D2=D2+(D5-1)
|
||
Add.l d5,d2
|
||
Sub.l #1,d2
|
||
_CONTINUE
|
||
; Next D2
|
||
Add.l #1,d2
|
||
; A3 Replaced by A1. Two lines.
|
||
DLea _LbmXs,a1
|
||
Move.l (a1),d7
|
||
Lsr.l #3,d7
|
||
Add.l #1,d7
|
||
Cmp.l d7,d2
|
||
Bne _03
|
||
; Next D1
|
||
Add.l #1,d1
|
||
; A3 Replaced by A1. Two lines.
|
||
DLea _LbmDp,a1
|
||
Move.l (a1),d7
|
||
Cmp.l d7,d1
|
||
Bne _02
|
||
; Next D0
|
||
Add.l #1,d0
|
||
; A3 Replaced by A1. Two lines.
|
||
DLea _LbmYs,a1
|
||
Move.l (a1),d7
|
||
Add.l #1,d7
|
||
Cmp.l d7,d0
|
||
Bne _01
|
||
_END
|
||
; FIN DE LA CONVERTION.
|
||
_its Move.l #0,a0
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ALLOWPLANES Equ 40
|
||
L40 Move.l (a3)+,d0
|
||
DLea _Others,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq Apx
|
||
Add.l #26,a0
|
||
DLea _BPlanesMask,a1
|
||
Cmp.l #1,d0
|
||
Blt _ap
|
||
Cmp.l #6,d0
|
||
Bgt _ap
|
||
Bset d0,(a1)
|
||
Lsl.l #6,d0
|
||
Move.w (a0),d1
|
||
Bset d0,d1
|
||
Move.w d1,(a0)
|
||
_ap RTS
|
||
Apx Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_FORBIDPLANES Equ 41
|
||
L41 Move.l (a3)+,d0
|
||
DLea _Others,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq fb
|
||
Add.l #26,a0
|
||
DLea _BPlanesMask,a1
|
||
Cmp.l #1,d0
|
||
Blt _fp
|
||
Cmp.l #6,d0
|
||
Bgt _fp
|
||
Bclr d0,(a1)
|
||
Lsl.l #6,d0
|
||
Move.w (a0),d1
|
||
Bclr d0,d1
|
||
Move.w d1,(a0)
|
||
_fp RTS
|
||
fb Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_RESERVEDPF Equ 42
|
||
L42 DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq Apy
|
||
Add.l #10,a0
|
||
Move.w (a0),d0
|
||
Bset #6,d0
|
||
Move.w d0,(a0)
|
||
RTS
|
||
Apy Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_NORMALDPF Equ 43
|
||
L43 DLea _BplConBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq Apz
|
||
Add.l #10,a0
|
||
Move.w (a0),d0
|
||
Bclr #6,d0
|
||
Move.w d0,(a0)
|
||
RTS
|
||
Apz Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CHECKCOL Equ 44
|
||
L44 Move.l (a3)+,d1
|
||
Move.l (a3)+,d0
|
||
Bclr #0,d0 ; SPRITE #1 Pair
|
||
Bclr #0,d1 ; SPRITE #2 Pair
|
||
Cmp.l d0,d1
|
||
Beq _cc ; NO COLLISION FOR COMPLEMENTED SPRITES.
|
||
Lsl.l #4,d0
|
||
Or.l d1,d0
|
||
Cmp.l #$02,d0
|
||
Bne _cz1
|
||
Move.l #9,d2
|
||
_cz1 Cmp.l #$04,d0
|
||
Bne _c2
|
||
Move.l #10,d2
|
||
_c2 Cmp.l #$06,d0
|
||
Bne _c3
|
||
Move.l #11,d2
|
||
_c3 Cmp.l #$24,d0
|
||
Bne _c4
|
||
Move.l #12,d2
|
||
_c4 Cmp.l #$26,d0
|
||
Bne _c5
|
||
Move.l #13,d2
|
||
_c5 Cmp.l #$46,d0
|
||
Bne _c6
|
||
Move.l #14,d2
|
||
_c6 Move.w $DFF00E,d4
|
||
Move.l #0,d3
|
||
Btst d2,d4
|
||
Bne _cc
|
||
Move.l #$ffffffff,d3
|
||
_cc RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CHECKCOL2 Equ 45
|
||
L45 Move.w $DFF00E,d0
|
||
Move.l #0,d3
|
||
Btst #0,d0
|
||
Bne _c21
|
||
Move.l #$FFFFFFFF,d3
|
||
_c21 RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CHECKCOL3 Equ 46
|
||
L46 Move.l (a3)+,d1 ; SPR1
|
||
Move.l (a3)+,d0 ; PF
|
||
Lsl.l #4,d0
|
||
Or.l d1,d0
|
||
Cmp.l #$10,d0
|
||
Bne _c31
|
||
Move.l #1,d2
|
||
_c31 Cmp.l #$12,d0
|
||
Bne _c32
|
||
Move.l #2,d2
|
||
_c32 Cmp.l #$14,d0
|
||
Bne _c33
|
||
Move.l #3,d2
|
||
_c33 Cmp.l #$16,d0
|
||
Bne _c34
|
||
Move.l #4,d2
|
||
_c34 Cmp.l #$20,d0
|
||
Bne _c35
|
||
Move.l #5,d2
|
||
_c35 Cmp.l #$22,d0
|
||
Bne _c36
|
||
Move.l #6,d2
|
||
_c36 Cmp.l #$24,d0
|
||
Bne _c37
|
||
Move.l #7,d2
|
||
_c37 Cmp.l #$26,d0
|
||
Bne _c38
|
||
Move.l #8,d2
|
||
_c38 Move.w $DFF00E,d4
|
||
Move.l #0,d3
|
||
Btst d2,d4
|
||
Bne _ce
|
||
Move.l #$FFFFFFFF,d3
|
||
_ce RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_COS1000 Equ 47
|
||
L47 Move.l (a3)+,d0
|
||
Cmp.l #0,d0
|
||
Blt _CInfA0
|
||
Cmp.l #359,d0
|
||
Bgt _CSupA359
|
||
Bra _CCcl
|
||
_CInfA0 Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
Not D0
|
||
Add.l #1,d0
|
||
Bra _CCcl
|
||
_CSupA359
|
||
Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
_CCcl DLea _Cosinus,a0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SIN1000 Equ 48
|
||
L48 Move.l (a3)+,d0
|
||
Cmp.l #0,d0
|
||
Blt _SInfA0
|
||
Cmp.l #359,d0
|
||
Bgt _SSupA359
|
||
Bra _SCcl
|
||
_SInfA0 Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
Not D0
|
||
Add.l #1,d0
|
||
Bra _SCcl
|
||
_SSupA359
|
||
Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
_SCcl DLea _Sinus,a0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_TAN1000 Equ 49
|
||
L49 Move.l (a3)+,d0
|
||
Cmp.l #0,d0
|
||
Blt _TInfA0
|
||
Cmp.l #359,d0
|
||
Bgt _TSupA359
|
||
Bra _TCcl
|
||
_TInfA0 Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
Not D0
|
||
Add.l #1,d0
|
||
Bra _TCcl
|
||
_TSupA359
|
||
Move.l d0,d1
|
||
Divu #360,d1
|
||
Mulu #360,d1
|
||
Sub.l d1,d0
|
||
_TCcl DLea _Tangente,a0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d3
|
||
Move.l #0,d2
|
||
RTS
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IFFXSize Equ 50
|
||
L50 Move.l (a3)+,a0
|
||
Move.l #0,d2
|
||
Move.l #$FFFFFFFF,d3
|
||
Move.l #32768,d7
|
||
; Find BMHD
|
||
_xs0 Move.l (a0),d6
|
||
Cmp.l #"BMHD",d6
|
||
Beq _xs1
|
||
Add.l #2,a0
|
||
Sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Beq _Xsend
|
||
Bra _xs0
|
||
_xs1 Add.l #4,a0
|
||
Add.l #4,a0
|
||
Clr.l d3
|
||
Move.w (a0),d3
|
||
RTS
|
||
_Xsend Moveq #3,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IFFYSize Equ 51
|
||
L51 Move.l (a3)+,a0
|
||
Move.l #0,d2
|
||
Move.l #$FFFFFFFF,d3
|
||
Move.l #32768,d7
|
||
; Find BMHD
|
||
_ys0 Move.l (a0),d6
|
||
Cmp.l #"BMHD",d6
|
||
Beq _ys1
|
||
Add.l #2,a0
|
||
Sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Beq _Ysend
|
||
Bra _ys0
|
||
_ys1 Add.l #4,a0
|
||
Add.l #6,a0
|
||
Clr.l d3
|
||
Move.w (a0),d3
|
||
RTS
|
||
_Ysend Moveq #3,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IFFDepth Equ 52
|
||
L52 Move.l (a3)+,a0
|
||
Move.l #0,d2
|
||
Move.l #$FFFFFFFF,d3
|
||
Move.l #32768,d7
|
||
; Find BMHD
|
||
_ds0 Move.l (a0),d6
|
||
Cmp.l #"BMHD",d6
|
||
Beq _ds1
|
||
Add.l #2,a0
|
||
Sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Beq _Dsend
|
||
Bra _ds0
|
||
_ds1 Add.l #4,a0
|
||
Add.l #12,a0
|
||
Clr.l d3
|
||
Move.b (a0),d3
|
||
RTS
|
||
_Dsend Moveq #3,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_DoubleMASK Equ 53
|
||
L53 Move.l (a3)+,d7 ; D7=Screen 2 Base.
|
||
Move.l (a3)+,d6 ; D6=Screen 1 Base.
|
||
Move.l (a3)+,d5 ; D5=Mask Base 1 Bit plan.
|
||
Cmp.l #0,d5
|
||
Beq Ldp
|
||
Cmp.l #0,d6
|
||
Beq Ldp
|
||
Cmp.l #0,d7
|
||
Beq Ldp
|
||
; SAUVEGARDE DE D3.
|
||
DLea Registers,a0
|
||
Move.l a3,(a0)
|
||
; LECTURE DE LA LONGUEUR D'UN BIT PLAN.
|
||
Move.l d5,a0
|
||
Add.l #76,a0
|
||
Clr.l d0
|
||
Move.w (a0),d0
|
||
Clr.l d1
|
||
Add.l #2,a0
|
||
Move.w (a0),d1
|
||
Lsr.l #3,d0
|
||
Mulu d0,d1
|
||
DLea _MLen,a0
|
||
Move.l d1,(a0)
|
||
; SAUVEGARDE DE L'ADRESSE DU BIT PLAN MASK.
|
||
DLea _MaskBase,a0
|
||
Move.l d5,a1
|
||
Move.l (a1),(a0)
|
||
; MISE A ZERO DES 8 BITS PLANS.
|
||
Move.l #7,d0
|
||
DLea _BitsPlanes2,a0
|
||
DLea _BitsPlanes3,a1
|
||
_dm1 Move.l #0,(a0)+
|
||
Move.l #0,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _dm1
|
||
; LECTURE DES 6 BITS PLANS MAXIMUM.
|
||
DLea _BitsPlanes2,a2
|
||
DLea _BitsPlanes3,a3
|
||
Move.l d6,a0
|
||
Move.l d7,a1
|
||
Move.l #5,d0
|
||
_dm2 Move.l (a0)+,(a2)+
|
||
Move.l (a1)+,(a3)+
|
||
Sub.l #1,d0
|
||
Bpl _dm2
|
||
; INITIALISATIONS DE LA ROUTINE DE CALCUL.
|
||
Move.l #0,d0 ; D0=CURRENT BIT PLANE.
|
||
_Dm4 DLea _MLen,a0
|
||
Move.l (a0),d1 ; D1=BIT PLANES LENGTH.
|
||
Lsr.l #2,d1 ; '' '' '' en #.L .
|
||
Sub.l #1,d1
|
||
DLea _BitsPlanes2,a2
|
||
DLea _BitsPlanes3,a3
|
||
Add.l d0,a2
|
||
Add.l d0,a3
|
||
Move.l (a2),a0 ; A0=Cur BIT PLANE BASE SCREEN 1.
|
||
Move.l (a3),a1 ; A1=Cur BIT PLANE BASE SCREEN 2.
|
||
Cmp.l #0,a0
|
||
Beq _Dm5
|
||
Cmp.l #0,a1
|
||
Beq _Dm5
|
||
DLea _MaskBase,a3
|
||
Move.l (a3),a2 ; A2=BITS PLANE BASE MASK.
|
||
; ROUTINE DE CALCUL.
|
||
_dm3 Move.l (a2)+,d4 ; D4=DONNEE MASQUE.
|
||
Move.l d4,d5
|
||
Not.l d5 ; D5=MASQUE INVERSE.
|
||
And.l (a0)+,d4 ; (a0)=Donnee Ecran 1 BACKGround.
|
||
And.l (a1),d5 ; (a1)=Donnee Ecran 2 FOREGround.
|
||
Or.l d4,d5
|
||
Move.l d5,(a1)+
|
||
Sub.l #1,d1
|
||
Bpl _dm3
|
||
Add.l #4,d0
|
||
Bra _Dm4
|
||
; RAPPEL DE A3.
|
||
_Dm5 DLea Registers,a0
|
||
Move.l (a0),a3
|
||
Rts
|
||
Ldp Moveq #4,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_DoubleMASK2 Equ 54
|
||
L54 Move.l (a3)+,d7 ; D7=Screen 2 Base.
|
||
Move.l (a3)+,d6 ; D6=Screen 1 Base.
|
||
Move.l (a3)+,d4 ; D4=YEnd.
|
||
Move.l (a3)+,d3 ; D3=YStart.
|
||
Move.l (a3)+,d5 ; D5=Mask Base 1 Bit plan.
|
||
Cmp.l #0,d5
|
||
Beq Dmw
|
||
Cmp.l #0,d6
|
||
Beq Dmw
|
||
Cmp.l #0,d7
|
||
Beq Dmw
|
||
; SAUVEGARDE DE D3.
|
||
DLea Registers,a0
|
||
Move.l a3,(a0)
|
||
; LECTURE DE LA LONGUEUR D'UN BIT PLAN.
|
||
Move.l d5,a0
|
||
Add.l #76,a0
|
||
Clr.l d0
|
||
Move.w (a0),d0 ; D0=XSize
|
||
Clr.l d1
|
||
Sub.l d3,d4
|
||
Add.l #2,a0
|
||
Move.w d4,d1
|
||
Lsr.l #3,d0
|
||
Mulu d0,d1
|
||
DLea _MLen,a0
|
||
Move.l d1,(a0)
|
||
Mulu d0,d3
|
||
; SAUVEGARDE DE L'ADRESSE DU BIT PLAN MASK.
|
||
DLea _MaskBase,a0
|
||
Move.l d5,a1
|
||
Move.l (a1),d4
|
||
Add.l d3,d4
|
||
Move.l d4,(a0)
|
||
; MISE A ZERO DES 8 BITS PLANS.
|
||
Move.l #7,d0
|
||
DLea _BitsPlanes2,a0
|
||
DLea _BitsPlanes3,a1
|
||
_dn1 Move.l #0,(a0)+
|
||
Move.l #0,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _dn1
|
||
; LECTURE DES 6 BITS PLANS MAXIMUM.
|
||
DLea _BitsPlanes2,a2
|
||
DLea _BitsPlanes3,a3
|
||
Move.l d6,a0
|
||
Move.l d7,a1
|
||
Move.l #5,d0
|
||
_dn2 Move.l (a0)+,d4
|
||
Cmp.l #0,d4
|
||
Beq _dn6
|
||
Add.l d3,d4
|
||
_dn6 Move.l d4,(a2)+
|
||
Move.l (a1)+,d4
|
||
Cmp.l #0,d4
|
||
Beq _dn7
|
||
Add.l d3,d4
|
||
_dn7 Move.l d4,(a3)+
|
||
Sub.l #1,d0
|
||
Bpl _dn2
|
||
; INITIALISATIONS DE LA ROUTINE DE CALCUL.
|
||
Move.l #0,d0 ; D0=CURRENT BIT PLANE.
|
||
_Dn4 DLea _MLen,a0
|
||
Move.l (a0),d1 ; D1=BIT PLANES LENGTH.
|
||
Lsr.l #2,d1 ; '' '' '' en #.L .
|
||
Sub.l #1,d1
|
||
DLea _BitsPlanes2,a2
|
||
DLea _BitsPlanes3,a3
|
||
Add.l d0,a2
|
||
Add.l d0,a3
|
||
Move.l (a2),a0 ; A0=Cur BIT PLANE BASE SCREEN 1.
|
||
Move.l (a3),a1 ; A1=Cur BIT PLANE BASE SCREEN 2.
|
||
Cmp.l #0,a0
|
||
Beq _Dn5
|
||
Cmp.l #0,a1
|
||
Beq _Dn5
|
||
DLea _MaskBase,a3
|
||
Move.l (a3),a2 ; A2=BITS PLANE BASE MASK.
|
||
; ROUTINE DE CALCUL.
|
||
_dn3 Move.l (a2)+,d4 ; D4=DONNEE MASQUE.
|
||
Move.l d4,d5
|
||
Not.l d5 ; D5=MASQUE INVERSE.
|
||
And.l (a0)+,d4 ; (a0)=Donnee Ecran 1 BACKGround.
|
||
And.l (a1),d5 ; (a1)=Donnee Ecran 2 FOREGround.
|
||
Or.l d4,d5
|
||
Move.l d5,(a1)+
|
||
Sub.l #1,d1
|
||
Bpl _dn3
|
||
Add.l #4,d0
|
||
Bra _Dn4
|
||
; RAPPEL DE A3.
|
||
_Dn5 DLea Registers,a0
|
||
Move.l (a0),a3
|
||
Rts
|
||
Dmw Moveq #4,d0
|
||
Rbsr L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_RESERVESPRITE Equ 55
|
||
L55 Move.l (a3)+,d7 ; D7=Length.
|
||
Move.l (a3)+,d6 ; D6=Base.
|
||
Cmp.l #8192,d7 ; 8K Minimum to reserve.
|
||
Blt _Rsend
|
||
DLea _SpriteBase,a0
|
||
Move.l d6,(a0)
|
||
DLea _SpriteLength,a1
|
||
Move.l d7,(a1)
|
||
Rts
|
||
_Rsend Moveq #5,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_GETEVENSPRITE Equ 56
|
||
L56 Move.l (a3)+,d7 ; D7=LONGUEUR EN LIGNES DU SPRITE !!!
|
||
Move.l (a3)+,d6 ; D6=Y position.
|
||
Move.l (a3)+,d5 ; D5=X Pos.
|
||
Lsr.l #3,d5 ; D5=X Position en octets.
|
||
Move.l (a3)+,d4 ; D4=NUMERO DU SPRITE !!!.
|
||
Move.l (a3)+,a0 ; A0=SCREEN BASE.
|
||
Move.l (a0)+,a1 ; A1=Bit Plane 1 Pointer.
|
||
Move.l (a0)+,a2 ; A2=Bit Plane 2 Pointer.
|
||
Add.l #$6e,a0 ; #$00000076-#$00000008 .
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=X Screen Size.
|
||
Lsr.l #3,d0 ; D0=LONGUEUR D'UNE LIGNE A L'AUTRE !!!
|
||
Move.w (a0)+,d1 ; D1=Y Screen Size.
|
||
Mulu d0,d6
|
||
Add.l d5,d6 ; D6=1er mot du sprite !!!
|
||
Add.l d6,a1 ; A1=ADRESSE DU 1ER PLAN.
|
||
Add.l d6,a2 ; A2=ADRESSE DU 2EME PLAN.
|
||
DLea _SpriteBase,a0
|
||
Move.l a0,d1
|
||
Move.l d1,a0 ; A0=Adresse de base des sprites.
|
||
Mulu #520,d4 ; 516=Longueur 1 Sprite de 16*128*2bp.
|
||
Add.l d4,a0
|
||
; CREATION DU SPRITE !!!
|
||
Move.l d7,d6 ; D6=Longueur.
|
||
; Header du sprite
|
||
Move.w #$0000,(a0)+
|
||
Move.b d7,(a0)+
|
||
Move.b #$00,(a0)+
|
||
; Sprite datas.
|
||
_gsbcl Move.l (a1),(a0)+
|
||
Move.l (a2),(a0)+
|
||
Add.l d0,a1
|
||
Add.l d0,a2
|
||
Sub.l #1,d6
|
||
Bpl _gsbcl
|
||
_gsend Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_GETODDSPRITE Equ 57
|
||
L57 Move.l (a3)+,d7 ; D7=LONGUEUR EN LIGNES DU SPRITE !!!
|
||
Move.l (a3)+,d6 ; D6=Y position.
|
||
Move.l (a3)+,d5 ; D5=X Pos.
|
||
Lsr.l #3,d5 ; D5=X Position en octets.
|
||
Move.l (a3)+,d4 ; D4=NUMERO DU SPRITE !!!.
|
||
Move.l (a3)+,a0 ; A0=SCREEN BASE.
|
||
Add.l #8,a0
|
||
Move.l (a0)+,a1 ; A1=Bit Plane 3 Pointer.
|
||
Move.l (a0)+,a2 ; A2=Bit Plane 4 Pointer.
|
||
Add.l #$6e,a0 ; #$00000076-#$00000008 .
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=X Screen Size.
|
||
Lsr.l #3,d0 ; D0=LONGUEUR D'UNE LIGNE A L'AUTRE !!!
|
||
Move.w (a0)+,d1 ; D1=Y Screen Size.
|
||
Mulu d0,d6
|
||
Add.l d5,d6 ; D6=1er mot du sprite !!!
|
||
Add.l d6,a1 ; A1=ADRESSE DU 1ER PLAN.
|
||
Add.l d6,a2 ; A2=ADRESSE DU 2EME PLAN.
|
||
DLea _SpriteBase,a0
|
||
Move.l a0,d1
|
||
Move.l d1,a0 ; A0=Adresse de base des sprites.
|
||
Mulu #520,d4 ; 516=Longueur 1 Sprite de 16*128*2bp.
|
||
Add.l d4,a0
|
||
; CREATION DU SPRITE !!!
|
||
Move.l d7,d6 ; D6=Longueur.
|
||
; Header du sprite
|
||
Move.w #$0000,(a0)+
|
||
Move.b d7,(a0)+
|
||
Move.b #$00,(a0)+
|
||
; Sprite datas.
|
||
_gobcl Move.l (a1),(a0)+
|
||
Move.l (a2),(a0)+
|
||
Add.l d0,a1
|
||
Add.l d0,a2
|
||
Sub.l #1,d6
|
||
Bpl _gobcl
|
||
_goend Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ACTIVESPRITE Equ 58
|
||
L58 Move.l (a3)+,d3 ; D3=Sprite In Bank.
|
||
Move.l (a3)+,d4 ; D4=Y View Size.
|
||
Move.l (a3)+,d1 ; D1=Y Position.
|
||
Move.l (a3)+,d0 ; D0=X Position.
|
||
Move.l (a3)+,d2 ; D2=# Sprite.
|
||
Lsl.l #2,d2
|
||
DLea _SprPtBase,a1
|
||
Move.l (a1),a0
|
||
Add.l d2,a0
|
||
Add.l #2,a0 ; A0=Adresse dans le copperlist.
|
||
Mulu #520,d3
|
||
DLea _SpriteBase,a2
|
||
Move.l (a2),a1
|
||
Add.l d3,a1
|
||
DLea _Temp,a2
|
||
Move.l a1,(a2)
|
||
Move.w (a2)+,(a0)
|
||
Add.l #4,a0
|
||
Move.w (a2),(a0)
|
||
Move.b d1,(a1)+
|
||
Lsr.l #1,d0
|
||
Move.b d0,(a1)+
|
||
Add.l d1,d4
|
||
Move.b d4,(a1)+
|
||
Move.b #0,(a1)
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_DOUBLEMASKB Equ 59
|
||
L59 Move.l (a3)+,d3 ; D3=ECRAN CIBLE.
|
||
Move.l (a3)+,d0 ; D0=Second Plan.
|
||
Move.l (a3)+,d1 ; D1=Mask.
|
||
Move.l (a3)+,d2 ; D2=Premier Plan.
|
||
Cmp.l #0,d2
|
||
Beq dmz
|
||
Cmp.l #0,d0
|
||
Beq dmz
|
||
Cmp.l #0,d1
|
||
Beq dmz
|
||
Cmp.l #0,d3
|
||
Beq dmz
|
||
DLea _a3,a0
|
||
Move.l a3,(a0)
|
||
DLea _dx1,a0
|
||
Move.l d2,(a0)+
|
||
Move.l d1,(a0)+
|
||
Move.l d0,(a0)+
|
||
Move.l d3,(a0)
|
||
Move.l d0,a0
|
||
Add.l #76,a0
|
||
Clr.l d5
|
||
Clr.l d6
|
||
Clr.l d7
|
||
Move.w (a0)+,d5 ; D5=X Screen size.
|
||
Move.w (a0)+,d6 ; D6=Y Screen Size.
|
||
Lsr.l #4,d5
|
||
Lsl.l #6,d6 ; d6*64.
|
||
Add.w d5,d6 ; D6*64 + d5 , Y Size * 64 + X size.
|
||
Move.w (a0),d7 ; D7=nombre de bits plans present dans la cible.
|
||
; Move.w #5,d7
|
||
; Blitter Occupe ???
|
||
_pp2 Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _pp2
|
||
_boucle:
|
||
DLea _dx1,a0
|
||
Move.l (a0),a1
|
||
Move.l (a1),d0 ; D0=ForeGround.
|
||
Add.l #4,(a0)
|
||
DLea _dx2,a0
|
||
Move.l (a0),a1
|
||
Move.l (a1),d3 ; D3=Mask.
|
||
DLea _dx3,a0
|
||
Move.l (a0),a2
|
||
Move.l (a2),a1 ; A1=Background.
|
||
Add.l #4,(a0)
|
||
DLea _dx4,a0
|
||
Move.l (a0),a2
|
||
Move.l (a2),d4 ; d4=Cible.
|
||
Add.l #4,(a0)
|
||
; Mise de BLITTER en mode FILL CARRY IN.
|
||
_pi2 Move.w #$0,BLTCON1 ; Origin=#$4
|
||
; Mise en place de la source a lire.
|
||
Move.l D0,BLTAPTH ; D0=ADRESSE SOURCE !!!
|
||
; Modulo de la source=0.
|
||
Move.w #$0,BLTAMOD
|
||
; Mise en place de la source MASQUE joueur (8eme plan) a lire.
|
||
Move.l D3,BLTBPTH ; D3=ADRESSE MASQUE !!!
|
||
; Modulo de la source masque=0.
|
||
Move.w #$0,BLTBMOD
|
||
; Selection de la zone source/cible.
|
||
Move.l a1,BLTCPTH ; A1=Adresse second plan
|
||
Move.w #$0,BLTCMOD
|
||
; Selection de la zone cible.
|
||
Move.l D4,BLTDPTH ; d4=ADRESSE CIBLE !!!
|
||
; Selection du modulo de la cible
|
||
Move.w #$0,BLTDMOD
|
||
; Mise a 0 des masques de debut et fin du blitter.
|
||
Move.w #$ffff,BLTAFWM
|
||
Move.w #$ffff,BLTALWM
|
||
; Selection du type d'operation logique pour obtenir le resultat graphique.
|
||
; Et positionnement par rapport au decalage D6 de la source B.
|
||
Move.w #%0000111110011000,BLTCON0 ; Calcul mathematique.
|
||
Move.w #%0000111110011000,BLTCON0+$1A ; Equ BltCon0L
|
||
; Mise en place de la zone a copier.
|
||
Move.w D6,BLTSIZE
|
||
; Blitter occupe ?
|
||
_ppp Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _ppp
|
||
sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Bne _boucle
|
||
DLea _a3,a0
|
||
Move.l (a0),a3
|
||
Rts
|
||
dmz Moveq #4,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_DOUBLEMASKB2 Equ 60
|
||
L60 Move.l (a3)+,d4 ; D4=Yend position.
|
||
Move.l (a3)+,d5 ; D5=Ystart position.
|
||
Move.l (a3)+,d3 ; D3=ECRAN CIBLE.
|
||
Move.l (a3)+,d0 ; D0=Second Plan.
|
||
Move.l (a3)+,d1 ; D1=Mask.
|
||
Move.l (a3)+,d2 ; D2=Premier Plan.
|
||
Cmp.l #0,d0
|
||
Beq dme
|
||
Cmp.l #0,d1
|
||
Beq dme
|
||
Cmp.l #0,d2
|
||
Beq dme
|
||
Cmp.l #0,d3
|
||
Beq dme
|
||
DLea _a3,a0
|
||
Move.l a3,(a0)
|
||
DLea _dx1,a0
|
||
Move.l d2,(a0)+
|
||
Move.l d1,(a0)+
|
||
Move.l d0,(a0)+
|
||
Move.l d3,(a0)
|
||
Move.l d0,a0
|
||
Add.l #76,a0
|
||
Move.l d5,d0 ; D0=Y Start position D4=Y End Position.
|
||
Clr.l d5
|
||
Clr.l d6
|
||
Clr.l d7
|
||
Move.w (a0)+,d5 ; D5=X Screen size.
|
||
Move.l d4,d6
|
||
Lsr.l #3,d5
|
||
Mulu d5,d0 ; D0=Rajout aux bits plans.
|
||
Lsr.l #1,d5
|
||
Lsl.l #6,d6 ; d6*64.
|
||
Add.l d5,d6 ; D6=d6*64+d5 D6=Ysize*64 + Xsize.
|
||
Add.l #2,a0
|
||
Move.w (a0),d7 ; D7=nombre de bits plans present dans la cible.
|
||
Move.l d0,d2
|
||
_bcl2:
|
||
DLea _dx1,a0
|
||
Move.l (a0),a1
|
||
Move.l (a1),d0 ; D0=ForeGround.
|
||
Add.l d2,d0 ; RAJOUT.
|
||
Add.l #4,(a0)
|
||
DLea _dx2,a0
|
||
Move.l (a0),a1
|
||
Move.l (a1),d3 ; D3=Mask.
|
||
Add.l d2,d3 ; RAJOUT.
|
||
DLea _dx3,a0
|
||
Move.l (a0),a2
|
||
Move.l (a2),a1 ; A1=Background.
|
||
Add.l d2,a1 ; RAJOUT.
|
||
Add.l #4,(a0)
|
||
DLea _dx4,a0
|
||
Move.l (a0),a2
|
||
Move.l (a2),d4 ; d4=Cible.
|
||
Add.l d2,d4 ; RAJOUT.
|
||
Add.l #4,(a0)
|
||
; Blitter Occupe ???
|
||
_pq2 Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _pq2
|
||
; Mise de BLITTER en mode FILL CARRY IN.
|
||
_pj2 Move.w #$0,BLTCON1 ; Origin=#$4
|
||
; Mise en place de la source a lire.
|
||
Move.l D0,BLTAPTH ; D0=ADRESSE SOURCE !!!
|
||
; Modulo de la source=0.
|
||
Move.w #$0,BLTAMOD
|
||
; Mise en place de la source MASQUE joueur (8eme plan) a lire.
|
||
Move.l D3,BLTBPTH ; D3=ADRESSE MASQUE !!!
|
||
; Modulo de la source masque=0.
|
||
Move.w #$0,BLTBMOD
|
||
; Selection de la zone source/cible.
|
||
Move.l a1,BLTCPTH ; A1=Adresse second plan
|
||
Move.w #$0,BLTCMOD
|
||
; Selection de la zone cible.
|
||
Move.l D4,BLTDPTH ; d4=ADRESSE CIBLE !!!
|
||
; Selection du modulo de la cible
|
||
Move.w #$0,BLTDMOD
|
||
; Mise a 0 des masques de debut et fin du blitter.
|
||
Move.w #$ffff,BLTAFWM
|
||
Move.w #$ffff,BLTALWM
|
||
; Selection du type d'operation logique pour obtenir le resultat graphique.
|
||
; Et positionnement par rapport au decalage D6 de la source B.
|
||
Move.w #%0000111110011000,BLTCON0 ; Calcul mathematique.
|
||
Move.w #%0000111110011000,BLTCON0+$1A ; Equ BltCon0L
|
||
; Mise en place de la zone a copier.
|
||
Move.w D6,BLTSIZE
|
||
; Blitter occupe ?
|
||
_ppq Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _ppq
|
||
sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Bne _bcl2
|
||
DLea _a3,a0
|
||
Move.l (a0),a3
|
||
Rts
|
||
dme Moveq #4,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_PATCH13 Equ 61
|
||
L61 Move.w #$0,$dff1fc ; Disable DOUBLE SCANNING.
|
||
Move.w #$0,$dff106 ; GRAPHICS PALETTE=0 to 31
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LFILTER1 Equ 62
|
||
L62 Move.l (a3)+,a1 ; Fin
|
||
Move.l (a3)+,a0 ; Debut
|
||
Move.l (a3)+,d0 ; Filtre
|
||
_lf0 Move.b (a0),d1
|
||
Cmp.b d0,d1
|
||
Blt _lf1
|
||
Move.b d0,(a0)
|
||
_lf1 Add.l #1,a0
|
||
Cmp.l a0,a1
|
||
Bne _lf0
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LFILTER2 Equ 63
|
||
L63 Move.l (a3)+,a1 ; Fin
|
||
Move.l (a3)+,a0 ; Debut
|
||
Move.l (a3)+,d0 ; Filtre
|
||
_lf2 Move.w (a0),d1
|
||
Cmp.w d0,d1
|
||
Blt _lf3
|
||
Move.w d0,(a0)
|
||
_lf3 Add.l #2,a0
|
||
Cmp.l a0,a1
|
||
Blt _lf2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LFILTER3 Equ 64
|
||
L64 Move.l (a3)+,a1 ; Fin
|
||
Move.l (a3)+,a0 ; Debut
|
||
Move.l (a3)+,d0 ; Filtre
|
||
_lf4 Move.l (a0),d1
|
||
Cmp.l d0,d1
|
||
Blt _lf5
|
||
Move.l d0,(a0)
|
||
_lf5 Add.l #4,a0
|
||
Cmp.l a0,a1
|
||
Blt _lf4
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_2NDPAL Equ 65
|
||
L65 Move.l (a3)+,d0
|
||
DLea _BplConBase,a0
|
||
Move.l (a0),a1
|
||
Cmp.l #0,a1
|
||
Beq _l2end
|
||
Add.l #14,a1
|
||
Mulu #$400,d0
|
||
Move.w d0,(a1)
|
||
Rts
|
||
_l2end Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_READIFFCOLOR Equ 66
|
||
L66 Move.l (a3)+,d0 ; Color
|
||
Move.l (a3)+,a1 ; Iff Base.
|
||
Move.l #65536,d7
|
||
_ric Move.l (a1),d1
|
||
Cmp.l #"CMAP",d1
|
||
Beq _ric2
|
||
Sub.l #1,d7
|
||
Cmp.l #0,d7
|
||
Beq ric
|
||
Add.l #2,a1
|
||
Bra _ric
|
||
_ric2 Add.l #8,a1
|
||
Mulu #3,d0
|
||
Add.l d0,a1
|
||
Clr.l d0
|
||
Clr.l d1
|
||
Clr.l d2
|
||
Move.b (a1)+,d0 ; D0=R
|
||
Move.b (a1)+,d1 ; D1=V
|
||
Move.b (a1),d2 ; D2=B
|
||
Lsr.l #4,d0
|
||
Lsr.l #4,d1
|
||
Lsr.l #4,d2
|
||
Lsl.l #8,d0
|
||
Lsl.l #4,d1
|
||
Add.l d1,d0
|
||
Add.l d2,d0
|
||
Move.l d0,d3
|
||
Moveq #0,d2
|
||
Rts
|
||
ric Moveq #6,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ADD2SCREEN Equ 67
|
||
L67 DLea _CurrentLine,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq a2s
|
||
Move.l #$f203fffe,(a0)+
|
||
Move.l #$00960100,(a0)+ ; DMACON Pour l'amos.
|
||
; Installation de la palette de couleur du second ecran.
|
||
DLea _2pal,a1
|
||
Move.l a0,(a1)
|
||
; Move.l #$01060000,d1
|
||
;cc1 Move.l d1,(a0)+
|
||
Move.l #$01800000,d0
|
||
ccc Move.l d0,(a0)+
|
||
Add.l #$00020000,d0
|
||
Cmp.l #$01C00000,d0
|
||
Bne ccc
|
||
; Add.l #$00002000,d1
|
||
; Cmp.l #$01070000,d1
|
||
; Bne cc1
|
||
; Installation des bits plans.
|
||
DLea _2bpl,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$00e00000,d0
|
||
ccd Move.l d0,(a0)+
|
||
Add.l #$00020000,d0
|
||
Cmp.l #$01000000,d0
|
||
Bne ccd
|
||
; installation de la suite.
|
||
Move.l #$008e0181,(a0)+
|
||
Move.l #$009037c1,(a0)+
|
||
Move.l #$00920038,(a0)+ ; Old=$30
|
||
Move.l #$009400d0,(a0)+
|
||
Move.l #$01020000,(a0)+
|
||
Move.l #$01040000,(a0)+
|
||
Move.l #$01060000,(a0)+
|
||
Move.l #$01080000,(a0)+ ; Bpl1Mod
|
||
Move.l #$010A0000,(a0)+ ; Bpl2Mod
|
||
DLea _2bplcon,a1
|
||
move.l a0,(a1)
|
||
Move.l #$01000000,(a0)+ ; BplCon0
|
||
Move.l #$f303fffe,(a0)+
|
||
Move.l #$00968300,(a0)+
|
||
Move.l #$ffd9fffe,(a0)+
|
||
Move.l #$0103fffe,(a0)+
|
||
DLea _CurrentLine,a1
|
||
Move.l a0,(a1)
|
||
Move.l #$1403fffe,(a0)+
|
||
Move.l #$01000000,(a0)+
|
||
Move.l #$00960100,(a0)+
|
||
Move.l #$fffffffe,(a0)
|
||
DLea _2act,a2
|
||
Move.l #1,(a2)
|
||
DLea _Line,a1
|
||
Move.l #$14,(a1)
|
||
DLea _CurrentLine,a1
|
||
Sub.l #12,a0
|
||
Move.l a0,(a1) ; Sauvegarde adresse copper pour line.
|
||
DLea _2nd,a1
|
||
Move.l #1,(a1) ; 2nd ecran actif.
|
||
Rts
|
||
a2s Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SET2PLANES Equ 68
|
||
L68 Move.l (a3)+,d1
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bmi _s2p
|
||
Cmp.l #4,d0
|
||
Bgt _s2p
|
||
Lsl.l #3,d0
|
||
DLea _2bpl,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Beq s2p
|
||
Add.l #2,a0
|
||
Add.l d0,a0
|
||
Move.l d1,d0
|
||
lsr.l #8,d0
|
||
Lsr.l #8,d0
|
||
Move.w d0,(a0)
|
||
Add.l #4,a0
|
||
Move.w d1,(a0)
|
||
_s2p Rts
|
||
s2p Moveq #7,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SET2VIEW Equ 69
|
||
L69 Move.l (a3)+,d0
|
||
DLea _PlanesMask,a0
|
||
Lsl.l #2,d0
|
||
Add.l d0,a0
|
||
Move.l (a0),d0
|
||
DLea _2bplcon,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Beq s2v
|
||
Add.l #2,a0
|
||
Move.w d0,(a0)
|
||
Rts
|
||
s2v Moveq #7,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SET2PAL Equ 70
|
||
L70 Move.l (a3)+,d3
|
||
Move.l (a3)+,d2
|
||
Move.l (a3)+,d1
|
||
Move.l (a3)+,d0
|
||
Add.l #1,d0
|
||
DLea _2pal,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Beq _s2pp
|
||
Lsl.l #8,d1
|
||
Lsl.l #4,d2
|
||
Add.l d1,d3
|
||
Add.l d2,d3
|
||
_s2o Move.w (a0),d4
|
||
Cmp.w #$0106,d4
|
||
Bne _s2r
|
||
Add.l #4,a0
|
||
_s2r Sub.l #1,d0
|
||
Cmp.l #$0,d0
|
||
Beq _s2q
|
||
Add.l #4,a0
|
||
Bra _s2o
|
||
_s2q Add.l #2,a0
|
||
Move.w d3,(a0)
|
||
Rts
|
||
_s2pp Moveq #7,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CMAP Equ 71
|
||
L71 Move.l (a3)+,a0
|
||
; Find CMAP Header
|
||
Move.l #16384,d0
|
||
_cmx Move.l (a0),d1
|
||
Cmp.l #"CMAP",d1
|
||
Beq _cmx2
|
||
Sub.l #1,d0
|
||
Add.l #2,a0
|
||
Cmp.l #0,d0
|
||
Bne _cmx
|
||
Bra _itsx
|
||
_cmx2 Add.l #4,a0 ; CMAP !!!
|
||
Move.l a0,d3
|
||
Moveq #0,d2
|
||
Rts
|
||
_itsx Move.l #6,d0 ; NO CMAP.
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_BPALETTE Equ 72
|
||
L72 Move.l (a3)+,a0
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
DLea _ColorBase,a2
|
||
Move.l (a2),a1
|
||
; Add.l #4,a1
|
||
_bp1 Move.w (a1)+,d1
|
||
Cmp.w #$106,d1
|
||
Bne _bp2
|
||
Add.l #4,a1
|
||
_bp2 Move.w (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _bp1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IPALETTE Equ 73
|
||
L73 Move.l (a3)+,a0
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
DLea _ColorBase,a2
|
||
Move.l (a2),a1
|
||
; Add.l #4,a1
|
||
_bi1 Move.w (a1)+,d1
|
||
Cmp.w #$106,d1
|
||
Bne _bi2
|
||
Add.l #4,a1
|
||
_bi2 Clr.l d2
|
||
Clr.l d3
|
||
Clr.l d4
|
||
Move.b (a0)+,d2
|
||
Move.b (a0)+,d3
|
||
Move.b (a0)+,d4
|
||
Lsr.l #4,d2
|
||
Lsr.l #4,d3
|
||
Lsr.l #4,d4
|
||
Lsl.l #8,d2
|
||
Lsl.l #4,d3
|
||
Add.l d4,d3
|
||
Add.l d3,d2
|
||
Move.w d2,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _bi1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_VBLWAIT Equ 74
|
||
L74 Move.l (a3)+,d1
|
||
Cmp.l #381,d1
|
||
Blt _dd1
|
||
Move.l #383,d1
|
||
_dd1 Lsl.l #8,d1
|
||
_ddd Move.l VPOSR,d0
|
||
And.l #$1ff00,d0
|
||
Cmp.l d1,d0
|
||
Bne _ddd
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_JPALETTE Equ 75
|
||
L75 Move.l (a3)+,a0
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
DLea _ColorBase,a2
|
||
Move.l (a2),a1
|
||
; Add.l #4,a1
|
||
_bj1 Move.w (a1)+,d1
|
||
Cmp.w #$106,d1
|
||
Bne _bj2
|
||
Add.l #4,a1
|
||
_bj2 Clr.l d2
|
||
Clr.l d3
|
||
Clr.l d4
|
||
Move.b (a0)+,d2
|
||
Move.b (a0)+,d3
|
||
Move.b (a0)+,d4
|
||
Lsl.l #8,d2
|
||
Lsl.l #4,d3
|
||
Add.l d4,d3
|
||
Add.l d3,d2
|
||
Move.w d2,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _bj1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_FPALETTE Equ 76
|
||
L76
|
||
Move.l (a3)+,a1 ; A1=Adr1
|
||
Move.l (a3)+,a0 ; A0=Adr0
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
_fp1 Move.l a0,a2
|
||
Clr.l d1
|
||
Clr.l d2
|
||
Clr.l d3
|
||
Move.b (a2)+,d1 ; D1=R
|
||
Move.b (a2)+,d2 ; D2=V
|
||
Move.b (a2)+,d3 ; D3=B
|
||
Clr.l d4
|
||
Clr.l d5
|
||
Clr.l d6
|
||
Move.b (a1)+,d4 ; D4=R2
|
||
Move.b (a1)+,d5 ; D5=V2
|
||
Move.b (a1)+,d6 ; D6=B2
|
||
Cmp.b d4,d1
|
||
Blt _incd1
|
||
Cmp.b d4,d1
|
||
Beq _nopd1
|
||
_decd1 Sub.b #1,d1
|
||
Bra _nopd1
|
||
_incd1 Add.b #1,d1
|
||
_nopd1
|
||
Cmp.b d5,d2
|
||
Blt _incd2
|
||
Cmp.b d5,d2
|
||
Beq _nopd2
|
||
_decd2 Sub.b #1,d2
|
||
Bra _nopd2
|
||
_incd2 Add.b #1,d2
|
||
_nopd2
|
||
Cmp.b d6,d3
|
||
Blt _incd3
|
||
Cmp.b d6,d3
|
||
Beq _nopd3
|
||
_decd3 Sub.b #1,d3
|
||
Bra _nopd3
|
||
_incd3 Add.b #1,d3
|
||
_nopd3
|
||
Move.b d1,(a0)+
|
||
Move.b d2,(a0)+
|
||
Move.b d3,(a0)+
|
||
Sub.l #1,d0
|
||
Bpl _fp1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CPALETTE Equ 77
|
||
L77 Move.l (a3)+,a0 ; A0=Adresse de calcul
|
||
Move.l (a3)+,a2 ; A2=Adresse source
|
||
Move.l (a3)+,d7 ; D7=rajout en bleu.
|
||
Move.l (a3)+,d6 ; D6=Rajout en vert.
|
||
Move.l (a3)+,d5 ; D5=Rajout en Rouge.
|
||
Move.l (a3)+,d0 ; D0=NUM.
|
||
Sub.l #1,d0
|
||
_cp1 Clr.l d2
|
||
Clr.l d3
|
||
Clr.l d4
|
||
Move.b (a2)+,d2
|
||
Move.b (a2)+,d3
|
||
Move.b (a2)+,d4
|
||
Add.l d5,d2
|
||
Bpl _rnop
|
||
Move.l #0,d2
|
||
_rnop Cmp.l #16,d2
|
||
Blt _rnoq
|
||
Move.l #15,d2
|
||
_rnoq
|
||
Add.l d6,d3
|
||
Bpl _vnop
|
||
Move.l #0,d3
|
||
_vnop Cmp.l #16,d3
|
||
Blt _vnoq
|
||
Move.l #15,d3
|
||
_vnoq
|
||
Add.l d7,d4
|
||
Bpl _bnop
|
||
Move.l #0,d4
|
||
_bnop Cmp.l #16,d4
|
||
Blt _bnoq
|
||
Move.l #15,d4
|
||
_bnoq
|
||
Move.b d2,(a0)+
|
||
Move.b d3,(a0)+
|
||
Move.b d4,(a0)+
|
||
Sub.l #1,d0
|
||
Bpl _cp1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_2VIEW Equ 78
|
||
L78 Move.l (a3)+,d0
|
||
DLea _CurrentLine,a1
|
||
Move.l (a1),a0
|
||
Move.b (a0),d1
|
||
Cmp.b #$14,d1
|
||
Bne _l2e
|
||
Sub.l #$d,d0
|
||
Bmi _l2e
|
||
Move.b d0,(a0)
|
||
_l2e Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_IFF8TO4 Equ 79
|
||
L79 Move.l (a3)+,a1 ; A1=Cible
|
||
Move.l (a3)+,a0 ; A0=Source
|
||
Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
_i8t4 Clr.l d1
|
||
Clr.l d2
|
||
Clr.l d3
|
||
Move.b (a0)+,d1
|
||
Move.b (a0)+,d2
|
||
Move.b (a0)+,d3
|
||
Lsr.l #4,d1
|
||
Lsr.l #4,d2
|
||
Lsr.l #4,d3
|
||
Move.b d1,(a1)+
|
||
Move.b d2,(a1)+
|
||
Move.b d3,(a1)+
|
||
Sub.l #1,d0
|
||
Bpl _i8t4
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETCOLORCOMP Equ 80
|
||
L80 Move.l (a3)+,d3 ; D3=Blue.
|
||
Move.l (a3)+,d2 ; D2=Green.
|
||
Move.l (a3)+,d1 ; D1=Red.
|
||
Move.l (a3)+,d0 ; D0=Register
|
||
Move.l d1,d4
|
||
Move.l d2,d5
|
||
Move.l d3,d6
|
||
Lsr.l #4,d1
|
||
Lsr.l #4,d2
|
||
Lsr.l #4,d3
|
||
Move.l d1,d7
|
||
Lsl.l #4,d7
|
||
Or.l d2,d7
|
||
Lsl.l #4,d7
|
||
Or.l d3,d7 ; D7=Couleur Finale.
|
||
Lsl.l #4,d1
|
||
Lsl.l #4,d2
|
||
Lsl.l #4,d3
|
||
Sub.l d1,d4
|
||
Sub.l d2,d5
|
||
Sub.l d3,d6
|
||
Lsl.l #4,d4
|
||
Or.l d5,d4
|
||
Lsl.l #4,d4
|
||
Or.l d6,d4 ; D4=Couleur Complement Final.
|
||
DLea _ColorBase,a1
|
||
Move.l (a1),a0
|
||
_80b Move.w (a0)+,d1
|
||
Cmp.w #$0106,d1
|
||
Bne _80a
|
||
Add.l #4,a0
|
||
_80a Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Beq _80c
|
||
Add.l #2,a0
|
||
Bra _80b
|
||
_80c Move.w d7,(a0)
|
||
DLea _ColorBase,a1
|
||
Move.l (a1),a2
|
||
Sub.l a2,a0 ; A1=Decalage de palette.
|
||
DLea _ColorBase2,a2
|
||
Move.l (a2),a1
|
||
Add.l a0,a1
|
||
Move.w d4,(a1) ; Sauvegarde COLOR COMPLEMENT.
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MFILL Equ 81
|
||
L81 Move.l (a3)+,a1
|
||
Move.l (a3)+,a0
|
||
Move.l (a3)+,d0
|
||
Move.l a1,a2
|
||
Sub.l a0,a2
|
||
Bmi _endx
|
||
_mf Move.b d0,(a0)+
|
||
Cmp.l a0,a1
|
||
Bne _mf
|
||
_endx Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_BLITCOPY Equ 82
|
||
L82 Move.l (a3)+,a2 ; A2=cible.
|
||
Move.l (a3)+,a1 ; A1=Source.
|
||
Cmp.l #0,a1
|
||
Beq bc
|
||
Cmp.l #0,a2
|
||
Beq bc
|
||
Move.l a1,a0
|
||
Add.l #76,a0
|
||
Clr.l d6
|
||
Clr.l d7
|
||
Move.w (a0)+,d6 ; D6=X Screen Size.
|
||
Move.w (a0)+,d7 ; D7=Y Screen Size.
|
||
Lsr.l #4,d6
|
||
Lsl.l #6,d7 ; D7*64
|
||
Add.l d6,d7 ; D7+XSize.
|
||
Move.l #5,d6 ; D6=6 bits plans maximum.
|
||
; Blitter Occupe ???
|
||
_qq2 Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _qq2
|
||
; Mise de BLITTER en mode FILL CARRY IN.
|
||
_qqq Move.w #$0,BLTCON1 ; Origin=#$4
|
||
; Mise en place de la source a lire.
|
||
Move.l (a1)+,BLTAPTH ; A1=ADRESSE SOURCE !!!
|
||
; Modulo de la source=0.
|
||
Move.w #$0,BLTAMOD
|
||
; Adresse cible
|
||
Move.l (a2)+,BLTDPTH ; A2=ADRESSE CIBLE !!!
|
||
; Selection du modulo de la cible
|
||
Move.w #$0,BLTDMOD
|
||
; Mise a 0 des masques de debut et fin du blitter.
|
||
Move.w #$ffff,BLTAFWM
|
||
Move.w #$ffff,BLTALWM
|
||
; Selection du type d'operation logique pour obtenir le resultat graphique.
|
||
; Et positionnement par rapport au decalage D6 de la source B.
|
||
Move.w #%0000100111110000,BLTCON0 ; Calcul mathematique.
|
||
Move.w #%0000100111110000,BLTCON0+$1A ; Equ BltCon0L
|
||
; Mise en place de la zone a copier.
|
||
Move.w D7,BLTSIZE
|
||
; Blitter occupe ?
|
||
_qpq Move.w $Dff002,d5
|
||
Btst #14,d5
|
||
Bne _qpq
|
||
Cmp.l #$0,(a1)
|
||
Beq _endd
|
||
Cmp.l #$0,(a2)
|
||
Beq _endd
|
||
Sub.l #1,d6
|
||
Bpl _qqq
|
||
_endd Rts
|
||
bc Moveq #4,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CONFORM32 Equ 83
|
||
L83 DLea _c1,a0
|
||
Move.l (a3),(a0)
|
||
Move.l (a3)+,a0
|
||
Move.l a0,d7 ; D7=Bit Plane Adress
|
||
Add.l #76,a0
|
||
Clr.l d0
|
||
Clr.l d1
|
||
Move.w (a0)+,d0 ; D0=X Screen Size.
|
||
Move.w (a0)+,d1 ; D1=Y Screen Size.
|
||
Lsr.l #5,d0 ; D0=.l X Screen length.
|
||
Lsr.l #5,d1 ; D1=Block 32 Y Size Length.
|
||
Move.l #7,d5 ; D5=6 Bits plans maximum.
|
||
; Copier sur une ligne de 1 bit plan.
|
||
_z3 Move.l d7,a0
|
||
Sub.l #1,d5
|
||
Cmp.l #0,d5
|
||
Beq _fini ; Ecran Termine.
|
||
Move.l (a0),a2 ; A2=Adresse cible.
|
||
Cmp.l #0,a2
|
||
Beq _fini ; Ecran Termine.
|
||
Add.l #4,d7 ; D7=Adresse prochain bit plan a cibler.
|
||
;
|
||
; Faire la routine sur 1 bit plan.
|
||
Move.l d1,d4 ; D4=Nbre de blocks a copier en Y.
|
||
_z2 Move.l (a0),a1 ; A1=Adresse source.
|
||
Move.l #32,d3 ; D3=32 lignes a modifier.
|
||
_z0 Move.l d0,d2 ; D0 Blocks a copier en X.
|
||
_z1 Move.l (a1),(a2)+ ; Copie source / destination .
|
||
Sub.l #1,d2
|
||
Cmp.l #0,d2
|
||
Bne _z1
|
||
Move.l d0,d6
|
||
Lsl.l #2,d6
|
||
Add.l d6,a1
|
||
Sub.l #1,d3
|
||
Cmp.l #0,d3
|
||
Bne _z0
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _z2
|
||
Bra _z3
|
||
_fini Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CONFORM32B Equ 84
|
||
L84 DLea _c1,a0
|
||
Move.l (a3),(a0)
|
||
Move.l (a3)+,a0
|
||
Move.l a0,d7 ; D7=Bit Plane Adress
|
||
Add.l #76,a0
|
||
Clr.l d0
|
||
Clr.l d1
|
||
Move.w (a0)+,d0 ; D0=X Screen Size.
|
||
Move.w (a0)+,d1 ; D1=Y Screen Size.
|
||
Lsr.l #5,d0 ; D0=.l X Screen length.
|
||
Lsr.l #5,d1 ; D1=Block 32 Y Size Length.
|
||
Move.l #7,d5 ; D5=6 Bits plans maximum.
|
||
; Copier sur une ligne de 1 bit plan.
|
||
_z3b Move.l d7,a0
|
||
Sub.l #1,d5
|
||
Cmp.l #0,d5
|
||
Beq _finib ; Ecran Termine.
|
||
Move.l (a0),a2 ; A2=Adresse cible.
|
||
Cmp.l #0,a2
|
||
Beq _finib ; Ecran Termine.
|
||
Add.l #4,d7 ; D7=Adresse prochain bit plan a cibler.
|
||
Move.l (a0),a1
|
||
;
|
||
; Faire la routine sur 1 bit plan.
|
||
Move.l d1,d4 ; D4=Nbre de blocks a copier en Y.
|
||
_z2b Move.l #32,d3 ; D3=32 lignes a modifier.
|
||
_z0b Move.l d0,d2 ; D0 Blocks a copier en X.
|
||
_z1b Move.l (a1),(a2)+ ; Copie source / destination .
|
||
Sub.l #1,d2
|
||
Cmp.l #0,d2
|
||
Bne _z1b
|
||
Move.l d0,d6
|
||
Lsl.l #2,d6
|
||
Add.l d6,a1
|
||
Sub.l #1,d3
|
||
Cmp.l #0,d3
|
||
Bne _z0b
|
||
Sub.l #1,d4
|
||
Cmp.l #0,d4
|
||
Bne _z2b
|
||
Bra _z3b
|
||
_finib Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SETDPLANE Equ 85
|
||
L85 Move.l (a3)+,d1 ; D1=Adress
|
||
Move.l (a3)+,d0 ; D0=BitPlane.
|
||
Cmp.l #1,d0
|
||
Blt _sdp
|
||
Cmp.l #8,d0
|
||
Bgt _sdp
|
||
Sub.l #1,d0
|
||
Lsl.l #2,d0
|
||
DLea _BitsPlanesD,a0
|
||
Add.l d0,a0
|
||
Move.l d1,(a0)
|
||
_sdp Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SWAPPLANES Equ 86
|
||
L86 DLea _BitsPlanes,a0
|
||
DLea _BitsPlanesD,a1
|
||
Move.l #8,d0
|
||
Cmp.l #$0,(a0)
|
||
Beq sppx
|
||
_spp Move.l (a0),d1
|
||
Move.l (a1),(a0)+
|
||
Move.l d1,(a1)+
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bne _spp
|
||
DLea _Aga,a0
|
||
Cmp.l #$0,(a0)
|
||
Beq _naga
|
||
Move.l #15,d0
|
||
Bra _na
|
||
_naga Move.l #11,d0
|
||
_na DLea _BitsPlanes,a0
|
||
DLea _BplPtBase,a2
|
||
Move.l (a2),a1
|
||
Add.l #2,a1
|
||
_nbb Move.w (a0)+,(a1)
|
||
Add.l #4,a1
|
||
Sub.l #1,d0
|
||
Bpl _nbb
|
||
Rts
|
||
sppx Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_RESICON Equ 87
|
||
L87 Movem.l a3-a6,-(sp)
|
||
Move.l (a3),d7 ; D7=nombre d'icones.
|
||
DLea _Icons,a0
|
||
Cmp.l #$0,(a0)
|
||
Bne _rie ; Si banque deja reservee.
|
||
Move.l d7,(a0) ; Save icon max.
|
||
Mulu #260,d7
|
||
Add.l #8,d7
|
||
Move.l d7,d0 ; D0=Byte Size.
|
||
Move.l #Chip+Clear,d1 ; D1=Memory Type
|
||
Move.l $4,a6
|
||
Jsr AllocMem(a6)
|
||
DLea _IcBase,a0
|
||
Move.l d0,(a0)
|
||
Cmp.l #0,d0
|
||
Beq NOFREE
|
||
; Preparation de la banque d'icones.
|
||
Move.l d0,a0
|
||
DLea _Icons,a1
|
||
Move.l #"F.C1",(a0)+ ; Offset #0 Equ "F.C1"
|
||
Move.l (a1),(a0) ; Offset #4 Equ IconMax.
|
||
Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
NOFREE Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #8,d0
|
||
Rbra L_CUSTOM
|
||
_rie Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #15,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ERAICON Equ 88
|
||
L88 Movem.l a3-a6,-(sp)
|
||
DLea _Icons,a2
|
||
Move.l (a2),d0
|
||
Cmp.l #$0,d0
|
||
Beq _eie
|
||
Move.l #$0,(a2) ; Clear _ICONS Register.
|
||
Mulu #260,d0
|
||
Add.l #8,d0
|
||
DLea _IcBase,a2
|
||
Move.l (a2),a1
|
||
Cmp.l #0,a1
|
||
Beq ei
|
||
Move.l #$0,(a2) ; Clear _ICBASE Register.
|
||
Move.l $4,a6
|
||
Jsr FreeMem(a6)
|
||
_eie Movem.l (sp)+,a3-a6
|
||
Rts
|
||
ei Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #9,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_GETICON Equ 89
|
||
L89 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,d7 ; D7=Ypos.
|
||
Move.l (a3)+,d6 ; D6=Xpos.
|
||
Move.l (a3)+,d5 ; Icon.
|
||
; Verifications...
|
||
Cmp.l #1,d5
|
||
Blt _gie ; Icon<1.
|
||
DLea _Icons,a2
|
||
Cmp.l (a2),d5
|
||
Bgt _gie ; Icon>IconMax.
|
||
Sub.l #1,d5
|
||
;
|
||
DLea _IcBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq gi
|
||
Add.l #8,a0
|
||
Mulu #260,d5
|
||
Add.l d5,a0 ; A0=Adresse cible pout TAKE ICON.
|
||
;
|
||
DLea _XY,a2
|
||
Move.l (a2),d4 ; D4=X Scren Size.
|
||
Lsr.l #3,d4 ; D4=RAJOUT PAR LIGNES.
|
||
Mulu d4,d7
|
||
Lsr.l #3,d6
|
||
Add.l d6,d7 ; D7=RAJOUT AUX BITS PLANS.
|
||
;
|
||
DLea _BitsPlanes,a2
|
||
Move.l #8,d6 ; D6=8 bits plans.
|
||
_gi0 Move.l (a2)+,a1 ; A1=Adresse cible
|
||
Cmp.l #$0,a1
|
||
Beq _gie ; Plus de bits plans a saisir ???
|
||
Add.l d7,a1
|
||
Move.l #16,d5 ; D5=16 lignes par bobs.
|
||
;
|
||
_gi1 Move.w (a1),(a0)+ ; A0 -> Next Data.
|
||
Add.l d4,a1 ; A1 -> Next Line.
|
||
Sub.l #1,d5
|
||
Cmp.l #0,d5
|
||
Bne _gi1
|
||
Sub.l #1,d6
|
||
Cmp.l #0,d6
|
||
Bne _gi0
|
||
;
|
||
_gie Movem.l (sp)+,a3-a6
|
||
Add.l #12,a3
|
||
Rts
|
||
gi Movem.l (sp)+,a3-a6
|
||
Add.l #12,a3
|
||
Moveq #9,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_PASICON Equ 90
|
||
L90 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,d7 ; D7=Ypos.
|
||
Move.l (a3)+,d6 ; D6=Xpos.
|
||
Move.l (a3)+,d5 ; Icon.
|
||
; Verifications...
|
||
Cmp.l #1,d5
|
||
Blt _pie ; Icon<1.
|
||
DLea _Icons,a2
|
||
Cmp.l (a2),d5
|
||
Bgt _pie ; Icon>IconMax.
|
||
Sub.l #1,d5
|
||
;
|
||
DLea _IcBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq pii
|
||
Add.l #8,a0
|
||
Mulu #260,d5
|
||
Add.l d5,a0 ; A0=Adresse icone a PASTER.
|
||
;
|
||
DLea _XY,a2
|
||
Move.l (a2),d4 ; D4=X Screen Size.
|
||
;
|
||
DLea _XY,a2
|
||
Move.l (a2),d4 ; D4=X Scren Size.
|
||
Lsr.l #3,d4
|
||
Mulu d4,d7
|
||
Lsr.l #3,d6
|
||
Add.l d6,d7 ; D7=RAJOUT AUX BITS PLANS.
|
||
;
|
||
DLea _BitsPlanes,a2
|
||
Move.l #8,d6 ; D6=8 bits plans.
|
||
_pi0 Move.l (a2)+,a1 ; A1=Adresse cible
|
||
Cmp.l #$0,a1
|
||
Beq _pie ; Plus de bits plans a saisir ???
|
||
Add.l d7,a1
|
||
Move.l #16,d5 ; D5=16 lignes par bobs.
|
||
;
|
||
_pi1 Move.w (a0)+,(a1) ; A0 -> Next Data.
|
||
Add.l d4,a1 ; A1 -> Next Line.
|
||
Sub.l #1,d5
|
||
Cmp.l #0,d5
|
||
Bne _pi1
|
||
Sub.l #1,d6
|
||
Cmp.l #0,d6
|
||
Bne _pi0
|
||
;
|
||
_pie Movem.l (sp)+,a3-a6
|
||
Add.l #12,a3
|
||
Rts
|
||
pii Movem.l (sp)+,a3-a6
|
||
Add.l #12,a3
|
||
Moveq #9,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_ICONBASE Equ 91
|
||
L91 DLea _IcBase,a0
|
||
Move.l (a0),d3
|
||
Moveq #0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_SAVEICON Equ 92
|
||
L92 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,a0 ; A0=Name Base
|
||
DLea _IcBase,a2
|
||
Cmp.l #$0,(a2)
|
||
Beq NOTRESERVED
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=Name Length.
|
||
Cmp.l #1,d0
|
||
Blt _sie
|
||
Cmp.l #95,d0
|
||
Bgt _sie
|
||
DLea _IcN,a1
|
||
; Mise en place du nom du fichier termine par '0' dans la zone reservee.
|
||
_si1 Move.b (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bne _si1
|
||
Move.b #$0,(a1)
|
||
;
|
||
Move.l $4,a6
|
||
DLea _DName,a1
|
||
Move.l #0,d0
|
||
Jsr OpenLib(a6)
|
||
DLea _DBase,a1
|
||
Move.l d0,(a1)
|
||
Move.l d0,a1
|
||
Jsr CloseLib(a6)
|
||
; Creation du fichier.
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=Dos Base.
|
||
DLea _IcN,a1 ; D1=File Name.
|
||
Move.l a1,d1
|
||
Move.l #1006,d2 ; D2=Write File.
|
||
Jsr DosOpen(a6)
|
||
DLea _IHnd,a0
|
||
Move.l d0,(a0) ; D0=Icon File Handle.
|
||
Move.l d0,d1 ; D1=Handle.
|
||
DLea _Icons,a0
|
||
Move.l (a0),d3
|
||
Mulu #260,d3
|
||
Add.l #8,d3 ; D3=File Length to be written.
|
||
DLea _IcBase,a0
|
||
Move.l (a0),d2 ; D2=Icon Bank Base.
|
||
Jsr DosWrite(a6)
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
Jsr DosClose(a6)
|
||
_sie Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
NOTRESERVED
|
||
Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #9,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LOADICON Equ 93
|
||
L93 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,a0 ; A0=Name Base
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=Name Length.
|
||
; Verifications.
|
||
Cmp.l #1,d0
|
||
Blt _sie
|
||
Cmp.l #95,d0
|
||
Bgt _sie
|
||
DLea _IcN,a1
|
||
; Mise en place du nom du fichier termine par '0' dans la zone reservee.
|
||
_sii1 Move.b (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bne _sii1
|
||
Move.b #$0,(a1)
|
||
; Ouverture de la Dos.Library .
|
||
Move.l $4,a6
|
||
DLea _DName,a1
|
||
Move.l #0,d0
|
||
Jsr OpenLib(a6)
|
||
DLea _DBase,a1
|
||
Move.l d0,(a1)
|
||
Move.l d0,a1
|
||
Jsr CloseLib(a6)
|
||
; Lecture des 8 premier octets du fichier.
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=Dos Base.
|
||
DLea _IcN,a1 ; D1=File Name.
|
||
Move.l a1,d1
|
||
Move.l #1005,d2 ; D2=Read File.
|
||
Jsr DosOpen(a6)
|
||
DLea _IHnd,a0
|
||
Move.l d0,(a0) ; Sauvegarde du File Handle.
|
||
Move.l #8,d3 ; D3=Length = 8 octets .
|
||
Move.l d0,d1 ; D1=File Handle.
|
||
DLea _IcLoad,a0
|
||
Move.l a0,d2 ; d2=Adress
|
||
Jsr DosRead(a6)
|
||
DLea _IcLoad,a0
|
||
Cmp.l #"F.C1",(a0)
|
||
Bne _NotIconFile ; Mauvais format.
|
||
; Fichier au format Icones.
|
||
Add.l #4,a0
|
||
Move.l (a0),d0
|
||
DLea _Icons,a0
|
||
Move.l d0,(a0) ; Sauvegarde du nombre d'icones du fichier.
|
||
Mulu #260,d0
|
||
Add.l #8,d0 ; D0=Byte size needed.
|
||
Move.l #Chip+Clear,d1 ; D1=Requirements.
|
||
Move.l $4,a6
|
||
Jsr AllocMem(a6)
|
||
Cmp.l #0,d0 ; Not enough memory available ???
|
||
Beq _NotIconFile ; Pas assez de memoire pour le fichier.
|
||
DLea _IcBase,a0
|
||
Move.l d0,(a0) ; Save ICON BASE Adress.
|
||
Move.l d0,d7
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=DosBase.
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1 ; D1=File Handle.
|
||
DLea _Icons,a0
|
||
Move.l (a0),d3
|
||
Mulu #260,d3 ; D3=Longueur de chargement du reste.
|
||
Move.l d7,a1 ; A1=Icon Adress.
|
||
Move.l #"F.C1",(a1)+ ; Remise en place du header.
|
||
Move.l (a0),(a1)+ ; Remise en place du nombre d'icones.
|
||
Move.l a1,d2 ; D2=Adresse de chargement.
|
||
Jsr DosRead(a6)
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
Jsr DosClose(a6)
|
||
Bra _lie
|
||
;
|
||
_NotIconFile
|
||
; Fermeture du fichier.
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6
|
||
Jsr DosClose(a6)
|
||
;
|
||
DLea _Icons,a0
|
||
Move.l #$0,(a0)
|
||
DLea _IcBase,a0
|
||
Move.l #$0,(a0)
|
||
Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #10,d0
|
||
Rbra L_CUSTOM
|
||
;
|
||
_lie Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPRESERVE Equ 94
|
||
L94 Movem.l a3-a6,-(sp)
|
||
DLea _Mplots,a0
|
||
Move.l (a0),d7
|
||
Cmp.l #$0,d7
|
||
Bne _rmp ; Si banque deja reservee.
|
||
Move.l (a3),d7 ; D7=nombre de points
|
||
Move.l d7,(a0) ; Save Points Max.
|
||
Mulu #6,d7
|
||
Add.l #8,d7
|
||
Move.l d7,d0 ; D0=Byte Size.
|
||
Move.l #Chip+Clear,d1 ; D1=Memory Type
|
||
Move.l $4,a6
|
||
Jsr AllocMem(a6)
|
||
DLea _MpBase,a0
|
||
Move.l d0,(a0)
|
||
Cmp.l #0,d0
|
||
Beq NOFREE2
|
||
; Preparation de la banque d'icones.
|
||
Move.l d0,a0
|
||
DLea _Mplots,a1
|
||
Move.l #"F.C2",(a0)+ ; Offset #0 Equ "F.C2"
|
||
Move.l (a1),(a0) ; Offset #4 Equ MPlots Max.
|
||
Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
NOFREE2 Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #8,d0
|
||
Rbra L_CUSTOM
|
||
_rmp Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #12,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPERASE Equ 95
|
||
L95 Movem.l a3-a6,-(sp)
|
||
DLea _Mplots,a2
|
||
Move.l (a2),d0
|
||
Cmp.l #$0,d0
|
||
Beq _emp
|
||
Move.l #$0,(a2) ; Clear _ICONS Register.
|
||
Mulu #6,d0
|
||
Add.l #8,d0
|
||
DLea _MpBase,a2
|
||
Move.l (a2),a1
|
||
Cmp.l #0,a1
|
||
Beq MPE
|
||
Move.l #$0,(a2) ; Clear _ICBASE Register.
|
||
Move.l $4,a6
|
||
Jsr FreeMem(a6)
|
||
_emp Movem.l (sp)+,a3-a6
|
||
Rts
|
||
MPE Movem.l (sp)+,a3-a6
|
||
Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPLOAD Equ 96
|
||
L96 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,a0 ; A0=Name Base
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=Name Length.
|
||
; Verifications.
|
||
Cmp.l #1,d0
|
||
Blt _mie
|
||
Cmp.l #95,d0
|
||
Bgt _mie
|
||
DLea _IcN,a1
|
||
; Mise en place du nom du fichier termine par '0' dans la zone reservee.
|
||
_mii1 Move.b (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bne _mii1
|
||
Move.b #$0,(a1)
|
||
; Ouverture de la Dos.Library .
|
||
Move.l $4,a6
|
||
DLea _DName,a1
|
||
Move.l #0,d0
|
||
Jsr OpenLib(a6)
|
||
DLea _DBase,a1
|
||
Move.l d0,(a1)
|
||
Move.l d0,a1
|
||
Jsr CloseLib(a6)
|
||
; Lecture des 8 premier octets du fichier.
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=Dos Base.
|
||
DLea _IcN,a1 ; D1=File Name.
|
||
Move.l a1,d1
|
||
Move.l #1005,d2 ; D2=Read File.
|
||
Jsr DosOpen(a6)
|
||
DLea _IHnd,a0
|
||
Move.l d0,(a0) ; Sauvegarde du File Handle.
|
||
Move.l #8,d3 ; D3=Length = 8 octets .
|
||
Move.l d0,d1 ; D1=File Handle.
|
||
DLea _IcLoad,a0
|
||
Move.l a0,d2 ; d2=Adress
|
||
Jsr DosRead(a6)
|
||
DLea _IcLoad,a0
|
||
Cmp.l #"F.C2",(a0)
|
||
Bne _NotMplotFile ; Mauvais format.
|
||
; Fichier au format Icones.
|
||
Add.l #4,a0
|
||
Move.l (a0),d0
|
||
DLea _Mplots,a0
|
||
Move.l d0,(a0) ; Sauvegarde du nombre d'icones du fichier.
|
||
Mulu #6,d0
|
||
Add.l #8,d0 ; D0=Byte size needed.
|
||
Move.l #Chip+Clear,d1 ; D1=Requirements.
|
||
Move.l $4,a6
|
||
Jsr AllocMem(a6)
|
||
Cmp.l #0,d0 ; Not enough memory available ???
|
||
Beq _NotMplotFile ; Pas assez de memoire pour le fichier.
|
||
DLea _MpBase,a0
|
||
Move.l d0,(a0) ; Save ICON BASE Adress.
|
||
Move.l d0,d7
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=DosBase.
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1 ; D1=File Handle.
|
||
DLea _Mplots,a0
|
||
Move.l (a0),d3
|
||
Mulu #260,d3 ; D3=Longueur de chargement du reste.
|
||
Move.l d7,a1 ; A1=Icon Adress.
|
||
Move.l #"F.C2",(a1)+ ; Remise en place du header.
|
||
Move.l (a0),(a1)+ ; Remise en place du nombre d'icones.
|
||
Move.l a1,d2 ; D2=Adresse de chargement.
|
||
Jsr DosRead(a6)
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
Jsr DosClose(a6)
|
||
Bra _mie
|
||
;
|
||
_NotMplotFile
|
||
; Fermeture du fichier.
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6
|
||
Jsr DosClose(a6)
|
||
;
|
||
DLea _Mplots,a0
|
||
Move.l #$0,(a0)
|
||
DLea _MpBase,a0
|
||
Move.l #$0,(a0)
|
||
Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #10,d0
|
||
Rbra L_CUSTOM
|
||
;
|
||
_mie Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPSAVE Equ 97
|
||
L97 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,a0 ; A0=Name Base
|
||
DLea _MpBase,a0
|
||
Move.l (a0),d0
|
||
Cmp.l #$0,d0
|
||
Beq NOMP
|
||
Clr.l d0
|
||
Move.w (a0)+,d0 ; D0=Name Length.
|
||
Cmp.l #1,d0
|
||
Blt _sme
|
||
Cmp.l #95,d0
|
||
Bgt _sme
|
||
DLea _IcN,a1
|
||
; Mise en place du nom du fichier termine par '0' dans la zone reservee.
|
||
_sm1 Move.b (a0)+,(a1)+
|
||
Sub.l #1,d0
|
||
Cmp.l #0,d0
|
||
Bne _sm1
|
||
Move.b #$0,(a1)
|
||
;
|
||
Move.l $4,a6
|
||
DLea _DName,a1
|
||
Move.l #0,d0
|
||
Jsr OpenLib(a6)
|
||
DLea _DBase,a1
|
||
Move.l d0,(a1)
|
||
Move.l d0,a1
|
||
Jsr CloseLib(a6)
|
||
; Creation du fichier.
|
||
DLea _DBase,a0
|
||
Move.l (a0),a6 ; A6=Dos Base.
|
||
DLea _IcN,a1 ; D1=File Name.
|
||
Move.l a1,d1
|
||
Move.l #1006,d2 ; D2=Write File.
|
||
Jsr DosOpen(a6)
|
||
DLea _IHnd,a0
|
||
Move.l d0,(a0) ; D0=Icon File Handle.
|
||
Move.l d0,d1 ; D1=Handle.
|
||
DLea _Mplots,a0
|
||
Move.l (a0),d3
|
||
Mulu #6,d3
|
||
Add.l #8,d3 ; D3=File Length to be written.
|
||
DLea _MpBase,a0
|
||
Move.l (a0),d2 ; D2=Icon Bank Base.
|
||
Jsr DosWrite(a6)
|
||
DLea _IHnd,a0
|
||
Move.l (a0),d1
|
||
Jsr DosClose(a6)
|
||
_sme Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Rts
|
||
NOMP Movem.l (sp)+,a3-a6
|
||
Add.l #4,a3
|
||
Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPDEFINE Equ 98
|
||
L98 Move.l (a3)+,d4 ; D4=Couleur.
|
||
Move.l (a3)+,d3 ; D3=Y Pos.
|
||
Move.l (a3)+,d2 ; D2=X Pos.
|
||
Move.l (a3)+,d1 ; D1=Point.
|
||
DLea _MpBase,a1
|
||
Move.l (a1),a0
|
||
Cmp.l #0,a0
|
||
Beq _mpi1
|
||
Cmp.l #1,d1
|
||
Blt _mpi2
|
||
Add.l #4,a0
|
||
Move.l (a0)+,d0 ; D0=Point Maxi.
|
||
Cmp.l d0,d1
|
||
Bgt _mpi2
|
||
Sub.l #1,d1
|
||
Mulu #6,d1
|
||
Add.l d1,a0
|
||
Move.w d2,(a0)+ ; Save X Pos.
|
||
Move.w d3,(a0)+ ; Save Y Pos.
|
||
Move.w d4,(a0)+ ; Save Ink.
|
||
_mpi Rts
|
||
_mpi1 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
_mpi2 Moveq #13,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPBASE Equ 99
|
||
L99 DLea _MpBase,a0
|
||
Move.l (a0),d3
|
||
Moveq #$0,d2
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPDRAW Equ 100
|
||
L100 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,d1 ; D1=Last Adress.
|
||
Move.l (a3)+,d0 ; D2=First Adress.
|
||
Sub.l #1,d1
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
Mulu #6,d1
|
||
DLea _MpBase,a4
|
||
Move.l (a4),a0
|
||
Cmp.l #0,a0
|
||
Beq mpd
|
||
Add.l #8,a0
|
||
Move.l a0,a1
|
||
Add.l d0,a0 ; A0=First Real Adress.
|
||
Add.l d1,a1 ; A1=Last Real Adress.
|
||
;
|
||
DLea _XY,a3
|
||
Move.l (a3)+,d7 ; D7=X Screen Size.
|
||
Move.l (a3),d6 ; D6=Y Screen Size.
|
||
Sub.l #1,d6
|
||
Move.l d7,d5
|
||
Sub.l #1,d5
|
||
Lsr.l #3,d7 ; D7 en octets.
|
||
; Lecture du point
|
||
_Mpp0 Clr.l d0
|
||
Clr.l d1
|
||
Clr.l d2
|
||
Move.w (a0)+,d0 ; D0=X pos.
|
||
Move.w (a0)+,d1 ; D1=Y pos.
|
||
; Si coordonnees NEGATIVES.
|
||
Btst #15,d0
|
||
Beq _Mp0
|
||
Or.l #$ffff0000,d0
|
||
_Mp0 Btst #15,d1
|
||
Beq _Mp1
|
||
Or.l #$ffff0000,d1
|
||
; Decalage d'origine !!!
|
||
_Mp1 DLea _Origin,a2
|
||
Add.l (a2)+,d0
|
||
Add.l (a2)+,d1
|
||
;
|
||
Move.w (a0)+,d2 ; D2=Couleur du point.
|
||
; Verifications !!!
|
||
Cmp.l #0,d0
|
||
Blt _xxl
|
||
Cmp.l d5,d0
|
||
Bgt _xxl
|
||
Cmp.l #0,d1
|
||
Blt _xxl
|
||
Cmp.l d6,d1
|
||
Bgt _xxl
|
||
; Calcul du rajout aux bits plans.
|
||
Mulu d7,d1 ; D1=Rajout pour se trouver a la bonne ligne.
|
||
Move.l d0,d3
|
||
And.l #$fffffff8,d3
|
||
Sub.l d3,d0 ; D0=15-Bit to set/clear.
|
||
Lsr.l #3,d3
|
||
Add.l d3,d1 ; D1=Rajout Aux BITS PLANS. !!!
|
||
Move.l #$7,d4
|
||
Sub.l d0,d4
|
||
Move.l d4,d0 ; D0=Bit to SET/CLEAR. !!!
|
||
;
|
||
; Mise en place sur les bits plans
|
||
Clr.l d4
|
||
DLea _BitsPlanes,a4
|
||
_Mpp1 Move.l (a4)+,a2
|
||
Cmp.l #$0,a2
|
||
Beq _xxl
|
||
Add.l d1,a2
|
||
Clr.l d3
|
||
Move.b (a2),d3
|
||
Btst d4,d2
|
||
Beq _MpClear
|
||
_MpSet
|
||
Bset d0,d3
|
||
Bra _MpSuite
|
||
_MpClear
|
||
Bclr d0,d3
|
||
_MpSuite
|
||
Move.b d3,(a2)
|
||
Add.l #1,d4
|
||
DLea _MpP,a3
|
||
Move.l (a3),d3
|
||
Cmp.l d3,d4
|
||
Blt _Mpp1
|
||
_xxl Cmp.l a0,a1
|
||
Bgt _Mpp0
|
||
_xxl2 Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Rts
|
||
mpd Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPX Equ 101
|
||
L101 Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
DLea _MpBase,a0
|
||
Move.l (a0),a1
|
||
Cmp.l #0,a1
|
||
Beq mpx2
|
||
Add.l #8,a1
|
||
Add.l d0,a1
|
||
Clr.l d3
|
||
Move.w (a1),d3
|
||
Moveq #0,d2
|
||
Btst #15,d3
|
||
Beq _mpx
|
||
Or.l #$ffff0000,d3
|
||
_mpx Rts
|
||
mpx2 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPY Equ 102
|
||
L102 Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
DLea _MpBase,a0
|
||
Move.l (a0),a1
|
||
Cmp.l #0,a1
|
||
Beq mpy2
|
||
Add.l #10,a1
|
||
Add.l d0,a1
|
||
Clr.l d3
|
||
Move.w (a1),d3
|
||
Moveq #0,d2
|
||
Btst #15,d3
|
||
Beq _mpy
|
||
Or.l #$ffff0000,d3
|
||
_mpy Rts
|
||
mpy2 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPC Equ 103
|
||
L103 Move.l (a3)+,d0
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
DLea _MpBase,a0
|
||
Move.l (a0),a1
|
||
Cmp.l #0,a1
|
||
Beq mpc2
|
||
Add.l #12,a1
|
||
Add.l d0,a1
|
||
Clr.l d3
|
||
Move.w (a1),d3
|
||
Moveq #0,d2
|
||
Rts
|
||
mpc2 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPMODIFY Equ 104
|
||
L104 Move.l (a3)+,d7 ; D7=Y add value.
|
||
Move.l (a3)+,d6 ; D6=X add value.
|
||
Move.l (a3)+,d5 ; D5=Last point.
|
||
Move.l (a3)+,d4 ; D4=First point.
|
||
Sub.l #1,d4
|
||
Sub.l #1,d5
|
||
Mulu #6,d4
|
||
Mulu #6,d5
|
||
DLea _XY,a2
|
||
Move.l (a2)+,d2 ; D2=X screen size.
|
||
Move.l (a2),d3 ; D3=Y screen size.
|
||
DLea _MpBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _mpmx
|
||
Add.l #8,a0
|
||
Move.l a0,a1
|
||
Add.l d4,a0 ; A0=Fisrt adress.
|
||
Add.l d5,a1 ; A1=Last adress.
|
||
_xx Clr.l d0
|
||
Clr.l d1
|
||
Move.w (a0)+,d0 ; D0=X pos.
|
||
Move.w (a0),d1 ; D1=Y pos.
|
||
Sub.l #2,a0
|
||
Add.l d6,d0
|
||
Cmp.l d2,d0
|
||
Blt _mpm1
|
||
Move.l #0,d0
|
||
_mpm1 Cmp.l #0,d0
|
||
Bgt _mpm2
|
||
Beq _mpm2
|
||
Move.l d2,d0
|
||
Sub.l #1,d0
|
||
_mpm2 Add.l d7,d1
|
||
Cmp.l d3,d1
|
||
Blt _mpm3
|
||
Move.l #0,d1
|
||
_mpm3 Cmp.l #0,d1
|
||
Bgt _mpm4
|
||
Beq _mpm4
|
||
Move.l d3,d1
|
||
Sub.l #1,d1
|
||
_mpm4 Move.w d0,(a0)+
|
||
Move.w d1,(a0)+
|
||
Add.l #2,a0
|
||
Cmp.l a1,a0
|
||
Blt _xx
|
||
Rts
|
||
_mpmx Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPMODIFY2 Equ 105
|
||
L105 Move.l (a3)+,d7 ; D7=X add value.
|
||
Move.l (a3)+,d6 ; D6=Point to modify.
|
||
DLea _MpBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _mp21
|
||
Sub.l #1,d6
|
||
Mulu #6,d6
|
||
Add.l #8,a0
|
||
Add.l d6,a0
|
||
Clr.l d5
|
||
Move.w (a0),d5
|
||
Add.l d7,d5
|
||
DLea _XY,a2
|
||
Move.l (a2),d0
|
||
Cmp.l d0,d5
|
||
Blt _mp21a
|
||
Move.l #0,d5
|
||
_mp21a Cmp.l #0,d5
|
||
Bgt _mp21b
|
||
Beq _mp21b
|
||
Move.l d0,d5
|
||
Sub.l #1,d5
|
||
_mp21b Move.w d5,(a0)
|
||
Rts
|
||
_mp21 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPMODIFY3 Equ 106
|
||
L106 Move.l (a3)+,d7 ; D7=y add value.
|
||
Move.l (a3)+,d6 ; D6=Point to modify.
|
||
DLea _MpBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _mp22
|
||
Sub.l #1,d6
|
||
Mulu #6,d6
|
||
Add.l #10,a0
|
||
Add.l d6,a0
|
||
Clr.l d5
|
||
Move.w (a0),d5
|
||
Add.l d7,d5
|
||
DLea _XY,a2
|
||
Add.l #4,a2
|
||
Move.l (a2),d0
|
||
Cmp.l d0,d5
|
||
Blt _mp22a
|
||
Move.l #0,d5
|
||
_mp22a Cmp.l #0,d5
|
||
Bgt _mp22b
|
||
Beq _mp22b
|
||
Move.l d0,d5
|
||
Sub.l #1,d5
|
||
_mp22b Move.w d5,(a0)
|
||
Rts
|
||
_mp22 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPMODIFY4 Equ 107
|
||
L107 Move.l (a3)+,d7 ; D7=X add value.
|
||
Move.l (a3)+,d6 ; D6=Point to modify.
|
||
DLea _MpBase,a2
|
||
Move.l (a2),a0
|
||
Cmp.l #0,a0
|
||
Beq _mp23
|
||
Sub.l #1,d6
|
||
Mulu #6,d6
|
||
Add.l #12,a0
|
||
Add.l d6,a0
|
||
Clr.l d5
|
||
Move.w (a0),d5
|
||
Add.l d7,d5
|
||
Move.l #256,d0
|
||
Cmp.l d0,d5
|
||
Blt _mp23a
|
||
Move.l #0,d5
|
||
_mp23a Cmp.l #0,d5
|
||
Bgt _mp23b
|
||
Beq _mp23b
|
||
Move.l d0,d5
|
||
Sub.l #1,d5
|
||
_mp23b Move.w d5,(a0)
|
||
Rts
|
||
_mp23 Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPORIGIN Equ 108
|
||
L108 DLea _Origin,a0
|
||
Move.l (a3)+,d1
|
||
Move.l (a3)+,(a0)+
|
||
Move.l d1,(a0)+
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPPLANES Equ 109
|
||
L109 Move.l (a3)+,d0
|
||
DLea _MpP,a0
|
||
Cmp.l #1,d0
|
||
Blt _mppe
|
||
Cmp.l #8,d0
|
||
Bgt _mppe
|
||
Move.l d0,(a0)
|
||
Rts
|
||
_mppe Moveq #14,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_LSRL Equ 110
|
||
L110 Move.l (a3)+,d1 ; A1=Cible.
|
||
Move.l (a3)+,d0 ; A0=Source.
|
||
And.l #$fffffffe,d1 ; \ Mise a zero du bit 0 des deux sources
|
||
And.l #$fffffffe,d0 ; / pour eviter les adresses impaires.
|
||
Move.l d0,a0
|
||
Move.l d1,a1
|
||
Move.l a1,a2
|
||
Sub.l #4,a1
|
||
_Lsr1 Move.l (a1),(a2)
|
||
Sub.l #4,a1
|
||
Sub.l #4,a2
|
||
Cmp.l a0,a1
|
||
Bgt _Lsr1
|
||
Rts
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPDRAWDPF1 Equ 111
|
||
L111 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,d1 ; D1=Last Adress.
|
||
Move.l (a3)+,d0 ; D2=First Adress.
|
||
Sub.l #1,d1
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
Mulu #6,d1
|
||
DLea _MpBase,a4
|
||
Move.l (a4),a0
|
||
Cmp.l #0,a0
|
||
Beq ampd
|
||
Add.l #8,a0
|
||
Move.l a0,a1
|
||
Add.l d0,a0 ; A0=First Real Adress.
|
||
Add.l d1,a1 ; A1=Last Real Adress.
|
||
;
|
||
DLea _XY,a3
|
||
Move.l (a3)+,d7 ; D7=X Screen Size.
|
||
Move.l (a3),d6 ; D6=Y Screen Size.
|
||
Sub.l #1,d6
|
||
Move.l d7,d5
|
||
Sub.l #1,d5
|
||
Lsr.l #3,d7 ; D7 en octets.
|
||
; Lecture du point
|
||
a_Mpp0 Clr.l d0
|
||
Clr.l d1
|
||
Clr.l d2
|
||
Move.w (a0)+,d0 ; D0=X pos.
|
||
Move.w (a0)+,d1 ; D1=Y pos.
|
||
; Si coordonnees NEGATIVES.
|
||
Btst #15,d0
|
||
Beq a_Mp0
|
||
Or.l #$ffff0000,d0
|
||
a_Mp0 Btst #15,d1
|
||
Beq a_Mp1
|
||
Or.l #$ffff0000,d1
|
||
; Decalage d'origine !!!
|
||
a_Mp1 DLea _Origin,a2
|
||
Add.l (a2)+,d0
|
||
Add.l (a2)+,d1
|
||
;
|
||
Move.w (a0)+,d2 ; D2=Couleur du point.
|
||
; Verifications !!!
|
||
Cmp.l #0,d0
|
||
Blt a_xxl
|
||
Cmp.l d5,d0
|
||
Bgt a_xxl
|
||
Cmp.l #0,d1
|
||
Blt a_xxl
|
||
Cmp.l d6,d1
|
||
Bgt a_xxl
|
||
; Calcul du rajout aux bits plans.
|
||
Mulu d7,d1 ; D1=Rajout pour se trouver a la bonne ligne.
|
||
Move.l d0,d3
|
||
And.l #$fffffff8,d3
|
||
Sub.l d3,d0 ; D0=15-Bit to set/clear.
|
||
Lsr.l #3,d3
|
||
Add.l d3,d1 ; D1=Rajout Aux BITS PLANS. !!!
|
||
Move.l #$7,d4
|
||
Sub.l d0,d4
|
||
Move.l d4,d0 ; D0=Bit to SET/CLEAR. !!!
|
||
;
|
||
; Mise en place sur les bits plans
|
||
Move.l #$0,d4
|
||
DLea _BitsPlanes,a4
|
||
a_Mpp Move.l (a4)+,a2
|
||
Add.l #4,a4
|
||
Cmp.l #$0,a2
|
||
Beq a_xxl
|
||
Add.l d1,a2
|
||
Move.b (a2),d3
|
||
Btst d4,d2
|
||
Beq a_MpClear
|
||
a_MpSet
|
||
Bset d0,d3
|
||
Bra a_MpSuite
|
||
a_MpClear
|
||
Bclr d0,d3
|
||
a_MpSuite
|
||
Move.b d3,(a2)
|
||
Add.l #1,d4
|
||
DLea _MpP,a3
|
||
Move.l (a3),d3
|
||
Cmp.l d3,d4
|
||
Bne a_Mpp
|
||
a_xxl Cmp.l a0,a1
|
||
Bgt a_Mpp0
|
||
a_xxl2 Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Rts
|
||
ampd Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_MPDRAWDPF2 Equ 112
|
||
L112 Movem.l a3-a6,-(sp)
|
||
Move.l (a3)+,d1 ; D1=Last Adress.
|
||
Move.l (a3)+,d0 ; D2=First Adress.
|
||
Sub.l #1,d1
|
||
Sub.l #1,d0
|
||
Mulu #6,d0
|
||
Mulu #6,d1
|
||
DLea _MpBase,a4
|
||
Move.l (a4),a0
|
||
Cmp.l #0,a0
|
||
Beq bmpd
|
||
Add.l #8,a0
|
||
Move.l a0,a1
|
||
Add.l d0,a0 ; A0=First Real Adress.
|
||
Add.l d1,a1 ; A1=Last Real Adress.
|
||
;
|
||
DLea _XY,a3
|
||
Move.l (a3)+,d7 ; D7=X Screen Size.
|
||
Move.l (a3),d6 ; D6=Y Screen Size.
|
||
Sub.l #1,d6
|
||
Move.l d7,d5
|
||
Sub.l #1,d5
|
||
Lsr.l #3,d7 ; D7 en octets.
|
||
; Lecture du point
|
||
b_Mpp0 Clr.l d0
|
||
Clr.l d1
|
||
Clr.l d2
|
||
Move.w (a0)+,d0 ; D0=X pos.
|
||
Move.w (a0)+,d1 ; D1=Y pos.
|
||
; Si coordonnees NEGATIVES.
|
||
Btst #15,d0
|
||
Beq b_Mp0
|
||
Or.l #$ffff0000,d0
|
||
b_Mp0 Btst #15,d1
|
||
Beq b_Mp1
|
||
Or.l #$ffff0000,d1
|
||
; Decalage d'origine !!!
|
||
b_Mp1 DLea _Origin,a2
|
||
Add.l (a2)+,d0
|
||
Add.l (a2)+,d1
|
||
;
|
||
Move.w (a0)+,d2 ; D2=Couleur du point.
|
||
; Verifications !!!
|
||
Cmp.l #0,d0
|
||
Blt b_xxl
|
||
Cmp.l d5,d0
|
||
Bgt b_xxl
|
||
Cmp.l #0,d1
|
||
Blt b_xxl
|
||
Cmp.l d6,d1
|
||
Bgt b_xxl
|
||
; Calcul du rajout aux bits plans.
|
||
Mulu d7,d1 ; D1=Rajout pour se trouver a la bonne ligne.
|
||
Move.l d0,d3
|
||
And.l #$fffffff8,d3
|
||
Sub.l d3,d0 ; D0=15-Bit to set/clear.
|
||
Lsr.l #3,d3
|
||
Add.l d3,d1 ; D1=Rajout Aux BITS PLANS. !!!
|
||
Move.l #$7,d4
|
||
Sub.l d0,d4
|
||
Move.l d4,d0 ; D0=Bit to SET/CLEAR. !!!
|
||
;
|
||
; Mise en place sur les bits plans
|
||
Move.l #$0,d4
|
||
DLea _BitsPlanes,a4
|
||
Add.l #4,a4
|
||
b_Mpp Move.l (a4)+,a2
|
||
Add.l #4,a4
|
||
Cmp.l #$0,a2
|
||
Beq b_xxl
|
||
Add.l d1,a2
|
||
Move.b (a2),d3
|
||
Btst d4,d2
|
||
Beq b_MpClear
|
||
b_MpSet
|
||
Bset d0,d3
|
||
Bra b_MpSuite
|
||
b_MpClear
|
||
Bclr d0,d3
|
||
b_MpSuite
|
||
Move.b d3,(a2)
|
||
Add.l #1,d4
|
||
DLea _MpP,a3
|
||
Move.l (a3),d3
|
||
Cmp.l d3,d4
|
||
Bne b_Mpp
|
||
b_xxl Cmp.l a0,a1
|
||
Bgt b_Mpp0
|
||
b_xxl2 Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Rts
|
||
bmpd Movem.l (sp)+,a3-a6
|
||
Add.l #8,a3
|
||
Moveq #11,d0
|
||
Rbra L_CUSTOM
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L113
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L114
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L115
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L116
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L117
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L118
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L119
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L120
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L121
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L_CUSTOM Equ 122
|
||
L122 Lea ErrMess(pc),a0
|
||
Moveq #0,d1
|
||
Moveq #ExtNb,d2
|
||
Moveq #0,d3
|
||
Rjmp L_ErrorExt
|
||
; Error Selection Messages
|
||
_NoCopperList
|
||
Moveq #1,d0
|
||
Rbra L_CUSTOM
|
||
; Error List.
|
||
ErrMess Dc.b "Adresse pour copper list INVALIDE.",0 ; 0
|
||
Dc.b "Copper list non reservee.",0 ; 1
|
||
Dc.b "Registre de couleur invalide.",0 ; 2
|
||
Dc.b "BMHD non trouve.",0 ; 3
|
||
Dc.b "Une ou plusieurs bases ecran INVALIDE(S).",0 ; 4
|
||
Dc.b "Banque memoire trop petite.",0 ; 5
|
||
Dc.b "CMAP non trouve.Fichier IFF/ILBM corrompu.",0 ; 6
|
||
Dc.b "2e Ecran copper non cree.",0 ; 7
|
||
Dc.b "Pas assez de memoire pour l'allocation!!!",0 ; 8
|
||
Dc.b "Aga Icon bank non reservee.",0 ; 9
|
||
Dc.b "Fichier d'un format inconnu.",0 ; 10
|
||
Dc.b "Multi Plot bank non reservee.",0 ; 11
|
||
Dc.b "Multi Plot bank deja reservee.",0 ; 12
|
||
Dc.b "Point demande HORS limite de reservation.",0 ; 13
|
||
Dc.b "Valeur permise de 1 a 8 seulement.",0 ; 14
|
||
Dc.b "Aga Icon bank deja reservee.",0 ; 15
|
||
EVEN
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L123 Moveq #0,d1
|
||
Moveq #ExtNb,d2
|
||
Moveq #-1,d3
|
||
Rjmp L_ErrorExt
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
L124
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
C_TITLE
|
||
Dc.b "Amos1.3/AmosPro Personnal Extension V1.1"
|
||
Dc.b 0
|
||
Dc.b "Version Enregistr<EFBFBD>e COMPILABLE."
|
||
; Dc.b 0
|
||
Even
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
C_END Dc.w 0
|
||
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
; Ne Jamais Oublier :
|
||
;
|
||
; A > Lire Des Donnees De L'Amos
|
||
; 1 > A3(.l)=Adresse des valeurs
|
||
; ( Toujours remettre A3 a sa valeur initiale avant un RTS )
|
||
; A0(.w)=Longueur des textes (Strings)
|
||
; 2 > A4,A5,A6 ne doivent aucunement etre modifies
|
||
; 3 > D0,D1,D2,D3,D4,D5,D6,
|
||
; B > Si l'utilisation des registres a3,a4,a5,a6 est obligatoire,
|
||
; 1 > Au debut de la routine faire : MOVEM.L A3-A6,-(SP)
|
||
; 2 > Utiliser a3,a4,a5,a6 a sa guise,
|
||
; 3 > A la fin de la routine : MOVEM.L (SP)+,A3-A6
|
||
; 4 > Ne pas oublier de remettre A3 a sa valeur initiale !!!
|
||
;
|