mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-18 06:09:08 +00:00
text: move: sorta working
This commit is contained in:
parent
a93f95f54e
commit
8345d74e3e
164
textmode/textscroll/comet.s
Normal file
164
textmode/textscroll/comet.s
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
|
||||||
|
CH = $24
|
||||||
|
CV = $25
|
||||||
|
BASL = $28
|
||||||
|
BASH = $29
|
||||||
|
SEEDL = $4E
|
||||||
|
FACL = $9D
|
||||||
|
FACH = $9E
|
||||||
|
|
||||||
|
DRAW_PAGE = $FF
|
||||||
|
|
||||||
|
PAGE0 = $C054
|
||||||
|
GETCHAR = $D72C
|
||||||
|
HGR = $F3E2
|
||||||
|
SETTXT = $FB39
|
||||||
|
TABV = $FB5B ; store A in CV and call MON_VTAB
|
||||||
|
STORADV = $FBF0 ; store A at (BASL),CH, advancing CH, trash Y
|
||||||
|
MON_VTAB = $FC22 ; VTAB to CV
|
||||||
|
VTABZ = $FC24 ; VTAB to value in A
|
||||||
|
HOME = $FC58
|
||||||
|
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||||
|
|
||||||
|
COUT = $FDED
|
||||||
|
COUT1 = $FDF0
|
||||||
|
COUTZ = $FDF6 ; cout but ignore inverse flag
|
||||||
|
|
||||||
|
ypos = $2000
|
||||||
|
xpos = $2100
|
||||||
|
textl = $2200
|
||||||
|
texth = $2300
|
||||||
|
|
||||||
|
move:
|
||||||
|
jsr HGR
|
||||||
|
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
|
jsr SETTXT
|
||||||
|
|
||||||
|
|
||||||
|
next_frame:
|
||||||
|
ldx #0
|
||||||
|
next_text:
|
||||||
|
lda xpos,X
|
||||||
|
bne not_new
|
||||||
|
|
||||||
|
new_text:
|
||||||
|
jsr random8
|
||||||
|
and #$1f
|
||||||
|
adc #$4
|
||||||
|
sta xpos,X
|
||||||
|
|
||||||
|
jsr random8
|
||||||
|
and #$f
|
||||||
|
sta ypos,X
|
||||||
|
|
||||||
|
lda #<text
|
||||||
|
sta textl,X
|
||||||
|
lda #>text
|
||||||
|
sta texth,X
|
||||||
|
|
||||||
|
not_new:
|
||||||
|
lda xpos,X
|
||||||
|
sta CH
|
||||||
|
lda ypos,X
|
||||||
|
sta CV
|
||||||
|
|
||||||
|
jsr MON_VTAB
|
||||||
|
|
||||||
|
lda BASH
|
||||||
|
clc
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta BASH
|
||||||
|
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda textl,X
|
||||||
|
sta FACL
|
||||||
|
lda texth,X
|
||||||
|
sta FACH
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
|
||||||
|
print_loop:
|
||||||
|
jsr GETCHAR
|
||||||
|
|
||||||
|
php
|
||||||
|
|
||||||
|
ora #$80
|
||||||
|
jsr STORADV
|
||||||
|
|
||||||
|
plp
|
||||||
|
|
||||||
|
bpl print_loop
|
||||||
|
|
||||||
|
big_done:
|
||||||
|
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
|
||||||
|
dec xpos,X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #20
|
||||||
|
bne next_text
|
||||||
|
|
||||||
|
flip_pages:
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
lda DRAW_PAGE
|
||||||
|
beq done_page
|
||||||
|
inx
|
||||||
|
done_page:
|
||||||
|
ldy PAGE0,X ; set display page to PAGE1 or PAGE2
|
||||||
|
|
||||||
|
eor #$4 ; flip draw page between $400/$800
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc #$4
|
||||||
|
sta BASH
|
||||||
|
lda #$0
|
||||||
|
sta BASL
|
||||||
|
|
||||||
|
clear_screen_outer:
|
||||||
|
ldy #$f8
|
||||||
|
clear_screen_inner:
|
||||||
|
lda #$A0 ; space char
|
||||||
|
sta (BASL),Y ; 100 101 110 111
|
||||||
|
dey
|
||||||
|
cpy #$FF
|
||||||
|
bne clear_screen_inner
|
||||||
|
inc BASH
|
||||||
|
lda BASH
|
||||||
|
and #$3
|
||||||
|
bne clear_screen_outer
|
||||||
|
|
||||||
|
lda #$50
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
|
jmp next_frame
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
; random8
|
||||||
|
;=============================
|
||||||
|
; 8-bit 6502 Random Number Generator
|
||||||
|
; Linear feedback shift register PRNG by White Flame
|
||||||
|
; http://codebase64.org/doku.php?id=base:small_fast_8-bit_prng
|
||||||
|
|
||||||
|
random8:
|
||||||
|
lda SEEDL ; 2
|
||||||
|
beq doEor ; 2
|
||||||
|
asl ; 1
|
||||||
|
beq noEor ; if the input was $80, skip the EOR ; 2
|
||||||
|
bcc noEor ; 2
|
||||||
|
doEor: eor #$1d ; 2
|
||||||
|
noEor: sta SEEDL ; 2
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
text:
|
||||||
|
.byte "HELL",'O'|$80
|
||||||
|
|
@ -4,11 +4,14 @@ CV = $25
|
|||||||
BASL = $28
|
BASL = $28
|
||||||
BASH = $29
|
BASH = $29
|
||||||
SEEDL = $4E
|
SEEDL = $4E
|
||||||
|
FACL = $9D
|
||||||
|
FACH = $9E
|
||||||
|
|
||||||
|
COUNT = $FE
|
||||||
DRAW_PAGE = $FF
|
DRAW_PAGE = $FF
|
||||||
|
|
||||||
PAGE0 = $C054
|
PAGE0 = $C054
|
||||||
|
GETCHAR = $D72C ; loads (FAC),Y and increments FAC
|
||||||
HGR = $F3E2
|
HGR = $F3E2
|
||||||
SETTXT = $FB39
|
SETTXT = $FB39
|
||||||
TABV = $FB5B ; store A in CV and call MON_VTAB
|
TABV = $FB5B ; store A in CV and call MON_VTAB
|
||||||
@ -24,6 +27,8 @@ COUTZ = $FDF6 ; cout but ignore inverse flag
|
|||||||
|
|
||||||
ypos = $2000
|
ypos = $2000
|
||||||
xpos = $2100
|
xpos = $2100
|
||||||
|
textl = $2200
|
||||||
|
texth = $2300
|
||||||
|
|
||||||
move:
|
move:
|
||||||
jsr HGR
|
jsr HGR
|
||||||
@ -49,6 +54,33 @@ new_text:
|
|||||||
and #$f
|
and #$f
|
||||||
sta ypos,X
|
sta ypos,X
|
||||||
|
|
||||||
|
jsr random8
|
||||||
|
and #$7f
|
||||||
|
sta COUNT
|
||||||
|
|
||||||
|
lda #$d0 ; token table at $D0D0
|
||||||
|
sta FACL
|
||||||
|
sta FACH
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
find_token_loop:
|
||||||
|
dec COUNT
|
||||||
|
bmi found_token
|
||||||
|
find_token_inner:
|
||||||
|
inc FACL
|
||||||
|
bne blargh
|
||||||
|
inc FACH
|
||||||
|
blargh:
|
||||||
|
lda (FACL),Y
|
||||||
|
bpl find_token_inner
|
||||||
|
bmi find_token_loop
|
||||||
|
|
||||||
|
found_token:
|
||||||
|
inc FACL
|
||||||
|
lda FACL
|
||||||
|
sta textl,X
|
||||||
|
lda FACH
|
||||||
|
sta texth,X
|
||||||
|
|
||||||
not_new:
|
not_new:
|
||||||
lda xpos,X
|
lda xpos,X
|
||||||
@ -63,17 +95,25 @@ not_new:
|
|||||||
adc DRAW_PAGE
|
adc DRAW_PAGE
|
||||||
sta BASH
|
sta BASH
|
||||||
|
|
||||||
|
lda textl,X
|
||||||
|
sta text_smc+1
|
||||||
|
lda texth,X
|
||||||
|
sta text_smc+2
|
||||||
|
|
||||||
txa
|
txa
|
||||||
pha
|
pha
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
print_loop:
|
print_loop:
|
||||||
lda text,X
|
|
||||||
|
text_smc:
|
||||||
|
lda $dddd,X
|
||||||
|
|
||||||
php
|
php
|
||||||
|
|
||||||
ora #$80
|
ora #$80
|
||||||
jsr STORADV
|
jsr STORADV ; trashes Y :(
|
||||||
|
|
||||||
inx
|
inx
|
||||||
|
|
||||||
plp
|
plp
|
||||||
@ -88,7 +128,7 @@ big_done:
|
|||||||
dec xpos,X
|
dec xpos,X
|
||||||
|
|
||||||
inx
|
inx
|
||||||
cpx #20
|
cpx #32
|
||||||
bne next_text
|
bne next_text
|
||||||
|
|
||||||
flip_pages:
|
flip_pages:
|
||||||
@ -122,7 +162,7 @@ clear_screen_inner:
|
|||||||
and #$3
|
and #$3
|
||||||
bne clear_screen_outer
|
bne clear_screen_outer
|
||||||
|
|
||||||
lda #$50
|
lda #200
|
||||||
jsr WAIT
|
jsr WAIT
|
||||||
|
|
||||||
jmp next_frame
|
jmp next_frame
|
||||||
@ -146,6 +186,5 @@ noEor: sta SEEDL ; 2
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
text:
|
|
||||||
.byte "HELL",'O'|$80
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user