;;; ;;; An implementation of the Memory Array Redcode Simulator (MARS) ;;; ;;; Constants ;; (define core-size 8000) (define max-steps 10000) ;;; Memory setup ;; (define core (make-vector core-size '())) ;;; Instructions ;; (define (make-instr opcode modifier addrA modeA addrB modeB)) ;;; Players ;; (define (make-player name . ptrs) (cons name ptrs)) (define (player-ptrs player) (cdr player)) (define (player-name player) (car player)) (define (player-set-ptrs! player ptrs) (set-cdr! player ptrs)) ;;; Main loop ;; (define (list-rot l) (if (> (length l) 1) (append (cdr l) (list (car l))) l)) (define (run playerA playerB step) (cond ((> step max-steps) 'tie) ((null? (player-ptrs playerA) playerB)) ((null? (player-ptrs playerB) playerA)) (else (let ((ptrs (player-ptrs playerA))) (player-set-ptrs! (append (cdr ptrs) (execute-instr (car ptrs))))) (run playerB player A (+ step 1))))) (define (execute-instr ptr) (let ((instr (vector-ref core ptr))) (match instr ())))