; Tests most register instructions. ; Takes 10 seconds. ;.define PRINT_CHECKSUMS 1 .include "shell.inc" .include "instr_test.s" instrs: .byte $00,0,0 ; NOP .byte $2F,0,0 ; CPL .byte $37,0,0 ; SCF .byte $3F,0,0 ; CCF .byte $B0,0,0 ; OR B .byte $B1,0,0 ; OR C .byte $B2,0,0 ; OR D .byte $B3,0,0 ; OR E .byte $B4,0,0 ; OR H .byte $B5,0,0 ; OR L .byte $B7,0,0 ; OR A .byte $B8,0,0 ; CP B .byte $B9,0,0 ; CP C .byte $BA,0,0 ; CP D .byte $BB,0,0 ; CP E .byte $BC,0,0 ; CP H .byte $BD,0,0 ; CP L .byte $BF,0,0 ; CP A .byte $80,0,0 ; ADD B .byte $81,0,0 ; ADD C .byte $82,0,0 ; ADD D .byte $83,0,0 ; ADD E .byte $84,0,0 ; ADD H .byte $85,0,0 ; ADD L .byte $87,0,0 ; ADD A .byte $88,0,0 ; ADC B .byte $89,0,0 ; ADC C .byte $8A,0,0 ; ADC D .byte $8B,0,0 ; ADC E .byte $8C,0,0 ; ADC H .byte $8D,0,0 ; ADC L .byte $8F,0,0 ; ADC A .byte $90,0,0 ; SUB B .byte $91,0,0 ; SUB C .byte $92,0,0 ; SUB D .byte $93,0,0 ; SUB E .byte $94,0,0 ; SUB H .byte $95,0,0 ; SUB L .byte $97,0,0 ; SUB A .byte $98,0,0 ; SBC B .byte $99,0,0 ; SBC C .byte $9A,0,0 ; SBC D .byte $9B,0,0 ; SBC E .byte $9C,0,0 ; SBC H .byte $9D,0,0 ; SBC L .byte $9F,0,0 ; SBC A .byte $A0,0,0 ; AND B .byte $A1,0,0 ; AND C .byte $A2,0,0 ; AND D .byte $A3,0,0 ; AND E .byte $A4,0,0 ; AND H .byte $A5,0,0 ; AND L .byte $A7,0,0 ; AND A .byte $A8,0,0 ; XOR B .byte $A9,0,0 ; XOR C .byte $AA,0,0 ; XOR D .byte $AB,0,0 ; XOR E .byte $AC,0,0 ; XOR H .byte $AD,0,0 ; XOR L .byte $AF,0,0 ; XOR A .byte $05,0,0 ; DEC B .byte $0D,0,0 ; DEC C .byte $15,0,0 ; DEC D .byte $1D,0,0 ; DEC E .byte $25,0,0 ; DEC H .byte $2D,0,0 ; DEC L .byte $3D,0,0 ; DEC A .byte $04,0,0 ; INC B .byte $0C,0,0 ; INC C .byte $14,0,0 ; INC D .byte $1C,0,0 ; INC E .byte $24,0,0 ; INC H .byte $2C,0,0 ; INC L .byte $3C,0,0 ; INC A .byte $07,0,0 ; RLCA .byte $17,0,0 ; RLA .byte $0F,0,0 ; RRCA .byte $1F,0,0 ; RRA .byte $CB,$00,0 ; RLC B .byte $CB,$01,0 ; RLC C .byte $CB,$02,0 ; RLC D .byte $CB,$03,0 ; RLC E .byte $CB,$04,0 ; RLC H .byte $CB,$05,0 ; RLC L .byte $CB,$07,0 ; RLC A .byte $CB,$08,0 ; RRC B .byte $CB,$09,0 ; RRC C .byte $CB,$0A,0 ; RRC D .byte $CB,$0B,0 ; RRC E .byte $CB,$0C,0 ; RRC H .byte $CB,$0D,0 ; RRC L .byte $CB,$0F,0 ; RRC A .byte $CB,$10,0 ; RL B .byte $CB,$11,0 ; RL C .byte $CB,$12,0 ; RL D .byte $CB,$13,0 ; RL E .byte $CB,$14,0 ; RL H .byte $CB,$15,0 ; RL L .byte $CB,$17,0 ; RL A .byte $CB,$18,0 ; RR B .byte $CB,$19,0 ; RR C .byte $CB,$1A,0 ; RR D .byte $CB,$1B,0 ; RR E .byte $CB,$1C,0 ; RR H .byte $CB,$1D,0 ; RR L .byte $CB,$1F,0 ; RR A .byte $CB,$20,0 ; SLA B .byte $CB,$21,0 ; SLA C .byte $CB,$22,0 ; SLA D .byte $CB,$23,0 ; SLA E .byte $CB,$24,0 ; SLA H .byte $CB,$25,0 ; SLA L .byte $CB,$27,0 ; SLA A .byte $CB,$28,0 ; SRA B .byte $CB,$29,0 ; SRA C .byte $CB,$2A,0 ; SRA D .byte $CB,$2B,0 ; SRA E .byte $CB,$2C,0 ; SRA H .byte $CB,$2D,0 ; SRA L .byte $CB,$2F,0 ; SRA A .byte $CB,$30,0 ; SWAP B .byte $CB,$31,0 ; SWAP C .byte $CB,$32,0 ; SWAP D .byte $CB,$33,0 ; SWAP E .byte $CB,$34,0 ; SWAP H .byte $CB,$35,0 ; SWAP L .byte $CB,$37,0 ; SWAP A .byte $CB,$38,0 ; SRL B .byte $CB,$39,0 ; SRL C .byte $CB,$3A,0 ; SRL D .byte $CB,$3B,0 ; SRL E .byte $CB,$3C,0 ; SRL H .byte $CB,$3D,0 ; SRL L .byte $CB,$3F,0 ; SRL A instrs_end: test_instr: ld c,$00 call test ld c,$F0 call test ret test: ; Go through each value for A ld hl,values a_loop: ld b,(hl) push hl ; Go through each value for other registers ld hl,values values_loop: push bc push hl push bc ; BC ld a,(hl+) ld b,a ld a,(hl+) ld c,a ; HL ld a,(hl+) ld d,a ld a,(hl+) ld e,a push de ; DE ld a,(hl+) ld d,a ld a,(hl+) ld e,a pop hl pop af ; call print_regs jp instr instr_done: ; Checksum registers call checksum_af_bc_de_hl pop hl pop bc inc hl ld a,l cp