[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Videx Videoterm 80



Hello.

I'm currently trying to fix one of these cards.

I wrote a little VRAM testing program (see below) that constantly checks the VRAM, and noticed that instead of the "noise" that happened on a XT's CGA card (I had one of these), the VIDEX just shuts the video down for a tinny fraction of time (see the black diagonal lines on the video).

The phosphor persistence prevents the flickering, if I understood correctly the process.

This video documents the effect : http://www.youtube.com/watch?v=iV3f7iCcRjE#t=35s

(Don't mind the vertical bars : the pin 2 of the shift register was floating, as I after realized - heating the pin to fix the soldering solved that).

The source for the testing program is (use CC65 to assemble):

==============================
; Macro utilizada para setar o bit7 de uma string
.macro	text	Arg
	.repeat .strlen(Arg), I
	.byte   .strat(Arg, I) | $80
	.endrep
.endmacro
; Macro utilizada para setar o bit7 de uma string
.macro	textz	Arg
	text Arg
	.byte $00
.endmacro

SPEAKER_OUT	:= $C030

PRINT_BYTE	:= $FDDA	;(A)
PRINT_WORD	:= $F941	;(AX)
PRINT_CHAR	:= $FDED
PRINT_CR	:= $FD8E
PRINT_ERR	:= $FF2D

MON_INPORT	:= $FE8B
MON_OUTPORT	:= $FE95
MON_SETKBD	:= $FE89
MON_SETVID	:= $FE93

VRAM_PTR		:= $3C
	VRAM_PTR_L	:= VRAM_PTR
	VRAM_PTR_H	:= VRAM_PTR_L + 1
	
VRAM_BANK_PTR	:= $3E
	VRAM_BANK_PTR_L	:= VRAM_BANK_PTR
	VRAM_BANK_PTR_H	:= VRAM_BANK_PTR_L + 1

PRINT_PTR	:= $40
	PRINT_PTR_L	:= PRINT_PTR
	PRINT_PTR_H	:= PRINT_PTR_L+1
	
VRAM_ADDRESS	:= $CC00
VRAM_BANK_0		:= $C0B0
VRAM_BANK_1		:= $C0B4
VRAM_BANK_2		:= $C0B8
VRAM_BANK_3		:= $C0BC
SLOT_STROBE		:= $CFFF
SLOT_SELECT		:= $C300

	.ORG	$4000
ramtst:
start:
	lda		#@msg_title
	jsr		@print
	jsr		PRINT_CR
	
@restart:
	lda		#@msg_bank0
	jsr		@print
	lda		#<VRAM_BANK_0
	sta		VRAM_BANK_PTR_L
	lda		#>VRAM_BANK_0
	sta		VRAM_BANK_PTR_H
	jsr		@bank_test
	
	lda		#@msg_bank1
	jsr		@print
	lda		#<VRAM_BANK_1
	sta		VRAM_BANK_PTR_L
	lda		#>VRAM_BANK_1
	sta		VRAM_BANK_PTR_H
	jsr		@bank_test
	
	lda		#@msg_bank2
	jsr		@print
	lda		#<VRAM_BANK_2
	sta		VRAM_BANK_PTR_L
	lda		#>VRAM_BANK_2
	sta		VRAM_BANK_PTR_H
	jsr		@bank_test
	
	lda		#@msg_bank3
	jsr		@print
	lda		#<VRAM_BANK_3
	sta		VRAM_BANK_PTR_L
	lda		#>VRAM_BANK_3
	sta		VRAM_BANK_PTR_H
	jsr		@bank_test

	jmp		@restart
	
@bank_test:
	sta		SLOT_STROBE
	sta		SLOT_SELECT
	ldy		#0
	sta		(VRAM_BANK_PTR),y
	
	lda		#<VRAM_ADDRESS
	sta		VRAM_PTR_L
	lda		#>VRAM_ADDRESS
	sta		VRAM_PTR_H
	
:	ldy		#0
:	lda		(VRAM_PTR),y
	pha
	lda		#0
:	sta		(VRAM_PTR),y
	cmp		(VRAM_PTR),y
	bne		@err
	sta		SPEAKER_OUT
	clc
	adc		#1
	cmp		#0
	bne		:-
	pla
	sta		(VRAM_PTR),y
	iny
	bne		:--
	
	inc		VRAM_PTR_H
	lda		VRAM_PTR_H
	cmp		#(>VRAM_ADDRESS+2)
	bcc		:---		; Pula se A >= imm
	
	lda		#@msg_ok
	jsr		@print
	jmp		PRINT_CR
	
@err:
	pla		; Limpa o stack
	jsr 	PRINT_ERR
	tya
	tax
	lda		VRAM_PTR_H
	jsr		PRINT_WORD
	jmp		PRINT_CR
	
@print:
	ldx		#<@msg_table
	ldy		#>@msg_table
	stx		PRINT_PTR_L
	sty		PRINT_PTR_H
	tay
:	lda		(PRINT_PTR),y
	bne		:+
	rts
:	jsr		PRINT_CHAR
	iny
	jmp		:--
	
@msg_table:
@msg_title	:= * - @msg_table
	textz		"VIDEX RAM TEST"
@msg_ok		:= * - @msg_table
	textz		"OK"
@msg_bank0	:= * - @msg_table
	textz		"BANK 0:"
@msg_bank1	:= * - @msg_table
	textz		"BANK 1:"
@msg_bank2	:= * - @msg_table
	textz		"BANK 2:"
@msg_bank3	:= * - @msg_table
	textz		"BANK 3:"
	
==============================