https://bitchin100.com/wiki/api.php?action=feedcontributions&user=83.234.245.140&feedformat=atomBitchin100 DocGarden - User contributions [en]2024-03-29T13:50:21ZUser contributionsMediaWiki 1.39.3https://bitchin100.com/wiki/index.php?title=Model_100_System_Map_Part_0&diff=2099Model 100 System Map Part 02010-12-05T06:01:07Z<p>83.234.245.140: CLICK HERE TO ENTER DRUGSTORE</p>
<hr />
<div><br /><br /><center><h1> <http>//trusted-pharmacy.org/ CLICK HERE TO ENTER DRUGSTORE! ] </h1><br /></center> <br />
<br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br /><br /> <br />
<br />
<br />
online pharmacy Tricor<br />
<br /> <br />
online pharmacy Glucophage Xr<br />
<br /> <br />
order Atarax<br />
<br /> <br />
kaufen Allegra-d oline<br />
<br /> <br />
Lotemax online<br />
<br /> <br />
order Cipro online<br />
<br /> <br />
acheter Pilagan oline<br />
<br /> <br />
kaufen Effexor oline<br />
<br /> <br />
comprar Arcoxia<br />
<br /> <br />
Nizoral Cream discount<br />
<br /> <br />
acheter Cozaar oline<br />
<br /> <br />
kaufen Stromectol<br />
<br /> <br />
order Eldepryl online<br />
<br /> <br />
order Tegretol<br />
<br /> <br />
buy Optivar online<br />
<br /> <br />
Advair Diskus online<br />
<br /> <br />
acheter Cordarone<br />
<br /> <br />
acheter Asendin oline<br />
<br /> <br />
Glucophage Xr online<br />
<br /> <br />
Nizoral discount<br />
<br /> <br />
comprar Glucophage<br />
<br /> <br />
Wellbutrin Sr online<br />
<br /> <br />
Theox Cr tablets<br />
<br /> <br />
buy Fansidar<br />
<br /> <br />
buy Indocin online<br />
<br /> <br />
online pharmacy Isordil Sublingual<br />
<br /> <br />
Noroxin discount<br />
<br /> <br />
acheter Viracept<br />
<br /> <br />
cheap Nolvadex<br />
<br /> <br />
Cheapest Clorpres<br />
<br /> <br />
acheter Lipitor<br />
<br /><br />
<br />
== File Formats ==<br />
<br />
<pre><br />
.BA Files:<br />
2 bytes - Address of next line<br />
2 bytes - Line number<br />
Up to 255 characters ending with a null<br />
EOF is 3 consecutive nulls<br />
<br />
.DO Files:<br />
Text ended with a EOF character 1AH<br />
<br />
.CO Files:<br />
2 bytes - Address to load to<br />
2 bytes - Number of bytes to load (-start 6)<br />
2 bytes - Transfer address<br />
</pre><br />
<br />
== File Descriptor Block Format ==<br />
<br />
The File Descriptor Block is the address given by VARPTR(#file).<br />
<br />
<pre><br />
Byte:<br />
0 - File status (0-not open, 1-open for input, 2 open for <br />
output or append)<br />
2 & 3 - Address of file directory entry<br />
4 - File device (248-RAM, 249-MoDeM, 250-LinePrinTer, <br />
251-WAND, 252-COM, 253-CASsette, 254-CRT, 255-LCD)<br />
6 - Offset from buffer start (see bytes 9) for start of next <br />
record<br />
7 & 8 - Relative position of next 256 byte block from<br />
beginning of file<br />
9 - Start of 256 byte buffer for data transfer<br />
<br />
</pre><br />
<br />
== Floating Point Accumulator Format ==<br />
<br />
<pre><br />
---------------------------------------------------------------<br />
FAC1 | FAC2 | DP | SP | Integer | SP<br />
Address | Address | Format | Format | Format | Register<br />
---------------------------------------------------------------<br />
FC18H | FC69H | S & E | S & E | - | C<br />
FC19H | FC6AH | BCD M | BCD M | - | B<br />
FC1AH | FC6BH | BCD # | BCD # | LSB | E<br />
FC1BH | FC6CH | BCD # | BCD L | MSB | D<br />
FC1CH | FC6DH | BCD # | - | - | -<br />
FC1DH | FC6EH | BCD # | - | - | -<br />
FC1EH | FC6FH | BCD # | - | - | -<br />
FC1FH | FC70H | BCD L | - | - | -<br />
---------------------------------------------------------------<br />
<br />
LSB = Least significant byte of intger<br />
MSB = Most significant byte of integer. Bit 7 contains the sign <br />
of the integer<br />
BCD L = Least significant BCD byte<br />
BCD H = Most significant BCD byte<br />
BCD # = Middle BCD bytes. Each digit of the number is represented <br />
by one of the values in the two nibbles in each byte<br />
S & E = Sign and exponent of each number. Bit 7 contains the sign <br />
of the floating point number. Bit 6 must be set. Bits 0-5 <br />
determine where the decimal point is to be inserted. For <br />
example, if this byte contained a 65, the sign would be <br />
positive and the decimal point would be placed between the <br />
first and second digits (#.###....)<br />
</pre><br />
<br />
== Option ROM Important Addresses ==<br />
<br />
<pre><br />
<br />
40H = 54H<br />
41H = 43H - Required for ROM to be detected on BOOT<br />
42H - 47H - Name of file associated with ROM program<br />
<br />
Code at 7E24H-7E43H executed on BOOT to handle option ROM.<br />
Code at 0365H loaded at F605H on BOOT to detect option ROM.<br />
<br />
</pre><br />
<br />
== Model 100 Hardware Port Map ==<br />
<br />
<pre><br />
A0H - Modem control port<br />
Output:<br />
Bit:<br />
0 - Modem telephone relay (1-Modem connected to phone <br />
line)<br />
1 - Modem enable (1-Modem chip enabled)<br />
<br />
B0H - 8155 PIO Command/Status Register<br />
Output:<br />
Bit:<br />
0 - Direction of Port A (0-input, 1-output)<br />
1 - Direction of Port B (0-input, 1-output)<br />
2 & 3 - Port C definition (00 - All input, 11 - All output, <br />
01 - Alt 3, 10 - Alt 4 (see Intel technical sheets <br />
for more information))<br />
4 - Enable Port A interrupt (1 - enable)<br />
5 - Enable Port B interrupt (1 - enable)<br />
6 & 7 - Timer mode (00 - No effect on counter, 01 - Stop <br />
counter immediately, 10 - Stop counter after TC, 11 <br />
- Start counter)<br />
Input:<br />
Bit:<br />
0 - Port A interrupt request<br />
1 - Port A buffer full/empty (input/output)<br />
2 - Port A interrupt enabled<br />
3 - Port B interrupt request<br />
4 - Port B buffer full/empty (input/output)<br />
5 - Port B interrupt enabled<br />
6 - Timer interrupt (status of TC pin)<br />
7 - Not used<br />
<br />
B1H - 8155 PIO Port A<br />
Output:<br />
8 bit data port for printer output, keyboard column strobe, <br />
and LCD<br />
In addition, the first 5 bits of this port is used to <br />
control the 1990 real time clock chip. The configuration of <br />
these five bits are:<br />
Bit:<br />
0 - C0<br />
1 - C1<br />
2 - C2<br />
3 - Clock<br />
4 - Serial data into clock chip<br />
<br />
<br />
B2H - 8155 PIO Port B.<br />
Output:<br />
Bit:<br />
0 - Column 9 select line for keyboard. This line is <br />
also used for the CS-28 line of the LCD.<br />
1 - CS 29 line of LCD<br />
2 - Beep toggle (1-Data from bit 5, 0-Data from 8155 <br />
timer)<br />
3 - Serial toggle (1-Modem, 0-RS232)<br />
4 - Software on/off switch for computer<br />
5 - Data to beeper if bit 2 set. Set if bit 2 low.<br />
6 - DTR (not) line for RS232<br />
7 - RTS (not) line for RS232<br />
<br />
B3H - 8155 PIO Port C<br />
Input:<br />
Bits:<br />
0 - Serial data input from clock chip<br />
1 - Busy (not) signal from printer<br />
2 - Busy signal from printer<br />
3 - Data from BCR<br />
4 - CTS (not) line from RS232<br />
5 - DSR (not) line from RS232<br />
6-7 - Not avaiable on 8155<br />
<br />
B4H - 8155 Timer register. LSB of timer counter<br />
<br />
B5H - 8155 Timer register. MSB of timer counter<br />
<br />
B8H - Same as port B0H<br />
<br />
B9H - Same as port B1H<br />
<br />
BAH - Same as port B2H<br />
<br />
BBH - Same as port B3H<br />
<br />
BCH - Same as port B4H<br />
<br />
BDH - Same as port B5H<br />
<br />
C0H - Bidirectional data bus for UART (6402) (C0H-CFH same)<br />
<br />
<br />
D0H - Status control register for UART, modem, and phone (6402) <br />
(D0H-DFH same)<br />
Output:<br />
Bits:<br />
0 - Stop Bits (1-1.5, 0-2)<br />
1 - Parity (1-even, 0-odd)<br />
2 - Parity Enable (1-no parity, 0-parity enabled)<br />
3 - Data length (00-5 bits, 10-6 bits, 01-7 bits, 11-8 <br />
bits)<br />
4 - Data length (see bit 3)<br />
Input:<br />
Bits:<br />
0 - Data on telephone line (used to detect carrier)<br />
1 - Overrun error from UART<br />
2 - Framing error from UART<br />
3 - Parity error from UART<br />
4 - Transmit buffer empty from UART<br />
5 - Ring line on modem connector<br />
6 - Not used<br />
7 - Low Power signal from power supply (LPS not)<br />
<br />
E0H - Keyboard input and misc. device select (E0H-EFH same)<br />
Output:<br />
Bits:<br />
0 - ROM select (0-Standard ROM, 1-Option ROM)<br />
1 - STROBE (not) signal to printer<br />
2 - STROBE for Clock chip (1990)<br />
3 - Remote plug control signal<br />
Input:<br />
8 bit data row from keyboard strobe<br />
<br />
F0H - LCD display data bus (F0H-FFH same)<br />
</pre><br />
<br />
== Model 100 Keyboard Matrix ==<br />
<br />
<pre><br />
------------------------------------------------<br />
7 | L K I ? * -> Ent f8 Brk<br />
Row 6 | M J U > & <- Prt f7 <br />
In 5 | N H Y < ^ Up Lbl f6 Cap<br />
4 | B G T " % Dwn Pst f5 Num<br />
0E0H- 3 | V F R : $ + Esc f4 Cde<br />
0EFH 2 | C D E ] # - Tab f3 Gph<br />
(224- 1 | X S W P @ ) Del f2 Ctl<br />
239) 0 | Z A Q O ! ( Spc f1 Sft<br />
------------------------------------------------<br />
bit 0 1 2 3 4 5 6 7 0<br />
[----------- 0B1H or 0B9H -----------] [0B2H]<br />
[----------- 177 or 185 ------------] [178 ]<br />
Column Strobe<br />
<br />
Note: This table is incorrectly documented in Radio Shack's <br />
"Model 100 Technical Reference Manual" (26-3810)<br />
</pre><br />
<br />
== Math Routine Summary ==<br />
<br />
<pre><br />
-------------------------------------------------------------<br />
Function Single Precision Double Precision Integer<br />
-------------------------------------------------------------<br />
+ 37F4H 2B78H 3704H<br />
- 37FDH 2B69H 36F8H<br />
* 3803H 2CFFH 3725H<br />
/ 380EH 2DC7H 0F0DH<br />
^ 3D7FH 3D8EH 3DF7H<br />
Compare 3498H 34FAH 34C2H<br />
-------------------------------------------------------------<br />
</pre><br />
<br />
== RIM and SIM Bit Maps ==<br />
<br />
<pre><br />
SIM Bit 0: RST 5.5 mask (set mask) RIM Bit 0: RST 5.5 mask<br />
1: RST 6.5 mask (set mask) 1: RST 6.5 mask<br />
2: RST 7.5 mask (set mask) 2: RST 7.5 mask<br />
3: Mask set enable 3: Int. enable<br />
4: Reset RST 7.5 flip/flop 4: RST 5.5 pending<br />
5: Not used 5: RST 6.5 pending<br />
6: SOD change enable 6: RST 7.5 pending<br />
7: SOD pin output 7: SOD pin input<br />
<br />
Note: SOD pin is used for cassette I/O on Model 100<br />
</pre><br />
<br />
== Model 100 Special Control Characters ==<br />
<br />
<pre><br />
--------------------------------------------------------------<br />
Control Code | Print | Routine | <br />
Sequence | Address | Address | Description <br />
--------------------------------------------------------------<br />
Beep (7) 4229H 7662H Beep<br />
Tab (9) - 4480H Tab cursor<br />
LF (10) 4225H 4494H Move down one line<br />
Home (11) 422DH 44A8H Home cursor<br />
CLS (12) 4231H 4548H Clear screen<br />
CR (13) - 44AAH Move cursor to beginning of <br />
next line<br />
ESC A - 4469H Move cursor up one line<br />
ESC B - 446EH Move cursor down one line<br />
ESC C - 4453H Move cursor to the right<br />
ESC D - 445CH Move cursor to the left<br />
ESC E - 4548H Clear screen<br />
ESC H - 44A8H Home cursor<br />
ESC J - 454EH <br />
ESC K 425DH 4537H Erase from the cursor to the <br />
end of the screen<br />
ESC L 4258H 44EAH Insert blank line at current <br />
line<br />
ESC M 4253H 44C4H Delete current line<br />
ESC P 4249H 44AFH Turn cursor on<br />
ESC Q 424EH 44BAH Turn cursor off<br />
ESC T 4235H 4439H Protect line 8<br />
ESC U 423AH 4437H Unprotect line 8<br />
ESC V 423FH 443FH Stop automatic scrolling<br />
ESC W 4244H 4440H Resume automatic scrolling<br />
ESC X 4262H 444AH <br />
ESC Y 427CH 43AFH Set cursor position. <br />
Coordinate for cursor (row <br />
and column) follow ESC Y <br />
sequence<br />
ESC j - 4548H Clear screen<br />
ESC l - 4535H Erase current line<br />
ESC p - 4431H Start inverse video mode<br />
ESC q - 4432H Cancel inverse video mode<br />
</pre><br />
<br />
== History ==<br />
<br />
This documented was created with well over 200 hours of <br />
sweating over a Model 100 ROM disassembly. I started my first <br />
research on the Model 100 ROM about 2 hours after purchasing it <br />
(Note: I had one of the first 100's off the production line. I <br />
believe I purchased my 100 in June of 1983). After I figured <br />
out how to use TELCOM, I downloaded a BASIC Z-80 disassembler <br />
that friend of mine (Mike Livorsi) wrote from my Model 3. After <br />
making a few changes to the disassembler, I was able to get it <br />
to work on the Model 100. Then, I tested my Model 100's <br />
parallel printer port by printing a disassembly of the Model <br />
100's ROM on my old LP8 (note:the disassembly requires a 3 inch <br />
note book to fit in). A day later, I came back to my Model 100 <br />
and found what every machine language addict loves; a complete <br />
dissasembly of the ROM.<br />
<br />
At this point, I had a big problem; where to start. At the <br />
time, the only documentation for the 100 was the Instruction <br />
Manual. "Hacker reliefs" like schematics, memory maps, <br />
debuggers, etc. could only be found in the dreams of the infant <br />
portable hackers.<br />
<br />
What did I end up doing? Well, I decided to write a little <br />
BASIC program to search for specific bytes in ROM. This program <br />
was used initially for finding the text string "Ok" in ROM. <br />
Once I found out where the message was in ROM, I then searched <br />
for any ML instructions that referenced the message. Then, on a <br />
warm July night in St. Louis, I found what I was looking for; a <br />
16 bit register load that referenced the message "Ok" followed <br />
by a CALL instruction. This was the key I needed to open the <br />
door to the Model 100's ROM. With my experience from the Model <br />
1/3/Coco ROMs, I knew that the load/CALL sequence I found was <br />
used to print a text string on the screen. From this little <br />
information, I was able to interrogate the subroutine called and <br />
find out how the display operated. In addition, since "Ok" is <br />
only printed at BASIC ready, I was able to trace out the <br />
keyboard input routines and eventually, the entire BASIC <br />
interpreter.<br />
<br />
About 200 or so hours later, I documented most of the Model <br />
100's ROM. At this time, I knew enough about my Model 100 to <br />
write just about any machine langauge program that I needed.<br />
<br />
When I started writing ML programs for the 100, I found one <br />
problem with my ROM documentation; it was too hard to find a <br />
particular ROM address. What I needed was an organized <br />
collection of all my notes, "chicken scratches", etc.<br />
<br />
From this came the memory map you hold in your hand right <br />
now. In this memory map, I basically included the information <br />
that I use the most when ML programming. I did not include a <br />
lot of information on how the ROM handles certain task, but I <br />
did include information that can be used by external stand alone <br />
ML programs.<br />
<br />
== References ==<br />
<br />
In creating this document, I had a little help along the <br />
way with figuring out a few things. Below is a list of sources <br />
I used to help me determine or verify what certain things in the <br />
Model 100 did:<br />
<br />
* Model 100 User Manual, Radio Shack<br />
* Model 100 Service Manual (26-3801), Radio Shack<br />
* Microsystem Components Handbook, Volume 1, Intel (1984)<br />
* MOS Microprocessors and Peripherals, Advanced Micro Devices (1983)<br />
* Microsoft BASIC Decoded & other Mysteries for the TRS-80, by James Lee Farvour, IJG (December 1982)<br />
* "Inside the 100", by David P. Sumner, 80 Micro (December 1983)<br />
<br />
[[Category:Model T Developer Reference]] [[Category:Model 100 System Map]]</div>83.234.245.140