Среда, 18.10.2017, 23:09

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Языки программирования » Ассемблер & Микроассемблер » Листинги подпрограмм » Вывод спрайтов (Для языков семейств «Turbo» и «Micro».)
Вывод спрайтов
-=RUS=-Дата: Понедельник, 31.03.2014, 21:31 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: 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

 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Языки программирования » Ассемблер & Микроассемблер » Листинги подпрограмм » Вывод спрайтов (Для языков семейств «Turbo» и «Micro».)
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225