Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
|
|
@ -0,0 +1,155 @@
|
|||
module Execute_Computer_Zero{
|
||||
global byte MEM[31]=0XFF, PC=0
|
||||
module ZERO (program$, f=-2, showrun, skipreadcode){
|
||||
Enum Commands {
|
||||
NOP=0X0, LDA=0X20, STA=0X40, ADD=0X60, SUB=0X80, BRZ=0XA0, JMP=0XC0, STP=0XE0
|
||||
}
|
||||
if skipreadcode then goto cont1
|
||||
PC<=0
|
||||
dim code$()
|
||||
var crlf=chr$(13)+chr$(10) ' CRLF
|
||||
var prname$="Program #1"
|
||||
program$=replace$(chr$(9)," ", program$)
|
||||
program$=replace$(",",crlf, program$)
|
||||
program$=ucase$(filter$(program$, "()."))
|
||||
code$()=piece$(program$, crlf)
|
||||
document source$
|
||||
for I=0 to len(code$())-1
|
||||
tok$=trim$(LeftPart$(trim$(code$(I))+" ", " "))
|
||||
part$=trim$(RightPart$(trim$(code$(I))+" 0", " "))
|
||||
val=val(part$) MOD 32
|
||||
ch$=left$(tok$,1)
|
||||
c=0
|
||||
if ch$="#" then
|
||||
prname$=mid$(trim$(code$(I)), 2)
|
||||
continue
|
||||
end if
|
||||
tok$=filter$(tok$, "+-_x!@#$%^&*/|><")
|
||||
if ch$>="0" and ch$<="9" then
|
||||
val=int(val(tok$)) mod 256
|
||||
source$ =" "+hex$(PC, 1)+" "+hex$(val,1)+crlf
|
||||
else.if tok$="" then
|
||||
continue
|
||||
else.if valid(eval(tok$)) then
|
||||
c=eval(tok$)
|
||||
source$ =" "+hex$(PC, 1)+" "+tok$+" "+hex$(val,1)+crlf
|
||||
end if
|
||||
MEM[PC]<=c+VAL
|
||||
PC++
|
||||
next
|
||||
Print #f, "Program Name:";prname$
|
||||
Print #f, source$;
|
||||
Print #f, "Program Length ";PC;"bytes"
|
||||
PC<=0
|
||||
cont1:
|
||||
byte A=0, ADDR=0
|
||||
structure Accumulator {
|
||||
{ A as Byte, Overflow as Byte
|
||||
}
|
||||
R as Integer
|
||||
}
|
||||
Accumulator AC
|
||||
CM=STP
|
||||
if showrun then Print #f, "PC MEM COM ADDR AC"
|
||||
do
|
||||
if inkey$=" " then Print "Break": exit
|
||||
A=MEM[PC]
|
||||
ADDR=A MOD 32
|
||||
CM=A-ADDR
|
||||
if showrun then Print #f, Hex$(PC,1);" ";hex$(A,1);" ";EVAL$(CM);" ";hex$(ADDR, 1);" ";Hex$(AC|A, 1)
|
||||
select case CM
|
||||
case NOP
|
||||
PC++ : PC|MOD 32
|
||||
case LDA
|
||||
AC|R=MEM[ADDR]:PC++ : PC|MOD 32
|
||||
case STA
|
||||
MEM[ADDR]<=AC|A : PC++ : PC|MOD 32
|
||||
case ADD
|
||||
AC|R=AC|R+MEM[ADDR]:PC++ : PC|MOD 32
|
||||
case SUB
|
||||
AC|R=uint(AC|R-MEM[ADDR]): PC++ : PC|MOD 32
|
||||
case BRZ
|
||||
{
|
||||
if AC|A then
|
||||
PC++ : PC|MOD 32
|
||||
if showrun then Print #f, "NON ZERO - CONTINUE"
|
||||
else
|
||||
PC<=A MOD 32
|
||||
if showrun then Print #f, "BRANCH TO ";PC
|
||||
end if
|
||||
}
|
||||
case JMP
|
||||
PC<=A MOD 32:if showrun then Print #f, "JUMP TO ";PC
|
||||
case STP
|
||||
exit
|
||||
end select
|
||||
always
|
||||
if skipreadcode else
|
||||
Print #f, "STOP AT ";hex$(PC,1)
|
||||
Print #f, "RESULT:";AC|A;"|0x";hex$(AC|A, 1)
|
||||
Print #f, "NEGATIVE:"; IF$(AC|A>126->"1","0")
|
||||
Print #f, "OVERFLOW:"; IF$(AC|Overflow>0->"1","0")
|
||||
Print #f
|
||||
end if
|
||||
}
|
||||
Flush
|
||||
Data {
|
||||
#add 2
|
||||
LDA 3, ADD 4, STP 0, 2, 2
|
||||
}
|
||||
Data {#fibonacci
|
||||
LDA 14, STA 15, ADD 13, STA 14,
|
||||
LDA 15, STA 13, LDA 16, SUB 17,
|
||||
BRZ 11, STA 16, JMP 0, LDA 14,
|
||||
STP 0, 1, 1, 0 , 8, 1
|
||||
}
|
||||
Data {#8*7
|
||||
LDA 12, ADD 10, STA 12, LDA 11, SUB 13,
|
||||
STA 11, BRZ 8, JMP 0, LDA 12, STP 0,
|
||||
8, 7, 0, 1
|
||||
}
|
||||
Data {#linkedList
|
||||
LDA 13, ADD 15, STA 5, ADD 16, STA 7, NOP 0, STA 14, NOP 0
|
||||
, BRZ 11, STA 15, JMP 0, LDA 14, STP 0, LDA 0, 0, 28
|
||||
, 1, 0, 0, 0, 6, 0, 2, 26
|
||||
, 5, 20, 3, 30, 1, 22, 4, 24
|
||||
}
|
||||
Data { #0-255
|
||||
LDA 3, SUB 4, STP 0, 0, 255
|
||||
}
|
||||
Data {#0-1
|
||||
LDA 3, SUB 4, STP 0, 0, 1
|
||||
}
|
||||
Data {#1+255
|
||||
LDA 3, ADD 4, STP 0, 1, 255
|
||||
}
|
||||
filename="run01.txt"
|
||||
open filename for wide output as #d
|
||||
while not empty
|
||||
Zero letter$, d, false, false
|
||||
end while
|
||||
Zero { #prisoner
|
||||
NOP 0, NOP 0, STP 0, 0, LDA 3, SUB 29, BRZ 18, LDA 3
|
||||
, STA 29, BRZ 14, LDA 1, ADD 31, STA 1, JMP 2, LDA 0, ADD 31
|
||||
, STA 0, JMP 2, LDA 3, STA 29, LDA 1, ADD 30, ADD 3, STA 1
|
||||
, LDA 0, ADD 30, ADD 3, STA 0, JMP 2, 0, 1, 3
|
||||
}, d, false, false
|
||||
|
||||
Enum Action {cooperate=0UB, defect}
|
||||
byte AcA
|
||||
PM=defect
|
||||
for i=1 to 5
|
||||
Print #d, "Round ";i;" ";field$(eval$(PM), 10);
|
||||
PC++
|
||||
mem[PC]<=pm
|
||||
IF PM=cooperate THEN PM++ ELSE PM--
|
||||
PC++
|
||||
Zero {}, d, false, true
|
||||
Read AcA
|
||||
Print #d, "Player:";mem[0], " Computer:";mem[1]
|
||||
next
|
||||
close #d
|
||||
if filename<>"" then win dir$+filename
|
||||
|
||||
}
|
||||
Execute_Computer_Zero
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
[ 0 ] is NOP ( --> n )
|
||||
[ 1 ] is LDA ( --> n )
|
||||
[ 2 ] is STA ( --> n )
|
||||
[ 3 ] is ADD ( --> n )
|
||||
[ 4 ] is SUB ( --> n )
|
||||
[ 5 ] is BRZ ( --> n )
|
||||
[ 6 ] is JMP ( --> n )
|
||||
[ 7 ] is STP ( --> n )
|
||||
|
||||
[ 0 ] is DATA ( --> n )
|
||||
[ 0 ] is -- ( --> n )
|
||||
|
||||
[ stack 0 ] is acc ( --> s )
|
||||
[ stack 0 ] is ip ( --> s )
|
||||
[ stack false ] is flag ( --> n )
|
||||
|
||||
[ 0 ip replace 0 32 of ] is computer/zero ( --> [ )
|
||||
|
||||
[ 255 & swap 5 << |
|
||||
swap ip share poke
|
||||
1 ip tally ] is , ( [ --> [ )
|
||||
|
||||
[ drop ] is nop ( [ n --> [ )
|
||||
|
||||
[ dip dup peek acc replace ] is lda ( [ n --> [ )
|
||||
|
||||
[ acc share unrot poke ] is sta ( [ n --> [ )
|
||||
|
||||
[ dip dup peek
|
||||
acc take + 255 & acc put ] is add ( [ n --> [ )
|
||||
|
||||
[ dip dup peek negate
|
||||
acc take + 255 & acc put ] is sub ( [ n --> [ )
|
||||
|
||||
[ acc share iff drop done
|
||||
ip replace ] is brz ( [ n --> [ )
|
||||
|
||||
[ ip replace ] is jmp ( [ n --> [ )
|
||||
|
||||
[ drop true flag replace ] is stp ( [ n --> [ )
|
||||
|
||||
[ false flag replace
|
||||
0 acc replace
|
||||
0 ip replace
|
||||
[ dup ip share peek
|
||||
1 ip tally
|
||||
dup 31 & swap 5 >>
|
||||
[ table
|
||||
nop lda sta add
|
||||
sub brz jmp stp ] do
|
||||
flag share until ]
|
||||
drop
|
||||
acc share
|
||||
say "acc = " dup echo
|
||||
dup 128 & iff
|
||||
[ say " or "
|
||||
127 ~ | echo ]
|
||||
else drop cr ] is execute ( [ --> )
|
||||
|
||||
cr say " 2+2: "
|
||||
computer/zero
|
||||
( 00 ) LDA 03 ,
|
||||
( 01 ) ADD 04 ,
|
||||
( 02 ) STP -- ,
|
||||
( 03 ) DATA 2 ,
|
||||
( 04 ) DATA 2 ,
|
||||
execute
|
||||
cr say " 7*8: "
|
||||
computer/zero
|
||||
( 00 ) LDA 12 ,
|
||||
( 01 ) ADD 10 ,
|
||||
( 02 ) STA 12 ,
|
||||
( 03 ) LDA 11 ,
|
||||
( 04 ) SUB 13 ,
|
||||
( 05 ) STA 11 ,
|
||||
( 06 ) BRZ 08 ,
|
||||
( 07 ) JMP 00 ,
|
||||
( 08 ) LDA 12 ,
|
||||
( 09 ) STP -- ,
|
||||
( 10 ) DATA 8 ,
|
||||
( 11 ) DATA 7 ,
|
||||
( 12 ) DATA 0 ,
|
||||
( 13 ) DATA 1 ,
|
||||
execute
|
||||
cr say " Fibonacci: "
|
||||
computer/zero
|
||||
( 00 ) LDA 14 ,
|
||||
( 01 ) STA 15 ,
|
||||
( 02 ) ADD 13 ,
|
||||
( 03 ) STA 14 ,
|
||||
( 04 ) LDA 15 ,
|
||||
( 05 ) STA 13 ,
|
||||
( 06 ) LDA 16 ,
|
||||
( 07 ) SUB 17 ,
|
||||
( 08 ) BRZ 11 ,
|
||||
( 09 ) STA 16 ,
|
||||
( 10 ) JMP 00 ,
|
||||
( 11 ) LDA 14 ,
|
||||
( 12 ) STP -- ,
|
||||
( 13 ) DATA 1 ,
|
||||
( 14 ) DATA 1 ,
|
||||
( 15 ) DATA 0 ,
|
||||
( 16 ) DATA 8 ,
|
||||
( 17 ) DATA 1 ,
|
||||
execute
|
||||
cr say "linked list: "
|
||||
computer/zero
|
||||
( 00 ) LDA 13 ,
|
||||
( 01 ) ADD 15 ,
|
||||
( 02 ) STA 05 ,
|
||||
( 03 ) ADD 16 ,
|
||||
( 04 ) STA 07 ,
|
||||
( 05 ) NOP -- ,
|
||||
( 06 ) STA 14 ,
|
||||
( 07 ) NOP -- ,
|
||||
( 08 ) BRZ 11 ,
|
||||
( 09 ) STA 15 ,
|
||||
( 10 ) JMP 00 ,
|
||||
( 11 ) LDA 14 ,
|
||||
( 12 ) STP -- ,
|
||||
( 13 ) LDA 00 ,
|
||||
( 14 ) DATA 0 ,
|
||||
( 15 ) DATA 28 ,
|
||||
( 16 ) DATA 1 ,
|
||||
( 17 ) DATA 0 ,
|
||||
( 18 ) DATA 0 ,
|
||||
( 19 ) DATA 0 ,
|
||||
( 20 ) DATA 6 ,
|
||||
( 21 ) DATA 0 ,
|
||||
( 22 ) DATA 2 ,
|
||||
( 23 ) DATA 26 ,
|
||||
( 24 ) DATA 5 ,
|
||||
( 25 ) DATA 20 ,
|
||||
( 26 ) DATA 3 ,
|
||||
( 27 ) DATA 30 ,
|
||||
( 28 ) DATA 1 ,
|
||||
( 29 ) DATA 22 ,
|
||||
( 30 ) DATA 4 ,
|
||||
( 31 ) DATA 24 ,
|
||||
execute
|
||||
cr say " prisoner: "
|
||||
computer/zero
|
||||
( 00 ) NOP -- ,
|
||||
( 01 ) NOP -- ,
|
||||
( 02 ) STP -- ,
|
||||
( 03 ) NOP -- ,
|
||||
( 04 ) LDA 03 ,
|
||||
( 05 ) SUB 29 ,
|
||||
( 06 ) BRZ 18 ,
|
||||
( 07 ) LDA 03 ,
|
||||
( 08 ) STA 29 ,
|
||||
( 09 ) BRZ 14 ,
|
||||
( 10 ) LDA 01 ,
|
||||
( 11 ) ADD 31 ,
|
||||
( 12 ) STA 01 ,
|
||||
( 13 ) JMP 02 ,
|
||||
( 14 ) LDA 00 ,
|
||||
( 15 ) ADD 31 ,
|
||||
( 16 ) STA 00 ,
|
||||
( 17 ) JMP 02 ,
|
||||
( 18 ) LDA 03 ,
|
||||
( 19 ) STA 29 ,
|
||||
( 20 ) LDA 01 ,
|
||||
( 21 ) ADD 30 ,
|
||||
( 22 ) ADD 03 ,
|
||||
( 23 ) STA 01 ,
|
||||
( 24 ) LDA 00 ,
|
||||
( 25 ) ADD 30 ,
|
||||
( 26 ) ADD 03 ,
|
||||
( 27 ) STA 01 ,
|
||||
( 28 ) JMP 02 ,
|
||||
( 29 ) DATA 0 ,
|
||||
( 30 ) DATA 1 ,
|
||||
( 31 ) DATA 3 ,
|
||||
execute
|
||||
Loading…
Add table
Add a link
Reference in a new issue