*  Catena for the APF MP-1000
*  --------------------------
*  
*  Disassembly by Adam Trionfo
*  
*  Version .01 - August 17, 2010
*     - Mostly complete disassembly using DASMX
*     - Most (all?) of the code found
*     - Commented the Cartridge Menu
*     - VERY minimal other comments and Labeling

*  System ROM Routines

NOISE     EQU   $426E       ; Make a Noise
FILLSCRN  EQU   $4296       ; Fill Screen
RIGHTPAD  EQU   $41D9       ; Get Input from Rightpad Controller

*  Misc Equates  

EOS       EQU   $FF         ; End of String

          ORG   $8000

          FCB   $BB         ; Tell BIOS a cart is present
          FDB   MENUSTR     ; Points to Menu string on cartridge 
          FCB   '3'         ; The Start-Up Menu has Three Choices
          FCB   $00         ; Must be $00

L8005:
          LDAA  $0000       ; Get the Player's Menu choice
          DECA              ; Decrement Choice by 1        
          BNE   L8016       ; If not Two-Player game, then branch
          LDX   #L81A6      ; It IS a Two-Player Game
          STX   $0023
          LDX   #$819D
          STX   $0025
          BRA   L802C

L8016:
          DECA              ; 
          BNE   L8025       ; It 
          LDX   #L81A6      ; It is a 
          STX   $0023
L801E:
          LDX   #$8205
          STX   $0025
          BRA   L802C

L8025:
          LDX   #$8243
          STX   $0023
          BRA   L801E

L802C:
          LDX   #$002E
          JSR   L87AE
          LDX   #$0010
          JSR   L87AE
          LDX   #$0008
          JSR   L87AE
          LDAA  #$3C
          STAA  $0022
          CLR   $0036
          JSR   L8259
          LDAA  #$02
          STAA  $002D
          STAA  $002C
L804E:
          CLR   $003A
          LDAA  #$7F
          STAA  $0037
          LDX   $0023
          STX   $0027
          CLR   $0046
L805C:
          LDX   #L844C
          STX   $003F
          STX   $0041
L8063:
          LDX   $0027
          JSR   $00,X       ; INFO: INDEX JUMP
L8067:
          LDAA  $003B
          BNE   L806E
          JMP   L8131

L806E:
          CMPA  #$41
          BGE   L8063
          DEC   $003B
          LDAA  $003B
          ANDA  #$07
          STAA  $0029
          LDAA  $003B
          LSRA
          LSRA
          LSRA
          ANDA  #$07
          STAA  $002A
          LDX   #$002E
          STX   $0043
          LDAA  $002A
          ADDA  $0044
          STAA  $0044
          LDX   $0043
          LDAA  #$80
          LDAB  $0029
          BEQ   L809B
L8097:
          LSRA
          DECB
          BNE   L8097
L809B:
          STAA  $0020
          ANDA  $00,X
          BNE   L8063
          LDAA  $0045
          CMPA  #$A0
          BNE   L80B3
          LDX   #$0008
          STX   $001A
          LDX   #$0010
          STX   $0018
          BRA   L80BD

L80B3:
          LDX   #$0010
          STX   $001A
          LDX   #$0008
          STX   $0018
L80BD:
          JSR   L831E
          STAA  $01EE
          STAB  $01EF
          JSR   L833F
          TST   $001E
          BEQ   L8063
          LDX   $0043
          LDAA  $0020
          ORAA  $00,X
          STAA  $00,X
          LDAA  $0029
          STAA  $001C
          LDAA  $002A
          STAA  $001D
          JSR   L879D
          LDAA  $0020
          ORAA  $00,X
          STAA  $00,X
          LDAA  $0036
          BEQ   L8123
          DECA
          BEQ   L810C
          JSR   L831E
          CMPA  $01EE
          BNE   L8101
          CMPB  $01EF
          BNE   L8101
          JSR   L842F
          JMP   L8063

L8101:
          JSR   L83F1
          LDX   #$8205
          STX   $0027
          JMP   L8063

L810C:
          JSR   L8412
          DEC   $0047
          LDAA  #$02
          STAA  $0036
          LDX   #$8243
          STX   $0027
          LDX   #L844C
          STX   $003F
          JMP   L8063

L8123:
          INC   $0046
          DEC   $0022
          BNE   L8131
L812B:
          JSR   L83A8
          JMP   $4463

L8131:
          LDAA  $0036
          BEQ   L8177
          DECA
          BEQ   L8147
          LDAA  $0039
          CMPA  $0037
          BGE   L8144
          STAA  $0037
          LDAA  $0038
          STAA  $003A
