;--------------------------------------------------------------------------- ; Machine Language Program #3: A Graphics Demo ;--------------------------------------------------------------------------- I have been studying how to do graphics on the TI-85, and wrote a little machine language program to demonstrate the method. As usual, just select "Demo" from the CUSTOM menu to run the program. -David Boozer (adb2y@virginia.edu) BTW: If you look at the machine language code at the top of the display, you can actually see the data shifting around in the four variables! ;--------------------------------------------------------------------------- ; The Source Code for "Demo" ;--------------------------------------------------------------------------- 0001 0000 ;====================================================== 0002 0000 ; Demo 0003 0000 ;====================================================== 0004 0000 ; A graphics demo for the TI-85. 0005 0000 ;------------------------------------------------------ 0006 0000 0007 0000 TEXT_ADDR .EQU $80DF ; Addr. of text memory 0008 0000 VIDEO_ADDR .EQU $8641 ; Addr. of video memory 0009 0000 DISPLAY_ADDR .EQU $3C88 ; Addr. to update display 0010 0000 QUIT_ADDR .EQU $0462 ; Addr. of QUIT 0011 0000 LINE_LEN .EQU $15 ; # of chars on 1 line 0012 0000 0013 8641 .ORG VIDEO_ADDR 0014 8641 0015 8641 ; 0016 8641 ; Set up the CUSTOM menu data structure 0017 8641 ; 0018 8641 41 00 07 C3 .BYTE $41, $00, $07, $C3 0019 8645 4C 86 .WORD Start 0020 8647 44 65 6D 6F .TEXT "Demo" 0021 864B 00 .BYTE $00 0022 864C 0023 864C Start: 0024 864C 3E 03 LD A, $03 0025 864E D3 05 OUT ($05), A 0026 8650 0027 8650 06 00 LD B, $00 0028 8652 21 11 88 LD HL, VIDEO_ADDR+$1D0 0029 8655 22 E7 86 LD (Left_Ptr), HL 0030 8658 21 00 FF LD HL, $FF00 0031 865B 22 E9 86 LD (Left_Bitmap), HL 0032 865E 21 20 88 LD HL, VIDEO_ADDR+$1DF 0033 8661 22 EB 86 LD (Right_Ptr), HL 0034 8664 21 FF 00 LD HL, $00FF 0035 8667 22 ED 86 LD (Right_Bitmap), HL 0036 866A Draw_loop: 0037 866A ; 0038 866A ; Draw left blobs 0039 866A ; 0040 866A 2A E7 86 LD HL, (Left_Ptr) 0041 866D ED 5B E9 86 LD DE, (Left_Bitmap) 0042 8671 0043 8671 CB 3A SRL D 0044 8673 CB 1B RR E 0045 8675 0046 8675 C5 PUSH BC 0047 8676 E5 PUSH HL 0048 8677 06 0C LD B, $0C 0049 8679 Left_Blob_loop: 0050 8679 72 LD (HL), D 0051 867A 23 INC HL 0052 867B 73 LD (HL), E 0053 867C C5 PUSH BC 0054 867D 01 20 00 LD BC, $0020 0055 8680 09 ADD HL, BC 0056 8681 C1 POP BC 0057 8682 10 F5 DJNZ Left_Blob_loop 0058 8684 E1 POP HL 0059 8685 C1 POP BC 0060 8686 0061 8686 CD FF 86 CALL Delay 0062 8689 CD EF 86 CALL Update_display 0063 868C 0064 868C 7A LD A, D 0065 868D FE 00 CP $00 0066 868F 20 04 JR NZ, Left_Skip 0067 8691 23 INC HL 0068 8692 11 00 FF LD DE, $FF00 0069 8695 Left_Skip: 0070 8695 22 E7 86 LD (Left_Ptr), HL 0071 8698 ED 53 E9 86 LD (Left_Bitmap), DE 0072 869C 0073 869C ; 0074 869C ; Draw right blobs 0075 869C ; 0076 869C 2A EB 86 LD HL, (Right_Ptr) 0077 869F ED 5B ED 86 LD DE, (Right_Bitmap) 0078 86A3 0079 86A3 CB 23 SLA E 0080 86A5 CB 12 RL D 0081 86A7 0082 86A7 C5 PUSH BC 0083 86A8 E5 PUSH HL 0084 86A9 06 0C LD B, $0C 0085 86AB Right_Blob_loop: 0086 86AB 72 LD (HL), D 0087 86AC 23 INC HL 0088 86AD 73 LD (HL), E 0089 86AE C5 PUSH BC 0090 86AF 01 1E 00 LD BC, $001E 0091 86B2 09 ADD HL, BC 0092 86B3 C1 POP BC 0093 86B4 10 F5 DJNZ Right_Blob_loop 0094 86B6 E1 POP HL 0095 86B7 C1 POP BC 0096 86B8 0097 86B8 CD FF 86 CALL Delay 0098 86BB CD EF 86 CALL Update_display 0099 86BE 0100 86BE 7B LD A, E 0101 86BF FE 00 CP $00 0102 86C1 20 04 JR NZ, Right_Skip 0103 86C3 2B DEC HL 0104 86C4 11 FF 00 LD DE, $00FF 0105 86C7 Right_Skip: 0106 86C7 22 EB 86 LD (Right_Ptr), HL 0107 86CA ED 53 ED 86 LD (Right_Bitmap), DE 0108 86CE 0109 86CE 10 9A DJNZ Draw_loop 0110 86D0 ; 0111 86D0 ; Clean up the graphics display 0112 86D0 ; 0113 86D0 3E 00 LD A, $00 0114 86D2 21 01 88 LD HL, VIDEO_ADDR+$1C0 0115 86D5 06 02 LD B, $02 0116 86D7 Clean_loop_1: 0117 86D7 C5 PUSH BC 0118 86D8 06 00 LD B, $00 0119 86DA Clean_loop_2: 0120 86DA 77 LD (HL), A 0121 86DB 23 INC HL 0122 86DC 10 FC DJNZ Clean_loop_2 0123 86DE C1 POP BC 0124 86DF 10 F6 DJNZ Clean_loop_1 0125 86E1 CD EF 86 CALL Update_display 0126 86E4 0127 86E4 C3 62 04 JP QUIT_ADDR 0128 86E7 0129 86E7 00 00 Left_Ptr .WORD $0000 0130 86E9 00 00 Left_Bitmap .WORD $0000 0131 86EB 00 00 Right_Ptr .WORD $0000 0132 86ED 00 00 Right_Bitmap .WORD $0000 0133 86EF 0134 86EF ;------------------------------------------------------ 0135 86EF ; Write the contents of the video buffer at VIDEO_ADDR 0136 86EF ; to the LCD. 0137 86EF ;------------------------------------------------------ 0138 86EF Update_display: 0139 86EF F5 PUSH AF 0140 86F0 C5 PUSH BC 0141 86F1 D5 PUSH DE 0142 86F2 E5 PUSH HL 0143 86F3 CD 88 3C CALL DISPLAY_ADDR 0144 86F6 FD CB 07 86 RES 0,(IY+7) 0145 86FA E1 POP HL 0146 86FB D1 POP DE 0147 86FC C1 POP BC 0148 86FD F1 POP AF 0149 86FE C9 RET 0150 86FF 0151 86FF ;------------------------------------------------------ 0152 86FF ; Produce a small delay 0153 86FF ;------------------------------------------------------ 0154 86FF Delay: 0155 86FF C5 PUSH BC 0156 8700 06 10 LD B, $10 0157 8702 Delay_loop_1: 0158 8702 C5 PUSH BC 0159 8703 06 FF LD B, $FF 0160 8705 Delay_loop_2: 0161 8705 00 NOP 0162 8706 10 FD DJNZ Delay_loop_2 0163 8708 C1 POP BC 0164 8709 10 F7 DJNZ Delay_loop_1 0165 870B C1 POP BC 0166 870C C9 RET 0167 870D 0168 870D .END tasm: Number of errors = 0 ;--------------------------------------------------------------------------- ; The DEMO.85B File ;--------------------------------------------------------------------------- begin 644 demo.85b M*BI423@U*BH:#`!"86-K=7`@9FEL92!D871E9"`P.2\P,R\Y-"P@,3(Z-38` M+@!5)_5=KI+W"`D`L0@=$@`C`/>+L0@``!`!``````P(```P$@`````%```` M`````````````````&.$;81WA(&$BX25A``````````````````````````` M````@@```/P```````````#\8H,84P<8``#_^Q,(F6DXF5<``/P````````` M``#\````````````_&*#&%,'&```__L3")EI.)E7@`'\$``````````!_!`` M`````````/P0````````@`'\$``````````!_!```````````/P0```````` M`/W[$`````````#[^Q```````````/Q```````````#\0`````````#_^Q6' M,!6',!8`__LR)8!D46$I``#\8P``````````_#$```````!1``"``?P0```` M``````'\$```````````_!````````"``?P0``````````'\$``````````` M_!````````"``?P0``````````'\$````````%L`````_````````````/QB M@QA3!Q@``/_[$PB9:3B95X`!_!```````````?P0``````````#\$``````` M`(`!_!```````````?P0``````````#\$````````%L`````_``````````` M`/QB@QA3!Q@``/_[$PB9:3B95X`!_!```````````?P0``````````#\$``` M`````(`!_!```````````?P0``````````#\$````````'$```#]^Q`````` M`````/P```````````#\````````````_&*#&%,'&```__L3")EI.)E7@`'\ M$``````````!_!```````````/P0````````@`'\$``````````!_!`````` M`````/P0`````````!``]_\``/?_``#W_P`````````````````````````` M```````````````````````````````````````````````````````````` M````````````````````````````00`'PTR&1&5M;P`^`],%!@`A$8@BYX8A M`/\BZ88A((@BZX8A_P`B[88JYX;M6^F&RSK+&\7E!@QR(W/%`2``"<$0]>'! MS?^&S>^&>OX`(`0C$0#_(N>&[5/IABKKANU;[8;+(\L2Q>4&#'(C<\4!'@`) MP1#UX<'-_X;-[X9[_@`@!"L1_P`BZX;M4^V&$)H^`"$!B`8"Q08`=R,0_,$0 M]LWOAL-B!```````````]<75Y