114 lines
2.8 KiB
Text
114 lines
2.8 KiB
Text
; "eight queens problem" benchmark test
|
|
|
|
.radix 16
|
|
|
|
.loc 0
|
|
|
|
nop ;
|
|
mov #scr,@#E800
|
|
mov #88C6,@#E802
|
|
; clear the display RAM
|
|
mov #scr,r0
|
|
mov #1E0,r1
|
|
cls: clr (r0)+
|
|
sob r1,cls
|
|
; display the initial counter value
|
|
clr r3
|
|
mov #scr,r0
|
|
jsr pc,number
|
|
; perform the test
|
|
jsr pc,queens
|
|
; display the counter
|
|
mov #scr,r0
|
|
jsr pc,number
|
|
finish: br finish
|
|
|
|
; display the character R1 at the screen address R0,
|
|
; advance the pointer R0 to the next column
|
|
putc: mov r2,-(sp)
|
|
; R1 <- 6 * R1
|
|
asl r1 ;* 2
|
|
mov r1,-(sp)
|
|
asl r1 ;* 4
|
|
add (sp)+,r1 ;* 6
|
|
add #chars,r1
|
|
mov #6,r2
|
|
putc1: movb (r1)+,(r0)
|
|
add #1E,r0
|
|
sob r2,putc1
|
|
sub #B2,r0 ;6 * 1E - 2 = B2
|
|
mov (sp)+,r2
|
|
rts pc
|
|
|
|
print1: jsr pc,putc
|
|
; print a string pointed to by R2 at the screen address R0,
|
|
; advance the pointer R0 to the next column,
|
|
; the string should be terminated by a negative byte
|
|
print: movb (r2)+,r1
|
|
bpl print1
|
|
rts pc
|
|
|
|
; display the word R3 decimal at the screen address R0
|
|
number: mov sp,r1
|
|
mov #A0A,-(sp)
|
|
mov (sp),-(sp)
|
|
mov (sp),-(sp)
|
|
movb #80,-(r1)
|
|
numb1: clr r2
|
|
div #A,r2
|
|
movb r3,-(r1)
|
|
mov r2,r3
|
|
bne numb1
|
|
mov sp,r2
|
|
jsr pc,print
|
|
add #6,sp
|
|
rts pc
|
|
|
|
queens: mov #64,r5 ;100
|
|
l06: clr r3
|
|
clr r0
|
|
l00: cmp #8,r0
|
|
beq l05
|
|
inc r0
|
|
movb #8,ary(r0)
|
|
l01: inc r3
|
|
mov r0,r1
|
|
l02: dec r1
|
|
beq l00
|
|
movb ary(r0),r2
|
|
movb ary(r1),r4
|
|
sub r2,r4
|
|
beq l04
|
|
bcc l03
|
|
neg r4
|
|
l03: add r1,r4
|
|
sub r0,r4
|
|
bne l02
|
|
l04: decb ary(r0)
|
|
bne l01
|
|
sob r0,l04
|
|
l05: sob r5,l06
|
|
mov r3,cnt
|
|
rts pc
|
|
|
|
; characters, width = 8 pixels, height = 6 pixels
|
|
chars: .byte 3C, 46, 4A, 52, 62, 3C ;digit '0'
|
|
.byte 18, 28, 8, 8, 8, 3E ;digit '1'
|
|
.byte 3C, 42, 2, 3C, 40, 7E ;digit '2'
|
|
.byte 3C, 42, C, 2, 42, 3C ;digit '3'
|
|
.byte 8, 18, 28, 48, 7E, 8 ;digit '4'
|
|
.byte 7E, 40, 7C, 2, 42, 3C ;digit '5'
|
|
.byte 3C, 40, 7C, 42, 42, 3C ;digit '6'
|
|
.byte 7E, 2, 4, 8, 10, 10 ;digit '7'
|
|
.byte 3C, 42, 3C, 42, 42, 3C ;digit '8'
|
|
.byte 3C, 42, 42, 3E, 2, 3C ;digit '9'
|
|
.byte 0, 0, 0, 0, 0, 0 ;space
|
|
|
|
.even
|
|
|
|
cnt: .blkw 1
|
|
ary: .blkb 9
|
|
|
|
.loc 200
|
|
|
|
scr: ;display RAM
|