I need help for manage Gun-light from basic & assembly with a sprite in moving

By gasparrini

Champion (329)

gasparrini's picture

10-10-2012, 01:30

Hello Guys,

I need help for manage Gun-light from basic & assembly with a sprite in moving

Can you do a example for me, please??
I wait your good news
Best Regards
(^_^)
AG.

10 '-----------------------------
20 '         GUN-LIGHT
30 '-----------------------------
40 CLEAR300,&HCFFF
50 SCREEN2,2
60 DEFUSR0=&HD000:REM INIT RAYGUN
70 DEFUSR1=&HD003:REM READ RAYGUN
80 '----READ MACHINE DATA--------
90 FORGF=0TO200
100 READDT$
110 POKE&HD000+GF,VAL("&H"+DT$)
120 NEXT
130 GF=USR0(0)
140 '----INIT CHECK POINT--------
150 PX=128
160 PY=100
170 '----WRITE CHECK POINT-------
180 LINE(PX,PY)-(PX+15,PY+15),15,B
190 '----MAIN LOOP---------------
200 IFSTRIG(3)=0THENGOTO190
210 '----RAYGUN CHECK------------
220 POKE&HD006,PY
230 POKE&HD007,PX
240 GF=USR1(0)
250 FL=PEEK(&HD008)
260 IFFL=0THEN190
270 '----HIT!!-------------------
280 BEEP
290 LINE(PX,PY)-(PX+15,PY+15),0,BF
300 PX=INT(RND(1)*31)*8
310 PY=INT(RND(1)*23)*8
320 FORGF=0TO500:NEXT
330 GOTO170
340 '----MACHINE DATA------------
350 DATA C3,09,D0,C3,38,D0,00,00
360 DATA 00,F3,01,05,00,11,4F,D4
370 DATA 21,9F,FD,ED,B0,3E,C3,32
380 DATA 9F,FD,21,2D,D0,22,A0,FD
390 DATA FB,3E,FF,01,20,00,2A,CF
400 DATA F3,CD,56,00,C9,F3,E5,21
410 DATA 4E,D4,34,E1,FB,C3,4F,D4
420 DATA 3E,00,32,4E,D4,32,08,D0
430 DATA CD,BF,D0,01,00,03,11,CE
440 DATA D0,2A,C7,F3,CD,59,00,01
450 DATA 80,00,11,CE,D3,2A,CD,F3
460 DATA CD,59,00,3E,00,01,00,03
470 DATA 2A,C7,F3,CD,56,00,CD,BF
480 DATA D0,21,C9,D0,3A,06,D0,77
490 DATA 23,3A,07,D0,77,23,3E,00
500 DATA 77,23,3E,0F,77,23,3E,D0
510 DATA 77,01,05,00,ED,5B,CD,F3
520 DATA 21,C9,D0,CD,5C,00,21,4E
530 DATA D4,7E,F5,3E,01,CD,D8,00
540 DATA A7,20,05,3E,01,32,08,D0
550 DATA F1,BE,28,EE,01,00,03,ED
560 DATA 5B,C7,F3,21,CE,D0,CD,5C
570 DATA 00,01,80,00,ED,5B,CD,F3
580 DATA 21,CE,D3,CD,5C,00,C9,E5
590 DATA 21,4E,D4,7E,BE,28,FD,E1
600 DATA C9
610 END
Login or register to post comments

By gasparrini

Champion (329)

gasparrini's picture

26-08-2014, 22:43

Hello Guys,

After two years, I have continue my adventure with the GUN-LIGHT for
MSX1 !! I have testing already the GUN-LIGHT of the SEGA MASTER SYSTEM
and making a interface connector to make it work properly, and in order
the test to work 100% with the game of DUCK HUNT by karoshi.

Therefore: My problem is which I must do work the basic programm already quoted above.
Which it unfortunately doesnt' work with this my GUN-LIGHT of the SEGA MASTER SYSTEM.

Perhaps because this program BASIC + CODE MACHINE is set for the other
original gun PLUS-X TERMINATOR LASER for MSX ??

Here under there is the code assembly for GUN-LIGHT MSX.

        .org $D000 - 7

	.db $fe
	.dw startProgram,endProgram,startProgram

startProgram:

WRTVDP  .EQU $0047     ; SET DATA TO VDP REGSTER
RDVRM   .EQU $004A     ; READ DATA FROM VRAM
WRTVRM  .EQU $004D     ; WRITE DATA TO VRAM
FILVRM  .EQU $0056     ; FILL VRAM By DATA
LDIRMV  .EQU $0059     ; BLOCK READ DATA FROM VRAM
LDIRVM  .EQU $005C     ; BLOCK WRITE DATA TO VRAM

GTTRIG  .EQU $00D8     ; GET TRIGGER DATA

