**************************************************************************** **************************************************************************** ** ** Platinum Edition (TI-89 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 12, 2001 ** **************************************************************************** **************************************************************************** SCREEN_HEIGHT equ 95 SCREEN_TOP equ 22 ******************************************** 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) bsr Clear_Screen_Center move.l #(239<<16)+95,-(sp) move.l plane1(a5),-(sp) JSR_ROM PortSet lea 8(sp),sp rts ******************************************** DISPLAY GAME SCREEN Display_Game_Screen: bsr Display_Screen move.l plane1(a5),a1 add.w #16+SCREEN_HEIGHT*30,a1 lea score(a5),a0 moveq #3,d0 bsr Display_BCD move.l plane1(a5),a1 add.w #3+SCREEN_HEIGHT*30,a1 lea cash(a5),a0 moveq #3,d0 bsr Display_BCD move.l plane1(a5),a1 add.w #11+SCREEN_HEIGHT*30,a1 lea player_dmg+1(a5),a0 moveq #0,d0 bra Display_BCD ******************************************** PREPARE SCORE DISPLAY * * Initalize_Info sets up the status information at program start. * Show_Info copies the status template to the screen. * ******** Initialize_Info: pea message(pc) JSR_ROM ST_helpMsg addq.w #4,sp lea LCD_MEM+SCREEN_HEIGHT*30,a2 lea SCREEN_HEIGHT*32(a5),a0 moveq #4,d0 \lib1: moveq #3,d1 \lib2: move.l (a2)+,(a0)+ dbra d1,\lib2 clr.l (a0)+ lea 12(a0),a0 lea 14(a2),a2 dbra d0,\lib1 rts Show_Info: lea SCREEN_HEIGHT*32(a5),a0 move.l plane0(a5),a1 move.l plane1(a5),a2 add.w #SCREEN_HEIGHT*30,a1 add.w #SCREEN_HEIGHT*30,a2 moveq #4,d0 \a: moveq #4,d1 \b: move.l (a0),(a1)+ move.l (a0)+,(a2)+ dbra d1,\b lea 10(a1),a1 lea 10(a2),a2 lea 12(a0),a0 dbra d0,\a rts message: dc.b "Cash: $ - Shield: - Score:",0 EVEN ******************************************** DISPLAY SCREEN BUFFER Display_Screen: LEA 6(A5),A0 lea SCREEN_SIZE+6(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)+ lea 12(a0),a0 lea 12(a3),a3 lea 10(a1),A1 lea 10(a2),a2 DBF D0,LAB_0124 RTS ******************************************** CLEAR GAMEPLAY AREA Clear_Screen_Main: lea (SCREEN_HEIGHT-1)*32+26(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 moveq #SCREEN_HEIGHT-1,d5 Clear_Screen_Loop_: movem.l d0-d4,-(a0) lea -12(a0),a0 movem.l d0-d4,-(a1) lea -12(a1),a1 dbra d5,Clear_Screen_Loop_ rts Clear_Screen: Clear_Screen_Center: Clear_Screen_Central: move.l plane0(a5),a1 move.l plane1(a5),a0 add.w #2990,a1 add.w #2990,a0 moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 moveq #0,d4 moveq #99,d5 Clear_Screen_Loop: movem.l d0-d4,-(a0) lea -10(a0),a0 movem.l d0-d4,-(a1) lea -10(a1),a1 dbra d5,Clear_Screen_Loop 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 mulu #5,d1 lea digits(pc,d1.w),a2 moveq #4,d1 loop_copy: move.b (a2)+,d2 move.b d2,(a1) lea 30(a1),a1 dbra d1,loop_copy lea -150(a1),a1 move.b (a0)+,d1 and.w #$f,d1 mulu #5,d1 lea digits(pc,d1.w),a2 moveq #4,d1 loop_or: move.b (a2)+,d2 lsr.b #4,d2 or.b d2,(a1) lea 30(a1),a1 dbra d1,loop_or lea -149(a1),a1 dbra d0,Display_BCD rts digits: dc.b %01000000 dc.b %10100000 dc.b %10100000 dc.b %10100000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %10100000 dc.b %00100000 dc.b %01000000 dc.b %11100000 dc.b %11000000 dc.b %00100000 dc.b %11000000 dc.b %00100000 dc.b %11000000 dc.b %10100000 dc.b %10100000 dc.b %11100000 dc.b %00100000 dc.b %00100000 dc.b %11100000 dc.b %10000000 dc.b %11000000 dc.b %00100000 dc.b %11000000 dc.b %01100000 dc.b %10000000 dc.b %11100000 dc.b %10100000 dc.b %11100000 dc.b %11100000 dc.b %00100000 dc.b %00100000 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %10100000 dc.b %01000000 dc.b %10100000 dc.b %01000000 dc.b %11100000 dc.b %10100000 dc.b %11100000 dc.b %00100000 dc.b %11000000 dc.b %01000000 dc.b %10100000 dc.b %11100000 dc.b %10100000 dc.b %10100000 dc.b %11000000 dc.b %10100000 dc.b %11000000 dc.b %10100000 dc.b %11000000 dc.b %11100000 dc.b %10000000 dc.b %10000000 dc.b %10000000 dc.b %11100000 dc.b %11000000 dc.b %10100000 dc.b %10100000 dc.b %10100000 dc.b %11000000 dc.b %11100000 dc.b %10000000 dc.b %11100000 dc.b %10000000 dc.b %11100000 dc.b %11100000 dc.b %10000000 dc.b %11100000 dc.b %10000000 dc.b %10000000