;Scrolling subroutine demo ;By Matt Teiken ;bbxx@hotmail.com ;8/10/99 ;I think that these routines are the quickest way to scroll the screen memory but ; if anyone knows how to improve them then please tell me. include "tios.h" xdef _main xdef _ti89 ; BIT ; 7 6 5 4 3 2 1 0 ;---------------------------------------------- mask0 equ %11111110 ;|Alpha|Diam. |Shift |2nd |Right |Down |Left |Up mask1 equ %11111101 ;|F5 |Clear |^ |/ |* |- |+ |Enter mask2 equ %11111011 ;|F4 |Backspc|T |, |9 |6 |3 |(-) mask3 equ %11110111 ;|F3 |Catalog|Z |( |8 |5 |2 |. mask4 equ %11101111 ;|F2 |Mode |Y |) |7 |4 |1 |0 mask5 equ %11011111 ;|F1 |Home |X |= || |EE |STO |Apps mask6 equ %10111111 ;| | | | | | | |Esc _main: move.w #0,exitflag loop: bsr GetInput cmp.w #1,exitflag beq break bra loop GetInput: bsr GetKeyStat btst.b #3,keystat bne CheckLeft bsr MoveRight CheckLeft: btst.b #1,keystat bne CheckUp bsr MoveLeft CheckUp: btst.b #0,keystat bne CheckDown bsr MoveUp CheckDown: btst.b #2,keystat bne CheckEsc bsr MoveDown CheckEsc: btst.b #0,keystat+6 bne DoneKeys move.w #1,exitflag DoneKeys: rts MoveRight: move.l #$4c00,a0 move.w #99,d0 ScrollR: move.l (a0),d1 roxr.l #1,d1 move.l d1,(a0)+ ;unroll... move.l (a0),d1 roxr.l #1,d1 move.l d1,(a0)+ move.l (a0),d1 roxr.l #1,d1 move.l d1,(a0)+ move.l (a0),d1 roxr.l #1,d1 move.l d1,(a0)+ move.l (a0),d1 roxr.l #1,d1 move.l d1,(a0)+ add.l #10,a0 dbra.w d0,ScrollR rts MoveLeft: move.l #$4c00+2986,a0 move.w #99,d0 ScrollL: move.l (a0),d1 roxl.l #1,d1 move.l d1,(a0) sub.l #4,a0 ;unroll... move.l (a0),d1 roxl.l #1,d1 move.l d1,(a0) sub.l #4,a0 move.l (a0),d1 roxl.l #1,d1 move.l d1,(a0) sub.l #4,a0 move.l (a0),d1 roxl.l #1,d1 move.l d1,(a0) sub.l #4,a0 move.l (a0),d1 roxl.l #1,d1 move.l d1,(a0) sub.l #4,a0 sub.l #10,a0 dbra.w d0,ScrollL rts MoveUp: move.l #$4c00+2986-30,a0 move.w #98,d0 ScrollU: move.l (a0),30(a0) sub.l #4,a0 ;unroll... move.l (a0),30(a0) sub.l #4,a0 move.l (a0),30(a0) sub.l #4,a0 move.l (a0),30(a0) sub.l #4,a0 move.l (a0),30(a0) sub.l #14,a0 dbra.w d0,ScrollU rts MoveDown: move.l #$4c00,a0 move.w #98,d0 ScrollD: move.l 30(a0),(a0)+ ;unroll... move.l 30(a0),(a0)+ move.l 30(a0),(a0)+ move.l 30(a0),(a0)+ move.l 30(a0),(a0)+ add.l #10,a0 dbra.w d0,ScrollD rts GetKeyStat: movem.l d0-d1/a0,-(a7) lea keystat(PC),a0 move.w #$FFFE,d0 moveq #6,d1 GetKeys: move.w d0,$600018 nop nop nop nop nop nop nop nop nop nop nop nop move.b $60001B,(a0)+ rol.w #1,d0 dbra d1,GetKeys movem.l (a7)+,d0-d1/a0 break: rts exitflag dc.w 0 keystat ds.b 7 end