Login

Subversion Repositories NedoOS

Rev

Rev 1124 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;**** HЛО-2. Дьяволы бездны ****
;8F80-xCONV(128)
;9000-теневой экран(6k)
;A800-теневые атрибуты(768)  (128-буф1)
;AB00-MAN+ALIEN(1024)
;AF80-vSIZE(128)
;AF00-xATR(128)
;B000-истребитель(2k) (0,1,2-15)
;B800-НЛО(6k) (16-63)
;D000-ландшафт(4k) (64-95)
;E000-1й этаж(4k)
;F000-2й этаж(4k)

;CПРАЙТЫ: 0-fill 2й этаж;1-fill 1й этаж
;2-15-истребитель(2-vSIZE<4)
;96-127-стоит герой(0-31)

       if MUSIC
AinvXOR=0xae ;"xor (hl)"
       else
AinvXOR=0xaa ;"xor d"
       endif

SCR     EQU     #C000
ATR     EQU     #D800
DSCR    EQU     #9000
       if 0;EGA
       else
DATR    EQU     #A800
       endif
MAN     EQU     #AB00
ALIEN   EQU     MAN+320
TMP     EQU     DSCR
xATR    EQU     #AF00
vSIZE   EQU     #AF80
xCONV   EQU     #8F80

;****************************************** работа с 3D спрайтами

SH      DEFB    0; Shift 0/8
TX      DEFB    0
TY      DEFB    1
TTX     DEFB    #CD
TTY     DEFB    0
NSH     DEFW    0 ;96,64,32,0, а после цикла -16 (для скролла вверх)
UDHL    DEFW    6
XMAX    DEFB 63;макс.коорд
YMAX    DEFB 63
;*L+
B_DAT   ;-----данные боя-------------
OLDFLR  DEFB 0
X0      DEFB   63
Y0      DEFB   63
RNB     DEFB 5
RNA     DEFW 1970
NX_RNB  DEFB 0
NX_RNA  DEFW 505
FIRTYP  DEFB 0 ;тип Стрельбы (1-прицельная)
HER_N   DEFB 0 ;NO. текущ героя
HER_AD  DEFW 0 ;адр. его данных
G_TIME  DEFB 0 ;время использ текущ оружия
G_TYPE  DEFB #FF;текущ оружие
SETLEN  EQU 38
SET_N   DEFB 0 ;к-во записей
SETDIM  DEFS 5*SETLEN,#FF ;двери/гранаты (X,Y,Flr,Tmp,Door)/(x,y,Flr,0,0)
B_LEN   EQU   $-B_DAT ;--------------

HER_BA  LD HL,(HER_AD) ;взять поле А
        JP BA

RRT     LD      DE,DSCR+1024 ;скролл вправо
        LD      HL,DSCR+1024+1
        LD      BC,4095
        LDIR
        LD      A,(SH)
        XOR     8
        LD      (SH),A
        JR      NZ,RR8
        LD      HL,X0
        INC     (HL)
        INC     HL
        DEC     (HL)
RR8     LD A,(FLR)
        OR A
        JR NZ,RLN
        INC A
        CALL FLOOR
        CALL RLN
        XOR A
        CALL FLOOR
RLN     LD      DE,(X0)
        LD      A,14
        ADD     A,E
        LD      E,A
        LD      A,-14
        ADD     A,D
        LD      D,A
        LD      A,(SH)
        OR      A
        JR      Z,RL0
        LD      HL,DSCR+29+128
        JR      LL1
RL0     DEC     E
        LD      HL,DSCR+29
        JR      LL1

LRT     LD      DE,DSCR+6143-1024 ;Скролл влево
        LD      HL,DSCR+6142-1024
        LD      BC,4095
        LDDR
        LD      A,(SH)
        XOR     8
        LD      (SH),A
        JR      Z,LR8
        LD      HL,X0
        DEC     (HL)
        INC     HL
        INC     (HL)
LR8     LD A,(FLR)
        OR A
        JR NZ,LLN
        INC A
        CALL FLOOR
        CALL LLN
        XOR A
        CALL FLOOR
LLN     LD      A,(SH)
        LD      DE,(X0)
        OR      A
        JR      NZ,LL0
        LD      HL,DSCR+128+2
        JR      LL1