L8144:
          JMP   L8101

L8147:
          LDAA  $003A
          BNE   L815E
          CLR   $0036
          LDX   #$8460
          STX   $0041
          LDX   #$8229
          STX   $0027
          JSR   L83F1
          JMP   L8063

L815E:
          LDAA  $003A
          STAA  $003B
          JSR   L83F1
          LDAA  #$A0
          STAA  $0045
          LDX   #$8229
          STX   $0027
          CLR   $0036
          JSR   L83A8
          JMP   L8067

L8177:
          LDAA  $002D
          LDAB  $002C
          STAB  $002D
          STAA  $002C
          LDX   $0027
          CPX   $0025
          BNE   L818C
L8185:
          LDAA  $0046
          BEQ   L812B
          JMP   L804E

L818C:
          CPX   #$8229
          BEQ   L8185
          LDX   $0025
          STX   $0027
          LDAB  #$12
          JSR   L8319
          JMP   L805C

L819D:
          LDAA  #$A0
          STAA  $0045
          LDX   #$41BE
          BRA   L81AD

L81A6:
          LDX   #RIGHTPAD
          LDAA  #$E0
          STAA  $0045

L81AD:
          STX   $01EE
          JSR   L83A8
L81B3:
          LDX   $01EE
          JSR   $00,X       ; INFO: INDEX JUMP
          BCC   L81B3
          LDAA  $01F2
          STAA  $03DE
          CMPA  #$3F
          BEQ   L81F8
          ANDA  #$0F
          STAA  $003B
L81C8:
          LDX   $01EE
          JSR   $00,X       ; INFO: INDEX JUMP
          BCC   L81C8
          LDAA  $01F2
          CMPA  #$21
          BNE   L81DD
          LDX   #$2020
          STX   $03DE
          RTS

L81DD:
          CLC
          STAA  $03DF
          CMPA  #$3F
          BEQ   L81F8
          LDAA  $003B
          ASLA
          STAA  $003B
          ASLA
          ASLA
          ADDA  $003B
          LDAB  $01F2
          ANDB #$0F
          ABA
          STAA  $003B
          BRA   L81C8

L81F8:
          LDAA  #$50
          JSR   NOISE       ; System ROM Routine - Make a Noise
          LDX   #$2020
          STX   $03DE
          BRA   L81B3

L8205:
          CLR   $0039
          TST   $0036
          BNE   L8218
          LDAA  $01F9
          ANDA  #$03
          INCA
          STAA  $0047
          JSR   L83CC
L8218:
          LDAA  #$01
          STAA  $0036
          TST   $0047
          BEQ   L823C
          LDX   $0041
          LDAA  $00,X
          CMPA  #$10
          BEQ   L823C
          LDAA  #$A0
          STAA  $0045
          LDX   $0041
          LDAA  $00,X
          STAA  $003B
          STAA  $0038
          INX
          STX   $0041
          CMPA  #$FF
          BNE   L8242
L823C:
          CLR   $0038
L823F:
          CLR   $003B
L8242:
          RTS

L8243:
          LDAA  #$E0
          STAA  $0045
          JSR   L83A8
          LDX   $003F
          LDAA  $00,X
          INX
          STAA  $003B
          STX   $003F
          CMPA  #$FF
          BNE   L8242
          BRA   L823F

L8259:
          CLRA
          STAA  $003B
          STAA  $0048
          JSR   FILLSCRN    ; System ROM Routine - Fill Screen
L8261:
          JSR   L8377
          LDAA  #$80
          ADDA  #$08
          STAA  $22,X
          ADDA  #$02
          STAA  $02,X
          ADDA  #$02
          STAA  $20,X
          STAA  $21,X
          INC   $003B
          LDAA  $0048
          ADDA  #$01
          DAA
          STAA  $0048
          LDAB  #$70
          JSR   L8328
          JSR   L8310
          LDAA  $003B
          CMPA  #$40
          BNE   L8261
          LDAA  #$10
          STAA  $000B
          STAA  $0014
          LDAA  #$08
          STAA  $000C
          STAA  $0013
          LDAA  #$18
          STAA  $0031
          STAA  $0032
          LDAA  #$E0
          STAA  $0045
          LDAA  #$1B
          BSR   L82CA
          LDAA  #$24
          BSR   L82CA
          LDAA  #$A0
          STAA  $0045
          LDAA  #$1C
          BSR   L82CA
          LDAA  #$23
          BSR   L82CA
L82B6:
          RTS

L82B7:
          LDAA  $0029
          STAA  $001C
          LDAA  $002A
          STAA  $001D
