TACHYON NEON V5

INTRO

V4 introduced wordcode vs bytecode which has proved to be faster and more compact overall but the thing that I always wanted to improve upon too was the memory hogging dictionary. While I have a COMPACT utility to transfer the existing dictionary over to EEPROM and use a hash table to index candidates it is still a hybrid dictionary with newer entries saved in hub RAM. Now it's the hub RAM that needs to be utilized to the max for code execution and buffers so it would be nice if there was a standardized way of accessing the dictionary so that it could be in any memory space. This is the conclusion I've come to and what I am proposing amongst other enhancements for Tachyon NEON V5. If we had P2 then this wouldn't be an issue but we only have 32k hub RAM for code and buffers.

Dictionary entries are fixed length and encoded with a standard record of 12 bytes that holds 8 characters unencoded or up to 12 packed as 5-bit alphas (or 10 as 6-bit upper case). V5 dictionary searches would mostly compare a long with a long rather than byte by byte comparisons. The method allows for optional hash table lookup in ram or elsewhere too for faster compile times. Also there will be no unique headers, if a new definition is created with an existing name then that header will simply be reused which is also good for temporary or local names.

Part of the dictionary overall also involves adding a vocabulary stack so that we can have multiple vocabularies over multiple memories and specify which ones to use and in which order.

I did an analysis of header sizes and found that most of them are 1 to 5 characters in length so it seems practical to encode up to 5 characters into a single long and forego the count byte. This leaves one byte for the attributes and 3 bytes for the wordcode.

Number of characters in kernel names

 1=33   ****************

 2=120  ************************************************************

 3=138  *********************************************************************

 4=139  *********************************************************************

 5=152  ****************************************************************************

 6=85   ******************************************

 7=77   **************************************

 8=26   *************

 9=7        ***

10=2        *

Wait on, a wordcode is only 16 bits, what's the other byte for? That's for the extended addressing where code can reside in eeprom up to 1MB and the rest in SD or serial flash up to 16MB. This code will be a little slower to execute but once cached in a sector buffer could run almost as fast as hub code but we will have to see how it goes. The EXIT routine will detect 24-bit addresses and use a procedure to return to extended code and other methods are also used. Code and execution speed in hub space will be practically unaffected by this.

However the main thrust of V5 is to have an absolutely minimal dictionary footprint in hub memory if desired although this does not affect a basic Tachyon system, it simply allows for the system to be expanded easily. Even if the dictionary was moved to EEPROM after EXTEND you could still have very fast searching and compiling as the block mode could create a hash table first to select only a handful of candidates from slow EEPROM for comparison which would only need 4 bytes read in initially at around 200us each.

DICTIONARY STRUCTURE

Previously hybrid dictionaries were used where the original dictionary in hub RAM was compacted across to EEPROM and any newer entries compiled to the hub dictionary. Since EEPROM access is slow a hash method was used to index a possible match in EEPROM.

The new 4.5 method seeks to standardize the dictionary so that it can reside in any memory space and maintain a minimal footprint in hub RAM as a hash table that can be generated at boot or as needed.

DICTIONARY RECORD

CODE0

CODE1

CODE2

ATR

NAME

NAME

NAME

NAME

EXTENDED DICTIONARY RECORD

CODE0

CODE1

CODE2

ATR

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME+x

Alternatively a standard 12 byte record might be considered with 8x7-bit characters = 9 chars max + 1-bit attribute

This is the latest dictionary record that standardizes the record length to 12 bytes for 8 unencoded characters. The 8-bit set of the ATR following the name also terminates the nfa as a string.

NAME

NAME

NAME

NAME

NAME

NAME

NAME

NAME

ATR

XT

CODE0

CODE1

Using 8 bytes for unencoded names might be the more flexible approach though and if it is compressed then the 1-bit atr can be set.

Standard 12-byte header records have no need for link fields or count bytes.

 

FEATURES

COMPRESSION

Names may be reduced to 6-bit characters for 5 characters minimum in standard header, extended header can handle 15 characters. Two msbs in every long denote if it is an extended header so search or hash code does not have to be aware to prevent a false match since it would never match otherwise. Since 6-bits are used there is no case sensitivity although it could be accommodated if needed

SEARCH SEQUENCE

GENERATE HASH BYTE

ALSO FORMAT STRING AS IT WOULD APPEAR IN THE DICTIONARY (PADDING ETC)

Dictionary search begins from top of search stack pointers which point to an area in hub RAM where the dictionary pointer followed by the hash table are stored.

Compare search hash with each hash in table.

….

EXTERNAL CODE USE

High level XT (eXternal Tachyon) code can occupy a very large memory space of up to 16MB. Although this code cannot run as fast as NT (native Tachyon) code, it still calls native code which runs at native speeds and if the XT code is already cached it will run close to native speeds. This also makes it very suitable for many utilities that can be added or at present take up hub space. Interpreter and compiler layers can be added such as BASIC or possibly Python even and user applications can be written totally in XT mode.

Internally XT code may end up being 32-bits rather than 24-bits simply for efficiency and another advantage of that is that 31-bit literals can be encoded into an instruction. An SD card normally reads in 512 bytes or 128 instructions per sector so it would make sense for the XT compiler to position loops within 128 long boundaries. An XT instruction is capable of calling a virtual address beyond 16MB but code addresses are being limited to a more practical 16MB and as such can call NT code or any other XT code directly but NT code cannot call XT code directly, nor should it need to.


  Propeller .:.:--TACHYON--:.:. Forth V5.0 NEON 500170820.1200

Loading cog 3 E50A F32        

Mounted D20D.AA60-CB4A.74CF mkfs.fat IOT5500         FAT32   7,947MB (4,096/cluster)

*** MODULES ***

                           Propeller .:.:--TACHYON--:.:. Forth V5.0 NEON 500170820.1200

3778: FILE.fth            SDHC card + FAT32 Virtual Memory Access File System Layer V1.2 170807-1600

1AC0: EXTE.fth            Primary extensions to TACHYON V4.5 kernel  - 170814-1100

AUTORUN BOOT

FREQ = 96.0MHz

*** INITS ***

INIT#0 3CFA MOUNT