LL0     LD      HL,DSCR+2
        DEC     D
LL1     LD      (TX),DE
        LD      B,20
LL2     CALL    ASP
        JR      Z,LL_2
        CALL    LSP
LL_2    LD      DE,128
        ADD     HL,DE
        LD      A,(TY)
        INC     A
        LD      (TY),A
        CALL    ASP
        JR      Z,LL_3
        CALL    RSP
LL_3    LD      DE,128
        ADD     HL,DE
        LD      A,(TX)
        INC     A
        LD      (TX),A
        DJNZ    LL2
        RET

DRT     LD      DE,DSCR+1024 ;скролл вниз
        LD      HL,DSCR+256+1024
        LD      BC,4096-256
        LDIR
        LD      HL,X0
        INC     (HL)
        INC     HL
        INC     (HL)
        LD A,(FLR)
        OR A
        JR NZ,DLN
        INC A
        CALL FLOOR
        CALL DLN
        XOR A
        CALL FLOOR
DLN     LD      HL,X0
        LD      A,#F
        ADD     A,(HL)
        LD      (TTX),A
        INC     HL
        LD      A,#F
        ADD     A,(HL)
        LD      (TTY),A
        LD      HL,DSCR+4096+768+1
        JR      UL_

URT     LD      DE,DSCR+6143-1024 ;скролл вверх
        LD      HL,DSCR+6143-256-1024
        LD      BC,4096-256
        LDDR
        LD      HL,X0
        DEC     (HL)
        INC     HL
        DEC     (HL)
        LD A,(FLR)
        OR A
        JR NZ,ULN
        INC A
        CALL FLOOR
        CALL ULN
        XOR A
        CALL FLOOR
ULN     LD      HL,(X0)
        LD      (TTX),HL
        LD      HL,DSCR+1024+1
UL_     LD      A,(SH)
        OR      A
        JR      NZ,UL10
        INC     HL
UL10    LD      (UDHL),HL
        LD      HL,96
        LD      (NSH),HL ;96,64,32,0, а после цикла -16
        LD      C,4
       
UL0     LD      HL,(UDHL)
        LD      DE,(TTX)
        LD      (TX),DE
        CALL    UDL2
        LD      HL,(UDHL)
        DEC     HL
        LD      DE,(TTX)
        INC     D
        LD      (TX),DE
        CALL    UDL
        LD      HL,(NSH)
        LD      DE,32
        OR      A
        SBC     HL,DE
        LD      (NSH),HL
        LD      HL,(TTX)
        INC     H
        INC     L
        LD      (TTX),HL
        DEC     C
        JR      NZ,UL0
       
        LD      HL,-16
        LD      (NSH),HL
        LD      HL,(UDHL)
        LD      DE,128
        ADD     HL,DE
        LD      DE,(TTX)
        LD      (TX),DE
        CALL    UDL2
        RET

UDL     LD      B,15
UD0     CALL    ASP
        JR      Z,U_D0
        CALL    NSP
U_D0    LD      DE,(TX)
        DEC     D
        INC     E
        LD      (TX),DE
        INC     HL
        INC     HL
        DJNZ    UD0
        RET

UDL2    LD      B,15
UD2     CALL    ASP
        JR      Z,U_D2
        CALL    NSP2
U_D2    LD      DE,(TX)
        DEC     D
        INC     E
        LD      (TX),DE
        INC     HL
        INC     HL
        DJNZ    UD2
        RET

PSP     ;задать N спр
        EX AF,AF
        CALL GSP
        CP 2
        RET C
        EXX
        EX AF,AF
        LD (HL),A
        EXX
        RET

ATSP    ;получить атрибуты из xATR
        CALL GSP
        AND #7F
ATSP_   EXX
ATSP_exx
        LD E,A
        LD D,xATR/256
        LD A,(DE)
        EXX
        RET

ATSPM   ;взять атрибуты с учётом героев
        CALL GSP
        AND #7F
        CP #60
        JR C,ATSP_
        SUB #60
        EXX
        RLCA
        RLCA
        RLCA
        LD D,0
        SLA A
        RL D
        SLA A
        RL D
        ADD A,7
        LD E,A
        LD A,D
        ADD A,MAN/256
        LD D,A
        LD A,(DE)
        AND #7F
        JR ATSP_exx