L82BF:
          LDAA  $0036
          BNE   L82B6
          LDAA  $001D
          ASLA
          ASLA
          ASLA
          ADDA  $001C
L82CA:
          STAA  $003B
          JSR   L8377
          LDAA  $22,X
          ANDA  #$F0
          CMPA  #$80
          BEQ   L82E2
          CMPA  $0045
          BEQ   L82E9
          LDAA  $002C
          ADDA  #$99
          DAA
          STAA  $002C
L82E2:
          LDAA  $002D
          ADDA  #$01
          DAA
          STAA  $002D
L82E9:
          LDAA  #$05
          STAA  $01EE
L82EE:
          LDAA  #$C0
          BSR   L82FC
          LDAA  $0045
          BSR   L82FC
          DEC   $01EE
          BNE   L82EE
          RTS

L82FC:
          ADDA  #$08
          STAA  $22,X
          ADDA  #$02
          STAA  $02,X
          ADDA  #$02
          STAA  $20,X
          STAA  $21,X
          ADDA  #$03
          STAA  $00,X
          STAA  $01,X
L8310:
          BSR   L8317
          LDAB  #$5D
          JMP   NOISE       ; System ROM Routine - Make a Noise

L8317:
          LDAB  #$0A
L8319:
          WAI
          DECB
          BNE   L8319
          RTS

L831E:
          LDX   $0018
          LDAA  #$81
          TAB
          ANDA  $00,X
          ANDB  $07,X
          RTS

L8328:
          STAA  $0048
          LSRA
          LSRA
          LSRA
          LSRA
          BEQ   L833B
          ABA
L8331:
          STAA  $00,X
          LDAA  $0048
          ANDA  #$0F
          ABA
          STAA  $01,X
          RTS

L833B:
          LDAA  #$60
          BRA   L8331

L833F:
          CLR   $001E
          JSR   L8499
          BSR   L8368
          JSR   L84EF
          BSR   L8368
          JSR   L854F
          BSR   L8368
          JSR   L85B0
          BSR   L8368
          JSR   L8614
          BSR   L8368
          JSR   L866B
          BSR   L8368
          JSR   L86CF
          BSR   L8368
          JSR   L872C
L8368:
          TST   $001F
          BEQ   L8376
          LDAA  $002B
          ADDA  $0039
          STAA  $0039
          CLR   $001F
L8376:
          RTS

L8377:
          LDAA  $003B
          ANDA  #$F8
          CLR   $01EA
          CLC
          ASLA
          ASLA
          ASLA
          STAA  $01EB
          BCC   L838B
          INC   $01EA
          CLC
L838B:
          LDAA  $003B
          ANDA  #$07
          STAA  $003C
          ASLA
          ADDA  $003C
          ADDA  #$02
          ADDA  $01EB
          STAA  $01EB
          LDAA  #$02
          ADDA  $01EA
          STAA  $01EA
          LDX   $01EA
          RTS

L83A8:
          LDAA  $0036
          BNE   L83CB
          LDAA  $0045
          ADDA  #$0F
          LDX   #$021E
          STAA  $00,X
          STAA  $01,X
          LDAA  $002D
          LDAB  #$70
          LDX   #$023E
          JSR   L8328
          LDAA  $002C
          LDAB  #$70
          LDX   #$027E
          JSR   L8328
L83CB:
          RTS

L83CC:
          LDX   #$0008
          STX   $01E6
          LDX   #$0049
          LDAB  #$10
          JSR   $42F0       ; System ROM Routine
          LDX   #$002E
          STX   $01E6
          LDX   #$0059
          LDAB  #$08
          JSR   $42F0       ; System ROM Routine
          LDX   $003D
          STX   $0062
          LDX   $0041
          STX   $0064
          RTS

L83F1:
          LDX   #$0049
          STX   $01E6
          LDX   #$0008
          LDAB  #$10
          JSR   $42F0       ; System ROM Routine
          LDX   #$0059
          STX   $01E6
          LDX   #$002E
          LDAB  #$08
          JSR   $42F0       ; System ROM Routine
          LDX   $0062
          STX   $003D
          RTS

L8412:
          LDX   #$0008
          STX   $01E6
          LDX   #$0066
          LDAB  #$10
          JSR   $42F0       ; System ROM Routine
          LDX   #$002E
          STX   $01E6
          LDX   #$0076
          LDAB  #$08
          JSR   $42F0       ; System ROM Routine
          RTS

L842F:
          LDX   #$0066
          STX   $01E6
          LDX   #$0008
          LDAB  #$10
          JSR   $42F0       ; System ROM Routine
          LDX   #$0076
          STX   $01E6
          LDX   #$002E
          LDAB  #$08
          JSR   $42F0       ; System ROM Routine
          RTS