JP_CODE .EQU $0C3      

GRPNAM  .EQU $0F3C7    ; PATTERN NAME TABLE ADDRESS
GRPCOL  .EQU $0F3C9    ; COLOR GENERETOR TABLE ADDRESS
GRPCGP  .EQU $0F3CB    ; PATTERN GENERETOR TABLE ADDRESS
GRPATR  .EQU $0F3CD
GRPPAT  .EQU $0F3CF

H_TIMI  .EQU $0FD9F

;-------------------------------------------------------------------------------

HOOK:
     JP INIT_REY_GUN
     JP READ_REY_GUN
HIT_CHECK_POINT:
     NOP
     NOP
HIT_CHECK_FLAG:
     NOP
;-------------------------------------------------------------------------------
INIT_REY_GUN:
     DI
     LD BC,5
     LD DE,HOOK_SAVE_AREA
     LD HL,H_TIMI
     LDIR
     
     LD A,JP_CODE
     LD (H_TIMI),A
     LD HL,INIT_MAIN
     LD (H_TIMI+1),HL
     EI
                          ; INITIAL HIT CHECK SPRITE
     LD A,$FF
     LD BC,32
     LD HL,(GRPPAT)
     CALL FILVRM
     RET
;----------------------------------------------------------- INTERRUPT ---------
INIT_MAIN:
     DI
     PUSH HL
     LD HL,INT_COUNT
     INC (HL)
     POP HL
     EI
     JP HOOK_SAVE_AREA    ; JUMP TO OLD HOOK
;-------------------------------------------------------------------------------
READ_REY_GUN:
     LD A,0
     LD (INT_COUNT),A
     LD (HIT_CHECK_FLAG),A
     CALL WAIT_I_INT      ; WAIT V_BLANK
;---------------------------------------------------------- KEEP VRAM DATA -----
                          ; KEEP NAME TABLE DATA
     LD BC,768
     LD DE,NAME_TABLE_BUF
     LD HL,(GRPNAM)
     CALL LDIRMV
                          ; KEEP SPRITE AT TABLE DATA
     LD BC,128
     LD DE,SPRITE_AT_BUF
     LD HL,(GRPATR)
     CALL LDIRMV
;---------------------------------------------------------- CLEAR VRAM ---------
     LD A,0
     LD BC,768
     LD HL,(GRPNAM)
     CALL FILVRM
     CALL WAIT_I_INT
;---------------------------------------------------------- WRITE CHECK SPRITE -
                          ; SET HIT CHECK SPRITE DATA
     LD HL,HIT_SPRITE_BUF
     LD A,(HIT_CHECK_POINT)
     LD (HL),A
     INC HL
     LD A,(HIT_CHECK_POINT+1)
     LD (HL),A
     LD A,0
     LD (HL),A
     INC HL
     LD A,15
     LD (HL),A
     INC HL
     LD A,$0D0
     LD (HL),A
     
     LD BC,5
     LD DE,(GRPATR)
     LD HL,HIT_SPRITE_BUF
     CALL LDIRVM
;---------------------------------------------- INPUT CHECK FROM REYGUN --------
     LD HL,INT_COUNT
     LD A,(HL)
CHECK_LOOP:
     PUSH AF
     LD A,1
     CALL GTTRIG
     AND A
     JR NZ,SKIP_SET_FLAG
     LD A,1
     LD (HIT_CHECK_FLAG),A
SKIP_SET_FLAG:
     POP AF
     CP (HL)
     JR Z,CHECK_LOOP
;--------------------------------------------- RECOVER VRAM DATA ---------------
                                ;  RECOVER NAME TABLE DATA
     LD BC,768
     LD DE,(GRPNAM)
     LD HL,NAME_TABLE_BUF
     CALL LDIRVM
                                ;  RECOVER SPRITE AT TABLE DATA
     LD BC,128
     LD DE,(GRPATR)
     LD HL,SPRITE_AT_BUF
     CALL LDIRVM
     RET
;-------------------------------------------------------------------------------
;------------------------------- WAIT FOR I INTERRUPT --------------------------
WAIT_I_INT:
     PUSH HL
     LD HL,INT_COUNT
     LD A,(HL)
WAIT_I_INT_L1:
     CP (HL)
     JR Z,WAIT_I_INT_L1
     POP HL
     RET
;-------------------------------------------------------------------------------
HIT_SPRITE_BUF:
    .DS 4+1
NAME_TABLE_BUF:
    .DS 256*3
SPRITE_AT_BUF:
    .DS 128
INT_COUNT:
    .DS 1
HOOK_SAVE_AREA:
    .DS 5
    
endProgram:

.end

I wait your good news.....
Thanks advance
Best Regards
(^_^)
Andrea.