Jump to content

acadiel

+AtariAge Subscriber
  • Content Count

    2,104
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by acadiel


  1. There's something in the works. It's based on my original design, and there are two fine gentlemen enhancing it. I'm not stealing their thunder, because it's still in prototype mode, and hasn't even been tried yet. :-)

     

    Wow, that is a nice looking board! Can't wait to see it working. What do you think to cost on that thing will be fully populated?

     

    Matthew

     

    Not sure yet. I just got the first prototype from Ksarul, and I'm checking out the ROM functionality to make sure it works.

     

    Ksarul has thousands of the flash ROMs and sockets. The 74LS379 might be able to be replaced by your GAL to fully handle 512K. (I encourage you to e-mail him! He'll likely try and adapt the board!) I haven't even looked at how much the ATMega chips are yet. That part would need to be tested and made to work as well; since it's still a prototype, all we have is a board right now... :-)


  2. That sure looks beautyful :D

     

    I've heard rumors about this baby. I didn't know development was that far already though.

    Will this be a 2010 release? It would be nice for Xmas ;)

     

    EDIT:

    Looking at the picture, I see there is space for an ATmega1284.

    The ATmega1284 has 16KB of SRAM, so I'm hoping that some of it will be available in the cartridge space :)

     

    You can thank Ksarul for all the reflowing of traces, changing the ROM socket to a more modern non DIP type, and putting in the ATMega logic on the board. Tursi's going to play with the ATMega and see if we can get it to work with GROM.

     

    Not sure what Ksarul and Tursi's plans are for the ATmega part, other than it will handle all the GROM stuff. The 512K chip will handle ROM (actually, it's 128K bank switched, with two hard switches, because of limitations on the 74LS379.) The 512K part does expect a 512K chip; there are no jumpers (those chips are very cheap and plentiful, and Ksarul has thousands of them). So, for a 32K program, just program it in the four bank sets (in the 128K segment that you have selected with the hard switches) one of the sets will work. :)

     

    It'll be a nice combo board... the ROM flash is easily reprogrammable, and Ksarul and Tursi have jumpers for the debug on the ATMega. Everything is through hole too, which is a bonus for people like me who hate SMD stuff. :)

     

    Jon


  3. Wow again... Matthew, I am impressed!

     

    You and Tursi should work on the GROM emulation. We have that combo V6 board - the 512K ROM works with the 74LS379 (I have lots of those still around), banking it with 128K and two hard switches (the four data line limitation). The ATMega is what Tursi and Ksarul are going to use for GROM emulation.

     

    Of course, the V6 is a prototype, and it looks like you're on your way to making a V7 already! I can't wait!!! Awesome!!!! Keep up the GREAT work!

     

    :)


  4. There's something in the works. It's based on my original design, and there are two fine gentlemen enhancing it. I'm not stealing their thunder, because it's still in prototype mode, and hasn't even been tried yet. :-)

     

    I'll show ya the circuit board, but I'm not commenting any further than I'm going to solder the ROM socket on it, and try out the ROM part of it to make sure it works.

    post-22866-128528806688_thumb.jpg


  5. Here's the final copy... we had to load the workspace pointers to get everything to work properly. Thanks again, Tursi!

     

    Attached is the 128K EPROM image of Fred's carts... DM2K, DU2K, CF2K. Will work in Classic99, a hacked 64K Cart board, or a prototype 128K board.

     

    * THREE PROGRAM HEADER FOR 128K BANKED
    * SWITCHED CART
          DEF SFIRST,SLAST,SLOAD
          UNL
    
    * ROM HEADER
          AORG >6000
    
    SFIRST EQU $
    SLOAD  EQU $
    
    GRMHDR BYTE >AA,1,1,0,0,0
          DATA PROG3
          BYTE 0,0,0,0,0,0,0,0
    
    
    PROG3  DATA PROG2
          DATA DU2K
          BYTE 8
          TEXT 'DU2K 2.0'
          EVEN
    
    PROG2  DATA PROG
          DATA DM2K
          BYTE 8
          TEXT 'DM2K 2.4'
          EVEN
    
    PROG   DATA 0
          DATA CF2K
          BYTE 8
          TEXT 'CF2K 1.4'
          EVEN
    
    ***************
    * Copy Data for Modules *
    * Format is:
    * First, the address to load for the first source bank.
    * Number of 32-bit words, source address, target address
    * To end list, provide a start address greater than >8000
    * (This means you can't start in the low RAM bank)
    ***************
    CF2KDT DATA >6000
    	DATA >076A,>6258,>A000,>076A,>6258,>BDA8
    	DATA >076A,>6258,>DB50,>04C0,>6D00,>2000
    	DATA >A000
    
    DM2KDT DATA >6008
    	DATA >072A,>6358,>A000,>072A,>6358,>BCA8
    	DATA >072A,>6358,>D950,>0300,>7400,>2000
    	DATA >A000
    
    DU2KDT DATA >6010
                   DATA >0794,>61B0,>A000,>0794,>61B0,>BE50
                   DATA >0794,>61B0,>DCA0,>0400,>7000,>2000
                   DATA >A000
    
    ***************
    * CF2K Module *
    ***************
    CF2K	LWPI >8300
           LI R14,CF2KDT	 * address of copy table
    JMP COPYLP
    
    ***************
    * DM2K Module *
    ***************
    DM2K	LWPI >8300
           LI R14,DM2KDT	 * address of copy table
    JMP COPYLP
    
    ***************
    * DU2K Module *
    ***************
    DU2K	LWPI >8300
           LI R14,DU2KDT	 * address of copy table
    JMP COPYLP
    
    ***************
    * Common Code *
    ***************
    COPYLP	BL @GOGO * Set up Char Sets
    
    	MOV *R14+,R7	 * get bank
    
    ONEBLK	MOV *R14+,R4	 * Get bytes divided by 4
    	JGT CONT		 * Branch if positive (less than >8000)
    	B *R4			 * Else it's the jump address, so start the program
    
    CONT	MOV *R14+,R9	 * Address to copy from
    	MOV *R14+,R10	 * Address to copy to
    	BL @COPYME		 * COPY IT!
    
    	INCT R7			 * Next Bank
    
    	JMP ONEBLK
    
    ****************
    * Copy Routine *
    ****************
    * R4  - Bytes Div 4
    * R7  - Bank switch address
    * R9  - Address to copy from
    * R10 - Address to copy to
    * R11 - Return spot
    
    COPYME
       MOV R0,*R7   * Do the bank switch
    LOOPIT
       MOV *R9+,*R10+
       MOV *R9+,*R10+
       DEC R4
       JNE LOOPIT
       B *R11         * We're done.
    
    ****************************
    * Load lower case charsets *
    ****************************
    * Note, if you still need space, you can remove support for the
    * 99/4 by deleting the code marked between * +++ 99/4 support +++ begin/end
    * blocks
    
    GOGO
    MOV R11,R9   * Save our return spot
    
    * +++ 99/4 support begin +++
    
    * load R3 with 6 for 99/4, or 7 for 99/4A
    CLR R0
    BL @GPLSET
    BL @GETGPL   * read GROM >0000
    LI R3,7
    CI R0,>AA01  * 99/4 is AA01, all versions of 99/4A seem to be AA02 (even 2.2!)
    JNE IS4A     * note we also assume unknown is 99/4A just to be safe
    DEC R3
    
    * make a copy of the capitals for the 99/4 to 'support' lowercase
    * this will be partially overwritten by the main set, but it works!
    
    LI R0,>0018  * GPL vector address
    LI R1,>4A00  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    JMP MNSET
    
    * +++ 99/4 support end +++
    * If you delete the above block, replace with
    * LI R3,7
    * so that the character size counter is still valid
    
    IS4A
    * 'lowercase' letters
    LI R0,>004A  * GPL vector address (not available for 99/4)
    LI R1,>4B00  * dest in VDP - must OR with >4000 for write
    LI R2,>001F  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    
    * main set
    MNSET
    LI R0,>0018  * GPL vector address
    LI R1,>4900  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    B *R9        * RETURN TO CALLER
    
    *****************
    * GROM routines *
    *****************
    
    * Set GROM address
    GPLSET
    MOVB R0,@>9C02
    SWPB R0
    MOVB R0,@>9C02
    B *R11
    
    * Get a word from GPL
    GETGPL
    MOVB @>9800,R0
    SWPB R0
    MOVB @>9800,R0
    SWPB R0
    B *R11
    
    * Copy R2 characters from a GPL copy function vectored at
    * R0 to VDP R1. GPL vector must be a B or BR and
    * the first actual instruction must be a DEST with an
    * immediate operand. Set R3 to 6 for 99/4 (6 byte characters)
    * or 7 for a 99/4A (7 byte characters)
    GPLVDP
    MOV R11,R10    * save return address
    BL @GPLSET     * set GROM address
    BL @GETGPL     * Get branch instruction (not verified!)
    ANDI R0,>1FFF  * mask out instruction part
    AI R0,3        * skip instruction and destination
    BL @GPLSET     * set new GROM address
    BL @GETGPL     * get actual address of the table
    BL @GPLSET     * and set that GROM address - GROM is now ready!
    
    SWPB R1        * assume VDP is already prepared for write to save space
    MOVB R1,@>8C02
    SWPB R1
    MOVB R1,@>8C02 * VDP is now ready!
    
    CLR R0
    LP8
    MOVB R0,@>8C00 * pad the top of the char with a space
    MOV R3,R0      * then copy 7 (or 6) bytes
    
    * +++ 99/4 support begin +++
    
    CI R3,6        * check for 99/4
    JNE LP9
    MOVB R0,@>8C00 * extra blank line for 99/4
    
    * +++ 99/4 support end +++
    * no changes needed if this block removed
    
    LP9
    MOVB @>9800,@>8C00  * copy a byte (both sides autoincrement)
    DEC R0
    JNE LP9
    
    DEC R2         * next character
    JNE LP8
    
    B *R10
    
    FINISH EQU $
    SLAST  END
    

    fredcarts.bin


  6. Haven't had a chance to look at your code yet, but I have two now.. Tursi graciously wrote some as well, and like you, used DATA statements...

     

    * THREE PROGRAM HEADER FOR 64K BANKED
    * SWITCHED CART
          DEF SFIRST,SLAST,SLOAD
          UNL
    
    * ROM HEADER
          AORG >6000
    
    SFIRST EQU $
    SLOAD  EQU $
    
    GRMHDR BYTE >AA,1,1,0,0,0
          DATA PROG
          BYTE 0,0,0,0,0,0,0,0
    
    PROG   DATA PROG2
          DATA CF2K
          BYTE 8
          TEXT 'CF2K 1.4'
          EVEN
    
    PROG2  DATA 0
          DATA DM2K
          BYTE 8
          TEXT 'DM2K 1.4'
          EVEN
    
    MINIT  EQU $
          LWPI >8300
    
    ***************
    * Copy Data for Modules *
    * Format is:
    * First, the address to load for the first source bank.
    * Number of 32-bit words, source address, target address
    * To end list, provide a start address greater than >8000
    * (This means you can't start in the low RAM bank)
    ***************
    CF2KDAT DATA >6000
    	DATA >076A,>6258,>A000,>076A,>6258,>BDA8
    	DATA >076A,>6258,>DB50,>04C0,>6D00,>2000
    	DATA >A000
    
    DM2KDAT DATA >6008
    	DATA >072A,>6358,>A000,>072A,>6358,>BCA8
    	DATA >072A,>6358,>D950,>072A,>7400,>2000
    	DATA >A000
    
    ***************
    * CF2K Module *
    ***************
    CF2K	LI R14,CF2KDAT	 * address of copy table
    	JMP COPYLP
    
    ***************
    * DM2K Module *
    ***************
    DM2K	LI R14,DM2KDAT	 * address of copy table
    	JMP COPYLP
    
    ***************
    * Common Code *
    ***************
    COPYLP	BL @GOGO * Set up Char Sets
    
    	MOV *R14+,R7	 * get bank
    
    ONEBLK	MOV *R14+,R4	 * Get bytes divided by 4
    	JGT CONT		 * Branch if positive (less than >8000)
    	B *R4			 * Else it's the jump address, so start the program
    
    CONT	MOV *R14+,R9	 * Address to copy from
    	MOV *R14+,R10	 * Address to copy to
    	BL @COPYME		 * COPY IT!
    
    	INCT R7			 * Next Bank
    
    	JMP ONEBLK
    
    ****************
    * Copy Routine *
    ****************
    * R4  - Bytes Div 4
    * R7  - Bank switch address
    * R9  - Address to copy from
    * R10 - Address to copy to
    * R11 - Return spot, save it to R8
    
    COPYME
       MOV R0,*R7   * Do the bank switch
    LOOPIT
       MOV *R9+,*R10+
       MOV *R9+,*R10+
       DEC R4
       JNE LOOPIT
       B *R11         * We're done.
    
    ****************************
    * Load lower case charsets *
    ****************************
    * Note, if you still need space, you can remove support for the
    * 99/4 by deleting the code marked between * +++ 99/4 support +++ begin/end
    blocks
    
    GOGO
    MOV R11,R9   * Save our return spot
    
    * +++ 99/4 support begin +++
    
    * load R3 with 6 for 99/4, or 7 for 99/4A
    CLR R0
    BL @GPLSET
    BL @GETGPL   * read GROM >0000
    LI R3,7
    CI R0,>AA01  * 99/4 is AA01, all versions of 99/4A seem to be AA02 (even
    2.2!)
    JNE IS4A     * note we also assume unknown is 99/4A just to be safe
    DEC R3
    
    * make a copy of the capitals for the 99/4 to 'support' lowercase
    * this will be partially overwritten by the main set, but it works!
    
    LI R0,>0018  * GPL vector address
    LI R1,>4A00  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    JMP MNSET
    
    * +++ 99/4 support end +++
    * If you delete the above block, replace with
    * LI R3,7
    * so that the character size counter is still valid
    
    IS4A
    * 'lowercase' letters
    LI R0,>004A  * GPL vector address (not available for 99/4)
    LI R1,>4B00  * dest in VDP - must OR with >4000 for write
    LI R2,>001F  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    
    * main set
    MNSET
    LI R0,>0018  * GPL vector address
    LI R1,>4900  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    B *R9        * RETURN TO CALLER
    
    *****************
    * GROM routines *
    *****************
    
    * Set GROM address
    GPLSET
    MOVB R0,@>9C02
    SWPB R0
    MOVB R0,@>9C02
    B *R11
    
    * Get a word from GPL
    GETGPL
    MOVB @>9800,R0
    SWPB R0
    MOVB @>9800,R0
    SWPB R0
    B *R11
    
    * Copy R2 characters from a GPL copy function vectored at
    * R0 to VDP R1. GPL vector must be a B or BR and
    * the first actual instruction must be a DEST with an
    * immediate operand. Set R3 to 6 for 99/4 (6 byte characters)
    * or 7 for a 99/4A (7 byte characters)
    GPLVDP
    MOV R11,R10    * save return address
    BL @GPLSET     * set GROM address
    BL @GETGPL     * Get branch instruction (not verified!)
    ANDI R0,>1FFF  * mask out instruction part
    AI R0,3        * skip instruction and destination
    BL @GPLSET     * set new GROM address
    BL @GETGPL     * get actual address of the table
    BL @GPLSET     * and set that GROM address - GROM is now ready!
    
    SWPB R1        * assume VDP is already prepared for write to save space
    MOVB R1,@>8C02
    SWPB R1
    MOVB R1,@>8C02 * VDP is now ready!
    
    CLR R0
    LP8
    MOVB R0,@>8C00 * pad the top of the char with a space
    MOV R3,R0      * then copy 7 (or 6) bytes
    
    * +++ 99/4 support begin +++
    
    CI R3,6        * check for 99/4
    JNE LP9
    MOVB R0,@>8C00 * extra blank line for 99/4
    
    * +++ 99/4 support end +++
    * no changes needed if this block removed
    
    LP9
    MOVB @>9800,@>8C00  * copy a byte (both sides autoincrement)
    DEC R0
    JNE LP9
    
    DEC R2         * next character
    JNE LP8
    
    B *R10
    
    FINISH EQU $
    SLAST  END
    

     

    I'll probably have time to continue with this next week... but my goal is to get a Fred Kaal cart with all of his programs in it, menu driven! :)


  7. R0 is simply being used to make a write to ROM to do the bank switch. There can be any value in R0 (from what I understand) - what counts is you are writing to a specific ROM address for the bank switch to happen.

     

    So, from what I'm understanding is that I should only have one copy of the values for each module's headers - since the values/instructions are the same across all three modules, it shouldn't matter that I perform a bank switch; it's going to pick up from the bank I'm in, and the length for those instructions will be the same?

     

    How would you set up the entry points in the header this way?


  8. Short... I'm trying to make a 128K EPROM image with Fred's awesome disk utilities all in one EPROM (all selectable from the menu.)

     

    Fred's programs are "copy to 32K and run", which works rather well. I can do this with almost an EA/5 program thanks to some initial advice/code from Tursi.

     

    I have managed to "adapt" my header code to work with DM2K and CF2K to put them both in a 64K Cart, but I'm trying to add DU2K. Problem: The code for the three program header is >60 bytes too long. I need it to stop before >1B0 when compiled into a PROGRAM image, and instead, it stops at >210. The "two program" header (i.e. I cut out the DU2K chunk of the code) stops at >1A0, so it would work...

     

    * THREE PROGRAM HEADER FOR 128K BANKED
    * SWITCHED CART
          DEF SFIRST,SLAST,SLOAD
          UNL
    * ROM HEADER
          AORG >6000
    SFIRST EQU $
    SLOAD  EQU $
    GRMHDR BYTE >AA,1,1,0,0,0
          DATA PROG
          BYTE 0,0,0,0,0,0,0,0
    PROG   DATA PROG2
          DATA CF2K
          BYTE 8
          TEXT 'CF2K 1.4'
          EVEN
    PROG2  DATA PROG3
          DATA DM2K
          BYTE 8
          TEXT 'DM2K 1.4'
          EVEN
    PROG3  DATA 0
          DATA DU2K
          BYTE 8
          TEXT 'DU2K 2.0'
          EVEN
    MINIT  EQU $
          LWPI >8300
    
    ***************
    * CF2K Module *
    ***************
    CF2K   BL @GOGO * Set up Char Sets
    
    * >6000 (highest bank)
          LI R7,>6000       * BANK TO SELECT
          LI R4,>076A       * BYTES DIV 4
          LI R9,>6258       * ADDRESS TO COPY FROM
          LI R10,>A000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >6002 (2nd highest bank)
          LI R7,>6002       * BANK TO SELECT
          LI R4,>076A       * BYTES DIV 4
          LI R9,>6258       * ADDRESS TO COPY FROM
          LI R10,>BDA8      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >6004 (3rd highest bank)
          LI R7,>6004       * BANK TO SELECT
          LI R4,>076A       * BYTES DIV 4
          LI R9,>6258       * ADDRESS TO COPY FROM
          LI R10,>DB50      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >6006 (4th highest bank)
          LI R7,>6006       * BANK TO SELECT
          LI R4,>04C0       * BYTES DIV 4
          LI R9,>6D00       * ADDRESS TO COPY FROM
          LI R10,>2000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * ALRIGHT, WE'RE DONE.  LET'S GO!
    
          B @>A000
    
    ***************
    * DM2K Module *
    ***************
    DM2K    BL @GOGO  * Set up Char Sets
    
    * >6008 (5th highest bank)
          LI R7,>6008       * BANK TO SELECT
          LI R4,>072A       * BYTES DIV 4
          LI R9,>6358       * ADDRESS TO COPY FROM
          LI R10,>A000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600A (6th highest bank)
          LI R7,>600A       * BANK TO SELECT
          LI R4,>072A       * BYTES DIV 4
          LI R9,>6358       * ADDRESS TO COPY FROM
          LI R10,>BCA8      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600C (7th highest bank)
          LI R7,>600C       * BANK TO SELECT
          LI R4,>072A       * BYTES DIV 4
          LI R9,>6358       * ADDRESS TO COPY FROM
          LI R10,>D950      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600E (8th highest bank)
          LI R7,>600E       * BANK TO SELECT
          LI R4,>072A       * BYTES DIV 4
          LI R9,>7400       * ADDRESS TO COPY FROM
          LI R10,>2000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * ALRIGHT, WE'RE DONE.  LET'S GO!
    
          B @>A000
    
    ***************
    * DU2K Module *
    ***************
    DU2K    BL @GOGO 
    
    * >6008 (5th highest bank)
          LI R7,>6010       * BANK TO SELECT
          LI R4,>0794       * BYTES DIV 4
          LI R9,>61B0       * ADDRESS TO COPY FROM
          LI R10,>A000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600A (6th highest bank)
          LI R7,>6012       * BANK TO SELECT
          LI R4,>0794       * BYTES DIV 4
          LI R9,>61B0       * ADDRESS TO COPY FROM
          LI R10,>BE50      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600C (7th highest bank)
          LI R7,>6014       * BANK TO SELECT
          LI R4,>0794       * BYTES DIV 4
          LI R9,>61B0       * ADDRESS TO COPY FROM
          LI R10,>DCA0      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * >600E (8th highest bank)
          LI R7,>6016       * BANK TO SELECT
          LI R4,>0794       * BYTES DIV 4
          LI R9,>7000       * ADDRESS TO COPY FROM
          LI R10,>2000      * ADDRESS TO COPY TO
          BL @COPYME        * COPY IT!
    
    * ALRIGHT, WE'RE DONE.  LET'S GO!
    
          B @>A000
    
    ****************
    * Copy Routine *
    ****************
    * R4  - Bytes Div 4
    * R7  - Bank switch address
    * R8  - Return for BL @COPYME
    * R9  - Address to copy from
    * R10 - Address to copy to
    * R11 - Return spot, save it to R8
    
    COPYME
       MOV R11,R8   * Save our Return Spot
       MOV R0,@R7   * Do the bank switch
    LOOPIT
       MOV *R9+,*R10+
       MOV *R9+,*R10+
       DEC R4       
       JNE LOOPIT
       B *R8         * We're done.
    
    ****************************
    * Load lower case charsets *
    ****************************
    * Entry point here - ideally put this code first in your ROM
    * load R3 with 6 for 99/4, or 7 for 99/4A
    GOGO
    MOV R11,R9   * Save our return spot
    CLR R0
    BL @GPLSET
    BL @GETGPL   * read GROM >0000
    LI R3,7
    CI R0,>AA01  * 99/4 is AA01, all versions of 99/4A seem to be AA02 (even 2.2!)
    JNE IS4A     * note we also assume unknown is 99/4A just to be safe
    DEC R3
    
    * make a copy of the capitals for the 99/4 to 'support' lowercase
    * this will be partially overwritten by the main set, but it works!
    LI R0,>0018  * GPL vector address
    LI R1,>4A00  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    JMP MNSET
    
    IS4A
    * 'lowercase' letters
    LI R0,>004A  * GPL vector address (not available for 99/4)
    LI R1,>4B00  * dest in VDP - must OR with >4000 for write
    LI R2,>001F  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    
    * main set
    MNSET
    LI R0,>0018  * GPL vector address
    LI R1,>4900  * dest in VDP - must OR with >4000 for write
    LI R2,>0040  * how many chars
    BL @GPLVDP   * this function goes somewhere later in your ROM
    B *R9        * RETURN TO CALLER
    
    *****************
    * GROM routines *
    *****************
    * Set GROM address
    GPLSET
    MOVB R0,@>9C02
    SWPB R0
    MOVB R0,@>9C02
    B *R11
    
    * Get a word from GPL
    GETGPL
    MOVB @>9800,R0
    SWPB R0
    MOVB @>9800,R0
    SWPB R0
    B *R11
    
    * Copy R2 characters from a GPL copy function vectored at
    * R0 to VDP R1. GPL vector must be a B or BR and
    * the first actual instruction must be a DEST with an
    * immediate operand. Set R3 to 6 for 99/4 (6 byte characters)
    * or 7 for a 99/4A (7 byte characters)
    GPLVDP
    MOV R11,R10    * save return address
    BL @GPLSET     * set GROM address
    BL @GETGPL     * Get branch instruction (not verified!)
    ANDI R0,>1FFF  * mask out instruction part
    AI R0,3        * skip instruction and destination
    BL @GPLSET     * set new GROM address
    BL @GETGPL     * get actual address of the table
    BL @GPLSET     * and set that GROM address - GROM is now ready!
    
    SWPB R1        * assume VDP is already prepared for write to save space
    MOVB R1,@>8C02
    SWPB R1
    MOVB R1,@>8C02 * VDP is now ready!
    
    CLR R0
    
    LP8
    MOVB R0,@>8C00 * pad the top of the char with a space
    MOV R3,R0      * then copy 7 (or 6) bytes
    CI R3,6        * check for 99/4
    JNE LP9
    MOVB R0,@>8C00 * extra blank line for 99/4
    
    LP9
    MOVB @>9800,@>8C00  * copy a byte (both sides autoincrement)
    DEC R0
    JNE LP9
    
    DEC R2         * next character
    JNE LP8
    
    B *R10
    
    FINISH EQU $
    SLAST  END
    

     

    I've attached the 64K EPROM image for DM2K and CF2K, as well as the compiled PROGRAM image for both the 3 and 2 bank headers.

    DM2K_CF2K.bin

    HEADER2.BIN

    HEADER3_PROGS.BIN


  9. I'll thread jack for a second.

     

    I want to do something like this, but according to my Compute! assembly book, you can't redefine equates:

    ***************
    * CF2K Module *
    ***************
    
    CF2K   BL @GOGO * Set up Char Sets
    
    * >6000 (highest bank)
    BANKTO EQU >6000 * BANK TO SELECT
    BYTCNT EQU >076A * BYTES DIV 4
    ADRFRM EQU >6258 * ADDRESS TO COPY FROM
    ADRTO  EQU >A000 * ADDRESS TO COPY TO
          BL @COPYME * COPY IT!
    
    * >6002 (2nd highest bank)
    BANKTO EQU >6002 * BANK TO SELECT
    BYTCNT EQU >076A * BYTES DIV 4
    ADRFRM EQU >6258 * ADDRESS TO COPY FROM
    ADRTO  EQU >BDA8 * ADDRESS TO COPY TO
          BL @COPYME * COPY IT!
    
    * >6004 (3rd highest bank)
    BANKTO EQU >6004 * BANK TO SELECT
    BYTCNT EQU >076A * BYTES DIV 4
    ADRFRM EQU >6258 * ADDRESS TO COPY FROM
    ADRTO  EQU >DB50 * ADDRESS TO COPY TO
          BL @COPYME * COPY IT!
    
    * >6006 (4th highest bank)
    BANKTO EQU >6006 * BANK TO SELECT
    BYTCNT EQU >04C0 * BYTES DIV 4
    ADRFRM EQU >6D00 * ADDRESS TO COPY FROM
    ADRTO  EQU >2000 * ADDRESS TO COPY TO
          BL @COPYME * COPY IT!
    
    ... later down in the code ...
    
    ****************
    * Copy Routine *
    ****************
    COPYME
        MOV R11,R8     * Save our Return Spot
        MOV R0,@BANKTO * Do the bank switch
        LI R4,BYTCNT 
        LI R9,ADRFRM
        LI R10,ADRTO
    LOOPIT
        MOV *R9+,*R10+
        MOV *R9+,*R10+
        DEC R4       
        JNE LOOPIT
        B *R8         * We're done…
    

     

    My goal is to save the code from having to be rewritten three times. Thoughts?


  10. If we can get 50 preorders right here on Atariage, that would force Filip to complete this masterpiece and sell out.... Then he can create the assembly version of Honeycomb Rapture and I can order a run or cartridge boards myself and DO IT UP!!!! :) hehehe--- Tutankham is gonna be amazing. Thanks all around to Filip for being the champion he is for our community!!

     

    Let me know if you wind up needing to do a run of boards; I can put you in contact with the local place I used. The $400 tooling fee is already paid for future runs. A run of 250 was approx $2500 by the time you pay the board house for production/assembly and also buy 74LS379 chips, spare cart cases, etc. This would go down to $2100 for 250 since the tooling fee is already paid.

     

    - acadiel


  11. Just an update...

     

    Bob and Larry now have their shipments and are beginning the process of invoicing everyone and packing/shipping them. Please stay tuned and send them any questions you might have. I've also been shipping mine gradually, and some people might already have them in their mailboxes.

     

    As for the assembled spares that I had (qty 12), I'm waiting on one person to decide quantities, but it looks like that three-four extra people will be taking the assembled spares.

     

    However, fear not! I will likely have some unassembled kits that I will sell (I'm not assembling them), that were spare parts from the run that I purchased to get the inventory off of ACC Electronix's books. (I think like 13 boards and probably 100 of the 68 ohm resistors were spare. Anyone need resistors?) I think I have enough personal spare components to make approximately 10-12 more unassembled kits. Stay tuned, I will make an announcement about those after I do a parts inventory.


  12. Hi, Everyone -

     

    The boxes are off to Bob and Larry (I took a double take at those names together for a second, and then remembered Bob and Larry are in VeggieTales <grin>). They should have both boxes in by the end of the week and will let everyone know (either on here or via e-mail) that they are ready to start shipping.

     

    I would like to sincerely thank them for their help.

     

    I'll start e-mailing my folks (quantity 1, 4, and 10) their cart postage/handling invoices by the end of the week. I really do appreciate everyone's patience while we had the board house manufacture the boards, and divvied up the logistics about how to best to get them to you.


  13. Thanks go to Larry Correa and Bob Kaspar from the Yahoo TI-99/4A OLUG for helping with the cartridge board

    shipments.

     

    Here's how we're doing it... look at the bottom table for the quantity you

    ordered. This will tell you who is going to be sending you an e-mail about your

    shipping costs, and who will be invoicing you for postage/handling. (We don't

    make money on this, so you will be billed actual postage, plus a small handling

    charge that will cover packing tape, box, and e-commerce fees). You will pay

    the person sending you the invoice, and they will ship the boards to you. :)

     

    Qty - Person shipping

    --- ---------------

    2 - Larry Correa (14 orders)

    3 - Bob Kaspar (15 orders)

    5 - Bob Kaspar

    15 - Bob Kaspar

    1 - Jon Guidry (14 orders)

    4 - Jon Guidry

    10 - Jon Guidry

    50 - Jon Guidry

     

    I will ship the boards either Monday or Tuesday to Bob and Larry, and then will

    start sending out my invoices. If you ordered extras from me (i.e. an EPROM,

    etc), then whomever has your order (myself, Bob, or Larry) will ship them to you

    with your order, and you will pay me directly for the EPROMs themselves.

     

    Please wait until you receive your invoice - Bob and Larry do not have the

    boards in their hands yet, do not yet know how much they weigh, etc, so they

    can't tell you how much you owe for postage/handling until they get those and

    separate them out into the actual orders. Likewise, I still need to box and

    weigh my 14 orders.

     

    Thanks, all!


  14. Hopefully, the 64K cartridge board orders will start shipping soon. I'm trying to figure out what kind of box that we will be using to ship most of the orders. The ones from the last batch won't fit (6x4x2), because cartridge cases will be included this time. I'm thinking of moving up to 6x6x4 boxes. Bear with me, as we have over 40 orders that we will need to pack, weigh, invoice, and ship out. I have one person who might be helping me (thank you!!). We will also need to order the boxes, pick up packing tape, etc.

     

    The boards were finished today - in order to have them certified RoHS compliant, I had to personally put in the 250 74LS379 chips myself, and helped to bag them in ASD bags, then ASD bubble wrap. I tried one of the boards in my /4A and it works great!

     

    Please see the pictures here (There's eight in total that I took today): http://www.facebook.com/photo.php?pid=3681926&l=e578878710&id=571432449

     

    The boards are constructed with a lead-free finish, and any re-work on them (hacking, etc) needs to be completed with SN100C or any other RoHS compliant solder. Please do not use lead/tin type solder on these, as you will likely have issues later down the road. These boards were certified RoHS compliant (except the 74LS379), so our fellows over in Europe shouldn't have any issues with them. They were all wave soldered, and all exposed joints were covered :-)

     

    I will likely have some blank boards (without components) that I will put up for sale after the dust is settled. I will also know how many assembled spares I have for people on the waiting list.

     

    Thanks for everyone's patience. I might move a little slowly on this, but it's to keep my sanity and to keep my wife from being too upset with me. (She's already upset I did a third batch.. <g>)


  15. Akator, I don't plan on making another run of them myself. I've so far had over 450 of them made (not including prototypes), and I've reached the limit of my wife's patience. The board tooling charge had been paid at the board house, so future runs are available if someone wants to take them on. They will just simply charge you the per-board cost plus shipping for the whole batch, and you will need to procure the 74LS379 chips as well.


  16. I just find it strange the guy doesn't want to release it. It really was PB's intellectual property; he was an employee of PB when it was made. Did the author even have the legal right to impose restrictions on Toucan so that he couldn't release it?

    No, I hardly think he has the power (or the desire) to legally enforce whatever "contract" he signed with Toucan, but that's not really the point. Silly as it may be, Toucan has an obligation to honor whatever deal he made with the guy, even if it was just a handshake deal. Burning bridges with people is not a smart practice.

     

    I agree. It's an agreement between two parties, and I don't want to see Toucan break his word. I think my point is that I just find it strange that this person is putting such strange controls around IP that doesn't even technically belong to him. I bet Hasbro doesn't even care at this point, nor does Atari (the owner of the PB IP).


  17. I just find it strange the guy doesn't want to release it. It really was PB's intellectual property; he was an employee of PB when it was made. Did the author even have the legal right to impose restrictions on Toucan so that he couldn't release it?

     

    Nevertheless, Retroclouds will do a kick butt re-release :-) See what happens when you hoard something, Steven? :-)

     

    FYI, here was his note to me back in December 2008:

     

    --------

    Steven Zedeck to me 12/22/08

    Hi Jon,

    Yes, I did sell one of my Tut boards to Brian about a year ago. Under contract he is unable to duplicate or sell it. I still have a couple more but they can not be given away. Sorry.

    Steve

    --------

×
×
  • Create New...