Upgrade 610 from 2114 RAM to 6264 8K x 8

davisgw
Posts: 134
Joined: Sat Aug 27, 2022 4:52 pm

Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by davisgw »

I have a problem problem with a Superboard and a 610 board that I modified for 6264 RAM chips. I've run hours of memory tests to verify
the memory works, and it boots with HEXDOS and OS65DV3, but fails to boot DOS/65 every time. I've made a piggyback memory card that
gets most of it's chip select signals from the 610 board, with some minor added logic for the 6264's. Obviously I have a flaw in the (addressing?)
logic but I am not making much progress figuring out what it could be, since I lack a multichannel digital analyser (I have a 2-channel analog
scope).

My theory is that DOS/65 attempts to boot to the the highest memory available, in this case just below 32K, and the 6264 addressing logic
allows data being read from the ACIA at address C0xx to collide with the RAM at 7Fxx, but I cannot seem to prove that or even figure out
how that can happen. The OSI logic produces a signal C0XX NOT that does not seem to be used to limit RAM addressing, so I'm not using
it for my 6264 chip selects.

Any ideas?
BillO
Posts: 216
Joined: Tue Jul 08, 2014 4:03 pm
Location: Canada
Contact:

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by BillO »

We'd need to see your address decoding for the RAM. Did you ensure that it is not being selected when the ACIA is? It should be disabled when A15 is high.
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
Mark
Posts: 297
Joined: Tue Sep 16, 2008 6:04 am
Location: Madison, WI
Contact:

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by Mark »

Which version of Dos/65 are you using? I think the only disk images I've seen require a 48K C2/C4/C8 video based system.

I realized I had never uploaded the DOS/65 disk images found back in 2013. I cleaned the disk files, fixed the OS track on DOS65-1.65d and tried them out under WinOSI. The version I have requires 48K RAM (thus no BASIC ROM), with an OSI540 video display. Most of the disks are intact with just a few errors detected by OSIHFE (unfortunately sysgen.com was one of them). The complete archive can be found here: Dos/65

If there are 8" versions or C1P compatible versions out there, please point me to them or post them! Thanks!

Also, I'm not sure if this will help, but it has been known to identify glitchy hardware memory errors: OSI TestMem program

Good Luck!
-Mark
DOS/65 48K C4P
DOS/65 48K C4P
dos65.gif (4.55 KiB) Viewed 3784 times
davisgw
Posts: 134
Joined: Sat Aug 27, 2022 4:52 pm

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by davisgw »

Here is my chip select logic and the source pins of the 610 board select logic. Also pics of my board and connections, and the 6264 pinouts for reference.
I have attempted to verify that accesses of the ACIA do not select the memory selects but not the other way around, since both HEXDOS and OS65D boot and run as expected. Also location 0200 contains 6E 20 3F when DOS/65 boot is attemted. Also the 74ls138 in U18 should block RAM chip select when A15 is high. The 6264 I am designating as M1 is for 2000-3FFF, M2 is for 4000-5FFF, and M3 is for 6000-7FFF. Let me know if more detail is needed. Thanks.
OSI_610MemoryMod.pdf
memory chip slects
(679.33 KiB) Downloaded 243 times
OSI_610.pdf
610 board component map
(143.46 KiB) Downloaded 230 times
610 board connections
610 board connections
OSI610Memory3.jpg (4.54 MiB) Viewed 3770 times
assembled boards
assembled boards
OSI610Memory4.jpg (4.17 MiB) Viewed 3770 times
davisgw
Posts: 134
Joined: Sat Aug 27, 2022 4:52 pm

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by davisgw »

I also forgot to point out that my copy of DOS/65 was provided by the author for the C1P and boots and runs as expected on my other unmodified Superboard. However I have as yet only compared the hardware between the two systems...one difference being the working system has a monitor ROM with a separate menu entry to boot DOS/65, though I don't remember why.
davisgw
Posts: 134
Joined: Sat Aug 27, 2022 4:52 pm

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by davisgw »

Here is the 6264 data sheet from Motorola.
Attachments
MCM6264.pdf
(177.26 KiB) Downloaded 219 times
Mark
Posts: 297
Joined: Tue Sep 16, 2008 6:04 am
Location: Madison, WI
Contact:

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by Mark »

Location 0200 is loaded with 6E 20 3F by the reset code in the monitor and BASIC ROM during initialization/RESET time and is normal.

