2 ;;; An implementation of the Memory Array Redcode Simulator (MARS)
8 (define core-size 8000)
9 (define max-steps 10000)
15 (define core (make-vector core-size '()))
21 (define (make-instr opcode modifier addrA modeA addrB modeB))
27 (define (make-player name . ptrs)
30 (define (player-ptrs player)
33 (define (player-name player)
36 (define (player-set-ptrs! player ptrs)
37 (set-cdr! player ptrs))
45 (append (cdr l) (list (car l)))
48 (define (run playerA playerB step)
50 ((> step max-steps) 'tie)
51 ((null? (player-ptrs playerA) playerB))
52 ((null? (player-ptrs playerB) playerA))
54 (let ((ptrs (player-ptrs playerA)))
55 (player-set-ptrs! (append (cdr ptrs)
56 (execute-instr (car ptrs)))))
57 (run playerB player A (+ step 1)))))
59 (define (execute-instr ptr)
60 (let ((instr (vector-ref core ptr)))