*** ROMS ***

E01C: VGA32x15        848

E37C: HSUART          392

E514: F32            1900

*** I2C ***

$A0 EEPROM

I/O =  31:UHU~ 27:HHLU 23:~~~U 19:~~UU 15:~~~~ 11:~~~~ 7:~~~~ 3:~~UU

INTERCOM: &00.00.00.00 @2,000,000

CODE:$483A = 17978 bytes

NAME:$4CB4 = 10060 bytes

DATA:$7AD2 = 1218 bytes

FREE:          = 1146 bytes

 Data Stack (0)

2001/01/01 MON 00:00:00

--------------------------------------------------------------------------------

..  HELP

$004CB4: QV             h.i.....   $00482C

$004CC0: LF>CR          h.......   $0047C8

$004CCC: FL             h.i.....   $0047C2

$004CD8: SAVETEXT   h.i.....   $00475A

$004CE4: FRUN           h.......   $004746

$004CF0: .FILES         h.......   $004738

$004CFC: .FX            h.......   $004726

$004D08: .FILE          h.......   $004724

$004D14: lss            h.......   $00471C

$004D20: VOLNAME!   h.......   $0046FC

$004D2C: ls             h.i.....   $0046C2

$004D38: .LIST          h.......   $0046BE

$004D44: lscnt          h.......  == $7AD1 (31441)

$004D50: .FNAME         h.......   $0045BE

$004D5C: (SLIST)        h.......   $0045A0

$004D68: DIR            h.......   $004594

$004D74: cd$            h.......   $0043BE

$004D80: cd             h.i.....   $0043BC

$004D8C: pwd            h.......   $0043B8

$004D98: cat            h.i.....   $0043B2

$004DA4: (cat)          h.......   $004388

$004DB0: FPRINT$        h.......   $004384

$004DBC: FLOAD          h.i.....   $00437C

$004DC8: FCOPY          h.i.....   $004334

$004DD4: FCOPY$         h.......   $0042DA

$004DE0: RENAME         h.i.....   $0042B6

$004DEC: RENAME$        h.......   $0042A4

$004DF8: APPEND         h.......   $004276

$004E04: eof            h.......  == $7AD0 (31440)

$004E10: -FERASE        h.......   $0041FC

$004E1C: >|RCDSZ        h.......  == $0000 (0)

$004E28: RCDSZ          h.......  == $0001 (1)

$004E34: FMAKE$         h.......   $0041EA

$004E40: FOPEN          h.i.....   $0041B0

$004E4C: FOPEN$         h.......   $004158

$004E58: mk             h.i.....   $004154

$004E64: RW             h.......   $004144

$004E70: RO             h.......   $00413C

$004E7C: FOPEN#         h.......   $004116

$004E88: FCREATE$   h.......   $0040CA

$004E94: MAKE           h.......   $0040C4

$004EA0: mksiz          h.......  == $7ACC (31436)

$004EAC: FCLOSE         h.......   $0040AC

$004EB8: >FILE          h.......   $00409C

$004EC4: FILE>          h.......   $004088

$004ED0: FPUTB          h.......   $004038

$004EDC: FPUT           h.......   $004034

$004EE8: FGET           h.......   $004008

$004EF4: fkey           h.......  == $7ACA (31434)

$004F00: FREM           h.......   $003FF4

$004F0C: fwrite         h.......   $003FF0

$004F18: fread          h.......   $003FEC

$004F24: fstat          h.......  == $7AC8 (31432)

$004F30: fwrites        h.......  == $7AB8 (31416)

$004F3C: freads         h.......  == $7AA8 (31400)

$004F48: endcl          h.......   $003F72

$004F54: FSTAMP         h.......   $003EF4

$004F60: DIR?           h.......   $003E5C

$004F6C: UpdateDi   h.......   $003E4C

$004F78: FILE$          h.......   $003DDC

$004F84: fname$         h.......  == $7A98 (31384)

$004F90: _file$         h.......  == $7A58 (31320)

$004F9C: ?SDCARD        h.......   $003DB8

$004FA8: ?MOUNT         h.......   $003D7C

$004FB4: MOUNT          h.......   $003CFA

$004FC0: ROOT           h.......   $003CEA

$004FCC: cwd$           h.......  == $7A48 (31304)

$004FD8: cwdsect        h.......  == $7A44 (31300)

$004FE4: FMAX@          h.......   $003CDE

$004FF0: fat2           h.......  == $7A40 (31296)

$004FFC: fat1           h.......  == $7A3C (31292)

$005008: CLUST>SE   h.......   $003C12

$005014: @FAT           h.......   $003C00

$005020: @BOOT          h.......   $003BFA

$00502C: @ROOT          h.......   $003BF4

$005038: rootdir        h.......  == $7A38 (31288)

$005044: clshift        h.......  == $7A37 (31287)

$005050: mounted        h.......  == $7A36 (31286)

$00505C: fatname        h.......  == $7A2E (31278)

$005068: volname        h.......  == $7A23 (31267)

$005074: serial         h.......  == $7A1F (31263)

$005080: rootcl         h.......  == $7A08 (31240)

$00508C: sect/fat   h.......  == $7A00 (31232)

$005098: sdsize         h.......  == $79FC (31228)

$0050A4: fats           h.......  == $79EC (31212)

$0050B0: rsvd           h.......  == $79EA (31210)

$0050BC: sect/clu   h.......  == $79E9 (31209)

$0050C8: byte/sec   h.......  == $79E7 (31207)

$0050D4: oemname        h.......  == $79DF (31199)

$0050E0: fat32          h.......  == $79DC (31196)

$0050EC: fatptr         h.......  == $79A4 (31140)

$0050F8: parts          h.......  == $799C (31132)

$005104: FS             h.......   $003BEC

$005110: FS@            h.......   $003BE6

$00511C: FSW@           h.......   $003BE0

$005128: FSC@           h.......   $003BDA

$005134: FS!            h.......   $003BD4

$005140: FSC!           h.......   $003BCE

$00514C: FSADR          h.......   $003BAA

$005158: SD             h.......   $003B9C

$005164: XW@            h.......   $003B96

