Need help repairing Philips MSX2 NMS 8250

Страница 4/7
1 | 2 | 3 | | 5 | 6 | 7

By NYYRIKKI

Enlighted (6067)

Аватар пользователя NYYRIKKI

30-01-2019, 00:45

Missing of /CAS sounds pretty bad... Missing of /IORQ is also kind of a mark that the CPU is not doing anything useful. The /INT is generated by VDP only after CPU asks it to start sending ints. In general I would guess that the CPU is not now booting even from the ROM... As you have oscilloscope, I think you should start from very basics... What kind of activity there is in address lines? Can you get any idea of address range the CPU is executing? Any activity on /RD, /WAIT, /MREQ, /ROMCS & /SLT3,30 ? Once we know what signals are working and what not, I think it is more easy to start giving better ideas... Maybe someone has inserted a cartridge wrong way around and now some buffer chip is in short circuit preventing Z80 from bus? Very hard to say.

By llopis

Resident (55)

Аватар пользователя llopis

30-01-2019, 09:41

The CPU seems active as far as I can tell. I have an oscilloscope, and I see perfectly normal activity in /RFSH, /M1, /WR, /RD, /MREQ, and /WAIT. There's also a healthy clock signal and normal activity in the address bus.

Where should I check the /ROMCS and /SLT3 signals? Is that in the VDP?

By Wierzbowsky

Guardian (3608)

Аватар пользователя Wierzbowsky

30-01-2019, 13:01

If CPU is active and there's no INT, the BIOS is stuck waiting for the first frame from the VDP. The system doesn't start until VDP sends this signal. That's what I found out during my repairing of F700P. I even found the place in BIOS where the code gets stuck with the logic analyzer. However in my case I at least got an empty blue screen before the BIOS got stuck.

By llopis

Resident (55)

Аватар пользователя llopis

30-01-2019, 13:07

Alexey wrote:

If CPU is active and there's no INT, the BIOS is stuck waiting for the first frame from the VDP. The system doesn't start until VDP sends this signal. That's what I found out during my repairing of F700P. I even found the place in BIOS where the code gets stuck with the logic analyzer. However in my case I at least got an empty blue screen before the BIOS got stuck.

