183. 英特尔8080引导映像(ZEMU),9870字节
#16 "?63(o+?50;+'51;' # #@ " /*"r"{\D-v e-'[fa5.q]PkPPX)\( 9 '#CO"14"^ 92 7 222222222222222222222222 ##*/
#/*1&7//```"` [>.>.] )[-'][(7 >77*,68*,@'_ 7 )(22)S / \iiipsddpsdoh#####(#######?? #### ## ###### #### ###### # #### ####### #### ###### # #### ####### a5# \7aa*+42@n; 7 999993 1 7 3 1 8 1 1 55 EEEEEδΘΔΔΔΘΔΘλa k zzzzkf kf k zzzzzd kf k zzzzza kf bfz coding=utf8 p''53'S^' ! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退
#>x#z#111#y#y#y#_#0111118&1& 1111/"78"oo@ xxxxxxxxxxx /112\ ##### ####### # # ##### h#115# o# ##### #### ### #### # # ##### # ##### #### ### #### # # ##### # #
# 36!@`D e ++++++::@ L R.----._ x-----x ########8=,_## ### ###### ######## #### ##### ####### ##### ### # # #### ### ##### ####### ##### ### # # #### ### ##### #
#comment -[af] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ########## ### ## ##### ## #### ## # ##### ## ##### #### ##### ## # ## ## #### ## ##### #### ##### ## # ## ## ####
#~==RtRtRtMbMbMbPSPSPS # ????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!
#[#[]]QhQhQhQrQrQrHnHnHnbqbqbqLzLzLzQtQtQtTcTcTcRQRQRQ #
#<<<#++R++ ++++++++++++++++++++++++++++++++++++++++++U+++.._+++++++._ #
############################################################################## 4O6O@
#-]+-}}[.^x+;;+;;+;;+<>;;+;;+;;+;;;;;;+;;+;;.._]}--<^>++[+++++[>+++++++<-]>._ ++++._+++._^<]+-+<[<<._>>>-]^>[<+++++[>++++++++++<-]>@@+.---@._+>][[
#{
#=
#*
#cs
#2""/*
#9999 9 9
#9 999 99 9999 9
#9
# 9 9999
#`<`(+?+?0l0v01k1kMoOMoOMoOMoOMOOx0l0ix0jor0h0h1d111 0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11yxMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOotMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i000x1k1x0vx0v0l11110000011100^_)\\
[ "`e```.1'.0'.6''i]56pq\{}26q[puts 59][exit]" ,'_\['];#/s\\/;print"24"; exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>;?\:-._++._++++._#/<?\>3-++._6+---2._#</++++++++++++++++++++++++++++++++++++++++++++++++._++._++++++.>!\
' wWWWwWWWWwvwWWwWWWwvwWWWwWWWW\WWWWwWWWWwWWWWW/WW\wWWWWWWWWwwwwvwWW/WwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWW ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO MU ([]) ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ # {((((((\'; a=$(printf \\x00);b=$(echo -n $a|wc -c);case $b[1] in 1*)echo 54;;4*)echo 78;;8*)echo 166;;*1*)echo 50;;*)echo 58;;esac;exit;#)'; print(( eval("1\x2f 2")and(9)or 13<< (65 )>>65or 68)-(0and eval("\"ppp\".bytes.class==Array and(4)or(95==\"ar_\"[2]and 5-96 or-93)"))^1<<(65)>>62) or"'x"or'wWW s'#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]* *]* * *(<\>]xxxxxxxxxxxxxxxxxxxxxxxx)'#\\
__DATA__=1
#
###;{a=1}={a:null};console.log a&&39||180
# \\
""""
#
# \
=begin
#p :1*23!/5x%6E0 !|*****[[[828+*+@+*99]]]*****|!
;set print'-';print 89;exit#ss
[mxf]-main=-[165]- ###jxf*#p 173#*
p now 70 dollar off!
p has been selling out worldwide!
#PLACET,2<- #2FAC,2SUB#1<- #52FAC,2SUB#2<- #32FACREADOUT,2PLEASEGIVEUPFACs>>>
seeeemPaeue_ewuuweeee_eeeeeeCisajjapp_ppppxf⠆⠄⡒⡆⡘😆😨😒😨💬95💬👥➡😻😹😸🙀🙀😹😼😿🙀🙀😼😼😸🙀🙀🙀🙀
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚▲▲▲²²²²▲¡▼¡▲▲¡→
밠밠따빠빠맣박다맣받다맣희맣희うんたんたんたんたんうんうんうんうんうんたんうんうんうんたんうんたんたんうんたんたんうんたんたんうんたんたんうんたんたんたんたんたんうんうんうんうんたんたんうんたんたんたんうんうんうんたんうんうんたんうんうんたんうんうんたんうんたんうんうんうんたんたんうんたんたんうんたんたんうんたんたんうんたんたんたんうんうん
😊♈💖
😇♈♈
😊♉♈
😇♈♈
😇♈♉
😇♈💜
😊♉♈
😊📢♈
😈♈💜
😊📢♈
😇♉💞
😊📢♉⠀⢃⠛⠋
#-49,A,-1 #
#-5,A,-1 #
#6,A,-1 #
1 ! !
2 ! !
1 !!
1 x*
53 ++-------+
1 x*|$0011 \|
51 +|/1000 /|
1 x*|\ 0011\|
34 +|/01 00/|
15 +|\ 0011\| R"12"R _* ? ?@ _ !
1 *|@ 0110/| @ %"18" ?@ ?
1 | +| + *
1 !+-------+--- ? ! ?
1 ! <``=> ? @ ?
< < << < <
< B= ===== =>8 =
, 8= > B = =
= == = = > 8 =
D B+ += D x xxx x
` ` = > 8 = >
x ~ B = = = = > ~
B + = D+ ~ 8 = >x
x x x x x xx x
x x x+ xx x + + + + + <>
x x xx xx +++ + e$P+++++*D*+++1++1E!s
x+ +x +x x + + + +
8=+, _ + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + + +
+ + + +
+ + +
# + + +
#+ + ++ + + +
# + + +
+#
* +
*+*
# *************************************************+
# + +
# + +
+ + *
*****+
# + +
# + +
* *
+*****
# +
(printout t 164 )
(exit )
#cepp
MsgBox (0,"",169 )
#cs
Yo::=~147
::=
You can see an x here.<<<<
>{-<<<<<
> 176
>> Output 1
>SET x TO 120. [0]{472454523665721469465830106052219449897} @,-1,:*b5<>␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␌␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␌␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋
>X x. PPQ-}
>x--/2
> =157;y=146--/2
>main=print y{-ss s
\begin{code}
{-x ␉␉␉␉
␉
␉
-}
open import IO;main = run(putStr"159" )
\end{code}
ppppppppppppp
out &49 &1
out &56 &1
out &50 &1
Take Northern Line to Tooting Bec
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Embankment
Take Bakerloo Line to Embankment
7 UP
Take Northern Line to Mornington Crescent
7 RIGHT
7 RIGHT
7 TEACH
6 BOND
6 BOND
6 BOND
5 RIGHT
5 LEFT
5 RIGHT
7 BOND
7 TEACH
5 TEACH
6 YELL
5 TEACH
6 YELL
6 YELL
set ! 57,,...,,.,,..,,,,,,..,,,.$^
set ! 51. #"60"e.0,1,_ye do{--}gibe16"124"#8+*sizeString tnd xfmain=los*81''cagem x=4721en nd ogola=1ay $0C0 00 3cod/|puts_e
More 91 of this
How much is it
red down one blue up red down one blue up red up one red right two blue up sss
baa baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bleeeeeeeeeeeeet bleeeeeeeeeeeeet bleeeeeeeeeet baaaa bleet bleeeeeeeeeet bleeet bleeeeeeeeeet
wwWWWwWWWWWwWWWWWWWwWWWWWWWWppppp
When this program starts:
There is a scribe called x
x is to write 179
*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449,12597
#endif//*
#1""//*
#include<stdio.h>
#define x(d) #d
#define u8 "38\0 "//"
char*x="24 10 31 1"
"a c #FFC0FF""B c #0000C0""d c #58007B""e c #0C8302"
"h c #E60001""i c #CAFFFF""j c #280000""k c #CA0000""l c #CA007F""n c #330001 ""q c #E60000"
"o c #FF8000""t c #FF00BC""u c #008080"
"A c #0040C0""E c #808000""F c #00C040""G c #008000 ""R c #800000"
"H c #0000AA""I c #00AA00""J c #55FFFF""K c #AAAAAA"
"r c red""g c green""b c blue""c c cyan""m c magenta""y c #FFFF00""x c black""_ c #FFFFFF"
"HHHahtdegggggggyrggggggc"
"IHHaixuEFbGGbggbryAEGRgc"
"JJHajyurbgbgggggggb____o"
"IJHakmyyyyyyyyyyyyyyyyye"
"I__almyyyyyyyyyyyyyyyyye"
"K__anmyyyyyyyyyyyyyy_y_e"
"HH_aqggyyyyyyyyg____m_Je"
"JH_axxxxxxxxxxxxxxxxxxxx"
"K__aaaam___bbbbbBm_bbBab"
"K__________bbbbb___bbxbb";//"
int f(char*a,char*b ){puts(a?"124":sizeof(0,u8)-5?u8"67":*u8""?"37":x(0'0 "'\"")[9]?"75":'??-'&1? "79":"77");}main(){f(x,x=0);}//<*/
#1""/*/
>import Text.Heredoc--WWWWWWWWWWWWWW<<W
>instance Num B where fromInteger _=B 170;negate _=B$x#x
>data B=B{u::Integer};g=[here|here<-"W>W"] --WWWWWWWWWW570rt Unc27<<[w|]
>x=1;y#a=128;x#a=174
>main=print$last$172:[u$[-1]!!0|g<"Z>"] --}
console.log 178;
#1""/*/
#if 0
#endif//* --... ...--
/*/
p=sizeof(" (\");print'(''72'')';end!");main(){puts('??-'&1?"101":"92" );return 0;}
#if 0
#endif//* rk:start | print: "69" rk:end
print 61
#}
disp 49
#{
}{}<> K yya+- & g+$
$'main'3x A=AgRA; AC
#-3o4o#$$$
#<T>"3"O._</+++++++>/+++<-\>+++.---.\_<!+++++++++++++++++++++++++++++++++++++++++++++++++._++.-.>@
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxclou"78"<\++++>/<~#class P{function:Main(a:String[])~Nil{83->Print();}}
#endcOmment
#nocOmment outtext("155")
#ce pS9^7^8^MUOUOF @0:8:8 \ @,,1'1'<> @125iRE
#p|o51~nJ;#:p'34'3 \=# print(size([[1] [3]][1,:] )[1]==2?158+4:17)#>say 27#>>>say 170-3#]#print(47)#]#echo 21#>/#print(171)#s-#print 175#s
#8M`| <esc>dggi2<esc>// $}<}}<}>}[<< }<<<<<}<<}<<<<}<<<}}}<}}<}}<} }<}}<}}<}}}<}}<<<<<<<<<<<}}}<}}<}}<}}<}}<}}<}}}<<<<<<<<<<}+++++++++++++++++++++++++++++++++++++++++++++++++._++.._#]~-<~-<~-<<<~-<COprint("65")#`=>ass^_^_#
#9 "25" +/pppppppx eeee*n*n*n*es*s*s*^ee*n*n*n*e*sss*e*n*n*n*ee*s<* 5>1 e*///\)Q222999686#
在线尝试!
说明
感谢Potato44提供添加机器代码的想法,做出这个答案非常有趣。
我没有做CP / M COM文件,因为它将多语言的大小限制为大约60KB,这是我想避免的。引导映像比COM更容易执行,因为ZEMU默认情况下从第6个扇区(基于1的128字节逻辑扇区)加载引导扇区,因此不需要执行多语言启动。引导代码必须在多语系中的偏移量为0x280((6-1)* 128)。
我使用从此页面链接的ZEMU仿真器。要在ZEMU中运行多语言:
- 磁盘> A:选择多语言文件
- 选项>指令集I8080
- 按启动按钮
cns$ot
从ZEMU发行版的BIOS22Dv221.ASM复制了将一个字符输出到控制台()的功能。我做了两个更改:字符没有被屏蔽为7位ASCII,因为我们控制参数,并且jrz cns$ot
被替换为(jz cns$ot
因为jrz
零,则跳转相对)是Intel 8080中不存在的Zilog Z80指令。
初始程序(英特尔语法,汇编器从此处链接):
org 3120h ; chosen so that cns$ot == 0x3131, easier to generate
; this program will be generated at this offset
; to run it directly specify org 0100h
mvi c,31h ; '1'
call cns$ot
mvi c,38h ; '8'
call cns$ot
db 38h ; for answer 188, NOP in I8080
mvi c,33h ; '3'
call cns$ot
hlt ; halt processor
;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch
; print char to console, receives char in c register
cns$ot:
in cno$sp ; in status
xri cno$si ; adjust polarity
ani cno$sb ; mask status bit
jz cns$ot ; repeat until ready
mov a,c ; get character in a
out cno$dp ; out character
ret
该程序包含不能在多语言中直接使用的字符。Simula中禁止使用大多数ASCII控制字符(代码<0x20),非ASCII字符(代码> = 0x80)不能单独出现,因为文件必须是有效的UTF-8。因此,上述程序是由另一个有效UTF-8程序生成的。
以下程序生成所需的代码并跳转至该代码。
ld (hl),a
由于草('w'==0x77
)而无法使用。sub h
(0x94)和xor a
(0xAF)是UTF-8连续字节,必须在它们之前加上UTF-8前导字节。指令ret nc
(= 0xD0,如果不进位则返回)用作UTF-8前导字节。为了使其不执行任何操作,它之前带有scf
指令(设置进位标志)。对于DOBELA,也避免使用','
(0x2C)和'.'
(0x2E)。org 0100h
不使用伪指令,因为用过的汇编器不理解伪指令(在GUI中设置了org)。该程序无论如何都与位置无关。我更喜欢Zilog助记符,因此我将它们用于更长的程序。
Zilog语法,汇编器从此处链接:
; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9
ld hl,3120h
ld a,3Fh
scf ; set carry flag so that ret nc does nothing
ret nc ; utf8 lead byte for next insn
sub h ; a -= h; a = 0Eh; utf8 cont byte (opcode 0x94)
ld c,a
ld (hl),c ; 0Eh ; not using ld (hl),a because it is 'w'
inc hl
ld (hl),h ; 31h
inc hl
ld a,32h
cpl ; a = ~a; a = 0xCD
ld d,a
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),c ; 0Eh
inc hl
ld (hl),38h ; 38h
inc hl
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),38h ; 38h
inc hl
ld (hl),c ; 0Eh
inc hl
ld (hl),33h ; 33h
inc hl
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),76h ; 76h
inc hl
ld a,23h ; not using ld a,24h because it has '$' (breaks SNUSP)
inc a
cpl ; a = ~a; a = 0xDB
ld d,a
ld (hl),d ; DBh
inc hl
ld (hl),7Dh ; 7Dh
inc hl
ld a,c ; a = 0Eh
cpl ; a = F1h
dec a
dec a
dec a ; a = EEh
ld d,a
ld (hl),d ; EEh
inc hl
scf
ret nc
xor a ; a ^= a; a = 0; utf8 cont byte
ld c,a
ld (hl),c ; 00h
inc hl
ld a,4Ah
scf
ret nc
sub h ; a -= h; a = 0x19; utf8 cont byte
cpl ; a = ~a; a = 0xE6
ld d,a
ld (hl),d ; E6h
inc hl
ld a,c
inc a
ld d,a
ld (hl),d ; 01h
inc hl
ld a,35h
cpl ; a = 0xCA
ld d,a
ld (hl),d ; CAh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),79h ; 79h
inc hl
ld a,2Dh ; not using ld a,2Ch because it has ','
dec a
cpl ; a = 0xD3
ld d,a
ld (hl),d ; D3h
inc hl
ld (hl),7Ch ; 7Ch
inc hl
ld a,36h
cpl ; a = 0xC9
ld d,a
ld (hl),d ; C9h
ld sp,3232h ; set up stack for generated program
ld hl,3120h ; not using ld l,20h because it has '.'
jp (hl) ; go to generated program
; confusing mnemonic - actually it is jp hl, ie. PC = HL
; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
db 80h,80h
该程序汇编为:
! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退
它必须在多音域中偏移0x280(请参见第2行)。测试驱动程序中的抽象测试对此进行检查。
重构
炮弹
将炮弹移回最长的线。我更喜欢这种布局,因为括号不会与其他语言对齐。先将Moorhenses和Flaks移动到炮弹之前,因此在更换炮弹时它们不会破裂。最长的行现在具有以下布局:
Grass Moorhenses Flaks Shells Rubies/Pythons/Perl5 PicoLisp Prelude Klein001
新的Shell代码:
a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit
旧壳代码:
a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit
的长度现在$a
计算出来$(echo -n $a | wc -c)
(从此处开始)。最初,我使用它来摆脱#
,但是现在由于较短的代码而被使用。壳#
之所以可以包含,是因为Flaks在壳之前。
Yash(166)使用内置的echo命令,该命令默认情况下不支持选项,因此“ -n”和换行符最终成为输出的一部分,这会额外提供4个字节。未设置时ECHO_STYLE
默认为SYSV
(-n
不接受选项)。
该TIO链接在所有shell中测试代码。
(((((
在Shell修复Underload和Retina之前的其他操作。再添加一对parens以隐藏58
Prelude(以#)
after结束exit
)。
{
以前((((((
是为Japt设计的,没有它,Japt会挂起。
高射炮
由于Flaks的重定位,因此可以简化起始代码–仅([])
保留以下内容:
line 21 (Grass(([5]{}))) scripting langs clear stack Flaks main code begin skip code the rest of polyglot end skip code print(85)
old: []{}[][][] ((([]{}))) ((()()<<()>>)((()([])))<<()>>) {}{}{}{}{}{}{} ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ ... }{}<> ()
new: []{}[][][] ([] ) ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ ... }{}<> ()
此TIO链接测试所有Flaks中的代码。
裂变与红衣主教
Fission已移至LNUSP :R"12"R _*
。第二个指针用于尽快终止Fission –在第3步,有关更多信息,请参见答案54。
Cardinal被移至LNUSP :@ %"18"
。像在裂变中一样,第二个指针用于在第三步上尽快终止Cardinal。
马里奥·朗
使用####...
而不是====...
作为平台:
最小二维
与MarioLANG结合使用:
Wierd&1L_a
奇怪:请在第10行第79栏使用空格来反映IP。
Wierd 1L_a:第9行第79列的空间很重要。
立体地
新代码: :1*23!/5x%6E0
:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /
pure:
:1*23/5%6E0
faceval:
0 0
1 9
2 18
3 27
4 36
5 45
program:
:1 mem = 9
*23 mem *= 18; mem *= 27
/5 mem /= 45
%6 print mem
E0 exit
9*18*27/45 == 97 (integer division)
6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction
克莱因201/100
新代码: !|*****[[[828+*+@+*99]]]*****|!
毕竟,乘法堆栈包含一个零,因为从空堆栈弹出会产生零。该零与+
旁边的一起添加到主号码中@
。以前是用丢弃的?
,请参阅Klein 001的答案。
门在克莱因是如何工作的:
旋转
旋转代码基本相同,唯一的变化是主代码假定当前操作为ops.one(2),而不是ops.load(4)。
实际上,可以将Whirl视为具有3种操作:
1
旋转一步
0
切换旋转方向
00
执行当前指令并切换振铃
组合操作简化了程序推理:
0000
如果非活动环的当前操作为noop,则只需执行活动环的当前操作即可,而不会产生任何副作用
11..11
旋转n步
011..11
切换方向并旋转n步
0000
执行活动振铃的当前指令,但也执行无效振铃的当前指令。如果当前的非活动振铃指令是无害的,那么我们可以仅关注活动振铃上的操作,而无需考虑非活动振铃会发生什么情况。这对于该程序特别有用,因为它具有清晰的分隔:首先仅使用数学环创建数字32,然后切换到ops环并在其中执行2条指令(打印和退出)。
首先,我想在主代码开始执行时使ops环上的当前操作变为noop。它具有2个优点:1)可以独立执行主要的Whirl代码; 2)使用数学环创建数字32时,我们可以完全忘记操作环。但是,它使代码比原来更长,因此主代码假定当前操作为ops.one(2)。这意味着将ops.value设置为1作为数学运算的副作用,然后将其用于打印。旧代码使用ops.load指令达到了相同的效果,但是使用ops.one更清楚地表达了这一意图–将ops.value设置为非零。
at this point current ring is ops, dir = clockwise, cur op = ops.one
00 switch to math ring
011 rotate to math.not
0000 math.not (math.val = 1)
01111 rotate to math.store
0000 math.store (mem[0] = 1)
1 rotate to math.add
0000 math.add (math.val = 2)
01 rotate to math.store
0000 math.store (mem[0] = 2)
011 rotate to math.mult
0000 math.mult (math.val = 4)
0000 math.mult (math.val = 8)
0000 math.mult (math.val = 16)
0000 math.mult (math.val = 32)
011 rotate to math.store
00 math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before
01111 rotate to ops.intio
0000 ops.intio - print mem[0] as number
0111 rotate to ops.exit
00 ops.exit
新代码较短,因为旧代码在程序的第二部分具有几个冗余的方向开关,而不是因为新的假设。
old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11) 00011000001111000010000010000011000000000000000001100 011110000011100
在事件/旋转行之前更改某些内容时,如何保持旋转正确:
- 确保
0
主Whirl代码之前的偶数个
- 确保没有两个连续的
0
s
- 添加/删除足够多的
1
s直到Whirl再次工作;加n 1
s等于删除12-n 1
s,反之亦然
添加Ropy时,我在不知不觉中违反了第一条规则。当0
s的奇数个主代码开始以错误的ops振铃方向执行时,这会中断退出指令。因此,现在0
在第3行上进行了补偿,0
在第1 行上进行了补偿。
其他
CoffeeScript:(console.log a&&39||180
从这里开始)
INTERCAL:移至第37行
Brainfuck,Agony:移至第10行的其他Brainfuck衍生产品
xEec:移入1L_a(h#115# o#
)
CSL:移至80行
Trefunge:移至120
Gaot ++行,Stones:置于单独的行上