$005170: XC!            h.......   $003B90

$00517C: XC@            h.......   $003B8A

$005188: X!             h.......   $003B84

$005194: X@             h.......   $003B7E

$0051A0: XADR           h.......   $003B74

$0051AC: FSECT@         h.......   $003B66

$0051B8: FSIZE@         h.......   $003B60

$0051C4: FSIZE          h.......   $003B58

$0051D0: @FSIZE         h.......  == $001C (28)

$0051DC: @FCLST         h.......  == $001A (26)

$0051E8: @FDATE         h.......  == $0018 (24)

$0051F4: @FTIME         h.......  == $0016 (22)

$005200: @FCLSTH        h.......  == $0014 (20)

$00520C: @CDATE         h.......  == $0010 (16)

$005218: @CTIME         h.......  == $000E (14)

$005224: @ATR           h.......  == $000B (11)

$005230: dirbuf         h.......   $003B4C

$00523C: dirfsa         h.......   $003B48

$005248: @FILE          h.......   $003B40

$005254: FILE#          h.......   $003B34

$005260: FILE           h.......   $003AFC

$00526C: fboot          h.......  == $7998 (31128)

$005278: dirbufs        h.......  == $7798 (30616)

$005284: _file          h.......  == $7788 (30600)

$005290: diradrs        h.......  == $7778 (30584)

$00529C: SDRD           h.......   $003ABE

$0052A8: SECTOR         h.......   $003AA6

$0052B4: scanpos        h.......  == $7774 (30580)

$0052C0: scancnt        h.......  == $7772 (30578)

$0052CC: scanch         h.......  == $7771 (30577)

$0052D8: ssflg          h.......  == $7770 (30576)

$0052E4: FLUSH          h.......   $003A4A

$0052F0: WRSECT         h.......   $003A3E

$0052FC: SDWR           h.......   $0039F2

$005308: !SD            h.......   $0039E2

$005314: ACMD           h.......   $0038D0

$005320: CMD            h.......   $0038A8

$00532C: SDPINS         h.......   $003826

$005338: SDIO32         h....... PASM $1D9

$005344: SDIO8          h....... PASM $1DB

$005350: CARD?          h.......   $0037F6

$00535C: sdbuf          h.......   $0037EE

$005368: cspin          h.......  == $37DF (14303)

$005374: _sdpins        h.......  == $37DC (14300)

$005380: fsel           h.......  == $7758 (30552)

$00538C: scrcs          h.......  == $7748 (30536)

$005398: @sectors   h.......  == $7738 (30520)

$0053A4: @sdrd          h.......  == $7734 (30516)

$0053B0: @sdwr          h.......  == $7730 (30512)

$0053BC: ocr            h.......  == $772C (30508)

$0053C8: csd            h.......  == $771C (30492)

$0053D4: cid            h.......  == $770C (30476)

$0053E0: sdinfo         h.......  == $770C (30476)

$0053EC: #files         h.......  == $0004 (4)

$0053F8: BLKSIZ         h.......  == $0200 (512)

$005404: OVER+          h.......   $0037D6

$005410: WW!            h.......   $0037C8

$00541C: @rest          h.......  == $770C (30476)

$005428: FILE.fth   h.......   $003778

$005434: INFO           h.......   $00373A

$005440: BOOT           h.......   $0036C4

$00544C: boot           h.......  == $7708 (30472)

$005458: DEFER          h.......   $0036A4

$005464: FSQRT          h.......   $00364C

$005470: FSIN           h.......   $003642

$00547C: F/             h.......   $00363A

$005488: F*             h.......   $003632

$005494: F-             h.......   $00362A

$0054A0: F+             h.......   $003622

$0054AC: F>             h.......   $003618

$0054B8: >F             h.......   $00360E

$0054C4: FCMD           h.......   $0035EE

$0054D0: LOADCOG        h.......   $00359C

$0054DC: lsroms         h.......   $0034C0

$0054E8: OK             h.i.....   $003498

$0054F4: EVAL$          h.......   $003422

$005500: tib            h.......   $00341E

$00550C: ID!            h.......   $003412

$005518: .FREQ          h.......   $0033EE

$005524: .AUTO          h.......   $0033CA

$005530: .INTERCO   h.......   $003374

$00553C: INTERCOM   h.......   $003356

$005548: PPBAUD!        h.......   $003342

$005554: HELP           h.......   $00327C

$005560: .TIMERS        h.......   $003186

$00556C: .TASKS         h.......   $003116

$005578: .INDEX         h.......   $003106

$005584: .VARS          h.......   $0030FC

$005590: .MODULES   h.......   $003072

$00559C: CTYPE          h.......   $00301C

$0055A8: PRINT$         h.......   $003018

$0055B4: MLEN$          h.......   $003002

$0055C0: NFA>CFP        h.......   $002FFC

$0055CC: MU@            h.......   $002FF0

$0055D8: MW@            h.......   $002FE4

$0055E4: MC@            h.......   $002FD8

$0055F0: MC@++          h.......   $002FD2

$0055FC: lsi2c          h.......   $002F82

$005608: lsio           h.......   $002E6E

$005614: +POLL          h.......   $002E24

$005620: ?POLL          h.......   $002E0A

$00562C: TIMERJOB   h.......   $002D9C

$005638: !RTC           h.......   $002D06

$005644: .TEMP          h.......   $002C9A

$005650: 'F             h.......   $002C8A

$00565C: 'C             h.......   $002C6E

$005668: STAMP@         h.......   $002C5C

$005674: .DT            h.......   $002C52

$005680: .ASMONTH   h.......   $002C1C

$00568C: .DATE          h.......   $002C12

$005698: .TIME          h.......   $002BEC

$0056A4: .DAY           h.......   $002BC0

$0056B0: DAY            h.......   $002BA0

$0056BC: DAY@           h.......   $002B98

$0056C8: SUN            h.......  == $0007 (7)

$0056D4: SAT            h.......  == $0006 (6)

$0056E0: FRI            h.......  == $0005 (5)

$0056EC: THU            h.......  == $0004 (4)

$0056F8: WED            h.......  == $0003 (3)

$005704: TUE            h.......  == $0002 (2)