Do you have a Dos/65 Loader disk or does your other superboard boot a DOS/65 image directly? What does your system actually do when you try to boot DOS/65? (What's on the screen? What are the steps involved?)

If you are able to capture the serial data from your working superboard, you can dump the ROM contents with this BASIC program. It would be interesting to see what changes have been made.

Code: Select all

 10 A$="0123456789ABCDEF":J=0:POKE517,1
 20 FOR I=63488 TO 65535:D=PEEK(I)
 30 PRINT MID$(A$,D/16+1,1);MID$(A$,(DAND15)+1,1);" ";
 40 J=J+1:IF J < 8 GOTO 60
 50 PRINTCHR$(13);:J=0
 60 NEXT:POKE517,0
(Alternately use the attached assembler program/monitor load program to do the same)
dump-rom.zip
C1 Assembler program to dump ROM F800-FFFF
(800 Bytes) Downloaded 233 times


With the OSI Test Mem program, you can have it continuously access any RAM section above $400, which would allow you to monitor inadvertent chip selection.
OSI TestMem screen
OSI TestMem screen
testmem.gif (3.05 KiB) Viewed 3767 times
BillO
Posts: 216
Joined: Tue Jul 08, 2014 4:03 pm
Location: Canada
Contact:

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by BillO »

davisgw wrote: Sat Sep 03, 2022 3:49 pm Here is my chip select logic ..
Lets make it a lot simpler.

Try this..

Connect BPhi2 (you can get this on pin 9 of U7 or pin 11 of U5 or pin 4 of U8) directly to pin 26 of all 3 memory chips.

Connect pin 22 of all memory chips directly to ground.

Connect BR/W (pin 10 of U59) directly to pin 27 of all memory chips.

Leave the chip selects as they are coming from U18

This will eliminate the 5 inverters, the two NAND gates and a whole lot of propagation delay.
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
Mark
Posts: 297
Joined: Tue Sep 16, 2008 6:04 am
Location: Madison, WI
Contact:

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by Mark »

I disassembled the loader track for the C4P version of DOS/65. It would fit in a 2K monitor ROM in a C1P (it's only 3 pages long)

So it's likely your modified C1P with the DOS/65 boot menu item has the DOS/65 loader in ROM since it's a menu item, and you are trying to boot a DOS/65 OS disk which starts with a $43, $57, $00 track 0 header. ( Sending the contents of your monitor ROM would confirm this. )

An unmodified OSI trying to boot a DOS/65 OS disk would try to read 256 pages of disk data to location $4357+
It would try to read 64K of data from track 0 to consecutive addresses, eventually writing over the disk controller ports @ $C000 and disk ACIA, most likely hanging at that time waiting on ACIA data that never arrives due to controller settings corruption.

So since HEXDOS and OS65D work correctly, your memory expansion is likely operating correctly!

If you are able to send the contents of the DOS/65 Disk you are using with OSI Dump, and/or the contents of the monitor ROM, we could create a bootable DOS/65 loader disk for your new system. Otherwise you'll need to clone your boot ROM for your new system.

Below is the DOS/65 C4P loader partial disassembly, which could be assembled to create a monitor loadable file for C4P, or relocated and stuck in ROM somewhere.
-Mark

Code: Select all

*=$2200
;DOS/65 loader for C2/C4/C8 disk systems & OSI540 video
;looks like $00-$7F read from 1st sector of disk track1
;rest of data loads at $2506+
      .EXE *             ;emit a65 loader address

L2200       LDA #$20
            STA $8A
            LDA #$40
            STA $89
            LDX #$FF
            TXS
            CLD
            SEI
            JMP L2217
            
            .BYTE $02,$20,$00,$01,$88,$00,$10
		
L2217       LDA #<MSGBOOT ;#$E4
            LDY #>MSGBOOT ;#$22
L221B       JSR PRINTMSG
L221E       JSR $FD00	;get key from polled keyboard
            CMP #$0D
            BNE L221E	;loop until <CR>
            JSR OUTSCRN
            LDA #$0A
            JSR OUTSCRN
            LDA #$40
            LDY #$00
            LDX #$04
            STY $C001	;initialize disk PIA
            STA $C000
            STX $C001
            STA $C000
            STY $C003
            DEY
            STY $C002
            STX $C003
            STY $C002
            LDA $C000	;bit 0 = drive 1 ready
            LSR A
            BCC L2260
            LDA #<MSGNOTRDY ;#$2B
            LDY #>MSGNOTRDY ;#$23
            JSR PRINTMSG
            LDA #<MSGINSERT ;#$F3
            LDY #>MSGINSERT ;#$22
            JMP L221B
            
L2260       JSR S23E8
            JSR RDHEADR
            BNE L227D
L2268       JSR INDISK
            CMP #$76		;sector marker
            BNE L2268
            JSR INDISK
            CMP #$01		;sector#
            BNE L227D
            JSR INDISK
            CMP #$08		;sector size
            BEQ L228A
L227D       LDA #<MSGHEADER ;#$3D
            LDY #>MSGHEADER; #$23
L2281       JSR PRINTMSG
            JSR S244D
            JMP L2217
            
L228A       LDX #$00		;read track data 
L228C       LDA #$01
L228E       BIT $C010		;wait for char, & check parity
            BEQ L228E
            LDA $C011
            BVS L229F		;Parity error?
            STA $00,X		;store data from track, @lower zero page
            INX			
            BPL L228C		;for 128 bytes
            BMI L22A6
L229F       LDA #<MSGPARITY ;#$57
            LDY #>MSGPARITY ;#$23
            JMP L2281
            
L22A6       JSR S24B8
            BCC L22B3
            LDA $88
            AND #$01
            BNE L227D
            BEQ L229F
L22B3       JSR S249B
            LDY #$00
L22B8       LDA ($82),Y
            STA ($00),Y
            INY
            BPL L22B8
            CLC
            TYA
            ADC $00
            STA $00
            BCC L22C9
            INC $01
L22C9       DEC $04
            BEQ L22E1
            INC $06
            LDA $06
            CMP $05
            BEQ L22B3
            BCC L22B3
            LDA #$01
            STA $06
            JSR S2407
            JMP L22A6
            
L22E1       JMP ($0002)
MSGBOOT
           .BYTE $0D,$0A,'DOS/65 LOADER'
MSGINSERT
           .BYTE $0D,$0A,'INSERT DOS/65 DISK IN DRIVE A'
           .BYTE $0D,$0A,'TYPE RETURN WHEN READY',0
MSGNOTRDY
           .BYTE $0D,$0A,'DRIVE NOT READY',0
MSGHEADER
           .BYTE $0D,$0A,'BAD HEADER - RESTARTING',0
MSGPARITY
           .BYTE $0D,$0A,'PARITY ERROR - RESTARTING',0
            
PRINTMSG	;$2373
            STA $80		;message printer
            STY $81
            LDY #$00
            STY $84
L237B       LDY $84
            INC $84
            LDA ($80),Y
            BNE L2384
            RTS
L2384       JSR OUTSCRN
            JMP L237B
OUTSCRN            
            PHA			;Write character in A to screen
            PHA
            LDX $89		;get current cursor pos
            LDA $8A		;get character under cursor
            STA $D700,X	;restore character
            PLA
            CMP #$0D	;<CR>?
            BEQ L23B0
            CMP #$0A	;<LF>?
            BEQ L23B8
            STA $D700,X	;write new character to screen
            INX			;move cursor+1
            BMI L23B4	;when X=$80 (D080) perform <LF>
		
L23A2       LDA $D700,X	;get character at cursor position
            STA $8A		;store character 
            LDA #$5F
            STA $D700,X ;write underscore cursor to screen
            STX $89		;save current line position
            PLA
            RTS
            
L23B0       LDX #$40	;do <CR>
            BNE L23A2
L23B4       LDX #$40	;restore X to start of line
            STX $89
L23B8       LDA #$C0	;do <LF>
            LDY #$D0
            STA $8D		;$D0C0
            STY $8E
            LDA #$80	
            LDY #$D0
            STA $8B
            STY $8C		;$D080
            LDX #$07	;#pages to copy
            LDY #$00
L23CC       LDA ($8D),Y	;copy screen lines up
            STA ($8B),Y
            INY
            BNE L23CC
            INC $8E
            INC $8C
            DEX
            BNE L23CC	;loop until all pages copied
            LDA #$20
L23DC       STA $D740,X ;erase bottom line $d740+
            INX
            CPX #$40
            BNE L23DC
            LDX $89
            BNE L23A2
S23E8       JSR S2407
            JSR S2435
L23EE       LDA #$02
            BIT $C000	;test @ trk 0?  (0=trk0)
            BNE L23FA
            LDA #$00
            STA $87		;store current trk# (?)
            RTS
            
L23FA       JSR S2400
            JMP L23EE
            
S2400       LDA $C002	;set step direction down to 0
            ORA #$04
            BNE L240E
S2407       INC $87		;increment current trk#
            LDA $C002	;set step direction up to 39
            AND #$FB
L240E       STA $C002
            JSR S2430	;(short delay)
            AND #$F7
            STA $C002	;step on 1->0 transition
            JSR S2431	;(longer delay)
            ORA #$08
            STA $C002	;un step
            LDX #$08
            JMP L2437	;long delay *8
            
S2426       JSR S242E
            DEY
            BNE S2426
            NOP
            RTS
            
S242E       BNE S2430
S2430       RTS
            
S2431       JSR S2430
            RTS
            
S2435       LDX #$0C	;long delay *c
L2437       LDY #$FF
            JSR S2426
            DEX
            BNE L2437
            RTS
            
S2440       LDA #$7F	;load head
            AND $C002
            STA $C002
            LDX #$28
            JMP L2437	;(long delay *$28)
            
S244D       LDA #$80	;unload head
            ORA $C002
            STA $C002
            RTS
            
RDHEADR     ;$2456
            JSR S2440	;load head
            SEI
L245A       LDA $C000	;wait for index start
            BMI L245A
L245F       LDA $C000	;wait for index end
            BPL L245F	
            LDA #$03
            STA $C010	;reset disk ACIA
            LDA #$58
            STA $C010	;8E1 /1 NO RTS NO txIRQ NO rxIRQ
L246E       LDA $C000
            BPL L248E	;drive 1 ready?
            JSR INDISK	;read disk
L2476       CMP #$43	
            BNE L246E
            JSR INDISK
            CMP #$57	;look for $43,$57,trk#
            BNE L2476
            JSR INDISK
            CMP $87		;target track# match?
            BNE L248D
            JSR INDISK
            CMP #$58
L248D       RTS
            
L248E       LDA #$01
            RTS
            
INDISK      ;$2491
            LDA $C010	;read value from disk
            LSR A
            BCC INDISK
            LDA $C011
            RTS
            
S249B       LDA $06
            SEC
            SBC #$01
            LDY #$00
            STY $83
            LDY #$07
L24A6       ASL A
            ROL $83
            DEY
            BNE L24A6
            CLC
            ADC #$06
            STA $82
            LDA $83
            ADC #$25
            STA $83
            RTS
            
S24B8       LDA #$06	;read data from disk 
            LDY #$25	;to $2506+
            STA $85
            STY $86
            LDA #$00
            STA $88
            JSR RDHEADR
            BNE L24FA
L24C9       JSR INDISK
            CMP #$76	;sector marker
            BNE L24C9
            JSR INDISK
            CMP #$01	;sector #
            BNE L24FA
            JSR INDISK
            CMP #$08	;sector size
            BNE L24FA
            TAX			;# pages to read in X
            LDY #$00
L24E1       LDA #$01
L24E3       BIT $C010	;wait for ACIA ready & check PE
            BEQ L24E3
            LDA $C011	;reading ACIA clears PE
            BVS L24FE
            STA ($85),Y
            INY
            BNE L24E1
            INC $86
            DEX
            BNE L24E1	;loop till all sector read
            CLC
            BCC L2503
L24FA       LDA #$01	;entry for seek trk 1 ?
            BNE L2500
L24FE       LDA #$02	;entry for seek trk 2 ?
L2500       STA $88		;$88 = target track
            SEC			;flag not done yet
L2503       JMP S244D	;done, unload head & return
davisgw
Posts: 134
Joined: Sat Aug 27, 2022 4:52 pm

Re: Upgrade 610 from 2114 RAM to 6264 8K x 8

Post by davisgw »

Thanks to all for your questions, ideas, and suggestions. I had a long answer to each poster last night
but my session timed out before I posted it :-( So here are some bullets to what I planned to post as a list of what I plan to do.

But first some background. My VERY FIRST Superboard base system I expanded to an S100 motherboard with memory mapped cards for the 610 board, an EPROM board, an EPROM burner for 2716s, and a video card to display 80 char lines. I modified the monitor ROM for new menu items, including the Extended Monitor and EPROM burner. Attached is my memory mapping for the system hardware which allowed 100% compatibility to the OSI C1P. Also attached is a pic of how it looks today, with a 10 pound (5 kg) power supply I scrounged from a local surplus store.
20201130_111844.jpg
20201130_111844.jpg (4.89 MiB) Viewed 3696 times
20201130_111439.jpg
20201130_111439.jpg (4.68 MiB) Viewed 3696 times
My copy of DOS/65 is Version 2.0-S on 9 diskettes plus a Loader diskette. When I ordered it back in the ‘80s I specified that it was for a Superboard with 610 board expansion and 32 K of RAM. If anyone knows where in memory this version would load and what is loaded, that would be extremely helpful!!

When the failing system tries to boot DOS/65 all that happens is the floppy drives seeks to track 0, the display begins to flicker as though the refresh rate is reduced, then nothing else seems to be read from diskette any further tracks. One clue is that I have observed (once in MANY attempts) the screen is filled with random graphic characters, which to me implies that whatever is running is corrupted or has bad pointers.

The possibility of the cause being propagation delay suggests that perhaps the data to/from memory does not make it through the 610 board transceivers. But that does not seem to be the case when I run memory tests. However I think if I type a small program to RUN in upper memory I might see different result. I plan to try that before any more hardware mods. None of this explains why HEXDOS and OS65D boot and run as expected, including being able to duplicate diskettes. Also I tried running a BASIC memory test to $7Fxx and $C0xx to scope whether the chip selects are correctly accessing the correct addresses but it was not clear this is happening.

I will be away for the next 2 weeks and will not be able to do more debug until I return. Thanks again for your analysis and suggestions.
Attachments
C1P_to_S100Buss.pdf
(1.54 MiB) Downloaded 217 times
Post Reply