main_debugoff main_sysinfooff main_reqinfooff main_endinfooff ;main_disabledos main_playeroff main_meteroff mnu_GETBLITINT: move.l gfxbase,a6 jsr _LVOOwnBlitter(a6) move.l 4.w,a6 lea BLITInt,a1 moveq #6,d0 jsr _LVOSetIntVector(a6) move.l d0,SYSTEMBLITINT rts mnu_DROPBLITINT: WBSLOW WBSLOW move.l 4.w,a6 move.l SYSTEMBLITINT,a1 moveq #6,d0 jsr _LVOSetIntVector(a6) move.l gfxbase,a6 jsr _LVODisownBlitter(a6) rts mnu_nowait ; Skip the "waiting for opp.." macro_sync: MACRO ; Kills: d7 -- Macro_Sync IFND main_meteroff movem.l d0-a0,-(a7) move.l main_dataptr,a0 move.l 44(a0),a0 jsr (a0) move.l main_dataptr,a0 move.l d0,48(a0) ENDC .waitsync\@: move.l $dff004,d7 and.l #$1ff00,d7 cmp.l #305*$100,d7 bne.s .waitsync\@ IFND main_meteroff move.l main_dataptr,a0 move.l 40(a0),a0 jsr (a0) movem.l (a7)+,d0-a0 ENDC ENDM ; include "demo:System/Main_V3.82.S" mnu_start: bsr.w mnu_copycredz bsr.w mnu_setscreen move.l a7,mnu_mainstack bsr.w mnu_viewcredz bsr.w mnu_cls IFND mnu_nocode bsr.w mnu_protection ENDC mnu_loop: lea mnu_mainmenu,a0 bsr.w mnu_domenu lea mnu_quitmenu,a0 bsr.w mnu_domenu bra.w mnu_loop mnu_exit: move.l mnu_mainstack,a7 bsr.w mnu_clearscreen rts mnu_protection: .retry: moveq.l #0,d0 bsr.w mnu_getrnd move.l d0,d2 bsr.w mnu_getrnd move.l d0,d1 bsr.w mnu_getrnd lsr.w #4,d2 lsr.w #2,d1 divu #7,d0 swap.w d0 ; d0=Page number divu #50,d1 swap.w d1 addq.w #1,d1 ; d1=Row number divu #17,d2 swap.w d2 addq.w #1,d2 ; d2=Column number movem.l d0-d2,-(a7) add.w #65,d0 move.b d0,mnu_tableptr add.w #64,d2 move.b d2,mnu_columnptr move.w d1,d2 ext.l d1 divu #10,d1 add.w #48,d1 move.b d1,mnu_rowptr swap.w d1 add.w #48,d1 move.b d1,mnu_rowptr+1 lea mnu_protecttext,a0 moveq.l #4,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_row clr.w mnu_spread move.w #1,mnu_items move.w #180,mnu_cury moveq.l #0,d7 .print: move.l d7,-(a7) lea mnu_numberptr,a0 moveq.l #24,d0 move.l #180,d1 bsr.w mnu_printxy move.l (a7)+,d7 .inploop: move.l d7,-(a7) move.w #24,mnu_curx add.w d7,mnu_curx add.w d7,mnu_curx bsr.w mnu_docursor jsr key_readkey move.l (a7)+,d7 tst.b d0 beq.s .inploop lea mnu_numberptr,a0 add.l d7,a0 tst.w d7 beq.s .skipback cmp.b #65,d0 bne.s .skipback ; back space move.b #32,(a0) subq.w #1,d7 bra.s .print .skipback: cmp.w #3,d7 bne.s .noenter cmp.w #68,d0 beq.s .enter cmp.w #64,d0 bne.s .noenter .enter: bra.s .exit .noenter: cmp.w #3,d7 beq.s .error cmp.b #1,d0 blo.s .error cmp.b #10,d0 bhi.s .error bne.s .oknum moveq #0,d0 .oknum: add.b #'0',d0 move.b d0,(a0) addq.w #1,d7 bra.w .print .error: move.l #mnu_errcursanim,mnu_frameptr bra.w .inploop .exit: movem.l (a7)+,d0-d2 bsr.w mnu_decoder moveq.l #0,d1 moveq.l #0,d2 move.b mnu_numberptr,d1 sub.w #48,d1 mulu #10,d1 move.b mnu_numberptr+1,d2 sub.w #48,d2 add.w d2,d1 mulu #10,d1 move.b mnu_numberptr+2,d2 sub.w #48,d2 add.w d2,d1 cmp.w d1,d0 beq.s .ok move.l #mnu_errcursanim,mnu_frameptr move.b #32,mnu_numberptr move.b #32,mnu_numberptr+1 move.b #32,mnu_numberptr+2 subq.w #1,.tries beq.s .quit bra.w .retry .ok: rts .quit: bsr.w mnu_cls moveq.l #4,d0 moveq.l #110,d1 lea mnu_dontbelong,a0 bsr.w mnu_printxy clr.l counter move.l #mnu_errcursorlong,mnu_frameptr move.w #34,mnu_curx move.w #130,mnu_cury .w8loop: bsr.w mnu_docursor cmp.l #100,counter blo.s .w8loop jmp mnu_exit .tries: dc.w 3 mnu_decoder:;in: d0.l=Table ; d1.l=Row ; d2.l=Column MODIT MACRO divs #643,\1 swap \1 ENDM lea .variables(pc),a0 asl.w #4,d0 add.w d0,a0 move.w d1,d0 ;row muls d0,d0 ;row*row MODIT d0 move.w d2,d4 ;col muls d4,d4 ;col*col MODIT d4 move.w d0,d5 ;row*row muls d5,d5 ;row*row*row*row MODIT d5 move.w d4,d6 ;col*col muls d6,d6 ;col*col*col*col MODIT d6 muls d5,d6 ;row*row*row*row*col*col*col*col MODIT d6 muls (a0),d6 ;*var a MODIT d6 muls d1,d4 MODIT d4 muls d2,d4 muls 2(a0),d4 MODIT d4 add.w d4,d6 move.w d1,d0 muls d2,d0 MODIT d0 muls 4(a0),d0 MODIT d0 add.w d0,d6 muls 6(a0),d1 MODIT d1 muls 8(a0),d2 MODIT d2 add.w d1,d2 add.w d2,d6 add.w 10(a0),d6 ext.l d6 MODIT d6 neg.w d6 add.w #999,d6 move.w d6,d0 rts rts ; a b c d e f .variables: dc.w 54,97,2,94,66,23,0,0 ; Table A dc.w 61,78,247,622,59,324,0,0 ; Table B dc.w 34,76,99,168,43,66,0,0 ; Table C dc.w 63,67,422,132,66,87,0,0 ; Table D dc.w 43,49,47,84,51,9,0,0 ; Table E dc.w 34,97,20,61,74,33,0,0 ; Table F dc.w 74,54,61,62,96,147,0,0 ; Table G .dividers: ; dc.l 643*2000 dc.w 643 dc.l 999 mnu_getrnd: move.w $dff00a,d0 add.w $dff00c,d0 add.w $dff008,d0 add.w $dff012,d0 add.w $dff014,d0 add.w $dff016,d0 add.w $dff018,d0 add.w $dff01a,d0 add.w $dff002,d0 add.w $dff004,d0 add.w $dff006,d0 rts mnu_viewcredz: clr.l counter bsr.w mnu_copycredz .w8key: jsr key_readkey cmp.l #50*10,counter beq.s .exit tst.w d0 beq.s .w8key .exit: rts mnu_copycredz: lea mnu_frame,a0 lea mnu_morescreen+3*40*256+32*40,a1 move.w #10*192-1,d0 .loop: move.l (a0)+,(a1)+ move.l 40*192-4(a0),40*256-4(a1) move.l 2*40*192-4(a0),2*40*256-4(a1) dbra d0,.loop rts mnu_clearscreen:bsr.w mnu_fadeout clr.l main_vblint .loop1: tst.w mnu_bltbusy bne.s .loop1 ; bsr.w key_kbdexit clr.l main_bltint ; macro_sync move.w #$7de0,$dff096 rts mnu_setscreen: bsr.w mnu_init macro_sync move.w #$7de0,$dff096 move.w #$8200!%110000000,$dff096 move.l #mnu_copper,$dff080 move.w #0,$dff088 ; bsr.w key_kbdinit move.l #mnu_vblint,main_vblint bsr.w mnu_fadein rts mnu_vblint: bsr.w mnu_movescreen ;bsr.w mnu_dofire ; bsr.w key_kbdlevel3 bsr.w mnu_animcursor ;bsr.w mnu_plot rts mnu_init: bsr.w mnu_initrnd ; Uses palette buffer bsr.w mnu_createpalette tst.w .cp bne.w .skipfs lea mnu_screen,a0 lea mnu_screen+40*256,a1 lea mnu_screen+40*256*2,a2 lea mnu_screen+40*256*3,a3 move.w #40*256/4-1,d1 .fsloop: move.l (a1),d0 move.l d0,(a2)+ move.l d0,(a3)+ move.l (a0)+,(a1)+ dbra d1,.fsloop .skipfs: st.b .cp ;-------------------------------------------------------------- Clear screen -- lea mnu_morescreen,a0 move.l #40*256*3/16-1,d0 moveq.l #0,d1 .clrloop: REPT 4 move.l d1,(a0)+ ENDR dbra d0,.clrloop bsr.w mnu_cls ;--------------------------------------------------------------- Set bplptrs -- lea mnu_bplptrs+2,a0 move.l #mnu_screen,d0 moveq.l #0,d1 bsr.w .setbplptrs move.l #mnu_screen+40*256*2,d0 moveq.l #0,d1 bsr.w .setbplptrs move.l #mnu_morescreen,d0 moveq.l #5,d1 bsr.s .setbplptrs ;-------------------------------------------------------------- Init palette -- lea mnu_palette,a2 moveq.l #7,d0 ; #of banks-1 move.l #$01060000,d6 move.l #$01060200,d7 lea mnu_colptrs,a0 lea mnu_colptrs+33*4,a1 .bankloop: moveq.l #31,d1 ; d1=#of colour/bank move.l d6,(a0)+ move.l d7,(a1)+ move.w #$0180,d5 .colloop: ;move.l (a2)+,d2 clr.l d2 move.l d2,d3 and.l #$f0f0f0,d2 lsr.l #4,d2 ; x0x0x lsl.b #4,d2 ; x0xx0 lsl.w #4,d2 ; xxx00 lsr.l #8,d2 ; 00xxx and.l #$f0f0f,d3 lsl.b #4,d3 ; x0xx0 lsl.w #4,d3 ; xxx00 lsr.l #8,d3 ; 00xxx move.w d5,(a0)+ move.w d2,(a0)+ move.w d5,(a1)+ move.w d3,(a1)+ addq.w #2,d5 dbra d1,.colloop add.l #33*4,a0 add.l #33*4,a1 add.l #$2000,d6 add.l #$2000,d7 dbra d0,.bankloop move.l #-2,(a0) rts .setbplptrs: swap.w d0 move.w d0,(a0) swap.w d0 move.w d0,4(a0) addq.l #8,a0 add.l #40*256,d0 dbra d1,.setbplptrs rts .cp: dc.w 0 mnu_initrnd: lea mnu_palette+256,a1 move.w #255,d0 .parityloop: move.b d0,d1 and.w #$1,d1 move.b d0,d2 lsr.w #2,d2 and.w #$1,d2 eor.w d2,d1 move.b d0,d2 lsr.w #3,d2 and.w #$1,d2 eor.w d2,d1 move.b d0,d2 lsr.w #5,d2 and.w #$1,d2 eor.w d2,d1 move.b d1,-(a1) dbra d0,.parityloop move.l a1,a4 ; a4=Parity buffer move.l #'TBL!',d3 ; Random seed lea mnu_morescreen+6*40*256,a0 move.w #40*256+8192-1,d0 .loop: moveq.l #0,d1 ; d1=0 move.l d3,d2 ; d2=Random seed move.b d2,d1 and.b #$fe,d2 move.b (a4,d1.l),d1 or.b d1,d2 ror.w #1,d2 swap.w d2 move.b d2,d1 and.b #$fe,d2 move.b (a4,d1.l),d1 or.b d1,d2 ror.w #1,d2 move.l d2,d3 move.w d2,d1 lsr.w #8,d1 or.w d1,d2 move.l d2,d1 swap.w d1 or.w d1,d2 move.b d2,(a0)+ dbra d0,.loop rts mnu_movescreen: move.w mnu_screenpos,d0 and.w #$ff,d0 mulu #40,d0 add.l #mnu_screen,d0 lea mnu_bplptrs+2,a0 moveq.l #1,d1 .loop: swap.w d0 move.w d0,(a0) swap.w d0 move.w d0,4(a0) addq.l #8,a0 add.l #40*256*2,d0 dbra d1,.loop addq.w #1,mnu_screenpos rts mnu_createpalette: lea mnu_backpal,a0 lea mnu_firepal,a1 lea mnu_fontpal,a2 lea mnu_palette+256*4,a3 move.w #255,d0 .loop: move.w d0,d1 and.w #$e0,d1 beq.s .next lsr.w #5,d1 move.l (a2,d1.w*4),-(a3) bra.s .cont .next: move.w d0,d1 and.w #$1c,d1 beq.s .next1 lsr.w #2,d1 move.w d0,d2 and.w #$3,d2 moveq #0,d3 move.b 3(a1,d1.w*4),d3 moveq #0,d4 move.b 3(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax1 move.b #255,d3 .okmax1 move.b d3,-(a3) moveq #0,d3 move.b 2(a1,d1.w*4),d3 muls #3,d3 asr.w #2,d3 moveq #0,d4 move.b 2(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax2 move.b #255,d3 .okmax2 move.b d3,-(a3) moveq #0,d3 move.b 1(a1,d1.w*4),d3 moveq #0,d4 move.b 1(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax3 move.b #255,d3 .okmax3 move.w d3,-(a3) ; move.l (a1,d1.w*4),-(a3) bra.s .cont .next1: move.w d0,d1 and.w #$3,d1 move.l (a0,d1.w*4),-(a3) .cont: dbra d0,.loop rts mnu_fadespeed = 16 mnu_fadein: clr.w mnu_fadefactor moveq.l #256/mnu_fadespeed-1,d0 .loop: move.l d0,-(a7) .wsync: cmp.b #$80,$dff006 blt.s .wsync cmp.b #$90,$dff006 bgt.s .wsync bsr.w mnu_fade .wsync2: cmp.b #$a0,$dff006 blt.s .wsync2 add.w #mnu_fadespeed,mnu_fadefactor move.l (a7)+,d0 dbra d0,.loop move.w #255,mnu_fadefactor .wsync3: cmp.b #$80,$dff006 blt.s .wsync3 cmp.b #$90,$dff006 bgt.s .wsync3 bsr.w mnu_fade rts mnu_fadeout: move.w #255,mnu_fadefactor moveq.l #256/mnu_fadespeed-1,d0 .loop: move.l d0,-(a7) ; bsr.w mnu_docursor .wsync: cmp.b #$80,$dff006 blt.s .wsync cmp.b #$90,$dff006 bgt.s .wsync bsr.w mnu_fade .wsync2: cmp.b #$a0,$dff006 blt.s .wsync2 sub.w #mnu_fadespeed,mnu_fadefactor move.l (a7)+,d0 dbra d0,.loop clr.w mnu_fadefactor .wsync3: cmp.b #$80,$dff006 blt.s .wsync3 cmp.b #$90,$dff006 bgt.s .wsync3 bsr.w mnu_fade rts mnu_fadefactor: dc.w 0 mnu_fade: lea mnu_palette,a2 moveq.l #7,d0 lea mnu_colptrs+2,a0 lea mnu_colptrs+2+33*4,a1 move.w mnu_fadefactor,d7 move.l #$f0f0f0,d5 move.l #$ff,d6 .bankloop: moveq.l #31,d1 addq.l #4,a0 addq.l #4,a1 .colloop: moveq.l #0,d4 move.l (a2)+,d2 REPT 2 move.l d2,d3 and.w d6,d3 mulu d7,d3 divu d6,d3 move.b d3,d4 ror.l #8,d4 ror.l #8,d2 ENDR move.l d2,d3 and.w d6,d3 mulu d7,d3 divu d6,d3 move.b d3,d4 ror.l #8,d4 ror.l #8,d4 move.l d4,d3 and.l d5,d3 lsr.l #4,d3 ; x0x0x lsl.b #4,d3 ; x0xx0 lsl.w #4,d3 ; xxx00 lsr.l #8,d3 ; 00xxx and.l #$f0f0f,d4 move.w d3,(a0) lsl.b #4,d4 ; x0xx0 lsl.w #4,d4 ; xxx00 lsr.l #8,d4 ; 00xxx addq.l #4,a0 move.w d4,(a1) addq.l #4,a1 dbra d1,.colloop add.l #33*4,a0 add.l #33*4,a1 dbra d0,.bankloop rts mnu_printxy:;in:a0,d0,d1=Text ptr,XPos,YPos (XPos in words YPos in pixels) lea mnu_font,a3 lea mnu_font+176*40,a4 lea mnu_font+176*40*2,a5 moveq.l #40,d7 moveq.l #20,d6 move.l #40*16,d5 mulu d7,d1 add.w d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a1 ; a1=Ptr move.l a1,a2 .loop: move.b (a0)+,d2 beq .exit move.l mnu_printdelay,timer .w8a: tst.l timer bne.s .w8a and.l #$ff,d2 sub.w #32,d2 bge.s .ok move.l a2,a1 add.l #20*40,a1 move.l a1,a2 bra.s .loop .ok: divu d6,d2 move.w d2,d3 ; d3=Y swap.w d2 ; d2=X mulu d5,d3 ; d3=Y Addy lsl.w #1,d2 add.w d2,d3 ; d3=Addy Offset move.l a1,a6 moveq.l #15,d2 .yloop: move.w (a3,d3.l),(a6) move.w (a4,d3.l),40*256(a6) move.w (a5,d3.l),40*256*2(a6) add.l d7,d3 add.l d7,a6 dbra d2,.yloop addq.l #2,a1 bra .loop .exit: rts mnu_dofire: btst.b #0,main_counter+3 beq.s .skip rts .skip: move.l #mnu_bltint,main_bltint move.w $dff006,d0 add.w d0,mnu_rnd tst.b $dff002 .w8: tst.w mnu_bltbusy beq.s .notdoneyet rts .notdoneyet: .w82 btst.b #6,$dff002 bne.s .w82 lea mnu_sourceptrs,a0 move.l (a0),d0 move.l 4(a0),(a0) move.l 8(a0),4(a0) move.l d0,8(a0) lea $dff000,a6 st.b mnu_bltbusy move.w #$0040,$9c(a6) ; Clear BLT req move.w #$8040,$9a(a6) ; Enable BLT int move.w #$8200!%1000000,$96(a6) ; Enable blitter dma bsr.w mnu_bltint rts mnu_bltint: bsr.w .getrnd lea $dff000,a6 move.l .passptr,a0 move.l (a0),d0 beq.s .last addq.l #4,.passptr move.l d0,a0 jmp (a0) .last: move.w #$0040,$9a(a6) ; Disable BLT int move.w #%1000000,$96(a6) ; Disable blitter dma move.l #.passlist,.passptr clr.w mnu_bltbusy rts .getrnd: moveq.l #0,d0 move.w mnu_rnd,d0 and.l #8190,d0 add.l #mnu_morescreen+6*40*256,d0 move.l d0,mnu_rndptr addq.w #5,mnu_rnd rts .rnd: dc.w 0 .passptr: dc.l .passlist .passlist: dc.l mnu_pass1 dc.l mnu_pass2 dc.l mnu_pass3 dc.l 0 mnu_rnd: dc.w 0 mnu_bltbusy: dc.w 0 mnu_speed = 1 mnu_size = 256 mnu_subtract: dc.l 0 mnu_count: dc.w 0 mnu_pass1: clr.l mnu_subtract move.w mnu_count,d0 addq.w #1,mnu_count and.w #$3,d0 beq.s .l1 cmp.w #1,d0 bne.s .normal move.l #-2,mnu_subtract move.l #$fff80000,$40(a6) ; D=A+BC bra.s .cont .l1: move.l #$1ff80000,$40(a6) ; D=A+BC bra.s .cont .normal: move.l #$0ff80000,$40(a6) ; D=A+BC .cont: move.l #$ffffffff,$44(a6) ; Masks A move.l #$00000000,$60(a6) ; CB modulo move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_pass2:; move.l #$0ff80000,$40(a6) ; D=A+BC ; move.l #$ffffffff,$44(a6) ; Masks A ; move.l #$00000000,$60(a6) ; CB modulo ; move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+40*256+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs+4,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen+40*256,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_pass3:; move.l #$0ff80000,$40(a6) ; D=A+BC ; move.l #$ffffffff,$44(a6) ; Masks A ; move.l #$00000000,$60(a6) ; CB modulo ; move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+40*256*2+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs+8,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen+40*256*2,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_cls: lea mnu_morescreen+40*256*6,a1 moveq.l #0,d1 move.w #40*256*3/16-1,d0 .loop: REPT 4 move.l d1,-(a1) ENDR dbra d0,.loop rts mnu_animcursor: btst #0,main_counter+3 beq.s .skip move.l mnu_frameptr,a0 move.b (a0),mnu_arrow tst.b 1(a0) beq.s .skip cmp.b #40,1(a0) bhi.s .ok moveq.l #0,d0 move.b 1(a0),d0 sub.l d0,mnu_frameptr .ok: addq.l #1,mnu_frameptr .skip: rts mnu_domenu:;in: a0=Menu ptr ; bsr.w key_flushbuffer .redraw: move.l a0,-(a7) bsr.w mnu_openmenu ; Open new menu move.l (a7)+,a0 .loop: movem.l a0,-(a7) bsr.w mnu_update movem.l (a7)+,a0 move.l a0,-(a7) bsr.w mnu_waitmenu ; Wait for option move.l (a7)+,a0 moveq.l #0,d2 move.w mnu_row,d2 divu 14(a0),d2 swap.w d2 move.w d2,mnu_currentsel tst.l d1 beq.s .ok cmp.w #42,d1 beq.w .left cmp.w #41,d1 beq.w .right .ok: cmp.w #-1,d0 ; Esc ??? beq.w .exit ; Yepp exit move.l 16(a0,d0.w*8),d1 ; Get option type tst.l d1 ; 0=Do Nothing ??? beq.s .loop cmp.l #1,d1 ; 1=Sub menu beq.w .newmenu cmp.l #2,d1 ; 2=Exit sub beq.w .exit cmp.l #3,d1 beq.w .bsr cmp.l #4,d1 beq.w .left cmp.l #5,d1 beq.w .leftsl cmp.l #6,d1 beq.w .jump cmp.l #7,d1 beq.w .changemenu cmp.l #8,d1 beq.w .doraw cmp.l #9,d1 beq.w .doload cmp.l #10,d1 beq.w .dosave .wrong: move.l #mnu_errcursanim,mnu_frameptr bra.w .loop ; Strange option ??? Loop .dosave: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 move.w mnu_currentlevel,(a0) bsr.w mnu_savelevel movem.l (a7)+,d0-a6 ; bra.w .loop bra.w .exit .doload: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 move.w (a0),mnu_currentlevel bsr.w mnu_loadlevel movem.l (a7)+,d0-a6 ;bra.w .loop bra.w .exit .doraw: movem.l d0-a6,-(a7) move.l #mnu_buttonanim,mnu_frameptr move.l 20(a0,d0.w*8),a0 .rawloop: move.l a0,-(a7) bsr.w mnu_getrawvalue move.l (a7)+,a0 cmp.w (a0),d0 beq.s .rawcont cmp.w #69,d0 beq.s .rawcont lea mnu_rawkeys,a1 .tstraw: move.w (a1)+,d1 cmp.w #$ffff,d1 beq.s .rawok cmp.w d0,d1 bne.s .tstraw move.l #mnu_errbutanim,mnu_frameptr bra.s .rawloop .rawok: move.w d0,(a0) .rawcont: move.l #mnu_cursanim,mnu_frameptr movem.l (a7)+,d0-a6 bra.w .loop .bsr: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 jsr (a0) movem.l (a7)+,d0-a6 bra.w .redraw .jump: move.l 20(a0,d0.w*8),a0 move.l mnu_mainstack,a7 jmp (a0) ;--------------------------------------------------------------------------- .left: move.l 16(a0,d0.w*8),d1 cmp.l #4,d1 bne.s .leftsl move.l 20(a0,d0.w*8),a1 move.l 10(a1),a2 move.w 8(a1),d0 add.w d0,(a2) bra.w .loop .leftsl: cmp.l #5,d1 bne.w .wrong move.l 20(a0,d0.w*8),a1 move.l 6(a1),a2 addq.w #1,(a2) bra.w .loop .right: move.l 16(a0,d0.w*8),d1 cmp.l #4,d1 bne.s .rightsl move.l 20(a0,d0.w*8),a1 move.l 10(a1),a2 move.w 8(a1),d0 sub.w d0,(a2) bra.w .loop .rightsl: cmp.l #5,d1 bne.w .wrong move.l 20(a0,d0.w*8),a1 move.l 6(a1),a2 subq.w #1,(a2) bra.w .loop ;------------------------------------------------------------------ New menu -- .changemenu: move.l 20(a0,d0.w*8),a0 bra.w .redraw .newmenu: move.l a0,-(a7) move.l 20(a0,d0.w*8),a0 ; Set new menu bsr.w mnu_domenu move.l (a7)+,a0 bra.w .redraw .exit: rts mnu_redraw: move.w (a0),d0 move.w 2(a0),d1 move.l 4(a0),a0 bsr.w mnu_printxy rts mnu_openmenu:;in:a0=Ptr to menu ; bsr.w key_flushbuffer move.w mnu_currentlevel,d0 add.w #65,d0 move.b d0,mnu_mainleveltext move.l a0,-(a7) move.l #0,mnu_printdelay bsr.w mnu_cls move.l #35,timer .w8a: tst.l timer bne.s .w8a move.l (a7)+,a0 move.l a0,-(a7) move.w (a0),d0 move.w 2(a0),d1 move.l 4(a0),a0 bsr.w mnu_printxy move.l (a7)+,a0 move.w 8(a0),mnu_curx move.w 10(a0),mnu_cury move.w 12(a0),mnu_spread move.w 14(a0),mnu_items move.w 14(a0),d0 mulu #3000,d0 move.w d0,mnu_row move.w d0,mnu_oldrow bsr.w mnu_update rts mnu_waitmenu:;out: d0=Selection number ; move.l #mnu_cursanim,mnu_frameptr clr.l mnu_printdelay .loop: moveq.l #0,d1 move.w mnu_oldrow,d1 cmp.w mnu_row,d1 beq.s .skip ; move.l #mnu_cursanim,mnu_frameptr divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_cleararrow,a0 bsr.w mnu_printxy .skip: .w8key: bsr.w mnu_docursor jsr key_readkey tst.w d0 beq.s .w8key cmp.b #69,d0 beq.s .exit cmp.b #77,d0 ; Down Arrow beq.s .down cmp.b #76,d0 beq.s .up cmp.b #68,d0 beq.s .quit cmp.b #64,d0 beq.s .quit cmp.b #78,d0 beq.s .sliderr cmp.b #79,d0 beq.s .sliderl move.l #mnu_errcursanim,mnu_frameptr bra.w .loop .exit: moveq.l #-1,d0 ; Esc key moveq.l #0,d1 rts .sliderr: moveq.l #41,d1 bra.s .cpcont .sliderl: moveq.l #42,d1 bra.s .cpcont .quit: moveq.l #0,d1 .cpcont: move.w mnu_row,d0 divu mnu_items,d0 swap.w d0 and.l #$ffff,d0 rts .down: addq.w #1,mnu_row bra.w .loop .up: subq.w #1,mnu_row bra.w .loop mnu_docursor: moveq.l #0,d1 move.w mnu_row,d1 move.w d1,mnu_oldrow divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_arrow,a0 bsr.w mnu_printxy rts mnu_docursor1: moveq.l #0,d1 move.w mnu_row,d1 divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_arrow,a0 bsr.w mnu_printxy rts mnu_update:;in: a0=Ptr to menu move.w 14(a0),d7 subq.w #1,d7 move.w 10(a0),d1 ; d1=YPos move.w 8(a0),d0 move.l a0,a1 add.l #16,a1 .itemloop: move.l (a1)+,d2 cmp.l #4,d2 ; Slider ? beq.s .doslider cmp.l #5,d2 ; Slider ? beq.s .docycler cmp.l #8,d2 beq.s .dorawkey cmp.l #9,d2 beq.s .doloadlevel cmp.l #10,d2 beq.s .doloadlevel .continue: add.w 12(a0),d1 addq.l #4,a1 dbra d7,.itemloop rts .doslider: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Slider ptr bsr.w mnu_putslider movem.l (a7)+,d0-a6 bra.s .continue .docycler: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Cycler ptr bsr.w mnu_putcycler movem.l (a7)+,d0-a6 bra.s .continue .dorawkey: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Ptr to value move.w (a0),d3 add.w #132,d3 add.w #2,d0 move.b d3,mnu_rawprint lea mnu_rawprint,a0 bsr.w mnu_printxy movem.l (a7)+,d0-a6 bra.s .continue .doloadlevel: movem.l d0-a6,-(a7) move.l (a1),a0 move.w (a0),d2 ; d0=Level no add.w #65,d2 move.b d2,mnu_levelno addq.w #2,d0 lea mnu_leveltext,a0 bsr.w mnu_printxy movem.l (a7)+,d0-a6 bra.s .continue mnu_putslider:;in: d0,d1,d7,a0=Xpos,Ypos,Spread,Slider ptr add.w (a0),d0 add.w 2(a0),d1 move.w d0,.xpos movem.l d0-d1/a0,-(a7) lea mnu_leftslider,a0 bsr.w mnu_printxy movem.l (a7)+,d0-d1/a0 addq.w #2,d0 move.w 6(a0),d2 lsr.w #4,d2 tst.w d2 beq.s .skip move.w d2,d4 movem.l d0-d1/a0,-(a7) lea mnu_sliderspace,a0 move.l a0,a1 subq.w #1,d2 .loop: move.b #59,(a1)+ dbra d2,.loop clr.b (a1) bsr.w mnu_printxy movem.l (a7)+,d0-d1/a0 add.w d4,d0 add.w d4,d0 .skip: move.w 6(a0),d2 and.w #$f,d2 beq.w .skip2 move.w d2,d5 subq.w #1,d2 moveq.l #0,d3 .loop1: ror.w #1,d3 or.w #$8000,d3 dbra d2,.loop1 movem.l d0-d1,-(a7) mulu d7,d1 add.w d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a4 ; a4=Screen Ptr movem.l (a7)+,d0-d1 swap.w d3 clr.w d3 moveq.l #15,d2 move.l a4,a5 move.l mnu_sliddat,a3 .loop2: move.l (a3),d4 and.l d3,d4 move.l d4,(a4) move.l 176*40(a3),d4 and.l d3,d4 move.l d4,40*256(a4) move.l 176*40*2(a3),d4 and.l d3,d4 move.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d2,.loop2 move.l a5,a4 moveq.l #15,d2 move.l mnu_sliddat,a3 .loop3: move.l 2(a3),d4 lsr.l d5,d4 or.l d4,(a4) move.l 2+176*40(a3),d4 lsr.l d5,d4 or.l d4,40*256(a4) move.l 2+176*40*2(a3),d4 lsr.l d5,d4 or.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d2,.loop3 bra.s .cont1 .skip2: movem.l d0/d1/a0,-(a7) lea mnu_rightslider,a0 bsr.w mnu_printxy movem.l (a7)+,d0/d1/a0 .cont1: move.l 10(a0),a1 ; Value 2 change ptr move.w (a1),d0 cmp.w #0,d0 bge.s .ok1 moveq.l #0,d0 .ok1: cmp.w 4(a0),d0 ble.s .ok2 move.w 4(a0),d0 .ok2: move.w d0,(a1) mulu 6(a0),d0 divu 4(a0),d0 ; d0=Slider position X sub.w mnu_sliderwidth,d0 move.w .xpos,d2 lsl.w #3,d2 add.w d2,d0 move.w d0,d2 and.l #$f,d2 lsr.w #4,d0 lsl.w #1,d0 addq.w #2,d0 and.l #$ffff,d0 mulu d7,d1 add.l d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a4 ; a1=Screen ptr moveq.l #15,d3 move.l mnu_sliddat,a3 .loop4: move.l 6(a3),d4 lsr.l d2,d4 or.l d4,(a4) move.l 6+176*40(a3),d4 lsr.l d2,d4 or.l d4,40*256(a4) move.l 6+176*40*2(a3),d4 lsr.l d2,d4 or.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d3,.loop4 rts .xpos: dc.w 0 mnu_putcycler:;in: d0,d1,a0=Xpos,Ypos,Spread,Cycler ptr add.w (a0),d0 add.w 2(a0),d1 move.l 6(a0),a1 moveq.l #0,d2 move.w (a1),d2 divu 4(a0),d2 swap.w d2 move.w d2,(a1) move.l 10(a0,d2.w*4),a0 bsr.w mnu_printxy rts mnu_plot: move.w #49,d7 lea mnu_sines,a0 lea mnu_xsine0,a1 move.l a0,a3 plotlist: move.w (a1),d0 and.w #1022,d0 move.w (a0,d0.w),d1 move.w 4(a1),d0 and.w #1022,d0 add.w (a0,d0.w),d1 asr.w #4,d1 add.w #160,d1 move.w 2(a1),d0 and.w #1022,d0 move.w (a0,d0.w),d2 move.w 6(a1),d0 and.w #1022,d0 add.w (a0,d0.w),d2 asr.w #4,d2 add.w #128,d2 mulu #40,d2 move.w d1,d0 lsr.w #3,d1 add.w d1,d2 neg.w d0 addq.w #$7,d0 add.l #mnu_morescreen,d2 move.l d2,a2 bset.b d0,(a2) bset.b d0,40*256(a2) bset.b d0,40*256*2(a2) REPT 4 move.w (a3)+,d0 and.w #3,d0 add.w #2,d0 add.w d0,(a1)+ ENDR dbra d7,plotlist rts mnu_getrawvalue:;out: d0=Raw value bsr.w mnu_docursor1 move.b lastpressed,d0 beq.s mnu_getrawvalue move.b #0,lastpressed move.w #$ffff,mnu_oldrow rts ; Waits until a key is pressed the returns the raw value ; bsr.w mnu_docursor1 ; tst.b key_keypressed ; bne.s mnu_getrawvalue ;.loop: bsr.w mnu_docursor1 ; tst.b key_keypressed ; beq.s .loop ; move.b key_rawkey,d0 ; and.l #$ff,d0 ; move.l d0,-(a7) ;.oloop: bsr.w mnu_docursor1 ; tst.b key_keypressed ; bne.s .oloop ; bsr.w key_flushbuffer ; move.w #$ffff,mnu_oldrow ; move.l (a7)+,d0 ; rts mnu_test4quit: clr.w mnu_quitflag bsr.w mnu_docursor jsr key_readkey cmp.w #27,d0 beq.s .quit cmp.w #13,d0 beq.s .quit cmp.w #32,d0 beq.s .quit tst.w d0 beq.s .skip move.l #mnu_errcursanim,mnu_frameptr .skip: moveq.l #-1,d0 tst.w d0 rts .quit: st.b mnu_quitflag moveq.l #0,d0 tst.w d0 rts mnu_quitflag: dc.w 0 mnu_playgame: cmp.w #1,mnu_playtype ; Is it 2 player master ??? bne.w .noplayermaster lea mnu_2pmastermenu,a0 bsr.w mnu_domenu cmp.w #1,mnu_currentsel bne.s .rts bsr.w mnu_cls lea mnu_slavewaittext,a0 IFND mnu_nowait moveq.l #6,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_spread move.w #4,mnu_curx move.w #140,mnu_cury bsr.w mnu_wait4slave tst.w mnu_quitflag beq.s .playgame rts ENDC bra.s .playgame .rts: rts .noplayermaster:cmp.w #2,mnu_playtype bne.w .playgame IFND mnu_nowait bsr.w mnu_cls lea mnu_masterwaittext,a0 moveq.l #6,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_spread move.w #4,mnu_curx move.w #140,mnu_cury bsr.w mnu_wait4master tst.w mnu_quitflag beq.s .playgame rts ENDC .playgame: bsr.w mnu_clearscreen ;-------------------------------------- Jump to game here !! -- move.w mnu_playtype,d0 lea .playtypeptr,a0 move.l (a0,d0.w*4),a0 jsr (a0) bsr.w mnu_setscreen rts .playtypeptr: dc.l mnu_play1p dc.l mnu_play2pMaster dc.l mnu_play2pSlave ******************************************************************************* ******************************************************************************* ******************************************************************************* ******************************************************************************* mnu_wait4slave: ; Wait for the slave to connect. .loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor) beq.s .rts ; Cancel key was selected ;.............. Do your tests here ................................. ;.............. if the slave connects just exit with a rts ......... btst #6,$bfe001 bne.s .loop .loop1: btst #6,$bfe001 beq.s .loop1 .rts: rts ******************************************************************************* mnu_wait4master:; Wait for the master to connect. .loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor) beq.s .rts ; Cancel key was selected ;.............. Do your tests here .................................. ;.............. if the master connects just exit with a rts ......... btst #6,$bfe001 bne.s .loop .loop1: btst #6,$bfe001 beq.s .loop1 .rts: rts ******************************************************************************* mnu_play1p: ; Do the 1 player game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_play2pMaster:; Do the 2 player master game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_play2pSlave:; Do the 2 player slave game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_loadlevel: ; Level to load is in mnu_currentlevel.w ; Current menu item is in mnu_currentsel.w (0 based) rts ******************************************************************************* mnu_savelevel: ; Level to save is in mnu_currentlevel.w ; Current menu item is in mnu_currentsel.w (0 based) ; Or all saved levels in the mnu_levellist+n*2.w rts ******************************************************************************* ; include "demo:System/KeyBoard.S" ****************************************************************** Variables ** mnu_2plevel: dc.w 0 mnu_currentsel: dc.w 0 ; Containes the current menu item mnu_currentlevel: mnu_level: dc.w 0 ; Current level choosen. 0=A,1=B... mnu_playtype: dc.w 0 ; Selected type of game. 0=1 player ; 1=2 player master ; 2=2 player slave ;------------------------------------------------- Rawcodes for control keys -- mnu_rawkeys: ;----------------------------- Here are all defined raw keys -- mnu_key00: dc.w $4f ; Turn left mnu_key01: dc.w $4e ; Turn right mnu_key02: dc.w $4c ; Forwards mnu_key03: dc.w $4d ; Backwards mnu_key04: dc.w 101 ; Fire mnu_key05: dc.w $40 ; Operate door mnu_key06: dc.w 97 ; Run mnu_key07: dc.w 103 ; Force sidestep mnu_key08: dc.w 57 ; Sidestep left mnu_key09: dc.w 58 ; Sidestep right mnu_key10: dc.w 34 ; Duck mnu_key11: dc.w 40 ; Look behind mnu_key12: dc.w 15 ; Jump mnu_key13: dc.w 27 ; Look up mnu_key14: dc.w 42 ; Look down mnu_key15: dc.w 41 ; Centre view ;------------------------------------------- Put other reserved keys here !! -- dc.w 69 ; Escape dc.w 1,2,3,4,5,6,7,8,9,10 ; Weapon selects dc.w 80 ; Zoom in on map dc.w 81 ; Zoom out on map dc.w 82 ; 4/8 Channel sound dc.w 83 ; Mono/Stereo sound dc.w 84 ; Recall message dc.w 85 ; Render quality dc.w 29 ; Map down left dc.w 30 ; Map down dc.w 31 ; Map down right dc.w 45 ; Map left dc.w 46 ; Center map dc.w 47 ; Map right dc.w 61 ; Map up left dc.w 62 ; Map up dc.w 63 ; Map up right dc.w -1 ; End list with -1 mnu_levellist:;----------------------------- Current levels in the save list -- mnu_saved0: dc.w 0 ; Level number for saved pos 0 mnu_saved1: dc.w 1 mnu_saved2: dc.w 3 mnu_saved3: dc.w 8 mnu_saved4: dc.w 4 mnu_saved5: dc.w 11 mnu_xsine0: dc.w 0 mnu_xsine1: dc.w 0 mnu_ysine0: dc.w 0 mnu_ysine1: dc.w 0 ds.l 2*100 mnu_sines: dc.w $0006,$0013,$001f,$002c,$0038,$0045,$0052,$005e,$006b,$0077 dc.w $0083,$0090,$009c,$00a9,$00b5,$00c1,$00ce,$00da,$00e6,$00f2 dc.w $00ff,$010b,$0117,$0123,$012f,$013b,$0147,$0153,$015f,$016a dc.w $0176,$0182,$018d,$0199,$01a4,$01b0,$01bb,$01c6,$01d2,$01dd dc.w $01e8,$01f3,$01fe,$0209,$0213,$021e,$0229,$0233,$023e,$0248 dc.w $0252,$025c,$0266,$0270,$027a,$0284,$028e,$0297,$02a1,$02aa dc.w $02b4,$02bd,$02c6,$02cf,$02d8,$02e1,$02e9,$02f2,$02fa,$0303 dc.w $030b,$0313,$031b,$0323,$032a,$0332,$0339,$0341,$0348,$034f dc.w $0356,$035d,$0364,$036a,$0371,$0377,$037d,$0383,$0389,$038f dc.w $0395,$039a,$039f,$03a5,$03aa,$03af,$03b4,$03b8,$03bd,$03c1 dc.w $03c5,$03c9,$03cd,$03d1,$03d5,$03d8,$03dc,$03df,$03e2,$03e5 dc.w $03e7,$03ea,$03ed,$03ef,$03f1,$03f3,$03f5,$03f7,$03f8,$03f9 dc.w $03fb,$03fc,$03fd,$03fd,$03fe,$03ff,$03ff,$03ff,$03ff,$03ff dc.w $03ff,$03fe,$03fd,$03fd,$03fc,$03fb,$03f9,$03f8,$03f7,$03f5 dc.w $03f3,$03f1,$03ef,$03ed,$03ea,$03e7,$03e5,$03e2,$03df,$03dc dc.w $03d8,$03d5,$03d1,$03cd,$03c9,$03c5,$03c1,$03bd,$03b8,$03b4 dc.w $03af,$03aa,$03a5,$039f,$039a,$0395,$038f,$0389,$0383,$037d dc.w $0377,$0371,$036a,$0364,$035d,$0356,$034f,$0348,$0341,$0339 dc.w $0332,$032a,$0323,$031b,$0313,$030b,$0303,$02fa,$02f2,$02e9 dc.w $02e1,$02d8,$02cf,$02c6,$02bd,$02b4,$02aa,$02a1,$0297,$028e dc.w $0284,$027a,$0270,$0266,$025c,$0252,$0248,$023e,$0233,$0229 dc.w $021e,$0213,$0209,$01fe,$01f3,$01e8,$01dd,$01d2,$01c6,$01bb dc.w $01b0,$01a4,$0199,$018d,$0182,$0176,$016a,$015f,$0153,$0147 dc.w $013b,$012f,$0123,$0117,$010b,$00ff,$00f2,$00e6,$00da,$00ce dc.w $00c1,$00b5,$00a9,$009c,$0090,$0083,$0077,$006b,$005e,$0052 dc.w $0045,$0038,$002c,$001f,$0013,$0006,$fffa,$ffed,$ffe1,$ffd4 dc.w $ffc8,$ffbb,$ffae,$ffa2,$ff95,$ff89,$ff7d,$ff70,$ff64,$ff57 dc.w $ff4b,$ff3f,$ff32,$ff26,$ff1a,$ff0e,$ff01,$fef5,$fee9,$fedd dc.w $fed1,$fec5,$feb9,$fead,$fea1,$fe96,$fe8a,$fe7e,$fe73,$fe67 dc.w $fe5c,$fe50,$fe45,$fe3a,$fe2e,$fe23,$fe18,$fe0d,$fe02,$fdf7 dc.w $fded,$fde2,$fdd7,$fdcd,$fdc2,$fdb8,$fdae,$fda4,$fd9a,$fd90 dc.w $fd86,$fd7c,$fd72,$fd69,$fd5f,$fd56,$fd4c,$fd43,$fd3a,$fd31 dc.w $fd28,$fd1f,$fd17,$fd0e,$fd06,$fcfd,$fcf5,$fced,$fce5,$fcdd dc.w $fcd6,$fcce,$fcc7,$fcbf,$fcb8,$fcb1,$fcaa,$fca3,$fc9c,$fc96 dc.w $fc8f,$fc89,$fc83,$fc7d,$fc77,$fc71,$fc6b,$fc66,$fc61,$fc5b dc.w $fc56,$fc51,$fc4c,$fc48,$fc43,$fc3f,$fc3b,$fc37,$fc33,$fc2f dc.w $fc2b,$fc28,$fc24,$fc21,$fc1e,$fc1b,$fc18,$fc16,$fc13,$fc11 dc.w $fc0f,$fc0d,$fc0b,$fc09,$fc08,$fc07,$fc05,$fc04,$fc03,$fc03 dc.w $fc02,$fc01,$fc01,$fc01,$fc01,$fc01,$fc01,$fc02,$fc03,$fc03 dc.w $fc04,$fc05,$fc07,$fc08,$fc09,$fc0b,$fc0d,$fc0f,$fc11,$fc13 dc.w $fc16,$fc19,$fc1b,$fc1e,$fc21,$fc24,$fc28,$fc2b,$fc2f,$fc33 dc.w $fc37,$fc3b,$fc3f,$fc43,$fc48,$fc4c,$fc51,$fc56,$fc5b,$fc61 dc.w $fc66,$fc6b,$fc71,$fc77,$fc7d,$fc83,$fc89,$fc8f,$fc96,$fc9c dc.w $fca3,$fcaa,$fcb1,$fcb8,$fcbf,$fcc7,$fcce,$fcd6,$fcdd,$fce5 dc.w $fced,$fcf5,$fcfd,$fd06,$fd0e,$fd17,$fd1f,$fd28,$fd31,$fd3a dc.w $fd43,$fd4c,$fd56,$fd5f,$fd69,$fd72,$fd7c,$fd86,$fd90,$fd9a dc.w $fda4,$fdae,$fdb8,$fdc2,$fdcd,$fdd7,$fde2,$fded,$fdf7,$fe02 dc.w $fe0d,$fe18,$fe23,$fe2e,$fe3a,$fe45,$fe50,$fe5c,$fe67,$fe73 dc.w $fe7e,$fe8a,$fe96,$fea1,$fead,$feb9,$fec5,$fed1,$fedd,$fee9 dc.w $fef5,$ff01,$ff0e,$ff1a,$ff26,$ff32,$ff3f,$ff4b,$ff57,$ff64 dc.w $ff70,$ff7d,$ff89,$ff95,$ffa2,$ffae,$ffbb,$ffc8,$ffd4,$ffe1 dc.w $ffed,$fffa mnu_mainstack: dc.l 0 ;--------------------------------------------------------------- Slider data -- mnu_sliderwidth:dc.w 6 mnu_sliddat: dc.l mnu_font+40*16+7*2 mnu_leftslider: dc.b 58,0 mnu_sliderspace: dcb.b 20,0 mnu_rightslider:dc.b 60,0 mnu_rawprint: dc.b 0,0 even ;----------------------------------------------------------------- Menu data -- mnu_curx: dc.w 5 mnu_cury: dc.w 78 mnu_spread: dc.w 40 mnu_items: dc.w 3 mnu_arrow: dc.b ' ',0 mnu_cleararrow: dc.b ' ',0 mnu_row: dc.w 30000 mnu_oldrow: dc.w 30000 mnu_screenpos: dc.w 0 mnu_printdelay: dc.l 0 ;----------------------------------------------------------------- Fire data -- mnu_rndptr: dc.l mnu_morescreen+6*40*256 mnu_sourceptrs: dc.l mnu_morescreen+3*40*256+mnu_speed*40 dc.l mnu_morescreen+4*40*256+mnu_speed*40 dc.l mnu_morescreen+5*40*256+mnu_speed*40 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Menues %% ; Types: 0 = Do nothing ; 1 = Sub menu ; 2 = Exit sub menu ; 3 = Execute subroutine ; 4 = Slider ; 5 = Cycler ; 6 = Branch (SP) set to value in mnu_mainstack ; 7 = Change menu ; 8 = Get raw key ; 9 = Level Load ; 10 = Level Save mnu_MYMAINMENU: dc.w 0,0 dc.l mnu_MYMAINMENUTEXT dc.w 0,40 dc.w 20 dc.w 7 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 mnu_MYMAINMENUTEXT: ; 12345678901234567890 dc.b ' ',1 dc.b ' ',1 mnu_CURRENTLEVELLINE: dc.b ' ',1 dc.b ' 1 PLAYER ',1 dc.b ' PLAY GAME ',1 dc.b ' CONTROL OPTIONS ',1 dc.b ' GAME CREDITS ',1 dc.b ' LOAD POSITION ',1 dc.b ' SAVE POSITION ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',0 EVEN mnu_MYCONTROLSONE: dc.w 0,0 dc.l mnu_MYCONTROLTEXTONE dc.w 0,0 dc.w 20 dc.w 12 ds.l 24 EVEN mnu_MYCONTROLTEXTONE: KEY_LINES: ; 12345678901234567 8 90 dc.b ' TURN LEFT ',132+$4f,' ',1 dc.b ' TURN RIGHT ',132+$4e,' ',1 dc.b ' FORWARDS ',132+$4c,' ',1 dc.b ' BACKWARDS ',132+$4d,' ',1 dc.b ' FIRE ',132+$65,' ',1 dc.b ' OPERATE ',132+$40,' ',1 dc.b ' RUN ',132+$61,' ',1 dc.b ' FORCE S/S ',132+$67,' ',1 dc.b ' S/S LEFT ',132+$39,' ',1 dc.b ' S/S RIGHT ',132+$3a,' ',1 dc.b ' DUCK ',132+$22,' ',1 dc.b ' MORE ',0 EVEN mnu_MYCONTROLSTWO: dc.w 0,40 dc.l mnu_MYCONTROLTEXTTWO dc.w 0,40 dc.w 20 dc.w 7 ds.l 14 EVEN mnu_MYCONTROLTEXTTWO: KEY_LINES2: ; 12345678901234567 8 90 dc.b ' LOOK BEHIND ',132+$28,' ',1 dc.b ' JUMP ',132+$0f,' ',1 dc.b ' LOOK UP ',132+027,' ',1 dc.b ' LOOK DOWN ',132+042,' ',1 dc.b ' CENTRE VIEW ',132+041,' ',1 dc.b ' NEXT WEAPON ',132+068,' ',1 dc.b ' MAIN MENU ',0 EVEN mnu_MYMASTERMENU: dc.w 0,80 dc.l mnu_MYMASTERTEXT dc.w 0,80 dc.w 20 dc.w 4 ds.l 8 EVEN mnu_MYMASTERTEXT: ; 12345678901234567890 dc.b ' 2 PLAYER MASTER ',1 mnu_CURRENTLEVELLINEM: dc.b ' ',1 dc.b ' PLAY GAME ',1 dc.b ' CONTROL OPTIONS ',0 EVEN mnu_MYSLAVEMENU: dc.w 0,80 dc.l mnu_MYSLAVETEXT dc.w 0,80 dc.w 20 dc.w 3 ds.l 6 EVEN mnu_MYSLAVETEXT: ; 12345678901234567890 dc.b ' 2 PLAYER SLAVE ',1 dc.b ' PLAY GAME ',1 dc.b ' CONTROL OPTIONS ',0 EVEN mnu_MYLOADMENU: dc.w 0,40 dc.l mnu_MYLOADMENUTEXT dc.w 0,60 dc.w 20 dc.w 7 ds.l 14 EVEN mnu_MYLOADMENUTEXT: ; 12345678901234567890 dc.b ' LOAD POSITION ',1 mnu_LSLOTA: dc.b ' NEW GAME ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' CANCEL ',0 EVEN mnu_MYSAVEMENU: dc.w 0,40 dc.l mnu_MYSAVEMENUTEXT dc.w 0,60 dc.w 20 dc.w 6 ds.l 14 EVEN mnu_MYSAVEMENUTEXT: ; 12345678901234567890 dc.b ' SAVE POSITION ',1 mnu_SSLOTA: dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' ',1 dc.b ' CANCEL ',0 EVEN mnu_askfordisk: dc.w 0,70 dc.l mnu_askfordisktext dc.w 0,110 ; top of where cursor starts (1st option) dc.w 20 dc.w 1 dc.l 2,0 mnu_mainmenu: dc.w 6,12 ; X (bytes),Y (rows) of top left of scrn dc.l mnu_maintext ; Text ptr dc.w 4,70 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 5,mnu_playercycler ; Change player type dc.l 3,mnu_playgame dc.l 1,mnu_controlmenu0 dc.l 3,mnu_viewcredz dc.l 1,mnu_loadmenu dc.l 1,mnu_savemenu dc.l 2,0 ; 2=Exit sub menu (Esc) mnu_controlmenu0:dc.w 6,32 ; X,Y dc.l mnu_controltext0 ; Text ptr dc.w 4,50 ; XCursor,YCursor dc.w 20 ; Spread dc.w 9 ; Items dc.l 8,mnu_key00 dc.l 8,mnu_key01 dc.l 8,mnu_key02 dc.l 8,mnu_key03 dc.l 8,mnu_key04 dc.l 8,mnu_key05 dc.l 8,mnu_key06 dc.l 8,mnu_key07 dc.l 7,mnu_controlmenu1 mnu_controlmenu1:dc.w 6,32 ; X,Y dc.l mnu_controltext1 ; Text ptr dc.w 4,50 ; XCursor,YCursor dc.w 20 ; Spread dc.w 9 ; Items dc.l 8,mnu_key08 dc.l 8,mnu_key09 dc.l 8,mnu_key10 dc.l 8,mnu_key11 dc.l 8,mnu_key12 dc.l 8,mnu_key13 dc.l 8,mnu_key14 dc.l 8,mnu_key15 dc.l 7,mnu_controlmenu2 mnu_controlmenu2:dc.w 4,12 ; X,Y dc.l mnu_controltext2 ; Text ptr dc.w 4,210 ; XCursor,YCursor dc.w 20 ; Spread dc.w 1 ; Items dc.l 7,mnu_controlmenu0 mnu_loadmenu: dc.w 4,42 dc.l mnu_loadmenutext dc.w 4,80 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 9,mnu_saved0 dc.l 9,mnu_saved1 dc.l 9,mnu_saved2 dc.l 9,mnu_saved3 dc.l 9,mnu_saved4 dc.l 9,mnu_saved5 dc.l 2,0 mnu_savemenu: dc.w 4,42 dc.l mnu_savemenutext dc.w 4,80 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 10,mnu_saved0 dc.l 10,mnu_saved1 dc.l 10,mnu_saved2 dc.l 10,mnu_saved3 dc.l 10,mnu_saved4 dc.l 10,mnu_saved5 dc.l 2,0 mnu_quitmenu: dc.w 4,82 dc.l mnu_quitmenutext dc.w 4,120 ; XCursor,YCursor dc.w 20 ; Spread dc.w 2 ; Items dc.l 6,mnu_loop dc.l 6,mnu_exit mnu_2pmastermenu: dc.w 4,82 dc.l mnu_2pmastertext dc.w 4,120 ; XCursor,YCursor dc.w 20 ; Spread dc.w 3 ; Items dc.l 5,mnu_levelcycler dc.l 2,0 dc.l 2,0 ;--------------------------------------------------------------------- Texts -- mnu_askfordisktext: ; 12345678901234567890 dc.b 'Please Insert Volume',1 dc.b 1 mnu_diskline: dc.b ' ',0 mnu_slavewaittext: dc.b 'Waiting for ',1 dc.b 'your opponent',1 dc.b 'to respond...',1,1 dc.b 58,58,'Cancel',0 mnu_masterwaittext: dc.b 'Waiting for ',1 dc.b 'your opponent',1 dc.b 'to respond...',1,1 dc.b 58,58,'Cancel',0 mnu_maintext: dc.b 1,1 dc.b 60,'Level ' mnu_mainleveltext:dc.b 'A',58,1 dc.b 1 dc.b 'Play game',1 dc.b 'Control options',1 dc.b 'Game credits',1 dc.b 'Load position',1 dc.b 'Save position',1 dc.b 'Quit',1 dc.b 0 mnu_quitmenutext:dc.b ' Quit game',131,131,131,1,1 dc.b ' No,I',39,'m addicted',1 dc.b ' Yes! Let me OUT',1 dc.b 0 mnu_2pmastertext:dc.b ' 2 Player master',1,1 dc.b ' Play level',1 dc.b ' Start game',1 dc.b ' ',58,58,'Cancel',1 dc.b 0 mnu_loadmenutext:dc.b ' Load game',1,1 dc.b 1,1,1,1,1,1 dc.b ' ',58,58,'Cancel',58,58,0 mnu_savemenutext:dc.b ' Save game',1,1 dc.b 1,1,1,1,1,1 dc.b ' ',58,58,'Cancel',58,58,0 mnu_controltext0:dc.b 1 dc.b ' Turn left',1 dc.b ' Turn right',1 dc.b ' Forwards',1 dc.b ' Backwards',1 dc.b ' Fire',1 dc.b ' Operate door',1 dc.b ' Run',1 dc.b ' Sidestep',1 dc.b 60,60,'More',60,60,1 dc.b 0 mnu_controltext1:dc.b 1 dc.b ' Sidestep left',1 dc.b ' Sidestep right',1 dc.b ' Duck',1 dc.b ' Look behind',1 dc.b ' Jump',1 dc.b ' Look up',1 dc.b ' Look down',1 dc.b ' Centre view',1 dc.b 60,60,'Others',60,60,1 dc.b 0 mnu_controltext2:dc.b 1 dc.b 157,'Pause',1 dc.b 212,'Zoom in on map',1 dc.b 213,'Zoom out on map',1 dc.b 214,'4/8 Ch. sound',1 dc.b 215,'Mono/Stereo snd',1 dc.b 216,'Recall message',1 dc.b 217,'Render quality',1 dc.b 133,'-',142,'Select weapon',1 dc.b 161,'-',195,'Scroll map',1 dc.b ' ',58,58,'Back',58,58,1 dc.b 0 mnu_leveltext: dc.b 'Level ' mnu_levelno: dc.b 'A',0 mnu_protecttext:dc.b 'ENTER NUMBER AT',1,1 dc.b ' TABLE ' mnu_tableptr: dc.b '0',1 dc.b ' ROW ' mnu_rowptr: dc.b '00',1 dc.b ' COLUMN ' mnu_columnptr: dc.b '0',1,1 dc.b ' NUMBER ' mnu_numberptr: dc.b ' ' dc.b 0 mnu_wrongtext: dc.b 'Wrong!',0 mnu_dontbelong: dc.b 'Nice try.',0 even ;------------------------------------------------------- Cyclers and sliders -- mnu_level0: dc.b 'A',0 mnu_level1: dc.b 'B',0 mnu_level2: dc.b 'C',0 mnu_level3: dc.b 'D',0 mnu_level4: dc.b 'E',0 mnu_level5: dc.b 'F',0 mnu_level6: dc.b 'G',0 mnu_level7: dc.b 'H',0 mnu_level8: dc.b 'I',0 mnu_level9: dc.b 'J',0 mnu_level10: dc.b 'K',0 mnu_level11: dc.b 'L',0 mnu_level12: dc.b 'M',0 mnu_level13: dc.b 'N',0 mnu_level14: dc.b 'O',0 mnu_level15: dc.b 'P',0 even mnu_levelcycler:dc.w 24,2 ; X,Y Add dc.w 16 ; #of items dc.l mnu_2plevel ; Value to effect dc.l mnu_level0 dc.l mnu_level1 dc.l mnu_level2 dc.l mnu_level3 dc.l mnu_level4 dc.l mnu_level5 dc.l mnu_level6 dc.l mnu_level7 dc.l mnu_level8 dc.l mnu_level9 dc.l mnu_level10 dc.l mnu_level11 dc.l mnu_level12 dc.l mnu_level13 dc.l mnu_level14 dc.l mnu_level15 even mnu_playercycler:dc.w 2,2 ; X,Y Add dc.w 3 ; #of items dc.l mnu_playtype ; Value to effect dc.l mnu_playtype0 dc.l mnu_playtype1 dc.l mnu_playtype2 even mnu_playtype0: dc.b '1 Player ',0 mnu_playtype1: dc.b '2 Player master',0 mnu_playtype2: dc.b '2 Player slave ',0 ;----------------------------------------------------------------- Animation -- mnu_frameptr: dc.l mnu_cursanim mnu_errcursorlong: dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 mnu_errcursanim:dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 mnu_cursanim: dc.b 130,129,128,127,126,125,124,123,8 even mnu_errbutanim: dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 mnu_buttonanim: dc.b 236,236,236,236 dc.b 237,237,237,237 dc.b 238,238,238,238 dc.b 239,239,239,239 dc.b 238,238,238,238 dc.b 237,237,237,237 dc.b 24 even mnu_font: incbin "demo:Menu/font16x16.raw2" mnu_fontpal: incbin "demo:Menu/FONT16x16.PAL2" mnu_firepal: incbin "Demo:Menu/FirePal.Pal2" mnu_backpal: incbin "demo:Menu/Back.Pal" mnu_palette: ds.l 256 mnu_frame: incbin "demo:Menu/Credits_Only.Raw" section data_c,data_c mnu_copper: dc.w intreq,$8010 dc.l $01000211,$01020000,$01040000 dc.l $0108fff8,$010afff8,$010c0000 dc.l $01fc0003 dc.l $008e2881,$009028c1,$00920038,$009400d0 mnu_bplptrs: dc.l $00e00000,$00e20000,$00e40000,$00e60000 dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000 dc.l $00f00000,$00f20000,$00f40000,$00f60000 dc.l $00f80000,$00fa0000,$00fc0000,$00fe0000 mnu_colptrs: ds.l (32+1)*8*2+1 cnop 64,64 mnu_screen: incbin "Demo:Menu/Back2.Raw" ds.b 40*256*2 mnu_morescreen: ds.b 40*256*8 counter: dc.l 0 main_vblint: dc.l 0 main_counter: dc.l 0 main_bltint: dc.l 0 main_vbrbase: dc.l 0 timer: dc.l 0