$005710: MON            h.......  == $0001 (1)

$00571C: DATE!          h.......   $002B94

$005728: SDT!           h.......   $002B64

$005734: DT!            h.......   $002B26

$005740: TIME!          h.......   $002B24

$00574C: DATE@          h.......   $002B14

$005758: TIME@          h.......   $002AF0

$005764: DEC>BCD        h.......   $002AE4

$005770: BCD>DEC        h.......   $002AD2

$00577C: RTC            h.......   $002ACA

$005788: RTC@           h.......   $002AC0

$005794: RTC!           h.......   $002AB8

$0057A0: WRRTC          h.......   $002A9C

$0057AC: RDRTC          h.......   $002A7A

$0057B8: NORTC          h.......   $002A66

$0057C4: RTCEE          h.......   $002A62

$0057D0: MCP79410    h.......   $002A5E

$0057DC: DS3231         h.......   $002A58

$0057E8: @rtc           h.......   $002A54

$0057F4: WATCHDOG    h.......   $002A40

$005800: TIMEOUT?    h.......   $002A3A

$00580C: ALARM          h.......   $002A34

$005818: COUNTUP        h.......   $002A2C

$005824: TIMEOUT        h.......   $0029F4

$005830: timers         h.......  == $29EA (10730)

$00583C: TIMER          h.i.....   $0029DA

$005848: EE             h.......   $0029D2

$005854: BACKUP         h.......   $0029BE

$005860: ?BACKUP        h.......   $0029B6

$00586C: CONBAUD        h.......   $0029A6

$005878: ECOPY          h.......   $00297E

$005884: EFILL          h.......   $002958

$005890: ELOAD          h.......   $002940

$00589C: ESAVE          h.......   $0028C6

$0058A8: I2CPINS        h.......   $0028BE

$0058B4: EEPROM         h.......   $0028BA

$0058C0: ESAVEB         h.......   $0028A2

$0058CC: E!             h.......   $00288A

$0058D8: E@             h.......   $002874

$0058E4: EW@            h.......   $002866

$0058F0: EW!            h.......   $00285A

$0058FC: EC@            h.......   $002850

$005908: EC!            h.......   $00284A

$005914: EERD           h.......   $00283A

$005920: @EEWAIT        h.......   $002824

$00592C: @EE            h.......   $0027FC

$005938: I2C400         h.......   $0027F4

$005944: I2C100         h.......   $0027F0

$005950: I2CFAST        h.......   $0027E8

$00595C: FI2C@          h.......   $0027B0

$005968: nakI2C@        h.......   $0027AC

$005974: I2C@           h.......   $002786

$005980: ackI2C@        h.......   $002784

$00598C: I2C!           h.......   $00277E

$005998: I2C!?          h.......   $002754

$0059A4: I2CSTOP        h.......   $00273C

$0059B0: I2CSTART    h.......   $00271A

$0059BC: I2C>           h.......   $00273C

$0059C8: <I2C>          h.......   $00271C

$0059D4: <I2C           h.......   $00271A

$0059E0: ?I2C           h.......   $0026FA

$0059EC: RECLAIM        h.......   $002698

$0059F8: LEDS           h.......   $00268E

$005A04: LED            h.......   $002658

$005A10: LEDPIN         h.......   $00262A

$005A1C: DHT            h.......   $0025D0

$005A28: DHT?           h.......   $0025B2

$005A34: DISTANCE    h.......   $002570

$005A40: PING           h.......   $00254C

$005A4C: MODPINS        h.......   $002548

$005A58: SETPINS        h.......   $00251E

$005A64: SPIPINS        h.......   $00251C

$005A70: @SPISCK        h.......  == $000A (10)

$005A7C: @SCL           h.......  == $000F (15)

$005A88: @CNT           h.......  == $0005 (5)

$005A94: @CE            h.......  == $0004 (4)

$005AA0: @MISO          h.......  == $0003 (3)

$005AAC: @MOSI          h.......  == $0002 (2)

$005AB8: @SCK           h.......  == $0001 (1)

$005AC4: *SDA           h.......   $002504

$005AD0: *SCL           h.......   $002500

$005ADC: BLINK          h.......   $0024FA

$005AE8: MUTE           h.......   $0024EE

$005AF4: HZ             h.......   $0024DA

$005B00: KHZ            h.......   $0024D6

$005B0C: MHZ            h.......   $0024D2

$005B18: FRQ            h.......   $0024C2

$005B24: DAC!           h.......   $0024B6

$005B30: BPIN           h.......   $0024A4

$005B3C: APIN           h.......   $00249A

$005B48: PLLDIV         h.......   $002488

$005B54: PLL            h.......   $002484

$005B60: DUTY           h.......   $002480

$005B6C: DIFF           h.......   $002474

$005B78: CTRMODE        h.......   $00245E

$005B84: NCO            h.......   $00245C

$005B90: B              h.......   $002440

$005B9C: A              h.......   $00243C

$005BA8: SERIN          h.......   $0023FA

$005BB4: ISERIAL        h.......   $0023EE

$005BC0: SERIAL         h.......   $0023DE

$005BCC: ISEROUT        h.......   $0023C8

$005BD8: SEROUT         h.......   $0023BA

$005BE4: SERBAUD        h.......   $002370

$005BF0: baudcnt        h.......   $00236C

$005BFC: +VECTOR        h.i.....   $002368

$005C08: REVECTOR    h.i.....   $002356

$005C14: (FORGET)    h.......   $0022FA

$005C20: FORGET         h.i.....   $0022F8

$005C2C: STRIP          h.i.....   $0022EE

$005C38: lsini          h.......   $002272

$005C44: INIT           h.......   $002248

$005C50: -INIT          h.......   $00222C

$005C5C: +INIT          h.......   $002208

$005C68: .HEAD$         h.......   $0021C2

$005C74: ?ANSI          h.......   $00219C

$005C80: MARGINS        h.......   $00218E

$005C8C: BOLD           h.......   $00218A

$005C98: REVERSE        h.......   $002186

$005CA4: PLAIN          h.......   $00217E

$005CB0: CURSOR         h.......   $00216C

