(back to project page)

NOMORE Disassembly

                   ; 6502bench SourceGen v1.7.3
                   TXTPTR                .eq     $03    {addr/2}         ;current tile position on text page 1
                   MAPPOS                .eq     $1b                     ; playfield position
                   MAPHALF               .eq     $1c                     ; playfield half (top/bottom); like top bit of MAPPOS
                   doorNeshom            .eq     $35                     ; FF = door goes to Neshom house, 01 = Neshom realm
                   MON_CSWL              .eq     $36                     ;character output hook (lo)
                   spokeTo               .eq     $37                     ; spoke to or bought from NPC while on this screen
                   GAME1_BITTAB5         .eq     $1dbd
                   GAME1_BITTAB6         .eq     $1dbe
                   GAME2_PRNTSTR         .eq     $600c
                   GAME2_message_wait    .eq     $7706
                   itemStatePos          .eq     $b300  {addr/256}       ; 256 map positions, one per item
                   itemState             .eq     $b500  {addr/256}       ; 7=mappos high bit, 6=in world, 5=in inv, 4..0=map row

                                         .org    $0100
                   NOTE: Looks like some bytes are corrupt. Using any spirit action other than
                   PENSE when you have insufficient spirit energy results in "I HAVE NOTHING MORE
                   TO GIVE" instead of "YOU NEED MORE SPIRIT ENERGY", and then locks up. That code
                   jumps to $0103, an illegal opcode. PENSE works because it does not use $0103,
                   but its own copy of that code. Jump to $0100 should work, because it will
                   execute harmless instructions on its way to $010E.
                   
                   Either the source disk was corrupt, there was some unhandled copy protection, or
                   this version actually has a bug.
                   
                   $0100: JMP $010E ??  ; STACK_npc_offer
                   $0103: JMP $0160 ??  ; STACK_need_energy
0100: 31 36                              and     (MON_CSWL),y
0102: 34 03                              bit     TXTPTR,x
0104: 34 35                              bit     doorNeshom,x
0106: 36 37                              rol     spokeTo,x
0108: 38                                 sec
0109: 39 10 d0                           and     $d010,y
010c: 01 60                              ora     ($60,x)
010e: a2 ff        npc_offer             ldx     #$ff
0110: ca           @next_item            dex
0111: e0 ff                              cpx     #$ff                    ;check item = 00..FE
0113: d0 25                              bne     @valid_item_num
0115: 68                                 pla                             ;cycled thru all item numbers
0116: 68                                 pla                             ;discard caller return address (speak module)
0117: 20 0c 60                           jsr     GAME2_PRNTSTR
011a: 01                                 .dd1    $01
011b: c9 a0 c8 c1+                       .str    ↑“I HAVE NOTHING MORE TO GIVE”
0136: ff                                 .dd1    $ff
0137: 4c 06 77                           jmp     GAME2_message_wait      ;return to game

013a: bd 00 b3     @valid_item_num       lda     itemStatePos,x
013d: c5 1b                              cmp     MAPPOS
013f: d0 cf                              bne     @next_item
0141: bd 00 b5                           lda     itemState,x
0144: 29 80                              and     #$80                    ;check if mapside is same as item's (bit 7)
0146: d0 06                              bne     @side0
0148: a5 1c                              lda     MAPHALF
014a: d0 c4                              bne     @next_item
014c: f0 04                              beq     @check_state

014e: a5 1c        @side0                lda     MAPHALF
0150: f0 be                              beq     @next_item
0152: bd 00 b5     @check_state          lda     itemState,x
0155: 2c be 1d                           bit     GAME1_BITTAB6           ;bit 6 must be set
0158: f0 b6                              beq     @next_item
015a: 2c bd 1d                           bit     GAME1_BITTAB5           ;bit 5 must be clear
015d: d0 b1                              bne     @next_item
015f: 60                                 rts

0160: 20 0c 60     need_more_energy      jsr     GAME2_PRNTSTR
0163: 01                                 .dd1    $01
0164: d9 cf d5 a0+                       .str    ↑“YOU NEED MORE SPIRIT ENERGY”
017f: ff                                 .dd1    $ff
0180: 4c 06 77                           jmp     GAME2_message_wait

0183: e3 20 60 a0+                       .junk   45

Symbol Table

No exported symbols found.