So that points to a bad ROM, right? (or a bad data bus and it's not able to get the data correctly from the ROM). Are the ROMs in OpenMSX the best ROMs to use, or is there a better repository of completely unaltered ROMs?

By Wierzbowsky

Guardian (3608)

Аватар пользователя Wierzbowsky

30-01-2019, 13:53

No, the ROMs were fine. They are just programmed so that they only continue booting after getting the first complete frame from VDP.

By llopis

Resident (55)

Аватар пользователя llopis

30-01-2019, 15:24

Alexey wrote:

No, the ROMs were fine. They are just programmed so that they only continue booting after getting the first complete frame from VDP.

Oh so you're thinking faulty VDP! Bummer! I suspect that's difficult to replace, right?

By Wierzbowsky

Guardian (3608)

Аватар пользователя Wierzbowsky

30-01-2019, 16:57

I am not a professional engineer, I am just sharing my experience. Replacing the VDP is not much more difficult than replacing any other through-hole mounted chip of this size. The difficulty level depends on whether the board is single or double sided. On the double sided boards replacing the VDP is more challenging because the chip is usually soldered from both sides.

It also heavily depends on what tools you use to remove the chip. I use the Chinese-made electric desoldering pump to remove the solder from all the pins. It requires time and patience and there's always a risk to damage the board. In some cases, when you are sure that the chip is broken, it's safer to cut all the pins from the chip and remove them with a soldering iron - this saves the board.

By llopis

Resident (55)

Аватар пользователя llopis

30-01-2019, 18:44

I have the tools and the experience, so I'm not that concerned about removing the VDP. I'm more concerned about finding a replacement one :-b I don't imagine those are easy to come by, right?

By Grauw

Ascended (10772)

Аватар пользователя Grauw

30-01-2019, 18:48

Theres several V9938s and V9958s on eBay.

By NYYRIKKI

Enlighted (6067)

Аватар пользователя NYYRIKKI

30-01-2019, 19:23

llopis wrote:

Where should I check the /ROMCS and /SLT3 signals? Is that in the VDP?

They activate the ROMs... I was wondering if we could somehow a bit limit the problem, like if the program is actually read from ROM correctly (No shorted address or data line or something like that)

VDP could be one to blaim... you said there was hot VRAM chips etc. but I still fail to see how it could affect the /CAS in RAM...

You said that you burned new ROMs, so maybe you could try to replace the main ROM with this "Hello World"-program I've wrote earlier... It does not need working RAM, working interrupts or anything like that... At least we could see if VDP can output video normally and if the program is read correctly from ROM...

; This is a "Hello World" program for Z80 and TMS9918 / TMS9928 / TMS9929 /
; V9938 or V9958 VDP.
; That means that this should work on SVI, MSX, Colecovision, Memotech,
; and many other Z80 based home computers or game consoles.
;
; Because we don't know what system is used, we don't know where RAM
; is, so we can't use stack in this program.
;
; This version of Hello World was written by Timo "NYYRIKKI" Soilamaa
; 17.10.2001
;
;----------------------------------------------------------------------
; Configure this part:

DATAP: EQU #98 ; VDP Data port #98 works on all MSX models
; (TMS9918/TMS9929/V9938 or V9958)
; #80 works on SVI 
; (for other platforms you have to figure this out by your self)

CMDP: EQU #99 ; VDP Command port #99 works on all MSX models
; (TMS9918/TMS9929/V9938 or V9958)
; #81 works on SVI
; (for other platforms you have to figure this out by your self)
;-----------------------------------------------------------------------
; Program starts here:

      ORG 0      ; Z80 starts always from here when power is turned on
      DI         ; We don't know, how interrupts works in this system, so we disable them.
      
      ; Let's set VDP write address to #0000
      XOR A
      OUT (CMDP),A
      LD A,#40
      OUT (CMDP),A
      
      ; Now let's clear first 16Kb of VDP memory
      LD B,0
      LD HL,#3FFF
      LD C,DATAP
CLEAR:
      OUT (C),B
      DEC HL
      LD A,H
      OR L
      NOP ; Let's wait 8 clock cycles just in case VDP is not quick enough.
      NOP
      JR NZ,CLEAR
      
      ; Now it is time to set up VDP registers:
      ;----------------------------------------
      ; Register 0 to #0
      ;
      ; Set mode selection bit M3 (maybe also M4 & M5) to zero and 
      ; disable external video & horizontal interrupt
      LD C,CMDP
      LD E,#80
      
      OUT (C),A
      OUT (C),E
      ;---------------------------------------- 
      ; Register 1 to #70
      ;
      ; Select 40 column mode, enable screen and enable vertical interrupt
      
      LD A,#70
      INC E
      OUT (C),A
      OUT (C),E
      ;---------------------------------------- 
      ; Register 2 to #0
      ;
      ; Set pattern name table to #0000
      
      XOR A
      INC E
      OUT (C),A
      OUT (C),E
      ;---------------------------------------- 
      ; Register 3 is ignored as 40 column mode does not need color table
      ;
      INC E
      ;---------------------------------------- 
      ; Register 4 to #1
      ; Set pattern generator table to #800
      
      INC A
      INC E
      
      OUT (C),A
      OUT (C),E
      ;---------------------------------------- 
      ; Registers 5 (Sprite attribute) & 6 (Sprite pattern) are ignored 
      ; as 40 column mode does not have sprites
      
      INC E
      INC E
      ;---------------------------------------- 
      ; Register 7 to #F0
      ; Set colors to white on black
      
      LD A,#F0
      INC E
      OUT (C),A
      OUT (C),E
      ;----------------------------------------
      
      ; Let's set VDP write address to #808 so, that we can write
      ; character set to memory
      ; (No need to write SPACE it is clear char already)
      LD A,8
      OUT (C),A
      LD A,#48
      OUT (C),A
      
      ; Let's copy character set
      LD HL,CHARS
      LD B, CHARS_END-CHARS
COPYCHARS:
      LD A,(HL)
      OUT (DATAP),A
      INC HL
      NOP ; Let's wait 8 clock cycles just in case VDP is not quick enough.
      NOP
      DJNZ COPYCHARS
      
      ; Let's set write address to start of name table
      XOR A
      OUT (C),A
      LD A,#40
      OUT (C),A
      
      ; Let's put characters to screen
      LD HL,ORDER
      LD B,ORDER_END-ORDER
COPYORDER:
      LD A,(HL)
      OUT (DATAP),A
      INC HL
      
      JR OVERNMI
      NOP
      NOP
      
      ; Here is address #66, that is entry for NMI
      RETN ;Return from NMI

OVERNMI:
      DJNZ COPYORDER

; The end
      HALT

; Character set:
; --------------
ORDER:
      DEFB 1,2,3,3,4,0,5,4,6,3,7
ORDER_END:

CHARS:

      ; H
      DEFB %10001000
      DEFB %10001000
      DEFB %10001000
      DEFB %11111000
      DEFB %10001000
      DEFB %10001000
      DEFB %10001000
      DEFB %00000000
      ; e
      DEFB %00000000
      DEFB %00000000
      DEFB %01110000
      DEFB %10001000
      DEFB %11111000
      DEFB %10000000
      DEFB %01110000
      DEFB %00000000
      ; l
      DEFB %01100000
      DEFB %00100000
      DEFB %00100000
      DEFB %00100000
      DEFB %00100000
      DEFB %00100000
      DEFB %01110000
      DEFB %00000000
      ; o
      DEFB %00000000
      DEFB %00000000
      DEFB %01110000
      DEFB %10001000
      DEFB %10001000
      DEFB %10001000
      DEFB %01110000
      DEFB %00000000
      ; W
      DEFB %10001000
      DEFB %10001000
      DEFB %10001000
      DEFB %10101000
      DEFB %10101000
      DEFB %11011000
      DEFB %10001000
      DEFB %00000000
      
      ; r
      DEFB %00000000
      DEFB %00000000
      DEFB %10110000
      DEFB %11001000
      DEFB %10000000
      DEFB %10000000
      DEFB %10000000
      DEFB %00000000
      ; d
      DEFB %00001000
      DEFB %00001000
      DEFB %01101000
      DEFB %10011000
      DEFB %10001000
      DEFB %10011000
      DEFB %01101000
      DEFB %00000000
CHARS_END:

      DS $7FFF-$,255

EDIT: Patched the code to enable interrupts to see if they are actually generated or not. (The program does not use them anyway)

Страница 4/7
1 | 2 | 3 | | 5 | 6 | 7