Subject: Re: [stella] My version of a scrolling demo From: Eckhard Stolberg <Eckhard_Stolberg@xxxxxxxxxxxxxxxxxxxxx> Date: Sat, 03 Jul 1999 16:03:23 +0200 |
At 19:58 02.07.99 +0200, you wrote: >No, not at all... in fact I wouldn't have expected a scrolling demo using a >charset AND a proportional font! This is great!!! I think I'll have to >re-convert this to the C-64... I haven't seen anyone doing a scrolling >proportional font there yet... That wasn't too hard. I needed a counter for the shifting anyway to see when I have to copy the next character. Since each character is only seven scanlines high, adding a width value as the eighth byte disn't create much ovehead. >of course you could afterwards still save more space on the cart by >compressing the font to the chars that were actually used... ;-) If someone really needs more text: I use only seven bits out of every byte for the text. If you compress that, you can get room for 400 characters more. But then you would have to write yourself a text conversion program to get the data into the BIN. ;-) >Sorry, but SCRLBAR5.BIN is also hard to read. The reason is that it scrolls >relatively fast, and the color bars go by the scrolling message on the left >and right. Maybe it'd be better to have the message itself change the color >(if possible)? I think you are right. I slowed it down by half the speed and it is much more readable now. Changing the text colour in every scanline would be very hard, since you have to change two colour registers and the six-sprite routine is already pretty tight. You could change the text colour every frame or for each new 'paragraph' though. Someone else already experimented with my binaries and sent me his results. Not that I would mind that, but if you use a poem as your test text, please choose one that even foreigners can understand. ;-) For everyone who want to experiment with my scrolling text demo too, here is the source code. It isn't commented at all, but I think it's simple enough that you can make it out anyway. I added code to slow down shifting speed and fixed a little bug, so that you can have only five byte of text less than in the last demos. If you only want to have your own text, you can add as much between the TEXTSTART and TEXTEND label as DASM allows you without complaining. SCRLBAR8.DAS is the single scanline version. SCRLBAR7.DAS is the double scanline version. SCRLFONT.GRP contains the data for the font. VCS.H contains the equates for the TIA and the RIOT, in case you don't have one of those already. Ciao, Eckhard Stolberg ===Start of SCRLBAR8.DAS==================================================== processor 6502 include vcs.h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Zeropage variables declaration ; SEG.U Variables ORG $80 LoopCount ds 1 Temp ds 1 Sprite1 ds 7 Sprite2 ds 7 Sprite3 ds 7 Sprite4 ds 7 Sprite5 ds 7 Sprite6 ds 7 ShiftCount ds 1 Sprite7 ds 7 TextPTR ds 2 CharPTR ds 2 ColourCycle ds 1 TempColour ds 1 SkipFrame ds 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; SEG Code ORG $f000 include scrlfont.grp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Program initialization ; Cart_Init: sei cld ldx #$00 txa AllClear: sta $00,x dex bne AllClear txs DemoInit: sta WSYNC pha lda #$f1 sta HMP1 sta CTRLPF lda #$0a sta COLUP0 sta COLUP1 lda #$e3 sta HMP0 sta NUSIZ0 sta NUSIZ1 sta VDELP0 sta VDELP1 sta RESP0 sta RESP1 sta WSYNC sta HMOVE jsr ResetTextPTR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Main program loop ; NewFrame: ldx #$02 sta WSYNC stx VSYNC sta WSYNC sta WSYNC sta WSYNC sta VSYNC lda #45 sta TIM64T eor SkipFrame sta SkipFrame bne VblankLoop dec ColourCycle ldx #6 ShiftDisp: asl Sprite7,x rol Sprite6,x rol Sprite5,x rol Sprite4,x rol Sprite3,x rol Sprite2,x rol Sprite1,x dex bpl ShiftDisp dec ShiftCount bpl VblankLoop ldy #7 CopyChar: lda (CharPTR),y sta ShiftCount,y dey bpl CopyChar inc TextPTR bne T1 inc TextPTR+1 T1: jsr NewCharPTR lda #<TextEnd cmp TextPTR bne NoWrap ldx #>TextEnd cpx TextPTR+1 bne NoWrap jsr ResetTextPTR NoWrap: VblankLoop: lda INTIM bne VblankLoop sta WSYNC sta VBLANK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DisplayStart: ldy ColourCycle jsr ColourFX sty COLUBK dey sty TempColour lda #%11111100 sta PF2 lda #6 sta LoopCount DS1: ldx LoopCount lda Sprite1,x sta GRP0 sta WSYNC ldy TempColour sty COLUBK lda Sprite2,x sta GRP1 lda Sprite3,x sta GRP0 lda Sprite4,x sta Temp lda Sprite5,x tay lda Sprite6,x tax lda Temp sta GRP1 sty GRP0 stx GRP1 stx GRP0 dec TempColour ldy TempColour nop ldx LoopCount lda Sprite1,x sta GRP0 lda Sprite2,x sta GRP1 sty COLUBK lda Sprite3,x sta GRP0 pha pla lda Sprite5,x tay lda Sprite6,x tax lda Temp dec TempColour sta GRP1 sty GRP0 stx GRP1 stx GRP0 dec LoopCount bpl DS1 lda #0 sta GRP0 sta GRP1 sta GRP0 sta GRP1 sta PF2 ldy TempColour jsr ColourFX lda #$22 ;dec 34 = hex 22 sta VBLANK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OverscanStart: sta TIM64T OverscanLoop: lda INTIM bne OverscanLoop sta WSYNC jmp NewFrame ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ResetTextPTR lda #<TextStart sta TextPTR lda #>TextStart sta TextPTR+1 NewCharPTR: ldy #0 lda (TextPTR),y sec sbc #32 sta CharPTR tya asl CharPTR rol asl CharPTR rol asl CharPTR rol ora #$f0 ; start of character data (highbyte) sta CharPTR+1 rts ColourFX: ldx #88 D1: sty COLUBK sta WSYNC dey dex bne D1 rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; TextStart: .byte "This is just a test text. " .byte "This is a test text too. " .byte "text wrap: 3 2 1 " TextEnd: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Set up the 6502 interrupt vector table ; ORG $fffc Reset .word Cart_Init IRQ .word Cart_Init END ===Start of SCRLBAR7.DAS=================================================== processor 6502 include vcs.h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Zeropage variables declaration ; SEG.U Variables ORG $80 LoopCount ds 1 Temp ds 1 Sprite1 ds 7 Sprite2 ds 7 Sprite3 ds 7 Sprite4 ds 7 Sprite5 ds 7 Sprite6 ds 7 ShiftCount ds 1 Sprite7 ds 7 TextPTR ds 2 CharPTR ds 2 ColourCycle ds 1 TempColour ds 1 SkipFrame ds 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; SEG Code ORG $f000 include scrlfont.grp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Program initialization ; Cart_Init: sei cld ldx #$00 txa AllClear: sta $00,x dex bne AllClear txs DemoInit: sta WSYNC pha lda #$f1 sta HMP1 sta CTRLPF lda #$0a sta COLUP0 sta COLUP1 lda #$e3 sta HMP0 sta NUSIZ0 sta NUSIZ1 sta VDELP0 sta VDELP1 sta RESP0 sta RESP1 sta WSYNC sta HMOVE jsr ResetTextPTR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Main program loop ; NewFrame: ldx #$02 sta WSYNC stx VSYNC sta WSYNC sta WSYNC sta WSYNC sta VSYNC lda #45 sta TIM64T eor SkipFrame sta SkipFrame bne VblankLoop dec ColourCycle ldx #6 ShiftDisp: asl Sprite7,x rol Sprite6,x rol Sprite5,x rol Sprite4,x rol Sprite3,x rol Sprite2,x rol Sprite1,x dex bpl ShiftDisp dec ShiftCount bpl VblankLoop ldy #7 CopyChar: lda (CharPTR),y sta ShiftCount,y dey bpl CopyChar inc TextPTR bne T1 inc TextPTR+1 T1: jsr NewCharPTR lda #<TextEnd cmp TextPTR bne NoWrap ldx #>TextEnd cpx TextPTR+1 bne NoWrap jsr ResetTextPTR NoWrap: VblankLoop: lda INTIM bne VblankLoop sta WSYNC sta VBLANK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DisplayStart: ldy ColourCycle jsr ColourFX sty COLUBK dey sty TempColour lda #%11111100 sta PF2 lda #6 sta LoopCount DS1: ldx LoopCount lda Sprite1,x sta GRP0 sta WSYNC ldy TempColour sty COLUBK lda Sprite2,x sta GRP1 lda Sprite3,x sta GRP0 lda Sprite4,x sta Temp lda Sprite5,x tay lda Sprite6,x tax lda Temp sta GRP1 sty GRP0 stx GRP1 stx GRP0 dec TempColour ldy TempColour nop ldx LoopCount lda Sprite1,x sta GRP0 lda Sprite2,x sta GRP1 sty COLUBK lda Sprite3,x sta GRP0 pha pla lda Sprite5,x tay lda Sprite6,x tax lda Temp dec TempColour sta GRP1 sty GRP0 stx GRP1 stx GRP0 dec LoopCount bpl DS1 lda #0 sta GRP0 sta GRP1 sta GRP0 sta GRP1 sta PF2 ldy TempColour jsr ColourFX lda #$22 ;dec 34 = hex 22 sta VBLANK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OverscanStart: sta TIM64T OverscanLoop: lda INTIM bne OverscanLoop sta WSYNC jmp NewFrame ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ResetTextPTR lda #<TextStart sta TextPTR lda #>TextStart sta TextPTR+1 NewCharPTR: ldy #0 lda (TextPTR),y sec sbc #32 sta CharPTR tya asl CharPTR rol asl CharPTR rol asl CharPTR rol ora #$f0 ; start of character data (highbyte) sta CharPTR+1 rts ColourFX: ldx #88 D1: sty COLUBK sta WSYNC dey dex bne D1 rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; TextStart: .byte "This is just a test text. " .byte "This is a test text too. " .byte "text wrap: 3 2 1 " TextEnd: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ; ; Set up the 6502 interrupt vector table ; ORG $fffc Reset .word Cart_Init IRQ .word Cart_Init END ===Start of SCRLFONT.GRP=================================================== ; The first value for each character represents the character's width-1 ; BLANK .byte 5 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 ; ! .byte 2 .byte %11000000 .byte %00000000 .byte %11000000 .byte %11000000 .byte %11000000 .byte %11000000 .byte %11000000 ; " .byte 3 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %10100000 .byte %10100000 ; # .byte 5 .byte %01010000 .byte %01010000 .byte %11111000 .byte %01010000 .byte %11111000 .byte %01010000 .byte %01010000 ; $ .byte 7 .byte %00101000 .byte %11111100 .byte %00101010 .byte %01111100 .byte %10101000 .byte %01111110 .byte %00101000 ; % .byte 7 .byte %10000100 .byte %01001010 .byte %00100100 .byte %00010000 .byte %01001000 .byte %10100100 .byte %01000010 ; & .byte 7 .byte %01100010 .byte %10010100 .byte %10001000 .byte %10010100 .byte %01100000 .byte %10010000 .byte %01100000 ; ' .byte 1 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %10000000 .byte %10000000 ; ( .byte 3 .byte %00100000 .byte %01000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %01000000 .byte %00100000 ; ) .byte 3 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %01000000 .byte %10000000 ; * .byte 5 .byte %00000000 .byte %00100000 .byte %10101000 .byte %01110000 .byte %01110000 .byte %10101000 .byte %00100000 ; + .byte 5 .byte %00000000 .byte %00000000 .byte %00100000 .byte %00100000 .byte %11111000 .byte %00100000 .byte %00100000 ; , .byte 2 .byte %10000000 .byte %01000000 .byte %11000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 ; - .byte 5 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %11111000 .byte %00000000 .byte %00000000 ; . .byte 2 .byte %11000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 ; / .byte 7 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00010000 .byte %00001000 .byte %00000100 .byte %00000010 ; 0 .byte 5 .byte %01110000 .byte %10001000 .byte %11001000 .byte %10101000 .byte %10011000 .byte %10001000 .byte %01110000 ; 1 .byte 5 .byte %11111000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %10100000 .byte %01100000 .byte %00100000 ; 2 .byte 5 .byte %11111000 .byte %10000000 .byte %10000000 .byte %01000000 .byte %00110000 .byte %00001000 .byte %11110000 ; 3 .byte 5 .byte %11100000 .byte %00010000 .byte %00001000 .byte %00001000 .byte %00110000 .byte %00001000 .byte %11110000 ; 4 .byte 5 .byte %00001000 .byte %00001000 .byte %00001000 .byte %00001000 .byte %11111000 .byte %10001000 .byte %10001000 ; 5 .byte 5 .byte %11100000 .byte %00010000 .byte %00001000 .byte %00001000 .byte %11110000 .byte %10000000 .byte %11111000 ; 6 .byte 5 .byte %01100000 .byte %10010000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %01000000 .byte %00111000 ; 7 .byte 5 .byte %10000000 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00010000 .byte %00001000 .byte %11111000 ; 8 .byte 5 .byte %01110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01110000 .byte %10001000 .byte %01110000 ; 9 .byte 5 .byte %11100000 .byte %00010000 .byte %00001000 .byte %00001000 .byte %01111000 .byte %10001000 .byte %01110000 ; : .byte 2 .byte %00000000 .byte %00000000 .byte %11000000 .byte %00000000 .byte %00000000 .byte %11000000 .byte %00000000 ; ; .byte 2 .byte %10000000 .byte %01000000 .byte %11000000 .byte %00000000 .byte %00000000 .byte %11000000 .byte %00000000 ; < .byte 4 .byte %00010000 .byte %00100000 .byte %01000000 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00010000 ; = .byte 5 .byte %00000000 .byte %00000000 .byte %00000000 .byte %11111000 .byte %00000000 .byte %11111000 .byte %00000000 ; > .byte 4 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00010000 .byte %00100000 .byte %01000000 .byte %10000000 ; ? .byte 5 .byte %00100000 .byte %00000000 .byte %00100000 .byte %00100000 .byte %00010000 .byte %10001000 .byte %01110000 ; @ .byte 7 .byte %01111100 .byte %10000000 .byte %10011110 .byte %10101010 .byte %10011010 .byte %10000010 .byte %01111100 ; A .byte 5 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11111000 .byte %10001000 .byte %01110000 ; B .byte 5 .byte %11110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %10001000 .byte %11110000 ; C .byte 5 .byte %01110000 .byte %10001000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10001000 .byte %01110000 ; D .byte 5 .byte %11100000 .byte %10010000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10010000 .byte %11100000 ; E .byte 5 .byte %11111000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %11100000 .byte %10000000 .byte %11111000 ; F .byte 5 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %11100000 .byte %10000000 .byte %11111000 ; G .byte 5 .byte %01110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10011000 .byte %10000000 .byte %01111000 ; H .byte 5 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11111000 .byte %10001000 .byte %10001000 ; I .byte 3 .byte %11100000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %11100000 ; J .byte 5 .byte %01110000 .byte %10001000 .byte %00001000 .byte %00001000 .byte %00001000 .byte %00001000 .byte %00001000 ; K .byte 5 .byte %10001000 .byte %10010000 .byte %10100000 .byte %11000000 .byte %10100000 .byte %10010000 .byte %10001000 ; L .byte 5 .byte %11111000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 ; M .byte 7 .byte %10000010 .byte %10000010 .byte %10010010 .byte %10111010 .byte %11101110 .byte %11000110 .byte %10000010 ; N .byte 6 .byte %10000100 .byte %10001100 .byte %10011100 .byte %10110100 .byte %11100100 .byte %11000100 .byte %10000100 ; O .byte 5 .byte %01110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01110000 ; P .byte 5 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %11110000 .byte %10001000 .byte %11110000 ; Q .byte 5 .byte %01101000 .byte %10010000 .byte %10101000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01110000 ; R .byte 5 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %10001000 .byte %11110000 ; S .byte 5 .byte %11110000 .byte %00001000 .byte %00001000 .byte %00001000 .byte %01110000 .byte %10000000 .byte %01111000 ; T .byte 5 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %11111000 ; U .byte 5 .byte %01110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 ; V .byte 5 .byte %00100000 .byte %00100000 .byte %01010000 .byte %01010000 .byte %10001000 .byte %10001000 .byte %10001000 ; W .byte 7 .byte %01000100 .byte %11101110 .byte %10111010 .byte %10010010 .byte %10000010 .byte %10000010 .byte %10000010 ; X .byte 5 .byte %10001000 .byte %10001000 .byte %01010000 .byte %00100000 .byte %01010000 .byte %10001000 .byte %10001000 ; Y .byte 5 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %01110000 .byte %10001000 .byte %10001000 ; Z .byte 5 .byte %11111000 .byte %10000000 .byte %01000000 .byte %00100000 .byte %00010000 .byte %00001000 .byte %11111000 ; [ .byte 3 .byte %11100000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %11100000 ; \ .byte 7 .byte %00000010 .byte %00000100 .byte %00001000 .byte %00010000 .byte %00100000 .byte %01000000 .byte %10000000 ; ] .byte 3 .byte %11100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %11100000 ; ^ .byte 5 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %10001000 .byte %01010000 .byte %00100000 ; _ .byte 5 .byte %11111000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 ; ` .byte 2 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %01000000 .byte %10000000 .byte %10000000 ; a .byte 5 .byte %01111000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01111000 .byte %00000000 .byte %00000000 ; b .byte 5 .byte %11110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %10000000 .byte %10000000 ; c .byte 5 .byte %01111000 .byte %10000000 .byte %10000000 .byte %10000000 .byte %01111000 .byte %00000000 .byte %00000000 ; d .byte 5 .byte %01111000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01111000 .byte %00001000 .byte %00001000 ; e .byte 5 .byte %01111000 .byte %10000000 .byte %11111000 .byte %10001000 .byte %01110000 .byte %00000000 .byte %00000000 ; f .byte 5 .byte %01000000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %11110000 .byte %01000000 .byte %00111000 ; g .byte 5 .byte %11110000 .byte %00001000 .byte %01111000 .byte %10001000 .byte %01110000 .byte %00000000 .byte %00000000 ; h .byte 5 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %10000000 .byte %10000000 ; i .byte 3 .byte %11100000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %11000000 .byte %00000000 .byte %01000000 ; j .byte 3 .byte %11000000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00100000 .byte %00000000 .byte %00100000 ; k .byte 5 .byte %10001000 .byte %10010000 .byte %11100000 .byte %10010000 .byte %10001000 .byte %10000000 .byte %10000000 ; l .byte 3 .byte %11100000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %11000000 ; m .byte 7 .byte %10010010 .byte %10010010 .byte %10010010 .byte %10010010 .byte %11111100 .byte %00000000 .byte %00000000 ; n .byte 5 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %11110000 .byte %00000000 .byte %00000000 ; o .byte 5 .byte %01110000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %01110000 .byte %00000000 .byte %00000000 ; p .byte 5 .byte %10000000 .byte %10000000 .byte %11110000 .byte %10001000 .byte %11110000 .byte %00000000 .byte %00000000 ; q .byte 5 .byte %00001000 .byte %00001000 .byte %01111000 .byte %10001000 .byte %01111000 .byte %00000000 .byte %00000000 ; r .byte 5 .byte %10000000 .byte %10000000 .byte %10000000 .byte %11001000 .byte %10110000 .byte %00000000 .byte %00000000 ; s .byte 5 .byte %11110000 .byte %00001000 .byte %01110000 .byte %10000000 .byte %01111000 .byte %00000000 .byte %00000000 ; t .byte 5 .byte %00111000 .byte %01000000 .byte %01000000 .byte %01000000 .byte %11111000 .byte %01000000 .byte %01000000 ; u .byte 5 .byte %01111000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %10001000 .byte %00000000 .byte %00000000 ; v .byte 5 .byte %00100000 .byte %01010000 .byte %01010000 .byte %10001000 .byte %10001000 .byte %00000000 .byte %00000000 ; w .byte 7 .byte %01000100 .byte %10101010 .byte %10010010 .byte %10000010 .byte %10000010 .byte %00000000 .byte %00000000 ; x .byte 5 .byte %10001000 .byte %01010000 .byte %00100000 .byte %01010000 .byte %10001000 .byte %00000000 .byte %00000000 ; y .byte 5 .byte %11110000 .byte %00001000 .byte %01111000 .byte %10001000 .byte %10001000 .byte %00000000 .byte %00000000 ; z .byte 5 .byte %11111000 .byte %01000000 .byte %00100000 .byte %00010000 .byte %11111000 .byte %00000000 .byte %00000000 ; { .byte 3 .byte %00100000 .byte %01000000 .byte %01000000 .byte %10000000 .byte %01000000 .byte %01000000 .byte %00100000 ; | .byte 1 .byte %10000000 .byte %10000000 .byte %10000000 .byte %00000000 .byte %10000000 .byte %10000000 .byte %10000000 ; } .byte 3 .byte %10000000 .byte %01000000 .byte %01000000 .byte %00100000 .byte %01000000 .byte %01000000 .byte %10000000 ; ~ .byte 6 .byte %00000000 .byte %00000000 .byte %00000000 .byte %10011000 .byte %01100100 .byte %00000000 .byte %00000000 ===Start of VCS.H========================================================== ; globals ; Atari 2600 Equates VSYNC equ $00 ; 0000 00x0 Vertical Sync Set-Clear VBLANK equ $01 ; xx00 00x0 Vertical Blank Set-Clear WSYNC equ $02 ; ---- ---- Wait for Horizontal Blank RSYNC equ $03 ; ---- ---- Reset Horizontal Sync Counter NUSIZ0 equ $04 ; 00xx 0xxx Number-Size player/missle 0 NUSIZ1 equ $05 ; 00xx 0xxx Number-Size player/missle 1 COLUP0 equ $06 ; xxxx xxx0 Color-Luminance Player 0 COLUP1 equ $07 ; xxxx xxx0 Color-Luminance Player 1 COLUPF equ $08 ; xxxx xxx0 Color-Luminance Playfield COLUBK equ $09 ; xxxx xxx0 Color-Luminance Background CTRLPF equ $0A ; 00xx 0xxx Control Playfield, Ball, Collisions REFP0 equ $0B ; 0000 x000 Reflection Player 0 REFP1 equ $0C ; 0000 x000 Reflection Player 1 PF0 equ $0D ; xxxx 0000 Playfield Register Byte 0 PF1 equ $0E ; xxxx xxxx Playfield Register Byte 1 PF2 equ $0F ; xxxx xxxx Playfield Register Byte 2 RESP0 equ $10 ; ---- ---- Reset Player 0 RESP1 equ $11 ; ---- ---- Reset Player 1 RESM0 equ $12 ; ---- ---- Reset Missle 0 RESM1 equ $13 ; ---- ---- Reset Missle 1 RESBL equ $14 ; ---- ---- Reset Ball AUDC0 equ $15 ; 0000 xxxx Audio Control 0 AUDC1 equ $16 ; 0000 xxxx Audio Control 1 AUDF0 equ $17 ; 000x xxxx Audio Frequency 0 AUDF1 equ $18 ; 000x xxxx Audio Frequency 1 AUDV0 equ $19 ; 0000 xxxx Audio Volume 0 AUDV1 equ $1A ; 0000 xxxx Audio Volume 1 GRP0 equ $1B ; xxxx xxxx Graphics Register Player 0 GRP1 equ $1C ; xxxx xxxx Graphics Register Player 1 ENAM0 equ $1D ; 0000 00x0 Graphics Enable Missle 0 ENAM1 equ $1E ; 0000 00x0 Graphics Enable Missle 1 ENABL equ $1F ; 0000 00x0 Graphics Enable Ball HMP0 equ $20 ; xxxx 0000 Horizontal Motion Player 0 HMP1 equ $21 ; xxxx 0000 Horizontal Motion Player 1 HMM0 equ $22 ; xxxx 0000 Horizontal Motion Missle 0 HMM1 equ $23 ; xxxx 0000 Horizontal Motion Missle 1 HMBL equ $24 ; xxxx 0000 Horizontal Motion Ball VDELP0 equ $25 ; 0000 000x Vertical Delay Player 0 VDELP1 equ $26 ; 0000 000x Vertical Delay Player 1 VDELBL equ $27 ; 0000 000x Vertical Delay Ball RESMP0 equ $28 ; 0000 00x0 Reset Missle 0 to Player 0 RESMP1 equ $29 ; 0000 00x0 Reset Missle 1 to Player 1 HMOVE equ $2A ; ---- ---- Apply Horizontal Motion HMCLR equ $2B ; ---- ---- Clear Horizontal Move Registers CXCLR equ $2C ; ---- ---- Clear Collision Latches ; Read Address Registers ; bit 7 bit 6 CXM0P equ $0 ; xx00 0000 Read Collision M0-P1 M0-P0 CXM1P equ $1 ; xx00 0000 M1-P0 M1-P1 CXP0FB equ $2 ; xx00 0000 P0-PF P0-BL CXP1FB equ $3 ; xx00 0000 P1-PF P1-BL CXM0FB equ $4 ; xx00 0000 M0-PF M0-BL CXM1FB equ $5 ; xx00 0000 M1-PF M1-BL CXBLPF equ $6 ; x000 0000 BL-PF ----- CXPPMM equ $7 ; xx00 0000 P0-P1 M0-M1 INPT0 equ $8 ; x000 0000 Read Pot Port 0 INPT1 equ $9 ; x000 0000 Read Pot Port 1 INPT2 equ $A ; x000 0000 Read Pot Port 2 INPT3 equ $B ; x000 0000 Read Pot Port 3 INPT4 equ $C ; x000 0000 Read Input (Trigger) 0 INPT5 equ $D ; x000 0000 Read Input (Trigger) 1 ; Atari 2600 RIOT Memory Map ; RAM equ $80 ; 80-FF, also shadowed to $180-$1FF SWCHA equ $280 ; Port A data register for joysticks: ; Bits 4-7 for player 1. Bits 0-3 for player 2. SWACNT equ $281 ; Port A data direction register (DDR) SWCHB equ $282 ; Port B data (console switches) SWBCNT equ $283 ; Port B DDR INTIM equ $284 ; Timer output TIM1T equ $294 ; set 1 clock interval TIM8T equ $295 ; set 8 clock interval TIM64T equ $296 ; set 64 clock interval T1024T equ $297 ; set 1024 clock interval -- Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] My version of a scroll, woloch.kurt. :E2-RB. | Thread | Re: [stella] New scrolling text car, Eckhard Stolberg |
Re: [stella] My version of a scroll, woloch.kurt. :E2-RB. | Date | [stella] Request for Kevin Horton's, David Schweinsberg |
Month |