Error processing request

Parameters

CONTENT_LENGTH0
REQUEST_METHODGET
REQUEST_URI/revision/Playing+PIC+Simulation?V=17
QUERY_STRINGV=17
CONTENT_TYPE
DOCUMENT_URI/revision/Playing+PIC+Simulation
DOCUMENT_ROOT/var/www/nikit/nikit/nginx/../docroot
SCGI1
SERVER_PROTOCOLHTTP/1.1
HTTPSon
REMOTE_ADDR172.70.126.34
REMOTE_PORT55082
SERVER_PORT4443
SERVER_NAMEwiki.tcl-lang.org
HTTP_HOSTwiki.tcl-lang.org
HTTP_CONNECTIONKeep-Alive
HTTP_ACCEPT_ENCODINGgzip, br
HTTP_X_FORWARDED_FOR18.117.158.47
HTTP_CF_RAY87f1609f78da2ac6-ORD
HTTP_X_FORWARDED_PROTOhttps
HTTP_CF_VISITOR{"scheme":"https"}
HTTP_ACCEPT*/*
HTTP_USER_AGENTMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
HTTP_CF_CONNECTING_IP18.117.158.47
HTTP_CDN_LOOPcloudflare
HTTP_CF_IPCOUNTRYUS

Body


Error

Unknow state transition: LINE -> END

-code

1

-level

0

-errorstack

INNER {returnImm {Unknow state transition: LINE -> END} {}} CALL {my render_wikit {Playing PIC Simulation} ''\[JM\]\ 14\ Nov\ 2012''\ -\ After\ \"\[Playing\ Assembler\]\"\ a\ little\ bit,\ and\ looking\ at\ the\ \[RS\]\ comments\ that\ says:\ \"Of\ course\ this\ is\ no\ real\ assembler.\ The\ memory\ model\ is\ constant-size\ instructions...\",\ that\ just\ sounded\ like\ how\ the\ PIC\ microcontroller\ is\ arranged\ \[http://en.wikipedia.org/wiki/PIC_micro#Code_space\]<<br>>\nSo\ I\ took\ a\ section\ of\ a\ PIC's\ working\ code\ (a\ loop\ that\ fills\ a\ RAM\ buffer\ for\ a\ later\ transfer\ to\ a\ LCD)\ and\ tweak\ \[Playing\ Assembler\]\ with\ a\ few\ of\ the\ PIC's\ instruction\ set.<<br>>\nAgain,\ this\ is\ not\ quite\ ready\ yet,\ for\ example,\ the\ command\n\ addwf\ chrix,w\nwas\ now\ written\ as\n\ addwf\ chrix\nThis\ time,\ I\ hard-coded\ the\ W\ register\ as\ the\ destiny\ of\ the\ add\ result.\n\nthe\ example\ shows\ a\ RAM\ buffer\ (from\ 30H\ to\ 3FH)\ filled\ with\ values\ descending\ from\ 30H\ to\ 21H.\ The\ real\ thing\ in\ hardware\ shows\ all\ the\ possible\ charactes\ a\ LCD\ can\ display.\[http://www.add.ece.ufl.edu/4744/docs/lcdmanual/characterset.html\]\n======\n\ console\ show\n\ namespace\ eval\ asm\ \{\n\ \ \ \ proc\ asm\ body\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ catch\ \{unset\ mem\}\ \;#\ good\ for\ repeated\ sourcing\n\ \ \ \ \ \ \ \ foreach\ line\ \[split\ \$body\ \\n\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \{label\ op\ args\}\ \{set\ \$i\ \"\"\}\n\ \ \ \ \ \ \ \ \ \ \ \ regexp\ \{(\[^\;\]*)\;\}\ \$line\ ->\ line\ \;#\ strip\ off\ comments\n\ \ \ \ \ \ \ \ \ \ \ \ regexp\ \{^\ *((\[A-Z0-9\]+):)?\ *(\[A-Z\]*)\ +(.*)\}\ \[string\ toupper\ \$line\]\\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ->\ \ -\ \ \ label\ \ \ \ \ \ \ \ \ \ \ op\ \ \ \ \ \ \ args\n\ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ label=\$label,op=\$op,args=\$args\n\ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$label!=\"\"\}\ \{set\ sym(\$label)\ \$PC\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"\"\}\ \ \ \ \ continue\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"DB\"\}\ \ \{set\ mem(\$PC)\ \[convertHex\ \$args\]\;\ incr\ PC\;\ continue\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"EQU\"\}\ \{set\ sym(\$label)\ \[convertHex\ \$args\]\;\ continue\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"ORG\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ PC\ \[convertHex\ \$args\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ continue\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ regsub\ -all\ \",\ *\"\ \$args\ \"\ \"\ args\ \;#\ normalize\ commas\n\ \ \ \ \ \ \ \ \ \ \ \ set\ mem(\$PC)\ \"\$op\ \$args\"\n\ \ \ \ \ \ \ \ \ \ \ \ incr\ PC\n\ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ substituteSymbols\ sym\n\ \ \ \ \ \ \ \ dump\ \ \ sym\n\ \ \ \ \}\n\ \ \ \ proc\ convertHex\ s\ \{\n\ \ \ \ \ \ \ \ set\ s\ \[string\ trim\ \$s\]\n\ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \$s\n\ \ \ \ \ \ \ \ if\ \[regexp\ \{^H'(\[0-9A-F\]+)'\$\}\ \$s\ ->\ s\]\ \{set\ s\ \[expr\ 0x\$s\]\}\n\ \ \ \ \ \ \ \ if\ \[regexp\ \{^D'(\[0-9A-F\]+)'\$\}\ \$s\ ->\ s\]\ \{set\ s\ \$s\}\n\ \ \ \ \ \ \ \ set\ s\n\ \ \ \ \}\n\ \ \ \ proc\ substituteSymbols\ \{_sym\}\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ upvar\ \$_sym\ sym\n\ \ \ \ \ \ \ \ foreach\ i\ \[array\ names\ mem\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \[lindex\ \$mem(\$i)\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ foreach\ j\ \[lrange\ \$mem(\$i)\ 1\ end\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[array\ names\ sym\ \$j\]==\$j\}\ \{set\ j\ \$sym(\$j)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ tmp\ \$j\n\ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ set\ mem(\$i)\ \$tmp\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ dump\ \{_sym\}\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ \ \ upvar\ \$_sym\ sym\n\ \ \ \ \ \ \ \ puts\ \"\\n\ dump...prog\ memory\"\n\ \ \ \ \ \ \ \ foreach\ i\ \[lsort\ -integer\ \[array\ names\ mem\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ puts\ \[format\ \"\ %04d\ %s\"\ \$i\ \$mem(\$i)\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ puts\ \"\\n\ dump...sym\ names\"\n\ \ \ \ \ \ \ \ foreach\ i\ \[lsort\ \[array\ names\ sym\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ puts\ \[format\ \"\ %-10s:\ %04x\"\ \$i\ \$sym(\$i)\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \}\n\ \ \ \ proc\ run\ \{\{pc\ 0\}\}\ \{\n\ \ \ \ \ \ \ \ puts\ \"\\n\ running\ ASM\ program...\"\n\ \ \ \ \ \ \ \ #incr\ pc\ -1\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ foreach\ i\ \{A\ B\ C\ D\ E\ Z\ W\}\ \{set\ ::\$i\ 0\}\n\ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"pc:\ \$pc:\ \$mem(\$pc)\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ while\ \{\$pc>=0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ incr\ pc\n\ \ \ \ \ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"pc:\ \$pc:\ \$mem(\$pc)\"\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[info\ exists\ mem(\$pc)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ #puts\ \"\$mem(\$pc)\\tA:\$::A\ B:\$::B\ C:\$::C\ D:\$::D\ E:\$::E\ Z:\$::Z\"\n\ \ \ \ \ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"\$mem(\$pc)\\tA:\$::A\ B:\$::B\ C:\$::C\ D:\$::D\ E:\$::E\ Z:\$::Z\"\n\ \ \ \ \ \ \ \ \ \ \ \ eval\ \$mem(\$pc)\n\ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ break\n\ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ puts\ \"\ ASM\ program\ ended...\"\n\ \ \ \ \}\n\ \ \ \ #-----------------\ \"machine\ opcodes\"\ implemented\ as\ procs\n\ \ \ \ proc\ SHOWRAM\ dummyNr\ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ puts\ \"---RAM\ dump\"\n\ \ \ \ \ \ foreach\ i\ \[lsort\ \[array\ names\ ram\]\]\ \{\n\ \ \ \ \ \ \ \ puts\ \"\$i:\ \$ram(\$i)\"\n\ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ ADDWF\ \{adr\ dest\}\ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ if\ \{\$dest\ ==\ \"W\"\}\ \{\n\ \ \ \ \ \ \ \ set\ ::W\ \[expr\ \$ram(\$adr)\ +\ \$::W\]\n\ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ +\ \$::W\]\n\ \ \ \ \ \ \}\n\ \ \ \ \ \ \}\n\ \ \ \ proc\ CALL\ \{name\}\ \ \ \ \ \ \{\[string\ tolower\ \$name\]\ \$::W\}\n\ \ \ \ \n\ \ \ \ proc\ GOTO\ adr\ \ \ \ \ \ \ \ \ \{\n\ \ \ \ \ \ #tk_messageBox\ -message\ \"GOTO\ \$adr\"\n\ \ \ \ \ \ uplevel\ 1\ set\ pc\ \[expr\ \$adr\ -\ 1\]\n\ \ \ \ \}\n\ \ \ \ \n\ \ \ \ proc\ INCF\ \ adr\ \ \ \ \ \ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ +\ 1\]\ \ \ \ \ \ \n\ \ \ \ \ \ \}\n\ \ \ \ proc\ DECFSZ\ adr\ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ -\ 1\]\n\ \ \ \ \ \ if\ \{\$ram(\$adr)\ ==\ 0\}\ \{uplevel\ 1\ set\ pc\ \[expr\ \[uplevel\ 1\ set\ pc\]\ +1\]\}\ \ \ \ \n\ \ \ \ \}\n\ \ \ \ proc\ MOV\ \ \{reg\ adr\}\ \ \ \{variable\ mem\;\ set\ ::\$reg\ \$mem(\$adr)\}\n\ \ \ \ \n\ \ \ \ proc\ MOVWF\ adr\ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ if\ \{\$adr\ ==\ \"INDF\"\}\ \{\n\ \ \ \ \ \ \ \ set\ fsrC\ \$ram(FSR)\n\ \ \ \ \ \ \ \ set\ ram(\$fsrC)\ \$::W\n\ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ set\ ram(\$adr)\ \$::W\n\ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ MOVFW\ \ adr\ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ::W\ \$ram(\$adr)\n\ \ \ \ \}\n\ \ \ \ proc\ MVI\ \ \{reg\ value\}\ \{set\ ::\$reg\ \$value\}\n\ \ \ \ proc\ MOVLW\ \ value\ \{set\ ::W\ \[convertHex\ \$value\]\}\n\ \}\n\n#--\ Now\ testing:\n\ asm::asm\ \{\n\ \ \ \ \ \ \ \ org\ \ 0\ \ \ \ \;\ the\ canonical\ start\ address\ in\ PICs\n\ \ \ \ \ \ \ \ movlw\ 0\n\ \ \ \ \ \ \ \ movwf\ offset\n\ \ \ \ \ \ \ \ movlw\ H'20'\n\ \ \ \ \ \ \ \ movwf\ chrix\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ movlw\ H'30'\n\ \ \ \ \ \ \ \ movwf\ FSR\n\ \ \ \ \ \ \ \ movlw\ D'16'\n\ \ \ \ \ \ \ \ movwf\ counter\n\ WEER:\ \ movfw\ counter\n\ \ \ \ \ \ \ \ addwf\ chrix,w\n\ \ \ \ \ \ \ \ movwf\ INDF\n\ \ \ \ \ \ \ \ \;call\ puts\n\ \ \ \ \ \ \ \ incf\ FSR\n\ \ \ \ \ \ \ \ decfsz\ counter\n\ \ \ \ \ \ \ \ goto\ weer\n\ \ \ \ \ \ \ \ incf\ offset\n\ \ \ \ \ \ \ \ incf\ chrix\n\ \ \ \ \ \ \ \ end\n\ \}\n\n\ asm::run\n\ \n\ puts\ \"\\n\ RAM\ after\ run:\"\n\ puts\ \"\ addr\ contents\"\n\ puts\ \"\ ----\ \ --\"\ \ \n\ foreach\ i\ \[lsort\ \[array\ names\ asm::ram\]\]\ \{\n\ \ \ \ #puts\ \"\$i\ \[string\ is\ integer\ \$i\]\"\n\ \ \ \ if\ \[string\ is\ integer\ \$i\]\ \{\n\ \ \ \ \ \ puts\ \[format\ \"\ %04x:\ %02x\"\ \$i\ \$asm::ram(\$i)\]\n\ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ puts\ \[format\ \"\ %-10s:\ %02x\"\ \$i\ \$asm::ram(\$i)\]\ \ \ \ \n\ \ \ \ \}\n\ \}\n\ ======\n\nWhen\ running\ the\ example,\ the\ outputs\ is:\n\n\ dump...prog\ memory\n\ 0000\ MOVLW\ 0\n\ 0001\ MOVWF\ OFFSET\n\ 0002\ MOVLW\ 32\n\ 0003\ MOVWF\ CHRIX\n\ 0004\ MOVLW\ 48\n\ 0005\ MOVWF\ FSR\n\ 0006\ MOVLW\ 16\n\ 0007\ MOVWF\ COUNTER\n\ 0008\ MOVFW\ COUNTER\n\ 0009\ ADDWF\ CHRIX\n\ 0010\ MOVWF\ INDF\n\ 0011\ INCF\ FSR\n\ 0012\ DECFSZ\ COUNTER\n\ 0013\ GOTO\ 8\n\ 0014\ INCF\ OFFSET\n\ 0015\ INCF\ CHRIX\n\n\ dump...sym\ names\n\ WEER\ \ \ \ \ \ :\ 0008\n\n\ run...\n\n\ RAM\ after\ run:\n\ addr\ contents\n\ ----\ \ --\n\ 0030:\ 30\n\ 0031:\ 2f\n\ 0032:\ 2e\n\ 0033:\ 2d\n\ 0034:\ 2c\n\ 0035:\ 2b\n\ 0036:\ 2a\n\ 0037:\ 29\n\ 0038:\ 28\n\ 0039:\ 27\n\ 003a:\ 26\n\ 003b:\ 25\n\ 003c:\ 24\n\ 003d:\ 23\n\ 003e:\ 22\n\ 003f:\ 21\n\ CHRIX\ \ \ \ \ :\ 21\n\ COUNTER\ \ \ :\ 00\n\ FSR\ \ \ \ \ \ \ :\ 40\n\ OFFSET\ \ \ \ :\ 01\n\ (code)\ 1\ %\ \n\n----\n'''\[Jorge\]\ -\ 2012-11-15\ 16:57:13'''\n\n\ \ \ *\ changed\ the\ ORG\ address\ to\ the\ canonical\ start\ address\ for\ PICs\n\ \ \ *\ prepared\ the\ hex\ pattern\ for\ conversion\ to\ be\ H'nn'\n\ \ \ *\ cleaned\ up\ the\ output\ to\ show\ RAM\ addresses\ in\ hex\ format\ also\n\n<<categories>>\ Language\ |\ Tcl\ and\ other\ languages regexp2} CALL {my render {Playing PIC Simulation} ''\[JM\]\ 14\ Nov\ 2012''\ -\ After\ \"\[Playing\ Assembler\]\"\ a\ little\ bit,\ and\ looking\ at\ the\ \[RS\]\ comments\ that\ says:\ \"Of\ course\ this\ is\ no\ real\ assembler.\ The\ memory\ model\ is\ constant-size\ instructions...\",\ that\ just\ sounded\ like\ how\ the\ PIC\ microcontroller\ is\ arranged\ \[http://en.wikipedia.org/wiki/PIC_micro#Code_space\]<<br>>\nSo\ I\ took\ a\ section\ of\ a\ PIC's\ working\ code\ (a\ loop\ that\ fills\ a\ RAM\ buffer\ for\ a\ later\ transfer\ to\ a\ LCD)\ and\ tweak\ \[Playing\ Assembler\]\ with\ a\ few\ of\ the\ PIC's\ instruction\ set.<<br>>\nAgain,\ this\ is\ not\ quite\ ready\ yet,\ for\ example,\ the\ command\n\ addwf\ chrix,w\nwas\ now\ written\ as\n\ addwf\ chrix\nThis\ time,\ I\ hard-coded\ the\ W\ register\ as\ the\ destiny\ of\ the\ add\ result.\n\nthe\ example\ shows\ a\ RAM\ buffer\ (from\ 30H\ to\ 3FH)\ filled\ with\ values\ descending\ from\ 30H\ to\ 21H.\ The\ real\ thing\ in\ hardware\ shows\ all\ the\ possible\ charactes\ a\ LCD\ can\ display.\[http://www.add.ece.ufl.edu/4744/docs/lcdmanual/characterset.html\]\n======\n\ console\ show\n\ namespace\ eval\ asm\ \{\n\ \ \ \ proc\ asm\ body\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ catch\ \{unset\ mem\}\ \;#\ good\ for\ repeated\ sourcing\n\ \ \ \ \ \ \ \ foreach\ line\ \[split\ \$body\ \\n\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \{label\ op\ args\}\ \{set\ \$i\ \"\"\}\n\ \ \ \ \ \ \ \ \ \ \ \ regexp\ \{(\[^\;\]*)\;\}\ \$line\ ->\ line\ \;#\ strip\ off\ comments\n\ \ \ \ \ \ \ \ \ \ \ \ regexp\ \{^\ *((\[A-Z0-9\]+):)?\ *(\[A-Z\]*)\ +(.*)\}\ \[string\ toupper\ \$line\]\\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ->\ \ -\ \ \ label\ \ \ \ \ \ \ \ \ \ \ op\ \ \ \ \ \ \ args\n\ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ label=\$label,op=\$op,args=\$args\n\ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$label!=\"\"\}\ \{set\ sym(\$label)\ \$PC\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"\"\}\ \ \ \ \ continue\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"DB\"\}\ \ \{set\ mem(\$PC)\ \[convertHex\ \$args\]\;\ incr\ PC\;\ continue\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"EQU\"\}\ \{set\ sym(\$label)\ \[convertHex\ \$args\]\;\ continue\}\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$op==\"ORG\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ PC\ \[convertHex\ \$args\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ continue\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ regsub\ -all\ \",\ *\"\ \$args\ \"\ \"\ args\ \;#\ normalize\ commas\n\ \ \ \ \ \ \ \ \ \ \ \ set\ mem(\$PC)\ \"\$op\ \$args\"\n\ \ \ \ \ \ \ \ \ \ \ \ incr\ PC\n\ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ substituteSymbols\ sym\n\ \ \ \ \ \ \ \ dump\ \ \ sym\n\ \ \ \ \}\n\ \ \ \ proc\ convertHex\ s\ \{\n\ \ \ \ \ \ \ \ set\ s\ \[string\ trim\ \$s\]\n\ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \$s\n\ \ \ \ \ \ \ \ if\ \[regexp\ \{^H'(\[0-9A-F\]+)'\$\}\ \$s\ ->\ s\]\ \{set\ s\ \[expr\ 0x\$s\]\}\n\ \ \ \ \ \ \ \ if\ \[regexp\ \{^D'(\[0-9A-F\]+)'\$\}\ \$s\ ->\ s\]\ \{set\ s\ \$s\}\n\ \ \ \ \ \ \ \ set\ s\n\ \ \ \ \}\n\ \ \ \ proc\ substituteSymbols\ \{_sym\}\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ upvar\ \$_sym\ sym\n\ \ \ \ \ \ \ \ foreach\ i\ \[array\ names\ mem\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \[lindex\ \$mem(\$i)\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ foreach\ j\ \[lrange\ \$mem(\$i)\ 1\ end\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[array\ names\ sym\ \$j\]==\$j\}\ \{set\ j\ \$sym(\$j)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ tmp\ \$j\n\ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ set\ mem(\$i)\ \$tmp\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ dump\ \{_sym\}\ \{\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ \ \ upvar\ \$_sym\ sym\n\ \ \ \ \ \ \ \ puts\ \"\\n\ dump...prog\ memory\"\n\ \ \ \ \ \ \ \ foreach\ i\ \[lsort\ -integer\ \[array\ names\ mem\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ puts\ \[format\ \"\ %04d\ %s\"\ \$i\ \$mem(\$i)\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ puts\ \"\\n\ dump...sym\ names\"\n\ \ \ \ \ \ \ \ foreach\ i\ \[lsort\ \[array\ names\ sym\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ puts\ \[format\ \"\ %-10s:\ %04x\"\ \$i\ \$sym(\$i)\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \}\n\ \ \ \ proc\ run\ \{\{pc\ 0\}\}\ \{\n\ \ \ \ \ \ \ \ puts\ \"\\n\ running\ ASM\ program...\"\n\ \ \ \ \ \ \ \ #incr\ pc\ -1\n\ \ \ \ \ \ \ \ variable\ mem\n\ \ \ \ \ \ \ \ foreach\ i\ \{A\ B\ C\ D\ E\ Z\ W\}\ \{set\ ::\$i\ 0\}\n\ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"pc:\ \$pc:\ \$mem(\$pc)\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ while\ \{\$pc>=0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ incr\ pc\n\ \ \ \ \ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"pc:\ \$pc:\ \$mem(\$pc)\"\n\ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[info\ exists\ mem(\$pc)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ #puts\ \"\$mem(\$pc)\\tA:\$::A\ B:\$::B\ C:\$::C\ D:\$::D\ E:\$::E\ Z:\$::Z\"\n\ \ \ \ \ \ \ \ \ \ \ \ #tk_messageBox\ -message\ \"\$mem(\$pc)\\tA:\$::A\ B:\$::B\ C:\$::C\ D:\$::D\ E:\$::E\ Z:\$::Z\"\n\ \ \ \ \ \ \ \ \ \ \ \ eval\ \$mem(\$pc)\n\ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ break\n\ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ puts\ \"\ ASM\ program\ ended...\"\n\ \ \ \ \}\n\ \ \ \ #-----------------\ \"machine\ opcodes\"\ implemented\ as\ procs\n\ \ \ \ proc\ SHOWRAM\ dummyNr\ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ puts\ \"---RAM\ dump\"\n\ \ \ \ \ \ foreach\ i\ \[lsort\ \[array\ names\ ram\]\]\ \{\n\ \ \ \ \ \ \ \ puts\ \"\$i:\ \$ram(\$i)\"\n\ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ ADDWF\ \{adr\ dest\}\ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ if\ \{\$dest\ ==\ \"W\"\}\ \{\n\ \ \ \ \ \ \ \ set\ ::W\ \[expr\ \$ram(\$adr)\ +\ \$::W\]\n\ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ +\ \$::W\]\n\ \ \ \ \ \ \}\n\ \ \ \ \ \ \}\n\ \ \ \ proc\ CALL\ \{name\}\ \ \ \ \ \ \{\[string\ tolower\ \$name\]\ \$::W\}\n\ \ \ \ \n\ \ \ \ proc\ GOTO\ adr\ \ \ \ \ \ \ \ \ \{\n\ \ \ \ \ \ #tk_messageBox\ -message\ \"GOTO\ \$adr\"\n\ \ \ \ \ \ uplevel\ 1\ set\ pc\ \[expr\ \$adr\ -\ 1\]\n\ \ \ \ \}\n\ \ \ \ \n\ \ \ \ proc\ INCF\ \ adr\ \ \ \ \ \ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ +\ 1\]\ \ \ \ \ \ \n\ \ \ \ \ \ \}\n\ \ \ \ proc\ DECFSZ\ adr\ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ram(\$adr)\ \[expr\ \$ram(\$adr)\ -\ 1\]\n\ \ \ \ \ \ if\ \{\$ram(\$adr)\ ==\ 0\}\ \{uplevel\ 1\ set\ pc\ \[expr\ \[uplevel\ 1\ set\ pc\]\ +1\]\}\ \ \ \ \n\ \ \ \ \}\n\ \ \ \ proc\ MOV\ \ \{reg\ adr\}\ \ \ \{variable\ mem\;\ set\ ::\$reg\ \$mem(\$adr)\}\n\ \ \ \ \n\ \ \ \ proc\ MOVWF\ adr\ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ if\ \{\$adr\ ==\ \"INDF\"\}\ \{\n\ \ \ \ \ \ \ \ set\ fsrC\ \$ram(FSR)\n\ \ \ \ \ \ \ \ set\ ram(\$fsrC)\ \$::W\n\ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ set\ ram(\$adr)\ \$::W\n\ \ \ \ \ \ \}\n\ \ \ \ \}\n\ \ \ \ proc\ MOVFW\ \ adr\ \ \ \{\n\ \ \ \ \ \ variable\ ram\n\ \ \ \ \ \ set\ ::W\ \$ram(\$adr)\n\ \ \ \ \}\n\ \ \ \ proc\ MVI\ \ \{reg\ value\}\ \{set\ ::\$reg\ \$value\}\n\ \ \ \ proc\ MOVLW\ \ value\ \{set\ ::W\ \[convertHex\ \$value\]\}\n\ \}\n\n#--\ Now\ testing:\n\ asm::asm\ \{\n\ \ \ \ \ \ \ \ org\ \ 0\ \ \ \ \;\ the\ canonical\ start\ address\ in\ PICs\n\ \ \ \ \ \ \ \ movlw\ 0\n\ \ \ \ \ \ \ \ movwf\ offset\n\ \ \ \ \ \ \ \ movlw\ H'20'\n\ \ \ \ \ \ \ \ movwf\ chrix\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ movlw\ H'30'\n\ \ \ \ \ \ \ \ movwf\ FSR\n\ \ \ \ \ \ \ \ movlw\ D'16'\n\ \ \ \ \ \ \ \ movwf\ counter\n\ WEER:\ \ movfw\ counter\n\ \ \ \ \ \ \ \ addwf\ chrix,w\n\ \ \ \ \ \ \ \ movwf\ INDF\n\ \ \ \ \ \ \ \ \;call\ puts\n\ \ \ \ \ \ \ \ incf\ FSR\n\ \ \ \ \ \ \ \ decfsz\ counter\n\ \ \ \ \ \ \ \ goto\ weer\n\ \ \ \ \ \ \ \ incf\ offset\n\ \ \ \ \ \ \ \ incf\ chrix\n\ \ \ \ \ \ \ \ end\n\ \}\n\n\ asm::run\n\ \n\ puts\ \"\\n\ RAM\ after\ run:\"\n\ puts\ \"\ addr\ contents\"\n\ puts\ \"\ ----\ \ --\"\ \ \n\ foreach\ i\ \[lsort\ \[array\ names\ asm::ram\]\]\ \{\n\ \ \ \ #puts\ \"\$i\ \[string\ is\ integer\ \$i\]\"\n\ \ \ \ if\ \[string\ is\ integer\ \$i\]\ \{\n\ \ \ \ \ \ puts\ \[format\ \"\ %04x:\ %02x\"\ \$i\ \$asm::ram(\$i)\]\n\ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ puts\ \[format\ \"\ %-10s:\ %02x\"\ \$i\ \$asm::ram(\$i)\]\ \ \ \ \n\ \ \ \ \}\n\ \}\n\ ======\n\nWhen\ running\ the\ example,\ the\ outputs\ is:\n\n\ dump...prog\ memory\n\ 0000\ MOVLW\ 0\n\ 0001\ MOVWF\ OFFSET\n\ 0002\ MOVLW\ 32\n\ 0003\ MOVWF\ CHRIX\n\ 0004\ MOVLW\ 48\n\ 0005\ MOVWF\ FSR\n\ 0006\ MOVLW\ 16\n\ 0007\ MOVWF\ COUNTER\n\ 0008\ MOVFW\ COUNTER\n\ 0009\ ADDWF\ CHRIX\n\ 0010\ MOVWF\ INDF\n\ 0011\ INCF\ FSR\n\ 0012\ DECFSZ\ COUNTER\n\ 0013\ GOTO\ 8\n\ 0014\ INCF\ OFFSET\n\ 0015\ INCF\ CHRIX\n\n\ dump...sym\ names\n\ WEER\ \ \ \ \ \ :\ 0008\n\n\ run...\n\n\ RAM\ after\ run:\n\ addr\ contents\n\ ----\ \ --\n\ 0030:\ 30\n\ 0031:\ 2f\n\ 0032:\ 2e\n\ 0033:\ 2d\n\ 0034:\ 2c\n\ 0035:\ 2b\n\ 0036:\ 2a\n\ 0037:\ 29\n\ 0038:\ 28\n\ 0039:\ 27\n\ 003a:\ 26\n\ 003b:\ 25\n\ 003c:\ 24\n\ 003d:\ 23\n\ 003e:\ 22\n\ 003f:\ 21\n\ CHRIX\ \ \ \ \ :\ 21\n\ COUNTER\ \ \ :\ 00\n\ FSR\ \ \ \ \ \ \ :\ 40\n\ OFFSET\ \ \ \ :\ 01\n\ (code)\ 1\ %\ \n\n----\n'''\[Jorge\]\ -\ 2012-11-15\ 16:57:13'''\n\n\ \ \ *\ changed\ the\ ORG\ address\ to\ the\ canonical\ start\ address\ for\ PICs\n\ \ \ *\ prepared\ the\ hex\ pattern\ for\ conversion\ to\ be\ H'nn'\n\ \ \ *\ cleaned\ up\ the\ output\ to\ show\ RAM\ addresses\ in\ hex\ format\ also\n\n<<categories>>\ Language\ |\ Tcl\ and\ other\ languages} CALL {my revision {Playing PIC Simulation}} CALL {::oo::Obj6092146 process revision/Playing+PIC+Simulation} CALL {::oo::Obj6092144 process}

-errorcode

NONE

-errorinfo

Unknow state transition: LINE -> END
    while executing
"error $msg"
    (class "::Wiki" method "render_wikit" line 6)
    invoked from within
"my render_$default_markup $N $C $mkup_rendering_engine"
    (class "::Wiki" method "render" line 8)
    invoked from within
"my render $name $C"
    (class "::Wiki" method "revision" line 31)
    invoked from within
"my revision $page"
    (class "::Wiki" method "process" line 56)
    invoked from within
"$server process [string trim $uri /]"

-errorline

4