$005CBC: ERLINE         h.......   $002164

$005CC8: ERSCN          h.......   $00215C

$005CD4: CLS            h.......   $002156

$005CE0: XY             h.......   $00214C

$005CEC: PAPER          h.......   $00213A

$005CF8: PEN            h.......   $002128

$005D04: HOME           h.......   $002120

$005D10: ESC            h.......   $00211A

$005D1C: white          h.......  == $0007 (7)

$005D28: cyan           h.......  == $0006 (6)

$005D34: magenta        h.......  == $0005 (5)

$005D40: blue           h.......  == $0004 (4)

$005D4C: yellow         h.......  == $0003 (3)

$005D58: green          h.......  == $0002 (2)

$005D64: red            h.......  == $0001 (1)

$005D70: black          h.......  == $0000 (0)

$005D7C: .TRYT          h.......   $002104

$005D88: PRINT&         h.......   $0020EE

$005D94: U.R            h.......   $0020D2

$005DA0: .DEC           h.......   $0020CA

$005DAC: PRINTDEC    h.......   $0020CA

$005DB8: .DECX          h.......   $0020C8

$005DC4: D.             h.......   $0020C4

$005DD0: .DP            h.......   $002098

$005DDC: PRINTNUM    h.......   $002058

$005DE8: RADIX>         h.......   $001FCE

$005DF4: >RADIX         h.......   $001FBC

$005E00: RADIX          h.......   $001FB2

$005E0C: radix          h.......  == $769C (30364)

$005E18: COGINIT        h.......   $001FA0

$005E24: TASKREGS    h.......   $001F9A

$005E30: RUN            h.......   $001F6A

$005E3C: TASK?          h.......   $001F4E

$005E48: RND            h.......   $001F26

$005E54: seed           h.......  == $7698 (30360)

$005E60: LONGFILL    h.......   $001F14

$005E6C: 3++            h.......   $001F10

$005E78: 3@             h.......   $001F0A

$005E84: 3!             h.......   $001F04

$005E90: @3             h.......  == $7694 (30356)

$005E9C: 2++            h.......   $001F00

$005EA8: 2@             h.......   $001EFA

$005EB4: 2!             h.......   $001EF4

$005EC0: @2             h.......  == $7690 (30352)

$005ECC: 1++            h.......   $001EF0

$005ED8: 1@             h.......   $001EEA

$005EE4: 1!             h.......   $001EE4

$005EF0: @1             h.......  == $768C (30348)

$005EFC: C~~            h.......   $001EDC

$005F08: W~~            h.......   $001ED4

$005F14: ~~             h.......   $001ECC

$005F20: C--            h.......   $001EC4

$005F2C: C++            h.......   $001EBC

$005F38: W--            h.......   $001EB4

$005F44: W++            h.......   $001EAC

$005F50: --             h.......   $001EA4

$005F5C: ++             h.......   $001E9C

$005F68: W>L            h.......   $001E94

$005F74: B>L            h.......   $001E8C

$005F80: B>W            h.......   $001E86

$005F8C: W>B            h.......   $001E7A

$005F98: L>W            h.......   $001E6A

$005FA4: >W             h.......   $001E62

$005FB0: RELEASE        h.......   $001E4E

$005FBC: LOCAL          h.......   $001E34

$005FC8: X4             h.......   $001E2E

$005FD4: X3             h.......   $001E28

$005FE0: X2             h.......   $001E22

$005FEC: X1             h.......   $001E1C

$005FF8: AVG            h.......   $001DFA

$006004: OUT            h.......   $001DEE

$006010: PIN!           h.......   $001DEC

$00601C: ELAPSED?   h.......   $001DDE

$006028: =CNT           h.......   $001DD6

$006034: CNT@           h.......   $001DD0

$006040: P!             h.......   $001DCA

$00604C: P@             h.......   $001DC4

$006058: VSCL           h.......  == $01FF (511)

$006064: VCFG           h.......  == $01FE (510)

$006070: PHSB           h.......  == $01FD (509)

$00607C: PHSA           h.......  == $01FC (508)

$006088: FRQB           h.......  == $01FB (507)

$006094: FRQA           h.......  == $01FA (506)

$0060A0: CTRB           h.......  == $01F9 (505)

$0060AC: CTRA           h.......  == $01F8 (504)

$0060B8: DIRB           h.......  == $01F7 (503)

$0060C4: DIRA           h.......  == $01F6 (502)

$0060D0: OUTB           h.......  == $01F5 (501)

$0060DC: OUTA           h.......  == $01F4 (500)

$0060E8: INB            h.......  == $01F3 (499)

$0060F4: INA            h.......  == $01F2 (498)

$006100: CNT            h.......  == $01F1 (497)

$00610C: PAR            h.......  == $01F0 (496)

$006118: SPR            h.......  == $01F0 (496)

$006124: STRING         h.i.....   $001D94

$006130: TABLE          h.i.....   $001D72

$00613C: LEFT$          h.......   $001D68

$006148: RIGHT$         h.......   $001D5C

$006154: MID$           h.......   $001D56

$006160: +CHAR          h.......   $001D46

$00616C: APPEND$        h.......   $001D3E

$006178: $=             h.......   $001D0E

$006184: COMPARE$   h.......   $001D0E

$006190: LOCATE$        h.......   $001CEE

$00619C: $!             h.......   $001CE4

$0061A8: COPY$          h.......   $001CE4

$0061B4: NULL$          h.......  == $7648 (30280)

$0061C0: NULLOUT        h.......   $001CDC

$0061CC: CON]           h.......   $001CD2

$0061D8: CON            h.......   $001CCE

