Jump to content

JohnPCAE

Members
  • Posts

    814
  • Joined

  • Last visited

Posts posted by JohnPCAE

  1. You know, there is also the ACC that I developed. I'm not interested in manufacturing them, but the design is both frozen and open for anyone else to. And it's documented and even comes with a sample program. It's not an Intellivision III but it does give the Inty many of the Inty III's graphics capabilities. And it comes with a coprocessor that's emulated in software. The only caveat is that if you use an Inty I with it, you need to implement the System Changer mod to really take advantage of it (it will work without the mod but the overlaid graphics will be rather dim because of the heavy resistor the Inty I puts inline with overlay video).

    • Like 2
  2. I've built and tested the last board that I have, which gives me three spares. Since I have surplus parts, I've ordered another set of 5 boards. I have no idea how many of these I plan to build, but it gives me something to do. I don't plan to send all of them out for free as there is a cost to making these, but the offer to send free ones to interested developers is still out there.

    • Thanks 1
  3. A few updates:

     

    1. Corrected a handful of characters in the built-in fonts. They had been incorrectly shifted left by a pixel.

    2. Updated the silkscreen and Gerber files for the mainboard to reflect the correct chip types (e.g. 74HCT).

    3. Added Appendix C to the documentation that shows all built-in font characters.

    4. Added Appendix D to the documentation that explains how to load new firmware to the Raspberry Pi Pico.

     

    Advanced Console Component 20221217.zip

  4. 17 minutes ago, tschak909 said:

    Is there a complete pin mapping of the edge connector somewhere?

    -Thom

     

    We can do you one better. Here's the Intellivoice service manual, which includes a complete schematic:

     

    The Intellivoice connector would be a great solution for FujiNet, but it can also be problematic. Data pins D0-D7 are open-collector, but not all Intellivoice units have the required pull-up resistors R28-R35. So anything you plug into it should provide its own pull-ups. A simple SIP resistor pack can do the trick. Also, many Intellivoice units don't have the IDC connector at all. Those would have to be retrofitted. In my Intellivoice II project, I provide the expansion connector but not the pull-up resistors.

     

    Intellivoice_Service_Manual.pdf

  5. 6 hours ago, DZ-Jay said:


    Would this make the FujiNet implementation depend on your ACC device?  I thought the idea was to define a means to interface the ESP32 directly with the Intellivision, via the cartridge port or something.

     

        dZ.

    It does, but right now the ACC is the only thing that provides any sort of external device connectivity to the Inty. As to why I chose a parallel port, it provides a ton of capability while also being an industry standard. You can connect any old printer from the 80's or 90's and it will work as long as you have the software to drive it. Or you could rig a DIN connector to its pins and bit-bang the Commodore 64 IEC protocol if you wanted to. Or you could connect a resistor ladder to the data pins and get crude analog sound. Or anything else you could do with a PC's parallel port.

  6. 6 hours ago, tschak909 said:

    Where does the parallel port sit in the memory map?

    -Thom

     

    All ACC registers are at $007E and $007F. You select the register by writing to $007E and you set (or read) the register's value at $007F. If you've ever done CGA, EGA, or VGA programming, it will look very familiar. I do something similar with my USB card by putting its registers at $007C and $007D (so please don't use those).

  7. I put together some sample code for manipulating the ACC's parallel port. With this you can bit-bang the parallel port pins. Do you need me to build you an ACC unit so you have something to test with?

    I'm also attaching a PDF that describes the operation of the parallel port on a PC. It's what I followed when implementing it on the ACC. The ACC's parallel port is meant to operate like the port on a PC as closely as possible. The only deviation is that pin 17 is output-only in my implementation because I didn't have an IC pin available to read it.

     

    ; ACC registers
    
    ACC_REG_INDEX            EQU     $007E
    ACC_REG_VALUE            EQU     $007F
    
    ACC_REG_SIGNATURE        EQU     0     ;                      read-only, always returns MAGIC_SIGNATURE (0x5EE5)
    ACC_REG_ENABLE           EQU     1     ; .........ppppevm     m = enable memory, v = enable video, e = sprite exclusion, 
    ACC_REG_PALETTE_INDEX    EQU     2     ; .......rrrrrrrrr     0 .. 511 allowed (256 palette colors, 2 registers per color)
    ACC_REG_PALETTE_VALUE    EQU     3     ; bbbbbbbbaaaaaaaa     two timeslice values (four timeslice values make up a single palette color)
    ACC_REG_STATUS_INFO      EQU     4     ; r.......mmmmmmmm     read-only.  returns the number of times MSYNC went from low to high and whether the emulator is running.
    ACC_REG_CURSOR           EQU     5     ; ......bceeeessss     s = start scanline, e = end scanline, c = show cursor, b = enable cursor blink
    ACC_REG_CURSOR_POS       EQU     6     ; yyyyyyyyxxxxxxxx     y = row (0 .. 23), x = column (0 .. 39/79)
    ACC_REG_CHAR_SCANLINES   EQU     7     ; ............ssss     1 .. 15 allowed
    ACC_REG_SCROLL_V         EQU     8     ; ............vvvv     0 .. char. scanlines - 1, specifies starting character scan line
    ACC_REG_BUFFER_START     EQU     9     ;                      dword location within video memory (4-byte granularity)
    ACC_REG_BUFFER_PITCH     EQU     10    ;                      1 .. 160 allowed.  character-mode virtual screen pitch in characters.
    ACC_REG_SCREEN_MODE      EQU     11    ;                      0 .. SCREEN_MODE_MAX allowed (anything over the max is treated as the max)
    ACC_REG_GRAM_START       EQU     12    ;                      the location within video memory (word granularity).  Used only by text modes.
    ACC_REG_RESERVED         EQU     13
    ACC_REG_CYCLE_COUNT_LO   EQU     14    ;                      read-only. low word of the raw bus cycle count
    ACC_REG_CYCLE_COUNT_HI   EQU     15    ;                      read-only. high word of the raw bus cycle count
    ACC_REG_PARALLEL_DATA    EQU     16    ; ........dddddddd     bidirectional parallel port data register
    ACC_REG_PARALLEL_STATUS  EQU     17    ; ........dddddddd     same format as PC parallel port status register
    ACC_REG_PARALLEL_CONTROL EQU     18    ; ..........d.dddd     same format as PC parallel port control register
    ACC_REG_START_PROCESSOR  EQU     19    ;                      write an address here to tell the emulator to immediately start running at that location
    ACC_REG_EBCI             EQU     20    ;                      read by emulated BEXT instruction
    ACC_REG_INT_VECTOR       EQU     21    ;                      memory location used when triggering an interrupt with REG_INTERRUPT
    ACC_REG_INTERRUPT        EQU     22    ;                      writing anything here triggers an interrupt in the emulator.  does nothing if the emulator is halted.
    ACC_REG_R0               EQU     23    ;                      emulated CP-1600 register R0
    ACC_REG_R1               EQU     24    ;                      emulated CP-1600 register R1
    ACC_REG_R2               EQU     25    ;                      emulated CP-1600 register R2
    ACC_REG_R3               EQU     26    ;                      emulated CP-1600 register R3
    ACC_REG_R4               EQU     27    ;                      emulated CP-1600 register R4
    ACC_REG_R5               EQU     28    ;                      emulated CP-1600 register R5
    ACC_REG_R6               EQU     29    ;                      emulated CP-1600 register R6
    ACC_REG_R7               EQU     30    ;                      emulated CP-1600 register R7
    ACC_REG_FLAGS            EQU     31    ;                      emulated CP-1600 flags
    
    ACC_BUFFER               EQU     $D000
    ACC_ENABLE_ACCESS        EQU     1
    ACC_ENABLE_VIDEO         EQU     2
    ACC_ENABLE               EQU     3
    
    ACC_SIGNATURE            EQU     $5EE5
    
    
    ; -------------------------------------------------------------
    ; Returns whether the ACC (Advanced Console Component) is present
    ;
    ; Returns value in R0
    ;   0 - not present
    ;   1 - present
    
    IsACCPresent PROC
    
            PSHR    R5
            PSHR    R1
            MVII    #ACC_REG_SIGNATURE, R0
            MVO     R0,     ACC_REG_INDEX
            MVII    #ACC_REG_VALUE, R1
            MVI@    R1,     R1
            CLRR    R0
            CMPI    #ACC_SIGNATURE, R1
            BNEQ    @@ACCNotFound
            INCR    R0
    @@ACCNotFound:
            PULR    R1
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Writes to the parallel port data pins
    ;
    ; Data pins are pins 2-9 on the DB25 connector.
    ;
    ; R0 - The byte to output
    
    WriteParallelDataPort PROC
    
            PSHR    R5
            PSHR    R1
            MVII    #ACC_REG_PARALLEL_DATA, R1
            MVO     R1,     ACC_REG_INDEX
            MVO     R0,     ACC_REG_VALUE
            PULR    R1
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Reads from the parallel port data pins and returns it in R0
    ;
    ; Data pins are pins 2-9 on the DB25 connector.
    
    ReadParallelDataPort PROC
    
            PSHR    R5
            MVII    #ACC_REG_PARALLEL_DATA, R0
            MVO     R0,     ACC_REG_INDEX
            MVI     ACC_REG_VALUE, R0
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Reads from the parallel port status pins and returns it in R0.
    ; Use this to read port pins 1, 10-16.
    ;
    ; Bit    Name         Inverted    Port pin    Type
    ; ---------------------------------------------------
    ; 0      Strobe       Yes         1           Control
    ; 1      AutoLF       Yes         14          Control
    ; 2      Init         No          16          Control
    ; 3      Error        No          15          Status
    ; 4      Select       No          13          Status
    ; 5      Paper out    No          12          Status
    ; 6      ACK          No          10          Status
    ; 7      Busy         Yes         11          Status
    
    ReadParallelStatusPort PROC
    
            PSHR    R5
            MVII    #ACC_REG_PARALLEL_STATUS, R0
            MVO     R0,     ACC_REG_INDEX
            MVI     ACC_REG_VALUE, R0
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Writes to the parallel port control port.  Use this to output
    ; to control port pins 1, 14, 16, 17 and set whether data pins
    ; 2-9 are input or output.
    ;
    ; Bit    Name              Port pin
    ; --------------------------------
    ; 0      Strobe            1
    ; 1      AutoLF            14
    ; 2      Init              16
    ; 3      Select printer    17
    ; 4      Reserved          N/A
    ; 5      Data input        N/A
    ; 6      Reserved          N/A
    ; 7      Reserved          N/A
    ;
    ; R0 - The byte to output
    
    WriteParallelControlPort PROC
    
            PSHR    R5
            PSHR    R1
            MVII    #ACC_REG_PARALLEL_CONTROL, R1
            MVO     R1,     ACC_REG_INDEX
            MVO     R0,     ACC_REG_VALUE
            PULR    R1
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Reads from the parallel port control port and returns it in R0.
    ; This cannot be used to read the state of port pins 1, 14, 16,
    ; and 17 (see status port) but it can be used to read what is
    ; being output to those pins as well as read the state of the
    ; Data input bit.
    
    ;
    ; Bit    Name              Port pin
    ; --------------------------------
    ; 0      Strobe            1
    ; 1      AutoLF            14
    ; 2      Init              16
    ; 3      Select printer    17
    ; 4      Reserved          N/A
    ; 5      Data input        N/A
    ; 6      Reserved          N/A
    ; 7      Reserved          N/A
    
    ReadParallelControlPort PROC
    
            PSHR    R5
            MVII    #ACC_REG_PARALLEL_CONTROL, R0
            MVO     R0,     ACC_REG_INDEX
            MVI     ACC_REG_VALUE, R0
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Sets the parallel port data pins to output
    
    SetParallelDataOutput PROC
    
            PSHR    R5
            PSHR    R0
            MVII    #ACC_REG_PARALLEL_CONTROL, R0
            MVO     R0,     ACC_REG_INDEX
            MVI     ACC_REG_VALUE, R0
            ANDI    #$00DF, R0
            MVO     R0,     ACC_REG_VALUE
            PULR    R0
            PULR    R7
    
            ENDP
    
    
    ; -------------------------------------------------------------
    ; Sets the parallel port data pins to input
    
    SetParallelDataInput PROC
    
            PSHR    R5
            PSHR    R0
            MVII    #ACC_REG_PARALLEL_CONTROL, R0
            MVO     R0,     ACC_REG_INDEX
            MVI     ACC_REG_VALUE, R0
            ANDI    #$00DF, R0
            XORI    #$0020, R0
            MVO     R0,     ACC_REG_VALUE
            PULR    R0
            PULR    R7
    
            ENDP

     

    parallel.pdf

  8. I did some searching and I ran across this helpful video. It appears that it's a hardware/software system that emulates disks, printers, and networking on various devices. It started out for Atari 8-bit and is being expanded to Apple ][, Coleco ADAM, and Commodore 64.

     

    It seems to me that a lot would have to be stood up on the Intellivision side. As a games console, it has no concept of disk devices or external loading. There's no existing protocol whatsoever. I suppose we could piggyback on an existing protocol from one of the above systems, maybe? At any rate you'd need either an ECS for keyboard input or something else like the USB card I'm working on.

     

     

  9. I'm still trying to understand. Does FujiNet have existing hardware that the Inty could talk to, or is it just a software stack? I've noted that you mentioned that you have cross-platform software, but we don't have a C compiler for the CP-1600 CPU as far as I know. We have IntyBasic which is a cross-compiler and we have CP-1600 assembly.

  10. I'm building the 5th circuit board (which is the last one I have), but I have parts for more. So I'm tempted to order more boards. At any rate, I have two spares sitting on the table and soon a third one. Free to people interested in investigating developing for it.

    • Like 2
  11. 10 minutes ago, tschak909 said:

    There are a number of ways this could be done, the ESP32 has:

     

    * UARTs (with and without synchronous clock)

    * SPI

    * I2C

    * GPIO

     

    ESP32 DevKitC v4 high resolution pinout and specs – Renzo ...

    Let's pick something and do a bring-up! :)

    -Thom

     

    Well, the DB25 port conforms to a standard bidirectional parallel port with the exception of pin 17 (pin 17 is output-only rather than bidirectional). So, any external peripheral that can talk to a parallel port can talk to the Inty if an ACC is plugged in.

     

    The port is a standard port, i.e. it doesn't implement ECP or EPP capability.

  12. The point of the ACC is to exceed the graphical capabilities of the Master Component. From a graphical standpoint, it's a Keyboard Component on steroids. The coprocessor and parallel port are bonuses that I was able to add. The coprocessor is only possible because the CP-1600 in the Master Component uses so many NACT cycles: when there is a transition to a NACT, the CPU core that talks to the Master Component is free to execute a coprocessor instruction instead. And the parallel port is there simply because I had a couple of spare logic gate pins to support it.

  13. I wonder if a small add-on with a Raspberry Pi Pico could emulate several AY sound chips and provide separate stereo sound on its own RCA jacks.

     

    We might need to design something like the Aquarius Mini-Expander for the Inty with all the potential plugin add-ons out there. I'm thinking something that could accommodate five or six top-down plugin modules like the ECS Program Exapnder, but with different features:

     

    1. Intellivoice

    2. USB interface

    3. Stereo sound

     

    • Like 1
×
×
  • Create New...