; Program Written in HAL86 #include ti-86.h #define TI86-OS MAX_X = 127 MAX_Y = 63 MAX_COL = 20 MAX_ROW = 7 .org $D748 ; SET GRAPHDRAW,(IY+GRAPHFLAGS) ;*** TI gives no info on flags! *** ; CODE ;That's My name, don't wear it out! Dave W. BIOSERRORS@aol.com ; ;Declarations ; ; line 5 : byte x1 var_x1 = PLOTSSCREEN + 0 ; line 6 : byte y1 var_y1 = PLOTSSCREEN + 1 ; line 7 : byte a1 var_a1 = PLOTSSCREEN + 2 ; line 8 : byte b1 var_b1 = PLOTSSCREEN + 3 ; line 9 : byte x2 var_x2 = PLOTSSCREEN + 4 ; line 10 : byte y2 var_y2 = PLOTSSCREEN + 5 ; line 11 : byte a2 var_a2 = PLOTSSCREEN + 6 ; line 12 : byte b2 var_b2 = PLOTSSCREEN + 7 ; line 13 : byte x3 var_x3 = PLOTSSCREEN + 8 ; line 14 : byte y3 var_y3 = PLOTSSCREEN + 9 ; line 15 : byte a3 var_a3 = PLOTSSCREEN + 10 ; line 16 : byte b3 var_b3 = PLOTSSCREEN + 11 ; line 17 : byte x4 var_x4 = PLOTSSCREEN + 12 ; line 18 : byte y4 var_y4 = PLOTSSCREEN + 13 ; line 19 : byte a4 var_a4 = PLOTSSCREEN + 14 ; line 20 : byte b4 var_b4 = PLOTSSCREEN + 15 ; line 21 : byte sub var_sub = PLOTSSCREEN + 16 ; line 22 : word time var_time = PLOTSSCREEN + 17 ; ;Initialization ; ; line 26 : a1 = 1 LD A,1 LD (var_a1),A ; line 27 : b1 = 1 LD A,1 LD (var_b1),A ; line 28 : x1 = 1 LD A,1 LD (var_x1),A ; line 29 : y1 = 1 LD A,1 LD (var_y1),A ; line 30 : a2 = -1 LD A,-1 LD (var_a2),A ; line 31 : b2 = 1 LD A,1 LD (var_b2),A ; line 32 : x2 = 5 LD A,5 LD (var_x2),A ; line 33 : y2 = 6 LD A,6 LD (var_y2),A ; line 34 : a3 = -1 LD A,-1 LD (var_a3),A ; line 35 : b3 = 1 LD A,1 LD (var_b3),A ; line 36 : x3 = 7 LD A,7 LD (var_x3),A ; line 37 : y3 = 4 LD A,4 LD (var_y3),A ; line 38 : a4 = -1 LD A,-1 LD (var_a4),A ; line 39 : b4 = -1 LD A,-1 LD (var_b4),A ; line 40 : x4 = 103 LD A,103 LD (var_x4),A ; line 41 : y4 = 29 LD A,29 LD (var_y4),A ; line 42 : sub = 0 LD A,0 LD (var_sub),A ; line 43 : time = 0000 LD HL,0000 LD (var_time),HL ; ;Main Loop ; Loop: ; line 48 : cls CALL sys_clrlcdfull ; line 49 : normal RES 3,(IY+05) ; line 50 : disp text x1 y1 "Dave" LD A,(var_x1) LD H,A LD A,(var_y1) LD L,A LD (CURROW),HL LD HL,STR0 CALL SYS_PUTS ; line 51 : disp menu x3 y3 "Dave" LD A,(var_x3) LD L,A LD A,(var_y3) LD H,A LD (PENCOL),HL LD HL,STR1 CALL SYS_VPUTS ; line 52 : reverse SET 3,(IY+05) ; line 53 : disp text x2 y2 "Dave" LD A,(var_x2) LD H,A LD A,(var_y2) LD L,A LD (CURROW),HL LD HL,STR2 CALL SYS_PUTS ; line 54 : disp menu x4 y4 "Dave" LD A,(var_x4) LD L,A LD A,(var_y4) LD H,A LD (PENCOL),HL LD HL,STR3 CALL SYS_VPUTS ; line 55 : if ((x1 == 0) or (x1 == 17)) LD A,(var_x1) LD D,A LD A,17 CALL sys_test_equalb PUSH HL LD A,(var_x1) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_1 ; line 56 : sub = (a1 * 2) LD A,(var_a1) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 57 : a1 = (a1 - sub) LD A,(var_a1) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_a1),A ; line 58 : endif if_not_true_1: ; line 59 : if ((y1 == 0) or (y1 == 7)) LD A,(var_y1) LD D,A LD A,7 CALL sys_test_equalb PUSH HL LD A,(var_y1) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_2 ; line 60 : sub = (b1 * 2) LD A,(var_b1) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 61 : b1 = (b1 - sub) LD A,(var_b1) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_b1),A ; line 62 : endif if_not_true_2: ; line 63 : x1 = (x1 + a1) LD A,(var_x1) LD D,A LD A,(var_a1) ADD A,D LD L,A ld A,L LD (var_x1),A ; line 64 : y1 = (y1 + b1) LD A,(var_y1) LD D,A LD A,(var_b1) ADD A,D LD L,A ld A,L LD (var_y1),A ; line 65 : if ((x2 == 0) or (x2 == 17)) LD A,(var_x2) LD D,A LD A,17 CALL sys_test_equalb PUSH HL LD A,(var_x2) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_3 ; line 66 : sub = (a2 * 2) LD A,(var_a2) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 67 : a2 = (a2 - sub) LD A,(var_a2) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_a2),A ; line 68 : endif if_not_true_3: ; line 69 : if ((y2 == 0) or (y2 == 7)) LD A,(var_y2) LD D,A LD A,7 CALL sys_test_equalb PUSH HL LD A,(var_y2) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_4 ; line 70 : sub = (b2 * 2) LD A,(var_b2) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 71 : b2 = (b2 - sub) LD A,(var_b2) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_b2),A ; line 72 : endif if_not_true_4: ; line 73 : x2 = (x2 + a2) LD A,(var_x2) LD D,A LD A,(var_a2) ADD A,D LD L,A ld A,L LD (var_x2),A ; line 74 : y2 = (y2 + b2) LD A,(var_y2) LD D,A LD A,(var_b2) ADD A,D LD L,A ld A,L LD (var_y2),A ; line 75 : if ((x3 == 0) or (x3 == 113)) LD A,(var_x3) LD D,A LD A,113 CALL sys_test_equalb PUSH HL LD A,(var_x3) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_5 ; line 76 : sub = (a3 * 2) LD A,(var_a3) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 77 : a3 = (a3 - sub) LD A,(var_a3) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_a3),A ; line 78 : endif if_not_true_5: ; line 79 : if ((y3 == 0) or (y3 == 58)) LD A,(var_y3) LD D,A LD A,58 CALL sys_test_equalb PUSH HL LD A,(var_y3) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_6 ; line 80 : sub = (b3 * 2) LD A,(var_b3) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 81 : b3 = (b3 - sub) LD A,(var_b3) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_b3),A ; line 82 : endif if_not_true_6: ; line 83 : x3 = (x3 + a3) LD A,(var_x3) LD D,A LD A,(var_a3) ADD A,D LD L,A ld A,L LD (var_x3),A ; line 84 : y3 = (y3 + b3) LD A,(var_y3) LD D,A LD A,(var_b3) ADD A,D LD L,A ld A,L LD (var_y3),A ; line 85 : if ((x4 == 0) or (x4 == 113)) LD A,(var_x4) LD D,A LD A,113 CALL sys_test_equalb PUSH HL LD A,(var_x4) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_7 ; line 86 : sub = (a4 * 2) LD A,(var_a4) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 87 : a4 = (a4 - sub) LD A,(var_a4) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_a4),A ; line 88 : endif if_not_true_7: ; line 89 : if ((y4 == 0) or (y4 == 58)) LD A,(var_y4) LD D,A LD A,58 CALL sys_test_equalb PUSH HL LD A,(var_y4) LD D,A LD A,0 CALL sys_test_equalb ld A,L LD D,A POP HL ld A,L OR D LD L,A ld A,L CP 0 JP Z,if_not_true_8 ; line 90 : sub = (b4 * 2) LD A,(var_b4) LD H,0 LD L,A LD D,H LD E,L LD A,2 LD H,0 LD L,A CALL sys_mulemw ld A,L LD (var_sub),A ; line 91 : b4 = (b4 - sub) LD A,(var_b4) LD E,A LD A,(var_sub) LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_b4),A ; line 92 : endif if_not_true_8: ; line 93 : x4 = (x4 + a4) LD A,(var_x4) LD D,A LD A,(var_a4) ADD A,D LD L,A ld A,L LD (var_x4),A ; line 94 : y4 = (y4 + b4) LD A,(var_y4) LD D,A LD A,(var_b4) ADD A,D LD L,A ld A,L LD (var_y4),A ; ;Slow-Down & quit if they user wants ; ; line 98 : for time = 0000 to 0500 LD HL,0000 LD (var_time),HL forloop_0: ; line 99 : if ((readkey) > 0) CALL SYS_GETK LD L,A ld A,L LD D,A LD A,0 CALL sys_test_greatb ld A,L CP 0 JP Z,if_not_true_9 ; line 100 : normal RES 3,(IY+05) RET ; line 102 : endif if_not_true_9: ; line 103 : next LD HL,(var_time) INC HL LD (var_time),HL DEC HL LD D,H LD E,L LD HL,0500 CALL sys_test_lessw LD A,0 CP L JP NZ,forloop_0 ; line 104 : goto Loop JP Loop ; DATA STR0: .db "Dave",0 STR1: .db "Dave",0 STR2: .db "Dave",0 STR3: .db "Dave",0 sys_test_equalb: CP D JR NZ,equalb_no LD L,1 JR equalb_end equalb_no: LD L,0 equalb_end: RET sys_mulemw: LD C,L LD B,H LD HL,0000 LD A,15 sys_MLP: SLA E RL D JR NC, sys_MLP1 ADD HL,BC sys_MLP1: ADD HL,HL DEC A JR NZ, sys_MLP OR D RET P ADD HL,BC RET sys_test_greatb: CP D JR C,sys_greatb_no LD L,0 JR sys_greatb_end sys_greatb_no LD L,1 sys_greatb_end RET sys_test_lessw: LD A,H CP D JR C,sys_lessw_no JR NZ,sys_lessw_yes LD A,L CP E JR C,sys_lessw_no JR Z,sys_lessw_no sys_lessw_yes: LD L,1 JR sys_lessw_end sys_lessw_no: LD L,0 sys_lessw_end: RET .end