amos-professional/extensions/Personal-1.1a/AMOSPro_Personnal.Lib.s
2020-04-26 02:58:13 +02:00

4535 lines
96 KiB
ArmAsm
Raw Blame History

;
; *************************************************************
; * *
; * 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 !!!
;