----------------------------------------------------------------------------- ----------------------------------------------------------------------------- TI-RAM.TXT A Programmer's Guide to the TI-85 RAM Version 1.1 Copyright (c) 1997 Dan Eble, Rob Taylor & Dines Justesen ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- This document is unrefined, but you have it anyway. Use it how you will. If you have questions, contact Dines Justesen at c958362@student.dtu.dk. Additions and revisions are welcome. Feel free to distribute this document in unmodified form. Table of Interesting Data (ROM) ------------------------------- Page 0: 39C 066C: misc data. Strings, lists of ascii chars ...... 0681: character lookup table for something 6 0C6B: 05, "xStat" 6 0C71: 05, "yStat" 128 1439: table for calculating transcendental functions REAL 1F39: 0.5 REAL 1F42 \ complex (1.0,0.0) REAL 1F4C / \ REAL 1F56 /complex (0.0,0.0) REAL 1F60: 0 REAL 1F6A: 1 REAL 24E6: 180/pi REAL 24F0: pi/2 REAL 24FA: pi/4 REAL 2504: log e REAL 250E: pi REAL 2518: pi/180 REAL 2522: ln 10 7 2664: 4,5,"PRegC" (Real list named PRegC) 2CD 30DF: misc strings used by calculator (zero terminated) Page 1: 42DD: pointers to catalog entries for alphabet 112 4DC8: bitmap similar to menu box 250 4E38: 124 pointers to menus (indexed by secondary menu type byte) 1878 4F32: menu data structures (page 1) 1 byte for something 1 byte for number of pointers following n pointers 5688: menu items (See listing above) 695C: mode screen strings (see above) 723E: normal character set (01-E0) 7936: character set for menus (00-D7) 140 7B99: table to translate real key numbers to system keynumbers FF? 7D83: table to translate system keys to real keys Page 3: 32 57A8 table to translate contrast to ASCII Page 4: 7D7A: system variable and constant names (cannot store to these) Page 5: 4788: Real numbers 4788: 0.069444444444444 = 1/14.4 4792: 0.083333333333333 = 1/12 479D: 0.125000000000000 = 1/8 47A6: 0.200000000000000 = 1/5 47B0: 0.900000000000000 47BA: 0.000050000000000 = 1/20000 6EFC: link error strings (ASCIIZ) 6EFC: "Waiting" 6F04: "Memory Backup" 6F12: "WARNING" 6F1A: "SYSTEM NO VARS OF THIS TYPE" 6F35: "MEMORY FULL" 6F41: "TRANSMISSION ERROR" 6F54: "DUPLICATE NAME" 6F63: "DELETE BYTES" 71B2: variable type strings (ASCIIZ) 71B2: "CONS" 71B7: "CPLX" 71BC: "EQU" 71C0: "GDB" 71C4: "LIST" 71C9: "MATRX" 71CF: "PIC" 71D5: "PRGM" 71D8: "RANGE" 71DE: "REAL" 71E3: "STRNG" 71E9: "VECTR" 7268: zoom variable names: 7268: 4,"Func",0 \ 726E: 3,"Pol",0 \ 7273: 5,"Param",0 > Can be read as ASCIIZ or length index string. 727A: 5,"DifEq",0 / 7281: 4,"ZRCL",0 / 76B3: 8 real numbers 7775: "fnIntErr" 7F09: filler FF's Page 7: 6D7F: pointers to BASIC commands in token order 41E5: pointers to error strings 422B: error strings 6F7D: pointers to BASIC commands in alphabetical order 70E7: list of BASIC commands 76D4: pointers to variable names 773E: variable name strings 7869: more pointers to variable names 7F4F: filler FF's 7FFF: ROM version byte 2Ah: 2.0 57h: 3.0A 8Eh: 4.0 5Eh: 5.0 3Dh: 6.0 97h: 8.0 91h: 9.0 35h: 10.0 Table of Interesting Data (RAM) ------------------------------- Byte 8000: translated scancode of key currently pressed, but 00 if 01BEh (get key) has been called Byte 8001: translated scancode of key currently pressed Byte 8002: same as 8001, but FFh is more than one key is pressed Byte 8003: countdown until key repeat (only runs for arrows and DEL) Byte 8004: bit 2 set = key down now (bit 0 set = more than one key ?) Byte 8006: scancode of last key pressed Byte 8007: contrast (00-1F) Word 8008: \ Counters used by interrupt handler for timing of Word 800A: / cursor blink and APD Byte 800C: current row of text cursor (0-7) Byte 800D: current column of text cursor (0-14h) Byte 800E: current character at cursor position Byte 800F: Length of DelChar buffer (max 100 bytes) 100 8010: DelChar buffer Word 8074: pointer 8 8078: 8x8 bitmap of top right corner of screen. Byte 8080: counter for busy indicator Byte 8081: bitmap for busy indicator 11 8082: OP1 11 808D: OP2 11 8098: OP3 11 80A3: OP4 11 80AE: OP5 11 80B9: OP6 Word 80C6: pointer to current home-screen program (untokenized length-data form) Word 80C8: pointer to the top of user memory - 16 Word 80CA: pointer Word 80CC: number of used user memory bytes ? Word 80CE: pointer Word 80D0: pointer to Ans Word 80D2: pointer to last variable accessed Word 80D4: pointer Word 80D6: pointer to final VAT entry 168 80DF: text screen memory (8*21 = 168 bytes) Byte 8187: secondary cursor row Byte 8188: secondary cursor column Byte 8189: ??? more secondary data (copied from 8B2F [screen_scroll_start]) Byte 818A: ??? more secondary data (copied from 8358) Byte 818B: ??? more secondary data (copied from (834B) AND 16) Byte 818C: data for international character symbol 0 = nothing, 1 = accent, 2 = grave, 3 = circumflex, 4 = dieresis Word 81AA: Pointer used for error handling ??? 10h 81AC: Circular buffer used by errorhandler Word 81BE: memory checksum from 8BF7 to FA6F Word 81D1: ? Word 81E1: ? page 1 pointer to a menu structure? Byte 81E3: \_ info about memory page?, what to do (run code, fetch submenu) Byte 81E4: / for 81E1? Word 81E5: pointer to last sub-menu structure (page 1) one byte for something one byte for number of pointers to follow n words for n pointers Byte 81E7: \_ info for 81E5? Byte 81E8: / Word 81ED: ? pointer (81E1) Word 81F0: pointer to custom pointers (maybe more general pointer to current menu structure) (There's a 09 before the 0F. What do it do?) Word 81F4: ? pointer to last menu? (look at 5664) Word 81FC: ? pointer (81F0) (pointer to pointer to custom pointers???) 81FF: 15 bytes copied from 81E1 Word 820B: ? pointer (81E1) (another one??) 40 8254: user menu string buffer -- 5 sets of data (one for each menu key) 1 byte: 00h = not used, 80h = used (on menu) 6 bytes: menu item 1 byte: 00h 80?? 827C: buffer for name of last error (also used for other things ?) Byte 8333: x coordinate of menu text cursor Byte 8334: y coordinate of menu text cursor Byte 8337: last error number 8346: A table of bitmapped system data. IY usually points here. 838E: REALS. range vars. Word 85E1: pointer Word 85E3: pointer Word 85E5: pointer Word 85E7: pointer Word 85E9: pointer Word 85EB: pointer Word 8629: pointer Word 862B: pointer Word 8632: pointer Word 8634: pointer Word 863F: pointer 1024 8641: graphics screen memory (64*128/8 = 1024 bytes) REAL 8A41: used for making random numbers REAL 8A4B: used for making random numbers Byte 8A56: ? Word 8A5F: pointer to last entry code (tokenized data form) Word 8A61: ? pointer to code of last program executed (maybe not) Word 8A63: pointer Word 8A6B: secondary text memory (for page-flipping technique?) Word 8B17: length of current home-screen program Word 8B19: pointer to current home-screen program (untokenized data form) Word 8B1B: pointer to last entry program (tokenized length-data form) Word 8B1D: subtract (8B1B) from this to get number of free bytes Word 8B1F: ? same as 8B1D ? Word 8B25: pointer to last byte of free memory (end of VAT - 1) Word 8B27: pointer to first byte of free memory Word 8B29: a number (see 8BF7) Byte 8B2F: first row of screen scrolling window (0-7) Byte 8B30: last row of screen scrolling window (1-8) Byte 8B3A: fixed-point decimal place (FFh for floating point) Word 8B96: pointer Word 8B98: pointer 32 8BB1: custom menu pointers ( 1 byte = 09 = ??) ( 1 byte = 0F = # of items) (15 words = pointers) ( 1 byte = 00) Word 8BD5: pointer Word 8BD7: pointer Word 8BD9: pointer Word 8BDB: pointer Word 8BE1: pointer to end of used memory Word 8BE5: pointer to end of VAT Word 8BEB: pointer to last byte of free memory (end of VAT - 1) REAL 8BF7: the REAL equivalent of the word at (8B29) 8C01: the start of input memory Loc FA6F: end of VAT (it's built upside-down) 1024 FC00: real bitmapped video memory Table of Bitmapped Data ----------------------- (IY+00) or (8346) bit 3 set: keystroke available bit 2 set: Degree \_ angle display mode res: Radian / (IY+01) pr (8347) bit 2 set: Graph screen is displayed ? res: Graph screen is not displayed ? (IY+02) or (8348) bit 7 set: DifEq \ bit 6 set: Param \_ graph bit 5 set: Pol / modes bit 4 set: Func / (IY+03) or (8349) bit 0 set: Redraw graph res: Use graph mem (IY+04) or (834A) bit 6 set: Show graph labels res: Do not show graph labels bit 5 set: Axes off res: Axes on bit 4 set: Do not show graph cursor res: Show graph cursor bit 3 set: Show polar coordinates res: Show rectangular coordinates bit 2 set: Grid on res: Grid off bit 1 set: Simultaneous draw res: Sequential draw bit 0 set: Draw dot res: Draw line (IY+05) or (834B) bit 4 set: use "insert" cursor bit 3 set: print normal font in inverse color, or XOR menu font with screen res: print normal font in normal color, or overwrite menu font bit 1 set: print 7 rows of menu font res: print 6 rows (IY+08) or (834E) bit 0 set: dxNDer \_ method of differentiation res: dxDer1 / (IY+0A) and (IY+0B), or (8350) and (8351) bits 7-6: 11= SphereV \ 01= CylV >- vector display modes 00= RectV / bit 5 set: PolarC \_ coordinate display mode res: RectC / bits 4-2: 100= Bin \ 010= Oct \_ number 001= Hex / bases 000= Dec / bits 1-0: 11= Eng \ 01= Sci >- number display modes 00= Normal / (IY+0C) or (8352) bit 3 set: cursor currently lit bit 2 set: cursor on (IY+0D) or (8353) bit 2 set: scroll text window when necessary bit 1 set: affects text memory as well as screen (IY+0E) or (8354) bit 6 set: use extra bit of registers (OP1-OP6) res: do not use extra digits (IY+12) or (8358) bit 6 set: alpha locked bit 5 set: use "alpha" cursor if bit 4 is set res: use "Alpha" cursor if bit 4 is set bit 4 set: use "Alpha"/"alpha" cursor bit 3 set: use "2nd" cursor bit 1 set: there are valid data in the 8-byte buffer at (8078) bit 0 set: the "busy" indicator is turned on