15-in-1 is yet another unlicensed NES multi-cart from Taiwan.
Sub-Page#
Unused Graphics#
Unused bigger versions of the stars used for the menu border.
Unused Text#
Bizarrely, two of the text strings on the internal game list were seemingly replaced at the last minute. Pinball erroneously added a space in the title, while Sky Destroyer replaced Ma Chiang. The unused strings can be found with the rest of the used menu text starting at 0x24FA in the ROM, while the replacement strings can be found starting at 0x3001.
Source Code#
Beginning at 0x3010 is a partly corrupted chunk of the menu's source code. A comment near the beginning dates this code to May 7, 1987.
2.PIN BALÌ*****¤P¹(ðÈÀ�� „P`$„R`*****��
��$* Qä �©�…�¥�� Æ�¥�É�°�©�…�ˆÐìæ�`*
$* GAIN SELECT *
$* 9.SKY DESTROYEÒ *
$* 1987.5.7 BY L.J.L *
$**********************************
�;
Ú $FFFA
Ú Û $17FA
Û�;
�Ø NMI1
Ø RESET1
Ø RESET1
�;
Ú $E000
Ú�Û $800
�;
$**********************************
�;
�TIME Ù 05
�TIME1 Ù 01
�TIME2 Ù 02
TIME3 Ù 5
�TIME4 Ù 30
�FLHTIM Ù 30
�BLOCKNO Ù 22
�BLOCKNO1Ù 18
�GAMENO Ù 15
�BLOCKSTRÙ 04
�BLOCKST1Ù 04
�PRNSTR Ù BLOCKSTR+1
�PRNSTR1 Ù BLOCKST1+2
�TITLROW Ù 25
�TITCLM Ù 09
�TITLROW1Ù 27
�JPRES Ù $FFFC»2BYTE
�HV Ù $9000
�TITCLM1 Ù 06
�;
$**********************************
�;
�COUNT Ü $00
�ROW Ü $01
�COLUMN Ü $02
�POIN¥�)�ð�`� ©?� ©�� ¥UÉ��L„ó¥U)�Ð�æT¤TÀ�� „TL<óÆT¤T�� �„T¢�¹` � ÈÊ�öÆS��©�…S Tó`¥R �™` ™c �i"ˆ�ôæR¥R)�É
��¥Ri�…RæV¥VÉ��© …VæU`êÆX�ú©�…X� ©?� ©�� ¥YÉ�°*¥Y)�Ð�©�� � � æY`¥bH�i�H)�É
h�i�…bhL¨ó �© ™X ˆ�ú…U`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ � ©2…R`LKCONT Ü $15
�STRCNT Ü $16
�BKGRNCT Ü $17
�ROCONT Ü $18
�ROADR Ü $19»2BYT
�;
$**********************************
�;
�BANKBUF Ù $C000
�;
$**********************************
�;
�RESET1 �RESET
�NMI1 �NMI
�;
$**********************************
�;
�;
RESET :
�ª
�š
�;
��#$10
�$2000
�^1 �$2002
�…�<1
�;
��#$FF
�°
�;
��#$00
��#$00
�^2 �$00,Y
�$200,Y
��Ÿ
�†�<2
�;
��#$00
�^0 �SELCONT
�Ò�BANKBUF
B�;
��#$5C
��#$17
��#$10
�COUNT
�;
�^1 �STRTTAB,X
�$2A3,Y
���#$10
�$2A1,Y
�
�STRTTAB,X
R�Á�#$03
��#$E0
�$2A2,Y
� �COUNT
Í
�$2A0,Y
��™
�À�#$09
�COUNT
�
�
�
�
�œ
�…�<1
�;
�#TIME
Í Ð�COUNT
Ð
�#TIME2
���MOVCONT
M��#FLHTIM
#��FLHCONT
F��#$0C
�STRCNT
��;
��#$00
�$2001
Р�$2002
�;
��#$2B
�$2006
��#$C0
�$2006
�;
��#$00
�^6 �BLKCLRTB,Y
��#$FF
�‡�>4
�Ÿ
��BLKCLRTB,Y
C�^5 �$2007
�œ
�†�<5
�;
�Ÿ
�†�<6
�;
�^4 �SETCOLOR
�;
�;
�$2002
��#$20
�$2006
��#$00
�$2006
�;
��#$03
��#$C0
��#$1F
�^1 �$2007
�
�†�<1
�œ
�…�<1
�;
�$2002
��#$28
�$2006
��#$00
�$2006
�;
��#$03
��#$C0
��#$1F
�^1 �$2007
�
�†�<1
�œ
�…�<1
�;
�$2002
��#$00
�$2005
Р�$2005
�;
��#$0F
�$4015
��#$0F
�$4000
��#$00
�$4001
��#$1E
�$2001
��#$88
�$2000
��#02
��$74
��$77
��$76
�;
�LOOP �LOOP
�;
NMI :
��#$00
�$2001
�;
��#$02
�$4014
Р�$C0D6
�;
��BKGRNCT
B�Á�#$01
�†�>1
��MOVSTRT
M��>2
�;
�^1 �ROCLR
�;
�^2 �BKGRNCT
�POINT
Í�×
�¬
��ADRTAB+1,X
T�¡
��ADRTAB,X
D�¡
�¥
�;
ADRTAB :
�Ø CHANGCLR-1
N�Ø PRNTITLE-1
T�Ø PRENTCHK-1
N�Ø SELECT-1
E�;
CHANGCLR:
�COUNT
Ç�†�>4
�#TIME
Í Ð�COUNT
�;
��BLKCONT
B�†�>1
�PBKSTR
���>3
�;
�^1 �#BLOCKNO1+1
�„�>2
�PRNMID
���>3
�;
�^2 �PRNTIAL
�^3 �BLKCONT
��BLKCONT
B��#BLOCKNO1+2
C�ƒ�>4
�POINT
��#$00
��BLKCONT
B�;
�^4 �NMIOUT
�;
PRNTITLE:
��BLKCONT
B��#$0A
�ƒ�>2
��#$0B
�„�>1
�;
��#TITLROW
T��ROW
��#TITCLM
#
�COLUMN
�
�/TITLETB1
I
�#TITLETB1
I��PRNROW1
P�^2 �BLKCONT
�NMIOUT
��;
�^1 �#$14
�ƒ�<2
�#TITLROW1
I��ROW
��#TITCLM1
T
�COLUMN
�
�/TITLETB2
I
�#TITLETB2
I�;
��PRNROW1
P�;
�POINT
É
�NMIOUT
��;
PRENTCHK:
��PRINTMK
P †�PRINT
†�Í�PRNTCONT
R�
�×
�¬
�;
��MSGTAB+1,X
T
�PRNTADR+1
N��MSGTAB,X
S��PRNTADR
P�;
��ROW
�±
�†�>1
��#PRNSTR
#��ROW
�^1 �#PRNSTR1
�COLUMN
���#$00
�INDEX
Ð
�#TIME1
� �COUNT
��PRINTMK
P��PRNTCONT
R
�NMIOUT
��;
PRINT :
�COUNT
Ç
†�PNTERR
�
�#TIME1
� �COUNT
�;
�;
�SETADR
� �INDEX
��(PRNTADR),Y
T�…�>0
�;
��PRINTMK
P��PRNTCONT
R��#GAMENO
#�ƒ�>1
�POINT
�;
�^0 ¡
��INCROCN
I�¢
�^1 �INDEX
�Á�#$7F
�$2007
�;
�PNTERR �NMIOUT
�;
SELECT :
��SELECTMK
E�†�SELECT1
S�;
��SELECTMK
E
�#TIME3
���KEYCONT
K�;
��#$03
�^1 �CRSTAB,Y
�$200,Y
��
�†�<1
��SELCONT
S�×
�×
�×
�™
À�CRSTAB�à à à
Most of the unprintable text is actually encoded ASM opcodes and other symbols. (See Notes:15-in-1 (KS-122).)
Here is a partial decoding of the above:
2.PIN BALL*****¤P¹(ðÈÀ��� �„P`$„R`*****��
��$* Qä �©�…�¥��� Æ�¥�É�°�©�…�ˆÐìæ�`*
$* GAIN SELECT *
$* 9.SKY DESTROYER *
$* 1987.5.7 BY L.J.L *
$**********************************
�;
.org $FFFA
.org Û $17FA
Û�;
�.addr NMI1
.addr RESET1
.addr RESET1
�;
.org $E000
.org�Û $800
�;
$**********************************
�;
�TIME = 05
�TIME1 = 01
�TIME2 = 02
TIME3 = 5
�TIME4 = 30
�FLHTIM = 30
�BLOCKNO = 22
�BLOCKNO1= 18
�GAMENO = 15
�BLOCKSTR= 04
�BLOCKST1= 04
�PRNSTR = BLOCKSTR+1
�PRNSTR1 = BLOCKST1+2
�TITLROW = 25
�TITCLM = 09
�TITLROW1= 27
�JPRES = $FFFC»2BYTE
�HV = $9000
�TITCLM1 = 06
�;
$**********************************
�;
�COUNT = $00
�ROW = $01
�COLUMN = $02
�POIN¥�)�ð�`� ©?�� ©��� ¥UÉ���L„ó¥U)�Ð�æT¤TÀ��� �„TL<óÆT¤T�� �„T¢�¹`��� ÈÊ�öÆS��©�…S Tó`¥R �™`�™c��i"ˆ�ôæR¥R)�É
���¥Ri�…RæV¥VÉ���©�…VæU`êÆX�ú©�…X� ©?�� ©��� ¥YÉ�°*¥Y)�Ð�©��� �� �� æY`¥bH�i�H)�É
h��i�…bhL¨ó �©�™X�ˆ�ú…U`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��� ©2…R`LKCONT = $15
�STRCNT = $16
�BKGRNCT = $17
�ROCONT = $18
�ROADR = $19»2BYT
�;
$**********************************
�;
�BANKBUF = $C000
�;
$**********************************
�;
�RESET1 JMP RESET
�NMI1 JMP NMI
�;
$**********************************
�;
�;
RESET :
�SEI
�CLV
�;
�LDA #$10
STA $2000
^1 LDA $2002
�BPL <1
�;
�LDX #$FF
�TXS
�;
�LDY #$00
�LDA #$00
�^2 STA $00,Y
STA $200,Y
��INY
�BNE <2
�;
�LDA #$00
�^0 STA SELCONT
�STY BANKBUF
B�;
�LDY #$5C
�LDX #$17
�LDA #$10
STA COUNT
;
�^1 LDA STRTTAB,X
STA $2A3,Y
��LDA #$10
STA $2A1,Y
�
LDA STRTTAB,X
R�AND #$03
�ORA #$E0
STA $2A2,Y
� LDA COUNT
STA $2A0,Y
��CLC
�ADC #$09
STA COUNT
DEY
�DEY
�DEY
�DEY
�DEX
�BPL <1
�;
LDA #TIME
STA COUNT
LDA #TIME2
��STA MOVCONT
M�LDA #FLHTIM
#�STA FLHCONT
F�LDA #$0C
STA STRCNT
��;
�LDA #$00
STA $2001
LDA $2002
;
�LDA #$2B
STA $2006
LDA #$C0
STA $2006
;
�LDY #$00
�^6 LDX BLKCLRTB,Y
�CPX #$FF
�BEQ >4
�INY
�LDA BLKCLRTB,Y
C�^5 STA $2007
�DEX
�BNE <5
�;
�INY
�BNE <6
�;
�^4 JSR SETCOLOR
�;
�;
LDA $2002
LDA #$20
STA $2006
LDA #$00
STA $2006
;
�LDX #$03
�LDY #$C0
�LDA #$1F
�^1 STA $2007
�DEY
�BNE <1
�DEX
�BPL <1
�;
LDA $2002
LDA #$28
STA $2006
LDA #$00
STA $2006
;
�LDX #$03
�LDY #$C0
�LDA #$1F
�^1 STA $2007
�DEY
�BNE <1
�DEX
�BPL <1
�;
LDA $2002
LDA #$00
STA $2005
STA $2005
;
�LDA #$0F
STA $4015
LDA #$0F
STA $4000
LDA #$00
STA $4001
LDA #$1E
STA $2001
LDA #$88
STA $2000
STA LDA #02
�STA $74
�STA $77
�STA $76
�;
�LOOP JMP LOOP
�;
NMI :
�LDA #$00
STA $2001
;
�LDA #$02
STA $4014
JSR $C0D6
;
�LDA BKGRNCT
B�AND #$01
�BNE >1
�JSR MOVSTRT
M�JMP >2
�;
�^1 JSR ROCLR
�;
�^2 INC BKGRNCT
LDA POINT
ASL
�TAX
�LDA ADRTAB+1,X
T�PHA
�LDA ADRTAB,X
D�PHA
�RTS
�;
ADRTAB :
�.addr CHANGCLR-1
N�.addr PRNTITLE-1
T�.addr PRENTCHK-1
N�.addr SELECT-1
E�;
CHANGCLR:
DEC COUNT
BNE >4
LDA #TIME
STA COUNT
;
�LDY BLKCONT
B�BNE >1
JSR PBKSTR
��JMP >3
�;
�^1 CPY #BLOCKNO1+1
�BCS >2
JSR PRNMID
��JMP >3
�;
�^2 JSR PRNTIAL
�^3 INC BLKCONT
�LDA BLKCONT
B�CMP #BLOCKNO1+2
C�BCC >4
INC POINT
LDA #$00
�STA BLKCONT
B�;
�^4 JMP NMIOUT
�;
PRNTITLE:
�LDA BLKCONT
B�CMP #$0A
�BCC >2
�CMP #$0B
�BCS >1
�;
�LDA #TITLROW
T�STA ROW
�LDA #TITCLM
#
STA COLUMN
�
LDX /TITLETB1
I
LDA #TITLETB1
I�JSR PRNROW1
P�^2 INC BLKCONT
JMP NMIOUT
��;
�^1 CMP #$14
�BCC <2
LDA #TITLROW1
I�STA ROW
�LDA #TITCLM1
T
STA COLUMN
�
LDX /TITLETB2
I
LDA #TITLETB2
I�;
�JSR PRNROW1
P�;
INC POINT
JMP NMIOUT
��;
PRENTCHK:
�LDA PRINTMK
P BNE PRINT
LDA PRNTCONT
R�TAY
�ASL
�TAX
�;
�LDA MSGTAB+1,X
T
STA PRNTADR+1
N�LDA MSGTAB,X
S�STA PRNTADR
P�;
�INC ROW
�TYA
�BNE >1
�LDA #PRNSTR
#�STA ROW
�^1 LDA #PRNSTR1
STA COLUMN
��LDA #$00
STA INDEX
LDA #TIME1
� STA COUNT
DEC PRINTMK
P�INC PRNTCONT
R
JMP NMIOUT
��;
PRINT :
DEC COUNT
BNE PNTERR
�
LDA #TIME1
� STA COUNT
;
�;
JSR SETADR
� LDY INDEX
LDA (PRNTADR),Y
T�BPL >0
�;
�INC PRINTMK
P�LDY PRNTCONT
R�CPY #GAMENO
#�BCC >1
INC POINT
;
�^0 PHA
�JSR INCROCN
I�PLA
�^1 INC INDEX
�AND #$7F
STA $2007
;
�PNTERR JMP NMIOUT
�;
SELECT :
�LDA SELECTMK
E�BNE SELECT1
S�;
�DEC SELECTMK
E
LDA #TIME3
��STA KEYCONT
K�;
�LDY #$03
�^1 LDA CRSTAB,Y
STA $200,Y
��DEY
�BNE <1
�LDA SELCONT
S�ASL
�ASL
�ASL
�CLC
ADC CRSTAB�à�à�à
References#
- In-game mention.↩︎
- In-game mention.↩︎
- 15 in 1 (KS-122) - MAME software↩︎