"INVADER" v2.0 for Sharp PC-1500 +4,8,16 Ko or PC-1500A
 E.Beaurepaire 1984-2000.
Unpublished (based on the version published in Hebdogiciel #56)

CLOAD "INVADER-V2"

Plot: Will you be able to make it trough the defenses of horrible planet zglu and destroy zgluars' horrible secret base to prevent this horrible civilization from destroying humanity ?
This program includes a couple of machine-code routines to perform a horizontal scroll of the screen and generate sci-fi sounds. 

Running the program:
Type RUN or DEF S

Keys:
9     : up
=     : down
SPACE : smart bomb

Difficulty:
Level 1 : short game, 4 smart bombs
Level 2 : long game, 3 smart bombs
Scoring:
Fly as close to the ground as possible to increase your score. Flying through an isolated dot (see screen copy #2) gives 100 bonus points. Completing the game gives 5000 bonus points. To complete the game, you have to destroy the large base (a spare smart bomb is needed) and fly through it.

----- BASIC program -----------------------------------------
1 "INVADER":REM v2.0 E.BEAUREPAIRE 1984-2000
2 "PC-1500 +4,8,16 Ko or PC-1500A
6 "S"CLEAR :CLS :WAIT 0: DIM A$(0)*36,B(5)
8 GOSUB 700
10 CURSOR 11:PRINT "Keys: 9/=/SPACE"
12 POKE &7050,&58,&76,&5A,&00,&FD,&18,&50,&50,&49,&0F,&15,&B9,&F0,&0B,&0E,&50,&40
14 POKE &7061,&5E,&4E,&99,&0D,&5C,&77,&8B,&19,&FD,&50,&5A,&00,&49,&0F,&15,&B9,&F0
16 POKE &7072,&0B,&0E,&40,&50,&4E,&4E,&99,&0D,&FD,&40,&4A,&00,&5A,&02,&9E,&2A,&49
18 POKE &7083,&0F,&40,&49,&0F,&9A
20 POKE &7088,&58,&76,&5A,&20,&15,&BD,&FF,&B9,&F0,&59,&0F,&1B,&1E,&50,&5E,&30,&99
22 POKE &7099,&0E,&BE,&70,&A9,&58,&76,&5A,&20,&59,&0F,&50,&5E,&30,&99,&07,&9A
24 POKE &70A9,&68,&03,&6A,&09,&48,&01,&4A,&02,&BE,&70,&C8,&62,&6E,&00,&99,&08,&BE
26 POKE &70BA,&70,&C8,&60,&6E,&32,&99,&08,&FD,&62,&6C,&00,&99,&1C,&9A
28 POKE &70C8,&FD,&A8,&FD,&88,&BE,&E6,&6F,&FD,&0A,&FD,&2A,&9A
30 GOSUB 400
35 CLS :WAIT 0:ON ERROR GOTO 210
40 GOSUB 700
45 CURSOR 13:PRINT " LEVEL? (1/2)"
50 A$=INKEY$ :IF A$="1"LET L=1:GOTO 65
55 IF A$="2"LET L=2:GOTO 65
60 GOTO 50
65 SB=5-L,L=L*3+1:CURSOR 13:PRINT "    "
70 B(0)=0,B(1)=1,B(2)=5,B(3)=21,B(4)=85
75 GCURSOR 74:GPRINT B(SB);B(SB);"007F"
80 CURSOR 7:PRINT "GO!"
85 GCURSOR 102:FOR I=1TO 3:RESTORE 299+RND 3
90 READ A$(0):GPRINT A$(0);:NEXT I
95 R=POINT 93,A=1,B=L-4,C=299,S=0
100 FOR Z=1TO 6
105 FOR D=1TO B
110 FOR I=1TO 18
115 GOSUB "SP"
120 NEXT I:RESTORE C+RND 3
125 READ A$(0):GCURSOR 138:GPRINT A$(0)
130 NEXT D:B=L,C=C+3:NEXT Z
135 FOR I=1TO 15:GOSUB "SP":NEXT I
140 GCURSOR 150: GPRINT "4E7F7B7F4E"
145 FOR I=1TO 65:GOSUB "SP":NEXT I
150 CURSOR 8:PRINT "BRAVO!"
155 POKE &70AA,5:POKE &70AC,1:POKE &70B0,10:POKE &70BE,60
160 CALL &70A9
165 POKE &70AA,3:POKE &70AC,9:POKE &70B0,2:POKE &70BE,50
170 S=S+5000:PRINT "SCORE :";S;" !!!":GOTO "END"
175 "SP"Q=R,R=POINT 94,S=S+INT (A/4)
180 CALL &7050
185 GCURSOR 92:GPRINT Q;ROR A
190 IF (RAND A)>0 GOTO "CR"
195 GOTO "*"+INKEY$
200 "*9"A=A/(1+(A>1)):GOTO 210
205 "*="IF A<64LET A=A*2
210 "*"CURSOR 7:PRINT S:RETURN
215 "* "IF SB>0LET SB=SB-1:GCURSOR 74:GPRINT B(SB);B(SB):CALL &7088
220 GOTO 210
225 "CR"IF A=RBEEP 1,20:S=S+100,R=0:GOTO 195
230 FOR I=0TO 5:POKE# 64000,1:NEXT I:BEEP 5,20,20:CURSOR 0:PRINT "SCORE :"
235 "END"CURSOR 13:PRINT " AGAIN? (Y/N)"
240 A$=INKEY$:IF A$="Y"GOTO 35
245 IF A$="N"CLS :END
250 GOTO 240
300 DATA "6060606060707070787E6060707860000000"
301 DATA "000000707070787860600000606000606070"
302 DATA "70707078787C7C7C78606078600000000000"
303 DATA "606060787E606060002000006070787C7060"
304 DATA "000000607870600020000060707878706000"
305 DATA "607000000000000060707C78706000200000"
306 DATA "416347030002000061430723310000046070"
307 DATA "6163410020006070787C7061430703100000"
308 DATA "0000004167634300005C5C00020000030710"
309 DATA "006063030000181800036360000006363000"
310 DATA "000303001818006060060600303003031818"
311 DATA "000C0C006063031818000006666000031B18"
312 DATA "636371797143474F4F4F4343417179717163"
313 DATA "636170787C7D7D7878797163474F47477363"
314 DATA "6343474F4F4F477371797979797171636363"
315 DATA "6343474F430063474F5F4F47636104716163"
316 DATA "6343474F6104414163717179797141104363"
317 DATA "636171797100100773797971614347104763"
400 FOR I=50TO 20STEP -1:BEEP 1,I,2:NEXT I
410 CURSOR 7:PRINT "          "
420 A$(0)="00000C2F3F2F2F2F3E2C2C2C0C08"
430 GCURSOR 80:GPRINT "0E5F7F5F0E"
440 WAIT 0:FOR I=40TO 64:GCURSOR I:GPRINT A$(0)
450 IF INKEY$ <>""RETURN
460 NEXT I
470 CALL &70A9
480 FOR I=80TO 86:GCURSOR I-2:GPRINT 0:IF POINT I<>0GCURSOR I:GPRINT 8OR RND 127:POKE# 64000,1:NEXT I
490 GCURSOR I:GPRINT 8:NEXT I
500 GCURSOR I-2:GPRINT 0;0
510 FOR I=20TO 10STEP -1:BEEP 1,I,5:NEXT I
520 FOR I=66TO 88STEP 2:GCURSOR I:GPRINT A$(0)
530 IF INKEY$ <>""RETURN
540 NEXT I
550 WAIT 5
560 GCURSOR I+5:GPRINT "1818":POKE# 64000,1
570 GCURSOR I+2:GPRINT "08492A006B002A4908":POKE# 64000,1
580 GCURSOR I-1:GPRINT "08080800001441140000080808":POKE# 64000,1
590 GCURSOR I-1:GPRINT "00000000220000002200000000":POKE# 64000,1
600 GCURSOR I+3:GPRINT "0000000000":POKE# 64000,1
610 RETURN
700 GPRINT "7F5D415D7F417B776F417F79675F67797F436D6D6D437F415D5D5D63";
710 GPRINT "7F4155555D7F417575655B7F"
720 RETURN

----- Machine Code -----------------------------------------
;Shift right half-screen 1 pixel to the left
;(relocatable routine)
7050 5876       LDI YH,76
7052 5A00       LDI YL,00
7054 FD18       LDX Y
7056 50         INC YL
7057 50         INC YL
7058 490F       ANI (X),0F
705A 15         LDA (Y)
705B B9F0       ANI A,F0
705D 0B         ORA (X)
705E 0E         STA (X)
705F 50         INC YL
7060 40         INC XL
7061 5E4E       CPI YL,4E
7063 990D       BZR -0D (7058)
7065 5C77       CPI YH,77
7067 8B19       BZS +19 (7082)
7069 FD50       INC YH
706B 5A00       LDI YL,00
706D 490F       ANI (X),0F
706F 15         LDA (Y)
7070 B9F0       ANI A,F0
7072 0B         ORA (X)
7073 0E         STA (X)
7074 40         INC XL
7075 50         INC YL
7076 4E4E       CPI XL,4E
7078 990D       BZR -0D (706D)
707A FD40       INC XH
707C 4A00       LDI XL,00
707E 5A02       LDI YL,02
7080 9E2A       BCH -2A (7058)
7082 490F       ANI (X),0F
7084 40         INC XL
7085 490F       ANI (X),0F
7087 9A         RTN
;"Smart bomb": invert columns + 
;call sci-fi sound + erase columns
;(not relocatable)
7088 5876       LDI YH,76
708A 5A20       LDI YL,20
708C 15         LDA (Y)
708D BDFF       EAI FF
708F B9F0       ANI A,F0
7091 590F       ANI (Y),0F
7093 1B         ORA (Y)
7094 1E         STA (Y)
7095 50         INC YL
7096 5E30       CPI YL,30
7098 990E       BZR -0E (708C)
709A BE70A9     SJP 70A9
709D 5876       LDI YH,76
709F 5A20       LDI YL,20
70A1 590F       ANI (Y),0F
70A3 50         INC YL
70A4 5E30       CPI YL,30
70A6 9907       BZR -07 (70A1)
70A8 9A         RTN
;Sci-fi sound
;(not relocatable)
70A9 6803       LDI UH,03
70AB 6A09       LDI UL,09
70AD 4801       LDI XH,01
70AF 4A02       LDI XL,02
70B1 BE70C8     SJP 70C8
70B4 62         DEC UL
70B5 6E00       CPI UL,00
70B7 9908       BZR -07 (70B1)
70B9 BE70C8     SJP 70C8
70BC 60         INC UL
70BD 6E32       CPI UL,32
70BF 9908       BZR -08 (70B9}
70C1 FD62       DEC UH
70C3 6C00       CPI UH,00
70C5 991C       BZR -1C (70AB)
70C7 9A         RTN
;Call beep routine
70C8 FDA8       PSH U
70CA FD88       PSH X
70CC BEE66F     SJP E66F
70CF FD0A       POP X
70D1 FD2A       POP U
70D3 9A         RTN
;
