Jump to content
IGNORED

1 Meg Super AMS Discussion Thread


Omega-TI

Recommended Posts

  • 3 weeks later...
  • 1 month later...

For those looking to do some surgery on the SAMS board, look at the A3-SAMS-P1(R5) circuit diagram in this post.everything you need to know to attempt a 4M modification of your board is identified there--but you will need to write your own test software to verify operation above page 256 (and up to page 1024). I also spent this evening sussing out the last of the circuitry necessary to build a full 16M version of the board (if using 2048K NVRAM chips) or just 4M (if using 512K chips). I'm about finished with the Schematic--now I just have to do a new board layout. Note: I'll be doing an update to the existing 1M board long before I get to the 16M board--and both would have their place, as two of the NVRAM chips on a 4M board are cheaper than 8 of the 512K chips on the larger board--and filling the entire bank of eight chips with the NVRAM chips would be well over $200, bringing the total board price into the $275-$300 range, which is a bit too much for most folks wanting a memory card (especially as no software is out there that takes advantage of that much extra space yet). I suspect the real sweet spot will be the 1M/4M board, as it is relatively low priced and adds a lot of potential. Do let me know if you think I'm wrong about the marketability here (but I'll probably eventually build both variants in any event, just because it looks like fun).

  • Like 1
Link to comment
Share on other sites

If you were to write a test program for the SAMS board, what would you like to see?

 

1. Automatically detect SAMS memory size?

2. Fill all banks with random patterns and verify

3. Cycle through all banks, speed test, burn-in test

4. Memory viewer (have that already, would need to enhance for SAMS)

5. ??

 

Ideas anyone? Thinking about a cartridge ROM for testing SAMS and currently collecting requirements :-)

  • Like 2
Link to comment
Share on other sites

I like the idea of another program that tests all versions of the board no matter what the size. Note that the 16M version of the board would have 4096 pages of SAMS memory and the properly built-out version of the 4M board would have 1024 pages. AMSTEST4 works great, but seeing another take on the concept would be interesting--especially as a stand-alone cartridge.

Link to comment
Share on other sites

My comment wasn't really about cost, Omega--it was more a recognition of utility. A stand-alone cartridge version works in the FR99 out of the box--assuming it ends up being of a size small enough to fit into it. As to whether or not the user chooses to use a pre-made cartridge or the FR99, it is just that, a personal choice. In that vein, the use of a pre-made cartridge is actually preferable in certain circumstances, specifically hardware testing (which is what this program would be designed to do), as a standard cartridge can be switched out a lot more easily than a FlashROM image can (the FlashROM is great for storing a lot of programs and keeping them at your fingertips, but so are the multicarts). I say that because the utilities I'd be switching to would require a different cartridge in any case--and most of those choices won't fit into the FR99. Note that would be my personal use-case, and it is one that I can personally support by making my own cartridges. I have a pair of the FR99s too, I just don't use them as much as you do (and my boys tend to use the physical cartridges too, as they like them better for some reason.

 

Your use case for cartridge software is obviously different, and that's OK too. :) :) :)

 

The real thing that is important here is that Retroclouds is working on some new software for the SuperAMS--and I really like that idea. . . :) :) :) :) :) :)

  • Like 1
Link to comment
Share on other sites

If you were to write a test program for the SAMS board, what would you like to see?

 

1. Automatically detect SAMS memory size?

2. Fill all banks with random patterns and verify

3. Cycle through all banks, speed test, burn-in test

4. Memory viewer (have that already, would need to enhance for SAMS)

5. ??

 

Ideas anyone? Thinking about a cartridge ROM for testing SAMS and currently collecting requirements :-)

I could write a RXB version of that so could be changed and updated easy.

Also now I would have to fix the SAMS test to check for any size.

Link to comment
Share on other sites

Rich, the only updated sizes you would have to worry about are 1024 pages and 4096 pages, as that will cover all of the additional possibilities for properly populated boards.

Cool as the original would check for 32K, 64K, 128K, 256K, 512K and 1024K so was a pig for code to work.

 

Just checking for 1Meg or 4Meg would be simple in RXB, but would write a XB version anyone could modify to do all the testing you wanted.

 

This is the RXB version in 2015E

