We just reached 30,000 articles on this wiki! 🥳
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

15-in-1 (KS-122)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

15-in-1

Developer: Kaiser Electronics
Publisher: Kaiser Electronics
Platform: Unlicensed NES


SourceIcon.png This game has uncompiled source code.
GraphicsIcon.png This game has unused graphics.
TextIcon.png This game has unused text.


NotesIcon.png This game has a notes page

15-in-1 is yet another unlicensed NES multi-cart from Taiwan.

Sub-Page

Miscellaneous tidbits that are interesting enough to point out here.
Notes

Unused Graphics

15-in-1 (KS-122)-bigstars.png

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�à�à�à