move.l A7,A5 move.l 4(A5),A5 ;get basepage move.l $C(A5),D0 ;text segment add.l $14(A5),D0 ;data segment add.l $1C(A5),D0 ;unitialized add.l #$100,D0 ;basepage size move.l D0,-(sp) move.l A5,-(sp) move.w D0,-(sp) move.w #$4A,-(sp) trap #1 add.l #12,sp ;okay that's it memory free & allocated bsr set_super dc.w $a00a ;hide mouse bsr get_screen_base bsr get_old_palette bsr set_new_palette bsr get_original_rez bsr set_low_rez wait: bsr v_sync move.w #$123,$ff8240 move.w pic+2,$ff8240 bsr tst_key tst.l d0 beq.s wait bsr set_old_palette bsr set_med_rez dc.w $a009 bsr set_user clr.w -(sp) MOVE.W #$4c,-(SP) ; RETURN TO GEM DESKTOP. TRAP #1 ERR: bra.s ERR ******************* * CUSTOM ROUTINES * ******************* *********************** * SUBROUTINES SECTION * *********************** v_sync: movem.l d0-d3/a0-a3,-(sp) move.w #$25,-(sp) trap #14 addq.l #2,sp movem.l (sp)+,d0-d3/a0-a3 rts tst_key: move.w #11,-(sp) trap #1 addq.l #2,sp rts get_key: move.w #7,-(sp) trap #1 addq.l #2,sp rts set_super: clr.l -(sp) ;Set super stack equal move.w #$20,-(sp) ; to user stack before call trap #1 addq.l #6,sp ;correct stack move.l d0,stack_save ;save old supervisor stack value rts set_user: move.l stack_save,-(sp) move.w #$20,-(sp) trap #1 ;back to user addq.l #6,sp ;correct stack rts get_old_palette: move.w #8-1,d0 lea $ff8240,a0 lea old_palette,a1 get_old: move.l (a0)+,(a1)+ dbf D0,get_old rts set_new_palette: lea pic+2,a0 bra set_pal set_old_palette: lea old_palette,a0 set_pal: lea $ff8240,a1 move.w #8-1,d0 set_p: move.l (a0)+,(a1)+ dbf d0,set_p rts get_screen_base: move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,screen_base rts get_original_rez: move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,original_rez rts set_low_rez: clr.w -(sp) bra set_rez set_med_rez: move.w #1,-(sp) set_rez: move.l #-1,-(sp) move.l #-1,-(sp) move.w #5,-(sp) trap #14 add.l #12,sp rts **************** * DATA SECTION * **************** stack_save: dc.l 0 screen_base dc.l 0 original_rez: dc.w 0 old_palette: ds.w 16 pic: incbin "g:\read_me.pi1"