Loading ...
Sorry, an error occurred while loading the content.

Memory & port maps

Expand Messages
  • ab8kf
    Where can I get all the discovered memory and port maps to date? -Sean
    Message 1 of 11 , Jan 2, 2005
    • 0 Attachment
      Where can I get all the discovered memory and port maps to date?
      -Sean
    • donhamilton2002
      ... http://www.linux-hacker.net/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mswhatever&Post=77&Idle=0&Sort=0&Order=Descend&Page=0&Session=
      Message 2 of 11 , Jan 3, 2005
      • 0 Attachment
      • Sean Walton
        Too bad that more progress was not made. In any case ... Do we have the keyboard matrix mapping? ... Is this part of a sleep mode? ... What is this?? I m
        Message 3 of 11 , Jan 3, 2005
        • 0 Attachment
          Too bad that more progress was not made. In any case
          I have several questions regarding these specs:

          | PORT definitions
          | P01 = keyboard (in = cols, out = rows)
          Do we have the keyboard matrix mapping?

          | P02 = various
          | .7 = LCD_ON (output)
          Is this part of a "sleep" mode?

          | .6 = CALLERID_DATA (input)
          What is this?? I'm guessing that indicates that
          caller ID data is waiting...?

          | .5 = NOT_MODEM_POWER (output)
          Another part of a "sleep" mode?

          | .4 = YOUGOTMAIL_LED (output)
          This is obvious.

          | .3 = LCD_CAS (output)
          What is this?

          | .2 = CALLERID_DATA_RDY (input)
          ?? Wait... Didn't I see this above... now I'm
          confused.

          | .1 = KEYROW_9 (output)
          ??

          | .0 = KEYROW_8 (output)
          ??

          | P03 = software masks for ISRs: in's are interrupt
          source, out's are masks.
          | Highest to lowest:
          | .7 = Caller id handler
          Ok, I think I understand this one...

          | .5 = maybe RTC???
          Yeah, I understand. Now, I have questions about the
          Real-Time Clock...

          | .6 = Modem handler
          How much do we know about the modem? E.g. does it
          have a queue?
          Smartmodem compliant?

          | .4 = increment time16
          ??? What's this??

          | .3 = null
          | .0 = null
          | .1 = Keyboard handler
          | .2 = null
          OK.

          | P05 = slot4000page holds A14 - A21, for addresses in
          #4000-7FFF range.
          | P06 = slot4000device holds A22 - A29, for addresses
          in #4000-7FFF range.
          | P07 = slot8000page holds A14 - A21, for addresses in
          #8000-BFFF range.
          | P08 = slot8000device holds A22 - A29, for addresses
          in #8000-BFFF range.
          |Device codes:
          | 0 = codeflash (64 pages)
          | 1 = ram ( 8 pages)
          | 2 = LCD (right half) ( 1 page )
          | 3 = dataflash (32 pages)
          | 4 = LCD (left half) ( 1 page )
          | 5 = modem ( 1 page )
          OK, I guessing that the notes "holds A22 - A29" is
          bogus because of the
          device codes and should read:
          P05 = slot4000 page holds A14 - A21, for addresses
          in #4000-7FFF range.
          P06 = slot4000 device code for $4000 slot
          P07 = slot8000 page holds A14 - A21, for addresses
          in #8000-BFFF range.
          P08 = slot8000 device code for $8000 slot

          | P09 = printer control & power detect & power button.
          | .0 = PRINTER_STROBE (output)
          | .1 = PRINTER_AUTOFEED (output)
          | .2 = PRINTER_INIT (output)
          | .3 = PRINTER_SELECT (output)
          | .4 = POWERBUTTON (input)
          | .5 = dc-dc good (input)
          | .6 = +5V good (input)
          | .7 = +6V good (input)
          Clear.

          | P0A = printer control direction
          Um... I'm assuming that this is ALWAYS=1111.0000.
          Input is b=0, output is b=1
          (I believe that's the standard for parallel line
          controllers).

          | P0D = CPU clock rate control (clock is 8MHz on
          reset)
          | #f0=8MHz, #30=10MHz, #00=12MHz. Resets to 8MHz.
          | (bits: ?X?X.???? bits 6 & 4 defined/known)
          Has anyone fleshed out the unknown bits?
          I do find it interesting when devices select their own
          clock rate: why would
          anyone want anything but the fastest rate?

          | P21 = printer status (db25 pins 10,11,12,13,15)
          Which bits are mapped to which pin?

          | P28 = various (output)
          | .0 = modem_reset
          Ok, I get this.

          | .1 = 74C74_pin4_via600ohm
          | .2 = callid_dataclock
          | .3 = callid_sleep/reset
          | .4 = callid_FSK/not_DTMF
          What is all of this?

          | .5 = ??
          | .6 = ??
          | .7 = ??
          Has anyone done more here?

          | P2C = printer data direction
          Um... I'm assuming that P2C.0-7 maps to D0-7. To
          enable bidirectional PIO,
          the lines have to be driven 0000.0000 for input and
          1111.1111 for output. Does
          anyone know if this is compatible with APIO/PPI specs.
          It would be fun to
          connect a Zip drive.

          | P2D = printer data (db25 pins 2 - 9)
          Gotcha. (Of course, I'm assuming that P2D.0-7 => D0-7

          | P2F = RTC clock rate control????
          Does anyone know the division rate?

          | There are a few more ports not doc. here. (probably
          clock/calendar?????)
          Anyone know what they are?

          | Just what is a "bank? Is it where memory goes, or
          the memory that goes there?
          | As in "there are 2 banks, at #4000 & #8000" versus
          "there are 64 banks of
          | codeflash", and "32 banks of dataflash", and "8
          banks of ram". Too avoid
          | confusion, I am calling the chunks of memory
          "pages", and the places those
          | chunks are swapped into "slots". I find it too
          confusing to keep calling them
          | both banks.
          | There are 4 slots, of 16k each, at #0000, #4000,
          #8000, & #C000.
          | Only slot #4000 & slot #8000 have been observed to
          be swappable, with
          | codeflash swapping into #4000, and ram into #8000.
          Also, it seems everything
          | except the ram uses #4000 slot. (LCD, dataflash,
          Modem, caller ID)
          | slot #0000 is always codeflash page #00
          | slot #4000 is codeflash pages #01 to #3f (Or LCD,
          dataflash, Modem, caller ID)
          | slot #8000 is ram pages #1 to #7
          | slot #C000 is always ram page #00
          Okay, I'm cool with the definitions. However, I am
          unclear about several
          things:
          1) It appears that either the $4000 or the $8000 slot
          can take a device
          page. Does this mean that I can map any of the
          devices to either slot?
          The slot definitions, above, say 'no'. Therefore, I
          have to assume that
          the device selector for $8000 (P08) must always =1
          (RAM bank).
          2) Is it possible to have both LCD banks visible
          selected at the same
          time? (This depends on Q#1 being 'yes'.)
          3) The modem is a serial device. Are all but the
          first byte be undefined?
          4) What does the Caller ID data look like? Is it a
          string? Is it serial
          and interupt-driven like the modem?


          | On reset, slot4000 and slot8000 both contain
          codeflash page 0 (dev 0, pg 0).
          | I would guess that any device can swap into either
          slot, but so far the ram
          | is the only thing to use #8000 slot, and it never
          goes in the #4000 slot.
          Okay, one question answered. That means that the
          monochrome display is fully
          writable (one can actually write to the full display
          without paging).

          | It seems that the #0000 slot always is codeflash
          page #00, & since pg #00 has
          | the bank swapping code, this makes sense. There are
          a lot of low level
          | routines in this page, too. And if the dataflash and
          codeflash both swap into
          | slot #4000, then the only routines to directly
          access dataflash MUST be in
          | page 0 of codeflash ...
          Logical. logical. logical.
          Slot $0000 appears to be the main manager for the
          "operating system".

          | (or copied to ram, as in update mode)
          Aha! Here's the other goodie. The update mode seems
          to be running from RAM.
          So, I have several hypotheses and questions:
          1) Is the "update mode" the re-flashing function that
          SJ was playing with?
          2) Has anyone found & isolated this "update mode"?
          3) This clearly means that we can execute in other
          regions than $0000 and
          $4000

          | It stands to reason that slot #C000 is fixed ram
          page, since it contains the
          | stack. Everything I have seen says that the #4000
          slot is where all the
          | coderom above #003fff is mapped.

          __________________________________________________
          Do You Yahoo!?
          Tired of spam? Yahoo! Mail has the best spam protection around
          http://mail.yahoo.com
        • Cyrano Jones
          ... Yes. But I m tryin . ... When it rains, it pours! :-) ... I sketched it on paper, and it is on the todo list to type it up. If you really want it, I
          Message 4 of 11 , Jan 4, 2005
          • 0 Attachment
            --- Sean Walton wrote:
            > Too bad that more progress was not made.

            Yes. But I'm tryin'.

            >In any case
            > I have several questions regarding these specs:

            When it rains, it pours! :-)

            > | PORT definitions
            > | P01 = keyboard (in = cols, out = rows)
            > Do we have the keyboard matrix mapping?

            I sketched it on paper, and it is on the "todo list"
            to type it up. If you really want it, I can post it
            sooner rather than later.

            In the meantime, the Matrix is 10 rows by 8 columns.
            (bet you saw all three movies, and missed that! ;^)

            8 of the rows are connected to output port #00,
            and the other 2 are on output port #02 bits 0 & 1.

            The 8 columns are read back on input port #00.

            > | P02 = various
            > | .7 = LCD_ON (output)
            > Is this part of a "sleep" mode?

            I guess so, for just the lcd.
            The cpu can turn off the power to most of the
            circuits (including the lcd) in what I would call the sleep mode,
            but that is separate from this.
            Also, some parts of the circuit can be powered down
            independent of the rest (modem for instance).
            I don't know for sure, but it seems a good guess that
            turning the lcd off with a low to "LCD_ON" would save
            power. LCD_ON seems to be an enable for the lcd
            driver circuits (inside of the lcd).

            > | .6 = CALLERID_DATA (input)
            > What is this?? I'm guessing that indicates that
            > caller ID data is waiting...?

            Serial data, from the caller id chip, to the cpu.

            > | .5 = NOT_MODEM_POWER (output)
            > Another part of a "sleep" mode?

            This one actually gates the power on/off to the
            modem circuitry. It seems logical that it would
            be off to save power whenever you are not using the modem.

            > | .4 = YOUGOTMAIL_LED (output)
            > This is obvious.
            >
            > | .3 = LCD_CAS (output)
            > What is this?

            I am not an expert on lcd's, in fact this mailstation
            lcd is the first I have really looked at. I looked
            at several common lcd data sheets, and as I recall
            this one did not match any of the common ones.
            Since message 38, I have seen sevearal lcd's
            that have a command/data pin, and I suppose
            that could be the real function of this signal
            (it goes directly to the lcd ribbon cable). But
            if that is the case, the only command I see
            the mailstation sending is a "column number".
            I called it cas (column address select), because
            it reminded me of how DRAM chips are addressed.
            But it is probably better to rename it "column register select",
            because the column number is sent on the data
            bus (in a seperate write cycle), not on a
            multiplexed address bus as with DRAM cas.
            Maybe there *are* other commands
            besides the column number, and it really *is*
            "command register select"???? I dunno.

            > | .2 = CALLERID_DATA_RDY (input)
            > ?? Wait... Didn't I see this above... now I'm
            > confused.

            Above was the actual serial data input, *this* is
            the handshake that tells the cpu to read that data.

            > | .1 = KEYROW_9 (output)
            > ??
            >
            > | .0 = KEYROW_8 (output)
            > ??

            The 2 (of 10) rows that did not fit port #01.

            > | P03 = software masks for ISRs: in's are interrupt
            > source, out's are masks.
            > | Highest to lowest:
            > | .7 = Caller id handler
            > Ok, I think I understand this one...
            >
            > | .5 = maybe RTC???
            > Yeah, I understand. Now, I have questions about the
            > Real-Time Clock...
            >
            > | .6 = Modem handler
            > How much do we know about the modem? E.g. does it
            > have a queue?
            > Smartmodem compliant?

            I dunno, but I can post the data sheet
            (if it is not already there???)
            The handler does implement send and recv queue's in software.

            > | .4 = increment time16
            > ??? What's this??

            There are two software timebases, one is a 16 bit
            value, and the other is 32 bit. The 32 bit one
            seems to be counting milliseconds, but I don't
            know what this one is counting (besides the
            number of times that int 3.4 has happened).
            The only thing that happens during
            int 3.4 is this 16 bit counter is incremented.
            So far, I don't know where this value is used,
            or what for.

            > | .3 = null
            > | .0 = null
            > | .1 = Keyboard handler
            > | .2 = null
            > OK.
            >
            > | P05 = slot4000page holds A14 - A21, for addresses in
            > #4000-7FFF range.
            > | P06 = slot4000device holds A22 - A29, for addresses
            > in #4000-7FFF range.
            > | P07 = slot8000page holds A14 - A21, for addresses in
            > #8000-BFFF range.
            > | P08 = slot8000device holds A22 - A29, for addresses
            > in #8000-BFFF range.
            > |Device codes:
            > | 0 = codeflash (64 pages)
            > | 1 = ram ( 8 pages)
            > | 2 = LCD (right half) ( 1 page )
            > | 3 = dataflash (32 pages)
            > | 4 = LCD (left half) ( 1 page )
            > | 5 = modem ( 1 page )
            > OK, I guessing that the notes "holds A22 - A29" is
            > bogus because of the
            > device codes and should read:
            > P05 = slot4000 page holds A14 - A21, for addresses
            > in #4000-7FFF range.
            > P06 = slot4000 device code for $4000 slot
            > P07 = slot8000 page holds A14 - A21, for addresses
            > in #8000-BFFF range.
            > P08 = slot8000 device code for $8000 slot

            A22-29 *is* the device code.

            Although there are no pins on the cpu for a22-a29,
            the device reg's can be thought of as holding those
            bits.

            I have been using the notation "DDPP:XXXX"
            for 32 bit mailstation addresses, where
            DD is one byte of device address (port #06 or #08),
            PP is one byte of page address (port #05 or #07), and
            XXXX is two bytes of slot & offset (the z80's idea of the address).

            The hi two bits of XXXX determine the "slot"
            (which dev & page registers to use)
            and the lo 14 bits are the offset in
            page PP of device DD.

            (slot0000 and slotC000 don't have writeable
            device and page registers, AFAICT, they use
            fixed values, so addresses in these "slots"
            always refer to fixed pages, with
            slot0000 always holding page #00 of device #00
            and
            slotC000 always holding page #00 of device #01.)

            > | P09 = printer control & power detect & power button.
            > | .0 = PRINTER_STROBE (output)
            > | .1 = PRINTER_AUTOFEED (output)
            > | .2 = PRINTER_INIT (output)
            > | .3 = PRINTER_SELECT (output)
            > | .4 = POWERBUTTON (input)
            > | .5 = dc-dc good (input)
            > | .6 = +5V good (input)
            > | .7 = +6V good (input)
            > Clear.
            >
            > | P0A = printer control direction
            > Um... I'm assuming that this is ALWAYS=1111.0000.
            > Input is b=0, output is b=1
            > (I believe that's the standard for parallel line
            > controllers).

            The mailstation probably leaves it set that way.
            Or I should say it sets it that way, and leaves it.
            I would guess (but have not tried it) that you
            could set any way you want, in *your* code.

            > | P0D = CPU clock rate control (clock is 8MHz on
            > reset)
            > | #f0=8MHz, #30=10MHz, #00=12MHz. Resets to 8MHz.
            > | (bits: ?X?X.???? bits 6 & 4 defined/known)
            > Has anyone fleshed out the unknown bits?

            Not me.

            > I do find it interesting when devices select their own
            > clock rate: why would
            > anyone want anything but the fastest rate?

            The power dissipation in CMOS devices is directly
            proportional to the clock rate. The batteries
            will last 1.5 times as long at 8 MHz. (But it might take
            1.5 times as long to do your calculation!)

            > | P21 = printer status (db25 pins 10,11,12,13,15)
            > Which bits are mapped to which pin?

            P21.7 in - printer status busy (db25.11)
            P21.6 in - printer status ack (db25.10)
            P21.5 in - printer status paper end(db25.12)
            P21.4 in - printer status select (db25.13)
            P21.3 in - printer status error (db25.15)

            (The DB25 is a standard parallel port pinout.)

            > | P28 = various (output)
            > | .0 = modem_reset
            > Ok, I get this.
            >
            > | .1 = 74C74_pin4_via600ohm
            > | .2 = callid_dataclock
            > | .3 = callid_sleep/reset
            > | .4 = callid_FSK/not_DTMF
            > What is all of this?

            I think that 28.0 & 28.1 may be reversed????
            P28.0 = connected to pin 4 of the 74c74 ic via a 600 ohm resistor.
            P28.1 = modem_reset

            The 74c74 is a dual flip flop, and it gates
            the power to most of the board (via a transistor).
            I think pulsing 28.0 will turn the board off.

            callid_dataclock - the cpu toggles this line, and
            the callid chip sends one serial bit for each clock.

            callid_sleep/reset - puts the callid chip in low power sleep mode.

            callid_FSK/not_DTMF - selects whether the callid chip listens for
            call id data (freq shift keyed modem-like data) or touch-tones
            (dual tone multi freq)

            > | .5 = ??
            > | .6 = ??
            > | .7 = ??
            > Has anyone done more here?

            I don't know if they are used for anything internal,
            but I don't think they are brought out to pins on the cpu.

            > | P2C = printer data direction
            > Um... I'm assuming that P2C.0-7 maps to D0-7. To
            > enable bidirectional PIO,
            > the lines have to be driven 0000.0000 for input and
            > 1111.1111 for output. Does
            > anyone know if this is compatible with APIO/PPI specs.

            Dunno. What are APIO/PPI ?

            > It would be fun to
            > connect a Zip drive.
            >
            > | P2D = printer data (db25 pins 2 - 9)
            > Gotcha. (Of course, I'm assuming that P2D.0-7 => D0-7
            >
            > | P2F = RTC clock rate control????
            > Does anyone know the division rate?
            >
            > | There are a few more ports not doc. here. (probably
            > clock/calendar?????)
            > Anyone know what they are?
            >
            > | Just what is a "bank? Is it where memory goes, or
            > the memory that goes there?
            > | As in "there are 2 banks, at #4000 & #8000" versus
            > "there are 64 banks of
            > | codeflash", and "32 banks of dataflash", and "8
            > banks of ram". Too avoid
            > | confusion, I am calling the chunks of memory
            > "pages", and the places those
            > | chunks are swapped into "slots". I find it too
            > confusing to keep calling them
            > | both banks.
            > | There are 4 slots, of 16k each, at #0000, #4000,
            > #8000, & #C000.
            > | Only slot #4000 & slot #8000 have been observed to
            > be swappable, with
            > | codeflash swapping into #4000, and ram into #8000.
            > Also, it seems everything
            > | except the ram uses #4000 slot. (LCD, dataflash,
            > Modem, caller ID)
            > | slot #0000 is always codeflash page #00
            > | slot #4000 is codeflash pages #01 to #3f (Or LCD,
            > dataflash, Modem, caller ID)
            > | slot #8000 is ram pages #1 to #7
            > | slot #C000 is always ram page #00
            > Okay, I'm cool with the definitions. However, I am
            > unclear about several
            > things:
            > 1) It appears that either the $4000 or the $8000 slot
            > can take a device
            > page. Does this mean that I can map any of the
            > devices to either slot?
            > The slot definitions, above, say 'no'. Therefore, I
            > have to assume that
            > the device selector for $8000 (P08) must always =1
            > (RAM bank).

            The description above is just how the mailstation
            code is using the hardware. I have verified that
            the coderom can be mapped to slot8000, and
            also that ram can be mapped to slot4000.
            I assume that any device can go in either slot,
            but I only tested those.

            > 2) Is it possible to have both LCD banks visible
            > selected at the same
            > time? (This depends on Q#1 being 'yes'.)

            Both lcd banks are visible all the time, they
            are the right and left halfs of the screen.
            The cpu can only access one half at a time, though.
            In fact, the cpu can only access one byte (one row,
            of one column, of one half the screen) at a time.

            Each row is mapped to a different address in the cpu's
            address space. Changing columns within a half requires
            sending a new column number to that column register thingy.
            And changing halfs requires outputing a device number to
            the appropriate device register.

            > 3) The modem is a serial device. Are all but the
            > first byte be undefined?

            The modem interface to the cpu is parallel,
            one byte at a time (the uart is inside the modem chip).
            When the modem is banked in, the 8 modem registers
            are mapped to the first 8 bytes of whichever slot it is in
            (probably mirrored throughout) The mailstation code
            puts the modem into slot4000.

            So, with the modem in slot 4000, the recv data is
            read from memory address #4000, and send data
            is written to that address.
            #4001-4007 are the status and control registers.

            > 4) What does the Caller ID data look like? Is it a
            > string?

            Dunno.

            > Is it serial
            > and interupt-driven like the modem?

            Yes. Yes.

            > | On reset, slot4000 and slot8000 both contain
            > codeflash page 0 (dev 0, pg 0).
            > | I would guess that any device can swap into either
            > slot, but so far the ram
            > | is the only thing to use #8000 slot, and it never
            > goes in the #4000 slot.
            > Okay, one question answered. That means that the
            > monochrome display is fully
            > writable (one can actually write to the full display
            > without paging).

            You mean by putting one half in slot4000 and the other
            half in slot8000??????

            I suppose you could do that, but you would still have to deal
            with the column addresses. IOW, you cannot map all the
            screen pixels into memory at the same time. You possibly could
            map one column from first half and one column from
            the second half at the same time.
            (Each column is a byte wide x 128 bytes high. And each half screen
            is 20 columns wide.)

            The mailstation handles this nastiness by using a screen
            buffer in ram (in fixed slotC000). All drawing is done
            in this buffer, which *is* a block of bits representing the
            whole 320 x 128 pixel screen. There are text, line, and icon
            drawing routines.

            And after a whole screen is drawn another routine
            copies the whole mess over to the actual lcd.
            Half the screen at a time.
            One column of each half at a time.
            One byte of each column at a time.

            > | It seems that the #0000 slot always is codeflash
            > page #00, & since pg #00 has
            > | the bank swapping code, this makes sense. There are
            > a lot of low level
            > | routines in this page, too. And if the dataflash and
            > codeflash both swap into
            > | slot #4000, then the only routines to directly
            > access dataflash MUST be in
            > | page 0 of codeflash ...
            > Logical. logical. logical.
            > Slot $0000 appears to be the main manager for the
            > "operating system".

            Those above referenced drawing routines are there, too!

            > | (or copied to ram, as in update mode)
            > Aha! Here's the other goodie. The update mode seems
            > to be running from RAM.

            Yes.

            > So, I have several hypotheses and questions:
            > 1) Is the "update mode" the re-flashing function that
            > SJ was playing with?

            Yes.

            > 2) Has anyone found & isolated this "update mode"?

            Yes. The protocol was described in message 92
            and code to interface posted in the files section (mesg 85 + 86).

            > 3) This clearly means that we can execute in other
            > regions than $0000 and $4000

            Yes, it is just that the mailstation code is assembled/linked
            to run in those slots. Your code can run wherever you like.

            > | It stands to reason that slot #C000 is fixed ram
            > page, since it contains the
            > | stack. Everything I have seen says that the #4000
            > slot is where all the
            > | coderom above #003fff is mapped.

            My code is still not ready for prime time, but I expect
            too post a "beta" version "real soon now". I tried it out
            under win XP, and it does not work. :-(

            There is also a nasty tendency for the mailstation flash to be erased
            if you leave the laplink cable attached while rebooting the pc.

            --
            CJ
          • Sean Walton
            If it isn t obvious, I m trying to write a firmware specification. ... If you could scan the sketch and email it, I will formalize it. ... mailstation ...
            Message 5 of 11 , Jan 4, 2005
            • 0 Attachment
              If it isn't obvious, I'm trying to write a firmware
              specification.

              | > | PORT definitions
              | > | P01 = keyboard (in = cols, out = rows)
              | > Do we have the keyboard matrix mapping?
              |
              | I sketched it on paper, and it is on the "todo list"
              | to type it up. If you really want it, I can post it
              | sooner rather than later.
              If you could scan the sketch and email it, I will
              formalize it.

              | > | P03.3 = LCD_CAS (output)
              | > What is this?
              |
              | I am not an expert on lcd's, in fact this
              mailstation
              | lcd is the first I have really looked at. I looked
              | at several common lcd data sheets, and as I recall
              | this one did not match any of the common ones.
              | Since message 38, I have seen sevearal lcd's
              | that have a command/data pin, and I suppose
              | that could be the real function of this signal
              | (it goes directly to the lcd ribbon cable). But
              | if that is the case, the only command I see
              | the mailstation sending is a "column number".
              | I called it cas (column address select), because
              | it reminded me of how DRAM chips are addressed.
              | But it is probably better to rename it "column
              register select",
              | because the column number is sent on the data
              | bus (in a seperate write cycle), not on a
              | multiplexed address bus as with DRAM cas.
              | Maybe there *are* other commands
              | besides the column number, and it really *is*
              | "command register select"???? I dunno.
              Ok, I can understand this... However, this is a
              bit-wide: So,
              the column must be selected serially. How long is the
              column
              address and where is the clock port?

              | > | .5 = maybe RTC???
              | > Yeah, I understand. Now, I have questions about
              the
              | > Real-Time Clock...
              Do we have any information about the RTC?

              | > | .6 = Modem handler
              | > How much do we know about the modem? E.g. does it
              | > have a queue?
              | > Smartmodem compliant?
              |
              | I dunno, but I can post the data sheet
              | (if it is not already there???)
              | The handler does implement send and recv queue's in
              software.
              I don't recall seeing the document. I think that we
              need to
              place the significant documents like this in the
              /files folder.

              | > | .4 = increment time16
              | > ??? What's this??
              |
              | There are two software timebases, one is a 16 bit
              | value, and the other is 32 bit. The 32 bit one
              | seems to be counting milliseconds, but I don't
              | know what this one is counting (besides the
              | number of times that int 3.4 has happened).
              | The only thing that happens during
              | int 3.4 is this 16 bit counter is incremented.
              | So far, I don't know where this value is used,
              | or what for.
              What are the port #s for these two counters?

              | > P06 = slot4000 device code for $4000 slot
              | > P07 = slot8000 page holds A14 - A21, for
              addresses
              | > in #8000-BFFF range.
              | > P08 = slot8000 device code for $8000 slot
              |
              | A22-29 *is* the device code.
              I think that we are picking nits on semantics.
              According to the 3SI176 pinout, pin #26-32 appear to
              be
              a port with each pin assigned to each device. You
              know
              the code better than anyone else -- when selecting a
              device is it a bitset or is the pinout inaccurate?

              | > I do find it interesting when devices select their
              own
              | > clock rate: why would
              | > anyone want anything but the fastest rate?
              |
              | The power dissipation in CMOS devices is directly
              | proportional to the clock rate. The batteries
              | will last 1.5 times as long at 8 MHz. (But it might
              take
              | 1.5 times as long to do your calculation!)
              Excellent point. I believe that power consumption is
              nonlinear: the faster you go the power increases
              nonlinearly. So, keeping things slow is a "good
              thing."

              | > | P28 = various (output)
              | > | .0 = modem_reset
              | > Ok, I get this.
              | >
              | > | .1 = 74C74_pin4_via600ohm
              | > | .2 = callid_dataclock
              | > | .3 = callid_sleep/reset
              | > | .4 = callid_FSK/not_DTMF
              | > What is all of this?
              |
              | I think that 28.0 & 28.1 may be reversed????
              Once again, I was using collected information I could
              find.
              You know the code far better than I do. I have made
              the
              change.

              | P28.0 = connected to pin 4 of the 74c74 ic via a 600
              ohm resistor.
              | P28.1 = modem_reset
              |
              | The 74c74 is a dual flip flop, and it gates
              | the power to most of the board (via a transistor).
              | I think pulsing 28.0 will turn the board off.
              Does the board turn itself "on" through the hardware?

              | > | P2C = printer data direction
              | > Um... I'm assuming that P2C.0-7 maps to D0-7. To
              | > enable bidirectional PIO,
              | > the lines have to be driven 0000.0000 for input
              and
              | > 1111.1111 for output. Does
              | > anyone know if this is compatible with APIO/PPI
              specs.
              |
              | Dunno. What are APIO/PPI ?
              APIO = Advanced Parallel I/O
              PPI should be ECP/EPP (sorry)
              It may actually work... You stated that you can
              reprogram
              the MS using the parallel port. Do you manage to do
              bidirectional communication to-from the PC/MS?

              | > 2) Is it possible to have both LCD banks
              visible
              | > selected at the same
              | > time? (This depends on Q#1 being 'yes'.)
              |
              | Both lcd banks are visible all the time, they
              | are the right and left halfs of the screen.
              Sorry, I should have been more clear: I meant "visible
              to the firmware code."

              | Each row is mapped to a different address in the
              cpu's
              | address space. Changing columns within a half
              requires
              | sending a new column number to that column register
              thingy.
              | And changing halfs requires outputing a device
              number to
              | the appropriate device register.
              | I suppose you could do that, but you would still
              have to deal
              | with the column addresses. IOW, you cannot map all
              the
              | screen pixels into memory at the same time. You
              possibly could
              | map one column from first half and one column from
              | the second half at the same time.
              | (Each column is a byte wide x 128 bytes high. And
              each half screen
              | is 20 columns wide.)
              |
              | The mailstation handles this nastiness by using a
              screen
              | buffer in ram (in fixed slotC000). All drawing is
              done
              | in this buffer, which *is* a block of bits
              representing the
              | whole 320 x 128 pixel screen. There are text, line,
              and icon
              | drawing routines.
              |
              | And after a whole screen is drawn another routine
              | copies the whole mess over to the actual lcd.
              | Half the screen at a time.
              | One column of each half at a time.
              | One byte of each column at a time.
              Please help me, I need more clarification.
              I believe that you are implying that each byte
              represents a pixel on
              the display -- is that true? If so, the screen has
              its own memory
              of 320x128x8 (or ~40KB). It's also possible that the
              display grays.
              Could you explain in more detail exactly how a block
              of bits are
              written to the display?

              | > 2) Has anyone found & isolated this "update
              mode"?
              |
              | Yes. The protocol was described in message 92
              | and code to interface posted in the files section
              (mesg 85 + 86).
              I will look at those messages -- this is a major step
              and kudos to
              you!

              | My code is still not ready for prime time, but I
              expect
              | too post a "beta" version "real soon now". I tried
              it out
              | under win XP, and it does not work. :-(
              Still, I think that you have made some mjor progress!

              | There is also a nasty tendency for the mailstation
              flash to be erased
              | if you leave the laplink cable attached while
              rebooting the pc.
              eeek!

              -Sean



              __________________________________
              Do you Yahoo!?
              Yahoo! Mail - now with 250MB free storage. Learn more.
              http://info.mail.yahoo.com/mail_250
            • Neil Morrison
              ... From: Cyrano Jones ... There is good reason for this. LCDs tend to be slow to update, so it s better to do some things with
              Message 6 of 11 , Jan 4, 2005
              • 0 Attachment
                ----- Original Message -----
                From: "Cyrano Jones" <cyranojones_lalp@...>

                > --- Sean Walton wrote:
                > > Too bad that more progress was not made.
                ...
                > > | P02 = various
                > > | .7 = LCD_ON (output)
                > > Is this part of a "sleep" mode?
                >
                > I guess so, for just the lcd.

                There is good reason for this. LCDs tend to be slow to update, so it's
                better to do some things with it off in some cases. They may not use this,
                but you never know.

                Regards,

                Neil Morrison
              • Sean Walton
                Really? That jives with CJ s statement implying that the LCD has its own memory. Good comment! -Sean ... __________________________________ Do you Yahoo!?
                Message 7 of 11 , Jan 4, 2005
                • 0 Attachment
                  Really? That jives with CJ's statement implying that
                  the LCD has its own memory. Good comment!
                  -Sean

                  --- Neil Morrison <neilsmorr@...> wrote:

                  >
                  > ----- Original Message -----
                  > From: "Cyrano Jones" <cyranojones_lalp@...>
                  >
                  > > --- Sean Walton wrote:
                  > > > Too bad that more progress was not made.
                  > ...
                  > > > | P02 = various
                  > > > | .7 = LCD_ON (output)
                  > > > Is this part of a "sleep" mode?
                  > >
                  > > I guess so, for just the lcd.
                  >
                  > There is good reason for this. LCDs tend to be slow
                  > to update, so it's
                  > better to do some things with it off in some cases.
                  > They may not use this,
                  > but you never know.
                  >
                  > Regards,
                  >
                  > Neil Morrison
                  >
                  >




                  __________________________________
                  Do you Yahoo!?
                  Yahoo! Mail - Find what you need with new enhanced search.
                  http://info.mail.yahoo.com/mail_250
                • Neil Morrison
                  I have a lot of experience with the Tandy Model 100 and they are very slow to scroll etc. so it s normal to find ways around this. Neil ... From: Sean Walton
                  Message 8 of 11 , Jan 4, 2005
                  • 0 Attachment
                    I have a lot of experience with the Tandy Model 100 and they are very slow
                    to scroll etc. so it's normal to find ways around this.

                    Neil

                    ----- Original Message -----
                    From: "Sean Walton" <ab8kf@...>

                    > Really? That jives with CJ's statement implying that
                    > the LCD has its own memory. Good comment!
                    > -Sean

                    > > There is good reason for this. LCDs tend to be slow
                    > > to update ...
                  • Cyrano Jones
                    ... Sounds interesting. By firmware spec, do you mean essentially a datasheet for the mailstation hardware? ... I typed it and uploaded to file section. Also
                    Message 9 of 11 , Jan 6, 2005
                    • 0 Attachment
                      --- Sean Walton wrote:
                      > If it isn't obvious, I'm trying to write a firmware
                      > specification.

                      Sounds interesting. By firmware spec, do you mean
                      essentially a datasheet for the mailstation hardware?

                      > | > | PORT definitions
                      > | > | P01 = keyboard (in = cols, out = rows)
                      > | > Do we have the keyboard matrix mapping?
                      > |
                      > | I sketched it on paper, and it is on the "todo list"
                      > | to type it up. If you really want it, I can post it
                      > | sooner rather than later.
                      > If you could scan the sketch and email it, I will
                      > formalize it.

                      I typed it and uploaded to file section. Also
                      another modem datasheet, and a revised verion of my lcd
                      data.

                      [blah blah, lcd, blah....]

                      > Ok, I can understand this... However, this is a
                      > bit-wide: So,
                      > the column must be selected serially. How long is the
                      > column
                      > address and where is the clock port?

                      The lcd interface is byte wide.
                      Column numbers are sent as bytes.
                      And pixel data is sent 8 pixels per byte.

                      The columns are 8 pixels wide by 128 pixels high.

                      2 halfs x 20 columns/half x 8 pixels/column = 320 pixel wide screen.

                      [...blah, rtc, blah...]

                      > Do we have any information about the RTC?

                      I'm pretty sure that i/o ports #10 thru #1F are for the rtc.
                      The date & time digits are #10-#1C, and the last 3
                      are some sort of control.

                      [...modem...]

                      > I don't recall seeing the document. I think that we
                      > need to
                      > place the significant documents like this in the
                      > /files folder.

                      done. I skimmed thru it again, and it would seem
                      that the modem in the ms is capable of controling a
                      speakerphone, and the interfacing to a headset, too.
                      Hmmmm.

                      > | > | .4 = increment time16
                      > | > ??? What's this??
                      > |
                      > | There are two software timebases, one is a 16 bit
                      > | value, and the other is 32 bit. The 32 bit one
                      > | seems to be counting milliseconds, but I don't
                      > | know what this one is counting (besides the
                      > | number of times that int 3.4 has happened).
                      > | The only thing that happens during
                      > | int 3.4 is this 16 bit counter is incremented.
                      > | So far, I don't know where this value is used,
                      > | or what for.
                      > What are the port #s for these two counters?

                      No ports, they are in ram.

                      >
                      > | > P06 = slot4000 device code for $4000 slot
                      > | > P07 = slot8000 page holds A14 - A21, for
                      > addresses
                      > | > in #8000-BFFF range.
                      > | > P08 = slot8000 device code for $8000 slot
                      > |
                      > | A22-29 *is* the device code.
                      > I think that we are picking nits on semantics.
                      > According to the 3SI176 pinout, pin #26-32 appear to
                      > be
                      > a port with each pin assigned to each device. You
                      > know
                      > the code better than anyone else -- when selecting a
                      > device is it a bitset or is the pinout inaccurate?

                      On the software side, it is the binary address.

                      To select device 5 (the modem), the device register
                      holds "0000 0101"

                      You are correct that the device bits are decoded
                      internally to a "1 of 7", and the device address
                      bits never make it outside the cpu. And it is
                      impossible to add even an 8th device, coz the
                      whole device reg & decoder is buried in the chip.
                      (There is one device select unused and available for
                      expansion purposes, device 6).

                      [......................]

                      > | I think pulsing 28.0 will turn the board off.
                      > Does the board turn itself "on" through the hardware?

                      Yes, but not with that same signal. It can wake itself
                      up at a set time, and download mail. And as far as I
                      can tell, the cpu is sleeping, or off, before wakeup.
                      So it can't wake itself up with a i/o bit.
                      It must be a timer, likely part of the rtc.

                      [....]

                      > | Dunno. What are APIO/PPI ?
                      > APIO = Advanced Parallel I/O
                      > PPI should be ECP/EPP (sorry)

                      My hunch is that it is just a matter of writing
                      the software. The data pins on the parport are
                      capable of bidir communication.

                      > It may actually work... You stated that you can
                      > reprogram
                      > the MS using the parallel port. Do you manage to do
                      > bidirectional communication to-from the PC/MS?

                      Yes, but the ms update code uses a "laplink" type
                      of protocol. It requires the minimum in parports,
                      and will work with even the oldest par ports. It
                      does not use real bidir capability, it receives
                      5 bits at a time using the status lines as inputs.

                      [.................................................]

                      > Please help me, I need more clarification.
                      > I believe that you are implying that each byte
                      > represents a pixel on
                      > the display -- is that true?

                      each byte is 8 horizontal pixels.

                      > If so, the screen has
                      > its own memory
                      > of 320x128x8 (or ~40KB).

                      It does have its own memory.
                      (2 halfs x 20 cols x 128 rows x 8 pixels).

                      > It's also possible that the
                      > display grays.

                      no.

                      > Could you explain in more detail exactly how a block
                      > of bits are
                      > written to the display?

                      check the revised lcd data in file section, under "part files".

                      [.........]

                      --
                      CJ
                    • Sean Walton
                      ... Essentially, yes. A firmware specification does define all the hardware elements in an embedded system, but it goes further to describe the: -Support
                      Message 10 of 11 , Jan 6, 2005
                      • 0 Attachment
                        > --- Sean Walton wrote:
                        > > If it isn't obvious, I'm trying to write a
                        > firmware
                        > > specification.
                        >
                        > Sounds interesting. By firmware spec, do you mean
                        > essentially a datasheet for the mailstation
                        > hardware?

                        Essentially, yes. A firmware specification does
                        define all the hardware elements in an embedded
                        system, but it goes further to describe the:
                        -Support devices and their programming
                        +flash devices
                        +RTC
                        +display
                        +modem
                        +keyboard
                        +parallel port
                        +caller ID
                        +LEDs
                        +power modes
                        -Interrupt subsystem
                        +priorities
                        +masking
                        +stacking
                        -Paging mechanisms and rules
                        +slots & pages
                        -Ports -- their meaning and programming
                        +...?
                        -Clocking: RTC and clock interrupts (if they exist)
                        +timers
                        +wake-ups
                        +MM/DD/YYYY HH:MM:SS.mmm

                        Many of the items above are still in flux, but I could
                        gather what we know right now into a useful
                        programmers document. I would like to get to the
                        point of being able to completely reprogram the MS
                        with my own OS and programming language(s). This is
                        the first step in that direction. That is the reason
                        I put that poll up -- I wanted to see if publishing
                        this would be useful to more than myself alone.

                        -Sean



                        __________________________________
                        Do you Yahoo!?
                        Yahoo! Mail - now with 250MB free storage. Learn more.
                        http://info.mail.yahoo.com/mail_250
                      • John R. Hogerhuis
                        Sean, Useful, certainly, but most of us can get along with an I/O map, memory map and the datasheets, so if I were you I wouldn t put too much effort into
                        Message 11 of 11 , Jan 6, 2005
                        • 0 Attachment
                          Sean,

                          Useful, certainly, but most of us can get along with an I/O map, memory
                          map and the datasheets, so if I were you I wouldn't put too much effort
                          into polished engineering documentation. Just the essentials will
                          suffice for those who will be writing code.

                          Where hard questions come up, one just disassembles the original
                          firmware.

                          Maybe better just to start hacking and document peculiarities as you go?
                          I always figured the linux-hacker stuff looked sufficient to start
                          getting code up and running. It certainly helped point the way to the
                          native reflash code.

                          (CJ -- I haven't forgotten about porting/testing the reflash code, alas
                          I am just swamped with end-of-year bookkeeping stuff at the moment...)

                          -- John.
                        Your message has been successfully submitted and would be delivered to recipients shortly.