mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-08-17 00:28:59 +00:00
178 lines
2.2 KiB
ArmAsm
178 lines
2.2 KiB
ArmAsm
; Sort of plotting (X^Y) % 9
|
|
; but in hires
|
|
|
|
; by Vince `deater` Weaver <vince@deater.net>
|
|
|
|
GBASL = $26
|
|
GBASH = $27
|
|
HGRPAGE = $E6
|
|
HGR_BITS = $1C
|
|
HGR_X = $E0
|
|
HGR_Y = $E2
|
|
HGR_COLOR = $E4
|
|
HGR_HORIZ = $E5
|
|
|
|
OUR_MASK = $FB
|
|
YY = $FC
|
|
SAVEX = $FD
|
|
TEMP = $FE
|
|
OLD = $FF
|
|
|
|
PAGE0 = $C054
|
|
PAGE1 = $C055
|
|
|
|
COLORTBL = $F6F6
|
|
|
|
HGR2 = $F3D8
|
|
HGR = $F3E2
|
|
HCLR = $F3F2
|
|
HPOSN = $F411
|
|
HPLOT0 = $F457 ; plot at (Y,X), (A)
|
|
HPLOT1 = $F45A ; skip the HPOSN call
|
|
COLOR_SHIFT = $F47E ; shift color for odd/even Y (0..7 or 7..13)
|
|
MOVE_RIGHT = $F48A ; move next plot location one to the right
|
|
|
|
HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X
|
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
|
|
|
|
|
mod9_lookup = $1000
|
|
|
|
|
|
;==============================
|
|
; mod9 start
|
|
;==============================
|
|
mod9_start:
|
|
jsr make_mod9_lookup ; setup modulo 9 lookup table
|
|
; could inline it here
|
|
|
|
jsr HGR2 ; clear page1
|
|
; A is 0 after
|
|
|
|
sta OUR_MASK
|
|
|
|
mod9_reset:
|
|
ldy #0
|
|
sty YY
|
|
|
|
mod9_yloop:
|
|
|
|
ldy #0
|
|
ldx #0 ; XX = 0
|
|
lda YY ; Y co-ord
|
|
jsr HPOSN ; set cursor position to (Y,X), (A)
|
|
|
|
ldx #0
|
|
|
|
tiny_xloop:
|
|
|
|
stx SAVEX
|
|
|
|
;===============here
|
|
|
|
txa
|
|
eor YY
|
|
tax
|
|
lda mod9_lookup,X
|
|
|
|
|
|
;=================
|
|
|
|
ldx OUR_MASK
|
|
bne weird_pattern
|
|
|
|
cmp #0
|
|
beq store_color
|
|
|
|
lda #3
|
|
store_color:
|
|
jmp color_ready
|
|
|
|
|
|
|
|
|
|
weird_pattern:
|
|
|
|
and OUR_MASK
|
|
|
|
color_ready:
|
|
tax
|
|
|
|
tya
|
|
lsr ; check even or odd
|
|
php
|
|
|
|
lda COLORTBL,X
|
|
sta HGR_BITS
|
|
|
|
plp
|
|
bcc no_shift
|
|
|
|
jsr COLOR_SHIFT ; if odd then color shift
|
|
|
|
no_shift:
|
|
|
|
jsr HPLOT1 ; plot at current position
|
|
|
|
jsr MOVE_RIGHT ; move current position right (trashes A)
|
|
|
|
ldx SAVEX ; restore X
|
|
|
|
;==================================
|
|
|
|
inx
|
|
bne tiny_xloop ; repeat until X=256
|
|
|
|
;==================================
|
|
|
|
inc YY ; repeat until Y=192
|
|
ldy YY
|
|
cpy #192
|
|
bne mod9_yloop
|
|
|
|
;==================================
|
|
|
|
change_pattern:
|
|
inc OUR_MASK ; change pattern
|
|
lda OUR_MASK
|
|
|
|
check_4:
|
|
cmp #4
|
|
bne check_9
|
|
lda #8
|
|
sta OUR_MASK
|
|
|
|
check_9:
|
|
cmp #9
|
|
bne done_check
|
|
lda #0
|
|
sta OUR_MASK
|
|
|
|
done_check:
|
|
jmp mod9_reset
|
|
|
|
|
|
|
|
;=============================
|
|
; setup the mod9 lookup table
|
|
;=============================
|
|
make_mod9_lookup:
|
|
ldy #0
|
|
m9_xreset:
|
|
ldx #0
|
|
m9_loop:
|
|
txa
|
|
sta mod9_lookup,Y
|
|
|
|
iny
|
|
beq m9_done
|
|
|
|
inx
|
|
cpx #9
|
|
beq m9_xreset
|
|
bne m9_loop
|
|
|
|
m9_done:
|
|
rts
|
|
|