From f4a32b91eb93f25ff934201d1c725cd375d940d7 Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Tue, 12 Aug 2014 20:44:55 +0100 Subject: [PATCH] Novo projeto --- zx-brainfuck/README.md | 31 +++++++++++++ zx-brainfuck/main.asm | 102 +++++++++++++++++++++++++++++++++++++++++ zx-brainfuck/main.tap | Bin 0 -> 247 bytes 3 files changed, 133 insertions(+) create mode 100644 zx-brainfuck/README.md create mode 100644 zx-brainfuck/main.asm create mode 100644 zx-brainfuck/main.tap diff --git a/zx-brainfuck/README.md b/zx-brainfuck/README.md new file mode 100644 index 0000000..2bfcb39 --- /dev/null +++ b/zx-brainfuck/README.md @@ -0,0 +1,31 @@ +zx-brainfuck +========= + +ZX-Brainfuck é um interpretador de [Brainfuck] em Assembly no ZX Spectrum. + +Requisitos +----------- + +O unico realmente necessário é o Assembler, mas para ver o resultado convem tambem ter um emulador, os verdadeiros podem converter o ficheiro [tap] para audio, passar para um leitor de mp3 e ligar a um Spectrum real :-D + +* [Pasmo] - Assembler de Z80, é Open Source e Cross Platform +* [ZX Spin] - Emulador de ZX Spectrum para Windows que inclui um Debugger + +Instalação +-------------- + +```sh +git clone https://github.com/falsovsky/z80.git +cd z80/zx-brainfuck +pasmo -v --tapbas --err main.asm main.tap +``` + +Licença +---- + +BSD + +[Brainfuck]:http://en.wikipedia.org/wiki/Brainfuck +[tap]:http://www.worldofspectrum.org/faq/reference/formats.htm +[Pasmo]:http://pasmo.speccy.org/ +[ZX Spin]:http://www.zophar.net/sinclair/zx-spin.html diff --git a/zx-brainfuck/main.asm b/zx-brainfuck/main.asm new file mode 100644 index 0000000..89896a6 --- /dev/null +++ b/zx-brainfuck/main.asm @@ -0,0 +1,102 @@ +org 30000 + +tv_flag equ $5c3c ; Variavel das flags da tv + +OP_INC_DP equ $3e +OP_DEC_DP equ $3c +OP_INC_VAL equ $2b +OP_DEC_VAL equ $2d +OP_OUT equ $2e +OP_IN equ $2c +OP_JMP_FWD equ $5b +OP_JMP_BCK equ $5d + +;brainfuck db "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", 0 +brainfuck db "+++++++++++++++++++++++++++++++++.", 0 +memory_pos db $0,$80 + +start ; Começa em $75a2 + xor a ; O mesmo que LD a, 0 + ld (tv_flag), a ; Faz com que o rst $10 envie output pra tv + push bc ; Guarda BC na stack + +main + ld hl, brainfuck +read_bf + ld a,(hl) + + ; EOF + cp 0 + jr z, end_main + + ; > + cp OP_INC_DP + jr z, F_INC_DP + + ; < + cp OP_DEC_DP + jr z, F_DEC_DP + + ; + + cp OP_INC_VAL + jr z, F_INC_VAL + + ; + + cp OP_DEC_VAL + jr z, F_DEC_VAL + + ; . + cp OP_OUT + jr z, F_OUT + +continue + inc hl + jr read_bf + +end_main + pop bc ; Tira o BC da stack + ret ; Sai para o BASIC + +F_INC_DP + push hl + ld hl, (memory_pos) + inc hl + ld (memory_pos), hl + pop hl + jr continue + +F_DEC_DP + push hl + ld hl, (memory_pos) + dec hl + ld (memory_pos), hl + pop hl + jr continue + +F_INC_VAL + push hl + ld hl, (memory_pos) + ld a, (hl) + inc a + ld (hl), a + pop hl + jr continue + +F_DEC_VAL + push hl + ld hl, (memory_pos) + ld a, (hl) + dec a + ld (hl), a + pop hl + jr continue + +F_OUT + push hl + ld hl, (memory_pos) + ld a, (hl) + rst $10 + ld (hl), a + jr continue + +end start diff --git a/zx-brainfuck/main.tap b/zx-brainfuck/main.tap new file mode 100644 index 0000000000000000000000000000000000000000..e6100c3a905f67e3567511fd50d0c7c6ed94d6e4 GIT binary patch literal 247 zcmWe;U|`6}PfSTIQUC&X1}+A725C=*{|sEb41bL*fq;*JLBEuNmqA3F;fs;6nV|tt zz$%78$H>$a$okI!l#*j*c(0_io|i#`kKyM5V*>+YbD&fxP*;U80|RqzVrHIRNn(M5 zLLGxaDMQ1L28RFIgn%9cL&JI_o0y}D2BmfX7&OHH*=dOWv(b?Gr>&v