**************************************************************************** **************************************************************************** ** ** Platinum Edition (TI-92+ Display routine) ** ** This software is in the public domain. There is no warranty. ** ** by Patrick Davidson (pad@calc.org, http://pad.calc.org/) ** ** Last updated November 24, 2001 ** **************************************************************************** **************************************************************************** SCREEN_HEIGHT equ 106 SCREEN_TOP equ 18 ******************************************** PREPARE GRAYSCALE DISPLAY Grayscale_Post_Init: move.l gs_plane0(pc),a4 move.l gs_plane1(pc),a1 move.l a4,plane0(a5) move.l a1,plane1(a5) add.l #11*30,plane0(a5) add.l #11*30,plane1(a5) move.l #(239<<16)+116,-(sp) move.l plane1(a5),-(sp) JSR_ROM PortSet bsr Clear_Screen_All move.l a4,a0 moveq #31,d0 bsr Crosshatch_Area moveq #2,d0 bsr Set_Font moveq #0,d1 moveq #107,d0 lea \title_text(pc),a0 bsr Display_String move.l plane1(a5),a0 lea 117*30(a0),a1 move.w #((11*30)/2)-1,d0 \copy: move.w -(a1),-(a0) dbra d0,\copy lea 8(sp),sp rts \title_text: dc.b 'Platinum Edition by Patrick D',0 EVEN ******************************************** DISPLAY GAME SCREEN Display_Game_Screen: bsr Display_Screen lea score+1(a5),a0 moveq #2,d0 move.l plane1(a5),a1 add.w #30*22+24,a1 bsr Display_BCD lea cash+1(a5),a0 moveq #2,d0 move.l plane1(a5),a1 add.w #30*56+24,a1 bsr Display_BCD lea player_dmg-1(a5),a0 moveq #2,d0 move.l plane1(a5),a1 add.w #30*90+24,a1 bra Display_BCD ******************************************** PREPARE DISPLAY SYSTEM * * Initalize_Info sets up the status information at program start. * Show_Info copies the status template to the screen. * ******** Show_Info: bsr Clear_Screen_Center moveq #2,d0 bsr Set_Font move.w #192,d7 move.w d7,d1 moveq #8,d0 lea score_msg(pc),a0 bsr Display_String move.w d7,d1 moveq #42,d0 lea cash_msg(pc),a0 bsr Display_String move.w d7,d1 moveq #76,d0 lea shield_msg(pc),a0 bsr Display_String move.l plane0(a5),a0 moveq #26,d0 bra.s Crosshatch_Area score_msg: dc.b 'Score',0 cash_msg: dc.b 'Cash',0 shield_msg: dc.b 'Shield',0 ******************************************** DISPLAY SCREEN BUFFER Display_Screen: LEA 4(A5),A0 lea SCREEN_SIZE+4(a5),a3 move.l plane1(a5),a1 move.l plane0(a5),a2 MOVEQ #SCREEN_HEIGHT-1,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)+ lea 8(a0),a0 lea 8(a3),a3 lea 6(a1),A1 lea 6(a2),a2 DBF D0,LAB_0124 Initialize_Info: RTS ******************************************** CROSSHATCHING BACKGROUND Crosshatch_Area: moveq #-1,d1 \ol: moveq #29,d2 \il: move.l d1,(a0)+ dbra d2,\il dbra d0,\ol rts Prepare_Center: move.l plane0(a5),a0 moveq #26,d0 bsr.s Crosshatch_Area Clear_Screen_Central: ; clear inner 160x100 move.l plane0(a5),a0 lea 95(a0),a0 moveq #99,d0 \ol: moveq #19,d1 \il: clr.b (a0)+ dbra d1,\il lea 10(a0),a0 dbra d0,\ol rts ******************************************** CLEAR GAMEPLAY AREA Clear_Screen_Main: lea SCREEN_HEIGHT*32-4(a5),a0 \ lea SCREEN_SIZE(a0),a1 moveq #0,d0 move.l d0,d1 move.l d0,d2 move.l d0,d3 move.l d0,d4 move.l d0,d5 moveq #SCREEN_HEIGHT-1,d6 \cl: movem.l d0-d5,-(a0) lea -8(a0),a0 movem.l d0-d5,-(a1) lea -8(a1),a1 dbra d6,\cl rts Clear_Screen: ; clear left 160x100 move.l plane0(a5),a1 move.l plane1(a5),a0 add.w #SCREEN_HEIGHT*30-6,a0 add.w #SCREEN_HEIGHT*30-6,a1 moveq #0,d0 move.l d0,d1 move.l d0,d2 move.l d0,d3 move.l d0,d4 move.l d0,d5 moveq #SCREEN_HEIGHT-1,d6 \cl: movem.l d0-d5,-(a0) lea -6(a0),a0 movem.l d0-d5,-(a1) lea -6(a1),a1 dbra d6,\cl rts Clear_Screen_All: move.l plane0(a5),a1 move.l plane1(a5),a0 lea -330(a0),a0 lea -330(a1),a1 moveq #0,d0 move.w #959,d1 \l: move.l d0,(a1)+ move.l d0,(a0)+ dbra d1,\l rts Clear_Screen_Center: ; clera center 106 lines move.l plane0(a5),a1 move.l plane1(a5),a0 moveq #0,d0 move.w #SCREEN_HEIGHT*15-1,d1 \l: move.w d0,(a1)+ move.w d0,(a0)+ dbra d1,\l rts ******************************************* 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