;====================================================== ; Demo ;====================================================== ; A graphics demo for the TI-85. ;------------------------------------------------------ TEXT_ADDR .EQU $80DF ; Addr. of text memory VIDEO_ADDR .EQU $8641 ; Addr. of video memory DISPLAY_ADDR .EQU $3C88 ; Addr. to update display QUIT_ADDR .EQU $0462 ; Addr. of QUIT LINE_LEN .EQU $15 ; # of chars on 1 line .ORG VIDEO_ADDR ; ; Set up the CUSTOM menu data structure ; .BYTE $41, $00, $07, $C3 .WORD Start .TEXT "Demo" .BYTE $00 Start: LD A, $03 OUT ($05), A LD B, $00 LD HL, VIDEO_ADDR+$1D0 LD (Left_Ptr), HL LD HL, $FF00 LD (Left_Bitmap), HL LD HL, VIDEO_ADDR+$1DF LD (Right_Ptr), HL LD HL, $00FF LD (Right_Bitmap), HL Draw_loop: ; ; Draw left blobs ; LD HL, (Left_Ptr) LD DE, (Left_Bitmap) SRL D RR E PUSH BC PUSH HL LD B, $0C Left_Blob_loop: LD (HL), D INC HL LD (HL), E PUSH BC LD BC, $0020 ADD HL, BC POP BC DJNZ Left_Blob_loop POP HL POP BC CALL Delay CALL Update_display LD A, D CP $00 JR NZ, Left_Skip INC HL LD DE, $FF00 Left_Skip: LD (Left_Ptr), HL LD (Left_Bitmap), DE ; ; Draw right blobs ; LD HL, (Right_Ptr) LD DE, (Right_Bitmap) SLA E RL D PUSH BC PUSH HL LD B, $0C Right_Blob_loop: LD (HL), D INC HL LD (HL), E PUSH BC LD BC, $001E ADD HL, BC POP BC DJNZ Right_Blob_loop POP HL POP BC CALL Delay CALL Update_display LD A, E CP $00 JR NZ, Right_Skip DEC HL LD DE, $00FF Right_Skip: LD (Right_Ptr), HL LD (Right_Bitmap), DE DJNZ Draw_loop ; ; Clean up the graphics display ; LD A, $00 LD HL, VIDEO_ADDR+$1C0 LD B, $02 Clean_loop_1: PUSH BC LD B, $00 Clean_loop_2: LD (HL), A INC HL DJNZ Clean_loop_2 POP BC DJNZ Clean_loop_1 CALL Update_display JP QUIT_ADDR Left_Ptr .WORD $0000 Left_Bitmap .WORD $0000 Right_Ptr .WORD $0000 Right_Bitmap .WORD $0000 ;------------------------------------------------------ ; Write the contents of the video buffer at VIDEO_ADDR ; to the LCD. ;------------------------------------------------------ Update_display: PUSH AF PUSH BC PUSH DE PUSH HL CALL DISPLAY_ADDR RES 0,(IY+7) POP HL POP DE POP BC POP AF RET ;------------------------------------------------------ ; Produce a small delay ;------------------------------------------------------ Delay: PUSH BC LD B, $10 Delay_loop_1: PUSH BC LD B, $FF Delay_loop_2: NOP DJNZ Delay_loop_2 POP BC DJNZ Delay_loop_1 POP BC RET .END