ASM Super Mario Brothers 1
Code:
0x8000: SEI ;
0x8001: CLD ;
0x8002: LDA #$10 ;
0x8004: STA $2000 ;
0x8007: LDX #$FF ;
0x8009: TXS ;
0x800A: LDA $2002 ;
0x800D: BPL ;
0x800A: LDA $2002 ;
0x800D: BPL ;
0x800A: LDA $2002 ;
0x800D: BPL ;
0x800A: LDA $2002 ;
0x800D: BPL ;
0x800F: LDA $2002 ;
0x8012: BPL ;
0x8014: LDY #$FE ;
0x8016: LDX #$5 ;
0x8018: LDA $07D7 ,X ;
0x801B: CMP #$0A ;
0x801D: BCS ;
0x802B: JSR $90CC ;
0x90CC: LDX #$7 ;
0x90CE: LDA #$0 ;
0x90D0: STA $06 ;
0x90D2: STX $07 ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
Now my code seems to works better...
My question now is in most of CMP (comparison ... x , y ...)
I'm setting my flags in this way...
Code:
cpu.setupFlagSign(cpu.accumulator - getOperand());
cpu.setupFlagZero(cpu.accumulator - getOperand()));
cpu.flagCarry =(cpu.accumulator - getOperand() < 0x100) ? 1 : 0);
I'm doing it correct?
I can care about carry flag always like that?
The game seems to be in another loop but this time I can't see why it don't go out the loop... I believe that this part is waiting to decay the Y register one by one until zero...
Code:
0x802B: JSR $90CC ;
0x90CC: LDX #$7 ;
0x90CE: LDA #$0 ;
0x90D0: STA $06 ;
0x90D2: STX $07 ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($45),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($9D),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($6),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($B1),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($C8),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($3),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($44),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($9D),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($6),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($B1),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($0),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($A6),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($A8),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($2),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($65),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($A),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
0x90D6: BNE ;
0x90DC: STA ($1),Y ;
0x90DE: DEY ;
0x90DF: CPY #$FF ;
0x90E1: BNE ;
0x90D4: CPX #$01 ;
...