**************************************************************************** **************************************************************************** ** ** Monster (TI-92+ Display routine) ** ** Copyright 2002 by Patrick Davidson. This software may be freely ** modified and/or copied with no restrictions. There is no warranty. ** ** by Patrick Davidson (pad@calc.org, http://pad.calc.org/) ** ** Last updated March 6, 2002 ** **************************************************************************** **************************************************************************** ******************************************** PREPARE GRAYSCALE DISPLAY Grayscale_Post_Init: move.l gs_plane0(pc),a0 move.l gs_plane1(pc),a1 move.l a0,plane0(a5) move.l a1,plane1(a5) moveq #0,d0 move.w #959,d1 \l: move.l d0,(a0)+ move.l d0,(a1)+ dbra d1,\l move.l #(239<<16)+119,-(sp) pea (a5) JSR_ROM PortSet lea 8(sp),sp rts \title_text: TITLE_MESSAGE dc.b 0 EVEN ******************************************** INITIALIZE IN-GAME DISPLAY Initialize_Game_Screen: lea (a5),a0 moveq #119,d0 \l2: clr.w (a0)+ dbra d0,\l2 moveq #1,d0 bsr Set_Font moveq #0,d0 moveq #7,d1 lea top_msg(pc),a0 bsr Display_String lea (a5),a0 move.l plane0(a5),a1 move.l plane1(a5),a2 moveq #119,d0 \l: move.w (a0),(a1)+ move.w (a0)+,(a2)+ dbra d0,\l rts top_msg: dc.b 'Level: Lives: Score:',0 EVEN ******************************************** DISPLAY SCREEN BUFFER Display_Screen: LEA (A5),A0 lea PLANE_SIZE(a0),a3 move.l plane1(a5),a1 move.l plane0(a5),a2 lea 240(a1),a1 lea 240(a2),a2 MOVEQ #99,D0 LAB_0124: MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ MOVE.L (A0)+,(A1)+ move.l (a3)+,(a2)+ DBF D0,LAB_0124 Initialize_Info: RTS Display_Half: LEA (A5),A0 lea PLANE_SIZE(a0),a3 move.l plane1(a5),a1 move.l plane0(a5),a2 lea 240(a1),a1 lea 240(a2),a2 MOVE.w #179,D1 \l: MOVE.L (A0)+,d0 move.l d0,(A1)+ move.l d0,(a2)+ MOVE.L (A0)+,d0 move.l d0,(A1)+ move.l d0,(a2)+ MOVE.L (A0)+,d0 move.l d0,(A1)+ move.l d0,(a2)+ MOVE.L (A0)+,d0 move.l d0,(A1)+ move.l d0,(a2)+ MOVE.L (A0)+,d0 move.l d0,(A1)+ move.l d0,(a2)+ DBF D1,\l RTS ******************************************** DISPLAY INFORMATION Show_Score: lea score+1(a5),a0 move.l plane1(a5),a1 lea 24(a1),a1 moveq #2,d0 bra.s Display_BCD Show_Level_Number: move.w level(a5),d0 bsr Convert_To_BCD moveq #0,d0 lea temp_buffer(a5),a0 move.l plane1(a5),a1 lea 6(a1),a1 bra.s Display_BCD Show_Lives_Number: move.w lives(a5),d0 bsr Convert_To_BCD moveq #0,d0 lea temp_buffer(a5),a0 move.l plane1(a5),a1 lea 15(a1),a1 ; bra.s Display_BCD ******************************************* DISPLAY A BCD NUMBER * * Displays D0+1 bytes of a BCD number at A0 in memory at A1. * * Modifies D0, D1, A0 - A2. * ******** Display_BCD: move.b (a0),d1 and.w #$f0,d1 lsr.w #4,d1 bsr show_digit move.b (a0)+,d1 and.w #$f,d1 bsr show_digit dbra d0,Display_BCD rts show_digit: mulu #7,d1 lea digits(pc,d1.w),a2 moveq #6,d1 loop_copy: move.b (a2)+,d2 move.b d2,(a1) lea 30(a1),a1 dbra d1,loop_copy lea -209(a1),a1 rts digits: dc.b %00111110 dc.b %01000011 dc.b %01000101 dc.b %01001001 dc.b %01010001 dc.b %01100001 dc.b %00111110 dc.b %00011000 dc.b %00101000 dc.b %01001000 dc.b %00001000 dc.b %00001000 dc.b %00001000 dc.b %01111111 dc.b %00011100 dc.b %00100010 dc.b %01000010 dc.b %00000100 dc.b %00001000 dc.b %00010000 dc.b %01111111 dc.b %01111110 dc.b %00000001 dc.b %00000001 dc.b %01111110 dc.b %00000001 dc.b %00000001 dc.b %01111110 dc.b %01000010 dc.b %01000010 dc.b %01000010 dc.b %01111111 dc.b %00000010 dc.b %00000010 dc.b %00000010 dc.b %01111111 dc.b %01000000 dc.b %01000000 dc.b %01111110 dc.b %00000001 dc.b %00000001 dc.b %01111110 dc.b %00111111 dc.b %01000000 dc.b %01000000 dc.b %01111111 dc.b %01000001 dc.b %01000001 dc.b %00111110 dc.b %01111111 dc.b %00000010 dc.b %00000010 dc.b %00000100 dc.b %00000100 dc.b %00001000 dc.b %00001000 dc.b %00111110 dc.b %01000001 dc.b %01000001 dc.b %00111110 dc.b %01000001 dc.b %01000001 dc.b %00111110 dc.b %01111110 dc.b %01000001 dc.b %01000001 dc.b %01111111 dc.b %00000001 dc.b %00000001 dc.b %01111110 dc.b %00111110 dc.b %01000001 dc.b %01000001 dc.b %01111111 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %01111110 dc.b %01000001 dc.b %01000001 dc.b %01111110 dc.b %01000001 dc.b %01000001 dc.b %01111110 dc.b %00111111 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %00111111 dc.b %01111110 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %01111110 dc.b %01111111 dc.b %01000000 dc.b %01000000 dc.b %01111100 dc.b %01000000 dc.b %01000000 dc.b %01111111 dc.b %01111111 dc.b %01000000 dc.b %01000000 dc.b %01111100 dc.b %01000000 dc.b %01000000 dc.b %01000000