home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
623a.lha
/
TurboDEX
/
ExampleSources
/
vector.S
< prev
Wrap
Text File
|
1992-03-22
|
10KB
|
417 lines
SECTION dex,CODE
LEA arraylabcoordinates,A0
MOVE.L A0,mainvarcoordinates
MOVE.L 4,A6 ; init + open libs
LEA dosname,A1
MOVEQ #33,D0 ; we need atleast kick 1.2
JSR -552(A6) ; open dos.library
MOVE.L D0,mainvardosbase
BEQ backwherewecamefrom
MOVE.L A6,A5
MOVE.L D0,A6 ; get std output
JSR -60(A6)
MOVE.L A5,A6
MOVE.L D0,mainvarstdout
LEA graphicsname,A1
MOVEQ #33,D0 ; we need atleast kick 1.2
JSR -552(A6) ; open graphics.library
MOVE.L D0,mainvargraphicsbase
BEQ backwherewecamefrom
LEA intuitionname,A1
MOVEQ #33,D0 ; we need atleast kick 1.2
JSR -552(A6) ; open intuition.library
MOVE.L D0,mainvarintuitionbase
BEQ backwherewecamefrom
MOVE.L A7,savestack ; save stack
BSR proglabmain ; get going ...
leaveprog:
MOVE.L savestack,A7 ; close down
MOVE.L 4,A6
MOVE.L mainvardosbase,A1
JSR -414(a6) ; close dos.library
MOVE.L mainvargraphicsbase,A1
JSR -414(a6) ; close graphics.library
MOVE.L mainvarintuitionbase,A1
JSR -414(a6) ; close intuition.library
backwherewecamefrom:
RTS
savestack: DC.L 0
rdfdump:
MOVE.B D0,(A3)+
ADDQ.L #1,rdflenght
RTS
rdflenght:
DC.L 0
printf:
MOVE.L D1,A0
LEA rdfdump(pc),A2
MOVE.L 4,A6
MOVE.L 276(A6),A3
MOVE.L 58(A3),A3
MOVE.L A3,A4
CLR.L rdflenght
JSR -522(A6)
MOVE.L mainvarstdout(pc),D1
MOVE.L A4,D2
MOVE.L rdflenght(pc),D3
MOVE.L mainvardosbase(pc),a6
JSR -48(a6)
RTS
proglabinit: ; PROC init()
BSR proglabmakedata ; VOID makedata()
MOVEQ #90,D0 ; VOID view(90,13)
MOVE.W D0,viewvarx
MOVEQ #13,D0
MOVE.W D0,viewvary
BSR proglabview
MOVEQ #0,D0 ; screenadr1 := screen(screenx,screeny,2,0,' ')
MOVE.W mainvarscreenx(pc),D0
MOVE.W D0,proglabns+4
MOVEQ #0,D0
MOVE.W mainvarscreeny(pc),D0
MOVE.W D0,proglabns+6
MOVEQ #2,D0
MOVE.W D0,proglabns+8
MOVEQ #0,D0
MOVE.W D0,proglabns+12
LEA directtextlab0(pc),A0
MOVE.L A0,D0
MOVE.L D0,proglabns+20
BSR proglabscreen
MOVE.L D0,mainvarscreenadr1
MOVE.L mainvarscreenadr1(pc),D0 ; rast1 := screenadr1+84
ADD.L #84,D0
MOVE.L D0,mainvarrast1
MOVE.L mainvarscreenadr1(pc),D0 ; VOID setcolours(screenadr1)
MOVE.L D0,setcoloursvarrastport
BSR proglabsetcolours
MOVEQ #0,D0 ; screenadr2 := screen(screenx,screeny,2,0,' ')
MOVE.W mainvarscreenx(pc),D0
MOVE.W D0,proglabns+4
MOVEQ #0,D0
MOVE.W mainvarscreeny(pc),D0
MOVE.W D0,proglabns+6
MOVEQ #2,D0
MOVE.W D0,proglabns+8
MOVEQ #0,D0
MOVE.W D0,proglabns+12
LEA directtextlab1(pc),A0
MOVE.L A0,D0
MOVE.L D0,proglabns+20
BSR proglabscreen
MOVE.L D0,mainvarscreenadr2
MOVE.L mainvarscreenadr2(pc),D0 ; rast2 := screenadr2+84
ADD.L #84,D0
MOVE.L D0,mainvarrast2
MOVE.L mainvarscreenadr2(pc),D0 ; VOID setcolours(screenadr2)
MOVE.L D0,setcoloursvarrastport
BSR proglabsetcolours
MOVE.L mainvarscreenadr1(pc),D0 ; ENDPROC screenadr1*screenadr2
MULS mainvarscreenadr2+2(pc),D0
RTS
proglabmain: ; PROC main()
BSR proglabinit ; suxxes := init()
MOVE.L D0,mainvarsuxxes
MOVE.L mainvarsuxxes(pc),D0 ; IF suxxes=0
CMP.L #0,D0
BNE endcmplabel0
MOVEM.L D2/D3,-(A7)
LEA directtextlab2(pc),A0
MOVE.L A0,D0
MOVE.L D0,D1
MOVE.L A7,A1
BSR printf
LEA 0(A7),A7
MOVEM.L (A7)+,D2/D3
BRA endendcmplabel0 ; ELSE
endcmplabel0:
mouselab2: ; MOUSE
MOVEQ #0,D0 ; FOR frame,maxframe,0,-1
MOVE.W mainvarmaxframe(pc),D0
ADDQ.W #1,D0
MOVE.W D0,mainvarframe
forlabel3:
SUBQ.W #1,mainvarframe
MOVE.L mainvarrast1(pc),D0 ; rast := rast1
MOVE.L D0,mainvarrast
MOVE.L mainvarscreenadr1(pc),D0 ; screen := screenadr1
MOVE.L D0,mainvarscreen
MOVE.L mainvaractual(pc),D0 ; IF actual=1
CMP.L #1,D0
BNE endcmplabel4
MOVE.L mainvarrast2(pc),D0 ; rast := rast2
MOVE.L D0,mainvarrast
MOVE.L mainvarscreenadr2(pc),D0 ; screen := screenadr2
MOVE.L D0,mainvarscreen
endcmplabel4: ; ENDIF
endendcmplabel1:
MOVE.L mainvarrast(pc),D0 ; VOID SetRast(rast,0)
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.L mainvargraphicsbase,A6
JSR -234(A6)
MOVEQ #1,D4 ; colour := 1
MOVEQ #0,D3 ; frameoffset := maxline*frame*8+coordinates
MOVE.W mainvarmaxline(pc),D3
MULS mainvarframe(pc),D3
ASL.L #3,D3
ADD.L mainvarcoordinates(pc),D3
MOVEQ #0,D7 ; DOWN line,maxline
MOVE.W mainvarmaxline(pc),D7
SUBQ #1,D7
countlabel5:
MOVEQ #0,D2 ; lineoffset := line*8+frameoffset
MOVE.W D7,D2
ASL.L #3,D2
ADD.L D3,D2
MOVE.L mainvarrast(pc),D0 ; VOID SetAPen(rast,colour)
MOVE.L D0,A1
MOVE.L D4,D0
MOVE.L mainvargraphicsbase,A6
JSR -342(A6)
MOVE.L D2,D0 ; x := MINT(lineoffset)
MOVE.L D0,A0
MOVE.W (A0),D0
MOVE.W D0,D6
MOVE.L D2,D0 ; y := MINT(lineoffset+2)
ADDQ.L #2,D0
MOVE.L D0,A0
MOVE.W (A0),D0
MOVE.W D0,D5
MOVE.L mainvarrast(pc),D0 ; VOID Move(rast,x,y)
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.W D6,D0
MOVEQ #0,D1
MOVE.W D5,D1
MOVE.L mainvargraphicsbase,A6
JSR -240(A6)
MOVE.L D2,D0 ; x := MINT(lineoffset+4)
ADDQ.L #4,D0
MOVE.L D0,A0
MOVE.W (A0),D0
MOVE.W D0,D6
MOVE.L D2,D0 ; y := MINT(lineoffset+6)
ADDQ.L #6,D0
MOVE.L D0,A0
MOVE.W (A0),D0
MOVE.W D0,D5
MOVE.L mainvarrast(pc),D0 ; VOID Draw(rast,x,y)
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.W D6,D0
MOVEQ #0,D1
MOVE.W D5,D1
MOVE.L mainvargraphicsbase,A6
JSR -246(A6)
ADDQ.L #1,D4 ; INC 1,colour
MOVE.L D4,D0 ; IF colour>3
CMP.L #3,D0
BLE endcmplabel6
MOVEQ #1,D4 ; colour := 1
endcmplabel6: ; ENDIF
endendcmplabel2:
DBRA D7,countlabel5 ; ENDDOWN
SUB.L #$10000,D7
BCC countlabel5
BTST #6,$bfe001 ; JUMPMOUSE exit
BEQ proglabexit
MOVE.L mainvarscreen(pc),D0 ; VOID ScreenToFront(screen)
MOVE.L D0,A0
MOVE.L mainvarintuitionbase,A6
JSR -252(A6)
MOVEQ #32,D0 ; DMACON := 32
MOVE.W D0,$DFF096
MOVEQ #1,D0 ; actual := 1-actual
SUB.L mainvaractual(pc),D0
MOVE.L D0,mainvaractual
MOVE.L #0,D0 ; ENDFOR
CMP.W mainvarframe,D0
BLT forlabel3
BTST #6,$bfe001 ; ENDMOUSE
BNE mouselab2
endcmplabel1: ; ENDIF
endendcmplabel0:
proglabexit: ; exit:
BSR proglabcleanup ; VOID cleanup()
MOVEQ #0,D0 ; ENDPROC
RTS
proglabcleanup: ; PROC cleanup()
MOVE.L mainvarscreenadr1(pc),D0 ; IF screenadr1?0
CMP.L #0,D0
BEQ endcmplabel7
MOVE.L mainvarscreenadr1(pc),D0 ; VOID CloseScreen(screenadr1)
MOVE.L D0,A0
MOVE.L mainvarintuitionbase,A6
JSR -66(A6)
endcmplabel7: ; ENDIF
endendcmplabel3:
MOVE.L mainvarscreenadr2(pc),D0 ; IF screenadr2?0
CMP.L #0,D0
BEQ endcmplabel8
MOVE.L mainvarscreenadr2(pc),D0 ; VOID CloseScreen(screenadr2)
MOVE.L D0,A0
MOVE.L mainvarintuitionbase,A6
JSR -66(A6)
endcmplabel8: ; ENDIF
endendcmplabel4:
MOVE.L #129,D0 ; VOID view(129,44)
MOVE.W D0,viewvarx
MOVEQ #44,D0
MOVE.W D0,viewvary
BSR proglabview
MOVEQ #0,D0 ; ENDPROC
RTS
proglabmakedata: ; PROC makedata()
LEA proglabvectordata,A0 ; adr := {vectordata}
MOVE.L A0,D7
MOVEQ #0,D5 ; dummy := 0
MOVEQ #0,D6 ; FOR count,0,5199
SUBQ.L #1,D6
forlabel9:
ADDQ.L #1,D6
MOVE.L D7,D0 ; dummy := MCHAR(adr+count)
ADD.L D6,D0
MOVE.L D0,A0
MOVE.B (A0),D0
MOVE.W D0,D5
MOVE.L #255,D0 ; AND 255,dummy
AND.W D0,D5
MOVE.L D6,D0 ; MINT count*2+coordinates,dummy*2
ASL.L #1,D0
ADD.L mainvarcoordinates(pc),D0
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.W D5,D0
ASL.L #1,D0
MOVE.W D0,(A1)
MOVE.L #5199,D0 ; ENDFOR
CMP.L D6,D0
BGT forlabel9
MOVEQ #0,D0 ; ENDPROC
RTS
proglabview: ; PROC view( x, y)
MOVE.L mainvarintuitionbase,A6 ; viewadr := ViewAddress()
JSR -294(A6)
MOVE.L D0,viewvarviewadr
MOVE.L viewvarviewadr(pc),D0 ; MINT viewadr+14, x
ADD.L #14,D0
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.W viewvarx(pc),D0
MOVE.W D0,(A1)
MOVE.L viewvarviewadr(pc),D0 ; MINT viewadr+12, y
ADD.L #12,D0
MOVE.L D0,A1
MOVEQ #0,D0
MOVE.W viewvary(pc),D0
MOVE.W D0,(A1)
MOVE.L mainvarintuitionbase,A6 ; VOID RemakeDisplay()
JSR -384(A6)
MOVEQ #0,D0 ; ENDPROC
RTS
proglabsetcolours: ; PROC setcolours( rastport)
MOVE.L setcoloursvarrastport(pc),D0 ; viewadr := rastport+44
ADD.L #44,D0
MOVE.L D0,setcoloursvarviewadr
MOVE.L setcoloursvarviewadr(pc),D0 ; VOID SetRGB4(viewadr,0,0,0,0)
MOVE.L D0,A0
MOVEQ #0,D0
MOVEQ #0,D1
MOVEQ #0,D2
MOVEQ #0,D3
MOVE.L mainvargraphicsbase,A6
JSR -288(A6)
MOVE.L setcoloursvarviewadr(pc),D0 ; VOID SetRGB4(viewadr,1,5,5,15)
MOVE.L D0,A0
MOVEQ #1,D0
MOVEQ #5,D1
MOVEQ #5,D2
MOVEQ #15,D3
MOVE.L mainvargraphicsbase,A6
JSR -288(A6)
MOVE.L setcoloursvarviewadr(pc),D0 ; VOID SetRGB4(viewadr,2,15,5,5)
MOVE.L D0,A0
MOVEQ #2,D0
MOVEQ #15,D1
MOVEQ #5,D2
MOVEQ #5,D3
MOVE.L mainvargraphicsbase,A6
JSR -288(A6)
MOVE.L setcoloursvarviewadr(pc),D0 ; VOID SetRGB4(viewadr,3,15,15,5)
MOVE.L D0,A0
MOVEQ #3,D0
MOVEQ #15,D1
MOVEQ #15,D2
MOVEQ #5,D3
MOVE.L mainvargraphicsbase,A6
JSR -288(A6)
MOVEQ #0,D0 ; ENDPROC
RTS
proglabscreen: ; PROC screen( width, height, depth, mode, title)
LEA proglabns,A0 ; return := OpenScreen({ns})
MOVE.L A0,D0
MOVE.L D0,A0
MOVE.L mainvarintuitionbase,A6
JSR -198(A6)
MOVE.L D0,D7
MOVE.L D7,D0 ; ENDPROC return
RTS
mainvarscreenx: DC.W 400 ; screenx=400:INT,screeny=320:INT,maxframe=49:INT,maxline=26:INT
mainvarscreeny: DC.W 320
mainvarmaxframe: DC.W 49
mainvarmaxline: DC.W 26
mainvarcoordinates: DC.L 0 ; coordinates=10400:ARRAY,screenadr1:LONG,screenadr2:LONG
mainvarscreenadr1: DC.L 0
mainvarscreenadr2: DC.L 0
mainvarrast1: DC.L 0 ; rast1:LONG,rast2:LONG,out:LONG
mainvarrast2: DC.L 0
mainvarout: DC.L 0
mainvarframe: DC.W 0 ; frame:INT,line:REGINT,actual=0:LONG,rast:LONG,screen:LONG
mainvaractual: DC.L 0
mainvarrast: DC.L 0
mainvarscreen: DC.L 0
mainvarsuxxes: DC.L 0
viewvarx: DC.W 0 ; x:INT,y:INT,viewadr:LONG
viewvary: DC.W 0
viewvarviewadr: DC.L 0
setcoloursvarrastport: DC.L 0 ; rastport:LONG,viewadr:LONG
setcoloursvarviewadr: DC.L 0
directtextlab0:
DC.B " ",0
EVEN
directtextlab1:
DC.B " ",0
EVEN
mainvarstdout: DC.L 0 ; WRITE 'Could not open screens!\n'
directtextlab2:
DC.B "Could not open screens!",10,13,0
EVEN
proglabvectordata: ; STRUCT vectordata
INCBIN "dex:vector/TDEX.BIN" ; INCLUDE dex:vector/TDEX.BIN
EVEN
proglabvectordataend: ; ENDSTRUCT
proglabns: ; STRUCT ns
DC.W 0,0,320,256,2,515,0,1 ; INT 0,0,320,256,2,$203,0,1
DC.L 0,0,0,0 ; LONG 0,0,0,0
proglabnsend: ; ENDSTRUCT
dosname: DC.B "dos.library",0
EVEN
mainvardosbase: DC.L 0
graphicsname: DC.B "graphics.library",0
EVEN
mainvargraphicsbase: DC.L 0
intuitionname: DC.B "intuition.library",0
EVEN
mainvarintuitionbase: DC.L 0
SECTION DexBSSHunk,BSS
arraylabcoordinates:
DS.B 10400
EVEN
END