From 3879abae4b45354c41527f60e993c9b4ee34ef9f Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Wed, 13 Aug 2014 01:12:38 +0100 Subject: [PATCH] Loops ja funcionam! --- zx-brainfuck/main.asm | 53 ++++++++++++++++++++++++++++++++++++------ zx-brainfuck/main.tap | Bin 365 -> 420 bytes 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/zx-brainfuck/main.asm b/zx-brainfuck/main.asm index c108b2f..adaec2b 100644 --- a/zx-brainfuck/main.asm +++ b/zx-brainfuck/main.asm @@ -12,9 +12,10 @@ OP_IN equ "," OP_JMP_FWD equ "[" OP_JMP_BCK equ "]" -;brainfuck db "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", 0 +brainfuck db "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", 0 ;brainfuck db "+++++++++++++++++++++++++++++++++.", 0 -brainfuck db "++++[>++++++++++<-]>++.>+++++++++++++.<<++[>.<-]>>.<<+++[>.<-]>>.<<++++[>.<-]>>.<<+++++[>.<-]>>.", 0 +;brainfuck db "++++[>++++++++++<-]>++.>+++++++++++++.<<++[>.<-]>>.<<+++[>.<-]>>.<<++++[>.<-]>>.<<+++++[>.<-]>>.", 0 +;brainfuck db "++[>+<-]" ,0 memory_pos db $0,$80 source_pos db $0 @@ -24,8 +25,6 @@ start ; Começa em $75a2 push bc ; Guarda BC na stack main - ;ld hl, brainfuck -read_bf ld hl, brainfuck ld a, (source_pos) ld d, $0 @@ -71,28 +70,33 @@ read_bf jr z, F_JMP_BCK continue - inc hl ld a, (source_pos) inc a ld (source_pos), a - jr read_bf + jr main end_main pop bc ; Tira o BC da stack ret ; Sai para o BASIC +; ------------------------------------- + F_INC_DP ld a, (memory_pos) inc a ld (memory_pos), a jr continue +; ------------------------------------- + F_DEC_DP ld a, (memory_pos) dec a ld (memory_pos), a jr continue +; ------------------------------------- + F_INC_VAL ld de, (memory_pos) ld a, (de) @@ -100,6 +104,8 @@ F_INC_VAL ld (de), a jr continue +; ------------------------------------- + F_DEC_VAL ld de, (memory_pos) ld a, (de) @@ -107,12 +113,16 @@ F_DEC_VAL ld (de), a jr continue +; ------------------------------------- + F_OUT ld de, (memory_pos) ld a, (de) rst $10 jr continue +; ------------------------------------- + F_IN ld a, $0 ld (last_k), a ; Limpa o valor da ultima tecla pressionada @@ -124,17 +134,46 @@ F_IN_LOOP ld (de), a jr continue +; ------------------------------------- + F_JMP_FWD + ld de, (memory_pos) + ld a, (de) + cp 0 + jr z, SKIP_LOOP + ld a, (source_pos) ld d, 0 ld e, a push de jr continue + +SKIP_LOOP + ld a, (source_pos) + inc a + ld (source_pos), a + + ld hl, brainfuck + ld a, (source_pos) + ld d, $0 + ld e, a + + add hl, de + ld a, (hl) + cp OP_JMP_BCK + jr nz, SKIP_LOOP + + ld a, (source_pos) + inc a + ld (source_pos), a + jp main + +; ------------------------------------- F_JMP_BCK pop de ld a, e ld (source_pos), a - jp read_bf + jp main end start diff --git a/zx-brainfuck/main.tap b/zx-brainfuck/main.tap index e74514b770e7af1499348e2396d6803f19da9d40..2952e210e1c09c50f3ae509a2527b2ebf91a3186 100644 GIT binary patch literal 420 zcmWe;U|`6}PfSTIQUC&X1}+A725C=*{|sEb41bL*fq;*JLBEuNmqA3F;fs;6nV|tt zz$%78$H>$a$okI!l#*j*c(0_io|i#`kKyM5V*^7&kkn$Ju6|(#2Ikzv%sjo4!~z8c zZAODqhK4n|jQ_RaAleSfgwa4Qh-s&70|dIUK(?NpwjNZG9*6Pg}$ApRR`4 zKRpfWe>xiW|DrYg{>5t40M*(UEh?2baqy(o0w8lisl*!~!xqGN{5E<)sg#Y7#4Rwx zR!HI^m~ma=q#c71M~oFm4A6?7ATc3{ZD1)NpA%yJRf#1~vyojCtMCdcdU!?Y#cH6< HKzaiJ#mjpX literal 365 zcmWe;U|`6}PfSTIQUC&X1}+A725C=*{|sEb41bL*fq;*JLBEuNmqA3F;fs;6nV|tt zz$%78$H>$a$okI!l#*j*c(0_io|i#`kKyM5V*^72kfJF-U3-KX7?^VtGxPLH5(^X* zzAzY+GBgx@WB9KP1krXN5&~>=V}U$9BoUyvo{bGil^#eENCG)%JajIC&%n^Yu-?cf z=BT1Usnz6CF@|`_x_=BBTL0`cH2&FW=>F5zF#4yfVg64~!{(okhQq&T4gY_!8X?L+ z#WqHhOC^pUJZUu%$edUz@fygm1u-7Ijh