[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:"
==============================