On Jan 27, 2026, at 7:31 PM, B 9 <[email protected]> wrote: A while ago, I saw a fabulous disassembly of the Model-T ROMs, with > conditional parts for each of the different family members. > > On January 28, 2026 2:20:02 AM PST, Joshua O’Keefe < [email protected]> wrote:
You're probably thinking of > https://github.com/z88dk/techdocs/blob/master/targets/m100/m100.asm > Yes, that’s it. Thank you. I probably couldn’t find it because I had hallucinated that it covered the Tandy 200. On Wed, Jan 28, 2026 at 8:15 AM Kenneth Pettit <[email protected]> wrote: And from my Model 100 disassembly from VirtualT: [...] Thanks, Ken! I didn’t know you could show memory addresses in VIrtual T. (Turns out that is what the “old school” option in Disassembly Setup does). Virtual T’s Tandy 200 disassembly did not have an analogous section to the one you cited, but I did find “Scroll LCD screen A times at line number in L” at 51F0. Unfortunately, I lacked the time to decipher the assembly code. Is there no exhaustively commented disassembly of the Tandy 200 ROM as there is for the Model 100? There must have been at some point, as I finally found the answer I’d been seeking in a message from James Yi dated 8/1/88 <https://github.com/LivingM100SIG/Living_M100SIG/blob/main/M100SIG/Lib-10-TANDY200/SCN200.THD>, I now know that address 65198 (FEAE) contains the number of lines the LCD buffer is offset compared to the screen. Using that, I can create an inverse to PRINT@ on the Tandy 200 which gives me the same ability as other computers have to PEEK at the contents visible on the screen. In short, given *PS* = *row* × 40 + *column* (a screen location from 0 to 639), one can find the value of the character at that position with: PEEK( 64048 + ( (PS+PEEK(65198)*40) MOD 640 ) ) I do not know how to detect reverse video, yet, as it returns the same value as normal text. —b9 P.S. Here’s a program for the 200 which demonstrates using that ability to move an asterisk around a screen without damaging the existing contents. 1 ' EXAMPLE OF READING THE LCD BUFFER2 ' Move the asterisk with arrow keys.3 ' Routine at 1000 detects contents of4 ' the screen as the asterisk moves.5 R=7:C=2410 PRINT" ";: H$="0123456789ABCDEF"20 FOR T=1 TO 16: PRINT" "MID$(H$,T,1);: NEXT30 FOR T=128 TO 25540 IF TMOD16=0 THEN PRINT: IF T>128 THEN PRINT50 IF TMOD16=0 THEN PRINT " "MID$(H$,T\16+1, 1) "0 ";60 PRINT CHR$(T)" ";70 NEXT100 A$=INKEY$: IF A$="" GOTO 100: ELSE A=ASC(A$)110 PRINT@PS, CHR$(OC);120 IF A$="h" OR A=29 THEN C=C-1: IF C<0 THEN C=0130 IF A$="l" OR A=28 THEN C=C+1: IF C>39 THEN C=39140 IF A$="j" OR A=31 THEN R=R+1: IF R>15 THEN R=15150 IF A$="k" OR A=30 THEN R=R-1: IF R<0 THEN R=0160 IF A$="q" OR A=27 THEN END170 PS=R*40+C: GOSUB 1000: OC=RV180 PRINT@PS, "*";185 PRINT@40, CHR$(OC);186 H=OC\16: L=OC MOD 16187 PRINT@0, MID$(H$, H+1, 1); MID$(H$, L+1, 1);190 GOTO 100999 END1000 'PEEK SCREEN MEMORY AT POSITION PS1010 'Returns result in RV1020 OF=PEEK(65198)*401030 RV=PEEK(64048 + ((PS+OF) MOD 640))1040 RETURN1050 'hackerb9 January 2026
