; $$TABS=8 ; master include file for AA demo ; opt p=68020 include 'profile.i' basereg blink addsym PROFILE set 0 SCREEN_WIDTH equ 320 ; width of raster for our screen SCREEN_HEIGHT equ 200 ; height for our screen. SCREEN_DEPTH equ 8 ; depth (number of bitplanes) for our screen CANVAS_WIDTH equ 320 ; width of canvas to scroll over CANVAS_HEIGHT equ 200 ; height of canvas to scroll over. DO_CEILING set 0 MOTION_BLUR equ 0 DOBLUR equ 0 ifne DOBLUR HSCALE set 2 else HSCALE set 1 endc DUNGEON_WINDOW_WIDTH equ 192/HSCALE DUNGEON_WINDOW_HEIGHT equ 90 DUNGEON_WINDOW_X equ 0 DUNGEON_WINDOW_Y equ 0 DUNGEON_WINDOW_RIGHT equ DUNGEON_WINDOW_X+(DUNGEON_WINDOW_WIDTH*HSCALE)-1 DO_DIAGNOSTICS set 1 ; diagnostic messages? DUNGEON_GRID_SIZE equ 16 ; 16x16 DUNGEON_GRID_SHIFT equ 4 ; lg(dungeon_grid_size) ; macros for opening and closing libraries, with error checks geta6 macro ; restore variable base pointer xref _LinkerDB lea _LinkerDB,a6 endm openlib macro lname,lvar ; \1 \2 ; open a library and jump to quiet_error if it can't be found. lea \1,a1 ;; library name moveq #39,d0 ;; request version 39 move.l a6,a5 ;; save local var pointer move.l _SysBase(a5),a6 ;; get from local copy, not location 4! jsr _LVOOpenLibrary(a6) ;; open the library move.l a5,a6 ;; restore variable base move.l d0,\2(a5) ;; save it and test for zero beq quiet_error ;; not found? endm closelib macro lbase ; \1 ; close a library and set its base ptr to 0. ; trashes a0/a1/d0/d1 move.l \1(a6),d0 ;; fetch library pointer and test for 0 beq.s already_closed\@ move.l d0,a1 move.l _SysBase(a6),a6 ;; need execbase for closelib jsr _LVOCloseLibrary(a6) ;; close it geta6 ;; get back varbase clr.l \1(a6) ;; clear ptr for safety already_closed\@: endm CWAIT macro ucl,vpos,hpos ; \1 \2 \3 ; trashes d0-d1/a0-a1 xref _LVOCWait,_LVOCBump move.l \1,a1 move.l a1,-(a7) move.l \2,d0 move.l \3,d1 jsr _LVOCWait(a6) move.l (a7)+,a1 jsr _LVOCBump(a6) endm CMOVE macro ucl,reg,value ; \1 \2 \3 ; trashes d0-d1/a0-a1 xref _LVOCMove,_LVOCBump move.l \1,a1 move.l a1,-(a7) move.l \2,d0 move.l \3,d1 jsr _LVOCMove(a6) move.l (a7)+,a1 jsr _LVOCBump(a6) endm CEND macro ucl ; \1 CWAIT \1,#10000,#255 endm INITLOCALS macro TEMP_SIZE set 0 endm WORDVAR macro vname TEMP_SIZE set TEMP_SIZE+(TEMP_SIZE&1) ; even up \1_w set TEMP_SIZE TEMP_SIZE set TEMP_SIZE+2 endm LONGVAR macro vname TEMP_SIZE set TEMP_SIZE+((4-(TEMP_SIZE&3))&3) ; lword align \1_l set TEMP_SIZE TEMP_SIZE set TEMP_SIZE+4 endm BVAR macro vname \1_b set TEMP_SIZE TEMP_SIZE set TEMP_SIZE+1 endm ARRAYVAR macro vname,size TEMP_SIZE set TEMP_SIZE+((4-(TEMP_SIZE&3))&3) ; lword align \1 set TEMP_SIZE TEMP_SIZE set TEMP_SIZE+\2 endm ALLOCLOCALS macro ; align temp_size and sub from sp TEMP_SIZE set TEMP_SIZE+((4-(TEMP_SIZE&3))&3) ; lword align lea -TEMP_SIZE(a7),a7 endm dbug macro r xref _kprintf movem.l d0/d1/a0/a1,-(a7) move.l \1,-(a7) pea a\@(pc) jsr _kprintf lea 8(a7),a7 bra.s b\@ a\@: dc.b '%lx ',0,0 b\@: movem.l (a7)+,d0/d1/a0/a1 endm dbugw macro r xref _kprintf movem.l d0/d1/a0/a1,-(a7) move.w \1,-(a7) pea a\@(pc) jsr _kprintf lea 6(a7),a7 bra.s b\@ a\@: dc.b '%x ',0 b\@: movem.l (a7)+,d0/d1/a0/a1 endm print macro string xref KPutStr movem.l a0/a1/d0/d1,-(a7) lea mystring\@(pc),a0 jsr KPutStr movem.l (a7)+,a0/a1/d0/d1 bra.s skip\@ mystring\@: dc.b \1,0 cnop 0,2 skip\@: endm dstring macro fmtstring, x,y,arg0,arg1,arg2,arg3,arg4 ; \1 \2\3 \4 \5 \6 \7 \8 xref PlotString movem.l d0/d1/d2/d3/a0/a1/a5,-(a7) move.l a7,a5 ifnc "\8","" move.l \8,-(a7) endc ifnc "\7","" move.l \7,-(a7) endc ifnc "\6","" move.l \6,-(a7) endc ifnc "\5","" move.l \5,-(a7) endc ifnc "\4","" move.l \4,-(a7) endc move.l #\2,d2 move.l #\3,d3 lea tempstring\@(pc),a0 pea skipstr\@(pc) bra PlotString tempstring\@: dc.b \1,0 cnop 0,2 skipstr\@: move.l a5,a7 movem.l (a7)+,d0/d1/d2/d3/a0/a1/a5 endm replicate macro reg,trashreg ; \1 \2 move.b \1,\2 lsl.l #8,\1 move.b \2,\1 move.w \1,\2 swap \1 move.w \2,\1 endm plotpixel macro x, y, c, temp ; \1 \2 \3 \4 xref yadrtable move.l (yadrtable.w,a6,\2.w*4),\4 move.b \3,(\4,\1.w) endm _LVOGetJoyPortEvent equ -$30