atrax27407 Posted October 5, 2016 Share Posted October 5, 2016 Check out some of the Bruce Harrison utilities. Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted October 25, 2016 Share Posted October 25, 2016 interesting thing, matt's memory tester fails my SAMS card.. Greg Quote Link to comment Share on other sites More sharing options...
+jedimatt42 Posted October 25, 2016 Share Posted October 25, 2016 interesting thing, matt's memory tester fails my SAMS card.. Greg Have you tried a stock 32k card in your peb? or another Flex Card? -M@ Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted October 25, 2016 Share Posted October 25, 2016 no that would require removing much crap from the top of the pbox maybe later Greg Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 23, 2016 Share Posted December 23, 2016 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). 1 Quote Link to comment Share on other sites More sharing options...
+retroclouds Posted December 23, 2016 Share Posted December 23, 2016 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 :-) 2 Quote Link to comment Share on other sites More sharing options...
Omega-TI Posted December 23, 2016 Author Share Posted December 23, 2016 5. Check for F18A and if present display more data on screen at one time in 80 column mode. 2 Quote Link to comment Share on other sites More sharing options...
+retroclouds Posted December 23, 2016 Share Posted December 23, 2016 5. Check for F18A and if present display more data on screen at one time in 80 column mode. That should be doable. 2 Quote Link to comment Share on other sites More sharing options...
atrax27407 Posted December 23, 2016 Share Posted December 23, 2016 AMSTEST4 does that for cards up to 1 Meg in size. Quote Link to comment Share on other sites More sharing options...
+retroclouds Posted December 23, 2016 Share Posted December 23, 2016 AMSTEST4 does that for cards up to 1 Meg in size. Yeah, I'm aware there are already programs out there for testing a SAMS board. But I wanna try something myself, should be fun and will help me getting back to speed in TMS9900 assembly language. 1 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 23, 2016 Share Posted December 23, 2016 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. Quote Link to comment Share on other sites More sharing options...
Omega-TI Posted December 23, 2016 Author Share Posted December 23, 2016 ... as a stand-alone cartridge. ... an FR99 version would be cheaper. Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 23, 2016 Share Posted December 23, 2016 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. . . 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 23, 2016 Share Posted December 23, 2016 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. Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 23, 2016 Share Posted December 23, 2016 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. 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 23, 2016 Share Posted December 23, 2016 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 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 23, 2016 Share Posted December 23, 2016 Note that this would not change the checks for earlier board sizes/types, so you'd still have to run through all of the checks up to 1MB (256 pages) in addition to the two new values. Quote Link to comment Share on other sites More sharing options...
RXB Posted December 24, 2016 Share Posted December 24, 2016 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? Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 24, 2016 Share Posted December 24, 2016 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. Quote Link to comment Share on other sites More sharing options...
RXB Posted December 24, 2016 Share Posted December 24, 2016 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? Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 24, 2016 Share Posted December 24, 2016 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. Quote Link to comment Share on other sites More sharing options...
RXB Posted December 25, 2016 Share Posted December 25, 2016 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? Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 25, 2016 Share Posted December 25, 2016 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. 3 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 26, 2016 Share Posted December 26, 2016 Nice look forward to working out a built in GPL/RXB version. You know I did at one time make a REA version but no one seemed to pick it up, maybe I needed to make a RAG linker version with it built into REA? 1 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted December 26, 2016 Share Posted December 26, 2016 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. . . Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.