GS_4x4  LD      A,63
        CP      H
        DEFB #38,#14 ;JR C,G00
        CP      L
        DEFB #38,#11 ;JR C,G00
        LD      A,L
        RLCA
        RLCA
        SRL     H
        RRA
        SRL     H
        RRA
        LD      L,A

GS_8x2  LD      A,31
        CP      H
        DEFB #38,#14 ;JR C,G00
        LD      A,127
        CP      L
        DEFB #38,#0F ;JR C,G00
        RLC     L
        SRL     H
        RR      L
        NOP
        NOP

SET4x4  LD HL,#3F3F ;уст.поле 64х64
        LD DE,GS_4x4
        JR SETxxx
SET8x2  LD HL,#1F7F ;уст.поле 128х32
        LD DE,GS_8x2
SETxxx  LD (XMAX),HL
        EX DE,HL
        LD DE,GSPdim
        LD BC,18
        LDIR
        RET

GSP     EXX     ;получить N спр
        LD      HL,(TX)
GSPdim  LD      A,63
        CP      H
        JR      C,G00
        CP      L
        JR      C,G00
        LD      A,L
        RLCA
        RLCA
        SRL     H
        RRA
        SRL     H
        RRA
        LD      L,A
GS1     LD      A,#F0 ;map #F000/#E000
        OR      H
        LD      H,A
        LD      A,(HL)
        EXX
        RET
G00     LD      A,1 ;Вне поля
        EXX
        RET

;AinvX- #AA(XOR D)-норм.,#0(NOP)-только маска
;возвр: Z-0й спрайт DE-адр А-номер
ASP     CALL GSP
        LD D,A
       if EGA == 0
        RLCA
        LD A,(Ainv1)
        JR C,A2P
        OR A
        JR NZ,A22P
        LD A,AinvXOR;#AA ;"xor d" норм отобр
        JR A21P
A2P     OR A
        JR Z,A22P
        XOR A
A21P    LD (Ainv1),A
        LD (Ainv2),A
        LD (Ainv3),A
        LD (Ainv4),A
A22P
        LD A,D
       endif
A22P_   LD E,0
        AND #7F
        PUSH AF
        CP #60
        JR NC,A4P
       if EGA
        ld a,d
        add a,0xc0
        ld d,a
        ld a,13 ;pg
        jr nc,MSizeP_retilen1
        inc a
        set 7,d
        set 6,d
MSizeP_retilen1
        call setpg
       else
        SRL A
        RR E
        ADD A,#B0;sprites
        LD D,A
       endif
        POP AF
        RET
A4P     POP AF
        SUB #60
        PUSHs;$
        PUSH IX
        CALL GET_IX
        CALL HERLIV
        JR NZ,A7PLIV
        LD A,(IX+4)
        CALL M96
       if EGA
       add hl,hl
       ld de,0xf000 ;TODO
       else
        LD DE,xDIE
       endif
        JR A6P
A7PLIV  LD A,(IX+6)     ;visi
        OR A            ;
        LD A,(IX+7)     ;
        JR Z,A9P        ;
        POP IX
        POPs;$
        JR A22P_
A9P     CALL NORM_V
        LD A,(IX+3)
        CALL M96
        ADD HL,HL
        LD A,(IX+4)
        RLCA
        LD D,A
        RLCA
        ADD A,D
        ADD A,H
        LD H,A
       if EGA
       add hl,hl
       ld de,0x8400
       else
        LD DE,xHERO
       endif
A6P     ADD HL,DE
        PUSH HL ;sprite gfx
        LD A,(IX+7)
        AND #7F
        LD L,0
       if EGA
        add a,#c0
        ld h,a
        ld a,13
        jr nc,$+2+1+4
         inc a
         set 7,h
         set 6,h ;tile gfx
        call setpg      
        LD DE,temptilebuf;DATR ;temporary tile buffer
        LD BC,256
        LDIR
        pop de ;sprite gfx
        ld a,8
        bit 6,d
        set 6,d
        jr z,$+3
        inc a
        call setpg
        LD bc,temptilebuf;DATR ;temporary tile buffer
;наложение спрайта на тайл
        ld h,tmask/256