L844C:
          FCB   $01, $08, $39, $40
          FCB   $03, $04, $05, $06
          FCB   $3B, $3C, $3D, $3E
          FCB   $11, $19, $21, $29
          FCB   $18, $20, $28, $30
          FCB   $13, $2B, $16, $2E
          FCB   $14, $15, $1E, $26
          FCB   $2C, $2D, $23, $1B
          FCB   $0B, $0C, $0D, $0E
          FCB   $17, $1F, $27, $2F
          FCB   $36, $35, $34, $33
          FCB   $2A, $22, $1A, $12
          FCB   $03, $04, $05, $06
          FCB   $3B, $3C, $3D, $3E
          FCB   $11, $19, $21, $29
          FCB   $18, $20, $28, $30
          FCB   $02, $07, $09, $10
          FCB   $31, $38, $3A, $3F
          FCB   $0A, $0F, $37, $32
          FCB   $FF

L8499:
          CLR   $001F
L849C:
          CLR   $002B
          LDAA  $0029
          STAA  $001C
          LDAB  $002A
          DECB
          BLE   L84D0
L84A8:
          STAB  $001D
          JSR   L878C
          LDAA  $0020
          ANDA  $00,X
          BEQ   L84D1
          INC   $002B
          TST   $001F
          BEQ   L84CB
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0020
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L84CB:
          LDAB  $001D
          DECB
          BPL   L84A8
L84D0:
          RTS

L84D1:
          TST   $001F
          BNE   L84D0
          TST   $002B
          BEQ   L84D0
          JSR   L879D
          LDAA  $00,X
          ANDA  $0020
          BEQ   L84D0
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L849C

L84EF:
          CLR   $002B
          LDAA  $0020
          STAA  $0021
          LDAA  $0029
          STAA  $001C
          LDAB  $002A
          DECB
          BLE   L8530
L84FF:
          INC   $001C
          STAB  $001D
          JSR   L878C
          LDAA  $00,X
          CLC
          LSR   $0021
          BCS   L8530
          ANDA  $0021
          BEQ   L8531
          INC   $002B
          TST   $001F
          BEQ   L852B
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L852B:
          LDAB  $001D
          DECB
          BPL   L84FF
L8530:
          RTS

L8531:
          TST   $001F
          BNE   L8530
          TST   $002B
          BEQ   L8530
          JSR   L879D
          LDAA  $00,X
          ANDA  $0021
          BEQ   L8530
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L84EF

L854F:
          CLR   $002B
          LDAA  $002A
          STAA  $001D
          LDAA  $0020
          STAA  $0021
          LDAB  $0029
          INCB
          CMPB  #$07
          BGE   L8591
L8561:
          STAB  $001C
          JSR   L878C
          CLC
          LSR   $0021
          BCS   L8591
          LDAA  $00,X
          ANDA  $0021
          BEQ   L8592
          INC   $002B
          TST   $001F
          BEQ   L858A
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L858A:
          LDAB  $001C
          INCB
          CMPB  #$08
          BNE   L8561
L8591:
          RTS

L8592:
          TST   $001F
          BNE   L8591
          TST   $002B
          BEQ   L8591
          JSR   L879D
          LDAA  $00,X
          ANDA  $0021
          BEQ   L8591
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L854F

L85B0:
          LDAA  $0029
          STAA  $001C
          CLR   $002B
          LDAA  $0020
          STAA  $0021
          LDAB  $002A
          INCB
          CMPB  #$07
          BGE   L85F5
L85C2:
          INC   $001C
          STAB  $001D
          JSR   L878C
          LDAA  $00,X
          CLC
          LSR   $0021
          BCS   L85F5
          ANDA  $0021
          BEQ   L85F6
          INC   $002B
          TST   $001F
          BEQ   L85EE
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L85EE:
          LDAB  $001D
          INCB
          CMPB  #$08
          BNE   L85C2
L85F5:
          RTS

L85F6:
          TST   $001F
          BNE   L85F5
          TST   $002B
          BEQ   L85F5
          JSR   L879D
          LDAA  $0021
          ANDA  $00,X
          BEQ   L85F5
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L85B0

L8614:
          CLR   $002B
          LDAA  $0029
          STAA  $001C
          LDAB  $002A
          INCB
          CMPB  #$07
          BGE   L864C
L8622:
          STAB  $001D
          JSR   L878C
          LDAA  $00,X
          ANDA  $0020
          BEQ   L864D
          INC   $002B
          TST   $001F
          BEQ   L8645
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0020
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L8645:
          LDAB  $001D
          INCB
          CMPB  #$08
          BNE   L8622
