Hello Guys,
Again, this video game RATBANK was not finished, because the person who helped me to do the routine to move in high veloctià sprites made ​​no character has been finished and there is a BUG!
So I ask you experienced programmers to finish at least in assembler assembler routines for the random motion of the character sprites, now muvono 3 polyps, but I would be moving a fourth polyp.
Then those of the Dev Team, you are recommended not to copy the sprites, but this game is just one example of RATBANK to run this new enemy sprites assembler routine movement. I promise to you of the whole community of MSX, which will design the new sprites and not copy from other old games.
good Job
See you soon ....
10 REM RATBANK Version 1.0
20 REM (C) 2010 AGsoftware
30 REM LAST UPDATE 20/9/10
40 REM
50 COLOR,0,0:SCREEN 1,2,1:COLOR 15,0,0:WIDTH32:KEYOFF
60 CLEAR200,&HCFFF:DEFINTA-Z:HI=854
66 DEFUSR=&HD000
70 DEFUSR1=&H41:DEFUSR2=&H44
80 DEFUSR3=&HE000:DEFUSR4=&HE008
90 RESTORE100:FORI=&HE000TO&HE00F:READA$
100 POKEI,VAL("&H"+A$):NEXTI
110 DATA 06,E3,0E,01,CD,47,00,C9
120 DATA 06,E2,0E,01,CD,47,00,C9
130 GOSUB1260:REM GOSUB2060
140 REM INTRO
150 CLS:A=USR3(0)
160 FOR A=1 TO 5:PUT SPRITE A,,,0:NEXTA
170 LOCATE 1,0:PRINT"1UP":LOCATE10,0:PRINT"HI-SCORE":LOCATE21,0:PRINT"ROUND";ST:LOCATE21,1:PRINT""
180 LOCATE0,1:PRINTSC*100:LOCATE9,1:PRINTHI*100
190 'PUTSPRITE15,(70,60),4,15:PUTSPRITE16,(104,60),4,16:PUTSPRITE17,(138,60),4,17
200 LOCATE2,18:PRINT"1UP BONUS EVERY 40000 POINTS"
210 LOCATE 0,20:PRINT" @2010 AGSOFTWARE ENTERTAINMENT"
220 LOCATE 2,22:PRINT"PUSH SPACE OR FIRE TO START"
230 ON STRIG GOSUB 260,260,260:STRIG(0)ON:STRIG(1)ON:STRIG(2)ON
240 GOTO 230
250 REM SCORE,LIVES
260 FORS=0TO31:PUTSPRITES,,0,0:NEXTS:CLS:A=USR4(0)
270 LI=2:SC=0:BO=400:LV=1:ST=1
280 CLS:FORA=1TO5:PUTSPRITEA,,,0:NEXT:LOCATE 11,10:PRINT"ROUND";ST
290 LOCATE 12,12:PRINT"READY"
300 FORA=0TO3000:NEXTA
310 CLS
320 REM LOAD LEVELS
330 IF LV>1 THEN LV=1
340 A=USR1(0)
350 ON LV GOSUB 3000
355 BLOAD"z.bin",R
360 A=USR2(0)
370 LOCATE 1,0:PRINT"1UP":LOCATE10,0:PRINT"HI-SCORE":LOCATE21,0:PRINT"ROUND";ST
380 LOCATE0,1:PRINTSC*100:LOCATE9,1:PRINTHI*100
390 LF=LI:IFLF>11THENLF=11
400 FORA=1TOLF:LOCATE21,1:PRINTSTRING$(LF,129);:NEXTA
410 X=120:Y=24:SP=1:Z=0
440 INTERVALON
450 ONINTERVAL=10GOSUB680
460 ON STICK(0)ORSTICK(1)GOSUB560,560,570,570,580,580,590,590
470 X1=X:Y1=Y
480 PUTSPRITE1,(X,Y),12,SP+Z:PUTSPRITE2,(X,Y),3,SP+1+Z
490 IFSTICK(0)ORSTICK(1)>0THENZ=Z+2ANDZ<1:GOSUB1140
500 IFSC>HITHENHI=SC:LOCATE9,1:PRINTHI*100
510 IFSC=>BOTHENBO=BO+400:GOSUB1070
520 IFSS=6THENSS=0:ST=ST+1:LV=LV+1:INTERVALOFF:FORI=0TO2000:NEXT:GOSUB1170:GOSUB1110:GOTO280
530 'IFX<X2+16ANDX>X2-16ANDY<Y2+16ANDY>Y2-8THENGOSUB730
540 'IFX<X3+16ANDX>X3-16ANDY<Y3+16ANDY>Y3-8THENGOSUB730
550 GOTO460
560 SP=9:Y=Y-8:GOSUB600:RETURN
570 SP=1:X=X+8:GOSUB600:RETURN
580 SP=1:Y=Y+8:GOSUB600:RETURN
590 SP=5:X=X-8:GOSUB600:RETURN
600 Z1=6144+INT(INT((Y)/8)*32+((X)/8))
610 Z2=VPEEK(6144+INT(INT((Y)/8)*32+((X)/8)))
620 IF VPEEK(Z1)=144ORVPEEK(Z1+1)=144ORVPEEK(Z1+32)=144ORVPEEK(Z1+33)=144THEN X=X1:Y=Y1
630 IFZ2=160THENVPOKEZ1,32:VPOKEZ1+1,32:VPOKEZ1+32,32:VPOKEZ1+33,32:SS=SS+1:SC=SC+1:LOCATE0,1:PRINTSC*100:GOSUB1210
640 IFZ2=168THENVPOKEZ1,32:VPOKEZ1+1,32:VPOKEZ1+32,32:VPOKEZ1+33,32:SC=SC+2:LOCATE0,1:PRINTSC*100:GOSUB1190
650 IFZ2=176THENVPOKEZ1,32:VPOKEZ1+1,32:VPOKEZ1+32,32:VPOKEZ1+33,32:SC=SC+3:LOCATE0,1:PRINTSC*100:GOSUB1190
660 RETURN
670 REM MOVE 3 POLYPS
680 A=USR0(0)
700 RETURN
710 REM MORTE 1UP
720 REM DEATH 1UP
730 GOSUB1230:LI=LI-1:X=40:Y=24:SP=1:Z=0
740 LF=LI:LOCATE21+LF,1:PRINTCHR$(32):LF=LI
750 IFLI<0THENGOTO780
760 RETURN
770 REM GAME OVER
780 LOCATE 10,10:PRINT" GAME OVER ":GOSUB1240
790 FORI=1TO3000:NEXTI:INTERVALOFF
800 FORS=0TO31:PUTSPRITES,,0,0:NEXTS
810 GOTO 150
1060 REM BONUS 1UP
1070 GOSUB1160
1080 LI=LI+1:LF=LI:IFLF>11THENLF=11
1090 LOCATE20+LF,1:PRINTCHR$(129)
1100 RETURN
1110 SOUND8,15:FORI=50TO165STEP8:SOUND0,I:SOUND1,178-I:FORE=1TORND(9)*100:NEXTE:NEXTI:SOUND8,0:RETURN
1120 SOUND1,2:FOR I=255 TO 50 STEP -8:SOUND8,13:SOUND0,I:NEXT:FOR O=10 TO 0 STEP -8:FOR I=50 TO 0 STEP -9:SOUND0,I:NEXT:SOUND8,O:NEXT:SOUND0,0:SOUND1,0
1130 RETURN
1140 Q=200:FORW=QTOQ-40STEP-20:SOUND8,13:SOUND0,W:NEXTW:SOUND0,0
1150 RETURN
1160 FORL=1TO10:FORQ=250TO1STEP1:FORW=QTOQ-250STEP-20:SOUND8,13:SOUND9,13:SOUND0,W:SOUND2,W:NEXTW:NEXTQ:SOUND0,0:NEXTL:SOUND9,0:RETURN
1170 FORPP=1TO3:FORI=0TO200STEP20:FORO=ITOI+20STEP2:SOUND8,13:SOUND0,O:SOUND1,O:NEXT:NEXT:NEXT:SOUND0,0:SOUND1,0
1180 RETURN
1190 FOR I=250 TO 50 STEP -80:FOR O=I TO I-80 STEP -20:SOUND8,13:SOUND0,O:NEXT:NEXT:SOUND0,0
1200 RETURN
1210 FOR I=250 TO 50 STEP -60:FOR O=I TO I-50 STEP -8:SOUND8,13:SOUND0,O:NEXT:NEXT:SOUND0,0
1220 RETURN
1230 FORLC=1TO3:FOR I=0 TO 250 STEP13:FOR O=I TO I+255STEP-1:SOUND8,13:SOUND0,O:NEXT:NEXT:SOUND0,0:NEXT:RETURN
1240 FOR I=0 TO 200 STEP 4:FOR O=I TO I+50STEP10:SOUND8,13:SOUND0,O:NEXT:NEXT:SOUND0,0:RETURN
1250 REM DEFINE SPRITES
1260 RESTORE1350:FOR S=1 TO 17:A$="":FOR F=1 TO 32:READ A:A$=A$+CHR$(A):NEXT:SPRITE$(S)=A$:NEXT
1270 FORL=0TO3:RESTORE1750:FORA=0TO63:READB:VPOKE128*8+A+L*64,B:NEXTA:NEXT
1280 RESTORE1790:FORA=0TO7:READB:VPOKE144*8+A,B:NEXTA
1290 RESTORE1810:FORA=0TO31:READB:VPOKE160*8+A,B:NEXTA
1300 RESTORE1830:FORA=0TO31:READB:VPOKE168*8+A,B:NEXTA
1310 RESTORE1850:FORA=0TO31:READB:VPOKE176*8+A,B:NEXTA
1330 VPOKE8208,10*16:VPOKE8209,6*16:VPOKE8210,8*16+10:VPOKE8211,4*16:VPOKE8212,16*13:VPOKE8213,16*14:VPOKE8214,16*7
1340 RETURN
1350 DATA 112,136,139,159,125,61,127,127,125,62,5,12,27,0,14,30
1360 DATA 28,34,162,242,188,184,252,124,252,120,176,12,192,24,224,192
1370 DATA 0,112,112,96,0,0,0,0,0,0,2,3,4,7,0,0
1380 DATA 0,28,28,12,0,0,0,0,0,0,64,192,32,224,24,48
1390 DATA 112,136,139,159,125,61,127,127,125,62,13,48,3,24,7,3
1400 DATA 28,34,162,242,188,184,252,124,252,120,160,48,216,0,112,120
1410 DATA 0,112,112,96,0,0,0,0,0,0,2,3,4,7,24,12
1420 DATA 0,28,28,12,0,0,0,0,0,0,64,192,32,224,0,0
1430 DATA 112,136,139,159,123,59,127,125,127,60,11,24,55,0,29,61
1440 DATA 28,34,162,242,124,120,252,252,124,248,96,24,128,48,192,128
1450 DATA 0,112,112,96,0,0,0,0,0,0,4,7,8,15,0,0
1460 DATA 0,28,28,12,0,0,0,0,0,0,128,128,64,192,48,96
1470 DATA 112,136,139,159,123,59,127,125,127,60,27,96,7,48,14,6
1480 DATA 28,34,162,242,124,120,252,252,124,248,64,96,176,0,224,240
1490 DATA 0,112,112,96,0,0,0,0,0,0,4,7,8,15,48,24
1500 DATA 0,28,28,12,0,0,0,0,0,0,128,128,64,192,0,0
1510 DATA 112,248,251,255,127,63,127,127,127,63,11,24,55,0,28,60
1520 DATA 28,62,190,254,252,248,252,252,252,248,96,24,128,48,224,0
1530 DATA 0,0,0,0,0,0,0,0,0,0,4,7,8,15,0,0
1540 DATA 0,0,0,0,0,0,0,0,0,0,128,128,64,200,16,224
1550 DATA 112,248,251,255,127,63,127,127,127,63,27,96,7,48,28,0
1560 DATA 28,62,190,254,252,248,252,252,252,248,64,96,176,0,224,240
1570 DATA 0,0,0,0,0,0,0,0,0,0,4,7,8,79,32,28
1580 DATA 0,0,0,0,0,0,0,0,0,0,128,128,64,192,0,0
1590 REM skeleton
1600 DATA 7,15,31,31,27,25,13,119,85,224,167,1,7,4,4,28
1610 DATA 192,229,247,242,178,62,104,192,64,0,228,4,252,0,0,0
1620 DATA 3,167,239,79,77,124,22,3,2,0,39,32,63,0,0,0
1630 DATA 224,240,248,248,216,152,176,238,170,7,229,128,224,32,32,56
1640 REM TITLE RATBOX
1650 DATA 252,254,198,198,198,198,254,252,248,248,252,206,198,198,198,198
1660 DATA 60,126,255,231,195,195,195,195,255,255,255,195,195,195,195,195
1670 DATA 255,255,255,24,24,24,24,24,24,24,24,24,24,24,24,24
1680 DATA 124,126,99,99,99,99,99,126,126,99,99,99,99,99,126,124
1690 DATA 124,254,198,198,198,198,198,198,198,198,198,198,198,198,254,124
1700 DATA 195,195,102,102,102,60,60,24,24,60,60,102,102,102,195,195
1710 REM DOG RANDAGIO
1720 DATA 12,23,7,11,25,63,28,13,3,55,111,111,79,7,14,30,48,232,224,208,152,252,58,182,198,236,240,240,240,224,120,0
1730 DATA 12,23,7,11,25,63,92,109,99,55,15,15,15,7,30,0,48,232,224,208,152,252,56,176,192,236,246,246,242,224,112,120
1790 DATA 251,251,251,0,127,127,127,0
1800 REM DIAMOND
1810 DATA 0,0,31,49,74,132,255,68,0,0,248,140,82,33,255,34,34,18,9,5,2,1,0,0,68,72,144,160,64,128,0,0
1820 REM SAFE
1830 DATA 255,128,191,191,191,166,173,173,255,3,251,249,249,123,187,187,174,191,191,191,128,255,224,192,123,249,249,251,3,255,7,3
1840 REM CASKET
1850 DATA 15,8,4,2,7,26,98,255,248,4,2,1,255,3,7,249,136,133,135,128,237,237,128,255,145,17,21,21,177,177,18,252
2050 RETURN
2060 RESTORE2080:FOR I=256TO767:READA$
2070 VPOKEI,VAL("&H"+A$):NEXTI:RETURN
2080 DATA 00,00,00,00,00,00,00,00,18,3C,3C,3C,18,00,18,00
2090 DATA 6C,6C,48,00,00,00,00,00,6C,FE,6C,6C,6C,FE,6C,00
2100 DATA 18,3E,58,3C,1A,7C,18,00,00,C6,CC,18,30,66,C6,00
2110 DATA 70,C8,C8,70,9A,8C,76,00,18,18,10,00,00,00,00,00
2120 DATA 0C,18,30,30,30,18,0C,00,30,18,0C,0C,0C,18,30,00
2130 DATA 00,18,5A,3C,3C,5A,18,00,00,18,18,7E,18,18,00,00
2140 DATA 00,00,00,00,18,18,08,10,00,00,00,7C,00,00,00,00
2150 DATA 00,00,00,00,00,18,18,00,00,06,0C,18,30,60,C0,00
2160 DATA 38,4C,C6,C6,C6,64,38,00,18,38,18,18,18,18,7E,00
2170 DATA 7C,C6,0E,3C,78,E0,FE,00,7E,0C,18,3C,06,C6,7C,00
2180 DATA 1C,3C,6C,CC,FE,0C,0C,00,FC,C0,FC,06,06,C6,7C,00
2190 DATA 3C,60,C0,FC,C6,C6,7C,00,FE,C6,0C,18,30,30,30,00
2200 DATA 7C,C6,C6,7C,C6,C6,7C,00,7C,C6,C6,7E,06,0C,78,00
2210 DATA 00,18,18,00,18,18,00,00,00,18,18,00,18,18,08,10
2220 DATA 0C,18,30,60,30,18,0C,00,00,00,7C,00,7C,00,00,00
2230 DATA 60,30,18,0C,18,30,60,00,7C,C6,06,1C,30,00,30,00
2240 DATA 3C,42,99,A1,A1,99,42,3C,38,6C,C6,C6,FE,C6,C6,00
2250 DATA FC,C6,C6,FC,C6,C6,FC,00,3C,66,C0,C0,C0,66,3C,00
2260 DATA F8,CC,C6,C6,C6,CC,F8,00,FE,C0,C0,F8,C0,C0,FE,00
2270 DATA FE,C0,C0,F8,C0,C0,C0,00,3E,60,C0,CE,C6,66,3E,00
2280 DATA C6,C6,C6,FE,C6,C6,C6,00,7E,18,18,18,18,18,7E,00
2290 DATA 06,06,06,06,06,C6,7C,00,C6,CC,D8,F0,F8,DC,CE,00
2300 DATA C0,C0,C0,C0,C0,C0,FE,00,C6,EE,FE,FE,D6,C6,C6,00
2310 DATA C6,E6,F6,FE,DE,CE,C6,00,7C,C6,C6,C6,C6,C6,7C,00
2320 DATA FC,C6,C6,C6,FC,C0,C0,00,7C,C6,C6,C6,DE,CC,76,00
2330 DATA FC,C6,C6,CE,F8,DC,CE,00,78,CC,C0,7C,06,C6,7C,00
2340 DATA 7E,18,18,18,18,18,18,00,C6,C6,C6,C6,C6,C6,7C,00
2350 DATA C6,C6,C6,EE,7C,38,10,00,C6,C6,D6,FE,FE,6C,44,00
2360 DATA C6,EE,7C,38,7C,EE,C6,00,66,66,66,3C,18,18,18,00
2370 DATA FE,0E,1C,38,70,E0,FE,00,F8,C0,C0,C0,C0,C0,F8,00
2380 DATA 00,80,40,20,10,08,00,00,F8,18,18,18,18,18,F8,00
2390 DATA 00,00,20,50,88,00,00,00,00,00,00,00,00,00,00,F8
2990 REM STAGE-1
3000 LOCATE0,2:PRINT "";
3010 PRINT " ¨© ";
3020 PRINT " ª« ";
3030 PRINT " ";
3040 PRINT " ";
3050 PRINT " ";
3060 PRINT " ";
3070 PRINT " ¡ °±°± ";
3080 PRINT " ¢£ ²³²³ ";
3090 PRINT " ";
3100 PRINT " ¡ ";
3110 PRINT " ¢£ ¡";
3120 PRINT " ¢£";
3130 PRINT " ";
3140 PRINT " ¡ ";
3150 PRINT " ¡ ¡ ¢£ ";
3160 PRINT " ¢£¢£ ";
3170 PRINT " ";
3180 PRINT " ";
3190 PRINT " ";
3200 PRINT " ";
3210 PRINT "";:VPOKE6911,144:RETURN
routine assembler for moves sprites characters enemy:
.ORG $D000
;
SCR: EQU $1840
BEGIN:
M1: DB 1
M2: DB 5
M3: DB 255
>
; JP GAME
LD A,1
CALL $5F
CALL $41
LD HL,$8000
LD DE,0
LD BC,14336
CALL $5C
CALL SCRBUF
CALL INIT
CALL BUFSCR
CALL $44
CALL GAME
;
LD A,0
CALL $5F
RET
SCRBUF:
LD HL,SCR
LD DE,BUF
LD BC,704
CALL $59
RET
BUFSCR:
LD HL,BUF
LD DE,SCR
LD BC,704
CALL $5C
CALL BAKBUF
RET
TABBOX: DW POLY1,POLY2
DW POLY3,POLY4
DW POLY5,POLY6
;
POLY1: DB 128,130,129,131
POLY2: DB 132,134,133,135
;
POLY3: DB 136,138,137,139
POLY4: DB 140,142,141,143
;
POLY5: DB 152,154,153,155
POLY6: DB 156,158,157,159
;
CPUX1: DB 1
CPUY1: DB 1
;
CPUX2: DB 28
CPUY2: DB 1
;
CPUX3: DB 28
CPUY3: DB 19
ANI: DB 0
;stick (RAND)
;1 : su
;5 : giu
;3 : des
;7 : sin
;
D1: DB 5
D2: DB 5
D3: DB 7
MHL: DW 0 ;tmp
MXI: DW 0
>
;
MHL1: DW 0
MHL2: DW 0
MHL3: DW 0
BUF: DS 704
BAK: DS 704
READ:
LD A,L
OUT ($99),A
LD A,H
OUT ($99),A
RET
;loop game
GAME:
CALL CNTRL
CALL SETMOV
CALL POLIPO
GAM0:
CALL BUFSCR
LD A,0
CALL $D8
CP 255
RET Z
HALT
HALT
HALT
JP GAME
CNTRL:
;
RET
LD HL,TABLE
LD A,0
CALL $D5
LD (D1),A
; CALL RAND
; LD (D2),A
; LD (D3),A
RET
RAND:
LD A,R
AND 3
LD B,0
LD C,A
;
ADD HL,BC
LD A,(HL)
RET
TABLE: DB 1,3,7,5
;
;copy BUF to BAK
;
BUFBAK:
LD IX,BUF
LD IY,BAK
JR L000
;
;copy BAK to BUF
;
BAKBUF:
LD IX,BAK
LD IY,BUF
L000:
LD BC,704
L001:
LD A,(IX+0)
LD (IY+0),A
INC IY
INC IX
DEC BC
LD A,B
OR C
JR NZ,L001
RET
INIT:
;copy screen to buf and bak
LD HL,SCR
LD IX,BUF
LD IY,BAK
LD BC,704
>
CALL READ
INI0:
;
IN A,($98)
CP $90
JR Z,OKINI
CP 32
JR Z,OKINI
LD A,32
OKINI:
LD (IX+0),A
LD (IY+0),A
INC IX
INC IY
DEC BC
LD A,B
OR C
JR NZ,INI0
RET
;
; aggiunta di un polipo
; passo 1
XYTOHL:
LD A,(IX+1)
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD A,(IX+0)
LD C,A
LD B,0
ADD HL,BC
LD BC,BUF
ADD HL,BC
LD (MHL),HL
RET
POLIPO:
LD HL,POLY1
LD (TABBOX),HL
;
; Get X,Y
LD IX,CPUX1
LD BC,3
LD (MXI),IX
POLIP0:
PUSH BC
; Get Y
LD IX,(MXI)
LD A,(IX+1)
LD L,A
LD H,0
;
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
; Get X
LD A,(IX+0)
LD C,A
LD B,0
ADD HL,BC
LD (MHL),HL
LD BC,2
ADD IX,BC
LD (MXI),IX
;
; Set 1" Polipo
LD IX,(MHL)
LD BC,BUF
ADD IX,BC
;
LD IY,(TABBOX)
PUSH IY
LD A,(ANI)
XOR 4
LD (ANI),A
LD C,A
LD B,0
ADD IY,BC
>
;--
LD A,(IY+0)
LD (IX+0),A
LD A,(IY+1)
LD (IX+1),A
LD A,(IY+2)
LD (IX+32),A
LD A,(IY+3)
LD (IX+33),A
;--
POP IY
LD BC,8
ADD IY,BC
LD (TABBOX),IY
>
POP BC
DEC BC
LD A,B
OR C
JP NZ,POLIP0
RET
;
SETMOV:
LD IX,CPUX1
CALL XYTOHL
LD IY,(MHL)
LD A,(D1) ;d1,d2,d3
CALL SETMO0
LD IX,CPUX2
CALL XYTOHL
LD IY,(MHL)
LD A,(D2)
CALL SETMO0
LD IX,CPUX3
CALL XYTOHL
LD IY,(MHL)
LD A,(D3)
;
SETMO0:
CP 1
JP Z,SU
CP 5
JP Z,GIU
CP 3
JP Z,DES
CP 7
JP Z,SIN
SETMO1:
RET
;
SU:
LD A,(IY-31)
CP $90
JR Z,SETMO1
LD A,(IY-32)
CP $90
JR Z,SETMO1
LD A,(IX+1)
DEC A
CP -1
JR Z,SETMO1
LD (IX+1),A
JR SETMO1
GIU:
LD A,(IY+64)
CP $90
JR Z,SETMO1
LD A,(IY+65)
CP $90
JR Z,SETMO1
LD A,(IX+1)
INC A
CP 21
JR Z,SETMO1
LD (IX+1),A
JR SETMO1
DES:
LD A,(IY+2)
CP $90
JR Z,SETMO1
LD A,(IY+34)
CP $90
JR Z,SETMO1
;
LD A,(IX+0)
INC A
CP 31
JR Z,SETMO1
LD (IX+0),A
JR SETMO1
;
SIN:
LD A,(IY-1)
CP $90
JR Z,SETMO1
LD A,(IY+31)
CP $90
JR Z,SETMO1
LD A,(IX+0)
DEC A
CP -1
JR Z,SETMO1
LD (IX+0),A
JR SETMO1
LD A,(IX+0)
DEC A
CP -1
JR Z,SETMO1
LD (IX+0),A