A5P_column
        ld a,c
        add a,8
        ld c,a
       dup 24
        LD A,(de) ;sprite gfx
        INC de
        LD L,A
        LD A,(bc) ;temporary tile buffer
        AND (HL)
        OR L
        LD (bc),A
        inc c
       edup
        jp nz,A5P_column

       else
        SRL A
        RR L
        ADD A,#B0 ;???тайлы корабля и далее прочие тайлы
        LD H,A
        LD DE,DATR
        LD BC,128
        LDIR
        POP HL ;sprite gfx
        LD DE,DATR+16
        Ms 4
        LD B,48
A5P     LD A,(DE)
        OR (HL)
        LD (DE),A
        INC DE
        LD A,(DE)
        CPL
        OR (HL)
        CPL
        INC HL
        OR (HL)
        LD (DE),A
        INC DE
        INC HL
        DJNZ A5P
       endif
        CALL PT128
        POP IX
        POPs;$
       if EGA
        ld de,temptilebuf
       else
        LD DE,DATR ;temporary tile buffer
       endif
        LD A,#60
        OR A
        RET;NZ

M96     LD L,A
        RLCA
        ADD A,L ;x3
        RLCA    ;x6
        RLCA    ;x12
        LD      L,A
        LD      H,0
        ADD     HL,HL ;x24
        ADD     HL,HL ;x48
        ADD     HL,HL ;x96
        RET

;вывод 3D тайла (для полного обновления экрана ALLSPF)
MSizeP
        ;ld a,201
        ;ld (MSizeP),a

        pushs;$
       if EGA
       ;push bc
       call PT128
       ;pop bc
       endif
        CALL ASP ;out: de=tile addr
        JR Z,MSiRET
       ;jr $
       if EGA == 0
        PUSH HL
        LD B,vSIZE/256
        OR #80 ;(vSIZE mod 256)
        LD C,A
        LD A,(BC)
        LD H,0
        ADD A,A
        ADD A,A
        ADD A,A
        LD L,A
         RRCA
         ADD A,E
         LD E,A
        ADD HL,HL
        ADD HL,HL
        LD A,(BC)
        POP BC
        ADD HL,BC
        CPL
        ADD A,33
        LD B,A
       else
       if 0
        ld a,d
        sub 0xB0
        sla e
        rla
        ;sla e
        ;rla
        add a,0xc0
        ld d,a
        ld a,13 ;pg
        jr nc,MSizeP_retilen1
        inc a
        set 7,d
        set 6,d
        ;ld a,d
        ;sub 0x40
        ;ld d,a
        ;ld a,14 ;pg
MSizeP_retilen1
       ;ld de,0xdf00
        ;ld a,13
        call setpg
       endif
       
        push hl
        pop bc
        ld b,32
       endif
        JP MS2

BSP     pushs;$
        JP      MS2

;для скролла вверх/вниз
NSP     pushs;$
        LD      BC,(NSH) ;96,64,32,0, а после цикла -16
        EX      DE,HL
        ADD     HL,BC
        EX      DE,HL
        LD      B,8
        JP      MS2 ;печать полного тайла, но на высоту 8

;для скролла вверх/вниз
NSP2    pushs;$
        EX      DE,HL
        LD      BC,(NSH) ;96,64,32,0, а после цикла -16
        ADD     HL,BC
        LD      BC,16
        ADD     HL,BC ;переходим к нижней половине тайла?
        EX      DE,HL
        LD      B,4
        LD      A,(NSH) ;96,64,32,0, а после цикла -16
        CP      96
        JR      Z,MS2 ;печать полного тайла, но на высоту 4
        CP      -16
        JR      Z,MS2 ;печать полного тайла, но на высоту 4
        LD      B,8
        JP      MS2 ;печать полного тайла, но на высоту 8

;печать полного тайла
MSP     pushs;$
        LD      B,32
MS2
       if EGA
        ld hx,b ;hgt
        call setpgsscr40008000
        ld b,h
        ld c,l ;bc=scr
       push de
       push bc
       push ix
        call prtile
       pop ix
       pop bc
       pop de
       set 7,e
       inc bc
        call prtile
        call setpgsmain40008000
       else
       if MUSIC
        ex de,hl
MS20    ld a,(de)
        or (hl)
        inc hl
Ainv1   xor (hl)
        inc hl
        ld (de),a
        inc de
        ld a,(de)
        or (hl)
        inc hl
