What I ended up doing after I added some checking to my assembly code is taking that BASIC example earlier and incorporating the machine code into it:

100 ' Setup Inks and Screen Mode

110 INK 0,0

120 INK 1,26

130 INK 2,20

140 INK 3,18

150 BORDER 11

160 PAPER 0

170 PEN 1

180 MODE 1

190 GOSUB 1700 ' Poke Move Bullet to Memory

200 ' Define Characters & Objects

210 DEFINT a-z

220 s$=CHR$(143)

230 a$="@"

240 b$="-"

250 x=1

260 y=1

270 DIM bx(2)

280 DIM by(2)

290 b=1

300 t=0

310 sc=0

320 ay=1+INT(RND*23)

330 ax=37

340 GOSUB 810 ' Print Ship

350 GOSUB 1010 ' Print Alien

360 LOCATE 1,25

370 PRINT"Score:"

400 ' Main Loop

410 WHILE 1

420 IF INKEY(1)<>-1 AND x<30 THEN GOSUB 910:x=x+1:GOSUB 810

430 IF INKEY(8)<>-1 AND x>1 THEN GOSUB 910:x=x-1:GOSUB 810

440 IF INKEY(0)<>-1 AND y>1 THEN GOSUB 910:y=y-1:GOSUB 810

450 IF INKEY(2)<>-1 AND y<24 THEN GOSUB 910:y=y+1:GOSUB 810

460 GOSUB 710

470 GOSUB 1140 : GOSUB 1010 ' Delete & Reprint Alien

480 IF INKEY(47)<>-1 AND t<>2 THEN t=t+1:bx(t)=x+1:by(t)=y

490 IF t<>0 THEN GOSUB 1210

500 WEND

600 ' Has bullet or alien collided?

610 IF ((bx(1)=ax) AND (by(1)=ay)) OR ((bx(2)=ax) AND (by(2)=ay)) THEN GOSUB 1410

620 RETURN

700 ' Has Alien Collided with Ship?

710 IF (x=ax) AND (y=ay) THEN GOSUB 1410:LOCATE 15,12:PRINT"You're Dead!":END

720 RETURN

800 ' Display Ship

810 LOCATE x,y

820 PEN 1

830 PRINT s$;

840 RETURN

900 ' Delete Ship

910 LOCATE x,y

920 PRINT" ";

930 RETURN

1000 ' Display and Move Alien

1010 LOCATE ax,ay

1020 PEN 2

1030 PRINT a$;

1040 ax=ax-1

1050 GOSUB 710

1060 WHILE ax=0

1070 LOCATE 1,ay

1080 PRINT" ";

1090 ax=37

1100 ay=1+INT(RND*23)

1110 WEND

1120 GOSUB 610

1130 RETURN

1140 LOCATE ax+1,ay

1150 PRINT" ";

1160 RETURN

1200 ' Routine to Move Shots Fired

1210 FOR n=b TO t

1220 CALL &9000,bx(n),by(n)

1230 bx(n)=PEEK(&9049):by(n)=PEEK(&9048)

1280 IF PEEK(&9049)=0 THEN b=b+1

1290 NEXT n

1300 IF PEEK(&9049)=0 AND b=3 THEN GOSUB 1590

1310 GOSUB 610

1320 RETURN

1400 ' Death Sequence for Alien or Ship should they Collide

1410 LOCATE ax,ay

1420 PRINT" ";CHR$(238);

1430 sc=sc+20

1440 LOCATE 8,25

1450 PRINT sc;

1460 ax=39

1470 ay=1+INT(RND*23)

1480 FOR v=15 TO 0 STEP -1

1490 BORDER 6

1500 SOUND 1,0,3,v,,,31

1510 BORDER 11

1520 SOUND 2,1000,3,v,,,31

1530 NEXT v

1540 FOR c=1 TO t

1550 LOCATE bx(c),by(c)

1560 PRINT" ";

1570 bx(c)=0:by(c)=0

1580 NEXT c

1590 b=1:t=0

1600 RETURN

1700 MEMORY &8FFF:ln=1760:FOR adr=&9000 TO &904F STEP 16

1710 READ b$:chk=0:FOR i=0 TO 15

1720 v=VAL("&"+MID$(b$,i*2+1,2))

1730 POKE adr+i,v:chk=chk+v:NEXT

1740 IF chk<>VAL("&"+RIGHT$(b$,3)) THEN PRINT"ERROR In Line";ln:STOP

1750 ln=ln+10:NEXT:RETURN

1760 DATA DD7E02324990DD7E003248902A4890CD69C

1770 DATA 75BB3E20CD5ABB3A49903C3249902A4863C

1780 DATA 90CD75BB3E2DCD5ABB3A4990FE262017748

1790 DATA 3A4990673A48906FCD75BB3E20CD5ABB738

1800 DATA AF324990324890C9000000000000000038D

however I was able to make it a 2-bullet shoot-em-up by using BASIC code for where I was having difficulty writing the assembly which includes the Array and the varying FOR Loop which is subject to change depending on what the 'b' & 't' variables equal (which is what I'm mostly having trouble grasping to write in assembly). Naturally once the positions have been recalculated in the M/C routine, bx(n) & by(n) needs to know the new values, which is what Line 1230 does & b is altered when the address position of bx @ &9049 equals 0. Likewise the second IF in line 1300 checks if bx =0 and b=3 to reset.

It's definitely an improvement over the original BASIC, there is some slowdown, though not as noticeable as the original, which I'm happy with.

This was what I came up with, with the routine above after I added the check routine:

org &9000

;; CALL &9000,bx,by

ld a,(ix+02) ;; a:=bx

ld (bx),a ;; bx:=a

ld a,(ix+00) ;; a:=by

ld (by),a ;; by:=a

ld hl,(by) ;; l:=bx h:=by

call &bb75

ld a,32

call &bb5a

ld a,(bx) ;; a:=bx

inc a ;; a:=a+1

ld (bx),a ;; bx:=a

ld hl,(by) ;; l:=bx h:=by

call &bb75

ld a,45

call &bb5a

ld a,(bx) ;; a:=bx

cp 38 ;; if a<>38

jr nz,exit ;; then goto exit

ld a,(bx)

ld h,a

ld a,(by)

ld l,a

call &bb75 ;; locate bx,by

ld a,32

call &bb5a ;; print" "

xor a ;; a:=0

ld (bx),a ;; bx:=0

ld (by),a ;; by:=0

.exit ret ;; back to BASIC

.by defb 0 ;; x position of bullet

.bx defb 0 ;; y position of bullet