-=RUS=- | Дата: Понедельник, 31.03.2014, 21:31 | Сообщение # 1 |
 Генералиссимус
Группа: Администраторы
Сообщений: 352
Статус: Offline
| ; ВЫВОД СПРАЙТА БЕЗ МОРГАНИЯ ; © by Alexsoft 21.01.96
DELAY=2000 ;Параметр задержки PRM=320 ;Адрес блока параметров м-на SPRITE=10000 ;Адрес выводимого спрайта
JMP BEGIN
; Data
X: .WORD 0 Y: .WORD 0 WD: .WORD 0 H: .WORD 0 DELX1: .WORD 0 DELX2: .WORD 0 DELXM: .WORD 0 DELY1: .WORD 0 DELY2: .WORD 0 STEP: .WORD 1 ;Шаг спрайта
; STATUS - Блок параметров спрайта: ; X-предидущее, X-текущее, Y-предидущее, Y-текущее, ; ширина(в байтах, здесь <15), высота(в строках)
STATUS: .WORD 24.,24.,0,0,14.,64. STAB: .WORD S0,S1,S2,S3,S4,S5,S6,S7 STAB1: .WORD SBC0,SBC1,SBC2,SBC3,SBC4,SBC5,SBC6,SBC7,SBC8 .WORD SBC9,SBC10,SBC11,SBC12,SBC13,SBC14,SBC15 STAB2: .WORD SBS0,SBS1,SBS2,SBS3,SBS4,SBS5,SBS6,SBS7,SBS8 .WORD SBS9,SBS10,SBS11,SBS12,SBS13,SBS14,SBS15 .EVEN
FN: .ASCIZ/SPRT.BBD/ .EVEN FON: .BLKB 2200 ; Буфер обмена .EVEN
BEGIN: MOV #100000,@#4 ; СТОП-Выход BIS #100,@#177660 ; Запретить прерывание от к-ры MOV #SPRITE,R2 MOV #FN,R3 CALL LOADF ; Загрузить спрайт MOV #1330,@#177664 ; Начало экрана уст. на 40000 CALL CLEAR ; Очистить экран 1$: CALL CTRLCR ; Выводим спрайт CALL DEL ; Задержка BR 1$
CTRLCR: MOV #STATUS,R1 CALL SPRPS ; Определяем новую позицию спрайта MOV #SPRITE,R4 MOV #STATUS,R5 CALL MVSPR ; Выводим спрайт 3$: RET
SPRPS: MOV 6(R1),4(R1) ADD @#STEP,6(R1) TST 6(R1) BGE 1$ MOV 4(R1),6(R1) NEG @#STEP BR 5$ 1$: MOV 6(R1),R2 ADD 12(R1),R2 CMP R2,#377 BLOS 5$ MOV 4(R1),6(R1) NEG @#STEP 5$: RET
MVSPR: MOV R4,-(SP) CALL AREA MOV #FON,R4 CALL RFON MOV (SP)+,R4 MOV R1,-(SP) MOV R4,R1 MOV R5,R3 MOV #FON,R0 CALL MODFON MOV (SP)+,R4 MOV #FON,R1 CALL WFON RET
AREA: MOV 10(R5),@#WD CMP (R5),2(R5) BLO 1$ MOV 2(R5),@#X SUB 2(R5),@#WD ADD (R5),@#WD BR 2$ 1$: MOV (R5),@#X SUB (R5),@#WD ADD 2(R5),@#WD 2$: MOV 12(R5),@#H CMP 4(R5),6(R5) BLO 3$ MOV 6(R5),@#Y SUB 6(R5),@#H ADD 4(R5),@#H BR 4$ 3$: MOV 4(R5),@#Y SUB 4(R5),@#H ADD 6(R5),@#H 4$: MOV (R5),@#DELX1 SUB @#X,@#DELX1 MOV 4(R5),@#DELY1 SUB @#Y,@#DELY1 MOV 2(R5),@#DELX2 SUB @#X,@#DELX2 MOV 6(R5),@#DELY2 SUB @#Y,@#DELY2 CMP @#DELX1,@#DELX2 BLO 6$ MOV @#DELX1,@#DELXM BR 5$ 6$: MOV @#DELX2,@#DELXM 5$: BIT @#X,#1 BEQ 10$ DEC @#X INC @#WD INC @#DELX1 INC @#DELX2 INC @#DELXM 10$: MOV @#WD,R4 ADD @#X,R4 BIT R4,#1 BEQ 20$ INC @#WD INC @#DELXM BR 30$ 20$: CMP 10(R5),@#WD BLO 30$ ADD #2,@#WD ADD #2,@#DELXM 30$: RET
RFON: MOV @#X,R0 MOV @#Y,R1 MOV #STAB,R2 ADD @#WD,R2 SUB #2,R2 MOV (R2),R2 MOV @#H,R3 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ADD R0,R1 ADD #40000,R1 MOV R1,-(SP) MOV #100,R0 SUB @#WD,R0 1$: CALL (R2) ADD R0,R1 SOB R3,1$ MOV (SP)+,R1 RET
MODFON: MOV R0,-(SP) TST @#DELY1 BEQ 1$ MOV @#DELY1,R5 2$: ADD @#WD,R0 SOB R5,2$ 1$: ADD @#DELX1,R0 MOV 12(R3),R5 MOV #STAB1,R2 ADD 10(R3),R2 ADD 10(R3),R2 SUB #2,R2 MOV (R2),R2 3$: CALL (R2) ADD @#DELXM,R0 SOB R5,3$ MOV (SP)+,R0 TST @#DELY2 BEQ 4$ MOV @#DELY2,R5 5$: ADD @#WD,R0 SOB R5,5$ 4$: ADD @#DELX2,R0 MOV 12(R3),R5 MOV #STAB2,R2 ADD 10(R3),R2 ADD 10(R3),R2 SUB #2,R2 MOV (R2),R2 6$: CALL (R2) ADD @#DELXM,R0 SOB R5,6$ RET
WFON: MOV #STAB,R2 ADD @#WD,R2 SUB #2,R2 MOV (R2),R2 MOV @#H,R3 MOV #100,R0 SUB @#WD,R0 1$: CALL (R2) ADD R0,R4 SOB R3,1$ RET
S7: MOV (R1)+,(R4)+ S6: MOV (R1)+,(R4)+ S5: MOV (R1)+,(R4)+ S4: MOV (R1)+,(R4)+ S3: MOV (R1)+,(R4)+ S2: MOV (R1)+,(R4)+ S1: MOV (R1)+,(R4)+ S0: MOV (R1)+,(R4)+ RET
SBC15: BICB (R1)+,(R0)+ SBC14: BICB (R1)+,(R0)+ SBC13: BICB (R1)+,(R0)+ SBC12: BICB (R1)+,(R0)+ SBC11: BICB (R1)+,(R0)+ SBC10: BICB (R1)+,(R0)+ SBC9: BICB (R1)+,(R0)+ SBC8: BICB (R1)+,(R0)+ SBC7: BICB (R1)+,(R0)+ SBC6: BICB (R1)+,(R0)+ SBC5: BICB (R1)+,(R0)+ SBC4: BICB (R1)+,(R0)+ SBC3: BICB (R1)+,(R0)+ SBC2: BICB (R1)+,(R0)+ SBC1: BICB (R1)+,(R0)+ SBC0: BICB (R1)+,(R0)+ RET
SBS15: BISB (R4)+,(R0)+ SBS14: BISB (R4)+,(R0)+ SBS13: BISB (R4)+,(R0)+ SBS12: BISB (R4)+,(R0)+ SBS11: BISB (R4)+,(R0)+ SBS10: BISB (R4)+,(R0)+ SBS9: BISB (R4)+,(R0)+ SBS8: BISB (R4)+,(R0)+ SBS7: BISB (R4)+,(R0)+ SBS6: BISB (R4)+,(R0)+ SBS5: BISB (R4)+,(R0)+ SBS4: BISB (R4)+,(R0)+ SBS3: BISB (R4)+,(R0)+ SBS2: BISB (R4)+,(R0)+ SBS1: BISB (R4)+,(R0)+ SBS0: BISB (R4)+,(R0)+ RET
DEL: MOV #DELAY,R0 1$: SOB R0,1$ RET
LOADF: MOV R0,-(SP) MOV R1,-(SP) MOV R3,-(SP) MOV #PRM,R0 MOV #3,(R0)+ MOV R2,(R0)+ MOV #PRM+6,R0 1$: MOVB (R3)+,(R0)+ TSTB (R3) BNE 1$ 2$: MOVB #40,(R0)+ CMP R0,#PRM+26 BLO 2$ MOV #PRM,R1 EMT 36 MOV (SP)+,R3 MOV (SP)+,R1 MOV (SP)+,R0 RET
CLEAR: MOV #20000,R3 MOV #40000,R2 1$: CLR (R2)+ SOB R3,1$ RET
.END
|
|
| |