Proyecto Atari-DMD
- Poltergeist
- expert
- Mensajes: 1617
- Registrado: Lun Jul 14, 2008 7:36 pm
- Reputación: 9
Re: Proyecto Atari-DMD
Muy buena!!! ya hay scroll y se ve perfecto!!!
Felicitaciones!!!
Felicitaciones!!!
Re: Proyecto Atari-DMD
Nueva versión del driver, ahora con scrolling grueso, combinando las dos rutinas anteriores.
Vamos avanzando de a poco.
Vamos avanzando de a poco.
Código: Seleccionar todo
*=$4000
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
rol prepara.font.buffer2,x
asl prepara.font.buffer + 1
rol prepara.font.buffer2,x
asl prepara.font.buffer + 2
rol prepara.font.buffer2,x
asl prepara.font.buffer + 3
rol prepara.font.buffer2,x
asl prepara.font.buffer + 4
rol prepara.font.buffer2,x
asl prepara.font.buffer + 5
rol prepara.font.buffer2,x
asl prepara.font.buffer + 6
rol prepara.font.buffer2,x
asl prepara.font.buffer + 7
rol prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta display,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
inicio
jsr prepara.font
jsr init.vbd
inicio.loop0
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jsr wait
inc scroll.puntero
bne inicio.loop2.noinc
inc scroll.puntero+1
inicio.loop2.noinc
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne inicio.loop1
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne inicio.loop1
jmp inicio.loop0
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
scroll.puntero
.byte 0,0
*=$2e0
.word inicio
Re: Proyecto Atari-DMD
Nueva versión. Se supone hace scrolling fino. ZZT, confirma please!!
Código: Seleccionar todo
*=$4000
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jsr scroll
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
rol prepara.font.buffer2,x
asl prepara.font.buffer + 1
rol prepara.font.buffer2,x
asl prepara.font.buffer + 2
rol prepara.font.buffer2,x
asl prepara.font.buffer + 3
rol prepara.font.buffer2,x
asl prepara.font.buffer + 4
rol prepara.font.buffer2,x
asl prepara.font.buffer + 5
rol prepara.font.buffer2,x
asl prepara.font.buffer + 6
rol prepara.font.buffer2,x
asl prepara.font.buffer + 7
rol prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta scroll.tabla,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres+1
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
scroll
dec scroll.aux
bne scroll.no.reset
lda #$8
sta scroll.aux
inc scroll.puntero
bne scroll.noinc
inc scroll.puntero+1
scroll.noinc
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne scroll.no.reset
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne scroll.no.reset
lda #<tabla.retrogames-1
sta scroll.puntero
lda #>tabla.retrogames-1
sta scroll.puntero+1
scroll.no.reset
lda #$8
sec
sbc scroll.aux
tax
ldy #$00
scroll.loop3
lda scroll.tabla,x
sta display,y
inx
iny
cpy #display.columnas
bne scroll.loop3
rts
scroll.aux
.byte 8
scroll.puntero
.byte 0,0
scroll.tabla
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
inicio
jsr prepara.font
jsr init.vbd
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jmp inicio.loop1
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
*=$2e0
.word inicio
- ZZT
- Site Admin
- Mensajes: 10892
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 8
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Re: Proyecto Atari-DMD
Y este es el código del Willy, que se fue al chancho con la velocidad de exploración, y por eso se ve muy ténue. Fácil de arreglar.
Si se fijan bien, las letras se ven pulento (es el font del atari itself).
Si se fijan bien, las letras se ven pulento (es el font del atari itself).
Re: Proyecto Atari-DMD
Se ven al revés las letras. Esto debiera arreglarlo:
Código: Seleccionar todo
*=$4000
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jsr scroll
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
ror prepara.font.buffer2,x
asl prepara.font.buffer + 1
ror prepara.font.buffer2,x
asl prepara.font.buffer + 2
ror prepara.font.buffer2,x
asl prepara.font.buffer + 3
ror prepara.font.buffer2,x
asl prepara.font.buffer + 4
ror prepara.font.buffer2,x
asl prepara.font.buffer + 5
ror prepara.font.buffer2,x
asl prepara.font.buffer + 6
ror prepara.font.buffer2,x
asl prepara.font.buffer + 7
ror prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta scroll.tabla,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres+1
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
scroll
dec scroll.aux
bne scroll.no.reset
lda #$8
sta scroll.aux
inc scroll.puntero
bne scroll.noinc
inc scroll.puntero+1
scroll.noinc
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne scroll.no.reset
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne scroll.no.reset
lda #<tabla.retrogames-1
sta scroll.puntero
lda #>tabla.retrogames-1
sta scroll.puntero+1
scroll.no.reset
lda #$8
sec
sbc scroll.aux
tax
ldy #$00
scroll.loop3
lda scroll.tabla,x
sta display,y
inx
iny
cpy #display.columnas
bne scroll.loop3
rts
scroll.aux
.byte 8
scroll.puntero
.byte 0,0
scroll.tabla
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
inicio
jsr prepara.font
jsr init.vbd
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jmp inicio.loop1
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
*=$2e0
.word inicio
- ZZT
- Site Admin
- Mensajes: 10892
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 8
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Re: Proyecto Atari-DMD
Ahora si, se ven bacan pero aun muy tenues. Insisto, la velocidad de exploración está muy alta.
Re: Proyecto Atari-DMD
Prueba esta versión, calibrable con el paddle:
Código: Seleccionar todo
*=$4000
ciclos = 200 ; parámetro a calibrar
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
paddl0 = $0270 ;paddle 0
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jsr scroll
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
jsr inicia.pantalla ; para que no quede sobrecargada la última columna
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
ldx paddl0
imprime.columna.loop
nop
nop
nop
dex
bne imprime.columna.loop
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
ror prepara.font.buffer2,x
asl prepara.font.buffer + 1
ror prepara.font.buffer2,x
asl prepara.font.buffer + 2
ror prepara.font.buffer2,x
asl prepara.font.buffer + 3
ror prepara.font.buffer2,x
asl prepara.font.buffer + 4
ror prepara.font.buffer2,x
asl prepara.font.buffer + 5
ror prepara.font.buffer2,x
asl prepara.font.buffer + 6
ror prepara.font.buffer2,x
asl prepara.font.buffer + 7
ror prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta scroll.tabla,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres+1
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
scroll
dec scroll.aux
bne scroll.no.reset
lda #$8
sta scroll.aux
inc scroll.puntero
bne scroll.noinc
inc scroll.puntero+1
scroll.noinc
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne scroll.no.reset
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne scroll.no.reset
lda #<tabla.retrogames-1
sta scroll.puntero
lda #>tabla.retrogames-1
sta scroll.puntero+1
scroll.no.reset
lda #$8
sec
sbc scroll.aux
tax
ldy #$00
scroll.loop3
lda scroll.tabla,x
sta display,y
inx
iny
cpy #display.columnas
bne scroll.loop3
rts
scroll.aux
.byte 8
scroll.puntero
.byte 0,0
scroll.tabla
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
inicio
jsr prepara.font
jsr init.vbd
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jmp inicio.loop1
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
*=$2e0
.word inicio
Re: Proyecto Atari-DMD
Nueva versión: le agregué más NOP al grabar la columna, con ciclos regulables por paddle.
Le agregué además una instrucción que deje el color de fondo a blanco cuando termina la rutina, a fin de ver cuánto del barrido de la pantalla ocupa.
Saludos.
Le agregué además una instrucción que deje el color de fondo a blanco cuando termina la rutina, a fin de ver cuánto del barrido de la pantalla ocupa.
Saludos.
Código: Seleccionar todo
*=$4000
ciclos = 200 ; parámetro a calibrar
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
paddl0 = $0270 ;paddle 0
colbk= $d01a
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jsr scroll
lda #$0f
sta colbk
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
jsr inicia.pantalla ; para que no quede sobrecargada la última columna
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
ldx paddl0
imprime.columna.loop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dex
bne imprime.columna.loop
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
ror prepara.font.buffer2,x
asl prepara.font.buffer + 1
ror prepara.font.buffer2,x
asl prepara.font.buffer + 2
ror prepara.font.buffer2,x
asl prepara.font.buffer + 3
ror prepara.font.buffer2,x
asl prepara.font.buffer + 4
ror prepara.font.buffer2,x
asl prepara.font.buffer + 5
ror prepara.font.buffer2,x
asl prepara.font.buffer + 6
ror prepara.font.buffer2,x
asl prepara.font.buffer + 7
ror prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta scroll.tabla,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres+1
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
scroll
dec scroll.aux
bne scroll.no.reset
lda #$8
sta scroll.aux
inc scroll.puntero
bne scroll.noinc
inc scroll.puntero+1
scroll.noinc
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne scroll.no.reset
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne scroll.no.reset
lda #<tabla.retrogames-1
sta scroll.puntero
lda #>tabla.retrogames-1
sta scroll.puntero+1
scroll.no.reset
lda #$8
sec
sbc scroll.aux
tax
ldy #$00
scroll.loop3
lda scroll.tabla,x
sta display,y
inx
iny
cpy #display.columnas
bne scroll.loop3
rts
scroll.aux
.byte 8
scroll.puntero
.byte 0,0
scroll.tabla
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
inicio
jsr prepara.font
jsr init.vbd
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jmp inicio.loop1
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
*=$2e0
.word inicio
Re: Proyecto Atari-DMD
Increíble todo lo que se puede hacer con n atari.
- ZZT
- Site Admin
- Mensajes: 10892
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 8
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Re: Proyecto Atari-DMD
Atari da pa mucho. Lo mejor detodo es que los flippers de su época corren el software y hardware casi iguales, por eso es relativamente fácil hacer compatibilidades.Salonvip escribió:Increíble todo lo que se puede hacer con n atari.
Nup, no anda el scroll (se prenden solo la dos primeras columnas). El cambio de color de fondo si anda, y el efecto es alucinante!.WillySoft escribió:Nueva versión: le agregué más NOP al grabar la columna, con ciclos regulables por paddle.
Le agregué además una instrucción que deje el color de fondo a blanco cuando termina la rutina, a fin de ver cuánto del barrido de la pantalla ocupa.
Saludos.► Mostrar Spoiler
- ZZT
- Site Admin
- Mensajes: 10892
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 8
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Re: Proyecto Atari-DMD
Atari da pa mucho. Lo mejor detodo es que los flippers de su época corren el software y hardware casi iguales, por eso es relativamente fácil hacer compatibilidades.Salonvip escribió:Increíble todo lo que se puede hacer con n atari.
Nup, no anda el scroll (se prenden solo la dos primeras columnas). El cambio de color de fondo si anda, y el efecto es alucinante!.WillySoft escribió:Nueva versión: le agregué más NOP al grabar la columna, con ciclos regulables por paddle.
Le agregué además una instrucción que deje el color de fondo a blanco cuando termina la rutina, a fin de ver cuánto del barrido de la pantalla ocupa.
Saludos.► Mostrar Spoiler
Re: Proyecto Atari-DMD
Cool!
Re: Proyecto Atari-DMD
Prueba esta versión, le saqué un JSR final que buscaba nivelar la intensidad de todas las columnas:ZZT escribió: Nup, no anda el scroll (se prenden solo la dos primeras columnas). El cambio de color de fondo si anda, y el efecto es alucinante!.
Código: Seleccionar todo
*=$4000
ciclos = 200 ; parámetro a calibrar
font = $E000
font2 = $6000
pt.1 = $CB
pt.2 = $CD
pt.3 = $CF
porta =$d300 ; 54016
pactl =$d302
setvbv =$e45c
xitvbv =$e462
clock = $14
CDTMV3 =$021c
paddl0 = $0270 ;paddle 0
colbk= $d01a
prepara.font.caracteres = 128
display.columnas = 48 ;¿pueden ser más?
display.caracteres = 6
vbd
jsr borra.pantalla
jsr despliega.pantalla
jsr scroll
lda #$0f
sta colbk
jmp xitvbv
init.vbd
lda #$2B
sta pactl
lda #$FF
sta porta
ldy #<vbd
ldx #>vbd
lda #$07
jsr setvbv
borra.pantalla
;vamos a tomar la rutina desplegada por ZZT.
;reset
lda #0
sta 54604 ; start reset (debe ser 0 y 1 con un ck del latch entremedio)
lda #0
sta 54602 ; activando el ck del latch
lda #1
sta 54604 ; end reset
;output_enable
lda #0
sta 54601 ; OE debe ser 0
;joy_port
lda #0
sta porta ; envía un 0 al joy (8 datos X columna)
;serial_data
lda #1
sta 54600 ; serial data =1 (poner a 0 después de comenzar exploración (inicio1)
rts
despliega.pantalla
ldx #display.columnas-1
despliega.pantalla.loop1
jsr inicia.pantalla
lda display,x
jsr imprime.columna
dex
bpl despliega.pantalla.loop1
; jsr inicia.pantalla ; para que no quede sobrecargada la última columna
rts
inicia.pantalla
lda #1
sta 54603 ; activa ck
lda #0
sta 54603 ; desactiva ck
lda #1
sta 54602 ; activa latch
lda #0
sta 54602 ; desactiva latch
lda #0
sta 54600 ; serial data= 0. Ya se cargo un 1 al activarse los clock ahora debe ser 0 por cada paso
; de la exploracion (si no pone 0 todas las columnas se activarían)
rts
imprime.columna
eor #$ff
sta porta
ldx paddl0
imprime.columna.loop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dex
bne imprime.columna.loop
rts
display
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
;lista la rutina del display, ahora la del font
prepara.font
lda #>font
sta pt.1+1
lda #<font
sta pt.1
lda #>font2
sta pt.2+1
lda #<font2
sta pt.2
lda #prepara.font.caracteres ; caracteres a transferir
sta prepara.font.contador
prepara.font.loop1
ldy #$7 ;transferimos el font a un buffer auxiliar para trabajar
prepara.font.loop2
lda (pt.1),y
sta prepara.font.buffer,y
lda #$00
sta prepara.font.buffer2,y
dey
bpl prepara.font.loop2
; Ahora vamos a transponer los datos
ldx #$00
prepara.font.loop3
asl prepara.font.buffer
ror prepara.font.buffer2,x
asl prepara.font.buffer + 1
ror prepara.font.buffer2,x
asl prepara.font.buffer + 2
ror prepara.font.buffer2,x
asl prepara.font.buffer + 3
ror prepara.font.buffer2,x
asl prepara.font.buffer + 4
ror prepara.font.buffer2,x
asl prepara.font.buffer + 5
ror prepara.font.buffer2,x
asl prepara.font.buffer + 6
ror prepara.font.buffer2,x
asl prepara.font.buffer + 7
ror prepara.font.buffer2,x
inx
cpx #8
bne prepara.font.loop3
; y ahora a copiar al font2
ldy #$7
prepara.font.loop4
lda prepara.font.buffer2,y
sta (pt.2),y
dey
bpl prepara.font.loop4
lda pt.1
clc
adc #$08
sta pt.1
lda pt.1+1
adc #$00
sta pt.1+1
lda pt.2
clc
adc #$08
sta pt.2
lda pt.2+1
adc #$00
sta pt.2+1
dec prepara.font.contador
bne prepara.font.loop1
rts
prepara.font.buffer
.byte 0,0,0,0,0,0,0,0
prepara.font.buffer2
.byte 0,0,0,0,0,0,0,0
prepara.font.contador
.byte 0
;rutina que convierte el texto en caracteres de display
;Parámetros: "x" guarda el byte menor de la posición.
; "y" guarda el byte mayor de la posición
prepara.caracteres
stx pt.1
sty pt.1+1
ldy #$00
ldx #$00
prepara.caracteres.loop1
lda (pt.1),y
sta prepara.caracteres.caracter
lda #$00
sta prepara.caracteres.caracter+1
;vamos a multiplicarlo por 8
asl prepara.caracteres.caracter ;*2
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*4
rol prepara.caracteres.caracter+1
asl prepara.caracteres.caracter ;*8
rol prepara.caracteres.caracter+1
lda prepara.caracteres.caracter
clc
adc #<font2
sta pt.2
lda prepara.caracteres.caracter+1
adc #>font2
sta pt.2+1
sty pt.3
ldy #$00
prepara.caracteres.loop2
lda (pt.2),y
sta scroll.tabla,x
inx
iny
cpy #$08
bne prepara.caracteres.loop2
ldy pt.3
iny
cpy #display.caracteres+1
bne prepara.caracteres.loop1
rts
prepara.caracteres.caracter
.byte 0,0
scroll
dec scroll.aux
bne scroll.no.reset
lda #$8
sta scroll.aux
inc scroll.puntero
bne scroll.noinc
inc scroll.puntero+1
scroll.noinc
ldx scroll.puntero
ldy scroll.puntero+1
jsr prepara.caracteres
lda scroll.puntero
cmp #<tabla.retrogames.fin
bne scroll.no.reset
lda scroll.puntero+1
cmp #>tabla.retrogames.fin
bne scroll.no.reset
lda #<tabla.retrogames-1
sta scroll.puntero
lda #>tabla.retrogames-1
sta scroll.puntero+1
scroll.no.reset
lda #$8
sec
sbc scroll.aux
tax
ldy #$00
scroll.loop3
lda scroll.tabla,x
sta display,y
inx
iny
cpy #display.columnas
bne scroll.loop3
rts
scroll.aux
.byte 8
scroll.puntero
.byte 0,0
scroll.tabla
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
inicio
jsr prepara.font
jsr init.vbd
ldx #<tabla.retrogames
ldy #>tabla.retrogames
stx scroll.puntero
sty scroll.puntero+1
inicio.loop1
ldy #display.columnas-1
inicio.loop2
lda display,y
sta (88),y
dey
bpl inicio.loop2
jmp inicio.loop1
wait
lda #8
sta CDTMV3
lda #0
sta CDTMV3+1
wait.loop
lda CDTMV3
bne wait.loop
rts
tabla.retrogames
.sbyte " RETROGAMES"
tabla.retrogames.fin
.sbyte " "
*=$2e0
.word inicio
- ZZT
- Site Admin
- Mensajes: 10892
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 8
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Re: Proyecto Atari-DMD
Sigue sin haber scroll.
Re: Proyecto Atari-DMD
Que hermoso y la mansa pega programando eso. A mi me vendría útil para la puerta de mi pieza un "no molestar" así de cool,
-
- Similar Topics
- Respuestas
- Vistas
- Último mensaje
-
- 0 Respuestas
- 867 Vistas
-
Último mensaje por Ramogue
-
- 4 Respuestas
- 1856 Vistas
-
Último mensaje por Poltergeist
-
- 0 Respuestas
- 823 Vistas
-
Último mensaje por BonesCollector
-
- 2 Respuestas
- 1332 Vistas
-
Último mensaje por dgallardov