L864C:
          RTS

L864D:
          TST   $001F
          BNE   L864C
          TST   $002B
          BEQ   L864C
          JSR   L879D
          LDAA  $0020
          ANDA  $00,X
          BEQ   L864C
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L8614

L866B:
          CLR   $002B
          LDAA  $0029
          STAA  $001C
          LDAA  $0020
          STAA  $0021
          LDAB  $002A
          INCB
          CMPB  #$07
          BGE   L86B0
L867D:
          DEC   $001C
          STAB  $001D
          JSR   L878C
          LDAA  $00,X
          CLC
          ASL   $0021
          BCS   L86B0
          ANDA  $0021
          BEQ   L86B1
          INC   $002B
          TST   $001F
          BEQ   L86A9
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L86A9:
          LDAB  $001D
          INCB
          CMPB  #$08
          BNE   L867D
L86B0:
          RTS

L86B1:
          TST   $001F
          BNE   L86B0
          TST   $002B
          BEQ   L86B0
          JSR   L879D
          LDAA  $0021
          ANDA  $00,X
          BEQ   L86B0
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L866B

L86CF:
          CLR   $002B
          LDAA  $002A
          STAA  $001D
          LDAA  $0020
          STAA  $0021
          LDAB  $0029
          DECB
          BLE   L870D
L86DF:
          STAB  $001C
          JSR   L878C
          CLC
          ASL   $0021
          BCS   L870D
          LDAA  $00,X
          ANDA  $0021
          BEQ   L870E
          INC   $002B
          TST   $001F
          BEQ   L8708
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L8708:
          LDAB  $001C
          DECB
          BPL   L86DF
L870D:
          RTS

L870E:
          TST   $001F
          BNE   L870D
          TST   $002B
          BEQ   L870D
          JSR   L879D
          LDAA  $0021
          ANDA  $00,X
          BEQ   L870D
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L86CF

L872C:
          CLR   $002B
          LDAA  $0020
          STAA  $0021
          LDAA  $0029
          STAA  $001C
          LDAB  $002A
          DECB
          BLE   L876D
L873C:
          STAB  $001D
          DEC   $001C
          JSR   L878C
          CLC
          ASL   $0021
          BCS   L876D
          LDAA  $00,X
          ANDA  $0021
          BEQ   L876E
          INC   $002B
          TST   $001F
          BEQ   L8768
          EORA  $00,X
          STAA  $00,X
          JSR   L879D
          LDAA  $0021
          ORAA  $00,X
          STAA  $00,X
          JSR   L82BF
L8768:
          LDAB  $001D
          DECB
          BPL   L873C
L876D:
          RTS

L876E:
          TST   $001F
          BNE   L876D
          TST   $002B
          BEQ   L876D
          JSR   L879D
          LDAA  $0021
          ANDA  $00,X
          BEQ   L876D
          LDAA  #$01
          STAA  $001F
          STAA  $001E
          JSR   L82B7
          BRA   L872C

L878C:
          LDX   $001A
          STX   $01EC
          LDAB  $001D
          ADDB  $01ED
          STAB  $01ED
          LDX   $01EC
          RTS

L879D:
          LDX   $0018
          STX   $01EC
          LDAB  $001D
          ADDB  $01ED
          STAB  $01ED
          LDX   $01EC
          RTS

L87AE:
          CLRA
          LDAB  #$08
L87B1:
          STAA  $00,X
          INX
          DECB
          BNE   L87B1
          RTS

*  Cartridge Menu String
*  ---------------------
*  

MENUSTR   FCB   $EC          ; Control Byte - Write 12 spaces with Dark Green 
          FCC   "CATENA"
          FCB   $F8          ; Control Byte - Write 24 spaces with Dark Green
          FCB   $F6          ; Control Byte - Write 22 spaces with Dark Green
          FCC   "1. TWO PLAYER" 
          FCB   $D3          ; Control Byte - Fill 19 spaces with next byte
          FCB   $60          ; Fill-Byte - ASCII $60, (Light Green)
          FCC   "2. PLAYER VERSUS COMPUTER"
          FCB   $C7          ; Control Byte - Fill 7 spaces with next byte
          FCB   $60          ; Fill-Byte - ASCII $60, (Light Green)
          FCC   "3. COMPUTER ALONE"
          FCB   $CF         ; Control Byte - Fill 15 spaces with next byte
          FCB   $60         ; Fill-Byte - ASCII $60, (Light Green)
          FCB   EOS         ; Control Byte - End of String
          
          FCB   $FF         ; Last Byte of Cartridge - Not Used