10 ! THIS PROGRAM HAS BEEN
11 ! MODIFIED SO NO ASSEMBLY
12 ! IS USED. RXB COMMANDS
13 ! ARE THE ONLY COMMANDS
14 ! USED. THAT MEANS THE
15 ! AMS CAN HAVE ANY PAGE
16 ! SWAPED FROM RXB.
17 !*********************
18 !*                   *
19 !*    XB AMS CARD    *
20 !*   QUERY PROGRAM   *
21 !*                   *
22 !*********************
23 !VERSION 1.07.951206
24 !BY P. E. SCHIPPNICK
25 !MODIFIED FOR RXB
26 !BY RICH GILBERTSON
27 CALL CLEAR :: GOSUB 28 :: GOTO 29
28 CALL VCHAR(1,31,31,96) :: RETURN
29 FOR I=1 TO 14 :: CALL COLOR(I,2, :: NEXT I
30 CALL SCREEN(15)
31 GOTO 33
32 DISPLAY AT(ROW,(28-LEN(TEXT$))/2):TEXT$ :: RETURN
33 ROW=10 :: TEXT$="TI EXTENDED BASIC" :: GOSUB 32
34 ROW=11 :: TEXT$="AMS CARD" :: GOSUB 32
35 ROW=12 :: TEXT$="QUERY PROGRAM" :: GOSUB 32
36 ROW=13 :: TEXT$="VERSION 1.07" :: GOSUB 32
37 ROW=15 :: TEXT$="BY P. E. SCHIPPNICK" :: GOSUB 32
38 ROW=17 :: TEXT$="MODIFIED FOR RXB" :: GOSUB 32
39 ! SET-UP ASSEM SUPPORT
40 GOSUB 109
41 ! TEST MAP/PASS
42 GOSUB 112
43 ! TEST FOR AMS SIZE
44 GOSUB 91
45 ! MAPPED PAGES
46 GOSUB 60
47 IF M2=M3 THEN CALL CLEAR :: GOSUB 28 :: PRINT:"* NO AMS CARD" :: CALL SOUND(150,219,5) :: END
48 CALL CLEAR :: GOSUB 28
49 ROW=1 :: TEXT$=" *** AMS QUERY PROGRAM ***" :: GOSUB 32 :: ROW=2 :: TEXT$="VERSION 1.07" :: GOSUB 32
50 AMSSIZE$=STR$(AMSSIZE)&"K RAM"
51 ROW=8 :: TEXT$=" AMS MEMORY = "&AMSSIZE$ :: GOSUB 32
52 IF MAPON=0 THEN ROW=12 :: TEXT$=" AMS CARD 32K PASS MODE" :: GOSUB 32 :: GOTO 59
53 ROW=9 :: TEXT$=" AMS IN MAPPED MEMORY MODE" :: GOSUB 32
54 ROW=12 :: TEXT$="PAGES 8K MEMORY:" :: GOSUB 32
55 ROW=13 :: TEXT$=STR$(M2+O*(M2>=O))&" "&STR$(M3+O*(M3>=O)) :: GOSUB 32
56 ROW=15 :: TEXT$="PAGES 24K MEMORY:" :: GOSUB 32
57 ROW=16 :: TEXT$=STR$(MA+O*(MA>=O))&" "&STR$(MB+O*(MB>=O))&" "&STR$(MC+O*(MC>=O))&" "&STR$(MD+O*(MD>=O))&" "&STR$(ME+O*(ME>=O))&" "&STR$(MF+O*(MF>=O)) :: GOSUB 32
58 ROW=18 :: TEXT$="1-"&STR$(AMSSIZE/4)&" PAGES AVAILBLE." :: GOSUB 32
59 END
60 ! MAPPED AT 23ABCDEF
61 CALL AMSON
62 CALL PEEK(24548,M2) :: CALL PEEK(24550,M3) :: CALL PEEK(24564,MA) :: CALL PEEK(24566,MB) :: CALL PEEK(24568,MC) :: CALL PEEK(24570,MD) :: CALL PEEK(24572,ME)
63 CALL PEEK(24574,MF)
64 CALL AMSOFF
65 RETURN
66 ! MAP 2,3,A,B,C,D,E,F
67 CALL AMSON
68 CALL LOAD(24548,2) :: CALL LOAD(24550,3) :: CALL LOAD(24564,10) :: CALL LOAD(24566,11) :: CALL LOAD(24568,12) :: CALL LOAD(24570,13) :: CALL LOAD(24572,14)
69 CALL LOAD(24574,15)
70 CALL AMSOFF
71 RETURN
72 ! MAP 23 ABCDEF
73 GOSUB 66
74 CALL AMSMAP
75 RETURN
76 ! MAP 23 ABCDEF
77 GOSUB 66
78 CALL AMSPASS
79 RETURN
80 ! MAP MODE ON/OFF
81 CALL AMSON :: CALL PEEK(-31804,H1,H2) :: IF H1+H2 THEN CALL ISROFF(ADDRESS)
82 CALL PEEK(24548,M2) :: CALL PEEK(24550,M3) :: CALL LOAD(24550,M2) :: CALL PEEK(8198,A1,B1) :: CALL PEEK(12294,A2,B2)
83 IF A1=A2 AND B1=B2 THEN MAPON=1 ELSE MAPON=0
84 CALL LOAD(24550,M3)
85 IF H1+H2 THEN CALL ISRON(ADDRESS)
86 CALL AMSOFF
87 RETURN
88 CALL PEEK(12288,OLDV) :: NEWV=255-OLDV :: CALL LOAD(12288,NEWV) :: CALL PEEK(12288,TESTV) :: IF TESTV<>OLDV AND TESTV=NEWV THEN MEM=1 ELSE MEM=0
89 IF MEM=1 THEN CALL LOAD(12288,OLDV)
90 RETURN
91 ! FIND AMS SIZE
92 GOSUB 80 :: IF MAPON=0 THEN GOSUB 72
93 CALL PEEK(-31804,H1,H2) :: IF H1+H2 THEN CALL ISROFF(ADDRESS)
94 ! MAP LOWER PAGES 23
95 CALL AMSON :: CALL PEEK(24548,M2) :: CALL PEEK(24550,M3)
96 CALL LOAD(24548,2,"",24550,3) :: GOSUB 109
97 CALL PEEK(8194,MB1,LB1,MB2,LB2) :: CALL LOAD(8194,MB2,LB2,MB1,LB1)
98 ! 1024K/4=240 PAGES
99 E=256 :: CALL PEEK(24550,M3)
100 CALL LOAD(24550,2+E) :: CALL PEEK(12290,A,B,C,D) :: IF A=MB2 AND B=LB2 AND C=MB1 AND D=LB1 THEN AMSSIZE=E*4 :: GOTO 104
101 GOSUB 88 :: IF MEM=0 THEN AMSSIZE=E*4 :: GOTO 104
102 E=E+32 :: IF E<255 THEN 100
103 AMSSIZE=E*4
104 CALL LOAD(24550,2) :: CALL LOAD(8194,MB1,LB1,MB2,LB2) :: CALL LOAD(24548,M2,"",24550,M3)
105 IF MAPON=0 THEN CALL AMSPASS
106 IF H1+H2 THEN CALL ISRON(ADDRESS)
107 CALL AMSOFF
108 RETURN
109 ! EXPANSION MEMORY?
110 CALL PEEK(-31863,A) :: IF A<>231 THEN CALL SOUND(150,218,0) :: PRINT "* NO EXPANSION MEMORY" :: STOP
111 RETURN
112 ! TEST MAP/PASS MODE?
113 CALL AMSON :: CALL PEEK(24544,M0) :: CALL LOAD(24544,0) :: CALL PEEK(24544,O) :: CALL LOAD(24544,M0) :: CALL AMSOFF :: RETURN
114 END

Link to comment
Share on other sites

Well here is a easy fix for it:

98 ! 4096K/4=1024 PAGES
99 E=256 :: CALL PEEK(24550,M3)
100 CALL LOAD(24550,2+E) :: CALL PEEK(12290,A,B,C,D) :: IF A=MB2 AND B=LB2 AND C=MB1 AND D=LB1 THEN AMSSIZE=E*4 :: GOTO 104

! Now you have not said how I go above 255 pages in a single register so I need more info on how to do this, 
! but this does show all SAMS sizes just by doing the math for size.
! Or I could do this:

98 ! 4096/4=1024
99 E=1024 :: call PEEK(24550,M3) ! THIS IS THE HIGHEST PLACE FOR REGISTER M3=>3000 4K PAGE.

So how do I go above 255 pages?

Link to comment
Share on other sites

The registers on the chip include four data bits on the input side that were tied to ground in the earlier iterations of the SAMS cards. By sending a two-byte data string to the 612 (leaving all but the last two bits as "0" for a 4M board or all but the last four bits as "0" for the 16M board), you can access the portion of the 612 that was being ignored. During the write operations, the odd byte is written first (and latched), followed by the even byte (the only one you use now). Thierry Nouspikel did a great job of explaining the process on his TI Tech Pages. Skim down to the section on possible extensions to the SAMS board he described and you'll see what I'm talking about. I use a completely different chip select logic than he did, but that is dictated by the differences in the memory chips I plan to use with the board.

Link to comment
Share on other sites

Ok I am working with GPL to switch page and use Assembly to just turn on the CRU bits.

[2623]               ***********************************************************
[2624]               ***********************************************************
[2625]               * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE AMSCPU      *
[2626]               ***********************************************************
[2627]               *                 *        AORG >8300
[2628] CFBA 83,02    AMSCRU DATA >8302 * CPUPGM DATA >8302      * First address.
[2629] CFBC 04,20           DATA >0420 *        BLWP @AMSCPU    * Switch contex
[2630] CFBE 83,0C           DATA >830C *
[2631] CFC0 04,E0           DATA >04E0 *        CLR  @>837C     * Clear for GPL
[2632] CFC2 83,7C           DATA >837C *
[2633] CFC4 04,5B           DATA >045B *        RT              * Return to GPL.
[2634]               ***********************************************************
[2635]               *                 * AMS CPU SUBPROGRAM
[2636] CFC6 83,4A           DATA >834A * AMSCPU DATA >834A
[2637] CFC8 83,10           DATA >8310 *        DATA AMSCRU
[2638] CFCA 02,0C           DATA >020C * AMSCRU LI   R12,>1E00
[2639] CFCC 1E,00           DATA >1E00 *
[2640] CFCE 1D,00           DATA >1D00 *        SBO  0
[2641] CFD0 03,80           DATA >0380 *        RTWP
[2642]               *                 *        END
[2643]               ***********************************************************
[2644]               * CPU PROGRAM FOR >8300 SCRATCH PAD CPU ISR HOOK ON  *
[2645]               ******************************************************
[2646]               *                  *        AORG >8300
[2647] CFD2 83,02    GISRON DATA >8302  *        DATA >8302
[2648] CFD4 C8,20           DATA >C820  *        MOV  @>834A,@>83C4
[2649] CFD6 83,4A           DATA >834A  *
[2650] CFD8 83,C4           DATA >83C4  *

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0048 
EQUATES ALCS-359
[2651] CFDA 04,E0           DATA >04E0  * EXIT   CLR  @>837C
[2652] CFDC 83,7C           DATA >837C  *
[2653] CFDE 04,5B           DATA >045B  *        RT
[2654]               *                  *        END
[2655]               ***********************************************************
[2656]               * CPU PROGRAM FOR >8300 SCRATCH PAD CPU ISR HOOK OFF *
[2657]               ******************************************************
[2658]               *                          AORG >8300
[2659] CFE0 83,02    GISROF DATA >8302 *        DATA >8302
[2660] CFE2 C8,20           DATA >C820 * ISROFF MOV  @>83C4,@>83C4
[2661] CFE4 83,C4           DATA >83C4 *
[2662] CFE6 83,C4           DATA >83C4 *
[2663] CFE8 13,05           DATA >1305 *        JEQ  NHOOK
[2664] CFEA C8,20           DATA >C820 *        MOV  @>83C4,@>834A
[2665] CFEC 83,C4           DATA >83C4 *
[2666] CFEE 83,4A           DATA >834A *
[2667] CFF0 04,E0           DATA >04E0 * NHOOK  CLR  @>83C4
[2668] CFF2 83,C4           DATA >83C4 *
[2669] CFF4 04,E0           DATA >04E0 *        CLR  @>837C
[2670] CFF6 83,7C           DATA >837C *
[2671] CFF8 04,5B           DATA >045B *        RT
[2672]               *                 *        END
[2673]               ***********************************************************

The other section:

[2878]               ******************************
[2879]               * CALL AMSMAP
[2880] D1A3 D1,BC    AMAP   DATA APASS
[2881] D1A5 06,41,4D        STRI 'AMSMAP'         
       D1A8 53,4D,41
       D1AB 50
[2882] D1AC D1,AE           DATA $+2
[2883] D1AE 06,D1,B3        CALL AMSMAP
[2884] D1B1 41,E3           BR   LDRET2
[2885] D1B3 06,D2,08 AMSMAP CALL AMSSUB
[2886] D1B6 BF,14,1D        DST  >1D01,@STORE
       D1B9 01
[2887] D1BA 52,15           BR   AMSBUS
[2888]               * CALL AMSPASS
[2889] D1BC D1,D6    APASS  DATA ARWOFF
[2890] D1BE 07,41,4D        STRI 'AMSPASS'         
       D1C1 53,50,41
       D1C4 53,53
[2891] D1C6 D1,C8           DATA $+2
[2892] D1C8 06,D1,CD        CALL AMSPAS
[2893] D1CB 41,E3           BR   LDRET2
[2894] D1CD 06,D2,08 AMSPAS CALL AMSSUB
[2895] D1D0 BF,14,1E        DST  >1E01,@STORE
       D1D3 01
[2896] D1D4 52,15           BR   AMSBUS
[2897]               * CALL AMSOFF
[2898] D1D6 D1,F0    ARWOFF DATA ARWON
[2899] D1D8 06,41,4D        STRI 'AMSOFF'          
       D1DB 53,4F,46
       D1DE 46
[2900] D1DF D1,E1           DATA $+2
[2901] D1E1 06,D1,E6        CALL AMSOFF
[2902] D1E4 41,E3           BR   LDRET2
[2903] D1E6 06,D2,08 AMSOFF CALL AMSSUB
[2904] D1E9 BF,14,1E        DST  >1E00,@STORE
       D1EC 00
[2905] D1ED 52,15           BR   AMSBUS
[2906] D1EF 00              RTN
[2907]               * CALL AMSON
[2908] D1F0 D2,1E    ARWON  DATA ISRON
[2909] D1F2 05,41,4D        STRI 'AMSON'              
       D1F5 53,4F,4E
[2910] D1F8 D1,FA           DATA $+2
[2911] D1FA 06,D1,FF        CALL AMSON
[2912] D1FD 41,E3           BR   LDRET2
[2913] D1FF 06,D2,08 AMSON  CALL AMSSUB
[2914] D202 BF,14,1D        DST  >1D00,@STORE
       D205 00
[2915] D206 52,15           BR   AMSBUS
[2916]               ******************************
[2917] D208 35,00,18 AMSSUB MOVE 24,@>8300,V@>03C0
       D20B A3,C0,00
[2918] D20E 31,00,18        MOVE 24,G@AMSCRU,@>8300
       D211 00,CF,BA
[2919] D214 00              RTN
[2920] D215 0F,F0    AMSBUS XML  >F0
[2921] D217 35,00,18        MOVE 24,V@>03C0,@>8300
       D21A 00,A3,C0
[2922] D21D 00              RTN 
[2923]               ******************************
[2924]               * CALL ISRON(variable)
[2925] D21E D2,45    ISRON  DATA ISROFF

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0053 
EQUATES ALCS-359
[2926] D220 05,49,53        STRI 'ISRON'           
       D223 52,4F,4E
[2927] D226 D2,28           DATA $+2
[2928] D228 06,CA,2D        CALL GLPARZ
[2929] D22B 06,CA,83        CALL SUBLP3
[2930] D22E 8F,4A           DCZ  @FAC
[2931] D230 65,A2           BS   ERRBV
[2932] D232 06,D2,37        CALL SISRON
[2933] D235 43,16           BR   PEEK5
[2934] D237 35,00,1A SISRON MOVE 26,@>8300,V@>03C0
       D23A A3,C0,00
[2935] D23D 31,00,0E        MOVE 14,G@GISRON,@>8300
       D240 00,CF,D2
[2936] D243 52,75           BR   SISRST
[2937]               ******************************************************
[2938]               * CALL ISROFF(variable)
[2939] D245 D2,7E    ISROFF DATA ABANK
[2940] D247 06,49,53        STRI 'ISROFF'          
       D24A 52,4F,46
       D24D 46
[2941] D24E D2,50           DATA $+2
[2942] D250 06,CA,2D        CALL GLPARZ
[2943] D253 06,D2,69        CALL SISROF
[2944] D256 0F,79           XML  PGMCHR
[2945] D258 BD,00,4A        DST  @FAC,@VAR0
[2946] D25B 06,CA,77        CALL SNDER
[2947] D25E 06,C4,2C        CALL CLRFAC
[2948] D261 BD,4A,00        DST  @VAR0,@FAC
[2949] D264 06,CA,7E        CALL CIFSND
[2950] D267 43,16           BR   PEEK5
[2951] D269 35,00,1A SISROF MOVE 26,@>8300,V@>03C0
       D26C A3,C0,00
[2952] D26F 31,00,1A        MOVE 26,G@GISROF,@>8300
       D272 00,CF,E0
[2953] D275 0F,F0    SISRST XML  >F0
[2954] D277 35,00,1A        MOVE 26,V@>03C0,@>8300
       D27A 00,A3,C0
[2955] D27D 00              RTN
[2956]               *****************************************************
[2957]               * CALL AMSBANK(lowbank#,highbank#)
[2958] D27E D3,49    ABANK  DATA AMS24
[2959] D280 07,41,4D        STRI 'AMSBANK'         
       D283 53,42,41
       D286 4E,4B
[2960] D288 D2,8A           DATA $+2
[2961] D28A 06,CA,2D        CALL GLPARZ            * ( ?
[2962] D28D 06,CA,53        CALL GETNUM            * Get low page.
[2963] D290 CB,4A,00        DCHE 240,@FAC          * Too high?
       D293 F0
[2964] D294 65,A2           BS   ERRBV             * ERROR BAD VALUE.
[2965] D296 A2,4B,10        ADD  16,@FAC1          * Add 16 to it.
[2966] D299 0F,77           XML  VPUSH             * Save low page.
[2967] D29B 06,CA,83        CALL SUBLP3            * Get high page.
[2968] D29E CB,4A,00        DCHE 240,@FAC          * Too high?
       D2A1 F0
[2969] D2A2 65,A2           BS   ERRBV             * ERROR BAD VALUE.
[2970] D2A4 A2,4B,10        ADD  16,@FAC1          * Add 16 to it.
[2971] D2A7 BC,5D,4B        ST   @FAC1,@ARG1       * Save high page.
[2972] D2AA 06,D1,B3        CALL AMSMAP            * AMSMAP
[2973] D2AD 06,D1,FF        CALL AMSON             * AMSON
[2974] D2B0 0F,78           XML  VPOP              * Fetch low page.
[2975] D2B2 BC,5C,4B        ST   @FAC1,@ARG        * Save low page.
[2976] D2B5 BC,4A,8F        ST   @>4004,@FAC       * Save old page.
       D2B8 BD,04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0054 
EQUATES ALCS-359
[2977] D2BA BC,4B,8F        ST   @>4006,@FAC1      * Save old page 2.
       D2BD BD,06
[2978] D2BF BC,8F,BD        ST   @ARG,@>4004       * Load new low page.
       D2C2 04,5C
[2979] D2C4 BD,50,8F        DST  @>2000,@FAC6      * Save new low first bytes.
       D2C7 9D,00
[2980] D2C9 BC,8F,BD        ST   @ARG,@>4006       * Duplicate new low page.
       D2CC 06,5C
[2981] D2CE BF,8F,9D        DST  >5555,@>2000      * Write test bytes.
       D2D1 00,55,55
[2982] D2D4 D7,8F,AD        DCEQ >5555,@>3000      * Did it write?
       D2D7 00,55,55
[2983] D2DA 53,15           BR   AMSERR            * No, ERROR.
[2984] D2DC BD,8F,9D        DST  @FAC6,@>2000      * Restore new low bytes.
       D2DF 00,50
[2985] D2E1 BC,8F,BD        ST   @ARG1,@>4004      * Load new high page.
       D2E4 04,5D
[2986] D2E6 BD,50,8F        DST  @>2000,@FAC6      * Save new high first bytes.
       D2E9 9D,00
[2987] D2EB BC,8F,BD        ST   @ARG1,@>4006      * Duplicate new high page.
       D2EE 06,5D
[2988] D2F0 BF,8F,9D        DST  >9999,@>2000      * Write test bytes.
       D2F3 00,99,99
[2989] D2F6 D7,8F,AD        DCEQ >9999,@>3000      * Did it write?
       D2F9 00,99,99
[2990] D2FC 53,15           BR   AMSERR            * No, ERROR.
[2991] D2FE BD,8F,9D        DST  @FAC6,@>2000      * Restore new high bytes.
       D301 00,50
[2992] D303 BC,8F,BD        ST   @ARG,@>4004       * Load new low page.
       D306 04,5C
[2993] D308 BC,8F,BD        ST   @ARG1,@>4006      * Load new high page.
       D30B 06,5D
[2994] D30D 06,D1,E6        CALL AMSOFF            * AMSOFF 
[2995] D310 06,D1,B3        CALL AMSMAP            * AMSMAP Mode on
[2996] D313 43,16           BR   PEEK5
[2997]               *******************************
[2998] D315 BC,8F,BD AMSERR ST   @FAC,@>4004       * Restore old page.
       D318 04,4A
[2999] D31A BC,8F,BD        ST   @FAC1,@>4006      * Restore old page 2.
       D31D 06,4B
[3000] D31F 06,D1,E6        CALL AMSOFF            * AMSOFF
[3001] D322 0F,83           XML  SCROLL
[3002] D324 08              FMT
[3003] D325 FC,60           SCRO >60
[3004] D327 FE,17           ROW  23
[3005] D329 FF,02           COL  2
[3006] D32B 19,2A,20        HTEX '* WARNING AMS BANK ERROR *'
       D32E 57,41,52
       D331 4E,49,4E
       D334 47,20,41
       D337 4D,53,20
       D33A 42,41,4E
       D33D 4B,20,45
       D340 52,52,4F
       D343 52,20,2A
[3007] D346 FB              FEND
[3008] D347 45,A2           BR   ERRBV
[3009]               *******************************

So can you explain it better as I am not a hardware guy.

 

I move a Word instead of a byte value like above?

Link to comment
Share on other sites

Correct, you are writing a Word value to the registers, Rich. The key with the Word value is that the first byte written to the register only ever uses the last four bits--the first four are always "0" because the 612 uses a 12-bit data bus. Note that the first byte written is the Odd byte and the final byte written is the Even byte to properly fill the 12 data inputs. On a 4M card, only the last two bits of the Odd byte will be non-zero values, as the last two bits are all that we need here (and that takes the number of SAMS pages to 1024). One thing I might mention right off on this one, Rich--I am not much of a software guy. I just make sure I document what the hardware does/needs and leave it to the software guys to actually use the capability. I know just enough on the software side to get myself into a lot of trouble, fast. :)

Link to comment
Share on other sites

Correct, you are writing a Word value to the registers, Rich. The key with the Word value is that the first byte written to the register only ever uses the last four bits--the first four are always "0" because the 612 uses a 12-bit data bus. Note that the first byte written is the Odd byte and the final byte written is the Even byte to properly fill the 12 data inputs. On a 4M card, only the last two bits of the Odd byte will be non-zero values, as the last two bits are all that we need here (and that takes the number of SAMS pages to 1024). One thing I might mention right off on this one, Rich--I am not much of a software guy. I just make sure I document what the hardware does/needs and leave it to the software guys to actually use the capability. I know just enough on the software side to get myself into a lot of trouble, fast. :)

Yea on the 32K up to 1024K SAMS or AMS we send only the msb of the word such as >FF00 which would be page 255 being the last page in the SAMS or AMS, as lsb is always ignored.

 

So how would you send for say page 256?

>FF01?

Or is that wrong?

Link to comment
Share on other sites

On the LSB, for each subsequent block of 256 pages (counting from page 0), you have it mostly right (page 257, the first page in block 2 would be >0001, based on normal Hexadecimal counting). For the first 256 pages it would be >xx00, second 256 pages it would be >xx01, for the third 256 pages it would be >xx02, and for the fourth 256 pages it would be >xx03 (and we are now at 4MB). Continue the pattern until you reach >xx0F, with the first page in that 256 page block being >000F and the last page in the final 256 page block being >FF0F. In this way, we are fully using the first 12 bits of the 16-bit data word.

 

I finished the layout for the 4M version last night, although I will probably modify one of my two personal boards from the first run to verify that it works this way before I send it off to be manufactured. I already have a pair of the necessary memory chips for that test and enough Kynar to build all of the flying wires I'll need.

  • Like 3
Link to comment
Share on other sites

I can see a number of use cases for that, Rich. I also have a random question: which byte is written first? I ask this because the first byte written will be the one that is latched, and would be in the value range of >00 to >0F. I just wanted to make sure I have the byte data in the right order in my earlier post. . .

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...