$0061E4: [CON           h.......   $001CC6

$0061F0: MB             h.......   $001CC0

$0061FC: KB             h.......   $001CBA

$006208: R@             h.......   $001CAE

$006214: INVERT         h.......   $001CA8

$006220: MOD            h.......   $001CA2

$00622C: 2OVER          h.......   $001C9C

$006238: 3DUP           h.......   $001C94

$006244: 2SWAP          h.......   $001C86

$006250: @.             h.......   $001C82

$00625C: =>             h.......   $001C7C

$006268: <=             h.......   $001C7A

$006274: DS             h.i.....   $001C6C

$006280: DS+            h.......   $001C66

$00628C: clong          h.i.....   $001C4A

$006298: cword          h.i.....   $001C36

$0062A4: cbyte          h.i.....   $001C2A

$0062B0: A>             h.......   $001C1A

$0062BC: >A             h.......   $001C0A

$0062C8: A@             h.......   $001C04

$0062D4: FALSE          h.......  == $0000 (0)

$0062E0: TRUE           h....... PASM $0CD

$0062EC: ..             h.i.....   $0011A4

$0062F8: s              h.......   $000304

$006304: |<             h....... PASM $099

$006310: ]              h.i.....   $001BFE

$00631C: =[             h.i.....   $001BF4

$006328: BREAK          h.i.....   $001BFE

$006334: CASE           h.i.....   $001BF4

$006340: SWITCH@        h.......   $001BEE

$00634C: SWITCH         h.......   $001BE8

$006358: QUIET          h.......   $001BD0

$006364: NUM>STR        h.......   $001BC0

$006370: NUMBER         h.......   $001B80

$00637C: LIMIT          h.......   $001B7A

$006388: >|             h.......   $001B64

$006394: ==!            h.......   $001B56

$0063A0: U@             h.......   $001B4A

$0063AC: U!             h.......   $001B3A

$0063B8: ANYCASE        h.......   $001B2E

$0063C4: PUBLIC         h.......   $001B28

$0063D0: PRIVATE        h.......   $001B22

$0063DC: UNSMUDGE   h.i.....   $001B1C

$0063E8: IMMEDIAT   h.i.....   $001B16

$0063F4: NFA>ATR        h.......   $001B0C

$006400: +NFA           h.......   $001B06

$00640C: CLKMHZ         h.......  == $0060 (96)

$006418: CLKFREQ        h.......   $001AFE

$006424: EXTE.fth   h.......   $001AC0

$006430: DUP            h....... PASM $014

$00643C: 2DUP           h.......   $00034A

$006448: OVER           h....... PASM $04C

$006454: DROP           h....... PASM $04A

$006460: 2DROP          h....... PASM $049

$00646C: SWAP           h....... PASM $052

$006478: ROT            h....... PASM $056

$006484: +              h....... PASM $05D

$006490: -              h....... PASM $05C

$00649C: *              h.......   $0008B6

$0064A8: /              h.......   $0008BC

$0064B4: UM*            h....... PASM $066

$0064C0: U/             h.......   $0008A0

$0064CC: 1+             h....... PASM $060

$0064D8: 1-             h....... PASM $05F

$0064E4: AND            h....... PASM $083

$0064F0: ANDN           h....... PASM $085

$0064FC: OR             h....... PASM $087

$006508: XOR            h....... PASM $089

$006514: 2/             h....... PASM $090

$006520: 2*             h....... PASM $095

$00652C: ?DUP           h....... PASM $013

$006538: 3RD            h....... PASM $04E

$006544: 4TH            h....... PASM $050

$006550: IF             h.i.....   $001776

$00655C: ELSE           h.i.....   $00177E

$006568: THEN           h.i.....   $001792

$006574: ENDIF          h.i.....   $001792

$006580: BEGIN          h.i.....   $001730

$00658C: UNTIL          h.i.....   $001734

$006598: AGAIN          h.i.....   $00175A

$0065A4: WHILE          h.i.....   $001776

$0065B0: REPEAT         h.i.....   $00174C

$0065BC: C@             h....... PASM $0B1

$0065C8: W@             h....... PASM $0B3

$0065D4: @              h....... PASM $0B5

$0065E0: C+!            h....... PASM $0B9

$0065EC: C!             h....... PASM $0BB

$0065F8: C@++           h....... PASM $0AD

$006604: W+!            h....... PASM $0BD

$006610: W!             h....... PASM $0BF

$00661C: +!             h....... PASM $0C1

$006628: !              h....... PASM $0C3

$006634: U/MOD          h.......   $000896

$006640: UM/MOD64   h....... PASM $075

$00664C: UM/MOD32   h....... PASM $076

$006658: NOP            h....... PASM $041

$006664: -ROT           h.......   $000350

$006670: NIP            h.......   $0008A2

$00667C: 3DROP          h....... PASM $048

$006688: >R             h....... PASM $183

$006694: R>             h....... PASM $186

$0066A0: !RP            h....... PASM $180

$0066AC: !SP            h.......   $000202

$0066B8: ROL            h.......   $0002AA

$0066C4: ROR            h.......   $0002BA

$0066D0: SHR            h....... PASM $08B

$0066DC: >>             h....... PASM $08B

$0066E8: 8>>            h....... PASM $08F

$0066F4: SHL            h....... PASM $08D

$006700: <<             h....... PASM $08D

$00670C: 8<<            h....... PASM $093

$006718: 4*             h....... PASM $094

$006724: SAR            h.......   $000214

$006730: SPLIT9         h....... PASM $09E

$00673C: REV            h....... PASM $097

$006748: MASK           h....... PASM $099

$006754: >N             h....... PASM $09B

$006760: >B             h....... PASM $09C

$00676C: 0=             h....... PASM $0A4

$006778: NOT            h....... PASM $0A4

$006784: 2+             h....... PASM $05A

$006790: 4+             h....... PASM $059

$00679C: 2-             h.......   $0017DA

$0067A8: MIN            h.......   $00084A

$0067B4: MAX            h.......   $00084E

$0067C0: */             h.......   $0008A8

$0067CC: UM*/           h.......   $0008D4

$0067D8: ABS            h....... PASM $091

$0067E4: ?NEGATE        h....... PASM $062

$0067F0: NEGATE         h....... PASM $064

$0067FC: FOR            h....... PASM $12F

$006808: NEXT           h....... PASM $142

$006814: FROM           h....... PASM $128

$006820: BY             h....... PASM $12A

$00682C: ADO            h....... PASM $12C

$006838: LOOP           h....... PASM $142

$006844: +LOOP          h....... PASM $140

$006850: I              h....... PASM $126

$00685C: J              h.......   $000344

$006868: LEAVE          h.......   $000330

$006874: FOR@           h.......   $000338

$006880: FOR!           h.......   $000332

$00688C: BY!            h.......   $00033E

$006898: LP!            h.......   $00032A

$0068A4: IC!            h....... PASM $0B7

$0068B0: IC@            h....... PASM $0B0

$0068BC: C~             h.......   $0007FE

$0068C8: W~             h.......   $000806

$0068D4: ~              h.......   $00080E

$0068E0: BIT?           h.......   $00029A

$0068EC: SET?           h.......   $000868

$0068F8: SET            h.......   $000852

$006904: CLR            h.......   $00085E

$006910: BIT!           h.......   $0019CE

$00691C: CMOVE          h....... PASM $043

$006928: ERASE          h.......   $000884

$006934: FILL           h.......   $000886

$006940: <CMOVE         h.......   $00086E

$00694C: RESET          h....... PASM $000

$006958: 0EXIT          h....... PASM $03D

$006964: EXIT           h....... PASM $03F

$006970: ?EXIT          h.......   $000356

$00697C: CALL           h....... PASM $152

$006988: JUMP           h....... PASM $153

$006994: WAITPNE        h....... PASM $0F2

$0069A0: WAITPEQ        h....... PASM $0EF

$0069AC: RUNMOD         h....... PASM $1D9

$0069B8: (EMIT)         h....... PASM $155

$0069C4: (EMITX)        h....... PASM $157

$0069D0: LOADMOD        h....... PASM $15F

$0069DC: COG@           h....... PASM $16E

$0069E8: COG!           h....... PASM $172

$0069F4: COGSTOP        h.......   $00023C

$006A00: pCOGINIT   h.......   $00024A

$006A0C: COGID          h.......   $000254

$006A18: REBOOT         h.......   $000260

$006A24: CLK            h.......   $000268

$006A30: CLKSET         h.......   $000276

$006A3C: DELTA          h.......   $000222

$006A48: WAITCNT        h....... PASM $165

$006A54: LAP            h.......   $000286

$006A60: .LAP           h.......   $0004A0

$006A6C: LAP@           h.......   $00046E

$006A78: CLOCK          h....... PASM $0FF

$006A84: CLKIN          h....... PASM $104

$006A90: CLKOUT         h....... PASM $0FB

$006A9C: H              h....... PASM $0D0

$006AA8: L              h....... PASM $0D4

$006AB4: P              h....... PASM $0D3

$006AC0: T              h....... PASM $0D9

$006ACC: F              h....... PASM $0D7

$006AD8: SHROUT         h....... PASM $0F8

$006AE4: SHRINP         h....... PASM $0F5

$006AF0: OUTSET         h....... PASM $0E3

$006AFC: OUTCLR         h....... PASM $0E0

$006B08: OUTPUTS        h....... PASM $0E4

$006B14: INPUTS         h....... PASM $0E7

$006B20: HIGH           h....... PASM $0E2

$006B2C: LOW            h....... PASM $0DF

$006B38: FLOAT          h....... PASM $0E6

$006B44: PIN@           h....... PASM $0E9

$006B50: IN             h....... PASM $0EA

$006B5C: SPIWRB         h....... PASM $10A

$006B68: SPIWR16        h....... PASM $108

$006B74: SPIWR          h....... PASM $10B

$006B80: SPIRD          h....... PASM $115

$006B8C: SPICE          h....... PASM $11D

$006B98: 0<>            h.......   $00081A

$006BA4: <>             h.......   $000820

$006BB0: WITHIN         h.......   $000832

$006BBC: U>             h.......   $000826

$006BC8: =              h....... PASM $0A2

$006BD4: >              h....... PASM $0A7

$006BE0: <              h.......   $00082C

$006BEC: U<             h....... PASM $0AA

$006BF8: 0<             h.......   $000816

$006C04: HEX            h.......   $000366

$006C10: DECIMAL        h.......   $000362

$006C1C: BINARY         h.......   $00035E

$006C28: READBUF        h.......   $0008E2

$006C34: KEY            h.......   $000942

$006C40: WKEY           h.......   $000990

$006C4C: (KEY)          h.......   $00095C

$006C58: KEY!           h.......   $00093E

$006C64: doKEY          h.......   $0012C0

$006C70: EMIT           h.......   $000766

$006C7C: CLS            h.......   $000678

$006C88: SPACE          h.......   $00067C

$006C94: SPACES         h.......   $0007D2

$006CA0: EMITS          h.......   $0007D6

$006CAC: BELL           h.......   $000680

$006CB8: CR             h.......   $000688

$006CC4: <CR>           h.......   $000684

$006CD0: TAB            h.......   $0007B4

$006CDC: TABS           h.......   $0007B2

$006CE8: XTAB           h.......   $0007C4

$006CF4: SPINNER        h.......   $000692

$006D00: .HEX           h.......   $000512

$006D0C: .BYTE          h.......   $000526

$006D18: .WORD          h.......   $000534

$006D24: .LONG          h.......   $00053C

$006D30: @PAD           h.......   $00036E

$006D3C: HOLD           h.......   $000376

$006D48: >CHAR          h.......   $000380

$006D54: #>             h.......   $0003D8

$006D60: <#             h.......   $0003A0

$006D6C: #              h.......   $0003AA

$006D78: #S             h.......   $0003CE

$006D84: <D>            h.......   $0003E4

$006D90: PRINT$         h.......   $000408

$006D9C: CTYPE          h.......   $00041C

$006DA8: LEN$           h....... PASM $167

$006DB4: U.             h.......   $000402

$006DC0: .DP            h.......   $0004FE

$006DCC: PRINT          h.......   $0003F6

$006DD8: .              h.......   $0003F6

$006DE4: ZPRINT         h.......   $00042C

$006DF0: CREATE         h.i.....   $000D4E

$006DFC: CREATE$        h.......   $000D50

$006E08: GETWORD        h.......   $000D30

$006E14: SEARCH         h.......   $0009A8

$006E20: FINDSTR        h.......   $0009AA

$006E2C: NFA>CFP        h.......   $000A38

$006E38: NFA>CFA        h.......   $000A3E

$006E44: CFA>NFA        h.......   $000A12

$006E50: NFA>NFA        h.......   $000A32

$006E5C: @NAMES         h.......   $000C28

$006E68: names          h.......  == $0098 (152)

$006E74: WORDS          h.......   $000A6C

$006E80: UNSMUDGE   h.......   $000E98

$006E8C: ALLOT          h.......   $000C1E

$006E98: ALLOCATE   h.......   $000C22

$006EA4: HERE           h.......   $00099A

$006EB0: ,              h.i.....   $000C04

$006EBC: ||             h.i.....   $000BFE

$006EC8: |              h.i.....   $000BE2

$006ED4: [W]            h.i.....   $000B78

$006EE0: [B]            h.i.....   $000B98

$006EEC: W,             h.i.....   $000B7E

$006EF8: EXECUTE        h.......   $000B6C

$006F04: VER            h.......  == $0018 (24)

$006F10: .VER           h.......   $000AA2

$006F1C: TACHYON        h.......   $001A60

$006F28: END            h.......   $0019D4

$006F34: CONSOLE        h.......   $00195E

$006F40: ECHO           h.......   $0019C8

$006F4C: us             h.......   $00031C

$006F58: ms             h.......   $000308

$006F64: seconds        h.......   $000304

$006F70: second         h.......   $000304

$006F7C: DISCARD        h.......   $000EB6

$006F88: TASK           h.......   $0002F6

$006F94: REG            h.......   $0002FE

$006FA0: BUFFERS        h.......  == $7800 (30720)

$006FAC: COLD           h.......   $001952

$006FB8: RAM            h.......   $00055C

$006FC4: DUMP:          h.......   $000564

$006FD0: DUMPX          h.......   $000592

$006FDC: DUMP           h.......   $00058E

$006FE8: DUMPW          h.......   $000662

$006FF4: DUMPL          h.......   $000668

$007000: DUMPC          h.......   $000672

$00700C: DUMPA          h.......   $000656

$007018: DUMPAW         h.......   $00065C

$007024: QD             h.......   $00058C

$007030: DEPTH          h.......   $0007F2

$00703C: .S             h.i.....   $0006F4

$007048: DEBUG          h.......   $000F36

$007054: .STATS         h.......   $000EF0

$007060: IDLE           h.......   $0002C8

$00706C: NOOP           h.......   $0011A4

$007078: ---            h.i.....   $000AE6

$007084: \              h.i.....   $000AE6

$007090: ''             h.i.....   $000AE6

$00709C: (              h.i.....   $000AFC

$0070A8: {              h.i.....   $000B10

$0070B4: }              h.i.....   $0011A4

$0070C0: IFDEF          h.i.....   $000B06

$0070CC: IFNDEF         h.i.....   $000B0C

$0070D8: "              h.i.....   $000C40

$0070E4: (")            h.i.....   $0003E8

$0070F0: ."             h.i.....   $000C46

$0070FC: PRINT"         h.i.....   $000C46

$007108: (.")           h.i.....   $0006E4

$007114: ==             h.i.....   $000E2C

$007120: org            h.......   $000DFE

$00712C: @org           h.......  == $00B4 (180)

$007138: byte           h.i.....   $000E1E

$007144: word           h.i.....   $000E06

$007150: long           h.i.....   $000E12

$00715C: bytes          h.i.....   $000E02

$007168: words          h.i.....   $000E08

$007174: longs          h.i.....   $000E14

$007180: ALIGNORG   h.......   $000DF6

$00718C: ALIGN          h.......   $000DE8

$007198: :              h.i.....   $000DC8

$0071A4: pre            h.i.....   $000DC0

$0071B0: pub            h.i.....   $000DB0

$0071BC: pri            h.i.....   $000DB8

$0071C8: ;              h.i.....   $000E8E

$0071D4: RETURN         h.i.....   $000E56

$0071E0: [C]            h.i.....   $000E9E

$0071EC: '              h.i.....   $000C3C

$0071F8: [']            h.......   $000C32

$007204: NFA'           h.i.....   $000C2C

$007210: OFF            h.......  == $0000 (0)

$00721C: ON             h....... PASM $0CD

$007228: ALIAS          h.i.....   $0019A2

$007234: GRAB           h.i.....   $000B4A

$007240: [WS2812]   h.......   $001338

$00724C: [SDRDF]        h.......   $001430

$007258: [SDRD]         h.......   $0013D0

$007264: [SDWR]         h.......   $001468

$007270: [SDIO]         h.......   $0014A4

$00727C: [SSD!]         h.......   $00150C

$007288: [PWM32]        h.......   $001514

$007294: [PWM32!]   h.......   $001558

$0072A0: [PLOT]         h.......   $0015B8

$0072AC: [ROL3]         h.......   $0015E8

$0072B8: [CAP]          h.......   $001618

$0072C4: [WAV]          h.......   $0016B8

$0072D0: [MCP32]        h.......   $001710

$0072DC: [RCTIME]   h.......   $001660

$0072E8: dmm            h.......  == $00B6 (182)

$0072F4: errors         h.......  == $00A4 (164)

$007300: uhere          h.......  == $009C (156)

$00730C: uthere         h.......  == $009E (158)

$007318: flags          h.......  == $00AC (172)

$007324: prompt         h.......  == $008C (140)

$007330: uauto          h.......  == $00A2 (162)

$00733C: keypoll        h.......  == $00AE (174)

$007348: lastkey        h.......  == $00C0 (192)

$007354: rxpars         h.......   $0019B4

$007360: rx             h.......  == $0092 (146)

$00736C: id             h.......  == $06D2 (1746)

$007378: keytable   h.......  == $11C0 (4544)

$007384: SETKEYS        h.......  == $112A (4394)

$007390: @WORD          h....... REG $38

$00739C: uemit          h....... REG $18

$0073A8: ukey           h....... REG $1A

$0073B4: base           h....... REG $1E

$0073C0: num            h....... REG $24

$0073CC: uswitch        h....... REG $14

$0073D8: undef          h....... REG $34

$0073E4: V5             h....... PASM $041

$0073F0: *end*          h....... PASM $041 ok

..