Hello Steve,

     Looks awesome so far! I've started to manually decompile it and some things are not making sense.

The first 3 bytes 0x8e, 0x87, 0xFF do make sense this puts the stack pointer at address 0x87FF, the top of the external RAM. This is good.

Normally there is some other housekeeping at the entry point 0xF000, something like disabling interrupts so the start of the program can initialize the CPU without interruptions. With the TPDD1 the SEI instruction was at 0xF000, then the stack pointer is set at 0x87FF. This may be fine though, I need to do a deeper dive and see if the address alignments all work out.

What I do notice is missing is the last 128 bytes of the ROM image, 0xFF80 to 0xFFFF.  0xFFEE to 0xFFFF is the vector table for interrupts, and resets. The ROM image should be 4096 bytes in total.

When I get home this evening I'll run the binary through my decomplier and check the address alignments, that should prove whether the start byte is correct or not too.

Either way, we're 95% there. Thanks for working on this!

Darren Clark


On 1/22/24 23:21, Stephen Adolph wrote:
these look like 6301 opcodes.  Maybe this worked.
take a look please when you can. thanks. Steve


On Tue, Jan 9, 2024 at 6:55 PM Darren Clark <[email protected]> wrote:

    TPDD2 firmware dumping - breaking this into a new thread.

    It would be interesting to see if we can use the command 'Request
    Block'
    from page 89 to read the ROM of the CPU...

    I dumped the ROM of the TPDD1 and got a good start at reverse
    engineering it and documenting it here
    https://github.com/BiggRanger/Tandy_PDD/tree/master can't believe
    that
    was over 7 years ago!

    Looking at the schematic in the PDF, the HD6301V1 starts up in mode 6
    just like with TPDD1, that places the firmware/ROM between 0xF000 and
    0xFFFF in memory.

    Is there anybody with a TPDD2 willing to try and dump 4K of data from
    0xF000 to 0xFFFF and send it to me so I can start reverse engineering
    and documenting it? It should look somewhat similar to this
    https://github.com/BiggRanger/Tandy_PDD/blob/master/PDD1.HEX if it is
    outputting good data.

     From page 89 GET THE DATA FROM THE DRIVE'S MEMORY

    Request Block - 5A5A 32 04 01 F000 40 (checksum) and see what
    block of
    64 bytes comes out.


    Darren Clark


    Here is a memory map of the TPDD1 from my reverse engineering earlier:

    ;----------------------------------------------------------
    ;Memory Map of PDD (using mode 6):
    ;----------------------------------------------------------
    ;0000-001F    Internal Registers (see below)
    ;0080-00FF    Internal RAM
    ;4000-4003    CPLD (Glue Logic + Hardware IO Control)
    ;8000-87FF    External RAM (2K)
    ;F000-FFFF    Internal ROM (4K)
    ;----------------------------------------------------------
    ;I/O ports
    ;Port.Bit    I/O        Pin#    ID    Function
    ;----------------------------------------------------------
    ;Port1.B0    Input    Pin18    P10    CTS
    ;Port1.B1    Input    Pin19    P11    DSR
    ;Port1.B2    Output    Pin20    P12    RTS
    ;Port1.B3    Output    Pin22    P13    DTR
    ;Port1.B4    Output    Pin23    P14    PS Alarm (Low Battery LED)
    ;Port1.B5    Output    Pin24    P15    LED101 (Drive Access LED)
    ;Port1.B6    Output    Pin25    P16    To MA7340
    ;Port1.B7    Output    Pin26    P17    SCAN

    ;Port2.B0    Input    Pin11    P20    Mode (pulled Low)
    ;Port2.B1    Input    Pin12    P21    Mode (pulled Hi)
    ;Port2.B2    Input    Pin13    P22    (SCI) CLKOUT from CPLD for
    BAUD rate
    ;Port2.B3    Input    Pin14    P23    (SCI) /RXD
    ;Port2.B4    Output    Pin15    P24    (SCI) /TXD
    ;----------------------------------------------------------


Reply via email to