draw_string
This commit is contained in:
parent
e0cc704d99
commit
d182d33b35
1 changed files with 84 additions and 57 deletions
141
mandel.s
141
mandel.s
|
@ -34,7 +34,9 @@ count_frames = $be ; u8
|
||||||
; free space $bf
|
; free space $bf
|
||||||
|
|
||||||
count_iters = $c0 ; u16
|
count_iters = $c0 ; u16
|
||||||
; free space c2-cb
|
text_col = $c2 ; u8
|
||||||
|
text_row = $c3 ; u8
|
||||||
|
; free space c4-cb
|
||||||
temp = $cc ; u16
|
temp = $cc ; u16
|
||||||
temp2 = $ce ; u16
|
temp2 = $ce ; u16
|
||||||
|
|
||||||
|
@ -140,16 +142,16 @@ KEY_0 = 50
|
||||||
|
|
||||||
strings:
|
strings:
|
||||||
str_self:
|
str_self:
|
||||||
.byte "MANDEL-6502"
|
.byte "MANDEL-6502", 0
|
||||||
str_self_end:
|
str_self_end:
|
||||||
str_speed:
|
str_speed:
|
||||||
.byte "us/iter: "
|
.byte "us/iter: ", 0
|
||||||
str_speed_end:
|
str_speed_end:
|
||||||
str_run:
|
str_run:
|
||||||
.byte " RUN"
|
.byte " RUN", 0
|
||||||
str_run_end:
|
str_run_end:
|
||||||
str_done:
|
str_done:
|
||||||
.byte "DONE"
|
.byte "DONE", 0
|
||||||
str_done_end:
|
str_done_end:
|
||||||
|
|
||||||
str_self_len = str_self_end - str_self
|
str_self_len = str_self_end - str_self
|
||||||
|
@ -1241,57 +1243,50 @@ done:
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.macro draw_text_indirect col, len, strptr
|
; in/out: column in text_col
|
||||||
; clobbers A, X
|
; in: row in text_row @fixme implement
|
||||||
.local loop
|
; in: pointer to string in INBUFF
|
||||||
.local done
|
; clobbers x/y/a/temp
|
||||||
.local padding
|
.proc draw_string
|
||||||
ldx #0
|
drawptr = temp
|
||||||
|
strptr = INBUFF
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda #.lobyte(textbuffer)
|
||||||
|
adc text_col
|
||||||
|
sta temp
|
||||||
|
lda #.hibyte(textbuffer)
|
||||||
|
adc #0
|
||||||
|
sta temp + 1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
loop:
|
loop:
|
||||||
cpx #len
|
|
||||||
beq done
|
|
||||||
txa
|
|
||||||
tay
|
|
||||||
lda (strptr),y
|
lda (strptr),y
|
||||||
pha ; save the char for terminator check
|
; if char's null, terminate c-style
|
||||||
and #$7f ; strip the high bit (terminator)
|
beq done
|
||||||
tay
|
; save the char for terminator check
|
||||||
lda char_map,y
|
pha
|
||||||
sta textbuffer + col,x
|
; strip the high bit (terminator)
|
||||||
inx
|
and #$7f
|
||||||
|
tax
|
||||||
|
lda char_map,x
|
||||||
|
sta (drawptr),y
|
||||||
|
iny
|
||||||
|
|
||||||
pla
|
pla
|
||||||
bmi padding
|
; _last_ char has high bit set in atari rom routines
|
||||||
|
bmi done
|
||||||
jmp loop
|
jmp loop
|
||||||
|
|
||||||
padding:
|
|
||||||
ldy #32 ; space
|
|
||||||
lda char_map,y
|
|
||||||
|
|
||||||
cpx #len
|
|
||||||
beq done
|
|
||||||
sta textbuffer + col,x
|
|
||||||
inx
|
|
||||||
jmp padding
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
.endmacro
|
; move the text column pointer
|
||||||
|
tya
|
||||||
|
clc
|
||||||
|
adc text_col
|
||||||
|
sta text_col
|
||||||
|
|
||||||
.macro draw_text col, len, cstr
|
rts
|
||||||
; clobbers A, X
|
.endproc
|
||||||
.local loop
|
|
||||||
.local done
|
|
||||||
ldx #0
|
|
||||||
loop:
|
|
||||||
cpx #len
|
|
||||||
beq done
|
|
||||||
ldy cstr,x
|
|
||||||
lda char_map,y
|
|
||||||
sta textbuffer + col,x
|
|
||||||
inx
|
|
||||||
jmp loop
|
|
||||||
done:
|
|
||||||
.endmacro
|
|
||||||
|
|
||||||
.proc vblank_handler
|
.proc vblank_handler
|
||||||
inc count_frames
|
inc count_frames
|
||||||
|
@ -1506,8 +1501,24 @@ zero_byte_loop:
|
||||||
|
|
||||||
.proc status_bar
|
.proc status_bar
|
||||||
; Status bar
|
; Status bar
|
||||||
draw_text 0, str_self_len, str_self
|
|
||||||
draw_text 40 - str_run_len, str_run_len, str_run
|
lda #0
|
||||||
|
sta text_col
|
||||||
|
lda #0
|
||||||
|
sta text_row
|
||||||
|
lda #.lobyte(str_self)
|
||||||
|
sta INBUFF
|
||||||
|
lda #.hibyte(str_self)
|
||||||
|
sta INBUFF + 1
|
||||||
|
jsr draw_string
|
||||||
|
|
||||||
|
lda #(40 - str_run_len)
|
||||||
|
sta text_col
|
||||||
|
lda #.lobyte(str_run)
|
||||||
|
sta INBUFF
|
||||||
|
lda #.hibyte(str_run)
|
||||||
|
sta INBUFF + 1
|
||||||
|
jsr draw_string
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
@ -1758,13 +1769,19 @@ update_status:
|
||||||
clc
|
clc
|
||||||
jsr IFP
|
jsr IFP
|
||||||
|
|
||||||
; convert to ASCII in INBUFF
|
lda #speed_start
|
||||||
|
sta text_col
|
||||||
|
lda #0
|
||||||
|
sta text_row
|
||||||
|
lda #.lobyte(str_speed)
|
||||||
|
sta INBUFF
|
||||||
|
lda #.hibyte(str_speed)
|
||||||
|
sta INBUFF + 1
|
||||||
|
jsr draw_string
|
||||||
|
|
||||||
|
; convert to ASCII in INBUFF and print
|
||||||
jsr FASC
|
jsr FASC
|
||||||
|
jsr draw_string
|
||||||
; print the first 6 digits
|
|
||||||
draw_text speed_start, str_speed_len, str_speed
|
|
||||||
draw_text_indirect speed_start + str_speed_len, speed_precision, INBUFF
|
|
||||||
|
|
||||||
skipped:
|
skipped:
|
||||||
|
|
||||||
; sx += fill_level[fill_masks] + 1
|
; sx += fill_level[fill_masks] + 1
|
||||||
|
@ -1812,7 +1829,17 @@ fill_loop_done:
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
; finished
|
; finished
|
||||||
draw_text 40 - str_done_len, str_done_len, str_done
|
|
||||||
|
lda #(40 - str_done_len)
|
||||||
|
sta text_col
|
||||||
|
lda #0
|
||||||
|
sta text_row
|
||||||
|
lda #.lobyte(str_done)
|
||||||
|
sta INBUFF
|
||||||
|
lda #.hibyte(str_done)
|
||||||
|
sta INBUFF + 1
|
||||||
|
jsr draw_string
|
||||||
|
|
||||||
jsr keycheck
|
jsr keycheck
|
||||||
beq loop
|
beq loop
|
||||||
jmp main_loop
|
jmp main_loop
|
||||||
|
|
Loading…
Reference in a new issue