home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d154
/
assemblydemos
/
grafos.asm
< prev
next >
Wrap
Assembly Source File
|
1987-06-15
|
20KB
|
668 lines
;GRAFOS By: Foster Hall
include "startup.asm"
;Program Equates. These are defined here rather than in an Include File. This
;makes assembly faster.
;MENU EQUATES*
MENUPICK EQU $00000100
ITEMTEXT EQU 2
ITEMENABLED EQU $10
HIGHCOMP EQU $40
HIGHBOX EQU $80
COMMSEQ EQU $4
MENUNULL EQU $0000FFFF
mi_SIZEOF EQU $22
Menu1Left EQU 1
Menu1Width EQU 9*8
ItemFlags EQU ITEMTEXT
CItemFlags EQU ITEMTEXT!ITEMENABLED!HIGHCOMP
MenuOn EQU $0001
JAM1 EQU 0
;WINDOW EQUATES*
wd_UserPort EQU $56
im_class EQU 20
im_Code EQU $18
im_address EQU $1C
im_IDCMPWindow EQU $2c
wd_RPort EQU 50
wd_MouseY EQU $c
wd_MouseX EQU $e
wd_MenuStrip EQU $1c
wd_IDCMP EQU $52
ACTIVATE EQU $1000
CLOSEWINDOW EQU $0200
MOUSEBUTTONS EQU $8
WINDOWCLOSE EQU $8
WINDOWDEPTH EQU $4
WINDOWSIZING EQU 1
BORDERLESS EQU $0800
WBENCHSCREEN EQU $0001
SYSBASE EQU $4 this is the same as _AbsExecBase
MODE_OLDFILE equ $3ed
;library offsets. This replaces the necessity to get the offsets from
;AMIGA-LIB, thus the program assembles faster. It still has to be
;linked though.
_AbsExecBase equ $4
GetPrefs EQU $ffffff7c
SetPrefs EQU $fffffebc
FindTask equ $fffffeda
DrawEllipse EQU $ffffff4c
OpenLibrary EQU $fffffdd8
OpenWindow EQU $ffffff34
Open equ $ffffffe2
CloseWindow EQU $ffffffb8
CloseLibrary EQU $fffffe62
Move EQU $ffffff10
Draw EQU $ffffff0a
SetAPen EQU $fffffeaa
SetDrMd EQU $fffffe9e
ScrollRaster EQU $fffffe74
Text EQU $ffffffc4
SetMenuStrip EQU $fffffef8
ClearMenuStrip EQU $ffffffca
GetMsg EQU $fffffe8c
WaitPort equ $fffffe80
ReplyMsg EQU $fffffe86
ItemAddress EQU $ffffff70
;this macro adds the "(A6)" to the end of all library calls
SYS: MACRO
JSR \1(A6)
ENDM
;THE FOLLOWING MACROS ARE FOR THE MENU STRIP
IntuiText MACRO
DC.B \1 FrontPen
DC.B \2 BackPen
DC.B \3 DrawMode
DC.B 0 KlugeFill00
DC.W \4 Leftedge
DC.W \5 TopEdge
DC.L \6 FontStuff
DC.L \7 YourText
DC.L \8 NextText
ENDM
Menu MACRO
DC.L \1 mu_NextMenu
DC.W \2 mu_LeftEdge
DC.W \3 mu_TopEdge
DC.W \4 mu_Width
DC.W \5 mu_Height
DC.W \6 mu_Flags
DC.L \7 mu_MenuName
DC.L \8 mu_FirstItem
DC.W 0,0,0,0
ENDM
MenuItem MACRO
DC.L \1 mi_NextItem
DC.W \2 mi_LeftEdge
DC.W \3 mi_TopEdge
DC.W \4 mi_Width
DC.W \5 mi_Height
DC.W \6 mi_Flags
DC.L \7 mi_MutualExclude
DC.L \8 mi_ItemFill
DC.L \9 mi_SelectFill
ENDM
MenuItem2 MACRO
DC.B \1 mi_Command
DC.B 0 Kluge
DC.L \2 mi_SubItem
DC.W \3 mi_NextSelect
ENDM
;LET'S GO THEN!
MAIN MOVE.L SP,SAVESP SAVE THE STACK POINTER FIRST THING
OPENINTUITION
MOVE.L SYSBASE,A6 GET EXEC POINTER
MOVE.L #INTUITIONNAME,A1 GET NAME ADDRESS
MOVE.L #0,D0 LIBRARY VERSION (0=DON'T CARE)
SYS OpenLibrary OPEN LIBRARY
MOVE.L D0,INTUITIONBASE STORE LIBRARY POINTER
BEQ ENDWINDOW
BRA.S DONEINT
INTUITIONNAME DC.B 'intuition.library',0
INTUITIONBASE DS.L 1
DONEINT
OPENGRAPHICS
MOVE.L SYSBASE,A6 GET EXEC BASE
MOVE.L #GFXNAME,A1 GET ADDRESS BASE FOR NAME
MOVE.L #0,D0 VERSION
SYS OpenLibrary OPEN LIBRARY
MOVE.L D0,GFXBASE STORE POINTER
BEQ ENDWINDOW
BRA.S DONEGFX
GFXNAME DC.B 'graphics.library',0
GFXBASE DS.L 1
DONEGFX
OPENWINDOW
MOVE.L INTUITIONBASE,A6
MOVE.L #MYWINDOW,A0
SYS OpenWindow
MOVE.L D0,WINDOWPOINTER
BEQ ENDWINDOW
MOVE.L D0,A0
MOVE.L wd_RPort(a0),RASTERPORT GET THE RASTERPORT ADDRESS
MOVE.L wd_UserPort(a0),USERPORT
SETSTRIP
MOVE.L WINDOWPOINTER,A0
MOVE.L #MENUSTRIP,A1
MOVE.L INTUITIONBASE,A6
SYS SetMenuStrip
BRA.S TEXTPRINT
;THIS IS THE TEXT PRINT ROUTINE FOR THE OPENING PAGE*
PRINT BSR.S SETDRMD
PRINT2 BSR.S SETAPEN
PRINT3 BSR.S MOVE
BSR.S TEXT
RTS
SETDRMD
BSR.S GA6RPA1
MOVE DRAWMODE,d0
SYS SetDrMd
RTS
SETAPEN
BSR.S GA6RPA1
MOVE PENCOLOR,D0
SYS SetAPen
RTS
TEXT
BSR.S GA6RPA1
MOVE.L TEXTPOINTER,A0
MOVE NUMCHARS,D0
SYS Text
RTS
MOVE
BSR.S GA6RPA1
MOVE XPOSITION,D0
MOVE YPOSITION,D1
SYS Move
RTS
DRAW
BSR.S GA6RPA1
SYS Draw
RTS
GA6RPA1
MOVE.L GFXBASE,A6
MOVE.L RASTERPORT,A1
RTS
;THIS ROUTINE POSITIONS THE LINE OF TEXT ON THE SCREEN AND THEN CALLS*
;THE ABOVE PRINT ROUTINE. *
TEXTPRINT
MOVE #0,DRAWMODE
MOVE #2,PENCOLOR
MOVE #276,XPOSITION
MOVE #20,YPOSITION
MOVE.L #DATA1,TEXTPOINTER
MOVE #ENDDATA1-DATA1,NUMCHARS
BSR PRINT
MOVE #266,XPOSITION
MOVE #30,YPOSITION
MOVE.L #DATA2,TEXTPOINTER
MOVE #ENDDATA2-DATA2,NUMCHARS
BSR PRINT3
DRAWN
ADDI #1,YPOSITION
ADDI #1,PENCOLOR
CMPI #42,YPOSITION
BEQ.S MOVEIT
BSR PRINT2
BRA.S DRAWN
MOVEIT
MOVE #2,PENCOLOR
MOVE #260,XPOSITION
MOVE #50,YPOSITION
MOVE.L #DATA3,TEXTPOINTER
MOVE #ENDDATA3-DATA3,NUMCHARS
BSR PRINT2
MOVE #2,PENCOLOR
MOVE #260,XPOSITION
MOVE #60,YPOSITION
MOVE.L #DATA3A,TEXTPOINTER
MOVE #ENDDATA3A-DATA3A,NUMCHARS
BSR PRINT2
MOVE #2,PENCOLOR
MOVE #236,XPOSITION
MOVE #70,YPOSITION
MOVE.L #DATA3B,TEXTPOINTER
MOVE #ENDDATA3B-DATA3B,NUMCHARS
BSR PRINT2
MOVE #184,XPOSITION
MOVE #80,YPOSITION
MOVE.L #DATA4,TEXTPOINTER
MOVE #ENDDATA4-DATA4,NUMCHARS
BSR PRINT3
MOVE #112,XPOSITION
MOVE #90,YPOSITION
MOVE.L #DATA5,TEXTPOINTER
MOVE #ENDDATA5-DATA5,NUMCHARS
BSR PRINT3
MOVE #124,XPOSITION
MOVE #100,YPOSITION
MOVE.L #DATA6,TEXTPOINTER
MOVE #ENDDATA6-DATA6,NUMCHARS
BSR PRINT3
MOVE #120,XPOSITION
MOVE #110,YPOSITION
MOVE.L #DATA7,TEXTPOINTER
MOVE #ENDDATA7-DATA7,NUMCHARS
BSR PRINT3
MOVE #124,XPOSITION
MOVE #120,YPOSITION
MOVE.L #DATA8,TEXTPOINTER
MOVE #ENDDATA8-DATA8,NUMCHARS
BSR PRINT3
MOVE #161,BASEX
MOVE #160,BASEY
MOVE #160,BASEY1
MOVE #0,COUNT
;THIS ROUTINE DRAWS THE CIRCLE GRAPHICS ON THE TITLE SCREEN*
BRA.S YPOSIT
BLURB
BSR GA6RPA1
MOVE BASEX,D0
MOVE #13,D2
MOVE #08,D3
JSR DrawEllipse(a6)
ADDI #2,BASEX
CMPI #479,BASEX
BGT.S TITLESCREEN
RTS
YPOSIT
CMPI #0,COUNT
BNE.S UPIT
SUBI #1,BASEY
MOVE BASEY,D1
BSR.S BLURB
ADDI #1,BASEY1
MOVE BASEY1,D1
BSR.S BLURB
CMPI #150,BASEY
BGT.S YPOSIT
MOVE #1,COUNT
BRA.S YPOSIT
UPIT
ADDI #1,BASEY
MOVE BASEY,D1
BSR.S BLURB
SUBI #1,BASEY1
MOVE BASEY1,D1
BSR BLURB
CMPI #180,BASEY
BLT.S YPOSIT
MOVE #0,COUNT
BRA YPOSIT
;THIS CHECKS THE POSITION OF THE MOUSE FOR EACH CORNER TO DETERMINE THE*
;CORRECT ACTION TO PERFORM *
TITLESCREEN
BSR.S MOUSER
BRA.S TITLESCREEN
MOUSER
BSR.S GRAFOSCOLOR
MOUSER2
MOVE.L SYSBASE,A6
MOVE.L USERPORT,A0
SYS GetMsg
TST.L D0
BEQ RETURN
MOVE.L D0,A0
MOVE.L im_class(a0),IMCLASS
CMPI.L #MENUPICK,IMCLASS
BNE RETURN
MOVE.W im_Code(a0),IMCODE
MENUPICKED
MOVE.W IMCODE,d0
MOVEA.L #MENUSTRIP,a0
MOVE.L INTUITIONBASE,A6
SYS ItemAddress
TST.L D0
BEQ RETURN
MOVEA.L D0,A0
MOVE.L #34,D0
MOVEA.L 0(A0,D0),A1
JMP (A1)
RESTART
BSR.S SCROLL
JMP TEXTPRINT
CLEAR
BSR.S SCROLL
CLEARLOOP
BSR.S MOUSER2
BRA.S CLEARLOOP
GRAFOSCOLOR
ADDI #1,PENCOLOR
MOVE #294,XPOSITION
MOVE #163,YPOSITION
MOVE.L #DATA2,TEXTPOINTER
MOVE #ENDDATA2-DATA2-8,NUMCHARS
BSR PRINT2
RTS
;THIS IS THE SCREEN SCROLL ROUTINE THAT ACTUALLY MOVES EACH SCREEN*
SCROLL
CLR.l COUNT
SCROLLUP
BSR GA6RPA1
MOVE #0,D0
MOVE #5,D1
MOVE #0,D2
MOVE #0,D3
MOVE #640,D4
MOVE #200,D5
SYS ScrollRaster
ADDI #5,COUNT
CMPI #200,COUNT
BLT.S SCROLLUP
CLR.l COUNT
RTS
;THE FOLLOWING ROUTINES DOES THE ACTUAL DRAW ROUTINE FOR THE SPIRALS*
DRAWLINE
BSR.S SCROLL
MOVE #320,XPOSITION
MOVE #100,YPOSITION
BSR MOVE
SPIRAL
MOVEM BASEX,XPOSITION
MOVEM BASEY,YPOSITION
BSR MOVE
CIRCLE
MOVE DRAWX,D0
MOVE DRAWY,D1
BSR DRAW
CMPI #0,COUNT
BEQ.S STAGE1
CMPI #1,COUNT
BEQ.S STAGE2
CMPI #2,COUNT
BEQ.S STAGE3
CMPI #3,COUNT
BEQ.S STAGE4
BRA LOOP
STAGE1
ADDI #8,DRAWY
CMPI #200,DRAWY
BLT LOOP
ADDI #1,COUNT
MOVE #200,DRAWY
STAGE2
ADDI #16,DRAWX
CMPI #640,DRAWX
BLT LOOP
ADDI #1,COUNT
MOVE #640,DRAWX
STAGE3
SUBI #8,DRAWY
CMPI #0,DRAWY
BGT.S LOOP
ADDI #1,COUNT
MOVE #0,DRAWY
STAGE4
SUBI #16,DRAWX
CMPI #0,DRAWX
BGT.S LOOP
CLR DRAWY
CLR DRAWX
CLR COUNT
MOUSEPOINT
MOVE.L WINDOWPOINTER,A0
MOVEM wd_MouseX(A0),BASEX
MOVEM wd_MouseY(A0),BASEY
TEST
MOVE.L WINDOWPOINTER,A0
MOVE wd_MouseX(A0),D0
CMP BASEX,D0
BNE.S COLOR
MOVE wd_MouseY(A0),D0
CMP BASEY,D0
BNE.S COLOR
BSR MOUSER2
BRA.S TEST
COLOR
ADDI #1,PENCOLOR
BSR SETAPEN
LOOP BRA SPIRAL
;THIS IS THE CIRCLE DRAW ROUTINE*
SMALLELLIPSE
MOVE.W #25,DRAWX
MOVE.W #17,DRAWY
BRA.S ELLIPSE
LARGEELLIPSE
MOVE.W #50,DRAWX
MOVE.W #40,DRAWY
ELLIPSE
BSR SCROLL
MOVE #2,PENCOLOR
BSR.S DOPEN
MOVE #320,D0
MOVE #100,D1
BSR MOVE
DRAW2
BSR.S DOCIRCLES
BSR MOUSER2
BRA.S DRAW2
DOPEN
BSR SETAPEN
RTS
DOCIRCLES
MOVE.L WINDOWPOINTER,A0
BSR GA6RPA1
MOVE wd_MouseX(A0),d0
MOVE wd_MouseY(A0),d1
MOVE DRAWX,D2
MOVE DRAWY,D3
JSR DrawEllipse(a6)
RETURN RTS
SIZEIT
SUBI #2,DRAWX
SUBI #2,DRAWY
BEQ.S RESETXY
RTS
RESETXY
MOVE #75,DRAWX
MOVE #50,DRAWY
RTS
;AND NOW WE CLOSE EVERYTHING OFF WHEN WE'RE DONE*
ENDWINDOW
MOVE.L WINDOWPOINTER,A0
MOVE.L INTUITIONBASE,A6
SYS ClearMenuStrip
MOVE.L WINDOWPOINTER,A0
MOVE.L INTUITIONBASE,A6
SYS CloseWindow
ENDINTUITION
MOVE.L INTUITIONBASE,A1
MOVE.L SYSBASE,A6
SYS CloseLibrary
EDNGFX
MOVE.L GFXBASE,A1
SYS CloseLibrary
MOVE.L SAVESP,SP
RTS
;THIS SECTION HAS ALL THE DATA AND TEXT*
SECTION constants,DATA
MYIDCMP EQU MENUPICK
MYFLAGS EQU ACTIVATE!BORDERLESS
DATA1 DC.B 'Welcome to:'
ENDDATA1
DATA2 DC.B 'GRAFOS (V .01)'
ENDDATA2
DATA3 DC.B 'By: Foster Hall'
ENDDATA3
DATA3A DC.B '12679-99th Ave.'
ENDDATA3A
DATA3B DC.B 'Surrey, B.C. V3V 2P6'
ENDDATA3B
DATA4 DC.B 'A simple assembly language program'
ENDDATA4
DATA5 DC.B 'utilizing a few of the many AMIGA graphics routines.'
ENDDATA5
DATA6 DC.B ' This version is still in the experimental stage,'
ENDDATA6
DATA7 DC.B 'used primarily as a learning tool, with the hopes'
ENDDATA7
DATA8 DC.B 'that it will someday become a productive utility.'
ENDDATA8
CNOP 0,4
MYWINDOW
DC.W 0 LEFT EDGE
DC.W 0 TOP EDGE
DC.W 640 WIDTH
DC.W 200 HEIGHT
DC.B 2 DETAIL PEN
DC.B 0 BLOCK PEN
DC.L MYIDCMP IDCMP FLAGS
DC.L MYFLAGS WINDOW FLAGS
DC.L 0 FIRST GADGET
DC.L 0 CHECKMARK
DC.L 0 WINDOW TITLE
DC.L 0 SCREEN
DC.L 0 CUSTOM BITMAP
DC.W 300 MIN. WIDTH
DC.W 10 MIN. HEIGHT
DC.W -1 MAX. WIDTH
DC.W -1 MAX HEIGHT
DC.W WBENCHSCREEN
;this is the data for the menu strip, calling the macros defined at the
;top of the file.
MENUSTRIP
CNOP 0,4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MENU#1
M1 Menu M2,Menu1Left,0,Menu1Width,8,MenuOn,M1T0,M1_1
M2 Menu 0,2+Menu1Width,0,Menu1Width,8,MenuOn,M2T0,M2_1
M1_1 MenuItem M1_2,0,9*0,8*8,8,CItemFlags,0,Menu1Text1,0
MenuItem2 0,0,0
DC.L RESTART
M1_2 MenuItem M1_3,0,9*1,8*8,8,CItemFlags,0,Menu1Text2,0
MenuItem2 0,0,0
DC.L CLEAR
M1_3 MenuItem 0,0,9*2,8*8,8,CItemFlags,0,Menu1Text3,0
MenuItem2 0,0,0
DC.L ENDWINDOW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MENU#2
;;;;;
M2_1 MenuItem M2_2,0,9*0,8*8,8,CItemFlags,0,Menu2Text1,0
MenuItem2 0,M2_1A,0
;;;;;
M2_1A MenuItem M2_1B,8*8,9*0,8*8,8,CItemFlags,0,Menu2Text1A,0
MenuItem2 0,0,0
DC.L SMALLELLIPSE
;;;;;
M2_1B MenuItem 0,8*8,9*1,8*8,8,CItemFlags,0,Menu2Text1B,0
MenuItem2 0,0,0
DC.L LARGEELLIPSE
;;;;;
M2_2 MenuItem 0,0,9*1,8*8,8,CItemFlags,0,Menu2Text2,0
MenuItem2 0,0,0
DC.L DRAWLINE
Menu1Text1 IntuiText 2,0,JAM1,0,0,TEXTATTR,M1T1,0
Menu1Text2 Intuitext 2,0,JAM1,0,0,TEXTATTR,M1T2,0
Menu1Text3 Intuitext 2,0,JAM1,0,0,TEXTATTR,M1T3,0
Menu2Text1 Intuitext 2,0,JAM1,0,0,TEXTATTR1,M2T1,0
Menu2Text1A Intuitext 2,0,JAM1,0,0,0,M2T1A,0
Menu2Text1B Intuitext 2,0,JAM1,0,0,0,M2T1B,0
Menu2Text2 IntuiText 2,0,JAM1,0,0,TEXTATTR1,M2T2,0
;;;;;
M1T0 DC.B 'PROJECT',0
M1T1 DC.B 'Restart',0
M1T2 DC.B 'Clear',0
M1T3 DC.B 'Quit',0
M2T0 DC.B 'EFFECTS',0
M2T1 DC.B 'Circles',0
M2T1A DC.B 'Small',0
M2T1B DC.B 'Large',0
M2T2 DC.B 'Spirals',0
TEXTATTR DC.L FONTNAME
DC.W 8
DC.B 7
DC.B 0
FONTNAME DC.B 'topaz.font',0
TEXTATTR1 DC.L FONTNAME
DC.W 8
DC.B 2
DC.B 0
;THIS SECTION SETS ASIDE THE STORAGE WE NEED FOR VARIOUS ROUTINES*
SECTION variables,BSS
SAVESP DS.L 1
WINDOWPOINTER DS.L 1
RASTERPORT DS.L 1
PENCOLOR DS.W 1
DRAWX DS.W 1
DRAWY DS.W 1
BASEX DS.W 1
BASEY DS.W 1
DRAWMODE DS.W 1
COUNT DS.L 1
TEXTPOINTER DS.L 1
IMCODE DS.L 1
IMCLASS DS.L 1
NUMCHARS DS.L 1
XPOSITION DS.L 1
YPOSITION DS.L 1
BASEY1 DS.L 1
USERPORT DS.L 1
_SysBase ds.l 1
END