text: add notamoon
This commit is contained in:
parent
3c91576c90
commit
cf89975085
|
@ -0,0 +1,10 @@
|
||||||
|
various programs using textmode on Apple II
|
||||||
|
|
||||||
|
+ notamoon
|
||||||
|
Moustext death star demo
|
||||||
|
|
||||||
|
+ moustext
|
||||||
|
Using mousetext on Apple IIe enhanced+
|
||||||
|
|
||||||
|
+ textflip
|
||||||
|
text flipping effect
|
|
@ -0,0 +1,32 @@
|
||||||
|
include ../../Makefile.inc
|
||||||
|
|
||||||
|
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||||
|
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||||
|
LINKERSCRIPTS = ../../linker_scripts
|
||||||
|
EMPTYDISK = ../../empty_disk/empty.dsk
|
||||||
|
|
||||||
|
all: notamoon.dsk
|
||||||
|
|
||||||
|
notamoon.dsk: HELLO NOTAMOON
|
||||||
|
cp $(EMPTYDISK) notamoon.dsk
|
||||||
|
$(DOS33) -y notamoon.dsk SAVE A HELLO
|
||||||
|
$(DOS33) -y notamoon.dsk BSAVE -a 0x70 NOTAMOON
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
HELLO: hello.bas
|
||||||
|
$(TOKENIZE) < hello.bas > HELLO
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
NOTAMOON: notamoon.o
|
||||||
|
ld65 -o NOTAMOON notamoon.o -C ./apple2_70_zp.inc
|
||||||
|
|
||||||
|
notamoon.o: notamoon.s
|
||||||
|
ca65 -o notamoon.o notamoon.s -l notamoon.lst
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o *.lst HELLO NOTAMOON notamoon.dsk
|
|
@ -0,0 +1,12 @@
|
||||||
|
MEMORY {
|
||||||
|
ZP: start = $70, size = $90, type = rw;
|
||||||
|
RAM: start = $70, size = $8E00, file = %O;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
#CODE: load = RAM, type = ro;
|
||||||
|
#RODATA: load = RAM, type = ro;
|
||||||
|
#DATA: load = RAM, type = rw;
|
||||||
|
#BSS: load = RAM, type = bss, define = yes;
|
||||||
|
ZEROPAGE: load = ZP, type = ro;
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
5 HOME
|
||||||
|
10 PRINT CHR$(4);"CATALOG"
|
|
@ -0,0 +1,174 @@
|
||||||
|
; That's not a moon....
|
||||||
|
|
||||||
|
; by Vince `deater` Weaver, dSr, Lovebyte 2021
|
||||||
|
|
||||||
|
; based on the following BASIC program
|
||||||
|
|
||||||
|
; 1HOME:POKE49167,0
|
||||||
|
; 2FORX=0TO64:POKE1024+RND(1)*999,174:NEXT
|
||||||
|
; 3FORI=0TO1:COLOR=6-I:FORJ=0TO1
|
||||||
|
; 4HLIN8,10AT6+J*10+I:HLIN7,11AT8+J*6+I:HLIN6,12AT10+J*2+I:NEXTJ,I
|
||||||
|
; 6VTAB6:HTAB11:?"()"
|
||||||
|
; 7FORX=13TO37:POKE1063+X,90:POKE1064+X,91:POKE1065+X,95
|
||||||
|
; 8FORI=1TO200:NEXT:VTAB9:HTABX:?" ":NEXT
|
||||||
|
; 9GOTO7
|
||||||
|
|
||||||
|
; 167 -- initial implementation
|
||||||
|
; 170 -- smooth grey support
|
||||||
|
; 152 -- make death star data byte array
|
||||||
|
; 148 -- make death star VTAB not hardcoded
|
||||||
|
; 144 -- move to zero page
|
||||||
|
; 136 -- index into ROM for "random" numbers
|
||||||
|
; 133 -- optimize star placement
|
||||||
|
; 131 -- note when X already 0
|
||||||
|
; 130 -- optimize tie erase
|
||||||
|
; 126 -- more optimize death star drawing
|
||||||
|
; 124 -- use the DEC CV the instruction before VTAB
|
||||||
|
|
||||||
|
; need 124 for lovebyte
|
||||||
|
|
||||||
|
; zero page
|
||||||
|
CV = $25
|
||||||
|
BASL = $28
|
||||||
|
BASH = $29
|
||||||
|
SEEDL = $4E
|
||||||
|
INL = $66
|
||||||
|
INH = $67
|
||||||
|
|
||||||
|
; soft-switches
|
||||||
|
MOUSETEXT = $C00F ; (write) to enable mouse text
|
||||||
|
|
||||||
|
; rom routines
|
||||||
|
HOME = $FC58 ; Clear the text screen
|
||||||
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
|
VTAB = $FC22 ; calc screen position in CV, put in (BASL)
|
||||||
|
VTABZ = $FC24 ; calc screen position in A, put in (BASL)
|
||||||
|
|
||||||
|
.zeropage
|
||||||
|
.globalzp grey_smc,ds_data,star_store_smc,tie_data
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Clear screen and setup
|
||||||
|
;=======================
|
||||||
|
sw:
|
||||||
|
|
||||||
|
jsr HOME ; clear the screen
|
||||||
|
sta MOUSETEXT ; enable mouse text
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Display Stars
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
ldx #64
|
||||||
|
star_loop:
|
||||||
|
lda $F100,X
|
||||||
|
eor $F300,X ; fake random
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda $F800,X
|
||||||
|
eor $F900,X ; more fake random
|
||||||
|
and #$3
|
||||||
|
ora #$4
|
||||||
|
sta star_store_smc+2
|
||||||
|
|
||||||
|
lda #'.'|$80
|
||||||
|
star_store_smc:
|
||||||
|
sta $400,Y
|
||||||
|
dex
|
||||||
|
bne star_loop
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Display Death Star
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
; ldx #0 ; X already 0
|
||||||
|
lda #9 ; count backwards
|
||||||
|
sta CV
|
||||||
|
ds_loop:
|
||||||
|
;============================
|
||||||
|
; draw grey line
|
||||||
|
;============================
|
||||||
|
grey_line:
|
||||||
|
jsr $FC20 ; this is a DEC CV line before VTAB
|
||||||
|
; jsr VTAB ; position VTAB based on CV
|
||||||
|
sec
|
||||||
|
lda #19
|
||||||
|
sbc ds_data,X
|
||||||
|
sta grey_smc+1
|
||||||
|
ldy ds_data,X
|
||||||
|
|
||||||
|
; inx
|
||||||
|
; lda ds_data,X
|
||||||
|
; sta grey_smc+1
|
||||||
|
inx
|
||||||
|
grey_loop:
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
and #$1
|
||||||
|
adc #$56 ; make it an even grey
|
||||||
|
sta (BASL),Y
|
||||||
|
iny
|
||||||
|
grey_smc:
|
||||||
|
cpy #0
|
||||||
|
bne grey_loop
|
||||||
|
; inc CV
|
||||||
|
cpx #6
|
||||||
|
bne ds_loop
|
||||||
|
|
||||||
|
; draw reflector
|
||||||
|
lda #'('+$80 ; 5,10?
|
||||||
|
sta $68A
|
||||||
|
lda #')'+$80 ; 5,11?
|
||||||
|
sta $68B
|
||||||
|
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Draw Tie Fighter
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
tie_loop:
|
||||||
|
ldy #12
|
||||||
|
|
||||||
|
tie_move:
|
||||||
|
|
||||||
|
; draw tie
|
||||||
|
|
||||||
|
ldx #2
|
||||||
|
xloop1:
|
||||||
|
lda tie_data,X
|
||||||
|
sta $428,Y ; line 8 (vtab 9)
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bpl xloop1
|
||||||
|
|
||||||
|
; delay a bit
|
||||||
|
lda #200
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
|
; erase
|
||||||
|
|
||||||
|
lda #$A0 ; space (the final frontier)
|
||||||
|
xloop2:
|
||||||
|
dey
|
||||||
|
sta $428,Y ; line 8 (vtab 9)
|
||||||
|
inx
|
||||||
|
cpx #2
|
||||||
|
bne xloop2
|
||||||
|
|
||||||
|
iny
|
||||||
|
cpy #38
|
||||||
|
bne tie_move
|
||||||
|
|
||||||
|
beq tie_loop
|
||||||
|
|
||||||
|
tie_data:
|
||||||
|
.byte 95,91,90
|
||||||
|
|
||||||
|
|
||||||
|
ds_data:
|
||||||
|
.byte 8;,11
|
||||||
|
.byte 7;,12
|
||||||
|
.byte 6;,13
|
||||||
|
.byte 6;,13
|
||||||
|
.byte 7;,12
|
||||||
|
.byte 8;,11
|
|
@ -0,0 +1,167 @@
|
||||||
|
; death star?
|
||||||
|
|
||||||
|
; by Vince `deater` Weaver, dSr, Lovebyte 2021
|
||||||
|
|
||||||
|
; based on the following BASIC program
|
||||||
|
|
||||||
|
; 1HOME:POKE49167,0
|
||||||
|
; 2FORX=0TO64:POKE1024+RND(1)*999,174:NEXT
|
||||||
|
; 3FORI=0TO1:COLOR=6-I:FORJ=0TO1
|
||||||
|
; 4HLIN8,10AT6+J*10+I:HLIN7,11AT8+J*6+I:HLIN6,12AT10+J*2+I:NEXTJ,I
|
||||||
|
; 6VTAB6:HTAB11:?"()"
|
||||||
|
; 7FORX=13TO37:POKE1063+X,90:POKE1064+X,91:POKE1065+X,95
|
||||||
|
; 8FORI=1TO200:NEXT:VTAB9:HTABX:?" ":NEXT
|
||||||
|
; 9GOTO7
|
||||||
|
|
||||||
|
; 167 -- initial implementation
|
||||||
|
; 170 -- smooth grey support
|
||||||
|
; 152 -- make death star data byte array
|
||||||
|
; 148 -- make death star VTAB not hardcoded
|
||||||
|
|
||||||
|
; zero page
|
||||||
|
CV = $25
|
||||||
|
BASL = $28
|
||||||
|
BASH = $29
|
||||||
|
SEEDL = $4E
|
||||||
|
INL = $66
|
||||||
|
INH = $67
|
||||||
|
;LINE = $68
|
||||||
|
;MAXX = $69
|
||||||
|
|
||||||
|
; soft-switches
|
||||||
|
MOUSETEXT = $C00F ; (write) to enable mouse text
|
||||||
|
|
||||||
|
; rom routines
|
||||||
|
HOME = $FC58 ; Clear the text screen
|
||||||
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
|
VTAB = $FC22 ; calc screen position in CV, put in (BASL)
|
||||||
|
VTABZ = $FC24 ; calc screen position in A, put in (BASL)
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Clear screen and setup
|
||||||
|
;=======================
|
||||||
|
sw:
|
||||||
|
|
||||||
|
jsr HOME ; clear the screen
|
||||||
|
sta MOUSETEXT ; enable mouse text
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Display Stars
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
ldx #64
|
||||||
|
ldy #0
|
||||||
|
star_loop:
|
||||||
|
jsr random8
|
||||||
|
sta BASL
|
||||||
|
|
||||||
|
jsr random8
|
||||||
|
and #$3
|
||||||
|
clc
|
||||||
|
adc #$4
|
||||||
|
sta BASH
|
||||||
|
lda #'.'|$80
|
||||||
|
sta (BASL),Y
|
||||||
|
dex
|
||||||
|
bne star_loop
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Display Death Star
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
lda #3
|
||||||
|
sta CV
|
||||||
|
ds_loop:
|
||||||
|
;============================
|
||||||
|
; draw grey line
|
||||||
|
;============================
|
||||||
|
grey_line:
|
||||||
|
jsr VTAB ; position VTAB based on CV
|
||||||
|
ldy ds_data,X
|
||||||
|
inx
|
||||||
|
lda ds_data,X
|
||||||
|
sta grey_smc+1
|
||||||
|
inx
|
||||||
|
grey_loop:
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
and #$1
|
||||||
|
adc #$56 ; make it an even grey
|
||||||
|
sta (BASL),Y
|
||||||
|
iny
|
||||||
|
grey_smc:
|
||||||
|
cpy #0
|
||||||
|
bne grey_loop
|
||||||
|
inc CV
|
||||||
|
cpx #12
|
||||||
|
bne ds_loop
|
||||||
|
|
||||||
|
; draw reflector
|
||||||
|
lda #'('+$80 ; 5,10?
|
||||||
|
sta $68A
|
||||||
|
lda #')'+$80 ; 5,11?
|
||||||
|
sta $68B
|
||||||
|
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; Draw Tie Fighter
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
tie_loop:
|
||||||
|
ldx #12
|
||||||
|
tie_move:
|
||||||
|
; draw
|
||||||
|
lda #90
|
||||||
|
sta $428,X ; line 8 (vtab 9)
|
||||||
|
lda #91
|
||||||
|
sta $429,X
|
||||||
|
lda #95
|
||||||
|
sta $42A,X
|
||||||
|
|
||||||
|
; delay a bit
|
||||||
|
lda #200
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
|
; erase
|
||||||
|
lda #' '|$80
|
||||||
|
sta $428,X
|
||||||
|
sta $429,X
|
||||||
|
sta $42A,X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #38
|
||||||
|
bne tie_move
|
||||||
|
|
||||||
|
jmp tie_loop
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
; 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
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ds_data:
|
||||||
|
.byte 8,11
|
||||||
|
.byte 7,12
|
||||||
|
.byte 6,13
|
||||||
|
.byte 6,13
|
||||||
|
.byte 7,12
|
||||||
|
.byte 8,11
|
Loading…
Reference in New Issue