n equ 8 ; queens maximum equ 32 ; only limited by time place equ $00 count equ maximum+place ; 64 bits (8 bytes) length equ maximum+8 org $80 start LDY #n ; n queens on an n x n board STY greater+1 DEY STY safe+1 LDX #length LDA #$00 clear STA place,X DEX BPL clear next INX LDA #$FF STA place,X loop INC place,X LDA place,X greater CMP #n BCS max STX index+1 index LDY #$00 ; index+1 BEQ safe DEY STA compare+1 STA add+1 ; compare STA sub+1 ; compare issafe LDA place,Y compare CMP #$00 ; compare+1 BEQ loop ; unsafe INC add+1 add CMP #$00 ; add+1 BEQ loop ; unsafe DEC sub+1 sub CMP #$00 ; sub+1 BEQ loop ; unsafe DEY BPL issafe safe CPX #n-1 BNE next INC count ; 64 bits (8 bytes) BNE loop INC count+1 BNE loop INC count+2 BNE loop INC count+3 BNE loop INC count+4 BNE loop INC count+5 BNE loop INC count+6 BNE loop INC count+7 BNE loop BRK max DEX BPL loop ; RTS