Ainv2   xor (hl)
        inc hl
        ld (de),a
        ld a,e
        add a,31
        ld e,a
        jr nc,$+3
        inc d
        djnz MS20
        ex de,hl
       else
        LD      (MSPSP+1),SP
        EX      DE,HL
        LD      SP,HL
        EX      DE,HL
MS20    POP     DE
        LD      A,(HL)
        OR      E
Ainv1   XOR     D
        LD      (HL),A
        INC     HL
        POP     DE
        LD      A,(HL)
        OR      E
Ainv2   XOR     D
        LD      (HL),A
        LD      DE,31
        ADD     HL,DE
        DJNZ    MS20
MSPSP   LD      SP,#4020
       endif
       endif
MSiRET  pops;$
        RET

;печать левой части тайла
LSP     pushs;$
        LD      B,32
LS2
       if EGA
        ld hx,b
        call setpgsscr40008000
        ld b,h
        ld c,l
        call prtile
        call setpgsmain40008000
       else
       if MUSIC
        ex de,hl
LS20    ld a,(de)
        or (hl)
        inc hl
Ainv3   xor (hl)
        inc hl
        ld (de),a
        inc hl
        inc hl
        ld a,e
        add a,32
        ld e,a
        jr nc,$+3
        inc d
        djnz LS20
        ex de,hl
       else
        LD      (LSPSP+1),SP
        EX      DE,HL
        LD      SP,HL
        EX      DE,HL
LS20    POP     DE
        LD      A,(HL)
        OR      E
Ainv3   XOR     D
        LD      (HL),A
        POP     DE
        LD      DE,32
        ADD     HL,DE
        DJNZ    LS20
LSPSP   LD      SP,#4020
       endif
       endif
        pops;$
        RET

;печать правой части тайла
RSP     pushs;$
        LD      B,32
RS2
       if EGA
        ld hx,b ;hgt
        call setpgsscr40008000
        ld b,h
        ld c,l ;scr
       ;push de
       ;push bc
       ;push ix
        ;call prtile
       ;pop ix
       ;pop bc
       ;pop de
       set 7,e
       inc bc
        call prtile
        call setpgsmain40008000
       else
       if MUSIC
        ex de,hl
RS20    inc hl
        inc hl
        ld a,(de)
        or (hl)
        inc hl
Ainv4   xor (hl)
        inc hl
        ld (de),a
        ld a,e
        add a,32
        ld e,a
        jr nc,$+3
        inc d
        djnz RS20
        ex de,hl
       else
        LD      (RSPSP+1),SP
        EX      DE,HL
        LD      SP,HL
        EX      DE,HL
RS20    POP     DE
        POP     DE
        LD      A,(HL)
        OR      E
Ainv4   XOR     D
        LD      (HL),A
        LD      DE,32
        ADD     HL,DE
        DJNZ    RS20
RSPSP   LD      SP,#4020
       endif
       endif
        pops;$
        RET

RSPB    pushs;$
        JR      RS2

LSPB    pushs;$
        JR      LS2

ALLSPF
       if EGA
        ei
        ld de,sprpal
        OS_SETPAL
        ld e,0
        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
        ld e,1
        OS_SETSCREEN
        ld e,0 ;color byte
        OS_CLS
        call ALLSPpp
        jr $
        ;call changescrpg
        ;ld e,a
        ;OS_SETSCREEN
        ret
        include "pal.ast" ;sprpal
ALLSPpp
       endif
        LD A,(FLR) ;вывод обоих этажей
        OR A
        JR NZ,ALLSP
        INC A
        CALL FLOOR
        CALL ALLSP
        XOR A
        CALL FLOOR
ALLSP
       if EGA
        ld hl,scrbase+(40*4)+2
       else
        LD      HL,DSCR+128+2
       endif
        LD      A,(SH)
        OR      A
        JR      Z,AP1
        DEC     HL
AP1     LD      DE,(X0)
        LD      (TX),DE
        LD      C,20
AP2     LD      B,15
        PUSH    DE
AP3     CALL    MSizeP
        LD      DE,(TX)
        INC     E
        DEC     D
        LD      (TX),DE
        INC     HL
        INC     HL
        DJNZ    AP3
       if EGA
        ld de,+(40*4)-30-1
       else
        LD      DE,128-30-1
       endif
        ADD     HL,DE
        POP     DE
        INC     D
        LD      (TX),DE
        PUSH    DE
        LD      B,15
