home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / club100 / ref / rcmap0.200 < prev    next >
Text File  |  2006-10-19  |  27KB  |  613 lines

  1.                     ---------------------------- 
  2.                     | Model 100/200 System Map |  
  3.                     ----------------------------  
  4.                           ROM: Part VIII
  5.                           Copyright 1985  
  6.                      Revision Date: 09/30/85  
  7.                    Compiled and Researched by:  
  8.                        Robert D. Covington  
  9.             Systems Information Management Consultants  
  10.       [Not associated with The Covington Group, N. Y., N. Y.]  
  11.          Revised for Tandy 200 by Chris De Herrera on 9/89 
  12.   
  13.     This document may be duplicated and distributed free of  
  14. charge to any individuals who desire it.  Any duplications of  
  15. this document, however, must include all of the information  
  16. contained here-in, with no deletions or changes.  
  17.     The author and distributors of this document make no   
  18. expressed or implied warrantees as to the validity of the   
  19. information contained here in.  
  20.  
  21.                Tandy 100 Memory Map
  22.  
  23. Location        Bank 1        Bank 2
  24. -----------------------------------------
  25. Rom: 32k        Basic         Option ROM
  26. 0 to            Telcom
  27. 32767           Text
  28.                 Addrss
  29.                 Schedl
  30.  
  31. Ram:            User Files (1 Bank of Up to 32k max)
  32. 32768 to
  33. 65535
  34.  
  35.  
  36.                Tandy 200 Memory Map
  37.  
  38. Location        Bank 1       Bank 2       Bank 3
  39. -----------------------------------------------------
  40. Rom1: 32k       Basic        Multiplan    Option ROM
  41. 0 to            Telcom
  42. 32767           Text
  43.                 Addrss
  44.                 Schedl (Only in RAM Bank1)
  45.                 List
  46. Rom2: 8k        Calculator   Calculator   Calculator
  47. 32768 to        Alarm        Alarm        Alarm
  48. 40959
  49.  
  50. Ram: 24k        User files (up to 3 banks)
  51. 40960 to
  52. 65535
  53.  
  54. Note: The alarm and Calculator are available even when Multiplan and some
  55. rom's are in use.
  56.  
  57. Tandy 200 Multiplan Notes:  Multiplan requires maxram = himem = 61104 and
  58. clears 4213 bytes from 56891 to 61104. If you have a m/l program that can be 
  59. deleted to run Multiplan, the characters MP should be placed at 61102 and
  60. 61103.
  61.   
  62.                            - File formats -  
  63. For M100 & M200:
  64.  
  65.  .BA Files:  
  66.            2 bytes -  Address of next line  
  67.            2 bytes -  Line number  
  68.            Up to 255 characters ending with a null  
  69.            EOF is 3 consecutive nulls  
  70.   
  71.  .DO Files:  
  72.            Text ended with a EOF character 1AH  
  73.   
  74.  .CO Files:  
  75.            2 bytes -  Address to load to  
  76.            2 bytes -  Number of bytes to load (-start 6)  
  77.            2 bytes -  Transfer address  
  78.   
  79.   
  80.    - File Descriptor Block (Address Given by VARPTR(#file)) Format -  
  81.   
  82. Byte:  
  83.       0 - File status (0-not open, 1-open for input, 2 open for   
  84.           output or append)  
  85.   2 & 3 - Address of file directory entry  
  86.       4 - File device (248-RAM, 249-MoDeM, 250-LinePrinTer,   
  87.           251-WAND, 252-COM, 253-CASsette, 254-CRT, 255-LCD)  
  88.       6 - Offset from buffer start (see bytes 9) for start of next   
  89.           record  
  90.   7 & 8 - Relative position of next 256 byte block from  
  91.           beginning of file  
  92.       9 - Start of 256 byte buffer for data transfer  
  93.   
  94.  
  95.                      - Math Routine Summary -  
  96. For M100:  
  97. -------------------------------------------------------------  
  98. Function       Single Precision    Double Precision    Integer  
  99. -------------------------------------------------------------  
  100.     +               37F4H               2B78H           3704H  
  101.     -               37FDH               2B69H           36F8H  
  102.     *               3803H               2CFFH           3725H  
  103.     /               380EH               2DC7H           0F0DH  
  104.     ^               3D7FH               3D8EH           3DF7H  
  105.  Compare            3498H               34FAH           34C2H  
  106. -------------------------------------------------------------  
  107.  
  108.  
  109.                  - Floating Point Accumulator Format -  
  110. For M100:  
  111. ---------------------------------------------------------------  
  112.  FAC1   |  FAC2   |     DP    |    SP    |  Integer |   SP  
  113. Address | Address |   Format  |  Format  |  Format  | Register  
  114. ---------------------------------------------------------------  
  115. FC18H   | FC69H   |   S & E   |  S & E   |    -     |    C  
  116. FC19H   | FC6AH   |   BCD M   |  BCD M   |    -     |    B  
  117. FC1AH   | FC6BH   |   BCD #   |  BCD #   |   LSB    |    E  
  118. FC1BH   | FC6CH   |   BCD #   |  BCD L   |   MSB    |    D  
  119. FC1CH   | FC6DH   |   BCD #   |    -     |    -     |    -  
  120. FC1DH   | FC6EH   |   BCD #   |    -     |    -     |    -  
  121. FC1EH   | FC6FH   |   BCD #   |    -     |    -     |    -  
  122. FC1FH   | FC70H   |   BCD L   |    -     |    -     |    -  
  123. ---------------------------------------------------------------  
  124.   
  125.   LSB =  Least significant byte of intger  
  126.   MSB =  Most significant byte of integer.  Bit 7 contains the sign   
  127.         of the integer  
  128. BCD L =  Least significant BCD byte  
  129. BCD H =  Most significant BCD byte  
  130. BCD # =  Middle BCD bytes.  Each digit of the number is represented   
  131.         by one of the values in the two nibbles in each byte  
  132. S & E =  Sign and exponent of each number.  Bit 7 contains the sign   
  133.         of the floating point number. Bit 6 must be set.  Bits 0-5   
  134.         determine where the decimal point is to be inserted.  For   
  135.         example, if this byte contained a 65, the sign would be   
  136.         positive and the decimal point would be placed between the   
  137.         first and second digits (#.###....)  
  138.  
  139.                  - Basic Token Values -
  140.  
  141.     For M100 and M200:
  142.     ---------------------------------------------
  143.     |  Basic    |  Token  |  Basic    |  Token  |
  144.     |  Command  |  Value  |  Command  |  Value  |
  145.     ---------------------------------------------
  146.  
  147.         ABS        E1       LET          87
  148.         ASC        F9       LINE         92
  149.         ATN        ED       LIST         A5
  150.         BEEP       B1       LLIST        A7
  151.         CALL       B9       LOAD         9B
  152.         CDBL       F4       LOG          E8
  153.         CINT       F2       LPOS         E4
  154.         CLEAR      A7       LPRINT       A0
  155.         CLOAD      A8       MAX          B7
  156.         CLOAD?     A8       MENU         BA
  157.         CLOADM     A8       MERGE        9C
  158.         CLOSE      9A       MOTOR        B6
  159.         CLS        B0       NAME         BC
  160.         COM        AD       NEW          BF
  161.         CONT       A4       NEXT         82
  162.         COS        EA       ON           97
  163.         CSAVE      A9       OPEN         99
  164.         CSAVEM     A9       OUT          96
  165.         CSNG       F3       PEEK         EE
  166.         CSRLIN     CA       POKE         A2
  167.         DATA       83       POS          E5
  168.         DATE       AB       POWER        B8
  169.         DAY        AC       PRESET       B5
  170.         DEF        A1       PRINT        A3
  171.         DIM        85       PSET         B4
  172.         DSKI       C8       READ         86
  173.         DSKO       98       REM          8E
  174.         EDIT       93       RESTORE      8B
  175.         END        80       RESUME       95
  176.         EOF        EF       RND          E7
  177.         ERROR      94       RUN          89
  178.         EXP        E9       SAVE         9E
  179.         FILES      9D       SAVEM        9E
  180.         FIX        F5       SCREEN       BE
  181.         FOR        81       SGN          DF
  182.         FRE        E2       SIN          EB
  183.         GOSUB      8C       SOUND        B2
  184.         GOTO       88       SPACE        FB
  185.         HIMEM      CC       SQR          E6
  186.         IF         8A       STOP         8F
  187.         INKEY$     C9       STR          F7
  188.         INP        E3       STRING       C6
  189.         INPUT      84       TAB(         C0
  190.         INPUT#     84       TAN          EC
  191.         INT        E0       TIME         AA
  192.         IPL        BB       USING        C2
  193.         KEY        AF       VAL          F8
  194.         KILL       BD       VARPTR       C3
  195.         LCOPY      B3       WIDTH        90
  196.         LEN        F6
  197.  
  198.   
  199.                   - Option ROM Important Addresses -  
  200.  
  201. For M100 & M200:  
  202. 40H = 54H  
  203. 41H = 43H - Required for ROM to be detected on BOOT  
  204. 42H - 47H - Name of file associated with ROM program  
  205.  
  206. For M100:  
  207. Code at 7E24H-7E43H executed on BOOT to handle option ROM.  
  208. Code at 0365H loaded at F605H on BOOT to detect option ROM.  
  209.   
  210.                     - Hardware Port Map -  
  211.  
  212. For M100:
  213. A0H -  Modem control port  
  214.       Output:  
  215.         Bit:  
  216.             0 - Modem telephone relay (1-Modem connected to phone   
  217.                 line)  
  218.             1 - Modem enable (1-Modem chip enabled)  
  219.  
  220. For M100/200:  
  221. B0H -  8155 PIO Command/Status Register  
  222.       Output:  
  223.         Bit:  
  224.             0 - Direction of Port A (0-input, 1-output)  
  225.             1 - Direction of Port B (0-input, 1-output)  
  226.         2 & 3 - Port C definition (00 - All input, 11 - All output,   
  227.                 01 - Alt 3, 10 - Alt 4 (see Intel technical sheets   
  228.                 for more information))  
  229.             4 - Enable Port A interrupt (1 - enable)  
  230.             5 - Enable Port B interrupt (1 - enable)  
  231.         6 & 7 - Timer mode (00 - No effect on counter, 01 - Stop   
  232.                 counter immediately, 10 - Stop counter after TC, 11   
  233.                 - Start counter)  
  234.       Input:  
  235.         Bit:  
  236.             0 - Port A interrupt request  
  237.             1 - Port A buffer full/empty (input/output)  
  238.             2 - Port A interrupt enabled  
  239.             3 - Port B interrupt request  
  240.             4 - Port B buffer full/empty (input/output)  
  241.             5 - Port B interrupt enabled  
  242.             6 - Timer interrupt (status of TC pin)  
  243.             7 - Not used  
  244.   
  245. B1H -  8155 PIO Port A  
  246.       Output:  
  247.         8 bit data port for printer output, keyboard column strobe,   
  248.         and LCD  
  249.         In addition, the first 5 bits of this port is used to   
  250.         control the 1990 real time clock chip.  The configuration of   
  251.         these five bits are:  
  252.         Bit:  
  253.             0 -  C0  
  254.             1 -  C1  
  255.             2 -  C2  
  256.             3 -  Clock  
  257.             4 -  Serial data into clock chip  
  258.   
  259.   
  260. B2H -  8155 PIO Port B.  
  261.       Output:  
  262.         Bit:  
  263.             0 - Column 9 select line for keyboard.  This line is   
  264.                 also used for the CS-28 line of the LCD.  
  265.             1 - CS 29 line of LCD  
  266.             2 - Beep toggle (1-Data from bit 5, 0-Data from 8155   
  267.                 timer)  
  268.             3 - Serial toggle (1-Modem, 0-RS232)  
  269.             4 - Software on/off switch for computer  
  270.             5 - Data to beeper if bit 2 set.  Set if bit 2 low.  
  271.             6 - DTR (not) line for RS232  
  272.             7 - RTS (not) line for RS232  
  273.   
  274. B3H -  8155 PIO Port C  
  275.       Input:  
  276.         Bits:  
  277.             0 - Serial data input from clock chip  
  278.             1 - Busy (not) signal from printer  
  279.             2 - Busy signal from printer  
  280.             3 - Data from BCR  
  281.             4 - CTS (not) line from RS232  
  282.             5 - DSR (not) line from RS232  
  283.             6-7 - Not avaiable on 8155  
  284.   
  285. B4H -  8155 Timer register.  LSB of timer counter  
  286.   
  287. B5H -  8155 Timer register.  MSB of timer counter  
  288.   
  289. B8H -  Same as port B0H  
  290.   
  291. B9H - Same as port B1H  
  292.   
  293. BAH - Same as port B2H  
  294.   
  295. BBH - Same as port B3H  
  296.   
  297. BCH - Same as port B4H  
  298.   
  299. BDH - Same as port B5H  
  300.   
  301. C0H -  Bidirectional data bus for UART (6402) (C0H-CFH same)  
  302.   
  303.   
  304. D0H -  Status control register for UART, modem, and phone (6402)   
  305.       (D0H-DFH same)  
  306.       Output:  
  307.         Bits:  
  308.             0 - Stop Bits (1-1.5, 0-2)  
  309.             1 - Parity (1-even, 0-odd)  
  310.             2 - Parity Enable (1-no parity, 0-parity enabled)  
  311.             3 - Data length (00-5 bits, 10-6 bits, 01-7 bits, 11-8   
  312.                 bits)  
  313.             4 - Data length (see bit 3)  
  314.       Input:  
  315.         Bits:  
  316.             0 - Data on telephone line (used to detect carrier)  
  317.             1 - Overrun error from UART  
  318.             2 - Framing error from UART  
  319.             3 - Parity error from UART  
  320.             4 - Transmit buffer empty from UART  
  321.             5 - Ring line on modem connector  
  322.             6 - Not used  
  323.             7 - Low Power signal from power supply (LPS not)  
  324.   
  325. E0H -  Keyboard input and misc. device select (E0H-EFH same)  
  326.       Output:  
  327.         Bits:  
  328.             0 - ROM select (0-Standard ROM, 1-Option ROM)  
  329.             1 - STROBE (not) signal to printer  
  330.             2 - STROBE for Clock chip (1990)  
  331.             3 - Remote plug control signal  
  332.       Input:  
  333.             8 bit data row from keyboard strobe  
  334.   
  335. F0H - LCD display data bus (F0H-FFH same)  
  336.  
  337.              - How LCD unit works on the Tandy 200 -
  338.  
  339. It has 16 controllable registers.
  340. These are accessed through IO ports.
  341. To change them, do this: 
  342.    OUT 255,r:OUT 254,x
  343.    r stands for register # and x stands for a numeric value 0-255
  344.  
  345. The register to be accessed is sent to port 255 and all numerical values are
  346. transferred through port 254. If x should be greater than 255, the LSB(least
  347. significant byte) is assigned to r, then MSB(most significant byte) is
  348. assigned to r+1. There is only one readable register which is r13, through
  349. which graphics data is read.  It has the format:
  350.  
  351. OUT 255,13:B = INP(254):B = INP(254):'first INP() is ignored by LCD
  352.  
  353. Explanation of each register:
  354.  
  355.   r0 - enable or disable screen.  Any value less than 63 indicates screen off,
  356.        value 63 indicates screen on.
  357.  
  358.   r1 - determine how many pixels wide is each character.
  359.        0,1 = 6 bits
  360.        2 = 7 bits
  361.        3 = 8 bits
  362.  
  363.   r2 - vary the format of graphics data.  Each byte of graphics data are 
  364.        displayed one after another, 40 bytes in one line.  By changing this   
  365.     register, the order in which they are displayed can be changed.
  366.        18 = double height
  367.        38 = normal display
  368.        58 = half height
  369.        any other = strange display
  370.  
  371.   r3 - darkness of the pixels.  Any other values other than 63 distorts the 
  372.        screen.  To not see the distortion, screen can be disabled with r0,    
  373.    then darkness can be varied.
  374.        63 = normal
  375.       <63 = lighter
  376.       >63 = darker
  377.  
  378.   These are unknown:
  379.   r4 - ?
  380.   r5 - ?
  381.   r6 - ?
  382.   r7 - ?
  383.  
  384.   r8,r9 - where the first byte of the screen display is.  This register points
  385.           to the first byte displayed on the screen.  Address can range from 0
  386.           to 8191.  LSB of value is sent to r8, MSB to r9.  See SCROLL.200 in
  387.           DL4 for demonstration using this.
  388.  
  389.   r10,r11 - Points to the address of a byte which is to be written to or read 
  390.             from in the display field.  Address range is 0 to 8191.  LSB to   
  391.          r10, MSB to r11.
  392.  
  393.   r12 - Write mode.  After this register has been accessed, the value placed  
  394.         at port 254 is written to LCD.  The byte is written to the address    
  395.         pointed by r10 and r11.  The address pointer is automatically        
  396.         incremented by one after a write, so if the next byte is to be written 
  397.         is right next to it, address need not be defined again.
  398.  
  399.   r13 - Read mode.  After this register has been acessed, the byte of graphics
  400.         data that the r10 and r11 points to is placed at port 254.  After it  
  401.         is read, the address is incremented by one, and points to the next    
  402.         byte.  The data that is read right after the address is redefined by  
  403.         r10 and r11 has to be ignored(a delay of 3 NOP instructions has to    
  404.         follow it if done in machine language), and the real data is fetched  
  405.         by second read.  After that the rest of data can be read in successive 
  406.         order without delays or null inputs.
  407.         Format is: OUT 255,13:B = INP(254):B = INP(254):'B=byte
  408.  
  409.   r14 - Position of the bit to be set to 0.  Manipulates only a single bit of
  410.         a byte on the screen.  Other bits are unaffected.  Range 0-7
  411.  
  412.   r15 - Does same thing r14 does, except that it sets a bit to 1
  413.  
  414. How a character is displayed:
  415.  
  416.   A single character consists of 8 bytes stacked on top of each other.
  417.  
  418. 01234567  
  419.  
  420. 00100000  0
  421. 01010000  1           Eight
  422. 10001000  2           rows
  423. 10001000  3           of
  424. 11111000  4           bytes
  425. 10001000  5           form
  426. 10001000  6           a
  427. 10001000  7           character.
  428.  
  429. The letter formed is "A".  To draw it on the screen, each byte, starting from 
  430. the first byte in row 0, is sent to LCD one byte per line.  Since a line 
  431. consists of 40 bytes, the address of the next byte has to be incremented by
  432. 40. So if the first byte is in address 0, 2nd byte is in address 40, 3rd in
  433. 80, and so on.  The next character to be drawn has to relocate its address on
  434. the screen so that its first byte is right next to the first byte of the
  435. previous character, else the character would be displayed right underneath the
  436. previous one, not side by side.
  437.  
  438. Internal organization:
  439.  
  440.   The total number of bytes in the LCD graphics field is 8192.  The total 
  441. number that can be displayed at one time is 5120.  r8 and r9 are used to 
  442. determine which 5120 portion of 8192 bytes are displayed.
  443.   All bytes are displayed one after another, line by line, each line 
  444. consisting of 40 bytes.  There are 204.8 lines all together, and 128 lines 
  445. displayed on the screen.
  446.  
  447.                      - 8085 RIM and SIM Bit Maps -  
  448.   
  449. SIM Bit 0: RST 5.5 mask (set mask) RIM Bit 0: RST 5.5 mask  
  450.         1: RST 6.5 mask (set mask)          1: RST 6.5 mask  
  451.         2: RST 7.5 mask (set mask)          2: RST 7.5 mask  
  452.         3: Mask set enable                  3: Int. enable  
  453.         4: Reset RST 7.5 flip/flop          4: RST 5.5 pending  
  454.         5: Not used                         5: RST 6.5 pending  
  455.         6: SOD change enable                6: RST 7.5 pending  
  456.         7: SOD pin output                   7: SOD pin input  
  457.   
  458. Note: SOD pin is used for cassette I/O on Model 100  
  459.   
  460.   
  461.              - Model 100/200 Special Control Characters -  
  462.   
  463. ------------------------------------------------------------------------------
  464.              |       M100        |         M200      |  
  465. Control Code |  Print  | Routine |  Print  | Routine |                        
  466.   Sequence   | Address | Address | Address | Address |   Description          
  467. ------------------------------------------------------------------------------ 
  468. Beep (7)         4229H     7662H     4F45H     8FABH  Beep  
  469. Tab (9)            -       4480H       -              Tab cursor  
  470. LF (10)          4225H     4494H                      Move down one line  
  471. Home (11)        422DH     44A8H     4F49H            Home cursor  
  472. CLS (12)         4231H     4548H     4F4DH            Clear screen  
  473. CR (13)            -       44AAH       -              Move cursor to beginning
  474.                                                       of next line  
  475. ESC A              -       4469H       -              Move cursor up one line 
  476. ESC B              -       446EH       -              Move cursor down one    
  477.                                                       line  
  478. ESC C              -       4453H       -              Move cursor to the right 
  479. ESC D              -       445CH       -              Move cursor to the left 
  480. ESC E              -       4548H       -              Clear screen  
  481. ESC H              -       44A8H       -              Home cursor  
  482. ESC J              -       454EH       -              Erase from the cursor to
  483.                                                       the bottom of the screen
  484. ESC K            425DH     4537H     4F7CH            Erase from the cursor to
  485.                                                       the end of the line  
  486. ESC L            4258H     44EAH     4F77H            Insert blank line at 
  487.                                                       current line  
  488. ESC M            4253H     44C4H     4F72H            Delete current line  
  489. ESC P            4249H     44AFH     4F68H            Turn cursor on  
  490. ESC Q            424EH     44BAH     4F6DH            Turn cursor off  
  491. ESC T            4235H     4439H     4F54H            Protect line 8  
  492. ESC U            423AH     4437H     4F59H            Unprotect line 8  
  493. ESC V            423FH     443FH     4F5EH            Stop automatic scrolling 
  494. ESC W            4244H     4440H     4F63H            Resume automatic        
  495.                                                       scrolling 
  496. ESC X            4262H     444AH     
  497. ESC Y            427CH     43AFH     4F9BH            Set cursor position.    
  498.                                                       Coordinate for cursor 
  499.                                                       (row and column) follow 
  500.                                                       ESC Y sequence  
  501. ESC j              -       4548H       -              Clear screen  
  502. ESC l              -       4535H       -              Erase current line  
  503. ESC p              -       4431H       -              Start inverse video mode 
  504. ESC q              -       4432H       -              Cancel inverse video    
  505.                                                       mode  
  506.  
  507.                   - Model 100 Keyboard Matrix -  
  508.   
  509.            ------------------------------------------------  
  510.           7 |  L    K    I    ?    *    ->   Ent  f8   Brk  
  511. Row       6 |  M    J    U    >    &    <-   Prt  f7     
  512. In        5 |  N    H    Y    <    ^    Up   Lbl  f6   Cap  
  513.           4 |  B    G    T    "    %    Dwn  Pst  f5   Num  
  514. 0E0H-     3 |  V    F    R    :    $    +    Esc  f4   Cde  
  515. 0EFH      2 |  C    D    E    ]    #    -    Tab  f3   Gph  
  516. (224-     1 |  X    S    W    P    @    )    Del  f2   Ctl  
  517. 239)      0 |  Z    A    Q    O    !    (    Spc  f1   Sft  
  518.            ------------------------------------------------  
  519.          bit  0    1    2    3    4    5    6    7    0  
  520.              [----------- 0B1H or 0B9H -----------] [0B2H]  
  521.              [----------- 177  or 185 ------------] [178 ]  
  522.                            Column Strobe  
  523.   
  524. Note:     This table is incorrectly documented in Radio Shack's   
  525.          "Model 100 Technical Reference Manual" (26-3810)  
  526.   
  527.   
  528.   
  529.                        References & History  
  530.   
  531.     This documented was created with well over 200 hours of   
  532. sweating over a Model 100 ROM disassembly.  I started my first   
  533. research on the Model 100 ROM about 2 hours after purchasing it   
  534. (Note: I had one of the first 100's off the production line.  I   
  535. believe I purchased my 100 in June of 1983).  After I figured   
  536. out how to use TELCOM, I downloaded a BASIC Z-80 disassembler   
  537. that friend of mine (Mike Livorsi) wrote from my Model 3.  After   
  538. making a few changes to the disassembler, I was able to get it   
  539. to work on the Model 100.  Then, I tested my Model 100's   
  540. parallel printer port by printing a disassembly of the Model   
  541. 100's ROM on my old LP8 (note:the disassembly requires a 3 inch   
  542. note book to fit in).  A day later, I came back to my Model 100   
  543. and found what every machine language addict loves; a complete   
  544. dissasembly of the ROM.  
  545.     At this point, I had a big problem; where to start.  At the   
  546. time, the only documentation for the 100 was the Instruction   
  547. Manual.  "Hacker reliefs" like schematics, memory maps,   
  548. debuggers, etc. could only be found in the dreams of the infant   
  549. portable hackers.  
  550.     What did I end up doing?  Well, I decided to write a little   
  551. BASIC program to search for specific bytes in ROM.  This program   
  552. was used initially for finding the text string "Ok" in ROM.    
  553. Once I found out where the message was in ROM, I then searched   
  554. for any ML instructions that referenced the message.  Then, on a   
  555. warm July night in St. Louis, I found what I was looking for; a   
  556. 16 bit register load that referenced the message "Ok" followed   
  557. by a CALL instruction.  This was the key I needed to open the   
  558. door to the Model 100's ROM.  With my experience from the Model   
  559. 1/3/Coco ROMs, I knew that the load/CALL sequence I found was   
  560. used to print a text string on the screen.  From this little   
  561. information, I was able to interrogate the subroutine called and   
  562. find out how the display operated.  In addition, since "Ok" is   
  563. only printed at BASIC ready, I was able to trace out the   
  564. keyboard input routines and eventually, the entire BASIC   
  565. interpreter.  
  566.     About 200 or so hours later, I documented most of the Model   
  567. 100's ROM.  At this time, I knew enough about my Model 100 to   
  568. write just about any machine langauge program that I needed.  
  569.     When I started writing ML programs for the 100, I found one   
  570. problem with my ROM documentation; it was too hard to find a   
  571. particular ROM address.  What I needed was an organized   
  572. collection of all my notes, "chicken scratches", etc.  
  573.     From this came the memory map you hold in your hand right   
  574. now.  In this memory map, I basically included the information   
  575. that I use the most when ML programming.  I did not include a   
  576. lot of information on how the ROM handles certain task, but I   
  577. did include information that can be used by external stand alone   
  578. ML programs.  
  579.     In creating this document, I had a little help along the   
  580. way with figuring out a few things.  Below is a list of sources   
  581. I used to help me determine or verify what certain things in the   
  582. Model 100 did:  
  583.   
  584. Model 100 User Manual, Radio Shack  
  585.   
  586. Model 100 Service Manual (26-3801), Radio Shack  
  587.  
  588. Microsystem Components Handbook, Volume 1, Intel (1984)  
  589.   
  590. MOS Microprocessors and Peripherals, Advanced Micro Devices  
  591.     (1983)  
  592.   
  593. Microsoft BASIC Decoded & other Mysteries for the TRS-80, by  
  594.     James Lee Farvour, IJG (December 1982)  
  595.   
  596. "Inside the 100", by David P. Sumner, 80 Micro (December 1983)  
  597.  
  598. The following sources were used to cross reference the M100 and M200:
  599.  
  600. Model 100 ROM Functions (700-2245), Radio Shack
  601.  
  602. Tandy 200 Technical Reference Manual, (26-3861), Radio Shack  
  603.  
  604. Cross 1 & 2, Robert Benson, Club 100
  605.  
  606. LCDIO.200, James Yi (Tandy 200 LCD Registers)
  607.  
  608. Portable 100, Custom 200, multiple issues, Paul Globman
  609.  
  610. EQUATE.HEX, Phil Wheeler
  611.  
  612. <EOF>
  613.