AP4     CALL    MSizeP
        LD      DE,(TX)
        INC     E
        DEC     D
        LD      (TX),DE
        INC     HL
        INC     HL
        DJNZ    AP4
       if EGA
        ld de,(40*4)-30+1
       else
        LD      DE,128-30+1
       endif
        ADD     HL,DE
        POP     DE
        INC     E
        LD      (TX),DE
        DEC     C
        JR      NZ,AP2
        RET

DSC3    LD      B,8
        PUSH    DE
DS3     PUSH    DE
        PUSH    BC
        INC DE
        LDI
        LDI
        LDI
        LDI;4
        LDI
        LDI
        LDI
        LDI;8
        LDI
        LDI
        LDI
        LDI;12
        LDI
        LDI
        LDI
        LDI;16
        LDI
        LDI
        LDI
        LDI;20
        LDI
        LDI
        LDI
        LDI;24
        LDI
        LDI
        LDI
        LDI;28
        LD      DE,4
        ADD     HL,DE
        POP     BC
        POP     DE
        INC     D
        DJNZ    DS3
        POP     DE
        LD      A,32
        ADD     A,E
        LD      E,A
        DEC     C
        JR      NZ,DSC3
        RET

OUTDSC  CALL    MEM7
        LD      DE,SCR+32
        LD      HL,DSCR+1024+2
        LD      C,7
        CALL    DSC3
        LD      DE,SCR+2048
        LD      C,8
        CALL    DSC3
        LD      DE,SCR+4096
        LD C,1
        CALL    DSC3
        JP  PT128

FLR     EQU     G00+1   ;этаж 1-1й 0-2й
FLOOR   OR A ;сменить этаж на А(0-2Й;1-1Й)
        LD A,(FLR)
        JR NZ,FLO2
        OR A
        RET Z
        XOR A ;2й
        LD (FLR),A
        PUSH BC
        LD C,3
        LD A,#E0
FLO_    LD (GS1+1),A
        LD A,(X0)
        ADD A,C
        LD (X0),A
        LD A,(Y0)
        ADD A,C
        LD (Y0),A
        POP BC
        RET
FLO2    OR A
        RET NZ
        INC A
        LD (FLR),A
        PUSH BC
        LD C,-3
        LD A,#F0
        JR FLO_

LCOUNT  LD DE,vSIZE ;подсчёт высоты
        LD HL,#B000
        LD B,96
LCX     PUSH BC
        PUSH HL
        LD BC,#1F00
LCX0    LD A,(HL)
        OR A
        JR NZ,LCX2
        INC HL
        INC HL
        LD A,(HL)
        OR A
        JR NZ,LCX2
        INC HL
        INC HL
        INC C
        DJNZ LCX0
LCX2    LD A,C
        LD (DE),A
        INC DE
        POP HL
        LD BC,128
        ADD HL,BC
        POP BC
        DJNZ LCX
        XOR A
        LD (DE),A
        RET
       
       if 1
DD      RLCA
WA      RLCA
BA      ADD     A,L
        LD      L,A
        JR      NC,BA_
        INC     H
BA_     LD      A,(HL)
        RET
       endif

       if 1
GET_AD  RLCA ;Взять описатель(MAN+A*32) ->HL
        RLCA
        RLCA
        LD L,A
        LD H,0
        ADD HL,HL
        ADD HL,HL
        LD A,MAN/256
        ADD A,H
        LD H,A
        RET

GET_IX  CALL GET_AD;То же для IX
        PUSH HL
        POP IX
        RET
       endif

       if 1
HERLIV  LD A,(IX+8) ;IX-жив? Z-нет
        OR A
        RET Z
        LD A,(IX+13)
        OR A
        RET Z
        CP (IX+26)
        RET NC
        XOR A
        RET
       endif

       if 1
NORM_V
       if EGA == 0
        LD A,AinvXOR;#AA ;вкл.норм.отобр ;"xor d"
        LD (Ainv1),A
        LD (Ainv2),A
        LD (Ainv3),A
        LD (Ainv4),A
       endif
        RET
       endif